ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpLWRldmljZXMtY2Npc3MKaW5kZXggMGE5MmE3Yy4uNGYyOWU1ZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCkBAIC0zMSwzICszMSwzMSBAQAogS2VybmVsIFZlcnNpb246IDIuNi4zMAogQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCiBEZXNjcmlwdGlvbjoJQSBzeW1ib2xpYyBsaW5rIHRvIC9zeXMvYmxvY2svY2Npc3MhY1hkWQorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9yZXNjYW4KK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246CTIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJS2lja3Mgb2YgYSByZXNjYW4gb2YgdGhlIGNvbnRyb2xsZXIgdG8gZGlzY292ZXIgbG9naWNhbAorCQlkcml2ZSB0b3BvbG9neSBjaGFuZ2VzLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL2x1bmlkCitEYXRlOgkJQXVndXN0IDIwMDkKK0tlcm5lbCBWZXJzaW9uOiAyLjYuMzEKK0NvbnRhY3Q6CWlzc19zdG9yYWdlZGV2QGhwLmNvbQorRGVzY3JpcHRpb246CURpc3BsYXlzIHRoZSA4LWJ5dGUgTFVOIElEIHVzZWQgdG8gYWRkcmVzcyBsb2dpY2FsCisJCWRyaXZlIFkgb2YgY29udHJvbGxlciBYLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL3JhaWRfbGV2ZWwKK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246IDIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJRGlzcGxheXMgdGhlIFJBSUQgbGV2ZWwgb2YgbG9naWNhbCBkcml2ZSBZIG9mCisJCWNvbnRyb2xsZXIgWC4KKworV2hlcmU6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy88ZGV2Pi9jY2lzc1gvY1hkWS91c2FnZV9jb3VudAorRGF0ZToJCUF1Z3VzdCAyMDA5CitLZXJuZWwgVmVyc2lvbjogMi42LjMxCitDb250YWN0Oglpc3Nfc3RvcmFnZWRldkBocC5jb20KK0Rlc2NyaXB0aW9uOglEaXNwbGF5cyB0aGUgdXNhZ2UgY291bnQgKG51bWJlciBvZiBvcGVucykgb2YgbG9naWNhbCBkcml2ZSBZCisJCW9mIGNvbnRyb2xsZXIgWC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYy13dXNiaGMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMtd3VzYmhjCmluZGV4IDQ2YjY2YWQxLi40ZTgxMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXdiX3JjLXd1c2JoYwpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYy93dXNiX2NoaWQKIERhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKIEtlcm5lbFZlcnNpb246ICAyLjYuMjcKIENvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpAQCAtOSw3ICs5LDcgQEAKIAogICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KIAotV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vd3VzYmhjL3d1c2JfdHJ1c3RfdGltZW91dAogRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAogS2VybmVsVmVyc2lvbjogIDIuNi4yNwogQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtY2FjaGVfZGlzYWJsZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzViYjRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKLUtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KLQotCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4Ci0JCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCi0JCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwM2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0wLDAgKzEsMTU2IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvCitEYXRlOgkJcHJlLWdpdCBoaXN0b3J5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCUEgY29sbGVjdGlvbiBvZiBib3RoIGdsb2JhbCBhbmQgaW5kaXZpZHVhbCBDUFUgYXR0cmlidXRlcworCisJCUluZGl2aWR1YWwgQ1BVIGF0dHJpYnV0ZXMgYXJlIGNvbnRhaW5lZCBpbiBzdWJkaXJlY3RvcmllcworCQluYW1lZCBieSB0aGUga2VybmVsJ3MgbG9naWNhbCBDUFUgbnVtYmVyLCBlLmcuOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9zY2hlZF9tY19wb3dlcl9zYXZpbmdzCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzCitEYXRlOgkJSnVuZSAyMDA2CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGFuZCBhZGp1c3QgdGhlIGtlcm5lbCdzIG11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQuCisKKwkJUG9zc2libGUgdmFsdWVzIGFyZToKKworCQkwIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKwkJMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisJCTIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKKwkJICAgIHNhdmluZ3MKKworCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworCQlpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworCQlzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyBpcyBkZXBlbmRlbnQgdXBvbiBTQ0hFRF9TTVQsIHdoaWNoCisJCWlzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCisJCVRoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCisJCXRoYXQgb25lIGZpbGUgbWF5IGJlIHByZXNlbnQgd2l0aG91dCB0aGUgb3RoZXIuCisKKwkJSW50cm9kdWNlZCBieSBnaXQgY29tbWl0IDVjNDViZjI3LgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4CisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29mZmxpbmUKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQKK0RhdGU6CQlEZWNlbWJlciAyMDA4CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUNQVSB0b3BvbG9neSBmaWxlcyB0aGF0IGRlc2NyaWJlIGtlcm5lbCBsaW1pdHMgcmVsYXRlZCB0bworCQlob3RwbHVnLiBCcmllZmx5OgorCisJCWtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIGNwdSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwKKwkJY29uZmlndXJhdGlvbi4KKworCQlvZmZsaW5lOiBjcHVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgorCQlIT1RQTFVHR0VEIG9mZiBvciBleGNlZWQgdGhlIGxpbWl0IG9mIGNwdXMgYWxsb3dlZCBieSB0aGUKKwkJa2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXggYWJvdmUpLgorCisJCW9ubGluZTogY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZC4KKworCQlwb3NzaWJsZTogY3B1cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBjYW4gYmUKKwkJYnJvdWdodCBvbmxpbmUgaWYgdGhleSBhcmUgcHJlc2VudC4KKworCQlwcmVzZW50OiBjcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbgorCQl0aGUgc3lzdGVtLgorCisJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL25vZGUKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IG1haWxpbmcgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIE5VTUEgbm9kZSBhIENQVSBiZWxvbmdzIHRvCisKKwkJV2hlbiBDT05GSUdfTlVNQSBpcyBlbmFibGVkLCBhIHN5bWJvbGljIGxpbmsgdGhhdCBwb2ludHMKKwkJdG8gdGhlIGNvcnJlc3BvbmRpbmcgTlVNQSBub2RlIGRpcmVjdG9yeS4KKworCQlGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzeW1saW5rIGlzIGNyZWF0ZWQgZm9yIGNwdTQyCisJCWluIE5VTUEgbm9kZSAyOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyL25vZGUyIC0+IC4uLy4uL25vZGUvbm9kZTIKKworCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS9jb3JlX2lkCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvdG9wb2xvZ3kvY29yZV9zaWJsaW5ncworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L2NvcmVfc2libGluZ3NfbGlzdAorCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3MKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3NfbGlzdAorRGF0ZToJCURlY2VtYmVyIDIwMDgKK0NvbnRhY3Q6CUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoJQ1BVIHRvcG9sb2d5IGZpbGVzIHRoYXQgZGVzY3JpYmUgYSBsb2dpY2FsIENQVSdzIHJlbGF0aW9uc2hpcAorCQl0byBvdGhlciBjb3JlcyBhbmQgdGhyZWFkcyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWNrYWdlLgorCisJCU9uZSBjcHUjIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHBlciBsb2dpY2FsIENQVSBpbiB0aGUgc3lzdGVtLAorCQllLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyLy4KKworCQlCcmllZmx5LCB0aGUgZmlsZXMgYWJvdmUgYXJlOgorCisJCWNvcmVfaWQ6IHRoZSBDUFUgY29yZSBJRCBvZiBjcHUjLiBUeXBpY2FsbHkgaXQgaXMgdGhlCisJCWhhcmR3YXJlIHBsYXRmb3JtJ3MgaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4KKwkJVGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKworCQljb3JlX3NpYmxpbmdzOiBpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZSB0aHJlYWRzCisJCXdpdGhpbiB0aGUgc2FtZSBwaHlzaWNhbF9wYWNrYWdlX2lkLgorCisJCWNvcmVfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiB0aGUgbG9naWNhbCBDUFUKKwkJbnVtYmVycyB3aXRoaW4gdGhlIHNhbWUgcGh5c2ljYWxfcGFja2FnZV9pZCBhcyBjcHUjLgorCisJCXBoeXNpY2FsX3BhY2thZ2VfaWQ6IHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1Iy4gVHlwaWNhbGx5CisJCWNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgc29ja2V0IG51bWJlciwgYnV0IHRoZSBhY3R1YWwgdmFsdWUKKwkJaXMgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKKwkJdGhyZWFkX3NpYmxpbmdzOiBpbnRlcm5lbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZQorCQl0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZSBjb3JlIGFzIGNwdSMKKworCQl0aHJlYWRfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiBjcHUjJ3MgaGFyZHdhcmUKKwkJdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUgY29yZSBhcyBjcHUjCisKKwkJU2VlIERvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlL2N1cnJlbnRfZHJpdmVyCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvY3VycmVudF9nb3Zlcm5lcl9ybworRGF0ZToJCVNlcHRlbWJlciAyMDA3CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGNwdWlkbGUgcG9saWN5IGFuZCBtZWNoYW5pc20KKworCQlWYXJpb3VzIENQVXMgdG9kYXkgc3VwcG9ydCBtdWx0aXBsZSBpZGxlIGxldmVscyB0aGF0IGFyZQorCQlkaWZmZXJlbnRpYXRlZCBieSB2YXJ5aW5nIGV4aXQgbGF0ZW5jaWVzIGFuZCBwb3dlcgorCQljb25zdW1wdGlvbiBkdXJpbmcgaWRsZS4KKworCQlJZGxlIHBvbGljeSAoZ292ZXJub3IpIGlzIGRpZmZlcmVudGlhdGVkIGZyb20gaWRsZSBtZWNoYW5pc20KKwkJKGRyaXZlcikKKworCQljdXJyZW50X2RyaXZlcjogZGlzcGxheXMgY3VycmVudCBpZGxlIG1lY2hhbmlzbQorCisJCWN1cnJlbnRfZ292ZXJub3Jfcm86IGRpc3BsYXlzIGN1cnJlbnQgaWRsZSBwb2xpY3kKKworCQlTZWUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9jcHVpZGxlLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitXaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAorRGF0ZTogICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCitEZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAorCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKKwkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQorCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQorCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKKwkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKKwkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0CisJCWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMxMTE2LVB1YmxpYy1HSC1CS0RHXzMuMjBfMi00LTA5LnBkZgorCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKKwkJY2FjaGUgaW5kZXggZGlzYWJsZS4KK1VzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggYjdmOWQzYi4uNzI2NTFmNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0yMzIsNyArMjMyLDcgQEAKIFdoZW4gc2VuZGluZyBwYXRjaGVzIHRvIExpbnVzLCBhbHdheXMgZm9sbG93IHN0ZXAgIzcuCiAKIExhcmdlIGNoYW5nZXMgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgbWFpbGluZyBsaXN0cywgYW5kIHNvbWUKLW1haW50YWluZXJzLiAgSWYgeW91ciBwYXRjaCwgdW5jb21wcmVzc2VkLCBleGNlZWRzIDQwIGtCIGluIHNpemUsCittYWludGFpbmVycy4gIElmIHlvdXIgcGF0Y2gsIHVuY29tcHJlc3NlZCwgZXhjZWVkcyAzMDAga0IgaW4gc2l6ZSwKIGl0IGlzIHByZWZlcnJlZCB0aGF0IHlvdSBzdG9yZSB5b3VyIHBhdGNoIG9uIGFuIEludGVybmV0LWFjY2Vzc2libGUKIHNlcnZlciwgYW5kIHByb3ZpZGUgaW5zdGVhZCBhIFVSTCAobGluaykgcG9pbnRpbmcgdG8geW91ciBwYXRjaC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vdGNtLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZDkzNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKQEAgLTAsMCArMSwxNDcgQEAKK0FSTSBUQ00gKFRpZ2h0bHktQ291cGxlZCBNZW1vcnkpIGhhbmRsaW5nIGluIExpbnV4CistLS0tCitXcml0dGVuIGJ5IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisKK1NvbWUgQVJNIFNvQzpzIGhhdmUgYSBzby1jYWxsZWQgVENNIChUaWdodGx5LUNvdXBsZWQgTWVtb3J5KS4KK1RoaXMgaXMgdXN1YWxseSBqdXN0IGEgZmV3ICg0LTY0KSBLaUIgb2YgUkFNIGluc2lkZSB0aGUgQVJNCitwcm9jZXNzb3IuCisKK0R1ZSB0byBiZWluZyBlbWJlZGRlZCBpbnNpZGUgdGhlIENQVSBUaGUgVENNIGhhcyBhCitIYXJ2YXJkLWFyY2hpdGVjdHVyZSwgc28gdGhlcmUgaXMgYW4gSVRDTSAoaW5zdHJ1Y3Rpb24gVENNKQorYW5kIGEgRFRDTSAoZGF0YSBUQ00pLiBUaGUgRFRDTSBjYW4gbm90IGNvbnRhaW4gYW55CitpbnN0cnVjdGlvbnMsIGJ1dCB0aGUgSVRDTSBjYW4gYWN0dWFsbHkgY29udGFpbiBkYXRhLgorVGhlIHNpemUgb2YgRFRDTSBvciBJVENNIGlzIG1pbmltdW0gNEtpQiBzbyB0aGUgdHlwaWNhbAorbWluaW11bSBjb25maWd1cmF0aW9uIGlzIDRLaUIgSVRDTSBhbmQgNEtpQiBEVENNLgorCitBUk0gQ1BVOnMgaGF2ZSBzcGVjaWFsIHJlZ2lzdGVycyB0byByZWFkIG91dCBzdGF0dXMsIHBoeXNpY2FsCitsb2NhdGlvbiBhbmQgc2l6ZSBvZiBUQ00gbWVtb3JpZXMuIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorZGVmaW5lcyBhIENQVUlEX1RDTSByZWdpc3RlciB0aGF0IHlvdSBjYW4gcmVhZCBvdXQgZnJvbSB0aGUKK3N5c3RlbSBjb250cm9sIGNvcHJvY2Vzc29yLiBEb2N1bWVudGF0aW9uIGZyb20gQVJNIGNhbiBiZSBmb3VuZAorYXQgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbSwgc2VhcmNoIGZvciAiVENNIFN0YXR1cyBSZWdpc3RlciIKK3RvIHNlZSBkb2N1bWVudHMgZm9yIGFsbCBDUFVzLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgeW91IGNhbgorZGV0ZXJtaW5lIGlmIElUQ00gKGJpdCAwKSBhbmQvb3IgRFRDTSAoYml0IDE2KSBpcyBwcmVzZW50IGluIHRoZQorbWFjaGluZS4KKworVGhlcmUgaXMgZnVydGhlciBhIFRDTSByZWdpb24gcmVnaXN0ZXIgKHNlYXJjaCBmb3IgIlRDTSBSZWdpb24KK1JlZ2lzdGVycyIgYXQgdGhlIEFSTSBzaXRlKSB0aGF0IGNhbiByZXBvcnQgYW5kIG1vZGlmeSB0aGUgbG9jYXRpb24KK3NpemUgb2YgVENNIG1lbW9yaWVzIGF0IHJ1bnRpbWUuIFRoaXMgaXMgdXNlZCB0byByZWFkIG91dCBhbmQgbW9kaWZ5CitUQ00gbG9jYXRpb24gYW5kIHNpemUuIE5vdGljZSB0aGF0IHRoaXMgaXMgbm90IGEgTU1VIHRhYmxlOiB5b3UKK2FjdHVhbGx5IG1vdmUgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBUQ00gYXJvdW5kLiBBdCB0aGUKK3BsYWNlIHlvdSBwdXQgaXQsIGl0IHdpbGwgbWFzayBhbnkgdW5kZXJseWluZyBSQU0gZnJvbSB0aGUKK0NQVSBzbyBpdCBpcyB1c3VhbGx5IHdpc2Ugbm90IHRvIG92ZXJsYXAgYW55IHBoeXNpY2FsIFJBTSB3aXRoCit0aGUgVENNLgorCitUaGUgVENNIG1lbW9yeSBjYW4gdGhlbiBiZSByZW1hcHBlZCB0byBhbm90aGVyIGFkZHJlc3MgYWdhaW4gdXNpbmcKK3RoZSBNTVUsIGJ1dCBub3RpY2UgdGhhdCB0aGUgVENNIGlmIG9mdGVuIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZQordGhlIE1NVSBpcyB0dXJuZWQgb2ZmLiBUbyBhdm9pZCBjb25mdXNpb24gdGhlIGN1cnJlbnQgTGludXgKK2ltcGxlbWVudGF0aW9uIHdpbGwgbWFwIHRoZSBUQ00gMSB0byAxIGZyb20gcGh5c2ljYWwgdG8gdmlydHVhbAorbWVtb3J5IGluIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIG1hY2hpbmUuCisKK1RDTSBpcyB1c2VkIGZvciBhIGZldyB0aGluZ3M6CisKKy0gRklRIGFuZCBvdGhlciBpbnRlcnJ1cHQgaGFuZGxlcnMgdGhhdCBuZWVkIGRldGVybWluaXN0aWMKKyAgdGltaW5nIGFuZCBjYW5ub3Qgd2FpdCBmb3IgY2FjaGUgbWlzc2VzLgorCistIElkbGUgbG9vcHMgd2hlcmUgYWxsIGV4dGVybmFsIFJBTSBpcyBzZXQgdG8gc2VsZi1yZWZyZXNoCisgIHJldGVudGlvbiBtb2RlLCBzbyBvbmx5IG9uLWNoaXAgUkFNIGlzIGFjY2Vzc2libGUgYnkKKyAgdGhlIENQVSBhbmQgdGhlbiB3ZSBoYW5nIGluc2lkZSBJVENNIHdhaXRpbmcgZm9yIGFuCisgIGludGVycnVwdC4KKworLSBPdGhlciBvcGVyYXRpb25zIHdoaWNoIGltcGxpZXMgc2h1dHRpbmcgb2ZmIG9yIHJlY29uZmlndXJpbmcKKyAgdGhlIGV4dGVybmFsIFJBTSBjb250cm9sbGVyLgorCitUaGVyZSBpcyBhbiBpbnRlcmZhY2UgZm9yIHVzaW5nIFRDTSBvbiB0aGUgQVJNIGFyY2hpdGVjdHVyZQoraW4gPGFzbS90Y20uaD4uIFVzaW5nIHRoaXMgaW50ZXJmYWNlIGl0IGlzIHBvc3NpYmxlIHRvOgorCistIERlZmluZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiBJVENNIGFuZCBEVENNLgorCistIFRhZyBmdW5jdGlvbnMgdG8gYmUgY29tcGlsZWQgaW50byBJVENNLgorCistIFRhZyBkYXRhIGFuZCBjb25zdGFudHMgdG8gYmUgYWxsb2NhdGVkIHRvIERUQ00gYW5kIElUQ00uCisKKy0gSGF2ZSB0aGUgcmVtYWluaW5nIFRDTSBSQU0gYWRkZWQgdG8gYSBzcGVjaWFsCisgIGFsbG9jYXRpb24gcG9vbCB3aXRoIGdlbl9wb29sX2NyZWF0ZSgpIGFuZCBnZW5fcG9vbF9hZGQoKQorICBhbmQgcHJvdmljZSB0Y21fYWxsb2MoKSBhbmQgdGNtX2ZyZWUoKSBmb3IgdGhpcworICBtZW1vcnkuIFN1Y2ggYSBoZWFwIGlzIGdyZWF0IGZvciB0aGluZ3MgbGlrZSBzYXZpbmcKKyAgZGV2aWNlIHN0YXRlIHdoZW4gc2h1dHRpbmcgb2ZmIGRldmljZSBwb3dlciBkb21haW5zLgorCitBIG1hY2hpbmUgdGhhdCBoYXMgVENNIG1lbW9yeSBzaGFsbCBzZWxlY3QgSEFWRV9UQ00gaW4KK2FyY2gvYXJtL0tjb25maWcgZm9yIGl0c2VsZiwgYW5kIHRoZW4gdGhlCityZXN0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdpbGwgZGVwZW5kIG9uIHRoZSBwaHlzaWNhbAorbG9jYXRpb24gYW5kIHNpemUgb2YgSVRDTSBhbmQgRFRDTSB0byBiZSBkZWZpbmVkIGluCittYWNoL21lbW9yeS5oIGZvciB0aGUgbWFjaGluZS4gQ29kZSB0aGF0IG5lZWRzIHRvIHVzZQorVENNIHNoYWxsICNpbmNsdWRlIDxhc20vdGNtLmg+IElmIHRoZSBUQ00gaXMgbm90IGxvY2F0ZWQKK2F0IHRoZSBwbGFjZSBnaXZlbiBpbiBtZW1vcnkuaCBpdCB3aWxsIGJlIG1vdmVkIHVzaW5nCit0aGUgVENNIFJlZ2lvbiByZWdpc3RlcnMuCisKK0Z1bmN0aW9ucyB0byBnbyBpbnRvIGl0Y20gY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21mdW5jIGZvbyhpbnQgYmFyKTsKKworVmFyaWFibGVzIHRvIGdvIGludG8gZHRjbSBjYW4gYmUgdGFnZ2VkIGxpa2UgdGhpczoKK2ludCBfX3RjbWRhdGEgZm9vOworCitDb25zdGFudHMgY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21jb25zdCBmb287CisKK1RvIHB1dCBhc3NlbWJsZXIgaW50byBUQ00ganVzdCB1c2UKKy5zZWN0aW9uICIudGNtLnRleHQiIG9yIC5zZWN0aW9uICIudGNtLmRhdGEiCityZXNwZWN0aXZlbHkuCisKK0V4YW1wbGUgY29kZToKKworI2luY2x1ZGUgPGFzbS90Y20uaD4KKworLyogVW5pbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y212YXI7CisvKiBJbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y21hc3NpZ25lZCA9IDB4MkJBREJBQkVVOworLyogQ29uc3RhbnQgKi8KK3N0YXRpYyBjb25zdCB1MzIgX190Y21jb25zdCB0Y21jb25zdCA9IDB4Q0FGRUJBQkVVOworCitzdGF0aWMgdm9pZCBfX3RjbWxvY2FsZnVuYyB0Y21fdG9fdGNtKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQorCQl0Y212YXIgKys7Cit9CisKK3N0YXRpYyB2b2lkIF9fdGNtZnVuYyBoZWxsb190Y20odm9pZCkKK3sKKwkvKiBTb21lIGFic3RyYWN0IGNvZGUgdGhhdCBydW5zIGluIElUQ00gKi8KKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJdGNtdmFyICsrOworCX0KKwl0Y21fdG9fdGNtKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X3RjbSh2b2lkKQoreworCXUzMiAqdGNtZW07CisJaW50IGk7CisKKwloZWxsb190Y20oKTsKKwlwcmludGsoIkhlbGxvIFRDTSBleGVjdXRlZCBmcm9tIElUQ00gUkFNXG4iKTsKKworCXByaW50aygiVENNIHZhcmlhYmxlIGZyb20gdGVzdHJ1bjogJXUgQCAlcFxuIiwgdGNtdmFyLCAmdGNtdmFyKTsKKwl0Y212YXIgPSAweERFQURCRUVGVTsKKwlwcmludGsoIlRDTSB2YXJpYWJsZTogMHgleCBAICVwXG4iLCB0Y212YXIsICZ0Y212YXIpOworCisJcHJpbnRrKCJUQ00gYXNzaWduZWQgdmFyaWFibGU6IDB4JXggQCAlcFxuIiwgdGNtYXNzaWduZWQsICZ0Y21hc3NpZ25lZCk7CisKKwlwcmludGsoIlRDTSBjb25zdGFudDogMHgleCBAICVwXG4iLCB0Y21jb25zdCwgJnRjbWNvbnN0KTsKKworCS8qIEFsbG9jYXRlIHNvbWUgVENNIG1lbW9yeSBmcm9tIHRoZSBwb29sICovCisJdGNtZW0gPSB0Y21fYWxsb2MoMjApOworCWlmICh0Y21lbSkgeworCQlwcmludGsoIlRDTSBBbGxvY2F0ZWQgMjAgYnl0ZXMgb2YgVENNIEAgJXBcbiIsIHRjbWVtKTsKKwkJdGNtZW1bMF0gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bMV0gPSAweDJCQURCQUJFVTsKKwkJdGNtZW1bMl0gPSAweENBRkVCQUJFVTsKKwkJdGNtZW1bM10gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bNF0gPSAweDJCQURCQUJFVTsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJCXByaW50aygiVENNIHRjbWVtWyVkXSA9ICUwOHhcbiIsIGksIHRjbWVtW2ldKTsKKwkJdGNtX2ZyZWUodGNtZW0sIDIwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKaW5kZXggNDU1ZDRlNi4uMGIzM2JmZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApAQCAtMjI3LDcgKzIyNywxNCBAQAogRWFjaCBjZ3JvdXAgaXMgcmVwcmVzZW50ZWQgYnkgYSBkaXJlY3RvcnkgaW4gdGhlIGNncm91cCBmaWxlIHN5c3RlbQogY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpbGVzIGRlc2NyaWJpbmcgdGhhdCBjZ3JvdXA6CiAKLSAtIHRhc2tzOiBsaXN0IG9mIHRhc2tzIChieSBwaWQpIGF0dGFjaGVkIHRvIHRoYXQgY2dyb3VwCisgLSB0YXNrczogbGlzdCBvZiB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byB0aGF0IGNncm91cC4gIFRoaXMgbGlzdAorICAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgc29ydGVkLiAgV3JpdGluZyBhIHRocmVhZCBpZCBpbnRvIHRoaXMgZmlsZQorICAgbW92ZXMgdGhlIHRocmVhZCBpbnRvIHRoaXMgY2dyb3VwLgorIC0gY2dyb3VwLnByb2NzOiBsaXN0IG9mIHRnaWRzIGluIHRoZSBjZ3JvdXAuICBUaGlzIGxpc3QgaXMgbm90CisgICBndWFyYW50ZWVkIHRvIGJlIHNvcnRlZCBvciBmcmVlIG9mIGR1cGxpY2F0ZSB0Z2lkcywgYW5kIHVzZXJzcGFjZQorICAgc2hvdWxkIHNvcnQvdW5pcXVpZnkgdGhlIGxpc3QgaWYgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4KKyAgIFdyaXRpbmcgYSB0Z2lkIGludG8gdGhpcyBmaWxlIG1vdmVzIGFsbCB0aHJlYWRzIHdpdGggdGhhdCB0Z2lkIGludG8KKyAgIHRoaXMgY2dyb3VwLgogIC0gbm90aWZ5X29uX3JlbGVhc2UgZmxhZzogcnVuIHRoZSByZWxlYXNlIGFnZW50IG9uIGV4aXQ/CiAgLSByZWxlYXNlX2FnZW50OiB0aGUgcGF0aCB0byB1c2UgZm9yIHJlbGVhc2Ugbm90aWZpY2F0aW9ucyAodGhpcyBmaWxlCiAgICBleGlzdHMgaW4gdGhlIHRvcCBjZ3JvdXAgb25seSkKQEAgLTM3NCw3ICszODEsNyBAQAogCiBJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgc2V2ZXJhbCBmaWxlczoKICMgbHMKLW5vdGlmeV9vbl9yZWxlYXNlIHRhc2tzCitjZ3JvdXAucHJvY3Mgbm90aWZ5X29uX3JlbGVhc2UgdGFza3MKIChwbHVzIHdoYXRldmVyIGZpbGVzIGFkZGVkIGJ5IHRoZSBhdHRhY2hlZCBzdWJzeXN0ZW1zKQogCiBOb3cgYXR0YWNoIHlvdXIgc2hlbGwgdG8gdGhpcyBjZ3JvdXA6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CmluZGV4IGI0MWYzZTUuLmYxYzVjNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CkBAIC0xLDE1ICsxLDI4IEBACiAKLUV4cG9ydCBjcHUgdG9wb2xvZ3kgaW5mbyB2aWEgc3lzZnMuIEl0ZW1zIChhdHRyaWJ1dGVzKSBhcmUgc2ltaWxhcgorRXhwb3J0IENQVSB0b3BvbG9neSBpbmZvIHZpYSBzeXNmcy4gSXRlbXMgKGF0dHJpYnV0ZXMpIGFyZSBzaW1pbGFyCiB0byAvcHJvYy9jcHVpbmZvLgogCiAxKSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQ6Ci1yZXByZXNlbnQgdGhlIHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgIGNwdSBYOworCisJcGh5c2ljYWwgcGFja2FnZSBpZCBvZiBjcHVYLiBUeXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYSBwaHlzaWNhbAorCXNvY2tldCBudW1iZXIsIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIGlzIGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0KKwlkZXBlbmRlbnQuCisKIDIpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvY29yZV9pZDoKLXJlcHJlc2VudCB0aGUgY3B1IGNvcmUgaWQgdG8gY3B1IFg7CisKKwl0aGUgQ1BVIGNvcmUgSUQgb2YgY3B1WC4gVHlwaWNhbGx5IGl0IGlzIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSdzCisJaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4gIFRoZSBhY3R1YWwgdmFsdWUgaXMKKwlhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKwogMykgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS90aHJlYWRfc2libGluZ3M6Ci1yZXByZXNlbnQgdGhlIHRocmVhZCBzaWJsaW5ncyB0byBjcHUgWCBpbiB0aGUgc2FtZSBjb3JlOworCisJaW50ZXJuZWwga2VybmVsIG1hcCBvZiBjcHVYJ3MgaGFyZHdhcmUgdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUKKwljb3JlIGFzIGNwdVgKKwogNCkgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS9jb3JlX3NpYmxpbmdzOgotcmVwcmVzZW50IHRoZSB0aHJlYWQgc2libGluZ3MgdG8gY3B1IFggaW4gdGhlIHNhbWUgcGh5c2ljYWwgcGFja2FnZTsKKworCWludGVybmFsIGtlcm5lbCBtYXAgb2YgY3B1WCdzIGhhcmR3YXJlIHRocmVhZHMgd2l0aGluIHRoZSBzYW1lCisJcGh5c2ljYWxfcGFja2FnZV9pZC4KIAogVG8gaW1wbGVtZW50IGl0IGluIGFuIGFyY2hpdGVjdHVyZS1uZXV0cmFsIHdheSwgYSBuZXcgc291cmNlIGZpbGUsCiBkcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYywgaXMgdG8gZXhwb3J0IHRoZSA0IGF0dHJpYnV0ZXMuCkBAIC0zMiwzMiArNDUsMzIgQEAKIDMpIHRocmVhZF9zaWJsaW5nczoganVzdCB0aGUgZ2l2ZW4gQ1BVCiA0KSBjb3JlX3NpYmxpbmdzOiBqdXN0IHRoZSBnaXZlbiBDUFUKIAotQWRkaXRpb25hbGx5LCBjcHUgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgdW5kZXIKK0FkZGl0aW9uYWxseSwgQ1BVIHRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHVuZGVyCiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdSBhbmQgaW5jbHVkZXMgdGhlc2UgZmlsZXMuICBUaGUgaW50ZXJuYWwKIHNvdXJjZSBmb3IgdGhlIG91dHB1dCBpcyBpbiBicmFja2V0cyAoIltdIikuCiAKLSAgICBrZXJuZWxfbWF4OiB0aGUgbWF4aW11bSBjcHUgaW5kZXggYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAga2VybmVsX21heDogdGhlIG1heGltdW0gQ1BVIGluZGV4IGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgogCQlbTlJfQ1BVUy0xXQogCi0gICAgb2ZmbGluZToJY3B1cyB0aGF0IGFyZSBub3Qgb25saW5lIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4KKyAgICBvZmZsaW5lOglDUFVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgogCQlIT1RQTFVHR0VEIG9mZiAoc2VlIGNwdS1ob3RwbHVnLnR4dCkgb3IgZXhjZWVkIHRoZSBsaW1pdAotCQlvZiBjcHVzIGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIChrZXJuZWxfbWF4CisJCW9mIENQVXMgYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXgKIAkJYWJvdmUpLiBbfmNwdV9vbmxpbmVfbWFzayArIGNwdXMgPj0gTlJfQ1BVU10KIAotICAgIG9ubGluZToJY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQorICAgIG9ubGluZToJQ1BVcyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQogCi0gICAgcG9zc2libGU6CWNwdXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCisgICAgcG9zc2libGU6CUNQVXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCiAJCWJyb3VnaHQgb25saW5lIGlmIHRoZXkgYXJlIHByZXNlbnQuIFtjcHVfcG9zc2libGVfbWFza10KIAotICAgIHByZXNlbnQ6CWNwdXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQorICAgIHByZXNlbnQ6CUNQVXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQogCQlzeXN0ZW0uIFtjcHVfcHJlc2VudF9tYXNrXQogCiBUaGUgZm9ybWF0IGZvciB0aGUgYWJvdmUgb3V0cHV0IGlzIGNvbXBhdGlibGUgd2l0aCBjcHVsaXN0X3BhcnNlKCkKIFtzZWUgPGxpbnV4L2NwdW1hc2suaD5dLiAgU29tZSBleGFtcGxlcyBmb2xsb3cuCiAKLUluIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IGNwdXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKK0luIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IENQVXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKIHRoZSBrZXJuZWwgbWF4IHdoaWNoIGlzIGxpbWl0ZWQgdG8gMC4uMzEgYnkgdGhlIE5SX0NQVVMgY29uZmlnIG9wdGlvbgotYmVpbmcgMzIuICBOb3RlIGFsc28gdGhhdCBjcHVzIDIgYW5kIDQtMzEgYXJlIG5vdCBvbmxpbmUgYnV0IGNvdWxkIGJlCitiZWluZyAzMi4gIE5vdGUgYWxzbyB0aGF0IENQVXMgMiBhbmQgNC0zMSBhcmUgbm90IG9ubGluZSBidXQgY291bGQgYmUKIGJyb3VnaHQgb25saW5lIGFzIHRoZXkgYXJlIGJvdGggcHJlc2VudCBhbmQgcG9zc2libGUuCiAKICAgICAga2VybmVsX21heDogMzEKQEAgLTY3LDggKzgwLDggQEAKICAgICAgICAgcHJlc2VudDogMC0zMQogCiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBOUl9DUFVTIGNvbmZpZyBvcHRpb24gaXMgMTI4LCBidXQgdGhlIGtlcm5lbCB3YXMKLXN0YXJ0ZWQgd2l0aCBwb3NzaWJsZV9jcHVzPTE0NC4gIFRoZXJlIGFyZSA0IGNwdXMgaW4gdGhlIHN5c3RlbSBhbmQgY3B1Mgotd2FzIG1hbnVhbGx5IHRha2VuIG9mZmxpbmUgKGFuZCBpcyB0aGUgb25seSBjcHUgdGhhdCBjYW4gYmUgYnJvdWdodAorc3RhcnRlZCB3aXRoIHBvc3NpYmxlX2NwdXM9MTQ0LiAgVGhlcmUgYXJlIDQgQ1BVcyBpbiB0aGUgc3lzdGVtIGFuZCBjcHUyCit3YXMgbWFudWFsbHkgdGFrZW4gb2ZmbGluZSAoYW5kIGlzIHRoZSBvbmx5IENQVSB0aGF0IGNhbiBiZSBicm91Z2h0CiBvbmxpbmUuKQogCiAgICAgIGtlcm5lbF9tYXg6IDEyNwpAQCAtNzgsNCArOTEsNCBAQAogICAgICAgICBwcmVzZW50OiAwLTMKIAogU2VlIGNwdS1ob3RwbHVnLnR4dCBmb3IgdGhlIHBvc3NpYmxlX2NwdXM9TlVNIGtlcm5lbCBzdGFydCBwYXJhbWV0ZXIKLWFzIHdlbGwgYXMgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjcHVtYXNrJ3MuCithcyB3ZWxsIGFzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY3B1bWFza3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dAppbmRleCA1OWE5MWU1Li42MTFmNWE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKQEAgLTY0LDE0ICs2NCwxNCBAQAogCiBCZXJuaGFyZCBLYWluZGwgZW5oYW5jZWQgZmlyZXNjb3BlIHRvIHN1cHBvcnQgYWNjZXNzaW5nIDY0LWJpdCBtYWNoaW5lcwogZnJvbSAzMi1iaXQgZmlyZXNjb3BlIGFuZCB2aWNlIHZlcnNhOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVzY29wZS0wLjIuMi50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXNjb3BlLTAuMi4yLnRhci5iejIKIAogYW5kIGhlIGltcGxlbWVudGVkIGZhc3Qgc3lzdGVtIGR1bXAgKGFscGhhIHZlcnNpb24gLSByZWFkIFJFQURNRS50eHQpOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVkdW1wLTAuMS50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZWR1bXAtMC4xLnRhci5iejIKIAogVGhlcmUgaXMgYWxzbyBhIGdkYiBwcm94eSBmb3IgZmlyZXdpcmUgd2hpY2ggYWxsb3dzIHRvIHVzZSBnZGIgdG8gYWNjZXNzCiBkYXRhIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGZyb20gc3ltYm9scyBmb3VuZCBieSBnZGIgaW4gdm1saW51eDoKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlcHJveHktMC4zMy50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXByb3h5LTAuMzMudGFyLmJ6MgogCiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBnZGIgcHJveHkgKGZpcmVwcm94eS0wLjM0KSBjYW4gY29tbXVuaWNhdGUgKG5vdAogeWV0IHN0YWJsZSkgd2l0aCBrZ2RiIG92ZXIgYW4gbWVtb3J5LWJhc2VkIGNvbW11bmljYXRpb24gbW9kdWxlIChrZ2Rib20pLgpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIE5vdGVzCiAtLS0tLQotRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGZ0cDovL2Z0cC5zdXNlLmRlL3ByaXZhdGUvYmsvZmlyZXdpcmUvZG9jcworRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvCiAKIEZpcmVXaXJlIGlzIGEgdHJhZGVtYXJrIG9mIEFwcGxlIEluYy4gLSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG86CiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZpcmVXaXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggODlhNDdiNS4uYmM2OTNmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNDE4LDYgKzQxOCwxNCBAQAogV2h5OglTaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdXNlcnNwYWNlLCBwb2xpY3kgZGFlbW9uLgogV2hvOglKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJQ09ORklHX0lOT1RJRlkKK1doZW46CTIuNi4zMworV2h5OglsYXN0IHVzZXIgKGF1ZGl0KSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgbmV3ZXIgbW9yZSBnZW5lcmljCisJYW5kIG1vcmUgZWFzaWx5IG1haW50YWluZWQgZnNub3RpZnkgc3Vic3lzdGVtCitXaG86CUVyaWMgUGFyaXMgPGVwYXJpc0ByZWRoYXQuY29tPgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWxvY2tfcG9saWN5X3J3c2VtXyogYW5kIHVubG9ja19wb2xpY3lfcndzZW1fKiB3aWxsIG5vdCBiZQpAQCAtNDUxLDMgKzQ1OSwzMyBAQAogCXdpbGwgYWxzbyBhbGxvdyBtYWtpbmcgQUxTQSBPU1MgZW11bGF0aW9uIGluZGVwZW5kZW50IG9mCiAJc291bmRfY29yZS4gIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmUgYnJva2VuIHRoZW4gdG9vLgogV2hvOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJU3VwcG9ydCBmb3IgVk13YXJlJ3MgZ3Vlc3QgcGFyYXZpcnR1bGlhemF0aW9uIHRlY2huaXF1ZSBbVk1JXSB3aWxsIGJlCisJZHJvcHBlZC4KK1doZW46CTIuNi4zNyBvciBlYXJsaWVyLgorV2h5OglXaXRoIHRoZSByZWNlbnQgaW5ub3ZhdGlvbnMgaW4gQ1BVIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB0ZWNobm9sb2dpZXMKKwlmcm9tIEludGVsIGFuZCBBTUQsIFZNd2FyZSByYW4gYSBmZXcgZXhwZXJpbWVudHMgdG8gY29tcGFyZSB0aGVzZQorCXRlY2huaXF1ZXMgdG8gZ3Vlc3QgcGFyYXZpcnR1YWxpemF0aW9uIHRlY2huaXF1ZSBvbiBWTXdhcmUncyBwbGF0Zm9ybS4KKwlUaGVzZSBoYXJkd2FyZSBhc3Npc3RlZCB2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWVzIGhhdmUgb3V0cGVyZm9ybWVkIHRoZQorCXBlcmZvcm1hbmNlIGJlbmVmaXRzIHByb3ZpZGVkIGJ5IFZNSSBpbiBtb3N0IG9mIHRoZSB3b3JrbG9hZHMuIFZNd2FyZQorCWV4cGVjdHMgdGhhdCB0aGVzZSBoYXJkd2FyZSBmZWF0dXJlcyB3aWxsIGJlIHViaXF1aXRvdXMgaW4gYSBjb3VwbGUgb2YKKwl5ZWFycywgYXMgYSByZXN1bHQsIFZNd2FyZSBoYXMgc3RhcnRlZCBhIHBoYXNlZCByZXRpcmVtZW50IG9mIHRoaXMKKwlmZWF0dXJlIGZyb20gdGhlIGh5cGVydmlzb3IuIFdlIHdpbGwgYmUgcmVtb3ZpbmcgdGhpcyBmZWF0dXJlIGZyb20gdGhlCisJS2VybmVsIHRvby4gUmlnaHQgbm93IHdlIGFyZSB0YXJnZXRpbmcgMi42LjM3IGJ1dCBjYW4gcmV0aXJlIGVhcmxpZXIgaWYKKwl0ZWNobmljYWwgcmVhc29ucyAocmVhZCBvcHBvcnR1bml0eSB0byByZW1vdmUgbWFqb3IgY2h1bmsgb2YgcHZvcHMpCisJYXJpc2UuCisKKwlQbGVhc2Ugbm90ZSB0aGF0IFZNSSBoYXMgYWx3YXlzIGJlZW4gYW4gb3B0aW1pemF0aW9uIGFuZCBub24tVk1JIGtlcm5lbHMKKwlzdGlsbCB3b3JrIGZpbmUgb24gVk13YXJlJ3MgcGxhdGZvcm0uCisJTGF0ZXN0IHZlcnNpb25zIG9mIFZNd2FyZSdzIHByb2R1Y3Qgd2hpY2ggc3VwcG9ydCBWTUkgYXJlLAorCVdvcmtzdGF0aW9uIDcuMCBhbmQgVlNwaGVyZSA0LjAgb24gRVNYIHNpZGUsIGZ1dHVyZSBtYWludGFpbmVuY2UKKwlyZWxlYXNlcyBmb3IgdGhlc2UgcHJvZHVjdHMgd2lsbCBjb250aW51ZSBzdXBwb3J0aW5nIFZNSS4KKworCUZvciBtb3JlIGRldGFpbHMgYWJvdXQgVk1JIHJldGlyZW1lbnQgdGFrZSBhIGxvb2sgYXQgdGhpcywKKwlodHRwOi8vYmxvZ3Mudm13YXJlLmNvbS9ndWVzdG9zZ3VpZGUvMjAwOS8wOS92bWktcmV0aXJlbWVudC5odG1sCisKK1dobzoJQWxvayBOIEthdGFyaWEgPGFrYXRhcmlhQHZtd2FyZS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CmluZGV4IDU3MGY5YmQuLjA1ZDVjZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dApAQCAtMTIzLDEwICsxMjMsMTggQEAKIAogc2I9bgkJCVVzZSBhbHRlcm5hdGUgc3VwZXJibG9jayBhdCB0aGlzIGxvY2F0aW9uLgogCi1xdW90YQotbm9xdW90YQotZ3JwcXVvdGEKLXVzcnF1b3RhCitxdW90YQkJCVRoZXNlIG9wdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIGZpbGVzeXN0ZW0uIFRoZXkKK25vcXVvdGEJCQlhcmUgdXNlZCBvbmx5IGJ5IHF1b3RhIHRvb2xzIHRvIHJlY29nbml6ZSB2b2x1bWVzCitncnBxdW90YQkJd2hlcmUgcXVvdGEgc2hvdWxkIGJlIHR1cm5lZCBvbi4gU2VlIGRvY3VtZW50YXRpb24KK3VzcnF1b3RhCQlpbiB0aGUgcXVvdGEtdG9vbHMgcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KKworanFmbXQ9PHF1b3RhIHR5cGU+CVRoZXNlIG9wdGlvbnMgdGVsbCBmaWxlc3lzdGVtIGRldGFpbHMgYWJvdXQgcXVvdGEKK3VzcmpxdW90YT08ZmlsZT4Jc28gdGhhdCBxdW90YSBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvcGVybHkgdXBkYXRlZAorZ3JwanF1b3RhPTxmaWxlPglkdXJpbmcgam91cm5hbCByZXBsYXkuIFRoZXkgcmVwbGFjZSB0aGUgYWJvdmUKKwkJCXF1b3RhIG9wdGlvbnMuIFNlZSBkb2N1bWVudGF0aW9uIGluIHRoZSBxdW90YS10b29scworCQkJcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KIAogYmgJCSgqKQlleHQzIGFzc29jaWF0ZXMgYnVmZmVyIGhlYWRzIHRvIGRhdGEgcGFnZXMgdG8KIG5vYmgJCQkoYSkgY2FjaGUgZGlzayBibG9jayBtYXBwaW5nIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCAxOGI1ZWM4Li42ZDk0ZTA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTEzNCw5ICsxMzQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgIAltb3VudCBvcHRpb25zICJybyxub2xvYWQiIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKIAkJICAgICAJd3JpdGVzIHRvIHRoZSBmaWxlc3lzdGVtLgogCitqb3VybmFsX2NoZWNrc3VtCUVuYWJsZSBjaGVja3N1bW1pbmcgb2YgdGhlIGpvdXJuYWwgdHJhbnNhY3Rpb25zLgorCQkJVGhpcyB3aWxsIGFsbG93IHRoZSByZWNvdmVyeSBjb2RlIGluIGUyZnNjayBhbmQgdGhlCisJCQlrZXJuZWwgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gaW4gdGhlIGtlcm5lbC4gIEl0IGlzIGEKKwkJCWNvbXBhdGlibGUgY2hhbmdlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgb2xkZXIga2VybmVscy4KKwogam91cm5hbF9hc3luY19jb21taXQJQ29tbWl0IGJsb2NrIGNhbiBiZSB3cml0dGVuIHRvIGRpc2sgd2l0aG91dCB3YWl0aW5nCiAJCQlmb3IgZGVzY3JpcHRvciBibG9ja3MuIElmIGVuYWJsZWQgb2xkZXIga2VybmVscyBjYW5ub3QKLQkJCW1vdW50IHRoZSBkZXZpY2UuCisJCQltb3VudCB0aGUgZGV2aWNlLiBUaGlzIHdpbGwgZW5hYmxlICdqb3VybmFsX2NoZWNrc3VtJworCQkJaW50ZXJuYWxseS4KIAogam91cm5hbD11cGRhdGUJCVVwZGF0ZSB0aGUgZXh0NCBmaWxlIHN5c3RlbSdzIGpvdXJuYWwgdG8gdGhlIGN1cnJlbnQKIAkJCWZvcm1hdC4KQEAgLTI4Miw5ICsyODgsMTYgQEAKIAkJCXRvIHVzZSBmb3IgYWxsb2NhdGlvbiBzaXplIGFuZCBhbGlnbm1lbnQuIEZvciBSQUlENS82CiAJCQlzeXN0ZW1zIHRoaXMgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgZGF0YQogCQkJZGlza3MgKiAgUkFJRCBjaHVuayBzaXplIGluIGZpbGUgc3lzdGVtIGJsb2Nrcy4KLWRlbGFsbG9jCSgqKQlEZWZlcnJpbmcgYmxvY2sgYWxsb2NhdGlvbiB1bnRpbCB3cml0ZS1vdXQgdGltZS4KLW5vZGVsYWxsb2MJCURpc2FibGUgZGVsYXllZCBhbGxvY2F0aW9uLiBCbG9ja3MgYXJlIGFsbG9jYXRpb24KLQkJCXdoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHRvIHBhZ2UgY2FjaGUuCisKK2RlbGFsbG9jCSgqKQlEZWZlciBibG9jayBhbGxvY2F0aW9uIHVudGlsIGp1c3QgYmVmb3JlIGV4dDQKKwkJCXdyaXRlcyBvdXQgdGhlIGJsb2NrKHMpIGluIHF1ZXN0aW9uLiAgVGhpcworCQkJYWxsb3dzIGV4dDQgdG8gYmV0dGVyIGFsbG9jYXRpb24gZGVjaXNpb25zCisJCQltb3JlIGVmZmljaWVudGx5Lgorbm9kZWxhbGxvYwkJRGlzYWJsZSBkZWxheWVkIGFsbG9jYXRpb24uICBCbG9ja3MgYXJlIGFsbG9jYXRlZAorCQkJd2hlbiB0aGUgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdG8gdGhlCisJCQlwYWdlIGNhY2hlLCBlaXRoZXIgdmlhIHRoZSB3cml0ZSgyKSBzeXN0ZW0gY2FsbAorCQkJb3Igd2hlbiBhbiBtbWFwJ2VkIHBhZ2Ugd2hpY2ggd2FzIHByZXZpb3VzbHkKKwkJCXVuYWxsb2NhdGVkIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lLgogCiBtYXhfYmF0Y2hfdGltZT11c2VjCU1heGltdW0gYW1vdW50IG9mIHRpbWUgZXh0NCBzaG91bGQgd2FpdCBmb3IKIAkJCWFkZGl0aW9uYWwgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRvIGJlIGJhdGNoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBiNWFlZTc4Li4yYzQ4Zjk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTExMTMsNyArMTExMyw2IEBACiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KICBGaWxlICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBtYl9ncm91cHMgICAgICAgZGV0YWlscyBvZiBtdWx0aWJsb2NrIGFsbG9jYXRvciBidWRkeSBjYWNoZSBvZiBmcmVlIGJsb2NrcwotIG1iX2hpc3RvcnkgICAgICBtdWx0aWJsb2NrIGFsbG9jYXRpb24gaGlzdG9yeQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKaW5kZXggYjU4Yjg0Yi4uZWVkNTIwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJIHdpbm50OiBlbXVsYXRlIHRoZSBXaW5kb3dzIE5UIHJ1bGUgZm9yIGRpc3BsYXkvY3JlYXRlLgogCQkgbWl4ZWQ6IGVtdWxhdGUgdGhlIFdpbmRvd3MgTlQgcnVsZSBmb3IgZGlzcGxheSwKIAkJCWVtdWxhdGUgdGhlIFdpbmRvd3MgOTUgcnVsZSBmb3IgY3JlYXRlLgotCQkgRGVmYXVsdCBzZXR0aW5nIGlzIGBsb3dlcicuCisJCSBEZWZhdWx0IHNldHRpbmcgaXMgYG1peGVkJy4KIAogdHo9VVRDICAgICAgICAtLSBJbnRlcnByZXQgdGltZXN0YW1wcyBhcyBVVEMgcmF0aGVyIHRoYW4gbG9jYWwgdGltZS4KICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGNvbnZlcnNpb24gb2YgdGltZXN0YW1wcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IDg0ZWIyNjguLmNiOGEzYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTEsNSArMSw1IEBACiBVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAotTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMyCiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogCiBMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgpAQCAtNDAsNiArNDAsMTMgQEAKIHRoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KIG5vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGZsZXhpYmxlIGFycmF5cyBhdCBjb21waWxlIHRpbWUgd2l0aDoKKworICAgIERFRklORV9GTEVYX0FSUkFZKG5hbWUsIGVsZW1lbnRfc2l6ZSwgdG90YWwpOworCitUaGlzIG1hY3JvIHdpbGwgcmVzdWx0IGluIGEgZGVmaW5pdGlvbiBvZiBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBuYW1lOyB0aGUKK2VsZW1lbnQgc2l6ZSBhbmQgdG90YWwgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhdCBjb21waWxlIHRpbWUuCisKIFN0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCkBAIC03NiwxNiArODMsMzAgQEAKIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYmFjayBhIHZhbGlkIHBvaW50ZXIgZm9yIGFuIGVsZW1lbnQgd2hpY2gKIGhhcyBuZXZlciBiZWVuIHN0b3JlZCBpbiB0aGUgYXJyYXkuICBNZW1vcnkgZm9yIGFycmF5IGVsZW1lbnRzIGlzIGFsbG9jYXRlZAogb25lIHBhZ2UgYXQgYSB0aW1lOyBhIHNpbmdsZSBhbGxvY2F0aW9uIGNvdWxkIHByb3ZpZGUgbWVtb3J5IGZvciBzZXZlcmFsCi1hZGphY2VudCBlbGVtZW50cy4gIFRoZSBmbGV4aWJsZSBhcnJheSBjb2RlIGRvZXMgbm90IGtub3cgaWYgYSBzcGVjaWZpYwotZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuOyBpdCBvbmx5IGtub3dzIGlmIHRoZSBhc3NvY2lhdGVkIG1lbW9yeSBpcwotcHJlc2VudC4gIFNvIGEgZmxleF9hcnJheV9nZXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgd2hpY2ggd2FzIG5ldmVyIHN0b3JlZAotaW4gdGhlIGFycmF5IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gcmFuZG9tIGRhdGEuICBJZiB0aGUKLWNhbGxlciBkb2VzIG5vdCBoYXZlIGEgc2VwYXJhdGUgd2F5IHRvIGtub3cgd2hpY2ggZWxlbWVudHMgd2VyZSBhY3R1YWxseQotc3RvcmVkLCBpdCBtaWdodCBiZSB3aXNlLCBhdCBsZWFzdCwgdG8gYWRkIEdGUF9aRVJPIHRvIHRoZSBmbGFncyBhcmd1bWVudAotdG8gZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB6ZXJvZWQuCithZGphY2VudCBlbGVtZW50cy4gIEZsZXhpYmxlIGFycmF5IGVsZW1lbnRzIGFyZSBub3JtYWxseSBpbml0aWFsaXplZCB0byB0aGUKK3ZhbHVlIEZMRVhfQVJSQVlfRlJFRSAoZGVmaW5lZCBhcyAweDZjIGluIDxsaW51eC9wb2lzb24uaD4pLCBzbyBlcnJvcnMKK2ludm9sdmluZyB0aGF0IG51bWJlciBwcm9iYWJseSByZXN1bHQgZnJvbSB1c2Ugb2YgdW5zdG9yZWQgYXJyYXkgZW50cmllcy4KK05vdGUgdGhhdCwgaWYgYXJyYXkgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX1pFUk8sIHRoZXkgd2lsbCBiZQoraW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhpcyBwb2lzb25pbmcgd2lsbCBub3QgaGFwcGVuLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKLXRob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKK0luZGl2aWR1YWwgZWxlbWVudHMgaW4gdGhlIGFycmF5IGNhbiBiZSBjbGVhcmVkIHdpdGg6CisKKyAgICBpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ2l2ZW4gZWxlbWVudCB0byBGTEVYX0FSUkFZX0ZSRUUgYW5kIHJldHVybgoremVyby4gIElmIHN0b3JhZ2UgZm9yIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciB0aGUgYXJyYXksCitmbGV4X2FycmF5X2NsZWFyKCkgd2lsbCByZXR1cm4gLUVJTlZBTCBpbnN0ZWFkLiAgTm90ZSB0aGF0IGNsZWFyaW5nIGFuCitlbGVtZW50IGRvZXMgbm90IHJlbGVhc2UgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0OyB0byByZWR1Y2UgdGhlCithbGxvY2F0ZWQgc2l6ZSBvZiBhbiBhcnJheSwgY2FsbDoKKworICAgIGludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgYWN0dWFsbHkgZnJlZWQuCitUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHNjYW5uaW5nIHRoZSBhcnJheSBmb3IgcGFnZXMgY29udGFpbmluZyBub3RoaW5nIGJ1dAorRkxFWF9BUlJBWV9GUkVFIGJ5dGVzLCBzbyAoMSkgaXQgY2FuIGJlIGV4cGVuc2l2ZSwgYW5kICgyKSBpdCB3aWxsIG5vdCB3b3JrCitpZiB0aGUgYXJyYXkncyBwYWdlcyBhcmUgYWxsb2NhdGVkIHdpdGggX19HRlBfWkVSTy4KKworSXQgaXMgcG9zc2libGUgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSB3aXRoIGEgY2FsbCB0bzoKIAogICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNSBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNQppbmRleCAyZTZhMjFlLi5jMTk2YTE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyMTUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1CkBAIC0yMiwxMiArMjIsMTMgQEAKIC0tLS0tLS0tLS0tCiAKIFRoaXMgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBMVEM0MjE1IGRldmljZXMsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHNvbWUKLW9mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgbmVlZCB0byB1c2UKLXRoZSAiZm9yY2UiIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdG8gZmluZCB0aGUgZGV2aWNlLgorb2YgdGhlIHBvc3NpYmxlIGFkZHJlc3NlcyBhcmUgdW5mcmllbmRseSB0byBwcm9iaW5nLiBZb3Ugd2lsbCBoYXZlIHRvCitpbnN0YW50aWF0ZSB0aGUgZGV2aWNlcyBleHBsaWNpdGx5LgogCiBFeGFtcGxlOiB0aGUgZm9sbG93aW5nIHdpbGwgbG9hZCB0aGUgZHJpdmVyIGZvciBhbiBMVEM0MjE1IGF0IGFkZHJlc3MgMHg0NAogb24gSTJDIGJ1cyAjMDoKLSQgbW9kcHJvYmUgbHRjNDIxNSBmb3JjZT0wLDB4NDQKKyQgbW9kcHJvYmUgbHRjNDIxNQorJCBlY2hvIGx0YzQyMTUgMHg0NCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIAogCiBTeXNmcyBlbnRyaWVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUKaW5kZXggYmFlN2EzYS4uMDI4MzhhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjQ1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDI0NQpAQCAtMjMsMTIgKzIzLDEzIEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBmb3IgTFRDNDI0NSBkZXZpY2VzLCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBzb21lCi1vZiB0aGUgcG9zc2libGUgYWRkcmVzc2VzIGFyZSB1bmZyaWVuZGx5IHRvIHByb2JpbmcuIFlvdSB3aWxsIG5lZWQgdG8gdXNlCi10aGUgImZvcmNlIiBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgZHJpdmVyIHdoZXJlIHRvIGZpbmQgdGhlIGRldmljZS4KK29mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgaGF2ZSB0bworaW5zdGFudGlhdGUgdGhlIGRldmljZXMgZXhwbGljaXRseS4KIAogRXhhbXBsZTogdGhlIGZvbGxvd2luZyB3aWxsIGxvYWQgdGhlIGRyaXZlciBmb3IgYW4gTFRDNDI0NSBhdCBhZGRyZXNzIDB4MjMKIG9uIEkyQyBidXMgIzE6Ci0kIG1vZHByb2JlIGx0YzQyNDUgZm9yY2U9MSwweDIzCiskIG1vZHByb2JlIGx0YzQyNDUKKyQgZWNobyBsdGM0MjQ1IDB4MjMgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMS9uZXdfZGV2aWNlCiAKIAogU3lzZnMgZW50cmllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQppbmRleCBkY2JkNTAyLi44MmRlZjg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQpAQCAtMzUzLDEwICszNTMsMjAgQEAKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwogCi1wb3dlclsxLSpdX2F2ZXJhZ2VfaW50ZXJ2YWwJUG93ZXIgdXNlIGF2ZXJhZ2luZyBpbnRlcnZhbAorcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsCVBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwuICBBIHBvbGwKKwkJCQlub3RpZmljYXRpb24gaXMgc2VudCB0byB0aGlzIGZpbGUgaWYgdGhlCisJCQkJaGFyZHdhcmUgY2hhbmdlcyB0aGUgYXZlcmFnaW5nIGludGVydmFsLgogCQkJCVVuaXQ6IG1pbGxpc2Vjb25kcwogCQkJCVJXCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbF9tYXgJTWF4aW11bSBwb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsCisJCQkJVW5pdDogbWlsbGlzZWNvbmRzCisJCQkJUk8KKworcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsX21pbglNaW5pbXVtIHBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwKKwkJCQlVbml0OiBtaWxsaXNlY29uZHMKKwkJCQlSTworCiBwb3dlclsxLSpdX2F2ZXJhZ2VfaGlnaGVzdAlIaXN0b3JpY2FsIGF2ZXJhZ2UgbWF4aW11bSBwb3dlciB1c2UKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwpAQCAtMzY1LDYgKzM3NSwxOCBAQAogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9tYXgJCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0bworCQkJCXBvd2VyWzEtKl1fYXZlcmFnZSB3aGVuIHBvd2VyIHVzZQorCQkJCXJpc2VzIGFib3ZlIHRoaXMgdmFsdWUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9hdmVyYWdlX21pbgkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvCisJCQkJcG93ZXJbMS0qXV9hdmVyYWdlIHdoZW4gcG93ZXIgdXNlCisJCQkJc2lua3MgYmVsb3cgdGhpcyB2YWx1ZS4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSVworCiBwb3dlclsxLSpdX2lucHV0CQlJbnN0YW50YW5lb3VzIHBvd2VyIHVzZQogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCkBAIC0zODEsNiArNDAzLDM5IEBACiAJCQkJYXZlcmFnZV9oaWdoZXN0IGFuZCBhdmVyYWdlX2xvd2VzdC4KIAkJCQlXTwogCitwb3dlclsxLSpdX2FjY3VyYWN5CQlBY2N1cmFjeSBvZiB0aGUgcG93ZXIgbWV0ZXIuCisJCQkJVW5pdDogUGVyY2VudAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fYWxhcm0JCTEgaWYgdGhlIHN5c3RlbSBpcyBkcmF3aW5nIG1vcmUgcG93ZXIgdGhhbiB0aGUKKwkJCQljYXAgYWxsb3dzOyAwIG90aGVyd2lzZS4gIEEgcG9sbCBub3RpZmljYXRpb24gaXMKKwkJCQlzZW50IHRvIHRoaXMgZmlsZSB3aGVuIHRoZSBwb3dlciB1c2UgZXhjZWVkcyB0aGUKKwkJCQljYXAuICBUaGlzIGZpbGUgb25seSBhcHBlYXJzIGlmIHRoZSBjYXAgaXMga25vd24KKwkJCQl0byBiZSBlbmZvcmNlZCBieSBoYXJkd2FyZS4KKwkJCQlSTworCitwb3dlclsxLSpdX2NhcAkJCUlmIHBvd2VyIHVzZSByaXNlcyBhYm92ZSB0aGlzIGxpbWl0LCB0aGUKKwkJCQlzeXN0ZW0gc2hvdWxkIHRha2UgYWN0aW9uIHRvIHJlZHVjZSBwb3dlciB1c2UuCisJCQkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvIHRoaXMgZmlsZSBpZiB0aGUKKwkJCQljYXAgaXMgY2hhbmdlZCBieSB0aGUgaGFyZHdhcmUuICBUaGUgKl9jYXAKKwkJCQlmaWxlcyBvbmx5IGFwcGVhciBpZiB0aGUgY2FwIGlzIGtub3duIHRvIGJlCisJCQkJZW5mb3JjZWQgYnkgaGFyZHdhcmUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9jYXBfaHlzdAkJTWFyZ2luIG9mIGh5c3RlcmVzaXMgYnVpbHQgYXJvdW5kIGNhcHBpbmcgYW5kCisJCQkJbm90aWZpY2F0aW9uLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fY2FwX21heAkJTWF4aW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fY2FwX21pbgkJTWluaW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKICoqKioqKioqKioKICogRW5lcmd5ICoKICoqKioqKioqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CmluZGV4IGM1YjM3YzUuLmFjNTQwYzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApAQCAtOCw3ICs4LDcgQEAKICAgICBEYXRhc2hlZXQ6IE9ubHkgYXZhaWxhYmxlIHZpYSBOREEgZnJvbSBTZXJ2ZXJXb3JrcwogICAqIEFUSSBJWFAyMDAsIElYUDMwMCwgSVhQNDAwLCBTQjYwMCwgU0I3MDAgYW5kIFNCODAwIHNvdXRoYnJpZGdlcwogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQotICAqIEFNRCBTQjkwMAorICAqIEFNRCBIdWRzb24tMgogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQogICAqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyAoU01TQykgU0xDOTBFNjYgKFZpY3Rvcnk2Nikgc291dGhicmlkZ2UKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgU01TQyB3ZWJzaXRlIGh0dHA6Ly93d3cuc21zYy5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBiL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwppbmRleCBjNzQwYjdiLi5lODk0OTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzCkBAIC0xODgsNyArMTg4LDcgQEAKIGRlbGV0ZWQuCiAKIEV4YW1wbGU6Ci0jIGVjaG8gZWVwcm9tIDB4NTAgPiAvc3lzL2NsYXNzL2kyYy1hZGFwdGVyL2kyYy0zL25ld19kZXZpY2UKKyMgZWNobyBlZXByb20gMHg1MCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0zL25ld19kZXZpY2UKIAogV2hpbGUgdGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGluLWtlcm5lbCBkZXZpY2UgZGVjbGFyYXRpb24KIGNhbid0IGJlIGRvbmUsIHRoZXJlIGlzIGEgdmFyaWV0eSBvZiBjYXNlcyB3aGVyZSBpdCBjYW4gYmUgaGVscGZ1bDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl9tYWQudHh0CmluZGV4IDc0NDY4N2QuLjhhMzY2OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfbWFkLnR4dApAQCAtMTI4LDggKzEyOCw4IEBACiAgIFRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyBhdXRvbWF0aWNhbGx5IHdpdGgKICAgdWRldiwgYSBydWxlIGxpa2UKIAotICAgIEtFUk5FTD0idW1hZCoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgotICAgIEtFUk5FTD0iaXNzbSoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InVtYWQqIiwgTkFNRT0iaW5maW5pYmFuZC8layIKKyAgICBLRVJORUw9PSJpc3NtKiIsIE5BTUU9ImluZmluaWJhbmQvJWsiCiAKICAgY2FuIGJlIHVzZWQuICBUaGlzIHdpbGwgY3JlYXRlIGRldmljZSBub2RlcyBuYW1lZAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQKaW5kZXggZjg0NzUwMS4uYWZlM2Y4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfdmVyYnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX3ZlcmJzLnR4dApAQCAtNTgsNyArNTgsNyBAQAogICBUbyBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlciBkZXZpY2UgZmlsZXMgYXV0b21hdGljYWxseSB3aXRoCiAgIHVkZXYsIGEgcnVsZSBsaWtlCiAKLSAgICBLRVJORUw9InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgogCiAgIGNhbiBiZSB1c2VkLiAgVGhpcyB3aWxsIGNyZWF0ZSBkZXZpY2Ugbm9kZXMgbmFtZWQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA2ZmE3MjkyLi45MTA3YjM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNjcxLDYgKzY3MSw3IEBACiAJZWFybHlwcmludGs9CVtYODYsU0gsQkxBQ0tGSU5dCiAJCQllYXJseXByaW50az12Z2EKIAkJCWVhcmx5cHJpbnRrPXNlcmlhbFssdHR5U25bLGJhdWRyYXRlXV0KKwkJCWVhcmx5cHJpbnRrPXR0eVNuWyxiYXVkcmF0ZV0KIAkJCWVhcmx5cHJpbnRrPWRiZ3BbZGVidWdDb250cm9sbGVyI10KIAogCQkJQXBwZW5kICIsa2VlcCIgdG8gbm90IGRpc2FibGUgaXQgd2hlbiB0aGUgcmVhbCBjb25zb2xlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNmQwMzQ4Ny4uYWFmY2FhNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dApAQCAtMTk5LDE4ICsxOTksMjIgQEAKIAogTm90IGFsbCBiaXRzIGluIHRoZSBtYXNrIGNhbiBiZSBtb2RpZmllZC4gIE5vdCBhbGwgYml0cyB0aGF0IGNhbiBiZQogbW9kaWZpZWQgZG8gYW55dGhpbmcuICBOb3QgYWxsIGhvdCBrZXlzIGNhbiBiZSBpbmRpdmlkdWFsbHkgY29udHJvbGxlZAotYnkgdGhlIG1hc2suICBTb21lIG1vZGVscyBkbyBub3Qgc3VwcG9ydCB0aGUgbWFzayBhdCBhbGwsIGFuZCBpbiB0aG9zZQotbW9kZWxzLCBob3Qga2V5cyBjYW5ub3QgYmUgY29udHJvbGxlZCBpbmRpdmlkdWFsbHkuICBUaGUgYmVoYXZpb3VyIG9mCi10aGUgbWFzayBpcywgdGhlcmVmb3JlLCBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBUaGlua1BhZCBtb2RlbC4KK2J5IHRoZSBtYXNrLiAgU29tZSBtb2RlbHMgZG8gbm90IHN1cHBvcnQgdGhlIG1hc2sgYXQgYWxsLiAgVGhlIGJlaGF2aW91cgorb2YgdGhlIG1hc2sgaXMsIHRoZXJlZm9yZSwgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgVGhpbmtQYWQgbW9kZWwuCisKK1RoZSBkcml2ZXIgd2lsbCBmaWx0ZXIgb3V0IGFueSB1bm1hc2tlZCBob3RrZXlzLCBzbyBldmVuIGlmIHRoZSBmaXJtd2FyZQorZG9lc24ndCBhbGxvdyBkaXNhYmxpbmcgYW4gc3BlY2lmaWMgaG90a2V5LCB0aGUgZHJpdmVyIHdpbGwgbm90IHJlcG9ydAorZXZlbnRzIGZvciB1bm1hc2tlZCBob3RrZXlzLgogCiBOb3RlIHRoYXQgdW5tYXNraW5nIHNvbWUga2V5cyBwcmV2ZW50cyB0aGVpciBkZWZhdWx0IGJlaGF2aW9yLiAgRm9yCiBleGFtcGxlLCBpZiBGbitGNSBpcyB1bm1hc2tlZCwgdGhhdCBrZXkgd2lsbCBubyBsb25nZXIgZW5hYmxlL2Rpc2FibGUKLUJsdWV0b290aCBieSBpdHNlbGYuCitCbHVldG9vdGggYnkgaXRzZWxmIGluIGZpcm13YXJlLgogCi1Ob3RlIGFsc28gdGhhdCBub3QgYWxsIEZuIGtleSBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIEFDUEkuCi1Gb3IgZXhhbXBsZSwgb24gdGhlIFg0MCwgdGhlIGJyaWdodG5lc3MsIHZvbHVtZSBhbmQgIkFjY2VzcyBJQk0iIGJ1dHRvbnMKLWRvIG5vdCBnZW5lcmF0ZSBBQ1BJIGV2ZW50cyBldmVuIHdpdGggdGhpcyBkcml2ZXIuICBUaGV5ICpjYW4qIGJlIHVzZWQKLXRocm91Z2ggdGhlICJUaGlua1BhZCBCdXR0b25zIiB1dGlsaXR5LCBzZWUgaHR0cDovL3d3dy5ub25nbnUub3JnL3RwYi8KK05vdGUgYWxzbyB0aGF0IG5vdCBhbGwgRm4ga2V5IGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkIHRocm91Z2ggQUNQSQorZGVwZW5kaW5nIG9uIHRoZSBUaGlua1BhZCBtb2RlbCBhbmQgZmlybXdhcmUgdmVyc2lvbi4gIE9uIHRob3NlCitUaGlua1BhZHMsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHN1cHBvcnQgc29tZSBleHRyYSBob3RrZXlzIGJ5Citwb2xsaW5nIHRoZSAiQ01PUyBOVlJBTSIgYXQgbGVhc3QgMTAgdGltZXMgcGVyIHNlY29uZC4gIFRoZSBkcml2ZXIKK2F0dGVtcHRzIHRvIGVuYWJsZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGF1dG9tYXRpY2FsbHkgd2hlbiByZXF1aXJlZC4KIAogcHJvY2ZzIG5vdGVzOgogCkBAIC0yNTUsMTggKzI1OSwxMSBAQAogCQkxOiBkb2VzIG5vdGhpbmcKIAogCWhvdGtleV9tYXNrOgotCQliaXQgbWFzayB0byBlbmFibGUgZHJpdmVyLWhhbmRsaW5nIChhbmQgZGVwZW5kaW5nIG9uCisJCWJpdCBtYXNrIHRvIGVuYWJsZSByZXBvcnRpbmcgKGFuZCBkZXBlbmRpbmcgb24KIAkJdGhlIGZpcm13YXJlLCBBQ1BJIGV2ZW50IGdlbmVyYXRpb24pIGZvciBlYWNoIGhvdCBrZXkKIAkJKHNlZSBhYm92ZSkuICBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaG90IGtleXMKIAkJbWFzaywgYW5kIGFsbG93cyBvbmUgdG8gbW9kaWZ5IGl0LgogCi0JCU5vdGU6IHdoZW4gTlZSQU0gcG9sbGluZyBpcyBhY3RpdmUsIHRoZSBmaXJtd2FyZSBtYXNrCi0JCXdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0JCWhvdGtleV9tYXNrLiAgVGhlIGRyaXZlciB3aWxsIHJldGFpbiBlbmFibGVkIGJpdHMgZm9yCi0JCWhvdGtleXMgdGhhdCBhcmUgdW5kZXIgTlZSQU0gcG9sbGluZyBldmVuIGlmIHRoZQotCQlmaXJtd2FyZSByZWZ1c2VzIHRoZW0sIGFuZCB3aWxsIG5vdCBzZXQgdGhlc2UgYml0cyBvbgotCQl0aGUgZmlybXdhcmUgaG90IGtleSBtYXNrLgotCiAJaG90a2V5X2FsbF9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCB3aGVuIGVjaG9lZCB0byBob3RrZXlfbWFzayBhYm92ZS4KQEAgLTI3OSw3ICsyNzYsOCBAQAogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCBleGNlcHQgdGhvc2Ugd2hpY2ggYXJlIGFsd2F5cwogCQloYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSBhbnl3YXkuICBFY2hvIGl0IHRvCi0JCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuCisJCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1hc2sKKwkJdXNlZCBieSB0aGUgZHJpdmVyLgogCiAJaG90a2V5X3NvdXJjZV9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNlbGVjdHMgd2hpY2ggaG90IGtleXMgd2lsbCB0aGUgZHJpdmVyCkBAIC0yODcsOSArMjg1LDEwIEBACiAJCWJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgcmVwb3J0ZWQgYnkgdGhlIEFDUEkgZmlybXdhcmUsCiAJCWJ1dCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lLgogCi0JCUhvdCBrZXlzIHdob3NlIGJpdHMgYXJlIHNldCBpbiBib3RoIGhvdGtleV9zb3VyY2VfbWFzawotCQlhbmQgYWxzbyBvbiBob3RrZXlfbWFzayBhcmUgcG9sbGVkIGZvciBpbiBOVlJBTS4gIE9ubHkgYQotCQlmZXcgaG90IGtleXMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KKwkJSG90IGtleXMgd2hvc2UgYml0cyBhcmUgc2V0IGluIGhvdGtleV9zb3VyY2VfbWFzayBhcmUKKwkJcG9sbGVkIGZvciBpbiBOVlJBTSwgYW5kIHJlcG9ydGVkIGFzIGhvdGtleSBldmVudHMgaWYKKwkJZW5hYmxlZCBpbiBob3RrZXlfbWFzay4gIE9ubHkgYSBmZXcgaG90IGtleXMgYXJlCisJCWF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KIAogCQlXYXJuaW5nOiB3aGVuIGluIE5WUkFNIG1vZGUsIHRoZSB2b2x1bWUgdXAvZG93bi9tdXRlCiAJCWtleXMgYXJlIHN5bnRoZXNpemVkIGFjY29yZGluZyB0byBjaGFuZ2VzIGluIHRoZSBtaXhlciwKQEAgLTUyNSw2ICs1MjQsNyBAQAogMHgyMzA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gc3VzcGVuZCB0byBlamVjdCBiYXkKIDB4MjQwNAkJU3lzdGVtIGlzIHdha2luZyB1cCBmcm9tIGhpYmVybmF0aW9uIHRvIHVuZG9jawogMHgyNDA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gaGliZXJuYXRpb24gdG8gZWplY3QgYmF5CisweDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZC9jb250cm9sIGV2ZW50CiAKIFRoZSBhYm92ZSBldmVudHMgYXJlIG5ldmVyIHByb3BhZ2F0ZWQgYnkgdGhlIGRyaXZlci4KIApAQCAtNTMyLDcgKzUzMiw2IEBACiAweDQwMDMJCVVuZG9ja2VkIChzZWUgMHgyeDA0KSwgY2FuIHNsZWVwIGFnYWluCiAweDUwMEIJCVRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBpdHMgc3RvcmFnZSBiYXkKIDB4NTAwQwkJVGFibGV0IHBlbiByZW1vdmVkIGZyb20gaXRzIHN0b3JhZ2UgYmF5Ci0weDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZCAobmV3ZXIgTGVub3ZvIEJJT1NlcykKIAogVGhlIGFib3ZlIGV2ZW50cyBhcmUgcHJvcGFnYXRlZCBieSB0aGUgZHJpdmVyLgogCkBAIC02MjEsNiArNjIwLDggQEAKIDIuIERvICpOT1QqIGxvYWQgdXAgQUNQSSB2aWRlbywgZW5hYmxlIHRoZSBob3RrZXlzIGluIHRoaW5rcGFkLWFjcGksCiAgICBhbmQgbWFwIHRoZW0gdG8gS0VZX0JSSUdIVE5FU1NfVVAgYW5kIEtFWV9CUklHSFRORVNTX0RPV04uICBQcm9jZXNzCiAgICB0aGVzZSBrZXlzIG9uIHVzZXJzcGFjZSBzb21laG93IChlLmcuIGJ5IGNhbGxpbmcgeGJhY2tsaWdodCkuCisgICBUaGUgZHJpdmVyIHdpbGwgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IGlmIGl0IGRldGVjdHMgdGhhdCBBQ1BJIHZpZGVvCisgICBoYXMgYmVlbiBkaXNhYmxlZC4KIAogCiBCbHVldG9vdGgKQEAgLTE0NTksMyArMTQ2MCw4IEBACiAweDAyMDQwMDoJTWFya2VyIGZvciAxNiBMRURzIHN1cHBvcnQuICBBbHNvLCBMRURzIHRoYXQgYXJlIGtub3duCiAJCXRvIG5vdCBleGlzdCBpbiBhIGdpdmVuIG1vZGVsIGFyZSBub3QgcmVnaXN0ZXJlZCB3aXRoCiAJCXRoZSBMRUQgc3lzZnMgY2xhc3MgYW55bW9yZS4KKworMHgwMjA1MDA6CVVwZGF0ZWQgaG90a2V5IGRyaXZlciwgaG90a2V5X21hc2sgaXMgYWx3YXlzIGF2YWlsYWJsZQorCQlhbmQgaXQgaXMgYWx3YXlzIGFibGUgdG8gZGlzYWJsZSBob3Qga2V5cy4gIFZlcnkgb2xkCisJCXRoaW5rcGFkcyBhcmUgcHJvcGVybHkgc3VwcG9ydGVkLiAgaG90a2V5X2Jpb3NfbWFzaworCQlpcyBkZXByZWNhdGVkIGFuZCBtYXJrZWQgZm9yIHJlbW92YWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGJhOTM3M2YuLjA5OGRlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAibGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlICJsaW51eC92aXJ0aW9fbmV0LmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2Jsay5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25zb2xlLmgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9lZXByb20gYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9lZXByb20Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaTJjL2NoaXBzL2VlcHJvbQpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvZWVwcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1IGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tYXg2ODc1CmluZGV4IDEwY2E0M2MuLjFlODllZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL21heDY4NzUKKysrIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpAQCAtNDIsMTAgKzQyLDEyIEBACiAKIFZhbGlkIGFkZHJlc3NlcyBmb3IgdGhlIE1BWDY4NzUgYXJlIDB4NTAgYW5kIDB4NTIuCiBWYWxpZCBhZGRyZXNzZXMgZm9yIHRoZSBNQVg2ODc0IGFyZSAweDUwLCAweDUyLCAweDU0IGFuZCAweDU2LgotVGhlIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBhbnkgYWRkcmVzcywgc28geW91IG11c3QgZm9yY2UgdGhlIGFkZHJlc3MuCitUaGUgZHJpdmVyIGRvZXMgbm90IHByb2JlIGFueSBhZGRyZXNzLCBzbyB5b3UgZXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMuCiAKIEV4YW1wbGU6Ci0kIG1vZHByb2JlIG1heDY4NzUgZm9yY2U9MCwweDUwCiskIG1vZHByb2JlIG1heDY4NzUKKyQgZWNobyBtYXg2ODc1IDB4NTAgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlCiAKIFRoZSBNQVg2ODc0L01BWDY4NzUgaWdub3JlcyBhZGRyZXNzIGJpdCAwLCBzbyB0aGlzIGRyaXZlciBhdHRhY2hlcyB0byBtdWx0aXBsZQogYWRkcmVzc2VzLiAgRm9yIGV4YW1wbGUsIGZvciBhZGRyZXNzIDB4NTAsIGl0IGFsc28gcmVzZXJ2ZXMgMHg1MS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9ocHRpb3AudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKaW5kZXggYTZlYjRhZC4uOTYwNTE3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKQEAgLTMsNiArMywyNSBAQAogQ29udHJvbGxlciBSZWdpc3RlciBNYXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRm9yIFJSNDR4eCBJbnRlbCBJT1AgYmFzZWQgYWRhcHRlcnMsIHRoZSBjb250cm9sbGVyIElPUCBpcyBhY2Nlc3NlZCB2aWEgUENJIEJBUjAgYW5kIEJBUjI6CisKKyAgICAgQkFSMCBvZmZzZXQgICAgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MTFDNUMgTGluayBJbnRlcmZhY2UgSVJRIFNldAorICAgICAgICAgICAgMHgxMUM2MCBMaW5rIEludGVyZmFjZSBJUlEgQ2xlYXIKKworICAgICBCQVIyIG9mZnNldCAgICBSZWdpc3RlcgorICAgICAgICAgICAgMHgxMCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMAorICAgICAgICAgICAgMHgxNCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMQorICAgICAgICAgICAgMHgxOCAgICBPdXRib3VuZCBNZXNzYWdlIFJlZ2lzdGVyIDAKKyAgICAgICAgICAgIDB4MUMgICAgT3V0Ym91bmQgTWVzc2FnZSBSZWdpc3RlciAxCisgICAgICAgICAgICAweDIwICAgIEluYm91bmQgRG9vcmJlbGwgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MjQgICAgSW5ib3VuZCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAweDI4ICAgIEluYm91bmQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MzAgICAgT3V0Ym91bmQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgMHgzNCAgICBPdXRib3VuZCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgorICAgICAgICAgICAgMHg0MCAgICBJbmJvdW5kIFF1ZXVlIFBvcnQKKyAgICAgICAgICAgIDB4NDQgICAgT3V0Ym91bmQgUXVldWUgUG9ydAorCiBGb3IgSW50ZWwgSU9QIGJhc2VkIGFkYXB0ZXJzLCB0aGUgY29udHJvbGxlciBJT1AgaXMgYWNjZXNzZWQgdmlhIFBDSSBCQVIwOgogCiAgICAgIEJBUjAgb2Zmc2V0ICAgIFJlZ2lzdGVyCkBAIC05Myw3ICsxMTIsNyBAQAogCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDFjOGViNDUuLmZkOWEyZjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC01MjIsNyArNTIyLDcgQEAKICAgICBwY21fZGV2cyAgICAgICAtIE51bWJlciBvZiBQQ00gZGV2aWNlcyBhc3NpZ25lZCB0byBlYWNoIGNhcmQKICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gMSwgdXAgdG8gNCkKICAgICBwY21fc3Vic3RyZWFtcyAtIE51bWJlciBvZiBQQ00gc3Vic3RyZWFtcyBhc3NpZ25lZCB0byBlYWNoIFBDTQotICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSA4LCB1cCB0byAxNikKKyAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gOCwgdXAgdG8gMTI4KQogICAgIGhydGltZXIgICAgICAgIC0gVXNlIGhydGltZXIgKD0xLCBkZWZhdWx0KSBvciBzeXN0ZW0gdGltZXIgKD0wKQogICAgIGZha2VfYnVmZmVyICAgIC0gRmFrZSBidWZmZXIgYWxsb2NhdGlvbnMgKGRlZmF1bHQgPSAxKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGYxNzA4YjcuLjRjN2Y5YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0yMDksNiArMjA5LDcgQEAKICAgbGFwdG9wCWxhcHRvcCB3aXRoIEhQIGphY2sgc2Vuc2luZwogICBtb2JpbGUJbW9iaWxlIGRldmljZXMgd2l0aCBIUCBqYWNrIHNlbnNpbmcKICAgdGhpbmtwYWQJTGVub3ZvIFRoaW5rcGFkIFgzMDAKKyAgdG91Y2hzbWFydAlIUCBUb3VjaHNtYXJ0CiAKIEFEMTg4NAogPT09PT09CkBAIC0zNTgsNiArMzU5LDcgQEAKICAgNXN0YWNrLW5vLWZwCUQ5NjUgNXN0YWNrIHdpdGhvdXQgZnJvbnQgcGFuZWwKICAgZGVsbC0zc3RhY2sJRGVsbCBEaW1lbnNpb24gRTUyMAogICBkZWxsLWJpb3MJRml4ZXMgd2l0aCBEZWxsIEJJT1Mgc2V0dXAKKyAgdm9sa25vYglGaXhlcyB3aXRoIHZvbHVtZS1rbm9iIHdpZGdldCAweDI0CiAgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzFCKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAppbmRleCA3MGQ2OGNlLi5hODdkYzI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dApAQCAtMSw1ICsxLDUgQEAKIEdlbmVyaWMgVGhlcm1hbCBTeXNmcyBkcml2ZXIgSG93IFRvCi09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBXcml0dGVuIGJ5IFN1aml0aCBUaG9tYXMgPHN1aml0aC50aG9tYXNAaW50ZWwuY29tPiwgWmhhbmcgUnVpIDxydWkuemhhbmdAaW50ZWwuY29tPgogCkBAIC0xMCwyMCArMTAsMjAgQEAKIAogMC4gSW50cm9kdWN0aW9uCiAKLVRoZSBnZW5lcmljIHRoZXJtYWwgc3lzZnMgcHJvdmlkZXMgYSBzZXQgb2YgaW50ZXJmYWNlcyBmb3IgdGhlcm1hbCB6b25lIGRldmljZXMgKHNlbnNvcnMpCi1hbmQgdGhlcm1hbCBjb29saW5nIGRldmljZXMgKGZhbiwgcHJvY2Vzc29yLi4uKSB0byByZWdpc3RlciB3aXRoIHRoZSB0aGVybWFsIG1hbmFnZW1lbnQKLXNvbHV0aW9uIGFuZCB0byBiZSBhIHBhcnQgb2YgaXQuCitUaGUgZ2VuZXJpYyB0aGVybWFsIHN5c2ZzIHByb3ZpZGVzIGEgc2V0IG9mIGludGVyZmFjZXMgZm9yIHRoZXJtYWwgem9uZQorZGV2aWNlcyAoc2Vuc29ycykgYW5kIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIChmYW4sIHByb2Nlc3Nvci4uLikgdG8gcmVnaXN0ZXIKK3dpdGggdGhlIHRoZXJtYWwgbWFuYWdlbWVudCBzb2x1dGlvbiBhbmQgdG8gYmUgYSBwYXJ0IG9mIGl0LgogCi1UaGlzIGhvdy10byBmb2N1c2VzIG9uIGVuYWJsaW5nIG5ldyB0aGVybWFsIHpvbmUgYW5kIGNvb2xpbmcgZGV2aWNlcyB0byBwYXJ0aWNpcGF0ZQotaW4gdGhlcm1hbCBtYW5hZ2VtZW50LgotVGhpcyBzb2x1dGlvbiBpcyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhbmQgYW55IHR5cGUgb2YgdGhlcm1hbCB6b25lIGRldmljZXMgYW5kCi1jb29saW5nIGRldmljZXMgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlIGluZnJhc3RydWN0dXJlLgorVGhpcyBob3ctdG8gZm9jdXNlcyBvbiBlbmFibGluZyBuZXcgdGhlcm1hbCB6b25lIGFuZCBjb29saW5nIGRldmljZXMgdG8KK3BhcnRpY2lwYXRlIGluIHRoZXJtYWwgbWFuYWdlbWVudC4KK1RoaXMgc29sdXRpb24gaXMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgYW5kIGFueSB0eXBlIG9mIHRoZXJtYWwgem9uZSBkZXZpY2VzCithbmQgY29vbGluZyBkZXZpY2VzIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZS4KIAotVGhlIG1haW4gdGFzayBvZiB0aGUgdGhlcm1hbCBzeXNmcyBkcml2ZXIgaXMgdG8gZXhwb3NlIHRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzIGFzIHdlbGwKLWFzIGNvb2xpbmcgZGV2aWNlIGF0dHJpYnV0ZXMgdG8gdGhlIHVzZXIgc3BhY2UuCi1BbiBpbnRlbGxpZ2VudCB0aGVybWFsIG1hbmFnZW1lbnQgYXBwbGljYXRpb24gY2FuIG1ha2UgZGVjaXNpb25zIGJhc2VkIG9uIGlucHV0cwotZnJvbSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcyAodGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIHRyaXAgcG9pbnQgdGVtcGVyYXR1cmUpCi1hbmQgdGhyb3R0bGUgYXBwcm9wcmlhdGUgZGV2aWNlcy4KK1RoZSBtYWluIHRhc2sgb2YgdGhlIHRoZXJtYWwgc3lzZnMgZHJpdmVyIGlzIHRvIGV4cG9zZSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcworYXMgd2VsbCBhcyBjb29saW5nIGRldmljZSBhdHRyaWJ1dGVzIHRvIHRoZSB1c2VyIHNwYWNlLgorQW4gaW50ZWxsaWdlbnQgdGhlcm1hbCBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uIGNhbiBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbgoraW5wdXRzIGZyb20gdGhlcm1hbCB6b25lIGF0dHJpYnV0ZXMgKHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGFuZCB0cmlwIHBvaW50Cit0ZW1wZXJhdHVyZSkgYW5kIHRocm90dGxlIGFwcHJvcHJpYXRlIGRldmljZXMuCiAKIFswLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDAKIFsxLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDEKQEAgLTMxLDc3ICszMSw3NyBAQAogMS4gdGhlcm1hbCBzeXNmcyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucwogCiAxLjEgdGhlcm1hbCB6b25lIGRldmljZSBpbnRlcmZhY2UKLTEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsIGludCB0cmlwcywKLQkJCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgKm9wcykKKzEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCisJCWludCB0cmlwcywgdm9pZCAqZGV2ZGF0YSwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzICpvcHMpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBhZGRzIGEgbmV3IHRoZXJtYWwgem9uZSBkZXZpY2UgKHNlbnNvcikgdG8KLQkvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFzIHRoZXJtYWxfem9uZVswLSpdLgotCUl0IHRyaWVzIHRvIGJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyByZWdpc3RlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIHpvbmUgZGV2aWNlIChzZW5zb3IpIHRvCisgICAgL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhcyB0aGVybWFsX3pvbmVbMC0qXS4gSXQgdHJpZXMgdG8gYmluZCBhbGwgdGhlCisgICAgdGhlcm1hbCBjb29saW5nIGRldmljZXMgcmVnaXN0ZXJlZCBhdCB0aGUgc2FtZSB0aW1lLgogCi0JbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgotCXRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgotCWRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKLQlvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KLQkJLmJpbmQ6IGJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JCS51bmJpbmQ6IHVuYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KLQkJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KLQkJLmdldF9tb2RlOiBnZXQgdGhlIGN1cnJlbnQgbW9kZSAodXNlci9rZXJuZWwpIG9mIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkgICAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCi0JCQkgICAidXNlciIgd2lsbCBwcmV2ZW50IGtlcm5lbCB0aGVybWFsIGRyaXZlciBhY3Rpb25zIHVwb24gdHJpcCBwb2ludHMKLQkJCSAgIHNvIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIHRha2UgY2hhcmdlIG9mIHRoZXJtYWwgbWFuYWdlbWVudC4KLQkJLnNldF9tb2RlOiBzZXQgdGhlIG1vZGUgKHVzZXIva2VybmVsKSBvZiB0aGUgdGhlcm1hbCB6b25lLgotCQkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KLQkJLmdldF90cmlwX3RlbXA6IGdldCB0aGUgdGVtcGVyYXR1cmUgYWJvdmUgd2hpY2ggdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCQkJCXdpbGwgYmUgZmlyZWQuCisgICAgbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgorICAgIHRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgorICAgIGRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKKyAgICBvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KKwkuYmluZDogYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KKwkudW5iaW5kOiB1bmJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCisJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X21vZGU6IGdldCB0aGUgY3VycmVudCBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkgICAgLSAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCisJICAgIC0gInVzZXIiIHdpbGwgcHJldmVudCBrZXJuZWwgdGhlcm1hbCBkcml2ZXIgYWN0aW9ucyB1cG9uIHRyaXAgcG9pbnRzCisJICAgICAgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9ucyBjYW4gdGFrZSBjaGFyZ2Ugb2YgdGhlcm1hbCBtYW5hZ2VtZW50LgorCS5zZXRfbW9kZTogc2V0IHRoZSBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KKwkuZ2V0X3RyaXBfdGVtcDogZ2V0IHRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0aGUgY2VydGFpbiB0cmlwIHBvaW50CisJCQl3aWxsIGJlIGZpcmVkLgogCiAxLjEuMiB2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCUl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZCB1bmJpbmQgYWxsCi0JdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGl0IHVzZXMuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZS4KKyAgICBJdCBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGZvcm0gL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhbmQKKyAgICB1bmJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyBpdCB1c2VzLgogCiAxLjIgdGhlcm1hbCBjb29saW5nIGRldmljZSBpbnRlcmZhY2UKIDEuMi4xIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCi0JCQkJCXZvaWQgKmRldmRhdGEsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyAqKQorCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgKikKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGFkZHMgYSBuZXcgdGhlcm1hbCBjb29saW5nIGRldmljZSAoZmFuL3Byb2Nlc3Nvci8uLi4pIHRvCi0JL3N5cy9jbGFzcy90aGVybWFsLyBmb2xkZXIgYXMgY29vbGluZ19kZXZpY2VbMC0qXS4KLQlJdCB0cmllcyB0byBiaW5kIGl0c2VsZiB0byBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHJlZ2lzdGVyIGF0IHRoZSBzYW1lIHRpbWUuCi0JbmFtZTogdGhlIGNvb2xpbmcgZGV2aWNlIG5hbWUuCi0JZGV2ZGF0YTogZGV2aWNlIHByaXZhdGUgZGF0YS4KLQlvcHM6IHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGNhbGwtYmFja3MuCi0JCS5nZXRfbWF4X3N0YXRlOiBnZXQgdGhlIE1heGltdW0gdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgotCQkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KLQkJLnNldF9jdXJfc3RhdGU6IHNldCB0aGUgQ3VycmVudCB0aHJvdHRsZSBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIChmYW4vcHJvY2Vzc29yLy4uLikKKyAgICB0byAvc3lzL2NsYXNzL3RoZXJtYWwvIGZvbGRlciBhcyBjb29saW5nX2RldmljZVswLSpdLiBJdCB0cmllcyB0byBiaW5kIGl0c2VsZgorICAgIHRvIGFsbCB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgcmVnaXN0ZXIgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBuYW1lOiB0aGUgY29vbGluZyBkZXZpY2UgbmFtZS4KKyAgICBkZXZkYXRhOiBkZXZpY2UgcHJpdmF0ZSBkYXRhLgorICAgIG9wczogdGhlcm1hbCBjb29saW5nIGRldmljZXMgY2FsbC1iYWNrcy4KKwkuZ2V0X21heF9zdGF0ZTogZ2V0IHRoZSBNYXhpbXVtIHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuc2V0X2N1cl9zdGF0ZTogc2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KIAogMS4yLjIgdm9pZCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmUgdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JSXQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmb3JtIC9zeXMvY2xhc3MvdGhlcm1hbCBmb2xkZXIgYW5kIHVuYmluZAotCWl0c2VsZiBmcm9tIGFsbAl0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgdXNpbmcgaXQuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlLgorICAgIEl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZAorICAgIHVuYmluZCBpdHNlbGYgZnJvbSBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHVzaW5nIGl0LgogCiAxLjMgaW50ZXJmYWNlIGZvciBiaW5kaW5nIGEgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZQogMS4zLjEgaW50IHRoZXJtYWxfem9uZV9iaW5kX2Nvb2xpbmdfZGV2aWNlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwKLQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwIHBvaW50Ci0Jb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCVRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCSBpbiB0aGlzIHRoZXJtYWwgem9uZS4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwCisgICAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCisgICAgdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCisgICAgY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQorICAgIHRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCisJICBpbiB0aGlzIHRoZXJtYWwgem9uZS4KIAogMS4zLjIgaW50IHRoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAotCQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiB1bmJpbmQgYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGZyb20gdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCW9mIGEgdGhlcm1hbCB6b25lIGRldmljZS4KLQlUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIC51bmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCWluIHRoaXMgdGhlcm1hbCB6b25lLgorICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHVuYmluZCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UgZnJvbSB0aGUgY2VydGFpbgorICAgIHRyaXAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluCisgICAgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLnVuYmluZCBjYWxsYmFjay4KKyAgICB0ejogdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKKyAgICBjZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCisgICAgdHJpcDogaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgdGhlIGNvb2xpbmcgZGV2aWNlcyBpcyBhc3NvY2lhdGVkIHdpdGgKKwkgIGluIHRoaXMgdGhlcm1hbCB6b25lLgogCiAyLiBzeXNmcyBhdHRyaWJ1dGVzIHN0cnVjdHVyZQogCkBAIC0xMTQsMTUzICsxMTQsMTY2IEBACiAKIFRoZXJtYWwgem9uZSBkZXZpY2Ugc3lzIEkvRiwgY3JlYXRlZCBvbmNlIGl0J3MgcmVnaXN0ZXJlZDoKIC9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKLQl8LS0tLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQotCXwtLS0tLXRlbXA6CQkJQ3VycmVudCB0ZW1wZXJhdHVyZQotCXwtLS0tLW1vZGU6CQkJV29ya2luZyBtb2RlIG9mIHRoZSB0aGVybWFsIHpvbmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3R5cGU6CVRyaXAgcG9pbnQgdHlwZQorICAgIHwtLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10ZW1wOgkJCUN1cnJlbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tbW9kZToJCQlXb3JraW5nIG1vZGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tdHJpcF9wb2ludF9bMC0qXV90eXBlOglUcmlwIHBvaW50IHR5cGUKIAogVGhlcm1hbCBjb29saW5nIGRldmljZSBzeXMgSS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOgogL3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlWzAtKl06Ci0JfC0tLS0tdHlwZSA6CQkJVHlwZSBvZiB0aGUgY29vbGluZyBkZXZpY2UocHJvY2Vzc29yL2Zhbi8uLi4pCi0JfC0tLS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQotCXwtLS0tLWN1cl9zdGF0ZToJCUN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UKKyAgICB8LS0tdHlwZToJCQlUeXBlIG9mIHRoZSBjb29saW5nIGRldmljZShwcm9jZXNzb3IvZmFuLy4uLikKKyAgICB8LS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQorICAgIHwtLS1jdXJfc3RhdGU6CQlDdXJyZW50IGNvb2xpbmcgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlCiAKIAotVGhlc2UgdHdvIGR5bmFtaWMgYXR0cmlidXRlcyBhcmUgY3JlYXRlZC9yZW1vdmVkIGluIHBhaXJzLgotVGhleSByZXByZXNlbnQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEgdGhlcm1hbCB6b25lIGFuZCBpdHMgYXNzb2NpYXRlZCBjb29saW5nIGRldmljZS4KLVRoZXkgYXJlIGNyZWF0ZWQvcmVtb3ZlZCBmb3IgZWFjaAotdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2UvdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2RldmljZSBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4KK1RoZW4gbmV4dCB0d28gZHluYW1pYyBhdHRyaWJ1dGVzIGFyZSBjcmVhdGVkL3JlbW92ZWQgaW4gcGFpcnMuIFRoZXkgcmVwcmVzZW50Cit0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSB0aGVybWFsIHpvbmUgYW5kIGl0cyBhc3NvY2lhdGVkIGNvb2xpbmcgZGV2aWNlLgorVGhleSBhcmUgY3JlYXRlZC9yZW1vdmVkIGZvciBlYWNoIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCit0aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZS90aGVybWFsX3pvbmVfdW5iaW5kX2Nvb2xpbmdfZGV2aWNlLgogCi0vc3lzL2NsYXNzL3RoZXJtYWwvdGhlcm1hbF96b25lWzAtKl0KLQl8LS0tLS1jZGV2WzAtKl06CQlUaGUgWzAtKl10aCBjb29saW5nIGRldmljZSBpbiB0aGUgY3VycmVudCB0aGVybWFsIHpvbmUKLQl8LS0tLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKKy9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKKyAgICB8LS0tY2RldlswLSpdOgkJWzAtKl10aCBjb29saW5nIGRldmljZSBpbiBjdXJyZW50IHRoZXJtYWwgem9uZQorICAgIHwtLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKIAogQmVzaWRlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZSBzeXNmcyBJL0YgYW5kIGNvb2xpbmcgZGV2aWNlIHN5c2ZzIEkvRiwKLXRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIGFsc28gY3JlYXRlcyBhIGh3bW9uIHN5c2ZzIEkvRiBmb3IgZWFjaCBfdHlwZV8gb2YKLXRoZXJtYWwgem9uZSBkZXZpY2UuIEUuZy4gdGhlIGdlbmVyaWMgdGhlcm1hbCBkcml2ZXIgcmVnaXN0ZXJzIG9uZSBod21vbiBjbGFzcyBkZXZpY2UKLWFuZCBidWlsZCB0aGUgYXNzb2NpYXRlZCBod21vbiBzeXNmcyBJL0YgZm9yIGFsbCB0aGUgcmVnaXN0ZXJlZCBBQ1BJIHRoZXJtYWwgem9uZXMuCit0aGUgZ2VuZXJpYyB0aGVybWFsIGRyaXZlciBhbHNvIGNyZWF0ZXMgYSBod21vbiBzeXNmcyBJL0YgZm9yIGVhY2ggX3R5cGVfCitvZiB0aGVybWFsIHpvbmUgZGV2aWNlLiBFLmcuIHRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIHJlZ2lzdGVycyBvbmUgaHdtb24KK2NsYXNzIGRldmljZSBhbmQgYnVpbGQgdGhlIGFzc29jaWF0ZWQgaHdtb24gc3lzZnMgSS9GIGZvciBhbGwgdGhlIHJlZ2lzdGVyZWQKK0FDUEkgdGhlcm1hbCB6b25lcy4KKwogL3N5cy9jbGFzcy9od21vbi9od21vblswLSpdOgotCXwtLS0tLW5hbWU6CQkJVGhlIHR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzLgotCXwtLS0tLXRlbXBbMS0qXV9pbnB1dDoJCVRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KLQl8LS0tLS10ZW1wWzEtKl1fY3JpdGljYWw6CVRoZSBjcml0aWNhbCB0cmlwIHBvaW50IG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KKyAgICB8LS0tbmFtZToJCQlUaGUgdHlwZSBvZiB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMKKyAgICB8LS0tdGVtcFsxLSpdX2lucHV0OglUaGUgY3VycmVudCB0ZW1wZXJhdHVyZSBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKyAgICB8LS0tdGVtcFsxLSpdX2NyaXRpY2FsOglUaGUgY3JpdGljYWwgdHJpcCBwb2ludCBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKwogUGxlYXNlIHJlYWQgRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBUaGVybWFsIHpvbmUgYXR0cmlidXRlcyAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotdHlwZQkJCQlTdHJpbmdzIHdoaWNoIHJlcHJlc2VudCB0aGUgdGhlcm1hbCB6b25lIHR5cGUuCi0JCQkJVGhpcyBpcyBnaXZlbiBieSB0aGVybWFsIHpvbmUgZHJpdmVyIGFzIHBhcnQgb2YgcmVnaXN0cmF0aW9uLgotCQkJCUVnOiAiYWNwaXR6IiBpbmRpY2F0ZXMgaXQncyBhbiBBQ1BJIHRoZXJtYWwgZGV2aWNlLgotCQkJCUluIG9yZGVyIHRvIGtlZXAgaXQgY29uc2lzdGVudCB3aXRoIGh3bW9uIHN5cyBhdHRyaWJ1dGUsCi0JCQkJdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbG93ZXJjYXNlIHN0cmluZywKLQkJCQlub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0eXBlCisJU3RyaW5ncyB3aGljaCByZXByZXNlbnQgdGhlIHRoZXJtYWwgem9uZSB0eXBlLgorCVRoaXMgaXMgZ2l2ZW4gYnkgdGhlcm1hbCB6b25lIGRyaXZlciBhcyBwYXJ0IG9mIHJlZ2lzdHJhdGlvbi4KKwlFLmc6ICJhY3BpdHoiIGluZGljYXRlcyBpdCdzIGFuIEFDUEkgdGhlcm1hbCBkZXZpY2UuCisJSW4gb3JkZXIgdG8ga2VlcCBpdCBjb25zaXN0ZW50IHdpdGggaHdtb24gc3lzIGF0dHJpYnV0ZTsgdGhpcyBzaG91bGQKKwliZSBhIHNob3J0LCBsb3dlcmNhc2Ugc3RyaW5nLCBub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KKwlSTywgUmVxdWlyZWQKIAotdGVtcAkJCQlDdXJyZW50IHRlbXBlcmF0dXJlIGFzIHJlcG9ydGVkIGJ5IHRoZXJtYWwgem9uZSAoc2Vuc29yKQotCQkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0ZW1wCisJQ3VycmVudCB0ZW1wZXJhdHVyZSBhcyByZXBvcnRlZCBieSB0aGVybWFsIHpvbmUgKHNlbnNvcikuCisJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cworCVJPLCBSZXF1aXJlZAogCi1tb2RlCQkJCU9uZSBvZiB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgaW4gW2tlcm5lbCwgdXNlcl0KLQkJCQlUaGlzIGZpbGUgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobQotCQkJCXRoYXQgaXMgY3VycmVudGx5IG1hbmFnaW5nIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkJSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZCBhbGdvcml0aG0KLQkJCQlvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgotCQkJCVJXCi0JCQkJT3B0aW9uYWwKLQkJCQlrZXJuZWwJPSBUaGVybWFsIG1hbmFnZW1lbnQgaW4ga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIuCi0JCQkJdXNlcgk9IFByZXZlbnRpbmcga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIgYWN0aW9ucyB1cG9uCi0JCQkJCSAgdHJpcCBwb2ludHMgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9uIGNhbiB0YWtlIGZ1bGwKLQkJCQkJICBjaGFyZ2Ugb2YgdGhlIHRoZXJtYWwgbWFuYWdlbWVudC4KK21vZGUKKwlPbmUgb2YgdGhlIHByZWRlZmluZWQgdmFsdWVzIGluIFtrZXJuZWwsIHVzZXJdLgorCVRoaXMgZmlsZSBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtIHRoYXQgaXMgY3VycmVudGx5CisJbWFuYWdpbmcgdGhlIHRoZXJtYWwgem9uZS4gSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZAorCWFsZ29yaXRobSBvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgorCWtlcm5lbAk9IFRoZXJtYWwgbWFuYWdlbWVudCBpbiBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlci4KKwl1c2VyCT0gUHJldmVudGluZyBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlciBhY3Rpb25zIHVwb24KKwkJICB0cmlwIHBvaW50cyBzbyB0aGF0IHVzZXIgYXBwbGljYXRpb24gY2FuIHRha2UgZnVsbAorCQkgIGNoYXJnZSBvZiB0aGUgdGhlcm1hbCBtYW5hZ2VtZW50LgorCVJXLCBPcHRpb25hbAogCi10cmlwX3BvaW50X1swLSpdX3RlbXAJCVRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0cmlwIHBvaW50IHdpbGwgYmUgZmlyZWQKLQkJCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCi0JCQkJUk8KLQkJCQlPcHRpb25hbAordHJpcF9wb2ludF9bMC0qXV90ZW1wCisJVGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRyaXAgcG9pbnQgd2lsbCBiZSBmaXJlZC4KKwlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJUk8sIE9wdGlvbmFsCiAKLXRyaXBfcG9pbnRfWzAtKl1fdHlwZSAJCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQKLQkJCQlFLmcuIGl0IGNhbiBiZSBvbmUgb2YgY3JpdGljYWwsIGhvdCwgcGFzc2l2ZSwKLQkJCQkgICAgYWN0aXZlWzAtKl0gZm9yIEFDUEkgdGhlcm1hbCB6b25lLgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK3RyaXBfcG9pbnRfWzAtKl1fdHlwZQorCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQuCisJRS5nLiBpdCBjYW4gYmUgb25lIG9mIGNyaXRpY2FsLCBob3QsIHBhc3NpdmUsIGFjdGl2ZVswLSpdIGZvciBBQ1BJCisJdGhlcm1hbCB6b25lLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl0JCQlTeXNmcyBsaW5rIHRvIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIG5vZGUgd2hlcmUgdGhlIHN5cyBJL0YKLQkJCQlmb3IgY29vbGluZyBkZXZpY2UgdGhyb3R0bGluZyBjb250cm9sIHJlcHJlc2VudHMuCi0JCQkJUk8KLQkJCQlPcHRpb25hbAorY2RldlswLSpdCisJU3lzZnMgbGluayB0byB0aGUgdGhlcm1hbCBjb29saW5nIGRldmljZSBub2RlIHdoZXJlIHRoZSBzeXMgSS9GCisJZm9yIGNvb2xpbmcgZGV2aWNlIHRocm90dGxpbmcgY29udHJvbCByZXByZXNlbnRzLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl1fdHJpcF9wb2ludAkJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwgem9uZQotCQkJCS0xIG1lYW5zIHRoZSBjb29saW5nIGRldmljZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB0cmlwIHBvaW50LgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK2NkZXZbMC0qXV90cmlwX3BvaW50CisJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwKKwl6b25lOyAtMSBtZWFucyB0aGUgY29vbGluZyBkZXZpY2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgdHJpcAorCXBvaW50LgorCVJPLCBPcHRpb25hbAogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29vbGluZyBkZXZpY2UgIGF0dHJpYnV0ZXMgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitwYXNzaXZlCisJQXR0cmlidXRlIGlzIG9ubHkgcHJlc2VudCBmb3Igem9uZXMgaW4gd2hpY2ggdGhlIHBhc3NpdmUgY29vbGluZworCXBvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSB0aGVybWFsIGRyaXZlci4gRGVmYXVsdCBpcyB6ZXJvCisJYW5kIGNhbiBiZSBzZXQgdG8gYSB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzKSB0byBlbmFibGUgYQorCXBhc3NpdmUgdHJpcCBwb2ludCBmb3IgdGhlIHpvbmUuIEFjdGl2YXRpb24gaXMgZG9uZSBieSBwb2xsaW5nIHdpdGgKKwlhbiBpbnRlcnZhbCBvZiAxIHNlY29uZC4KKwlVbml0OiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cworCVJXLCBPcHRpb25hbAogCi10eXBlCQkJCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZQotCQkJCWVnOiBGb3IgZ2VuZXJpYyBBQ1BJOiB0aGlzIHNob3VsZCBiZSAiRmFuIiwKLQkJCQkiUHJvY2Vzc29yIiBvciAiTENEIgotCQkJCWVnLiBGb3IgbWVtb3J5IGNvbnRyb2xsZXIgZGV2aWNlIG9uIGludGVsX21lbmxvdyBwbGF0Zm9ybToKLQkJCQl0aGlzIHNob3VsZCBiZSAiTWVtb3J5IGNvbnRyb2xsZXIiCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29vbGluZyBkZXZpY2UgYXR0cmlidXRlcyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1tYXhfc3RhdGUJCQlUaGUgbWF4aW11bSBwZXJtaXNzaWJsZSBjb29saW5nIHN0YXRlIG9mIHRoaXMgY29vbGluZyBkZXZpY2UuCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAordHlwZQorCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZSwgZS5nOgorCS0gZm9yIGdlbmVyaWMgQUNQSTogc2hvdWxkIGJlICJGYW4iLCAiUHJvY2Vzc29yIiBvciAiTENEIgorCS0gZm9yIG1lbW9yeSBjb250cm9sbGVyIGRldmljZSBvbiBpbnRlbF9tZW5sb3cgcGxhdGZvcm06CisJICBzaG91bGQgYmUgIk1lbW9yeSBjb250cm9sbGVyIi4KKwlSTywgUmVxdWlyZWQKIAotY3VyX3N0YXRlCQkJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgotCQkJCXRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZSwKLQkJCQljdXJfc3RhdGUgPT0gMCBtZWFucyBubyBjb29saW5nCi0JCQkJY3VyX3N0YXRlID09IG1heF9zdGF0ZSBtZWFucyB0aGUgbWF4aW11bSBjb29saW5nLgotCQkJCVJXCi0JCQkJUmVxdWlyZWQKK21heF9zdGF0ZQorCVRoZSBtYXhpbXVtIHBlcm1pc3NpYmxlIGNvb2xpbmcgc3RhdGUgb2YgdGhpcyBjb29saW5nIGRldmljZS4KKwlSTywgUmVxdWlyZWQKKworY3VyX3N0YXRlCisJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgorCVRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZToKKwktIGN1cl9zdGF0ZSA9PSAwIG1lYW5zIG5vIGNvb2xpbmcKKwktIGN1cl9zdGF0ZSA9PSBtYXhfc3RhdGUgbWVhbnMgdGhlIG1heGltdW0gY29vbGluZy4KKwlSVywgUmVxdWlyZWQKIAogMy4gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24KIAotQUNQSSB0aGVybWFsIHpvbmUgbWF5IHN1cHBvcnQgbXVsdGlwbGUgdHJpcCBwb2ludHMgbGlrZSBjcml0aWNhbC9ob3QvcGFzc2l2ZS9hY3RpdmUuCi1JZiBhbiBBQ1BJIHRoZXJtYWwgem9uZSBzdXBwb3J0cyBjcml0aWNhbCwgcGFzc2l2ZSwgYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwKLWl0IG1heSByZWdpc3RlciBpdHNlbGYgYXMgYSB0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgotSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMgdGhlcm1hbF9jb29saW5nX2RldmljZS4KLUlmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMCBtZXRob2QsCi10aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CitBQ1BJIHRoZXJtYWwgem9uZSBtYXkgc3VwcG9ydCBtdWx0aXBsZSB0cmlwIHBvaW50cyBsaWtlIGNyaXRpY2FsLCBob3QsCitwYXNzaXZlLCBhY3RpdmUuIElmIGFuIEFDUEkgdGhlcm1hbCB6b25lIHN1cHBvcnRzIGNyaXRpY2FsLCBwYXNzaXZlLAorYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwgaXQgbWF5IHJlZ2lzdGVyIGl0c2VsZiBhcyBhCit0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgorSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMKK3RoZXJtYWxfY29vbGluZ19kZXZpY2UuCisKK0lmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMAorbWV0aG9kLCB0aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CiAKIC9zeXMvY2xhc3MvdGhlcm1hbDoKIAogfHRoZXJtYWxfem9uZTE6Ci0JfC0tLS0tdHlwZToJCQlhY3BpdHoKLQl8LS0tLS10ZW1wOgkJCTM3MDAwCi0JfC0tLS0tbW9kZToJCQlrZXJuZWwKLQl8LS0tLS10cmlwX3BvaW50XzBfdGVtcDoJMTAwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8wX3R5cGU6CWNyaXRpY2FsCi0JfC0tLS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8xX3R5cGU6CXBhc3NpdmUKLQl8LS0tLS10cmlwX3BvaW50XzJfdGVtcDoJNzAwMDAKLQl8LS0tLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAotCXwtLS0tLXRyaXBfcG9pbnRfM190ZW1wOgk2MDAwMAotCXwtLS0tLXRyaXBfcG9pbnRfM190eXBlOglhY3RpdmUxCi0JfC0tLS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKLQl8LS0tLS1jZGV2MF90cmlwX3BvaW50OgkJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLwotCXwtLS0tLWNkZXYxOgkJCS0tLT4vc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZpY2UzCi0JfC0tLS0tY2RldjFfdHJpcF9wb2ludDoJCTIJLyogY2RldjEgY2FuIGJlIHVzZWQgZm9yIGFjdGl2ZVswXSovCisgICAgfC0tLXR5cGU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXA6CQkJMzcwMDAKKyAgICB8LS0tbW9kZToJCQlrZXJuZWwKKyAgICB8LS0tdHJpcF9wb2ludF8wX3RlbXA6CTEwMDAwMAorICAgIHwtLS10cmlwX3BvaW50XzBfdHlwZToJY3JpdGljYWwKKyAgICB8LS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCisgICAgfC0tLXRyaXBfcG9pbnRfMV90eXBlOglwYXNzaXZlCisgICAgfC0tLXRyaXBfcG9pbnRfMl90ZW1wOgk3MDAwMAorICAgIHwtLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAorICAgIHwtLS10cmlwX3BvaW50XzNfdGVtcDoJNjAwMDAKKyAgICB8LS0tdHJpcF9wb2ludF8zX3R5cGU6CWFjdGl2ZTEKKyAgICB8LS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKKyAgICB8LS0tY2RldjBfdHJpcF9wb2ludDoJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLworICAgIHwtLS1jZGV2MToJCQktLS0+L3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlMworICAgIHwtLS1jZGV2MV90cmlwX3BvaW50OgkyCS8qIGNkZXYxIGNhbiBiZSB1c2VkIGZvciBhY3RpdmVbMF0qLwogCiB8Y29vbGluZ19kZXZpY2UwOgotCXwtLS0tLXR5cGU6CQkJUHJvY2Vzc29yCi0JfC0tLS0tbWF4X3N0YXRlOgkJOAotCXwtLS0tLWN1cl9zdGF0ZToJCTAKKyAgICB8LS0tdHlwZToJCQlQcm9jZXNzb3IKKyAgICB8LS0tbWF4X3N0YXRlOgkJOAorICAgIHwtLS1jdXJfc3RhdGU6CQkwCiAKIHxjb29saW5nX2RldmljZTM6Ci0JfC0tLS0tdHlwZToJCQlGYW4KLQl8LS0tLS1tYXhfc3RhdGU6CQkyCi0JfC0tLS0tY3VyX3N0YXRlOgkJMAorICAgIHwtLS10eXBlOgkJCUZhbgorICAgIHwtLS1tYXhfc3RhdGU6CQkyCisgICAgfC0tLWN1cl9zdGF0ZToJCTAKIAogL3N5cy9jbGFzcy9od21vbjoKIAogfGh3bW9uMDoKLQl8LS0tLS1uYW1lOgkJCWFjcGl0egotCXwtLS0tLXRlbXAxX2lucHV0OgkJMzcwMDAKLQl8LS0tLS10ZW1wMV9jcml0OgkJMTAwMDAwCisgICAgfC0tLW5hbWU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXAxX2lucHV0OgkJMzcwMDAKKyAgICB8LS0tdGVtcDFfY3JpdDoJCTEwMDAwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CmluZGV4IDk1N2IyMmYuLjgxNzk2OTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKQEAgLTEyMzEsNiArMTIzMSw3IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjZGVmaW5lIF9TVFIoeCkgI3gKICNkZWZpbmUgU1RSKHgpIF9TVFIoeCkKQEAgLTEyNjUsNiArMTI2Niw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICB9CiAKKyAgICAgICBzdHJjYXQoZGVidWdmcywgIi90cmFjaW5nLyIpOwogICAgICAgIGRlYnVnZnNfZm91bmQgPSAxOwogCiAgICAgICAgcmV0dXJuIGRlYnVnZnM7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmFkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dApAQCAtMCwwICsxLDEzNiBAQAorV2hhdCBpcyBod3BvaXNvbj8KKworVXBjb21pbmcgSW50ZWwgQ1BVcyBoYXZlIHN1cHBvcnQgZm9yIHJlY292ZXJpbmcgZnJvbSBzb21lIG1lbW9yeSBlcnJvcnMKKyhgYE1DQSByZWNvdmVyeScnKS4gVGhpcyByZXF1aXJlcyB0aGUgT1MgdG8gZGVjbGFyZSBhIHBhZ2UgInBvaXNvbmVkIiwKK2tpbGwgdGhlIHByb2Nlc3NlcyBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIGF2b2lkIHVzaW5nIGl0IGluIHRoZSBmdXR1cmUuCisKK1RoaXMgcGF0Y2hraXQgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHRoZSBWTS4KKworVG8gcXVvdGUgdGhlIG92ZXJ2aWV3IGNvbW1lbnQ6CisKKyAqIEhpZ2ggbGV2ZWwgbWFjaGluZSBjaGVjayBoYW5kbGVyLiBIYW5kbGVzIHBhZ2VzIHJlcG9ydGVkIGJ5IHRoZQorICogaGFyZHdhcmUgYXMgYmVpbmcgY29ycnVwdGVkIHVzdWFsbHkgZHVlIHRvIGEgMmJpdCBFQ0MgbWVtb3J5IG9yIGNhY2hlCisgKiBmYWlsdXJlLgorICoKKyAqIFRoaXMgZm9jdXNzZXMgb24gcGFnZXMgZGV0ZWN0ZWQgYXMgY29ycnVwdGVkIGluIHRoZSBiYWNrZ3JvdW5kLgorICogV2hlbiB0aGUgY3VycmVudCBDUFUgdHJpZXMgdG8gY29uc3VtZSBjb3JydXB0aW9uIHRoZSBjdXJyZW50bHkKKyAqIHJ1bm5pbmcgcHJvY2VzcyBjYW4ganVzdCBiZSBraWxsZWQgZGlyZWN0bHkgaW5zdGVhZC4gVGhpcyBpbXBsaWVzCisgKiB0aGF0IGlmIHRoZSBlcnJvciBjYW5ub3QgYmUgaGFuZGxlZCBmb3Igc29tZSByZWFzb24gaXQncyBzYWZlIHRvCisgKiBqdXN0IGlnbm9yZSBpdCBiZWNhdXNlIG5vIGNvcnJ1cHRpb24gaGFzIGJlZW4gY29uc3VtZWQgeWV0LiBJbnN0ZWFkCisgKiB3aGVuIHRoYXQgaGFwcGVucyBhbm90aGVyIG1hY2hpbmUgY2hlY2sgd2lsbCBoYXBwZW4uCisgKgorICogSGFuZGxlcyBwYWdlIGNhY2hlIHBhZ2VzIGluIHZhcmlvdXMgc3RhdGVzLiBUaGUgdHJpY2t5IHBhcnQKKyAqIGhlcmUgaXMgdGhhdCB3ZSBjYW4gYWNjZXNzIGFueSBwYWdlIGFzeW5jaHJvbm91cyB0byBvdGhlciBWTQorICogdXNlcnMsIGJlY2F1c2UgbWVtb3J5IGZhaWx1cmVzIGNvdWxkIGhhcHBlbiBhbnl0aW1lIGFuZCBhbnl3aGVyZSwKKyAqIHBvc3NpYmx5IHZpb2xhdGluZyBzb21lIG9mIHRoZWlyIGFzc3VtcHRpb25zLiBUaGlzIGlzIHdoeSB0aGlzIGNvZGUKKyAqIGhhcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bC4gR2VuZXJhbGx5IGl0IHRyaWVzIHRvIHVzZSBub3JtYWwgbG9ja2luZworICogcnVsZXMsIGFzIGluIGdldCB0aGUgc3RhbmRhcmQgbG9ja3MsIGV2ZW4gaWYgdGhhdCBtZWFucyB0aGUKKyAqIGVycm9yIGhhbmRsaW5nIHRha2VzIHBvdGVudGlhbGx5IGEgbG9uZyB0aW1lLgorICoKKyAqIFNvbWUgb2YgdGhlIG9wZXJhdGlvbnMgaGVyZSBhcmUgc29tZXdoYXQgaW5lZmZpY2llbnQgYW5kIGhhdmUgbm9uCisgKiBsaW5lYXIgYWxnb3JpdGhtaWMgY29tcGxleGl0eSwgYmVjYXVzZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgbm90CisgKiBiZWVuIG9wdGltaXplZCBmb3IgdGhpcyBjYXNlLiBUaGlzIGlzIGluIHBhcnRpY3VsYXIgdGhlIGNhc2UKKyAqIGZvciB0aGUgbWFwcGluZyBmcm9tIGEgdm1hIHRvIGEgcHJvY2Vzcy4gU2luY2UgdGhpcyBjYXNlIGlzIGV4cGVjdGVkCisgKiB0byBiZSByYXJlIHdlIGhvcGUgd2UgY2FuIGdldCBhd2F5IHdpdGggdGhpcy4KKworVGhlIGNvZGUgY29uc2lzdHMgb2YgYSB0aGUgaGlnaCBsZXZlbCBoYW5kbGVyIGluIG1tL21lbW9yeS1mYWlsdXJlLmMsCithIG5ldyBwYWdlIHBvaXNvbiBiaXQgYW5kIHZhcmlvdXMgY2hlY2tzIGluIHRoZSBWTSB0byBoYW5kbGUgcG9pc29uZWQKK3BhZ2VzLgorCitUaGUgbWFpbiB0YXJnZXQgcmlnaHQgbm93IGlzIEtWTSBndWVzdHMsIGJ1dCBpdCB3b3JrcyBmb3IgYWxsIGtpbmRzCitvZiBhcHBsaWNhdGlvbnMuIEtWTSBzdXBwb3J0IHJlcXVpcmVzIGEgcmVjZW50IHFlbXUta3ZtIHJlbGVhc2UuCisKK0ZvciB0aGUgS1ZNIHVzZSB0aGVyZSB3YXMgbmVlZCBmb3IgYSBuZXcgc2lnbmFsIHR5cGUgc28gdGhhdAorS1ZNIGNhbiBpbmplY3QgdGhlIG1hY2hpbmUgY2hlY2sgaW50byB0aGUgZ3Vlc3Qgd2l0aCB0aGUgcHJvcGVyCithZGRyZXNzLiBUaGlzIGluIHRoZW9yeSBhbGxvd3Mgb3RoZXIgYXBwbGljYXRpb25zIHRvIGhhbmRsZQorbWVtb3J5IGZhaWx1cmVzIHRvby4gVGhlIGV4cGVjdGlvbiBpcyB0aGF0IG5lYXIgYWxsIGFwcGxpY2F0aW9ucword29uJ3QgZG8gdGhhdCwgYnV0IHNvbWUgdmVyeSBzcGVjaWFsaXplZCBvbmVzIG1pZ2h0LgorCistLS0KKworVGhlcmUgYXJlIHR3byAoYWN0dWFsbHkgdGhyZWUpIG1vZGkgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgY2FuIGJlIGluOgorCit2bS5tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBzeXNjdGwgc2V0IHRvIHplcm86CisJQWxsIG1lbW9yeSBmYWlsdXJlcyBjYXVzZSBhIHBhbmljLiBEbyBub3QgYXR0ZW1wdCByZWNvdmVyeS4KKwkob24geDg2IHRoaXMgY2FuIGJlIGFsc28gYWZmZWN0ZWQgYnkgdGhlIHRvbGVyYW50IGxldmVsIG9mIHRoZQorCU1DRSBzdWJzeXN0ZW0pCisKK2Vhcmx5IGtpbGwKKwkoY2FuIGJlIGNvbnRyb2xsZWQgZ2xvYmFsbHkgYW5kIHBlciBwcm9jZXNzKQorCVNlbmQgU0lHQlVTIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyBzb29uIGFzIHRoZSBlcnJvciBpcyBkZXRlY3RlZAorCVRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB3aG8gY2FuIHByb2Nlc3MgbWVtb3J5IGVycm9ycyBpbiBhIGdlbnRsZQorCXdheSAoZS5nLiBkcm9wIGFmZmVjdGVkIG9iamVjdCkKKwlUaGlzIGlzIHRoZSBtb2RlIHVzZWQgYnkgS1ZNIHFlbXUuCisKK2xhdGUga2lsbAorCVNlbmQgU0lHQlVTIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHJ1bnMgaW50byB0aGUgY29ycnVwdGVkIHBhZ2UuCisJVGhpcyBpcyBiZXN0IGZvciBtZW1vcnkgZXJyb3IgdW5hd2FyZSBhcHBsaWNhdGlvbnMgYW5kIGRlZmF1bHQKKwlOb3RlIHNvbWUgcGFnZXMgYXJlIGFsd2F5cyBoYW5kbGVkIGFzIGxhdGUga2lsbC4KKworLS0tCisKK1VzZXIgY29udHJvbDoKKwordm0ubWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkKKwlTZWUgc3lzY3RsLnR4dAorCit2bS5tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsCisJRW5hYmxlIGVhcmx5IGtpbGwgbW9kZSBnbG9iYWxseQorCitQUl9NQ0VfS0lMTAorCVNldCBlYXJseS9sYXRlIGtpbGwgbW9kZS9yZXZlcnQgdG8gc3lzdGVtIGRlZmF1bHQKKwlhcmcxOiBQUl9NQ0VfS0lMTF9DTEVBUjogUmV2ZXJ0IHRvIHN5c3RlbSBkZWZhdWx0CisJYXJnMTogUFJfTUNFX0tJTExfU0VUOiBhcmcyIGRlZmluZXMgdGhyZWFkIHNwZWNpZmljIG1vZGUKKwkJUFJfTUNFX0tJTExfRUFSTFk6IEVhcmx5IGtpbGwKKwkJUFJfTUNFX0tJTExfTEFURTogIExhdGUga2lsbAorCQlQUl9NQ0VfS0lMTF9ERUZBVUxUOiBVc2Ugc3lzdGVtIGdsb2JhbCBkZWZhdWx0CitQUl9NQ0VfS0lMTF9HRVQKKwlyZXR1cm4gY3VycmVudCBtb2RlCisKKworLS0tCisKK1Rlc3Rpbmc6CisKK21hZHZpc2UoTUFEVl9QT0lTT04sIC4uLi4pCisJKGFzIHJvb3QpCisJUG9pc29uIGEgcGFnZSBpbiB0aGUgcHJvY2VzcyBmb3IgdGVzdGluZworCisKK2h3cG9pc29uLWluamVjdCBtb2R1bGUgdGhyb3VnaCBkZWJ1Z2ZzCisJL3N5cy9kZWJ1Zy9od3BvaXNvbi9jb3JydXB0LXBmbgorCitJbmplY3QgaHdwb2lzb24gZmF1bHQgYXQgUEZOIGVjaG9lZCBpbnRvIHRoaXMgZmlsZQorCisKK0FyY2hpdGVjdHVyZSBzcGVjaWZpYyBNQ0UgaW5qZWN0b3IKKworeDg2IGhhcyBtY2UtaW5qZWN0LCBtY2UtdGVzdAorCitTb21lIHBvcnRhYmxlIGh3cG9pc29uIHRlc3QgcHJvZ3JhbXMgaW4gbWNlLXRlc3QsIHNlZSBibG93LgorCistLS0KKworUmVmZXJlbmNlczoKKworaHR0cDovL2hhbG9iYXRlcy5kZS9tY2UtbGMwOS0yLnBkZgorCU92ZXJ2aWV3IHByZXNlbnRhdGlvbiBmcm9tIExpbnV4Q29uIDA5CisKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvY3B1L21jZS9tY2UtdGVzdC5naXQKKwlUZXN0IHN1aXRlIChod3BvaXNvbiBzcGVjaWZpYyBwb3J0YWJsZSB0ZXN0cyBpbiB0c3JjKQorCitnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2NwdS9tY2UvbWNlLWluamVjdC5naXQKKwl4ODYgc3BlY2lmaWMgaW5qZWN0b3IKKworCistLS0KKworTGltaXRhdGlvbnM6CisKKy0gTm90IGFsbCBwYWdlIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYW5kIG5ldmVyIHdpbGwuIE1vc3Qga2VybmVsIGludGVybmFsCitvYmplY3RzIGNhbm5vdCBiZSByZWNvdmVyZWQsIG9ubHkgTFJVIHBhZ2VzIGZvciBub3cuCistIFJpZ2h0IG5vdyBodWdlcGFnZSBzdXBwb3J0IGlzIG1pc3NpbmcuCisKKy0tLQorQW5kaSBLbGVlbiwgT2N0IDIwMDkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0CmluZGV4IDcyYTIyZjYuLjI2MmQ4ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0va3NtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQKQEAgLTUyLDE1ICs1MiwxNSBAQAogcmVhZGFibGUgYnkgYWxsIGJ1dCB3cml0YWJsZSBvbmx5IGJ5IHJvb3Q6CiAKIG1heF9rZXJuZWxfcGFnZXMgLSBzZXQgdG8gbWF4aW11bSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRoYXQgS1NNIG1heSB1c2UKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMDAgPiAvc3lzL2tlcm5lbC9tbS9rc20vbWF4X2tlcm5lbF9wYWdlcyIKKyAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDEwMDAwMCA+IC9zeXMva2VybmVsL21tL2tzbS9tYXhfa2VybmVsX3BhZ2VzIgogICAgICAgICAgICAgICAgICAgIFZhbHVlIDAgaW1wb3NlcyBubyBsaW1pdCBvbiB0aGUga2VybmVsIHBhZ2VzIEtTTSBtYXkgdXNlOwogICAgICAgICAgICAgICAgICAgIGJ1dCBub3RlIHRoYXQgYW55IHByb2Nlc3MgdXNpbmcgTUFEVl9NRVJHRUFCTEUgY2FuIGNhdXNlCiAgICAgICAgICAgICAgICAgICAgS1NNIHRvIGFsbG9jYXRlIHRoZXNlIHBhZ2VzLCB1bnN3YXBwYWJsZSB1bnRpbCBpdCBleGl0cy4KLSAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAyMDAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogcXVhcnRlciBvZiBtZW1vcnkgKGNob3NlbiB0byBub3QgcGluIHRvbyBtdWNoKQogCiBwYWdlc190b19zY2FuICAgIC0gaG93IG1hbnkgcHJlc2VudCBwYWdlcyB0byBzY2FuIGJlZm9yZSBrc21kIGdvZXMgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMCA+IC9zeXMva2VybmVsL21tL2tzbS9wYWdlc190b19zY2FuIgotICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDIwMCAoY2hvc2VuIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzKQorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMTAwID4gL3N5cy9rZXJuZWwvbW0va3NtL3BhZ2VzX3RvX3NjYW4iCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMTAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCiAKIHNsZWVwX21pbGxpc2VjcyAgLSBob3cgbWFueSBtaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmVmb3JlIG5leHQgc2NhbgogICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAgPiAvc3lzL2tlcm5lbC9tbS9rc20vc2xlZXBfbWlsbGlzZWNzIgpAQCAtNzAsNyArNzAsOCBAQAogICAgICAgICAgICAgICAgICAgIHNldCAxIHRvIHJ1biBrc21kIGUuZy4gImVjaG8gMSA+IC9zeXMva2VybmVsL21tL2tzbS9ydW4iLAogICAgICAgICAgICAgICAgICAgIHNldCAyIHRvIHN0b3Aga3NtZCBhbmQgdW5tZXJnZSBhbGwgcGFnZXMgY3VycmVudGx5IG1lcmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgbGVhdmUgbWVyZ2VhYmxlIGFyZWFzIHJlZ2lzdGVyZWQgZm9yIG5leHQgcnVuCi0gICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMSAoZm9yIGltbWVkaWF0ZSB1c2UgYnkgYXBwcyB3aGljaCByZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAwIChtdXN0IGJlIGNoYW5nZWQgdG8gMSB0byBhY3RpdmF0ZSBLU00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGlmIENPTkZJR19TWVNGUyBpcyBkaXNhYmxlZCkKIAogVGhlIGVmZmVjdGl2ZW5lc3Mgb2YgS1NNIGFuZCBNQURWX01FUkdFQUJMRSBpcyBzaG93biBpbiAvc3lzL2tlcm5lbC9tbS9rc20vOgogCkBAIC04Niw0ICs4Nyw0IEBACiBwcm9wb3J0aW9uIHRoZXJlIHdvdWxkIGFsc28gaW5kaWNhdGUgcG9vciB1c2Ugb2YgbWFkdmlzZSBNQURWX01FUkdFQUJMRS4KIAogSXppayBFaWR1cywKLUh1Z2ggRGlja2lucywgMzAgSnVseSAyMDA5CitIdWdoIERpY2tpbnMsIDI0IFNlcHQgMjAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlLXR5cGVzLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwppbmRleCBmYTFhMzBkLi40NzkzYzZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwpAQCAtMiw3ICsyLDEwIEBACiAgKiBwYWdlLXR5cGVzOiBUb29sIGZvciBxdWVyeWluZyBwYWdlIGZsYWdzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIGNvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgV3UgRmVuZ2d1YW5nIDxmZW5nZ3Vhbmcud3VAaW50ZWwuY29tPgorICoKKyAqIEF1dGhvcnM6IFd1IEZlbmdndWFuZyA8ZmVuZ2d1YW5nLnd1QGludGVsLmNvbT4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KICAqLwogCiAjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKQEAgLTY5LDcgKzcyLDkgQEAKICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwJMTYKICNkZWZpbmUgS1BGX0hVR0UJCTE3CiAjZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKKyNkZWZpbmUgS1BGX0hXUE9JU09OCQkxOQogI2RlZmluZSBLUEZfTk9QQUdFCQkyMAorI2RlZmluZSBLUEZfS1NNCQkJMjEKIAogLyogWzMyLV0ga2VybmVsIGhhY2tpbmcgYXNzaXN0YW5jZXMgKi8KICNkZWZpbmUgS1BGX1JFU0VSVkVECQkzMgpAQCAtMTE2LDcgKzEyMSw5IEBACiAJW0tQRl9DT01QT1VORF9UQUlMXQk9ICJUOmNvbXBvdW5kX3RhaWwiLAogCVtLUEZfSFVHRV0JCT0gIkc6aHVnZSIsCiAJW0tQRl9VTkVWSUNUQUJMRV0JPSAidTp1bmV2aWN0YWJsZSIsCisJW0tQRl9IV1BPSVNPTl0JCT0gIlg6aHdwb2lzb24iLAogCVtLUEZfTk9QQUdFXQkJPSAibjpub3BhZ2UiLAorCVtLUEZfS1NNXQkJPSAieDprc20iLAogCiAJW0tQRl9SRVNFUlZFRF0JCT0gInI6cmVzZXJ2ZWQiLAogCVtLUEZfTUxPQ0tFRF0JCT0gIm06bWxvY2tlZCIsCkBAIC0xNTIsOSArMTU5LDYgQEAKIHN0YXRpYyBpbnQJCW5yX3ZtYXM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19zdGFydFtNQVhfVk1BU107CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19lbmRbTUFYX1ZNQVNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJdm9mZnNldDsKLQotc3RhdGljIGludAkJcGFnZW1hcF9mZDsKIAogI2RlZmluZSBNQVhfQklUX0ZJTFRFUlMJNjQKIHN0YXRpYyBpbnQJCW5yX2JpdF9maWx0ZXJzOwpAQCAtMTYzLDkgKzE2NywxNiBAQAogCiBzdGF0aWMgaW50CQlwYWdlX3NpemU7CiAKLSNkZWZpbmUgUEFHRVNfQkFUQ0gJKDY0IDw8IDEwKQkvKiA2NGsgcGFnZXMgKi8KK3N0YXRpYyBpbnQJCXBhZ2VtYXBfZmQ7CiBzdGF0aWMgaW50CQlrcGFnZWZsYWdzX2ZkOwogCitzdGF0aWMgaW50CQlvcHRfaHdwb2lzb247CitzdGF0aWMgaW50CQlvcHRfdW5wb2lzb247CisKK3N0YXRpYyBjaGFyCQkqaHdwb2lzb25fZGVidWdfZnMgPSAiL2RlYnVnL2h3cG9pc29uIjsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2luamVjdF9mZDsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2ZvcmdldF9mZDsKKwogI2RlZmluZSBIQVNIX1NISUZUCTEzCiAjZGVmaW5lIEhBU0hfU0laRQkoMSA8PCBIQVNIX1NISUZUKQogI2RlZmluZSBIQVNIX01BU0sJKEhBU0hfU0laRSAtIDEpCkBAIC0yMDcsNiArMjE4LDc0IEBACiAJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCitzdGF0aWMgaW50IGNoZWNrZWRfb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKQoreworCWludCBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzKTsKKworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKHBhdGhuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXJldHVybiBmZDsKK30KKworLyoKKyAqIHBhZ2VtYXAva3BhZ2VmbGFncyByb3V0aW5lcworICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3U2NF9yZWFkKGludCBmZCwgY2hhciAqbmFtZSwKKwkJCQkgdWludDY0X3QgKmJ1ZiwKKwkJCQkgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCQkgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlsb25nIGJ5dGVzOworCisJaWYgKGluZGV4ID4gVUxPTkdfTUFYIC8gOCkKKwkJZmF0YWwoImluZGV4IG92ZXJmbG93OiAlbHVcbiIsIGluZGV4KTsKKworCWlmIChsc2VlayhmZCwgaW5kZXggKiA4LCBTRUVLX1NFVCkgPCAwKSB7CisJCXBlcnJvcihuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWJ5dGVzID0gcmVhZChmZCwgYnVmLCBjb3VudCAqIDgpOworCWlmIChieXRlcyA8IDApIHsKKwkJcGVycm9yKG5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChieXRlcyAlIDgpCisJCWZhdGFsKCJwYXJ0aWFsIHJlYWQ6ICVsdSBieXRlc1xuIiwgYnl0ZXMpOworCisJcmV0dXJuIGJ5dGVzIC8gODsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcga3BhZ2VmbGFnc19yZWFkKHVpbnQ2NF90ICpidWYsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlcykKK3sKKwlyZXR1cm4gZG9fdTY0X3JlYWQoa3BhZ2VmbGFnc19mZCwgUFJPQ19LUEFHRUZMQUdTLCBidWYsIGluZGV4LCBwYWdlcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcmVhZCh1aW50NjRfdCAqYnVmLAorCQkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZXMpCit7CisJcmV0dXJuIGRvX3U2NF9yZWFkKHBhZ2VtYXBfZmQsICIvcHJvYy9waWQvcGFnZW1hcCIsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9wZm4odWludDY0X3QgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcGZuOworCisJaWYgKHZhbCAmIFBNX1BSRVNFTlQpCisJCXBmbiA9IFBNX1BGUkFNRSh2YWwpOworCWVsc2UKKwkJcGZuID0gMDsKKworCXJldHVybiBwZm47Cit9CisKIAogLyoKICAqIHBhZ2UgZmxhZyBuYW1lcwpAQCAtMjU1LDcgKzMzNCw4IEBACiAgKiBwYWdlIGxpc3QgYW5kIHN1bW1hcnkKICAqLwogCi1zdGF0aWMgdm9pZCBzaG93X3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7CiAJc3RhdGljIHVpbnQ2NF90ICAgICAgZmxhZ3MwOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHZvZmY7CkBAIC0yODEsNyArMzYxLDggQEAKIAljb3VudCAgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQogewogCWlmIChvcHRfcGlkKQogCQlwcmludGYoIiVseFx0Iiwgdm9mZnNldCk7CkBAIC0zNjIsNiArNDQzLDYyIEBACiAJcmV0dXJuIGZsYWdzOwogfQogCitzdGF0aWMgdWludDY0X3Qga3BhZ2VmbGFnc19mbGFncyh1aW50NjRfdCBmbGFncykKK3sKKwlmbGFncyA9IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKGZsYWdzKTsKKworCWlmICghb3B0X3JhdykKKwkJZmxhZ3MgPSB3ZWxsX2tub3duX2ZsYWdzKGZsYWdzKTsKKworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIHBhZ2UgYWN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaHdwb2lzb25fZmQodm9pZCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCisJaWYgKG9wdF9od3BvaXNvbiAmJiAhaHdwb2lzb25faW5qZWN0X2ZkKSB7CisJCXNwcmludGYoYnVmLCAiJXMvY29ycnVwdC1wZm4iLCBod3BvaXNvbl9kZWJ1Z19mcyk7CisJCWh3cG9pc29uX2luamVjdF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKKwl9CisKKwlpZiAob3B0X3VucG9pc29uICYmICFod3BvaXNvbl9mb3JnZXRfZmQpIHsKKwkJc3ByaW50ZihidWYsICIlcy9yZW5ldy1wZm4iLCBod3BvaXNvbl9kZWJ1Z19mcyk7CisJCWh3cG9pc29uX2ZvcmdldF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaHdwb2lzb25fcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBvZmZzZXQpOworCWxlbiA9IHdyaXRlKGh3cG9pc29uX2luamVjdF9mZCwgYnVmLCBsZW4pOworCWlmIChsZW4gPCAwKSB7CisJCXBlcnJvcigiaHdwb2lzb24gaW5qZWN0Iik7CisJCXJldHVybiBsZW47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVucG9pc29uX3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJY2hhciBidWZbMTAwXTsKKwlpbnQgbGVuOworCisJbGVuID0gc3ByaW50ZihidWYsICIweCVseFxuIiwgb2Zmc2V0KTsKKwlsZW4gPSB3cml0ZShod3BvaXNvbl9mb3JnZXRfZmQsIGJ1ZiwgbGVuKTsKKwlpZiAobGVuIDwgMCkgeworCQlwZXJyb3IoImh3cG9pc29uIGZvcmdldCIpOworCQlyZXR1cm4gbGVuOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIHBhZ2UgZnJhbWUgd2Fsa2VyCkBAIC0zOTQsMTA0ICs1MzEsODMgQEAKIAlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9wYWdlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50NjRfdCBmbGFncykKK3N0YXRpYyB2b2lkIGFkZF9wYWdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7Ci0JZmxhZ3MgPSBleHBhbmRfb3ZlcmxvYWRlZF9mbGFncyhmbGFncyk7Ci0KLQlpZiAoIW9wdF9yYXcpCi0JCWZsYWdzID0gd2VsbF9rbm93bl9mbGFncyhmbGFncyk7CisJZmxhZ3MgPSBrcGFnZWZsYWdzX2ZsYWdzKGZsYWdzKTsKIAogCWlmICghYml0X21hc2tfb2soZmxhZ3MpKQogCQlyZXR1cm47CiAKKwlpZiAob3B0X2h3cG9pc29uKQorCQlod3BvaXNvbl9wYWdlKG9mZnNldCk7CisJaWYgKG9wdF91bnBvaXNvbikKKwkJdW5wb2lzb25fcGFnZShvZmZzZXQpOworCiAJaWYgKG9wdF9saXN0ID09IDEpCi0JCXNob3dfcGFnZV9yYW5nZShvZmZzZXQsIGZsYWdzKTsKKwkJc2hvd19wYWdlX3JhbmdlKHZvZmZzZXQsIG9mZnNldCwgZmxhZ3MpOwogCWVsc2UgaWYgKG9wdF9saXN0ID09IDIpCi0JCXNob3dfcGFnZShvZmZzZXQsIGZsYWdzKTsKKwkJc2hvd19wYWdlKHZvZmZzZXQsIG9mZnNldCwgZmxhZ3MpOwogCiAJbnJfcGFnZXNbaGFzaF9zbG90KGZsYWdzKV0rKzsKIAl0b3RhbF9wYWdlcysrOwogfQogCi1zdGF0aWMgdm9pZCB3YWxrX3Bmbih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGNvdW50KQorI2RlZmluZSBLUEFHRUZMQUdTX0JBVENICSg2NCA8PCAxMCkJLyogNjRrIHBhZ2VzICovCitzdGF0aWMgdm9pZCB3YWxrX3Bmbih1bnNpZ25lZCBsb25nIHZvZmZzZXQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50KQogeworCXVpbnQ2NF90IGJ1ZltLUEFHRUZMQUdTX0JBVENIXTsKIAl1bnNpZ25lZCBsb25nIGJhdGNoOwotCXVuc2lnbmVkIGxvbmcgbjsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChpbmRleCA+IFVMT05HX01BWCAvIEtQRl9CWVRFUykKLQkJZmF0YWwoImluZGV4IG92ZXJmbG93OiAlbHVcbiIsIGluZGV4KTsKLQotCWxzZWVrKGtwYWdlZmxhZ3NfZmQsIGluZGV4ICogS1BGX0JZVEVTLCBTRUVLX1NFVCk7Ci0KIAl3aGlsZSAoY291bnQpIHsKLQkJdWludDY0X3Qga3BhZ2VmbGFnc19idWZbS1BGX0JZVEVTICogUEFHRVNfQkFUQ0hdOwotCi0JCWJhdGNoID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIFBBR0VTX0JBVENIKTsKLQkJbiA9IHJlYWQoa3BhZ2VmbGFnc19mZCwga3BhZ2VmbGFnc19idWYsIGJhdGNoICogS1BGX0JZVEVTKTsKLQkJaWYgKG4gPT0gMCkKKwkJYmF0Y2ggPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwgS1BBR0VGTEFHU19CQVRDSCk7CisJCXBhZ2VzID0ga3BhZ2VmbGFnc19yZWFkKGJ1ZiwgaW5kZXgsIGJhdGNoKTsKKwkJaWYgKHBhZ2VzID09IDApCiAJCQlicmVhazsKLQkJaWYgKG4gPCAwKSB7Ci0JCQlwZXJyb3IoUFJPQ19LUEFHRUZMQUdTKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQogCi0JCWlmIChuICUgS1BGX0JZVEVTICE9IDApCi0JCQlmYXRhbCgicGFydGlhbCByZWFkOiAlbHUgYnl0ZXNcbiIsIG4pOwotCQluID0gbiAvIEtQRl9CWVRFUzsKKwkJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspCisJCQlhZGRfcGFnZSh2b2Zmc2V0ICsgaSwgaW5kZXggKyBpLCBidWZbaV0pOwogCi0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCQlhZGRfcGFnZShpbmRleCArIGksIGtwYWdlZmxhZ3NfYnVmW2ldKTsKLQotCQlpbmRleCArPSBiYXRjaDsKLQkJY291bnQgLT0gYmF0Y2g7CisJCWluZGV4ICs9IHBhZ2VzOworCQljb3VudCAtPSBwYWdlczsKIAl9CiB9CiAKLQotI2RlZmluZSBQQUdFTUFQX0JBVENICTQwOTYKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRhc2tfcGZuKHVuc2lnbmVkIGxvbmcgcGdvZmYpCisjZGVmaW5lIFBBR0VNQVBfQkFUQ0gJKDY0IDw8IDEwKQorc3RhdGljIHZvaWQgd2Fsa192bWEodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQlzdGF0aWMgdWludDY0X3QgYnVmW1BBR0VNQVBfQkFUQ0hdOwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0OwotCXN0YXRpYyBsb25nIGNvdW50OwotCXVpbnQ2NF90IHBmbjsKKwl1aW50NjRfdCBidWZbUEFHRU1BUF9CQVRDSF07CisJdW5zaWduZWQgbG9uZyBiYXRjaDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChwZ29mZiA8IHN0YXJ0IHx8IHBnb2ZmID49IHN0YXJ0ICsgY291bnQpIHsKLQkJaWYgKGxzZWVrNjQocGFnZW1hcF9mZCwKLQkJCSAgICAodWludDY0X3QpcGdvZmYgKiBQTV9FTlRSWV9CWVRFUywKLQkJCSAgICBTRUVLX1NFVCkgPCAwKSB7Ci0JCQlwZXJyb3IoInBhZ2VtYXAgc2VlayIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCXdoaWxlIChjb3VudCkgeworCQliYXRjaCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCBQQUdFTUFQX0JBVENIKTsKKwkJcGFnZXMgPSBwYWdlbWFwX3JlYWQoYnVmLCBpbmRleCwgYmF0Y2gpOworCQlpZiAocGFnZXMgPT0gMCkKKwkJCWJyZWFrOworCisJCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCQlwZm4gPSBwYWdlbWFwX3BmbihidWZbaV0pOworCQkJaWYgKHBmbikKKwkJCQl3YWxrX3BmbihpbmRleCArIGksIHBmbiwgMSk7CiAJCX0KLQkJY291bnQgPSByZWFkKHBhZ2VtYXBfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAoY291bnQgPT0gMCkKLQkJCXJldHVybiAwOwotCQlpZiAoY291bnQgPCAwKSB7Ci0JCQlwZXJyb3IoInBhZ2VtYXAgcmVhZCIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0JCWlmIChjb3VudCAlIFBNX0VOVFJZX0JZVEVTKSB7Ci0JCQlmYXRhbCgicGFnZW1hcCByZWFkIG5vdCBhbGlnbmVkLlxuIik7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQkJY291bnQgLz0gUE1fRU5UUllfQllURVM7Ci0JCXN0YXJ0ID0gcGdvZmY7CisKKwkJaW5kZXggKz0gcGFnZXM7CisJCWNvdW50IC09IHBhZ2VzOwogCX0KLQotCXBmbiA9IGJ1ZltwZ29mZiAtIHN0YXJ0XTsKLQlpZiAocGZuICYgUE1fUFJFU0VOVCkKLQkJcGZuID0gUE1fUEZSQU1FKHBmbik7Ci0JZWxzZQotCQlwZm4gPSAwOwotCi0JcmV0dXJuIHBmbjsKIH0KIAogc3RhdGljIHZvaWQgd2Fsa190YXNrKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JaW50IGkgPSAwOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gaW5kZXggKyBjb3VudDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCBpID0gMDsKIAogCXdoaWxlIChpbmRleCA8IGVuZCkgewogCkBAIC01MDEsMTUgKzYxNywxMSBAQAogCQlpZiAocGdfc3RhcnRbaV0gPj0gZW5kKQogCQkJcmV0dXJuOwogCi0JCXZvZmZzZXQgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBwZ19zdGFydFtpXSwgaW5kZXgpOwotCQlpbmRleCAgID0gbWluX3QodW5zaWduZWQgbG9uZywgcGdfZW5kW2ldLCBlbmQpOworCQlzdGFydCA9IG1heF90KHVuc2lnbmVkIGxvbmcsIHBnX3N0YXJ0W2ldLCBpbmRleCk7CisJCWluZGV4ID0gbWluX3QodW5zaWduZWQgbG9uZywgcGdfZW5kW2ldLCBlbmQpOwogCi0JCWFzc2VydCh2b2Zmc2V0IDwgaW5kZXgpOwotCQlmb3IgKDsgdm9mZnNldCA8IGluZGV4OyB2b2Zmc2V0KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgcGZuID0gdGFza19wZm4odm9mZnNldCk7Ci0JCQlpZiAocGZuKQotCQkJCXdhbGtfcGZuKHBmbiwgMSk7Ci0JCX0KKwkJYXNzZXJ0KHN0YXJ0IDwgaW5kZXgpOworCQl3YWxrX3ZtYShzdGFydCwgaW5kZXggLSBzdGFydCk7CiAJfQogfQogCkBAIC01MjcsMTggKzYzOSwxNCBAQAogewogCWludCBpOwogCi0Ja3BhZ2VmbGFnc19mZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7Ci0JaWYgKGtwYWdlZmxhZ3NfZmQgPCAwKSB7Ci0JCXBlcnJvcihQUk9DX0tQQUdFRkxBR1MpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQorCWtwYWdlZmxhZ3NfZmQgPSBjaGVja2VkX29wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7CiAKIAlpZiAoIW5yX2FkZHJfcmFuZ2VzKQogCQlhZGRfYWRkcl9yYW5nZSgwLCBVTE9OR19NQVgpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2FkZHJfcmFuZ2VzOyBpKyspCiAJCWlmICghb3B0X3BpZCkKLQkJCXdhbGtfcGZuKG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKKwkJCXdhbGtfcGZuKDAsIG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKIAkJZWxzZQogCQkJd2Fsa190YXNrKG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKIApAQCAtNTc1LDYgKzY4Myw4IEBACiAiICAgICAgICAgICAgLWx8LS1saXN0ICAgICAgICAgICAgICAgICBTaG93IHBhZ2UgZGV0YWlscyBpbiByYW5nZXNcbiIKICIgICAgICAgICAgICAtTHwtLWxpc3QtZWFjaCAgICAgICAgICAgIFNob3cgcGFnZSBkZXRhaWxzIG9uZSBieSBvbmVcbiIKICIgICAgICAgICAgICAtTnwtLW5vLXN1bW1hcnkgICAgICAgICAgIERvbid0IHNob3cgc3VtbWF5IGluZm9cbiIKKyIgICAgICAgICAgICAtWHwtLWh3cG9pc29uICAgICAgICAgICAgIGh3cG9pc29uIHBhZ2VzXG4iCisiICAgICAgICAgICAgLXh8LS11bnBvaXNvbiAgICAgICAgICAgICB1bnBvaXNvbiBwYWdlc1xuIgogIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgICAgU2hvdyB0aGlzIHVzYWdlIG1lc3NhZ2VcbiIKICJhZGRyLXNwZWM6XG4iCiAiICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgcGFnZSBhdCBvZmZzZXQgTiAodW5pdDogcGFnZXMpXG4iCkBAIC02MjQsMTEgKzczNCw3IEBACiAJb3B0X3BpZCA9IHBhcnNlX251bWJlcihzdHIpOwogCiAJc3ByaW50ZihidWYsICIvcHJvYy8lZC9wYWdlbWFwIiwgb3B0X3BpZCk7Ci0JcGFnZW1hcF9mZCA9IG9wZW4oYnVmLCBPX1JET05MWSk7Ci0JaWYgKHBhZ2VtYXBfZmQgPCAwKSB7Ci0JCXBlcnJvcihidWYpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQorCXBhZ2VtYXBfZmQgPSBjaGVja2VkX29wZW4oYnVmLCBPX1JET05MWSk7CiAKIAlzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL21hcHMiLCBvcHRfcGlkKTsKIAlmaWxlID0gZm9wZW4oYnVmLCAiciIpOwpAQCAtNzg4LDYgKzg5NCw4IEBACiAJeyAibGlzdCIgICAgICAsIDAsIE5VTEwsICdsJyB9LAogCXsgImxpc3QtZWFjaCIgLCAwLCBOVUxMLCAnTCcgfSwKIAl7ICJuby1zdW1tYXJ5IiwgMCwgTlVMTCwgJ04nIH0sCisJeyAiaHdwb2lzb24iICAsIDAsIE5VTEwsICdYJyB9LAorCXsgInVucG9pc29uIiAgLCAwLCBOVUxMLCAneCcgfSwKIAl7ICJoZWxwIiAgICAgICwgMCwgTlVMTCwgJ2gnIH0sCiAJeyBOVUxMICAgICAgICAsIDAsIE5VTEwsIDAgfQogfTsKQEAgLTc5OSw3ICs5MDcsNyBAQAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiAKIAl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LAotCQkJCSJycDpmOmE6YjpsTE5oIiwgb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCQkJInJwOmY6YTpiOmxMTlh4aCIsIG9wdHMsIE5VTEwpKSAhPSAtMSkgewogCQlzd2l0Y2ggKGMpIHsKIAkJY2FzZSAncic6CiAJCQlvcHRfcmF3ID0gMTsKQEAgLTgyNSw2ICs5MzMsMTQgQEAKIAkJY2FzZSAnTic6CiAJCQlvcHRfbm9fc3VtbWFyeSA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQlvcHRfaHdwb2lzb24gPSAxOworCQkJcHJlcGFyZV9od3BvaXNvbl9mZCgpOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJb3B0X3VucG9pc29uID0gMTsKKwkJCXByZXBhcmVfaHdwb2lzb25fZmQoKTsKKwkJCWJyZWFrOwogCQljYXNlICdoJzoKIAkJCXVzYWdlKCk7CiAJCQlleGl0KDApOwpAQCAtODQ0LDcgKzk2MCw3IEBACiAJd2Fsa19hZGRyX3JhbmdlcygpOwogCiAJaWYgKG9wdF9saXN0ID09IDEpCi0JCXNob3dfcGFnZV9yYW5nZSgwLCAwKTsgIC8qIGRyYWluIHRoZSBidWZmZXIgKi8KKwkJc2hvd19wYWdlX3JhbmdlKDAsIDAsIDApOyAgLyogZHJhaW4gdGhlIGJ1ZmZlciAqLwogCiAJaWYgKG9wdF9ub19zdW1tYXJ5KQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VtYXAudHh0CmluZGV4IDYwMGEzMDQuLmRmMDliOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9wYWdlbWFwLnR4dApAQCAtNTcsNyArNTcsOSBAQAogICAgIDE2LiBDT01QT1VORF9UQUlMCiAgICAgMTYuIEhVR0UKICAgICAxOC4gVU5FVklDVEFCTEUKKyAgICAxOS4gSFdQT0lTT04KICAgICAyMC4gTk9QQUdFCisgICAgMjEuIEtTTQogCiBTaG9ydCBkZXNjcmlwdGlvbnMgdG8gdGhlIHBhZ2UgZmxhZ3M6CiAKQEAgLTg2LDkgKzg4LDE1IEBACiAxNy4gSFVHRQogICAgIHRoaXMgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiBhIEh1Z2VUTEIgcGFnZQogCisxOS4gSFdQT0lTT04KKyAgICBoYXJkd2FyZSBkZXRlY3RlZCBtZW1vcnkgY29ycnVwdGlvbiBvbiB0aGlzIHBhZ2U6IGRvbid0IHRvdWNoIHRoZSBkYXRhIQorCiAyMC4gTk9QQUdFCiAgICAgbm8gcGFnZSBmcmFtZSBleGlzdHMgYXQgdGhlIHJlcXVlc3RlZCBhZGRyZXNzCiAKKzIxLiBLU00KKyAgICBpZGVudGljYWwgbWVtb3J5IHBhZ2VzIGR5bmFtaWNhbGx5IHNoYXJlZCBiZXR3ZWVuIG9uZSBvciBtb3JlIHByb2Nlc3NlcworCiAgICAgW0lPIHJlbGF0ZWQgcGFnZSBmbGFnc10KICAxLiBFUlJPUiAgICAgSU8gZXJyb3Igb2NjdXJyZWQKICAzLiBVUFRPREFURSAgcGFnZSBoYXMgdXAtdG8tZGF0ZSBkYXRhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ4MgppbmRleCA5MjEwZDZmLi4yOTliOTFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIKQEAgLTI0LDggKzI0LDggQEAKIAogVmFsaWQgYWRkcmVzc2VzIGFyZSAweDE4LCAweDE5LCAweDFhLCBhbmQgMHgxYi4KIEhvd2V2ZXIsIHRoZSBkZXZpY2UgY2Fubm90IGJlIGRldGVjdGVkIHdpdGhvdXQgd3JpdGluZyB0byB0aGUgaTJjIGJ1cywgc28gbm8KLWRldGVjdGlvbiBpcyBkb25lLgotWW91IHNob3VsZCBmb3JjZSB0aGUgZGV2aWNlIGFkZHJlc3MuCitkZXRlY3Rpb24gaXMgZG9uZS4gWW91IHNob3VsZCBpbnN0YW50aWF0ZSB0aGUgZGV2aWNlIGV4cGxpY2l0bHkuCiAKLSQgbW9kcHJvYmUgZHMyNDgyIGZvcmNlPTAsMHgxOAorJCBtb2Rwcm9iZSBkczI0ODIKKyQgZWNobyBkczI0ODIgMHgxOCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA4ODdiNTBiLi5jODI0YjRkIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjUsNDMgKzY1LDUxIEBACiAKIDguCUhhcHB5IGhhY2tpbmcuCiAKLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Rlc2NyaXB0aW9ucyBvZiBzZWN0aW9uIGVudHJpZXM6CiAKLU1haW50YWluZXJzIExpc3QgKHRyeSB0byBsb29rIGZvciBtb3N0IHByZWNpc2UgYXJlYXMgZmlyc3QpCisJUDogUGVyc29uIChvYnNvbGV0ZSkKKwlNOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KKwlMOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKKwlXOiBXZWItcGFnZSB3aXRoIHN0YXR1cy9pbmZvCisJVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgorCVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJICAgU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgorCSAgIE1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCisJICAgT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbworCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCisJICAgT3JwaGFuOglObyBjdXJyZW50IG1haW50YWluZXIgW2J1dCBtYXliZSB5b3UgY291bGQgdGFrZSB0aGUKKwkJCXJvbGUgYXMgeW91IHdyaXRlIHlvdXIgbmV3IGNvZGVdLgorCSAgIE9ic29sZXRlOglPbGQgY29kZS4gU29tZXRoaW5nIHRhZ2dlZCBvYnNvbGV0ZSBnZW5lcmFsbHkgbWVhbnMKKwkJCWl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHN5c3RlbSBhbmQgeW91CisJCQlzaG91bGQgYmUgdXNpbmcgdGhhdC4KKwlGOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB3aWxkY2FyZCBwYXR0ZXJucy4KKwkgICBBIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3J5IGZpbGVzLgorCSAgIEY6CWRyaXZlcnMvbmV0LwlhbGwgZmlsZXMgaW4gYW5kIGJlbG93IGRyaXZlcnMvbmV0CisJICAgRjoJZHJpdmVycy9uZXQvKglhbGwgZmlsZXMgaW4gZHJpdmVycy9uZXQsIGJ1dCBub3QgYmVsb3cKKwkgICBGOgkqL25ldC8qCQlhbGwgZmlsZXMgaW4gImFueSB0b3AgbGV2ZWwgZGlyZWN0b3J5Ii9uZXQKKwkgICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCisJWDogRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgYXJlIE5PVCBtYWludGFpbmVkLCBzYW1lIHJ1bGVzIGFzIEY6CisJICAgRmlsZXMgZXhjbHVzaW9ucyBhcmUgdGVzdGVkIGJlZm9yZSBmaWxlIG1hdGNoZXMuCisJICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6CisJICAgRjoJbmV0LworCSAgIFg6CW5ldC9pcHY2LworCSAgIG1hdGNoZXMgYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBuZXQgZXhjbHVkaW5nIG5ldC9pcHY2LworCUs6IEtleXdvcmQgcGVybCBleHRlbmRlZCByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGNvbnRlbnQgaW4gYQorCSAgIHBhdGNoIG9yIGZpbGUuICBGb3IgaW5zdGFuY2U6CisJICAgSzogb2ZfZ2V0X3Byb2ZpbGUKKwkgICAgICBtYXRjaGVzIHBhdGNoZXMgb3IgZmlsZXMgdGhhdCBjb250YWluICJvZl9nZXRfcHJvZmlsZSIKKwkgICBLOiBcYihwcmludGt8cHJfKGluZm98ZXJyKSlcYgorCSAgICAgIG1hdGNoZXMgcGF0Y2hlcyBvciBmaWxlcyB0aGF0IGNvbnRhaW4gb25lIG9yIG1vcmUgb2YgdGhlIHdvcmRzCisJICAgICAgcHJpbnRrLCBwcl9pbmZvIG9yIHByX2VycgorCSAgIE9uZSByZWdleCBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgSzogbGluZXMgYWNjZXB0YWJsZS4KIAogTm90ZTogRm9yIHRoZSBoYXJkIG9mIHRoaW5raW5nLCB0aGlzIGxpc3QgaXMgbWVhbnQgdG8gcmVtYWluIGluIGFscGhhYmV0aWNhbAogb3JkZXIuIElmIHlvdSBjb3VsZCBhZGQgeW91cnNlbHZlcyB0byBpdCBpbiBhbHBoYWJldGljYWwgb3JkZXIgdGhhdCB3b3VsZCBiZQogc28gbXVjaCBlYXNpZXIgW0VkXQogCi1QOiBQZXJzb24gKG9ic29sZXRlKQotTTogTWFpbCBwYXRjaGVzIHRvOiBGdWxsTmFtZSA8YWRkcmVzc0Bkb21haW4+Ci1MOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKLVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KLVQ6IFNDTSB0cmVlIHR5cGUgYW5kIGxvY2F0aW9uLiAgVHlwZSBpcyBvbmUgb2Y6IGdpdCwgaGcsIHF1aWx0LCBzdGdpdC4KLVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CitNYWludGFpbmVycyBMaXN0ICh0cnkgdG8gbG9vayBmb3IgbW9zdCBwcmVjaXNlIGFyZWFzIGZpcnN0KQogCi0JU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgotCU1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCi0JT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbwotCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCi0JT3JwaGFuOgkJTm8gY3VycmVudCBtYWludGFpbmVyIFtidXQgbWF5YmUgeW91IGNvdWxkIHRha2UgdGhlCi0JCQlyb2xlIGFzIHlvdSB3cml0ZSB5b3VyIG5ldyBjb2RlXS4KLQlPYnNvbGV0ZToJT2xkIGNvZGUuIFNvbWV0aGluZyB0YWdnZWQgb2Jzb2xldGUgZ2VuZXJhbGx5IG1lYW5zCi0JCQlpdCBoYXMgYmVlbiByZXBsYWNlZCBieSBhIGJldHRlciBzeXN0ZW0gYW5kIHlvdQotCQkJc2hvdWxkIGJlIHVzaW5nIHRoYXQuCi0KLUY6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHdpbGRjYXJkIHBhdHRlcm5zLgotICAgQSB0cmFpbGluZyBzbGFzaCBpbmNsdWRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yeSBmaWxlcy4KLQlGOglkcml2ZXJzL25ldC8JYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBkcml2ZXJzL25ldAotCUY6CWRyaXZlcnMvbmV0LyoJYWxsIGZpbGVzIGluIGRyaXZlcnMvbmV0LCBidXQgbm90IGJlbG93Ci0JRjoJKi9uZXQvKgkJYWxsIGZpbGVzIGluICJhbnkgdG9wIGxldmVsIGRpcmVjdG9yeSIvbmV0Ci0gICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCi1YOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgTk9UIG1haW50YWluZWQsIHNhbWUgcnVsZXMgYXMgRjoKLSAgIEZpbGVzIGV4Y2x1c2lvbnMgYXJlIHRlc3RlZCBiZWZvcmUgZmlsZSBtYXRjaGVzLgotICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6Ci0JRjoJbmV0LwotCVg6CW5ldC9pcHY2LwotICAgbWF0Y2hlcyBhbGwgZmlsZXMgaW4gYW5kIGJlbG93IG5ldCBleGNsdWRpbmcgbmV0L2lwdjYvCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDNDNTA1IE5FVFdPUksgRFJJVkVSCiBNOglQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CkBAIC0xNzQsNyArMTgyLDcgQEAKIE06CUxhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CiBMOgl2OWZzLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9zd2lrLm5ldC92OWZzCi1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZXJpY3ZoL3Y5ZnMuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2VyaWN2aC92OWZzLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKIEY6CWZzLzlwLwpAQCAtMjU3LDYgKzI2NSwxMyBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2FjcGkvZmFuLmMKIAorQUNQSSBQUk9DRVNTT1IgQUdHUkVHQVRPUiBEUklWRVIKK006CVNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgorTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2FjcGkvYWNwaV9wYWQuYworCiBBQ1BJIFRIRVJNQUwgRFJJVkVSCiBNOglaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+CiBMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZwpAQCAtNTcwLDYgKzU4NSwxMSBAQAogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAorQVJNL0NPTlRFQyBNSUNSTzkgTUFDSElORSBTVVBQT1JUCitNOglIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCisKIEFSTS9DT1JHSSBNQUNISU5FIFNVUFBPUlQKIE06CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KIFM6CU1haW50YWluZWQKQEAgLTY0NiwyNCArNjY2LDI0IEBACiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJT1AzM1ggQVJNIEFSQ0hJVEVDVFVSRQogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJT1AxM1hYIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElRODEzNDJFWCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElYUDIwMDAgQVJNIEFSQ0hJVEVDVFVSRQogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KQEAgLTY4Myw3ICs3MDMsNyBAQAogQVJNL0lOVEVMIElYUDRYWCBBUk0gQVJDSElURUNUVVJFCiBNOglJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KIE06CUtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWl4cDR4eC8KIApAQCAtNjkxLDcgKzcxMSw3IEBACiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JUCBGQUJSSUNTIERPVUJMRSBFU1BSRVNTTyBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CkBAIC03NDAsMjAgKzc2MCwzNyBAQAogTToJRGlyayBPcGZlciA8ZGlya0BvcGZlci1vbmxpbmUuZGU+CiBTOglNYWludGFpbmVkCiAKLUFSTS9QQUxNVFgsUEFMTVQ1LFBBTE1MRCxQQUxNVEUyIFNVUFBPUlQKK0FSTS9QQUxNVFgsUEFMTVQ1LFBBTE1MRCxQQUxNVEUyLFBBTE1UQyBTVVBQT1JUCiBNOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCiBXOglodHRwOi8vaGFja25kZXYuY29tCiBTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXQ1LmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbWxkLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRlMi5oCitGOglhcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKIAogQVJNL1BBTE0gVFJFTyA2ODAgU1VQUE9SVAogTToJVG9tYXMgQ2VjaCA8c2xlZXBfd2Fsa2VyQHN1c2UuY3o+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKIFc6CWh0dHA6Ly9oYWNrbmRldi5jb20KIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90cmVvNjgwLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYwogCiBBUk0vUEFMTVo3MiBTVVBQT1JUCiBNOglTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwogVzoJaHR0cDovL2hhY2tuZGV2LmNvbQogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG16NzIuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCiAKIEFSTS9QTEVCIFNVUFBPUlQKIE06CVBldGVyIENodWJiIDxwbGViQGdlbGF0by51bnN3LmVkdS5hdT4KQEAgLTg2OSw3ICs5MDYsNiBAQAogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAotRjoJYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwogCiBBU1VTIEFTQjEwMCBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgpAQCAtOTYzLDcgKzk5OSw3IEBACiAKIEFUTQogTToJQ2hhcyBXaWxsaWFtcyA8Y2hhc0BjbWYubnJsLm5hdnkubWlsPgotTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCkBAIC0xMjA3LDYgKzEyNDMsMTIgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvdGczLioKIAorQlJPQ0FERSBCRkEgRkMgU0NTSSBEUklWRVIKK006CUppbmcgSHVhbmcgPGh1YW5nakBicm9jYWRlLmNvbT4KK0w6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvc2NzaS9iZmEvCisKIEJTRyAoYmxvY2sgbGF5ZXIgZ2VuZXJpYyBzZyB2NCBkcml2ZXIpCiBNOglGVUpJVEEgVG9tb25vcmkgPGZ1aml0YS50b21vbm9yaUBsYWIubnR0LmNvLmpwPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTE0NDQsNiArMTQ4Niw3IEBACiAKIENPUkVURU1QIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSCiBNOglSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgorTToJSHVheHUgV2FuIDxodWF4dS53YW5AaW50ZWwuY29tPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApAQCAtMjAzNCw3ICsyMDc3LDcgQEAKIEY6CWZzLyoKIAogRklOVEVLIEY3NTM3NVMgSEFSRFdBUkUgTU9OSVRPUiBBTkQgRkFOIENPTlRST0xMRVIgRFJJVkVSCi1NOglSaWt1IFZvaXBpbyA8cmlrdS52aXBpb0Bpa2kuZmk+CitNOglSaWt1IFZvaXBpbyA8cmlrdS52b2lwaW9AaWtpLmZpPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9od21vbi9mNzUzNzVzLmMKQEAgLTIxMTUsNyArMjE1OCw3IEBACiBGOglhcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi8KIEY6CWFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS8qcWUuaAogCi1GUkVFU0NBTEUgVVNCIFBFUklQSEVSSUFMIERSSVZFUlMKK0ZSRUVTQ0FMRSBVU0IgUEVSSVBIRVJBTCBEUklWRVJTCiBNOglMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKQEAgLTIxNjYsMTggKzIyMDksNiBAQAogRjoJZnMvZnNjYWNoZS8KIEY6CWluY2x1ZGUvbGludXgvZnNjYWNoZSouaAogCi1UUkFDSU5HCi1NOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KLU06CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KLU06CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCi1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKLUY6CWFyY2gvKi8qLyovZnRyYWNlLmgKLUY6CWFyY2gvKi9rZXJuZWwvZnRyYWNlLmMKLUY6CWluY2x1ZGUvKi9mdHJhY2UuaCBpbmNsdWRlL3RyYWNlLyBpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCi1GOglrZXJuZWwvdHJhY2UvCi0KIEZVSklUU1UgRlItViAoRlJWKSBQT1JUCiBNOglEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgogUzoJTWFpbnRhaW5lZApAQCAtMjIzNiw5ICsyMjY3LDggQEAKIEY6CWluY2x1ZGUvYXNtLWdlbmVyaWMKIAogR0VORVJJQyBVSU8gRFJJVkVSIEZPUiBQQ0kgREVWSUNFUwotTToJTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0LmNvbT4KK006CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy91aW8vdWlvX3BjaV9nZW5lcmljLmMKIApAQCAtMjU3OSw2ICsyNjA5LDcgQEAKIFc6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKIFM6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKIEY6CWRyaXZlcnMvaWVlZTEzOTQvCiAKIElFRUUgMTM5NCBSQVcgSS9PIERSSVZFUgpAQCAtMjY3OCw3ICsyNzA5LDcgQEAKIAogSU5URUwgSU9QLUFETUEgRE1BIERSSVZFUgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+Ci1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZG1hL2lvcC1hZG1hLmMKIAogSU5URUwgSVhQNFhYIFFNR1IsIE5QRSwgRVRIRVJORVQgYW5kIEhTUyBTVVBQT1JUCkBAIC0yNzkyLDcgKzI4MjMsNyBAQAogCiBJUE1JIFNVQlNZU1RFTQogTToJQ29yZXkgTWlueWFyZCA8bWlueWFyZEBhY20ub3JnPgotTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vb3BlbmlwbWkuc291cmNlZm9yZ2UubmV0LwogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL0lQTUkudHh0CkBAIC0yOTY3LDggKzI5OTgsOCBAQAogCiBLRVJORUwgSkFOSVRPUlMKIEw6CWtlcm5lbC1qYW5pdG9yc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cua2VybmVsamFuaXRvcnMub3JnLwotUzoJTWFpbnRhaW5lZAorVzoJaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCitTOglPZGQgRml4ZXMKIAogS0VSTkVMIE5GU0QsIFNVTlJQQywgQU5EIExPQ0tEIFNFUlZFUlMKIE06CSJKLiBCcnVjZSBGaWVsZHMiIDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KQEAgLTMwNTMsOSArMzA4NCwxMyBAQAogCiBLTUVNQ0hFQ0sKIE06CVZlZ2FyZCBOb3NzdW0gPHZlZ2FyZG5vQGlmaS51aW8ubm8+Ci1QCVBla2thIEVuYmVyZwotTToJcGVuYmVyZ0Bjcy5oZWxzaW5raS5maQorTToJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPgogUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9rbWVtY2hlY2sudHh0CitGOglhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWVtY2hlY2suaAorRjoJYXJjaC94ODYvbW0va21lbWNoZWNrLworRjoJaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAorRjoJbW0va21lbWNoZWNrLmMKIAogS01FTUxFQUsKIE06CUNhdGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFybS5jb20+CkBAIC0zNTg1LDcgKzM2MjAsNyBAQAogTDoJY29yZXRlYW1AbmV0ZmlsdGVyLm9yZwogVzoJaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnLwogVzoJaHR0cDovL3d3dy5pcHRhYmxlcy5vcmcvCi1UOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva2FiZXIvbmYtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rYWJlci9uZi0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CWluY2x1ZGUvbGludXgvbmV0ZmlsdGVyKgogRjoJaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvCkBAIC0zNzQ5LDcgKzM3ODQsNyBAQAogRjoJZHJpdmVycy92aWRlby9udmlkaWEvCiAKIE9NQVAgU1VQUE9SVAotTToJIlRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+IiA8dG9ueUBhdG9taWRlLmNvbT4KK006CVRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5tdXJ1LmNvbS9saW51eC9vbWFwLwogVzoJaHR0cDovL2xpbnV4Lm9tYXAuY29tLwpAQCAtMzg1NCw2ICszODg5LDE1IEBACiBGOglEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW9jb3JlcwogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vY29yZXMuYwogCitPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUKK006CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KK0w6CWRldmljZXRyZWUtZGlzY3Vzc0BsaXN0cy5vemxhYnMub3JnCitXOglodHRwOi8vZmR0LnNlY3JldGxhYi5jYQorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9vZgorRjoJaW5jbHVkZS9saW51eC9vZiouaAorSzoJb2ZfZ2V0X3Byb3BlcnR5CisKIE9QUk9GSUxFCiBNOglSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KIEw6CW9wcm9maWxlLWxpc3RAbGlzdHMuc2YubmV0CkBAIC0zOTU4LDYgKzQwMDIsNyBAQAogUEFSSVNDIEFSQ0hJVEVDVFVSRQogTToJS3lsZSBNY01hcnRpbiA8a3lsZUBtY21hcnRpbi5jYT4KIE06CUhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KK006CSJKYW1lcyBFLkouIEJvdHRvbWxleSIgPGplamJAcGFyaXNjLWxpbnV4Lm9yZz4KIEw6CWxpbnV4LXBhcmlzY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cucGFyaXNjLWxpbnV4Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva3lsZS9wYXJpc2MtMi42LmdpdApAQCAtNDA0MSw2ICs0MDg2LDEzIEBACiBNOglQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KIE06CUluZ28gTW9sbmFyIDxtaW5nb0BlbHRlLmh1PgogUzoJU3VwcG9ydGVkCitGOglrZXJuZWwvcGVyZl9ldmVudC5jCitGOglpbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorRjoJYXJjaC8qLyova2VybmVsL3BlcmZfZXZlbnQuYworRjoJYXJjaC8qL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorRjoJYXJjaC8qL2xpYi9wZXJmX2V2ZW50LmMKK0Y6CWFyY2gvKi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYworRjoJdG9vbHMvcGVyZi8KIAogUEVSU09OQUxJVFkgSEFORExJTkcKIE06CUNocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KQEAgLTQ0OTIsMTIgKzQ1NDQsMTEgQEAKIEY6CWluY2x1ZGUvbGludXgvc2NoZWQuaAogCiBTQ09SRSBBUkNISVRFQ1RVUkUKLVA6CUNoZW4gTGlxaW4KLU06CWxpcWluLmNoZW5Ac3VucGx1c2N0LmNvbQotUDoJTGVubm94IFd1Ci1NOglsZW5ub3gud3VAZ21haWwuY29tCitNOglDaGVuIExpcWluIDxsaXFpbi5jaGVuQHN1bnBsdXNjdC5jb20+CitNOglMZW5ub3ggV3UgPGxlbm5veC53dUBnbWFpbC5jb20+CiBXOglodHRwOi8vd3d3LnN1bnBsdXNjdC5jb20KIFM6CVN1cHBvcnRlZAorRjoJYXJjaC9zY29yZS8KIAogU0NTSSBDRFJPTSBEUklWRVIKIE06CUplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KQEAgLTQ1NzAsMjcgKzQ2MjEsMjcgQEAKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgKFNESENJKSBEUklWRVIKLVM6ICAgICBPcnBoYW4KLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCi1GOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS4qCitTOglPcnBoYW4KK0w6CWxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKK0Y6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuKgogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFLCBPUEVOIEZJUk1XQVJFIEJJTkRJTkdTIChTREhDSS1PRikKIE06CUFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCi1GOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi4qCitGOglkcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLioKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIFNBTVNVTkcgRFJJVkVSCiBNOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Ci1MOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworTDoJbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwogCiBTRUNVUklUWSBTVUJTWVNURU0KIE06CUphbWVzIE1vcnJpcyA8am1vcnJpc0BuYW1laS5vcmc+CiBMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnIChzdWdnZXN0ZWQgQ2M6KQotVDoJZ2l0IGdpdDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAogVzoJaHR0cDovL3NlY3VyaXR5Lndpa2kua2VybmVsLm9yZy8KIFM6CVN1cHBvcnRlZAogRjoJc2VjdXJpdHkvCkBAIC00NjI1LDYgKzQ2NzYsMTMgQEAKIEY6CWluY2x1ZGUvbGludXgvYXRhLmgKIEY6CWluY2x1ZGUvbGludXgvbGliYXRhLmgKIAorU0VSVkVSIEVOR0lORVMgMTBHYnBzIGlTQ1NJIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKK006CUpheWFtb2hhbiBLYWxsaWNrYWwgPGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20+CitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5zZXJ2ZXJlbmdpbmVzLmNvbQorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCisKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgogTToJU2F0aHlhIFBlcmxhIDxzYXRoeWFwQHNlcnZlcmVuZ2luZXMuY29tPgogTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbT4KQEAgLTQ2NzgsOCArNDczNiw3IEBACiBGOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwKgogCiBTSU1QTEUgRklSTVdBUkUgSU5URVJGQUNFIChTRkkpCi1QOglMZW4gQnJvd24KLU06CWxlbmJAa2VybmVsLm9yZworTToJTGVuIEJyb3duIDxsZW5iQGtlcm5lbC5vcmc+CiBMOglzZmktZGV2ZWxAc2ltcGxlZmlybXdhcmUub3JnCiBXOglodHRwOi8vc2ltcGxlZmlybXdhcmUub3JnLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZW5iL2xpbnV4LXNmaS0yLjYuZ2l0CkBAIC01MTI3LDYgKzUxODQsMjAgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvY2hhci90cG0vCiAKK1RSQUNJTkcKK006CVN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgorTToJRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorTToJSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdCB0cmFjaW5nL2NvcmUKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorRjoJYXJjaC8qLyovKi9mdHJhY2UuaAorRjoJYXJjaC8qL2tlcm5lbC9mdHJhY2UuYworRjoJaW5jbHVkZS8qL2Z0cmFjZS5oCitGOglpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCitGOglpbmNsdWRlL3RyYWNlLworRjoJa2VybmVsL3RyYWNlLworCiBUUklWSUFMIFBBVENIRVMKIE06CUppcmkgS29zaW5hIDx0cml2aWFsQGtlcm5lbC5vcmc+CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ppa29zL3RyaXZpYWwuZ2l0CkBAIC01NjE2LDExICs1Njg3LDExIEBACiBGOglpbmNsdWRlL2xpbnV4L3ZseW5xLmgKIAogVk1XQVJFIFZNWE5FVDMgRVRIRVJORVQgRFJJVkVSCi1NOiAgICAgU2hyZXlhcyBCaGF0ZXdhcmEgPHNiaGF0ZXdhcmFAdm13YXJlLmNvbT4KLU06ICAgICBWTXdhcmUsIEluYy4gPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KLUw6ICAgICBuZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOiAgICAgTWFpbnRhaW5lZAotRjogICAgIGRyaXZlcnMvbmV0L3ZteG5ldDMvCitNOglTaHJleWFzIEJoYXRld2FyYSA8c2JoYXRld2FyYUB2bXdhcmUuY29tPgorTToJIlZNd2FyZSwgSW5jLiIgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L3ZteG5ldDMvCiAKIFZPTFRBR0UgQU5EIENVUlJFTlQgUkVHVUxBVE9SIEZSQU1FV09SSwogTToJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KQEAgLTU2OTMsOCArNTc2NCw3IEBACiBGOglkcml2ZXJzL3Njc2kvd2Q3MDAwLmMKIAogV0lOQk9ORCBDSVIgRFJJVkVSCi1QOglEYXZpZCBI5HJkZW1hbgotTToJZGF2aWRAaGFyZGVtYW4ubnUKK006CURhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYwogCkBAIC01NzUxLDkgKzU4MjEsNyBAQAogRjoJaW5jbHVkZS9saW51eC93bTk3eHguaAogCiBXT0xGU09OIE1JQ1JPRUxFQ1RST05JQ1MgUE1JQyBEUklWRVJTCi1QOglNYXJrIEJyb3duCi1NOglicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworTToJTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CiBUOglnaXQgZ2l0Oi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL2xpbnV4LTIuNi1hdWRpb3BsdXMKIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS84CiBTOglTdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZjkwOGFjYy4uYWEzZTEzYSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKLVNVQkxFVkVMID0gMzEKLUVYVFJBVkVSU0lPTiA9CitTVUJMRVZFTCA9IDMyCitFWFRSQVZFUlNJT04gPSAtcmM3CiBOQU1FID0gTWFuLUVhdGluZyBTZWFscyBvZiBBbnRpcXVpdHkKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTE3OSw0NiArMTc5LDkgQEAKICMgQWx0ZXJuYXRpdmVseSBDUk9TU19DT01QSUxFIGNhbiBiZSBzZXQgaW4gdGhlIGVudmlyb25tZW50LgogIyBEZWZhdWx0IHZhbHVlIGZvciBDUk9TU19DT01QSUxFIGlzIG5vdCB0byBwcmVmaXggZXhlY3V0YWJsZXMKICMgTm90ZTogU29tZSBhcmNoaXRlY3R1cmVzIGFzc2lnbiBDUk9TU19DT01QSUxFIGluIHRoZWlyIGFyY2gvKi9NYWtlZmlsZQotIwotIyBUbyBmb3JjZSBBUkNIIGFuZCBDUk9TU19DT01QSUxFIHNldHRpbmdzIGluY2x1ZGUga2VybmVsLiogZmlsZXMKLSMgaW4gdGhlIGtlcm5lbCB0cmVlIC0gZG8gbm90IHBhdGNoIHRoaXMgZmlsZS4KIGV4cG9ydCBLQlVJTERfQlVJTERIT1NUIDo9ICQoU1VCQVJDSCkKLQotIyBLYnVpbGQgc2F2ZSB0aGUgQVJDSCBhbmQgQ1JPU1NfQ09NUElMRSBzZXR0aW5nIGluIGtlcm5lbC4qIGZpbGVzLgotIyBSZXN0b3JlIHRoZXNlIHNldHRpbmdzIGFuZCBjaGVjayB0aGF0IHVzZXIgZGlkIG5vdCBzcGVjaWZ5Ci0jIGNvbmZsaWN0aW5nIHZhbHVlcy4KLQotc2F2ZWRfYXJjaCAgOj0gJChzaGVsbCBjYXQgaW5jbHVkZS9nZW5lcmF0ZWQva2VybmVsLmFyY2ggIDI+IC9kZXYvbnVsbCkKLXNhdmVkX2Nyb3NzIDo9ICQoc2hlbGwgY2F0IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5jcm9zcyAyPiAvZGV2L251bGwpCi0KLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLCkKLSAgICAgICAgaWZuZXEgKCQoc2F2ZWRfY3Jvc3MpLCkKLSAgICAgICAgICAgICAgICBpZm5lcSAoJChDUk9TU19DT01QSUxFKSwkKHNhdmVkX2Nyb3NzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICQoZXJyb3IgQ1JPU1NfQ09NUElMRSBjaGFuZ2VkIGZyb20gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJChzYXZlZF9jcm9zcykiIHRvIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvICIkKENST1NTX0NPTVBJTEUpIi4gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlICJtYWtlIG1ycHJvcGVyIiB0byBmaXggaXQgdXApCi0gICAgICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgZW5kaWYKLWVsc2UKLSAgICBDUk9TU19DT01QSUxFIDo9ICQoc2F2ZWRfY3Jvc3MpCi1lbmRpZgotCi1pZm5lcSAoJChBUkNIKSwpCi0gICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCkKLSAgICAgICAgICAgICAgICBpZm5lcSAoJChzYXZlZF9hcmNoKSwkKEFSQ0gpKQotICAgICAgICAgICAgICAgICAgICAgICAgJChlcnJvciBBUkNIIGNoYW5nZWQgZnJvbSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkKHNhdmVkX2FyY2gpIiB0byAiJChBUkNIKSIuIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSAibWFrZSBtcnByb3BlciIgdG8gZml4IGl0IHVwKQotICAgICAgICAgICAgICAgIGVuZGlmCi0gICAgICAgIGVuZGlmCi1lbHNlCi0gICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCkKLSAgICAgICAgICAgICAgICBBUkNIIDo9ICQoc2F2ZWRfYXJjaCkKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFSQ0ggOj0gJChTVUJBUkNIKQotICAgICAgICBlbmRpZgotZW5kaWYKK0FSQ0gJCT89ICQoU1VCQVJDSCkKK0NST1NTX0NPTVBJTEUJPz0KIAogIyBBcmNoaXRlY3R1cmUgYXMgcHJlc2VudCBpbiBjb21waWxlLmgKIFVUU19NQUNISU5FIAk6PSAkKEFSQ0gpCkBAIC0yNTgsNyArMjIxLDcgQEAKIAogSE9TVENDICAgICAgID0gZ2NjCiBIT1NUQ1hYICAgICAgPSBnKysKLUhPU1RDRkxBR1MgICA9IC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCitIT1NUQ0ZMQUdTICAgPSAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgogSE9TVENYWEZMQUdTID0gLU8yCiAKICMgRGVjaWRlIHdoZXRoZXIgdG8gYnVpbGQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGJvdGguCkBAIC00ODMsMTEgKzQ0Niw2IEBACiBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gpL01ha2VmaWxlCiBleHBvcnQgS0JVSUxEX0RFRkNPTkZJRyBLQlVJTERfS0NPTkZJRwogCi0jIHNhdmUgQVJDSCAmIENST1NTX0NPTVBJTEUgc2V0dGluZ3MKLSQoc2hlbGwgbWtkaXIgLXAgaW5jbHVkZS9nZW5lcmF0ZWQgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlY2hvICQoQVJDSCkgICAgICAgICAgPiBpbmNsdWRlL2dlbmVyYXRlZC9rZXJuZWwuYXJjaCAmJiBcCi0gICAgICAgIGVjaG8gJChDUk9TU19DT01QSUxFKSA+IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5jcm9zcykKLQogY29uZmlnOiBzY3JpcHRzX2Jhc2ljIG91dHB1dG1ha2VmaWxlIEZPUkNFCiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvbGludXggaW5jbHVkZS9jb25maWcKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT1zY3JpcHRzL2tjb25maWcgJEAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKaW5kZXggOWQwNzI3ZC4uMzY3ZDUzZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKKysrIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIGNvbnN0IGNoYXIgKiBwcm9nX25hbWU7CiAKIAotdm9pZAorc3RhdGljIHZvaWQKIHVzYWdlICh2b2lkKQogewogICAgIGZwcmludGYoc3RkZXJyLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oCmluZGV4IGU0MjgyM2UuLjI1ZGEwMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2ZjbnRsLmgKQEAgLTI2LDggKzI2LDYgQEAKICNkZWZpbmUgRl9HRVRPV04JNgkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLwotI2RlZmluZSBGX1NFVE9XTl9FWAkxMgotI2RlZmluZSBGX0dFVE9XTl9FWAkxMwogCiAvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLwogI2RlZmluZSBGX1JETENLCQkxCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNTA3NmE4OC4uODE1NjgwYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNTAsMTIgKzUwLDEyIEBACiByZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKl9fY3VycmVudF90aHJlYWRfaW5mbyBfX2FzbV9fKCIkOCIpOwogI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkgIF9fY3VycmVudF90aHJlYWRfaW5mbwogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKIC8qIFRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uLiAgKi8KICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgMQogI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCiAKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwMAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCAxOWI4NjMyLi42ZjgwY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMTMsNiArMTMsNSBAQAogc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayA9IElOSVRfVEFTSyhpbml0X3Rhc2spOwogRVhQT1JUX1NZTUJPTChpbml0X3Rhc2spOwogCi11bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24KLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YS5pbml0X3RocmVhZCIpKSkKLQk9IHsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07Cit1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24gX19pbml0X3Rhc2tfZGF0YSA9CisJeyBJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZkYzAzYzMuLjAwM2VmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIE9VVFBVVF9GT1JNQVQoImVsZjY0LWFscGhhIikKQEAgLTMxLDg4ICszMiwyMSBAQAogCX0gOmtlcm5lbAogCiAJUk9EQVRBCi0KLQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLQkuID0gQUxJR04oMTYpOwotCV9fZXhfdGFibGUgOiB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMTYpCiAKIAkvKiBXaWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KLQlfX2luaXRfYmVnaW4gPSAuOwotCS5pbml0LnRleHQgOiB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQotCS5pbml0LmRhdGEgOiB7Ci0JCUlOSVRfREFUQQotCX0KLQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCi0JLiA9IEFMSUdOKDgpOwotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuaW5pdC5yYW1mcyA6IHsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQlfX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLSNlbmRpZgotCi0JLiA9IEFMSUdOKDgpOwotCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLQkuID0gQUxJR04oOCk7Ci0JU0VDVVJJVFlfSU5JVAotCisJX19pbml0X2JlZ2luID0gQUxJR04oUEFHRV9TSVpFKTsKKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAJUEVSQ1BVKFBBR0VfU0laRSkKLQotCS4gPSBBTElHTigyICogUEFHRV9TSVpFKTsKKwkvKiBBbGlnbiB0byBUSFJFQURfU0laRSByYXRoZXIgdGhhbiBQQUdFX1NJWkUgaGVyZSBzbyBhbnkgcGFkZGluZyBwYWdlCisJICAgbmVlZGVkIGZvciB0aGUgVEhSRUFEX1NJWkUgYWxpZ25lZCBpbml0X3Rhc2sgZ2V0cyBmcmVlZCBhZnRlciBpbml0ICovCisJLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBGcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0JLyogTm90ZSAyIHBhZ2UgYWxpZ25tZW50IGFib3ZlLiAgKi8KLQkuZGF0YS5pbml0X3RocmVhZCA6IHsKLQkJKiguZGF0YS5pbml0X3RocmVhZCkKLQl9Ci0KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YS5wYWdlX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEucGFnZV9hbGlnbmVkKQotCX0KLQotCS4gPSBBTElHTig2NCk7Ci0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0JfQotCiAJX2RhdGEgPSAuOwotCS8qIERhdGEgKi8KLQkuZGF0YSA6IHsKLQkJREFUQV9EQVRBCi0JCUNPTlNUUlVDVE9SUwotCX0KKwlSV19EQVRBX1NFQ1RJT04oNjQsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAKIAkuZ290IDogewogCQkqKC5nb3QpCkBAIC0xMjIsMTYgKzU2LDcgQEAKIAl9CiAJX2VkYXRhID0gLjsJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0JX19ic3Nfc3RhcnQgPSAuOwotCS5zYnNzIDogewotCQkqKC5zYnNzKQotCQkqKC5zY29tbW9uKQotCX0KLQkuYnNzIDogewotCQkqKC5ic3MpCi0JCSooQ09NTU9OKQotCX0KLQlfX2Jzc19zdG9wID0gLjsKKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCV9lbmQgPSAuOwogCiAJLm1kZWJ1ZyAwIDogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZDc3OGE2OS4uMWM0MTE5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC00Niw2ICs0NiwxMCBAQAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZmF1bHQgeSBpZiBTTVAgJiYgIUxPQ0FMX1RJTUVSUwogCitjb25maWcgSEFWRV9UQ00KKwlib29sCisJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCisKIGNvbmZpZyBOT19JT1BPUlQKIAlib29sCiAKQEAgLTY0OSw2ICs2NTMsNyBAQAogCWJvb2wgIlNULUVyaWNzc29uIFUzMDAgU2VyaWVzIgogCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEhBVkVfVENNCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgR0VORVJJQ19USU1FCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggMjI5M2YwYy4uYmQzNmM3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtODY1LDYgKzg2NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19zZXRfZGlyKTsKIAogaW50IGxvY29tb19ncGlvX3JlYWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg4Miw2ICs4ODMsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwogCiBpbnQgbG9jb21vX2dwaW9fcmVhZF9vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg5OSw2ICs5MDEsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KTsKIAogdm9pZCBsb2NvbW9fZ3Bpb193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgc2V0KQogewpAQCAtOTIwLDYgKzkyMyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb193cml0ZSk7CiAKIHN0YXRpYyB2b2lkIGxvY29tb19tNjIzMzJfc2VuZGJpdCh2b2lkICptYXBiYXNlLCBpbnQgYml0KQogewpAQCAtMTA4NCwxMyArMTA4OCwxMiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CiAKIC8qCiAgKglGcm9udGxpZ2h0IGNvbnRyb2wKICAqLwogCi1zdGF0aWMgc3RydWN0IGxvY29tbyAqbG9jb21vX2NoaXBfZHJpdmVyKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2KTsKLQogdm9pZCBsb2NvbW9fZnJvbnRsaWdodF9zZXQoc3RydWN0IGxvY29tb19kZXYgKmRldiwgaW50IGR1dHksIGludCB2ciwgaW50IGJwd2YpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExODIsMTEgKzExODUsMTMgQEAKIAlkcml2ZXItPmRydi5idXMgPSAmbG9jb21vX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgbG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBsb2NvbW9fZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgbG9jb21vX2luaXQodm9pZCkKIHsKQEAgLTEyMDgsMTEgKzEyMTMsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFycCBMb0NvTW8gY29yZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkpvaG4gTGVueiA8bGVuekBjcy53aXNjLmVkdT4iKTsKLQotRVhQT1JUX1NZTUJPTChsb2NvbW9fZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2dwaW9fc2V0X2Rpcik7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwotRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19yZWFkX291dHB1dCk7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKaW5kZXggZWYxMjc5NC4uOGJhNzA0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwpAQCAtMTAzMiw2ICsxMDMyLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3BsbF9jbG9jayk7CiAKIC8qKgogICoJc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlIC0gc2VsZWN0IEkyUyBvciBBQyBsaW5rIG1vZGUKQEAgLTEwNTksNiArMTA2MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlKTsKIAogLyoqCiAgKglzYTExMTFfc2V0X2F1ZGlvX3JhdGUgLSBzZXQgdGhlIGF1ZGlvIHNhbXBsZSByYXRlCkBAIC0xMDgzLDYgKzEwODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7CiAKIC8qKgogICoJc2ExMTExX2dldF9hdWRpb19yYXRlIC0gZ2V0IHRoZSBhdWRpbyBzYW1wbGUgcmF0ZQpAQCAtMTEwMCw2ICsxMTAzLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKSAvICgyNTYgKiBkaXYpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZ2V0X2F1ZGlvX3JhdGUpOwogCiB2b2lkIHNhMTExMV9zZXRfaW9fZGlyKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGlyLApAQCAtMTEyOCw2ICsxMTMyLDcgQEAKIAlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUENTRFIsIChiaXRzID4+IDE2KSAmIDI1NSwgc2xlZXBfZGlyID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pb19kaXIpOwogCiB2b2lkIHNhMTExMV9zZXRfaW8oc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IHYpCiB7CkBAIC0xMTQyLDYgKzExNDcsNyBAQAogCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQ0RXUiwgKGJpdHMgPj4gMTYpICYgMjU1LCB2ID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7CiAKIHZvaWQgc2ExMTExX3NldF9zbGVlcF9pbyhzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgdikKIHsKQEAgLTExNTYsNiArMTE2Miw3IEBACiAJTU9ESUZZX0JJVFMoZ3BpbyArIFNBMTExMV9HUElPX1BDU1NSLCAoYml0cyA+PiAxNikgJiAyNTUsIHYgPj4gMTYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfc2V0X3NsZWVwX2lvKTsKIAogLyoKICAqIEluZGl2aWR1YWwgZGV2aWNlIG9wZXJhdGlvbnMuCkBAIC0xMTc2LDYgKzExODMsNyBAQAogCXNhMTExMV93cml0ZWwodmFsIHwgc2FkZXYtPnNrcGNyX21hc2ssIHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS1BDUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FjaGlwLT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9lbmFibGVfZGV2aWNlKTsKIAogLyoqCiAgKglzYTExMTFfZGlzYWJsZV9kZXZpY2UgLSBkaXNhYmxlIGFuIG9uLWNoaXAgU0ExMTExIGZ1bmN0aW9uIGJsb2NrCkBAIC0xMTkyLDYgKzEyMDAsNyBAQAogCXNhMTExMV93cml0ZWwodmFsICYgfnNhZGV2LT5za3Bjcl9tYXNrLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tQQ1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZGlzYWJsZV9kZXZpY2UpOwogCiAvKgogICoJU0ExMTExICJSZWdpc3RlciBBY2Nlc3MgQnVzLiIKQEAgLTEyNTksMTcgKzEyNjgsMjAgQEAKIAkuc3VzcGVuZAk9IHNhMTExMV9idXNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTExMV9idXNfcmVzdW1lLAogfTsKK0VYUE9SVF9TWU1CT0woc2ExMTExX2J1c190eXBlKTsKIAogaW50IHNhMTExMV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHNhMTExMV9kcml2ZXIgKmRyaXZlcikKIHsKIAlkcml2ZXItPmRydi5idXMgPSAmc2ExMTExX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBzYTExMTFfZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTExX2luaXQodm9pZCkKIHsKQEAgLTEyOTAsMTYgKzEzMDIsMyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIENvcnBvcmF0aW9uIFNBMTExMSBjb3JlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZWxlY3RfYXVkaW9fbW9kZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9nZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfaW9fZGlyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfc2xlZXBfaW8pOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZW5hYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9kaXNhYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9wbGxfY2xvY2spOwotRVhQT1JUX1NZTUJPTChzYTExMTFfYnVzX3R5cGUpOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwppbmRleCA5MjBjZWQwLi5mMjMyOTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vdmljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCmluZGV4IDc2NDczMjUuLmU4ZjczODBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCkBAIC01NSwxMCArNTUsMTAgQEAKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMjI0LDcgKzIyNCw3IEBACiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwogIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0g9eQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMjk5LDcgKzI5OSw5IEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTY3MCw3ICs2NzIsNyBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTc4NCw2ICs3ODYsNyBAQAogIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQogCiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKQEAgLTgyMCw2ICs4MjMsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODk2LDcgKzkwMCwxMyBAQAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19BTVNfREVMVEE9eQogCiAjCiAjIEhJRCBEZXZpY2VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCmluZGV4IDE1MDI5NTcuLmY2YWVkNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCkBAIC05MCw3ICs5MCw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0gzNjAwPXkKLUNPTkZJR19TQTExMDBfSDNYWFg9eQogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKaW5kZXggZWVjNDg4Mi4uZWQyZDU5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZwpAQCAtMSwyOSArMSwyNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNQotIyBXZWQgRGVjIDEyIDE2OjExOjI3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKKyMgVHVlIEF1ZyAxOCAxMzo0MTo0MSAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsMjEgKzM3LDM5IEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjcsMjkgKzgyLDQ4IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTAzLDYgKzEzNyw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMTIsMTUgKzE0NywxNSBAQAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AzM1g9eQpAQCAtMTI4LDE5ICsxNjMsMjYgQEAKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19JT1AzWFhfQVRVPXkKIAogIwogIyBJT1AzM3ggSW1wbGVtZW50YXRpb24gT3B0aW9ucwpAQCAtMTUxLDE0ICsxOTMsNiBAQAogIwogQ09ORklHX0FSQ0hfSVE4MDMzMT15CiBDT05GSUdfTUFDSF9JUTgwMzMyPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCiBDT05GSUdfUExBVF9JT1A9eQogCiAjCkBAIC0xNjgsNiArMjAyLDcgQEAKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQogQ09ORklHX0NQVV9DUDE1PXkKQEAgLTE3OCw3ICsyMTMsNiBAQAogIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JV01NWFQgaXMgbm90IHNldAogQ09ORklHX1hTQ0FMRV9QTVU9eQogCkBAIC0xOTAsNDEgKzIyNCw1NSBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAogIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCiAjCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIGNhY2hlcG9saWN5PXdyaXRlYWxsb2MiCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBjYWNoZXBvbGljeT13cml0ZWFsbG9jIGlvcDN4eF9pbml0X2F0dT15IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKICMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KICMKIApAQCAtMjM5LDYgKzI4Nyw4IEBACiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CiBDT05GSUdfQklORk1UX0FPVVQ9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKQEAgLTI0NywxMSArMjk3LDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMjY0LDYgKzMxMCw3IEBACiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTMxMCw2ICszNTcsNyBAQAogIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTMxNyw2ICszNjUsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zMjYsMjQgKzM3NSwzMSBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM1Nyw3ICs0MTMsOSBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTM2NiwxMiArNDI0LDE0IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQyMSw5ICs0ODEsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CkBAIC00NDcsNiArNTA1LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTQ2MywxNCArNTI2LDI5IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ5MiwxMCArNTcwLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxMiw2ICs1ODYsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTUyMCwxMyArNTk2LDE4IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKQEAgLTU0MywxNSArNjI0LDE4IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENDU2PXkKLSMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09eQpAQCAtNTY4LDI3ICs2NTIsMzQgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotQ09ORklHX0UxMDAwX05BUEk9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01OTYsMjMgKzY4NywzNCBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02MjAsMTMgKzcyMiwxNiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTY3MCwxMCArNzc1LDEzIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNjkyLDExICs4MDAsMTIgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03MDUsNjcgKzgxNCw5NyBAQAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIwogIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19JT1AzWFg9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0kyQ19JT1AzWFg9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKIAogIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldApAQCAtNzczLDEzICs5MTIsMTcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC03OTQsMTYgKzkzNywyMyBAQAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODEyLDI4ICs5NjIsMzggQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04NTQsMTUgKzEwMTQsMTYgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTg3MCwxNCArMTAzMSwyMSBAQAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CkBAIC04OTMsNiArMTA2MSwxMiBAQAogIyBETUEgQ2xpZW50cwogIwogQ09ORklHX05FVF9ETUE9eQorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTAxLDEwICsxMDc1LDExIEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkxMywxNyArMTA4OCwyMyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtOTQxLDE1ICsxMTIyLDEzIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC05NTksMjkgKzExMzgsMzEgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMDEzLDkgKzExOTQsNiBAQAogIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDIzLDYgKzEyMDEsNyBAQAogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CkBAIC0xMDMwLDEwICsxMjA5LDE3IEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTA0NywxNiArMTIzMyw0MSBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CiAKQEAgLTEwNjUsMjQgKzEyNzYsMTE3IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX1hPUl9CTE9DS1M9eQogQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0FTWU5DX01FTUNQWT15CiBDT05GSUdfQVNZTkNfWE9SPXkKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwppbmRleCBhZjc0Y2MyLi5iY2ZhZGUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDExOjU4OjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU2F0IE5vdiAgNyAyMDozMToxOCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE2LDEyIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDYsMTEgKzQzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTkKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTczLDcgKzcxLDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtODYsNiArODMsMTAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTk1LDEzICs5NiwxNyBAQAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTQsNyArMTE5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSwxOSArMTQwLDIyIEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTU2LDI1ICsxNjQsMjcgQEAKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfS0lSS1dPT0Q9eQotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIAogIwogIyBNYXJ2ZWxsIEtpcmt3b29kIEltcGxlbWVudGF0aW9ucwpAQCAtMTg1LDYgKzE5NSw3IEBACiBDT05GSUdfTUFDSF9NVjg4RjYyODFHVFdfR0U9eQogQ09ORklHX01BQ0hfU0hFRVZBUExVRz15CiBDT05GSUdfTUFDSF9UUzIxOT15CitDT05GSUdfTUFDSF9PUEVOUkRfQkFTRT15CiBDT05GSUdfUExBVF9PUklPTj15CiAKICMKQEAgLTE5NSw3ICsyMDYsNyBAQAogIyBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15CkBAIC0yMTEsNiArMjIyLDcgQEAKIENPTkZJR19PVVRFUl9DQUNIRT15CiBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDI9eQogIyBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDJfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0yMzUsMTEgKzI0NywxMiBAQAogIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKICMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldApAQCAtMjU0LDEwICsyNjcsMTIgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTM0NSw2ICszNjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszODMsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MywxNyArNDAwLDE4IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPXkKKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCisjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPXkKICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT15Ci0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CkBAIC00MTQsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDI1LDkgKzQ0NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTQsNiArNTEzLDcgQEAKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogQ09ORklHX01URF9NMjVQODA9eQogQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEPXkKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU0Myw2ICs1NjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC01NjcsMTAgKzU4OCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTg3LDYgKzYwNCw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MTQsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNjExLDcgKzYzMSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MjMsMTEgKzY0MiwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NDksNiArNjcxLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NzYsNiArNjk5LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjkzLDEzICs3MTcsMTYgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzY4LDYgKzc5NSw5IEBACiAjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc4OSw2ICs4MTksNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CkBAIC03OTcsMTAgKzgyOCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dMQU5fODAyMTE9eQogQ09ORklHX0xJQkVSVEFTPXkKQEAgLTgyMCw5ICs4NDgsNyBAQAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfTVdMOEsgaXMgbm90IHNldAogIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEg1SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEg5SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUjkxNzBfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldApAQCAtODMyLDYgKzg1OCw4IEBACiAjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19JV00gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTg1NSw2ICs4ODMsNyBAQAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC04NzgsMTMgKzkwNywxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTQzLDYgKzk3OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05OTgsMTAgKzEwMzQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDIzLDExICsxMDU1LDQ3IEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwNDEsMzMgKzExMDksMjggQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwODcsNyArMTE1MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwNiwxMCArMTE2OCwxMiBAQAogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQogIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKIENPTkZJR19ISURfS0VOU0lOR1RPTj15CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExMjMsOSArMTE4NywxNCBAQAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQogIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQogIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQogIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTExNTAsMTggKzEyMTksMjEgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTI1MiwxMSArMTMyNCwxNCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX01WU0RJTz15CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTI2Niw3ICsxMzQxLDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CkBAIC0xMjc4LDExICsxMzUzLDE0IEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTMxNCw2ICsxMzkyLDcgQEAKIENPTkZJR19SVENfRFJWX1MzNTM5MEE9eQogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTMyNSw2ICsxNDA0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzNjAsOCArMTQ0MCwxMSBAQAogIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzksMTAgKzE0NjIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNDU1LDcgKzE1NDEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTMwLDYgKzE2MTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTQ3LDYgKzE2MzMsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xNTY3LDEyICsxNjU0LDE0IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xNTgxLDI1ICsxNjcwLDEyIEBACiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xNjIzLDcgKzE2OTksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE2NjUsMTEgKzE3NDAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3MTQsNiArMTc5MSw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19DUllQVE9fREVWX01WX0NFU0E9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xpdHRsZXRvbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xpdHRsZXRvbl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjQ5NjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9saXR0bGV0b25fZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNzgzICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzUKLSMgRnJpIERlYyAyMSAxMTowNjoxOSAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cwotIwotQ09ORklHX0NQVV9QWEEzMDA9eQotQ09ORklHX0NQVV9QWEEzMTA9eQotIyBDT05GSUdfQ1BVX1BYQTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UUklaRVBTNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9MSVRUTEVUT049eQotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEzeHg9eQotQ09ORklHX1BYQV9TU1A9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX1hTQzM9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci1DT05GSUdfSU9fMzY9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgcm9vdGZzdHlwZT1uZnMgbmZzcm9vdD0xOTIuMTY4LjEuMTAwOi9uZnNyb290LyBpcD0xOTIuMTY4LjEuMTAxOjE5Mi4xNjguMS4xMDA6OjI1NS4yNTUuMjU1LjA6OmV0aDA6b24gY29uc29sZT10dHlTMiwzODQwMCBtZW09NjRNIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi1DT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci1DT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9QWEE9eQotQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUFhBPXkKLSMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19FUlJPUlM9eQotQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwppbmRleCA4ZGE3NWRlLi4yNjRmNTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKQEAgLTMwNCw3ICszMDQsNyBAQAogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MTBDMDgwMDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MTAyMDAwMDAKICMgQ09ORklHX1pCT09UX1JPTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0icm9vdD0xZjAzIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMCwxMTUyMDBuOCIKK0NPTkZJR19DTURMSU5FPSJyb290PTFmMDMgcm9vdGZzdHlwZT1qZmZzMiBjb25zb2xlPXR0eVMyLDExNTIwMG44IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwppbmRleCAzNTdkNDAyLi5iM2M4Y2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCkBAIC05NjksNyArOTY5LDYgQEAKICMKIENPTkZJR19VU0JfT1RHX1VUSUxTPXkKICMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX1VTQj15CiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKaW5kZXggYjU0YWQyZS4uMTUwZGVhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCkBAIC02MTEsNyArNjExLDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTYzNCw3ICs2MzQsOCBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPXkKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTgzNCw3ICs4MzUsMjkgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQorQ09ORklHX1NORF9EUklWRVJTPXkKK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CitDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorQ09ORklHX1NORF9TT0NfVFdMNDAzMD15CisKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMDIwLDcgKzEwNDMsMTMgQEAKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEwODQsOSArMTExMywxMiBAQAogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CisKICMKICMgRmlsZSBzeXN0ZW1zCiAjCkBAIC0xNDA3LDMgKzE0MzksMTAgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorCisjIGFkZGVkIGJ5IGhhbmQgZm9yIG5vdworQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQorQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorQ09ORklHX1RXTDQwMzBfVVNCPXkKK0NPTkZJR19NTUNfT01BUF9IUz15CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwppbmRleCA4YTRhN2UyLi41YTMwNWYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCkBAIC0xNzAzLDcgKzE3MDMsMTQgQEAKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCmluZGV4IDllMjM4NTIuLjUzODNjZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDE0OjA3OjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU2F0IE5vdiAgNyAyMDo1MjoyMSAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE2LDEyIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDYsMTEgKzQzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTY5LDcgKzY3LDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTgyLDYgKzc5LDEwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTkxLDEzICs5MiwxNyBAQAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEwOSw3ICsxMTQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTMwLDE5ICsxMzUsMjIgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNTEsMjUgKzE1OSwyNyBAQAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT1JJT041WD15CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogCiAjCiAjIE9yaW9uIEltcGxlbWVudGF0aW9ucwpAQCAtMTg3LDYgKzE5Nyw5IEBACiBDT05GSUdfTUFDSF9UUzc4WFg9eQogQ09ORklHX01BQ0hfTVYyMTIwPXkKIENPTkZJR19NQUNIX0VETUlOSV9WMj15CitDT05GSUdfTUFDSF9EMk5FVD15CitDT05GSUdfTUFDSF9CSUdESVNLPXkKK0NPTkZJR19NQUNIX05FVDJCSUc9eQogQ09ORklHX01BQ0hfTVNTMj15CiBDT05GSUdfTUFDSF9XTlI4NTRUPXkKIENPTkZJR19NQUNIX1JEODhGNTE4MUxfR0U9eQpAQCAtMjAyLDcgKzIxNSw3IEBACiBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15CkBAIC0yMTUsNyArMjI4LDcgQEAKIENPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMjQwLDExICsyNTMsMTIgQEAKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CkBAIC0yNTksMTIgKzI3MywxNCBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTEVEUz15CiBDT05GSUdfTEVEU19DUFU9eQogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTMwOCw2ICszMjQsNyBAQAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIApAQCAtMzU2LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc4LDYgKzM5Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzk0LDExICs0MTMsMTUgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMSw2ICs0MzQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjIsOSArNDQ2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUzNyw2ICs1NjEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldApAQCAtNTUyLDcgKzU3Nyw5IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NzYsMTAgKzYwMyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTk2LDYgKzYxOSw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYwNCw2ICs2MjksNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNjIwLDcgKzY0Niw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MzIsMTEgKzY1NywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY1OCw2ICs2ODYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY4NSw2ICs3MTQsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MDMsMTMgKzczMywxNiBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NzcsNiArODEwLDggQEAKICMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03OTgsNiArODMzLDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKIENPTkZJR19NVjY0M1hYX0VUSD15CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldApAQCAtODA2LDEwICs4NDIsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzUsNiArODY4LDcgQEAKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtODU1LDEzICs4ODksMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTEyLDYgKzk1Miw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NjcsMjAgKzEwMDgsNTUgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwMzAsNiArMTEwNiw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDQxLDkgKzExMTksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTA1NywzMyArMTEzMywyNiBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDk3LDcgKzExNjYsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMTYsMTAgKzExODQsMTEgQEAKICMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTEzMCwxMCArMTE5OSwxMSBAQAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMTYwLDE4ICsxMjMwLDIxIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEyNDgsNyArMTMyMSw2IEBACiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTI1OCw3ICsxMzMwLDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIApAQCAtMTI2OSwxMSArMTM0MSwxNCBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CiAKICMKICMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQogIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEzMDYsNiArMTM4MSw3IEBACiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEzNDQsOCArMTQyMCwxMSBAQAogIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNTgsMTAgKzE0MzcsMTAgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPW0KLSMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEMj1tCkBAIC0xMzcwLDEwICsxNDQ5LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTQ0Niw3ICsxNTI4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTUzNyw2ICsxNjE4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU1Miw2ICsxNjM0LDcgQEAKIENPTkZJR19TQ0hFRFNUQVRTPXkKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTU3Miw2ICsxNjU1LDcgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldApAQCAtMTU3OSw2ICsxNjYzLDcgQEAKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19MQVRFTkNZVE9QPXkKQEAgLTE1ODcsMjUgKzE2NzIsMTIgQEAKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTE2MjksMjAgKzE3MDEsMTkgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQotQ09ORklHX0NSWVBUT19BRUFEMj1tCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQotQ09ORklHX0NSWVBUT19IQVNIMj1tCi1DT05GSUdfQ1JZUFRPX1JORzI9bQotQ09ORklHX0NSWVBUT19QQ09NUD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT1tCitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE2NzAsMTEgKzE3NDEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTY5MSw3ICsxNzY0LDcgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CkBAIC0xNzE5LDYgKzE3OTIsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfQ1JZUFRPX0RFVl9NVl9DRVNBPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIENPTkZJR19CSU5BUllfUFJJTlRGPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczM2I4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzMyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMxCisjIE1vbiBKdWwgMTMgMjI6NDg6NDkgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfSEFWRV9QV009eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE4CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworCisjCisjIFN1cHBvcnRlZCBQWEEzeHggUHJvY2Vzc29yIFZhcmlhbnRzCisjCitDT05GSUdfQ1BVX1BYQTMwMD15CitDT05GSUdfQ1BVX1BYQTMxMD15CitDT05GSUdfQ1BVX1BYQTMyMD15CitDT05GSUdfQ1BVX1BYQTkzMD15CitDT05GSUdfQ1BVX1BYQTkzNT15CisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMyMCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9aWUxPTklURT15CitDT05GSUdfTUFDSF9MSVRUTEVUT049eQorQ09ORklHX01BQ0hfVEFWT1JFVkI9eQorQ09ORklHX01BQ0hfU0FBUj15CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDQ3MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0hJTUFMQVlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCNzI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorQ09ORklHX1BYQTN4eD15CitDT05GSUdfUFhBX1NTUD15CitDT05GSUdfUFhBX0hBVkVfQk9BUkRfSVJRUz15CitDT05GSUdfUExBVF9QWEE9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDMz15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKK0NPTkZJR19JT18zNj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfT1VURVJfQ0FDSEU9eQorQ09ORklHX0NBQ0hFX1hTQzNMMj15CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09NjRNIGRlYnVnIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BYQTN4eD15CitDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU49eQorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15CitDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQz15CisjIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15CitDT05GSUdfS0VZQk9BUkRfUFhBOTMwX1JPVEFSWT15CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfUFhBOTMwX1RSS0JBTEw9eQorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzND15CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1BYQTJYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCitDT05GSUdfR1BJT19NQVg3MzJYPXkKK0NPTkZJR19HUElPX1BDQTk1M1g9eQorQ09ORklHX0dQSU9fUENGODU3WD15CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKK0NPTkZJR19HUElPX01BWDczMDE9eQorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPXkKK0NPTkZJR19QT1dFUl9TVVBQTFlfREVCVUc9eQorQ09ORklHX1BEQV9QT1dFUj15CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorQ09ORklHX0JBVFRFUllfREE5MDMwPXkKKyMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKK0NPTkZJR19QTUlDX0RBOTAzWD15CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9PVkVSTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CitDT05GSUdfTENEX1RETzI0TT15CisjIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CitDT05GSUdfQkFDS0xJR0hUX0RBOTAzWD15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF82eDExPXkKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19QWEE9eQorIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz1tCitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19EQTkwM1g9bQorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUFdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPW0KK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj1tCisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfREVCVUc9eQorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9EQTkwM1g9eQorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKK0NPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NISVJRPXkKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUM9eQorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTEKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCmluZGV4IDdkNjFhZTYuLjk1M2JhMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjMwotIyBUaHUgSnVsIDE2IDIzOjM2OjEwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgU2F0IE9jdCAxNyAyMzozMjoyNCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15CitDT05GSUdfSEFWRV9UQ009eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNDQsMTEgKzQ0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgwLDE3ICs4MSwxNSBAQAogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIwogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMzMsNiArMTMyLDcgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CkBAIC0xNDcsNiArMTQ3LDcgQEAKICMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNjksMTEgKzE3MCwxMyBAQAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfVTMwMD15CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CiAKICMKICMgU1QtRXJpY3Nzb24gQUIgVTMwMC9VMzMwL1UzMzUvVTM2NSBQbGF0Zm9ybQpAQCAtMTk1LDYgKzE5OCw3IEBACiBDT05GSUdfTUFDSF9VMzAwX0RVQUxfUkFNPXkKIENPTkZJR19VMzAwX0RFQlVHPXkKICMgQ09ORklHX01BQ0hfVTMwMF9TRU1JX0lTX1NIQVJFRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZPXkKIAogIwogIyBBbGwgdGhlIHNldHRpbmdzIGJlbG93IG11c3QgbWF0Y2ggdGhlIGJvb3Rsb2FkZXIncyBzZXR0aW5ncwpAQCAtMjA3LDcgKzIxMSw3IEBACiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQpAQCAtMjIyLDYgKzIyNiw3IEBACiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogQ09ORklHX0FSTV9WSUM9eQogQ09ORklHX0FSTV9WSUNfTlI9MgogQ09ORklHX0NPTU1PTl9DTEtERVY9eQpAQCAtMjQ1LDYgKzI1MCw4IEBACiAjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQpAQCAtMjY1LDYgKzI3Miw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CkBAIC0zMTMsNiArMzIxLDcgQEAKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKQEAgLTM1MSw2ICszNjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5MSw2ICs0MDEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQwMiw5ICs0MTMsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldApAQCAtNDUzLDYgKzQ2NCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTIwLDYgKzUzMiw3IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC01NDAsMTIgKzU1MywxNiBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTU5Nyw2ICs2MTQsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02MjksOSArNjQ3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC02NTMsMTYgKzY2OCwyMSBAQAogIwogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKICMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTY5MCwxMCArNzEwLDI0IEBACiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiBDT05GSUdfQUIzMTAwX0NPUkU9eQorQ09ORklHX0FCMzEwMF9PVFA9eQogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CisjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfQUIzMTAwPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Miw5ICs4MjYsMTAgQEAKICMKIENPTkZJR19NTUNfQVJNTU1DST15CiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQogCkBAIC04MjAsMTAgKzg1NSwxMCBAQAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC04NjMsNiArODk4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTg3OCwyNyArOTE0LDI1IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FCMzEwMD15CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQ09IOTAxMzMxPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKIAogIwogIyBETUEgRGV2aWNlcwogIwogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMyw2ICs5NDcsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTk3NSw3ICsxMDEwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzMyw2ICsxMDY3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNjYsMTEgKzExMDEsMTMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTIxLDYgKzExNTgsNyBAQAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiYjcyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTI5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2CisjIFRodSBBdWcgMjAgMDk6MDI6MzcgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIueGNlcC1pdGVjaCIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CisjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9CPXkKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX01BUktFUlM9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CisjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9YQ0VQPXkKK0NPTkZJR19QWEEyNXg9eQorQ09ORklHX1BYQV9TU1A9eQorQ09ORklHX1BMQVRfUFhBPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD1tdGQ0IHJvb3Rmc3R5cGU9amZmczIgcm8gY29uc29sZT10dHlTMCwxMTUyMDAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD1tCitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BYQTJYWD15CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9bQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj1tCisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfQURNMTAyMT1tCisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX01BWDY2NTA9bQorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9bQorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1NBMTEwMD1tCisjIENPTkZJR19SVENfRFJWX1BYQSBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9InV0ZjgiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1VOV0lORCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvenlsb25pdGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy96eWxvbml0ZV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDlkMDQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy96eWxvbml0ZV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3MzYgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCi0jIFR1ZSBPY3QgMjMgMTM6MzM6MjAgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cwotIwotQ09ORklHX0NQVV9QWEEzMDA9eQotQ09ORklHX0NQVV9QWEEzMTA9eQotQ09ORklHX0NQVV9QWEEzMjA9eQotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX1pZTE9OSVRFPXkKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBM3h4PXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0MzPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotQ09ORklHX0lPXzM2PXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0lXTU1YVD15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mcy9yb290ZnMvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDM4NDAwIG1lbT02NE0gZGVidWciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfUFhBPXkKLUNPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotQ09ORklHX0ZCX1BYQT15Ci0jIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UUz15Ci0jIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfNngxMT15Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA5ZWQyMzc3Li5kMGRhZWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTksMzEgKzE5LDIxIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKy8qCisgKiBPbiBBUk0sIG9yZGluYXJ5IGFzc2lnbm1lbnQgKHN0ciBpbnN0cnVjdGlvbikgZG9lc24ndCBjbGVhciB0aGUgbG9jYWwKKyAqIHN0cmV4L2xkcmV4IG1vbml0b3Igb24gc29tZSBpbXBsZW1lbnRhdGlvbnMuIFRoZSByZWFzb24gd2UgY2FuIHVzZSBpdCBmb3IKKyAqIGF0b21pY19zZXQoKSBpcyB0aGUgY2xyZXggb3IgZHVtbXkgc3RyZXggZG9uZSBvbiBldmVyeSBleGNlcHRpb24gcmV0dXJuLgorICovCiAjZGVmaW5lIGF0b21pY19yZWFkKHYpCSgodiktPmNvdW50ZXIpCisjZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgogCiAvKgogICogQVJNdjYgVVAgYW5kIFNNUCBzYWZlIGF0b21pYyBvcHMuICBXZSB1c2UgbG9hZCBleGNsdXNpdmUgYW5kCiAgKiBzdG9yZSBleGNsdXNpdmUgdG8gZW5zdXJlIHRoYXQgdGhlc2UgYXJlIGF0b21pYy4gIFdlIG1heSBsb29wCi0gKiB0byBlbnN1cmUgdGhhdCB0aGUgdXBkYXRlIGhhcHBlbnMuICBXcml0aW5nIHRvICd2LT5jb3VudGVyJwotICogd2l0aG91dCB1c2luZyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgV0lMTCBicmVhayB0aGUgYXRvbWljCi0gKiBuYXR1cmUgb2YgdGhlc2Ugb3BzLgorICogdG8gZW5zdXJlIHRoYXQgdGhlIHVwZGF0ZSBoYXBwZW5zLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfc2V0XG4iCi0iMToJbGRyZXgJJTAsIFslMV1cbiIKLSIJc3RyZXgJJTAsICUyLCBbJTFdXG4iCi0iCXRlcQklMCwgIzBcbiIKLSIJYm5lCTFiIgotCTogIj0mciIgKHRtcCkKLQk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCi0JOiAiY2MiKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwpAQCAtMTYzLDggKzE1Myw2IEBACiAjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQgb24gcHJlLUFSTXY2IENQVXMKICNlbmRpZgogCi0jZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA2M2E0ODFmLi4zMzhmZjE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtODQsNyArODQsNyBAQAogCSpwID0gcmVzIHwgbWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTAxLDcgKzEwMSw3IEBACiAJKnAgPSByZXMgJiB+bWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTE4LDcgKzExOCw3IEBACiAJKnAgPSByZXMgXiBtYXNrOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gcmVzICYgbWFzazsKKwlyZXR1cm4gKHJlcyAmIG1hc2spICE9IDA7CiB9CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlLmgKaW5kZXggZmVhYTc1Zi4uNjZjMTYwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC00LDcgKzQsNyBAQAogI2lmbmRlZiBfX0FTTUFSTV9DQUNIRV9ICiAjZGVmaW5lIF9fQVNNQVJNX0NBQ0hFX0gKIAotI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNQorI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVAogI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZmQwM2ZiNi4uM2QwY2RkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNDE0LDkgKzQxNCwxNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF9pY2FjaGVfYWxsKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCisJZXh0ZXJuIHZvaWQgdjZfaWNhY2hlX2ludmFsX2FsbCh2b2lkKTsKKwl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7CisjZWxzZQogCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSS1jYWNoZVxuIgogCSAgICA6CiAJICAgIDogInIiICgwKSk7CisjZW5kaWYKIH0KIAogI2RlZmluZSBBUkNIX0hBU19GTFVTSF9BTk9OX1BBR0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAppbmRleCBiM2U2NTZjLi4yMGFlOTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCkBAIC02Myw2ICs2MywxMSBAQAogCXJldHVybiByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX2NvbnN0X18gcmVhZF9jcHVpZF90Y21zdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gcmVhZF9jcHVpZChDUFVJRF9UQ00pOworfQorCiAvKgogICogSW50ZWwncyBYU2NhbGUzIGNvcmUgc3VwcG9ydHMgc29tZSB2NiBmZWF0dXJlcyAoc3VwZXJzZWN0aW9ucywgTDIpCiAgKiBidXQgYWR2ZXJ0aXNlcyBpdHNlbGYgYXMgdjUgYXMgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdjYgSVNBLiAgRm9yCkBAIC03Myw3ICs3OCwxMCBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9pc194c2MzKHZvaWQpCiB7Ci0JaWYgKChyZWFkX2NwdWlkX2lkKCkgJiAweGZmZmZlMDAwKSA9PSAweDY5MDU2MDAwKQorCXVuc2lnbmVkIGludCBpZDsKKwlpZCA9IHJlYWRfY3B1aWRfaWQoKSAmIDB4ZmZmZmUwMDA7CisJLyogSXQgY292ZXJzIGJvdGggSW50ZWwgSUQgYW5kIE1hcnZlbGwgSUQgKi8KKwlpZiAoKGlkID09IDB4NjkwNTYwMDApIHx8IChpZCA9PSAweDU2MDU2MDAwKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYzNiOTExZS4uNmFhYzNmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTk4LDYgKzk4LDkgQEAKIGV4dGVybiBpbnQgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYyhjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICosIGludCk7CiAjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCxzdGspIGFybV9lbGZfcmVhZF9pbXBsaWVzX2V4ZWMoJihleCksIHN0aykKIAoraW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2dyZWdzZXRfdCAqZWxmcmVncyk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTIGR1bXBfdGFza19yZWdzCisKICNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKaW5kZXggYTBlMzlkNS4uMjM0YTNmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaApAQCAtMTIwLDI1ICsxMjAsMzkgQEAKICNlbmRpZgogCiAvKgotICogUHJlZmV0Y2ggYWJvcnQgaGFuZGxlci4gIElmIHRoZSBDUFUgaGFzIGFuIElGQVIgdXNlIHRoYXQsIG90aGVyd2lzZQotICogdXNlIHRoZSBhZGRyZXNzIG9mIHRoZSBhYm9ydGVkIGluc3RydWN0aW9uCisgKglQcmVmZXRjaCBBYm9ydCBNb2RlbAorICoJPT09PT09PT09PT09PT09PQorICoKKyAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKKyAqCSAgbGVnYWN5CS0gbm8gSUZTUiwgbm8gSUZBUgorICoJICB2NgkJLSBBUk12NjogSUZTUiwgbm8gSUZBUgorICoJICB2NwkJLSBBUk12NzogSUZTUiBhbmQgSUZBUgogICovCisKICN1bmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKICN1bmRlZiBNVUxUSV9QQUJPUlQKIAotI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfSUZBUgorI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfTEVHQUNZCiAjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgogIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIocmVnLCBpbnNuKQltcmMgcDE1LCAwLCByZWcsIGNyNiwgY3IwLCAyCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIGxlZ2FjeV9wYWJvcnQKICMgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9OT0lGQVIKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y2CiAjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgogIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIocmVnLCBpbnNuKQltb3YgcmVnLCBpbnNuCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIHY2X3BhYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y3CisjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjdfcGFib3J0CiAjIGVuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaW9wM3h4LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHguaAppbmRleCA0YjhlN2Y1Li44ZDYwYWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHguaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHguaApAQCAtMjE1LDYgKzIxNSw3IEBACiAgKiBJT1AzWFggSS9PIGFuZCBNZW0gc3BhY2UgcmVnaW9ucyBmb3IgUENJIGF1dG9jb25maWd1cmF0aW9uCiAgKi8KICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9NRU1fUEEJMHg4MDAwMDAwMAorI2RlZmluZSBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRQkweDA4MDAwMDAwCiAKICNkZWZpbmUgSU9QM1hYX1BDSV9JT19XSU5ET1dfU0laRQkweDAwMDEwMDAwCiAjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfSU9fUEEJCTB4OTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfcGxhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzAzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfcGxhdC5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBBUk0gc3BlY2lmaWMgU01QIGhlYWRlciwgdGhpcyBjb250YWlucyBvdXIgaW1wbGVtZW50YXRpb24KKyAqIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01BUk1fU01QX1BMQVRfSAorI2RlZmluZSBfX0FTTUFSTV9TTVBfUExBVF9ICisKKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgorCisvKiBhbGwgU01QIGNvbmZpZ3VyYXRpb25zIGhhdmUgdGhlIGV4dGVuZGVkIENQVUlEIHJlZ2lzdGVycyAqLworc3RhdGljIGlubGluZSBpbnQgdGxiX29wc19uZWVkX2Jyb2FkY2FzdCh2b2lkKQoreworCXJldHVybiAoKHJlYWRfY3B1aWRfZXh0KENQVUlEX0VYVF9NTUZSMykgPj4gMTIpICYgMHhmKSA8IDI7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGNtLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90Y20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTI5ZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGNtLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogQXV0aG9yOiBSaWNrYXJkIEFuZGVyc3NvbiA8cmlja2FyZC5hbmRlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisgKgorICovCisjaWZuZGVmIF9fQVNNQVJNX1RDTV9ICisjZGVmaW5lIF9fQVNNQVJNX1RDTV9ICisKKyNpZm5kZWYgQ09ORklHX0hBVkVfVENNCisjZXJyb3IgIllvdSBzaG91bGQgbm90IGJlIGluY2x1ZGluZyB0Y20uaCB1bmxlc3MgeW91IGhhdmUgYSBUQ00hIgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBUYWcgdmFyaWFibGVzIHdpdGggdGhpcyAqLworI2RlZmluZSBfX3RjbWRhdGEgX19zZWN0aW9uKC50Y20uZGF0YSkKKy8qIFRhZyBjb25zdGFudHMgd2l0aCB0aGlzICovCisjZGVmaW5lIF9fdGNtY29uc3QgX19zZWN0aW9uKC50Y20ucm9kYXRhKQorLyogVGFnIGZ1bmN0aW9ucyBpbnNpZGUgVENNIGNhbGxlZCBmcm9tIG91dHNpZGUgVENNIHdpdGggdGhpcyAqLworI2RlZmluZSBfX3RjbWZ1bmMgX19hdHRyaWJ1dGVfXygobG9uZ19jYWxsKSkgX19zZWN0aW9uKC50Y20udGV4dCkgbm9pbmxpbmUKKy8qIFRhZyBmdW5jdGlvbiBpbnNpZGUgVENNIGNhbGxlZCBmcm9tIGluc2lkZSBUQ00gIHdpdGggdGhpcyAqLworI2RlZmluZSBfX3RjbWxvY2FsZnVuYyBfX3NlY3Rpb24oLnRjbS50ZXh0KQorCit2b2lkICp0Y21fYWxsb2Moc2l6ZV90IGxlbik7Cit2b2lkIHRjbV9mcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGE0NWFiNWQuLmMyZjE2MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMzUwLDcgKzM1MCw3IEBACiAJaWYgKHRsYl9mbGFnKFRMQl9XQikpCiAJCWRzYigpOwogCi0JaWYgKGNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG1tKSkpIHsKKwlpZiAoY3B1bWFza190ZXN0X2NwdShnZXRfY3B1KCksIG1tX2NwdW1hc2sobW0pKSkgewogCQlpZiAodGxiX2ZsYWcoVExCX1YzX0ZVTEwpKQogCQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzYsIGMwLCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCQlpZiAodGxiX2ZsYWcoVExCX1Y0X1VfRlVMTCkpCkBAIC0zNjAsNiArMzYwLDcgQEAKIAkJaWYgKHRsYl9mbGFnKFRMQl9WNF9JX0ZVTEwpKQogCQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCX0KKwlwdXRfY3B1KCk7CiAKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X1VfQVNJRCkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNywgMiIgOiA6ICJyIiAoYXNpZCkgOiAiY2MiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaWZpZWQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaWZpZWQuaAppbmRleCAwNzNlODViLi5iYzYzMTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oCkBAIC0zNSw3ICszNSw5IEBACiAKICNkZWZpbmUgQVJNKHguLi4pCiAjZGVmaW5lIFRIVU1CKHguLi4pCXgKKyNpZmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgVyhpbnN0cikJaW5zdHIudworI2VuZGlmCiAjZGVmaW5lIEJTWU0oc3ltKQlzeW0gKyAxCiAKICNlbHNlCS8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwpAQCAtNDUsNyArNDcsOSBAQAogCiAjZGVmaW5lIEFSTSh4Li4uKQl4CiAjZGVmaW5lIFRIVU1CKHguLi4pCisjaWZkZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIFcoaW5zdHIpCWluc3RyCisjZW5kaWYKICNkZWZpbmUgQlNZTShzeW0pCXN5bQogCiAjZW5kaWYJLyogQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggODlmN2VhZC4uNGU1MDZkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQwMyw2ICs0MDMsMTUgQEAKICNkZWZpbmUgX19BUk1fTlJfc2V0X3RscwkJKF9fQVJNX05SX0JBU0UrNSkKIAogLyoKKyAqICpOT1RFKjogVGhpcyBpcyBhIGdob3N0IHN5c2NhbGwgcHJpdmF0ZSB0byB0aGUga2VybmVsLiAgT25seSB0aGUKKyAqIF9fa3VzZXJfY21weGNoZyBjb2RlIGluIGVudHJ5LWFybXYuUyBzaG91bGQgYmUgYXdhcmUgb2YgaXRzCisgKiBleGlzdGVuY2UuICBEb24ndCBldmVyIHVzZSB0aGlzIGZyb20gdXNlciBjb2RlLgorICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSTV9OUl9jbXB4Y2hnCQkoX19BUk1fTlJfQkFTRSsweDAwZmZmMCkKKyNlbmRpZgorCisvKgogICogVGhlIGZvbGxvd2luZyBzeXNjYWxscyBhcmUgb2Jzb2xldGUgYW5kIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIEVBQkkuCiAgKi8KICNpZiBkZWZpbmVkKF9fQVJNX0VBQklfXykgJiYgIWRlZmluZWQoX19LRVJORUxfXykKQEAgLTQ1Niw2ICs0NjUsNyBAQAogICogVW5pbXBsZW1lbnRlZCAob3IgYWx0ZXJuYXRpdmVseSBpbXBsZW1lbnRlZCkgc3lzY2FsbHMKICAqLwogI2RlZmluZSBfX0lHTk9SRV9mYWR2aXNlNjRfNjQJCTEKKyNkZWZpbmUgX19JR05PUkVfbWlncmF0ZV9wYWdlcwkJMQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX0FSTV9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IGM0NDZhZWYuLjc5MDg3ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTM1LDYgKzM1LDcgQEAKIG9iai0kKENPTkZJR19BUk1fVEhVTUJFRSkJKz0gdGh1bWJlZS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwogb2JqLSQoQ09ORklHX0FSTV9VTldJTkQpCSs9IHVud2luZC5vCitvYmotJChDT05GSUdfSEFWRV9UQ00pCQkrPSB0Y20ubwogCiBvYmotJChDT05GSUdfQ1JVTkNIKQkJKz0gY3J1bmNoLm8gY3J1bmNoLWJpdHMubwogQUZMQUdTX2NydW5jaC1iaXRzLm8JCTo9IC1XYSwtbWNwdT1lcDkzMTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IDNkNzI3YTguLmQyOTAzZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPG1hY2gvZW50cnktbWFjcm8uUz4KICNpbmNsdWRlIDxhc20vdGhyZWFkX25vdGlmeS5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKICNpbmNsdWRlICJlbnRyeS1oZWFkZXIuUyIKIApAQCAtMjcyLDcgKzI3MywxNSBAQAogCUAKIAlAICByMCAtIGluc3RydWN0aW9uCiAJQAorI2lmbmRlZglDT05GSUdfVEhVTUIyX0tFUk5FTAogCWxkcglyMCwgW3IyLCAjLTRdCisjZWxzZQorCWxkcmgJcjAsIFtyMiwgIy0yXQkJCUAgVGh1bWIgaW5zdHJ1Y3Rpb24gYXQgTFIgLSAyCisJYW5kCXI5LCByMCwgIzB4ZjgwMAorCWNtcAlyOSwgIzB4ZTgwMAkJCUAgMzItYml0IGluc3RydWN0aW9uIGlmIHh4ID49IDAKKwlsZHJoaHMJcjksIFtyMl0JCQlAIGJvdHRvbSAxNiBiaXRzCisJb3JyaHMJcjAsIHI5LCByMCwgbHNsICMxNgorI2VuZGlmCiAJYWRyCXI5LCBCU1lNKDFmKQogCWJsCWNhbGxfZnBlCiAKQEAgLTMwMywyMiArMzEyLDE2IEBACiAJdHN0CXIzLCAjUFNSX0lfQklUCiAJYmljZXEJcjksIHI5LCAjUFNSX0lfQklUCiAKLQlACi0JQCBzZXQgYXJncywgdGhlbiBjYWxsIG1haW4gaGFuZGxlcgotCUAKLQlAICByMCAtIGFkZHJlc3Mgb2YgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KLQlAICByMSAtIHBvaW50ZXIgdG8gcmVnaXN0ZXJzIG9uIHN0YWNrCi0JQAotI2lmZGVmIE1VTFRJX1BBQk9SVAogCW1vdglyMCwgcjIJCQlAIHBhc3MgYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uLgorI2lmZGVmIE1VTFRJX1BBQk9SVAogCWxkcglyNCwgLkxDcHJvY2ZucwogCW1vdglsciwgcGMKIAlsZHIJcGMsIFtyNCwgI1BST0NFU1NPUl9QQUJUX0ZVTkNdCiAjZWxzZQotCUNQVV9QQUJPUlRfSEFORExFUihyMCwgcjIpCisJYmwJQ1BVX1BBQk9SVF9IQU5ETEVSCiAjZW5kaWYKIAltc3IJY3Bzcl9jLCByOQkJCUAgTWF5YmUgZW5hYmxlIGludGVycnVwdHMKLQltb3YJcjEsIHNwCQkJCUAgcmVncworCW1vdglyMiwgc3AJCQkJQCByZWdzCiAJYmwJZG9fUHJlZmV0Y2hBYm9ydAkJQCBjYWxsIGFib3J0IGhhbmRsZXIKIAogCUAKQEAgLTYwNiwzMyArNjA5LDMzIEBACiAgVEhVTUIoCWFkZAlwYywgcjgJCQkpCiAJbm9wCiAKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMAorCW1vdndfcGMJbHIJCQkJQCBDUCMwCiAJVyhiKQlkb19mcGUJCQkJQCBDUCMxIChGUEUpCiAJVyhiKQlkb19mcGUJCQkJQCBDUCMyIChGUEUpCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzMKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMwogI2lmZGVmIENPTkZJR19DUlVOQ0gKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM0IChNYXZlcmlja0NydW5jaCkKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM1IChNYXZlcmlja0NydW5jaCkKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM2IChNYXZlcmlja0NydW5jaCkKICNlbHNlCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzQKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNQotCVcobW92KQlwYywgbHIJCQkJQCBDUCM2CisJbW92d19wYwlscgkJCQlAIENQIzQKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNQorCW1vdndfcGMJbHIJCQkJQCBDUCM2CiAjZW5kaWYKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNwotCVcobW92KQlwYywgbHIJCQkJQCBDUCM4Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNworCW1vdndfcGMJbHIJCQkJQCBDUCM4CisJbW92d19wYwlscgkJCQlAIENQIzkKICNpZmRlZiBDT05GSUdfVkZQCiAJVyhiKQlkb192ZnAJCQkJQCBDUCMxMCAoVkZQKQogCVcoYikJZG9fdmZwCQkJCUAgQ1AjMTEgKFZGUCkKICNlbHNlCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzEwIChWRlApCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzExIChWRlApCisJbW92d19wYwlscgkJCQlAIENQIzEwIChWRlApCisJbW92d19wYwlscgkJCQlAIENQIzExIChWRlApCiAjZW5kaWYKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTIKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTMKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTQgKERlYnVnKQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxNSAoQ29udHJvbCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTIKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTMKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTQgKERlYnVnKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxNSAoQ29udHJvbCkKIAogI2lmZGVmIENPTkZJR19ORU9OCiAJLmFsaWduCTYKQEAgLTY3OCw3ICs2ODEsOSBAQAogCS53b3JkCW5vX2ZwCiAJLnByZXZpb3VzCiAKLW5vX2ZwOgltb3YJcGMsIGxyCitFTlRSWShub19mcCkKKwltb3YJcGMsIGxyCitFTkRQUk9DKG5vX2ZwKQogCiBfX3VuZF91c3JfdW5rbm93bjoKIAllbmFibGVfaXJxCkBAIC02OTEsMTYgKzY5NiwxNiBAQAogX19wYWJ0X3VzcjoKIAl1c3JfZW50cnkKIAotI2lmZGVmIE1VTFRJX1BBQk9SVAogCW1vdglyMCwgcjIJCQlAIHBhc3MgYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uLgorI2lmZGVmIE1VTFRJX1BBQk9SVAogCWxkcglyNCwgLkxDcHJvY2ZucwogCW1vdglsciwgcGMKIAlsZHIJcGMsIFtyNCwgI1BST0NFU1NPUl9QQUJUX0ZVTkNdCiAjZWxzZQotCUNQVV9QQUJPUlRfSEFORExFUihyMCwgcjIpCisJYmwJQ1BVX1BBQk9SVF9IQU5ETEVSCiAjZW5kaWYKIAllbmFibGVfaXJxCQkJCUAgRW5hYmxlIGludGVycnVwdHMKLQltb3YJcjEsIHNwCQkJCUAgcmVncworCW1vdglyMiwgc3AJCQkJQCByZWdzCiAJYmwJZG9fUHJlZmV0Y2hBYm9ydAkJQCBjYWxsIGFib3J0IGhhbmRsZXIKICBVTldJTkQoLmZuZW5kCQkpCiAJLyogZmFsbCB0aHJvdWdoICovCkBAIC03MzQsMTMgKzczOSw2IEBACiAjaWZkZWYgQ09ORklHX01NVQogCWxkcglyNiwgW3IyLCAjVElfQ1BVX0RPTUFJTl0KICNlbmRpZgotI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2Ci0jaWZkZWYgQ09ORklHX0NQVV8zMnY2SwotCWNscmV4Ci0jZWxzZQotCXN0cmV4CXI1LCByNCwgW2lwXQkJCUAgQ2xlYXIgZXhjbHVzaXZlIG1vbml0b3IKLSNlbmRpZgotI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfSEFTX1RMU19SRUcpCiAJbWNyCXAxNSwgMCwgcjMsIGMxMywgYzAsIDMJCUAgc2V0IFRMUyByZWdpc3RlcgogI2VsaWYgIWRlZmluZWQoQ09ORklHX1RMU19SRUdfRU1VTCkKQEAgLTkxMSwxMCArOTA5LDEwIEBACiAJICogQSBzcGVjaWFsIGdob3N0IHN5c2NhbGwgaXMgdXNlZCBmb3IgdGhhdCAoc2VlIHRyYXBzLmMpLgogCSAqLwogCXN0bWZkCXNwISwge3I3LCBscn0KLQltb3YJcjcsICMweGZmMDAJCUAgMHhmZmYwIGludG8gcjcgZm9yIEVBQkkKLQlvcnIJcjcsIHI3LCAjMHhmMAotCXN3aQkjMHg5ZmZmZjAKKwlsZHIJcjcsID0xZgkJCUAgaXQncyAyMCBiaXRzCisJc3dpCV9fQVJNX05SX2NtcHhjaGcKIAlsZG1mZAlzcCEsIHtyNywgcGN9CisxOgkud29yZAlfX0FSTV9OUl9jbXB4Y2hnCiAKICNlbGlmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDgwN2NmZWIuLmYwZmU5NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWNtcCByMCwgcjIKIAlibmUgZ251X3RyYWNlCiAJbGRtaWEgc3AhLCB7cjAtcjMsIGlwLCBscn0KLQlieCBpcAorCW1vdiBwYywgaXAKIAogZ251X3RyYWNlOgogCWxkciByMSwgW3NwLCAjMjBdCQkJQCBsciBvZiBpbnN0cnVtZW50ZWQgcm91dGluZQpAQCAtMTM1LDcgKzEzNSw3IEBACiAJbW92IGxyLCBwYwogCW1vdiBwYywgcjIKIAlsZG1pYSBzcCEsIHtyMC1yMywgaXAsIGxyfQotCWJ4IGlwCisJbW92IHBjLCBpcAogCiBFTlRSWShtY291bnQpCiAJc3RtZGIgc3AhLCB7cjAtcjMsIGxyfQpAQCAtNDI1LDEzICs0MjUsNiBAQAogI2VuZGlmCiBFTkRQUk9DKHN5c19tbWFwMikKIAotRU5UUlkocGFib3J0X2lmYXIpCi0JCW1yYwlwMTUsIDAsIHIwLCBjcjYsIGNyMCwgMgotRU5UUlkocGFib3J0X25vaWZhcikKLQkJbW92CXBjLCBscgotRU5EUFJPQyhwYWJvcnRfaWZhcikKLUVORFBST0MocGFib3J0X25vaWZhcikKLQogI2lmZGVmIENPTkZJR19PQUJJX0NPTVBBVAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCmluZGV4IGE0ZWFmNGYuLjdlOWVkMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKQEAgLTc2LDEzICs3NiwyNyBAQAogI2lmbmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAogCS5tYWNybwlzdmNfZXhpdCwgcnBzcgogCW1zcglzcHNyX2N4c2YsIFxycHNyCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKQorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyNlbGlmIGRlZmluZWQgKENPTkZJR19DUFVfVjYpCisJbGRyCXIwLCBbc3BdCisJc3RyZXgJcjEsIHIyLCBbc3BdCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKKwlsZG1pYglzcCwge3IxIC0gcGN9XgkJCUAgbG9hZCByMSAtIHBjLCBjcHNyCisjZWxzZQorCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyNlbmRpZgogCS5lbmRtCiAKIAkubWFjcm8JcmVzdG9yZV91c2VyX3JlZ3MsIGZhc3QgPSAwLCBvZmZzZXQgPSAwCiAJbGRyCXIxLCBbc3AsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgogCWxkcglsciwgW3NwLCAjXG9mZnNldCArIFNfUENdIQlAIGdldCBwYwogCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKQorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9WNikKKwlzdHJleAlyMSwgcjIsIFtzcF0JCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgorI2VuZGlmCiAJLmlmCVxmYXN0CiAJbGRtZGIJc3AsIHtyMSAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIxIC0gbHIKIAkuZWxzZQpAQCAtOTYsOCArMTEwLDE2IEBACiAJbW92CVxyZCwgc3AsIGxzciAjMTMKIAltb3YJXHJkLCBccmQsIGxzbCAjMTMKIAkuZW5kbQorCisJQAorCUAgMzItYml0IHdpZGUgIm1vdiBwYywgcmVnIgorCUAKKwkubWFjcm8JbW92d19wYywgcmVnCisJbW92CXBjLCBccmVnCisJLmVuZG0KICNlbHNlCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCiAJLm1hY3JvCXN2Y19leGl0LCBycHNyCisJY2xyZXgJCQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCiAJbGRyCXIwLCBbc3AsICNTX1NQXQkJCUAgdG9wIG9mIHRoZSBzdGFjawogCWxkcglyMSwgW3NwLCAjU19QQ10JCQlAIHJldHVybiBhZGRyZXNzCiAJdHN0CXIwLCAjNAkJCQlAIG9yaWcgc3RhY2sgOC1ieXRlIGFsaWduZWQ/CkBAIC0xMTAsNiArMTMyLDcgQEAKIAkuZW5kbQogCiAJLm1hY3JvCXJlc3RvcmVfdXNlcl9yZWdzLCBmYXN0ID0gMCwgb2Zmc2V0ID0gMAorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgogCW1vdglyMiwgc3AKIAlsb2FkX3VzZXJfc3BfbHIgcjIsIHIzLCBcb2Zmc2V0ICsgU19TUAlAIGNhbGxpbmcgc3AsIGxyCiAJbGRyCXIxLCBbc3AsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgpAQCAtMTMwLDYgKzE1MywxNCBAQAogCWxzcglccmQsIFxyZCwgIzEzCiAJbW92CVxyZCwgXHJkLCBsc2wgIzEzCiAJLmVuZG0KKworCUAKKwlAIDMyLWJpdCB3aWRlICJtb3YgcGMsIHJlZyIKKwlACisJLm1hY3JvCW1vdndfcGMsIHJlZworCW1vdglwYywgXHJlZworCW5vcAorCS5lbmRtCiAjZW5kaWYJLyogIUNPTkZJR19USFVNQjJfS0VSTkVMICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCmluZGV4IDkzYWQ1NzYuLmI5NTA1YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCkBAIC0xMyw2ICsxMyw3IEBACiAKICNkZWZpbmUgQVRBR19DT1JFIDB4NTQ0MTAwMDEKICNkZWZpbmUgQVRBR19DT1JFX1NJWkUgKCgyKjQgKyAzKjQpID4+IDIpCisjZGVmaW5lIEFUQUdfQ09SRV9TSVpFX0VNUFRZICgoMio0KSA+PiAyKQogCiAJLmFsaWduCTIKIAkudHlwZQlfX3N3aXRjaF9kYXRhLCAlb2JqZWN0CkBAIC05Niw3ICs5Nyw3IEBACiAJYmwJcHJpbnRoZXg4CiAJYWRyCXIwLCBzdHJfYTIKIAlibAlwcmludGFzY2lpCi0JYWRyCXIzLCAzZgorCWFkcglyMywgNGYKIAlsZG1pYQlyMywge3I0LCByNSwgcjZ9CQlAIGdldCBtYWNoaW5lIGRlc2MgbGlzdAogCXN1YglyNCwgcjMsIHI0CQkJQCBnZXQgb2Zmc2V0IGJldHdlZW4gdmlydCZwaHlzCiAJYWRkCXI1LCByNSwgcjQJCQlAIGNvbnZlcnQgdmlydCBhZGRyZXNzZXMgdG8KQEAgLTI1MSw3ICsyNTIsOCBAQAogCWJuZQkxZgogCiAJbGRyCXI1LCBbcjIsICMwXQkJCUAgaXMgZmlyc3QgdGFnIEFUQUdfQ09SRT8KLQlzdWJzCXI1LCByNSwgI0FUQUdfQ09SRV9TSVpFCisJY21wCXI1LCAjQVRBR19DT1JFX1NJWkUKKwljbXBuZQlyNSwgI0FUQUdfQ09SRV9TSVpFX0VNUFRZCiAJYm5lCTFmCiAJbGRyCXI1LCBbcjIsICM0XQogCWxkcglyNiwgPUFUQUdfQ09SRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZjY5MmVmZC4uNjBjNjJjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0b3BfbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC04MywxMCArODQsMjQgQEAKIAlmbHVzaF9pbnNucyhwLT5hZGRyLCAxKTsKIH0KIAorLyoKKyAqIFRoZSBhY3R1YWwgZGlzYXJtaW5nIGlzIGRvbmUgaGVyZSBvbiBlYWNoIENQVSBhbmQgc3luY2hyb25pemVkIHVzaW5nCisgKiBzdG9wX21hY2hpbmUuIFRoaXMgc3luY2hyb25pemF0aW9uIGlzIG5lY2Vzc2FyeSBvbiBTTVAgdG8gYXZvaWQgcmVtb3ZpbmcKKyAqIGEgcHJvYmUgYmV0d2VlbiB0aGUgbW9tZW50IHRoZSAnVW5kZWZpbmVkIEluc3RydWN0aW9uJyBleGNlcHRpb24gaXMgcmFpc2VkCisgKiBhbmQgdGhlIG1vbWVudCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgcmVhZHMgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGZyb20KKyAqIG1lbW9yeS4KKyAqLworaW50IF9fa3Byb2JlcyBfX2FyY2hfZGlzYXJtX2twcm9iZSh2b2lkICpwKQoreworCXN0cnVjdCBrcHJvYmUgKmtwID0gcDsKKwkqa3AtPmFkZHIgPSBrcC0+b3Bjb2RlOworCWZsdXNoX2luc25zKGtwLT5hZGRyLCAxKTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7Ci0JKnAtPmFkZHIgPSBwLT5vcGNvZGU7Ci0JZmx1c2hfaW5zbnMocC0+YWRkciwgMSk7CisJc3RvcF9tYWNoaW5lKF9fYXJjaF9kaXNhcm1fa3Byb2JlLCBwLCAmY3B1X29ubGluZV9tYXApOwogfQogCiB2b2lkIF9fa3Byb2JlcyBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDc5MGZiZWUuLjBkOTZkMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMzI4LDYgKzMyOCwxNSBAQAogfQogCiAvKgorICogRmlsbCBpbiB0aGUgdGFzaydzIGVsZnJlZ3Mgc3RydWN0dXJlIGZvciBhIGNvcmUgZHVtcC4KKyAqLworaW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2dyZWdzZXRfdCAqZWxmcmVncykKK3sKKwllbGZfY29yZV9jb3B5X3JlZ3MoZWxmcmVncywgdGFza19wdF9yZWdzKHQpKTsKKwlyZXR1cm4gMTsKK30KKworLyoKICAqIGZpbGwgaW4gdGhlIGZwZSBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLi4uCiAgKi8KIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB1c2VyX2ZwICpmcCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggZDRkNGY3Ny4uYzZjNTdiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogI2luY2x1ZGUgImNvbXBhdC5oIgogI2luY2x1ZGUgImF0YWdzLmgiCisjaW5jbHVkZSAidGNtLmgiCiAKICNpZm5kZWYgTUVNX1NJWkUKICNkZWZpbmUgTUVNX1NJWkUJKDE2KjEwMjQqMTAyNCkKQEAgLTc0OSw2ICs3NTAsNyBAQAogI2VuZGlmCiAKIAljcHVfaW5pdCgpOworCXRjbV9pbml0KCk7CiAKIAkvKgogCSAqIFNldCB1cCB2YXJpb3VzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwb2ludGVycwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCmluZGV4IDE0MjNhMzQuLjJhNTczZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOSBSdXNzZWxsIEtpbmcKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogI2RlZmluZSBTV0lfU1lTX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9zaWdyZXR1cm4pfChfX05SX09BQklfU1lTQ0FMTF9CQVNFKSkKICNkZWZpbmUgU1dJX1NZU19SVF9TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfcnRfc2lncmV0dXJuKXwoX19OUl9PQUJJX1NZU0NBTExfQkFTRSkpCisjZGVmaW5lIFNXSV9TWVNfUkVTVEFSVAkJKDB4ZWYwMDAwMDB8X19OUl9yZXN0YXJ0X3N5c2NhbGx8X19OUl9PQUJJX1NZU0NBTExfQkFTRSkKIAogLyoKICAqIFdpdGggRUFCSSwgdGhlIHN5c2NhbGwgbnVtYmVyIGhhcyB0byBiZSBsb2FkZWQgaW50byByNy4KQEAgLTQ5LDYgKzUwLDE4IEBACiB9OwogCiAvKgorICogRWl0aGVyIHdlIHN1cHBvcnQgT0FCSSBvbmx5LCBvciB3ZSBoYXZlIEVBQkkgd2l0aCB0aGUgT0FCSQorICogY29tcGF0IGxheWVyIGVuYWJsZWQuICBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBkb24ndCBrbm93IGlmCisgKiB1c2VyIHNwYWNlIGlzIEVBQkkgb3Igbm90LCBhbmQgaWYgbm90IHdlIG11c3Qgbm90IGNsb2JiZXIgcjcuCisgKiBBbHdheXMgdXNpbmcgdGhlIE9BQkkgc3lzY2FsbCBzb2x2ZXMgdGhhdCBpc3N1ZSBhbmQgd29ya3MgZm9yCisgKiBhbGwgdGhvc2UgY2FzZXMuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9yZXN0YXJ0X2NvZGVbMl0gPSB7CisJU1dJX1NZU19SRVNUQVJULAkvKiBzd2kJX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KKwkweGU0OWRmMDA0LAkJLyogbGRyCXBjLCBbc3BdLCAjNCAqLworfTsKKworLyoKICAqIGF0b21pY2FsbHkgc3dhcCBpbiB0aGUgbmV3IHNpZ25hbCBtYXNrLCBhbmQgd2FpdCBmb3IgYSBzaWduYWwuCiAgKi8KIGFzbWxpbmthZ2UgaW50IHN5c19zaWdzdXNwZW5kKGludCByZXN0YXJ0LCB1bnNpZ25lZCBsb25nIG9sZG1hc2ssIG9sZF9zaWdzZXRfdCBtYXNrKQpAQCAtNjQ1LDMyICs2NTgsMTIgQEAKIAkJCQlyZWdzLT5BUk1fcGMgLT0gNDsKICNlbHNlCiAJCQkJdTMyIF9fdXNlciAqdXNwOwotCQkJCXUzMiBzd2l2YWwgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKIAotCQkJCXJlZ3MtPkFSTV9zcCAtPSAxMjsKKwkJCQlyZWdzLT5BUk1fc3AgLT0gNDsKIAkJCQl1c3AgPSAodTMyIF9fdXNlciAqKXJlZ3MtPkFSTV9zcDsKIAotCQkJCS8qCi0JCQkJICogRWl0aGVyIHdlIHN1cHBvcnRzIE9BQkkgb25seSwgb3Igd2UgaGF2ZQotCQkJCSAqIEVBQkkgd2l0aCB0aGUgT0FCSSBjb21wYXQgbGF5ZXIgZW5hYmxlZC4KLQkJCQkgKiBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBkb24ndCBrbm93IGlmIHVzZXIKLQkJCQkgKiBzcGFjZSBpcyBFQUJJIG9yIG5vdCwgYW5kIGlmIG5vdCB3ZSBtdXN0Ci0JCQkJICogbm90IGNsb2JiZXIgcjcuICBBbHdheXMgdXNpbmcgdGhlIE9BQkkKLQkJCQkgKiBzeXNjYWxsIHNvbHZlcyB0aGF0IGlzc3VlIGFuZCB3b3JrcyBmb3IKLQkJCQkgKiBhbGwgdGhvc2UgY2FzZXMuCi0JCQkJICovCi0JCQkJc3dpdmFsID0gc3dpdmFsIC0gX19OUl9TWVNDQUxMX0JBU0UgKyBfX05SX09BQklfU1lTQ0FMTF9CQVNFOwotCi0JCQkJcHV0X3VzZXIocmVncy0+QVJNX3BjLCAmdXNwWzBdKTsKLQkJCQkvKiBzd2kgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KLQkJCQlwdXRfdXNlcigweGVmMDAwMDAwIHwgc3dpdmFsLCAmdXNwWzFdKTsKLQkJCQkvKiBsZHIJcGMsIFtzcF0sICMxMiAqLwotCQkJCXB1dF91c2VyKDB4ZTQ5ZGYwMGMsICZ1c3BbMl0pOwotCi0JCQkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXVzcCwKLQkJCQkJCSAgICh1bnNpZ25lZCBsb25nKSh1c3AgKyAzKSk7Ci0KLQkJCQlyZWdzLT5BUk1fcGMgPSByZWdzLT5BUk1fc3AgKyA0OworCQkJCXB1dF91c2VyKHJlZ3MtPkFSTV9wYywgdXNwKTsKKwkJCQlyZWdzLT5BUk1fcGMgPSBLRVJOX1JFU1RBUlRfQ09ERTsKICNlbmRpZgogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmggYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKaW5kZXggMjdiZWVjZS4uNmZjZmU4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaApAQCAtMSwxMiArMSwxNCBAQAogLyoKICAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFJ1c3NlbGwgS2luZy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBSdXNzZWxsIEtpbmcuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogI2RlZmluZSBLRVJOX1NJR1JFVFVSTl9DT0RFCShDT05GSUdfVkVDVE9SU19CQVNFICsgMHgwMDAwMDUwMCkKKyNkZWZpbmUgS0VSTl9SRVNUQVJUX0NPREUJKEtFUk5fU0lHUkVUVVJOX0NPREUgKyBzaXplb2Yoc2lncmV0dXJuX2NvZGVzKSkKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgc2lncmV0dXJuX2NvZGVzWzddOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9yZXN0YXJ0X2NvZGVbMl07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggZTBkMzI3Ny4uNTcxNjJhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAvKgogICogYXMgZnJvbSAyLjUsIGtlcm5lbHMgbm8gbG9uZ2VyIGhhdmUgYW4gaW5pdF90YXNrcyBzdHJ1Y3R1cmUKQEAgLTE1Myw3ICsxNTQsNyBAQAogLyoKICAqIF9fY3B1X2Rpc2FibGUgcnVucyBvbiB0aGUgcHJvY2Vzc29yIHRvIGJlIHNodXRkb3duLgogICovCi1pbnQgX19jcHVleGl0IF9fY3B1X2Rpc2FibGUodm9pZCkKK2ludCBfX2NwdV9kaXNhYmxlKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC0yMDAsNyArMjAxLDcgQEAKICAqIGNhbGxlZCBvbiB0aGUgdGhyZWFkIHdoaWNoIGlzIGFza2luZyBmb3IgYSBDUFUgdG8gYmUgc2h1dGRvd24gLQogICogd2FpdHMgdW50aWwgc2h1dGRvd24gaGFzIGNvbXBsZXRlZCwgb3IgaXQgaXMgdGltZWQgb3V0LgogICovCi12b2lkIF9fY3B1ZXhpdCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3ZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJaWYgKCFwbGF0Zm9ybV9jcHVfa2lsbChjcHUpKQogCQlwcmludGsoIkNQVSV1OiB1bmFibGUgdG8ga2lsbFxuIiwgY3B1KTsKQEAgLTIxNCw3ICsyMTUsNyBAQAogICogb2YgdGhlIG90aGVyIGhvdHBsdWctY3B1IGNhcGFibGUgY29yZXMsIHNvIHByZXN1bWFibHkgY29taW5nCiAgKiBvdXQgb2YgaWRsZSBmaXhlcyB0aGlzLgogICovCi12b2lkIF9fY3B1ZXhpdCBjcHVfZGllKHZvaWQpCit2b2lkIF9fcmVmIGNwdV9kaWUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCkBAIC01ODYsMTIgKzU4Nyw2IEBACiAJdW5zaWduZWQgbG9uZyB0YV9lbmQ7CiB9OwogCi0vKiBhbGwgU01QIGNvbmZpZ3VyYXRpb25zIGhhdmUgdGhlIGV4dGVuZGVkIENQVUlEIHJlZ2lzdGVycyAqLwotc3RhdGljIGlubGluZSBpbnQgdGxiX29wc19uZWVkX2Jyb2FkY2FzdCh2b2lkKQotewotCXJldHVybiAoKHJlYWRfY3B1aWRfZXh0KENQVUlEX0VYVF9NTUZSMykgPj4gMTIpICYgMHhmKSA8IDI7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcGlfZmx1c2hfdGxiX2FsbCh2b2lkICppZ25vcmVkKQogewogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCmluZGV4IGQzODMxZjYuLjlhYjQxNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYwpAQCAtMzcsNiArMzcsMTAgQEAKIAl1MzIgc2N1X2N0cmw7CiAKIAlzY3VfY3RybCA9IF9fcmF3X3JlYWRsKHNjdV9iYXNlICsgU0NVX0NUUkwpOworCS8qIGFscmVhZHkgZW5hYmxlZD8gKi8KKwlpZiAoc2N1X2N0cmwgJiAxKQorCQlyZXR1cm47CisKIAlzY3VfY3RybCB8PSAxOwogCV9fcmF3X3dyaXRlbChzY3VfY3RybCwgc2N1X2Jhc2UgKyBTQ1VfQ1RSTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCmluZGV4IGQ4Yzg4YzYuLmE3M2EzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwpAQCAtMTY2LDEwICsxNjYsMTIgQEAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2xrKTsKIH0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogLyoKICAqIHRha2UgYSBsb2NhbCB0aW1lciBkb3duCiAgKi8KLXZvaWQgX19jcHVleGl0IHR3ZF90aW1lcl9zdG9wKHZvaWQpCit2b2lkIHR3ZF90aW1lcl9zdG9wKHZvaWQpCiB7CiAJX19yYXdfd3JpdGVsKDAsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0NPTlRST0wpOwogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGNtLmMgYi9hcmNoL2FybS9rZXJuZWwvdGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwMzAzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90Y20uYwpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIFRDTSBtZW1vcnkgaGFuZGxpbmcgZm9yIEFSTSBzeXN0ZW1zCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBSaWNrYXJkIEFuZGVyc3NvbiA8cmlja2FyZC5hbmRlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZ2VuYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4gLyogbWVtY3B5ICovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gLyogUEFHRV9TSElGVCAqLworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tZW1vcnkuaD4KKyNpbmNsdWRlICJ0Y20uaCIKKworLyogU2NyZWFtIGFuZCB3YXJuIGFib3V0IG1pc3VzZSAqLworI2lmICFkZWZpbmVkKElUQ01fT0ZGU0VUKSB8fCAhZGVmaW5lZChJVENNX0VORCkgfHwgXAorICAgICFkZWZpbmVkKERUQ01fT0ZGU0VUKSB8fCAhZGVmaW5lZChEVENNX0VORCkKKyNlcnJvciAiVENNIHN1cHBvcnQgc2VsZWN0ZWQgYnV0IG9mZnNldHMgbm90IGRlZmluZWQhIgorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgZ2VuX3Bvb2wgKnRjbV9wb29sOworCisvKiBUQ00gc2VjdGlvbiBkZWZpbml0aW9ucyBmcm9tIHRoZSBsaW5rZXIgKi8KK2V4dGVybiBjaGFyIF9faXRjbV9zdGFydCwgX19zaXRjbV90ZXh0LCBfX2VpdGNtX3RleHQ7CitleHRlcm4gY2hhciBfX2R0Y21fc3RhcnQsIF9fc2R0Y21fZGF0YSwgX19lZHRjbV9kYXRhOworCisvKgorICogVENNIG1lbW9yeSByZXNvdXJjZXMKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkdGNtX3JlcyA9IHsKKwkubmFtZSA9ICJEVENNIFJBTSIsCisJLnN0YXJ0ID0gRFRDTV9PRkZTRVQsCisJLmVuZCA9IERUQ01fRU5ELAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGl0Y21fcmVzID0geworCS5uYW1lID0gIklUQ00gUkFNIiwKKwkuc3RhcnQgPSBJVENNX09GRlNFVCwKKwkuZW5kID0gSVRDTV9FTkQsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZHRjbV9pb21hcFtdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IERUQ01fT0ZGU0VULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRFRDTV9PRkZTRVQpLAorCQkubGVuZ3RoCQk9IChEVENNX0VORCAtIERUQ01fT0ZGU0VUICsgMSksCisJCS50eXBlCQk9IE1UX1VOQ0FDSEVECisJfQorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpdGNtX2lvbWFwW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gSVRDTV9PRkZTRVQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihJVENNX09GRlNFVCksCisJCS5sZW5ndGgJCT0gKElUQ01fRU5EIC0gSVRDTV9PRkZTRVQgKyAxKSwKKwkJLnR5cGUJCT0gTVRfVU5DQUNIRUQKKwl9Cit9OworCisvKgorICogQWxsb2NhdGUgYSBjaHVuayBvZiBUQ00gbWVtb3J5CisgKi8KK3ZvaWQgKnRjbV9hbGxvYyhzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisKKwlpZiAoIXRjbV9wb29sKQorCQlyZXR1cm4gTlVMTDsKKworCXZhZGRyID0gZ2VuX3Bvb2xfYWxsb2ModGNtX3Bvb2wsIGxlbik7CisJaWYgKCF2YWRkcikKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gKHZvaWQgKikgdmFkZHI7Cit9CitFWFBPUlRfU1lNQk9MKHRjbV9hbGxvYyk7CisKKy8qCisgKiBGcmVlIGEgY2h1bmsgb2YgVENNIG1lbW9yeQorICovCit2b2lkIHRjbV9mcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pCit7CisJZ2VuX3Bvb2xfZnJlZSh0Y21fcG9vbCwgKHVuc2lnbmVkIGxvbmcpIGFkZHIsIGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKHRjbV9mcmVlKTsKKworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGNtX2JhbmsodTggdHlwZSwgdTMyIG9mZnNldCwgdTMyIGV4cGVjdGVkX3NpemUpCit7CisJY29uc3QgaW50IHRjbV9zaXplc1sxNl0gPSB7IDAsIC0xLCAtMSwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LAorCQkJCSAgICAyNTYsIDUxMiwgMTAyNCwgLTEsIC0xLCAtMSwgLTEgfTsKKwl1MzIgdGNtX3JlZ2lvbjsKKwlpbnQgdGNtX3NpemU7CisKKwkvKiBSZWFkIHRoZSBzcGVjaWFsIFRDTSByZWdpb24gcmVnaXN0ZXIgYzksIDAgKi8KKwlpZiAoIXR5cGUpCisJCWFzbSgibXJjCXAxNSwgMCwgJTAsIGM5LCBjMSwgMCIKKwkJICAgIDogIj1yIiAodGNtX3JlZ2lvbikpOworCWVsc2UKKwkJYXNtKCJtcmMJcDE1LCAwLCAlMCwgYzksIGMxLCAxIgorCQkgICAgOiAiPXIiICh0Y21fcmVnaW9uKSk7CisKKwl0Y21fc2l6ZSA9IHRjbV9zaXplc1sodGNtX3JlZ2lvbiA+PiAyKSAmIDB4MGZdOworCWlmICh0Y21fc2l6ZSA8IDApIHsKKwkJcHJfZXJyKCJDUFU6ICVzVENNIG9mIHVua25vd24gc2l6ZSFcbiIsCisJCQl0eXBlID8gIkkiIDogIkQiKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJDUFU6IGZvdW5kICVzVENNICVkayBAICUwOHgsICVzZW5hYmxlZFxuIiwKKwkJCXR5cGUgPyAiSSIgOiAiRCIsCisJCQl0Y21fc2l6ZSwKKwkJCSh0Y21fcmVnaW9uICYgMHhmZmZmZjAwMFUpLAorCQkJKHRjbV9yZWdpb24gJiAxKSA/ICIiIDogIm5vdCAiKTsKKwl9CisKKwlpZiAodGNtX3NpemUgIT0gZXhwZWN0ZWRfc2l6ZSkgeworCQlwcl9jcml0KCJDUFU6ICVzVENNIHdhcyBkZXRlY3RlZCAlZGsgYnV0IGV4cGVjdGVkICVkayFcbiIsCisJCSAgICAgICB0eXBlID8gIkkiIDogIkQiLAorCQkgICAgICAgdGNtX3NpemUsCisJCSAgICAgICBleHBlY3RlZF9zaXplKTsKKwkJLyogQWRqdXN0IHRvIHRoZSBleHBlY3RlZCBzaXplPyB3aGF0IGNhbiB3ZSBkby4uLiAqLworCX0KKworCS8qIEZvcmNlIG1vdmUgdGhlIFRDTSBiYW5rIHRvIHdoZXJlIHdlIHdhbnQgaXQsIGVuYWJsZSAqLworCXRjbV9yZWdpb24gPSBvZmZzZXQgfCAodGNtX3JlZ2lvbiAmIDB4MDAwMDBmZmVVKSB8IDE7CisKKwlpZiAoIXR5cGUpCisJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM5LCBjMSwgMCIKKwkJICAgIDogLyogTm8gb3V0cHV0IG9wZXJhbmRzICovCisJCSAgICA6ICJyIiAodGNtX3JlZ2lvbikpOworCWVsc2UKKwkJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzksIGMxLCAxIgorCQkgICAgOiAvKiBObyBvdXRwdXQgb3BlcmFuZHMgKi8KKwkJICAgIDogInIiICh0Y21fcmVnaW9uKSk7CisKKwlwcl9kZWJ1ZygiQ1BVOiBtb3ZlZCAlc1RDTSAlZGsgdG8gJTA4eCwgZW5hYmxlZFxuIiwKKwkJIHR5cGUgPyAiSSIgOiAiRCIsCisJCSB0Y21fc2l6ZSwKKwkJICh0Y21fcmVnaW9uICYgMHhmZmZmZjAwMFUpKTsKK30KKworLyoKKyAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIFRDTSBtZW1vcnkKKyAqLwordm9pZCBfX2luaXQgdGNtX2luaXQodm9pZCkKK3sKKwl1MzIgdGNtX3N0YXR1cyA9IHJlYWRfY3B1aWRfdGNtc3RhdHVzKCk7CisJY2hhciAqc3RhcnQ7CisJY2hhciAqZW5kOworCWNoYXIgKnJhbTsKKworCS8qIFNldHVwIERUQ00gaWYgcHJlc2VudCAqLworCWlmICh0Y21fc3RhdHVzICYgKDEgPDwgMTYpKSB7CisJCXNldHVwX3RjbV9iYW5rKDAsIERUQ01fT0ZGU0VULAorCQkJICAgICAgIChEVENNX0VORCAtIERUQ01fT0ZGU0VUICsgMSkgPj4gMTApOworCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmR0Y21fcmVzKTsKKwkJaW90YWJsZV9pbml0KGR0Y21faW9tYXAsIDEpOworCQkvKiBDb3B5IGRhdGEgZnJvbSBSQU0gdG8gRFRDTSAqLworCQlzdGFydCA9ICZfX3NkdGNtX2RhdGE7CisJCWVuZCAgID0gJl9fZWR0Y21fZGF0YTsKKwkJcmFtICAgPSAmX19kdGNtX3N0YXJ0OworCQltZW1jcHkoc3RhcnQsIHJhbSwgKGVuZC1zdGFydCkpOworCQlwcl9kZWJ1ZygiQ1BVIERUQ006IGNvcGllZCBkYXRhIGZyb20gJXAgLSAlcFxuIiwgc3RhcnQsIGVuZCk7CisJfQorCisJLyogU2V0dXAgSVRDTSBpZiBwcmVzZW50ICovCisJaWYgKHRjbV9zdGF0dXMgJiAxKSB7CisJCXNldHVwX3RjbV9iYW5rKDEsIElUQ01fT0ZGU0VULAorCQkJICAgICAgIChJVENNX0VORCAtIElUQ01fT0ZGU0VUICsgMSkgPj4gMTApOworCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJml0Y21fcmVzKTsKKwkJaW90YWJsZV9pbml0KGl0Y21faW9tYXAsIDEpOworCQkvKiBDb3B5IGNvZGUgZnJvbSBSQU0gdG8gSVRDTSAqLworCQlzdGFydCA9ICZfX3NpdGNtX3RleHQ7CisJCWVuZCAgID0gJl9fZWl0Y21fdGV4dDsKKwkJcmFtICAgPSAmX19pdGNtX3N0YXJ0OworCQltZW1jcHkoc3RhcnQsIHJhbSwgKGVuZC1zdGFydCkpOworCQlwcl9kZWJ1ZygiQ1BVIElUQ006IGNvcGllZCBjb2RlIGZyb20gJXAgLSAlcFxuIiwgc3RhcnQsIGVuZCk7CisJfQorfQorCisvKgorICogVGhpcyBjcmVhdGVzIHRoZSBUQ00gbWVtb3J5IHBvb2wgYW5kIGhhcyB0byBiZSBkb25lIGxhdGVyLAorICogZHVyaW5nIHRoZSBjb3JlX2luaXRpY2FsbHMsIHNpbmNlIHRoZSBhbGxvY2F0b3IgaXMgbm90IHlldAorICogdXAgYW5kIHJ1bm5pbmcgd2hlbiB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gcnVucy4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2V0dXBfdGNtX3Bvb2wodm9pZCkKK3sKKwl1MzIgdGNtX3N0YXR1cyA9IHJlYWRfY3B1aWRfdGNtc3RhdHVzKCk7CisJdTMyIGR0Y21fcG9vbF9zdGFydCA9ICh1MzIpICZfX2VkdGNtX2RhdGE7CisJdTMyIGl0Y21fcG9vbF9zdGFydCA9ICh1MzIpICZfX2VpdGNtX3RleHQ7CisJaW50IHJldDsKKworCS8qCisJICogU2V0IHVwIG1hbGxvYyBwb29sLCAyXjIgPSA0IGJ5dGVzIGdyYW51bGFyaXR5IHNpbmNlCisJICogdGhlIFRDTSBpcyBzb21ldGltZXMganVzdCA0IEtpQi4gTkI6IHBhZ2VzIGFuZCBjYWNoZQorCSAqIGxpbmUgYWxpZ25tZW50cyBkb2VzIG5vdCBtYXR0ZXIgaW4gVENNIQorCSAqLworCXRjbV9wb29sID0gZ2VuX3Bvb2xfY3JlYXRlKDIsIC0xKTsKKworCXByX2RlYnVnKCJTZXR0aW5nIHVwIFRDTSBtZW1vcnkgcG9vbFxuIik7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2YgRFRDTSB0byB0aGUgVENNIHBvb2wgKi8KKwlpZiAodGNtX3N0YXR1cyAmICgxIDw8IDE2KSkgeworCQlpZiAoZHRjbV9wb29sX3N0YXJ0IDwgRFRDTV9FTkQpIHsKKwkJCXJldCA9IGdlbl9wb29sX2FkZCh0Y21fcG9vbCwgZHRjbV9wb29sX3N0YXJ0LAorCQkJCQkgICBEVENNX0VORCAtIGR0Y21fcG9vbF9zdGFydCArIDEsIC0xKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9lcnIoIkNQVSBEVENNOiBjb3VsZCBub3QgYWRkIERUQ00gIiBcCisJCQkJICAgICAgICJyZW1haW5kZXIgdG8gcG9vbCFcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlwcl9kZWJ1ZygiQ1BVIERUQ006IEFkZGVkICUwOHggYnl0ZXMgQCAlMDh4IHRvICIgXAorCQkJCSAidGhlIFRDTSBtZW1vcnkgcG9vbFxuIiwKKwkJCQkgRFRDTV9FTkQgLSBkdGNtX3Bvb2xfc3RhcnQgKyAxLAorCQkJCSBkdGNtX3Bvb2xfc3RhcnQpOworCQl9CisJfQorCisJLyogQWRkIHRoZSByZXN0IG9mIElUQ00gdG8gdGhlIFRDTSBwb29sICovCisJaWYgKHRjbV9zdGF0dXMgJiAxKSB7CisJCWlmIChpdGNtX3Bvb2xfc3RhcnQgPCBJVENNX0VORCkgeworCQkJcmV0ID0gZ2VuX3Bvb2xfYWRkKHRjbV9wb29sLCBpdGNtX3Bvb2xfc3RhcnQsCisJCQkJCSAgIElUQ01fRU5EIC0gaXRjbV9wb29sX3N0YXJ0ICsgMSwgLTEpOworCQkJaWYgKHJldCkgeworCQkJCXByX2VycigiQ1BVIElUQ006IGNvdWxkIG5vdCBhZGQgSVRDTSAiIFwKKwkJCQkgICAgICAgInJlbWFpbmRlciB0byBwb29sIVxuIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCXByX2RlYnVnKCJDUFUgSVRDTTogQWRkZWQgJTA4eCBieXRlcyBAICUwOHggdG8gIiBcCisJCQkJICJ0aGUgVENNIG1lbW9yeSBwb29sXG4iLAorCQkJCSBJVENNX0VORCAtIGl0Y21fcG9vbF9zdGFydCArIDEsCisJCQkJIGl0Y21fcG9vbF9zdGFydCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2NvcmVfaW5pdGNhbGwoc2V0dXBfdGNtX3Bvb2wpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RjbS5oIGIvYXJjaC9hcm0va2VybmVsL3RjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTVhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvdGNtLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIFRDTSBtZW1vcnkgaGFuZGxpbmcgZm9yIEFSTSBzeXN0ZW1zCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBSaWNrYXJkIEFuZGVyc3NvbiA8cmlja2FyZC5hbmRlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKi8KKworI2lmZGVmIENPTkZJR19IQVZFX1RDTQordm9pZCBfX2luaXQgdGNtX2luaXQodm9pZCk7CisjZWxzZQorLyogTm8gVENNIHN1cHBvcnQsIGp1c3QgYmxhbmsgaW5saW5lcyB0byBiZSBvcHRpbWl6ZWQgb3V0ICovCitpbmxpbmUgdm9pZCB0Y21faW5pdCh2b2lkKQoreworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwppbmRleCA0Y2RjNGEwLi5kMzhjZGYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCA1N2ViMGY2Li4zZjM2MWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgUnVzc2VsbCBLaW5nCiAgKiAgRnJhZ21lbnRzIHRoYXQgYXBwZWFyIHRoZSBzYW1lIGFzIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyAoQykgTGludXMgVG9ydmFsZHMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDUsMjEgKzQ1LDIxIEBACiBfX3NldHVwKCJ1c2VyX2RlYnVnPSIsIHVzZXJfZGVidWdfc2V0dXApOwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sIHVuc2lnbmVkIGxvbmcgdG9wKTsKK3N0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIAogdm9pZCBkdW1wX2JhY2t0cmFjZV9lbnRyeSh1bnNpZ25lZCBsb25nIHdoZXJlLCB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgZnJhbWUpCiB7CiAjaWZkZWYgQ09ORklHX0tBTExTWU1TCi0JcHJpbnRrKCJbPCUwOGx4Pl0gIiwgd2hlcmUpOwotCXByaW50X3N5bWJvbCgiKCVzKSAiLCB3aGVyZSk7Ci0JcHJpbnRrKCJmcm9tIFs8JTA4bHg+XSAiLCBmcm9tKTsKLQlwcmludF9zeW1ib2woIiglcylcbiIsIGZyb20pOworCWNoYXIgc3ltMVtLU1lNX1NZTUJPTF9MRU5dLCBzeW0yW0tTWU1fU1lNQk9MX0xFTl07CisJc3ByaW50X3N5bWJvbChzeW0xLCB3aGVyZSk7CisJc3ByaW50X3N5bWJvbChzeW0yLCBmcm9tKTsKKwlwcmludGsoIls8JTA4bHg+XSAoJXMpIGZyb20gWzwlMDhseD5dICglcylcbiIsIHdoZXJlLCBzeW0xLCBmcm9tLCBzeW0yKTsKICNlbHNlCiAJcHJpbnRrKCJGdW5jdGlvbiBlbnRlcmVkIGF0IFs8JTA4bHg+XSBmcm9tIFs8JTA4bHg+XVxuIiwgd2hlcmUsIGZyb20pOwogI2VuZGlmCiAKIAlpZiAoaW5fZXhjZXB0aW9uX3RleHQod2hlcmUpKQotCQlkdW1wX21lbSgiRXhjZXB0aW9uIHN0YWNrIiwgZnJhbWUgKyA0LCBmcmFtZSArIDQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwkJZHVtcF9tZW0oIiIsICJFeGNlcHRpb24gc3RhY2siLCBmcmFtZSArIDQsIGZyYW1lICsgNCArIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogfQogCiAjaWZuZGVmIENPTkZJR19BUk1fVU5XSU5ECkBAIC04MSw5ICs4MSwxMCBAQAogLyoKICAqIER1bXAgb3V0IHRoZSBjb250ZW50cyBvZiBzb21lIG1lbW9yeSBuaWNlbHkuLi4KICAqLwotc3RhdGljIHZvaWQgZHVtcF9tZW0oY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIGJvdHRvbSwgdW5zaWduZWQgbG9uZyB0b3ApCitzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpsdmwsIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sCisJCSAgICAgdW5zaWduZWQgbG9uZyB0b3ApCiB7Ci0JdW5zaWduZWQgbG9uZyBwID0gYm90dG9tICYgfjMxOworCXVuc2lnbmVkIGxvbmcgZmlyc3Q7CiAJbW1fc2VnbWVudF90IGZzOwogCWludCBpOwogCkBAIC05NSwzMyArOTYsMzcgQEAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCi0JcHJpbnRrKCIlcygweCUwOGx4IHRvIDB4JTA4bHgpXG4iLCBzdHIsIGJvdHRvbSwgdG9wKTsKKwlwcmludGsoIiVzJXMoMHglMDhseCB0byAweCUwOGx4KVxuIiwgbHZsLCBzdHIsIGJvdHRvbSwgdG9wKTsKIAotCWZvciAocCA9IGJvdHRvbSAmIH4zMTsgcCA8IHRvcDspIHsKLQkJcHJpbnRrKCIlMDRseDogIiwgcCAmIDB4ZmZmZik7CisJZm9yIChmaXJzdCA9IGJvdHRvbSAmIH4zMTsgZmlyc3QgPCB0b3A7IGZpcnN0ICs9IDMyKSB7CisJCXVuc2lnbmVkIGxvbmcgcDsKKwkJY2hhciBzdHJbc2l6ZW9mKCIgMTIzNDU2NzgiKSAqIDggKyAxXTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrLCBwICs9IDQpIHsKLQkJCXVuc2lnbmVkIGludCB2YWw7CisJCW1lbXNldChzdHIsICcgJywgc2l6ZW9mKHN0cikpOworCQlzdHJbc2l6ZW9mKHN0cikgLSAxXSA9ICdcMCc7CiAKLQkJCWlmIChwIDwgYm90dG9tIHx8IHAgPj0gdG9wKQotCQkJCXByaW50aygiICAgICAgICAgIik7Ci0JCQllbHNlIHsKLQkJCQlfX2dldF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgKilwKTsKLQkJCQlwcmludGsoIiUwOHggIiwgdmFsKTsKKwkJZm9yIChwID0gZmlyc3QsIGkgPSAwOyBpIDwgOCAmJiBwIDwgdG9wOyBpKyssIHAgKz0gNCkgeworCQkJaWYgKHAgPj0gYm90dG9tICYmIHAgPCB0b3ApIHsKKwkJCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJCQlpZiAoX19nZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopcCkgPT0gMCkKKwkJCQkJc3ByaW50ZihzdHIgKyBpICogOSwgIiAlMDhseCIsIHZhbCk7CisJCQkJZWxzZQorCQkJCQlzcHJpbnRmKHN0ciArIGkgKiA5LCAiID8/Pz8/Pz8/Iik7CiAJCQl9CiAJCX0KLQkJcHJpbnRrICgiXG4iKTsKKwkJcHJpbnRrKCIlcyUwNGx4OiVzXG4iLCBsdmwsIGZpcnN0ICYgMHhmZmZmLCBzdHIpOwogCX0KIAogCXNldF9mcyhmcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfaW5zdHIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBkdW1wX2luc3RyKGNvbnN0IGNoYXIgKmx2bCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKIAljb25zdCBpbnQgdGh1bWIgPSB0aHVtYl9tb2RlKHJlZ3MpOwogCWNvbnN0IGludCB3aWR0aCA9IHRodW1iID8gNCA6IDg7CiAJbW1fc2VnbWVudF90IGZzOworCWNoYXIgc3RyW3NpemVvZigiMDAwMDAwMDAgIikgKiA1ICsgMiArIDFdLCAqcCA9IHN0cjsKIAlpbnQgaTsKIAogCS8qCkBAIC0xMzIsNyArMTM3LDYgQEAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCi0JcHJpbnRrKCJDb2RlOiAiKTsKIAlmb3IgKGkgPSAtNDsgaSA8IDE7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmFsLCBiYWQ7CiAKQEAgLTE0MiwxMyArMTQ2LDE0IEBACiAJCQliYWQgPSBfX2dldF91c2VyKHZhbCwgJigodTMyICopYWRkcilbaV0pOwogCiAJCWlmICghYmFkKQotCQkJcHJpbnRrKGkgPT0gMCA/ICIoJTAqeCkgIiA6ICIlMCp4ICIsIHdpZHRoLCB2YWwpOworCQkJcCArPSBzcHJpbnRmKHAsIGkgPT0gMCA/ICIoJTAqeCkgIiA6ICIlMCp4ICIsCisJCQkJCXdpZHRoLCB2YWwpOwogCQllbHNlIHsKLQkJCXByaW50aygiYmFkIFBDIHZhbHVlLiIpOworCQkJcCArPSBzcHJpbnRmKHAsICJiYWQgUEMgdmFsdWUiKTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXByaW50aygiXG4iKTsKKwlwcmludGsoIiVzQ29kZTogJXNcbiIsIGx2bCwgc3RyKTsKIAogCXNldF9mcyhmcyk7CiB9CkBAIC0yMjQsMTggKzIyOSwxOSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gdGhyZWFkLT50YXNrOwogCXN0YXRpYyBpbnQgZGllX2NvdW50ZXI7CiAKLQlwcmludGsoIkludGVybmFsIGVycm9yOiAlczogJXggWyMlZF0iIFNfUFJFRU1QVCBTX1NNUCAiXG4iLAorCXByaW50ayhLRVJOX0VNRVJHICJJbnRlcm5hbCBlcnJvcjogJXM6ICV4IFsjJWRdIiBTX1BSRUVNUFQgU19TTVAgIlxuIiwKIAkgICAgICAgc3RyLCBlcnIsICsrZGllX2NvdW50ZXIpOworCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKIAlwcmludF9tb2R1bGVzKCk7CiAJX19zaG93X3JlZ3MocmVncyk7Ci0JcHJpbnRrKCJQcm9jZXNzICVzIChwaWQ6ICVkLCBzdGFjayBsaW1pdCA9IDB4JXApXG4iLAotCQl0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHRocmVhZCArIDEpOworCXByaW50ayhLRVJOX0VNRVJHICJQcm9jZXNzICUuKnMgKHBpZDogJWQsIHN0YWNrIGxpbWl0ID0gMHglcClcbiIsCisJCVRBU0tfQ09NTV9MRU4sIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwgdGhyZWFkICsgMSk7CiAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSB8fCBpbl9pbnRlcnJ1cHQoKSkgewotCQlkdW1wX21lbSgiU3RhY2s6ICIsIHJlZ3MtPkFSTV9zcCwKKwkJZHVtcF9tZW0oS0VSTl9FTUVSRywgIlN0YWNrOiAiLCByZWdzLT5BUk1fc3AsCiAJCQkgVEhSRUFEX1NJWkUgKyAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodHNrKSk7CiAJCWR1bXBfYmFja3RyYWNlKHJlZ3MsIHRzayk7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9FTUVSRywgcmVncyk7CiAJfQogfQogCkBAIC0yNTAsMTMgKzI1NiwxNCBAQAogCiAJb29wc19lbnRlcigpOwogCi0JY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOworCWNvbnNvbGVfdmVyYm9zZSgpOwogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCV9fZGllKHN0ciwgZXJyLCB0aHJlYWQsIHJlZ3MpOwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOworCW9vcHNfZXhpdCgpOwogCiAJaWYgKGluX2ludGVycnVwdCgpKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIGluIGludGVycnVwdCIpOwpAQCAtMjY0LDcgKzI3MSw2IEBACiAJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKIAotCW9vcHNfZXhpdCgpOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKQEAgLTM0OSw3ICszNTUsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19VTkRFRklORUQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgKCVkKTogdW5kZWZpbmVkIGluc3RydWN0aW9uOiBwYz0lcFxuIiwKIAkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBwYyk7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9JTkZPLCByZWdzKTsKIAl9CiAjZW5kaWYKIApAQCAtNDAwLDcgKzQwNiw3IEBACiAJaWYgKHVzZXJfZGVidWcgJiBVREJHX1NZU0NBTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJbJWRdICVzOiBvYnNvbGV0ZSBzeXN0ZW0gY2FsbCAlMDh4LlxuIiwKIAkJCXRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tLCBuKTsKLQkJZHVtcF9pbnN0cihyZWdzKTsKKwkJZHVtcF9pbnN0cihLRVJOX0VSUiwgcmVncyk7CiAJfQogI2VuZGlmCiAKQEAgLTQxOCwxMiArNDI0LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIGRvX2NhY2hlX29wKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5hY3RpdmVfbW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKIAlpZiAoZW5kIDwgc3RhcnQgfHwgZmxhZ3MpCiAJCXJldHVybjsKIAotCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPmFjdGl2ZV9tbSwgc3RhcnQpOworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwogCWlmICh2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZCkgewogCQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KQogCQkJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwpAQCAtNDMyLDYgKzQ0MCw3IEBACiAKIAkJZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwogCX0KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogfQogCiAvKgpAQCAtNTE5LDcgKzUyOCw3IEBACiAJICogX19rdXNlcl9jbXB4Y2hnIGNvZGUgaW4gZW50cnktYXJtdi5TIHNob3VsZCBiZSBhd2FyZSBvZiBpdHMKIAkgKiBleGlzdGVuY2UuICBEb24ndCBldmVyIHVzZSB0aGlzIGZyb20gdXNlciBjb2RlLgogCSAqLwotCWNhc2UgMHhmZmYwOgorCWNhc2UgTlIoY21weGNoZyk6CiAJZm9yICg7OykgewogCQlleHRlcm4gdm9pZCBkb19EYXRhQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAogCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtNTY0LDcgKzU3Myw3IEBACiAJCSAgIGlmIG5vdCBpbXBsZW1lbnRlZCwgcmF0aGVyIHRoYW4gcmFpc2luZyBTSUdJTEwuICBUaGlzCiAJCSAgIHdheSB0aGUgY2FsbGluZyBwcm9ncmFtIGNhbiBncmFjZWZ1bGx5IGRldGVybWluZSB3aGV0aGVyCiAJCSAgIGEgZmVhdHVyZSBpcyBzdXBwb3J0ZWQuICAqLwotCQlpZiAobm8gPD0gMHg3ZmYpCisJCWlmICgobm8gJiAweGZmZmYpIDw9IDB4N2ZmKQogCQkJcmV0dXJuIC1FTk9TWVM7CiAJCWJyZWFrOwogCX0KQEAgLTU3Niw3ICs1ODUsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CiAJCXByaW50aygiWyVkXSAlczogYXJtIHN5c2NhbGwgJWRcbiIsCiAJCSAgICAgICB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbm8pOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKCIiLCByZWdzKTsKIAkJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQkJX19zaG93X3JlZ3MocmVncyk7CiAJCQljX2JhY2t0cmFjZShyZWdzLT5BUk1fZnAsIHByb2Nlc3Nvcl9tb2RlKHJlZ3MpKTsKQEAgLTY1Myw3ICs2NjIsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19CQURBQk9SVCkgewogCQlwcmludGsoS0VSTl9FUlIgIlslZF0gJXM6IGJhZCBkYXRhIGFib3J0OiBjb2RlICVkIGluc3RyIDB4JTA4bHhcbiIsCiAJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgY29kZSwgaW5zdHIpOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fRVJSLCByZWdzKTsKIAkJc2hvd19wdGUoY3VycmVudC0+bW0sIGFkZHIpOwogCX0KICNlbmRpZgpAQCAtNzQyLDYgKzc1MSw4IEBACiAJICovCiAJbWVtY3B5KCh2b2lkICopS0VSTl9TSUdSRVRVUk5fQ09ERSwgc2lncmV0dXJuX2NvZGVzLAogCSAgICAgICBzaXplb2Yoc2lncmV0dXJuX2NvZGVzKSk7CisJbWVtY3B5KCh2b2lkICopS0VSTl9SRVNUQVJUX0NPREUsIHN5c2NhbGxfcmVzdGFydF9jb2RlLAorCSAgICAgICBzaXplb2Yoc3lzY2FsbF9yZXN0YXJ0X2NvZGUpKTsKIAogCWZsdXNoX2ljYWNoZV9yYW5nZSh2ZWN0b3JzLCB2ZWN0b3JzICsgUEFHRV9TSVpFKTsKIAltb2RpZnlfZG9tYWluKERPTUFJTl9VU0VSLCBET01BSU5fQ0xJRU5UKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwppbmRleCAzOWJhZjExLi43ODZhYzJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCkBAIC0yNiw2ICsyNiwxNSBAQAogICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLnN1YnNldC5zd2Rldi5hYmkvaW5kZXguaHRtbAogICovCiAKKyNpZiAhZGVmaW5lZCAoX19BUk1fRUFCSV9fKQorI3dhcm5pbmcgWW91ciBjb21waWxlciBkb2VzIG5vdCBoYXZlIEVBQkkgc3VwcG9ydC4KKyN3YXJuaW5nICAgIEFSTSB1bndpbmQgaXMga25vd24gdG8gY29tcGlsZSBvbmx5IHdpdGggRUFCSSBjb21waWxlcnMuCisjd2FybmluZyAgICBDaGFuZ2UgY29tcGlsZXIgb3IgZGlzYWJsZSBBUk1fVU5XSU5EIG9wdGlvbi4KKyNlbGlmIChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDw9IDIpCisjd2FybmluZyBZb3VyIGNvbXBpbGVyIGlzIHRvbyBidWdneTsgaXQgaXMga25vd24gdG8gbm90IGNvbXBpbGUgQVJNIHVud2luZCBzdXBwb3J0LgorI3dhcm5pbmcgICAgQ2hhbmdlIGNvbXBpbGVyIG9yIGRpc2FibGUgQVJNX1VOV0lORCBvcHRpb24uCisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNWNjNDgxMi4uYWVjZjg3ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xOTksNiArMTk5LDYzIEBACiAJfQogCV9lZGF0YV9sb2MgPSBfX2RhdGFfbG9jICsgU0laRU9GKC5kYXRhKTsKIAorI2lmZGVmIENPTkZJR19IQVZFX1RDTQorICAgICAgICAvKgorCSAqIFdlIGFsaWduIGV2ZXJ5dGhpbmcgdG8gYSBwYWdlIGJvdW5kYXJ5IHNvIHdlIGNhbgorCSAqIGZyZWUgaXQgYWZ0ZXIgaW5pdCBoYXMgY29tbWVuY2VkIGFuZCBUQ00gY29udGVudHMgaGF2ZQorCSAqIGJlZW4gY29waWVkIHRvIGl0cyBkZXN0aW5hdGlvbi4KKwkgKi8KKwkudGNtX3N0YXJ0IDogeworCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwkJX190Y21fc3RhcnQgPSAuOworCQlfX2l0Y21fc3RhcnQgPSAuOworCX0KKworCS8qCisJICogTGluayB0aGVzZSB0byB0aGUgSVRDTSBSQU0KKwkgKiBQdXQgVk1BIHRvIHRoZSBUQ00gYWRkcmVzcyBhbmQgTE1BIHRvIHRoZSBjb21tb24gUkFNCisJICogYW5kIHdlJ2xsIHVwbG9hZCB0aGUgY29udGVudHMgZnJvbSBSQU0gdG8gVENNIGFuZCBmcmVlCisJICogdGhlIHVzZWQgUkFNIGFmdGVyIHRoYXQuCisJICovCisJLnRleHRfaXRjbSBJVENNX09GRlNFVCA6IEFUKF9faXRjbV9zdGFydCkKKwl7CisJCV9fc2l0Y21fdGV4dCA9IC47CisJCSooLnRjbS50ZXh0KQorCQkqKC50Y20ucm9kYXRhKQorCQkuID0gQUxJR04oNCk7CisJCV9fZWl0Y21fdGV4dCA9IC47CisJfQorCisJLyoKKwkgKiBSZXNldCB0aGUgZG90IHBvaW50ZXIsIHRoaXMgaXMgbmVlZGVkIHRvIGNyZWF0ZSB0aGUKKwkgKiByZWxhdGl2ZSBfX2R0Y21fc3RhcnQgYmVsb3cgKHRvIGJlIHVzZWQgYXMgZXh0ZXJuIGluIGNvZGUpLgorCSAqLworCS4gPSBBRERSKC50Y21fc3RhcnQpICsgU0laRU9GKC50Y21fc3RhcnQpICsgU0laRU9GKC50ZXh0X2l0Y20pOworCisJLmR0Y21fc3RhcnQgOiB7CisJCV9fZHRjbV9zdGFydCA9IC47CisJfQorCisJLyogVE9ETzogYWRkIHJlbWFpbmRlciBvZiBJVENNIGFzIHdlbGwsIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRhdGEhICovCisJLmRhdGFfZHRjbSBEVENNX09GRlNFVCA6IEFUKF9fZHRjbV9zdGFydCkKKwl7CisJCS4gPSBBTElHTig0KTsKKwkJX19zZHRjbV9kYXRhID0gLjsKKwkJKigudGNtLmRhdGEpCisJCS4gPSBBTElHTig0KTsKKwkJX19lZHRjbV9kYXRhID0gLjsKKwl9CisKKwkvKiBSZXNldCB0aGUgZG90IHBvaW50ZXIgb3IgdGhlIGxpbmtlciBnZXRzIGNvbmZ1c2VkICovCisJLiA9IEFERFIoLmR0Y21fc3RhcnQpICsgU0laRU9GKC5kYXRhX2R0Y20pOworCisJLyogRW5kIG1hcmtlciBmb3IgZnJlZWluZyBUQ00gY29weSBpbiBsaW5rZWQgb2JqZWN0ICovCisJLnRjbV9lbmQgOiBBVChBRERSKC5kdGNtX3N0YXJ0KSArIFNJWkVPRiguZGF0YV9kdGNtKSl7CisJCS4gPSBBTElHTihQQUdFX1NJWkUpOworCQlfX3RjbV9lbmQgPSAuOworCX0KKyNlbmRpZgorCiAJLmJzcyA6IHsKIAkJX19ic3Nfc3RhcnQgPSAuOwkvKiBCU1MJCQkJKi8KIAkJKiguYnNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TIGIvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TCmluZGV4IDZhZTA0ZGIuLjZlZTJmNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUworKysgYi9hcmNoL2FybS9saWIvY29weV9wYWdlLlMKQEAgLTEyLDggKzEyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCi0jZGVmaW5lIENPUFlfQ09VTlQgKFBBR0VfU1ovNjQgUExEKCAtMSApKQorI2RlZmluZSBDT1BZX0NPVU5UIChQQUdFX1NaIC8gKDIgKiBMMV9DQUNIRV9CWVRFUykgUExEKCAtMSApKQogCiAJCS50ZXh0CiAJCS5hbGlnbgk1CkBAIC0yNiwxNyArMjcsMTYgQEAKIEVOVFJZKGNvcHlfcGFnZSkKIAkJc3RtZmQJc3AhLCB7cjQsIGxyfQkJCUAJMgogCVBMRCgJcGxkCVtyMSwgIzBdCQkpCi0JUExEKAlwbGQJW3IxLCAjMzJdCQkpCisJUExEKAlwbGQJW3IxLCAjTDFfQ0FDSEVfQllURVNdCQkpCiAJCW1vdglyMiwgI0NPUFlfQ09VTlQJCQlACTEKIAkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQotMToJUExEKAlwbGQJW3IxLCAjNjRdCQkpCi0JUExEKAlwbGQJW3IxLCAjOTZdCQkpCi0yOgkJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKLQkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQotCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAotCQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNCsxCisxOglQTEQoCXBsZAlbcjEsICMyICogTDFfQ0FDSEVfQllURVNdKQorCVBMRCgJcGxkCVtyMSwgIzMgKiBMMV9DQUNIRV9CWVRFU10pCisyOgorCS5yZXB0CSgyICogTDFfQ0FDSEVfQllURVMgLyAxNiAtIDEpCiAJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CiAJCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJLmVuZHIKIAkJc3VicwlyMiwgcjIsICMxCQkJQAkxCiAJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CiAJCWxkbWd0aWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKaW5kZXggZTM1ZDU0ZC4uMmZkODg0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKQEAgLTI4OSwxMyArMjg5LDYgQEAKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBBZGVuZW8gTmVvY29yZSA5MjYgYm9hcmQuCiAKLWNvbmZpZyBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQwotCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IG1vZGlmaWVkIGZvciAyIE1NQyBTbG90cyIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVNBTTlHMjAKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGFuIEF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0Ci0JICBSZXYgQSBvciBCIG1vZGlmaWVkIGZvciAyIE1NQyBTbG90cy4KLQogZW5kaWYKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjIsNyArMzE1LDE2IEBACiAJYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQiCiAJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCiAJaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0LgorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0CisJICB0aGF0IGVtYmVkcyBvbmx5IG9uZSBTRC9NTUMgc2xvdC4KKworY29uZmlnIE1BQ0hfQVQ5MVNBTTlHMjBFS18yTU1DCisJYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQgd2l0aCAyIFNEL01NQyBTbG90cyIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVNBTTlHMjAKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGFuIEF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0CisJICB3aXRoIDIgU0QvTU1DIFNsb3RzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBBVDkxU0FNOUcyMC1FSyByZXYuIEMgYW5kCisJICBvbndhcmRzLgogCiBjb25maWcgTUFDSF9DUFU5RzIwCiAJYm9vbCAiRXVrcmVhIENQVTlHMjAgYm9hcmQiCkBAIC0zOTIsNyArMzk0LDcgQEAKIAogY29uZmlnIE1URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2CiAJYm9vbCAiRW5hYmxlIDE2LWJpdCBkYXRhIGJ1cyBpbnRlcmZhY2UgdG8gTkFORCBmbGFzaCIKLQlkZXBlbmRzIG9uIChNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSyB8fCBNQUNIX0FUOTFTQU05MjYzRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLIHx8IE1BQ0hfQVQ5MVNBTTlHNDVFS0VTIHx8IE1BQ0hfQVQ5MUNBUDlBREspCisJZGVwZW5kcyBvbiAoTUFDSF9BVDkxU0FNOTI2MEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05RzEwRUsgfHwgTUFDSF9BVDkxU0FNOTI2M0VLIHx8IE1BQ0hfQVQ5MVNBTTlHMjBFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQyB8fCBNQUNIX0FUOTFTQU05RzQ1RUtFUyB8fCBNQUNIX0FUOTFDQVA5QURLKQogCWhlbHAKIAkgIE9uIEFUOTFTQU05MjZ4IGJvYXJkcyBib3RoIHR5cGVzIG9mIE5BTkQgZmxhc2ggY2FuIGJlIHByZXNlbnQKIAkgICg4IGFuZCAxNiBiaXQgZGF0YSBidXMgd2lkdGgpLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKaW5kZXggNDEyYWE0OS4uZDFmNzc1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCkBAIC03NzEsOSArNzcxLDkgQEAKICAqICBBQzk3CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUOTFfQUM5NykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUOTFfQUM5N19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQogc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgYWM5N19kYXRhOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTc4OSw3ICs3ODksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MWNhcDlfYWM5N19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImFjOTdjIiwKKwkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAogCS5pZAkJPSAxLAogCS5kZXYJCT0gewogCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLApAQCAtODAwLDcgKzgwMCw3IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjOTdfcmVzb3VyY2VzKSwKIH07CiAKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgKmRhdGEpCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKQEAgLTgxOCw3ICs4MTgsNyBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MWNhcDlfYWM5N19kZXZpY2UpOwogfQogI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgKmRhdGEpIHt9Cit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCmluZGV4IGQ3NDZlODYuLjMzMmI3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwpAQCAtMjQsMTEgKzI0LDU5IEBACiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlnNDVfbWF0cml4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2F0X2hkbWFjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBIRE1BQyAtIEFIQiBETUEgQ29udHJvbGxlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUX0hETUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVF9IRE1BQ19NT0RVTEUpCitzdGF0aWMgdTY0IGhkbWFjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IGF0X2RtYV9wbGF0Zm9ybV9kYXRhIGF0ZG1hX3BkYXRhID0geworCS5ucl9jaGFubmVscwk9IDgsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhkbWFjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRE1BLAorCQkuZW5kCT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRE1BICsgU1pfNTEyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX0RNQSwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0lEX0RNQSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0X2hkbWFjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRfaGRtYWMiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmhkbWFjX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYXRkbWFfcGRhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBoZG1hY19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhkbWFjX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkKK3sKKwlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBhdGRtYV9wZGF0YS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBhdGRtYV9wZGF0YS5jYXBfbWFzayk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdF9oZG1hY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBVU0IgSG9zdCAoT0hDSSkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTU1MCw2ICs1OTgsNjEgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEFDOTcKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3Q19NT0RVTEUpCitzdGF0aWMgdTY0IGFjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgYWM5N19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGFjOTdfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX0FDOTdDLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9BQzk3QyArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9BQzk3QywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0lEX0FDOTdDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfYWM5N19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX2FjOTdjIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmFjOTdfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhYzk3X2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBhYzk3X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWM5N19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDgsIDApOwkvKiBBQzk3RlMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDksIDApOwkvKiBBQzk3Q0sgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDcsIDApOwkvKiBBQzk3VFggKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDYsIDApOwkvKiBBQzk3UlggKi8KKworCS8qIHJlc2V0ICovCisJaWYgKGRhdGEtPnJlc2V0X3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cmVzZXRfcGluLCAwKTsKKworCWFjOTdfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfYWM5N19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBMQ0QgQ29udHJvbGxlcgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNzM1LDcgKzgzOCw3IEBACiAgKiAgV2F0Y2hkb2cKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0dfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF0OTFfd2R0IiwKIAkuaWQJCT0gLTEsCkBAIC0xMjIwLDYgKzEzMjMsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCiB7CisJYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3J0YygpOwogCWF0OTFfYWRkX2RldmljZV9ydHQoKTsKIAlhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2coKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwppbmRleCA3MjgxODY1Li5kMzQ1ZjU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCkBAIC0yMSwxMSArMjEsNTcgQEAKICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05cmwuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05cmxfbWF0cml4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2F0X2hkbWFjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBIRE1BQyAtIEFIQiBETUEgQ29udHJvbGxlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUX0hETUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVF9IRE1BQ19NT0RVTEUpCitzdGF0aWMgdTY0IGhkbWFjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IGF0X2RtYV9wbGF0Zm9ybV9kYXRhIGF0ZG1hX3BkYXRhID0geworCS5ucl9jaGFubmVscwk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhkbWFjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRE1BLAorCQkuZW5kCT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRE1BICsgU1pfNTEyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfRE1BLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdF9oZG1hY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0X2hkbWFjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZoZG1hY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmF0ZG1hX3BkYXRhLAorCX0sCisJLnJlc291cmNlCT0gaGRtYWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZG1hY19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpCit7CisJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgYXRkbWFfcGRhdGEuY2FwX21hc2spOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFVTQiBIUyBEZXZpY2UgKEdhZGdldCkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTM5OCw2ICs0NDQsNjEgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEFDOTcKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3Q19NT0RVTEUpCitzdGF0aWMgdTY0IGFjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgYWM5N19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGFjOTdfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9JRF9BQzk3QywKKwkJLmVuZAk9IEFUOTFTQU05UkxfSURfQUM5N0MsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX2FjOTdfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9hYzk3YyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZhYzk3X2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYWM5N19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYWM5N19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjOTdfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxLCAwKTsJLyogQUM5N0ZTICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQyLCAwKTsJLyogQUM5N0NLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQzLCAwKTsJLyogQUM5N1RYICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ0LCAwKTsJLyogQUM5N1JYICovCisKKwkvKiByZXNldCAqLworCWlmIChkYXRhLT5yZXNldF9waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnJlc2V0X3BpbiwgMCk7CisKKwlhYzk3X2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05cmxfYWM5N19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBMQ0QgQ29udHJvbGxlcgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTEwMyw2ICsxMjA0LDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogeworCWF0OTFfYWRkX2RldmljZV9oZG1hYygpOwogCWF0OTFfYWRkX2RldmljZV9ydGMoKTsKIAlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYwppbmRleCA4M2ExYTBmLi5kNjk0MDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXA5YWRrLmMKQEAgLTM2NCw3ICszNjQsNyBAQAogLyoKICAqIEFDOTcKICAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgY2FwOWFka19hYzk3X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgY2FwOWFka19hYzk3X2RhdGEgPSB7CiAvLwkucmVzZXRfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCmluZGV4IDhjMGI3MWMuLjdjMWUzODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAvKgogICogQUM5NwogICovCi1zdGF0aWMgc3RydWN0IGF0bWVsX2FjOTdfZGF0YSBuZW9jb3JlOTI2X2FjOTdfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBuZW9jb3JlOTI2X2FjOTdfZGF0YSA9IHsKIAkucmVzZXRfcGluCT0gQVQ5MV9QSU5fUEExMywKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jCmluZGV4IGEyOGU1M2YuLmE0MTAyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwpAQCAtOTAsNyArOTAsNyBAQAogICogU1BJIGRldmljZXMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZWtfc3BpX2RldmljZXNbXSA9IHsKLSNpZiAhZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKQorI2lmICEoZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfQVQ5MSkpCiAJewkvKiBEYXRhRmxhc2ggY2hpcCAqLwogCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCiAJCS5jaGlwX3NlbGVjdAk9IDEsCkBAIC0xMTMsNyArMTEzLDcgQEAKICAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBfX2luaXRkYXRhIGVrX21hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzEyLAorCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BCMCwKIAkuaXNfcm1paQk9IDEsCiB9OwogCkBAIC0xOTQsMjQgKzE5NCwyNyBAQAogCiAvKgogICogTUNJIChTRC9NTUMpCi0gKiBkZXRfcGluIGFuZCB3cF9waW4gYXJlIG5vdCBjb25uZWN0ZWQKKyAqIHdwX3BpbiBpcyBub3QgY29ubmVjdGVkCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0kpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CiAJLnNsb3RbMF0gPSB7CiAJCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FTk9ERVYsCisJCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEMyLAogCQkud3BfcGluCQk9IC1FTk9ERVYsCiAJfSwKIAkuc2xvdFsxXSA9IHsKIAkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gLUVOT0RFViwKKwkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzksCiAJCS53cF9waW4JCT0gLUVOT0RFViwKIAl9LAogCiB9OwogI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYW1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgX19pbml0ZGF0YSBla19tbWNfZGF0YSA9IHsKKwkuc2xvdF9iCQk9IDEsCS8qIE9ubHkgb25lIHNsb3Qgc28gdXNlIHNsb3QgQiAqLworCS53aXJlNAkJPSAxLAorCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEM5LAogfTsKICNlbmRpZgogCkBAIC0yMjEsMTMgKzIyNCwxMyBAQAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7CiAJewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCiAJCS5uYW1lCQkJPSAiZHM1IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjgsCiAJCS5hY3RpdmVfbG93CQk9IDEsCiAJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCiAJfSwKIAl7CS8qICJwb3dlciIgbGVkLCB5ZWxsb3cgKi8KIAkJLm5hbWUJCQk9ICJkczEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxMywKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BCOSwKIAkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAogCX0KIH07CkBAIC0yNTQsNyArMjU3LDExIEBACiAJLyogRXRoZXJuZXQgKi8KIAlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwogCS8qIE1NQyAqLworI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJX01PRFVMRSkKIAlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZla19tbWNfZGF0YSk7CisjZWxzZQorCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmVrX21tY19kYXRhKTsKKyNlbmRpZgogCS8qIEkyQyAqLwogCWF0OTFfYWRkX2RldmljZV9pMmMoZWtfaTJjX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfaTJjX2RldmljZXMpKTsKIAkvKiBMRURzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMKaW5kZXggYjg1NThlYS4uNjRjMzg0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYwpAQCAtMzExLDYgKzMxMSwxNCBAQAogCiAKIC8qCisgKiBBQzk3CisgKiByZXNldF9waW4gaXMgbm90IGNvbm5lY3RlZDogTlJTVAorICovCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgZWtfYWM5N19kYXRhID0geworfTsKKworCisvKgogICogTEVEcyAuLi4gdGhlc2UgY291bGQgYWxsIGJlIFBXTS1kcml2ZW4sIGZvciB2YXJpYWJsZSBicmlnaHRuZXNzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewpAQCAtMzcyLDYgKzM4MCw4IEBACiAJYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7CiAJLyogUHVzaCBCdXR0b25zICovCiAJZWtfYWRkX2RldmljZV9idXR0b25zKCk7CisJLyogQUM5NyAqLworCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwogCS8qIExFRHMgKi8KIAlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKIAlhdDkxX3B3bV9sZWRzKGVrX3B3bV9sZWQsIEFSUkFZX1NJWkUoZWtfcHdtX2xlZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYwppbmRleCA5NGZmYjVjLi5iZDI4ZTk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYwpAQCAtMjExLDYgKzIxMSwxNCBAQAogCiAKIC8qCisgKiBBQzk3CisgKiByZXNldF9waW4gaXMgbm90IGNvbm5lY3RlZDogTlJTVAorICovCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgZWtfYWM5N19kYXRhID0geworfTsKKworCisvKgogICogTEVEcwogICovCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKQEAgLTI5OSw2ICszMDcsOCBAQAogCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmVrX21tY19kYXRhKTsKIAkvKiBMQ0QgQ29udHJvbGxlciAqLwogCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOworCS8qIEFDOTcgKi8KKwlhdDkxX2FkZF9kZXZpY2VfYWM5NygmZWtfYWM5N19kYXRhKTsKIAkvKiBUb3VjaCBTY3JlZW4gQ29udHJvbGxlciAqLwogCWF0OTFfYWRkX2RldmljZV90c2FkY2MoKTsKIAkvKiBMRURzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCAzNGE5NTAyLi5jMjJkZjMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTI1LDYgKzI1LDggQEAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUcyMAkweDAxOTkwNWEwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlSTDY0CTB4MDE5YjAzYTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NQkweDgxOWIwNWEwCisjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDVNUkwJMHg4MTliMDVhMgkvKiBha2EgOUc0NS1FUzIgJiBub24gRVMgbG90cyAqLworI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1RVMJMHg4MTliMDVhMQkvKiA5RzQ1LUVTIChFbmdpbmVlcmluZyBTYW1wbGUpICovCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MUNBUDkJMHgwMzlBMDNBMAogCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYRTEyOAkweDMyOTk3M2EwCkBAIC00MSw2ICs0MywxMSBAQAogCXJldHVybiAoYXQ5MV9zeXNfcmVhZChBVDkxX0RCR1VfQ0lEUikgJiB+QVQ5MV9DSURSX1ZFUlNJT04pOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ5MV9jcHVfZnVsbHlfaWRlbnRpZnkodm9pZCkKK3sKKwlyZXR1cm4gYXQ5MV9zeXNfcmVhZChBVDkxX0RCR1VfQ0lEUik7Cit9CisKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTExCTB4MDAwMDAwMDEKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTEwCTB4MDAwMDAwMDIKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzQ1CTB4MDAwMDAwMDQKQEAgLTExOCw4ICsxMjUsMTAgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05RzQ1CiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NSgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVNBTTlHNDUpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKGF0OTFfY3B1X2Z1bGx5X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOUc0NUVTKQogI2Vsc2UKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKDApCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFDQVA5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYwppbmRleCA0OTJjNjQ5Li5lNTkwYmJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bWFjaC9jc3AvbW1fYWRkci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CkBAIC00NSw3ICs0NCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSA8Y2ZnX2dsb2JhbC5oPgogCkBAIC0yNzMsMTIgKzI3MSwxMiBAQAogCS5oYW5kbGVyID0gYmNtcmluZ190aW1lcl9pbnRlcnJ1cHQsCiB9OwogCi1zdGF0aWMgY3ljbGVfdCBiY21yaW5nX2dldF9jeWNsZXNfdGltZXIxKHZvaWQpCitzdGF0aWMgY3ljbGVfdCBiY21yaW5nX2dldF9jeWNsZXNfdGltZXIxKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIH5yZWFkbChUSU1FUjFfVkFfQkFTRSArIFRJTUVSX1ZBTFVFKTsKIH0KIAotc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMyh2b2lkKQorc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXJldHVybiB+cmVhZGwoVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBjZGJmOTNjLi4zOGIzNzA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNoYXIgKmNtZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCXByaW50aygiYXJjaF9yZXNldDolYyAleFxuIiwgbW9kZSwgYmNtcmluZ19hcmNoX3dhcm1fcmVib290KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCmluZGV4IGExZDVlN2QuLjUyZGQ4MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCmluZGV4IGQ3MjkxYzYuLjkxNjdjM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMTcsMTMgKzE3LDMxIEBACiAJYm9vbCAiMHgwMDAwMDAwMCAtIFNEQ0UzL1N5bmNCb290IgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBFUDkzeHggYm9hcmRzIHdpdGggdGhlCi0JICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4MDAwMDAwMDAKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHgwMDAwMDAwMC4KIAogY29uZmlnIEVQOTNYWF9TRENFMF9QSFlTX09GRlNFVAogCWJvb2wgIjB4YzAwMDAwMDAgLSBTRENFTyIKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQotCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGMwMDAwMDAwCisJICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4YzAwMDAwMDAuCisKK2NvbmZpZyBFUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQKKwlib29sICIweGQwMDAwMDAwIC0gU0RDRTEiCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVQOTN4eCBib2FyZHMgd2l0aCB0aGUKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHhkMDAwMDAwMC4KKworY29uZmlnIEVQOTNYWF9TRENFMl9QSFlTX09GRlNFVAorCWJvb2wgIjB4ZTAwMDAwMDAgLSBTRENFMiIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGUwMDAwMDAwLgorCitjb25maWcgRVA5M1hYX1NEQ0UzX0FTWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiMHhmMDAwMDAwMCAtIFNEQ0UzL0FzeW5jQm9vdCIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGYwMDAwMDAwLgogCiBlbmRjaG9pY2UKIApAQCAtMTEyLDI4ICsxMzAsMzYgQEAKIAlib29sCiAKIGNvbmZpZyBNQUNIX01JQ1JPOUgKLQlib29sICJTdXBwb3J0IENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUgiCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LUhpZ2giCiAJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktSCBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktSGlnaCBib2FyZC4KIAogY29uZmlnIE1BQ0hfTUlDUk85TQotCWJvb2wgIlN1cHBvcnQgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIKLQlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19TWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LU1pZCIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktTWlkIGJvYXJkLgogCiBjb25maWcgTUFDSF9NSUNSTzlMCi0JYm9vbCAiU3VwcG9ydCBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1MIgorCWJvb2wgIlN1cHBvcnQgQ29udGVjIE1pY3JvOS1MaXRlIgogCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQKIAlzZWxlY3QgTUFDSF9NSUNSTzkKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwgYm9hcmQuCisJICBDb250ZWMgTWljcm85LUxpdGUgYm9hcmQuCisKK2NvbmZpZyBNQUNIX01JQ1JPOVMKKwlib29sICJTdXBwb3J0IENvbnRlYyBNaWNybzktU2xpbSIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAorCXNlbGVjdCBNQUNIX01JQ1JPOQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgQ29udGVjIE1pY3JvOS1TbGltIGJvYXJkLgogCiBjb25maWcgTUFDSF9UUzcyWFgKIAlib29sICJTdXBwb3J0IFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzJ4eCBTQkMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdAppbmRleCAyN2EwODVhLi4wYWQzM2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlLmJvb3QKQEAgLTMsMyArMywxMiBAQAogCiAgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDA4MDAwCiBwYXJhbXNfcGh5cy0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDAwMTAwCisKKyAgIHpyZWxhZGRyLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDAxMDAKKworICAgenJlbGFkZHItJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwMDEwMAorCisgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQpCTo9IDB4ZjAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkJOj0gMHhmMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggZGRhMTljZDcuLjFkMGY5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMTYsMTMgKzE2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogCiBzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgY2xrCSpwYXJlbnQ7CiAJdW5zaWduZWQgbG9uZwlyYXRlOwogCWludAkJdXNlcnM7CiAJaW50CQlzd19sb2NrZWQ7CkBAIC0zOSw0MCArNDIsNjAgQEAKIHN0YXRpYyBpbnQgc2V0X2tleXRjaGNsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBpbnQgc2V0X2Rpdl9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfeHRhbGkgPSB7CisJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5zd19sb2NrZWQJPSAxLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkcsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTFFTiwKIAkuZ2V0X3JhdGUJPSBnZXRfdWFydF9yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MiA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVkNGRywKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VMkVOLAogCS5nZXRfcmF0ZQk9IGdldF91YXJ0X3JhdGUsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQzID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKIAkuc3dfbG9ja2VkCT0gMSwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHLAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UzRU4sCiAJLmdldF9yYXRlCT0gZ2V0X3VhcnRfcmF0ZSwKIH07Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mOwotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2g7Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcDsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyOworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdXNiX2hvc3QgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BsbDIsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VU0hfRU4sCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2tleXBhZCA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJViwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRU4sCiAJLnNldF9yYXRlCT0gc2V0X2tleXRjaGNsa19yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wd20gPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5yYXRlCQk9IEVQOTNYWF9FWFRfQ0xLX1JBVEUsCiB9OwogCkBAIC04NSw1MCArMTA4LDYyIEBACiAKIC8qIERNQSBDbG9ja3MgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDAsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQMSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMiA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAyLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAzID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDMsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDQgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA1LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA2ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDYsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDcgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNywKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOCA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA4LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA5ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDksCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTAgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJNMCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJtMSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMk0xLAogfTsKQEAgLTEzNyw2ICsxNzIsNyBAQAogCXsgLmRldl9pZCA9IGRldiwgLmNvbl9pZCA9IGNvbiwgLmNsayA9IGNrIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGNsb2Nrc1tdID0geworCUlOSVRfQ0soTlVMTCwJCQkieHRhbGkiLAkmY2xrX3h0YWxpKSwKIAlJTklUX0NLKCJhcGI6dWFydDEiLAkJTlVMTCwJCSZjbGtfdWFydDEpLAogCUlOSVRfQ0soImFwYjp1YXJ0MiIsCQlOVUxMLAkJJmNsa191YXJ0MiksCiAJSU5JVF9DSygiYXBiOnVhcnQzIiwJCU5VTEwsCQkmY2xrX3VhcnQzKSwKQEAgLTE2Myw0OCArMTk5LDg0IEBACiAJSU5JVF9DSyhOVUxMLAkJCSJtMm0xIiwJCSZjbGtfbTJtMSksCiB9OwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RhdGljIHZvaWQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsay0+dXNlcnMrKykgeworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlfX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgfD0gY2xrLT5lbmFibGVfbWFzazsKKwkJCWlmIChjbGstPnN3X2xvY2tlZCkKKwkJCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCQllbHNlCisJCQkJX19yYXdfd3JpdGVsKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9Cit9CiAKIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIWNsay0+dXNlcnMrKyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSB8PSBjbGstPmVuYWJsZV9tYXNrOwotCQlpZiAoY2xrLT5zd19sb2NrZWQpCi0JCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCQllbHNlCi0JCQlfX3Jhd193cml0ZWwodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JfQorCWlmICghY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2VuYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CiAKK3N0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghLS1jbGstPnVzZXJzKSB7CisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgJj0gfmNsay0+ZW5hYmxlX21hc2s7CisJCQlpZiAoY2xrLT5zd19sb2NrZWQpCisJCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2LCBjbGstPmVuYWJsZV9yZWcpOworCQkJZWxzZQorCQkJCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJX19jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorfQorCiB2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIS0tY2xrLT51c2VycyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSAmPSB+Y2xrLT5lbmFibGVfbWFzazsKLQkJaWYgKGNsay0+c3dfbG9ja2VkKQotCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKLQkJZWxzZQotCQkJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCX0KKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisJX19jbGtfZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAl1MzIgdmFsdWU7CiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fUFdSQ05UKTsKIAlpZiAodmFsdWUgJiBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VQVJUQkFVRCkKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCXJldHVybiByYXRlOwogCWVsc2UKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEUgLyAyOworCQlyZXR1cm4gcmF0ZSAvIDI7CiB9CiAKIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTI0NCwxNiArMzE2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfY2xrX2Rpdih1bnNpZ25lZCBsb25nIHJhdGUsIGludCAqcHNlbCwgaW50ICplc2VsLAotCQkJCSAgaW50ICpwZGl2LCBpbnQgKmRpdikKK3N0YXRpYyBpbnQgY2FsY19jbGtfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJaW50ICpwc2VsLCBpbnQgKmVzZWwsIGludCAqcGRpdiwgaW50ICpkaXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYmVzdF9yYXRlID0gMCwKLQkJYWN0dWFsX3JhdGUgPSAwLCBtY2xrX3JhdGUgPSAwLCByYXRlX2VyciA9IC0xOworCXN0cnVjdCBjbGsgKm1jbGs7CisJdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYWN0dWFsX3JhdGUsIG1jbGtfcmF0ZSwgcmF0ZV9lcnIgPSAtMTsKIAlpbnQgaSwgZm91bmQgPSAwLCBfX2RpdiA9IDAsIF9fcGRpdiA9IDA7CiAKIAkvKiBEb24ndCBleGNlZWQgdGhlIG1heGltdW0gcmF0ZSAqLwogCW1heF9yYXRlID0gbWF4KG1heChjbGtfcGxsMS5yYXRlIC8gNCwgY2xrX3BsbDIucmF0ZSAvIDQpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpOworCQkgICAgICAgY2xrX3h0YWxpLnJhdGUgLyA0KTsKIAlyYXRlID0gbWluKHJhdGUsIG1heF9yYXRlKTsKIAogCS8qCkBAIC0yNjcsMTEgKzMzOSwxMiBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJaWYgKGkgPT0gMCkKLQkJCW1jbGtfcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEUgKiAyOworCQkJbWNsayA9ICZjbGtfeHRhbGk7CiAJCWVsc2UgaWYgKGkgPT0gMSkKLQkJCW1jbGtfcmF0ZSA9IGNsa19wbGwxLnJhdGUgKiAyOwotCQllbHNlIGlmIChpID09IDIpCi0JCQltY2xrX3JhdGUgPSBjbGtfcGxsMi5yYXRlICogMjsKKwkJCW1jbGsgPSAmY2xrX3BsbDE7CisJCWVsc2UKKwkJCW1jbGsgPSAmY2xrX3BsbDI7CisJCW1jbGtfcmF0ZSA9IG1jbGstPnJhdGUgKiAyOwogCiAJCS8qIFRyeSBlYWNoIHByZWRpdmlkZXIgdmFsdWUgKi8KIAkJZm9yIChfX3BkaXYgPSA0OyBfX3BkaXYgPD0gNjsgX19wZGl2KyspIHsKQEAgLTI4Niw3ICszNTksOCBAQAogCQkJCSpkaXYgPSBfX2RpdjsKIAkJCQkqcHNlbCA9IChpID09IDIpOwogCQkJCSplc2VsID0gKGkgIT0gMCk7Ci0JCQkJYmVzdF9yYXRlID0gYWN0dWFsX3JhdGU7CisJCQkJY2xrLT5wYXJlbnQgPSBtY2xrOworCQkJCWNsay0+cmF0ZSA9IGFjdHVhbF9yYXRlOwogCQkJCXJhdGVfZXJyID0gYWJzKGFjdHVhbF9yYXRlIC0gcmF0ZSk7CiAJCQkJZm91bmQgPSAxOwogCQkJfQpAQCAtMjk0LDIxICszNjgsMTkgQEAKIAl9CiAKIAlpZiAoIWZvdW5kKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gYmVzdF9yYXRlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNldF9kaXZfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQl1bnNpZ25lZCBsb25nIGFjdHVhbF9yYXRlOwotCWludCBwc2VsID0gMCwgZXNlbCA9IDAsIHBkaXYgPSAwLCBkaXYgPSAwOworCWludCBlcnIsIHBzZWwgPSAwLCBlc2VsID0gMCwgcGRpdiA9IDAsIGRpdiA9IDA7CiAJdTMyIHZhbDsKIAotCWFjdHVhbF9yYXRlID0gY2FsY19jbGtfZGl2KHJhdGUsICZwc2VsLCAmZXNlbCwgJnBkaXYsICZkaXYpOwotCWlmIChhY3R1YWxfcmF0ZSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQljbGstPnJhdGUgPSBhY3R1YWxfcmF0ZTsKKwllcnIgPSBjYWxjX2Nsa19kaXYoY2xrLCByYXRlLCAmcHNlbCwgJmVzZWwsICZwZGl2LCAmZGl2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQ2xlYXIgdGhlIGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzICovCiAJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKQEAgLTM0NCw3ICs0MTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyByYXRlOwogCWludCBpOwogCi0JcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJcmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiAxMSkgJiAweDFmKSArIDE7CQkvKiBYMUZCRCAqLwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiA1KSAmIDB4M2YpICsgMTsJCS8qIFgyRkJEICovCiAJZG9fZGl2KHJhdGUsIChjb25maWdfd29yZCAmIDB4MWYpICsgMSk7CQkJLyogWDJJUEQgKi8KQEAgLTM3Nyw3ICs0NDksNyBAQAogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEpOwogCWlmICghKHZhbHVlICYgMHgwMDgwMDAwMCkpIHsJCQkvKiBQTEwxIGJ5cGFzc2VkPyAgKi8KLQkJY2xrX3BsbDEucmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCWNsa19wbGwxLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKIAl9IGVsc2UgewogCQljbGtfcGxsMS5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfQpAQCAtMzg4LDcgKzQ2MCw3IEBACiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMik7CiAJaWYgKCEodmFsdWUgJiAweDAwMDgwMDAwKSkgewkJCS8qIFBMTDIgYnlwYXNzZWQ/ICAqLwotCQljbGtfcGxsMi5yYXRlID0gRVA5M1hYX0VYVF9DTEtfUkFURTsKKwkJY2xrX3BsbDIucmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCX0gZWxzZSBpZiAodmFsdWUgJiAweDAwMDQwMDAwKSB7CQkvKiBQTEwyIGVuYWJsZWQ/ICAqLwogCQljbGtfcGxsMi5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCBmN2ViZWQ5Li5iNDM1N2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC0yMDYsNyArMjA2LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgewogCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9CKDApKSArIGk7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBncGlvX2lycTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7CiAJCX0KIAl9CkBAIC01NTAsMTMgKzU0OSwxMSBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2V0aF9kZXZpY2UpOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgZXA5M3h4X2kyY19kYXRhID0gewotCS5zZGFfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMCwKLQkuc2NsX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLLAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDAsCi0JLnVkZWxheQkJCT0gMiwKLX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVwOTN4eF9pMmNfZGF0YTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCkBAIC01NjQsOCArNTYxLDI1IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmVwOTN4eF9pMmNfZGF0YSwKIH07CiAKLXZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKQordm9pZCBfX2luaXQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pCiB7CisJLyoKKwkgKiBTZXQgdGhlIEVFUFJPTSBpbnRlcmZhY2UgcGluIGRyaXZlIHR5cGUgY29udHJvbC4KKwkgKiBEZWZpbmVzIHRoZSBkcml2ZXIgdHlwZSBmb3IgdGhlIEVFQ0xLIGFuZCBFRURBVCBwaW5zIGFzIGVpdGhlcgorCSAqIG9wZW4gZHJhaW4sIHdoaWNoIHdpbGwgcmVxdWlyZSBhbiBleHRlcm5hbCBwdWxsLXVwLCBvciBhIG5vcm1hbAorCSAqIENNT1MgZHJpdmVyLgorCSAqLworCWlmIChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zZGFfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQpCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2RhICE9IEVFREFULCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCWlmIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zY2xfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVDTEspCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2NsICE9IEVFQ0xLLCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCisJX19yYXdfd3JpdGVsKChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiA8PCAxKSB8CisJCSAgICAgKGRhdGEtPnNjbF9pc19vcGVuX2RyYWluIDw8IDApLAorCQkgICAgIEVQOTNYWF9HUElPX0VFRFJJVkUpOworCisJZXA5M3h4X2kyY19kYXRhID0gKmRhdGE7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnVtKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9pMmNfZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCA3MzE0NWFlLi5hNGE3YmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC03NiwxMyArNzgsMjYgQEAKIAkucGh5X2lkCQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2RhdGFbXSA9IHsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVkYjkzeHhfaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKKwkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAorCS51ZGVsYXkJCQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIGtIeiAqLworCS50aW1lb3V0CQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIG1zICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZiksCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBlZGI5M3h4X2kyY19kYXRhW10gPSB7CitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eF9pMmNfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oImRzMTMzNyIsIDB4NjgpLAogCX0sCkBAIC05MiwxMiArMTA3LDE0IEBACiB7CiAJaWYgKG1hY2hpbmVfaXNfZWRiOTMwMmEoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkgfHwKIAkgICAgbWFjaGluZV9pc19lZGI5MzE1YSgpKSB7Ci0JCWVwOTN4eF9yZWdpc3Rlcl9pMmMoZWRiOTN4eGFfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4YV9pMmNfZGF0YSkpOworCQllcDkzeHhfcmVnaXN0ZXJfaTJjKCZlZGI5M3h4X2kyY19ncGlvX2RhdGEsCisJCQkJICAgIGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvLAorCQkJCSAgICBBUlJBWV9TSVpFKGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvKSk7CiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2VkYjkzMDcoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTIoKSB8fAogCQkgICBtYWNoaW5lX2lzX2VkYjkzMTUoKSkgewotCQllcDkzeHhfcmVnaXN0ZXJfaTJjKGVkYjkzeHhfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4X2kyY19kYXRhKSk7CisJCWVwOTN4eF9yZWdpc3Rlcl9pMmMoJmVkYjkzeHhfaTJjX2dwaW9fZGF0YSwKKwkJCQkgICAgZWRiOTN4eF9pMmNfYm9hcmRfaW5mbywKKwkJCQkgICAgQVJSQVlfU0laRShlZGI5M3h4X2kyY19ib2FyZF9pbmZvKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IDBmYmY4N2IuLmIxZjkzN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC01MiwyNSArNTIsMjcgQEAKICNkZWZpbmUgRVA5M1hYX0FIQl9WSVJUX0JBU0UJCTB4ZmVmMDAwMDAKICNkZWZpbmUgRVA5M1hYX0FIQl9TSVpFCQkJMHgwMDEwMDAwMAogCisjZGVmaW5lIEVQOTNYWF9BSEJfUEhZUyh4KQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgKHgpKQogI2RlZmluZSBFUDkzWFhfQUhCX0lPTUVNKHgpCQlJT01FTShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArICh4KSkKIAogI2RlZmluZSBFUDkzWFhfQVBCX1BIWVNfQkFTRQkJMHg4MDgwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1ZJUlRfQkFTRQkJMHhmZWQwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1NJWkUJCQkweDAwMjAwMDAwCiAKKyNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTKHgpCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9BUEJfSU9NRU0oeCkJCUlPTUVNKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgKHgpKQogCiAKIC8qIEFIQiBwZXJpcGhlcmFscyAqLwogI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfUEhZU19CQVNFCUVQOTNYWF9BSEJfUEhZUygweDAwMDEwMDAwKQogI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9VU0JfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDIwMDAwKQorI2RlZmluZSBFUDkzWFhfVVNCX1BIWVNfQkFTRQkJRVA5M1hYX0FIQl9QSFlTKDB4MDAwMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9VU0JfQkFTRQkJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAyMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUkFTVEVSX1BIWVNfQkFTRQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1JBU1RFUl9QSFlTX0JBU0UJCUVQOTNYWF9BSEJfUEhZUygweDAwMDMwMDAwKQogI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCkBAIC0xMTIsMjEgKzExNCwxMCBAQAogCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDA0MDAwMCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fUkVHKHgpCQkoRVA5M1hYX0dQSU9fQkFTRSArICh4KSkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTEJCUVQOTNYWF9HUElPX1JFRygweDRjKQotI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9UWVBFMgkJRVA5M1hYX0dQSU9fUkVHKDB4NTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0FDSwkJRVA5M1hYX0dQSU9fUkVHKDB4NTQpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0VOQUJMRQlFUDkzWFhfR1BJT19SRUcoMHg1OCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfU1RBVFVTCUVQOTNYWF9HUElPX1JFRygweDVjKQotI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMQkJRVA5M1hYX0dQSU9fUkVHKDB4OTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX1RZUEUyCQlFUDkzWFhfR1BJT19SRUcoMHg5NCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfQUNLCQlFUDkzWFhfR1BJT19SRUcoMHg5OCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweDljKQogI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHhhYykKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweGIwKQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9BQ0sJCUVQOTNYWF9HUElPX1JFRygweGI0KQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9FTkFCTEUJRVA5M1hYX0dQSU9fUkVHKDB4YjgpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1NUQVRVUwlFUDkzWFhfR1BJT19SRUcoMHhiYykKKyNkZWZpbmUgRVA5M1hYX0dQSU9fRUVEUklWRQkJRVA5M1hYX0dQSU9fUkVHKDB4YzgpCiAKICNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDgwMDAwKQogCkBAIC0xMzQsMTMgKzEyNSwxMyBAQAogCiAjZGVmaW5lIEVQOTNYWF9JUkRBX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBiMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGMwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBjMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQxX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBjMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGQwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBkMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQyX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBkMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGUwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBlMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQzX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBlMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfS0VZX01BVFJJWF9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZjAwMDApCkBAIC0xNDgsMTAgKzEzOSwxMCBAQAogI2RlZmluZSBFUDkzWFhfQURDX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAjZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1BXTV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAxMTAwMDApCisjZGVmaW5lIEVQOTNYWF9QV01fUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDExMDAwMCkKICNkZWZpbmUgRVA5M1hYX1BXTV9CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9SVENfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMTIwMDAwKQorI2RlZmluZSBFUDkzWFhfUlRDX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAxMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9SVENfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEyMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEzMDAwMCkKQEAgLTIxOCw2ICsyMDksMTcgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfQURJVgkoMTw8MTYpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tFTgkoMTw8MTUpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tESVYJKDE8PDApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHCQlFUDkzWFhfU1lTQ09OX1JFRygweDljKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19SRVZfTUFTSwkoMHhmMDAwMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfUkVWX1NISUZUCSgyOCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfU0JPT1QJKDE8PDgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU043CSgxPDw3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NONgkoMTw8NikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTEFTRE8JKDE8PDUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xFRURBCSgxPDw0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MRUVDTEsJKDE8PDMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU04yCSgxPDwxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NOMQkoMTw8MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TV0xPQ0sJCUVQOTNYWF9TWVNDT05fUkVHKDB4YzApCiAKICNkZWZpbmUgRVA5M1hYX1dBVENIRE9HX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDE0MDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDBhMTQ5OGEuLmM5OTFiMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTE0LDE3ICsxMTQsOSBAQAogICogICAgICAgICAgQjAuLkI3ICAoNy4uMTUpIHRvIGlycSA3Mi4uNzksIGFuZAogICogICAgICAgICAgRjAuLkY3ICgxNi4uMjQpIHRvIGlycSA4MC4uODcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKGdwaW8gPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKQotCQlyZXR1cm4gNjQgKyBncGlvOworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlcCisJKCgoZ3BpbykgPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKSA/ICg2NCArIChncGlvKSkgOiAtRUlOVkFMKQogCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxIC0gZ3Bpb190b19pcnEoMCk7Ci19CisjZGVmaW5lIGlycV90b19ncGlvKGlycSkJKChpcnEpIC0gZ3Bpb190b19pcnEoMCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDkyNWIxMmUuLjU1NDA2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTksNiArOSwxMiBAQAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFMF9QSFlTX09GRlNFVCkKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4YzAwMDAwMDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19FUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQpCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweGQwMDAwMDAwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhlMDAwMDAwMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ZjAwMDAwMDApCiAjZWxzZQogI2Vycm9yICJLY29uZmlnIGJ1ZzogTm8gRVA5M3h4IFBIWVNfT0ZGU0VUIHNldCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCAwMWEwZjA4Li40NjlmZDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtNCw2ICs0LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbzsKQEAgLTE2LDcgKzE3LDYgQEAKIAogdm9pZCBlcDkzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7Ci12b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CiAKIC8qIEVQOTN4eCBTeXN0ZW0gQ29udHJvbGxlciBzb2Z0d2FyZSBsb2NrZWQgcmVnaXN0ZXIgd3JpdGUgKi8KIHZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZyk7CkBAIC0zMyw3ICszMyw4IEBACiB9CiAKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX2V0aChzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhICpkYXRhLCBpbnQgY29weV9hZGRyKTsKLXZvaWQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pOwordm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhICpkYXRhLAorCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7CiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9mYihzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICpkYXRhKTsKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX3B3bShpbnQgcHdtMCwgaW50IHB3bTEpOwogaW50IGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwppbmRleCAwYTMxM2U4Li5mMzc1N2ExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpAQCAtMiw3ICsyLDkgQEAKICAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKLSAqICAgICAgICAgICAgICAgICAgIE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+CisgKiAgICAgICAgICAgICAgICAgICAgTWFuZnJlZCBHcnViZXIgPG0uZ3J1YmVyQHRpcm9sLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKKyAqICAgICAgICAgICAgICAgICAgICBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTEzLDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC0yMCwxMDQgKzIzLDEyNCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogCi1zdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBtaWNybzlfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pZAkJPSAweDFmLAotfTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaWNybzkgTk9SIEZsYXNoCisgKgorICogTWljcm85LUhpZ2ggaGFzIHVwIHRvIDY0TUIgb2YgMzItYml0IGZsYXNoIG9uIENTMQorICogTWljcm85LU1pZCBoYXMgdXAgdG8gNjRNQiBvZiBlaXRoZXIgMzItYml0IG9yIDE2LWJpdCBmbGFzaCBvbiBDUzEKKyAqIE1pY3JvOS1MaXRlIHVzZXMgYSBzZXBlcmF0ZSBNVEQgbWFwIGRyaXZlciBmb3IgZmxhc2ggc3VwcG9ydAorICogTWljcm85LVNsaW0gaGFzIHVwIHRvIDY0TUIgb2YgZWl0aGVyIDMyLWJpdCBvciAxNi1iaXQgZmxhc2ggb24gQ1MxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1pY3JvOV9mbGFzaF9kYXRhOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85X2luaXQodm9pZCkKLXsKLQllcDkzeHhfcmVnaXN0ZXJfZXRoKCZtaWNybzlfZXRoX2RhdGEsIDEpOwotfQotCi0vKgotICogTWljcm85LUgKLSAqLwotI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOUgKLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1pY3JvOWhfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWljcm85aF9mbGFzaF9yZXNvdXJjZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWljcm85X2ZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydAkJPSBFUDkzWFhfQ1MxX1BIWVNfQkFTRSwKIAkuZW5kCQk9IEVQOTNYWF9DUzFfUEhZU19CQVNFICsgU1pfNjRNIC0gMSwKIAkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaWNybzloX2ZsYXNoID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWljcm85X2ZsYXNoID0gewogCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbWljcm85aF9mbGFzaF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZtaWNybzlfZmxhc2hfZGF0YSwKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmbWljcm85aF9mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmbWljcm85X2ZsYXNoX3Jlc291cmNlLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWhfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IF9fbWljcm85X3JlZ2lzdGVyX2ZsYXNoKHVuc2lnbmVkIGludCB3aWR0aCkKIHsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOWhfZmxhc2gpOworCW1pY3JvOV9mbGFzaF9kYXRhLndpZHRoID0gd2lkdGg7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOV9mbGFzaCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzloX2luaXRfbWFjaGluZSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgbWljcm85X2RldGVjdF9ib290d2lkdGgodm9pZCkKK3sKKwl1MzIgdjsKKworCS8qIERldGVjdCB0aGUgYnVzIHdpZHRoIG9mIHRoZSBleHRlcm5hbCBmbGFzaCBtZW1vcnkgKi8KKwl2ID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9TWVNDRkcpOworCWlmICh2ICYgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTENTTjcpCisJCXJldHVybiA0OyAvKiAzMi1iaXQgKi8KKwllbHNlCisJCXJldHVybiAyOyAvKiAxNi1iaXQgKi8KK30KKworc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9yZWdpc3Rlcl9mbGFzaCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX21pY3JvOSgpKQorCQlfX21pY3JvOV9yZWdpc3Rlcl9mbGFzaCg0KTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX21pY3JvOW0oKSB8fCBtYWNoaW5lX2lzX21pY3JvOXMoKSkKKwkJX19taWNybzlfcmVnaXN0ZXJfZmxhc2gobWljcm85X2RldGVjdF9ib290d2lkdGgoKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pY3JvOSBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBtaWNybzlfZXRoX2RhdGEgPSB7CisJLnBoeV9pZAkJPSAweDFmLAorfTsKKworCitzdGF0aWMgdm9pZCBfX2luaXQgbWljcm85X2luaXRfbWFjaGluZSh2b2lkKQogewogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKLQltaWNybzlfaW5pdCgpOwotCW1pY3JvOWhfaW5pdCgpOworCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJm1pY3JvOV9ldGhfZGF0YSwgMSk7CisJbWljcm85X3JlZ2lzdGVyX2ZsYXNoKCk7CiB9CiAKLU1BQ0hJTkVfU1RBUlQoTUlDUk85LCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktSCIpCi0JLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KKworI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOUgKK01BQ0hJTkVfU1RBUlQoTUlDUk85LCAiQ29udGVjIE1pY3JvOS1IaWdoIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBtaWNybzloX2luaXRfbWFjaGluZSwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKIAotLyoKLSAqIE1pY3JvOS1NCi0gKi8KICNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlNCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85bV9pbml0X21hY2hpbmUodm9pZCkKLXsKLQllcDkzeHhfaW5pdF9kZXZpY2VzKCk7Ci0JbWljcm85X2luaXQoKTsKLX0KLQotTUFDSElORV9TVEFSVChNSUNSTzlNLCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIpCi0JLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KK01BQ0hJTkVfU1RBUlQoTUlDUk85TSwgIkNvbnRlYyBNaWNybzktTWlkIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX0FTWU5DICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbWljcm85bV9pbml0X21hY2hpbmUsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOV9pbml0X21hY2hpbmUsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKLS8qCi0gKiBNaWNybzktTAotICovCiAjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85TAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWxfaW5pdF9tYWNoaW5lKHZvaWQpCi17Ci0JZXA5M3h4X2luaXRfZGV2aWNlcygpOwotCW1pY3JvOV9pbml0KCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoTUlDUk85TCwgIkNvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwiKQotCS8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCitNQUNISU5FX1NUQVJUKE1JQ1JPOUwsICJDb250ZWMgTWljcm85LUxpdGUiKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAogCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IG1pY3JvOWxfaW5pdF9tYWNoaW5lLAorCS5pbml0X21hY2hpbmUJPSBtaWNybzlfaW5pdF9tYWNoaW5lLAogTUFDSElORV9FTkQKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85UworTUFDSElORV9TVEFSVChNSUNSTzlTLCAiQ29udGVjIE1pY3JvOS1TbGltIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KKwkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX0FTWU5DICsgMHgxMDAsCisJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDJiMmU3YTEuLjQ4OTE4MjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjgsNSArMjgsNiBAQAogI2RlZmluZSBCVVNfT0ZGU0VUCVVMKDB4ODAwMDAwMDApCiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUICsgQlVTX09GRlNFVCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoKHgpIC0gQlVTX09GRlNFVCArIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3Bmbl90b19idXMoeCkJCSgoKHgpIDw8IFBBR0VfU0hJRlQpICsgQlVTX09GRlNFVCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwppbmRleCAyYTMxOGViLi4zZjM1MjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEva21pLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKQEAgLTQwMCw3ICs0MDAsNyBAQAogCXJldHVybiBzdGF0dXMgJiA4OwogfQogCi1zdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tY19kYXRhID0geworc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW1jX2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IC0xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCmluZGV4IGYxZDcyYjIuLjE0OGQyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KQEAgLTQ4Niw3ICs0ODcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBwY2lfYnVzICpwY2lfdjNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCitzdHJ1Y3QgcGNpX2J1cyAqIF9faW5pdCBwY2lfdjNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJcmV0dXJuIHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmcGNpX3YzX29wcywgc3lzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pb3AzMnguaCBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pb3AzMnguaAppbmRleCBhYmQ5ZWI0Li45NDFmMzYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW9wMzJ4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2lvcDMyeC5oCkBAIC0zMSw3ICszMSw1IEBACiAjZGVmaW5lIElPUDMyWF9NQVhfUkFNX1NJWkUgICAgICAgICAgICAweDQwMDAwMDAwVUwKICNkZWZpbmUgSU9QM1hYX01BWF9SQU1fU0laRSAgICAgICAgICAgIElPUDMyWF9NQVhfUkFNX1NJWkUKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgSU9QMzJYX1BDSV9NRU1fV0lORE9XX1NJWkUgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkUgICAgIElPUDMyWF9QQ0lfTUVNX1dJTkRPV19TSVpFCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvcDMzeC5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvcDMzeC5oCmluZGV4IDI0NTY3MzEuLmE4OWMwYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9pb3AzM3guaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW9wMzN4LmgKQEAgLTM2LDggKzM2LDYgQEAKICNkZWZpbmUgSU9QMzNYX01BWF9SQU1fU0laRQkJMHg4MDAwMDAwMFVMCiAjZGVmaW5lIElPUDNYWF9NQVhfUkFNX1NJWkUJCUlPUDMzWF9NQVhfUkFNX1NJWkUKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEJKFBIWVNfT0ZGU0VUICsgSU9QMzNYX01BWF9SQU1fU0laRSkKLSNkZWZpbmUgSU9QMzNYX1BDSV9NRU1fV0lORE9XX1NJWkUJMHgwODAwMDAwMAotI2RlZmluZSBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRQlJT1AzM1hfUENJX01FTV9XSU5ET1dfU0laRQogCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCmluZGV4IDFkYTVkMWMuLjJlNjkxNjhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2FkZHItbWFwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlzZXR1cF9jcHVfd2luKDAsIEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFX0lPX1NJWkUsCiAJCSAgICAgIFRBUkdFVF9QQ0lFLCBBVFRSX1BDSUVfSU8sIEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0UpOwogCXNldHVwX2NwdV93aW4oMSwgS0lSS1dPT0RfUENJRV9NRU1fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFX01FTV9TSVpFLAotCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX01FTSwgLTEpOworCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX01FTSwgS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0UpOwogCiAJLyoKIAkgKiBTZXR1cCB3aW5kb3cgZm9yIE5BTkQgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDBhY2I2MWYuLjI0MmRkMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJcmV0dXJuIDE2NjY2NjY2NzsKIH0KIAotc3RhdGljIHZvaWQga2lya3dvb2RfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGtpcmt3b29kX3RpbWVyX2luaXQodm9pZCkKIHsKIAlraXJrd29vZF90Y2xrID0ga2lya3dvb2RfZmluZF90Y2xrKCk7CiAJb3Jpb25fdGltZV9pbml0KElSUV9LSVJLV09PRF9CUklER0UsIGtpcmt3b29kX3RjbGspOwpAQCAtOTE1LDYgKzkxNSwxNCBAQAogCWtpcmt3b29kX3VhcnQwX2RhdGFbMF0udWFydGNsayA9IGtpcmt3b29kX3RjbGs7CiAJa2lya3dvb2RfdWFydDFfZGF0YVswXS51YXJ0Y2xrID0ga2lya3dvb2RfdGNsazsKIAorCS8qCisJICogRGlzYWJsZSBwcm9wYWdhdGlvbiBvZiBtYnVzIGVycm9ycyB0byB0aGUgQ1BVIGxvY2FsIGJ1cywKKwkgKiBhcyB0aGlzIGNhdXNlcyBtYnVzIGVycm9ycyAod2hpY2ggY2FuIG9jY3VyIGZvciBleGFtcGxlCisJICogZm9yIFBDSSBhYm9ydHMpIHRvIHRocm93IENQVSBhYm9ydHMsIHdoaWNoIHdlJ3JlIG5vdCBzZXQKKwkgKiB1cCB0byBkZWFsIHdpdGguCisJICovCisJd3JpdGVsKHJlYWRsKENQVV9DT05GSUcpICYgfkNQVV9DT05GSUdfRVJST1JfUFJPUCwgQ1BVX0NPTkZJRyk7CisKIAlraXJrd29vZF9zZXR1cF9jcHVfbWJ1cygpOwogCiAjaWZkZWYgQ09ORklHX0NBQ0hFX0ZFUk9DRU9OX0wyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAppbmRleCA5ZTgwZDkyLi40MThmNTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKQEAgLTEzLDYgKzEzLDkgQEAKIAogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KIAorI2RlZmluZSBDUFVfQ09ORklHCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDEwMCkKKyNkZWZpbmUgQ1BVX0NPTkZJR19FUlJPUl9QUk9QCTB4MDAwMDAwMDQKKwogI2RlZmluZSBDUFVfQ09OVFJPTAkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAxMDQpCiAjZGVmaW5lIENQVV9SRVNFVAkJMHgwMDAwMDAwMgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBhNjQzYTg0Li40NGU4YmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKl9faW8odW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAodm9pZCBfX2lvbWVtICopKChhZGRyIC0gS0lSS1dPT0RfUENJRV9JT19QSFlTX0JBU0UpCisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoKGFkZHIgLSBLSVJLV09PRF9QQ0lFX0lPX0JVU19CQVNFKQogCQkJCQkrIEtJUktXT09EX1BDSUVfSU9fVklSVF9CQVNFKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKaW5kZXggNTRjMTMyNy4uYTE1Y2YwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIEtJUktXT09EX1JFR1NfU0laRQkJU1pfMU0KIAogI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0UJMHhlMDAwMDAwMAorI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9CVVNfQkFTRQkweGUwMDAwMDAwCiAjZGVmaW5lIEtJUktXT09EX1BDSUVfTUVNX1NJWkUJCVNaXzEyOE0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYwppbmRleCA5NDdkZmI4Li43NzYxN2M3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCkBAIC03MCw4ICs3MCwyMCBAQAogCWtpcmt3b29kX2dlMDBfaW5pdCgmb3BlbnJkX2Jhc2VfZ2UwMF9kYXRhKTsKIAlraXJrd29vZF9zYXRhX2luaXQoJm9wZW5yZF9iYXNlX3NhdGFfZGF0YSk7CiAJa2lya3dvb2Rfc2Rpb19pbml0KCZvcGVucmRfYmFzZV9tdnNkaW9fZGF0YSk7CisKKwlraXJrd29vZF9pMmNfaW5pdCgpOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBvcGVucmRfYmFzZV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX29wZW5yZF9iYXNlKCkpCisJCWtpcmt3b29kX3BjaWVfaW5pdCgpOworCisJcmV0dXJuIDA7CisgfQorc3Vic3lzX2luaXRjYWxsKG9wZW5yZF9iYXNlX3BjaV9pbml0KTsKKworCiBNQUNISU5FX1NUQVJUKE9QRU5SRF9CQVNFLCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIpCiAJLyogTWFpbnRhaW5lcjogRGhhdmFsIFZhc2EgPGRoYXZhbC52YXNhQGVpbmZvY2hpcHMuY29tPiAqLwogCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCmluZGV4IGQ5MGI5YWEuLmE2MDRiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCkBAIC05Myw3ICs5Myw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQga2lya3dvb2RfcGNpZV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3N0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX3BjaWVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJZXh0ZXJuIHVuc2lnbmVkIGludCBraXJrd29vZF9jbGtfY3RybDsKQEAgLTExNSw3ICsxMTUsNyBAQAogCSAqLwogCXJlc1swXS5uYW1lID0gIlBDSWUgSS9PIFNwYWNlIjsKIAlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCXJlc1swXS5zdGFydCA9IEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFOworCXJlc1swXS5zdGFydCA9IEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0U7CiAJcmVzWzBdLmVuZCA9IHJlc1swXS5zdGFydCArIEtJUktXT09EX1BDSUVfSU9fU0laRSAtIDE7CiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSkpCiAJCXBhbmljKCJSZXF1ZXN0IFBDSWUgSU8gcmVzb3VyY2UgZmFpbGVkXG4iKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogCSAqLwogCXJlc1sxXS5uYW1lID0gIlBDSWUgTWVtb3J5IFNwYWNlIjsKIAlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQlyZXNbMV0uc3RhcnQgPSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0U7CisJcmVzWzFdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0U7CiAJcmVzWzFdLmVuZCA9IHJlc1sxXS5zdGFydCArIEtJUktXT09EX1BDSUVfTUVNX1NJWkUgLSAxOwogCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSkpCiAJCXBhbmljKCJSZXF1ZXN0IFBDSWUgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvcmVncy1zd2l0Y2guaCBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCmluZGV4IDU2ZDEyZTguLjk3ZThhY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIEtTODY5NV9TRUMxCQkoMHgwNCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAxICovCiAjZGVmaW5lIEtTODY5NV9TRUMyCQkoMHgwOCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAyICovCiAKLSNkZWZpbmUgS1M4Njk1X1AoeClfQyh6KQkoMHhjMCArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEtTODY5NV9TRVBYQ1ooeCx6KQkoMHgwYyArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgS1M4Njk1X1NFUDEyQU4JCSgweDQ4KQkJLyogUG9ydCAxICYgMiBBdXRvLU5lZ290aWF0aW9uICovCiAjZGVmaW5lIEtTODY5NV9TRVAzNEFOCQkoMHg0YykJCS8qIFBvcnQgMyAmIDQgQXV0by1OZWdvdGlhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmgKaW5kZXggYmYxMTg5Zi4uN2U4YTgwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTkxMC5oCkBAIC0xNjAsNyArMTYwLDcgQEAKICNkZWZpbmUgTU1DMV9XUF9NTUMxX1dQCQlNRlBfQ0ZHX0RSVihNTUMxX1dQLCBBRjAsIE1FRElVTSkKIAogLyogUFdNICovCi0jZGVmaW5lIEdQSU8yNyBQV00zIEFGMgkJTUZQX0NGRyhHUElPMjcsIEFGMikKKyNkZWZpbmUgR1BJTzI3X1BXTTNfQUYyCQlNRlBfQ0ZHKEdQSU8yNywgQUYyKQogI2RlZmluZSBHUElPNTFfUFdNMl9PVVQJCU1GUF9DRkcoR1BJTzUxLCBBRjIpCiAjZGVmaW5lIEdQSU8xMTdfUFdNMV9PVVQJTUZQX0NGRyhHUElPMTE3LCBBRjIpCiAjZGVmaW5lIEdQSU8xMThfUFdNMl9PVVQJTUZQX0NGRyhHUElPMTE4LCBBRjIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKaW5kZXggMWIyMmU0YS4uMDg0NjVlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwpAQCAtODQ1LDYgKzg0NSw4IEBACiAJfSBlbHNlIGlmIChkZXYgPT0gTVY3ODEwMF9ERVZfSUQpIHsKIAkJaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMCkKIAkJCXJldHVybiAiTVY3ODEwMC1BMCI7CisJCWVsc2UgaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMSkKKwkJCXJldHVybiAiTVY3ODEwMC1BMSI7CiAJCWVsc2UKIAkJCXJldHVybiAiTVY3ODEwMC1SZXYtVW5zdXBwb3J0ZWQiOwogCX0gZWxzZSBpZiAoZGV2ID09IE1WNzgyMDBfREVWX0lEKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCmluZGV4IGQ3MTViOTIuLjc4OGJkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogI2RlZmluZSBNVjc4MTAwX0RFVl9JRAkJMHg3ODEwCiAjZGVmaW5lIE1WNzgxMDBfUkVWX0EwCQkxCisjZGVmaW5lIE1WNzgxMDBfUkVWX0ExCQkyCiAKICNkZWZpbmUgTVY3ODIwMF9ERVZfSUQJCTB4NzgyMAogI2RlZmluZSBNVjc4MjAwX1JFVl9BMAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKaW5kZXggNDA4OTk1MS4uZmY1ZTMzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCkBAIC02MzgsOSArNjM4LDkgQEAKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMCIsIE5VTEwsIHNkaGMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMSIsIE5VTEwsIHNkaGMyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMiIsIE5VTEwsIHNkaGMzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkxIiwgY3NwaTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTIiLCBjc3BpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMiIsIE5VTEwsIGNzcGkzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYl9jbGspCkBAIC02NjUsNyArNjY1LDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNhaGFyYTIiLCBzYWhhcmEyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2tfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3Bpb19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwppbmRleCBlZTY1ZGRhLi45MDZkNTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwpAQCAtMjMsNiArMjMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM1LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCkBAIC03OCw4ICs4Myw2IEBACiAJUEM2X1BGX0kyQzJfU0NMLAogCS8qIFNQSTEgKi8KIAlQRDI1X1BGX0NTUEkxX1JEWSwKLQlQRDI3X1BGX0NTUEkxX1NTMSwKLQlQRDI4X1BGX0NTUEkxX1NTMCwKIAlQRDI5X1BGX0NTUEkxX1NDTEssCiAJUEQzMF9QRl9DU1BJMV9NSVNPLAogCVBEMzFfUEZfQ1NQSTFfTU9TSSwKQEAgLTE5Niw2ICsxOTksODYgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IHBjbTAzOF9zcGlfY3NbXSA9IHtHUElPX1BPUlREICsgMjh9OworCitzdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjbTAzOF9zcGlfMF9kYXRhID0geworCS5jaGlwc2VsZWN0ID0gcGNtMDM4X3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjbTAzOF9zcGlfY3MpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkaGMxX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9ICZteGNfc2RoY19kZXZpY2UxLmRldiwKKwkJLnN1cHBseQk9ICJzZGhjX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZGhjMV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMwMDAwMDAsCisJCS5tYXhfdVYgPSAzNDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCVJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5hbHdheXNfb24gPSAwLAorCQkuYm9vdF9vbiA9IDAsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzZGhjMV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHNkaGMxX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBjYW1fY29uc3VtZXJzW10gPSB7CisJeworCQkuZGV2CT0gTlVMTCwKKwkJLnN1cHBseQk9ICJpbXhfY2FtX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBjYW1fZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzQwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQlSRUdVTEFUT1JfTU9ERV9GQVNULAorCQkuYWx3YXlzX29uID0gMCwKKwkJLmJvb3Rfb24gPSAwLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoY2FtX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gY2FtX2NvbnN1bWVycywKK307CisKK3N0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgcGNtMDM4X3JlZ3VsYXRvcnNbXSA9IHsKKwl7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WQ0FNLAorCQkuaW5pdF9kYXRhID0gJmNhbV9kYXRhLAorCX0sIHsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZNTUMxLAorCQkuaW5pdF9kYXRhID0gJnNkaGMxX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIHBjbTAzOF9wbWljID0geworCS5yZWd1bGF0b3JzID0gcGNtMDM4X3JlZ3VsYXRvcnMsCisJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShwY20wMzhfcmVndWxhdG9ycyksCisJLmZsYWdzID0gTUMxMzc4M19VU0VfQURDIHwgTUMxMzc4M19VU0VfUkVHVUxBVE9SIHwKKwkJIE1DMTM3ODNfVVNFX1RPVUNIU0NSRUVOLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY20wMzhfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1jMTM3ODMiLAorCQkuaXJxID0gSVJRX0dQSU9CKDIzKSwKKwkJLm1heF9zcGVlZF9oeiA9IDMwMDAwMCwKKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAwLAorCQkucGxhdGZvcm1fZGF0YSA9ICZwY20wMzhfcG1pYywKKwkJLm1vZGUgPSBTUElfQ1NfSElHSCwKKwl9Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X2luaXQodm9pZCkKIHsKIAlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjbTAzOF9waW5zLCBBUlJBWV9TSVpFKHBjbTAzOF9waW5zKSwKQEAgLTIxOSw2ICszMDIsMTUgQEAKIAkvKiBQRTE4IGZvciB1c2VyLUxFRCBENDAgKi8KIAlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCAxOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKIAorCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogTUMxMzc4MyBJUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmcGNtMDM4X3NwaV8wX2RhdGEpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjbTAzOF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHBjbTAzOF9zcGlfYm9hcmRfaW5mbykpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKaW5kZXggYzI2MWY1OS4uM2NiN2Y0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwpAQCAtMzksNyArMzksNiBAQAogCVBCN19QRl9TRDJfRDMsCiAJUEI4X1BGX1NEMl9DTUQsCiAJUEI5X1BGX1NEMl9DTEssCi0JR1BJT19QT1JUQyB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19JTiwgLyogY2FyZCBkZXRlY3QgKi8KIAkvKiBkaXNwbGF5ICovCiAJUEE1X1BGX0xTQ0xLLAogCVBBNl9QRl9MRDAsCkBAIC0yMjgsNiArMjI3LDcgQEAKIAkJCSJQQ005NzAiKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZwY20wMzhfZmJfZGF0YSk7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205NzBfc2phMTAwMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwppbmRleCBlYjEyZGUxLi42MzUxMWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKQEAgLTEsNCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKaW5kZXggOTJhYTRmZC4uZDIzYWU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTIzLDE5ICs0MSwxMiBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19pbml0KHZvaWQpCiB7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbmFuZF9ib2FyZF9pbmZvKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka190aW1lcl9pbml0KHZvaWQpCiB7CiAJbXgyNV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwppbmRleCBmZTVjNDIxLi5jNTk1MjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWF4IiwgbWF4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFkbXV4IiwgYWRtdXhfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCmluZGV4IDA2YmQ2MTguLmIyYTNiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwpAQCAtNTMwLDcgKzUzMCw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0MV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IDhhNTc3ZjMuLmU2YWJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogICogU1BJIG1hc3RlciBjb250cm9sbGVyCiAgKiAzIGNoYW5uZWxzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8wX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzBfcmVzb3VyY2VzW10gPSB7CiAJewogCSAgICAgICAuc3RhcnQgPSBDU1BJMV9CQVNFX0FERFIsCiAJICAgICAgIC5lbmQgPSBDU1BJMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCkBAIC00NzEsNyArNDcxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzFfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMV9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydCA9IENTUEkyX0JBU0VfQUREUiwKIAkJLmVuZCA9IENTUEkyX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8yX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gQ1NQSTNfQkFTRV9BRERSLAogCQkuZW5kID0gQ1NQSTNfQkFTRV9BRERSICsgU1pfNEsgLSAxLApAQCAtNDk1LDI1ICs0OTUsMjUgQEAKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTAgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMCA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzBfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTEgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzFfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTIgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzJfcmVzb3VyY2VzLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMzUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAppbmRleCA3OWYyYmU0Li5hYjg3NDE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCkBAIC0yMCw3ICsyMCw3IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcm5nYV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCmluZGV4IGFkNWExMTIuLmJlZGY1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwpAQCAtODEsNiArODEsNyBAQAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQogdm9pZCBfX2luaXQgbXgzNV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7CkBAIC04OSw2ICs5MCw3IEBACiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KKyNlbmRpZgogCiB2b2lkIF9faW5pdCBteDMxX2luaXRfaXJxKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvY2xvY2suYwppbmRleCA0NGVkMjBkLi5jZjgxY2JjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjbGtfZGVidWdmc19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2xrX2RlYnVnZnNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNsa19kZWJ1Z2ZzX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4gPSBjbGtfZGVidWdmc19vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCmluZGV4IDQyOTIwZjkuLjhhZDVjYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwpAQCAtMjE5LDYgKzIxOSwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYW1zX2RlbHRhX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCiAJaW90YWJsZV9pbml0KGFtc19kZWx0YV9pb19kZXNjLCBBUlJBWV9TSVpFKGFtc19kZWx0YV9pb19kZXNjKSk7CiAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGFtc19kZWx0YV9jb25maWc7CkBAIC0yMzEsNiArMjM1LDggQEAKIAogCW9tYXBfdXNiX2luaXQoJmFtc19kZWx0YV91c2JfY29uZmlnKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhhbXNfZGVsdGFfZGV2aWNlcywgQVJSQVlfU0laRShhbXNfZGVsdGFfZGV2aWNlcykpOworCisJb21hcF93cml0ZXcob21hcF9yZWFkdyhBUk1fUlNUQ1QxKSB8IDB4MDAwNCwgQVJNX1JTVENUMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgYW1zX2RlbHRhX21vZGVtX3BvcnRzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IGZiNDcyMzkuLjZjOGE0MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCkBAIC02NCw2ICs2NCwxNCBAQAogewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCQlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAkJb21hcF91c2JfaW5pdCgmZ2VuZXJpYzE1MTBfdXNiX2NvbmZpZyk7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBjYzJhYmJiLi5jZDZjMzk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTM3Niw2ICszNzYsMjYgQEAKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQl1bnNpZ25lZCBjaGFyIHJlZzsKKworCQkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCisJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47CisJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwkJdWRlbGF5KDEwKTsKKworCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00yX0VOOworCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXVkZWxheSgxMCk7CisKIAkJcGxhdGZvcm1fYWRkX2RldmljZXMoaW5ub3ZhdG9yMTUxMF9kZXZpY2VzLCBBUlJBWV9TSVpFKGlubm92YXRvcjE1MTBfZGV2aWNlcykpOwogCQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpbm5vdmF0b3IxNTEwX2JvYXJkaW5mbywKIAkJCQlBUlJBWV9TSVpFKGlubm92YXRvcjE1MTBfYm9hcmRpbmZvKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwppbmRleCA5MGRkMDQzLi40ZGUyNTg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKQEAgLTM0Miw2ICszNDIsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGFsbXRlX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdGVfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHBhbG10ZV9jb25maWcpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYwppbmRleCA4MjU2MTM5Li5kOTcyY2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKQEAgLTI4OSw2ICsyODksMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGFsbXR0X2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJb21hcF9tcHVfd2R0X21vZGUoMCk7CiAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHBhbG10dF9jb25maWc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCmluZGV4IDgxYjZiZGUuLjk4NmJkNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCkBAIC0zMDcsNiArMzA3LDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQKIG9tYXBfcGFsbXo3MV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCXBhbG16NzFfZ3Bpb19zZXR1cCgxKTsKIAlvbWFwX21wdV93ZHRfbW9kZSgwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKaW5kZXggMDJjODVjYS4uMDU2YWU2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCkBAIC0zNzcsNiArMzc3LDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3N4MV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHN4MV9kZXZpY2VzLCBBUlJBWV9TSVpFKHN4MV9kZXZpY2VzKSk7CiAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHN4MV9jb25maWc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwppbmRleCBjMDZlN2E1Li4wN2IwNzUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKQEAgLTE1Miw2ICsxNTIsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHZvaWNlYmx1ZV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCS8qIFdhdGNoZG9nICovCiAJZ3Bpb19yZXF1ZXN0KDAsICJXYXRjaGRvZyIpOwogCS8qIHNtYzkxeCByZXNldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCmluZGV4IDRlZjI2ZmEuLmU1ZGNkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAl7IC5qdGFnX2lkID0gMHhiNTc0LCAuZGllX3JldiA9IDB4MiwgLm9tYXBfaWQgPSAweDAzMzEwMzE1LCAudHlwZSA9IDB4MDMxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweDM1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDEwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMzAwfSwKLQl7IC5qdGFnX2lkID0gMHhiNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwNTAwLCAudHlwZSA9IDB4MDg1MDAwMDB9LAorCXsgLmp0YWdfaWQgPSAweGI2MmMsIC5kaWVfcmV2ID0gMHgxLCAub21hcF9pZCA9IDB4MDMzMjA1MDAsIC50eXBlID0gMHgwODUwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjQ3MCwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMxMDEwMCwgLnR5cGUgPSAweDE1MTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MTYxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMjAxMDAsIC50eXBlID0gMHgxNjExMDAwMH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCBkNDk2ZTUwLi5kMjM5NzliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKQEAgLTEzMSw4ICsxMzEsNiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBPTUFQX01BWF9OUl9QT1JUUzsgaSsrKSB7Ci0JCXVuc2lnbmVkIGNoYXIgcmVnOwotCiAJCXN3aXRjaCAoaSkgewogCQljYXNlIDA6CiAJCQl1YXJ0MV9jayA9IGNsa19nZXQoTlVMTCwgInVhcnQxX2NrIik7CkBAIC0xNDMsMTYgKzE0MSw2IEBACiAJCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJCQljbGtfc2V0X3JhdGUodWFydDFfY2ssIDEyMDAwMDAwKTsKIAkJCX0KLQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7Ci0JCQkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgewotCQkJCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7Ci0JCQkJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00xX0VOOwotCQkJCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7Ci0JCQkJCXVkZWxheSgxMCk7Ci0JCQkJfQotCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgMToKIAkJCXVhcnQyX2NrID0gY2xrX2dldChOVUxMLCAidWFydDJfY2siKTsKQEAgLTE2NSwxNiArMTUzLDYgQEAKIAkJCQllbHNlCiAJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0Ml9jaywgNDgwMDAwMDApOwogCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTJfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAyOgogCQkJdWFydDNfY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0M19jayIpOwpAQCAtMTg1LDEwICsxNjMsNiBAQAogCQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKIAkJCQkJY2xrX3NldF9yYXRlKHVhcnQzX2NrLCAxMjAwMDAwMCk7CiAJCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOwotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7Ci0JCQl9CiAJCQlicmVhazsKIAkJfQogCQlvbWFwX3NlcmlhbF9yZXNldCgmc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDc1YjFjN2UuLmFhZDE5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTczLDkgKzczLDIxIEBACiAJYm9vbCAiT01BUCAzNDMwIFNEUCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAogCitjb25maWcgTUFDSF9OT0tJQV9OODAwCisgICAgICAgYm9vbAorCitjb25maWcgTUFDSF9OT0tJQV9OODEwCisgICAgICAgYm9vbAorCitjb25maWcgTUFDSF9OT0tJQV9OODEwX1dJTUFYCisgICAgICAgYm9vbAorCiBjb25maWcgTUFDSF9OT0tJQV9OOFgwCiAJYm9vbCAiTm9raWEgTjgwMC9OODEwIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMjQyMAorCXNlbGVjdCBNQUNIX05PS0lBX044MDAKKwlzZWxlY3QgTUFDSF9OT0tJQV9OODEwCisJc2VsZWN0IE1BQ0hfTk9LSUFfTjgxMF9XSU1BWAogCiBjb25maWcgTUFDSF9OT0tJQV9SWDUxCiAJYm9vbCAiTm9raWEgUlgtNTEgYm9hcmQiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCmluZGV4IGJkNTdlYzcuLjBhY2I1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgpAQCAtMzgsNyArMzksNiBAQAogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMtc21jOTF4Lmg+CiAKICNpbmNsdWRlICJzZHJhbS1xaW1vbmRhLWh5YjE4bTUxMjE2MGFmLTYuaCIKQEAgLTU0LDcgKzU0LDcgQEAKIAogI2RlZmluZSBUV0w0MDMwX01TRUNVUkVfR1BJTyAyMgogCi1zdGF0aWMgaW50IHNkcDM0MzBfa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCiAJS0VZKDAsIDEsIEtFWV9SSUdIVCksCiAJS0VZKDAsIDIsIEtFWV9BKSwKQEAgLTg4LDExICs4OCwxNSBAQAogCTAKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHNkcDM0MzBfa3BfZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCiAJLnJvd3MJCT0gNSwKIAkuY29scwkJPSA2LAotCS5rZXltYXAJCT0gc2RwMzQzMF9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKHNkcDM0MzBfa2V5bWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IGViMzdjNDAuLjYwOWE1YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC01OCw2ICs1OCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdF9pcnEodm9pZCkKIHsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDQ0MzBfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDQ0MzBfY29uZmlnKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAlvbWFwMl9ncF9jbG9ja2V2ZW50X3NldF9ncHRpbWVyKDEpOwpAQCAtNzAsOCArNzIsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfNDQzMHNkcF9pbml0KHZvaWQpCiB7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc2RwNDQzMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNkcDQ0MzBfZGV2aWNlcykpOwotCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggZWM2ODU0Yy4uZDU3ZWMyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTQxLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxtYWNoL3VzYi5oPgotI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCkBAIC04MCw3ICs4MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgbGRwX3R3bDQwMzBfa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfMSksCiAJS0VZKDEsIDAsIEtFWV8yKSwKIAlLRVkoMiwgMCwgS0VZXzMpLApAQCAtMTAxLDExICsxMDEsMTUgQEAKIAkwCiB9OwogCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBsZHBfa3BfdHdsNDAzMF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA2LAogCS5jb2xzCQk9IDYsCi0JLmtleW1hcAkJPSBsZHBfdHdsNDAzMF9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKGxkcF90d2w0MDMwX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IDUwMGM5OTUuLjA4YjA4MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTEzOSw4ICsxMzksMTMgQEAKIHN0YXRpYyBpbnQgYmVhZ2xlX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7CisJaWYgKHN5c3RlbV9yZXYgPj0gMHgyMCAmJiBzeXN0ZW1fcmV2IDw9IDB4MzQzMDEwMDApIHsKKwkJb21hcF9jZmdfcmVnKEFHOV8zNFhYX0dQSU8yMyk7CisJCW1tY1swXS5ncGlvX3dwID0gMjM7CisJfSBlbHNlIHsKKwkJb21hcF9jZmdfcmVnKEFIOF8zNFhYX0dQSU8yOSk7CisJfQogCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLwotCW9tYXBfY2ZnX3JlZyhBSDhfMzRYWF9HUElPMjkpOwogCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CiAJdHdsNDAzMF9tbWNfaW5pdChtbWMpOwogCkBAIC0xNTcsNyArMTYyLDcgQEAKIAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwID09IGxlZEEsIEVIQ0kgbkVOX1VTQl9QV1IgKG91dCwgYWN0aXZlIGxvdykgKi8KIAlncGlvX3JlcXVlc3QoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsICJuRU5fVVNCX1BXUiIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAwKTsKIAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAxID09IGxlZEIsIFBNVV9TVEFUIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCmluZGV4IGQ1MGI5YmUuLjRjNGQ3ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCkBAIC0xNTksNyArMTU5LDcgQEAKIAkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAogfTsKIAotc3RhdGljIGludCBvbWFwM2V2bV9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9MRUZUKSwKIAlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKIAlLRVkoMCwgMiwgS0VZX0EpLApAQCAtMTc4LDExICsxNzgsMTUgQEAKIAlLRVkoMywgMywgS0VZX1ApCiB9OwogCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBvbWFwM2V2bV9rcF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA0LAogCS5jb2xzCQk9IDQsCi0JLmtleW1hcAkJPSBvbWFwM2V2bV9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKG9tYXAzZXZtX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggYjQzZjZlMy4uNzUxOWVkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzksNyArNDAsNiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKQEAgLTEzMyw1OCArMTMzLDYyIEBACiAJb21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKDMyICogNSwgR1BJT19ERUJPVU5DRV9USU1FKTsKIH0KIAotc3RhdGljIGludCBwYW5kb3JhX2tleXBhZF9tYXBbXSA9IHsKLQkvKiBjb2wsIHJvdywgY29kZSAqLworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKKwkvKiByb3csIGNvbCwgY29kZSAqLwogCUtFWSgwLCAwLCBLRVlfOSksCi0JS0VZKDAsIDEsIEtFWV8wKSwKLQlLRVkoMCwgMiwgS0VZX0JBQ0tTUEFDRSksCi0JS0VZKDAsIDMsIEtFWV9PKSwKLQlLRVkoMCwgNCwgS0VZX1ApLAotCUtFWSgwLCA1LCBLRVlfSyksCi0JS0VZKDAsIDYsIEtFWV9MKSwKLQlLRVkoMCwgNywgS0VZX0VOVEVSKSwKLQlLRVkoMSwgMCwgS0VZXzgpLAorCUtFWSgwLCAxLCBLRVlfOCksCisJS0VZKDAsIDIsIEtFWV9JKSwKKwlLRVkoMCwgMywgS0VZX0opLAorCUtFWSgwLCA0LCBLRVlfTiksCisJS0VZKDAsIDUsIEtFWV9NKSwKKwlLRVkoMSwgMCwgS0VZXzApLAogCUtFWSgxLCAxLCBLRVlfNyksCi0JS0VZKDEsIDIsIEtFWV82KSwKLQlLRVkoMSwgMywgS0VZXzUpLAotCUtFWSgxLCA0LCBLRVlfNCksCi0JS0VZKDEsIDUsIEtFWV8zKSwKLQlLRVkoMSwgNiwgS0VZXzIpLAotCUtFWSgxLCA3LCBLRVlfMSksCi0JS0VZKDIsIDAsIEtFWV9JKSwKLQlLRVkoMiwgMSwgS0VZX1UpLAorCUtFWSgxLCAyLCBLRVlfVSksCisJS0VZKDEsIDMsIEtFWV9IKSwKKwlLRVkoMSwgNCwgS0VZX0IpLAorCUtFWSgxLCA1LCBLRVlfU1BBQ0UpLAorCUtFWSgyLCAwLCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoMiwgMSwgS0VZXzYpLAogCUtFWSgyLCAyLCBLRVlfWSksCi0JS0VZKDIsIDMsIEtFWV9UKSwKLQlLRVkoMiwgNCwgS0VZX1IpLAotCUtFWSgyLCA1LCBLRVlfRSksCi0JS0VZKDIsIDYsIEtFWV9XKSwKLQlLRVkoMiwgNywgS0VZX1EpLAotCUtFWSgzLCAwLCBLRVlfSiksCi0JS0VZKDMsIDEsIEtFWV9IKSwKLQlLRVkoMywgMiwgS0VZX0cpLAorCUtFWSgyLCAzLCBLRVlfRyksCisJS0VZKDIsIDQsIEtFWV9WKSwKKwlLRVkoMiwgNSwgS0VZX0ZOKSwKKwlLRVkoMywgMCwgS0VZX08pLAorCUtFWSgzLCAxLCBLRVlfNSksCisJS0VZKDMsIDIsIEtFWV9UKSwKIAlLRVkoMywgMywgS0VZX0YpLAotCUtFWSgzLCA0LCBLRVlfRCksCi0JS0VZKDMsIDUsIEtFWV9TKSwKLQlLRVkoMywgNiwgS0VZX0EpLAotCUtFWSgzLCA3LCBLRVlfTEVGVFNISUZUKSwKLQlLRVkoNCwgMCwgS0VZX04pLAotCUtFWSg0LCAxLCBLRVlfQiksCi0JS0VZKDQsIDIsIEtFWV9WKSwKLQlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSgzLCA0LCBLRVlfQyksCisJS0VZKDQsIDAsIEtFWV9QKSwKKwlLRVkoNCwgMSwgS0VZXzQpLAorCUtFWSg0LCAyLCBLRVlfUiksCisJS0VZKDQsIDMsIEtFWV9EKSwKIAlLRVkoNCwgNCwgS0VZX1gpLAotCUtFWSg0LCA1LCBLRVlfWiksCi0JS0VZKDQsIDYsIEtFWV9ET1QpLAotCUtFWSg0LCA3LCBLRVlfQ09NTUEpLAotCUtFWSg1LCAwLCBLRVlfTSksCi0JS0VZKDUsIDEsIEtFWV9TUEFDRSksCi0JS0VZKDUsIDIsIEtFWV9GTiksCisJS0VZKDUsIDAsIEtFWV9LKSwKKwlLRVkoNSwgMSwgS0VZXzMpLAorCUtFWSg1LCAyLCBLRVlfRSksCisJS0VZKDUsIDMsIEtFWV9TKSwKKwlLRVkoNSwgNCwgS0VZX1opLAorCUtFWSg2LCAwLCBLRVlfTCksCisJS0VZKDYsIDEsIEtFWV8yKSwKKwlLRVkoNiwgMiwgS0VZX1cpLAorCUtFWSg2LCAzLCBLRVlfQSksCisJS0VZKDYsIDQsIEtFWV9ET1QpLAorCUtFWSg3LCAwLCBLRVlfRU5URVIpLAorCUtFWSg3LCAxLCBLRVlfMSksCisJS0VZKDcsIDIsIEtFWV9RKSwKKwlLRVkoNywgMywgS0VZX0xFRlRTSElGVCksCisJS0VZKDcsIDQsIEtFWV9DT01NQSksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBwYW5kb3JhX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCQk9IHBhbmRvcmFfa2V5cGFkX21hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUocGFuZG9yYV9rZXlwYWRfbWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGU2ZTgyOTAuLmUzNGQ5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgpAQCAtMjcsNyArMjgsNiBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvb25lbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIApAQCAtMzYsNTggKzM2LDYyIEBACiAjZGVmaW5lIFNZU1RFTV9SRVZfQl9VU0VTX1ZBVVgzCTB4MTY5OQogI2RlZmluZSBTWVNURU1fUkVWX1NfVVNFU19WQVVYMyAweDgKIAotc3RhdGljIGludCByeDUxX2tleW1hcFtdID0geworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX1EpLAotCUtFWSgwLCAxLCBLRVlfVyksCi0JS0VZKDAsIDIsIEtFWV9FKSwKLQlLRVkoMCwgMywgS0VZX1IpLAotCUtFWSgwLCA0LCBLRVlfVCksCi0JS0VZKDAsIDUsIEtFWV9ZKSwKLQlLRVkoMCwgNiwgS0VZX1UpLAotCUtFWSgwLCA3LCBLRVlfSSksCi0JS0VZKDEsIDAsIEtFWV9PKSwKKwlLRVkoMCwgMSwgS0VZX08pLAorCUtFWSgwLCAyLCBLRVlfUCksCisJS0VZKDAsIDMsIEtFWV9DT01NQSksCisJS0VZKDAsIDQsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgwLCA2LCBLRVlfQSksCisJS0VZKDAsIDcsIEtFWV9TKSwKKwlLRVkoMSwgMCwgS0VZX1cpLAogCUtFWSgxLCAxLCBLRVlfRCksCi0JS0VZKDEsIDIsIEtFWV9ET1QpLAotCUtFWSgxLCAzLCBLRVlfViksCi0JS0VZKDEsIDQsIEtFWV9ET1dOKSwKLQlLRVkoMiwgMCwgS0VZX1ApLAotCUtFWSgyLCAxLCBLRVlfRiksCisJS0VZKDEsIDIsIEtFWV9GKSwKKwlLRVkoMSwgMywgS0VZX0cpLAorCUtFWSgxLCA0LCBLRVlfSCksCisJS0VZKDEsIDUsIEtFWV9KKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfTCksCisJS0VZKDIsIDAsIEtFWV9FKSwKKwlLRVkoMiwgMSwgS0VZX0RPVCksCiAJS0VZKDIsIDIsIEtFWV9VUCksCi0JS0VZKDIsIDMsIEtFWV9CKSwKLQlLRVkoMiwgNCwgS0VZX1JJR0hUKSwKLQlLRVkoMywgMCwgS0VZX0NPTU1BKSwKLQlLRVkoMywgMSwgS0VZX0cpLAotCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgyLCAzLCBLRVlfRU5URVIpLAorCUtFWSgyLCA1LCBLRVlfWiksCisJS0VZKDIsIDYsIEtFWV9YKSwKKwlLRVkoMiwgNywgS0VZX0MpLAorCUtFWSgzLCAwLCBLRVlfUiksCisJS0VZKDMsIDEsIEtFWV9WKSwKKwlLRVkoMywgMiwgS0VZX0IpLAogCUtFWSgzLCAzLCBLRVlfTiksCi0JS0VZKDQsIDAsIEtFWV9CQUNLU1BBQ0UpLAotCUtFWSg0LCAxLCBLRVlfSCksCi0JS0VZKDQsIDMsIEtFWV9NKSwKKwlLRVkoMywgNCwgS0VZX00pLAorCUtFWSgzLCA1LCBLRVlfU1BBQ0UpLAorCUtFWSgzLCA2LCBLRVlfU1BBQ0UpLAorCUtFWSgzLCA3LCBLRVlfTEVGVCksCisJS0VZKDQsIDAsIEtFWV9UKSwKKwlLRVkoNCwgMSwgS0VZX0RPV04pLAorCUtFWSg0LCAyLCBLRVlfUklHSFQpLAogCUtFWSg0LCA0LCBLRVlfTEVGVENUUkwpLAotCUtFWSg1LCAxLCBLRVlfSiksCi0JS0VZKDUsIDIsIEtFWV9aKSwKLQlLRVkoNSwgMywgS0VZX1NQQUNFKSwKLQlLRVkoNSwgNCwgS0VZX0xFRlRTSElGVCksCi0JS0VZKDYsIDAsIEtFWV9BKSwKLQlLRVkoNiwgMSwgS0VZX0spLAotCUtFWSg2LCAyLCBLRVlfWCksCi0JS0VZKDYsIDMsIEtFWV9TUEFDRSksCi0JS0VZKDYsIDQsIEtFWV9GTiksCi0JS0VZKDcsIDAsIEtFWV9TKSwKLQlLRVkoNywgMSwgS0VZX0wpLAotCUtFWSg3LCAyLCBLRVlfQyksCi0JS0VZKDcsIDMsIEtFWV9MRUZUKSwKLQlLRVkoMHhmZiwgMCwgS0VZX0Y2KSwKLQlLRVkoMHhmZiwgMSwgS0VZX0Y3KSwKLQlLRVkoMHhmZiwgMiwgS0VZX0Y4KSwKLQlLRVkoMHhmZiwgNCwgS0VZX0Y5KSwKLQlLRVkoMHhmZiwgNSwgS0VZX0YxMCksCisJS0VZKDQsIDUsIEtFWV9SSUdIVEFMVCksCisJS0VZKDQsIDYsIEtFWV9MRUZUU0hJRlQpLAorCUtFWSg1LCAwLCBLRVlfWSksCisJS0VZKDYsIDAsIEtFWV9VKSwKKwlLRVkoNywgMCwgS0VZX0kpLAorCUtFWSg3LCAxLCBLRVlfRjcpLAorCUtFWSg3LCAyLCBLRVlfRjgpLAorCUtFWSgweGZmLCAyLCBLRVlfRjkpLAorCUtFWSgweGZmLCA0LCBLRVlfRjEwKSwKKwlLRVkoMHhmZiwgNSwgS0VZX0YxMSksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSByeDUxX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gOCwKLQkua2V5bWFwCQk9IHJ4NTFfa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShyeDUxX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApAQCAtNDQwLDcgKzQ0NCw3IEBACiAJCXJ4NTFfdHdsZGF0YS52YXV4MyA9ICZyeDUxX3ZhdXgzX2NhbTsKIAkJcng1MV90d2xkYXRhLnZtbWMyID0gJnJ4NTFfdm1tYzI7CiAJfQotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEsCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDIyMDAsIHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSwKIAkJCUFSUkFZX1NJWkUocng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xKSk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDEwMCwgTlVMTCwgMCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IGY5MTk2YzMuLjc4ODY5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwppbmRleCAzMjQwMDllLi41MWUwYjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CkBAIC0yMiw3MSArMjMsNzQgQEAKIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKIAogLyogWm9vbTIgaGFzIFF3ZXJ0eSBrZXlib2FyZCovCi1zdGF0aWMgaW50IHpvb20yX3R3bDQwMzBfa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRSksCi0JS0VZKDEsIDAsIEtFWV9SKSwKLQlLRVkoMiwgMCwgS0VZX1QpLAotCUtFWSgzLCAwLCBLRVlfSE9NRSksCi0JS0VZKDYsIDAsIEtFWV9JKSwKLQlLRVkoNywgMCwgS0VZX0xFRlRTSElGVCksCi0JS0VZKDAsIDEsIEtFWV9EKSwKKwlLRVkoMCwgMSwgS0VZX1IpLAorCUtFWSgwLCAyLCBLRVlfVCksCisJS0VZKDAsIDMsIEtFWV9IT01FKSwKKwlLRVkoMCwgNiwgS0VZX0kpLAorCUtFWSgwLCA3LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoMSwgMCwgS0VZX0QpLAogCUtFWSgxLCAxLCBLRVlfRiksCi0JS0VZKDIsIDEsIEtFWV9HKSwKLQlLRVkoMywgMSwgS0VZX1NFTkQpLAotCUtFWSg2LCAxLCBLRVlfSyksCi0JS0VZKDcsIDEsIEtFWV9FTlRFUiksCi0JS0VZKDAsIDIsIEtFWV9YKSwKLQlLRVkoMSwgMiwgS0VZX0MpLAorCUtFWSgxLCAyLCBLRVlfRyksCisJS0VZKDEsIDMsIEtFWV9TRU5EKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfRU5URVIpLAorCUtFWSgyLCAwLCBLRVlfWCksCisJS0VZKDIsIDEsIEtFWV9DKSwKIAlLRVkoMiwgMiwgS0VZX1YpLAotCUtFWSgzLCAyLCBLRVlfRU5EKSwKLQlLRVkoNiwgMiwgS0VZX0RPVCksCi0JS0VZKDcsIDIsIEtFWV9DQVBTTE9DSyksCi0JS0VZKDAsIDMsIEtFWV9aKSwKLQlLRVkoMSwgMywgS0VZX0tQUExVUyksCi0JS0VZKDIsIDMsIEtFWV9CKSwKKwlLRVkoMiwgMywgS0VZX0VORCksCisJS0VZKDIsIDYsIEtFWV9ET1QpLAorCUtFWSgyLCA3LCBLRVlfQ0FQU0xPQ0spLAorCUtFWSgzLCAwLCBLRVlfWiksCisJS0VZKDMsIDEsIEtFWV9LUFBMVVMpLAorCUtFWSgzLCAyLCBLRVlfQiksCiAJS0VZKDMsIDMsIEtFWV9GMSksCi0JS0VZKDYsIDMsIEtFWV9PKSwKLQlLRVkoNywgMywgS0VZX1NQQUNFKSwKLQlLRVkoMCwgNCwgS0VZX1cpLAotCUtFWSgxLCA0LCBLRVlfWSksCi0JS0VZKDIsIDQsIEtFWV9VKSwKLQlLRVkoMywgNCwgS0VZX0YyKSwKKwlLRVkoMywgNiwgS0VZX08pLAorCUtFWSgzLCA3LCBLRVlfU1BBQ0UpLAorCUtFWSg0LCAwLCBLRVlfVyksCisJS0VZKDQsIDEsIEtFWV9ZKSwKKwlLRVkoNCwgMiwgS0VZX1UpLAorCUtFWSg0LCAzLCBLRVlfRjIpLAogCUtFWSg0LCA0LCBLRVlfVk9MVU1FVVApLAotCUtFWSg2LCA0LCBLRVlfTCksCi0JS0VZKDcsIDQsIEtFWV9MRUZUKSwKLQlLRVkoMCwgNSwgS0VZX1MpLAotCUtFWSgxLCA1LCBLRVlfSCksCi0JS0VZKDIsIDUsIEtFWV9KKSwKLQlLRVkoMywgNSwgS0VZX0YzKSwKKwlLRVkoNCwgNiwgS0VZX0wpLAorCUtFWSg0LCA3LCBLRVlfTEVGVCksCisJS0VZKDUsIDAsIEtFWV9TKSwKKwlLRVkoNSwgMSwgS0VZX0gpLAorCUtFWSg1LCAyLCBLRVlfSiksCisJS0VZKDUsIDMsIEtFWV9GMyksCiAJS0VZKDUsIDUsIEtFWV9WT0xVTUVET1dOKSwKLQlLRVkoNiwgNSwgS0VZX00pLAotCUtFWSg0LCA1LCBLRVlfRU5URVIpLAotCUtFWSg3LCA1LCBLRVlfUklHSFQpLAotCUtFWSgwLCA2LCBLRVlfUSksCi0JS0VZKDEsIDYsIEtFWV9BKSwKLQlLRVkoMiwgNiwgS0VZX04pLAotCUtFWSgzLCA2LCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoNSwgNiwgS0VZX00pLAorCUtFWSg1LCA3LCBLRVlfRU5URVIpLAorCUtFWSg2LCAwLCBLRVlfUSksCisJS0VZKDYsIDEsIEtFWV9BKSwKKwlLRVkoNiwgMiwgS0VZX04pLAorCUtFWSg2LCAzLCBLRVlfQkFDS1NQQUNFKSwKIAlLRVkoNiwgNiwgS0VZX1ApLAotCUtFWSg3LCA2LCBLRVlfVVApLAogCUtFWSg2LCA3LCBLRVlfU0VMRUNUKSwKLQlLRVkoNywgNywgS0VZX0RPV04pLAotCUtFWSgwLCA3LCBLRVlfUFJPRzEpLAkvKk1BQ1JPIDEgPFVzZXIgZGVmaW5lZD4gKi8KLQlLRVkoMSwgNywgS0VZX1BST0cyKSwJLypNQUNSTyAyIDxVc2VyIGRlZmluZWQ+ICovCi0JS0VZKDIsIDcsIEtFWV9QUk9HMyksCS8qTUFDUk8gMyA8VXNlciBkZWZpbmVkPiAqLwotCUtFWSgzLCA3LCBLRVlfUFJPRzQpLAkvKk1BQ1JPIDQgPFVzZXIgZGVmaW5lZD4gKi8KLQkwCisJS0VZKDcsIDAsIEtFWV9QUk9HMSksCS8qTUFDUk8gMSA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCAxLCBLRVlfUFJPRzIpLAkvKk1BQ1JPIDIgPFVzZXIgZGVmaW5lZD4gKi8KKwlLRVkoNywgMiwgS0VZX1BST0czKSwJLypNQUNSTyAzIDxVc2VyIGRlZmluZWQ+ICovCisJS0VZKDcsIDMsIEtFWV9QUk9HNCksCS8qTUFDUk8gNCA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCA1LCBLRVlfUklHSFQpLAorCUtFWSg3LCA2LCBLRVlfVVApLAorCUtFWSg3LCA3LCBLRVlfRE9XTikKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAogfTsKIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHpvb20yX2twX3R3bDQwMzBfZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCiAJLnJvd3MJCT0gOCwKIAkuY29scwkJPSA4LAotCS5rZXltYXAJCT0gem9vbTJfdHdsNDAzMF9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKHpvb20yX3R3bDQwMzBfa2V5bWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCkBAIC0yMDksNyArMjEzLDggQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHpvb20yX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRSh6b29tMl9jb25maWcpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCisJCQkJIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKaW5kZXggYmM1ZDNhYy4uZTJkYmVkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCkBAIC03NjksNiArNzY5LDcgQEAKIAkJaWYgKGMtPmNwdSAmIGNwdV9tYXNrKSB7CiAJCQljbGtkZXZfYWRkKCZjLT5sayk7CiAJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CiAJCX0KIAogCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggZmFmY2QzMi4uN2M1YzAwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC0zMzgsNiArMzM4LDEzIEBACiAgKi8KICNkZWZpbmUgU0RSQ19NUFVSQVRFX0xPT1BTCQk5NgogCisvKgorICogRFBMTDVfRlJFUV9GT1JfVVNCSE9TVDogVVNCSE9TVCBhbmQgVVNCVExMIGFyZSB0aGUgb25seSBjbG9ja3MKKyAqIHRoYXQgYXJlIHNvdXJjZWQgYnkgRFBMTDUsIGFuZCBib3RoIG9mIHRoZXNlIHJlcXVpcmUgdGhpcyBjbG9jaworICogdG8gYmUgYXQgMTIwIE1IeiBmb3IgcHJvcGVyIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBEUExMNV9GUkVRX0ZPUl9VU0JIT1NUCQkxMjAwMDAwMDAKKwogLyoqCiAgKiBvbWFwMzQzMGVzMl9jbGtfc3NpX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciBTU0kKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCkBAIC00NjYsNyArNDczLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZpbnQ7CiAJdTE2IGYgPSAwOwogCi0JZmludCA9IGNsay0+ZHBsbF9kYXRhLT5jbGtfcmVmLT5yYXRlIC8gKG4gKyAxKTsKKwlmaW50ID0gY2xrLT5kcGxsX2RhdGEtPmNsa19yZWYtPnJhdGUgLyBuOwogCiAJcHJfZGVidWcoImNsb2NrOiBmaW50IGlzICVsdVxuIiwgZmludCk7CiAKQEAgLTEwNTYsNiArMTA2MywyOCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpCit7CisJc3RydWN0IGNsayAqZHBsbDVfY2xrOworCXN0cnVjdCBjbGsgKmRwbGw1X20yX2NsazsKKworCWRwbGw1X2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X2NrIik7CisJY2xrX3NldF9yYXRlKGRwbGw1X2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CisJY2xrX2VuYWJsZShkcGxsNV9jbGspOworCisJLyogRW5hYmxlIGF1dG9pZGxlIHRvIGFsbG93IGl0IHRvIGVudGVyIGxvdyBwb3dlciBieXBhc3MgKi8KKwlvbWFwM19kcGxsX2FsbG93X2lkbGUoZHBsbDVfY2xrKTsKKworCS8qIFByb2dyYW0gZHBsbDVfbTJfY2xrIGRpdmlkZXIgZm9yIG5vIGRpdmlzaW9uICovCisJZHBsbDVfbTJfY2xrID0gY2xrX2dldChOVUxMLCAiZHBsbDVfbTJfY2siKTsKKwljbGtfZW5hYmxlKGRwbGw1X20yX2Nsayk7CisJY2xrX3NldF9yYXRlKGRwbGw1X20yX2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CisKKwljbGtfZGlzYWJsZShkcGxsNV9tMl9jbGspOworCWNsa19kaXNhYmxlKGRwbGw1X2Nsayk7CisJcmV0dXJuOworfQorCiAvKiBSRVZJU0lUOiBNb3ZlIHRoaXMgaW5pdCBzdHVmZiBvdXQgaW50byBjbG9jay5jICovCiAKIC8qCkBAIC0xMTQ4LDYgKzExNzcsMTIgQEAKIAkgKi8KIAljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CiAKKwkvKgorCSAqIExvY2sgRFBMTDUgYW5kIHB1dCBpdCBpbiBhdXRvaWRsZS4KKwkgKi8KKwlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCisJCW9tYXAzX2Nsa19sb2NrX2RwbGw1KCk7CisKIAkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCiAJLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLwogI2lmIDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCmluZGV4IGM4MTE5NzguLjk1NjVjMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaApAQCAtNDg5LDkgKzQ4OSw5IEBACiBzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMngyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsM19tMngyX2NrIiwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM194Ml9jaywKKwkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKIAkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiAvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCA0ZWY3YjRmLi41OGFmZjg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0xMzcsNiArMTM3LDM2IEBACiAJfQogfQogCisvKgorICogX29tYXAyX2Nsa2RtX3NldF9od3N1cCAtIHNldCB0aGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9uIGJpdAorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICogQGVuYWJsZTogaW50IDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGUKKyAqCisgKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFjdHVhbGx5IHN3aXRjaGluZyB0aGUgYml0IHRoYXQgY29udHJvbHMgaHdzdXAKKyAqIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtLgorICovCitzdGF0aWMgdm9pZCBfb21hcDJfY2xrZG1fc2V0X2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIGludCBlbmFibGUpCit7CisJdTMyIHY7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAorCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKKwkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKl9jbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTQ1Niw4ICs0ODYsNiBAQAogICovCiB2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNDczLDE4ICs1MDEsNyBAQAogCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQotCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAotCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkgICAgQ01fQ0xLU1RDVFJMKTsKKwlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiB9CkBAIC01MDAsOCArNTE3LDYgQEAKICAqLwogdm9pZCBvbWFwMl9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNTE0LDE2ICs1MjksNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZGlzYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKIAkJIGNsa2RtLT5uYW1lKTsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKLQkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCi0JCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOwogCiAJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKIAkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7CkBAIC01NjksMTAgKzU3NSwxNCBAQAogCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAotCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKQorCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKSB7CisJCS8qIERpc2FibGUgSFcgdHJhbnNpdGlvbnMgd2hlbiB3ZSBhcmUgY2hhbmdpbmcgZGVwcyAqLworCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKIAkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7Ci0JZWxzZQorCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKKwl9IGVsc2UgewogCQlvbWFwMl9jbGtkbV93YWtldXAoY2xrZG0pOworCX0KIAogCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihjbGtkbS0+cHdyZG0ucHRyKTsKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwpAQCAtNjIzLDEwICs2MzMsMTQgQEAKIAl2ID0gb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoY2xrZG0pOwogCiAJaWYgKChjcHVfaXNfb21hcDM0eHgoKSAmJiB2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgfHwKLQkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkKKwkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkgeworCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOwotCWVsc2UKKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CisJfSBlbHNlIHsKIAkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOworCX0KIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNHh4eC5jCmluZGV4IGU0ZWJkNmQuLjRhZjc2YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTR4eHguYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy00eHh4LmgiCiAKIC8qIFhYWCBtb3ZlIHRoaXMgdG8gY20uaCAqLwogLyogTUFYX01PRFVMRV9SRUFEWV9USU1FOiBtYXggbWlsbGlzZWNvbmRzIGZvciBtb2R1bGUgdG8gbGVhdmUgaWRsZSAqLwpAQCAtNTAsMTkgKzQ5LDcgQEAKICAqLwogaW50IG9tYXA0X2NtX3dhaXRfaWRsZXN0X3JlYWR5KHUzMiBwcmNtX21vZCwgdTggcHJjbV9kZXZfb2ZmcykKIHsKLQlpbnQgaSA9IDA7Ci0JdTggY21faWQ7Ci0JdTE2IHByY21fbW9kX29mZnM7Ci0JdTMyIG1hc2sgPSBPTUFQNF9QUkNNX0NNX0NMS0NUUkxfSURMRVNUX01BU0s7Ci0KLQljbV9pZCA9IHByY21fbW9kID4+IE9NQVA0X1BSQ01fTU9EX0NNX0lEX1NISUZUOwotCXByY21fbW9kX29mZnMgPSBwcmNtX21vZCAmIE9NQVA0X1BSQ01fTU9EX09GRlNfTUFTSzsKLQotCXdoaWxlICgoKG9tYXA0X2NtX3JlYWRfbW9kX3JlZyhjbV9pZCwgcHJjbV9tb2Rfb2ZmcywgcHJjbV9kZXZfb2ZmcywKLQkJCQkgICAgICAgT01BUDRfQ01fQ0xLQ1RSTF9EUkVHKSAmIG1hc2spICE9IDApICYmCi0JICAgICAgIChpKysgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpKQotCQl1ZGVsYXkoMSk7Ci0KLQlyZXR1cm4gKGkgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpID8gMCA6IC1FQlVTWTsKKwkvKiBGSVhNRTogQWRkIGNsb2NrIG1hbmFnZXIgcmVsYXRlZCBjb2RlICovCisJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggYmNmY2ZjNy4uZmFmN2ExZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTM1NSwyOSArMzU1LDYwIEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQorI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDRfbWNzcGlfZml4dXAodm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMV9CQVNFOwotCQlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMV9CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOwotCQlvbWFwMl9tY3NwaTJfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMl9CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGkzX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJM19CQVNFOwotCQlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJNF9CQVNFOwotCQlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJNF9CQVNFICsgMHhmZjsKLQl9Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkyKTsKKwlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkxX0JBU0U7CisJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTFfQkFTRSArIDB4ZmY7CisJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOworCW9tYXAyX21jc3BpMl9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkyX0JBU0UgKyAweGZmOworCW9tYXAyX21jc3BpM19yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTNfQkFTRTsKKwlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKKwlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEk0X0JBU0U7CisJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTRfQkFTRSArIDB4ZmY7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXA0X21jc3BpX2ZpeHVwKHZvaWQpCit7Cit9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpM19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTNfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTQpOworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpNF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTRfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQoreworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJb21hcDRfbWNzcGlfZml4dXAoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkxKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMik7CisKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX21jc3BpM19pbml0KCk7CisKKwlpZiAoY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX21jc3BpNF9pbml0KCk7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCmluZGV4IDE1ODc2ODIuLmYzYzk5MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCkBAIC0zNjYsNyArMzY2LDcgQEAKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCi0JZ3BtY19jc19lbmFibGVfbWVtKGNzLCByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlncG1jX2NzX2VuYWJsZV9tZW0oY3MsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJKmJhc2UgPSByZXMtPnN0YXJ0OwogCWdwbWNfY3Nfc2V0X3Jlc2VydmVkKGNzLCAxKTsKIG91dDoKQEAgLTM3OCw3ICszNzgsNyBAQAogdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKQogewogCXNwaW5fbG9jaygmZ3BtY19tZW1fbG9jayk7Ci0JaWYgKGNzID49IEdQTUNfQ1NfTlVNIHx8ICFncG1jX2NzX3Jlc2VydmVkKGNzKSkgeworCWlmIChjcyA+PSBHUE1DX0NTX05VTSB8fCBjcyA8IDAgfHwgIWdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgbm9uLXJlc2VydmVkIEdQTUMgQ1MlZFxuIiwgY3MpOwogCQlCVUcoKTsKIAkJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDc1NzRiNmYuLjU2YmU4N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTI5NCwxNSArMjk0LDE3IEBACiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCWh3bW9kcyA9IG9tYXAzNHh4X2h3bW9kczsKIAotCW9tYXBfaHdtb2RfaW5pdChod21vZHMpOwotCW9tYXAyX211eF9pbml0KCk7CiAjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHRoZSBjbGtkZXYgaXMgcmVhZHkgKi8KIAkvKiBUaGUgT1BQIHRhYmxlcyBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlIGEgY2xrIGluaXQgKi8KKwlvbWFwX2h3bW9kX2luaXQoaHdtb2RzKTsKKwlvbWFwMl9tdXhfaW5pdCgpOwogCW9tYXBfcG1faWZfZWFybHlfaW5pdChtcHVfb3BwcywgZHNwX29wcHMsIGwzX29wcHMpOwogCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwogCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX3B3cmRtX2F1dG9kZXBzKTsKIAlvbWFwMl9jbGtfaW5pdCgpOworI2VuZGlmCiAJb21hcF9zZXJpYWxfZWFybHlfaW5pdCgpOworI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNAogCW9tYXBfaHdtb2RfbGF0ZV9pbml0KCk7CiAJb21hcF9wbV9pZl9pbml0KCk7CiAJb21hcDJfc2RyY19pbml0KHNkcmNfY3MwLCBzZHJjX2NzMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pb21tdTIuYwppbmRleCAyZDliNWNjLi40YTBlMWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkJbCA9IGlvbW11X3JlYWRfcmVnKG9iaiwgTU1VX1NZU1NUQVRVUyk7CiAJCWlmIChsICYgTU1VX1NZU19SRVNFVERPTkUpCiAJCQlicmVhazsKLQl9IHdoaWxlICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKwl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSk7CiAKIAlpZiAoIShsICYgTU1VX1NZU19SRVNFVERPTkUpKSB7CiAJCWRldl9lcnIob2JqLT5kZXYsICJjYW4ndCB0YWtlIG1tdSBvdXQgb2YgcmVzZXRcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwppbmRleCA2ZjcxZjM3Li5lZjU3YjM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtMzAsNiArMzAsMTQgQEAKICNkZWZpbmUgTUFJTEJPWF9JUlFfTkVXTVNHKHUpCQkoMSA8PCAoMiAqICh1KSkpCiAjZGVmaW5lIE1BSUxCT1hfSVJRX05PVEZVTEwodSkJCSgxIDw8ICgyICogKHUpICsgMSkpCiAKKy8qIFNZU0NPTkZJRzogcmVnaXN0ZXIgYml0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQVVUT0lETEUJKDEgPDwgMCkKKyNkZWZpbmUgU09GVFJFU0VUCSgxIDw8IDEpCisjZGVmaW5lIFNNQVJUSURMRQkoMiA8PCAzKQorCisvKiBTWVNTVEFUVVM6IHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9uICovCisjZGVmaW5lIFJFU0VURE9ORQkoMSA8PCAwKQorCiAjZGVmaW5lIE1CT1hfUkVHX1NJWkUJCQkweDEyMAogI2RlZmluZSBNQk9YX05SX1JFR1MJCQkoTUJPWF9SRUdfU0laRSAvIHNpemVvZih1MzIpKQogCkBAIC02OSwyMSArNzcsMzMgQEAKIC8qIE1haWxib3ggSC9XIHByZXBhcmF0aW9ucyAqLwogc3RhdGljIGludCBvbWFwMl9tYm94X3N0YXJ0dXAoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKIHsKLQl1bnNpZ25lZCBpbnQgbDsKKwl1MzIgbDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAltYm94X2lja19oYW5kbGUgPSBjbGtfZ2V0KE5VTEwsICJtYWlsYm94ZXNfaWNrIik7CiAJaWYgKElTX0VSUihtYm94X2lja19oYW5kbGUpKSB7Ci0JCXByaW50aygiQ291bGQgbm90IGdldCBtYWlsYm94ZXNfaWNrXG4iKTsKKwkJcHJfZXJyKCJDYW4ndCBnZXQgbWFpbGJveGVzX2lja1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljbGtfZW5hYmxlKG1ib3hfaWNrX2hhbmRsZSk7CiAKKwltYm94X3dyaXRlX3JlZyhTT0ZUUkVTRVQsIE1BSUxCT1hfU1lTQ09ORklHKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvIHsKKwkJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9TWVNTVEFUVVMpOworCQlpZiAobCAmIFJFU0VURE9ORSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCWlmICghKGwgJiBSRVNFVERPTkUpKSB7CisJCXByX2VycigiQ2FuJ3QgdGFrZSBtbXUgb3V0IG9mIHJlc2V0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9SRVZJU0lPTik7CiAJcHJfaW5mbygib21hcCBtYWlsYm94IHJldiAlZC4lZFxuIiwgKGwgJiAweGYwKSA+PiA0LCAobCAmIDB4MGYpKTsKIAotCS8qIHNldCBzbWFydC1pZGxlICYgYXV0b2lkbGUgKi8KLQlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU0NPTkZJRyk7Ci0JbCB8PSAweDAwMDAwMDExOworCWwgPSBTTUFSVElETEUgfCBBVVRPSURMRTsKIAltYm94X3dyaXRlX3JlZyhsLCBNQUlMQk9YX1NZU0NPTkZJRyk7CiAKIAlvbWFwMl9tYm94X2VuYWJsZV9pcnEobWJveCwgSVJRX1JYKTsKQEAgLTE1Niw2ICsxNzYsOSBAQAogCXUzMiBiaXQgPSAoaXJxID09IElSUV9UWCkgPyBwLT5ub3RmdWxsX2JpdCA6IHAtPm5ld21zZ19iaXQ7CiAKIAltYm94X3dyaXRlX3JlZyhiaXQsIHAtPmlycXN0YXR1cyk7CisKKwkvKiBGbHVzaCBwb3N0ZWQgd3JpdGUgZm9yIGlycSBzdGF0dXMgdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0cyAqLworCW1ib3hfcmVhZF9yZWcocC0+aXJxc3RhdHVzKTsKIH0KIAogc3RhdGljIGludCBvbWFwMl9tYm94X2lzX2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LApAQCAtMjc3LDcgKzMwMCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCW1ib3hfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKKwltYm94X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFtYm94X2Jhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCAyZGFhNTk1Li5iNWZhYzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTQ2MCw2ICs0NjAsOCBAQAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGMjJfMzRYWF9HUElPOSIsIDB4YTE4LAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFHOV8zNFhYX0dQSU8yMyIsIDB4NWVlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFIOF8zNFhYX0dQSU8yOSIsIDB4NWZhLAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIlU4XzM0WFhfR1BJTzU0X09VVCIsIDB4MGI0LApAQCAtNDcyLDYgKzQ3NCw4IEBACiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFHNF8zNFhYX0dQSU8xMzRfT1VUIiwgMHgxNjAsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNF8zNFhYX0dQSU8xMzVfT1VUIiwgMHgxNjIsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFFNF8zNFhYX0dQSU8xMzZfT1VUIiwgMHgxNjQsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGNl8zNFhYX0dQSU8xNDBfVVAiLCAweDE2YywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCAxYjRjMTYwLi4yZmM0ZDZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb25seSBPTUFQMyBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQkKKwogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInBtX2RlYnVnIiwgTlVMTCk7CiAJaWYgKElTX0VSUihkKSkKIAkJcmV0dXJuIFBUUl9FUlIoZCk7CkBAIC01NTEsNyArNTUxLDcgQEAKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGltZSIsIFNfSVJVR08sCiAJCWQsICh2b2lkICopREVCVUdfRklMRV9USU1FUlMsICZkZWJ1Z19mb3BzKTsKIAotCXB3cmRtX2Zvcl9lYWNoKHB3cmRtc19zZXR1cCwgKHZvaWQgKilkKTsKKwlwd3JkbV9mb3JfZWFjaF9ub2xvY2socHdyZG1zX3NldHVwLCAodm9pZCAqKWQpOwogCiAJcG1fZGJnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigicmVnaXN0ZXJzIiwgZCk7CiAJaWYgKElTX0VSUihwbV9kYmdfZGlyKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDBmZjVhNmMuLjg5NDYzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtNTEsOTcgKzUxLDExMiBAQAogCiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICptcHVfcHdyZG07CiAKLS8qIFBSQ00gSW50ZXJydXB0IEhhbmRsZXIgZm9yIHdha2V1cHMgKi8KKy8qCisgKiBQUkNNIEludGVycnVwdCBIYW5kbGVyIEhlbHBlciBGdW5jdGlvbgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2xlYXIgYW55IHdha2UtdXAgZXZlbnRzIGxhdGNoZWQKKyAqIGluIHRoZSBQUkNNIFBNX1dLU1RfeCByZWdpc3RlcnMuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSB3YWtlLXVwIGV2ZW50CisgKiBtYXkgb2NjdXIgd2hpbHN0IGF0dGVtcHRpbmcgdG8gY2xlYXIgYSBQTV9XS1NUX3ggcmVnaXN0ZXIgYW5kIHRodXMKKyAqIHNldCBhbm90aGVyIGJpdCBpbiB0aGlzIHJlZ2lzdGVyLiBBIHdoaWxlIGxvb3AgaXMgdXNlZCB0byBlbnN1cmUKKyAqIHRoYXQgYW55IHBlcmlwaGVyYWwgd2FrZS11cCBldmVudHMgb2NjdXJyaW5nIHdoaWxlIGF0dGVtcHRpbmcgdG8KKyAqIGNsZWFyIHRoZSBQTV9XS1NUX3ggYXJlIGRldGVjdGVkIGFuZCBjbGVhcmVkLgorICovCitzdGF0aWMgaW50IHByY21fY2xlYXJfbW9kX2lycXMoczE2IG1vZHVsZSwgdTggcmVncykKK3sKKwl1MzIgd2tzdCwgZmNsaywgaWNsaywgY2xrZW47CisJdTE2IHdrc3Rfb2ZmID0gKHJlZ3MgPT0gMykgPyBPTUFQMzQzMEVTMl9QTV9XS1NUMyA6IFBNX1dLU1QxOworCXUxNiBmY2xrX29mZiA9IChyZWdzID09IDMpID8gT01BUDM0MzBFUzJfQ01fRkNMS0VOMyA6IENNX0ZDTEtFTjE7CisJdTE2IGljbGtfb2ZmID0gKHJlZ3MgPT0gMykgPyBDTV9JQ0xLRU4zIDogQ01fSUNMS0VOMTsKKwl1MTYgZ3Jwc2VsX29mZiA9IChyZWdzID09IDMpID8KKwkJT01BUDM0MzBFUzJfUE1fTVBVR1JQU0VMMyA6IE9NQVAzNDMwX1BNX01QVUdSUFNFTDsKKwlpbnQgYyA9IDA7CisKKwl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIHdrc3Rfb2ZmKTsKKwl3a3N0ICY9IHBybV9yZWFkX21vZF9yZWcobW9kdWxlLCBncnBzZWxfb2ZmKTsKKwlpZiAod2tzdCkgeworCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgaWNsa19vZmYpOworCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgZmNsa19vZmYpOworCQl3aGlsZSAod2tzdCkgeworCQkJY2xrZW4gPSB3a3N0OworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBpY2xrX29mZik7CisJCQkvKgorCQkJICogRm9yIFVTQkhPU1QsIHdlIGRvbid0IGtub3cgd2hldGhlciBIT1NUMSBvcgorCQkJICogSE9TVDIgd29rZSB1cyB1cCwgc28gZW5hYmxlIGJvdGggZi1jbG9ja3MKKwkJCSAqLworCQkJaWYgKG1vZHVsZSA9PSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCkKKwkJCQljbGtlbiB8PSAxIDw8IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZUOworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBmY2xrX29mZik7CisJCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBtb2R1bGUsIHdrc3Rfb2ZmKTsKKwkJCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgd2tzdF9vZmYpOworCQkJYysrOworCQl9CisJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgbW9kdWxlLCBpY2xrX29mZik7CisJCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgbW9kdWxlLCBmY2xrX29mZik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQgX3ByY21faW50X2hhbmRsZV93YWtldXAodm9pZCkKK3sKKwlpbnQgYzsKKworCWMgPSBwcmNtX2NsZWFyX21vZF9pcnFzKFdLVVBfTU9ELCAxKTsKKwljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDEpOworCWMgKz0gcHJjbV9jbGVhcl9tb2RfaXJxcyhPTUFQMzQzMF9QRVJfTU9ELCAxKTsKKwlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDMpOworCQljICs9IHByY21fY2xlYXJfbW9kX2lycXMoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIDEpOworCX0KKworCXJldHVybiBjOworfQorCisvKgorICogUFJDTSBJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqIFRoZSBQUk1fSVJRU1RBVFVTX01QVSByZWdpc3RlciBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIFBSQ00gZm9yIHRoZSBNUFUuIFRoZXNlIGJpdHMgbXVzdCBiZSBjbGVhcmVkIGluCisgKiBvcmRlciB0byBjbGVhciB0aGUgUFJDTSBpbnRlcnJ1cHQuIFRoZSBQUkNNIGludGVycnVwdCBoYW5kbGVyIGlzCisgKiBpbXBsZW1lbnRlZCB0byBzaW1wbHkgY2xlYXIgdGhlIFBSTV9JUlFTVEFUVVNfTVBVIGluIG9yZGVyIHRvIGNsZWFyCisgKiB0aGUgUFJDTSBpbnRlcnJ1cHQuIFBsZWFzZSBub3RlIHRoYXQgYml0IDAgb2YgdGhlIFBSTV9JUlFTVEFUVVNfTVBVCisgKiByZWdpc3RlciBpbmRpY2F0ZXMgdGhhdCBhIHdha2UtdXAgZXZlbnQgaXMgcGVuZGluZyBmb3IgdGhlIE1QVSBhbmQKKyAqIHRoaXMgYml0IGNhbiBvbmx5IGJlIGNsZWFyZWQgaWYgdGhlIGFsbCB0aGUgd2FrZS11cCBldmVudHMgbGF0Y2hlZAorICogaW4gdGhlIHZhcmlvdXMgUE1fV0tTVF94IHJlZ2lzdGVycyBoYXZlIGJlZW4gY2xlYXJlZC4gVGhlIGludGVycnVwdAorICogaGFuZGxlciBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIGRvLXdoaWxlIGxvb3Agc28gdGhhdCBpZiBhIHdha2UtdXAKKyAqIGV2ZW50IG9jY3VycmVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgcHJjbSBpbnRlcnJ1cHQgaGFuZGxlcgorICogKHNldHRpbmcgYSBiaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgUE1fV0tTVF94IHJlZ2lzdGVyIGFuZCB0aHVzCisgKiBwcmV2ZW50aW5nIHVzIGZyb20gY2xlYXJpbmcgYml0IDAgb2YgdGhlIFBSTV9JUlFTVEFUVVNfTVBVIHJlZ2lzdGVyKQorICogdGhpcyB3b3VsZCBiZSBoYW5kbGVkLgorICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgcHJjbV9pbnRlcnJ1cHRfaGFuZGxlciAoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXUzMiB3a3N0LCBpcnFzdGF0dXNfbXB1OwotCXUzMiBmY2xrLCBpY2xrOworCXUzMiBpcnFzdGF0dXNfbXB1OworCWludCBjID0gMDsKIAotCS8qIFdLVVAgKi8KLQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tTVCk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJZmNsayA9IGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQkJcHJtX3dyaXRlX21vZF9yZWcod2tzdCwgV0tVUF9NT0QsIFBNX1dLU1QpOwotCQl3aGlsZSAocHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tTVCkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhmY2xrLCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQl9CisJZG8geworCQlpcnFzdGF0dXNfbXB1ID0gcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELAorCQkJCQlPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQpOwogCi0JLyogQ09SRSAqLwotCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JCWZjbGsgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCQljbV9zZXRfbW9kX3JlZ19iaXRzKHdrc3QsIENPUkVfTU9ELCBDTV9JQ0xLRU4xKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBDT1JFX01PRCwgQ01fRkNMS0VOMSk7Ci0JCXBybV93cml0ZV9tb2RfcmVnKHdrc3QsIENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JCXdoaWxlIChwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBQTV9XS1NUMSkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCX0KLQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpOwotCWlmICh3a3N0KSB7Ci0JCWljbGsgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBDT1JFX01PRCwgQ01fSUNMS0VOMyk7Ci0JCWNtX3NldF9tb2RfcmVnX2JpdHMod2tzdCwgQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpOwotCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpOwotCQl3aGlsZSAocHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpKQotCQkJY3B1X3JlbGF4KCk7Ci0JCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCQljbV93cml0ZV9tb2RfcmVnKGZjbGssIENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQl9CisJCWlmIChpcnFzdGF0dXNfbXB1ICYgKE9NQVAzNDMwX1dLVVBfU1QgfCBPTUFQMzQzMF9JT19TVCkpIHsKKwkJCWMgPSBfcHJjbV9pbnRfaGFuZGxlX3dha2V1cCgpOwogCi0JLyogUEVSICovCi0Jd2tzdCA9IHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tTVCk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pOwotCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTik7Ci0JCWNtX3NldF9tb2RfcmVnX2JpdHMod2tzdCwgT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pOwotCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS1NUKTsKLQkJd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tTVCkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pOwotCQljbV93cml0ZV9tb2RfcmVnKGZjbGssIE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTik7Ci0JfQotCi0JaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKLQkJLyogVVNCSE9TVCAqLwotCQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fV0tTVCk7Ci0JCWlmICh3a3N0KSB7Ci0JCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgICAgICAgQ01fSUNMS0VOKTsKLQkJCWZjbGsgPSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCSAgICAgICBDTV9GQ0xLRU4pOwotCQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkJCQkJICAgIENNX0lDTEtFTik7Ci0JCQljbV9zZXRfbW9kX3JlZ19iaXRzKHdrc3QsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgICAgQ01fRkNMS0VOKTsKLQkJCXBybV93cml0ZV9tb2RfcmVnKHdrc3QsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgIFBNX1dLU1QpOwotCQkJd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCQlQTV9XS1NUKSkKLQkJCQljcHVfcmVsYXgoKTsKLQkJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCSBDTV9JQ0xLRU4pOwotCQkJY21fd3JpdGVfbW9kX3JlZyhmY2xrLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkJCQkJIENNX0ZDTEtFTik7CisJCQkvKgorCQkJICogSXMgdGhlIE1QVSBQUkNNIGludGVycnVwdCBoYW5kbGVyIHJhY2luZyB3aXRoIHRoZQorCQkJICogSVZBMiBQUkNNIGludGVycnVwdCBoYW5kbGVyID8KKwkJCSAqLworCQkJV0FSTihjID09IDAsICJwcmNtOiBXQVJOSU5HOiBQUkNNIGluZGljYXRlZCBNUFUgd2FrZXVwICIKKwkJCSAgICAgImJ1dCBubyB3YWtldXAgc291cmNlcyBhcmUgbWFya2VkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFhYWCB3ZSBuZWVkIHRvIGV4cGFuZCBvdXIgUFJDTSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCQkJV0FSTigxLCAicHJjbTogV0FSTklORzogUFJDTSBpbnRlcnJ1cHQgcmVjZWl2ZWQsIGJ1dCAiCisJCQkgICAgICJubyBjb2RlIHRvIGhhbmRsZSBpdCAoJTA4eClcbiIsIGlycXN0YXR1c19tcHUpOwogCQl9Ci0JfQogCi0JaXJxc3RhdHVzX21wdSA9IHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwKLQkJCQkJIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoaXJxc3RhdHVzX21wdSwgT0NQX01PRCwKLQkJCSAgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKKwkJcHJtX3dyaXRlX21vZF9yZWcoaXJxc3RhdHVzX21wdSwgT0NQX01PRCwKKwkJCQkJT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKIAotCXdoaWxlIChwcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCkpCi0JCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC02MjQsNiArNjM5LDE3IEBACiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfSU9fRU4gfCBPTUFQMzQzMF9XS1VQX0VOLAogCQkJICBPQ1BfTU9ELCBPTUFQM19QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwogCisJLyogRW5hYmxlIHdha2V1cHMgaW4gUEVSICovCisJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfRU5fR1BJTzIgfCBPTUFQMzQzMF9FTl9HUElPMyB8CisJCQkgIE9NQVAzNDMwX0VOX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAorCQkJICBPTUFQMzQzMF9FTl9HUElPNiB8IE9NQVAzNDMwX0VOX1VBUlQzLAorCQkJICBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS0VOKTsKKwkvKiBhbmQgYWxsb3cgdGhlbSB0byB3YWtlIHVwIE1QVSAqLworCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0dSUFNFTF9HUElPMiB8IE9NQVAzNDMwX0VOX0dQSU8zIHwKKwkJCSAgT01BUDM0MzBfR1JQU0VMX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAorCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BJTzYgfCBPTUFQMzQzMF9FTl9VQVJUMywKKwkJCSAgT01BUDM0MzBfUEVSX01PRCwgT01BUDM0MzBfUE1fTVBVR1JQU0VMKTsKKwogCS8qIERvbid0IGF0dGFjaCBJVkEgaW50ZXJydXB0cyAqLwogCXBybV93cml0ZV9tb2RfcmVnKDAsIFdLVVBfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwpOwogCXBybV93cml0ZV9tb2RfcmVnKDAsIENPUkVfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCAyNTk0Y2JmLi5mMDAyODlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCkBAIC0yNzMsMzUgKzI3Myw1MCBAQAogfQogCiAvKioKLSAqIHB3cmRtX2Zvcl9lYWNoIC0gY2FsbCBmdW5jdGlvbiBvbiBlYWNoIHJlZ2lzdGVyZWQgY2xvY2tkb21haW4KKyAqIHB3cmRtX2Zvcl9lYWNoX25vbG9jayAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCiAgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKICAqCiAgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCiAgKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KLSAqIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcHdyZG1fcndsb2NrCi0gKiBoZWxkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCi0gKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUKLSAqIHBvd2VyZG9tYWluIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLiAgUmV0dXJucyB0aGUgbGFzdCByZXR1cm4KLSAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKLSAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZiB0aGUgZnVuY3Rpb24KLSAqIHBvaW50ZXIgaXMgbnVsbC4KKyAqIHRoZSBpdGVyYXRvci4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2gKKyAqIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZgorICogdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KICAqLwotaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKLQkJCXZvaWQgKnVzZXIpCitpbnQgcHdyZG1fZm9yX2VhY2hfbm9sb2NrKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCQl2b2lkICp1c2VyKQogewogCXN0cnVjdCBwb3dlcmRvbWFpbiAqdGVtcF9wd3JkbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFmbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWFkX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX3B3cmRtLCAmcHdyZG1fbGlzdCwgbm9kZSkgewogCQlyZXQgPSAoKmZuKSh0ZW1wX3B3cmRtLCB1c2VyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcHdyZG1fZm9yX2VhY2ggLSBjYWxsIGZ1bmN0aW9uIG9uIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyAncHdyZG1fZm9yX2VhY2hfbm9sb2NrKCknLCBidXQga2VlcHMgdGhlCisgKiAmcHdyZG1fcndsb2NrIGxvY2tlZCBmb3IgcmVhZGluZywgc28gbm8gcG93ZXJkb21haW4gc3RydWN0dXJlIG1hbmlwdWxhdGlvbgorICogZnVuY3Rpb25zIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgY2FsbGJhY2ssIGFsdGhvdWdoIGhhcmR3YXJlIHBvd2VyZG9tYWluCisgKiBjb250cm9sIGZ1bmN0aW9ucyBhcmUgZmluZS4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCXZvaWQgKnVzZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCXJldCA9IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhmbiwgdXNlcik7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggM2E1MjljNy4uNTRkZmViNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0xMDksMTYgKzEwOSw2IEBACiAJCS5yZWdzaGlmdAk9IDIsCiAJCS51YXJ0Y2xrCT0gT01BUDI0WFhfQkFTRV9CQVVEICogMTYsCiAJfSwgewotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAotCQkubWFwYmFzZQk9IE9NQVBfVUFSVDRfQkFTRSwKLQkJLmlycQkJPSA3MCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAotCX0sIHsKLSNlbmRpZgogCQkuZmxhZ3MJCT0gMAogCX0KIH07CkBAIC0xMjYsNyArMTE2LDcgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YTNbXSA9IHsKIAl7Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAorCQkubWVtYmFzZQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUF9VQVJUNF9CQVNFKSwKIAkJLm1hcGJhc2UJPSBPTUFQX1VBUlQ0X0JBU0UsCiAJCS5pcnEJCT0gNzAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKQEAgLTU3OSw3ICs1NjksNyBAQAogCXsKIAkJLnBkZXYgPSB7CiAJCQkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAotCQkJLmlkCQkJPSAzCisJCQkuaWQJCQk9IDMsCiAJCQkuZGV2CQkJPSB7CiAJCQkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YTMsCiAJCQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggODljOTkyYi4uYTZmOGVhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC0yMSw2ICsyMSwxMSBAQAogCiBjb25maWcgQ1BVX1BYQTkzNQogCWJvb2wgIlBYQTkzNSAoY29kZW5hbWUgVGF2b3ItUDY1KSIKKwlzZWxlY3QgQ1BVX1BYQTkzMAorCitjb25maWcgQ1BVX1BYQTk1MAorCWJvb2wgIlBYQTk1MCAoY29kZW5hbWUgVGF2b3ItUFYyKSIKKwlzZWxlY3QgQ1BVX1BYQTkzMAogCiBlbmRtZW51CiAKQEAgLTc5LDYgKzg0LDEyIEBACiAJYm9vbCAiTmVjIE1vYmlsZXBybyA5MDAvYyIKIAlzZWxlY3QgUFhBMjV4CiAKK2NvbmZpZyBNQUNIX0JBTExPT04zCisJYm9vbCAiQmFsbG9vbiAzIGJvYXJkIgorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisJc2VsZWN0IFBYQV9IQVZFX0JPQVJEX0lSUVMKKwogY29uZmlnIEFSQ0hfUFhBX0lEUAogCWJvb2wgIkFjY2VsZW50IFhzY2FsZSBJRFAiCiAJc2VsZWN0IFBYQTI1eApAQCAtMzcxLDYgKzM4MiwxNSBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFBhbG0gVHVuZ3N0ZW58RTIKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgogCitjb25maWcgTUFDSF9QQUxNVEMKKwlib29sICJQYWxtIFR1bmdzdGVufEMiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX1BYQV9QQUxNCisJc2VsZWN0IFBYQTI1eAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBQYWxtIFR1bmdzdGVufEMKKwkgIGhhbmRoZWxkIGNvbXB1dGVyLgorCiBjb25maWcgTUFDSF9QQUxNVDUKIAlib29sICJQYWxtIFR1bmdzdGVufFQ1IgogCWRlZmF1bHQgeQpAQCAtNDU4LDYgKzQ3OCw3IEBACiAJc2VsZWN0IFBYQTI3eAogCXNlbGVjdCBJV01NWFQKIAlzZWxlY3QgSEFWRV9QV00KKwlzZWxlY3QgUFhBX0hBVkVfQk9BUkRfSVJRUwogCiBjb25maWcgTUFDSF9FWlhfQTc4MAogCWJvb2wgIk1vdG9yb2xhIEVaWCBBNzgwIgpAQCAtNDg5LDYgKzUxMCwyMSBAQAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gUFhBX0VaWAogCitjb25maWcgTUFDSF9YQ0VQCisJYm9vbCAiSXNrcmF0ZWwgRWxlY3Ryb25pY3MgWENFUCIKKwlzZWxlY3QgUFhBMjV4CisJc2VsZWN0IE1URAorCXNlbGVjdCBNVERfUEFSVElUSU9OUworCXNlbGVjdCBNVERfUEhZU01BUAorCXNlbGVjdCBNVERfQ0ZJX0lOVEVMRVhUCisJc2VsZWN0IE1URF9DRkkKKwlzZWxlY3QgTVREX0NIQVIKKwlzZWxlY3QgU01DOTFYCisJc2VsZWN0IFBYQV9TU1AKKwloZWxwCisJICBQWEEyNTUgYmFzZWQgU2luZ2xlIEJvYXJkIENvbXB1dGVyIHdpdGggU01DIDkxQzExMSBldGhlcm5ldCBjaGlwIGFuZCA2NCBNQiBvZiBmbGFzaC4KKwkgIFR1bmVkIGZvciB1c2FnZSBpbiBMaWJlcmEgaW5zdHJ1bWVudHMgZm9yIHBhcnRpY2xlIGFjY2VsZXJhdG9ycy4KKwogZW5kbWVudQogCiBjb25maWcgUFhBMjV4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IGQ0YzYxMjIuLmYxMGUxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBACiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKQkrPSBsdWJib2NrLm8KIG9iai0kKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKSArPSBscGQyNzAubwogb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKQkrPSBtYWluc3RvbmUubworb2JqLSQoQ09ORklHX01BQ0hfQkFMTE9PTjMpCSs9IGJhbGxvb24zLm8KIG9iai0kKENPTkZJR19NQUNIX01QOTAwQykJKz0gbXA5MDAubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0lEUCkJKz0gaWRwLm8KIG9iai0kKENPTkZJR19NQUNIX1RSSVpFUFM0KQkrPSB0cml6ZXBzNC5vCkBAIC01OCw2ICs1OSw3IEBACiBvYmotJChDT05GSUdfTUFDSF9FNDAwKQkJKz0gZTQwMC5vCiBvYmotJChDT05GSUdfTUFDSF9FODAwKQkJKz0gZTgwMC5vCiBvYmotJChDT05GSUdfTUFDSF9QQUxNVEUyKQkrPSBwYWxtdGUyLm8KK29iai0kKENPTkZJR19NQUNIX1BBTE1UQykJKz0gcGFsbXRjLm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UNSkJKz0gcGFsbXQ1Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UWCkJKz0gcGFsbXR4Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1MRCkJKz0gcGFsbWxkLm8KQEAgLTc4LDYgKzgwLDggQEAKIG9iai0kKENPTkZJR19NQUNIX0NNX1gzMDApICAgICAgKz0gY20teDMwMC5vCiBvYmotJChDT05GSUdfUFhBX0VaWCkgICAgICAgICAgICs9IGV6eC5vCiAKK29iai0kKENPTkZJR19NQUNIX1hDRVApICAgICAgICAgKz0geGNlcC5vCisKIG9iai0kKENPTkZJR19NQUNIX0lOVEVMTU9URTIpICAgKz0gaW1vdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX1NUQVJHQVRFMikJKz0gc3RhcmdhdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX0NTQjcyNikJKz0gY3NiNzI2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMzEzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgQmFsbG9vbmJvYXJkLm9yZyBCYWxsb29uMyBib2FyZC4KKyAqCisgKiAgQXV0aG9yOglOaWNrIEJhbmUsIFdvb2tleSwgSm9uYXRoYW4gTWNEb3dlbGwKKyAqICBDcmVhdGVkOglKdW5lLCAyMDA2CisgKiAgQ29weXJpZ2h0OglUb2J5IENodXJjaGlsbCBMdGQKKyAqICBEZXJpdmVkIGZyb20gbWFpbnN0b25lLmMsIGJ5IE5pY28gUGl0cmUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9iYWxsb29uMy5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2lycV9lbmFibGVkOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19mZWF0dXJlc19wcmVzZW50ID0KKwkJKDEgPDwgQkFMTE9PTjNfRkVBVFVSRV9PSENJKSB8ICgxIDw8IEJBTExPT04zX0ZFQVRVUkVfQ0YpIHwKKwkJKDEgPDwgQkFMTE9PTjNfRkVBVFVSRV9BVURJTykgfAorCQkoMSA8PCBCQUxMT09OM19GRUFUVVJFX1RPUFBPTFkpOworCitpbnQgYmFsbG9vbjNfaGFzKGVudW0gYmFsbG9vbjNfZmVhdHVyZXMgZmVhdHVyZSkKK3sKKwlyZXR1cm4gKGJhbGxvb24zX2ZlYXR1cmVzX3ByZXNlbnQgJiAoMSA8PCBmZWF0dXJlKSkgPyAxIDogMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJhbGxvb24zX2hhcyk7CisKK2ludCBfX2luaXQgcGFyc2VfYmFsbG9vbjNfZmVhdHVyZXMoY2hhciAqYXJnKQoreworCWlmICghYXJnKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzdHJpY3Rfc3RydG91bChhcmcsIDAsICZiYWxsb29uM19mZWF0dXJlc19wcmVzZW50KTsKK30KK2Vhcmx5X3BhcmFtKCJiYWxsb29uM19mZWF0dXJlcyIsIHBhcnNlX2JhbGxvb24zX2ZlYXR1cmVzKTsKKworc3RhdGljIHZvaWQgYmFsbG9vbjNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgYmFsbG9vbjNfaXJxID0gKGlycSAtIEJBTExPT04zX0lSUSgwKSk7CisJYmFsbG9vbjNfaXJxX2VuYWJsZWQgJj0gfigxIDw8IGJhbGxvb24zX2lycSk7CisJX19yYXdfd3JpdGVsKH5iYWxsb29uM19pcnFfZW5hYmxlZCwgQkFMTE9PTjNfSU5UX0NPTlRST0xfUkVHKTsKK30KKworc3RhdGljIHZvaWQgYmFsbG9vbjNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBiYWxsb29uM19pcnEgPSAoaXJxIC0gQkFMTE9PTjNfSVJRKDApKTsKKwliYWxsb29uM19pcnFfZW5hYmxlZCB8PSAoMSA8PCBiYWxsb29uM19pcnEpOworCV9fcmF3X3dyaXRlbCh+YmFsbG9vbjNfaXJxX2VuYWJsZWQsIEJBTExPT04zX0lOVF9DT05UUk9MX1JFRyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmFsbG9vbjNfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIkZQR0EiLAorCS5hY2sJCT0gYmFsbG9vbjNfbWFza19pcnEsCisJLm1hc2sJCT0gYmFsbG9vbjNfbWFza19pcnEsCisJLnVubWFzawkJPSBiYWxsb29uM191bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgYmFsbG9vbjNfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGxvbmcgcGVuZGluZyA9IF9fcmF3X3JlYWRsKEJBTExPT04zX0lOVF9DT05UUk9MX1JFRykgJgorCQkJCQliYWxsb29uM19pcnFfZW5hYmxlZDsKKworCWRvIHsKKwkJLyogY2xlYXIgdXNlbGVzcyBlZGdlIG5vdGlmaWNhdGlvbiAqLworCQlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQkJZGVzYy0+Y2hpcC0+YWNrKEJBTExPT04zX0FVWF9OSVJRKTsKKwkJd2hpbGUgKHBlbmRpbmcpIHsKKwkJCWlycSA9IEJBTExPT04zX0lSUSgwKSArIF9fZmZzKHBlbmRpbmcpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJCQlwZW5kaW5nICY9IHBlbmRpbmcgLSAxOworCQl9CisJCXBlbmRpbmcgPSBfX3Jhd19yZWFkbChCQUxMT09OM19JTlRfQ09OVFJPTF9SRUcpICYKKwkJCQliYWxsb29uM19pcnFfZW5hYmxlZDsKKwl9IHdoaWxlIChwZW5kaW5nKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCXB4YTI3eF9pbml0X2lycSgpOworCS8qIHNldHVwIGV4dHJhIEJhbGxvb24zIGlycXMgKi8KKwlmb3IgKGlycSA9IEJBTExPT04zX0lSUSgwKTsgaXJxIDw9IEJBTExPT04zX0lSUSg3KTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmJhbGxvb24zX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoQkFMTE9PTjNfQVVYX05JUlEsIGJhbGxvb24zX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX3R5cGUoQkFMTE9PTjNfQVVYX05JUlEsIElSUV9UWVBFX0VER0VfRkFMTElORyk7CisKKwlwcl9kZWJ1ZygiJXM6IGNoYWluZWQgaGFuZGxlciBpbnN0YWxsZWQgLSBpcnEgJWQgYXV0b21hdGljYWxseSAiCisJCSJlbmFibGVkXG4iLCBfX2Z1bmNfXywgQkFMTE9PTjNfQVVYX05JUlEpOworfQorCitzdGF0aWMgdm9pZCBiYWxsb29uM19iYWNrbGlnaHRfcG93ZXIoaW50IG9uKQoreworCXByX2RlYnVnKCIlczogcG93ZXIgaXMgJXNcbiIsIF9fZnVuY19fLCBvbiA/ICJvbiIgOiAib2ZmIik7CisJZ3Bpb19zZXRfdmFsdWUoQkFMTE9PTjNfR1BJT19SVU5fQkFDS0xJR0hULCBvbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2xjZF9waW5fY29uZmlnW10gPSB7CisJLyogTENEIC0gMTZicHAgQWN0aXZlIFRGVCAqLworCUdQSU81OF9MQ0RfTEREXzAsCisJR1BJTzU5X0xDRF9MRERfMSwKKwlHUElPNjBfTENEX0xERF8yLAorCUdQSU82MV9MQ0RfTEREXzMsCisJR1BJTzYyX0xDRF9MRERfNCwKKwlHUElPNjNfTENEX0xERF81LAorCUdQSU82NF9MQ0RfTEREXzYsCisJR1BJTzY1X0xDRF9MRERfNywKKwlHUElPNjZfTENEX0xERF84LAorCUdQSU82N19MQ0RfTEREXzksCisJR1BJTzY4X0xDRF9MRERfMTAsCisJR1BJTzY5X0xDRF9MRERfMTEsCisJR1BJTzcwX0xDRF9MRERfMTIsCisJR1BJTzcxX0xDRF9MRERfMTMsCisJR1BJTzcyX0xDRF9MRERfMTQsCisJR1BJTzczX0xDRF9MRERfMTUsCisJR1BJTzc0X0xDRF9GQ0xLLAorCUdQSU83NV9MQ0RfTENMSywKKwlHUElPNzZfTENEX1BDTEssCisJR1BJTzc3X0xDRF9CSUFTLAorCisJR1BJTzk5X0dQSU8sCQkvKiBCYWNrbGlnaHQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIGJhbGxvb24zX2xjZF9tb2Rlc1tdID0geworCXsKKwkJLnBpeGNsb2NrCQk9IDM4MDAwLAorCQkueHJlcwkJCT0gNDgwLAorCQkueXJlcwkJCT0gNjQwLAorCQkuYnBwCQkJPSAxNiwKKwkJLmhzeW5jX2xlbgkJPSA4LAorCQkubGVmdF9tYXJnaW4JCT0gOCwKKwkJLnJpZ2h0X21hcmdpbgkJPSA4LAorCQkudnN5bmNfbGVuCQk9IDIsCisJCS51cHBlcl9tYXJnaW4JCT0gNCwKKwkJLmxvd2VyX21hcmdpbgkJPSA1LAorCQkuc3luYwkJCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gYmFsbG9vbjNfcHhhZmJfaW5mbyA9IHsKKwkubW9kZXMJCQk9IGJhbGxvb24zX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCQk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyCT0gYmFsbG9vbjNfYmFja2xpZ2h0X3Bvd2VyLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfbW1jX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPMzJfTU1DX0NMSywKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCUdQSU8xMTJfTU1DX0NNRCwKK307CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoKDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKKwkJcHJfZGVidWcoIiVzOiBvblxuIiwgX19mdW5jX18pOworCQkvKiBGSVhNRSBzb21ldGhpbmcgdG8gcHJvZCBoZXJlPyAqLworCX0gZWxzZSB7CisJCXByX2RlYnVnKCIlczogb2ZmXG4iLCBfX2Z1bmNfXyk7CisJCS8qIEZJWE1FIHNvbWV0aGluZyB0byBwcm9kIGhlcmU/ICovCisJfQorfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIgCT0gYmFsbG9vbjNfbWNpX3NldHBvd2VyLAorfTsKKworc3RhdGljIGludCBiYWxsb29uM191ZGNfaXNfY29ubmVjdGVkKHZvaWQpCit7CisJcHJfZGVidWcoIiVzOiB1ZGMgY29ubmVjdGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX3VkY19jb21tYW5kKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6CisJCVVQMk9DUiB8PSAoVVAyT0NSX0RQUFVFICsgVVAyT0NSX0RQUFVCRSk7CisJCXByX2RlYnVnKCIlczogY29ubmVjdFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6CisJCVVQMk9DUiAmPSB+VVAyT0NSX0RQUFVFOworCQlwcl9kZWJ1ZygiJXM6IGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIGJhbGxvb24zX3VkY19pbmZvID0geworCS51ZGNfaXNfY29ubmVjdGVkID0gYmFsbG9vbjNfdWRjX2lzX2Nvbm5lY3RlZCwKKwkudWRjX2NvbW1hbmQgICAgICA9IGJhbGxvb24zX3VkY19jb21tYW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19vaGNpX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPODhfVVNCSDFfUFdSLAorCUdQSU84OV9VU0JIMV9QRU4sCit9OworCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLnBvcnRfbW9kZQk9IFBNTV9QRVJQT1JUX01PREUsCisJLmZsYWdzCQk9IEVOQUJMRV9QT1JUX0FMTCB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogU2VsZWN0IEJUVUFSVCAnQ09NMS90dHlTMCcgYXMgSU8gb3B0aW9uIGZvciBwaW5zIDQyLzQzLzQ0LzQ1ICovCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwkvKiBXYWtldXAgR1BJTyAqLworCUdQSU8xX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAorCisJLyogTkFORCAmIElETEUgTEVEIEdQSU9zICovCisJR1BJTzlfR1BJTywKKwlHUElPMTBfR1BJTywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgYmFsbG9vbjNfZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOmlkbGUiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9JRExFLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOm5hbmQiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9OQU5ELAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfZ3Bpb19sZWRzX3BsYXRmb3JtX2RhdGEgPSB7CisJLmxlZHMJCT0gYmFsbG9vbjNfZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJhbGxvb24zbGVkX2RldmljZSA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmJhbGxvb24zX2dwaW9fbGVkc19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfaW5pdCh2b2lkKQoreworCXByX2luZm8oIkluaXRpYWxpc2luZyBCYWxsb29uM1xuIik7CisKKwkvKiBzeXN0ZW0gYnVzIGFyYml0ZXIgc2V0dGluZworCSAqIC0gQ29yZV9QYXJrCisJICogLSBMQ0Rfd3Q6RE1BX3d0OkNPUkVfV3QgPSAyOjM6NAorCSAqLworCUFSQl9DTlRSTCA9IEFSQl9DT1JFX1BBUksgfCAweDIzNDsKKworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX0FVRElPKSkKKwkJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisKKwlpZiAoYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfVE9QUE9MWSkpIHsKKwkJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfbGNkX3Bpbl9jb25maWcpKTsKKwkJZ3Bpb19yZXF1ZXN0KEJBTExPT04zX0dQSU9fUlVOX0JBQ0tMSUdIVCwKKwkJCSJMQ0QgQmFja2xpZ2h0IFBvd2VyIik7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQsIDEpOworCQlzZXRfcHhhX2ZiX2luZm8oJmJhbGxvb24zX3B4YWZiX2luZm8pOworCX0KKworCWlmIChiYWxsb29uM19oYXMoQkFMTE9PTjNfRkVBVFVSRV9NTUMpKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX21tY19waW5fY29uZmlnKSk7CisJCXB4YV9zZXRfbWNpX2luZm8oJmJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhKTsKKwl9CisJcHhhX3NldF9maWNwX2luZm8oJmJhbGxvb24zX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CisJaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX09IQ0kpKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX29oY2lfcGluX2NvbmZpZykpOworCQlweGFfc2V0X29oY2lfaW5mbygmYmFsbG9vbjNfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKKwl9CisJcHhhX3NldF91ZGNfaW5mbygmYmFsbG9vbjNfdWRjX2luZm8pOworCisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfcGluX2NvbmZpZykpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiYWxsb29uM2xlZF9kZXZpY2UpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGJhbGxvb24zX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsJLyogQ1BMRC9GUEdBICovCisJCS52aXJ0dWFsCT0gIEJBTExPT04zX0ZQR0FfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEJBTExPT04zX0ZQR0FfUEhZUyksCisJCS5sZW5ndGgJCT0gQkFMTE9PTjNfRlBHQV9MRU5HVEgsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQoYmFsbG9vbjNfaW9fZGVzYywgQVJSQVlfU0laRShiYWxsb29uM19pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQkFMTE9PTjMsICJCYWxsb29uMyIpCisJLyogTWFpbnRhaW5lcjogTmljayBCYW5lLiAqLworCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IGJhbGxvb24zX21hcF9pbywKKwkuaW5pdF9pcnEJPSBiYWxsb29uM19pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gYmFsbG9vbjNfaW5pdCwKKwkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MTAwLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IDU1OTliY2UuLjk3OGEzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtMTIsNyArMTIsNiBAQAogCXVuc2lnbmVkIGludAkJY2tlbjsKIAl1bnNpZ25lZCBpbnQJCWRlbGF5OwogCXVuc2lnbmVkIGludAkJZW5hYmxlZDsKLQlzdHJ1Y3QgY2xrCQkqb3RoZXI7CiB9OwogCiAjZGVmaW5lIElOSVRfQ0xLUkVHKF9jbGssX2Rldm5hbWUsX2Nvbm5hbWUpCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKaW5kZXggMWQyY2VjMi4uZWVhNzhiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwpAQCAtMTMsMTMgKzEzLDE4IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDx2aWRlby9tYnhmYi5oPgogCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KKwogI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMzQsNiArMzksMTAgQEAKIC8qIE1NQyBwb3dlciBlbmFibGUgKi8KICNkZWZpbmUgR1BJTzEwNV9NTUNfUE9XRVIJKDEwNSkKIAorLyogV0xBTiBHUElPUyAqLworI2RlZmluZSBHUElPMTlfV0xBTl9TVFJBUAkoMTkpCisjZGVmaW5lIEdQSU8xMDJfV0xBTl9SU1QJKDEwMikKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY214MjcwX3Bpbl9jb25maWdbXSA9IHsKIAkvKiBBQyc5NyAqLwogCUdQSU8yOF9BQzk3X0JJVENMSywKQEAgLTk0LDggKzEwMyw4IEBACiAJR1BJTzI2X1NTUDFfUlhELAogCiAJLyogU1NQMiAqLwotCUdQSU8xOV9TU1AyX1NDTEssCi0JR1BJTzE0X1NTUDJfU0ZSTSwKKwlHUElPMTlfR1BJTywJLyogU1NQMiBjbG9jayBpcyB1c2VkIGFzIEdQSU8gZm9yIExpYmVydGFzIHBpbi1zdHJhcCAqLworCUdQSU8xNF9HUElPLAogCUdQSU84N19TU1AyX1RYRCwKIAlHUElPODhfU1NQMl9SWEQsCiAKQEAgLTEyMyw2ICsxMzIsNyBAQAogCUdQSU8wX0dQSU8JfCBXQUtFVVBfT05fRURHRV9CT1RILAogCUdQSU8xMDVfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTU1DL1NEIHBvd2VyICovCiAJR1BJTzUzX0dQSU8sCQkJCS8qIFBDIGNhcmQgcmVzZXQgKi8KKwlHUElPMTAyX0dQSU8sCQkJCS8qIFdMQU4gcmVzZXQgKi8KIAogCS8qIE5BTkQgY29udHJvbHMgKi8KIAlHUElPMTFfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTkFORCBDRSMgKi8KQEAgLTEzMSw2ICsxNDEsNyBAQAogCS8qIGludGVycnVwdHMgKi8KIAlHUElPMTBfR1BJTywJLyogRE05MDAwIGludGVycnVwdCAqLwogCUdQSU84M19HUElPLAkvKiBNTUMgY2FyZCBkZXRlY3QgKi8KKwlHUElPOTVfR1BJTywJLyogV0xBTiBpbnRlcnJ1cHQgKi8KIH07CiAKIC8qIFYzMDIwIFJUQyAqLwpAQCAtMjcxLDU2ICsyODIsMTIgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfTU9EVUxFKQotc3RhdGljIGludCBjbXgyNzBfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgaXJxX2hhbmRsZXJfdCBjbXgyNzBfZGV0ZWN0X2ludCwKLQkJCSAgIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTA1X01NQ19QT1dFUiwgIk1NQy9TRCBwb3dlciIpOwotCWlmIChlcnIpIHsKLQkJZGV2X3dhcm4oZGV2LCAicG93ZXIgZ3BpbyB1bmF2YWlsYWJsZVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDVfTU1DX1BPV0VSLCAwKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKENNWDI3MF9NTUNfSVJRLCBjbXgyNzBfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlncGlvX2ZyZWUoR1BJTzEwNV9NTUNfUE9XRVIpOwotCQlkZXZfZXJyKGRldiwgImNteDI3MF9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCIKLQkJCSIgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBjbXgyNzBfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlkZXZfZGJnKGRldiwgInBvd2VyIG9uXG4iKTsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNV9NTUNfUE9XRVIsIDApOwotCX0gZWxzZSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfTU1DX1BPV0VSLCAxKTsKLQkJZGV2X2RiZyhkZXYsICJwb3dlciBvZmZcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY214MjcwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShDTVgyNzBfTU1DX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU8xMDVfTU1DX1BPV0VSKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbXgyNzBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbXgyNzBfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IGNteDI3MF9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gY214MjcwX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODNfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU8xMDVfTU1DX1BPV0VSLAorCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX2luaXRfbW1jKHZvaWQpCkBAIC0zMzEsNiArMjk4LDEwMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X21tYyh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgY21feDI3MF9zcGlfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAxLAorCS5lbmFibGVfZG1hCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIGNtX3gyNzBfbGliZXJ0YXNfY2hpcCA9IHsKKwkucnhfdGhyZXNob2xkCT0gMSwKKwkudHhfdGhyZXNob2xkCT0gMSwKKwkudGltZW91dAk9IDEwMDAsCisJLmdwaW9fY3MJPSAxNCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNtX3gyNzBfbGliZXJ0YXNfcGluX2NvbmZpZ1tdID0geworCS8qIFNTUDIgKi8KKwlHUElPMTlfU1NQMl9TQ0xLLAorCUdQSU8xNF9HUElPLAorCUdQSU84N19TU1AyX1RYRCwKKwlHUElPODhfU1NQMl9SWEQsCisKK307CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc19zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCBlcnIgPSBncGlvX3JlcXVlc3QoR1BJTzE5X1dMQU5fU1RSQVAsICJXTEFOIFNUUkFQIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTAyX1dMQU5fUlNULCAiV0xBTiBSU1QiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX3N0cmFwOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJTzE5X1dMQU5fU1RSQVAsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjbV94MjcwX2xpYmVydGFzX3Bpbl9jb25maWcpKTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDEpOworCW1zbGVlcCgxMDApOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpX3NldHVwKHNwaSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfc3RyYXA6CisJZ3Bpb19mcmVlKEdQSU8xOV9XTEFOX1NUUkFQKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc190ZWFyZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWdwaW9fZnJlZShHUElPMTAyX1dMQU5fUlNUKTsKKwlncGlvX2ZyZWUoR1BJTzE5X1dMQU5fU1RSQVApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsaWJlcnRhc19zcGlfcGxhdGZvcm1fZGF0YSBjbV94MjcwX2xpYmVydGFzX3BkYXRhID0geworCS51c2VfZHVtbXlfd3JpdGVzCT0gMSwKKwkuc2V0dXAJCQk9IGNtX3gyNzBfbGliZXJ0YXNfc2V0dXAsCisJLnRlYXJkb3duCQk9IGNtX3gyNzBfbGliZXJ0YXNfdGVhcmRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGNtX3gyNzBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJsaWJlcnRhc19zcGkiLAorCQkubWF4X3NwZWVkX2h6CQk9IDEzMDAwMDAwLAorCQkuYnVzX251bQkJPSAyLAorCQkuaXJxCQkJPSBncGlvX3RvX2lycSg5NSksCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJmNtX3gyNzBfbGliZXJ0YXNfY2hpcCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNtX3gyNzBfbGliZXJ0YXNfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfaW5pdF9zcGkodm9pZCkKK3sKKwlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZjbV94MjcwX3NwaV9pbmZvKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRShjbV94MjcwX3NwaV9kZXZpY2VzKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X3NwaSh2b2lkKSB7fQorI2VuZGlmCisKIHZvaWQgX19pbml0IGNteDI3MF9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY214MjcwX3Bpbl9jb25maWcpKTsKQEAgLTM0Myw0ICs0MDQsNSBAQAogCWNteDI3MF9pbml0X21tYygpOwogCWNteDI3MF9pbml0X29oY2koKTsKIAljbXgyNzBfaW5pdF8yNzAwRygpOworCWNteDI3MF9pbml0X3NwaSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IDQ2NWRhMjYuLjEwMjkxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTQzLDEwICs0MywxMCBAQAogCiAjZGVmaW5lIENNX1gzMDBfRVRIX1BIWVMJMHgwODAwMDAxMAogCi0jZGVmaW5lIEdQSU84Ml9NTUMyX0lSUQkJKDgyKQotI2RlZmluZSBHUElPODVfTU1DMl9XUAkJKDg1KQorI2RlZmluZSBHUElPODJfTU1DX0lSUQkJKDgyKQorI2RlZmluZSBHUElPODVfTU1DX1dQCQkoODUpCiAKLSNkZWZpbmUJQ01fWDMwMF9NTUMyX0lSUQlJUlFfR1BJTyhHUElPODJfTU1DMl9JUlEpCisjZGVmaW5lCUNNX1gzMDBfTU1DX0lSUQkJSVJRX0dQSU8oR1BJTzgyX01NQ19JUlEpCiAKICNkZWZpbmUgR1BJTzk1X1JUQ19DUwkJKDk1KQogI2RlZmluZSBHUElPOTZfUlRDX1dSCQkoOTYpCkBAIC0yOTIsODIgKzI5MiwzNSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCi0vKiBUaGUgZmlyc3QgTU1DIHNsb3Qgb2YgQ00tWDMwMCBpcyBoYXJkd2lyZWQgdG8gTGliZXJ0YXMgY2FyZCBhbmQgaGFzCi0gICBubyBkZXRlY3Rpb24vcm8gcGlucyAqLwotc3RhdGljIGludCBjbV94MzAwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBpcnFfaGFuZGxlcl90IGNtX3gzMDBfZGV0ZWN0X2ludCwKLQkJCSAgICB2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjbV94MzAwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyMCwKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNtX3gzMDBfbWNpX2luaXQsCi0JLmV4aXQJCT0gY21feDMwMF9tY2lfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODJfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU84NV9NTUNfV1AsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCi1zdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU84NV9NTUMyX1dQKTsKLX0KLQorLyogVGhlIHNlY29uZCBNTUMgc2xvdCBvZiBDTS1YMzAwIGlzIGhhcmR3aXJlZCB0byBMaWJlcnRhcyBjYXJkIGFuZCBoYXMKKyAgIG5vIGRldGVjdGlvbi9ybyBwaW5zICovCiBzdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgaXJxX2hhbmRsZXJfdCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgICAgIHZvaWQgKmRhdGEpCisJdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBzZXR1cCBHUElPIGZvciBDTS1YMzAwIE1NQyBjb250cm9sbGVyCi0JICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU84Ml9NTUMyX0lSUSwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJTzgyX01NQzJfSVJRKTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPODVfTU1DMl9XUCwgIm1tYyB3cml0ZSBwcm90ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF93cDsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPODVfTU1DMl9XUCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDTV9YMzAwX01NQzJfSVJRLCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogTU1DL1NEL1NESU86ICIKLQkJCQkiY2FuJ3QgcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7Ci0JfQotCiAJcmV0dXJuIDA7Ci0KLWVycl9yZXF1ZXN0X2lycToKLQlncGlvX2ZyZWUoR1BJTzg1X01NQzJfV1ApOwotZXJyX3JlcXVlc3Rfd3A6Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci1lcnJfcmVxdWVzdF9jZDoKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBjbV94MzAwX21jaTJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZnJlZV9pcnEoQ01fWDMwMF9NTUMyX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci0JZ3Bpb19mcmVlKEdQSU84NV9NTUMyX1dQKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbV94MzAwX21jaTJfaW5pdCwKLQkuZXhpdAkJPSBjbV94MzAwX21jaTJfZXhpdCwKLQkuZ2V0X3JvCQk9IGNtX3gzMDBfbWNpMl9ybywKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBjbV94MzAwX21jaTJfaW5pdCwKKwkuZXhpdAkJCT0gY21feDMwMF9tY2kyX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3gzMDBfaW5pdF9tbWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IDdjOWMzNGMuLjM3YzIzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtMTcyLDYgKzE3Miw3IEBACiB7CiAJY29saWJyaV9weGEzMDBfaW5pdF9ldGgoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X29oY2koKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X25hbmQoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X2xjZCgpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbGNkKG1mcF90b19ncGlvKEdQSU8zOV9HUElPKSk7CiAJY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwppbmRleCBhMThkMzdiLi5lYzBlMTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTE0NSw3ICsxNDYsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzIwX2luaXRfbGNkKHZvaWQpIHt9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoU05EX0FDOTdfQ09ERUMpIHx8IGRlZmluZWQoU05EX0FDOTdfQ09ERUNfTU9EVUxFKQorI2lmCWRlZmluZWQoQ09ORklHX1NORF9BQzk3X0NPREVDKSB8fCBcCisJZGVmaW5lZChDT05GSUdfU05EX0FDOTdfQ09ERUNfTU9EVUxFKQogc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF9hYzk3X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCUdQSU8zNF9BQzk3X1NZU0NMSywKIAlHUElPMzVfQUM5N19TREFUQV9JTl8wLApAQCAtMTY0LDE1ICsxNjYsNDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTMyMF9pbml0X2FjOTcodm9pZCkge30KICNlbmRpZgogCisvKgorICogVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGlzIHZlcmlmaWVkIHRvIHdvcmsgd2l0aCB0aGUgVG9yYWRleCBPcmNoaWQKKyAqIGNhcnJpZXIgYm9hcmQKKyAqLworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF91YXJ0X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQgMSBjb25maWd1cmF0aW9uIChtYXkgYmUgc2V0IGJ5IGJvb3Rsb2FkZXIpICovCisJR1BJTzk5X1VBUlQxX0NUUywKKwlHUElPMTA0X1VBUlQxX1JUUywKKwlHUElPOTdfVUFSVDFfUlhELAorCUdQSU85OF9VQVJUMV9UWEQsCisJR1BJTzEwMV9VQVJUMV9EVFIsCisJR1BJTzEwM19VQVJUMV9EU1IsCisJR1BJTzEwMF9VQVJUMV9EQ0QsCisJR1BJTzEwMl9VQVJUMV9SSSwKKworCS8qIFVBUlQgMiBjb25maWd1cmF0aW9uICovCisJR1BJTzEwOV9VQVJUMl9DVFMsCisJR1BJTzExMl9VQVJUMl9SVFMsCisJR1BJTzExMF9VQVJUMl9SWEQsCisJR1BJTzExMV9VQVJUMl9UWEQsCisKKwkvKiBVQVJUIDMgY29uZmlndXJhdGlvbiAqLworCUdQSU8zMF9VQVJUM19SWEQsCisJR1BJTzMxX1VBUlQzX1RYRCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0X3VhcnQodm9pZCkKK3sKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMyMF91YXJ0X3Bpbl9jb25maWcpKTsKK30KKwogdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdCh2b2lkKQogewogCWNvbGlicmlfcHhhMzIwX2luaXRfZXRoKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKCk7CisJY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9sY2QoKTsKIAljb2xpYnJpX3B4YTN4eF9pbml0X2xjZChtZnBfdG9fZ3BpbyhHUElPNDlfR1BJTykpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfYWM5NygpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnKSwKIAkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yOCkpOworCWNvbGlicmlfcHhhMzIwX2luaXRfdWFydCgpOwogfQogCiBNQUNISU5FX1NUQVJUKENPTElCUkkzMjAsICJUb3JhZGV4IENvbGlicmkgUFhBMzIwIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jCmluZGV4IGVhMzRlMzQuLmVmZWJhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPG1hY2gvY29saWJyaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4X25hbmQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC05NSwxMCArOTYsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb2xpYnJpX3B4YTN4eF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2luaXQsCi0JLmV4aXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmluaXQJCQk9IGNvbGlicmlfcHhhM3h4X21jaV9pbml0LAorCS5leGl0CQkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X21tYyhtZnBfY2ZnX3QgKnBpbnMsIGludCBsZW4sIGludCBkZXRlY3RfcGluKQpAQCAtMTU0LDMgKzE1OCw0MyBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY29saWJyaV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgICA9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldCAgICAgID0gMCwKKwkJLnNpemUgICAgICAgID0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICA9IFNaXzRNLAorCQkubWFza19mbGFncyAgPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUgICAgICAgID0gInJlc2VydmVkIiwKKwkJLm9mZnNldCAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgPSBTWl8xTSwKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJmcyIsCisJCS5vZmZzZXQgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfbmFuZF9pbmZvID0geworCS5lbmFibGVfYXJiaXRlcgk9IDEsCisJLmtlZXBfY29uZmlnCT0gMSwKKwkucGFydHMJCT0gY29saWJyaV9uYW5kX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShjb2xpYnJpX25hbmRfcGFydGl0aW9ucyksCit9OworCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X25hbmQodm9pZCkKK3sKKwlweGEzeHhfc2V0X25hbmRfaW5mbygmY29saWJyaV9uYW5kX2luZm8pOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCmluZGV4IDUzNjNlMWEuLmI1MzZiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2NvcmdpX2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9zaGFycHNsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0xMDQsNiArMTA1LDI4IEBACiAJR1BJTzZfTU1DX0NMSywKIAlHUElPOF9NTUNfQ1MwLAogCisJLyogR1BJTyBNYXRyaXggS2V5cGFkICovCisJR1BJTzY2X0dQSU8sCS8qIGNvbHVtbiAwICovCisJR1BJTzY3X0dQSU8sCS8qIGNvbHVtbiAxICovCisJR1BJTzY4X0dQSU8sCS8qIGNvbHVtbiAyICovCisJR1BJTzY5X0dQSU8sCS8qIGNvbHVtbiAzICovCisJR1BJTzcwX0dQSU8sCS8qIGNvbHVtbiA0ICovCisJR1BJTzcxX0dQSU8sCS8qIGNvbHVtbiA1ICovCisJR1BJTzcyX0dQSU8sCS8qIGNvbHVtbiA2ICovCisJR1BJTzczX0dQSU8sCS8qIGNvbHVtbiA3ICovCisJR1BJTzc0X0dQSU8sCS8qIGNvbHVtbiA4ICovCisJR1BJTzc1X0dQSU8sCS8qIGNvbHVtbiA5ICovCisJR1BJTzc2X0dQSU8sCS8qIGNvbHVtbiAxMCAqLworCUdQSU83N19HUElPLAkvKiBjb2x1bW4gMTEgKi8KKwlHUElPNThfR1BJTywJLyogcm93IDAgKi8KKwlHUElPNTlfR1BJTywJLyogcm93IDEgKi8KKwlHUElPNjBfR1BJTywJLyogcm93IDIgKi8KKwlHUElPNjFfR1BJTywJLyogcm93IDMgKi8KKwlHUElPNjJfR1BJTywJLyogcm93IDQgKi8KKwlHUElPNjNfR1BJTywJLyogcm93IDUgKi8KKwlHUElPNjRfR1BJTywJLyogcm93IDYgKi8KKwlHUElPNjVfR1BJTywJLyogcm93IDcgKi8KKwogCS8qIEdQSU8gKi8KIAlHUElPOV9HUElPLAkvKiBDT1JHSV9HUElPX25TRF9ERVRFQ1QgKi8KIAlHUElPN19HUElPLAkvKiBDT1JHSV9HUElPX25TRF9XUCAqLwpAQCAtMjY3LDkgKzI5MCwxMTUgQEAKIC8qCiAgKiBDb3JnaSBLZXlib2FyZCBEZXZpY2UKICAqLworI2RlZmluZSBDT1JHSV9LRVlfQ0FMRU5ERVIJS0VZX0YxCisjZGVmaW5lIENPUkdJX0tFWV9BRERSRVNTCUtFWV9GMgorI2RlZmluZSBDT1JHSV9LRVlfRk4JCUtFWV9GMworI2RlZmluZSBDT1JHSV9LRVlfQ0FOQ0VMCUtFWV9GNAorI2RlZmluZSBDT1JHSV9LRVlfT0ZGCQlLRVlfU1VTUEVORAorI2RlZmluZSBDT1JHSV9LRVlfRVhPSwkJS0VZX0Y1CisjZGVmaW5lIENPUkdJX0tFWV9FWENBTkNFTAlLRVlfRjYKKyNkZWZpbmUgQ09SR0lfS0VZX0VYSk9HRE9XTglLRVlfRjcKKyNkZWZpbmUgQ09SR0lfS0VZX0VYSk9HVVAJS0VZX0Y4CisjZGVmaW5lIENPUkdJX0tFWV9KQVAxCQlLRVlfTEVGVENUUkwKKyNkZWZpbmUgQ09SR0lfS0VZX0pBUDIJCUtFWV9MRUZUQUxUCisjZGVmaW5lIENPUkdJX0tFWV9NQUlMCQlLRVlfRjEwCisjZGVmaW5lIENPUkdJX0tFWV9PSwkJS0VZX0YxMQorI2RlZmluZSBDT1JHSV9LRVlfTUVOVQkJS0VZX0YxMgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgY29yZ2lrYmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDEsIEtFWV8xKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfNSksCisJS0VZKDAsIDQsIEtFWV82KSwKKwlLRVkoMCwgNSwgS0VZXzcpLAorCUtFWSgwLCA2LCBLRVlfOSksCisJS0VZKDAsIDcsIEtFWV8wKSwKKwlLRVkoMCwgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDEsIDEsIEtFWV8yKSwKKwlLRVkoMSwgMiwgS0VZXzQpLAorCUtFWSgxLCAzLCBLRVlfUiksCisJS0VZKDEsIDQsIEtFWV9ZKSwKKwlLRVkoMSwgNSwgS0VZXzgpLAorCUtFWSgxLCA2LCBLRVlfSSksCisJS0VZKDEsIDcsIEtFWV9PKSwKKwlLRVkoMSwgOCwgS0VZX1ApLAorCUtFWSgyLCAwLCBLRVlfVEFCKSwKKwlLRVkoMiwgMSwgS0VZX1EpLAorCUtFWSgyLCAyLCBLRVlfRSksCisJS0VZKDIsIDMsIEtFWV9UKSwKKwlLRVkoMiwgNCwgS0VZX0cpLAorCUtFWSgyLCA1LCBLRVlfVSksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX0spLAorCUtFWSgzLCAwLCBDT1JHSV9LRVlfQ0FMRU5ERVIpLAorCUtFWSgzLCAxLCBLRVlfVyksCisJS0VZKDMsIDIsIEtFWV9TKSwKKwlLRVkoMywgMywgS0VZX0YpLAorCUtFWSgzLCA0LCBLRVlfViksCisJS0VZKDMsIDUsIEtFWV9IKSwKKwlLRVkoMywgNiwgS0VZX00pLAorCUtFWSgzLCA3LCBLRVlfTCksCisJS0VZKDMsIDksIEtFWV9SSUdIVFNISUZUKSwKKwlLRVkoNCwgMCwgQ09SR0lfS0VZX0FERFJFU1MpLAorCUtFWSg0LCAxLCBLRVlfQSksCisJS0VZKDQsIDIsIEtFWV9EKSwKKwlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSg0LCA0LCBLRVlfQiksCisJS0VZKDQsIDUsIEtFWV9OKSwKKwlLRVkoNCwgNiwgS0VZX0RPVCksCisJS0VZKDQsIDgsIEtFWV9FTlRFUiksCisJS0VZKDQsIDEwLCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNSwgMCwgQ09SR0lfS0VZX01BSUwpLAorCUtFWSg1LCAxLCBLRVlfWiksCisJS0VZKDUsIDIsIEtFWV9YKSwKKwlLRVkoNSwgMywgS0VZX01JTlVTKSwKKwlLRVkoNSwgNCwgS0VZX1NQQUNFKSwKKwlLRVkoNSwgNSwgS0VZX0NPTU1BKSwKKwlLRVkoNSwgNywgS0VZX1VQKSwKKwlLRVkoNSwgMTEsIENPUkdJX0tFWV9GTiksCisJS0VZKDYsIDAsIEtFWV9TWVNSUSksCisJS0VZKDYsIDEsIENPUkdJX0tFWV9KQVAxKSwKKwlLRVkoNiwgMiwgQ09SR0lfS0VZX0pBUDIpLAorCUtFWSg2LCAzLCBDT1JHSV9LRVlfQ0FOQ0VMKSwKKwlLRVkoNiwgNCwgQ09SR0lfS0VZX09LKSwKKwlLRVkoNiwgNSwgQ09SR0lfS0VZX01FTlUpLAorCUtFWSg2LCA2LCBLRVlfTEVGVCksCisJS0VZKDYsIDcsIEtFWV9ET1dOKSwKKwlLRVkoNiwgOCwgS0VZX1JJR0hUKSwKKwlLRVkoNywgMCwgQ09SR0lfS0VZX09GRiksCisJS0VZKDcsIDEsIENPUkdJX0tFWV9FWE9LKSwKKwlLRVkoNywgMiwgQ09SR0lfS0VZX0VYQ0FOQ0VMKSwKKwlLRVkoNywgMywgQ09SR0lfS0VZX0VYSk9HRE9XTiksCisJS0VZKDcsIDQsIENPUkdJX0tFWV9FWEpPR1VQKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGNvcmdpa2JkX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gY29yZ2lrYmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoY29yZ2lrYmRfa2V5bWFwKSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29yZ2lrYmRfcm93X2dwaW9zW10gPQorCQl7IDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSB9Oworc3RhdGljIGNvbnN0IGludCBjb3JnaWtiZF9jb2xfZ3Bpb3NbXSA9CisJCXsgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NyB9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBjb3JnaWtiZF9wZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJCT0gJmNvcmdpa2JkX2tleW1hcF9kYXRhLAorCS5yb3dfZ3Bpb3MJCT0gY29yZ2lrYmRfcm93X2dwaW9zLAorCS5jb2xfZ3Bpb3MJCT0gY29yZ2lrYmRfY29sX2dwaW9zLAorCS5udW1fcm93X2dwaW9zCQk9IEFSUkFZX1NJWkUoY29yZ2lrYmRfcm93X2dwaW9zKSwKKwkubnVtX2NvbF9ncGlvcwkJPSBBUlJBWV9TSVpFKGNvcmdpa2JkX2NvbF9ncGlvcyksCisJLmNvbF9zY2FuX2RlbGF5X3VzCT0gMTAsCisJLmRlYm91bmNlX21zCQk9IDEwLAorCS53YWtldXAJCQk9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaWtiZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImNvcmdpLWtleWJvYXJkIiwKKwkubmFtZQkJPSAibWF0cml4LWtleXBhZCIsCiAJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb3JnaWtiZF9wZGF0YSwKKwl9LAogfTsKIAogLyoKQEAgLTMwNywxMTEgKzQzNiwyMCBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhOwotCi1zdGF0aWMgaW50IGNvcmdpX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBjb3JnaV9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ09SR0lfR1BJT19uU0RfREVURUNULCAiblNEX0RFVEVDVCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX25TRF9XUCwgIm5TRF9XUCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX1NEX1BXUiwgIlNEX1BXUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMjsKLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ09SR0lfR1BJT19uU0RfV1ApOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChDT1JHSV9HUElPX1NEX1BXUiwgMCk7Ci0KLQljb3JnaV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDT1JHSV9JUlFfR1BJT19uU0RfREVURUNULCBjb3JnaV9kZXRlY3RfaW50LAotCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwKLQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfMzsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlXzM6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fU0RfUFdSKTsKLWVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX1dQKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcmdpX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX1NEX1BXUiwgKCgxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29yZ2lfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKENPUkdJX0dQSU9fblNEX1dQKTsKLX0KLQotc3RhdGljIHZvaWQgY29yZ2lfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWZyZWVfaXJxKENPUkdJX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwotCWdwaW9fZnJlZShDT1JHSV9HUElPX1NEX1BXUik7Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19uU0RfREVURUNUKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNvcmdpX21jaV9pbml0LAotCS5nZXRfcm8JCT0gY29yZ2lfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgCT0gY29yZ2lfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IGNvcmdpX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IENPUkdJX0dQSU9fblNEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IENPUkdJX0dQSU9fU0RfUFdSLAogfTsKIAogCiAvKgogICogSXJkYQogICovCi1zdGF0aWMgdm9pZCBjb3JnaV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IGNvcmdpX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX0lSX09OLCAiSVJfT04iKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENPUkdJX0dQSU9fSVJfT04sIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjb3JnaV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19JUl9PTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gQ09SR0lfR1BJT19JUl9PTiwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IGNvcmdpX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cAkJPSBjb3JnaV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IGNvcmdpX2lyZGFfc2h1dGRvd24sCiB9OwogCiAKQEAgLTYzNiw2ICs2NzQsNyBAQAogCWNvcmdpX2luaXRfc3BpKCk7CiAKICAJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCWNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJmNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCmluZGV4IDNhOGVlMjIuLjk4M2NjOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIHN0YXRpYyBweGFfZnJlcXNfdCBweGEyN3hfZnJlcXNbXSA9IHsKIAl7MTA0MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCAyKSwgMCwgQ0NMS0NGRzIoMSwgMCwgMSksICA5MDAwMDAsIDE3MDUwMDAgfSwKLQl7MTU2MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCA2KSwgMCwgQ0NMS0NGRzIoMSwgMSwgMSksIDEwMDAwMDAsIDE3MDUwMDAgfSwKKwl7MTU2MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCAzKSwgMCwgQ0NMS0NGRzIoMSwgMCwgMSksIDEwMDAwMDAsIDE3MDUwMDAgfSwKIAl7MjA4MDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDAsIDE2LCAyKSwgMSwgQ0NMS0NGRzIoMCwgMCwgMSksIDExODAwMDAsIDE3MDUwMDAgfSwKIAl7MzEyMDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDEsIDE2LCAzKSwgMSwgQ0NMS0NGRzIoMSwgMCwgMSksIDEyNTAwMDAsIDE3MDUwMDAgfSwKIAl7NDE2MDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDEsIDE2LCA0KSwgMSwgQ0NMS0NGRzIoMSwgMCwgMSksIDEzNTAwMDAsIDE3MDUwMDAgfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKaW5kZXggN2QzZTFiNC4uOTY1NDgwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKQEAgLTEzMCw2MSArMTMwLDE3IEBACiBzdGF0aWMgaW50IGNzYjcyNl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCWlycV9oYW5kbGVyX3QgZGV0ZWN0LCB2b2lkICpkYXRhKQogewotCWludCBlcnI7Ci0KIAljc2I3MjZfbWNpX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyg1MDApOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QsICJNTUMgZGV0ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZGV0X3JlcTsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2RldF9kaXI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ1NCNzI2X0dQSU9fTU1DX1JPLCAiTU1DIHJvIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcm9fcmVxOwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yb19kaXI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGV0ZWN0LAotCQkJSVJRRl9ESVNBQkxFRCwgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2lycTsKLQogCXJldHVybiAwOwotCi1lcnJfaXJxOgotZXJyX3JvX2RpcjoKLQlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLWVycl9yb19yZXE6Ci1lcnJfZGV0X2RpcjoKLQlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCk7Ci1lcnJfZGV0X3JlcToKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGNzYjcyNl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLX0KLQotc3RhdGljIHZvaWQgY3NiNzI2X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19STyk7Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNzYjcyNl9tY2kgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0CQk9IGNzYjcyNl9tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IGNzYjcyNl9tY2lfZ2V0X3JvLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQJCQk9IGNzYjcyNl9tY2lfaW5pdCwKIAkvKiBGSVhNRSBzZXRwb3dlciAqLwotCS5leGl0CQk9IGNzYjcyNl9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IENTQjcyNl9HUElPX01NQ19ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBDU0I3MjZfR1BJT19NTUNfUk8sCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBjc2I3MjZfb2hjaV9wbGF0Zm9ybV9kYXRhID0gewpAQCAtMjgyLDcgKzIzOCw3IEBACiB9OwogCiBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIGNzYjcyNl9sYW5fY29uZmlnID0gewotCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKIAkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCiAJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKIAkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKaW5kZXggZWNjMDhmMy4uNDZmYWJlMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKQEAgLTkzNSw2ICs5MzUsMzMgQEAKIHsKIAlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGEzeHhfZGV2aWNlX25hbmQsIGluZm8pOwogfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTN4eF9yZXNvdXJjZXNfZ2N1W10gPSB7CisJeworCQkuc3RhcnQJPSAweDU0MDAwMDAwLAorCQkuZW5kCT0gMHg1NDAwMGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9HQ1UsCisJCS5lbmQJPSBJUlFfR0NVLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBweGEzeHhfZ2N1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfZ2N1ID0geworCS5uYW1lCQk9ICJweGEzeHgtZ2N1IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YTN4eF9yZXNvdXJjZXNfZ2N1KSwKKwkucmVzb3VyY2UJPSBweGEzeHhfcmVzb3VyY2VzX2djdSwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrID0gJnB4YTN4eF9nY3VfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKwogI2VuZGlmIC8qIENPTkZJR19QWEEzeHggKi8KIAogLyogcHhhMnh4LXNwaSBwbGF0Zm9ybS1kZXZpY2UgSUQgZXF1YWxzIHJlc3BlY3RpdmUgU1NQIHBsYXRmb3JtLWRldmljZSBJRCArIDEuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKaW5kZXggZWNjMjRhNC4uOTM4MTdkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaApAQCAtMzUsNCArMzUsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9uYW5kOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9pMmNfcG93ZXI7CiAKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfZ2N1OworCiB2b2lkIF9faW5pdCBweGFfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKaW5kZXggYTM2ZmMxNy4uNDlhY2RmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwpAQCAtMTk5LDcgKzE5OSw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKIAlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQllN3h4X2lyZGFfaW5pdCgpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZlN3h4X2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwppbmRleCAxZDAwMTEwLi40MDUyZWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCkBAIC0yMDAsNyArMjAwLDYgQEAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOwogCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOwotCWU3eHhfaXJkYV9pbml0KCk7CiAJcHhhX3NldF9maWNwX2luZm8oJmU3eHhfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCmluZGV4IDljZDA5NDYuLmFlYzdmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKQEAgLTY0NiwxMyArNjQ2LDE2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzIwXzIxfE1NQ19WRERfMjFfMjJ8TU1DX1ZERF8yMl8yM3wKLQkJCSAgTU1DX1ZERF8yNF8yNXxNTUNfVkREXzI1XzI2fE1NQ19WRERfMjZfMjd8Ci0JCQkgIE1NQ19WRERfMjdfMjh8TU1DX1ZERF8yOF8yOXxNTUNfVkREXzI5XzMwfAotCQkJICBNTUNfVkREXzMwXzMxfE1NQ19WRERfMzFfMzIsCi0JLmluaXQgCQk9IGVtX3gyNzBfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IGVtX3gyNzBfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IGVtX3gyNzBfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMjBfMjF8TU1DX1ZERF8yMV8yMnxNTUNfVkREXzIyXzIzfAorCQkJCSAgTU1DX1ZERF8yNF8yNXxNTUNfVkREXzI1XzI2fE1NQ19WRERfMjZfMjd8CisJCQkJICBNTUNfVkREXzI3XzI4fE1NQ19WRERfMjhfMjl8TU1DX1ZERF8yOV8zMHwKKwkJCQkgIE1NQ19WRERfMzBfMzF8TU1DX1ZERF8zMV8zMiwKKwkuaW5pdCAJCQk9IGVtX3gyNzBfbWNpX2luaXQsCisJLnNldHBvd2VyIAkJPSBlbV94MjcwX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJCT0gZW1feDI3MF9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X21tYyh2b2lkKQpAQCAtMTAyMiwyMiArMTAyNSwzMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7Ci0JLmJ1c19pZAk9IDAsCi0JLnBvd2VyID0gZW1feDI3MF9zZW5zb3JfcG93ZXIsCi19OwotCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGVtX3gyNzBfaTJjX2NhbV9pbmZvW10gPSB7CiAJewogCQlJMkNfQk9BUkRfSU5GTygibXQ5bTExMSIsIDB4NDgpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7CisJLmJ1c19pZAkJPSAwLAorCS5wb3dlcgkJPSBlbV94MjcwX3NlbnNvcl9wb3dlciwKKwkuYm9hcmRfaW5mbwk9ICZlbV94MjcwX2kyY19jYW1faW5mb1swXSwKKwkuaTJjX2FkYXB0ZXJfaWQJPSAwLAorCS5tb2R1bGVfbmFtZQk9ICJtdDltMTExIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVtX3gyNzBfY2FtZXJhID0geworCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLAogCX0sCiB9OwogCiBzdGF0aWMgdm9pZCAgX19pbml0IGVtX3gyNzBfaW5pdF9jYW1lcmEodm9pZCkKIHsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShlbV94MjcwX2kyY19jYW1faW5mbykpOwogCXB4YV9zZXRfY2FtZXJhX2luZm8oJmVtX3gyNzBfY2FtZXJhX3BsYXRmb3JtX2RhdGEpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZW1feDI3MF9jYW1lcmEpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfY2FtZXJhKHZvaWQpIHt9CkBAIC0xMTAzLDYgKzExMTYsNyBAQAogUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzEwLCAmcHhhX2RldmljZV9tY2kuZGV2LCAidmNjIHNkaW8iKTsKIFJFR1VMQVRPUl9DT05TVU1FUihsZG8xMiwgTlVMTCwgInZjYyB1c2IiKTsKIFJFR1VMQVRPUl9DT05TVU1FUihsZG8xOSwgJmVtX3gyNzBfZ3Byc191c2Vyc3BhY2VfY29uc3VtZXIuZGV2LCAidmNjIGdwcnMiKTsKK1JFR1VMQVRPUl9DT05TVU1FUihidWNrMiwgTlVMTCwgInZjY19jb3JlIik7CiAKICNkZWZpbmUgUkVHVUxBVE9SX0lOSVQoX2xkbywgX21pbl91ViwgX21heF91ViwgX29wc19tYXNrKQkJXAogCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBfbGRvIyNfZGF0YSA9IHsJCVwKQEAgLTExMjUsNiArMTEzOSw3IEBACiAJICAgICAgIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTIHwgUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFKTsKIFJFR1VMQVRPUl9JTklUKGxkbzEyLCAzMDAwMDAwLCAzMDAwMDAwLCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyk7CiBSRUdVTEFUT1JfSU5JVChsZG8xOSwgMzIwMDAwMCwgMzIwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworUkVHVUxBVE9SX0lOSVQoYnVjazIsIDEwMDAwMDAsIDE2NTAwMDAsIFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSk7CiAKIHN0cnVjdCBsZWRfaW5mbyBlbV94MjcwX2xlZF9pbmZvID0gewogCS5uYW1lID0gImVtLXgyNzA6b3JhbmdlIiwKQEAgLTExOTQsNiArMTIwOSw4IEBACiAJREE5MDMwX0xETygxMiksCiAJREE5MDMwX0xETygxOSksCiAKKwlEQTkwMzBfU1VCREVWKHJlZ3VsYXRvciwgQlVDSzIsICZidWNrMl9kYXRhKSwKKwogCURBOTAzMF9TVUJERVYobGVkLCBMRURfUEMsICZlbV94MjcwX2xlZF9pbmZvKSwKIAlEQTkwMzBfU1VCREVWKGJhY2tsaWdodCwgV0xFRCwgJmVtX3gyNzBfbGVkX2luZm8pLAogCURBOTAzMF9TVUJERVYoYmF0dGVyeSwgQkFULCAmZW1feDI3MF9iYXR0ZXJ0eV9pbmZvKSwKQEAgLTEyNDUsNyArMTI2Miw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX21vZHVsZV9pbml0KHZvaWQpCiB7Ci0JcHJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlbV94MjcwX3Bpbl9jb25maWcpKTsKIAogCW1tY19jZCA9IEdQSU8xM19NTUNfQ0Q7CkBAIC0xMjU3LDcgKzEyNzMsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9leGVkYV9pbml0KHZvaWQpCiB7Ci0JcHJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShleGVkYV9waW5fY29uZmlnKSk7CiAKIAltbWNfY2QgPSBHUElPMTE0X01NQ19DRDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwppbmRleCBjNjBkYWRmLi45MTQxN2YwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCkBAIC00Nyw0NCArNDcsOSBAQAogCS5ncGlvX3B1bGx1cF9pbnZlcnRlZCA9IDEKIH07CiAKLXN0YXRpYyB2b2lkIGU3eHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JaWYgKG1vZGUgJiBJUl9PRkYpIHsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FN1hYX0lSX09GRiwgMSk7Ci0JCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci0JfSBlbHNlIHsKLQkJcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FN1hYX0lSX09GRiwgMCk7Ci0JfQotfQotCi1pbnQgZTd4eF9pcmRhX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTdYWF9JUl9PRkYsICJJckRBIHBvd2VyIik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FN1hYX0lSX09GRiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQllN3h4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShOVUxMLCBJUl9TSVJNT0RFIHwgSVJfT0ZGKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBlN3h4X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWU3eHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlKGRldiwgSVJfU0lSTU9ERSB8IElSX09GRik7Ci0JZ3Bpb19mcmVlKEdQSU9fRTdYWF9JUl9PRkYpOwotfQotCiBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGU3eHhfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IGU3eHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAotCS5zaHV0ZG93biA9IGU3eHhfaXJkYV9zaHV0ZG93biwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19FN1hYX0lSX09GRiwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIGludCBlc2VyaWVzX3RtaW9fZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwppbmRleCBjYTk5MTJlLi4xNzA4YzAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCkBAIC04OCw3ICs4OCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX01NQ19QWEEKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZ3Vtc3RpeF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdCAJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGd1bXN0aXhfbW1jX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKaW5kZXggODEzNTlkNS4uODNiZDNjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAorI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtMTc0LDE0ICsxNzUsOSBAQAogICogSVJEQQogICovCiAKLXN0YXRpYyB2b2lkIGlyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfSFg0NzAwX25JUl9PTiwgbW9kZSAmIElSX09GRik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGZpY3BfaW5mbyA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBpcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU8xMDVfSFg0NzAwX25JUl9PTiwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qCkBAIC0zNjgsOCArMzY0LDYgQEAKICAqIExDRCAtIFNvbnkgZGlzcGxheSBjb25uZWN0ZWQgdG8gQVRJIEltYWdlb24gdzMyMjAKICAqLwogCi1zdGF0aWMgaW50IGxjZF9wb3dlcjsKLQogc3RhdGljIHZvaWQgc29ueV9sY2RfaW5pdCh2b2lkKQogewogCWdwaW9fc2V0X3ZhbHVlKEdQSU84NF9IWDQ3MDBfTENEX1NRTiwgMSk7CkBAIC00MTAsMzUgKzQwNCw2IEBACiAJZ3Bpb19zZXRfdmFsdWUoR1BJTzExMF9IWDQ3MDBfTENEX0xWRERfM1YzX09OLCAwKTsKIH0KIAotc3RhdGljIGludCBoeDQ3MDBfbGNkX3NldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqbGRldiwgaW50IGxldmVsKQotewotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIEZCX0JMQU5LX1VOQkxBTks6Ci0JCXNvbnlfbGNkX2luaXQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9CTEFOS19OT1JNQUw6Ci0JY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgotCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKLQljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKLQkJc29ueV9sY2Rfb2ZmKCk7Ci0JCWJyZWFrOwotCX0KLQlsY2RfcG93ZXIgPSBsZXZlbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoeDQ3MDBfbGNkX2dldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqbG0pCi17Ci0JcmV0dXJuIGxjZF9wb3dlcjsKLX0KLQotc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGh4NDcwMF9sY2Rfb3BzID0gewotCS5nZXRfcG93ZXIgPSBoeDQ3MDBfbGNkX2dldF9wb3dlciwKLQkuc2V0X3Bvd2VyID0gaHg0NzAwX2xjZF9zZXRfcG93ZXIsCi19OwotCi1zdGF0aWMgc3RydWN0IGxjZF9kZXZpY2UgKmh4NDcwMF9sY2RfZGV2aWNlOwotCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCB3MzIyMF9sY2Rfc3VzcGVuZChzdHJ1Y3QgdzEwMGZiX3BhciAqd2ZiKQogewpAQCAtNTczLDYgKzUzOCwyNyBAQAogCS5yZXNvdXJjZSAgICAgID0gdzMyMjBfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHZvaWQgaHg0NzAwX2xjZF9zZXRfcG93ZXIoc3RydWN0IHBsYXRfbGNkX2RhdGEgKnBkLCB1bnNpZ25lZCBpbnQgcG93ZXIpCit7CisJaWYgKHBvd2VyKQorCQlzb255X2xjZF9pbml0KCk7CisJZWxzZQorCQlzb255X2xjZF9vZmYoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0X2xjZF9kYXRhIGh4NDcwMF9sY2RfZGF0YSA9IHsKKwkuc2V0X3Bvd2VyID0gaHg0NzAwX2xjZF9zZXRfcG93ZXIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoeDQ3MDBfbGNkID0geworCS5uYW1lID0gInBsYXRmb3JtLWxjZCIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaHg0NzAwX2xjZF9kYXRhLAorCQkucGFyZW50ICAgICAgICA9ICZ3MzIyMC5kZXYsCisJfSwKK307CisKIC8qCiAgKiBCYWNrbGlnaHQKICAqLwpAQCAtNjE4LDcgKzYwNCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSB0c2MyMDQ2X2luZm8gPSB7CiAJLm1vZGVsICAgICAgICAgICAgPSA3ODQ2LAogCS52cmVmX2RlbGF5X3VzZWNzID0gMTAwLAotCS5wcmVzc3VyZV9tYXggICAgID0gNTEyLAorCS5wcmVzc3VyZV9tYXggICAgID0gMTAyNCwKIAkuZGVib3VuY2VfbWF4ICAgICA9IDEwLAogCS5kZWJvdW5jZV90b2wgICAgID0gMywKIAkuZGVib3VuY2VfcmVwICAgICA9IDEsCkBAIC04NzIsOSArODU4LDYgQEAKIAlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZweGFfc3NwMl9tYXN0ZXJfaW5mbyk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oQVJSQVlfQU5EX1NJWkUodHNjMjA0Nl9ib2FyZF9pbmZvKSk7CiAKLQloeDQ3MDBfbGNkX2RldmljZSA9IGxjZF9kZXZpY2VfcmVnaXN0ZXIoIncxMDBmYiIsIE5VTEwsCi0JCQkJCSh2b2lkICopJnczMjIwX2luZm8sICZoeDQ3MDBfbGNkX29wcyk7Ci0KIAlncGlvX3NldF92YWx1ZShHUElPNzFfSFg0NzAwX0FTSUMzX25SRVNFVCwgMCk7CiAJbWRlbGF5KDEwKTsKIAlncGlvX3NldF92YWx1ZShHUElPNzFfSFg0NzAwX0FTSUMzX25SRVNFVCwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCmluZGV4IGI2MjQzYjUuLmI2NDg2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCkBAIC0xNjgsNyArMTY4LDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGlkcF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaWRwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKaW5kZXggOTYxODA3ZC4uMmE0OTQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKQEAgLTM4OSw2ICszODksOSBAQAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBpbW90ZTJfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm9jcl9tYXNrID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsIC8qIGRlZmF1bHQgYW55d2F5ICovCiAJLmdldF9ybyA9IGltb3RlMl9tY2lfZ2V0X3JvLAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gLTEsCisJLmdwaW9fY2FyZF9ybwk9IC0xLAorCS5ncGlvX3Bvd2VyID0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaW1vdGUyZmxhc2hfcGFydGl0aW9uc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVjMDliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2JhbGxvb24zLmgKKyAqCisgKiAgQXV0aG9yczoJTmljayBCYW5lIGFuZCBXb29rZXkKKyAqICBDcmVhdGVkOglPY3QsIDIwMDUKKyAqICBDb3B5cmlnaHQ6CVRvYnkgQ2h1cmNoaWxsIEx0ZAorICogIENyaWJiZWQgZnJvbSBtYWluc3RvbmUuYywgYnkgTmljaG9sYXMgUGl0cmUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQVNNX0FSQ0hfQkFMTE9PTjNfSAorI2RlZmluZSBBU01fQVJDSF9CQUxMT09OM19ICisKK2VudW0gYmFsbG9vbjNfZmVhdHVyZXMgeworCUJBTExPT04zX0ZFQVRVUkVfT0hDSSwKKwlCQUxMT09OM19GRUFUVVJFX01NQywKKwlCQUxMT09OM19GRUFUVVJFX0NGLAorCUJBTExPT04zX0ZFQVRVUkVfQVVESU8sCisJQkFMTE9PTjNfRkVBVFVSRV9UT1BQT0xZLAorfTsKKworI2RlZmluZSBCQUxMT09OM19GUEdBX1BIWVMJUFhBX0NTNF9QSFlTCisjZGVmaW5lIEJBTExPT04zX0ZQR0FfVklSVAkoMHhmMTAwMDAwMCkJLyogYXMgcGVyIGJhbGxvb24yICovCisjZGVmaW5lIEJBTExPT04zX0ZQR0FfTEVOR1RICTB4MDEwMDAwMDAKKworLyogRlBHQS9DUExEIHJlZ2lzdGVycyAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUEwX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDgpCisvKiBmaXhtZSAtIHNhbWUgZm9yIG5vdyAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUExX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDgpCisjZGVmaW5lIEJBTExPT04zX05BTkRJT19JT19SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDAwKQorLyogZnBnYS9jcGxkIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEJBTExPT04zX0lOVF9DT05UUk9MX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwQykKKyNkZWZpbmUgQkFMTE9PTjNfTkFORElPX0NUTDJfUkVHIAkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxMCkKKyNkZWZpbmUgQkFMTE9PTjNfTkFORElPX0NUTF9SRUcgCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDE0KQorI2RlZmluZSBCQUxMT09OM19WRVJTSU9OX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMWMpCisKKyNkZWZpbmUgQkFMTE9PTjNfU0FNT1NBX0FERFJfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwYzAwMDAwKQorI2RlZmluZSBCQUxMT09OM19TQU1PU0FfREFUQV9SRUcJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBjMDAwMDQpCisjZGVmaW5lIEJBTExPT04zX1NBTU9TQV9TVEFUVVNfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwYzAwMDFjKQorCisvKiBHUElPcyBmb3IgaXJxcyAqLworI2RlZmluZSBCQUxMT09OM19HUElPX0FVWF9OSVJRCQkoOTQpCisjZGVmaW5lIEJBTExPT04zX0dQSU9fQ09ERUNfSVJRCQkoOTUpCisKKy8qIFRpbWVyIGFuZCBJZGxlIExFRCBsb2NhdGlvbnMgKi8KKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19MRURfTkFORAkJKDkpCisjZGVmaW5lIEJBTExPT04zX0dQSU9fTEVEX0lETEUJCSgxMCkKKworLyogYmFja2xpZ2h0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19SVU5fQkFDS0xJR0hUCSg5OSkKKworI2RlZmluZSBCQUxMT09OM19HUElPX1MwX0NECQkoMTA1KQorCisvKiBGUEdBIEludGVycnVwdCBNYXNrL0Fja25vd2xlZGdlIFJlZ2lzdGVyICovCisjZGVmaW5lIEJBTExPT04zX0lOVF9TMF9JUlEJCSgxIDw8IDApICAvKiBQQ01DSUEgMCBJUlEgKi8KKyNkZWZpbmUgQkFMTE9PTjNfSU5UX1MwX1NUU0NIRwkJKDEgPDwgMSkgIC8qIFBDTUNJQSAwIHN0YXR1cyBjaGFuZ2VkICovCisKKy8qIENGIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUFfbklSUQkJKDEgPDwgMCkgIC8qIElSUSAvIHJlYWR5IHNpZ25hbCAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUFfblNUU0NIR19CVkQxCSgxIDw8IDEpCisJCQkJCS8qIFZERCBzZW5zZSAvIGNhcmQgc3RhdHVzIGNoYW5nZWQgKi8KKworLyogQ0YgY29udHJvbCByZWdpc3RlciAod3JpdGUpICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9SRVNFVAkJKDEgPDwgMCkgICAvKiBDYXJkIHJlc2V0IHNpZ25hbCAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUFfRU5BQkxFCQkoMSA8PCAxKQorI2RlZmluZSBCQUxMT09OM19QQ01DSUFfQUREX0VOQUJMRQkoMSA8PCAyKQorCisvKiBDUExEIChhbmQgRlBHQSkgaW50ZXJmYWNlIGRlZmluaXRpb25zICovCisjZGVmaW5lIENQTERfTENEMF9EQVRBX1NFVCAgICAgICAgICAgICAweDAwCisjZGVmaW5lIENQTERfTENEMF9EQVRBX0NMUiAgICAgICAgICAgICAweDEwCisjZGVmaW5lIENQTERfTENEMF9DT01NQU5EX1NFVCAgICAgICAgICAweDAxCisjZGVmaW5lIENQTERfTENEMF9DT01NQU5EX0NMUiAgICAgICAgICAweDExCisjZGVmaW5lIENQTERfTENEMV9EQVRBX1NFVCAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENQTERfTENEMV9EQVRBX0NMUiAgICAgICAgICAgICAweDEyCisjZGVmaW5lIENQTERfTENEMV9DT01NQU5EX1NFVCAgICAgICAgICAweDAzCisjZGVmaW5lIENQTERfTENEMV9DT01NQU5EX0NMUiAgICAgICAgICAweDEzCisKKyNkZWZpbmUgQ1BMRF9NSVNDX1NFVCAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQ1BMRF9NSVNDX0NMUiAgICAgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgQ1BMRF9NSVNDX0xPT05fTlJFU0VUX0JJVCAgICAgIDAKKyNkZWZpbmUgQ1BMRF9NSVNDX0xPT05fVU5TVVNQX0JJVCAgICAgIDEKKyNkZWZpbmUgQ1BMRF9NSVNDX1JVTl81Vl9CSVQgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BMRF9NSVNDX0NIR19EMF9CSVQgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BMRF9NSVNDX0NIR19EMV9CSVQgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BMRF9NSVNDX0RBQ19OQ1NfQklUICAgICAgICAgIDUKKworI2RlZmluZSBDUExEX0xDRF9TRVQgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBDUExEX0xDRF9DTFIgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBDUExEX0xDRF9CQUNLTElHSFRfRU5fMF9CSVQgICAgMAorI2RlZmluZSBDUExEX0xDRF9CQUNLTElHSFRfRU5fMV9CSVQgICAgMQorI2RlZmluZSBDUExEX0xDRF9MRURfUkVEX0JJVCAgICAgICAgICAgNAorI2RlZmluZSBDUExEX0xDRF9MRURfR1JFRU5fQklUICAgICAgICAgNQorI2RlZmluZSBDUExEX0xDRF9OUkVTRVRfQklUICAgICAgICAgICAgNworCisjZGVmaW5lIENQTERfTENEX1JPX1NFVCAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIENQTERfTENEX1JPX0NMUiAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIENQTERfTENEX1JPX0xDRDBfbldBSVRfQklUICAgICAwCisjZGVmaW5lIENQTERfTENEX1JPX0xDRDFfbldBSVRfQklUICAgICAxCisKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfU0VUICAgICAgICAgICAgICAgIDB4MGEKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfQ0xSICAgICAgICAgICAgICAgIDB4MWEKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfR1NNX1JJX0JJVCAgICAgICAgIDAKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfR1NNX0NUU19CSVQgICAgICAgIDEKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfR1NNX0RUUl9CSVQgICAgICAgIDIKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfTFBSX0NUU19CSVQgICAgICAgIDMKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfVEMyMzJfQ1RTX0JJVCAgICAgIDQKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfVEMyMzJfRFNSX0JJVCAgICAgIDUKKworI2RlZmluZSBDUExEX1NST1VUSU5HX1NFVCAgICAgICAgICAgICAgMHgwYgorI2RlZmluZSBDUExEX1NST1VUSU5HX0NMUiAgICAgICAgICAgICAgMHgxYgorI2RlZmluZSBDUExEX1NST1VUSU5HX01TUDQzMF9MUFIgICAgICAgMAorI2RlZmluZSBDUExEX1NST1VUSU5HX01TUDQzMF9UQzIzMiAgICAgMQorI2RlZmluZSBDUExEX1NST1VUSU5HX01TUDQzMF9HU00gICAgICAgMgorI2RlZmluZSBDUExEX1NST1VUSU5HX0xPT05fTFBSICAgICAgICAgKDAgPDwgNCkKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19MT09OX1RDMjMyICAgICAgICgxIDw8IDQpCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTE9PTl9HU00gICAgICAgICAoMiA8PCA0KQorCisjZGVmaW5lIENQTERfQVJPVVRJTkdfU0VUICAgICAgICAgICAgICAweDBjCisjZGVmaW5lIENQTERfQVJPVVRJTkdfQ0xSICAgICAgICAgICAgICAweDFjCisjZGVmaW5lIENQTERfQVJPVVRJTkdfTUlDMlBIT05FX0JJVCAgICAwCisjZGVmaW5lIENQTERfQVJPVVRJTkdfUEhPTkUySU5UX0JJVCAgICAxCisjZGVmaW5lIENQTERfQVJPVVRJTkdfUEhPTkUyRVhUX0JJVCAgICAyCisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTkwySU5UX0JJVCAgICAzCisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTkwyRVhUX0JJVCAgICA0CisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTlIyUEhPTkVfQklUICA1CisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTlIySU5UX0JJVCAgICA2CisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTlIyRVhUX0JJVCAgICA3CisKK2V4dGVybiBpbnQgYmFsbG9vbjNfaGFzKGVudW0gYmFsbG9vbjNfZmVhdHVyZXMgZmVhdHVyZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKaW5kZXggYTg4ZDdjYS4uODExNzQzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCkBAIC0yMyw2ICsyMywxMiBAQAogZXh0ZXJuIHZvaWQgY29saWJyaV9weGEzeHhfaW5pdF9ldGgoc3RydWN0IGF4X3BsYXRfZGF0YSAqcGxhdF9kYXRhKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUFhBM3h4KSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHhfTU9EVUxFKQorZXh0ZXJuIHZvaWQgY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X25hbmQodm9pZCkge30KKyNlbmRpZgorCiAvKiBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyAqLwogI2RlZmluZSBDT0xJQlJJX1NEUkFNX0JBU0UJMHhhMDAwMDAwMCAgICAgIC8qIFNEUkFNIHJlZ2lvbiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IGY2YjRiZjMuLmE3M2JjODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0yNCwzNCArMjQsMjggQEAKIAkJbW92CVx0bXAsIFx0bXAsIGxzciAjMTMKIAkJYW5kCVx0bXAsIFx0bXAsICMweDcJCUAgQ29yZSBHCiAJCWNtcAlcdG1wLCAjMQotCQliaGkJMTAwNGYKKwkJYmhpCTEwMDJmCiAKKwkJQCBDb3JlIEdlbmVyYXRpb24gMSAoUFhBMjV4KQogCQltb3YJXGJhc2UsICNpb19wMnYoMHg0MDAwMDAwMCkJQCBJSVIgQ3RsID0gMHg0MGQwMDAwMAogCQlhZGQJXGJhc2UsIFxiYXNlLCAjMHgwMGQwMDAwMAogCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIElDSVAKIAkJbGRyCVxpcnFuciwgW1xiYXNlLCAjNF0JCUAgSUNNUgotCQliCTEwMDJmCiAKLTEwMDQ6Ci0JCW1yYwlwNiwgMCwgXGlycXN0YXQsIGM2LCBjMCwgMAlAIElDSVAyCi0JCW1yYwlwNiwgMCwgXGlycW5yLCBjNywgYzAsIDAJQCBJQ01SMgotCQlhbmRzCVxpcnFuciwgXGlycXN0YXQsIFxpcnFucgotCQliZXEJMTAwM2YKLQkJcnNiCVxpcnFzdGF0LCBcaXJxbnIsICMwCi0JCWFuZAlcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgotCQljbHoJXGlycW5yLCBcaXJxc3RhdAotCQlyc2IJXGlycW5yLCBcaXJxbnIsICMzMQotCQlhZGQJXGlycW5yLCBcaXJxbnIsICMoMzIgKyBQWEFfSVJRKDApKQotCQliCTEwMDFmCi0xMDAzOgotCQltcmMJcDYsIDAsIFxpcnFzdGF0LCBjMCwgYzAsIDAJQCBJQ0lQCi0JCW1yYwlwNiwgMCwgXGlycW5yLCBjMSwgYzAsIDAJQCBJQ01SCi0xMDAyOgogCQlhbmRzCVxpcnFuciwgXGlycXN0YXQsIFxpcnFucgogCQliZXEJMTAwMWYKIAkJcnNiCVxpcnFzdGF0LCBcaXJxbnIsICMwCiAJCWFuZAlcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgogCQljbHoJXGlycW5yLCBcaXJxc3RhdAogCQlyc2IJXGlycW5yLCBcaXJxbnIsICMoMzEgKyBQWEFfSVJRKDApKQorCQliCTEwMDFmCisxMDAyOgorCQlAIENvcmUgR2VuZXJhdGlvbiAyIChQWEEyN3gpIG9yIENvcmUgR2VuZXJhdGlvbiAzIChQWEEzeHgpCisJCW1yYwlwNiwgMCwgXGlycXN0YXQsIGM1LCBjMCwgMAlAIElDSFAKKwkJdHN0CVxpcnFzdGF0LCAjMHg4MDAwMDAwMAorCQliZXEJMTAwMWYKKwkJYmljCVxpcnFzdGF0LCBcaXJxc3RhdCwgIzB4ODAwMDAwMDAKKwkJbW92CVxpcnFuciwgXGlycXN0YXQsIGxzciAjMTYKKwkJYWRkCVxpcnFuciwgXGlycW5yLCAjKFBYQV9JUlEoMCkpCiAxMDAxOgogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCAxNmFiNzk1Li5hYTNkOWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTk3LDYgKzE5NywxNiBAQAogI2RlZmluZSBfX2NwdV9pc19weGE5MzUoaWQpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTk1MAorI2RlZmluZSBfX2NwdV9pc19weGE5NTAoaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl1bnNpZ25lZCBpbnQgX2lkID0gKGlkKSA+PiA0ICYgMHhmZmY7CVwKKwkJaWQgPT0gMHg2OTc7CQkJCVwKKwkgfSkKKyNlbHNlCisjZGVmaW5lIF9fY3B1X2lzX3B4YTk1MChpZCkJKDApCisjZW5kaWYKKwogI2RlZmluZSBjcHVfaXNfcHhhMjEwKCkJCQkJCVwKIAkoewkJCQkJCVwKIAkJX19jcHVfaXNfcHhhMjEwKHJlYWRfY3B1aWRfaWQoKSk7CVwKQEAgLTI0OSw2ICsyNTksMTMgQEAKIAkJX19jcHVfaXNfcHhhOTM1KGlkKTsJCQlcCiAJIH0pCiAKKyNkZWZpbmUgY3B1X2lzX3B4YTk1MCgpCQkJCQlcCisJKHsJCQkJCQlcCisJCXVuc2lnbmVkIGludCBpZCA9IHJlYWRfY3B1aWQoQ1BVSURfSUQpOwlcCisJCV9fY3B1X2lzX3B4YTk1MChpZCk7CQkJXAorCSB9KQorCisKIC8qCiAgKiBDUFVJRCBDb3JlIEdlbmVyYXRpb24gQml0CiAgKiA8PSAweDIgZm9yIHB4YTIxeC9weGEyNXgvcHhhMjZ4L3B4YTI3eApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lyZGEuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcmRhLmgKaW5kZXggMGE1MGMzYy4uM2NkNDFmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lyZGEuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJkYS5oCkBAIC0xMiw2ICsxMiw4IEBACiAJdm9pZCAoKnRyYW5zY2VpdmVyX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpOwogCWludCAoKnN0YXJ0dXApKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludCBncGlvX3B3ZG93bjsJCS8qIHBvd2VyZG93biBHUElPIGZvciB0aGUgSXJEQSBjaGlwICovCisJYm9vbCBncGlvX3B3ZG93bl9pbnZlcnRlZDsJLyogZ3Bpb19wd2Rvd24gaXMgaW52ZXJ0ZWQgKi8KIH07CiAKIGV4dGVybiB2b2lkIHB4YV9zZXRfZmljcF9pbmZvKHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgKmluZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggNmExZDk1OS4uMzY3N2E5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC02OCw5ICs2OCwxMCBAQAogI2lmZGVmIENPTkZJR19QWEEzeHgKICNkZWZpbmUgSVJRX1NTUDQJUFhBX0lSUSgxMykJLyogU1NQNCBzZXJ2aWNlIHJlcXVlc3QgKi8KICNkZWZpbmUgSVJRX0NJUgkJUFhBX0lSUSgzNCkJLyogQ29uc3VtZXIgSVIgKi8KKyNkZWZpbmUgSVJRX0NPTU1fV0RUCVBYQV9JUlEoMzUpIAkvKiBDb21tIFdEVCBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVJRX1RTSQkJUFhBX0lSUSgzNikJLyogVG91Y2ggU2NyZWVuIEludGVyZmFjZSAoUFhBMzIwKSAqLwogI2RlZmluZSBJUlFfVVNJTTIJUFhBX0lSUSgzOCkJLyogVVNJTTIgQ29udHJvbGxlciAqLwotI2RlZmluZSBJUlFfR1JQSElDUwlQWEFfSVJRKDM5KQkvKiBHcmFwaGljcyBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9HQ1UJCVBYQV9JUlEoMzkpCS8qIEdyYXBoaWNzIENvbnRyb2xsZXIgKi8KICNkZWZpbmUgSVJRX01NQzIJUFhBX0lSUSg0MSkJLyogTU1DMiBDb250cm9sbGVyICovCiAjZGVmaW5lIElSUV8xV0lSRQlQWEFfSVJRKDQ0KQkvKiAxLVdpcmUgQ29udHJvbGxlciAqLwogI2RlZmluZSBJUlFfTkFORAlQWEFfSVJRKDQ1KQkvKiBOQU5EIENvbnRyb2xsZXIgKi8KQEAgLTgxLDggKzgyLDMxIEBACiAjZGVmaW5lIElSUV9NTUMzCVBYQV9JUlEoNTUpCS8qIE1NQzMgQ29udHJvbGxlciAoUFhBMzEwKSAqLwogI2VuZGlmCiAKLSNkZWZpbmUgUFhBX0dQSU9fSVJRX0JBU0UJUFhBX0lSUSg2NCkKLSNkZWZpbmUgUFhBX0dQSU9fSVJRX05VTQkoMTI4KQorI2lmZGVmIENPTkZJR19DUFVfUFhBOTM1CisjZGVmaW5lIElSUV9VMk8JCVBYQV9JUlEoNjQpCS8qIFVTQiBPVEcgMi4wIENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKyNkZWZpbmUgSVJRX1UySAkJUFhBX0lSUSg2NSkJLyogVVNCIEhvc3QgMi4wIENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKworI2RlZmluZSBJUlFfTU1DM19QWEE5MzUJUFhBX0lSUSg3MikJLyogTU1DMyBDb250cm9sbGVyIChQWEE5MzUpICovCisjZGVmaW5lIElSUV9NTUM0X1BYQTkzNQlQWEFfSVJRKDczKQkvKiBNTUM0IENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKyNkZWZpbmUgSVJRX01NQzVfUFhBOTM1CVBYQV9JUlEoNzQpCS8qIE1NQzUgQ29udHJvbGxlciAoUFhBOTM1KSAqLworCisjZGVmaW5lIElSUV9VMlAJCVBYQV9JUlEoOTMpCS8qIFVTQiBQSFkgRCsvRC0gTGluZXMgKFBYQTkzNSkgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9QWEE5MzAKKyNkZWZpbmUgSVJRX0VOSFJPVAlQWEFfSVJRKDM3KQkvKiBFbmhhbmNlZCBSb3RhcnkgKFBYQTkzMCkgKi8KKyNkZWZpbmUgSVJRX0FDSVBDMAlQWEFfSVJRKDUpCisjZGVmaW5lIElSUV9BQ0lQQzEJUFhBX0lSUSg0MCkKKyNkZWZpbmUgSVJRX0FDSVBDMglQWEFfSVJRKDE5KQorI2RlZmluZSBJUlFfVFJLQkFMTAlQWEFfSVJRKDQzKQkvKiBUcmFjayBCYWxsICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUFhBOTUwCisjZGVmaW5lIElSUV9HQzUwMAlQWEFfSVJRKDcwKQkvKiBHcmFwaGljcyBDb250cm9sbGVyIChQWEE5NTApICovCisjZW5kaWYKKworI2RlZmluZSBQWEFfR1BJT19JUlFfQkFTRQlQWEFfSVJRKDk2KQorI2RlZmluZSBQWEFfR1BJT19JUlFfTlVNCSgxOTIpCiAKICNkZWZpbmUgR1BJT18yX3hfVE9fSVJRKHgpCShQWEFfR1BJT19JUlFfQkFTRSArICh4KSkKICNkZWZpbmUgSVJRX0dQSU8oeCkJKCgoeCkgPCAyKSA/IChJUlFfR1BJTzAgKyAoeCkpIDogR1BJT18yX3hfVE9fSVJRKHgpKQpAQCAtMTA1LDYgKzEyOSw4IEBACiAjZGVmaW5lIElSUV9CT0FSRF9FTkQJCShJUlFfQk9BUkRfU1RBUlQgKyA3MCkKICNlbGlmIGRlZmluZWQoQ09ORklHX01BQ0hfWllMT05JVEUpCiAjZGVmaW5lIElSUV9CT0FSRF9FTkQJCShJUlFfQk9BUkRfU1RBUlQgKyAzMikKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BYQV9FWlgpCisjZGVmaW5lIElSUV9CT0FSRF9FTkQJCShJUlFfQk9BUkRfU1RBUlQgKyAyMykKICNlbHNlCiAjZGVmaW5lIElSUV9CT0FSRF9FTkQJCShJUlFfQk9BUkRfU1RBUlQgKyAxNikKICNlbmRpZgpAQCAtMjM3LDYgKzI2MywxNiBAQAogI2RlZmluZSBNQUlOU1RPTkVfUzFfU1RTQ0hHX0lSUQlNQUlOU1RPTkVfSVJRKDE0KQogI2RlZmluZSBNQUlOU1RPTkVfUzFfSVJRCU1BSU5TVE9ORV9JUlEoMTUpCiAKKy8qIEJhbGxvb24zIEludGVycnVwdHMgKi8KKyNkZWZpbmUgQkFMTE9PTjNfSVJRKHgpCQkoSVJRX0JPQVJEX1NUQVJUICsgKHgpKQorCisjZGVmaW5lIEJBTExPT04zX0JQX0NGX05SRFlfSVJRCUJBTExPT04zX0lSUSgwKQorI2RlZmluZSBCQUxMT09OM19CUF9OU1RTQ0hHX0lSUQlCQUxMT09OM19JUlEoMSkKKworI2RlZmluZSBCQUxMT09OM19BVVhfTklSUQlJUlFfR1BJTyhCQUxMT09OM19HUElPX0FVWF9OSVJRKQorI2RlZmluZSBCQUxMT09OM19DT0RFQ19JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19DT0RFQ19JUlEpCisjZGVmaW5lIEJBTExPT04zX1MwX0NEX0lSUQlJUlFfR1BJTyhCQUxMT09OM19HUElPX1MwX0NEKQorCiAvKiBMb0NvTW8gSW50ZXJydXB0cyAoQ09ORklHX1NIQVJQX0xPQ09NTykgKi8KICNkZWZpbmUgSVJRX0xPQ09NT19LRVlfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMCkKICNkZWZpbmUgSVJRX0xPQ09NT19HUElPX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLmgKaW5kZXggNDgyMTg1MC4uMjcxZTI0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAuaApAQCAtMTYsMzA1ICsxNiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfSAogCi0jZGVmaW5lIG1mcF90b19ncGlvKG0pCSgobSkgJSAxMjgpCi0KLS8qIGxpc3Qgb2YgYWxsIHRoZSBjb25maWd1cmFibGUgTUZQIHBpbnMgKi8KLWVudW0gewotCU1GUF9QSU5fSU5WQUxJRCA9IC0xLAotCi0JTUZQX1BJTl9HUElPMCA9IDAsCi0JTUZQX1BJTl9HUElPMSwKLQlNRlBfUElOX0dQSU8yLAotCU1GUF9QSU5fR1BJTzMsCi0JTUZQX1BJTl9HUElPNCwKLQlNRlBfUElOX0dQSU81LAotCU1GUF9QSU5fR1BJTzYsCi0JTUZQX1BJTl9HUElPNywKLQlNRlBfUElOX0dQSU84LAotCU1GUF9QSU5fR1BJTzksCi0JTUZQX1BJTl9HUElPMTAsCi0JTUZQX1BJTl9HUElPMTEsCi0JTUZQX1BJTl9HUElPMTIsCi0JTUZQX1BJTl9HUElPMTMsCi0JTUZQX1BJTl9HUElPMTQsCi0JTUZQX1BJTl9HUElPMTUsCi0JTUZQX1BJTl9HUElPMTYsCi0JTUZQX1BJTl9HUElPMTcsCi0JTUZQX1BJTl9HUElPMTgsCi0JTUZQX1BJTl9HUElPMTksCi0JTUZQX1BJTl9HUElPMjAsCi0JTUZQX1BJTl9HUElPMjEsCi0JTUZQX1BJTl9HUElPMjIsCi0JTUZQX1BJTl9HUElPMjMsCi0JTUZQX1BJTl9HUElPMjQsCi0JTUZQX1BJTl9HUElPMjUsCi0JTUZQX1BJTl9HUElPMjYsCi0JTUZQX1BJTl9HUElPMjcsCi0JTUZQX1BJTl9HUElPMjgsCi0JTUZQX1BJTl9HUElPMjksCi0JTUZQX1BJTl9HUElPMzAsCi0JTUZQX1BJTl9HUElPMzEsCi0JTUZQX1BJTl9HUElPMzIsCi0JTUZQX1BJTl9HUElPMzMsCi0JTUZQX1BJTl9HUElPMzQsCi0JTUZQX1BJTl9HUElPMzUsCi0JTUZQX1BJTl9HUElPMzYsCi0JTUZQX1BJTl9HUElPMzcsCi0JTUZQX1BJTl9HUElPMzgsCi0JTUZQX1BJTl9HUElPMzksCi0JTUZQX1BJTl9HUElPNDAsCi0JTUZQX1BJTl9HUElPNDEsCi0JTUZQX1BJTl9HUElPNDIsCi0JTUZQX1BJTl9HUElPNDMsCi0JTUZQX1BJTl9HUElPNDQsCi0JTUZQX1BJTl9HUElPNDUsCi0JTUZQX1BJTl9HUElPNDYsCi0JTUZQX1BJTl9HUElPNDcsCi0JTUZQX1BJTl9HUElPNDgsCi0JTUZQX1BJTl9HUElPNDksCi0JTUZQX1BJTl9HUElPNTAsCi0JTUZQX1BJTl9HUElPNTEsCi0JTUZQX1BJTl9HUElPNTIsCi0JTUZQX1BJTl9HUElPNTMsCi0JTUZQX1BJTl9HUElPNTQsCi0JTUZQX1BJTl9HUElPNTUsCi0JTUZQX1BJTl9HUElPNTYsCi0JTUZQX1BJTl9HUElPNTcsCi0JTUZQX1BJTl9HUElPNTgsCi0JTUZQX1BJTl9HUElPNTksCi0JTUZQX1BJTl9HUElPNjAsCi0JTUZQX1BJTl9HUElPNjEsCi0JTUZQX1BJTl9HUElPNjIsCi0JTUZQX1BJTl9HUElPNjMsCi0JTUZQX1BJTl9HUElPNjQsCi0JTUZQX1BJTl9HUElPNjUsCi0JTUZQX1BJTl9HUElPNjYsCi0JTUZQX1BJTl9HUElPNjcsCi0JTUZQX1BJTl9HUElPNjgsCi0JTUZQX1BJTl9HUElPNjksCi0JTUZQX1BJTl9HUElPNzAsCi0JTUZQX1BJTl9HUElPNzEsCi0JTUZQX1BJTl9HUElPNzIsCi0JTUZQX1BJTl9HUElPNzMsCi0JTUZQX1BJTl9HUElPNzQsCi0JTUZQX1BJTl9HUElPNzUsCi0JTUZQX1BJTl9HUElPNzYsCi0JTUZQX1BJTl9HUElPNzcsCi0JTUZQX1BJTl9HUElPNzgsCi0JTUZQX1BJTl9HUElPNzksCi0JTUZQX1BJTl9HUElPODAsCi0JTUZQX1BJTl9HUElPODEsCi0JTUZQX1BJTl9HUElPODIsCi0JTUZQX1BJTl9HUElPODMsCi0JTUZQX1BJTl9HUElPODQsCi0JTUZQX1BJTl9HUElPODUsCi0JTUZQX1BJTl9HUElPODYsCi0JTUZQX1BJTl9HUElPODcsCi0JTUZQX1BJTl9HUElPODgsCi0JTUZQX1BJTl9HUElPODksCi0JTUZQX1BJTl9HUElPOTAsCi0JTUZQX1BJTl9HUElPOTEsCi0JTUZQX1BJTl9HUElPOTIsCi0JTUZQX1BJTl9HUElPOTMsCi0JTUZQX1BJTl9HUElPOTQsCi0JTUZQX1BJTl9HUElPOTUsCi0JTUZQX1BJTl9HUElPOTYsCi0JTUZQX1BJTl9HUElPOTcsCi0JTUZQX1BJTl9HUElPOTgsCi0JTUZQX1BJTl9HUElPOTksCi0JTUZQX1BJTl9HUElPMTAwLAotCU1GUF9QSU5fR1BJTzEwMSwKLQlNRlBfUElOX0dQSU8xMDIsCi0JTUZQX1BJTl9HUElPMTAzLAotCU1GUF9QSU5fR1BJTzEwNCwKLQlNRlBfUElOX0dQSU8xMDUsCi0JTUZQX1BJTl9HUElPMTA2LAotCU1GUF9QSU5fR1BJTzEwNywKLQlNRlBfUElOX0dQSU8xMDgsCi0JTUZQX1BJTl9HUElPMTA5LAotCU1GUF9QSU5fR1BJTzExMCwKLQlNRlBfUElOX0dQSU8xMTEsCi0JTUZQX1BJTl9HUElPMTEyLAotCU1GUF9QSU5fR1BJTzExMywKLQlNRlBfUElOX0dQSU8xMTQsCi0JTUZQX1BJTl9HUElPMTE1LAotCU1GUF9QSU5fR1BJTzExNiwKLQlNRlBfUElOX0dQSU8xMTcsCi0JTUZQX1BJTl9HUElPMTE4LAotCU1GUF9QSU5fR1BJTzExOSwKLQlNRlBfUElOX0dQSU8xMjAsCi0JTUZQX1BJTl9HUElPMTIxLAotCU1GUF9QSU5fR1BJTzEyMiwKLQlNRlBfUElOX0dQSU8xMjMsCi0JTUZQX1BJTl9HUElPMTI0LAotCU1GUF9QSU5fR1BJTzEyNSwKLQlNRlBfUElOX0dQSU8xMjYsCi0JTUZQX1BJTl9HUElPMTI3LAotCU1GUF9QSU5fR1BJTzBfMiwKLQlNRlBfUElOX0dQSU8xXzIsCi0JTUZQX1BJTl9HUElPMl8yLAotCU1GUF9QSU5fR1BJTzNfMiwKLQlNRlBfUElOX0dQSU80XzIsCi0JTUZQX1BJTl9HUElPNV8yLAotCU1GUF9QSU5fR1BJTzZfMiwKLQlNRlBfUElOX0dQSU83XzIsCi0JTUZQX1BJTl9HUElPOF8yLAotCU1GUF9QSU5fR1BJTzlfMiwKLQlNRlBfUElOX0dQSU8xMF8yLAotCU1GUF9QSU5fR1BJTzExXzIsCi0JTUZQX1BJTl9HUElPMTJfMiwKLQlNRlBfUElOX0dQSU8xM18yLAotCU1GUF9QSU5fR1BJTzE0XzIsCi0JTUZQX1BJTl9HUElPMTVfMiwKLQlNRlBfUElOX0dQSU8xNl8yLAotCU1GUF9QSU5fR1BJTzE3XzIsCi0KLQlNRlBfUElOX1VMUElfU1RQLAotCU1GUF9QSU5fVUxQSV9OWFQsCi0JTUZQX1BJTl9VTFBJX0RJUiwKLQotCU1GUF9QSU5fblhDVlJFTiwKLQlNRlBfUElOX0RGX0NMRV9uT0UsCi0JTUZQX1BJTl9ERl9uQURWMV9BTEUsCi0JTUZQX1BJTl9ERl9TQ0xLX0UsCi0JTUZQX1BJTl9ERl9TQ0xLX1MsCi0JTUZQX1BJTl9uQkUwLAotCU1GUF9QSU5fbkJFMSwKLQlNRlBfUElOX0RGX25BRFYyX0FMRSwKLQlNRlBfUElOX0RGX0lOVF9SbkIsCi0JTUZQX1BJTl9ERl9uQ1MwLAotCU1GUF9QSU5fREZfbkNTMSwKLQlNRlBfUElOX25MVUEsCi0JTUZQX1BJTl9uTExBLAotCU1GUF9QSU5fREZfbldFLAotCU1GUF9QSU5fREZfQUxFX25XRSwKLQlNRlBfUElOX0RGX25SRV9uT0UsCi0JTUZQX1BJTl9ERl9BRERSMCwKLQlNRlBfUElOX0RGX0FERFIxLAotCU1GUF9QSU5fREZfQUREUjIsCi0JTUZQX1BJTl9ERl9BRERSMywKLQlNRlBfUElOX0RGX0lPMCwKLQlNRlBfUElOX0RGX0lPMSwKLQlNRlBfUElOX0RGX0lPMiwKLQlNRlBfUElOX0RGX0lPMywKLQlNRlBfUElOX0RGX0lPNCwKLQlNRlBfUElOX0RGX0lPNSwKLQlNRlBfUElOX0RGX0lPNiwKLQlNRlBfUElOX0RGX0lPNywKLQlNRlBfUElOX0RGX0lPOCwKLQlNRlBfUElOX0RGX0lPOSwKLQlNRlBfUElOX0RGX0lPMTAsCi0JTUZQX1BJTl9ERl9JTzExLAotCU1GUF9QSU5fREZfSU8xMiwKLQlNRlBfUElOX0RGX0lPMTMsCi0JTUZQX1BJTl9ERl9JTzE0LAotCU1GUF9QSU5fREZfSU8xNSwKLQotCS8qIGFkZGl0aW9uYWwgcGlucyBvbiBQWEE5MzAgKi8KLQlNRlBfUElOX0dTSU1fVUlPLAotCU1GUF9QSU5fR1NJTV9VQ0xLLAotCU1GUF9QSU5fR1NJTV9VREVULAotCU1GUF9QSU5fR1NJTV9uVVJTVCwKLQlNRlBfUElOX1BNSUNfSU5ULAotCU1GUF9QSU5fUkRZLAotCi0JTUZQX1BJTl9NQVgsCi19OwotCi0vKgotICogYSBwb3NzaWJsZSBNRlAgY29uZmlndXJhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCBpbnRlZ2VyCi0gKgotICogYml0ICAwLi4gOSAtIE1GUCBQaW4gTnVtYmVyICgxMDI0IFBpbnMgTWF4aW11bSkKLSAqIGJpdCAxMC4uMTIgLSBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0aW9uCi0gKiBiaXQgMTMuLjE1IC0gRHJpdmUgU3RyZW5ndGgKLSAqIGJpdCAxNi4uMTggLSBMb3cgUG93ZXIgTW9kZSBTdGF0ZQotICogYml0IDE5Li4yMCAtIExvdyBQb3dlciBNb2RlIEVkZ2UgRGV0ZWN0aW9uCi0gKiBiaXQgMjEuLjIyIC0gUnVuIE1vZGUgUHVsbCBTdGF0ZQotICoKLSAqIHRvIGZhY2lsaXRhdGUgdGhlIGRlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBwcm92aWRlZAotICoKLSAqIE1GUF9DRkdfREVGQVVMVCAtIGRlZmF1bHQgTUZQIGNvbmZpZ3VyYXRpb24gdmFsdWUsIHdpdGgKLSAqIAkJICBhbHRlcm5hdGUgZnVuY3Rpb24gPSAwLAotICogCQkgIGRyaXZlIHN0cmVuZ3RoID0gZmFzdCAzbUEgKE1GUF9EUzAzWCkKLSAqIAkJICBsb3cgcG93ZXIgbW9kZSA9IGRlZmF1bHQKLSAqIAkJICBlZGdlIGRldGVjdGlvbiA9IG5vbmUKLSAqCi0gKiBNRlBfQ0ZHCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uCi0gKiBNRlBfQ0ZHX0RSVgktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQKLSAqIAkJICBwaW4gZHJpdmUgc3RyZW5ndGgKLSAqIE1GUF9DRkdfTFBNCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uIGFuZAotICogCQkgIGxvdyBwb3dlciBtb2RlCi0gKiBNRlBfQ0ZHX1gJLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24sCi0gKiAJCSAgcGluIGRyaXZlIHN0cmVuZ3RoIGFuZCBsb3cgcG93ZXIgbW9kZQotICovCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBtZnBfY2ZnX3Q7Ci0KLSNkZWZpbmUgTUZQX1BJTih4KQkJKCh4KSAmIDB4M2ZmKQotCi0jZGVmaW5lIE1GUF9BRjAJCQkoMHgwIDw8IDEwKQotI2RlZmluZSBNRlBfQUYxCQkJKDB4MSA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGMgkJCSgweDIgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjMJCQkoMHgzIDw8IDEwKQotI2RlZmluZSBNRlBfQUY0CQkJKDB4NCA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGNQkJCSgweDUgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjYJCQkoMHg2IDw8IDEwKQotI2RlZmluZSBNRlBfQUY3CQkJKDB4NyA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGX01BU0sJCSgweDcgPDwgMTApCi0jZGVmaW5lIE1GUF9BRih4KQkJKCgoeCkgPj4gMTApICYgMHg3KQotCi0jZGVmaW5lIE1GUF9EUzAxWAkJKDB4MCA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDJYCQkoMHgxIDw8IDEzKQotI2RlZmluZSBNRlBfRFMwM1gJCSgweDIgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzA0WAkJKDB4MyA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDZYCQkoMHg0IDw8IDEzKQotI2RlZmluZSBNRlBfRFMwOFgJCSgweDUgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzEwWAkJKDB4NiA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMTNYCQkoMHg3IDw8IDEzKQotI2RlZmluZSBNRlBfRFNfTUFTSwkJKDB4NyA8PCAxMykKLSNkZWZpbmUgTUZQX0RTKHgpCQkoKCh4KSA+PiAxMykgJiAweDcpCi0KLSNkZWZpbmUgTUZQX0xQTV9ERUZBVUxUCQkoMHgwIDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX0RSSVZFX0xPVwkoMHgxIDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX0RSSVZFX0hJR0gJKDB4MiA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9QVUxMX0xPVwkoMHgzIDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX1BVTExfSElHSAkoMHg0IDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX0ZMT0FUCQkoMHg1IDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX0lOUFVUCQkoMHg2IDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX1NUQVRFX01BU0sJKDB4NyA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9TVEFURSh4KQkoKCh4KSA+PiAxNikgJiAweDcpCi0KLSNkZWZpbmUgTUZQX0xQTV9FREdFX05PTkUJKDB4MCA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFX1JJU0UJKDB4MSA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFX0ZBTEwJKDB4MiA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFX0JPVEgJKDB4MyA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFX01BU0sJKDB4MyA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFKHgpCQkoKCh4KSA+PiAxOSkgJiAweDMpCi0KLSNkZWZpbmUgTUZQX1BVTExfTk9ORQkJKDB4MCA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTExfTE9XCQkoMHgxIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9ISUdICQkoMHgyIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9CT1RICQkoMHgzIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9NQVNLCQkoMHgzIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTCh4KQkJKCgoeCkgPj4gMjEpICYgMHgzKQotCi0jZGVmaW5lIE1GUF9DRkdfREVGQVVMVAkJKE1GUF9BRjAgfCBNRlBfRFMwM1ggfCBNRlBfTFBNX0RFRkFVTFQgfFwKLQkJCQkgTUZQX0xQTV9FREdFX05PTkUgfCBNRlBfUFVMTF9OT05FKQotCi0jZGVmaW5lIE1GUF9DRkcocGluLCBhZikJCVwKLQkoKE1GUF9DRkdfREVGQVVMVCAmIH5NRlBfQUZfTUFTSykgfFwKLQkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZikpCi0KLSNkZWZpbmUgTUZQX0NGR19EUlYocGluLCBhZiwgZHJ2KQlcCi0JKChNRlBfQ0ZHX0RFRkFVTFQgJiB+KE1GUF9BRl9NQVNLIHwgTUZQX0RTX01BU0spKSB8XAotCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQXyMjZHJ2KSkKLQotI2RlZmluZSBNRlBfQ0ZHX0xQTShwaW4sIGFmLCBscG0pCVwKLQkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfTFBNX1NUQVRFX01BU0spKSB8XAotCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQX0xQTV8jI2xwbSkpCi0KLSNkZWZpbmUgTUZQX0NGR19YKHBpbiwgYWYsIGRydiwgbHBtKQlcCi0JKChNRlBfQ0ZHX0RFRkFVTFQgJiB+KE1GUF9BRl9NQVNLIHwgTUZQX0RTX01BU0sgfCBNRlBfTFBNX1NUQVRFX01BU0spKSB8XAotCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQXyMjZHJ2IHwgTUZQX0xQTV8jI2xwbSkpCisjaW5jbHVkZSA8cGxhdC9tZnAuaD4KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUZQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tbWMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tbWMuaAppbmRleCA2ZDEzMDRjLi4wMmE2OWRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbW1jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21tYy5oCkBAIC0xNCw2ICsxNCwxMSBAQAogCWludCAoKmdldF9ybykoc3RydWN0IGRldmljZSAqKTsKIAl2b2lkICgqc2V0cG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgdW5zaWduZWQgaW50KTsKIAl2b2lkICgqZXhpdCkoc3RydWN0IGRldmljZSAqLCB2b2lkICopOworCWludCBncGlvX2NhcmRfZGV0ZWN0OwkJCS8qIGdwaW8gZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0aW9uICovCisJaW50IGdwaW9fY2FyZF9ybzsJCQkvKiBncGlvIGRldGVjdGluZyByZWFkIG9ubHkgdG9nZ2xlICovCisJYm9vbCBncGlvX2NhcmRfcm9faW52ZXJ0OwkJLyogZ3BpbyBybyBpcyBpbnZlcnRlZCAqLworCWludCBncGlvX3Bvd2VyOwkJCQkvKiBncGlvIHBvd2VyaW5nIHVwIE1NQyBidXMgKi8KKwlib29sIGdwaW9fcG93ZXJfaW52ZXJ0OwkJCS8qIGdwaW8gcG93ZXIgaXMgaW52ZXJ0ZWQgKi8KIH07CiAKIGV4dGVybiB2b2lkIHB4YV9zZXRfbWNpX2luZm8oc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGM5YjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10Yy5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcGFsbXRjLWdwaW8uaAorICoKKyAqIEdQSU9zIGFuZCBpbnRlcnJ1cHRzIGZvciBQYWxtIFR1bmdzdGVufEMgSGFuZGhlbGQgQ29tcHV0ZXIKKyAqCisgKiBBdXRob3JzOglBbGV4IE9zYm9ybmUgPGJvYm9mZG9vbUBnbWFpbC5jb20+CisgKgkJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCQlIb2xnZXIgQm9ja2xldCA8Yml0ei5lbWFpbEBnbXgubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfUEFMTVRDX0hfCisjZGVmaW5lIF9JTkNMVURFX1BBTE1UQ19IXworCisvKiogSEVSRSBBUkUgR1BJT3MgKiovCisKKy8qIEdQSU9zICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0VBUlBIT05FX0RFVEVDVAkyCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0NSQURMRV9ERVRFQ1QJNQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19IT1RTWU5DX0JVVFRPTgk3CisKKy8qIFNEL01NQyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19TRF9ERVRFQ1RfTgkxMgorI2RlZmluZSBHUElPX05SX1BBTE1UQ19TRF9QT1dFUgkJMzIKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfU0RfUkVBRE9OTFkJNTQKKworLyogV0xBTiAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkJMTMKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1BXUlJFQURZCTE0CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjEJMTUKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMgkzMworI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzCTU1CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVAk3OAorCisvKiBVREMgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfVVNCX0RFVEVDVF9OCTQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfVVNCX1BPV0VSCTM2CisKKy8qIExDRC9CQUNLTElHSFQgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfQkxfUE9XRVIJCTE2CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0xDRF9QT1dFUgk0NAorI2RlZmluZSBHUElPX05SX1BBTE1UQ19MQ0RfQkxBTksJMzgKKworLyogVUFSVCAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19SUzIzMl9QT1dFUgkzNworCisvKiBJUkRBICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0lSX0RJU0FCTEUJNDUKKworLyogSVJRcyAqLworI2RlZmluZSBJUlFfR1BJT19QQUxNVENfU0RfREVURUNUX04JSVJRX0dQSU8oR1BJT19OUl9QQUxNVENfU0RfREVURUNUX04pCisjZGVmaW5lIElSUV9HUElPX1BBTE1UQ19XTEFOX1JFQURZCUlSUV9HUElPKEdQSU9fTlJfUEFMTVRDX1dMQU5fUkVBRFkpCisKKy8qIFVDQjE0MDAgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUE9XRVJfREVURUNUCSgweDgwIHwgMHgwMCkKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfSEVBRFBIT05FX0RFVEVDVAkoMHg4MCB8IDB4MDEpCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1NQRUFLRVJfRU5BQkxFCSgweDgwIHwgMHgwMykKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfVklCUkFfUE9XRVIJKDB4ODAgfCAweDA1KQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19MRURfUE9XRVIJKDB4ODAgfCAweDA3KQorCisvKiogSEVSRSBBUkUgSU5JVCBWQUxVRVMgKiovCisjZGVmaW5lIFBBTE1UQ19VQ0IxNDAwX0dQSU9fT0ZGU0VUCTB4ODAKKworLyogQkFUVEVSWSAqLworI2RlZmluZSBQQUxNVENfQkFUX01BWF9WT0xUQUdFCQk0MDAwCS8qIDQuMDBWIG1heGltdW0gdm9sdGFnZSAqLworI2RlZmluZSBQQUxNVENfQkFUX01JTl9WT0xUQUdFCQkzNTUwCS8qIDMuNTVWIGNyaXRpY2FsIHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NQVhfQ1VSUkVOVAkJMAkvKiB1bmtub2tuICovCisjZGVmaW5lIFBBTE1UQ19CQVRfTUlOX0NVUlJFTlQJCTAJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVENfQkFUX01BWF9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVENfQkFUX01JTl9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVENfTUFYX0xJRkVfTUlOUwkJMjQwCS8qIG9uLWxpZmUgaW4gbWludXRlcyAqLworCisjZGVmaW5lIFBBTE1UQ19CQVRfTUVBU1VSRV9ERUxBWQkoSFogKiAxKQorCisvKiBCQUNLTElHSFQgKi8KKyNkZWZpbmUgUEFMTVRDX01BWF9JTlRFTlNJVFkJCTB4RkUKKyNkZWZpbmUgUEFMTVRDX0RFRkFVTFRfSU5URU5TSVRZCTB4N0UKKyNkZWZpbmUgUEFMTVRDX0xJTUlUX01BU0sJCTB4N0YKKyNkZWZpbmUgUEFMTVRDX1BSRVNDQUxFUgkJMHgzRgorI2RlZmluZSBQQUxNVENfUEVSSU9EX05TCQkzNTAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10eC5oCmluZGV4IGU3NDA4MmMuLjFiZTBkYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdHguaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKQEAgLTgyLDYgKzgyLDExIEBACiAjZGVmaW5lIFBBTE1UWF9QSFlTX0ZMQVNIX1NUQVJUCVBYQV9DUzBfUEhZUwkvKiBDaGlwU2VsZWN0IDAgKi8KICNkZWZpbmUgUEFMTVRYX1BIWVNfTkFORF9TVEFSVAlQWEFfQ1MxX1BIWVMJLyogQ2hpcFNlbGVjdCAxICovCiAKKyNkZWZpbmUgUEFMTVRYX05BTkRfQUxFX1BIWVMJKFBBTE1UWF9QSFlTX05BTkRfU1RBUlQgfCAoMSA8PCAyNCkpCisjZGVmaW5lIFBBTE1UWF9OQU5EX0NMRV9QSFlTCShQQUxNVFhfUEhZU19OQU5EX1NUQVJUIHwgKDEgPDwgMjUpKQorI2RlZmluZSBQQUxNVFhfTkFORF9BTEVfVklSVAkweGZmMTAwMDAwCisjZGVmaW5lIFBBTE1UWF9OQU5EX0NMRV9WSVJUCTB4ZmYyMDAwMDAKKwogLyogVE9VQ0hTQ1JFRU4gKi8KICNkZWZpbmUgQUM5N19MSU5LX0ZSQU1FCQkJMjEKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAppbmRleCA3ZDFhMDU5Li5lOTFkNjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaApAQCAtMjA4LDcgKzIwOCw3IEBACiAjZGVmaW5lIENLRU5fTVZFRAk0MwkvKiA8IE1WRUQgY2xvY2sgZW5hYmxlICovCiAKIC8qIE5vdGU6IEdDVSBjbG9jayBlbmFibGUgYml0IGRpZmZlcnMgb24gUFhBMzAwL1BYQTMxMCBhbmQgUFhBMzIwICovCi0jZGVmaW5lIFBYQTMwMF9DS0VOX0dSQVBISUNTCTQyCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgY2xvY2sgZW5hYmxlICovCi0jZGVmaW5lIFBYQTMyMF9DS0VOX0dSQVBISUNTCTcJLyogR3JhcGhpY3MgY29udHJvbGxlciBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgQ0tFTl9QWEEzMDBfR0NVCQk0MgkvKiBHcmFwaGljcyBjb250cm9sbGVyIGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBDS0VOX1BYQTMyMF9HQ1UJCTcJLyogR3JhcGhpY3MgY29udHJvbGxlciBjbG9jayBlbmFibGUgKi8KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUFhBM1hYX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaAppbmRleCA2OTMyNzIwLi5mNzMwNjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaApAQCAtMTE4LDcgKzExOCw4IEBACiAJdV9pbnQJCWZpeGVkX21vZGVzOjEsCiAJCQljbWFwX2ludmVyc2U6MSwKIAkJCWNtYXBfc3RhdGljOjEsCi0JCQl1bnVzZWQ6Mjk7CisJCQlhY2NlbGVyYXRpb25fZW5hYmxlZDoxLAorCQkJdW51c2VkOjI4OwogCiAJLyogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgZGVmaW5lZCBpbiBMQ0NSMAogCSAqICAgICAgTENDUjBfQWN0IG9yIExDQ1IwX1BhcyAgICAgICAgICBBY3RpdmUgb3IgUGFzc2l2ZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCmluZGV4IGFkMjNlNzQuLjY4NDY0Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1pbnRjLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgSUNGUAkJX19SRUcoMHg0MEQwMDAwQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyICovCiAjZGVmaW5lIElDUFIJCV9fUkVHKDB4NDBEMDAwMTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyICovCiAjZGVmaW5lIElDQ1IJCV9fUkVHKDB4NDBEMDAwMTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIElDSFAJCV9fUkVHKDB4NDBEMDAwMTgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBIaWdoZXN0IFByaW9yaXR5IFJlZ2lzdGVyICovCiAKICNkZWZpbmUgSUNJUDIJCV9fUkVHKDB4NDBEMDAwOUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAyICovCiAjZGVmaW5lIElDTVIyCQlfX1JFRygweDQwRDAwMEEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAyICovCkBAIC0yMCw0ICsyMSwxNCBAQAogI2RlZmluZSBJQ0ZQMgkJX19SRUcoMHg0MEQwMDBBOCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KICNkZWZpbmUgSUNQUjIJCV9fUkVHKDB4NDBEMDAwQUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KIAorI2RlZmluZSBJQ0lQMwkJX19SRUcoMHg0MEQwMDEzMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgSUNNUjMJCV9fUkVHKDB4NDBEMDAxMzQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgSUNMUjMJCV9fUkVHKDB4NDBEMDAxMzgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAzICovCisjZGVmaW5lIElDRlAzCQlfX1JFRygweDQwRDAwMTNDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBJQ1BSMwkJX19SRUcoMHg0MEQwMDE0MCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgMyAqLworCisjZGVmaW5lIElQUih4KQkJX19SRUcoMHg0MEQwMDAxQyArICh4IDwgMzIgPyAoeCA8PCAyKQkJXAorCQkJCTogKHggPCA2NCA/ICgweDk0ICsgKCh4IC0gMzIpIDw8IDIpKQlcCisJCQkJOiAoMHgxMjggKyAoKHggLSA2NCkgPDwgMikpKSkpCisKICNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfSU5UQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBiNTQ3NDk0Li4yMzc3MzRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTM3LDcgKzM3LDcgQEAKIHsKIAlpZiAobWFjaGluZV9pc19saXR0bGV0b24oKSB8fCBtYWNoaW5lX2lzX2ludGVsbW90ZTIoKQogCSAgICB8fCBtYWNoaW5lX2lzX2NzYjcyNigpIHx8IG1hY2hpbmVfaXNfc3RhcmdhdGUyKCkKLQkgICAgfHwgbWFjaGluZV9pc19jbV94MzAwKCkpCisJICAgIHx8IG1hY2hpbmVfaXNfY21feDMwMCgpIHx8IG1hY2hpbmVfaXNfYmFsbG9vbjMoKSkKIAkJVUFSVCA9IFNUVUFSVDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwppbmRleCBmNmUwMzAwLi42MTEyYWY0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAorI2RlZmluZSBNQVhfSU5URVJOQUxfSVJRUwkxMjgKKwogI2RlZmluZSBJUlFfQklUKG4pCSgoKG4pIC0gUFhBX0lSUSgwKSkgJiAweDFmKQogI2RlZmluZSBfSUNNUihuKQkoKigoKChuKSAtIFBYQV9JUlEoMCkpICYgfjB4MWYpID8gJklDTVIyIDogJklDTVIpKQogI2RlZmluZSBfSUNMUihuKQkoKigoKChuKSAtIFBYQV9JUlEoMCkpICYgfjB4MWYpID8gJklDTFIyIDogJklDTFIpKQpAQCAtMTIwLDcgKzEyMiw5IEBACiAKIHZvaWQgX19pbml0IHB4YV9pbml0X2lycShpbnQgaXJxX25yLCBzZXRfd2FrZV90IGZuKQogewotCWludCBpcnE7CisJaW50IGlycSwgaTsKKworCUJVR19PTihpcnFfbnIgPiBNQVhfSU5URVJOQUxfSVJRUyk7CiAKIAlweGFfaW50ZXJuYWxfaXJxX25yID0gaXJxX25yOwogCkBAIC0xMjksNiArMTMzLDEyIEBACiAJCV9JQ0xSKGlycSkgPSAwOwkvKiBhbGwgSVJRcyBhcmUgSVJRLCBub3QgRklRICovCiAJfQogCisJLyogaW5pdGlhbGl6ZSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8KKwlpZiAoY3B1X2lzX3B4YTI3eCgpIHx8IGNwdV9pc19weGEzeHgoKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgaXJxX25yOyBpKyspCisJCQlJUFIoaSkgPSBpIHwgKDEgPDwgMzEpOworCX0KKwogCS8qIG9ubHkgdW5tYXNrZWQgaW50ZXJydXB0cyBraWNrIHVzIG91dCBvZiBpZGxlICovCiAJSUNDUiA9IDE7CiAKQEAgLTE0Myw3ICsxNTMsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pY21yWzJdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfaWNtcltNQVhfSU5URVJOQUxfSVJRUy8zMl07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pcHJbTUFYX0lOVEVSTkFMX0lSUVNdOwogCiBzdGF0aWMgaW50IHB4YV9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC0xNTMsNiArMTY0LDggQEAKIAkJc2F2ZWRfaWNtcltpXSA9IF9JQ01SKGlycSk7CiAJCV9JQ01SKGlycSkgPSAwOwogCX0KKwlmb3IgKGkgPSAwOyBpIDwgcHhhX2ludGVybmFsX2lycV9ucjsgaSsrKQorCQlzYXZlZF9pcHJbaV0gPSBJUFIoaSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NSw2ICsxNzgsOCBAQAogCQlfSUNNUihpcnEpID0gc2F2ZWRfaWNtcltpXTsKIAkJX0lDTFIoaXJxKSA9IDA7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBweGFfaW50ZXJuYWxfaXJxX25yOyBpKyspCisJCUlQUihpKSA9IHNhdmVkX2lwcltpXTsKIAogCUlDQ1IgPSAxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCA1NWIzNzg4Li4xMzg0ODk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMjY1LDQ1ICsyNjUsMTIgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCi1zdGF0aWMgaW50IGxpdHRsZXRvbl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICBpcnFfaGFuZGxlcl90IGxpdHRsZXRvbl9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnIsIGdwaW9fY2QgPSBHUElPX01NQzFfQ0FSRF9ERVRFQ1Q7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19jZCwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX2NkKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9fY2QpLCBsaXR0bGV0b25fZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAibW1jIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IGNhcmQgZGV0ZWN0IElSUVxuIik7Ci0JCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyX3JlcXVlc3RfaXJxOgotCWdwaW9fZnJlZShncGlvX2NkKTsKLWVycl9yZXF1ZXN0X2NkOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpdHRsZXRvbl9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGdwaW9fY2QgPSBHUElPX01NQzFfQ0FSRF9ERVRFQ1Q7Ci0KLQlmcmVlX2lycShncGlvX3RvX2lycShncGlvX2NkKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKGdwaW9fY2QpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGxpdHRsZXRvbl9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGxpdHRsZXRvbl9tY2lfaW5pdCwKLQkuZXhpdAkJPSBsaXR0bGV0b25fbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX01NQzFfQ0FSRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBsaXR0bGV0b25faW5pdF9tbWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwppbmRleCBmMDRjODMzLi5jNmE5NGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCkBAIC00ODIsMTEgKzQ4MiwxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGx1YmJvY2tfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5kZXRlY3RfZGVsYXkJPSAxLAotCS5pbml0IAkJPSBsdWJib2NrX21jaV9pbml0LAotCS5nZXRfcm8JCT0gbHViYm9ja19tY2lfZ2V0X3JvLAotCS5leGl0IAkJPSBsdWJib2NrX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmRldGVjdF9kZWxheQkJPSAxLAorCS5pbml0IAkJCT0gbHViYm9ja19tY2lfaW5pdCwKKwkuZ2V0X3JvCQkJPSBsdWJib2NrX21jaV9nZXRfcm8sCisJLmV4aXQgCQkJPSBsdWJib2NrX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIGx1YmJvY2tfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCkBAIC01MDQsOCArNTA3LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgbHViYm9ja19maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IGx1YmJvY2tfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSAtMSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUsCisJLnRyYW5zY2VpdmVyX21vZGUJPSBsdWJib2NrX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBsdWJib2NrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCmluZGV4IGNhMzk2NjkuLjUzNjBjMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwpAQCAtMTQwLDE1ICsxNDAsOSBAQAogICogSVJEQQogICovCiAKLXN0YXRpYyB2b2lkIG1hZ2ljaWFuX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU84M19NQUdJQ0lBTl9uSVJfRU4sIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIG1hZ2ljaWFuX2ZpY3BfaW5mbyA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBtYWdpY2lhbl9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU84M19NQUdJQ0lBTl9uSVJfRU4sCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKgpAQCAtNjUxLDU1ICs2NDUsMjQgQEAKIHN0YXRpYyBpbnQgbWFnaWNpYW5fbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCWlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwgdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoSVJRX01BR0lDSUFOX1NELCBkZXRlY3RfaXJxLAorCXJldHVybiByZXF1ZXN0X2lycShJUlFfTUFHSUNJQU5fU0QsIGRldGVjdF9pcnEsCiAJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKLQkJCQkiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEVHUElPX01BR0lDSUFOX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZXF1ZXN0X3Bvd2VyOwotCWVyciA9IGdwaW9fcmVxdWVzdChFR1BJT19NQUdJQ0lBTl9uU0RfUkVBRE9OTFksICJuU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZXF1ZXN0X3JlYWRvbmx5OwotCi0JcmV0dXJuIDA7Ci0KLWVycl9yZXF1ZXN0X3JlYWRvbmx5OgotCWdwaW9fZnJlZShFR1BJT19NQUdJQ0lBTl9TRF9QT1dFUik7Ci1lcnJfcmVxdWVzdF9wb3dlcjoKLQlmcmVlX2lycShJUlFfTUFHSUNJQU5fU0QsIGRhdGEpOwotZXJyX3JlcXVlc3RfaXJxOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hZ2ljaWFuX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX1NEX1BPV0VSLCAoMSA8PCB2ZGQpICYgcGRhdGEtPm9jcl9tYXNrKTsKLX0KLQotc3RhdGljIGludCBtYWdpY2lhbl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gKCFncGlvX2dldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9uU0RfUkVBRE9OTFkpKTsKKwkJCQkibW1jIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hZ2ljaWFuX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fblNEX1JFQURPTkxZKTsKLQlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIpOwogCWZyZWVfaXJxKElSUV9NQUdJQ0lBTl9TRCwgZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbWFnaWNpYW5fbWNpX2luZm8gPSB7Ci0JLm9jcl9tYXNrID0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0ICAgICA9IG1hZ2ljaWFuX21jaV9pbml0LAotCS5nZXRfcm8gICA9IG1hZ2ljaWFuX21jaV9nZXRfcm8sCi0JLnNldHBvd2VyID0gbWFnaWNpYW5fbWNpX3NldHBvd2VyLAotCS5leGl0ICAgICA9IG1hZ2ljaWFuX21jaV9leGl0LAorCS5vY3JfbWFzayAJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0ICAgICAJCT0gbWFnaWNpYW5fbWNpX2luaXQsCisJLmV4aXQgICAgIAkJPSBtYWdpY2lhbl9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gRUdQSU9fTUFHSUNJQU5fblNEX1JFQURPTkxZLAorCS5ncGlvX2NhcmRfcm9faW52ZXJ0CT0gMSwKKwkuZ3Bpb19wb3dlcgkJPSBFR1BJT19NQUdJQ0lBTl9TRF9QT1dFUiwKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwppbmRleCBmNGRhYmYwLi5hNGVlYWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwpAQCAtNDUwLDEwICs0NTAsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBtYWluc3RvbmVfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBtYWluc3RvbmVfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IG1haW5zdG9uZV9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gbWFpbnN0b25lX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBtYWluc3RvbmVfbWNpX2luaXQsCisJLnNldHBvd2VyIAkJPSBtYWluc3RvbmVfbWNpX3NldHBvd2VyLAorCS5leGl0CQkJPSBtYWluc3RvbmVfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgbWFpbnN0b25lX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQpAQCAtNDc2LDggKzQ3OSw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIG1haW5zdG9uZV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IG1haW5zdG9uZV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IC0xLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKKwkudHJhbnNjZWl2ZXJfbW9kZQk9IG1haW5zdG9uZV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZ3Bpb19rZXlzX2J1dHRvbltdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCmluZGV4IDJkMjgxMzIuLjNjYWI0NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKQEAgLTQzNCw3MiArNDM0LDE1IEBACiAvKgogICogU0RJTy9NTUMgQ2FyZCBjb250cm9sbGVyCiAgKi8KLXN0YXRpYyB2b2lkIG1jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQlpZiAoKDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spCi0JCWdwaW9fc2V0X3ZhbHVlKEdQSU85MV9TRElPX0VOLCAxKTsJLyogZW5hYmxlIFNESU8gcG93ZXIgKi8KLQllbHNlCi0JCWdwaW9fc2V0X3ZhbHVlKEdQSU85MV9TRElPX0VOLCAwKTsJLyogZGlzYWJsZSBTRElPIHBvd2VyICovCi19Ci0KLXN0YXRpYyBpbnQgbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU83OF9TRElPX1JPKTsKLX0KLQotc3RydWN0IGdwaW9fcmVzcyBtY2lfZ3Bpb3NbXSA9IHsKLQlNSU9fR1BJT19JTihHUElPNzhfU0RJT19STywgCSJTRElPIHJlYWRvbmx5IGRldGVjdCIpLAotCU1JT19HUElPX0lOKEdQSU8xNV9TRElPX0lOU0VSVCwJIlNESU8gaW5zZXJ0aW9uIGRldGVjdCIpLAotCU1JT19HUElPX09VVChHUElPOTFfU0RJT19FTiwgMCwJIlNESU8gcG93ZXIgZW5hYmxlIikKLX07Ci0KLXN0YXRpYyB2b2lkIG1jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQltaW9fZ3Bpb19mcmVlKEFSUkFZX0FORF9TSVpFKG1jaV9ncGlvcykpOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU8xNV9TRElPX0lOU0VSVCksIGRhdGEpOwotfQotCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIG1pb2E3MDFfbWNpX2luZm87Ci0KIC8qKgogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi1zdGF0aWMgaW50IG1jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCByYzsKLQlpbnQgaXJxID0gZ3Bpb190b19pcnEoR1BJTzE1X1NESU9fSU5TRVJUKTsKLQotCXJjID0gbWlvX2dwaW9fcmVxdWVzdChBUlJBWV9BTkRfU0laRShtY2lfZ3Bpb3MpKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2dwaW87Ci0JLyogZW5hYmxlIFJFL0ZFIGludGVycnVwdCBvbiBjYXJkIGluc2VydGlvbiBhbmQgcmVtb3ZhbCAqLwotCXJjID0gcmVxdWVzdF9pcnEoaXJxLCBkZXRlY3RfaW50LAotCQkJIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwKLQkJCSBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9pcnE7Ci0KLQltaW9hNzAxX21jaV9pbmZvLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKLQlyZXR1cm4gMDsKLQotZXJyX2lycToKLQlkZXZfZXJyKGRldiwgIm1pb2E3MDFfbWNpX2luaXQ6IE1NQy9TRDoiCi0JCSIgY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQltaW9fZ3Bpb19mcmVlKEFSUkFZX0FORF9TSVpFKG1jaV9ncGlvcykpOwotZXJyX2dwaW86Ci0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIG1pb2E3MDFfbWNpX2luZm8gPSB7Ci0JLm9jcl9tYXNrID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQJICA9IG1jaV9pbml0LAotCS5nZXRfcm8JICA9IG1jaV9nZXRfcm8sCi0JLnNldHBvd2VyID0gbWNpX3NldHBvd2VyLAotCS5leGl0CSAgPSBtY2lfZXhpdCwKKwkub2NyX21hc2sgCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJTzE1X1NESU9fSU5TRVJULAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJTzc4X1NESU9fUk8sCisJLmdwaW9fcG93ZXIJCT0gR1BJTzkxX1NESU9fRU4sCiB9OwogCiAvKiBGbGFzaFJBTSAqLwpAQCAtNzY1LDE5ICs3MDgsMjAgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0gewotCS5idXNfaWQJPSAwLCAvKiBNdXN0IG1hdGNoIGlkIGluIHB4YTI3eF9kZXZpY2VfY2FtZXJhIGluIGRldmljZS5jICovCi19OwotCiAvKiBCb2FyZCBJMkMgZGV2aWNlcy4gKi8KIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtaW9hNzAxX2kyY19kZXZpY2VzW10gPSB7CiAJewotCQkvKiBNdXN0IGluaXRpYWxpemUgYmVmb3JlIHRoZSBjYW1lcmEocykgKi8KIAkJSTJDX0JPQVJEX0lORk8oIm10OW0xMTEiLCAweDVkKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7CisJLmJ1c19pZAkJPSAwLCAvKiBNYXRjaCBpZCBpbiBweGEyN3hfZGV2aWNlX2NhbWVyYSBpbiBkZXZpY2UuYyAqLworCS5ib2FyZF9pbmZvCT0gJm1pb2E3MDFfaTJjX2RldmljZXNbMF0sCisJLmkyY19hZGFwdGVyX2lkCT0gMCwKKwkubW9kdWxlX25hbWUJPSAibXQ5bTExMSIsCit9OworCiBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIGkyY19wZGF0YSA9IHsKIAkuZmFzdF9tb2RlID0gMSwKIH07CkBAIC04MTEsNiArNzU1LDcgQEAKIE1JT19TSU1QTEVfREVWKG1pb2E3MDFfc291bmQsCSAgIm1pb2E3MDEtd205NzEzIiwgTlVMTCkKIE1JT19TSU1QTEVfREVWKG1pb2E3MDFfYm9hcmQsCSAgIm1pb2E3MDEtYm9hcmQiLCAgTlVMTCkKIE1JT19TSU1QTEVfREVWKGdwaW9fdmJ1cywJICAiZ3Bpby12YnVzIiwgICAgICAmZ3Bpb192YnVzX2RhdGEpOworTUlPX1NJTVBMRV9ERVYobWlvYTcwMV9jYW1lcmEsCSAgInNvYy1jYW1lcmEtcGRydiIsJmljbGluayk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbWlvYTcwMV9ncGlvX2tleXMsCkBAIC04MjEsNiArNzY2LDcgQEAKIAkmcG93ZXJfZGV2LAogCSZzdHJhdGFmbGFzaCwKIAkmZ3Bpb192YnVzLAorCSZtaW9hNzAxX2NhbWVyYSwKIAkmbWlvYTcwMV9ib2FyZCwKIH07CiAKQEAgLTg0MSw3ICs3ODcsNyBAQAogc3RhdGljIHN0cnVjdCBncGlvX3Jlc3MgZ2xvYmFsX2dwaW9zW10gPSB7CiAJTUlPX0dQSU9fT1VUKEdQSU85X0NIQVJHRV9FTiwgMSwgIkNoYXJnZXIgZW5hYmxlIiksCiAJTUlPX0dQSU9fT1VUKEdQSU8xOF9QT1dFUk9GRiwgMCwgIlBvd2VyIE9mZiIpLAotCU1JT19HUElPX09VVChHUElPODdfTENEX1BPV0VSLCAwLCAiTENEIFBvd2VyIikKKwlNSU9fR1BJT19PVVQoR1BJTzg3X0xDRF9QT1dFUiwgMCwgIkxDRCBQb3dlciIpLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1pb2E3MDFfbWFjaGluZV9pbml0KHZvaWQpCkBAIC04NTUsNiArODAxLDcgQEAKIAltaW9fZ3Bpb19yZXF1ZXN0KEFSUkFZX0FORF9TSVpFKGdsb2JhbF9ncGlvcykpOwogCWJvb3RzdHJhcF9pbml0KCk7CiAJc2V0X3B4YV9mYl9pbmZvKCZtaW9hNzAxX3B4YWZiX2luZm8pOworCW1pb2E3MDFfbWNpX2luZm8uZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCXB4YV9zZXRfbWNpX2luZm8oJm1pb2E3MDFfbWNpX2luZm8pOwogCXB4YV9zZXRfa2V5cGFkX2luZm8oJm1pb2E3MDFfa2V5cGFkX2luZm8pOwogCXdtOTd4eF9iYXRfc2V0X3BkYXRhKCZtaW9hNzAxX2JhdHRlcnlfZGF0YSk7CkBAIC04NjksNyArODE2LDYgQEAKIAlweGFfc2V0X2kyY19pbmZvKCZpMmNfcGRhdGEpOwogCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oTlVMTCk7CiAJcHhhX3NldF9jYW1lcmFfaW5mbygmbWlvYTcwMV9weGFjYW1lcmFfcGxhdGZvcm1fZGF0YSk7Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgQVJSQVlfQU5EX1NJWkUobWlvYTcwMV9pMmNfZGV2aWNlcykpOwogfQogCiBzdGF0aWMgdm9pZCBtaW9hNzAxX21hY2hpbmVfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwppbmRleCAxNjlmY2MxLi4xYWQwMjlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwpAQCAtMjUsNiArMjUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3dtOTd4eF9iYXR0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMTQxLDg1ICsxNDQsNTAgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5PUiBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYWxtbGRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkZsYXNoIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwYWxtbGRfZmxhc2hfZGF0YVtdID0geworCXsKKwkJLndpZHRoCQk9IDIsCQkJLyogYmFua3dpZHRoIGluIGJ5dGVzICovCisJCS5wYXJ0cwkJPSBwYWxtbGRfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtbGRfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBhbG1sZF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQWEFfQ1MwX1BIWVMsCisJLmVuZAk9IFBYQV9DUzBfUEhZUyArIFNaXzRNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG1sZF9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gJnBhbG1sZF9mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLmRldiAJCT0geworCQkucGxhdGZvcm1fZGF0YSA9IHBhbG1sZF9mbGFzaF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtbGRfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBhbG1sZF9kZXRlY3RfaW50LAotCQkJCXZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiksCi0JCQlwYWxtbGRfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIzOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbWxkX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOwotfQotCi1zdGF0aWMgaW50IHBhbG1sZF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG1sZF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtbGRfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gcGFsbWxkX21jaV9nZXRfcm8sCi0JLmluaXQgCQk9IHBhbG1sZF9tY2lfaW5pdCwKLQkuZXhpdAkJPSBwYWxtbGRfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzM2LDM1ICszMDQsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbWxkX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSwgMSk7Ci0JaWYgKGVycikKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG1sZF9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG1sZF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtbGRfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5zdGFydHVwCQk9IHBhbG1sZF9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG1sZF9pcmRhX3NodXRkb3duLAotCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG1sZF9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NjAsNiArNTAyLDcgQEAKIAkmcG93ZXJfc3VwcGx5LAogCSZwYWxtbGRfYXNvYywKIAkmcGFsbWxkX2hkZCwKKwkmcGFsbWxkX2ZsYXNoLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBwYWxtbGRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCmluZGV4IDMzZjcyNmYuLjJkZDdjZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCkBAIC0xMjQsODMgKzEyNCwxMiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXQ1X21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBwYWxtdDVfZGV0ZWN0X2ludCwKLQkJCQl2b2lkICpkYXRhKQotewotCWludCBlcnIgPSAwOwotCi0JLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pLAotCQkJcGFsbXQ1X2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIpOwotZXJyMzoKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiksIGRhdGEpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10NV9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIpOwotCWZyZWVfaXJxKElSUV9HUElPX1BBTE1UNV9TRF9ERVRFQ1RfTiwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXQ1X21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKLX0KLQotc3RhdGljIGludCBwYWxtdDVfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtdDVfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLnNldHBvd2VyCT0gcGFsbXQ1X21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG10NV9tY2lfZ2V0X3JvLAotCS5pbml0IAkJPSBwYWxtdDVfbWNpX2luaXQsCi0JLmV4aXQJCT0gcGFsbXQ1X21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFksCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMxNCwzNSArMjQzLDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10NV9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUsIDEpOwotCWlmIChlcnIpCi0JCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdDVfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdDVfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbXQ1X2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkuc3RhcnR1cAkJPSBwYWxtdDVfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBwYWxtdDVfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtdDVfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjkyMjkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYworICoKKyAqIFN1cHBvcnQgZm9yIHRoZSBQYWxtIFR1bmdzdGVufEMKKyAqCisgKiBBdXRob3I6CU1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gd29yayBvZjoKKyAqCQlQZXRyIEJsYWhhIDxwM3QzQGNlbnRydW0uY3o+CisgKgkJQ2hldGFuIFMuIEt1bWFyIDxzaGl2YWt1bWFyLmNoZXRhbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VjYjE0MDAuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtdGMuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KKyNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFsbXRjX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIE1NQyAqLworCUdQSU82X01NQ19DTEssCisJR1BJTzhfTU1DX0NTMCwKKwlHUElPMTJfR1BJTywJLyogZGV0ZWN0ICovCisJR1BJTzMyX0dQSU8sCS8qIHBvd2VyICovCisJR1BJTzU0X0dQSU8sCS8qIHIvbyBzd2l0Y2ggKi8KKworCS8qIFBDTUNJQSAqLworCUdQSU81Ml9uUENFXzEsCisJR1BJTzUzX25QQ0VfMiwKKwlHUElPNTBfblBJT1IsCisJR1BJTzUxX25QSU9XLAorCUdQSU80OV9uUFdFLAorCUdQSU80OF9uUE9FLAorCUdQSU81Ml9uUENFXzEsCisJR1BJTzUzX25QQ0VfMiwKKwlHUElPNTdfbklPSVMxNiwKKwlHUElPNTZfblBXQUlULAorCisJLyogQUM5NyAqLworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCisJLyogSXJEQSAqLworCUdQSU80NV9HUElPLAkvKiBpciBkaXNhYmxlICovCisJR1BJTzQ2X0ZJQ1BfUlhELAorCUdQSU80N19GSUNQX1RYRCwKKworCS8qIFBXTSAqLworCUdQSU8xN19QV00xX09VVCwKKworCS8qIFVTQiAqLworCUdQSU80X0dQSU8sCS8qIGRldGVjdCAqLworCUdQSU8zNl9HUElPLAkvKiBwdWxsdXAgKi8KKworCS8qIExDRCAqLworCUdQSU81OF9MQ0RfTEREXzAsCisJR1BJTzU5X0xDRF9MRERfMSwKKwlHUElPNjBfTENEX0xERF8yLAorCUdQSU82MV9MQ0RfTEREXzMsCisJR1BJTzYyX0xDRF9MRERfNCwKKwlHUElPNjNfTENEX0xERF81LAorCUdQSU82NF9MQ0RfTEREXzYsCisJR1BJTzY1X0xDRF9MRERfNywKKwlHUElPNjZfTENEX0xERF84LAorCUdQSU82N19MQ0RfTEREXzksCisJR1BJTzY4X0xDRF9MRERfMTAsCisJR1BJTzY5X0xDRF9MRERfMTEsCisJR1BJTzcwX0xDRF9MRERfMTIsCisJR1BJTzcxX0xDRF9MRERfMTMsCisJR1BJTzcyX0xDRF9MRERfMTQsCisJR1BJTzczX0xDRF9MRERfMTUsCisJR1BJTzc0X0xDRF9GQ0xLLAorCUdQSU83NV9MQ0RfTENMSywKKwlHUElPNzZfTENEX1BDTEssCisJR1BJTzc3X0xDRF9CSUFTLAorCisJLyogTUFUUklYIEtFWVBBRCAqLworCUdQSU8wX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBpbiAwICovCisJR1BJTzlfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCS8qIGluIDEgKi8KKwlHUElPMTBfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCS8qIGluIDIgKi8KKwlHUElPMTFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCS8qIGluIDMgKi8KKwlHUElPMThfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMCAqLworCUdQSU8xOV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAxICovCisJR1BJTzIwX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDIgKi8KKwlHUElPMjFfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMyAqLworCUdQSU8yMl9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA0ICovCisJR1BJTzIzX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDUgKi8KKwlHUElPMjRfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgNiAqLworCUdQSU8yNV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA3ICovCisJR1BJTzI2X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDggKi8KKwlHUElPMjdfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgOSAqLworCUdQSU83OV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAxMCAqLworCUdQSU84MF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAxMSAqLworCisJLyogUFhBIEdQSU8gS0VZUyAqLworCUdQSU83X0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBob3RzeW5jIGJ1dHRvbiBvbiBjcmFkbGUgKi8KKworCS8qIE1JU0MgKi8KKwlHUElPMV9SU1QsCS8qIHJlc2V0ICovCisJR1BJTzJfR1BJTywJLyogZWFycGhvbmUgZGV0ZWN0ICovCisJR1BJTzE2X0dQSU8sCS8qIGJhY2tsaWdodCBzd2l0Y2ggKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10Y19tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNVENfU0RfUE9XRVIsCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1UQ19TRF9SRUFET05MWSwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTVRDX1NEX0RFVEVDVF9OLAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcGFsbXRjX3B4YV9idXR0b25zW10gPSB7CisJe0tFWV9GOCwgR1BJT19OUl9QQUxNVENfSE9UU1lOQ19CVVRUT04sIDEsICJIb3RTeW5jIEJ1dHRvbiIsIEVWX0tFWSwgMX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHBhbG10Y19weGFfa2V5c19kYXRhID0geworCS5idXR0b25zCT0gcGFsbXRjX3B4YV9idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUocGFsbXRjX3B4YV9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10Y19weGFfa2V5cyA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG10Y19weGFfa2V5c19kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCYWNrbGlnaHQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHBhbG10Y19iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19CTF9QT1dFUiwgIkJMIFBPV0VSIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXR1cm4gMDsKKworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfQkxfUE9XRVIpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXRjX2JhY2tsaWdodF9ub3RpZnkoaW50IGJyaWdodG5lc3MpCit7CisJLyogYmFja2xpZ2h0IGlzIG9uIHdoZW4gR1BJTzE2IEFGMCBpcyBoaWdoICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfQkxfUE9XRVIsIGJyaWdodG5lc3MpOworCXJldHVybiBicmlnaHRuZXNzOworfQorCitzdGF0aWMgdm9pZCBwYWxtdGNfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19CTF9QT1dFUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHBhbG10Y19iYWNrbGlnaHRfZGF0YSA9IHsKKwkucHdtX2lkCQk9IDEsCisJLm1heF9icmlnaHRuZXNzCT0gUEFMTVRDX01BWF9JTlRFTlNJVFksCisJLmRmdF9icmlnaHRuZXNzCT0gUEFMTVRDX01BWF9JTlRFTlNJVFksCisJLnB3bV9wZXJpb2RfbnMJPSBQQUxNVENfUEVSSU9EX05TLAorCS5pbml0CQk9IHBhbG10Y19iYWNrbGlnaHRfaW5pdCwKKwkubm90aWZ5CQk9IHBhbG10Y19iYWNrbGlnaHRfbm90aWZ5LAorCS5leGl0CQk9IHBhbG10Y19iYWNrbGlnaHRfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10Y19iYWNrbGlnaHQgPSB7CisJLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCisJLmRldgk9IHsKKwkJLnBhcmVudAkJPSAmcHhhMjV4X2RldmljZV9wd20xLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbXRjX2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJckRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbXRjX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNVENfSVJfRElTQUJMRSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEtleWJvYXJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNvbnN0IHVpbnQzMl90IHBhbG10Y19tYXRyaXhfa2V5c1tdID0geworCUtFWSgwLCAwLCBLRVlfRjEpLAorCUtFWSgwLCAxLCBLRVlfWCksCisJS0VZKDAsIDIsIEtFWV9QT1dFUiksCisJS0VZKDAsIDMsIEtFWV9UQUIpLAorCUtFWSgwLCA0LCBLRVlfQSksCisJS0VZKDAsIDUsIEtFWV9RKSwKKwlLRVkoMCwgNiwgS0VZX0xFRlRTSElGVCksCisJS0VZKDAsIDcsIEtFWV9aKSwKKwlLRVkoMCwgOCwgS0VZX1MpLAorCUtFWSgwLCA5LCBLRVlfVyksCisJS0VZKDAsIDEwLCBLRVlfRSksCisJS0VZKDAsIDExLCBLRVlfVVApLAorCisJS0VZKDEsIDAsIEtFWV9GMiksCisJS0VZKDEsIDEsIEtFWV9ET1dOKSwKKwlLRVkoMSwgMywgS0VZX0QpLAorCUtFWSgxLCA0LCBLRVlfQyksCisJS0VZKDEsIDUsIEtFWV9GKSwKKwlLRVkoMSwgNiwgS0VZX1IpLAorCUtFWSgxLCA3LCBLRVlfU1BBQ0UpLAorCUtFWSgxLCA4LCBLRVlfViksCisJS0VZKDEsIDksIEtFWV9HKSwKKwlLRVkoMSwgMTAsIEtFWV9UKSwKKwlLRVkoMSwgMTEsIEtFWV9MRUZUKSwKKworCUtFWSgyLCAwLCBLRVlfRjMpLAorCUtFWSgyLCAxLCBLRVlfTEVGVENUUkwpLAorCUtFWSgyLCAzLCBLRVlfSCksCisJS0VZKDIsIDQsIEtFWV9ZKSwKKwlLRVkoMiwgNSwgS0VZX04pLAorCUtFWSgyLCA2LCBLRVlfSiksCisJS0VZKDIsIDcsIEtFWV9VKSwKKwlLRVkoMiwgOCwgS0VZX00pLAorCUtFWSgyLCA5LCBLRVlfSyksCisJS0VZKDIsIDEwLCBLRVlfSSksCisJS0VZKDIsIDExLCBLRVlfUklHSFQpLAorCisJS0VZKDMsIDAsIEtFWV9GNCksCisJS0VZKDMsIDEsIEtFWV9FTlRFUiksCisJS0VZKDMsIDMsIEtFWV9ET1QpLAorCUtFWSgzLCA0LCBLRVlfTCksCisJS0VZKDMsIDUsIEtFWV9PKSwKKwlLRVkoMywgNiwgS0VZX0xFRlRBTFQpLAorCUtFWSgzLCA3LCBLRVlfRU5URVIpLAorCUtFWSgzLCA4LCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoMywgOSwgS0VZX1ApLAorCUtFWSgzLCAxMCwgS0VZX0IpLAorCUtFWSgzLCAxMSwgS0VZX0ZOKSwKK307CisKK2NvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgcGFsbXRjX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCQk9IHBhbG10Y19tYXRyaXhfa2V5cywKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShwYWxtdGNfbWF0cml4X2tleXMpLAorfTsKKworY29uc3Qgc3RhdGljIHVuc2lnbmVkIGludCBwYWxtdGNfa2V5cGFkX3Jvd19ncGlvc1tdID0geworCTAsIDksIDEwLCAxMQorfTsKKworY29uc3Qgc3RhdGljIHVuc2lnbmVkIGludCBwYWxtdGNfa2V5cGFkX2NvbF9ncGlvc1tdID0geworCTE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCA3OSwgODAKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHBhbG10Y19rZXlwYWRfcGxhdGZvcm1fZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmcGFsbXRjX2tleW1hcF9kYXRhLAorCS5yb3dfZ3Bpb3MJPSBwYWxtdGNfa2V5cGFkX3Jvd19ncGlvcywKKwkubnVtX3Jvd19ncGlvcwk9IEFSUkFZX1NJWkUocGFsbXRjX2tleXBhZF9yb3dfZ3Bpb3MpLAorCS5jb2xfZ3Bpb3MJPSBwYWxtdGNfa2V5cGFkX2NvbF9ncGlvcywKKwkubnVtX2NvbF9ncGlvcwk9IEFSUkFZX1NJWkUocGFsbXRjX2tleXBhZF9jb2xfZ3Bpb3MpLAorCS5hY3RpdmVfbG93CT0gMSwKKworCS5kZWJvdW5jZV9tcwkJPSAyMCwKKwkuY29sX3NjYW5fZGVsYXlfdXMJPSA1LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX2tleWJvYXJkID0geworCS5uYW1lCT0gIm1hdHJpeC1rZXlwYWQiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG10Y19rZXlwYWRfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVURDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBwYWxtdGNfdWRjX2luZm8gX19pbml0ZGF0YSA9IHsKKwkuZ3Bpb192YnVzCQk9IEdQSU9fTlJfUEFMTVRDX1VTQl9ERVRFQ1RfTiwKKwkuZ3Bpb192YnVzX2ludmVydGVkCT0gMSwKKwkuZ3Bpb19wdWxsdXAJCT0gR1BJT19OUl9QQUxNVENfVVNCX1BPV0VSLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVG91Y2hzY3JlZW4gLyBCYXR0ZXJ5IC8gR1BJTy1leHRlbmRlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10Y191Y2IxNDAwX2NvcmUgPSB7CisJLm5hbWUJPSAidWNiMTQwMF9jb3JlIiwKKwkuaWQJPSAtMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5PUiBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbXRjX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMTZNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYWxtdGNfZmxhc2hfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIlUtQm9vdCBCb290bG9hZGVyIiwKKwkJLm9mZnNldAk9IDB4MCwKKwkJLnNpemUJPSAweDQwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJMaW51eCBLZXJuZWwiLAorCQkub2Zmc2V0CT0gMHg0MDAwMCwKKwkJLnNpemUJPSAweDJjMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAiRmlsZXN5c3RlbSIsCisJCS5vZmZzZXQJPSAweDMwMDAwMCwKKwkJLnNpemUJPSAweGNjMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAiVS1Cb290IEVudmlyb25tZW50IiwKKwkJLm9mZnNldAk9IDB4ZmMwMDAwLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBhbG10Y19mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSA0LAorCS5wYXJ0cwkJPSBwYWxtdGNfZmxhc2hfcGFydHMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtdGNfZmxhc2hfcGFydHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gJnBhbG10Y19mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbXRjX2ZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gcGFsbXRjX2xjZF9tb2Rlc1tdID0geworeworCS5waXhjbG9jawk9IDExNTM4NCwKKwkueHJlcwkJPSAzMjAsCisJLnlyZXMJCT0gMzIwLAorCS5icHAJCT0gMTYsCisKKwkubGVmdF9tYXJnaW4JPSAyNywKKwkucmlnaHRfbWFyZ2luCT0gNywKKwkudXBwZXJfbWFyZ2luCT0gNywKKwkubG93ZXJfbWFyZ2luCT0gOCwKKworCS5oc3luY19sZW4JPSA2LAorCS52c3luY19sZW4JPSAxLAorfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBhbG10Y19sY2Rfc2NyZWVuID0geworCS5tb2RlcwkJCT0gcGFsbXRjX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCQk9IEFSUkFZX1NJWkUocGFsbXRjX2xjZF9tb2RlcyksCisJLmxjZF9jb25uCQk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNoaW5lIGluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnBhbG10Y19iYWNrbGlnaHQsCisJJnBhbG10Y191Y2IxNDAwX2NvcmUsCisJJnBhbG10Y19rZXlib2FyZCwKKwkmcGFsbXRjX3B4YV9rZXlzLAorCSZwYWxtdGNfZmxhc2gsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXRjX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShwYWxtdGNfcGluX2NvbmZpZykpOworCisJc2V0X3B4YV9mYl9pbmZvKCZwYWxtdGNfbGNkX3NjcmVlbik7CisJcHhhX3NldF9tY2lfaW5mbygmcGFsbXRjX21jaV9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X3VkY19pbmZvKCZwYWxtdGNfdWRjX2luZm8pOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworCXB4YV9zZXRfZmljcF9pbmZvKCZwYWxtdGNfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfTsKKworTUFDSElORV9TVEFSVChQQUxNVEMsICJQYWxtIFR1bmdzdGVufEMiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuYm9vdF9wYXJhbXMgCT0gMHhhMDAwMDEwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBwYWxtdGNfaW5pdAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYwppbmRleCBkODIzYjA5Li4yNzdjNDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCkBAIC0xMTcsODMgKzExNywxMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXRlMl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJaXJxX2hhbmRsZXJfdCBwYWxtdGUyX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiksCi0JCQlwYWxtdGUyX2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfU0RfUE9XRVIpOwotZXJyMzoKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXRlMl9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10ZTJfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1URTJfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKLX0KLQotc3RhdGljIGludCBwYWxtdGUyX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1URTJfU0RfUkVBRE9OTFkpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10ZTJfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLnNldHBvd2VyCT0gcGFsbXRlMl9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtdGUyX21jaV9nZXRfcm8sCi0JLmluaXQgCQk9IHBhbG10ZTJfbWNpX2luaXQsCi0JLmV4aXQJCT0gcGFsbXRlMl9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1URTJfU0RfUkVBRE9OTFksCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjg3LDM1ICsyMTUsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXRlMl9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSwgMSk7Ci0JaWYgKGVycikKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdGUyX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10ZTJfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10ZTJfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5zdGFydHVwCQk9IHBhbG10ZTJfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBwYWxtdGUyX2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXRlMl9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYwppbmRleCA4M2QwMjA4Li43NmEyYjM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYwpAQCAtMjgsNiArMjgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTEzMSw2ICsxMzUsMTAgQEAKIAlHUElPMzRfRkZVQVJUX1JYRCwKIAlHUElPMzlfRkZVQVJUX1RYRCwKIAorCS8qIE5BTkQgKi8KKwlHUElPMTVfbkNTXzEsCisJR1BJTzE4X1JEWSwKKwogCS8qIE1JU0MuICovCiAJR1BJTzEwX0dQSU8sCS8qIGhvdHN5bmMgYnV0dG9uICovCiAJR1BJTzEyX0dQSU8sCS8qIHBvd2VyIGRldGVjdCAqLwpAQCAtMTM4LDg1ICsxNDYsNTAgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5PUiBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYWxtdHhfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkZsYXNoIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwYWxtdHhfZmxhc2hfZGF0YVtdID0geworCXsKKwkJLndpZHRoCQk9IDIsCQkJLyogYmFua3dpZHRoIGluIGJ5dGVzICovCisJCS5wYXJ0cwkJPSBwYWxtdHhfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtdHhfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBhbG10eF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQWEFfQ1MwX1BIWVMsCisJLmVuZAk9IFBYQV9DUzBfUEhZUyArIFNaXzhNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10eF9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gJnBhbG10eF9mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLmRldiAJCT0geworCQkucGxhdGZvcm1fZGF0YSA9IHBhbG10eF9mbGFzaF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdHhfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBhbG10eF9kZXRlY3RfaW50LAotCQkJCXZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiksCi0JCQlwYWxtdHhfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIzOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9QT1dFUik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXR4X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9QT1dFUik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdHhfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOwotfQotCi1zdGF0aWMgaW50IHBhbG10eF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFkpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10eF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtdHhfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gcGFsbXR4X21jaV9nZXRfcm8sCi0JLmluaXQgCQk9IHBhbG10eF9tY2lfaW5pdCwKLQkuZXhpdAkJPSBwYWxtdHhfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzMwLDM1ICszMDMsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXR4X2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSwgMSk7Ci0JaWYgKGVycikKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10eF9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdHhfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5zdGFydHVwCQk9IHBhbG10eF9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG10eF9pcmRhX3NodXRkb3duLAotCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG10eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00OTMsNiArNDQwLDY4IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOQU5EIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgcGFsbXR4X25hbmRfY21kX2N0bChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIG5hbmRhZGRyID0gKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XOworCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWIoY21kLCBQQUxNVFhfTkFORF9DTEVfVklSVCk7CisJZWxzZSBpZiAoY3RybCAmIE5BTkRfQUxFKQorCQl3cml0ZWIoY21kLCBQQUxNVFhfTkFORF9BTEVfVklSVCk7CisJZWxzZQorCQl3cml0ZWIoY21kLCBuYW5kYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYWxtdHhfcGFydGl0aW9uX2luZm9bXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gInBhbG10eC0wIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTAorCX0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcGFsbXR4X3BhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBwYWxtdHhfbmFuZF9wbGF0ZGF0YSA9IHsKKwkuY2hpcAk9IHsKKwkJLm5yX2NoaXBzCQk9IDEsCisJCS5jaGlwX29mZnNldAkJPSAwLAorCQkubnJfcGFydGl0aW9ucwkJPSBBUlJBWV9TSVpFKHBhbG10eF9wYXJ0aXRpb25faW5mbyksCisJCS5wYXJ0aXRpb25zCQk9IHBhbG10eF9wYXJ0aXRpb25faW5mbywKKwkJLmNoaXBfZGVsYXkJCT0gMjAsCisJCS5wYXJ0X3Byb2JlX3R5cGVzIAk9IHBhbG10eF9wYXJ0X3Byb2JlcywKKwl9LAorCS5jdHJsCT0geworCQkuY21kX2N0cmwJPSBwYWxtdHhfbmFuZF9jbWRfY3RsLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBhbG10eF9uYW5kX3Jlc291cmNlW10gPSB7CisJWzBdCT0geworCQkuc3RhcnQJPSBQWEFfQ1MxX1BIWVMsCisJCS5lbmQJPSBQWEFfQ1MxX1BIWVMgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdHhfbmFuZCA9IHsKKwkubmFtZQkJPSAiZ2VuX25hbmQiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShwYWxtdHhfbmFuZF9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gcGFsbXR4X25hbmRfcmVzb3VyY2UsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdHhfbmFuZF9wbGF0ZGF0YSwKKwl9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBQb3dlciBtYW5hZ2VtZW50IC0gc3RhbmRieQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHhfcG1faW5pdCh2b2lkKQpAQCAtNTE4LDYgKzUyNyw4IEBACiAJJnBvd2VyX3N1cHBseSwKIAkmcGFsbXR4X2Fzb2MsCiAJJnBhbG10eF9ncGlvX3ZidXMsCisJJnBhbG10eF9mbGFzaCwKKwkmcGFsbXR4X25hbmQsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBhbG10eF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTUyNSw4ICs1MzYsMTggQEAKIAkudmlydHVhbAk9IFBBTE1UWF9QQ01DSUFfVklSVCwKIAkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTVRYX1BDTUNJQV9QSFlTKSwKIAkubGVuZ3RoCQk9IFBBTE1UWF9QQ01DSUFfU0laRSwKLQkudHlwZQkJPSBNVF9ERVZJQ0UKLX0sCisJLnR5cGUJCT0gTVRfREVWSUNFLAorfSwgeworCS52aXJ0dWFsCT0gUEFMTVRYX05BTkRfQUxFX1ZJUlQsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBBTE1UWF9OQU5EX0FMRV9QSFlTKSwKKwkubGVuZ3RoCQk9IFNaXzFNLAorCS50eXBlCQk9IE1UX0RFVklDRSwKK30sIHsKKwkudmlydHVhbAk9IFBBTE1UWF9OQU5EX0NMRV9WSVJULAorCS5wZm4JCT0gX19waHlzX3RvX3BmbihQQUxNVFhfTkFORF9DTEVfUEhZUyksCisJLmxlbmd0aAkJPSBTWl8xTSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UsCit9CiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXR4X21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCmluZGV4IGMzNjQ1YWEuLmMyYmY0OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKQEAgLTEyOSw4OCArMTI5LDE0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtejcyX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlpcnFfaGFuZGxlcl90IHBhbG16NzJfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG16NzJfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCS8qIFNEX1BPV0VSIGlzIG5vdCBhY3R1YWxseSBwb3dlciwgYnV0IGl0IGlzIG1vcmUgbGlrZSBjaGlwCi0JICogc2VsZWN0LCBpLmUuIGl0IGlzIGludmVydGVkICovCi0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX1JPLCAiU0RfUk8iKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNWjcyX1NEX1JPKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1NEX1JPKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTik7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9STyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlpZiAocF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpCi0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLCAwKTsKLQllbHNlCi0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLCAxKTsKLX0KLQotc3RhdGljIGludCBwYWxtejcyX21jaV9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9STyk7Ci19Ci0KKy8qIFNEX1BPV0VSIGlzIG5vdCBhY3R1YWxseSBwb3dlciwgYnV0IGl0IGlzIG1vcmUgbGlrZSBjaGlwCisgKiBzZWxlY3QsIGkuZS4gaXQgaXMgaW52ZXJ0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXo3Ml9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtejcyX21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG16NzJfbWNpX3JvLAotCS5pbml0IAkJPSBwYWxtejcyX21jaV9pbml0LAotCS5leGl0CQk9IHBhbG16NzJfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNWjcyX1NEX1JPLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLAorCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMDQsMzUgKzIzMCw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtejcyX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXo3Ml9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbXo3Ml9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXo3Ml9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG16NzJfaXJkYV9zaHV0ZG93biwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtejcyX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwppbmRleCAwMTc5MWQ3Li5iYmRhNTcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCkBAIC0zMjEsMTEgKzMyMSwxNCBAQAogI2RlZmluZSBNU0VDU19QRVJfSklGRlkgKDEwMDAvSFopCiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGNtOTkwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyNTAgLyBNU0VDU19QRVJfSklGRlksCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHBjbTk5MF9tY2lfaW5pdCwKLQkuc2V0cG93ZXIgCT0gcGNtOTkwX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBwY205OTBfbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyNTAgLyBNU0VDU19QRVJfSklGRlksCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJCT0gcGNtOTkwX21jaV9pbml0LAorCS5zZXRwb3dlciAJCT0gcGNtOTkwX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJCT0gcGNtOTkwX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIHBjbTk5MF9vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CkBAIC00MjcsMjUgKzQzMCw1NiBAQAogCWdwaW9fYnVzX3N3aXRjaCA9IC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKLQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgYWJvdmUgKi8KLQkucXVlcnlfYnVzX3BhcmFtID0gcGNtOTkwX2NhbWVyYV9xdWVyeV9idXNfcGFyYW0sCi0JLnNldF9idXNfcGFyYW0gPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCi0JLmZyZWVfYnVzID0gcGNtOTkwX2NhbWVyYV9mcmVlX2J1cywKLX07Ci0KIC8qIEJvYXJkIEkyQyBkZXZpY2VzLiAqLwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHBjbTk5MF9pMmNfZGV2aWNlc1tdID0gewogCXsKIAkJLyogTXVzdCBpbml0aWFsaXplIGJlZm9yZSB0aGUgY2FtZXJhKHMpICovCiAJCUkyQ19CT0FSRF9JTkZPKCJwY2E5NTM2IiwgMHg0MSksCiAJCS5wbGF0Zm9ybV9kYXRhID0gJnBjYTk1MzZfZGF0YSwKLQl9LCB7CisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNtOTkwX2NhbWVyYV9pMmNbXSA9IHsKKwl7CiAJCUkyQ19CT0FSRF9JTkZPKCJtdDl2MDIyIiwgMHg0OCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywgLyogV2l0aCBleHRlbmRlciAqLwogCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oIm10OW0wMDEiLCAweDVkKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLCAvKiBXaXRoIGV4dGVuZGVyICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua1tdID0geworCXsKKwkJLmJ1c19pZAkJCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgKi8KKwkJLmJvYXJkX2luZm8JCT0gJnBjbTk5MF9jYW1lcmFfaTJjWzBdLAorCQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKKwkJLnF1ZXJ5X2J1c19wYXJhbQk9IHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAorCQkuc2V0X2J1c19wYXJhbQkJPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCisJCS5mcmVlX2J1cwkJPSBwY205OTBfY2FtZXJhX2ZyZWVfYnVzLAorCQkubW9kdWxlX25hbWUJCT0gIm10OXYwMjIiLAorCX0sIHsKKwkJLmJ1c19pZAkJCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgKi8KKwkJLmJvYXJkX2luZm8JCT0gJnBjbTk5MF9jYW1lcmFfaTJjWzFdLAorCQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKKwkJLnF1ZXJ5X2J1c19wYXJhbQk9IHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAorCQkuc2V0X2J1c19wYXJhbQkJPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCisJCS5mcmVlX2J1cwkJPSBwY205OTBfY2FtZXJhX2ZyZWVfYnVzLAorCQkubW9kdWxlX25hbWUJCT0gIm10OW0wMDEiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY205OTBfY2FtZXJhW10gPSB7CisJeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAwLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rWzBdLAorCQl9LAorCX0sIHsKKwkJLm5hbWUJPSAic29jLWNhbWVyYS1wZHJ2IiwKKwkJLmlkCT0gMSwKKwkJLmRldgk9IHsKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua1sxXSwKKwkJfSwKIAl9LAogfTsKICNlbmRpZiAvKiBDT05GSUdfVklERU9fUFhBMjd4IHx8Q09ORklHX1ZJREVPX1BYQTI3eF9NT0RVTEUgKi8KQEAgLTUwMSw2ICs1MzUsOSBAQAogCXB4YV9zZXRfY2FtZXJhX2luZm8oJnBjbTk5MF9weGFjYW1lcmFfcGxhdGZvcm1fZGF0YSk7CiAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShwY205OTBfaTJjX2RldmljZXMpKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtOTkwX2NhbWVyYVswXSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205OTBfY2FtZXJhWzFdKTsKICNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENNLTk5MCBFdmFsdWF0aW9uIGJhc2Vib2FyZCBpbml0aWFsaXplZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IDkzNTJkNGEuLmExODY5OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0yNDUsMjAgKzI0NSwxMCBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YTsKLQogc3RhdGljIGludCBwb29kbGVfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBvb2RsZV9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQogewogCWludCBlcnI7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fblNEX0RFVEVDVCwgIm5TRF9ERVRFQ1QiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fblNEX1dQLCAiblNEX1dQIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZV8xOwotCiAJZXJyID0gZ3Bpb19yZXF1ZXN0KFBPT0RMRV9HUElPX1NEX1BXUiwgIlNEX1BXUiIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfMjsKQEAgLTI2NywzNCArMjU3LDE0IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV8zOwogCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoUE9PRExFX0dQSU9fblNEX1dQKTsKLQogCWdwaW9fZGlyZWN0aW9uX291dHB1dChQT09ETEVfR1BJT19TRF9QV1IsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChQT09ETEVfR1BJT19TRF9QV1IxLCAwKTsKIAotCXBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwgcG9vZGxlX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiJXM6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnJfZnJlZV80OwotCX0KLQogCXJldHVybiAwOwogCi1lcnJfZnJlZV80OgotCWdwaW9fZnJlZShQT09ETEVfR1BJT19TRF9QV1IxKTsKIGVycl9mcmVlXzM6CiAJZ3Bpb19mcmVlKFBPT0RMRV9HUElPX1NEX1BXUik7CiBlcnJfZnJlZV8yOgotCWdwaW9fZnJlZShQT09ETEVfR1BJT19uU0RfV1ApOwotZXJyX2ZyZWVfMToKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMxMiw2MiArMjgyLDI5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHBvb2RsZV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gISFncGlvX2dldF92YWx1ZShQT09ETEVfR1BJT19uU0RfV1ApOwotCXJldHVybiBHUExSKFBPT0RMRV9HUElPX25TRF9XUCkgJiBHUElPX2JpdChQT09ETEVfR1BJT19uU0RfV1ApOwotfQotCi0KIHN0YXRpYyB2b2lkIHBvb2RsZV9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZnJlZV9pcnEoUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwogCWdwaW9fZnJlZShQT09ETEVfR1BJT19TRF9QV1IxKTsKIAlncGlvX2ZyZWUoUE9PRExFX0dQSU9fU0RfUFdSKTsKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gcG9vZGxlX21jaV9pbml0LAotCS5nZXRfcm8JCT0gcG9vZGxlX21jaV9nZXRfcm8sCi0JLnNldHBvd2VyIAk9IHBvb2RsZV9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gcG9vZGxlX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBwb29kbGVfbWNpX2luaXQsCisJLnNldHBvd2VyIAkJPSBwb29kbGVfbWNpX3NldHBvd2VyLAorCS5leGl0CQkJPSBwb29kbGVfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IFBPT0RMRV9HUElPX25TRF9XUCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIAogLyoKICAqIElyZGEKICAqLwotc3RhdGljIHZvaWQgcG9vZGxlX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKFBPT0RMRV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IHBvb2RsZV9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fSVJfT04sICJJUl9PTiIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUE9PRExFX0dQSU9fSVJfT04sIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwb29kbGVfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKFBPT0RMRV9HUElPX0lSX09OKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcG9vZGxlX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gUE9PRExFX0dQSU9fSVJfT04sCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwb29kbGVfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAotCS5zdGFydHVwCQk9IHBvb2RsZV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBvb2RsZV9pcmRhX3NodXRkb3duLAogfTsKIAogCkBAIC01MjEsNiArNDU4LDcgQEAKIAlzZXRfcHhhX2ZiX3BhcmVudCgmcG9vZGxlX2xvY29tb19kZXZpY2UuZGV2KTsKIAlzZXRfcHhhX2ZiX2luZm8oJnBvb2RsZV9mYl9pbmZvKTsKIAlweGFfc2V0X3VkY19pbmZvKCZ1ZGNfaW5mbyk7CisJcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZwb29kbGVfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X2kyY19pbmZvKE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYwppbmRleCAyZjMzOTRmLi44NjgyNzA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYwpAQCAtNTIsMyArNTIsNCBAQAogCX0gZWxzZQogCQlCVUcoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKaW5kZXggNGJhNmQyMS4uZjRhZjZlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKQEAgLTg0LDkgKzg0LDExIEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihjb21tb25fbmFuZCwgTkFORCwgMTU2MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKGdjdSwgUFhBMzAwX0dDVSwgMCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjb21tb25fY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfY29tbW9uX25hbmQsICJweGEzeHgtbmFuZCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfZ2N1LCAicHhhM3h4LWdjdSIsIE5VTEwpLAogfTsKIAogc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhMzEwX21tYzMsIE1NQzMsIDE5NTAwMDAwLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKaW5kZXggOGIzZDk3ZS4uYzczNzNlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKQEAgLTc4LDkgKzc4LDExIEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzMjBfbmFuZCwgTkFORCwgMTA0MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKGdjdSwgUFhBMzIwX0dDVSwgMCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGEzMjBfY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMzIwX25hbmQsICJweGEzeHgtbmFuZCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfZ2N1LCAicHhhM3h4LWdjdSIsIE5VTEwpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMzIwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKaW5kZXggNzExMzE3NC4uMDY0MjkyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKQEAgLTE3NiwxMyArMTc2LDMwIEBACiAJTUZQX0FERFJfRU5ELAogfTsKIAorc3RhdGljIHN0cnVjdCBtZnBfYWRkcl9tYXAgcHhhOTM1X21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CisJTUZQX0FERFIoR1BJTzE1OSwgMHgwNTI0KSwKKwlNRlBfQUREUihHUElPMTYzLCAweDA1MzQpLAorCU1GUF9BRERSKEdQSU8xNjcsIDB4MDU0NCksCisJTUZQX0FERFIoR1BJTzE2OCwgMHgwNTQ4KSwKKwlNRlBfQUREUihHUElPMTY5LCAweDA1NGMpLAorCU1GUF9BRERSKEdQSU8xNzAsIDB4MDU1MCksCisJTUZQX0FERFIoR1BJTzE3MSwgMHgwNTU0KSwKKwlNRlBfQUREUihHUElPMTcyLCAweDA1NTgpLAorCU1GUF9BRERSKEdQSU8xNzMsIDB4MDU1YyksCisKKwlNRlBfQUREUl9FTkQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBweGE5MzBfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfcHhhOTMwKCkpIHsKKwlpZiAoY3B1X2lzX3B4YTkzMCgpIHx8IGNwdV9pc19weGE5MzUoKSkgewogCQltZnBfaW5pdF9iYXNlKGlvX3AydihNRlBSX0JBU0UpKTsKIAkJbWZwX2luaXRfYWRkcihweGE5MzBfbWZwX2FkZHJfbWFwKTsKIAl9CiAKKwlpZiAoY3B1X2lzX3B4YTkzNSgpKQorCQltZnBfaW5pdF9hZGRyKHB4YTkzNV9tZnBfYWRkcl9tYXApOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IGRkYTMxMGYuLjNkYTQ1ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgpAQCAtMjQsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2NvcmdpX2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9zaGFycHNsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTExMSw2ICsxMTMsMjYgQEAKIAlHUElPMTA1X0dQSU8sCS8qIFNQSVRaX0dQSU9fQ0ZfSVJRICovCiAJR1BJTzEwNl9HUElPLAkvKiBTUElUWl9HUElPX0NGMl9JUlEgKi8KIAorCS8qIEdQSU8gbWF0cml4IGtleXBhZCAqLworCUdQSU84OF9HUElPLAkvKiBjb2x1bW4gMCAqLworCUdQSU8yM19HUElPLAkvKiBjb2x1bW4gMSAqLworCUdQSU8yNF9HUElPLAkvKiBjb2x1bW4gMiAqLworCUdQSU8yNV9HUElPLAkvKiBjb2x1bW4gMyAqLworCUdQSU8yNl9HUElPLAkvKiBjb2x1bW4gNCAqLworCUdQSU8yN19HUElPLAkvKiBjb2x1bW4gNSAqLworCUdQSU81Ml9HUElPLAkvKiBjb2x1bW4gNiAqLworCUdQSU8xMDNfR1BJTywJLyogY29sdW1uIDcgKi8KKwlHUElPMTA3X0dQSU8sCS8qIGNvbHVtbiA4ICovCisJR1BJTzEwOF9HUElPLAkvKiBjb2x1bW4gOSAqLworCUdQSU8xMTRfR1BJTywJLyogY29sdW1uIDEwICovCisJR1BJTzEyX0dQSU8sCS8qIHJvdyAwICovCisJR1BJTzE3X0dQSU8sCS8qIHJvdyAxICovCisJR1BJTzkxX0dQSU8sCS8qIHJvdyAyICovCisJR1BJTzM0X0dQSU8sCS8qIHJvdyAzICovCisJR1BJTzM2X0dQSU8sCS8qIHJvdyA0ICovCisJR1BJTzM4X0dQSU8sCS8qIHJvdyA1ICovCisJR1BJTzM5X0dQSU8sCS8qIHJvdyA2ICovCisKIAkvKiBJMkMgKi8KIAlHUElPMTE3X0kyQ19TQ0wsCiAJR1BJTzExOF9JMkNfU0RBLApAQCAtMjQyLDkgKzI2NCwxNTIgQEAKIC8qCiAgKiBTcGl0eiBLZXlib2FyZCBEZXZpY2UKICAqLworI2RlZmluZSBTUElUWl9LRVlfQ0FMRU5EQVIJS0VZX0YxCisjZGVmaW5lIFNQSVRaX0tFWV9BRERSRVNTCUtFWV9GMgorI2RlZmluZSBTUElUWl9LRVlfRk4JCUtFWV9GMworI2RlZmluZSBTUElUWl9LRVlfQ0FOQ0VMCUtFWV9GNAorI2RlZmluZSBTUElUWl9LRVlfRVhPSwkJS0VZX0Y1CisjZGVmaW5lIFNQSVRaX0tFWV9FWENBTkNFTAlLRVlfRjYKKyNkZWZpbmUgU1BJVFpfS0VZX0VYSk9HRE9XTglLRVlfRjcKKyNkZWZpbmUgU1BJVFpfS0VZX0VYSk9HVVAJS0VZX0Y4CisjZGVmaW5lIFNQSVRaX0tFWV9KQVAxCQlLRVlfTEVGVEFMVAorI2RlZmluZSBTUElUWl9LRVlfSkFQMgkJS0VZX1JJR0hUQ1RSTAorI2RlZmluZSBTUElUWl9LRVlfU1lOQwkJS0VZX0Y5CisjZGVmaW5lIFNQSVRaX0tFWV9NQUlMCQlLRVlfRjEwCisjZGVmaW5lIFNQSVRaX0tFWV9PSwkJS0VZX0YxMQorI2RlZmluZSBTUElUWl9LRVlfTUVOVQkJS0VZX0YxMgorCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9MRUZUQ1RSTCksCisJS0VZKDAsIDEsIEtFWV8xKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfNSksCisJS0VZKDAsIDQsIEtFWV82KSwKKwlLRVkoMCwgNSwgS0VZXzcpLAorCUtFWSgwLCA2LCBLRVlfOSksCisJS0VZKDAsIDcsIEtFWV8wKSwKKwlLRVkoMCwgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDAsIDksIFNQSVRaX0tFWV9FWE9LKSwJLyogRVhPSyAqLworCUtFWSgwLCAxMCwgU1BJVFpfS0VZX0VYQ0FOQ0VMKSwJLyogRVhDQU5DRUwgKi8KKwlLRVkoMSwgMSwgS0VZXzIpLAorCUtFWSgxLCAyLCBLRVlfNCksCisJS0VZKDEsIDMsIEtFWV9SKSwKKwlLRVkoMSwgNCwgS0VZX1kpLAorCUtFWSgxLCA1LCBLRVlfOCksCisJS0VZKDEsIDYsIEtFWV9JKSwKKwlLRVkoMSwgNywgS0VZX08pLAorCUtFWSgxLCA4LCBLRVlfUCksCisJS0VZKDEsIDksIFNQSVRaX0tFWV9FWEpPR0RPV04pLAkvKiBFWEpPR0RPV04gKi8KKwlLRVkoMSwgMTAsIFNQSVRaX0tFWV9FWEpPR1VQKSwJLyogRVhKT0dVUCAqLworCUtFWSgyLCAwLCBLRVlfVEFCKSwKKwlLRVkoMiwgMSwgS0VZX1EpLAorCUtFWSgyLCAyLCBLRVlfRSksCisJS0VZKDIsIDMsIEtFWV9UKSwKKwlLRVkoMiwgNCwgS0VZX0cpLAorCUtFWSgyLCA1LCBLRVlfVSksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX0spLAorCUtFWSgzLCAwLCBTUElUWl9LRVlfQUREUkVTUyksCS8qIEFERFJFU1MgKi8KKwlLRVkoMywgMSwgS0VZX1cpLAorCUtFWSgzLCAyLCBLRVlfUyksCisJS0VZKDMsIDMsIEtFWV9GKSwKKwlLRVkoMywgNCwgS0VZX1YpLAorCUtFWSgzLCA1LCBLRVlfSCksCisJS0VZKDMsIDYsIEtFWV9NKSwKKwlLRVkoMywgNywgS0VZX0wpLAorCUtFWSgzLCA5LCBLRVlfUklHSFRTSElGVCksCisJS0VZKDQsIDAsIFNQSVRaX0tFWV9DQUxFTkRBUiksCS8qIENBTEVOREFSICovCisJS0VZKDQsIDEsIEtFWV9BKSwKKwlLRVkoNCwgMiwgS0VZX0QpLAorCUtFWSg0LCAzLCBLRVlfQyksCisJS0VZKDQsIDQsIEtFWV9CKSwKKwlLRVkoNCwgNSwgS0VZX04pLAorCUtFWSg0LCA2LCBLRVlfRE9UKSwKKwlLRVkoNCwgOCwgS0VZX0VOVEVSKSwKKwlLRVkoNCwgOSwgS0VZX0xFRlRTSElGVCksCisJS0VZKDUsIDAsIFNQSVRaX0tFWV9NQUlMKSwJLyogTUFJTCAqLworCUtFWSg1LCAxLCBLRVlfWiksCisJS0VZKDUsIDIsIEtFWV9YKSwKKwlLRVkoNSwgMywgS0VZX01JTlVTKSwKKwlLRVkoNSwgNCwgS0VZX1NQQUNFKSwKKwlLRVkoNSwgNSwgS0VZX0NPTU1BKSwKKwlLRVkoNSwgNywgS0VZX1VQKSwKKwlLRVkoNSwgMTAsIFNQSVRaX0tFWV9GTiksCS8qIEZOICovCisJS0VZKDYsIDAsIEtFWV9TWVNSUSksCisJS0VZKDYsIDEsIFNQSVRaX0tFWV9KQVAxKSwJLyogSkFQMSAqLworCUtFWSg2LCAyLCBTUElUWl9LRVlfSkFQMiksCS8qIEpBUDIgKi8KKwlLRVkoNiwgMywgU1BJVFpfS0VZX0NBTkNFTCksCS8qIENBTkNFTCAqLworCUtFWSg2LCA0LCBTUElUWl9LRVlfT0spLAkvKiBPSyAqLworCUtFWSg2LCA1LCBTUElUWl9LRVlfTUVOVSksCS8qIE1FTlUgKi8KKwlLRVkoNiwgNiwgS0VZX0xFRlQpLAorCUtFWSg2LCA3LCBLRVlfRE9XTiksCisJS0VZKDYsIDgsIEtFWV9SSUdIVCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBzcGl0emtiZF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHNwaXR6a2JkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHNwaXR6a2JkX2tleW1hcCksCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfcm93X2dwaW9zW10gPQorCQl7IDEyLCAxNywgOTEsIDM0LCAzNiwgMzgsIDM5IH07CitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfY29sX2dwaW9zW10gPQorCQl7IDg4LCAyMywgMjQsIDI1LCAyNiwgMjcsIDUyLCAxMDMsIDEwNywgMTA4LCAxMTQgfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgc3BpdHprYmRfcGRhdGEgPSB7CisJLmtleW1hcF9kYXRhCQk9ICZzcGl0emtiZF9rZXltYXBfZGF0YSwKKwkucm93X2dwaW9zCQk9IHNwaXR6a2JkX3Jvd19ncGlvcywKKwkuY29sX2dwaW9zCQk9IHNwaXR6a2JkX2NvbF9ncGlvcywKKwkubnVtX3Jvd19ncGlvcwkJPSBBUlJBWV9TSVpFKHNwaXR6a2JkX3Jvd19ncGlvcyksCisJLm51bV9jb2xfZ3Bpb3MJCT0gQVJSQVlfU0laRShzcGl0emtiZF9jb2xfZ3Bpb3MpLAorCS5jb2xfc2Nhbl9kZWxheV91cwk9IDEwLAorCS5kZWJvdW5jZV9tcwkJPSAxMCwKKwkud2FrZXVwCQkJPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHprYmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzcGl0ei1rZXlib2FyZCIsCisJLm5hbWUJCT0gIm1hdHJpeC1rZXlwYWQiLAogCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpdHprYmRfcGRhdGEsCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHNwaXR6X2dwaW9fa2V5c1tdID0geworCXsKKwkJLnR5cGUJPSBFVl9QV1IsCisJCS5jb2RlCT0gS0VZX1NVU1BFTkQsCisJCS5ncGlvCT0gU1BJVFpfR1BJT19PTl9LRVksCisJCS5kZXNjCT0gIk9uL09mZiIsCisJCS53YWtldXAJPSAxLAorCX0sCisJLyogVHdvIGJ1dHRvbnMgZGV0ZWN0aW5nIHRoZSBsaWQgc3RhdGUgKi8KKwl7CisJCS50eXBlCT0gRVZfU1csCisJCS5jb2RlCT0gMCwKKwkJLmdwaW8JPSBTUElUWl9HUElPX1NXQSwKKwkJLmRlc2MJPSAi77u/RGlzcGxheSBEb3duIiwKKwl9LAorCXsKKwkJLnR5cGUJPSBFVl9TVywKKwkJLmNvZGUJPSAxLAorCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fU1dCLAorCQkuZGVzYwk9ICLvu79MaWQgQ2xvc2VkIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBzcGl0el9ncGlvX2tleXNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHNwaXR6X2dwaW9fa2V5cywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHNwaXR6X2dwaW9fa2V5cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0el9ncGlvX2tleXNfZGV2aWNlID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpdHpfZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEsCisJfSwKIH07CiAKIApAQCAtMjk2LDYgKzQ2MSw3IEBACiAJLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCiAJLnhfcGxhdGVfb2htcwkJPSA0MTksCiAJLnlfcGxhdGVfb2htcwkJPSA0ODYsCisJLnByZXNzdXJlX21heAkJPSAxMDI0LAogCS5ncGlvX3BlbmRvd24JCT0gU1BJVFpfR1BJT19UUF9JTlQsCiAJLndhaXRfZm9yX3N5bmMJCT0gc3BpdHpfd2FpdF9mb3JfaHN5bmMsCiB9OwpAQCAtMzc4LDQ1ICs1NDQsNiBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi0KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGE7Ci0KLXN0YXRpYyBpbnQgc3BpdHpfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHNwaXR6X2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChTUElUWl9HUElPX25TRF9ERVRFQ1QsICJuU0RfREVURUNUIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFNQSVRaX0dQSU9fblNEX1dQLCAiblNEX1dQIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZV8xOwotCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoU1BJVFpfR1BJT19uU0RfREVURUNUKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChTUElUWl9HUElPX25TRF9XUCk7Ci0KLQlzcGl0el9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19uU0RfREVURUNULCBzcGl0el9kZXRlY3RfaW50LAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8Ci0JCQkgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfMjsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX1dQKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIHNwaXR6X21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCiB7CiAJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CkBAIC00MjcsMjQgKzU1NCwxMiBAQAogCQlzcGl0el9jYXJkX3B3cl9jdHJsKFNQSVRaX1BXUl9TRCwgMHgwMDAwKTsKIH0KIAotc3RhdGljIGludCBzcGl0el9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoU1BJVFpfR1BJT19uU0RfV1ApOwotfQotCi1zdGF0aWMgdm9pZCBzcGl0el9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoU1BJVFpfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoU1BJVFpfR1BJT19uU0RfREVURUNUKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBzcGl0el9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHNwaXR6X21jaV9pbml0LAotCS5nZXRfcm8JCT0gc3BpdHpfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgCT0gc3BpdHpfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IHNwaXR6X21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLnNldHBvd2VyIAkJPSBzcGl0el9tY2lfc2V0cG93ZXIsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBTUElUWl9HUElPX25TRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBTUElUWl9HUElPX25TRF9XUCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIApAQCAtNDg0LDUwICs1OTksMTAgQEAKIC8qCiAgKiBJcmRhCiAgKi8KLXN0YXRpYyBpbnQgc3BpdHpfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGdwaW9fcmVxdWVzdChTUElUWl9HUElPX0lSX09OLCAiSXJEQSBvbiIpOwotCWlmIChyYykKLQkJZ290byBlcnI7Ci0KLQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChTUElUWl9HUElPX0lSX09OLCAxKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2RpcjsKLQotCXJldHVybiAwOwotCi1lcnJfZGlyOgotCWdwaW9fZnJlZShTUElUWl9HUElPX0lSX09OKTsKLWVycjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwaXR6X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShTUElUWl9HUElPX0lSX09OKTsKLX0KLQotc3RhdGljIHZvaWQgc3BpdHpfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19JUl9PTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQotI2lmZGVmIENPTkZJR19NQUNIX0FLSVRBCi1zdGF0aWMgdm9pZCBha2l0YV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShBS0lUQV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKy8qIC5ncGlvX3B3ZG93biBpcyBzZXQgaW4gc3BpdHpfaW5pdCgpIGFuZCBha2l0YV9pbml0KCkgYWNjb3JkaW5nbHkgKi8KIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHNwaXR6X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cAkJPSBzcGl0el9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHNwaXR6X2lyZGFfc2h1dGRvd24sCiB9OwogCiAKQEAgLTY1Miw2ICs3MjcsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzcGl0enNjb29wX2RldmljZSwKIAkmc3BpdHprYmRfZGV2aWNlLAorCSZzcGl0el9ncGlvX2tleXNfZGV2aWNlLAogCSZzcGl0emxlZF9kZXZpY2UsCiAJJnNoYXJwc2xfbmFuZF9kZXZpY2UsCiAJJnNoYXJwc2xfcm9tX2RldmljZSwKQEAgLTY5NSw2ICs3NzEsNyBAQAogCXNwaXR6X2luaXRfc3BpKCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwlzcGl0el9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfb2hjaV9pbmZvKCZzcGl0el9vaGNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEpOwpAQCAtNzAyLDkgKzc3OSwzNCBAQAogCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0FLSVRBKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0JPUlpPSSkKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc2hhcnBzbF9ha2l0YV9iYnQgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gNCwKKwkubGVuID0gMSwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBha2l0YV9vb2JpbmZvID0geworCS5lY2NieXRlcyA9IDI0LAorCS5lY2Nwb3MgPSB7CisJCSAgIDB4NSwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsIDB4MTUsIDB4MTEsCisJCSAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCisJCSAgIDB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4Mzd9LAorCS5vb2JmcmVlID0ge3sweDA4LCAweDA5fX0KK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BJVFopIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfQk9SWk9JKQogc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X2luaXQodm9pZCkKIHsKKwlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBTUElUWl9HUElPX0lSX09OOworCisJaWYgKG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKKwkJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuYmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2FraXRhX2JidDsKKwkJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuZWNjX2xheW91dCA9ICZha2l0YV9vb2JpbmZvOworCX0KKwogCXBsYXRmb3JtX3Njb29wX2NvbmZpZyA9ICZzcGl0el9wY21jaWFfY29uZmlnOwogCiAJY29tbW9uX2luaXQoKTsKQEAgLTcyOSwyNSArODMxLDkgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBzaGFycHNsX2FraXRhX2JidCA9IHsKLQkub3B0aW9ucyA9IDAsCi0JLm9mZnMgPSA0LAotCS5sZW4gPSAxLAotCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCi19OwotCi1zdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGFraXRhX29vYmluZm8gPSB7Ci0JLmVjY2J5dGVzID0gMjQsCi0JLmVjY3BvcyA9IHsKLQkJICAgMHg1LCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywgMHgxNSwgMHgxMSwKLQkJICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKLQkJICAgMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzN30sCi0JLm9vYmZyZWUgPSB7ezB4MDgsIDB4MDl9fQotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IGFraXRhX2luaXQodm9pZCkKIHsKLQlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEudHJhbnNjZWl2ZXJfbW9kZSA9IGFraXRhX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZTsKKwlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBBS0lUQV9HUElPX0lSX09OOwogCiAJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuYmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2FraXRhX2JidDsKIAlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5lY2NfbGF5b3V0ID0gJmFraXRhX29vYmluZm87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKaW5kZXggMTE3YWQ1OS4uZTgxYTUyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwpAQCAtMjQ3LDQ5ICsyNDcsMTAgQEAKIC8qCiAgKiBNTUMvU0QgRGV2aWNlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdG9zYV9tY2lfcGxhdGZvcm1fZGF0YTsKLQogc3RhdGljIGludCB0b3NhX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCB0b3NhX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCiB7CiAJaW50IGVycjsKIAotCXRvc2FfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19uU0RfREVURUNULCAiTU1DL1NEIGNhcmQgZGV0ZWN0Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgblNEX0RFVEVDVCBncGlvXG4iKTsKLQkJZ290byBlcnJfZ3Bpb19kZXRlY3Q7Ci0JfQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KFRPU0FfR1BJT19uU0RfREVURUNUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9ncGlvX2RldGVjdF9kaXI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIHRvc2FfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkiTU1DL1NEIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQkJZ290byBlcnJfaXJxOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fU0RfV1AsICJTRCBXcml0ZSBQcm90ZWN0Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgU0RfV1AgZ3Bpb1xuIik7Ci0JCWdvdG8gZXJyX2dwaW9fd3A7Ci0JfQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KFRPU0FfR1BJT19TRF9XUCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZ3Bpb193cF9kaXI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX1BXUl9PTiwgIlNEIFBvd2VyIik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgU0RfUFdSIGdwaW9cbiIpOwotCQlnb3RvIGVycl9ncGlvX3B3cjsKLQl9Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19QV1JfT04sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2dwaW9fcHdyX2RpcjsKLQogCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fblNEX0lOVCwgIlNEIEludCIpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0b3NhX21jaV9pbml0OiBjYW4ndCByZXF1ZXN0IFNEX1BXUiBncGlvXG4iKTsKQEAgLTMwNCw1MSArMjY1LDIxIEBACiBlcnJfZ3Bpb19pbnRfZGlyOgogCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0lOVCk7CiBlcnJfZ3Bpb19pbnQ6Ci1lcnJfZ3Bpb19wd3JfZGlyOgotCWdwaW9fZnJlZShUT1NBX0dQSU9fUFdSX09OKTsKLWVycl9ncGlvX3B3cjoKLWVycl9ncGlvX3dwX2RpcjoKLQlncGlvX2ZyZWUoVE9TQV9HUElPX1NEX1dQKTsKLWVycl9ncGlvX3dwOgotCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci1lcnJfaXJxOgotZXJyX2dwaW9fZGV0ZWN0X2RpcjoKLQlncGlvX2ZyZWUoVE9TQV9HUElPX25TRF9ERVRFQ1QpOwotZXJyX2dwaW9fZGV0ZWN0OgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHRvc2FfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKLQkJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1BXUl9PTiwgMSk7Ci0JfSBlbHNlIHsKLQkJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1BXUl9PTiwgMCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHRvc2FfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFRPU0FfR1BJT19TRF9XUCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHRvc2FfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0lOVCk7Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19QV1JfT04pOwotCWdwaW9fZnJlZShUT1NBX0dQSU9fU0RfV1ApOwotCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfREVURUNUKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB0b3NhX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzayAgICAgICA9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAgICAgICAgICAgPSB0b3NhX21jaV9pbml0LAotCS5nZXRfcm8JCT0gdG9zYV9tY2lfZ2V0X3JvLAotCS5zZXRwb3dlciAgICAgICA9IHRvc2FfbWNpX3NldHBvd2VyLAotCS5leGl0ICAgICAgICAgICA9IHRvc2FfbWNpX2V4aXQsCisJLm9jcl9tYXNrICAgICAgIAk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAgICAgICAgICAgCT0gdG9zYV9tY2lfaW5pdCwKKwkuZXhpdCAgICAgICAgICAgCT0gdG9zYV9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IFRPU0FfR1BJT19uU0RfREVURUNULAorCS5ncGlvX2NhcmRfcm8JCT0gVE9TQV9HUElPX1NEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IFRPU0FfR1BJT19QV1JfT04sCiB9OwogCiAvKgpAQCAtNDA2LDEwICszMzcsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgdG9zYV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCi0JLnN0YXJ0dXAgPSB0b3NhX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24gPSB0b3NhX2lyZGFfc2h1dGRvd24sCisJLmdwaW9fcHdkb3duCQk9IC0xLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLnN0YXJ0dXAJCT0gdG9zYV9pcmRhX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHRvc2FfaXJkYV9zaHV0ZG93biwKIH07CiAKIC8qCkBAIC05MTAsNiArODQyLDcgQEAKIAlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UsIDEyKTsKIAlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UsIDE2KTsKIAorCXRvc2FfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCXB4YV9zZXRfbWNpX2luZm8oJnRvc2FfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmdG9zYV9maWNwX3BsYXRmb3JtX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdHJlbzY4MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJlbzY4MC5jCmluZGV4IDc1M2VjNGQuLmZlMDg1MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cmVvNjgwLmMKQEAgLTE1Myw4NyArMTUzLDExIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCB0cmVvNjgwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJaXJxX2hhbmRsZXJfdCB0cmVvNjgwX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCi0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiksCi0JCQl0cmVvNjgwX2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCi0JaWYgKGVycikgewotCQlkZXZfZXJyKGRldiwgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJICAgICBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyZW82ODBfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUE9XRVIpOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCB0cmVvNjgwX21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJlbzY4MF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB0cmVvNjgwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHRyZW82ODBfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gdHJlbzY4MF9tY2lfZ2V0X3JvLAotCS5pbml0IAkJPSB0cmVvNjgwX21jaV9pbml0LAotCS5leGl0CQk9IHRyZW82ODBfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzMCwxNiArMjU0LDkgQEAKIAlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX0JMX1BPV0VSLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjI7Ci0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMzsKIAogCXJldHVybiAwOwotZXJyMzoKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUik7CisKIGVycjI6CiAJZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9CTF9QT1dFUik7CiBlcnI6CkBAIC0zNTUsNyArMjcyLDYgQEAKIHN0YXRpYyB2b2lkIHRyZW82ODBfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfQkxfUE9XRVIpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfTENEX1BPV0VSKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgdHJlbzY4MF9iYWNrbGlnaHRfZGF0YSA9IHsKQEAgLTM3OSw0NCArMjk1LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCB0cmVvNjgwX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1RSRU82ODBfSVJfRU4sIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJlbzY4MF9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX0lSX0VOLCAiSXIgcG9ydCBkaXNhYmxlIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIxOwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9JUl9FTiwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCi0JcmV0dXJuIDA7Ci0KLWVycjI6Ci0JZGV2X2VycihkZXYsICJ0cmVvNjgwX2lyZGE6IGNhbm5vdCBjaGFuZ2UgSVIgZ3BpbyBkaXJlY3Rpb25cbiIpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfSVJfRU4pOwotZXJyMToKLQlkZXZfZXJyKGRldiwgInRyZW82ODBfaXJkYTogY2Fubm90IGFsbG9jYXRlIElSIGdwaW9cbiIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyZW82ODBfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9JUl9FTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRyZW82ODBfZmljcF9pbmZvID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfRklSTU9ERSB8IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnN0YXJ0dXAgICAgICAgICAgPSB0cmVvNjgwX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24gICAgICAgICA9IHRyZW82ODBfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IHRyZW82ODBfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9UUkVPNjgwX0lSX0VOLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTQ2LDYgKzQyNywxMSBAQAogfSwKIH07CiAKK3N0YXRpYyB2b2lkIHRyZW82ODBfbGNkX3Bvd2VyKGludCBvbiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICppbmZvKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfVFJFTzY4MF9CTF9QT1dFUiwgb24pOworfQorCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyB0cmVvNjgwX2xjZF9zY3JlZW4gPSB7CiAJLm1vZGVzCQk9IHRyZW82ODBfbGNkX21vZGVzLAogCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHRyZW82ODBfbGNkX21vZGVzKSwKQEAgLTU4NSwxMSArNDcxLDMyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgdHJlbzY4MF9sY2RfcG93ZXJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUiwgIkxDRCBQT1dFUiIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJUcmVvNjgwOiBMQ0QgcG93ZXIgR1BJTyByZXF1ZXN0IGZhaWxlZCFcbiIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsIDApOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJUcmVvNjgwOiBzZXR0aW5nIExDRCBwb3dlciBHUElPIGRpcmVjdGlvbiBmYWlsZWQhXG4iKTsKKwkJZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIpOworCQlyZXR1cm47CisJfQorCisJdHJlbzY4MF9sY2Rfc2NyZWVuLnB4YWZiX2xjZF9wb3dlciA9IHRyZW82ODBfbGNkX3Bvd2VyOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgdHJlbzY4MF9pbml0KHZvaWQpCiB7CiAJdHJlbzY4MF9wbV9pbml0KCk7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUodHJlbzY4MF9waW5fY29uZmlnKSk7CiAJcHhhX3NldF9rZXlwYWRfaW5mbygmdHJlbzY4MF9rZXlwYWRfcGxhdGZvcm1fZGF0YSk7CisJdHJlbzY4MF9sY2RfcG93ZXJfaW5pdCgpOwogCXNldF9weGFfZmJfaW5mbygmdHJlbzY4MF9sY2Rfc2NyZWVuKTsKIAlweGFfc2V0X21jaV9pbmZvKCZ0cmVvNjgwX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAl0cmVvNjgwX3VkY19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwppbmRleCA4MjVmNTQwLi4zOTgxZTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKQEAgLTM2Nyw2ICszNjcsOSBAQAogCS5leGl0CQk9IHRyaXplcHM0X21jaV9leGl0LAogCS5nZXRfcm8JCT0gTlVMTCwJLyogd3JpdGUtcHJvdGVjdGlvbiBub3Qgc3VwcG9ydGVkICovCiAJLnNldHBvd2VyIAk9IE5VTEwsCS8qIHBvd2VyLXN3aXRjaGluZyBub3Qgc3VwcG9ydGVkICovCisJLmdwaW9fY2FyZF9kZXRlY3QgPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCT0gLTEsCisJLmdwaW9fcG93ZXIJPSAtMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MTIsNiArNDE1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgdHJpemVwczRfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvX3B3ZG93bgkJPSAtMSwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCiAJLnRyYW5zY2VpdmVyX21vZGUJPSB0cml6ZXBzNF9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCiAJLnN0YXJ0dXAJCT0gdHJpemVwczRfaXJkYV9zdGFydHVwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDc5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIElza3JhdGVsIEVsZWN0cm9uaWNzIFhDRVAgcGxhdGZvcm0gYXMgdXNlZCBpbgorICogIHRoZSBMaWJlcmEgaW5zdHJ1bWVudHMgZnJvbSBJbnN0cnVtZW50YXRpb24gVGVjaG5vbG9naWVzLgorICoKKyAqICBBdXRob3I6ICAgICBBbGVzIEJhcmRvcmZlciA8YWxlc0BpLXRlY2guc2k+CisgKiAgQ29udHJpYnV0aW9ucyBieTogQWJib3R0LCBNRyAoTWljaGFlbCkgPG1pY2hhZWwuYWJib3R0QGRpYW1vbmQuYWMudWs+CisgKiAgQ29udHJpYnV0aW9ucyBieTogTWF0ZWogS2VuZGEgPG1hdGVqLmtlbmRhQGktdGVjaC5zaT4KKyAqICBDcmVhdGVkOiAgICBKdW5lIDIwMDYKKyAqICBDb3B5cmlnaHQ6ICAoQykgMjAwNi0yMDA5IEluc3RydW1lbnRhdGlvbiBUZWNobm9sb2dpZXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2kyYy5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2RlZmluZSBYQ0VQX0VUSF9QSFlTCQkoUFhBX0NTM19QSFlTICsgMHgwMDAwMDMwMCkKKyNkZWZpbmUgWENFUF9FVEhfUEhZU19FTkQJKFBYQV9DUzNfUEhZUyArIDB4MDAwZmZmZmYpCisjZGVmaW5lIFhDRVBfRVRIX0FUVFIJCShQWEFfQ1MzX1BIWVMgKyAweDAyMDAwMDAwKQorI2RlZmluZSBYQ0VQX0VUSF9BVFRSX0VORAkoUFhBX0NTM19QSFlTICsgMHgwMjBmZmZmZikKKyNkZWZpbmUgWENFUF9FVEhfSVJRCQlJUlFfR1BJTzAKKworLyogIFhDRVAgQ1BMRCBiYXNlICovCisjZGVmaW5lIFhDRVBfQ1BMRF9CQVNFCQkweGYwMDAwMDAwCisKKworLyogRmxhc2ggcGFydGl0aW9ucy4gKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHhjZXBfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPQkJIkJvb3Rsb2FkZXIiLAorCQkuc2l6ZSA9CQkweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0JMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCisJfSwgeworCQkubmFtZSA9CQkiQm9vdGxvYWRlciBFTlYiLAorCQkuc2l6ZSA9CQkweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0JMHgwMDA0MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCisJfSwgeworCQkubmFtZSA9CQkiS2VybmVsIiwKKwkJLnNpemUgPQkJMHgwMDEwMDAwMCwKKwkJLm9mZnNldCA9CTB4MDAwODAwMDAsCisJfSwgeworCQkubmFtZSA9CQkiUmVzY3VlIGZzIiwKKwkJLnNpemUgPQkJMHgwMDI4MDAwMCwKKwkJLm9mZnNldCA9CTB4MDAxODAwMDAsCisJfSwgeworCQkubmFtZSA9CQkiRmlsZXN5c3RlbSIsCisJCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPQkweDAwNDAwMDAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgeGNlcF9mbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gNCwJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworCQkucGFydHMJCT0geGNlcF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHhjZXBfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZsYXNoX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAwLAorCS5kZXYgCT0geworCQkucGxhdGZvcm1fZGF0YSA9IHhjZXBfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZmbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCisKKworLyogU01DIExBTjkxQzExMSBuZXR3b3JrIGNvbnRyb2xsZXIuICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAic21jOTF4LXJlZ3MiLAorCQkuc3RhcnQJPSBYQ0VQX0VUSF9QSFlTLAorCQkuZW5kCT0gWENFUF9FVEhfUEhZU19FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBYQ0VQX0VUSF9JUlEsCisJCS5lbmQJPSBYQ0VQX0VUSF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkubmFtZQk9ICJzbWM5MXgtYXR0cmliIiwKKwkJLnN0YXJ0CT0gWENFUF9FVEhfQVRUUiwKKwkJLmVuZAk9IFhDRVBfRVRIX0FUVFJfRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgeGNlcF9zbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzMyQklUIHwgU01DOTFYX05PV0FJVCB8IFNNQzkxWF9VU0VfRE1BLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnhjZXBfc21jOTF4X2luZm8sCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZmbGFzaF9kZXZpY2UsCisJJnNtYzkxeF9kZXZpY2UsCit9OworCisKKy8qIFdlIGhhdmUgdG8gc3RhdGUgdGhhdCB0aGVyZSBhcmUgSFdNT04gZGV2aWNlcyBvbiB0aGUgSTJDIGJ1cyBvbiBYQ0VQLgorICogRHJpdmVycyBmb3IgSFdNT04gdmVyaWZ5IGNhcGFiaWxpdGllcyBvZiB0aGUgYWRhcHRlciB3aGVuIGxvYWRpbmcgYW5kCisgKiByZWZ1c2UgdG8gYXR0YWNoIGlmIHRoZSBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBIV01PTiBjbGFzcyBvZiBkZXZpY2VzLgorICogU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9pMmMvcG9ydGluZy1jbGllbnRzLiAqLworc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgeGNlcF9pMmNfcGxhdGZvcm1fZGF0YSAgPSB7CisJLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OCit9OworCisKK3N0YXRpYyBtZnBfY2ZnX3QgeGNlcF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPNzlfbkNTXzMsCS8qIFNNQyA5MUMxMTEgY2hpcCBzZWxlY3QuICovCisJR1BJTzgwX25DU180LAkvKiBDUExEIGNoaXAgc2VsZWN0LiAqLworCS8qIFNTUCBjb21tdW5pY2F0aW9uIHRvIE1TUDQzMCAqLworCUdQSU8yM19TU1AxX1NDTEssCisJR1BJTzI0X1NTUDFfU0ZSTSwKKwlHUElPMjVfU1NQMV9UWEQsCisJR1BJTzI2X1NTUDFfUlhELAorCUdQSU8yN19TU1AxX0VYVENMSworfTsKKworc3RhdGljIHZvaWQgX19pbml0IHhjZXBfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHhjZXBfcGluX2NvbmZpZykpOworCisJLyogU2VlIEludGVsIFhTY2FsZSBEZXZlbG9wZXIncyBHdWlkZSBmb3IgZGV0YWlscyAqLworCS8qIFNldCBSREYgYW5kIFJETiB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgKGNoaXAgc2VsZWN0IDMgKHNtYzkxeCkpICovCisJTVNDMSA9IChNU0MxICYgMHhmZmZmKSB8IDB4RDU1NDAwMDA7CisJLyogU2V0IFJERiBhbmQgUkROIHRvIGFwcHJvcHJpYXRlIHZhbHVlcyAoY2hpcCBzZWxlY3QgNSAoZnBnYSkpICovCisJTVNDMiA9IChNU0MyICYgMHhmZmZmKSB8IDB4NzJBMDAwMDA7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShkZXZpY2VzKSk7CisJcHhhX3NldF9pMmNfaW5mbygmeGNlcF9pMmNfcGxhdGZvcm1fZGF0YSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoWENFUCwgIklza3JhdGVsIFhDRVAiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSB4Y2VwX2luaXQsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCmluZGV4IDIxOGQyMDAuLjA5Nzg0ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYwpAQCAtMjkwLDYgKzI5MCw5IEBACiAJLmluaXQgCQk9IHp5bG9uaXRlX21jaV9pbml0LAogCS5leGl0CQk9IHp5bG9uaXRlX21jaV9leGl0LAogCS5nZXRfcm8JCT0genlsb25pdGVfbWNpX3JvLAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gLTEsCisJLmdwaW9fY2FyZF9ybwk9IC0xLAorCS5ncGlvX3Bvd2VyCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCBkZmM5YjBiLi5jNDhlMWYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC03MCw2ICs3MCw4IEBACiAJYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQlggcGxhdGZvcm0iCiAJc2VsZWN0IEFSTV9HSUMKIAlzZWxlY3QgSEFWRV9QQVRBX1BMQVRGT1JNCisJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSBpZiBDUFVfVjcgJiYgIUhJR0hfUEhZU19PRkZTRVQKKwlzZWxlY3QgWk9ORV9ETUEgaWYgU1BBUlNFTUVNCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IFBCWCBwbGF0Zm9ybS4KIApAQCAtODIsNiArODQsNyBAQAogCSAgMHg3MDAwMDAwMCwgMjU2TUIgb2Ygd2hpY2ggYmVpbmcgbWlycm9yZWQgYXQgMHgwMDAwMDAwMC4gSWYKIAkgIHRoZSBib2FyZCBzdXBwb3J0cyA1MTJNQiBvZiBSQU0sIHRoaXMgb3B0aW9uIGFsbG93cyB0aGUKIAkgIG1lbW9yeSB0byBiZSBhY2Nlc3NlZCBjb250aWd1b3VzbHkgYXQgdGhlIGhpZ2ggcGh5c2ljYWwKLQkgIG9mZnNldC4KKwkgIG9mZnNldC4gT24gdGhlIFBCWCBib2FyZCwgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGFsbG93cyAxR0Igb2YKKwkgIFJBTSB0byBiZSB1c2VkIHdpdGggU1BBUlNFTUVNLgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IGRjMzUxOWMuLjlmMjkzNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQ0LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCkBAIC01OSw2ICs1OSwyNSBAQAogLyogdXNlZCBieSBlbnRyeS1tYWNyby5TIGFuZCBwbGF0c21wLmMgKi8KIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiAKKyNpZmRlZiBDT05GSUdfWk9ORV9ETUEKKy8qCisgKiBBZGp1c3QgdGhlIHpvbmVzIGlmIHRoZXJlIGFyZSByZXN0cmljdGlvbnMgZm9yIERNQSBhY2Nlc3MuCisgKi8KK3ZvaWQgX19pbml0IHJlYWx2aWV3X2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmhvbGUpCit7CisJdW5zaWduZWQgbG9uZyBkbWFfc2l6ZSA9IFNaXzI1Nk0gPj4gUEFHRV9TSElGVDsKKworCWlmICghbWFjaGluZV9pc19yZWFsdmlld19wYngoKSB8fCBub2RlIHx8IChzaXplWzBdIDw9IGRtYV9zaXplKSkKKwkJcmV0dXJuOworCisJc2l6ZVtaT05FX05PUk1BTF0gPSBzaXplWzBdIC0gZG1hX3NpemU7CisJc2l6ZVtaT05FX0RNQV0gPSBkbWFfc2l6ZTsKKwlob2xlW1pPTkVfTk9STUFMXSA9IGhvbGVbMF07CisJaG9sZVtaT05FX0RNQV0gPSAwOworfQorI2VuZGlmCisKIC8qCiAgKiBUaGlzIGlzIHRoZSBSZWFsVmlldyBzY2hlZF9jbG9jayBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaGFzCiAgKiBhIHJlc29sdXRpb24gb2YgNDEuN25zLCBhbmQgYSBtYXhpbXVtIHZhbHVlIG9mIGFib3V0IDE3OXMuCkBAIC0yMzcsMTQgKzI1NiwxNCBAQAogCXJldHVybiByZWFkbChSRUFMVklFV19TWVNNQ0kpICYgbWFzazsKIH0KIAotc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhID0geworc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSByZWFsdmlld19tbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gMTcsCiAJLmdwaW9fY2QJPSAxNiwKIH07CiAKLXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMxX3BsYXRfZGF0YSA9IHsKK3N0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gcmVhbHZpZXdfbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IDE5LApAQCAtMjk2LDMxICszMTUsMzEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAl7CS8qIFVBUlQwICovCi0JCS5kZXZfaWQJCT0gImRldjpmMSIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MCIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQxICovCi0JCS5kZXZfaWQJCT0gImRldjpmMiIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MSIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQyICovCi0JCS5kZXZfaWQJCT0gImRldjpmMyIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MiIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQzICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDkiLAorCQkuZGV2X2lkCQk9ICJmcGdhOnVhcnQzIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogS01JMCAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA2IiwKKwkJLmRldl9pZAkJPSAiZnBnYTprbWkwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogS01JMSAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA3IiwKKwkJLmRldl9pZAkJPSAiZnBnYTprbWkxIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogTU1DMCAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA1IiwKKwkJLmRldl9pZAkJPSAiZnBnYTptbWMwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogRUI6Q0xDRCAqLwotCQkuZGV2X2lkCQk9ICJkZXY6MjAiLAorCQkuZGV2X2lkCQk9ICJkZXY6Y2xjZCIsCiAJCS5jbGsJCT0gJm9zY3Zjb19jbGssCiAJfSwgewkvKiBQQjpDTENEICovCi0JCS5kZXZfaWQJCT0gImlzc3A6MjAiLAorCQkuZGV2X2lkCQk9ICJpc3NwOmNsY2QiLAogCQkuY2xrCQk9ICZvc2N2Y29fY2xrLAogCX0KIH07CkBAIC01NDMsNyArNTYyLDcgQEAKIAlmYi0+cGFuZWwJCT0gcmVhbHZpZXdfY2xjZF9wYW5lbCgpOwogCiAJZmItPmZiLnNjcmVlbl9iYXNlID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSgmZmItPmRldi0+ZGV2LCBmcmFtZXNpemUsCi0JCQkJCQkgICAgJmRtYSwgR0ZQX0tFUk5FTCk7CisJCQkJCQkgICAgJmRtYSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghZmItPmZiLnNjcmVlbl9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ0xDRDogdW5hYmxlIHRvIG1hcCBmcmFtZWJ1ZmZlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzg4LDMgKzgwNywyNCBAQAogCXJlYWx2aWV3X2Nsb2Nrc291cmNlX2luaXQoKTsKIAlyZWFsdmlld19jbG9ja2V2ZW50c19pbml0KHRpbWVyX2lycSk7CiB9CisKKy8qCisgKiBTZXR1cCB0aGUgbWVtb3J5IGJhbmtzLgorICovCit2b2lkIHJlYWx2aWV3X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqZnJvbSwKKwkJICAgIHN0cnVjdCBtZW1pbmZvICptZW1pbmZvKQoreworCS8qCisJICogTW9zdCBSZWFsVmlldyBwbGF0Zm9ybXMgaGF2ZSA1MTJNQiBjb250aWd1b3VzIFJBTSBhdCAweDcwMDAwMDAwLgorCSAqIEhhbGYgb2YgdGhpcyBpcyBtaXJyb3JlZCBhdCAwLgorCSAqLworI2lmZGVmIENPTkZJR19SRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCisJbWVtaW5mby0+YmFua1swXS5zdGFydCA9IDB4NzAwMDAwMDA7CisJbWVtaW5mby0+YmFua1swXS5zaXplID0gU1pfNTEyTTsKKwltZW1pbmZvLT5ucl9iYW5rcyA9IDE7CisjZWxzZQorCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzI1Nk07CisJbWVtaW5mby0+bnJfYmFua3MgPSAxOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCmluZGV4IDU5YTMzN2IuLjc4MWJjYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KIAogI2RlZmluZSBBTUJBX0RFVklDRShuYW1lLGJ1c2lkLGJhc2UscGxhdCkJCQlcCkBAIC00NCwxMSArNDUsMTMgQEAKIAkvKiAuZG1hCQk9IGJhc2UjI19ETUEsKi8JCQkJXAogfQogCitzdHJ1Y3QgbWFjaGluZV9kZXNjOworCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19mbGFzaF9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19jZl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19pMmNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKLWV4dGVybiBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGE7CitleHRlcm4gc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhOwogZXh0ZXJuIHN0cnVjdCBjbGNkX2JvYXJkIGNsY2RfcGxhdF9kYXRhOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiBleHRlcm4gdm9pZCBfX2lvbWVtICp0aW1lcjBfdmFfYmFzZTsKQEAgLTYxLDUgKzY0LDggQEAKIGV4dGVybiBpbnQgcmVhbHZpZXdfZmxhc2hfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiBudW0pOwogZXh0ZXJuIGludCByZWFsdmlld19ldGhfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlc291cmNlICpyZXMpOwogZXh0ZXJuIGludCByZWFsdmlld191c2JfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMpOworZXh0ZXJuIHZvaWQgcmVhbHZpZXdfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MsIHN0cnVjdCB0YWcgKnRhZ3MsCisJCQkgICBjaGFyICoqZnJvbSwgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pOworZXh0ZXJuIHZvaWQgKCpyZWFsdmlld19yZXNldCkoY2hhcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaAppbmRleCA5OGY4ZTdlLi4zNGI4MGI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaApAQCAtNzMsNCArNzMsOSBAQAogI2RlZmluZSBSRUFMVklFV19QQjExNzZfR0lDX0RJU1RfQkFTRQkJMHgxMDA0MTAwMCAvKiBHSUMgZGlzdHJpYnV0b3IsIG9uIEZQR0EgKi8KICNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X0wyMjBfQkFTRQkJMHgxMDExMDAwMCAvKiBMMjIwIHJlZ2lzdGVycyAqLwogCisvKgorICogQ29udHJvbCByZWdpc3RlciBTWVNfUkVTRVRDVEwgaXMgc2V0IHRvIDEgdG8gZm9yY2UgYSBzb2Z0IHJlc2V0CisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1NZU19MT0NLVkFMX1JTVENUTCAgICAweDAxMDAKKwogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfQk9BUkRfUEIxMTc2X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKaW5kZXggZjBkNjhlMC4uN2FiZjkxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKQEAgLTgxLDQgKzgxLDE2IEBACiAjZGVmaW5lIFJFQUxWSUVXX1RDMTFNUF9HSUNfRElTVF9CQVNFCQkweDFGMDAxMDAwCS8qIFRlc3QgY2hpcCBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXN0cmlidXRvciAqLwogI2RlZmluZSBSRUFMVklFV19UQzExTVBfTDIyMF9CQVNFCQkweDFGMDAyMDAwCS8qIEwyMjAgcmVnaXN0ZXJzICovCiAKKyAvKgorICogVmFsdWVzIGZvciBSRUFMVklFV19TWVNfUkVTRVRfQ1RSTAorICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9DT05GSUdDTFIgICAgMHgwMQorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfQ09ORklHSU5JVCAgIDB4MDIKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0RMTFJFU0VUICAgICAweDAzCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9QTExSRVNFVCAgICAgMHgwNAorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfUE9SICAgICAgICAgIDB4MDUKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0RvQyAgICAgICAgICAweDA2CisKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX0xFRCAgICAgICAgICgxIDw8IDApCisKICNlbmRpZgkvKiBfX0FTTV9BUkNIX0JPQVJEX1BCMTFNUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDI5M2MzMDAuLjI0MTdiYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yOSw0ICsyOSw1MyBAQAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKICNlbmRpZgogCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiBkZWZpbmVkKENPTkZJR19aT05FX0RNQSkKK2V4dGVybiB2b2lkIHJlYWx2aWV3X2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmhvbGUpOworI2RlZmluZSBhcmNoX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlKSBcCisJcmVhbHZpZXdfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGUpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKFBIWVNfT0ZGU0VUICsgU1pfMjU2TSAtIDEpCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgU1pfMjU2TSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCisvKgorICogU3BhcnNlbWVtIGRlZmluaXRpb25zIGZvciBSZWFsVmlldyBQQlguCisgKgorICogVGhlIFJlYWxWaWV3IFBCWCBib2FyZCBoYXMgYW5vdGhlciBibG9jayBvZiA1MTJNQiBvZiBSQU0gYXQgMHgyMDAwMDAwMCwKKyAqIGhvd2V2ZXIgb25seSB0aGUgYmxvY2sgYXQgMHg3MDAwMDAwMCAob3IgdGhlIDI1Nk1CIG1pcnJvciBhdCAweDAwMDAwMDAwKQorICogbWF5IGJlIHVzZWQgZm9yIERNQS4KKyAqCisgKiBUaGUgbWFjcm9zIGJlbG93IGRlZmluZSBhIHNlY3Rpb24gc2l6ZSBvZiAyNTZNQiBhbmQgYSBub24tbGluZWFyIHZpcnR1YWwgdG8KKyAqIHBoeXNpY2FsIG1hcHBpbmc6CisgKgorICogMjU2TUIgQCAweDAwMDAwMDAwIC0+IFBBR0VfT0ZGU0VUCisgKiA1MTJNQiBAIDB4MjAwMDAwMDAgLT4gUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwCisgKiAyNTZNQiBAIDB4ODAwMDAwMDAgLT4gUEFHRV9PRkZTRVQgKyAweDMwMDAwMDAwCisgKi8KKyNpZmRlZiBDT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAorI2Vycm9yICJTUEFSU0VNRU0gbm90IGF2YWlsYWJsZSB3aXRoIFJFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQiCisjZW5kaWYKKworI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTCTMyCisjZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTCTI4CisKKy8qIGJhbmsgcGFnZSBvZmZzZXRzICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUMQkoUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwKQorI2RlZmluZSBQQUdFX09GRlNFVDIJKFBBR0VfT0ZGU0VUICsgMHgzMDAwMDAwMCkKKworI2RlZmluZSBfX3BoeXNfdG9fdmlydChwaHlzKQkJCQkJCVwKKwkoKHBoeXMpID49IDB4ODAwMDAwMDAgPwkocGh5cykgLSAweDgwMDAwMDAwICsgUEFHRV9PRkZTRVQyIDoJXAorCSAocGh5cykgPj0gMHgyMDAwMDAwMCA/CShwaHlzKSAtIDB4MjAwMDAwMDAgKyBQQUdFX09GRlNFVDEgOglcCisJIChwaHlzKSArIFBBR0VfT0ZGU0VUKQorCisjZGVmaW5lIF9fdmlydF90b19waHlzKHZpcnQpCQkJCQkJXAorCSAoKHZpcnQpID49IFBBR0VfT0ZGU0VUMiA/ICh2aXJ0KSAtIFBBR0VfT0ZGU0VUMiArIDB4ODAwMDAwMDAgOglcCisJICAodmlydCkgPj0gUEFHRV9PRkZTRVQxID8gKHZpcnQpIC0gUEFHRV9PRkZTRVQxICsgMHgyMDAwMDAwMCA6CVwKKwkgICh2aXJ0KSAtIFBBR0VfT0ZGU0VUKQorCisjZW5kaWYJLyogQ09ORklHX1NQQVJTRU1FTSAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCmluZGV4IGM4ZjUwODMuLjRmNDZiZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtMTE5LDE5ICsxMTksNiBAQAogI2RlZmluZSBSRUFMVklFV19TWVNfVEVTVF9PU0MzICAgICAgICAgICAgICAgKFJFQUxWSUVXX1NZU19CQVNFICsgUkVBTFZJRVdfU1lTX1RFU1RfT1NDM19PRkZTRVQpCiAjZGVmaW5lIFJFQUxWSUVXX1NZU19URVNUX09TQzQgICAgICAgICAgICAgICAoUkVBTFZJRVdfU1lTX0JBU0UgKyBSRUFMVklFV19TWVNfVEVTVF9PU0M0X09GRlNFVCkKIAotLyogCi0gKiBWYWx1ZXMgZm9yIFJFQUxWSUVXX1NZU19SRVNFVF9DVFJMCi0gKi8KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSICAgIDB4MDEKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHSU5JVCAgIDB4MDIKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfRExMUkVTRVQgICAgIDB4MDMKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfUExMUkVTRVQgICAgIDB4MDQKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfUE9SICAgICAgICAgIDB4MDUKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfRG9DICAgICAgICAgIDB4MDYKLQotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9MRUQgICAgICAgICAoMSA8PCAwKQotCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFJlYWxWaWV3IGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Myw3ICsxNDAsNyBAQAogICogICAgIFNZU19DTEQsIFNZU19CT09UQ1MKICAqLwogI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS19MT0NLRUQgICAgKDEgPDwgMTYpCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19MT0NLVkFMX01BU0sJMHhGRkZGCQkvKiB3cml0ZSAweEEwNUYgdG8gZW5hYmxlIHdyaXRlIGFjY2VzcyAqLworI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLCTB4QTA1RgkgICAgICAgLyogRW5hYmxlIHdyaXRlIGFjY2VzcyAqLwogCiAvKgogICogUkVBTFZJRVdfU1lTX0ZMQVNICmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDFhMTVhNDQuLmEzMGYyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KIAordm9pZCAoKnJlYWx2aWV3X3Jlc2V0KShjaGFyIG1vZGUpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJLyoKQEAgLTM2LDE2ICszOCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQogCS8qCiAJICogVG8gcmVzZXQsIHdlIGhpdCB0aGUgb24tYm9hcmQgcmVzZXQgcmVnaXN0ZXIKIAkgKiBpbiB0aGUgc3lzdGVtIEZQR0EKIAkgKi8KLQl2YWwgPSBfX3Jhd19yZWFkbChoZHJfY3RybCk7Ci0JdmFsIHw9IFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKLQlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7CisJaWYgKHJlYWx2aWV3X3Jlc2V0KQorCQlyZWFsdmlld19yZXNldChtb2RlKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGE4ODQ1OGIuLjAwOTI2NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC0xNDYsMTEgKzE0Niw4IEBACiAJICogcmVnaXN0ZXIuIFRoZSBCb290TW9uaXRvciB3YWl0cyBmb3IgdGhpcyByZWdpc3RlciB0byBiZWNvbWUKIAkgKiBub24temVyby4KIAkgKi8KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQgMHgzMAotI2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NDX09GRlNFVCAweDM0CiAJX19yYXdfd3JpdGVsKEJTWU0odmlydF90b19waHlzKHJlYWx2aWV3X3NlY29uZGFyeV9zdGFydHVwKSksCi0JCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQpOworCQkgICAgIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfRkxBR1NTRVQpKTsKIAogCW1iKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggYWJkMTNiNC4uOTE3ZjhjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zNyw3ICszOCw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgpAQCAtMTkzLDI3ICsxOTMsMjcgQEAKICNkZWZpbmUgRUJfU1NQX0RNQQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksICAiZnBnYTowNCIsIEFBQ0ksICAgICBOVUxMKTsKLUFNQkFfREVWSUNFKG1tYzAsICAiZnBnYTowNSIsIE1NQ0kwLCAgICAmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0Uoa21pMCwgICJmcGdhOjA2IiwgS01JMCwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwgICJmcGdhOjA3IiwgS01JMSwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsICJmcGdhOjA5IiwgRUJfVUFSVDMsIE5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwgICJmcGdhOmFhY2kiLCAgQUFDSSwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UobW1jMCwgICJmcGdhOm1tYzAiLCAgTU1DSTAsICAgICZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLCAgImZwZ2E6a21pMCIsICBLTUkwLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRShrbWkxLCAgImZwZ2E6a21pMSIsICBLTUkxLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywgImZwZ2E6dWFydDMiLCBFQl9VQVJUMywgTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLCAgICJkZXY6MDAiLCAgRUJfU01DLCAgIE5VTEwpOwotQU1CQV9ERVZJQ0UoY2xjZCwgICJkZXY6MjAiLCAgRUJfQ0xDRCwgICZjbGNkX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShkbWFjLCAgImRldjozMCIsICBETUFDLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLCAgImRldjplMCIsICBTQ1RMLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh3ZG9nLCAgImRldjplMSIsICBFQl9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBFQl9HUElPMCwgJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsICAgImRldjplOCIsICBFQl9SVEMsICAgTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLCAgImRldjpmMCIsICBTQ0ksICAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwgImRldjpmMSIsICBFQl9VQVJUMCwgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwgImRldjpmMiIsICBFQl9VQVJUMSwgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwgImRldjpmMyIsICBFQl9VQVJUMiwgTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLCAgImRldjpmNCIsICBFQl9TU1AsICAgTlVMTCk7CitBTUJBX0RFVklDRShzbWMsICAgImRldjpzbWMiLCAgIEVCX1NNQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsICAiZGV2OmNsY2QiLCAgRUJfQ0xDRCwgICZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLCAgImRldjpkbWFjIiwgIERNQUMsICAgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsICAiZGV2OnNjdGwiLCAgU0NUTCwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywgICJkZXY6d2RvZyIsICBFQl9XQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwgImRldjpncGlvMCIsIEVCX0dQSU8wLCAmZ3BpbzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8xLCAiZGV2OmdwaW8xIiwgR1BJTzEsICAgICZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsICJkZXY6Z3BpbzIiLCBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsICAgImRldjpydGMiLCAgIEVCX1JUQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsICAiZGV2OnNjaTAiLCAgU0NJLCAgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsICJkZXY6dWFydDAiLCBFQl9VQVJUMCwgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwgImRldjp1YXJ0MSIsIEVCX1VBUlQxLCBOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLCAiZGV2OnVhcnQyIiwgRUJfVUFSVDIsIE5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwgICJkZXY6c3NwMCIsICBFQl9TU1AsICAgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmRtYWNfZGV2aWNlLApAQCAtNDE1LDYgKzQxNSw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19FQl9VQVJUMF9CQVNFLAogCS5pb19wZ19vZmZzdAk9IChJT19BRERSRVNTKFJFQUxWSUVXX0VCX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfZWJfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X2ViX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKaW5kZXggMTdmYmIwZS4uN2ZiNzI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLXBiMTE3Ni5oPgpAQCAtMTcwLDI5ICsxNzAsMjkgQEAKICNkZWZpbmUgUEIxMTc2X1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQjExNzZfVUFSVDMsCU5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6YWFjaSIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOm1tYzAiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTprbWkwIiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6a21pMSIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTp1YXJ0MyIsCVBCMTE3Nl9VQVJUMywJTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEIxMTc2X1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwJImRldjplNCIsCVBCMTE3Nl9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQjExNzZfUlRDLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OmYyIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OmYzIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQjExNzZfU1NQLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNtYywJImRldjpzbWMiLAlQQjExNzZfU01DLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsCSJkZXY6c2N0bCIsCVNDVEwsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHdkb2csCSJkZXY6d2RvZyIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCMTE3Nl9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEIxMTc2X1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCMTE3Nl9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCMTE3Nl9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotLy9BTUJBX0RFVklDRShkbWFjLAkiaXNzcDozMCIsCVBCMTE3Nl9ETUFDLAlOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsCSJpc3NwOmNsY2QiLAlQQjExNzZfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKKy8vQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCVBCMTE3Nl9ETUFDLAlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIC8vCSZkbWFjX2RldmljZSwKQEAgLTI5MCw2ICsyOTAsMjggQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYjExNzZfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTE3Nl9yZXNldChjaGFyIG1vZGUpCit7CisJdm9pZCBfX2lvbWVtICpoZHJfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKworCQlSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUOworCXZvaWQgX19pb21lbSAqcnN0X2hkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCVJFQUxWSUVXX1NZU19MT0NLX09GRlNFVDsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfU1lTX0xPQ0tWQUxfTUFTSywgcnN0X2hkcl9jdHJsKTsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfUEIxMTc2X1NZU19MT0NLVkFMX1JTVENUTCwgaGRyX2N0cmwpOworfQorCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExNzZfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MsCisJCQkJICBzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqZnJvbSwKKwkJCQkgIHN0cnVjdCBtZW1pbmZvICptZW1pbmZvKQoreworCS8qCisJICogUmVhbFZpZXcgUEIxMTc2IG9ubHkgaGFzIDEyOE1CIG9mIFJBTSBtYXBwZWQgYXQgMC4KKwkgKi8KKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl8xMjhNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X3BiMTE3Nl9pbml0KHZvaWQpCiB7CiAJaW50IGk7CkBAIC0zMTMsNiArMzM1LDcgQEAKICNpZmRlZiBDT05GSUdfTEVEUwogCWxlZHNfZXZlbnQgPSByZWFsdmlld19sZWRzX2V2ZW50OwogI2VuZGlmCisJcmVhbHZpZXdfcmVzZXQgPSByZWFsdmlld19wYjExNzZfcmVzZXQ7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoUkVBTFZJRVdfUEIxMTc2LCAiQVJNLVJlYWxWaWV3IFBCMTE3NiIpCkBAIC0zMjAsNiArMzQzLDcgQEAKIAkucGh5c19pbwk9IFJFQUxWSUVXX1BCMTE3Nl9VQVJUMF9CQVNFLAogCS5pb19wZ19vZmZzdAk9IChJT19BRERSRVNTKFJFQUxWSUVXX1BCMTE3Nl9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5maXh1cAkJPSByZWFsdmlld19wYjExNzZfZml4dXAsCiAJLm1hcF9pbwkJPSByZWFsdmlld19wYjExNzZfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X3BiMTE3Nl90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCmluZGV4IGZkZDA0MmIuLjliYmJmYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wYjExbXAuaD4KQEAgLTE3MiwyOSArMTcyLDI5IEBACiAjZGVmaW5lIFBCMTFNUF9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEIxMU1QX1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQjExTVBfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCMTFNUF9TTUMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEIxMU1QX1JUQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwJImRldjpmMyIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLAkiZGV2OmY0IiwJUEIxMU1QX1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzbWMsCSJkZXY6c21jIiwJUEIxMU1QX1NNQywJTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLAkiZGV2OnNjdGwiLAlTQ1RMLAkJTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLAkiZGV2Ondkb2ciLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6Z3BpbzAiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6Z3BpbzEiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6Z3BpbzIiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UocnRjLAkiZGV2OnJ0YyIsCVBCMTFNUF9SVEMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpzY2kwIiwJU0NJLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwJImRldjp1YXJ0MCIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwJImRldjp1YXJ0MSIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwJImRldjp1YXJ0MiIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQjExTVBfU1NQLAlOVUxMKTsKIAogLyogUHJpbWVjZWxscyBvbiB0aGUgTkVDIElTU1AgY2hpcCAqLwotQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6MjAiLAlQQjExTVBfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJRE1BQywJCU5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCMTFNUF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCURNQUMsCQlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hY19kZXZpY2UsCkBAIC0yOTksNiArMjk5LDIxIEBACiAJLmluaXQJCT0gcmVhbHZpZXdfcGIxMW1wX3RpbWVyX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExbXBfcmVzZXQoY2hhciBtb2RlKQoreworCXZvaWQgX19pb21lbSAqaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCXZhbCA9IF9fcmF3X3JlYWRsKGhkcl9jdHJsKTsKKwl2YWwgfD0gUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKKwlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYjExbXBfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzI0LDYgKzMzOSw3IEBACiAjaWZkZWYgQ09ORklHX0xFRFMKIAlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKICNlbmRpZgorCXJlYWx2aWV3X3Jlc2V0ID0gcmVhbHZpZXdfcGIxMW1wX3Jlc2V0OwogfQogCiBNQUNISU5FX1NUQVJUKFJFQUxWSUVXX1BCMTFNUCwgIkFSTS1SZWFsVmlldyBQQjExTVBDb3JlIikKQEAgLTMzMSw2ICszNDcsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGIxMW1wX21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19wYjExbXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCmluZGV4IDcwYmJhOTkuLmZlODYxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTM0LDcgKzM1LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0xNjIsMjkgKzE2MiwyOSBAQAogI2RlZmluZSBQQkE4X1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQkE4X1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQkE4X1VBUlQzLAlOVUxMKTsKIAogLyogRGV2Q2hpcCBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShzbWMsCSJkZXY6MDAiLAlQQkE4X1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCQThfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQkE4X0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCQThfUlRDLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEJBOF9VQVJUMCwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCQThfVUFSVDEsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6ZjMiLAlQQkE4X1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQkE4X1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzbWMsCSJkZXY6c21jIiwJUEJBOF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjpzY3RsIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjp3ZG9nIiwJUEJBOF9XQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCQThfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6Z3BpbzEiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6Z3BpbzIiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UocnRjLAkiZGV2OnJ0YyIsCVBCQThfUlRDLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsCSJkZXY6c2NpMCIsCVNDSSwJCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6dWFydDAiLAlQQkE4X1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEJBOF9VQVJUMSwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwJImRldjp1YXJ0MiIsCVBCQThfVUFSVDIsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpzc3AwIiwJUEJBOF9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCQThfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJRE1BQywJCU5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCQThfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGRtYWMsCSJpc3NwOmRtYWMiLAlETUFDLAkJTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmRtYWNfZGV2aWNlLApAQCAtMjk4LDYgKzI5OCw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19QQkE4X1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEJBOF9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5maXh1cAkJPSByZWFsdmlld19maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BiYThfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X3BiYThfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwppbmRleCBjZTZjNWQyLi5lYzM5NDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzQsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTE4MiwyOSArMTgyLDI5IEBACiAjZGVmaW5lIFBCWF9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEJYX1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQlhfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCWF9TTUMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQlhfV0FUQ0hET0csIAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEJYX0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCWF9SVEMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQlhfVUFSVDAsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6ZjIiLAlQQlhfVUFSVDEsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6ZjMiLAlQQlhfVUFSVDIsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpmNCIsCVBCWF9TU1AsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OnNtYyIsCVBCWF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjpzY3RsIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjp3ZG9nIiwJUEJYX1dBVENIRE9HLCAJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCWF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEJYX1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEJYX1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEJYX1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEJYX1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCWF9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCWF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6MzAiLAlETUFDLAkJTlVMTCk7CitBTUJBX0RFVklDRShjbGNkLAkiaXNzcDpjbGNkIiwJUEJYX0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLAkiaXNzcDpkbWFjIiwJRE1BQywJCU5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZkbWFjX2RldmljZSwKQEAgLTMwNCw2ICszMDQsMjYgQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYnhfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BieF9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywgc3RydWN0IHRhZyAqdGFncywKKwkJCSAgICAgICBjaGFyICoqZnJvbSwgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pCit7CisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCS8qCisJICogTWVtb3J5IGNvbmZpZ3VyYXRpb24gd2l0aCBTUEFSU0VNRU0gZW5hYmxlZCBvbiBSZWFsVmlldyBQQlggKHNlZQorCSAqIGFzbS9tYWNoL21lbW9yeS5oIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKwkgKi8KKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl8yNTZNOworCW1lbWluZm8tPmJhbmtbMV0uc3RhcnQgPSAweDIwMDAwMDAwOworCW1lbWluZm8tPmJhbmtbMV0uc2l6ZSA9IFNaXzUxMk07CisJbWVtaW5mby0+YmFua1syXS5zdGFydCA9IDB4ODAwMDAwMDA7CisJbWVtaW5mby0+YmFua1syXS5zaXplID0gU1pfMjU2TTsKKwltZW1pbmZvLT5ucl9iYW5rcyA9IDM7CisjZWxzZQorCXJlYWx2aWV3X2ZpeHVwKG1kZXNjLCB0YWdzLCBmcm9tLCBtZW1pbmZvKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGJ4X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTM0NSw2ICszNjUsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEJYX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEJYX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X3BieF9maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BieF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGJ4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwppbmRleCBkOGMwMjNkLi4zZDRlOWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwpAQCAtNzcsNiArNzcsNyBAQAogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgSFAgSVBBUSBIMTk0MAogCkBAIC04OSw2ICs5MCw3IEBACiAJYm9vbCAiQWNlciBOMzAgZmFtaWx5IgogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcHQgZm9yIHRoZSBBY2VyIE4zMCwgQWNlciBOMzUsCiAJICBOYXZtYW4gUGlONTcwLCBZYWt1bW8gQWxwaGFYIG9yIEFpcmlzIE5DMDUgUERBcy4KQEAgLTEwMyw2ICsxMDUsNyBAQAogCXNlbGVjdCBTM0MyNFhYX0RDTEsKIAlzZWxlY3QgSVNBCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MgRUIyNDEwSVRYCiAJICBkZXZlbG9wbWVudCBib2FyZCAoYWxzbyBrbm93biBhcyBCQVNUKQpAQCAtMTExLDYgKzExNCw3IEBACiAgCWJvb2wgIk5leFZpc2lvbiBPVE9NIEJvYXJkIgogIAlzZWxlY3QgQ1BVX1MzQzI0MTAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE9UT00gYm9hcmQKIApAQCAtMTU0LDYgKzE1OCw3IEBACiAJYm9vbCAiUVQyNDEwIgogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFybXpvbmUgUVQyNDEwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCmluZGV4IDc5NzRhZmMuLjk2NjRlMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWZucy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCBjM2EyNjI5Li45MmUyNjg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTExMCw2ICsxMTAsOCBAQAogCQkJCQkgICAgKiB3YWl0aW5nIGZvciByZWxvYWRzICovCiAjZGVmaW5lIFMzQzI0MTBfRE1BRl9BVVRPU1RBUlQgICAgKDE8PDEpICAgLyogYXV0by1zdGFydCBpZiBidWZmZXIgcXVldWVkICovCiAKKyNkZWZpbmUgUzNDMjQxMF9ETUFGX0NJUkNVTEFSCSgxIDw8IDIpCS8qIG5vIGNpcmN1bGFyIGRtYSBzdXBwb3J0ICovCisKIC8qIGRtYSBidWZmZXIgKi8KIAogc3RydWN0IHMzYzI0MTBfZG1hX2J1ZjsKQEAgLTE5NCw0ICsxOTYsOSBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZG1hX2RldmljZV90OwogCitzdGF0aWMgaW5saW5lIGJvb2wgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCmluZGV4IDM1YzFiZGUuLmMyYmRjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCkBAIC00OCw2ICs0OCw3IEBACiAJYm9vbCAiTG9naXRlY2ggSml2ZSIKIAlzZWxlY3QgQ1BVX1MzQzI0MTIKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIExvZ2l0ZWNoIEppdmUuCiAKQEAgLTYxLDYgKzYyLDcgQEAKIAlzZWxlY3QgTUFDSF9TM0MyNDEzCiAJc2VsZWN0IE1BQ0hfU01ESwogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBTTURLMjQxMwogCkBAIC04NCw2ICs4Niw3IEBACiAJYm9vbCAiVk1TVE1TIgogCXNlbGVjdCBDUFVfUzNDMjQxMgogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBWU1RNUyBib2FyZAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCmluZGV4IDhhZTFiMjguLmE4YjY5ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCkBAIC00OCw2ICs0OCw3IEBACiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xMjAwMDAwMAogCXNlbGVjdCBTM0MyNDEwX0lPVElNSU5HIGlmIFMzQzI0NDBfQ1BVRlJFUQogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KIAkgIGtub3duIGFzIHRoZSBPc2lyaXMuCkBAIC01Nyw2ICs1OCw3IEBACiAJc2VsZWN0IENQVV9TM0MyNDQwCiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xNjkzNDQwMAogCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIGlQQVEgcngzNzE1LgogCkBAIC02Niw2ICs2OCw3IEBACiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xNjkzNDQwMAogCXNlbGVjdCBNQUNIX1NNREsKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNNREsyNDQwLgogCkBAIC03NCw2ICs3Nyw3IEBACiAgCXNlbGVjdCBDUFVfUzNDMjQ0MAogCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE5FWENPREVSIDI0NDAgTGlnaHQgQm9hcmQKIApAQCAtODgsNiArOTIsNyBAQAogCWJvb2wgIkF2YW50ZWNoIEFUMjQ0MEVWQiBkZXZlbG9wbWVudCBib2FyZCIKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFUMjQ0MEVWQiBkZXZlbG9wbWVudCBib2FyZAogCkBAIC05Nyw2ICsxMDIsOCBAQAogCXNlbGVjdCBFRVBST01fQVQyNAogCXNlbGVjdCBMRURTX1RSSUdHRVJfQkFDS0xJR0hUCiAJc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19TM0MyNFhYX1VEQTEzNFgKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECisJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCBzdXBwb3J0IGZvciB0aGUgTUlOSTI0NDAuIElzIGEgMTBjbSB4IDEwY20gYm9hcmQKIAkgIGF2YWlsYWJsZSB2aWEgdmFyaW91cyBzb3VyY2VzLiBJdCBjYW4gY29tZSB3aXRoIGEgMy41IiBvciA3IiB0b3VjaCBMQ0QuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYwppbmRleCBlYzcxYTY5Li4xYzMzODJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCS50eXBlCQk9IChTM0MyNDEwX0xDRENPTjFfVEZUMTZCUFAgfFwKIAkJCSAgIFMzQzI0MTBfTENEQ09OMV9URlQpCiAKLXN0cnVjdCBzM2MyNDEwZmJfZGlzcGxheSBtaW5pMjQ0MF9sY2RfY2ZnW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMGZiX2Rpc3BsYXkgbWluaTI0NDBfbGNkX2NmZ1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewkvKiBtaW5pMjQ0MCArIDMuNSIgVEZUICsgdG91Y2hzY3JlZW4gKi8KIAkJX0xDRF9ERUNMQVJFKAogCQkJNywJCQkvKiBUaGUgMy41IGlzIHF1aXRlIGZhc3QgKi8KQEAgLTE5MSw3ICsxOTEsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQQ0NPTl9NQVNLKHgpCSgzIDw8ICgoeCkgKiAyKSkKICNkZWZpbmUgUzNDMjQxMF9HUERDT05fTUFTSyh4KQkoMyA8PCAoKHgpICogMikpCiAKLXN0cnVjdCBzM2MyNDEwZmJfbWFjaF9pbmZvIG1pbmkyNDQwX2ZiX2luZm8gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMGZiX21hY2hfaW5mbyBtaW5pMjQ0MF9mYl9pbmZvIF9faW5pdGRhdGEgPSB7CiAJLmRpc3BsYXlzCSA9ICZtaW5pMjQ0MF9sY2RfY2ZnWzBdLCAvKiBub3QgY29uc3RhbnQhIHNlZSBpbml0ICovCiAJLm51bV9kaXNwbGF5cwkgPSAxLAogCS5kZWZhdWx0X2Rpc3BsYXkgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwppbmRleCBmNWFmMjEyLi43NzBiNzIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogICAgICAgIGJvb2wgIlNNREs2NDAwIgogCXNlbGVjdCBDUFVfUzNDNjQwMAogCXNlbGVjdCBTM0NfREVWX0hTTU1DCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCXNlbGVjdCBTM0M2NDAwX1NFVFVQX1NESENJCiAJaGVscAogCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTTURLNjQwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggMTA2NzYxOS4uNjcyMzg2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC01OCwxMiArNTgsOSBAQAogCURNQUNIX01BWAkJLyogdGhlIGVuZCAqLwogfTsKIAotc3RhdGljIF9faW5saW5lX18gaW50IHMzY19kbWFfaGFzX2NpcmN1bGFyKHZvaWQpCitzdGF0aWMgX19pbmxpbmVfXyBib29sIHMzY19kbWFfaGFzX2NpcmN1bGFyKHZvaWQpCiB7Ci0JLyogd2Ugd2lsbCBiZSBzdXBwb3J0aW5nIGNpcnVjbGFyIGJ1ZmZlcnMgYXMgc29vbiBhcyB3ZSBoYXZlIERNQQotCSAqIGVuZ2luZSBzdXBwb3J0LgotCSAqLwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAjZGVmaW5lIFMzQzI0MTBfRE1BRl9DSVJDVUxBUgkJKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKaW5kZXggZjlkMGYwOS4uNzJkNGIxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKQEAgLTc3LDYgKzc3LDcgQEAKIAlkZXBlbmRzIG9uIE1BQ0hfU01ESzY0MTAKIAlzZWxlY3QgUkVHVUxBVE9SCiAJc2VsZWN0IFJFR1VMQVRPUl9XTTgzNTAKKwlzZWxlY3QgUzNDMjRYWF9HUElPX0VYVFJBNjQKIAlzZWxlY3QgTUZEX1dNODM1MF9JMkMKIAlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8wCiAJc2VsZWN0IE1GRF9XTTgzNTBfQ09ORklHX01PREVfMwpAQCAtMTAyLDYgKzEwMyw3IEBACiAJYm9vbCAiQWlyZ29vIEhNVCIKIAlzZWxlY3QgQ1BVX1MzQzY0MTAKIAlzZWxlY3QgUzNDX0RFVl9GQgorCXNlbGVjdCBTM0NfREVWX05BTkQKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0ZCXzI0QlBQCiAJc2VsZWN0IEhBVkVfUFdNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwppbmRleCBlYTUxZGJlLi45ZjFhMjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKQEAgLTMyMCw2ICszMjAsOSBAQAogewogCWludCBpOwogCisJLyogQ29uZmlndXJlIHRoZSBJUlEgbGluZSAqLworCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUE4oMTIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwogCS8qIEluc3RhbnRpYXRlIHRoZSByZWd1bGF0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod20xMTkwX3JlZ3VsYXRvcnMpOyBpKyspCiAJCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKaW5kZXggODFmZmZmNy4uNGU1YzA3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCkBAIC03MSwxMSArNzEsNiBAQAogCSAgPGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9Db21wYXEvaW5kZXguaHRtbCNpUEFRX0gzNjAwPgogCSAgPGh0dHA6Ly93d3cuY29tcGFxLmNvbS9wcm9kdWN0cy9oYW5kaGVsZHMvcG9ja2V0cGMvPgogCi1jb25maWcgU0ExMTAwX0gzWFhYCi0JYm9vbAotCWRlcGVuZHMgb24gU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMAotCWRlZmF1bHQgeQotCiBjb25maWcgU0ExMTAwX0JBREdFNAogCWJvb2wgIkhQIExhYnMgQmFkZ2VQQUQgNCIKIAlzZWxlY3QgU0ExMTExCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCmluZGV4IDhhNTU0NmUuLmJiN2I4MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCkBAIC0yNSw2ICsyNSw3IEBACiAKIG9iai0kKENPTkZJR19TQTExMDBfQ09MTElFKQkJKz0gY29sbGllLm8KIAorb2JqLSQoQ09ORklHX1NBMTEwMF9IMzEwMCkJCSs9IGgzNjAwLm8KIG9iai0kKENPTkZJR19TQTExMDBfSDM2MDApCQkrPSBoMzYwMC5vCiAKIG9iai0kKENPTkZJR19TQTExMDBfSEFDS0tJVCkJCSs9IGhhY2traXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwppbmRleCA5NWY5YzVhLi5jYjQ1MjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgc2ExMTAwX2RtYV90IGRtYV9jaGFuW1NBMTEwMF9ETUFfQ0hBTk5FTFNdOwogCi1zdGF0aWMgc3BpbmxvY2tfdCBkbWFfbGlzdF9sb2NrOworc3RhdGljIERFRklORV9TUElOTE9DSyhkbWFfbGlzdF9sb2NrKTsKIAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwppbmRleCA5NWQ5MmU4Li5iOWNiYjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJLnNldF9tb2RlCT0gc2ExMTAwX29zbXIwX3NldF9tb2RlLAogfTsKIAotc3RhdGljIGN5Y2xlX3Qgc2ExMTAwX3JlYWRfb3Njcih2b2lkKQorc3RhdGljIGN5Y2xlX3Qgc2ExMTAwX3JlYWRfb3NjcihzdHJ1Y3QgY2xvY2tzb3VyY2UgKnMpCiB7CiAJcmV0dXJuIE9TQ1I7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCmluZGV4IDMzN2I5YWEuLjgwMWIyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCkBAIC04MSw2ICs4MSwxOCBAQAogCQlNZW1vcnkgSW50ZXJmYWNlKSBmcm9tIGJvdGggZnJvbSBhY2Nlc3MgYW5kIGFwcGxpY2F0aW9uCiAJCXNpZGUuCiAKK2NvbmZpZyBNQUNIX1UzMDBfU1BJRFVNTVkKKwlib29sICJTU1AvU1BJIGR1bW15IGNoaXAiCisJc2VsZWN0IFNQSQorCXNlbGVjdCBTUElfTUFTVEVSCisJc2VsZWN0IFNQSV9QTDAyMgorCWhlbHAKKwkJVGhpcyBjcmVhdGVzIGEgc21hbGwga2VybmVsIG1vZHVsZSB0aGF0IGNyZWF0ZXMgYSBkdW1teQorCQlTUEkgZGV2aWNlIHRvIGJlIHVzZWQgZm9yIGxvb3BiYWNrIHRlc3RzLiBSZWd1bGFybHkgdXNlZAorCQl0byB0ZXN0IHJlZmVyZW5jZSBkZXNpZ25zLiBJZiB5b3UncmUgbm90IHRlc3RpbmcgU1BJLAorCQl5b3UgZG9uJ3QgbmVlZCBpdC4gU2VsZWN0aW5nIHRoaXMgd2lsbCBhY3RpdmF0ZSB0aGUKKwkJU1BJIGZyYW1ld29yayBhbmQgQVJNIFBMMDIyIHN1cHBvcnQuCisKIGNvbW1lbnQgIkFsbCB0aGUgc2V0dGluZ3MgYmVsb3cgbXVzdCBtYXRjaCB0aGUgYm9vdGxvYWRlcidzIHNldHRpbmdzIgogCiBjb25maWcgTUFDSF9VMzAwX0FDQ0VTU19NRU1fU0laRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlCmluZGV4IDI0OTUwZTAuLjg4NWI1YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvTWFrZWZpbGUKQEAgLTksMyArOSw2IEBACiAKIG9iai0kKENPTkZJR19BUkNIX1UzMDApCSAgICAgICAgICArPSB1MzAwLm8KIG9iai0kKENPTkZJR19NTUMpICAgICAgICAgICAgICAgICArPSBtbWMubworb2JqLSQoQ09ORklHX1NQSV9QTDAyMikgICAgICAgICAgICs9IHNwaS5vCitvYmotJChDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZKSAgKz0gZHVtbXlzcGljaGlwLm8KK29iai0kKENPTkZJR19JMkNfU1RVMzAwKSAgICAgICAgICArPSBpMmMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKaW5kZXggMmU5YjhjYy4uNjUzZTI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCkBAIC0zMiw2ICszMiw4IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgIm1tYy5oIgorI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgImkyYy5oIgogCiAvKgogICogU3RhdGljIEkvTyBtYXBwaW5ncyB0aGF0IGFyZSBuZWVkZWQgZm9yIGJvb3RpbmcgdGhlIFUzMDAgcGxhdGZvcm1zLiBUaGUKQEAgLTM3OCwxNCArMzgwLDE0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMwX2RldmljZSA9IHsKLQkubmFtZSA9ICJzdGRkY2kyYyIsCisJLm5hbWUgPSAic3R1MzAwIiwKIAkuaWQgPSAwLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmMwX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gaTJjMF9yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMxX2RldmljZSA9IHsKLQkubmFtZSA9ICJzdGRkY2kyYyIsCisJLm5hbWUgPSAic3R1MzAwIiwKIAkuaWQgPSAxLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmMxX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gaTJjMV9yZXNvdXJjZXMsCkBAIC00MDYsNyArNDA4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicnRjMCIsCisJLm5hbWUgPSAicnRjLWNvaDkwMTMzMSIsCiAJLmlkID0gLTEsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSA9IHJ0Y19yZXNvdXJjZXMsCkBAIC02MTEsNiArNjEzLDggQEAKIAkvKiBXYWl0IGZvciB0aGUgUExMMjA4IHRvIGxvY2sgaWYgbm90IGxvY2tlZCBpbiB5ZXQgKi8KIAl3aGlsZSAoIShyZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NTUikgJgogCQkgVTMwMF9TWVNDT05fQ1NSX1BMTDIwOF9MT0NLX0lORCkpOworCS8qIEluaXRpYWxpemUgU1BJIGRldmljZSB3aXRoIHNvbWUgYm9hcmQgc3BlY2lmaWNzICovCisJdTMwMF9zcGlfaW5pdCgmcGwwMjJfZGV2aWNlKTsKIAogCS8qIFJlZ2lzdGVyIHRoZSBBTUJBIGRldmljZXMgaW4gdGhlIEFNQkEgYnVzIGFic3RyYWN0aW9uIGxheWVyICovCiAJdTMwMF9jbG9ja19wcmltZWNlbGxzKCk7CkBAIC02MjIsNiArNjI2LDEyIEBACiAKIAl1MzAwX2Fzc2lnbl9waHlzbWVtKCk7CiAKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBJMkMgYnVzZXMgKi8KKwl1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKCk7CisKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBTUEkgYnVzICovCisJdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcygpOworCiAJLyogUmVnaXN0ZXIgdGhlIHBsYXRmb3JtIGRldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldnMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmY5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUaGlzIGlzIGEgZHVtbXkgbG9vcGJhY2sgU1BJICJjaGlwIiB1c2VkIGZvciB0ZXN0aW5nIFNQSS4KKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisvKgorICogV0FSTklORyEgRG8gbm90IGluY2x1ZGUgdGhpcyBwbDAyMi1zcGVjaWZpYyBjb250cm9sbGVyIGhlYWRlcgorICogZm9yIGFueSBnZW5lcmljIGRyaXZlci4gSXQgaXMgb25seSBkb25lIGluIHRoaXMgZHVtbXkgY2hpcAorICogYmVjYXVzZSB3ZSBhbHRlciB0aGUgY2hpcCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIHRlc3Qgc29tZQorICogZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBsb29wYmFjayBkZXZpY2UuIE5vcm1hbCBjaGlwIGNvbmZpZ3MKKyAqIHNoYWxsIGJlIFNUQVRJQyBhbmQgbm90IGFsdGVyZWQgYnkgdGhlIGRyaXZlciEKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KKworc3RydWN0IGR1bW15IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7Cit9OworCisjZGVmaW5lIERNQV9URVNUX1NJWkUgMjA0OAorCisvKiBXaGVuIHdlIGNhdCAvc3lzL2J1cy9zcGkvZGV2aWNlcy9zcGkwLjAvbG9vcHRlc3QgdGhpcyB3aWxsIGJlIHRyaWdnZXJlZCAqLworc3RhdGljIHNzaXplX3QgZHVtbXlfbG9vcHRlc3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGR1bW15ICpwX2R1bW15ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwkvKgorCSAqIFdBUk5JTkchIERvIG5vdCBkZXJlZmVyZW5jZSB0aGUgY2hpcC1zcGVjaWZpYyBkYXRhIGluIGFueSBub3JtYWwKKwkgKiBkcml2ZXIgZm9yIGEgY2hpcC4gSXQgaXMgdXN1YWxseSBTVEFUSUMgYW5kIHNoYWxsIG5vdCBiZSByZWFkCisJICogb3Igd3JpdHRlbiB0by4gWW91ciBjaGlwIGRyaXZlciBzaG91bGQgTk9UIGRlcGVuZCBvbiBmaWVsZHMgaW4gdGhpcworCSAqIHN0cnVjdCwgdGhpcyBpcyBqdXN0IHVzZWQgaGVyZSB0byBhbHRlciB0aGUgYmVoYXZpb3VyIG9mIHRoZSBjaGlwCisJICogaW4gb3JkZXIgdG8gcGVyZm9ybSB0ZXN0cy4KKwkgKi8KKwlzdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgKmNoaXBfaW5mbyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOworCWludCBzdGF0dXM7CisJdTggdHhidWZbMTRdID0gezB4REUsIDB4QUQsIDB4QkUsIDB4RUYsIDB4MkIsIDB4QUQsCisJCQkweENBLCAweEZFLCAweEJBLCAweEJFLCAweEIxLCAweDA1LAorCQkJMHhGMCwgMHgwRH07CisJdTggcnhidWZbMTRdOworCXU4ICpiaWd0eGJ1Zl92aXJ0dWFsOworCXU4ICpiaWdyeGJ1Zl92aXJ0dWFsOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcF9kdW1teS0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwliaWd0eGJ1Zl92aXJ0dWFsID0ga21hbGxvYyhETUFfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoYmlndHhidWZfdmlydHVhbCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwliaWdyeGJ1Zl92aXJ0dWFsID0ga21hbGxvYyhETUFfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKworCS8qIEZpbGwgVFhCVUYgd2l0aCBzb21lIGhhcHB5IHBhdHRlcm4gKi8KKwltZW1zZXQoYmlndHhidWZfdmlydHVhbCwgMHhBQSwgRE1BX1RFU1RfU0laRSk7CisKKwkvKgorCSAqIEZvcmNlIGNoaXAgdG8gOCBiaXQgbW9kZQorCSAqIFdBUk5JTkc6IE5FVkVSIERPIFRISVMgSU4gUkVBTCBEUklWRVIgQ09ERSwgVEhJUyBTSE9VTEQgQkUgU1RBVElDIQorCSAqLworCWNoaXBfaW5mby0+ZGF0YV9zaXplID0gU1NQX0RBVEFfQklUU184OworCS8qIFlvdSBzaG91bGQgTk9UIERPIFRISVMgRUlUSEVSICovCisJc3BpLT5tYXN0ZXItPnNldHVwKHNwaSk7CisKKwkvKiBOb3cgcnVuIHRoZSB0ZXN0cyBmb3IgOGJpdCBtb2RlICovCisJcHJfaW5mbygiU2ltcGxlIHRlc3QgMTogd3JpdGUgMHhBQSBieXRlLCByZWFkIGJhY2sgZ2FyYmFnZSBieXRlICIKKwkJImluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3c4cjgoc3BpLCAweEFBKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2lwbGUgdGVzdCAxOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiB3cml0ZSA4IGJ5dGVzLCByZWFkIGJhY2sgOCBieXRlcyBnYXJiYWdlICIKKwkJImluIDhiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMjogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAzOiB3cml0ZSAxNCBieXRlcywgcmVhZCBiYWNrIDE0IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gOGJpdCBtb2RlIChzZWUgaWYgd2Ugb3ZlcmZsb3cgRklGTylcbiIpOworCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmdHhidWZbMF0sIDE0LCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMzogRkFJTFVSRTogZmFpbGVkIHdpdGggc3RhdHVzICVkICIKKwkJCSAgICIocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDM6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQ6IHdyaXRlIDggYnl0ZXMgd2l0aCBzcGlfd3JpdGUoKSwgcmVhZCA4ICIKKwkJImJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQgc3RlcCAyOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1OiB3cml0ZSAxNCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCByZWFkICIKKwkJIjE0IGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCAxNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBTVUNDRVNTIVxuIik7CisJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNSBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2OiB3cml0ZSAlZCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCAiCisJCSJyZWFkICVkIGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIiwKKwkJRE1BX1RFU1RfU0laRSwgRE1BX1RFU1RfU0laRSk7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJmJpZ3R4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDY6IFNVQ0NFU1MhXG4iKTsKKworCisJLyoKKwkgKiBGb3JjZSBjaGlwIHRvIDE2IGJpdCBtb2RlCisJICogV0FSTklORzogTkVWRVIgRE8gVEhJUyBJTiBSRUFMIERSSVZFUiBDT0RFLCBUSElTIFNIT1VMRCBCRSBTVEFUSUMhCisJICovCisJY2hpcF9pbmZvLT5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzE2OworCS8qIFlvdSBzaG91bGQgTk9UIERPIFRISVMgRUlUSEVSICovCisJc3BpLT5tYXN0ZXItPnNldHVwKHNwaSk7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA3OiB3cml0ZSAweEFBIGJ5dGUsIHJlYWQgYmFjayBnYXJiYWdlIGJ5dGUgIgorCQkiaW4gMTZiaXQgYnVzIG1vZGVcbiIpOworCXN0YXR1cyA9IHNwaV93OHI4KHNwaSwgMHhBQSk7CisJaWYgKHN0YXR1cyA9PSAtRUlPKQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA3OiBTVUNDRVNTISAoZXhwZWN0ZWQgZmFpbHVyZSB3aXRoICIKKwkJCSJzdGF0dXMgRUlPKVxuIik7CisJZWxzZSBpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2lwbGUgdGVzdCA3OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgorCQkJICAgInN1Y2NlZWRlZCBidXQgaXQgd2FzIGV4cGVjdGVkIHRvIGZhaWwhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDg6IHdyaXRlIDggYnl0ZXMsIHJlYWQgYmFjayA4IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gMTZiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgODogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA4OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiB3cml0ZSAxNCBieXRlcywgcmVhZCBiYWNrIDE0IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gMTZiaXQgbW9kZSAoc2VlIGlmIHdlIG92ZXJmbG93IEZJRk8pXG4iKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCAxNCwgJnJ4YnVmWzBdLCAxNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDk6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAiCisJCQkgICAiKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMDogd3JpdGUgJWQgYnl0ZXMgd2l0aCBzcGlfd3JpdGUoKSwgIgorCSAgICAgICAicmVhZCAlZCBieXRlcyBnYXJiYWdlIHdpdGggc3BpX3JlYWQoKSBpbiAxNmJpdCBtb2RlXG4iLAorCSAgICAgICBETUFfVEVTVF9TSVpFLCBETUFfVEVTVF9TSVpFKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmYmlndHhidWZfdmlydHVhbFswXSwgRE1BX1RFU1RfU0laRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDEwIHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKKworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMDogU1VDQ0VTUyFcbiIpOworCisJc3RhdHVzID0gc3ByaW50ZihidWYsICJsb29wIHRlc3QgY29tcGxldGVcbiIpOworCWtmcmVlKGJpZ3J4YnVmX3ZpcnR1YWwpOworCWtmcmVlKGJpZ3R4YnVmX3ZpcnR1YWwpOworIG91dDoKKwltdXRleF91bmxvY2soJnBfZHVtbXktPmxvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsb29wdGVzdCwgU19JUlVHTywgZHVtbXlfbG9vcHRlc3QsIE5VTEwpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbDAyMl9kdW1teV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkdW1teSAqcF9kdW1teTsKKwlpbnQgc3RhdHVzOworCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAicHJvYmluZyBkdW1teSBTUEkgZGV2aWNlXG4iKTsKKworCXBfZHVtbXkgPSBremFsbG9jKHNpemVvZiAqcF9kdW1teSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwX2R1bW15KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHBfZHVtbXkpOworCW11dGV4X2luaXQoJnBfZHVtbXktPmxvY2spOworCisJLyogc3lzZnMgaG9vayAqLworCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9sb29wdGVzdCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZzcGktPmRldiwgImRldmljZV9jcmVhdGVfZmlsZSBsb29wdGVzdCBmYWlsdXJlLlxuIik7CisJCWdvdG8gb3V0X2Rldl9jcmVhdGVfbG9vcHRlc3RfZmFpbGVkOworCX0KKworCXJldHVybiAwOworCitvdXRfZGV2X2NyZWF0ZV9sb29wdGVzdF9mYWlsZWQ6CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJa2ZyZWUocF9kdW1teSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcGwwMjJfZHVtbXlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGR1bW15ICpwX2R1bW15ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJyZW1vdmluZyBkdW1teSBTUEkgZGV2aWNlXG4iKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfbG9vcHRlc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOworCWtmcmVlKHBfZHVtbXkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwbDAyMl9kdW1teV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic3BpLWR1bW15IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJPSBwbDAyMl9kdW1teV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocGwwMjJfZHVtbXlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsMDIyX2luaXRfZHVtbXkodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmcGwwMjJfZHVtbXlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBsMDIyX2V4aXRfZHVtbXkodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnBsMDIyX2R1bW15X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBsMDIyX2luaXRfZHVtbXkpOworbW9kdWxlX2V4aXQocGwwMjJfZXhpdF9kdW1teSk7CisKK01PRFVMRV9BVVRIT1IoIkxpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBMMDIyIFNTUC9TUEkgRFVNTVkgTGludXggZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYwppbmRleCAzMDhjZGIxLi4wYjM1ODI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKQEAgLTI1LDExICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi0vKiBOZWVkIGFjY2VzcyB0byBTWVNDT04gcmVnaXN0ZXJzIGZvciBQQURtdXhpbmcgKi8KLSNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgotCi0jaW5jbHVkZSAicGFkbXV4LmgiCi0KIC8qIFJlZmVyZW5jZSB0byBHUElPIGJsb2NrIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrOwogCkBAIC0yODYsNiArMjgxLDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdwaW9fdW5yZWdpc3Rlcl9jYWxsYmFjayk7CiAKKy8qIE5vbi16ZXJvIG1lYW5zIHZhbGlkICovCitpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKQoreworCWlmIChudW1iZXIgPj0gMCAmJgorCSAgICBudW1iZXIgPCAoVTMwMF9HUElPX05VTV9QT1JUUyAqIFUzMDBfR1BJT19QSU5TX1BFUl9QT1JUKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9faXNfdmFsaWQpOworCiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQogewogCWlmIChncGlvX3BpbltncGlvXS51c2VycykKQEAgLTYwNiwxNCArNjExLDYgQEAKIAl3cml0ZWwoVTMwMF9HUElPX0NSX0JMT0NLX0NMS1JRX0VOQUJMRSwgdmlydGJhc2UgKyBVMzAwX0dQSU9fQ1IpOwogI2VuZGlmCiAKLQkvKiBTZXQgdXAgc29tZSBwYWRtdXhpbmcgaGVyZSAqLwotI2lmZGVmIENPTkZJR19NTUMKLQlwbXhfc2V0X21pc3Npb25fbW9kZV9tbWMoKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TUElfUEwwMjIKLQlwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkoKTsKLSNlbmRpZgotCiAJZ3Bpb19zZXRfaW5pdGlhbF92YWx1ZXMoKTsKIAogCWZvciAobnVtX2lycXMgPSAwIDsgbnVtX2lycXMgPCBVMzAwX0dQSU9fTlVNX1BPUlRTOyBudW1faXJxcysrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiZTFmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pMmMuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiBSZWdpc3RlciBib2FyZCBpMmMgZGV2aWNlcworICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBidXMwX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQkudHlwZSA9ICJhYjMxMDAiLAorCQkuYWRkciA9IDB4NDgsCisJCS5pcnEgPSBJUlFfVTMwMF9JUlEwX0VYVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJ1czFfaTJjX2JvYXJkX2luZm9bXSA9IHsKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisJeworCQkudHlwZSA9ICJmd2NhbSIsCisJCS5hZGRyID0gMHgxMCwKKwl9LAorCXsKKwkJLnR5cGUgPSAiZndjYW0iLAorCQkuYWRkciA9IDB4NWQsCisJfSwKKyNlbHNlCisJeyB9LAorI2VuZGlmCit9OworCit2b2lkIF9faW5pdCB1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYnVzMF9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJ1czBfaTJjX2JvYXJkX2luZm8pKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBidXMxX2kyY19ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoYnVzMV9pMmNfYm9hcmRfaW5mbykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWMwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9pMmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogUmVnaXN0ZXIgYm9hcmQgaTJjIGRldmljZXMKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworCisjaWZuZGVmIE1BQ0hfVTMwMF9JMkNfSAorI2RlZmluZSBNQUNIX1UzMDBfSTJDX0gKKworI2lmZGVmIENPTkZJR19JMkNfU1RVMzAwCit2b2lkIF9faW5pdCB1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpOworI2Vsc2UKKy8qIENvbXBpbGUgb3V0IHRoaXMgc3R1ZmYgaWYgbm8gSTJDIGFkYXB0ZXIgaXMgYXZhaWxhYmxlICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHUzMDBfaTJjX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggYzgxNzQxMi4uN2IxZmM5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTI1OCw2ICsyNTgsNyBAQAogI2RlZmluZSBQSU5fVE9fUE9SVCh2YWwpICh2YWwgPj4gMykKIAogLyogVGhlc2UgY2FuIGJlIGZvdW5kIGluIGFyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMgKi8KK2V4dGVybiBpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKTsKIGV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKIGV4dGVybiB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKIGV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBiZjEzNGJjLi5hYjAwMGRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTM1LDYgKzM1LDE0IEBACiAjZW5kaWYKIAogLyoKKyAqIFRDTSBtZW1vcnkgd2hlcmVhYm91dHMKKyAqLworI2RlZmluZSBJVENNX09GRlNFVAkweGZmZmYyMDAwCisjZGVmaW5lIElUQ01fRU5ECTB4ZmZmZjNmZmYKKyNkZWZpbmUgRFRDTV9PRkZTRVQJMHhmZmZmNDAwMAorI2RlZmluZSBEVENNX0VORAkweGZmZmY1ZmZmCisKKy8qCiAgKiBXZSBlbmFibGUgYSByZWFsIGJpZyBETUEgYnVmZmVyIGlmIG5lZWQgYmUuCiAgKi8KICNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSBTWl80TQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvc3lzY29uLmgKaW5kZXggMWM5MGQxYi4uNzQ0NGY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3N5c2Nvbi5oCkBAIC0yNDAsOCArMjQwLDEzIEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfTUFTSwkJCQkoMHhDMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0NESQkJCQkoMHgwMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0VNSUYJCQkJKDB4NDAwMCkKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfQ0RJMgkJCQkoMHg4MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX1dDRE1BX0FQUF9HUElPCQkJKDB4QzAwMCkKKyNlbGlmIENPTkZJR19NQUNIX1UzMDBfQlMzNjUKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX0NESV9HUElPCQkJCSgweDgwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfV0NETUEJCQkJKDB4QzAwMCkKKyNlbmRpZgogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfUERJX01BU0sJCQkJKDB4MzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX1BESV9QREkJCQkJKDB4MDAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX1BESV9FR0cJCQkJKDB4MTAwMCkKQEAgLTM0NSwxOSArMzUwLDY5IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX01NQ1JfTUFTSwkJCQkJKDB4MDAwMykKICNkZWZpbmUgVTMwMF9TWVNDT05fTU1DUl9NTUNfRkJfQ0xLX1NFTF9FTkFCTEUJCQkoMHgwMDAyKQogI2RlZmluZSBVMzAwX1NZU0NPTl9NTUNSX01TUFJPX0ZSRVFTRUxfRU5BQkxFCQkJKDB4MDAwMSkKLQorLyogUHVsbCB1cC9kb3duIGNvbnRyb2wgKFIvVykgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUgkJCQkJKDB4MTA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV9XQUlUX05fUFVfRU5BQkxFCQkoMHgwMjAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV9ORklGX1JFQURZX1BVX0VOQUJMRQkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUl9FTUlGXzFfMTZCSVRfUFVfRU5BQkxFCQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUl9FTUlGXzFfOEJJVF9QVV9FTkFCTEUJCQkoMHgwMDQwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0tFWV9JTl9QVV9FTl9NQVNLCQkJKDB4MDAzRikKKy8qIFBhZG11eCAyIGNvbnRyb2wgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlIJCQkJCSgweDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9NQVNLCQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzBfRU1JRl9TRFJBTQkJCSgweDAwNDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzBfTU1DCQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9DREkyCQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9NQVNLCQkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzFfRU1JRl9TRFJBTQkJCSgweDAxMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzFfTU1DCQkJKDB4MDIwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9DREkyCQkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9NQVNLCQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzJfRU1JRl9TRFJBTQkJCSgweDA0MDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzJfTU1DCQkJKDB4MDgwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9DREkyCQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19NQVNLCQkJKDB4MzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzNfRU1JRl9TRFJBTQkJCSgweDEwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzNfTU1DCQkJKDB4MjAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19DREkyCQkJKDB4MzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9NQVNLCQkJKDB4QzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzRfRU1JRl9TRFJBTQkJCSgweDQwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzRfTU1DCQkJKDB4ODAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9BQ0NfR1BJTwkJCSgweEMwMDApCiAvKiBUT0RPOiBNb3JlIFNZU0NPTiByZWdpc3RlcnMgbWlzc2luZyAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUgkJCQkJKDB4MTBjKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUl9BUFBfTUlTQ18xMV9NQVNLCQkJKDB4YzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTFfU1BJCQkJKDB4NDAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTBfTUFTSwkJCSgweDMwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzNSX0FQUF9NSVNDXzEwX1NQSQkJCSgweDEwMDApCi0vKiBUT0RPOiBNaXNzaW5nIG90aGVyIGNvbmZpZ3MsIEkganVzdCBhZGRlZCB0aGUgU1BJIHN0dWZmICovCi0KKy8qIFRPRE86IE1pc3Npbmcgb3RoZXIgY29uZmlncyAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0UgkJCQkJKDB4MTY4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xMl9NQVNLCQkJKDB4MDAwMykKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfQVBQX0dQSU8JCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xM19NQVNLCQkJKDB4MDAwQykKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfQ0RJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfU01JQQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEzX1NNSUEyCQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfQVBQX0dQSU8JCQkoMHgwMDBDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9NQVNLCQkJKDB4MDAzMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfQ0RJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfU01JQQkJCSgweDAwMTApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE0X0NESTIJCQkoMHgwMDIwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9BUFBfR1BJTwkJCSgweDAwMzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE2X01BU0sJCQkoMHgwMzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNl9BUFBfR1BJT18xMwkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfQVBQX1VBUlQxX0NUUwkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfRU1JRl8xX1NUQVRJQ19DUzVfTgkoMHgwMjAwKQogLyogU1lTXzBfQ0xLX0NPTlRST0wgZmlyc3QgY2xvY2sgY29udHJvbCAxNmJpdCAoUi9XKSAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUgkJCQkJKDB4MTIwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9GSUVMRF9NQVNLCQkJCSgweDQzRkYpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC0zNzUsNiArNDMwLDcgQEAKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1IJCQkJCSgweDEyNCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfRklFTERfTUFTSwkJCQkoMHg0M0ZGKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19SRVEJCQkJKDB4NDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfUkVRX01PTklUT1IJCQkoMHgyMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19JTlYJCQkJKDB4MDIwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfRlJFUV9NQVNLCQkJKDB4MDFFMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfU0VMRUNUX01BU0sJCQkoMHgwMDFFKQpAQCAtMzkzLDYgKzQ0OSw3IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0ZJRUxEX01BU0sJCQkJKDB4QzNGRikKICNkZWZpbmUgVTMwMF9TWVNDT05fUzJDQ1JfQ0xLX1NURUFMCQkJCSgweDgwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC00MjUsNiArNDgyLDQ0IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX01DUl9QTUdFTl9DUl8wX0VNSUZfMF9TRFJBTQkJCSgweDAwMEMpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX01DUl9QTTFHX01PREVfRU5BQkxFCQkJKDB4MDAwMikKICNkZWZpbmUgVTMwMF9TWVNDT05fTUNSX1BNVEc1X01PREVfRU5BQkxFCQkJKDB4MDAwMSkKKy8qIFNDX1BMTF9JUlFfQ09OVFJPTCAxNmJpdCAoUi9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSCQkJCQkoMHgwMTMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX01BU0sJCQkJCSgweDAwRkYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfRk9SQ0VfUExMMjA4X0xPQ0tfTE9XX0VOQUJMRQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwyMDhfTE9DS19ISUdIX0VOQUJMRQkJKDB4MDA0MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwxM19MT0NLX0xPV19FTkFCTEUJCSgweDAwMjApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfRk9SQ0VfUExMMTNfTE9DS19ISUdIX0VOQUJMRQkJKDB4MDAxMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDEzX1VOTE9DS19FTkFCTEUJCSgweDAwMDgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfSVJRTUFTS19QTEwxM19MT0NLX0VOQUJMRQkJKDB4MDAwNCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDIwOF9VTkxPQ0tfRU5BQkxFCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX0lSUU1BU0tfUExMMjA4X0xPQ0tfRU5BQkxFCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9TVEFUVVMgMTYgYml0IChSLy0pICovCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1IJCQkJCSgweDAxMzQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1JfTUFTSwkJCQkJKDB4MDAwRikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwxM19VTkxPQ0tfSU5ECQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwxM19MT0NLX0lORAkJCQkoMHgwMDA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSVNSX1BMTDIwOF9VTkxPQ0tfSU5ECQkJKDB4MDAwMikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwyMDhfTE9DS19JTkQJCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9DTEVBUiAxNiBiaXQgKC0vVykgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDTFIJCQkJCSgweDAxMzgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX01BU0sJCQkJCSgweDAwMEYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1JXTUFTSwkJCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwxM19VTkxPQ0tfU0MJCQkoMHgwMDA4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwxM19MT0NLX1NDCQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1BMTDIwOF9VTkxPQ0tfU0MJCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwyMDhfTE9DS19TQwkJCSgweDAwMDEpCisvKiBDQU1JRl9DT05UUk9MIDE2IGJpdCAoLS9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSCQkJCQkoMHgwMTNDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX01BU0sJCQkJCSgweDBGRkYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfVEVTVE1PREVfTUFTSwkJKDB4MEYwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9QT1JUMQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9QT1JUMAkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fTUFTSwkJKDB4MDBGMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fUE9SVDEJCSgweDAwQzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfUkVTQ09OX1BPUlQwCQkoMHgwMDMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9NQVNLCQkoMHgwMDBGKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9QT1JUMQkJKDB4MDAwQykKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19QV1JfRFdOX05fUE9SVDAJCSgweDAwMDMpCiAvKiBDbG9jayBhY3Rpdml0eSBvYnNlcnZhYmlsaXR5IHJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgVTMwMF9TWVNDT05fQzBPQVIJCQkJCSgweDE0MCkKICNkZWZpbmUgVTMwMF9TWVNDT05fQzBPQVJfTUFTSwkJCQkJKDB4RkZGRikKQEAgLTUxMyw3ICs2MDgsNyBAQAogLyoqCiAgKiBDUFUgbWVkaXVtIGZyZXF1ZW5jeSBpbiBNSHoKICAqLwotI2RlZmluZSBTWVNDT05fQ1BVX0NMT0NLX01FRElVTSAgMTA0CisjZGVmaW5lIFNZU0NPTl9DUFVfQ0xPQ0tfTUVESVVNICAgNTIKIC8qKgogICogQ1BVIGxvdyBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KQEAgLTUyNyw3ICs2MjIsNyBAQAogLyoqCiAgKiBFTUlGIG1lZGl1bSBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KLSNkZWZpbmUgU1lTQ09OX0VNSUZfQ0xPQ0tfTUVESVVNIDEwNAorI2RlZmluZSBTWVNDT05fRU1JRl9DTE9DS19NRURJVU0gIDUyCiAvKioKICAqIEVNSUYgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTQxLDcgKzYzNiw3IEBACiAvKioKICAqIEFIQiBtZWRpdW0gZnJlcXVlbmN5IGluIE1IegogICovCi0jZGVmaW5lIFNZU0NPTl9BSEJfQ0xPQ0tfTUVESVVNICAgNTIKKyNkZWZpbmUgU1lTQ09OX0FIQl9DTE9DS19NRURJVU0gICAyNgogLyoqCiAgKiBBSEIgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTUzLDYgKzY0OCwxNSBAQAogICBTWVNDT05fQk1fVklERU9fRU5DCiB9OwogCisvKiBTZWxlY3RyIGEgcmVzaXN0b3Igb3IgYSBzZXQgb2YgcmVzaXN0b3JzICovCitlbnVtIHN5c2Nvbl9wdWxsX3VwX2Rvd24geworICBTWVNDT05fUFVfS0VZX0lOX0VOLAorICBTWVNDT05fUFVfRU1JRl8xXzhfQklUX0VOLAorICBTWVNDT05fUFVfRU1JRl8xXzE2X0JJVF9FTiwKKyAgU1lTQ09OX1BVX0VNSUZfMV9ORklGX1JFQURZX0VOLAorICBTWVNDT05fUFVfRU1JRl8xX05GSUZfV0FJVF9OX0VOLAorfTsKKwogLyoKICAqIE5vdGUgdGhhdCB0aGlzIGFycmF5IG11c3QgbWF0Y2ggdGhlIG9yZGVyIG9mIHRoZSBhcnJheSAiY2xrX3JlZyIKICAqIGluIHN5c2Nvbi5jCkBAIC01NzUsNiArNjc5LDcgQEAKICAgU1lTQ09OX0NMS0NPTlRST0xfU1BJLAogICBTWVNDT05fQ0xLQ09OVFJPTF9JMlMwX0NPUkUsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0kyUzFfQ09SRSwKKyAgU1lTQ09OX0NMS0NPTlRST0xfVUFSVDEsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0FBSUYsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0FIQiwKICAgU1lTQ09OX0NMS0NPTlRST0xfQVBFWCwKQEAgLTYwNCw3ICs3MDksOCBAQAogCiBlbnVtIHN5c2Nvbl9zeXNjbGtfcmVxIHsKICAgU1lTQ09OX1NZU0NMS1JFUV9ESVNBQkxFRCwKLSAgU1lTQ09OX1NZU0NMS1JFUV9BQ1RJVkVfTE9XCisgIFNZU0NPTl9TWVNDTEtSRVFfQUNUSVZFX0xPVywKKyAgU1lTQ09OX1NZU0NMS1JFUV9NT05JVE9SCiB9OwogCiBlbnVtIHN5c2Nvbl9jbGtfbW9kZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKaW5kZXggNTg1Y2MwMS4uN2I2YjAxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwpAQCAtMTksMTUgKzE5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlICJtbWMuaCIKKyNpbmNsdWRlICJwYWRtdXguaCIKIAogc3RydWN0IG1tY2lfY2FyZF9ldmVudCB7CiAJc3RydWN0IGlucHV0X2RldiAqbW1jX2lucHV0OwogCWludCBtbWNfaW5zZXJ0ZWQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtxOwotCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YTsKKwlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1tYzBfcGxhdF9kYXRhOwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBtbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTE0Niw2ICsxNDcsNyBAQAogewogCXN0cnVjdCBtbWNpX2NhcmRfZXZlbnQgKm1tY2lfY2FyZDsKIAlzdHJ1Y3QgZGV2aWNlICptbWNzZF9kZXZpY2UgPSAmYWRldi0+ZGV2OworCXN0cnVjdCBwbXggKnBteDsKIAlpbnQgcmV0ID0gMDsKIAogCW1tY2lfY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNpX2NhcmRfZXZlbnQpLCBHRlBfS0VSTkVMKTsKQEAgLTE1OCw2ICsxNjAsOCBAQAogCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuc3RhdHVzID0gbW1jX3N0YXR1czsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmdwaW9fd3AgPSAtMTsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmdwaW9fY2QgPSAtMTsKKwltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmNhcGFiaWxpdGllcyA9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8CisJCU1NQ19DQVBfU0RfSElHSFNQRUVEIHwgTU1DX0NBUF80X0JJVF9EQVRBOwogCiAJbW1jc2RfZGV2aWNlLT5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikgJm1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGE7CiAKQEAgLTIwNyw2ICsyMTEsMjAgQEAKIAogCWlucHV0X3NldF9kcnZkYXRhKG1tY2lfY2FyZC0+bW1jX2lucHV0LCBtbWNpX2NhcmQpOwogCisJLyoKKwkgKiBTZXR1cCBwYWRtdXhpbmcgZm9yIE1NQy4gU2luY2UgdGhpcyBtdXN0IGFsd2F5cyBiZQorCSAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgcG14IGlzIG5ldmVyIHJlbGVhc2VkLgorCSAqLworCXBteCA9IHBteF9nZXQobW1jc2RfZGV2aWNlLCBVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcpOworCisJaWYgKElTX0VSUihwbXgpKQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZ2V0IHBhZG11eCBoYW5kbGVcbiIpOworCWVsc2UgeworCQlyZXQgPSBwbXhfYWN0aXZhdGUobW1jc2RfZGV2aWNlLCBwbXgpOworCQlpZiAoSVNfRVJSX1ZBTFVFKHJldCkpCisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgYWN0aXZhdGUgcGFkbXV4aW5nXG4iKTsKKwl9CisKIAlyZXQgPSBncGlvX3JlZ2lzdGVyX2NhbGxiYWNrKFUzMDBfR1BJT19QSU5fTU1DX0NELCBtbWNpX2NhbGxiYWNrLAogCQkJCSAgICAgbW1jaV9jYXJkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jCmluZGV4IGYzNjY0NTYuLjRjOTNjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmMKQEAgLTYsNTMgKzYsMzYyIEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKICAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgogICogVTMwMCBQQURNVVggZnVuY3Rpb25zCi0gKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Ci0gKgorICogQXV0aG9yOiBNYXJ0aW4gUGVyc3NvbiA8bWFydGluLnBlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bWFjaC91MzAwLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgotCiAjaW5jbHVkZSAicGFkbXV4LmgiCiAKLS8qIFNldCB0aGUgUEFEIE1VWCB0byByb3V0ZSB0aGUgTU1DIHJlYWRlciBjb3JyZWN0bHkgdG8gR1BJTzAuICovCi12b2lkIHBteF9zZXRfbWlzc2lvbl9tb2RlX21tYyh2b2lkKQotewotCXUxNiB2YWw7CitzdGF0aWMgREVGSU5FX01VVEVYKHBteF9tdXRleCk7CiAKLQl2YWwgPSByZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFMUik7Ci0JdmFsICY9IH5VMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTUFTSzsKLQl3cml0ZXcodmFsLCBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFMUik7Ci0JdmFsID0gcmVhZHcoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOwotCXZhbCAmPSB+VTMwMF9TWVNDT05fUE1DMUhSX0FQUF9HUElPXzFfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9HUElPXzFfTU1DOwotCXdyaXRldyh2YWwsIFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUhSKTsKK2NvbnN0IHUzMiBwbXhfcmVnaXN0ZXJzW10gPSB7CisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUxSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpLAorCShVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzJSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMzUiksCisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DNFIpCit9OworCisvKiBIaWdoIGxldmVsIGZ1bmN0aW9uYWxpdHkgKi8KKworLyogTGF6eSBkb2c6CisgKiBvbm1hc2sgPSB7CisgKiAgIHsiUE1DMUxSIiBtYXNrLCAiUE1DMUxSIiB2YWx1ZX0sCisgKiAgIHsiUE1DMUhSIiBtYXNrLCAiUE1DMUhSIiB2YWx1ZX0sCisgKiAgIHsiUE1DMlIiICBtYXNrLCAiUE1DMlIiICB2YWx1ZX0sCisgKiAgIHsiUE1DM1IiICBtYXNrLCAiUE1DM1IiICB2YWx1ZX0sCisgKiAgIHsiUE1DNFIiICBtYXNrLCAiUE1DNFIiICB2YWx1ZX0KKyAqIH0KKyAqLworc3RhdGljIHN0cnVjdCBwbXggbW1jX3NldHRpbmcgPSB7CisJLnNldHRpbmcgPSBVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcsCisJLmRlZmF1bHRfb24gPSBmYWxzZSwKKwkuYWN0aXZhdGVkID0gZmFsc2UsCisJLm5hbWUgPSAiTU1DIiwKKwkub25tYXNrID0geworCQkgICB7VTMwMF9TWVNDT05fUE1DMUxSX01NQ1NEX01BU0ssCisJCSAgICBVMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTU1DU0R9LAorCQkgICB7MCwgMH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9LAorCQkgICB7VTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfTUFTSywKKwkJICAgIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEyX0FQUF9HUElPfQorCQkgICB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbXggc3BpX3NldHRpbmcgPSB7CisJLnNldHRpbmcgPSBVMzAwX0FQUF9QTVhfU1BJX1NFVFRJTkcsCisJLmRlZmF1bHRfb24gPSBmYWxzZSwKKwkuYWN0aXZhdGVkID0gZmFsc2UsCisJLm5hbWUgPSAiU1BJIiwKKwkub25tYXNrID0ge3swLCAwfSwKKwkJICAge1UzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJXzJfTUFTSyB8CisJCSAgICBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18xX01BU0sgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9NQVNLLAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9TUEkgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9TUEkgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9TUEl9LAorCQkgICB7MCwgMH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9CisJCSAgIH0sCit9OworCisvKiBBdmFpbGFibGUgcGFkbXV4IHNldHRpbmdzICovCitzdGF0aWMgc3RydWN0IHBteCAqcG14X3NldHRpbmdzW10gPSB7CisJJm1tY19zZXR0aW5nLAorCSZzcGlfc2V0dGluZywKK307CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWdpc3RlcnMoc3RydWN0IHBteCAqcG14LCBib29sIGFjdGl2YXRlKQoreworCXUxNiByZWd2YWwsIHZhbCwgbWFzazsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9yZWdpc3RlcnMpOyBpKyspIHsKKwkJaWYgKGFjdGl2YXRlKQorCQkJdmFsID0gcG14LT5vbm1hc2tbaV0udmFsOworCQllbHNlCisJCQl2YWwgPSAwOworCisJCW1hc2sgPSBwbXgtPm9ubWFza1tpXS5tYXNrOworCQlpZiAobWFzayAhPSAwKSB7CisJCQlyZWd2YWwgPSByZWFkdyhwbXhfcmVnaXN0ZXJzW2ldKTsKKwkJCXJlZ3ZhbCAmPSB+bWFzazsKKwkJCXJlZ3ZhbCB8PSB2YWw7CisJCQl3cml0ZXcocmVndmFsLCBwbXhfcmVnaXN0ZXJzW2ldKTsKKwkJfQorCX0KIH0KIAotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkodm9pZCkKK3N0cnVjdCBwbXggKnBteF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nKQogewotCXUxNiB2YWw7CisJaW50IGk7CisJc3RydWN0IHBteCAqcG14ID0gRVJSX1BUUigtRU5PRU5UKTsKIAotCS8qIFNldCB1cCBwYWRtdXhpbmcgc28gdGhlIFNQSSBwb3J0IGFuZCBpdHMgY2hpcHNlbGVjdHMgYXJlIGFjdGl2ZSAqLwotCXZhbCA9IHJlYWR3KFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUhSKTsKLQkvKgotCSAqIEFjdGl2YXRlIHRoZSBTUEkgcG9ydCAoZGlzYWJsZSB0aGUgdXNlIG9mIHRoZXNlIHBpbnMgZm9yIGdlbmVyaWMKLQkgKiBHUElPLCBEU1AsIEFBSUYKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJXzJfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9TUEk7Ci0JLyoKLQkgKiBVc2UgR1BJTyBwaW4gU1BJIENTMSBmb3IgQ1MxIGFjdHVhbGx5IChpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKLQkgKiB0aGluZ3MgYWxzbykKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzFfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9TUEk7Ci0JLyoKLQkgKiBVc2UgR1BJTyBwaW4gU1BJIENTMiBmb3IgQ1MyIGFjdHVhbGx5IChpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKLQkgKiB0aGluZ3MgYWxzbykKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzJfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9TUEk7Ci0Jd3JpdGV3KHZhbCwgVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChzZXR0aW5nID09IHBteF9zZXR0aW5nc1tpXS0+c2V0dGluZykgeworCisJCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgIT0gTlVMTCkgeworCQkJCVdBUk4oMSwgInBhZG11eDogcmVxdWlyZWQgc2V0dGluZyAiCisJCQkJICAgICAiaW4gdXNlIGJ5IGFub3RoZXIgY29uc3VtZXJcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwbXggPSBwbXhfc2V0dGluZ3NbaV07CisJCQkJcG14LT5kZXYgPSBkZXY7CisJCQkJZGV2X2RiZyhkZXYsICJwYWRtdXg6IHNldHRpbmcgbnIgJWQgaXMgbm93ICIKKwkJCQkJImJvdW5kIHRvICVzIGFuZCByZWFkeSB0byB1c2VcbiIsCisJCQkJCXNldHRpbmcsIGRldl9uYW1lKGRldikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKworCXJldHVybiBwbXg7CiB9CitFWFBPUlRfU1lNQk9MKHBteF9nZXQpOworCitpbnQgcG14X3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCWlmIChwbXggPT0gTlVMTCB8fCBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChwbXgtPnNldHRpbmcgPT0gcG14X3NldHRpbmdzW2ldLT5zZXR0aW5nKSB7CisKKwkJCWlmIChkZXYgIT0gcG14LT5kZXYpIHsKKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCByZWxlYXNlIGhhbmRsZSBhcyAiCisJCQkJCSJpdCBpcyBib3VuZCB0byBhbm90aGVyIGNvbnN1bWVyXG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlwbXhfc2V0dGluZ3NbaV0tPmRldiA9IE5VTEw7CisJCQkJcmV0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbXhfcHV0KTsKKworaW50IHBteF9hY3RpdmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCkKK3sKKwlpbnQgaSwgaiwgcmV0OworCXJldCA9IDA7CisKKwlpZiAocG14ID09IE5VTEwgfHwgZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgcmVxdWlyZWQgYml0cyBhcmUgbm90IHVzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKworCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgPT0gTlVMTCB8fCBwbXhfc2V0dGluZ3NbaV0gPT0gcG14KQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGorKykgeworCisJCQlpZiAocG14X3NldHRpbmdzW2ldLT5vbm1hc2tbal0ubWFzayAmIHBteC0+CisJCQkJb25tYXNrW2pdLm1hc2spIHsKKwkJCQkvKiBNb3JlIHRoYW4gb25lIGVudHJ5IG9uIHRoZSBzYW1lIGJpdHMgKi8KKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCBhY3RpdmF0ZSAiCisJCQkJCSJzZXR0aW5nLiBCaXQgY29uZmxpY3Qgd2l0aCAiCisJCQkJCSJhbiBhY3RpdmUgc2V0dGluZ1xuIik7CisKKwkJCQlyZXQgPSAtRVVTRVJTOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCX0KKwl1cGRhdGVfcmVnaXN0ZXJzKHBteCwgdHJ1ZSk7CisJcG14LT5hY3RpdmF0ZWQgPSB0cnVlOworCWRldl9kYmcoZGV2LCAicGFkbXV4OiBzZXR0aW5nIG5yICVkIGlzIGFjdGl2YXRlZFxuIiwKKwkJcG14LT5zZXR0aW5nKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG14X2FjdGl2YXRlKTsKKworaW50IHBteF9kZWFjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KQoreworCWludCBpOworCWludCByZXQgPSAtRU5PRU5UOworCisJaWYgKHBteCA9PSBOVUxMIHx8IGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBteF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG14X3NldHRpbmdzKTsgaSsrKSB7CisKKwkJaWYgKHBteF9zZXR0aW5nc1tpXS0+ZGV2ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAocG14LT5zZXR0aW5nID09IHBteF9zZXR0aW5nc1tpXS0+c2V0dGluZykgeworCisJCQlpZiAoZGV2ICE9IHBteC0+ZGV2KSB7CisJCQkJV0FSTigxLCAicGFkbXV4OiBjYW5ub3QgZGVhY3RpdmF0ZSAiCisJCQkJICAgICAicG14IHNldHRpbmcgYXMgaXQgd2FzIGFjdGl2YXRlZCAiCisJCQkJICAgICAiYnkgYW5vdGhlciBjb25zdW1lclxuIik7CisKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXVwZGF0ZV9yZWdpc3RlcnMocG14LCBmYWxzZSk7CisJCQkJcG14X3NldHRpbmdzW2ldLT5kZXYgPSBOVUxMOworCQkJCXBteC0+YWN0aXZhdGVkID0gZmFsc2U7CisJCQkJcmV0ID0gMDsKKwkJCQlkZXZfZGJnKGRldiwgInBhZG11eDogc2V0dGluZyBuciAlZCBpcyBkZWFjdGl2YXRlZCIsCisJCQkJCXBteC0+c2V0dGluZyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwbXhfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG14X2RlYWN0aXZhdGUpOworCisvKgorICogRm9yIGludGVybmFsIHVzZSBvbmx5LiBJZiBpdCBpcyB0byBiZSBleHBvcnRlZCwKKyAqIGl0IHNob3VsZCBiZSByZWVudHJhbnQuIE5vdGljZSB0aGF0IHBteF9hY3RpdmF0ZQorICogKGkuZS4gcnVudGltZSBzZXR0aW5ncykgYWx3YXlzIG92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgcG14X3NldF9kZWZhdWx0KHZvaWQpCit7CisJLyogVXNlZCB0byBpZGVudGlmeSBzZXZlcmFsIGVudHJpZXMgb24gdGhlIHNhbWUgYml0cyAqLworCXUxNiBtb2RiaXRzW0FSUkFZX1NJWkUocG14X3JlZ2lzdGVycyldOworCisJaW50IGksIGo7CisKKwltZW1zZXQobW9kYml0cywgMCwgQVJSQVlfU0laRShwbXhfcmVnaXN0ZXJzKSAqIHNpemVvZih1MTYpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmICghcG14X3NldHRpbmdzW2ldLT5kZWZhdWx0X29uKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGorKykgeworCisJCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgb25seSBvbmUgZW50cnkgb24gdGhlIHNhbWUgYml0cyAqLworCQkJaWYgKG1vZGJpdHNbal0gJiBwbXhfc2V0dGluZ3NbaV0tPm9ubWFza1tqXS5tYXNrKSB7CisJCQkJQlVHKCk7CisJCQkJcmV0dXJuIC1FVVNFUlM7CisJCQl9CisJCQltb2RiaXRzW2pdIHw9IHBteF9zZXR0aW5nc1tpXS0+b25tYXNrW2pdLm1hc2s7CisJCX0KKwkJdXBkYXRlX3JlZ2lzdGVycyhwbXhfc2V0dGluZ3NbaV0sIHRydWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmIChkZWZpbmVkKENPTkZJR19ERUJVR19GUykgJiYgZGVmaW5lZChDT05GSUdfVTMwMF9ERUJVRykpCitzdGF0aWMgaW50IHBteF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlzZXFfcHJpbnRmKHMsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlzZXFfcHJpbnRmKHMsICJTRVRUSU5HICAgICBCT1VORCBUTyBERVZJQ0UgICAgICAgICAgICAgICBTVEFURVxuIik7CisJc2VxX3ByaW50ZihzLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKwkJLyogRm9ybWF0IHBteCBhbmQgZGV2aWNlIG5hbWUgbmljZWx5ICovCisJCWNoYXIgY2RwWzMzXTsKKwkJaW50IGNoYXJzOworCisJCWNoYXJzID0gc25wcmludGYoJmNkcFswXSwgMTcsICIlcyIsIHBteF9zZXR0aW5nc1tpXS0+bmFtZSk7CisJCXdoaWxlIChjaGFycyA8IDE2KSB7CisJCQljZHBbY2hhcnNdID0gJyAnOworCQkJY2hhcnMrKzsKKwkJfQorCQljaGFycyA9IHNucHJpbnRmKCZjZHBbMTZdLCAxNywgIiVzIiwgcG14X3NldHRpbmdzW2ldLT5kZXYgPworCQkJCWRldl9uYW1lKHBteF9zZXR0aW5nc1tpXS0+ZGV2KSA6ICJOL0EiKTsKKwkJd2hpbGUgKGNoYXJzIDwgMTYpIHsKKwkJCWNkcFtjaGFycysxNl0gPSAnICc7CisJCQljaGFycysrOworCQl9CisJCWNkcFszMl0gPSAnXDAnOworCisJCXNlcV9wcmludGYocywKKwkJCSIlc1x0JXNcbiIsCisJCQkmY2RwWzBdLAorCQkJcG14X3NldHRpbmdzW2ldLT5hY3RpdmF0ZWQgPworCQkJIkFDVElWQVRFRCIgOiAiREVBQ1RJVkFURUQiCisJCQkpOworCisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG14X3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXhfb3BlcmF0aW9ucyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcG14X29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcG14X3JlYWRfZGVidWdmcyh2b2lkKQoreworCS8qIEV4cG9zZSBhIHNpbXBsZSBkZWJ1Z2ZzIGludGVyZmFjZSB0byB2aWV3IHBteCBzZXR0aW5ncyAqLworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwYWRtdXgiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgICBOVUxMLCBOVUxMLAorCQkJCSAgICZwbXhfb3BlcmF0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGNvbWUgaW4gYWZ0ZXIgdGhlIGNvcmVfaW5pdGNhbGwoKSwKKyAqIGJlY2F1c2UgZGVidWdmcyBpcyBub3QgYXZhaWxhYmxlIHVudGlsCisgKiB0aGUgc3Vic3lzdGVtcyBjb21lIHVwLgorICovCittb2R1bGVfaW5pdChpbml0X3BteF9yZWFkX2RlYnVnZnMpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHBteF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBteF9zZXRfZGVmYXVsdCgpOworCisJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQlwcl9jcml0KCJwYWRtdXg6IGRlZmF1bHQgc2V0dGluZ3MgY291bGQgbm90IGJlIHNldFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdW1lcnMgKi8KK2NvcmVfaW5pdGNhbGwocG14X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oCmluZGV4IDhjMjA5OWEuLjZlOGI4NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmgKQEAgLTYsMTQgKzYsMzQgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgogICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCiAgKiBVMzAwIFBBRE1VWCBBUEkKLSAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KLSAqCisgKiBBdXRob3I6IE1hcnRpbiBQZXJzc29uIDxtYXJ0aW4ucGVyc3NvbkBzdGVyaWNzc29uLmNvbT4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9VMzAwX1BBRE1VWF9ICiAjZGVmaW5lIF9fTUFDSF9VMzAwX1BBRE1VWF9ICiAKLXZvaWQgcG14X3NldF9taXNzaW9uX21vZGVfbW1jKHZvaWQpOwotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkodm9pZCk7CitlbnVtIHBteF9zZXR0aW5ncyB7CisJVTMwMF9BUFBfUE1YX01NQ19TRVRUSU5HLAorCVUzMDBfQVBQX1BNWF9TUElfU0VUVElORworfTsKKworc3RydWN0IHBteF9vbm1hc2sgeworCXUxNiBtYXNrOwkJLyogTWFzayBiaXRzICovCisJdTE2IHZhbDsJCS8qIFZhbHVlIHdoZW4gYWN0aXZlICovCit9OworCitzdHJ1Y3QgcG14IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJZW51bSBwbXhfc2V0dGluZ3Mgc2V0dGluZzsKKwljaGFyICpuYW1lOworCWJvb2wgYWN0aXZhdGVkOworCWJvb2wgZGVmYXVsdF9vbjsKKwlzdHJ1Y3QgcG14X29ubWFzayBvbm1hc2tbXTsKK307CisKK3N0cnVjdCBwbXggKnBteF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nKTsKK2ludCBwbXhfcHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KTsKK2ludCBwbXhfYWN0aXZhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcG14ICpwbXgpOworaW50IHBteF9kZWFjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlODg3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9zcGkuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgInBhZG11eC5oIgorCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgdGhlIGFjdHVhbCBkZXZpY2VzIG9uIHRoZSBTU1AvU1BJIGJ1cworICovCisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9TUElEVU1NWQorc3RhdGljIHZvaWQgc2VsZWN0X2R1bW15X2NoaXAodTMyIGNoaXBzZWxlY3QpCit7CisJcHJfZGVidWcoIkNPUkU6ICVzIGNhbGxlZCB3aXRoIENTPTB4JXggKCVzKVxuIiwKKwkJIF9fZnVuY19fLAorCQkgY2hpcHNlbGVjdCwKKwkJIGNoaXBzZWxlY3QgPyAidW5zZWxlY3QgY2hpcCIgOiAic2VsZWN0IGNoaXAiKTsKKwkvKgorCSAqIEhlcmUgeW91IHdvdWxkIHdyaXRlIHRoZSBjaGlwIHNlbGVjdCB2YWx1ZSB0byB0aGUgR1BJTyBwaW5zIGlmCisJICogdGhpcyB3YXMgYSByZWFsIGNoaXAgKGJ1dCB0aGlzIGlzIGEgbG9vcGJhY2sgZHVtbXkpLgorCSAqLworfQorCitzdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgZHVtbXlfY2hpcF9pbmZvID0geworCS8qIE5vbWluYWxseSB0aGlzIGlzIExPT1BCQUNLX0RJU0FCTEVELCBidXQgdGhpcyBpcyBvdXIgZHVtbXkgY2hpcCEgKi8KKwkubGJtID0gTE9PUEJBQ0tfRU5BQkxFRCwKKwkvKgorCSAqIGF2YWlsYWJsZSBQT0xMSU5HX1RSQU5TRkVSIGFuZCBJTlRFUlJVUFRfVFJBTlNGRVIsCisJICogRE1BX1RSQU5TRkVSIGRvZXMgbm90IHdvcmsKKwkgKi8KKwkuY29tX21vZGUgPSBJTlRFUlJVUFRfVFJBTlNGRVIsCisJLmlmYWNlID0gU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEksCisJLyogV2UgY2FuIG9ubHkgYWN0IGFzIG1hc3RlciBidXQgU1NQX1NMQVZFIGlzIHBvc3NpYmxlIGluIHRoZW9yeSAqLworCS5oaWVyYXJjaHkgPSBTU1BfTUFTVEVSLAorCS8qIDAgPSBkcml2ZSBUWCBldmVuIGFzIHNsYXZlLCAxID0gZG8gbm90IGRyaXZlIFRYIGFzIHNsYXZlICovCisJLnNsYXZlX3R4X2Rpc2FibGUgPSAwLAorCS8qIExTQiBmaXJzdCAqLworCS5lbmRpYW5fdHggPSBTU1BfVFhfTFNCLAorCS5lbmRpYW5fcnggPSBTU1BfUlhfTFNCLAorCS5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzgsIC8qIHVzZWQgdG8gYmUgMTIgaW4gc29tZSBkZWZhdWx0ICovCisJLnJ4X2xldl90cmlnID0gU1NQX1JYXzFfT1JfTU9SRV9FTEVNLAorCS50eF9sZXZfdHJpZyA9IFNTUF9UWF8xX09SX01PUkVfRU1QVFlfTE9DLAorCS5jbGtfcGhhc2UgPSBTU1BfQ0xLX1NFQ09ORF9FREdFLAorCS5jbGtfcG9sID0gU1NQX0NMS19QT0xfSURMRV9MT1csCisJLmN0cmxfbGVuID0gU1NQX0JJVFNfMTIsCisJLndhaXRfc3RhdGUgPSBTU1BfTVdJUkVfV0FJVF9aRVJPLAorCS5kdXBsZXggPSBTU1BfTUlDUk9XSVJFX0NIQU5ORUxfRlVMTF9EVVBMRVgsCisJLyoKKwkgKiBUaGlzIGlzIHdoZXJlIHlvdSBpbnNlcnQgYSBjYWxsIHRvIGEgZnVuY3Rpb24gdG8gZW5hYmxlIENTCisJICogKHVzdWFsbHkgR1BJTykgZm9yIGEgY2VydGFpbiBjaGlwLgorCSAqLworCS5jc19jb250cm9sID0gc2VsZWN0X2R1bW15X2NoaXAsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdTMwMF9zcGlfZGV2aWNlc1tdID0geworI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfU1BJRFVNTVkKKwl7CisJCS8qIEEgZHVtbXkgY2hpcCB1c2VkIGZvciBsb29wYmFjayB0ZXN0cyAqLworCQkubW9kYWxpYXMgICAgICAgPSAic3BpLWR1bW15IiwKKwkJLyogUmVhbGx5IGR1bW15LCBwYXNzIGluIGFkZGl0aW9uYWwgY2hpcCBjb25maWcgaGVyZSAqLworCQkucGxhdGZvcm1fZGF0YSAgPSBOVUxMLAorCQkvKiBUaGlzIGRlZmluZXMgaG93IHRoZSBjb250cm9sbGVyIHNoYWxsIGhhbmRsZSB0aGUgZGV2aWNlICovCisJCS5jb250cm9sbGVyX2RhdGEgPSAmZHVtbXlfY2hpcF9pbmZvLAorCQkvKiAuaXJxIC0gbm8gZXh0ZXJuYWwgSVJRIHJvdXRlZCBmcm9tIHRoaXMgZGV2aWNlICovCisJCS5tYXhfc3BlZWRfaHogICA9IDEwMDAwMDAsCisJCS5idXNfbnVtICAgICAgICA9IDAsIC8qIE9ubHkgb25lIGJ1cyBvbiB0aGlzIGNoaXAgKi8KKwkJLmNoaXBfc2VsZWN0ICAgID0gMCwKKwkJLyogTWVhbnMgU1BJX0NTX0hJR0gsIGNoYW5nZSBpZiBlLmcgbG93IENTICovCisJCS5tb2RlICAgICAgICAgICA9IDAsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkvKiBJZiB5b3UgaGF2ZSBzZXZlcmFsIFNQSSBidXNlcyB0aGlzIHZhcmllcywgd2UgaGF2ZSBvbmx5IGJ1cyAwICovCisJLmJ1c19pZCA9IDAsCisJLyogU2V0IHRoaXMgdG8gMSB3aGVuIHdlIHRoaW5rIHdlIGdvdCBETUEgd29ya2luZyAqLworCS5lbmFibGVfZG1hID0gMCwKKwkvKgorCSAqIE9uIHRoZSBBUFAgQ1BVIEdQSU8gNCwgNSBhbmQgNiBhcmUgY29ubmVjdGVkIGFzIGdlbmVyaWMKKwkgKiBjaGlwIHNlbGVjdHMgZm9yIFNQSS4gKFNhbWUgb24gVTMzMCwgVTMzNSBhbmQgVTM2NS4pCisJICogVE9ETzogbWFrZSBzdXJlIHRoZSBHUElPIGRyaXZlciBjYW4gc2VsZWN0IHRoZXNlIHByb3Blcmx5CisJICogYW5kIGRvIHBhZG11eGluZyBhY2NvcmRpbmdseSB0b28uCisJICovCisJLm51bV9jaGlwc2VsZWN0ID0gMywKK307CisKKwordm9pZCBfX2luaXQgdTMwMF9zcGlfaW5pdChzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHBteCAqcG14OworCisJYWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmc3NwX3BsYXRmb3JtX2RhdGE7CisJLyoKKwkgKiBTZXR1cCBwYWRtdXhpbmcgZm9yIFNQSS4gU2luY2UgdGhpcyBtdXN0IGFsd2F5cyBiZQorCSAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgcG14IGlzIG5ldmVyIHJlbGVhc2VkLgorCSAqLworCXBteCA9IHBteF9nZXQoJmFkZXYtPmRldiwgVTMwMF9BUFBfUE1YX1NQSV9TRVRUSU5HKTsKKworCWlmIChJU19FUlIocG14KSkKKwkJZGV2X3dhcm4oJmFkZXYtPmRldiwgIkNvdWxkIG5vdCBnZXQgcGFkbXV4IGhhbmRsZVxuIik7CisJZWxzZSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gcG14X2FjdGl2YXRlKCZhZGV2LT5kZXYsIHBteCk7CisJCWlmIChJU19FUlJfVkFMVUUocmV0KSkKKwkJCWRldl93YXJuKCZhZGV2LT5kZXYsICJDb3VsZCBub3QgYWN0aXZhdGUgcGFkbXV4aW5nXG4iKTsKKwl9CisKK30KK3ZvaWQgX19pbml0IHUzMDBfc3BpX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKKwkvKiBSZWdpc3RlciBhbnkgU1BJIGRldmljZXMgKi8KKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyh1MzAwX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKHUzMDBfc3BpX2RldmljZXMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNkODY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvc3BpLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworI2lmbmRlZiBTUElfSAorI2RlZmluZSBTUElfSAorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisKKyNpZmRlZiBDT05GSUdfU1BJX1BMMDIyCit2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldik7Cit2b2lkIF9faW5pdCB1MzAwX3NwaV9yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpOworI2Vsc2UKKy8qIENvbXBpbGUgb3V0IFNQSSBzdXBwb3J0IGlmIFBMMDIyIGlzIG5vdCBzZWxlY3RlZCAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldikKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcyh2b2lkKQoreworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwppbmRleCBjY2U1MzIwLi4yNmQyNmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwpAQCAtMzQ2LDYgKzM0NiwyMSBAQAogCS5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorLyoKKyAqIE92ZXJyaWRlIHRoZSBnbG9iYWwgd2VhayBzY2hlZF9jbG9jayBzeW1ib2wgd2l0aCB0aGlzCisgKiBsb2NhbCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIHRoZSBjbG9ja3NvdXJjZSB0byBnZXQgc29tZQorICogYmV0dGVyIHJlc29sdXRpb24gd2hlbiBzY2hlZHVsaW5nIHRoZSBrZXJuZWwuIFdlIGFjY2VwdCB0aGF0CisgKiB0aGlzIHdyYXBzIGFyb3VuZCBmb3Igbm93LCBzaW5jZSBpdCBpcyBqdXN0IGEgcmVsYXRpdmUgdGltZQorICogc3RhbXAuIChJbnNwaXJlZCBieSBPTUFQIGltcGxlbWVudGF0aW9uLikKKyAqLwordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKGNsb2Nrc291cmNlX3UzMDBfMW1oei5yZWFkKAorCQkJCSAgJmNsb2Nrc291cmNlX3UzMDBfMW1oeiksCisJCQkJICBjbG9ja3NvdXJjZV91MzAwXzFtaHoubXVsdCwKKwkJCQkgIGNsb2Nrc291cmNlX3UzMDBfMW1oei5zaGlmdCk7Cit9CisKIAogLyoKICAqIFRoaXMgc2V0cyB1cCB0aGUgc3lzdGVtIHRpbWVycywgY2xvY2sgc291cmNlIGFuZCBjbG9jayBldmVudC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCA5NzVlYWU0Li5lMTNiZTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KQEAgLTQ3LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTM2OSw3ICszNjksNyBAQAogCXJldHVybiByZWFkbChWRVJTQVRJTEVfU1lTTUNJKSAmIG1hc2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgbW1jMF9wbGF0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gLTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCmluZGV4IDlhZjhkODEuLjIzOWNkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTMxLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIElSUV9NTUNJMUEJSVJRX1NJQ19NTUNJMUEKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tYzFfcGxhdF9kYXRhID0geworc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW1jMV9wbGF0X2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IC0xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggNWZlNTk1YS4uOTI2NGQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WMyBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WMyBpZiBNTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJaGVscAogCSAgVGhlIEFSTTYxMCBpcyB0aGUgc3VjY2Vzc29yIHRvIHRoZSBBUk0zIHByb2Nlc3NvcgogCSAgYW5kIHdhcyBwcm9kdWNlZCBieSBWTFNJIFRlY2hub2xvZ3kgSW5jLgpAQCAtMzEsNyArMzEsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJaGVscAogCSAgQSAzMi1iaXQgUklTQyBtaWNyb3Byb2Nlc3NvciBiYXNlZCBvbiB0aGUgQVJNNyBwcm9jZXNzb3IgY29yZQpAQCAtNDksNyArNDksNyBAQAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjMgaWYgTU1VCiAJc2VsZWN0IENQVV9UTEJfVjMgaWYgTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCWhlbHAKIAkgIEEgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgYmFzZWQgb24gdGhlIEFSTTcgcHJvY2Vzc29yIGNvcmUKIAkgIGRlc2lnbmVkIGJ5IEFkdmFuY2VkIFJJU0MgTWFjaGluZXMgTHRkLiBUaGUgQVJNNzEwIGlzIHRoZQpAQCAtNjQsNyArNjQsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNNzIwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtODMsNyArODMsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1YzCSMgYWx0aG91Z2ggdGhlIGNvcmUgaXMgdjR0CiAJc2VsZWN0IENQVV9DUDE1X01QVQogCWhlbHAKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTk9NTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNAogCWhlbHAKIAkgIEEgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgYmFzZWQgb24gdGhlIEFSTTkgcHJvY2Vzc29yIGNvcmUKQEAgLTExNCw3ICsxMTQsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNOTIwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0xMjIsMTAgKzEyMiw3IEBACiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJaGVscAogCSAgVGhlIEFSTTkyMFQgaXMgbGljZW5zZWQgdG8gYmUgcHJvZHVjZWQgYnkgbnVtZXJvdXMgdmVuZG9ycywKLQkgIGFuZCBpcyB1c2VkIGluIHRoZSBNYXZlcmljayBFUDkzMTIgYW5kIHRoZSBTYW1zdW5nIFMzQzI0MTAuCi0KLQkgIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIE1hdmVyaWNrIEVQOTMxMiBhdAotCSAgPGh0dHA6Ly9saW51eGRldmljZXMuY29tL3Byb2R1Y3RzL1BEMjM4Mjg2NjA2OC5odG1sPi4KKwkgIGFuZCBpcyB1c2VkIGluIHRoZSBDaXJydXMgRVA5M3h4IGFuZCB0aGUgU2Ftc3VuZyBTM0MyNDEwLgogCiAJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTIwVCBwcm9jZXNzb3IuCiAJICBPdGhlcndpc2UsIHNheSBOLgpAQCAtMTM1LDcgKzEzMiw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk05MjJUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTE1NCw3ICsxNTEsNyBAQAogIAlib29sICJTdXBwb3J0IEFSTTkyNVQgcHJvY2Vzc29yIiBpZiBBUkNIX09NQVAxCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTE3Myw3ICsxNzAsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVRKCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKQEAgLTE5MSw3ICsxODgsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0Ci0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NBQ0hFX0ZBCkBAIC0yMTAsNyArMjA3LDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX05PTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NUFUKIAloZWxwCkBAIC0yMjgsNyArMjI1LDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfTk9NTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01QVQogCWhlbHAKQEAgLTI0NCw3ICsyNDEsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTI2Miw3ICsyNTksNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyMEUgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0yNzUsNyArMjcyLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTEwMjJFIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVSAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKQEAgLTI5Myw3ICsyOTAsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyNkVKLVMgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VCAjIEJ1dCBuZWVkIEphemVsbGUsIGJ1dCBFVjVUSiBpZ25vcmVzIGJpdCAxMAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VICMgY2FuIHByb2JhYmx5IGRvIGJldHRlcgpAQCAtMzExLDcgKzMwOCw3IEBACiAJc2VsZWN0IENQVV8zMnYzIGlmIEFSQ0hfUlBDCiAJc2VsZWN0IENQVV8zMnY0IGlmICFBUkNIX1JQQwogCXNlbGVjdCBDUFVfQUJSVF9FVjQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdCCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMzMxLDcgKzMyOCw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NAogCXNlbGVjdCBDUFVfQUJSVF9FVjQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdCCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMzQyLDcgKzMzOSw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKQEAgLTM1Miw3ICszNDksNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCkBAIC0zNjMsNyArMzYwLDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQpAQCAtMzc0LDcgKzM3MSw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfRkVST0NFT04gaWYgTU1VCkBAIC0zOTQsNyArMzkxLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYCiAJc2VsZWN0IENQVV8zMnY2CiAJc2VsZWN0IENQVV9BQlJUX0VWNgotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9WNgogCXNlbGVjdCBDUFVfQ0FDSEVfVjYKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJUFQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC00MjAsNyArNDE3LDcgQEAKIAlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwotCXNlbGVjdCBDUFVfUEFCUlRfSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfVjcKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y3CiAJc2VsZWN0IENQVV9DQUNIRV9WSVBUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtNDgyLDEwICs0NzksMTMgQEAKIGNvbmZpZyBDUFVfQUJSVF9FVjcKIAlib29sCiAKLWNvbmZpZyBDUFVfUEFCUlRfSUZBUgorY29uZmlnIENQVV9QQUJSVF9MRUdBQ1kKIAlib29sCiAKLWNvbmZpZyBDUFVfUEFCUlRfTk9JRkFSCitjb25maWcgQ1BVX1BBQlJUX1Y2CisJYm9vbAorCitjb25maWcgQ1BVX1BBQlJUX1Y3CiAJYm9vbAogCiAjIFRoZSBjYWNoZSBtb2RlbApAQCAtNzcxLDMgKzc3MSw4IEBACiAJc2VsZWN0IE9VVEVSX0NBQ0hFCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgTDIgY2FjaGUgb24gWFNjYWxlMy4KKworY29uZmlnIEFSTV9MMV9DQUNIRV9TSElGVAorCWludAorCWRlZmF1bHQgNiBpZiBBUkNIX09NQVAzCisJZGVmYXVsdCA1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21tL01ha2VmaWxlCmluZGV4IDYzZTNmNmQuLjA1NWNiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21tL01ha2VmaWxlCkBAIC0yNyw2ICsyNywxMCBAQAogb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNikJKz0gYWJvcnQtZXY2Lm8KIG9iai0kKENPTkZJR19DUFVfQUJSVF9FVjcpCSs9IGFib3J0LWV2Ny5vCiAKK29iai0kKENPTkZJR19DUFVfUEFCUlRfTEVHQUNZKQkrPSBwYWJvcnQtbGVnYWN5Lm8KK29iai0kKENPTkZJR19DUFVfUEFCUlRfVjYpCSs9IHBhYm9ydC12Ni5vCitvYmotJChDT05GSUdfQ1BVX1BBQlJUX1Y3KQkrPSBwYWJvcnQtdjcubworCiBvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1YzKQkrPSBjYWNoZS12My5vCiBvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y0KQkrPSBjYWNoZS12NC5vCiBvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y0V1QpCSs9IGNhY2hlLXY0d3QubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKaW5kZXggOGY1YzEzZi4uMjk1ZTI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKIApAQCAtMTIxLDExICsxMjIsMTMgQEAKICAqCS0gdGhlIEljYWNoZSBkb2VzIG5vdCByZWFkIGRhdGEgZnJvbSB0aGUgd3JpdGUgYnVmZmVyCiAgKi8KIEVOVFJZKHY2X2NvaGVyZW50X3VzZXJfcmFuZ2UpCi0KKyBVTldJTkQoLmZuc3RhcnQJCSkKICNpZmRlZiBIQVJWQVJEX0NBQ0hFCiAJYmljCXIwLCByMCwgI0NBQ0hFX0xJTkVfU0laRSAtIDEKLTE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgbGluZQorMToKKyBVU0VSKAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkpCUAgY2xlYW4gRCBsaW5lCiAJYWRkCXIwLCByMCwgI0NBQ0hFX0xJTkVfU0laRQorMjoKIAljbXAJcjAsIHIxCiAJYmxvCTFiCiAjZW5kaWYKQEAgLTE0Myw2ICsxNDYsMTkgQEAKIAltb3YJcGMsIGxyCiAKIC8qCisgKiBGYXVsdCBoYW5kbGluZyBmb3IgdGhlIGNhY2hlIG9wZXJhdGlvbiBhYm92ZS4gSWYgdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiByMAorICogaXNuJ3QgbWFwcGVkLCBqdXN0IHRyeSB0aGUgbmV4dCBwYWdlLgorICovCis5MDAxOgorCW1vdglyMCwgcjAsIGxzciAjMTIKKwltb3YJcjAsIHIwLCBsc2wgIzEyCisJYWRkCXIwLCByMCwgIzQwOTYKKwliCTJiCisgVU5XSU5EKC5mbmVuZAkJKQorRU5EUFJPQyh2Nl9jb2hlcmVudF91c2VyX3JhbmdlKQorRU5EUFJPQyh2Nl9jb2hlcmVudF9rZXJuX3JhbmdlKQorCisvKgogICoJdjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZShrYWRkcikKICAqCiAgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjawpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKaW5kZXggYmRhMGVjMy4uZTFiZDk3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKIApAQCAtMTUzLDEzICsxNTQsMTYgQEAKICAqCS0gdGhlIEljYWNoZSBkb2VzIG5vdCByZWFkIGRhdGEgZnJvbSB0aGUgd3JpdGUgYnVmZmVyCiAgKi8KIEVOVFJZKHY3X2NvaGVyZW50X3VzZXJfcmFuZ2UpCisgVU5XSU5EKC5mbnN0YXJ0CQkpCiAJZGNhY2hlX2xpbmVfc2l6ZSByMiwgcjMKIAlzdWIJcjMsIHIyLCAjMQogCWJpYwlyMCwgcjAsIHIzCi0xOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMSwgMQkJQCBjbGVhbiBEIGxpbmUgdG8gdGhlIHBvaW50IG9mIHVuaWZpY2F0aW9uCisxOgorIFVTRVIoCW1jcglwMTUsIDAsIHIwLCBjNywgYzExLCAxCSkJQCBjbGVhbiBEIGxpbmUgdG8gdGhlIHBvaW50IG9mIHVuaWZpY2F0aW9uCiAJZHNiCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgbGluZQorIFVTRVIoCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJKQlAIGludmFsaWRhdGUgSSBsaW5lCiAJYWRkCXIwLCByMCwgcjIKKzI6CiAJY21wCXIwLCByMQogCWJsbwkxYgogCW1vdglyMCwgIzAKQEAgLTE2Nyw2ICsxNzEsMTcgQEAKIAlkc2IKIAlpc2IKIAltb3YJcGMsIGxyCisKKy8qCisgKiBGYXVsdCBoYW5kbGluZyBmb3IgdGhlIGNhY2hlIG9wZXJhdGlvbiBhYm92ZS4gSWYgdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiByMAorICogaXNuJ3QgbWFwcGVkLCBqdXN0IHRyeSB0aGUgbmV4dCBwYWdlLgorICovCis5MDAxOgorCW1vdglyMCwgcjAsIGxzciAjMTIKKwltb3YJcjAsIHIwLCBsc2wgIzEyCisJYWRkCXIwLCByMCwgIzQwOTYKKwliCTJiCisgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyh2N19jb2hlcmVudF9rZXJuX3JhbmdlKQogRU5EUFJPQyh2N19jb2hlcmVudF91c2VyX3JhbmdlKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb250ZXh0LmMgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKaW5kZXggNmJkYTc2YS4uYTllMjJlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29udGV4dC5jCisrKyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwpAQCAtNTAsMTAgKzUwLDcgQEAKIAkJaXNiKCk7CiAJCWZsdXNoX3RsYl9hbGwoKTsKIAkJaWYgKGljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpIHsKLQkJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSS1jYWNoZVxuIgotCQkJICAgICJtY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCA2CUAgZmx1c2ggQlRBQy9CVEJcbiIKLQkJCSAgICA6Ci0JCQkgICAgOiAiciIgKDApKTsKKwkJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogCQkJZHNiKCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwppbmRleCBiMzA5MjVmLi5iOTU5MGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCiAJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CiAKLQlpZiAobWFzayAhPSAweGZmZmZmZmZmKQorCWlmIChtYXNrIDwgMHhmZmZmZmZmZlVMTCkKIAkJZ2ZwIHw9IEdGUF9ETUE7CiAKIAlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7CkBAIC0yODksNyArMjg5LDcgQEAKIAlpZiAoIW1hc2spCiAJCWdvdG8gZXJyb3I7CiAKLQlpZiAobWFzayAhPSAweGZmZmZmZmZmKQorCWlmIChtYXNrIDwgMHhmZmZmZmZmZlVMTCkKIAkJZ2ZwIHw9IEdGUF9ETUE7CiAJdmlydCA9IGttYWxsb2Moc2l6ZSwgZ2ZwKTsKIAlpZiAoIXZpcnQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKaW5kZXggYmMwMDk5ZC4uZDBkMTdiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwpAQCAtMTUzLDE0ICsxNTMsMTEgQEAKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7Ci0JaWYgKG1hcHBpbmcpIHsKICNpZm5kZWYgQ09ORklHX1NNUAotCQlpbnQgZGlydHkgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpOwotCi0JCWlmIChkaXJ0eSkKLQkJCV9fZmx1c2hfZGNhY2hlX3BhZ2UobWFwcGluZywgcGFnZSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncykpCisJCV9fZmx1c2hfZGNhY2hlX3BhZ2UobWFwcGluZywgcGFnZSk7CiAjZW5kaWYKLQorCWlmIChtYXBwaW5nKSB7CiAJCWlmIChjYWNoZV9pc192aXZ0KCkpCiAJCQltYWtlX2NvaGVyZW50KG1hcHBpbmcsIHZtYSwgYWRkciwgcGZuKTsKIAkJZWxzZSBpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwppbmRleCBjYzg4MjlkLi4xMGUwNjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKQEAgLTI1LDYgKzI1LDE5IEBACiAKICNpbmNsdWRlICJmYXVsdC5oIgogCisvKgorICogRmF1bHQgc3RhdHVzIHJlZ2lzdGVyIGVuY29kaW5ncy4gIFdlIHN0ZWFsIGJpdCAzMSBmb3Igb3VyIG93biBwdXJwb3Nlcy4KKyAqLworI2RlZmluZSBGU1JfTE5YX1BGCQkoMSA8PCAzMSkKKyNkZWZpbmUgRlNSX1dSSVRFCQkoMSA8PCAxMSkKKyNkZWZpbmUgRlNSX0ZTNAkJCSgxIDw8IDEwKQorI2RlZmluZSBGU1JfRlMzXzAJCSgxNSkKKworc3RhdGljIGlubGluZSBpbnQgZnNyX2ZzKHVuc2lnbmVkIGludCBmc3IpCit7CisJcmV0dXJuIChmc3IgJiBGU1JfRlMzXzApIHwgKGZzciAmIEZTUl9GUzQpID4+IDY7Cit9CisKICNpZmRlZiBDT05GSUdfTU1VCiAKICNpZmRlZiBDT05GSUdfS1BST0JFUwpAQCAtMTgyLDE4ICsxOTUsMzUgQEAKICNkZWZpbmUgVk1fRkFVTFRfQkFETUFQCQkweDAxMDAwMAogI2RlZmluZSBWTV9GQVVMVF9CQURBQ0NFU1MJMHgwMjAwMDAKIAotc3RhdGljIGludAorLyoKKyAqIENoZWNrIHRoYXQgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBWTUEgYWxsb3cgZm9yIHRoZSBmYXVsdCB3aGljaCBvY2N1cnJlZC4KKyAqIElmIHdlIGVuY291bnRlcmVkIGEgd3JpdGUgZmF1bHQsIHdlIG11c3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLCBvdGhlcndpc2UKKyAqIHdlIGFsbG93IGFueSBwZXJtaXNzaW9uLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgYWNjZXNzX2Vycm9yKHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQzsKKworCWlmIChmc3IgJiBGU1JfV1JJVEUpCisJCW1hc2sgPSBWTV9XUklURTsKKwlpZiAoZnNyICYgRlNSX0xOWF9QRikKKwkJbWFzayA9IFZNX0VYRUM7CisKKwlyZXR1cm4gdm1hLT52bV9mbGFncyAmIG1hc2sgPyBmYWxzZSA6IHRydWU7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzCiBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JaW50IGZhdWx0LCBtYXNrOworCWludCBmYXVsdDsKIAogCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAlmYXVsdCA9IFZNX0ZBVUxUX0JBRE1BUDsKLQlpZiAoIXZtYSkKKwlpZiAodW5saWtlbHkoIXZtYSkpCiAJCWdvdG8gb3V0OwotCWlmICh2bWEtPnZtX3N0YXJ0ID4gYWRkcikKKwlpZiAodW5saWtlbHkodm1hLT52bV9zdGFydCA+IGFkZHIpKQogCQlnb3RvIGNoZWNrX3N0YWNrOwogCiAJLyoKQEAgLTIwMSw0NyArMjMxLDI0IEBACiAJICogbWVtb3J5IGFjY2Vzcywgc28gd2UgY2FuIGhhbmRsZSBpdC4KIAkgKi8KIGdvb2RfYXJlYToKLQlpZiAoZnNyICYgKDEgPDwgMTEpKSAvKiB3cml0ZT8gKi8KLQkJbWFzayA9IFZNX1dSSVRFOwotCWVsc2UKLQkJbWFzayA9IFZNX1JFQUR8Vk1fRVhFQ3xWTV9XUklURTsKLQotCWZhdWx0ID0gVk1fRkFVTFRfQkFEQUNDRVNTOwotCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBtYXNrKSkKKwlpZiAoYWNjZXNzX2Vycm9yKGZzciwgdm1hKSkgeworCQlmYXVsdCA9IFZNX0ZBVUxUX0JBREFDQ0VTUzsKIAkJZ290byBvdXQ7CisJfQogCiAJLyoKLQkgKiBJZiBmb3IgYW55IHJlYXNvbiBhdCBhbGwgd2UgY291bGRuJ3QgaGFuZGxlCi0JICogdGhlIGZhdWx0LCBtYWtlIHN1cmUgd2UgZXhpdCBncmFjZWZ1bGx5IHJhdGhlcgotCSAqIHRoYW4gZW5kbGVzc2x5IHJlZG8gdGhlIGZhdWx0LgorCSAqIElmIGZvciBhbnkgcmVhc29uIGF0IGFsbCB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGZhdWx0LCBtYWtlCisJICogc3VyZSB3ZSBleGl0IGdyYWNlZnVsbHkgcmF0aGVyIHRoYW4gZW5kbGVzc2x5IHJlZG8gdGhlIGZhdWx0LgogCSAqLwotc3Vydml2ZToKLQlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyICYgUEFHRV9NQVNLLCAoZnNyICYgKDEgPDwgMTEpKSA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKTsKLQlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKLQkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQotCQkJZ290byBvdXRfb2ZfbWVtb3J5OwotCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKLQkJCXJldHVybiBmYXVsdDsKLQkJQlVHKCk7Ci0JfQorCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHIgJiBQQUdFX01BU0ssIChmc3IgJiBGU1JfV1JJVEUpID8gRkFVTFRfRkxBR19XUklURSA6IDApOworCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkKKwkJcmV0dXJuIGZhdWx0OwogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKQogCQl0c2stPm1hal9mbHQrKzsKIAllbHNlCiAJCXRzay0+bWluX2ZsdCsrOwogCXJldHVybiBmYXVsdDsKIAotb3V0X29mX21lbW9yeToKLQlpZiAoIWlzX2dsb2JhbF9pbml0KHRzaykpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgb3V0IG9mIG1lbW9yeSBmb3IgcGlkMSwgc2xlZXAgZm9yIGEgd2hpbGUgYW5kIHJldHJ5Ci0JICovCi0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQl5aWVsZCgpOwotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlnb3RvIHN1cnZpdmU7Ci0KIGNoZWNrX3N0YWNrOgogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOICYmICFleHBhbmRfc3RhY2sodm1hLCBhZGRyKSkKIAkJZ290byBnb29kX2FyZWE7CkBAIC0yNzgsNiArMjg1LDE4IEBACiAJCWlmICghdXNlcl9tb2RlKHJlZ3MpICYmICFzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5BUk1fcGMpKQogCQkJZ290byBub19jb250ZXh0OwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGFib3ZlIGRvd25fcmVhZF90cnlsb2NrKCkgbWlnaHQgaGF2ZSBzdWNjZWVkZWQgaW4KKwkJICogd2hpY2ggY2FzZSwgd2UnbGwgaGF2ZSBtaXNzZWQgdGhlIG1pZ2h0X3NsZWVwKCkgZnJvbQorCQkgKiBkb3duX3JlYWQoKQorCQkgKi8KKwkJbWlnaHRfc2xlZXAoKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KKwkJaWYgKCF1c2VyX21vZGUocmVncykgJiYKKwkJICAgICFzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5BUk1fcGMpKQorCQkJZ290byBub19jb250ZXh0OworI2VuZGlmCiAJfQogCiAJZmF1bHQgPSBfX2RvX3BhZ2VfZmF1bHQobW0sIGFkZHIsIGZzciwgdHNrKTsKQEAgLTI4OSw2ICszMDgsMTYgQEAKIAlpZiAobGlrZWx5KCEoZmF1bHQgJiAoVk1fRkFVTFRfRVJST1IgfCBWTV9GQVVMVF9CQURNQVAgfCBWTV9GQVVMVF9CQURBQ0NFU1MpKSkpCiAJCXJldHVybiAwOwogCisJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7CisJCS8qCisJCSAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBjYWxsIHRoZSBPT00ga2lsbGVyLCBhbmQgcmV0dXJuIHRvCisJCSAqIHVzZXJzcGFjZSAod2hpY2ggd2lsbCByZXRyeSB0aGUgZmF1bHQsIG9yIGtpbGwgdXMgaWYgd2UKKwkJICogZ290IG9vbS1raWxsZWQpCisJCSAqLworCQlwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIElmIHdlIGFyZSBpbiBrZXJuZWwgbW9kZSBhdCB0aGlzIHBvaW50LCB3ZQogCSAqIGhhdmUgbm8gY29udGV4dCB0byBoYW5kbGUgdGhpcyBmYXVsdCB3aXRoLgpAQCAtMjk2LDE2ICszMjUsNiBAQAogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQogCQlnb3RvIG5vX2NvbnRleHQ7CiAKLQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pIHsKLQkJLyoKLQkJICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcKLQkJICogaGFwcGVuZWQgdG8gdXMgdGhhdCBtYWRlIHVzIHVuYWJsZSB0byBoYW5kbGUKLQkJICogdGhlIHBhZ2UgZmF1bHQgZ3JhY2VmdWxseS4KLQkJICovCi0JCXByaW50aygiVk06IGtpbGxpbmcgcHJvY2VzcyAlc1xuIiwgdHNrLT5jb21tKTsKLQkJZG9fZ3JvdXBfZXhpdChTSUdLSUxMKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykgewogCQkvKgogCQkgKiBXZSBoYWQgc29tZSBtZW1vcnksIGJ1dCB3ZXJlIHVuYWJsZSB0bwpAQCAtNDg5LDEwICs1MDgsMTAgQEAKIGFzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbgogZG9fRGF0YUFib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JY29uc3Qgc3RydWN0IGZzcl9pbmZvICppbmYgPSBmc3JfaW5mbyArIChmc3IgJiAxNSkgKyAoKGZzciAmICgxIDw8IDEwKSkgPj4gNik7CisJY29uc3Qgc3RydWN0IGZzcl9pbmZvICppbmYgPSBmc3JfaW5mbyArIGZzcl9mcyhmc3IpOwogCXN0cnVjdCBzaWdpbmZvIGluZm87CiAKLQlpZiAoIWluZi0+Zm4oYWRkciwgZnNyLCByZWdzKSkKKwlpZiAoIWluZi0+Zm4oYWRkciwgZnNyICYgfkZTUl9MTlhfUEYsIHJlZ3MpKQogCQlyZXR1cm47CiAKIAlwcmludGsoS0VSTl9BTEVSVCAiVW5oYW5kbGVkIGZhdWx0OiAlcyAoMHglMDN4KSBhdCAweCUwOGx4XG4iLApAQCAtNTA1LDkgKzUyNCw1OCBAQAogCWFybV9ub3RpZnlfZGllKCIiLCByZWdzLCAmaW5mbywgZnNyLCAwKTsKIH0KIAorCitzdGF0aWMgc3RydWN0IGZzcl9pbmZvIGlmc3JfaW5mb1tdID0geworCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDAiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJImRlYnVnIGV2ZW50IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInNlY3Rpb24gYWNjZXNzIGZsYWcgZmF1bHQiCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gNCIJCQkgICB9LAorCXsgZG9fdHJhbnNsYXRpb25fZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkic2VjdGlvbiB0cmFuc2xhdGlvbiBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkicGFnZSBhY2Nlc3MgZmxhZyBmYXVsdCIJICAgfSwKKwl7IGRvX3BhZ2VfZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkicGFnZSB0cmFuc2xhdGlvbiBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJIDAsCQkiZXh0ZXJuYWwgYWJvcnQgb24gbm9uLWxpbmVmZXRjaCIgIH0sCisJeyBkb19iYWQsCQlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInNlY3Rpb24gZG9tYWluIGZhdWx0IgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxMCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJwYWdlIGRvbWFpbiBmYXVsdCIJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsCSAwLAkJImV4dGVybmFsIGFib3J0IG9uIHRyYW5zbGF0aW9uIgkgICB9LAorCXsgZG9fc2VjdF9mYXVsdCwJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJzZWN0aW9uIHBlcm1pc3Npb24gZmF1bHQiCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsCSAwLAkJImV4dGVybmFsIGFib3J0IG9uIHRyYW5zbGF0aW9uIgkgICB9LAorCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJwYWdlIHBlcm1pc3Npb24gZmF1bHQiCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDE2IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTciCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxOCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDE5IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjAiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyMSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDIyIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjMiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyNCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI1IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjYiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyNyIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI4IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjkiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAzMCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDMxIgkJCSAgIH0sCit9OworCiBhc21saW5rYWdlIHZvaWQgX19leGNlcHRpb24KLWRvX1ByZWZldGNoQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2RvX1ByZWZldGNoQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgaWZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JZG9fdHJhbnNsYXRpb25fZmF1bHQoYWRkciwgMCwgcmVncyk7CisJY29uc3Qgc3RydWN0IGZzcl9pbmZvICppbmYgPSBpZnNyX2luZm8gKyBmc3JfZnMoaWZzcik7CisJc3RydWN0IHNpZ2luZm8gaW5mbzsKKworCWlmICghaW5mLT5mbihhZGRyLCBpZnNyIHwgRlNSX0xOWF9QRiwgcmVncykpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0FMRVJUICJVbmhhbmRsZWQgcHJlZmV0Y2ggYWJvcnQ6ICVzICgweCUwM3gpIGF0IDB4JTA4bHhcbiIsCisJCWluZi0+bmFtZSwgaWZzciwgYWRkcik7CisKKwlpbmZvLnNpX3NpZ25vID0gaW5mLT5zaWc7CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlICA9IGluZi0+Y29kZTsKKwlpbmZvLnNpX2FkZHIgID0gKHZvaWQgX191c2VyICopYWRkcjsKKwlhcm1fbm90aWZ5X2RpZSgiIiwgcmVncywgJmluZm8sIGlmc3IsIDApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mbHVzaC5jIGIvYXJjaC9hcm0vbW0vZmx1c2guYwppbmRleCBiMjc5NDI5Li43ZjI5NGYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mbHVzaC5jCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTE4LDEwICsxOCw2IEBACiAKICNpbmNsdWRlICJtbS5oIgogCi0jaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi1leHRlcm4gdm9pZCB2Nl9pY2FjaGVfaW52YWxfYWxsKHZvaWQpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQKIAogI2RlZmluZSBBTElBU19GTFVTSF9TVEFSVAkweGZmZmY0MDAwCkBAIC0zNSwxNiArMzEsMTEgQEAKIAlmbHVzaF90bGJfa2VybmVsX3BhZ2UodG8pOwogCiAJYXNtKAkibWNycglwMTUsIDAsICUxLCAlMCwgYzE0XG4iCi0JIgltY3IJcDE1LCAwLCAlMiwgYzcsIGMxMCwgNFxuIgotI2lmbmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkiCW1jcglwMTUsIDAsICUyLCBjNywgYzUsIDBcbiIKLSNlbmRpZgorCSIJbWNyCXAxNSwgMCwgJTIsIGM3LCBjMTAsIDQiCiAJICAgIDoKIAkgICAgOiAiciIgKHRvKSwgInIiICh0byArIFBBR0VfU0laRSAtIEwxX0NBQ0hFX0JZVEVTKSwgInIiICh6ZXJvKQogCSAgICA6ICJjYyIpOwotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCXY2X2ljYWNoZV9pbnZhbF9hbGwoKTsKLSNlbmRpZgorCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogfQogCiB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpAQCAtNTcsMTYgKzQ4LDExIEBACiAKIAlpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7CiAJCWFzbSgJIm1jcglwMTUsIDAsICUwLCBjNywgYzE0LCAwXG4iCi0JCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDRcbiIKLSNpZm5kZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMFxuIgotI2VuZGlmCisJCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiCiAJCSAgICA6CiAJCSAgICA6ICJyIiAoMCkKIAkJICAgIDogImNjIik7Ci0jaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JCXY2X2ljYWNoZV9pbnZhbF9hbGwoKTsKLSNlbmRpZgorCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAl9CiB9CiAKQEAgLTgxLDE2ICs2NywxMSBAQAogCiAJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgewogCQlhc20oCSJtY3IJcDE1LCAwLCAlMCwgYzcsIGMxNCwgMFxuIgotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0XG4iCi0jaWZuZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzUsIDBcbiIKLSNlbmRpZgorCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0IgogCQkgICAgOgogCQkgICAgOiAiciIgKDApCiAJCSAgICA6ICJjYyIpOwotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7Ci0jZW5kaWYKKwkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9oaWdobWVtLmMgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKaW5kZXggNzNjYWU1Ny4uMzBmODJmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwpAQCAtNDYsNiArNDYsOCBAQAogCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCiAJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiAKKwlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKKwogCWttYXAgPSBrbWFwX2hpZ2hfZ2V0KHBhZ2UpOwogCWlmIChrbWFwKQogCQlyZXR1cm4ga21hcDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCBmOTgyNjA2Li41MmM0MGQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC0yNzMsNyArMjczLDYgQEAKIAkJc3RydWN0IG1lbWJhbmsgKmJhbmsgPSAmbWktPmJhbmtbaV07CiAJCWlmICghYmFuay0+aGlnaG1lbSkKIAkJCWZyZWVfYm9vdG1lbV9ub2RlKHBnZGF0LCBiYW5rX3BoeXNfc3RhcnQoYmFuayksIGJhbmtfcGh5c19zaXplKGJhbmspKTsKLQkJbWVtb3J5X3ByZXNlbnQobm9kZSwgYmFua19wZm5fc3RhcnQoYmFuayksIGJhbmtfcGZuX2VuZChiYW5rKSk7CiAJfQogCiAJLyoKQEAgLTM3MCw2ICszNjksMTkgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocGZuX3ZhbGlkKTsKKworc3RhdGljIHZvaWQgYXJtX21lbW9yeV9wcmVzZW50KHN0cnVjdCBtZW1pbmZvICptaSwgaW50IG5vZGUpCit7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgYXJtX21lbW9yeV9wcmVzZW50KHN0cnVjdCBtZW1pbmZvICptaSwgaW50IG5vZGUpCit7CisJaW50IGk7CisJZm9yX2VhY2hfbm9kZWJhbmsoaSwgbWksIG5vZGUpIHsKKwkJc3RydWN0IG1lbWJhbmsgKmJhbmsgPSAmbWktPmJhbmtbaV07CisJCW1lbW9yeV9wcmVzZW50KG5vZGUsIGJhbmtfcGZuX3N0YXJ0KGJhbmspLCBiYW5rX3Bmbl9lbmQoYmFuaykpOworCX0KK30KICNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBtZW1pbmZvX2NtcChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCkBAIC00MjcsNiArNDM5LDEyIEBACiAJCSAqLwogCQlpZiAobm9kZSA9PSBpbml0cmRfbm9kZSkKIAkJCWJvb3RtZW1fcmVzZXJ2ZV9pbml0cmQobm9kZSk7CisKKwkJLyoKKwkJICogU3BhcnNlbWVtIHRyaWVzIHRvIGFsbG9jYXRlIGJvb3RtZW0gaW4gbWVtb3J5X3ByZXNlbnQoKSwKKwkJICogc28gbXVzdCBiZSBkb25lIGFmdGVyIHRoZSBmaXhlZCByZXNlcnZhdGlvbnMKKwkJICovCisJCWFybV9tZW1vcnlfcHJlc2VudChtaSwgbm9kZSk7CiAJfQogCiAJLyoKQEAgLTQ4Myw3ICs1MDEsNyBAQAogCS8qCiAJICogQ29udmVydCBzdGFydF9wZm4vZW5kX3BmbiB0byBhIHN0cnVjdCBwYWdlIHBvaW50ZXIuCiAJICovCi0Jc3RhcnRfcGcgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4pOworCXN0YXJ0X3BnID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuIC0gMSkgKyAxOwogCWVuZF9wZyA9IHBmbl90b19wYWdlKGVuZF9wZm4pOwogCiAJLyoKQEAgLTYxMyw2ICs2MzEsMTQgQEAKIAogdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfSEFWRV9UQ00KKwlleHRlcm4gY2hhciAqX190Y21fc3RhcnQsICpfX3RjbV9lbmQ7CisKKwl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FyZWEoX19waHlzX3RvX3BmbihfX3BhKF9fdGNtX3N0YXJ0KSksCisJCQkJICAgIF9fcGh5c190b19wZm4oX19wYShfX3RjbV9lbmQpKSwKKwkJCQkgICAgIlRDTSBsaW5rIik7CisjZW5kaWYKKwogCWlmICghbWFjaGluZV9pc19pbnRlZ3JhdG9yKCkgJiYgIW1hY2hpbmVfaXNfY2ludGVncmF0b3IoKSkKIAkJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hcmVhKF9fcGh5c190b19wZm4oX19wYShfX2luaXRfYmVnaW4pKSwKIAkJCQkJICAgIF9fcGh5c190b19wZm4oX19wYShfX2luaXRfZW5kKSksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbWFwLmMgYi9hcmNoL2FybS9tbS9tbWFwLmMKaW5kZXggZjc0NTdmZS4uMmI3OTk2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL21tYXAuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiB7CiAJaWYgKGFkZHIgPCBQSFlTX09GRlNFVCkKIAkJcmV0dXJuIDA7Ci0JaWYgKGFkZHIgKyBzaXplID49IF9fcGEoaGlnaF9tZW1vcnkgLSAxKSkKKwlpZiAoYWRkciArIHNpemUgPiBfX3BhKGhpZ2hfbWVtb3J5IC0gMSkgKyAxKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCA0NDI2ZWU2Li5lYTY3YmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZXR5cGUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4KIApAQCAtMTE2LDYgKzExNywxMyBAQAogCX0KIAlpZiAoaSA9PSBBUlJBWV9TSVpFKGNhY2hlX3BvbGljaWVzKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogdW5rbm93biBvciB1bnN1cHBvcnRlZCBjYWNoZSBwb2xpY3lcbiIpOworCS8qCisJICogVGhpcyByZXN0cmljdGlvbiBpcyBwYXJ0bHkgdG8gZG8gd2l0aCB0aGUgd2F5IHdlIGJvb3Q7IGl0IGlzCisJICogdW5wcmVkaWN0YWJsZSB0byBoYXZlIG1lbW9yeSBtYXBwZWQgdXNpbmcgdHdvIGRpZmZlcmVudCBzZXRzIG9mCisJICogbWVtb3J5IGF0dHJpYnV0ZXMgKHNoYXJlZCwgdHlwZSwgYW5kIGNhY2hlIGF0dHJpYnMpLiAgV2UgY2FuIG5vdAorCSAqIGNoYW5nZSB0aGVzZSBhdHRyaWJ1dGVzIG9uY2UgdGhlIGluaXRpYWwgYXNzZW1ibHkgaGFzIHNldHVwIHRoZQorCSAqIHBhZ2UgdGFibGVzLgorCSAqLwogCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPj0gQ1BVX0FSQ0hfQVJNdjYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiT25seSBjYWNoZXBvbGljeT13cml0ZWJhY2sgc3VwcG9ydGVkIG9uIEFSTXY2IGFuZCBsYXRlclxuIik7CiAJCWNhY2hlcG9saWN5ID0gQ1BPTElDWV9XUklURUJBQ0s7CkBAIC03MDksMTAgKzcxNyw2IEBACiAJCQlpZiAobWVtaW5mby5ucl9iYW5rcyA+PSBOUl9CQU5LUykgewogCQkJCXByaW50ayhLRVJOX0NSSVQgIk5SX0JBTktTIHRvbyBsb3csICIKIAkJCQkJCSAiaWdub3JpbmcgaGlnaCBtZW1vcnlcbiIpOwotCQkJfSBlbHNlIGlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKLQkJCQlwcmludGsoS0VSTl9DUklUICJISUdITUVNIGlzIG5vdCB5ZXQgc3VwcG9ydGVkICIKLQkJCQkJCSAid2l0aCBWSVBUIGFsaWFzaW5nIGNhY2hlLCAiCi0JCQkJCQkgImlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJbWVtbW92ZShiYW5rICsgMSwgYmFuaywKIAkJCQkJKG1lbWluZm8ubnJfYmFua3MgLSBpKSAqIHNpemVvZigqYmFuaykpOwpAQCAtNzI2LDYgKzczMCw4IEBACiAJCQliYW5rLT5zaXplID0gVk1BTExPQ19NSU4gLSBfX3ZhKGJhbmstPnN0YXJ0KTsKIAkJfQogI2Vsc2UKKwkJYmFuay0+aGlnaG1lbSA9IGhpZ2htZW07CisKIAkJLyoKIAkJICogQ2hlY2sgd2hldGhlciB0aGlzIG1lbW9yeSBiYW5rIHdvdWxkIGVudGlyZWx5IG92ZXJsYXAKIAkJICogdGhlIHZtYWxsb2MgYXJlYS4KQEAgLTc1NCw2ICs3NjAsMzggQEAKICNlbmRpZgogCQlqKys7CiAJfQorI2lmZGVmIENPTkZJR19ISUdITUVNCisJaWYgKGhpZ2htZW0pIHsKKwkJY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKKworCQlpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7CisJCQkvKgorCQkJICogSW50ZXJhY3Rpb25zIGJldHdlZW4ga21hcCBhbmQgb3RoZXIgbWFwcGluZ3MKKwkJCSAqIG1ha2UgaGlnaG1lbSBzdXBwb3J0IHdpdGggYWxpYXNpbmcgVklQVCBjYWNoZXMKKwkJCSAqIHJhdGhlciBkaWZmaWN1bHQuCisJCQkgKi8KKwkJCXJlYXNvbiA9ICJ3aXRoIFZJUFQgYWxpYXNpbmcgY2FjaGUiOworI2lmZGVmIENPTkZJR19TTVAKKwkJfSBlbHNlIGlmICh0bGJfb3BzX25lZWRfYnJvYWRjYXN0KCkpIHsKKwkJCS8qCisJCQkgKiBrbWFwX2hpZ2ggbmVlZHMgdG8gb2NjYXNpb25hbGx5IGZsdXNoIFRMQiBlbnRyaWVzLAorCQkJICogaG93ZXZlciwgaWYgdGhlIFRMQiBlbnRyaWVzIG5lZWQgdG8gYmUgYnJvYWRjYXN0CisJCQkgKiB3ZSBtYXkgZGVhZGxvY2s6CisJCQkgKiAga21hcF9oaWdoKGlycXMgb2ZmKS0+Zmx1c2hfYWxsX3plcm9fcGttYXBzLT4KKwkJCSAqICBmbHVzaF90bGJfa2VybmVsX3JhbmdlLT5zbXBfY2FsbF9mdW5jdGlvbl9tYW55CisJCQkgKiAgIChtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBpcnFzIG9mZikKKwkJCSAqLworCQkJcmVhc29uID0gIndpdGhvdXQgaGFyZHdhcmUgVExCIG9wcyBicm9hZGNhc3RpbmciOworI2VuZGlmCisJCX0KKwkJaWYgKHJlYXNvbikgeworCQkJcHJpbnRrKEtFUk5fQ1JJVCAiSElHSE1FTSBpcyBub3Qgc3VwcG9ydGVkICVzLCBpZ25vcmluZyBoaWdoIG1lbW9yeVxuIiwKKwkJCQlyZWFzb24pOworCQkJd2hpbGUgKGogPiAwICYmIG1lbWluZm8uYmFua1tqIC0gMV0uaGlnaG1lbSkKKwkJCQlqLS07CisJCX0KKwl9CisjZW5kaWYKIAltZW1pbmZvLm5yX2JhbmtzID0gajsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcGFib3J0LWxlZ2FjeS5TIGIvYXJjaC9hcm0vbW0vcGFib3J0LWxlZ2FjeS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTcwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wYWJvcnQtbGVnYWN5LlMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKy8qCisgKiBGdW5jdGlvbjogbGVnYWN5X3BhYm9ydAorICoKKyAqIFBhcmFtcyAgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnRlZCBpbnN0cnVjdGlvbgorICoKKyAqIFJldHVybnMgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnQKKyAqCSAgIDogcjEgPSBTaW11bGF0ZWQgSUZTUiB3aXRoIHNlY3Rpb24gdHJhbnNsYXRpb24gZmF1bHQgc3RhdHVzCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IHByZWZldGNoIGFib3J0LgorICovCisKKwkuYWxpZ24JNQorRU5UUlkobGVnYWN5X3BhYm9ydCkKKwltb3YJcjEsICM1CisJbW92CXBjLCBscgorRU5EUFJPQyhsZWdhY3lfcGFib3J0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcGFib3J0LXY2LlMgYi9hcmNoL2FybS9tbS9wYWJvcnQtdjYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmUzZDFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcGFib3J0LXY2LlMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKy8qCisgKiBGdW5jdGlvbjogdjZfcGFib3J0CisgKgorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IElGU1IKKyAqCisgKiBQdXJwb3NlIDogb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgcHJlZmV0Y2ggYWJvcnQuCisgKi8KKworCS5hbGlnbgk1CitFTlRSWSh2Nl9wYWJvcnQpCisJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMQkJQCBnZXQgSUZTUgorCW1vdglwYywgbHIKK0VORFBST0ModjZfcGFib3J0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcGFib3J0LXY3LlMgYi9hcmNoL2FybS9tbS9wYWJvcnQtdjcuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIzYjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcGFib3J0LXY3LlMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKy8qCisgKiBGdW5jdGlvbjogdjZfcGFib3J0CisgKgorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IElGU1IKKyAqCisgKiBQdXJwb3NlIDogb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgcHJlZmV0Y2ggYWJvcnQuCisgKi8KKworCS5hbGlnbgk1CitFTlRSWSh2N19wYWJvcnQpCisJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMgkJQCBnZXQgSUZBUgorCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDEJCUAgZ2V0IElGU1IKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY3X3BhYm9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKaW5kZXggYjU1NTFiZi4uZDlmYjRiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKQEAgLTQ0OSw3ICs0NDksNyBAQAogCS50eXBlCWFybTEwMjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTEwMjBfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTEwMjBfcHJvY19maW4KIAkud29yZAljcHVfYXJtMTAyMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCmluZGV4IDhiYzY3NDAuLjc0NTNiNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKQEAgLTQzMCw3ICs0MzAsNyBAQAogCS50eXBlCWFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtMTAyMGVfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTEwMjBlX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTEwMjBlX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCmluZGV4IDJjZDAzZTYuLjhlYjcyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCkBAIC00MTMsNyArNDEzLDcgQEAKIAkudHlwZQlhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm0xMDIyX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm0xMDIyX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTEwMjJfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKaW5kZXggYWQ5NjFhOC4uM2I1OWYwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKQEAgLTQwOCw3ICs0MDgsNyBAQAogCS50eXBlCWFybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtMTAyNl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTEwMjZfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTEwMjZfcHJvY19maW4KIAkud29yZAljcHVfYXJtMTAyNl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKaW5kZXggODBkNmUxZC4uM2Y5Y2QzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJLnR5cGUJYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm02X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCWNwdV9hcm02X2RhdGFfYWJvcnQKLQkJLndvcmQJcGFib3J0X25vaWZhcgorCQkud29yZAlsZWdhY3lfcGFib3J0CiAJCS53b3JkCWNwdV9hcm02X3Byb2NfaW5pdAogCQkud29yZAljcHVfYXJtNl9wcm9jX2ZpbgogCQkud29yZAljcHVfYXJtNl9yZXNldApAQCAtMjk1LDcgKzI5NSw3IEBACiAJCS50eXBlCWFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zKQogCQkud29yZAljcHVfYXJtN19kYXRhX2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtN19wcm9jX2luaXQKIAkJLndvcmQJY3B1X2FybTdfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTdfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCmluZGV4IDg1YWUxODYuLjBiNjJkZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJCS50eXBlCWFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkJLndvcmQJdjR0X2xhdGVfYWJvcnQKLQkJLndvcmQJcGFib3J0X25vaWZhcgorCQkud29yZAlsZWdhY3lfcGFib3J0CiAJCS53b3JkCWNwdV9hcm03MjBfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm03MjBfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTcyMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKaW5kZXggNGY5NWJlZS4uMDE4NjBjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCkBAIC0xMjYsNyArMTI2LDcgQEAKIAkudHlwZQlhcm03NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtNzQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjR0X2xhdGVfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm03NDBfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTc0MF9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm03NDBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUwppbmRleCA5M2UwNWZhLi4xMjAxYjk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCkBAIC02NCw3ICs2NCw3IEBACiAJCS50eXBlCWFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCXY0dF9sYXRlX2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtN3RkbWlfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm03dGRtaV9wcm9jX2ZpbgogCQkud29yZAljcHVfYXJtN3RkbWlfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCmluZGV4IDkxNGQ2ODguLjJiN2MxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJLnR5cGUJYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTkyMF9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTIwX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTkyMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKaW5kZXggNTFjOWM5OC4uMDZhMWFhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCkBAIC0zOTksNyArMzk5LDcgQEAKIAkudHlwZQlhcm05MjJfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTIyX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05MjJfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTIyX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCAyNzI0NTI2Li5jYjUzNDM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCS50eXBlCWFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm05MjVfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05MjVfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTkyNV9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05MjVfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCmluZGV4IDU0NDY2OTMuLjFjNDg0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpAQCAtNDE1LDcgKzQxNSw3IEBACiAJLnR5cGUJYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY1dGpfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05MjZfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTkyNl9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05MjZfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCmluZGV4IGY1OTUxMTcuLjViMGY4NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJLnR5cGUJYXJtOTQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTk0MF9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCW5vbW11X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTQwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05NDBfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTQwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwppbmRleCBlMDNmNmZmLi40MGMwNDQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKQEAgLTM3Nyw3ICszNzcsNyBAQAogCS50eXBlCWFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm05NDZfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAlub21tdV9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTk0Nl9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTQ2X3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTk0Nl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCmluZGV4IGJlNmMxMWQuLjI4NTQ1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKQEAgLTY0LDcgKzY0LDcgQEAKIAkJLnR5cGUJYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkJLndvcmQJbm9tbXVfZWFybHlfYWJvcnQKLQkJLndvcmQJcGFib3J0X25vaWZhcgorCQkud29yZAlsZWdhY3lfcGFib3J0CiAJCS53b3JkCWNwdV9hcm05dGRtaV9wcm9jX2luaXQKIAkJLndvcmQJY3B1X2FybTl0ZG1pX3Byb2NfZmluCiAJCS53b3JkCWNwdV9hcm05dGRtaV9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCmluZGV4IDA4YjhhOTUuLjA4ZjVhYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCS50eXBlCWZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9mYTUyNl9wcm9jX2luaXQKIAkud29yZAljcHVfZmE1MjZfcHJvY19maW4KIAkud29yZAljcHVfZmE1MjZfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwppbmRleCAwZmUxZjhmLi5kMGQ3Nzk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCkBAIC00OTksNyArNDk5LDcgQEAKIAkudHlwZQlmZXJvY2Vvbl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBmZXJvY2Vvbl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2Zlcm9jZW9uX3Byb2NfaW5pdAogCS53b3JkCWNwdV9mZXJvY2Vvbl9wcm9jX2ZpbgogCS53b3JkCWNwdV9mZXJvY2Vvbl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKaW5kZXggNTQwZjUwNy4uNTJiNWZkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUworKysgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCkBAIC0zNTksNyArMzU5LDcgQEAKIAkudHlwZQltb2hhd2tfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjV0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfbW9oYXdrX3Byb2NfaW5pdAogCS53b3JkCWNwdV9tb2hhd2tfcHJvY19maW4KIAkud29yZAljcHVfbW9oYXdrX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKaW5kZXggOTBhN2U1Mi4uN2I3MDZiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJLnR5cGUJc2ExMTBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoc2ExMTBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2NF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X3NhMTEwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9zYTExMF9wcm9jX2ZpbgogCS53b3JkCWNwdV9zYTExMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggNDUxZTJkOS4uZWU3NzAwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkudHlwZQlzYTExMDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoc2ExMTAwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9zYTExMDBfcHJvY19pbml0CiAJLndvcmQJY3B1X3NhMTEwMF9wcm9jX2ZpbgogCS53b3JkCWNwdV9zYTExMDBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwppbmRleCA1MjRkZGFlLi43MGY3NWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCkBAIC0zMiw4ICszMiwxMCBAQAogCiAjaWZuZGVmIENPTkZJR19TTVAKICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9SR05fV0JXQQorI2RlZmluZSBQTURfRkxBR1MJUE1EX1NFQ1RfV0IKICNlbHNlCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfUkdOX1dCV0F8VFRCX1MKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCV0F8UE1EX1NFQ1RfUwogI2VuZGlmCiAKIEVOVFJZKGNwdV92Nl9wcm9jX2luaXQpCkBAIC0xOTEsNyArMTkzLDcgQEAKIAkudHlwZQl2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWSh2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY2X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCXY2X3BhYm9ydAogCS53b3JkCWNwdV92Nl9wcm9jX2luaXQKIAkud29yZAljcHVfdjZfcHJvY19maW4KIAkud29yZAljcHVfdjZfcmVzZXQKQEAgLTIyMiwxMCArMjI0LDkgQEAKIAkubG9uZwkweDAwMDdiMDAwCiAJLmxvbmcJMHgwMDA3ZjAwMAogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKLQkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKLQkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKLQkJUE1EX1NFQ1RfQVBfUkVBRAorCQlQTURfU0VDVF9BUF9SRUFEIHwgXAorCQlQTURfRkxBR1MKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCiAJCVBNRF9TRUNUX1hOIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCBmM2ZhMWMzLi4zYTI4NTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0zMyw5ICszMywxMSBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAvKiBQVFdzIGNhY2hlYWJsZSwgaW5uZXIgV0Igbm90IHNoYXJlYWJsZSwgb3V0ZXIgV0Igbm90IHNoYXJlYWJsZSAqLwogI2RlZmluZSBUVEJfRkxBR1MJVFRCX0lSR05fV0J8VFRCX1JHTl9PQ19XQgorI2RlZmluZSBQTURfRkxBR1MJUE1EX1NFQ1RfV0IKICNlbHNlCiAvKiBQVFdzIGNhY2hlYWJsZSwgaW5uZXIgV0JXQSBzaGFyZWFibGUsIG91dGVyIFdCV0Egbm90IHNoYXJlYWJsZSAqLwogI2RlZmluZSBUVEJfRkxBR1MJVFRCX0lSR05fV0JXQXxUVEJfU3xUVEJfTk9TfFRUQl9SR05fT0NfV0JXQQorI2RlZmluZSBQTURfRkxBR1MJUE1EX1NFQ1RfV0JXQXxQTURfU0VDVF9TCiAjZW5kaWYKIAogRU5UUlkoY3B1X3Y3X3Byb2NfaW5pdCkKQEAgLTE4NCw5ICsxODYsMTAgQEAKICAqLwogX192N19zZXR1cDoKICNpZmRlZiBDT05GSUdfU01QCi0JbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQkJQCBFbmFibGUgU01QL25BTVAgbW9kZSBhbmQKLQlvcnIJcjAsIHIwLCAjKDEgPDwgNikgfCAoMSA8PCAwKQlAIFRMQiBvcHMgYnJvYWRjYXN0aW5nCi0JbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDEKKwl0c3QJcjAsICMoMSA8PCA2KQkJCUAgU01QL25BTVAgbW9kZSBlbmFibGVkPworCW9ycmVxCXIwLCByMCwgIygxIDw8IDYpIHwgKDEgPDwgMCkJQCBFbmFibGUgU01QL25BTVAgbW9kZSBhbmQKKwltY3JlcQlwMTUsIDAsIHIwLCBjMSwgYzAsIDEJCUAgVExCIG9wcyBicm9hZGNhc3RpbmcKICNlbmRpZgogCWFkcglyMTIsIF9fdjdfc2V0dXBfc3RhY2sJCUAgdGhlIGxvY2FsIHN0YWNrCiAJc3RtaWEJcjEyLCB7cjAtcjUsIHI3LCByOSwgcjExLCBscn0KQEAgLTI5NSw3ICsyOTgsNyBAQAogCS50eXBlCXY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjdfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfaWZhcgorCS53b3JkCXY3X3BhYm9ydAogCS53b3JkCWNwdV92N19wcm9jX2luaXQKIAkud29yZAljcHVfdjdfcHJvY19maW4KIAkud29yZAljcHVfdjdfcmVzZXQKQEAgLTMyNiwxMCArMzI5LDkgQEAKIAkubG9uZwkweDAwMGYwMDAwCQlAIFJlcXVpcmVkIElEIHZhbHVlCiAJLmxvbmcJMHgwMDBmMDAwMAkJQCBNYXNrIGZvciBJRAogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKLQkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKLQkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKLQkJUE1EX1NFQ1RfQVBfUkVBRAorCQlQTURfU0VDVF9BUF9SRUFEIHwgXAorCQlQTURfRkxBR1MKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCiAJCVBNRF9TRUNUX1hOIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggMzM1MTVjMi4uMjAyOGYzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTQyOCw3ICs0MjgsNyBAQAogCS50eXBlCXhzYzNfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoeHNjM19wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X3hzYzNfcHJvY19pbml0CiAJLndvcmQJY3B1X3hzYzNfcHJvY19maW4KIAkud29yZAljcHVfeHNjM19yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKaW5kZXggNDIzMzk0Mi4uZjA1NmMyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC01MTEsNyArNTExLDcgQEAKIAkudHlwZQl4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjV0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfeHNjYWxlX3Byb2NfaW5pdAogCS53b3JkCWNwdV94c2NhbGVfcHJvY19maW4KIAkud29yZAljcHVfeHNjYWxlX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYwppbmRleCBmZTU4MTM4Li5mN2QyZWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKQEAgLTMzLDYgKzMzLDkgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgogCTMsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9CQ01SSU5HCisJSVJRX1BNVUlSUSwgLyogZm9yIEJDTVJJTkcsIEFSTSBQTVUgaW50ZXJydXB0IGlzIDQzICovCisjZW5kaWYKIH07CiAKIHN0YXRpYyB2b2lkIGFybXY2X3BtdV9zdG9wKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCmluZGV4IDc3ZmE3Y2MuLmNlMzFmMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCkBAIC0yNTcsNyArMjU3LDggQEAKIAkqSU9QM1hYX09VTVdUVlIwID0gMDsKIAogCS8qIE91dGJvdW5kIHdpbmRvdyAxICovCi0JKklPUDNYWF9PTVdUVlIxID0gSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEgKyBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRTsKKwkqSU9QM1hYX09NV1RWUjEgPSBJT1AzWFhfUENJX0xPV0VSX01FTV9CQSArCisJCQkgIElPUDNYWF9QQ0lfTUVNX1dJTkRPV19TSVpFIC8gMjsKIAkqSU9QM1hYX09VTVdUVlIxID0gMDsKIAogCS8qIEJBUiAzICggRGlzYWJsZWQgKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCmluZGV4IDM2OTViYmUuLjhkYTk1ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKQEAgLTg1LDcgKzg1LDcgQEAKIHsKIAl1MzIgdGltZXJfY3RsOwogCi0JdGlja3NfcGVyX2ppZmZ5ID0gKHRpY2tfcmF0ZSArIEhaLzIpIC8gSFo7CisJdGlja3NfcGVyX2ppZmZ5ID0gRElWX1JPVU5EX0NMT1NFU1QodGlja19yYXRlLCBIWik7CiAJdGlja3NfcGVyX3VzZWMgPSB0aWNrX3JhdGUgLyAxMDAwMDAwOwogCW5leHRfamlmZnlfdGltZSA9IDB4ZmZmZmZmZmY7CiAJaW9wX3RpY2tfcmF0ZSA9IHRpY2tfcmF0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKaW5kZXggMTg2OGMwZC4uMzQxMjM1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCX0KIAogCS8qIEZJWE1FOiB3aGF0J3MgdGhlIGFjdHVhbCB0cmFuc2l0aW9uIHRpbWU/ICovCi0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwICogMTAwMCAqIDEwMDA7CisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDMwMCAqIDEwMDA7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBmZDMxNTRhLi42OGVhYWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC02OTEsMTMgKzY5MSwxNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2VuYWJsZV9pcnFfbGNoKGludCBsY2gpCiB7CiAJdTMyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFjcHVfY2xhc3NfaXNfb21hcDIoKSkKIAkJcmV0dXJuOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAl2YWwgPSBkbWFfcmVhZChJUlFFTkFCTEVfTDApOwogCXZhbCB8PSAxIDw8IGxjaDsKIAlkbWFfd3JpdGUodmFsLCBJUlFFTkFCTEVfTDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IG9tYXBfcmVxdWVzdF9kbWEoaW50IGRldl9pZCwgY29uc3QgY2hhciAqZGV2X25hbWUsCkBAIC03OTksMTAgKzgwMiwxMyBAQAogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7CiAJCXUzMiB2YWw7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJCXZhbCA9IGRtYV9yZWFkKElSUUVOQUJMRV9MMCk7CiAJCXZhbCAmPSB+KDEgPDwgbGNoKTsKIAkJZG1hX3dyaXRlKHZhbCwgSVJRRU5BQkxFX0wwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogCiAJCS8qIENsZWFyIHRoZSBDU1IgcmVnaXN0ZXIgYW5kIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkJZG1hX3dyaXRlKE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSywgQ1NSKGxjaCkpOwpAQCAtODI5LDEwICs4MzUsMTAgQEAKICAqCiAgKiBAcGFyYW0gYXJiX3JhdGUKICAqIEBwYXJhbSBtYXhfZmlmb19kZXB0aAotICogQHBhcmFtIHRwYXJhbXMgLSBOdW1iZXIgb2YgdGhlcmVhZHMgdG8gcmVzZXJ2ZSA6IERNQV9USFJFQURfUkVTRVJWRV9OT1JNCi0gKiAJCQkJCQkgICAgRE1BX1RIUkVBRF9SRVNFUlZFX09ORVQKLSAqIAkJCQkJCSAgICBETUFfVEhSRUFEX1JFU0VSVkVfVFdPVAotICogCQkJCQkJICAgIERNQV9USFJFQURfUkVTRVJWRV9USFJFRVQKKyAqIEBwYXJhbSB0cGFyYW1zIC0gTnVtYmVyIG9mIHRocmVhZHMgdG8gcmVzZXJ2ZSA6IERNQV9USFJFQURfUkVTRVJWRV9OT1JNCisgKiAJCQkJCQkgICBETUFfVEhSRUFEX1JFU0VSVkVfT05FVAorICogCQkJCQkJICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RXT1QKKyAqIAkJCQkJCSAgIERNQV9USFJFQURfUkVTRVJWRV9USFJFRVQKICAqLwogdm9pZAogb21hcF9kbWFfc2V0X2dsb2JhbF9wYXJhbXMoaW50IGFyYl9yYXRlLCBpbnQgbWF4X2ZpZm9fZGVwdGgsIGludCB0cGFyYW1zKQpAQCAtODQ0LDExICs4NTAsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAorCWlmIChtYXhfZmlmb19kZXB0aCA9PSAwKQorCQltYXhfZmlmb19kZXB0aCA9IDE7CiAJaWYgKGFyYl9yYXRlID09IDApCiAJCWFyYl9yYXRlID0gMTsKIAotCXJlZyA9IChhcmJfcmF0ZSAmIDB4ZmYpIDw8IDE2OwotCXJlZyB8PSAoMHhmZiAmIG1heF9maWZvX2RlcHRoKTsKKwlyZWcgPSAweGZmICYgbWF4X2ZpZm9fZGVwdGg7CisJcmVnIHw9ICgweDMgJiB0cGFyYW1zKSA8PCAxMjsKKwlyZWcgfD0gKGFyYl9yYXRlICYgMHhmZikgPDwgMTY7CiAKIAlkbWFfd3JpdGUocmVnLCBHQ1IpOwogfQpAQCAtOTc1LDYgKzk4NCwxNCBAQAogewogCXUzMiBsOwogCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBvbiB0aGUgY2hhbm5lbCAqLworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJZG1hX3dyaXRlKDAsIENJQ1IobGNoKSk7CisKKwlsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOworCWwgJj0gfk9NQVBfRE1BX0NDUl9FTjsKKwlkbWFfd3JpdGUobCwgQ0NSKGxjaCkpOworCiAJaWYgKCFvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSAmJiBkbWFfY2hhbltsY2hdLm5leHRfbGNoICE9IC0xKSB7CiAJCWludCBuZXh0X2xjaCwgY3VyX2xjaCA9IGxjaDsKIAkJY2hhciBkbWFfY2hhbl9saW5rX21hcFtPTUFQX0RNQTRfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwpAQCAtOTkyLDE4ICsxMDA5LDggQEAKIAkJCW5leHRfbGNoID0gZG1hX2NoYW5bY3VyX2xjaF0ubmV4dF9sY2g7CiAJCQljdXJfbGNoID0gbmV4dF9sY2g7CiAJCX0gd2hpbGUgKG5leHRfbGNoICE9IC0xKTsKLQotCQlyZXR1cm47CiAJfQogCi0JLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBvbiB0aGUgY2hhbm5lbCAqLwotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJZG1hX3dyaXRlKDAsIENJQ1IobGNoKSk7Ci0KLQlsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOwotCWwgJj0gfk9NQVBfRE1BX0NDUl9FTjsKLQlkbWFfd3JpdGUobCwgQ0NSKGxjaCkpOwotCiAJZG1hX2NoYW5bbGNoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX3N0b3BfZG1hKTsKQEAgLTExMDcsNiArMTExNCwxNCBAQAogewogCWludCBsY2g7CiAKKwkvKgorCSAqIE9uIE9NQVAxNTEwLCBpbnRlcm5hbCBMQ0QgY29udHJvbGxlciB3aWxsIHN0YXJ0IHRoZSB0cmFuc2ZlcgorCSAqIHdoZW4gaXQgZ2V0cyBlbmFibGVkLCBzbyBhc3N1bWUgRE1BIHJ1bm5pbmcgaWYgTENEIGVuYWJsZWQuCisJICovCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQlpZiAob21hcF9yZWFkdygweGZmZmVjMDAwICsgMHgwMCkgJiAoMSA8PCAwKSkKKwkJCXJldHVybiAxOworCiAJLyogQ2hlY2sgaWYgTENEIERNQSBpcyBydW5uaW5nICovCiAJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQogCQlpZiAob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiBPTUFQX0RNQV9DQ1JfRU4pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCA2OTM4MzljLi43YzM0NWI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzg1MFs3XSA9IHsKLQl7IE9NQVAxX01QVUlPX0JBU0UsICAgICBJTlRfODUwX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwJTUVUSE9EX01QVUlPIH0sCisJeyBPTUFQMV9NUFVJT19WQkFTRSwgICAgIElOVF84NTBfTVBVSU8sCSAgICBJSF9NUFVJT19CQVNFLAlNRVRIT0RfTVBVSU8gfSwKIAl7IE9NQVA4NTBfR1BJTzFfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LMSwgIElIX0dQSU9fQkFTRSwJTUVUSE9EX0dQSU9fODUwIH0sCiAJeyBPTUFQODUwX0dQSU8yX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzIsICBJSF9HUElPX0JBU0UgKyAzMiwJTUVUSE9EX0dQSU9fODUwIH0sCiAJeyBPTUFQODUwX0dQSU8zX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzMsICBJSF9HUElPX0JBU0UgKyA2NCwJTUVUSE9EX0dQSU9fODUwIH0sCkBAIC0zNzMsNyArMzczLDcgQEAKIAogc3RhdGljIGludCBjaGVja19ncGlvKGludCBncGlvKQogewotCWlmICh1bmxpa2VseShncGlvX3ZhbGlkKGdwaW8pKSA8IDApIHsKKwlpZiAodW5saWtlbHkoZ3Bpb192YWxpZChncGlvKSA8IDApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAib21hcC1ncGlvOiBpbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW8pOwogCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDExZTczZDkuLmYxMjllZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMzAzLDMyICszMDMsMjEgQEAKICNkZWZpbmUgY3B1X2lzX29tYXAyNDMwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAzNDMwKCkJCTAKIAotI2lmIGRlZmluZWQoTVVMVElfT01BUDEpCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDczMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQotIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCi0jICB1bmRlZiAgY3B1X2lzX29tYXA4NTAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDg1MCgpCQlpc19vbWFwODUwKCkKLSMgZW5kaWYKLSNlbHNlCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDczMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTEKLSMgZW5kaWYKLSNlbmRpZgotI2Vsc2UKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwODUwCi0jICBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJMQotIyBlbmRpZgotI2VuZGlmCi0KIC8qCiAgKiBXaGV0aGVyIHdlIGhhdmUgTVVMVElfT01BUDEgb3Igbm90LCB3ZSBzdGlsbCBuZWVkIHRvIGRpc3Rpbmd1aXNoCi0gKiBiZXR3ZWVuIDMzMCB2cy4gMTUxMCBhbmQgMTYxMUIvNTkxMiB2cy4gMTcxMC4KKyAqIGJldHdlZW4gNzMwIHZzIDg1MCwgMzMwIHZzLiAxNTEwIGFuZCAxNjExQi81OTEyIHZzLiAxNzEwLgogICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisjIHVuZGVmICBjcHVfaXNfb21hcDczMAorIyBkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJaXNfb21hcDczMCgpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKKyMgdW5kZWYgIGNwdV9pc19vbWFwODUwCisjIGRlZmluZSBjcHVfaXNfb21hcDg1MCgpCQlpc19vbWFwODUwKCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKICMgdW5kZWYgIGNwdV9pc19vbWFwMzEwCiAjIHVuZGVmICBjcHVfaXNfb21hcDE1MTAKQEAgLTQzMywzICs0MjIsNSBAQAogCiBpbnQgb21hcF9jaGlwX2lzKHN0cnVjdCBvbWFwX2NoaXBfaWQgb2NpKTsKIHZvaWQgb21hcDJfY2hlY2tfcmV2aXNpb24odm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmgKaW5kZXggNDVlYTNhZS4uM2FlNTJjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaWZuZGVmIEFTTUFSTV9BUkNIX0tFWVBBRF9ICiAjZGVmaW5lIEFTTUFSTV9BUkNIX0tFWVBBRF9ICiAKKyN3YXJuaW5nOiBQbGVhc2UgdXBkYXRlIHRoZSBib2FyZCB0byB1c2UgbWF0cml4X2tleXBhZC5oIGluc3RlYWQKKwogc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSB7CiAJaW50IHJvd3M7CiAJaW50IGNvbHM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAppbmRleCA5OGRmYWI2Li4wZjQ5ZDJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKQEAgLTg0MCwxMiArODQwLDE0IEBACiAJICovCiAJQUYyNl8zNFhYX0dQSU8wLAogCUFGMjJfMzRYWF9HUElPOSwKKwlBRzlfMzRYWF9HUElPMjMsCiAJQUg4XzM0WFhfR1BJTzI5LAogCVU4XzM0WFhfR1BJTzU0X09VVCwKIAlVOF8zNFhYX0dQSU81NF9ET1dOLAogCUw4XzM0WFhfR1BJTzYzLAogCUcyNV8zNFhYX0dQSU84Nl9PVVQsCiAJQUc0XzM0WFhfR1BJTzEzNF9PVVQsCisJQUY0XzM0WFhfR1BJTzEzNV9PVVQsCiAJQUU0XzM0WFhfR1BJTzEzNl9PVVQsCiAJQUY2XzM0WFhfR1BJTzE0MF9VUCwKIAlBRTZfMzRYWF9HUElPMTQxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCmluZGV4IDYyNzFkODUuLmZhNjQ2MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKQEAgLTEzNSw2ICsxMzUsOCBAQAogCiBpbnQgcHdyZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVzZXIpLAogCQkJdm9pZCAqdXNlcik7CitpbnQgcHdyZG1fZm9yX2VhY2hfbm9sb2NrKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCXZvaWQgKnVzZXIpOwogCiBpbnQgcHdyZG1fYWRkX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogaW50IHB3cmRtX2RlbF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggNGI2MDEyNy4uOTQ1ODRmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogCQluZW50ID0gMTsgLyogZm9yIHRoZSBuZXh0IEwxIGVudHJ5ICovCiAJfSBlbHNlIHsKIAkJYnl0ZXMgPSBJT1BHRF9TSVpFOwotCQlpZiAoKmlvcGdkICYgSU9QR0RfU1VQRVIpIHsKKwkJaWYgKCgqaW9wZ2QgJiBJT1BHRF9TVVBFUikgPT0gSU9QR0RfU1VQRVIpIHsKIAkJCW5lbnQgKj0gMTY7CiAJCQkvKiByZXdpbmQgdG8gdGhlIDFzdCBlbnRyeSAqLwogCQkJaW9wZ2QgPSAodTMyICopKCh1MzIpaW9wZ2QgJiBJT1NVUEVSX01BU0spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwppbmRleCA2ZmM1MmZjLi5kYzNmYWMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwpAQCAtNDcsNyArNDcsNyBAQAogICoJJ3ZhJzoJbXB1IHZpcnR1YWwgYWRkcmVzcwogICoKICAqCSdjJzoJY29udGlndW91cyBtZW1vcnkgYXJlYQotICoJJ2QnOglkaWNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEKKyAqCSdkJzoJZGlzY29udGlndW91cyBtZW1vcnkgYXJlYQogICoJJ2EnOglhbm9ueW1vdXMgbWVtb3J5IGFsbG9jYXRpb24KICAqCScoKSc6CW9wdGlvbmFsIGZlYXR1cmUKICAqCkBAIC0xOTksNyArMTk5LDggQEAKIAkJdmEgKz0gYnl0ZXM7CiAJfQogCi0JZmx1c2hfY2FjaGVfdm1hcChuZXctPmFkZHIsIG5ldy0+YWRkciArIHRvdGFsKTsKKwlmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKW5ldy0+YWRkciwKKwkJCQkodW5zaWduZWQgbG9uZykobmV3LT5hZGRyICsgdG90YWwpKTsKIAlyZXR1cm4gbmV3LT5hZGRyOwogCiBlcnJfb3V0OgpAQCAtMzYyLDggKzM2Myw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAl2YSA9IGFyZWEtPnZhOwotCW11dGV4X3VubG9jaygmb2JqLT5tbWFwX2xvY2spOwogb3V0OgorCW11dGV4X3VubG9jaygmb2JqLT5tbWFwX2xvY2spOworCiAJcmV0dXJuIHZhOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGFfdG9fdmEpOwpAQCAtMzkwLDE0ICszOTIsMTQgQEAKIAl9CiAKIAl2YV9lbmQgPSBfdmEgKyBQQUdFX1NJWkUgKiBpOwotCWZsdXNoX2NhY2hlX3ZtYXAoX3ZhLCB2YV9lbmQpOworCWZsdXNoX2NhY2hlX3ZtYXAoKHVuc2lnbmVkIGxvbmcpX3ZhLCAodW5zaWduZWQgbG9uZyl2YV9lbmQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2d0YWJsZV9kcmFpbl92bWFsbG9jKHN0cnVjdCBzZ190YWJsZSAqc2d0KQogewogCS8qCiAJICogQWN0dWFsbHkgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGF0IGFsbCwganVzdCBleGlzdHMgZm9yCi0JICogY29uc2lzdGVuY3kgb2YgdGhlIGNvZGUgcmVhZGliaWxpdHkuCisJICogY29uc2lzdGVuY3kgb2YgdGhlIGNvZGUgcmVhZGFiaWxpdHkuCiAJICovCiAJQlVHX09OKCFzZ3QpOwogfQpAQCAtNDMzLDcgKzQzNSw3IEBACiB7CiAJLyoKIAkgKiBBY3R1YWxseSB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYXQgYWxsLCBqdXN0IGV4aXN0cyBmb3IKLQkgKiBjb25zaXN0ZW5jeSBvZiB0aGUgY29kZSByZWFkaWJpbGl0eQorCSAqIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlIHJlYWRhYmlsaXR5CiAJICovCiAJQlVHX09OKCFzZ3QpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCA4OGFjOTc2Li5lNjY0YjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAJcnggJj0gMTsKIAlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ0NSKTsKLQkJdyB8PSAodHggPyBSRElTQUJMRSA6IDApOworCQl3IHw9IChyeCA/IFJESVNBQkxFIDogMCk7CiAJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgdyk7CiAJfQogCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggOTI1ZjY0Ny4uNzVkMWYyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0yNzAsNyArMjcwLDggQEAKIAlvbWFwX3NyYW1fY2VpbCAtPSBzaXplOwogCW9tYXBfc3JhbV9jZWlsID0gUk9VTkRfRE9XTihvbWFwX3NyYW1fY2VpbCwgc2l6ZW9mKHZvaWQgKikpOwogCW1lbWNweSgodm9pZCAqKW9tYXBfc3JhbV9jZWlsLCBzdGFydCwgc2l6ZSk7Ci0JZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXN0YXJ0LCAodW5zaWduZWQgbG9uZykoc3RhcnQgKyBzaXplKSk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKW9tYXBfc3JhbV9jZWlsLAorCQkodW5zaWduZWQgbG9uZykob21hcF9zcmFtX2NlaWwgKyBzaXplKSk7CiAKIAlyZXR1cm4gKHZvaWQgKilvbWFwX3NyYW1fY2VpbDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMKaW5kZXggNzBhZWVlNC4uMjk3NTc5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMKQEAgLTE3LDIyICsxNywyNjYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAorI2RlZmluZSBETUFfREVCVUdfTkFNRQkJInB4YV9kbWEiCisjZGVmaW5lIERNQV9NQVhfUkVRVUVTVEVSUwk2NAorCiBzdHJ1Y3QgZG1hX2NoYW5uZWwgewogCWNoYXIgKm5hbWU7CiAJcHhhX2RtYV9wcmlvIHByaW87CiAJdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKik7CiAJdm9pZCAqZGF0YTsKKwlzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRtYV9jaGFubmVsICpkbWFfY2hhbm5lbHM7CiBzdGF0aWMgaW50IG51bV9kbWFfY2hhbm5lbHM7CiAKKy8qCisgKiBEZWJ1ZyBmcworICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGJnZnNfcm9vdCwgKmRiZ2ZzX3N0YXRlLCAqKmRiZ2ZzX2NoYW47CisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfcmVxdWVzdGVyX2NoYW4oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBwb3MgPSAwOworCWludCBjaGFuID0gKGludClzLT5wcml2YXRlOworCWludCBpOworCXUzMiBkcmNtcjsKKworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJETUEgY2hhbm5lbCAlZCByZXF1ZXN0ZXJzIGxpc3QgOlxuIiwgY2hhbik7CisJZm9yIChpID0gMDsgaSA8IERNQV9NQVhfUkVRVUVTVEVSUzsgaSsrKSB7CisJCWRyY21yID0gRFJDTVIoaSk7CisJCWlmICgoZHJjbXIgJiBEUkNNUl9DSExOVU0pID09IGNoYW4pCisJCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHRSZXF1ZXN0ZXIgJWQgKE1BUFZMRD0lZClcbiIsIGksCisJCQkJCSAgISEoZHJjbXIgJiBEUkNNUl9NQVBWTEQpKTsKKwl9CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGJnX2J1cnN0X2Zyb21fZGNtZCh1MzIgZGNtZCkKK3sKKwlpbnQgYnVyc3QgPSAoZGNtZCA+PiAxNikgJiAweDM7CisKKwlyZXR1cm4gYnVyc3QgPyA0IDw8IGJ1cnN0IDogMDsKK30KKworc3RhdGljIGludCBpc19waHlzX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gcGZuX3ZhbGlkKF9fcGh5c190b19wZm4oYWRkcikpOworfQorCisjZGVmaW5lIERDU1JfU1RSKGZsYWcpIChkY3NyICYgRENTUl8jI2ZsYWcgPyAjZmxhZyIgIiA6ICIiKQorI2RlZmluZSBEQ01EX1NUUihmbGFnKSAoZGNtZCAmIERDTURfIyNmbGFnID8gI2ZsYWciICIgOiAiIikKKworc3RhdGljIGludCBkYmdfc2hvd19kZXNjcmlwdG9ycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJaW50IHBvcyA9IDA7CisJaW50IGNoYW4gPSAoaW50KXMtPnByaXZhdGU7CisJaW50IGksIG1heF9zaG93ID0gMjAsIGJ1cnN0LCB3aWR0aDsKKwl1MzIgZGNtZDsKKwl1bnNpZ25lZCBsb25nIHBoeXNfZGVzYzsKKwlzdHJ1Y3QgcHhhX2RtYV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX2NoYW5uZWxzW2NoYW5dLmxvY2ssIGZsYWdzKTsKKwlwaHlzX2Rlc2MgPSBEREFEUihjaGFuKTsKKworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJETUEgY2hhbm5lbCAlZCBkZXNjcmlwdG9ycyA6XG4iLCBjaGFuKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiWyUwM2RdIEZpcnN0IGRlc2NyaXB0b3IgdW5rbm93blxuIiwgMCk7CisJZm9yIChpID0gMTsgaSA8IG1heF9zaG93ICYmIGlzX3BoeXNfdmFsaWQocGh5c19kZXNjKTsgaSsrKSB7CisJCWRlc2MgPSBwaHlzX3RvX3ZpcnQocGh5c19kZXNjKTsKKwkJZGNtZCA9IGRlc2MtPmRjbWQ7CisJCWJ1cnN0ID0gZGJnX2J1cnN0X2Zyb21fZGNtZChkY21kKTsKKwkJd2lkdGggPSAoMSA8PCAoKGRjbWQgPj4gMTQpICYgMHgzKSkgPj4gMTsKKworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiWyUwM2RdIERlc2MgYXQgJTA4bHgodmlydCAlcClcbiIsCisJCQkJICBpLCBwaHlzX2Rlc2MsIGRlc2MpOworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREREFEUiA9ICUwOHhcbiIsIGRlc2MtPmRkYWRyKTsKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlx0RFNBRFIgPSAlMDh4XG4iLCBkZXNjLT5kc2Fkcik7CisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERUQURSID0gJTA4eFxuIiwgZGVzYy0+ZHRhZHIpOworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREQ01EICA9ICUwOHggKCVzJXMlcyVzJXMlcyVzYnVyc3Q9JWQiCisJCQkJICAiIHdpZHRoPSVkIGxlbj0lZClcbiIsCisJCQkJICBkY21kLAorCQkJCSAgRENNRF9TVFIoSU5DU1JDQUREUiksIERDTURfU1RSKElOQ1RSR0FERFIpLAorCQkJCSAgRENNRF9TVFIoRkxPV1NSQyksIERDTURfU1RSKEZMT1dUUkcpLAorCQkJCSAgRENNRF9TVFIoU1RBUlRJUlFFTiksIERDTURfU1RSKEVORElSUUVOKSwKKwkJCQkgIERDTURfU1RSKEVORElBTiksIGJ1cnN0LCB3aWR0aCwKKwkJCQkgIGRjbWQgJiBEQ01EX0xFTkdUSCk7CisJCXBoeXNfZGVzYyA9IGRlc2MtPmRkYWRyOworCX0KKwlpZiAoaSA9PSBtYXhfc2hvdykKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlslMDNkXSBEZXNjIGF0ICUwOGx4IC4uLiBtYXggZGlzcGxheSByZWFjaGVkXG4iLAorCQkJCSAgaSwgcGh5c19kZXNjKTsKKwllbHNlCisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJbJTAzZF0gRGVzYyBhdCAlMDhseCBpcyAlc1xuIiwKKwkJCQkgIGksIHBoeXNfZGVzYywgcGh5c19kZXNjID09IEREQURSX1NUT1AgPworCQkJCSAgIkREQURSX1NUT1AiIDogImludmFsaWQiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFubmVsc1tjaGFuXS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludCBkYmdfc2hvd19jaGFuX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlpbnQgcG9zID0gMDsKKwlpbnQgY2hhbiA9IChpbnQpcy0+cHJpdmF0ZTsKKwl1MzIgZGNzciwgZGNtZDsKKwlpbnQgYnVyc3QsIHdpZHRoOworCXN0YXRpYyBjaGFyICpzdHJfcHJpb1tdID0geyAiaGlnaCIsICJub3JtYWwiLCAibG93IiB9OworCisJZGNzciA9IERDU1IoY2hhbik7CisJZGNtZCA9IERDTUQoY2hhbik7CisJYnVyc3QgPSBkYmdfYnVyc3RfZnJvbV9kY21kKGRjbWQpOworCXdpZHRoID0gKDEgPDwgKChkY21kID4+IDE0KSAmIDB4MykpID4+IDE7CisKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiRE1BIGNoYW5uZWwgJWRcbiIsIGNoYW4pOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdFByaW9yaXR5IDogJXNcbiIsCisJCQkgIHN0cl9wcmlvW2RtYV9jaGFubmVsc1tjaGFuXS5wcmlvXSk7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0VW5hbGlnbmVkIHRyYW5zZmVyIGJpdDogJXNcbiIsCisJCQkgIERBTEdOICYgKDEgPDwgY2hhbikgPyAieWVzIiA6ICJubyIpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERDU1IgID0gJTA4eCAoJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzKVxuIiwKKwkJCSAgZGNzciwgRENTUl9TVFIoUlVOKSwgRENTUl9TVFIoTk9ERVNDKSwKKwkJCSAgRENTUl9TVFIoU1RPUElSUUVOKSwgRENTUl9TVFIoRU9SSVJRRU4pLAorCQkJICBEQ1NSX1NUUihFT1JKTVBFTiksIERDU1JfU1RSKEVPUlNUT1BFTiksCisJCQkgIERDU1JfU1RSKFNFVENNUFNUKSwgRENTUl9TVFIoQ0xSQ01QU1QpLAorCQkJICBEQ1NSX1NUUihDTVBTVCksIERDU1JfU1RSKEVPUklOVFIpLCBEQ1NSX1NUUihSRVFQRU5EKSwKKwkJCSAgRENTUl9TVFIoU1RPUFNUQVRFKSwgRENTUl9TVFIoRU5ESU5UUiksCisJCQkgIERDU1JfU1RSKFNUQVJUSU5UUiksIERDU1JfU1RSKEJVU0VSUikpOworCisJcG9zICs9IHNlcV9wcmludGYocywgIlx0RENNRCAgPSAlMDh4ICglcyVzJXMlcyVzJXMlc2J1cnN0PSVkIHdpZHRoPSVkIgorCQkJICAiIGxlbj0lZClcbiIsCisJCQkgIGRjbWQsCisJCQkgIERDTURfU1RSKElOQ1NSQ0FERFIpLCBEQ01EX1NUUihJTkNUUkdBRERSKSwKKwkJCSAgRENNRF9TVFIoRkxPV1NSQyksIERDTURfU1RSKEZMT1dUUkcpLAorCQkJICBEQ01EX1NUUihTVEFSVElSUUVOKSwgRENNRF9TVFIoRU5ESVJRRU4pLAorCQkJICBEQ01EX1NUUihFTkRJQU4pLCBidXJzdCwgd2lkdGgsIGRjbWQgJiBEQ01EX0xFTkdUSCk7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0RFNBRFIgPSAlMDh4XG4iLCBEU0FEUihjaGFuKSk7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0RFRBRFIgPSAlMDh4XG4iLCBEVEFEUihjaGFuKSk7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0RERBRFIgPSAlMDh4XG4iLCBEREFEUihjaGFuKSk7CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludCBkYmdfc2hvd19zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJaW50IHBvcyA9IDA7CisKKwkvKiBiYXNpYyBkZXZpY2Ugc3RhdHVzICovCisJcG9zICs9IHNlcV9wcmludGYocywgIkRNQSBlbmdpbmUgc3RhdHVzXG4iKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHRDaGFubmVsIG51bWJlcjogJWRcbiIsIG51bV9kbWFfY2hhbm5lbHMpOworCisJcmV0dXJuIHBvczsKK30KKworI2RlZmluZSBEQkdGU19GVU5DX0RFQ0wobmFtZSkgXAorc3RhdGljIGludCBkYmdfb3Blbl8jI25hbWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpIFwKK3sgXAorCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYmdfc2hvd18jI25hbWUsIGlub2RlLT5pX3ByaXZhdGUpOyBcCit9IFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRiZ19mb3BzXyMjbmFtZSA9IHsgXAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwgXAorCS5vcGVuCQk9IGRiZ19vcGVuXyMjbmFtZSwgXAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLCBcCisJLnJlYWQJCT0gc2VxX3JlYWQsIFwKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLCBcCit9CisKK0RCR0ZTX0ZVTkNfREVDTChzdGF0ZSk7CitEQkdGU19GVU5DX0RFQ0woY2hhbl9zdGF0ZSk7CitEQkdGU19GVU5DX0RFQ0woZGVzY3JpcHRvcnMpOworREJHRlNfRlVOQ19ERUNMKHJlcXVlc3Rlcl9jaGFuKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKnB4YV9kbWFfZGJnX2FsbG9jX2NoYW4oaW50IGNoLCBzdHJ1Y3QgZGVudHJ5ICpjaGFuZGlyKQoreworCWNoYXIgY2hhbl9uYW1lWzExXTsKKwlzdHJ1Y3QgZGVudHJ5ICpjaGFuLCAqY2hhbl9zdGF0ZSA9IE5VTEwsICpjaGFuX2Rlc2NyID0gTlVMTDsKKwlzdHJ1Y3QgZGVudHJ5ICpjaGFuX3JlcXMgPSBOVUxMOworCXZvaWQgKmR0OworCisJc2NucHJpbnRmKGNoYW5fbmFtZSwgc2l6ZW9mKGNoYW5fbmFtZSksICIlZCIsIGNoKTsKKwljaGFuID0gZGVidWdmc19jcmVhdGVfZGlyKGNoYW5fbmFtZSwgY2hhbmRpcik7CisJZHQgPSAodm9pZCAqKWNoOworCisJaWYgKGNoYW4pCisJCWNoYW5fc3RhdGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0ZSIsIDA0MDAsIGNoYW4sIGR0LAorCQkJCQkJICZkYmdfZm9wc19jaGFuX3N0YXRlKTsKKwlpZiAoY2hhbl9zdGF0ZSkKKwkJY2hhbl9kZXNjciA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlc2NyaXB0b3JzIiwgMDQwMCwgY2hhbiwgZHQsCisJCQkJCQkgJmRiZ19mb3BzX2Rlc2NyaXB0b3JzKTsKKwlpZiAoY2hhbl9kZXNjcikKKwkJY2hhbl9yZXFzID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVxdWVzdGVycyIsIDA0MDAsIGNoYW4sIGR0LAorCQkJCQkJJmRiZ19mb3BzX3JlcXVlc3Rlcl9jaGFuKTsKKwlpZiAoIWNoYW5fcmVxcykKKwkJZ290byBlcnJfc3RhdGU7CisKKwlyZXR1cm4gY2hhbjsKKworZXJyX3N0YXRlOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjaGFuKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcHhhX2RtYV9pbml0X2RlYnVnZnModm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGVudHJ5ICpjaGFuZGlyOworCisJZGJnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihETUFfREVCVUdfTkFNRSwgTlVMTCk7CisJaWYgKElTX0VSUihkYmdmc19yb290KSB8fCAhZGJnZnNfcm9vdCkKKwkJZ290byBlcnJfcm9vdDsKKworCWRiZ2ZzX3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGUiLCAwNDAwLCBkYmdmc19yb290LCBOVUxMLAorCQkJCQkgICZkYmdfZm9wc19zdGF0ZSk7CisJaWYgKCFkYmdmc19zdGF0ZSkKKwkJZ290byBlcnJfc3RhdGU7CisKKwlkYmdmc19jaGFuID0ga21hbGxvYyhzaXplb2YoKmRiZ2ZzX3N0YXRlKSAqIG51bV9kbWFfY2hhbm5lbHMsCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghZGJnZnNfc3RhdGUpCisJCWdvdG8gZXJyX2FsbG9jOworCisJY2hhbmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY2hhbm5lbHMiLCBkYmdmc19yb290KTsKKwlpZiAoIWNoYW5kaXIpCisJCWdvdG8gZXJyX2NoYW5kaXI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2RtYV9jaGFubmVsczsgaSsrKSB7CisJCWRiZ2ZzX2NoYW5baV0gPSBweGFfZG1hX2RiZ19hbGxvY19jaGFuKGksIGNoYW5kaXIpOworCQlpZiAoIWRiZ2ZzX2NoYW5baV0pCisJCQlnb3RvIGVycl9jaGFuczsKKwl9CisKKwlyZXR1cm47CitlcnJfY2hhbnM6CitlcnJfY2hhbmRpcjoKKwlrZnJlZShkYmdmc19jaGFuKTsKK2Vycl9hbGxvYzoKK2Vycl9zdGF0ZToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGJnZnNfcm9vdCk7CitlcnJfcm9vdDoKKwlwcl9lcnIoInB4YV9kbWE6IGRlYnVnZnMgaXMgbm90IGF2YWlsYWJsZVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBweGFfZG1hX2NsZWFudXBfZGVidWdmcyh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYmdmc19yb290KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHhhX2RtYV9pbml0X2RlYnVnZnModm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBweGFfZG1hX2NsZWFudXBfZGVidWdmcyh2b2lkKSB7fQorI2VuZGlmCisKIGludCBweGFfcmVxdWVzdF9kbWEgKGNoYXIgKm5hbWUsIHB4YV9kbWFfcHJpbyBwcmlvLAogCQkJdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCiAJCQl2b2lkICpkYXRhKQpAQCAtNzEsNiArMzE1LDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIGk7CiB9CitFWFBPUlRfU1lNQk9MKHB4YV9yZXF1ZXN0X2RtYSk7CiAKIHZvaWQgcHhhX2ZyZWVfZG1hIChpbnQgZG1hX2NoKQogewpAQCAtODgsMjQgKzMzMywyNiBAQAogCWRtYV9jaGFubmVsc1tkbWFfY2hdLm5hbWUgPSBOVUxMOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0wocHhhX2ZyZWVfZG1hKTsKIAogc3RhdGljIGlycXJldHVybl90IGRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaW50IGksIGRpbnQgPSBESU5UOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fZG1hX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGRpbnQgJiAoMSA8PCBpKSkgewotCQkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKLQkJCWlmIChjaGFubmVsLT5uYW1lICYmIGNoYW5uZWwtPmlycV9oYW5kbGVyKSB7Ci0JCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2hhbm5lbC0+ZGF0YSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6Ci0JCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCi0JCQkJICovCi0JCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOwotCQkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7Ci0JCQl9CisJd2hpbGUgKGRpbnQpIHsKKwkJaSA9IF9fZmZzKGRpbnQpOworCQlkaW50ICY9IChkaW50IC0gMSk7CisJCWNoYW5uZWwgPSAmZG1hX2NoYW5uZWxzW2ldOworCQlpZiAoY2hhbm5lbC0+bmFtZSAmJiBjaGFubmVsLT5pcnFfaGFuZGxlcikgeworCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2hhbm5lbC0+ZGF0YSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6CisJCQkgKiBsZXQncyBjbGVhciB0aGUgaW50ZXJydXB0cyBhbmQgZGlzYWJsZSBpdC4KKwkJCSAqLworCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOworCQkJRENTUihpKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKIAkJfQogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMjcsNiArMzc0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoOyBpKyspIHsKIAkJRENTUihpKSA9IDA7CiAJCWRtYV9jaGFubmVsc1tpXS5wcmlvID0gbWluKChpICYgMHhmKSA+PiAyLCBETUFfUFJJT19MT1cpOworCQlzcGluX2xvY2tfaW5pdCgmZG1hX2NoYW5uZWxzW2ldLmxvY2spOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZG1hX2lycV9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELCAiRE1BIiwgTlVMTCk7CkBAIC0xMzUsMTAgKzM4Myw5IEBACiAJCWtmcmVlKGRtYV9jaGFubmVscyk7CiAJCXJldHVybiByZXQ7CiAJfQotCiAJbnVtX2RtYV9jaGFubmVscyA9IG51bV9jaDsKKworCXB4YV9kbWFfaW5pdF9kZWJ1Z2ZzKCk7CisKIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOwotRVhQT1JUX1NZTUJPTChweGFfZnJlZV9kbWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCmluZGV4IDY0MDE5NDYuLjg1N2E2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpZm5kZWYgX19BU01fUExBVF9NRlBfSAogI2RlZmluZSBfX0FTTV9QTEFUX01GUF9ICiAKLSNkZWZpbmUgbWZwX3RvX2dwaW8obSkJKChtKSAlIDEyOCkKKyNkZWZpbmUgbWZwX3RvX2dwaW8obSkJKChtKSAlIDI1NikKIAogLyogbGlzdCBvZiBhbGwgdGhlIGNvbmZpZ3VyYWJsZSBNRlAgcGlucyAqLwogZW51bSB7CkBAIC0xNTAsNiArMTUwLDc0IEBACiAJTUZQX1BJTl9HUElPMTI1LAogCU1GUF9QSU5fR1BJTzEyNiwKIAlNRlBfUElOX0dQSU8xMjcsCisKKwlNRlBfUElOX0dQSU8xMjgsCisJTUZQX1BJTl9HUElPMTI5LAorCU1GUF9QSU5fR1BJTzEzMCwKKwlNRlBfUElOX0dQSU8xMzEsCisJTUZQX1BJTl9HUElPMTMyLAorCU1GUF9QSU5fR1BJTzEzMywKKwlNRlBfUElOX0dQSU8xMzQsCisJTUZQX1BJTl9HUElPMTM1LAorCU1GUF9QSU5fR1BJTzEzNiwKKwlNRlBfUElOX0dQSU8xMzcsCisJTUZQX1BJTl9HUElPMTM4LAorCU1GUF9QSU5fR1BJTzEzOSwKKwlNRlBfUElOX0dQSU8xNDAsCisJTUZQX1BJTl9HUElPMTQxLAorCU1GUF9QSU5fR1BJTzE0MiwKKwlNRlBfUElOX0dQSU8xNDMsCisJTUZQX1BJTl9HUElPMTQ0LAorCU1GUF9QSU5fR1BJTzE0NSwKKwlNRlBfUElOX0dQSU8xNDYsCisJTUZQX1BJTl9HUElPMTQ3LAorCU1GUF9QSU5fR1BJTzE0OCwKKwlNRlBfUElOX0dQSU8xNDksCisJTUZQX1BJTl9HUElPMTUwLAorCU1GUF9QSU5fR1BJTzE1MSwKKwlNRlBfUElOX0dQSU8xNTIsCisJTUZQX1BJTl9HUElPMTUzLAorCU1GUF9QSU5fR1BJTzE1NCwKKwlNRlBfUElOX0dQSU8xNTUsCisJTUZQX1BJTl9HUElPMTU2LAorCU1GUF9QSU5fR1BJTzE1NywKKwlNRlBfUElOX0dQSU8xNTgsCisJTUZQX1BJTl9HUElPMTU5LAorCU1GUF9QSU5fR1BJTzE2MCwKKwlNRlBfUElOX0dQSU8xNjEsCisJTUZQX1BJTl9HUElPMTYyLAorCU1GUF9QSU5fR1BJTzE2MywKKwlNRlBfUElOX0dQSU8xNjQsCisJTUZQX1BJTl9HUElPMTY1LAorCU1GUF9QSU5fR1BJTzE2NiwKKwlNRlBfUElOX0dQSU8xNjcsCisJTUZQX1BJTl9HUElPMTY4LAorCU1GUF9QSU5fR1BJTzE2OSwKKwlNRlBfUElOX0dQSU8xNzAsCisJTUZQX1BJTl9HUElPMTcxLAorCU1GUF9QSU5fR1BJTzE3MiwKKwlNRlBfUElOX0dQSU8xNzMsCisJTUZQX1BJTl9HUElPMTc0LAorCU1GUF9QSU5fR1BJTzE3NSwKKwlNRlBfUElOX0dQSU8xNzYsCisJTUZQX1BJTl9HUElPMTc3LAorCU1GUF9QSU5fR1BJTzE3OCwKKwlNRlBfUElOX0dQSU8xNzksCisJTUZQX1BJTl9HUElPMTgwLAorCU1GUF9QSU5fR1BJTzE4MSwKKwlNRlBfUElOX0dQSU8xODIsCisJTUZQX1BJTl9HUElPMTgzLAorCU1GUF9QSU5fR1BJTzE4NCwKKwlNRlBfUElOX0dQSU8xODUsCisJTUZQX1BJTl9HUElPMTg2LAorCU1GUF9QSU5fR1BJTzE4NywKKwlNRlBfUElOX0dQSU8xODgsCisJTUZQX1BJTl9HUElPMTg5LAorCU1GUF9QSU5fR1BJTzE5MCwKKwlNRlBfUElOX0dQSU8xOTEsCisKKwlNRlBfUElOX0dQSU8yNTUgPSAyNTUsCisKIAlNRlBfUElOX0dQSU8wXzIsCiAJTUZQX1BJTl9HUElPMV8yLAogCU1GUF9QSU5fR1BJTzJfMiwKQEAgLTMyNSw4ICszOTMsOSBAQAogI2RlZmluZSBNRlBfUFVMTF9MT1cJCSgweDEgPDwgMjEpCiAjZGVmaW5lIE1GUF9QVUxMX0hJR0gJCSgweDIgPDwgMjEpCiAjZGVmaW5lIE1GUF9QVUxMX0JPVEgJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMX01BU0sJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMKHgpCQkoKCh4KSA+PiAyMSkgJiAweDMpCisjZGVmaW5lIE1GUF9QVUxMX0ZMT0FUCQkoMHg0IDw8IDIxKQorI2RlZmluZSBNRlBfUFVMTF9NQVNLCQkoMHg3IDw8IDIxKQorI2RlZmluZSBNRlBfUFVMTCh4KQkJKCgoeCkgPj4gMjEpICYgMHg3KQogCiAjZGVmaW5lIE1GUF9DRkdfREVGQVVMVAkJKE1GUF9BRjAgfCBNRlBfRFMwM1ggfCBNRlBfTFBNX0RFRkFVTFQgfFwKIAkJCQkgTUZQX0xQTV9FREdFX05PTkUgfCBNRlBfUFVMTF9OT05FKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwppbmRleCBlNzE2YzYyLi5iZTU4ZjlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwpAQCAtNzcsMTEgKzc3LDEzIEBACiAgKiBNRlBSX1BVTExfTE9XICAgICAgICAxICAgICAgICAgMCAgICAgICAgMQogICogTUZQUl9QVUxMX0hJR0ggICAgICAgMSAgICAgICAgIDEgICAgICAgIDAKICAqIE1GUFJfUFVMTF9CT1RIICAgICAgIDEgICAgICAgICAxICAgICAgICAxCisgKiBNRlBSX1BVTExfRkxPQVQJMSAgICAgICAgIDAgICAgICAgIDAKICAqLwogI2RlZmluZSBNRlBSX1BVTExfTk9ORQkJKDApCiAjZGVmaW5lIE1GUFJfUFVMTF9MT1cJCShNRlBSX1BVTExfU0VMIHwgTUZQUl9QVUxMRE9XTl9FTikKICNkZWZpbmUgTUZQUl9QVUxMX0JPVEgJCShNRlBSX1BVTExfTE9XIHwgTUZQUl9QVUxMVVBfRU4pCiAjZGVmaW5lIE1GUFJfUFVMTF9ISUdICQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTFVQX0VOKQorI2RlZmluZSBNRlBSX1BVTExfRkxPQVQJCShNRlBSX1BVTExfU0VMKQogCiAvKiBtZnBfc3Bpbl9sb2NrIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgTUZQIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24KICAqIChtb3N0IGxpa2VseSBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbikgaXMgYXRvbWljLCBhbmQgdGhhdApAQCAtMTE2LDYgKzExOCw3IEBACiAJTUZQUl9QVUxMX0xPVywKIAlNRlBSX1BVTExfSElHSCwKIAlNRlBSX1BVTExfQk9USCwKKwlNRlBSX1BVTExfRkxPQVQsCiB9OwogCiAvKiBtYXBwaW5nIG9mIE1GUF9MUE1fRURHRV8qIGRlZmluaXRpb25zIHRvIE1GUFJfRURHRV8qIHJlZ2lzdGVyIGJpdHMgKi8KQEAgLTIwNCw3ICsyMDcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKIAotCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOworCUJVR19PTihtZnAgPCAwIHx8IG1mcCA+PSBNRlBfUElOX01BWCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwogCXZhbCA9IG1mcHJfcmVhZGwobWZwX3RhYmxlW21mcF0ubWZwcl9vZmYpOwpAQCAtMjE3LDcgKzIyMCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOworCUJVR19PTihtZnAgPCAwIHx8IG1mcCA+PSBNRlBfUElOX01BWCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwogCW1mcHJfd3JpdGVsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmLCB2YWwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jCmluZGV4IDI2MGZkYzYuLjVmZjI0ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogCWdwbiA9IGNoaXAtPmNoaXAuYmFzZTsKIAlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+Y2hpcC5uZ3BpbzsgaSsrLCBncG4rKykgewotCQlCVUdfT04oZ3BuID4gQVJSQVlfU0laRShzM2NfZ3Bpb3MpKTsKKwkJQlVHX09OKGdwbiA+PSBBUlJBWV9TSVpFKHMzY19ncGlvcykpOwogCQlzM2NfZ3Bpb3NbZ3BuXSA9IGNoaXA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCmluZGV4IDExMTE3YTcuLmRmNDczMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTE4OCw3ICsxODksNyBAQAogZXJyOgogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX2NvbnZlcnQpOworRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19yZWFkKTsKIAogc3RhdGljIHZvaWQgczNjX2FkY19kZWZhdWx0X3NlbGVjdChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKIAkJCQkgICB1bnNpZ25lZCBzZWxlY3QpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKaW5kZXggNTQ0N2U2MC4uNGFmOWRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwpAQCAtNjEsNiArNjEsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEyW10gID0gIlMzQzI0MTIiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwW10gID0gIlMzQzI0NDAiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQyW10gID0gIlMzQzI0NDIiOworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQyYltdICA9ICJTM0MyNDQyQiI7CiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0NDNbXSAgPSAiUzNDMjQ0MyI7CiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0MTBhW10gPSAiUzNDMjQxMEEiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwYVtdID0gIlMzQzI0NDBBIjsKQEAgLTExMiw2ICsxMTMsMTUgQEAKIAkJLm5hbWUJCT0gbmFtZV9zM2MyNDQyCiAJfSwKIAl7CisJCS5pZGNvZGUJCT0gMHgzMjQ0MGFhYiwKKwkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAorCQkubWFwX2lvCQk9IHMzYzI0NHhfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKKwkJLmluaXQJCT0gczNjMjQ0Ml9pbml0LAorCQkubmFtZQkJPSBuYW1lX3MzYzI0NDJiCisJfSwKKwl7CiAJCS5pZGNvZGUJCT0gMHgzMjQxMjAwMSwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0MTJfbWFwX2lvLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCmluZGV4IDE5NmIxOTEuLmYwNDZmOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKQEAgLTIwOCwxNCArMjA4LDE0IEBACiB7CiAJdW5zaWduZWQgbG9uZyByZWxvYWQ7CiAKLQlwcl9kZWJ1ZygiczNjMjQxMF9jaGFuX2xvYWRidWZmZXI6IGxvYWRpbmcgYnVmZiAlcCAoMHglMDhseCwweCUwNngpXG4iLAotCQkgYnVmLCAodW5zaWduZWQgbG9uZylidWYtPmRhdGEsIGJ1Zi0+c2l6ZSk7Ci0KIAlpZiAoYnVmID09IE5VTEwpIHsKIAkJZG1hd2FybigiYnVmZmVyIGlzIE5VTExcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlwcl9kZWJ1ZygiczNjMjQxMF9jaGFuX2xvYWRidWZmZXI6IGxvYWRpbmcgYnVmZiAlcCAoMHglMDhseCwweCUwNngpXG4iLAorCQkgYnVmLCAodW5zaWduZWQgbG9uZylidWYtPmRhdGEsIGJ1Zi0+c2l6ZSk7CisKIAkvKiBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIGNoYW5uZWwgYmVmb3JlIHdlIGRvIGFueXRoaW5nICovCiAKIAlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMKaW5kZXggOTVkZjA1OS4uNTQ2NzQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZ3Bpby5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8tZm5zLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKaW5kZXggZWZlYjAyNS4uYzc3NjEyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKQEAgLTIyMiw3ICsyMjIsOSBAQAogLyogUzNDMjQxMCBhbmQgY29tcGF0aWJsZSBleHBvcnRlZCBmdW5jdGlvbnMgKi8KIAogZXh0ZXJuIHZvaWQgczNjMjQxMF9jcHVmcmVxX3NldHJlZnJlc2goc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiB2b2lkIHMzYzI0MTBfc2V0X2Z2Y28oc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKIAorI2lmZGVmIENPTkZJR19TM0MyNDEwX0lPVElNSU5HCiBleHRlcm4gaW50IHMzYzI0MTBfaW90aW1pbmdfY2FsYyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCiAJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOwogCkBAIC0yMzEsOCArMjMzLDExIEBACiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfaW90aW1pbmdfc2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKIAkJCQkgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCk7Ci0KLWV4dGVybiB2b2lkIHMzYzI0MTBfc2V0X2Z2Y28oc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKKyNlbHNlCisjZGVmaW5lIHMzYzI0MTBfaW90aW1pbmdfY2FsYyBOVUxMCisjZGVmaW5lIHMzYzI0MTBfaW90aW1pbmdfZ2V0IE5VTEwKKyNkZWZpbmUgczNjMjQxMF9pb3RpbWluZ19zZXQgTlVMTAorI2VuZGlmIC8qIENPTkZJR19TM0MyNDEwX0lPVElNSU5HICovCiAKIC8qIFMzQzI0MTIgY29tcGF0aWJsZSByb3V0aW5lcyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaAppbmRleCAyZDA4NTJhLi5jMmNlZjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWNpLmgKQEAgLTIsOCArMiwxMSBAQAogI2RlZmluZSBfQVJDSF9NQ0lfSAogCiBzdHJ1Y3QgczNjMjR4eF9tY2lfcGRhdGEgeworCXVuc2lnbmVkIGludAlub193cHJvdGVjdCA6IDE7CisJdW5zaWduZWQgaW50CW5vX2RldGVjdCA6IDE7CiAJdW5zaWduZWQgaW50CXdwcm90ZWN0X2ludmVydCA6IDE7CiAJdW5zaWduZWQgaW50CWRldGVjdF9pbnZlcnQgOiAxOyAgIC8qIHNldCA9PiBkZXRlY3QgYWN0aXZlIGhpZ2guICovCisJdW5zaWduZWQgaW50CXVzZV9kbWEgOiAxOwogCiAJdW5zaWduZWQgaW50CWdwaW9fZGV0ZWN0OwogCXVuc2lnbmVkIGludAlncGlvX3dwcm90ZWN0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaAppbmRleCBiNmRlZWVmLi44MmFiNGFhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgczNjMjQxMF9pbml0X3VhcnRzIE5VTEwKICNkZWZpbmUgczNjMjQxMF9tYXBfaW8gTlVMTAogI2RlZmluZSBzM2MyNDEwX2luaXQgTlVMTAorI2RlZmluZSBzM2MyNDEwYV9pbml0IE5VTEwKICNlbmRpZgogCiBleHRlcm4gaW50IHMzYzI0MTBfYmFzZWNsa19hZGQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMKaW5kZXggNjdhYTkzZC4uZDU1NGI5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYwpAQCAtMTUxLDggKzE1MSw2IEBACiAJCXNyYyA9IGNoYW4tPmRldl9hZGRyOwogCQlkc3QgPSBkYXRhOwogCQljb250cm9sMCA9IFBMMDgwX0NPTlRST0xfU1JDX0FIQjI7Ci0JCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7Ci0JCWNvbnRyb2wwIHw9IDIgPDwgUEwwODBfQ09OVFJPTF9EV0lEVEhfU0hJRlQ7CiAJCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfRFNUX0lOQ1I7CiAJCWJyZWFrOwogCkBAIC0xNjAsOCArMTU4LDYgQEAKIAkJc3JjID0gZGF0YTsKIAkJZHN0ID0gY2hhbi0+ZGV2X2FkZHI7CiAJCWNvbnRyb2wwID0gUEwwODBfQ09OVFJPTF9EU1RfQUhCMjsKLQkJY29udHJvbDAgfD0gKHUzMiljaGFuLT5od193aWR0aCA8PCBQTDA4MF9DT05UUk9MX0RXSURUSF9TSElGVDsKLQkJY29udHJvbDAgfD0gMiA8PCBQTDA4MF9DT05UUk9MX1NXSURUSF9TSElGVDsKIAkJY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9TUkNfSU5DUjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE3Myw2ICsxNjksOCBAQAogCWNvbnRyb2wxID0gc2l6ZSA+PiBjaGFuLT5od193aWR0aDsJLyogc2l6ZSBpbiBubyBvZiB4ZmVycyAqLwogCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfUFJPVF9TWVM7CS8qIGFsd2F5cyBpbiBwcml2LiBtb2RlICovCiAJY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9UQ19JUlFfRU47CS8qIGFsd2F5cyBmaXJlIElSUSAqLworCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9EV0lEVEhfU0hJRlQ7CisJY29udHJvbDAgfD0gKHUzMiljaGFuLT5od193aWR0aCA8PCBQTDA4MF9DT05UUk9MX1NXSURUSF9TSElGVDsKIAogCWxsaS0+c3JjX2FkZHIgPSBzcmM7CiAJbGxpLT5kc3RfYWRkciA9IGRzdDsKQEAgLTMzOSwxOSArMzM3LDIwIEBACiAJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKm5leHQ7CiAJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmJ1ZmY7CiAJc3RydWN0IHBsMDgwc19sbGkgKmxsaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKIAlXQVJOX09OKCFjaGFuKTsKIAlpZiAoIWNoYW4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYnVmZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2M2NHh4X2RtYV9idWZmKSwgR0ZQX0tFUk5FTCk7CisJYnVmZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2M2NHh4X2RtYV9idWZmKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWZmKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgYnVmZmVyXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWxsaSA9IGRtYV9wb29sX2FsbG9jKGRtYV9wb29sLCBHRlBfS0VSTkVMLCAmYnVmZi0+bGxpX2RtYSk7CisJbGxpID0gZG1hX3Bvb2xfYWxsb2MoZG1hX3Bvb2wsIEdGUF9BVE9NSUMsICZidWZmLT5sbGlfZG1hKTsKIAlpZiAoIWxsaSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGxsaVxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMzY2LDYgKzM2NSw4IEBACiAKIAlzM2M2NHh4X2RtYV9maWxsX2xsaShjaGFuLCBsbGksIGRhdGEsIHNpemUpOwogCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCiAJaWYgKChuZXh0ID0gY2hhbi0+bmV4dCkgIT0gTlVMTCkgewogCQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqZW5kID0gY2hhbi0+ZW5kOwogCQlzdHJ1Y3QgcGwwODBzX2xsaSAqZW5kbGxpID0gZW5kLT5sbGk7CkBAIC0zOTcsNiArMzk4LDggQEAKIAkJczNjNjR4eF9sbGlfdG9fcmVncyhjaGFuLCBsbGkpOwogCX0KIAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogCXNob3dfbGxpKGxsaSk7CiAKIAlkYmdfc2hvd2NoYW4oY2hhbik7CkBAIC01NjAsMjYgKzU2MywxMSBAQAogCiBFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2ZyZWUpOwogCi0KLXN0YXRpYyB2b2lkIHMzYzY0eHhfZG1hX3RjaXJxKHN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMsIGludCBvZmZzKQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gZG1hYy0+Y2hhbm5lbHMgKyBvZmZzOwotCi0JLyogbm90ZSwgd2UgY3VycmVudGx5IGRvIG5vdCBib3RoZXIgdG8gd29yayBvdXQgd2hpY2ggYnVmZmVyCi0JICogb3IgYnVmZmVycyBoYXZlIGJlZW4gY29tcGxldGVkIHNpbmNlIHRoZSBsYXN0IHRjLWlycS4gKi8KLQotCWlmIChjaGFuLT5jYWxsYmFja19mbikKLQkJKGNoYW4tPmNhbGxiYWNrX2ZuKShjaGFuLCBjaGFuLT5jdXJyLT5wdywgMCwgUzNDMjQxMF9SRVNfT0spOwotfQotCi1zdGF0aWMgdm9pZCBzM2M2NHh4X2RtYV9lcnJpcnEoc3RydWN0IHMzYzY0eHhfZG1hYyAqZG1hYywgaW50IG9mZnMpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvZmZzICVkXG4iLCBfX2Z1bmNfXywgb2Zmcyk7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBzM2M2NHh4X2RtYV9pcnEoaW50IGlycSwgdm9pZCAqcHcpCiB7CiAJc3RydWN0IHMzYzY0eHhfZG1hYyAqZG1hYyA9IHB3OworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuOworCWVudW0gczNjMjQxMF9kbWFfYnVmZnJlc3VsdCByZXM7CiAJdTMyIHRjc3RhdCwgZXJyc3RhdDsKIAl1MzIgYml0OwogCWludCBvZmZzOwpAQCAtNTg4LDE0ICs1NzYsNTQgQEAKIAllcnJzdGF0ID0gcmVhZGwoZG1hYy0+cmVncyArIFBMMDgwX0VSUl9TVEFUVVMpOwogCiAJZm9yIChvZmZzID0gMCwgYml0ID0gMTsgb2ZmcyA8IDg7IG9mZnMrKywgYml0IDw8PSAxKSB7CisJCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpidWZmOworCisJCWlmICghKGVycnN0YXQgJiBiaXQpICYmICEodGNzdGF0ICYgYml0KSkKKwkJCWNvbnRpbnVlOworCisJCWNoYW4gPSBkbWFjLT5jaGFubmVscyArIG9mZnM7CisJCXJlcyA9IFMzQzI0MTBfUkVTX0VSUjsKKwogCQlpZiAodGNzdGF0ICYgYml0KSB7CiAJCQl3cml0ZWwoYml0LCBkbWFjLT5yZWdzICsgUEwwODBfVENfQ0xFQVIpOwotCQkJczNjNjR4eF9kbWFfdGNpcnEoZG1hYywgb2Zmcyk7CisJCQlyZXMgPSBTM0MyNDEwX1JFU19PSzsKIAkJfQogCi0JCWlmIChlcnJzdGF0ICYgYml0KSB7Ci0JCQlzM2M2NHh4X2RtYV9lcnJpcnEoZG1hYywgb2Zmcyk7CisJCWlmIChlcnJzdGF0ICYgYml0KQogCQkJd3JpdGVsKGJpdCwgZG1hYy0+cmVncyArIFBMMDgwX0VSUl9DTEVBUik7CisKKwkJLyogJ25leHQnIHBvaW50cyB0byB0aGUgYnVmZmVyIHRoYXQgaXMgbmV4dCB0byB0aGUKKwkJICogY3VycmVudGx5IGFjdGl2ZSBidWZmZXIuCisJCSAqIEZvciBDSVJDVUxBUiBxdWV1ZXMsICduZXh0JyB3aWxsIGJlIHNhbWUgYXMgJ2N1cnInCisJCSAqIHdoZW4gJ2VuZCcgaXMgdGhlIGFjdGl2ZSBidWZmZXIuCisJCSAqLworCQlidWZmID0gY2hhbi0+Y3VycjsKKwkJd2hpbGUgKGJ1ZmYgJiYgYnVmZiAhPSBjaGFuLT5uZXh0CisJCQkJJiYgYnVmZi0+bmV4dCAhPSBjaGFuLT5uZXh0KQorCQkJYnVmZiA9IGJ1ZmYtPm5leHQ7CisKKwkJaWYgKCFidWZmKQorCQkJQlVHKCk7CisKKwkJaWYgKGJ1ZmYgPT0gY2hhbi0+bmV4dCkKKwkJCWJ1ZmYgPSBjaGFuLT5lbmQ7CisKKwkJczNjNjR4eF9kbWFfYnVmZmZkb25lKGNoYW4sIGJ1ZmYsIHJlcyk7CisKKwkJLyogRnJlZSB0aGUgbm9kZSBhbmQgdXBkYXRlIGN1cnIsIGlmIG5vbi1jaXJjdWxhciBxdWV1ZSAqLworCQlpZiAoIShjaGFuLT5mbGFncyAmIFMzQzI0MTBfRE1BRl9DSVJDVUxBUikpIHsKKwkJCWNoYW4tPmN1cnIgPSBidWZmLT5uZXh0OworCQkJczNjNjR4eF9kbWFfZnJlZWJ1ZmYoYnVmZik7CisJCX0KKworCQkvKiBVcGRhdGUgJ25leHQnICovCisJCWJ1ZmYgPSBjaGFuLT5uZXh0OworCQlpZiAoY2hhbi0+bmV4dCA9PSBjaGFuLT5lbmQpIHsKKwkJCWNoYW4tPm5leHQgPSBjaGFuLT5jdXJyOworCQkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIpKQorCQkJCWNoYW4tPmVuZCA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQljaGFuLT5uZXh0ID0gYnVmZi0+bmV4dDsKIAkJfQogCX0KIApAQCAtNjk3LDcgKzcyNSw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogUmVnaXN0ZXJpbmcgRE1BIGNoYW5uZWxzXG4iLCBfX2Z1bmNfXyk7CiAKLQlkbWFfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgiRE1BLUxMSSIsIE5VTEwsIDMyLCAxNiwgMCk7CisJZG1hX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoIkRNQS1MTEkiLCBOVUxMLCBzaXplb2Yoc3RydWN0IHBsMDgwc19sbGkpLCAxNiwgMCk7CiAJaWYgKCFkbWFfcG9vbCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIHBvb2xcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2RtYS1wbGF0LmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2RtYS1wbGF0LmgKaW5kZXggMGMzMGRkOS4uOGY3NmExZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaApAQCAtMjYsNyArMjYsNyBAQAogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpuZXh0OwogCiAJdm9pZAkJCSpwdzsKLQlzdHJ1Y3QgcGwwODBfbGxpCSpsbGk7CisJc3RydWN0IHBsMDgwc19sbGkJKmxsaTsKIAlkbWFfYWRkcl90CQkgbGxpX2RtYTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKaW5kZXggNzQzYTcwMC4uNzk1NmZkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKQEAgLTE5NCw5ICsxOTQsMTcgQEAKIAogI2RlZmluZSBJUlFfRUlOVF9HUk9VUChncm91cCwgbm8pCShJUlFfRUlOVF9HUk9VUCMjZ3JvdXAjI19CQVNFICsgKG5vKSkKIAorLyogRGVmaW5lIGEgZ3JvdXAgb2YgaW50ZXJydXB0cyBmb3IgYm9hcmQtc3BlY2lmaWMgdXNlIChlZywgZm9yIE1GRAorICogaW50ZXJydXB0IGNvbnRyb2xsZXJzKS4gKi8KKyNkZWZpbmUgSVJRX0JPQVJEX1NUQVJUIChJUlFfRUlOVF9HUk9VUDlfQkFTRSArIElSUV9FSU5UX0dST1VQOV9OUiArIDEpCisKKyNkZWZpbmUgSVJRX0JPQVJEX05SIDE2CisKKyNkZWZpbmUgSVJRX0JPQVJEX0VORCAoSVJRX0JPQVJEX1NUQVJUICsgSVJRX0JPQVJEX05SKQorCiAvKiBTZXQgdGhlIGRlZmF1bHQgTlJfSVJRUyAqLwogCi0jZGVmaW5lIE5SX0lSUVMJKElSUV9FSU5UX0dST1VQOV9CQVNFICsgSVJRX0VJTlRfR1JPVVA5X05SICsgMSkKKyNkZWZpbmUgTlJfSVJRUwkoSVJRX0JPQVJEX0VORCArIDEpCiAKICNlbmRpZiAvKiBfX0FTTV9QTEFUX1MzQzY0WFhfSVJRU19IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmgKaW5kZXggYTg3NzdhNy4uZmY0NmU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmgKQEAgLTUxLDggKzUxLDggQEAKICNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0hDTEtfU0hJRlQJKDgpCiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9NUExMX01BU0sJKDB4MSA8PCA0KQogI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTVBMTF9TSElGVAkoNCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0FSTV9NQVNLCSgweDMgPDwgMCkKLSNkZWZpbmUgUzNDNjQxMF9DTEtESVYwX0FSTV9NQVNLCSgweDcgPDwgMCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0FSTV9NQVNLCSgweDcgPDwgMCkKKyNkZWZpbmUgUzNDNjQxMF9DTEtESVYwX0FSTV9NQVNLCSgweGYgPDwgMCkKICNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0FSTV9TSElGVAkoMCkKIAogLyogQ0xLRElWMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKaW5kZXggZmViYWMxOS4uNmZmYTIxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCkBAIC0zMDIsOCArMzAyLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2YWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCXZhbCAmPSB+KDB4ZiA8PCBzY2xrLT5zaGlmdCk7Ci0JdmFsIHw9IChkaXYgLSAxKSA8PCBzY2xrLT5zaGlmdDsKKwl2YWwgJj0gfigweGYgPDwgc2Nsay0+ZGl2aWRlcl9zaGlmdCk7CisJdmFsIHw9IChkaXYgLSAxKSA8PCBzY2xrLT5kaXZpZGVyX3NoaWZ0OwogCV9fcmF3X3dyaXRlbCh2YWwsIHJlZyk7CiAKIAlyZXR1cm4gMDsKQEAgLTMyOCw2ICszMjgsOCBAQAogCQljbGtzcmMgfD0gc3JjX25yIDw8IHNjbGstPnNoaWZ0OwogCiAJCV9fcmF3X3dyaXRlbChjbGtzcmMsIFMzQ19DTEtfU1JDKTsKKworCQljbGstPnBhcmVudCA9IHBhcmVudDsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNDMsNyArMzQ1LDcgQEAKIAlpZiAocmF0ZSA+IHBhcmVudF9yYXRlKQogCQlyYXRlID0gcGFyZW50X3JhdGU7CiAJZWxzZSB7Ci0JCWRpdiA9IHJhdGUgLyBwYXJlbnRfcmF0ZTsKKwkJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOwogCiAJCWlmIChkaXYgPT0gMCkKIAkJCWRpdiA9IDE7CkBAIC02NzUsNiArNjc3LDkgQEAKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogeHRhbCBpcyAlbGRcbiIsIF9fZnVuY19fLCB4dGFsKTsKIAorCS8qIEZvciBub3cgYXNzdW1lIHRoZSBtdXggYWx3YXlzIHNlbGVjdHMgdGhlIGNyeXN0YWwgKi8KKwljbGtfZXh0X3h0YWxfbXV4LnBhcmVudCA9IHh0YWxfY2xrOworCiAJZXBsbCA9IHMzYzY0MDBfZ2V0X2VwbGwoeHRhbCk7CiAJbXBsbCA9IHMzYzY0MDBfZ2V0X3BsbCh4dGFsLCBfX3Jhd19yZWFkbChTM0NfTVBMTF9DT04pKTsKIAlhcGxsID0gczNjNjQwMF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFMzQ19BUExMX0NPTikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvZG1hLmMKaW5kZXggZDJmNDk3Ny4uZWY4OGYyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2RtYS5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAkJCQkJc3RtcDN4eHhfZG1hX2ZyZWVfY29tbWFuZChjaCwKIAkJCQkJCQkJICAmZGVzY3JpcHRvcnMKIAkJCQkJCQkJICBbaV0pOwotCQkJCX0gd2hpbGUgKGktLSA+PSAwKTsKKwkJCQl9IHdoaWxlIChpLS0gPiAwKTsKIAkJCX0KIAkJCXJldHVybiBlcnI7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IGM4YzU1YjQuLjk0YmU3YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IFNhdCBTZXAgMTIgMTI6MDA6MTYgMjAwOQorIyBMYXN0IHVwZGF0ZTogRnJpIFNlcCAxOCAyMTo0MjowMCAyMDA5CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTE2MzgsNyArMTYzOCw3IEBACiBhbWxfbTgwNTAJCU1BQ0hfQU1MX004MDUwCQlBTUxfTTgwNTAJCTE2NDQKIG14MzVfM2RzCQlNQUNIX01YMzVfM0RTCQlNWDM1XzNEUwkJMTY0NQogbWFycwkJCU1BQ0hfTUFSUwkJTUFSUwkJCTE2NDYKLW50b3NkXzY0NHhhCQlNQUNIX05UT1NEXzY0NFhBCU5UT1NEXzY0NFhBCQkxNjQ3CituZXVyb3Nfb3NkMgkJTUFDSF9ORVVST1NfT1NEMglORVVST1NfT1NEMgkJMTY0NwogYmFkZ2VyCQkJTUFDSF9CQURHRVIJCUJBREdFUgkJCTE2NDgKIHRyaXplcHM0d2wJCU1BQ0hfVFJJWkVQUzRXTAkJVFJJWkVQUzRXTAkJMTY0OQogdHJpemVwczUJCU1BQ0hfVFJJWkVQUzUJCVRSSVpFUFM1CQkxNjUwCkBAIC0xNjU0LDcgKzE2NTQsNyBAQAogem9yYW40M3h4CQlNQUNIX1pPUkFONDNYWAkJWk9SQU40M1hYCQkxNjYwCiBzb25peDkyNgkJTUFDSF9TT05JWDkyNgkJU09OSVg5MjYJCTE2NjEKIGNlbGVzdGlhbHNlbWkJCU1BQ0hfQ0VMRVNUSUFMU0VNSQlDRUxFU1RJQUxTRU1JCQkxNjYyCi1jYzltMjQ0MwkJTUFDSF9DQzlNMjQ0MwkJQ0M5TTI0NDMJCTE2NjMKK2NjOW0yNDQzanMJCU1BQ0hfQ0M5TTI0NDNKUwkJQ0M5TTI0NDNKUwkJMTY2MwogdHc1MzM0CQkJTUFDSF9UVzUzMzQJCVRXNTMzNAkJCTE2NjQKIG9tYXBfaHRjYXJ0ZW1pcwkJTUFDSF9IVENBUlRFTUlTCQlIVENBUlRFTUlTCQkxNjY1CiBuYWxfaGxpdGUJCU1BQ0hfTkFMX0hMSVRFCQlOQUxfSExJVEUJCTE2NjYKQEAgLTE4MDIsNyArMTgwMiw3IEBACiByZDg4ZjUxODFsX2dlCQlNQUNIX1JEODhGNTE4MUxfR0UJUkQ4OEY1MTgxTF9HRQkJMTgxMgogc2lmbWFpbgkJCU1BQ0hfU0lGTUFJTgkJU0lGTUFJTgkJCTE4MTMKIHNhbTlfbDkyNjEJCU1BQ0hfU0FNOV9MOTI2MQkJU0FNOV9MOTI2MQkJMTgxNAotY2M5bTI0NDNqcwkJTUFDSF9DQzlNMjQ0M0pTCQlDQzlNMjQ0M0pTCQkxODE1CitjYzltMjQ0MwkJTUFDSF9DQzlNMjQ0MwkJQ0M5TTI0NDMJCTE4MTUKIHhhcmlhMzAwCQlNQUNIX1hBUklBMzAwCQlYQVJJQTMwMAkJMTgxNgogaXQ5MjAwCQkJTUFDSF9JVDkyMDAJCUlUOTIwMAkJCTE4MTcKIHJkODhmNTE4MWxfZnhvCQlNQUNIX1JEODhGNTE4MUxfRlhPCVJEODhGNTE4MUxfRlhPCQkxODE4CkBAIC0yNDA5LDMgKzI0MDksMTUgQEAKIHBzczIJCQlNQUNIX1BTUzIJCVBTUzIJCQkyNDIzCiBkYXZpbmNpX2FwbTE1MAkJTUFDSF9EQVZJTkNJX0FQTTE1MAlEQVZJTkNJX0FQTTE1MAkJMjQyNAogc3RyOTEwMAkJCU1BQ0hfU1RSOTEwMAkJU1RSOTEwMAkJCTI0MjUKK25ldDViaWcJCQlNQUNIX05FVDVCSUcJCU5FVDVCSUcJCQkyNDI2CitzZWFiZWQ5MjYzCQlNQUNIX1NFQUJFRDkyNjMJCVNFQUJFRDkyNjMJCTI0MjcKK214NTFfbTJpZAkJTUFDSF9NWDUxX00ySUQJCU1YNTFfTTJJRAkJMjQyOAorb2N0dm9jcGx1c19lYgkJTUFDSF9PQ1RWT0NQTFVTX0VCCU9DVFZPQ1BMVVNfRUIJCTI0MjkKK2tsa19maXJlZm94CQlNQUNIX0tMS19GSVJFRk9YCUtMS19GSVJFRk9YCQkyNDMwCitrbGtfd2lybWFfbW9kdWxlCU1BQ0hfS0xLX1dJUk1BX01PRFVMRQlLTEtfV0lSTUFfTU9EVUxFCTI0MzEKK2tsa193aXJtYV9tbWkJCU1BQ0hfS0xLX1dJUk1BX01NSQlLTEtfV0lSTUFfTU1JCQkyNDMyCitzdXBlcnNvbmljCQlNQUNIX1NVUEVSU09OSUMJCVNVUEVSU09OSUMJCTI0MzMKK2xpYmVydHkJCQlNQUNIX0xJQkVSVFkJCUxJQkVSVFkJCQkyNDM0CittaDM1NQkJCU1BQ0hfTUgzNTUJCU1IMzU1CQkJMjQzNQorcGM3ODAyCQkJTUFDSF9QQzc4MDIJCVBDNzgwMgkJCTI0MzYKK2duZXRfc2djCQlNQUNIX0dORVRfU0dDCQlHTkVUX1NHQwkJMjQzNwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCA0NGQwYmZhLi45Yzk2YTEzIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMzEsNSArMzEsOCBAQAogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjMoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05cmwoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxMCgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1ZXMoKQkoMCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vQURJX0JTRC50eHQgYi9hcmNoL2JsYWNrZmluL0FESV9CU0QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMWQwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL0FESV9CU0QudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1RoaXMgQlNELVN0eWxlIExpY2Vuc2UgYXBwbGllcyB0byBhIGZldyBmaWxlcyBpbiAuL2FyY2gvYmxhY2tmaW4gZGlyZWN0b3J5LAorYW5kIGlzIGluY2x1ZGVkIGhlcmUsIHNvIHBlb3BsZSB1bmRlcnN0YW5kIHdoaWNoIGNvZGUgdGhleSBjYW4gdXNlIG91dHNpZGUKK3RoZSBMaW51eCBrZXJuZWwsIGluIG5vbi1HUEwgYmFzZWQgcHJvamVjdHMuCisKK1VzaW5nIHRoZSBmaWxlcyByZWxlYXNlZCB1bmRlciB0aGUgIkFESSBCU0QiIGxpY2Vuc2UsIG11c3QgY29tcGx5IHdpdGgKK3RoZXNlIGxpY2Vuc2UgdGVybXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCBBbmFsb2cgRGV2aWNlcywgSW5jLgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKyAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICBkaXN0cmlidXRpb24uCisgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBbmFsb2cgRGV2aWNlcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgLSBUaGUgdXNlIG9mIHRoaXMgc29mdHdhcmUgbWF5IG9yIG1heSBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCByaWdodHMKKyAgICBvZiBvbmUgb3IgbW9yZSBwYXRlbnQgaG9sZGVycy4gIFRoaXMgbGljZW5zZSBkb2VzIG5vdCByZWxlYXNlIHlvdQorICAgIGZyb20gdGhlIHJlcXVpcmVtZW50IHRoYXQgeW91IG9idGFpbiBzZXBhcmF0ZSBsaWNlbnNlcyBmcm9tIHRoZXNlCisgICAgcGF0ZW50IGhvbGRlcnMgdG8gdXNlIHRoaXMgc29mdHdhcmUuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQU5BTE9HIERFVklDRVMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgQU5BTE9HIERFVklDRVMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMsIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKK0JVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKK09USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKaW5kZXggOWEwMWQ0NC4uYWU2YTYwZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNDcsNiArNDcsOSBAQAogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisJZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19HUElPCiAJZGVmX2Jvb2wgeQogCkBAIC0yMjksNyArMjMyLDcgQEAKIAogY29uZmlnIFNNUAogCWRlcGVuZHMgb24gQkY1NjEKLQlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUsCkBAIC02MTMsMTIgKzYxNiwxMCBAQAogc291cmNlIGtlcm5lbC9LY29uZmlnLmh6CiAKIGNvbmZpZyBHRU5FUklDX1RJTUUKLQlib29sICJHZW5lcmljIHRpbWUiCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWJvb2wgIkdlbmVyaWMgY2xvY2sgZXZlbnRzIgotCWRlcGVuZHMgb24gR0VORVJJQ19USU1FCiAJZGVmYXVsdCB5CiAKIGNob2ljZQpAQCAtNjUzLDYgKzY1NCwxMCBAQAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlcGVuZHMgb24gIVRJQ0tTT1VSQ0VfR1BUTVIwCiAKK2NvbmZpZyBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorCWRlcGVuZHMgb24gIUdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlkZWZfYm9vbCB5CisKIHNvdXJjZSBrZXJuZWwvdGltZS9LY29uZmlnCiAKIGNvbW1lbnQgIk1pc2MiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA4OGYzNmQ1Li5kMjdjNjI3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfQkxBQ0tGSU5fQVRPTUlDX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oCmluZGV4IGFlZjA1OTQuLjEwMDY0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmgKQEAgLTEsMjkgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vYmZpbi1nbG9iYWwuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEdsb2JhbCBleHRlcm4gZGVmaW5lcyBmb3IgYmxhY2tmaW4KKyAqIEdsb2JhbCBleHRlcm4gZGVmaW5lcyBmb3IgYmxhY2tmaW4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRklOX0dMT0JBTF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oCmluZGV4IGMyODFjNjMuLmVkNGY4YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW41eHhfc3BpLmgKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaAppbmRleCA0MjVlY2U2Li5hYmRiMmFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fcm90YXJ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oCkBAIC0xLDYgKzEsMTAgQEAKIC8qCiAgKiBib2FyZCBpbml0aWFsaXphdGlvbiBzaG91bGQgcHV0IG9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGludG8gcGxhdGZvcm1fZGF0YQogICogYW5kIHBsYWNlIHRoZSBiZmluLXJvdGFyeSBvbnRvIHBsYXRmb3JtX2J1cyBuYW1lZCAiYmZpbi1yb3RhcnkiLgorICoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkZJTl9ST1RBUllfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NpbXBsZV90aW1lci5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NpbXBsZV90aW1lci5oCmluZGV4IGZjY2JiNTkuLjUyNDhjMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zaW1wbGVfdGltZXIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2ltcGxlX3RpbWVyLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX2JmaW5fc2ltcGxlX3RpbWVyX2hfCiAjZGVmaW5lIF9iZmluX3NpbXBsZV90aW1lcl9oXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBkYWZmYTcxLi5hMmZmM2ZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX0JJVE9QU19ICiAjZGVmaW5lIF9CTEFDS0ZJTl9CSVRPUFNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JsYWNrZmluLmgKaW5kZXggNGQ0NDM5NS4uZWI3YzE0NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmxhY2tmaW4uaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGJsYWNrZmluIGZhbWlseSBvZiBwcm9jZXNzb3JzLgorICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBCbGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KICAqCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IDY1NWU0OTUuLjZmNDU0OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9idWcuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fQlVHX0gKICNkZWZpbmUgX0JMQUNLRklOX0JVR19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCmluZGV4IDNlNjkxMDYuLjk1NTg0MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaApAQCAtMSw2ICsxIEBACi0jaWZuZGVmIF9CTEFDS0ZJTl9CWVRFT1JERVJfSAotI2RlZmluZSBfQkxBQ0tGSU5fQllURU9SREVSX0gKLQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+Ci0KLSNlbmRpZgkJCQkvKiBfQkxBQ0tGSU5fQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA0NzcwNTBhLi44NTQyYmMzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NhY2hlLmgKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9CTEFDS0ZJTl9DQUNIRV9ICiAKQEAgLTM1LDEwICszOCwxMCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0JGSU5fQ0FDSEVfQ09IRVJFTlQpCi0jIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fSUNBQ0hFQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9MMl9JQ0FDSEVBQkxFKQorIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0wyX0lDQUNIRUFCTEUpCiAjIGRlZmluZSBfX0FSQ0hfU1lOQ19DT1JFX0lDQUNIRQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX0RDQUNIRUFCTEUpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTDJfRENBQ0hFQUJMRSkKKyMgaWYgZGVmaW5lZChDT05GSUdfQkZJTl9FWFRNRU1fRENBQ0hFQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFKQogIyBkZWZpbmUgX19BUkNIX1NZTkNfQ09SRV9EQ0FDSEUKICMgZW5kaWYKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDdlNTU1NDllLi5hZjAzYTM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9jYWNoZWZsdXNoLmgKLSAqIEJhc2VkIG9uOgkgaW5jbHVkZS9hc20tbTY4a25vbW11L2NhY2hlZmx1c2guaAotICogQXV0aG9yOiAgICAgICBMRyBTb2Z0IEluZGlhCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKiBDcmVhdGVkOiAgICAgIFR1ZSBTZXAgMjEgMjAwNAotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBsb3ctbGV2ZWwgY2FjaGUgcm91dGluZXMgYWRhcHRlZCBmcm9tIHRoZSBpMzg2Ci0gKiAJCSBhbmQgUFBDIHZlcnNpb25zIGJ5IEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKiBCbGFja2ZpbiBsb3ctbGV2ZWwgY2FjaGUgcm91dGluZXMKICAqCi0gKiBNb2RpZmllZDoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JMQUNLRklOX0NBQ0hFRkxVU0hfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2RlZl9MUEJsYWNrZmluLmgKaW5kZXggMzVmODQxYi4uODc3OGUwZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NkZWZfTFBCbGFja2Zpbi5oCkBAIC0xLDMwICsxLDggQEAKLSAvKgotICAqIEZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWNvbW1vbi9jZGVmX0xQQmxhY2tmaW4uaAotICAqIEJhc2VkIG9uOgotICAqIEF1dGhvcjogICAgICB1bmtub3duCi0gICogICAgICAgICAgICAgIENPUFlSSUdIVCAyMDA1IEFuYWxvZyBEZXZpY2VzCi0gICogQ3JlYXRlZDogICAgID8KLSAgKiBEZXNjcmlwdGlvbjoKLSAgKgotICAqIE1vZGlmaWVkOgotICAqCi0gICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAgKgotICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICogYW55IGxhdGVyIHZlcnNpb24uCi0gICoKLSAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAqCi0gICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gICovCisvKgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCiAKICNpZm5kZWYgX0NERUZfTFBCTEFDS0ZJTl9ICiAjZGVmaW5lIF9DREVGX0xQQkxBQ0tGSU5fSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCmluZGV4IDc5MzU4MWYuLmEyMzQxNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2hlY2tzdW0uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKQEAgLTEsOSArMSwxNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICBha2Jhci5odXNzYWluQGxpbmVvLmNvbQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX0NIRUNLU1VNX0gKICNkZWZpbmUgX0JGSU5fQ0hFQ0tTVU1fSAogCiAvKgotICogTU9ESUZJRUQgRk9SIEJGSU4gQXByaWwgMzAsIDIwMDEgYWtiYXIuaHVzc2FpbkBsaW5lby5jb20KLSAqCiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKICAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2xvY2tzLmgKaW5kZXggMDMzYmJhOS4uZjgwZGFkNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Nsb2Nrcy5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtY29tbW9uL2Nsb2Nrcy5oCi0gKiBCYXNlZCBvbjogICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQXV0aG9yOgkgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBDb21tb24gQ2xvY2sgZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMga2VybmVsIGZpbGVzCiAgKgotICogQ3JlYXRlZDogICAgICAyNUp1bDA3Ci0gKiBEZXNjcmlwdGlvbjogIENvbW1vbiBDbG9jayBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBrZXJuZWwgZmlsZXMKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRklOX0NMT0NLU19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NvbnRleHQuUyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCmluZGV4IGY4YTY2NGYuLjVkZmZhZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2NvbnRleHQuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCmluZGV4IGQxOGQxNjguLmZkYTk2MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NwbGIuaAotICogQmFzZWQgb246ICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjogICAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDAKLSAqIERlc2NyaXB0aW9uOiAgQ29tbW9uIENQTEIgZGVmaW5pdGlvbnMgZm9yIENQTEIgaW5pdAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DUExCX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaAppbmRleCAwNWIxNGE2Li5mMzE1YzgzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NwbGJpbml0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29tbW9uIENQTEIgZGVmaW5pdGlvbnMgZm9yIENQTEIgaW5pdAogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0NQTEJJTklUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggZmFkZmE4Mi4uYjE5MWRjNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmguCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19BU01fQkxBQ0tGSU5fQ1BVX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaAppbmRleCA2MzQxZWViLi4yNTkwNjQ2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RlZl9MUEJsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kZWZfTFBCbGFja2Zpbi5oCkBAIC0xLDMyICsxLDEwIEBACi0gLyoKLSAgKiBGaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1jb21tb24vZGVmX0xQQmxhY2tmaW4uaAotICAqIEJhc2VkIG9uOgotICAqIEF1dGhvcjogICAgICB1bmtub3duCi0gICogICAgICAgICAgICAgIENPUFlSSUdIVCAyMDA1IEFuYWxvZyBEZXZpY2VzCi0gICogQ3JlYXRlZDogICAgID8KLSAgKiBEZXNjcmlwdGlvbjoKLSAgKgotICAqIE1vZGlmaWVkOgotICAqCi0gICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAgKgotICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICogYW55IGxhdGVyIHZlcnNpb24uCi0gICoKLSAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAqCi0gICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gICovCi0KLS8qIExQIEJsYWNrZmluIENPUkUgUkVHSVNURVIgQklUICYgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUzMi8zMyAqLworLyoKKyAqIEJsYWNrZmluIGNvcmUgcmVnaXN0ZXIgYml0ICYgYWRkcmVzcyBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgR1BMLTIgKG9yIGxhdGVyKS4KKyAqLwogCiAjaWZuZGVmIF9ERUZfTFBCTEFDS0ZJTl9ICiAjZGVmaW5lIF9ERUZfTFBCTEFDS0ZJTl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggZWQ2YjFmMy4uN2EyM2Q4MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fRE1BX01BUFBJTkdfSAogI2RlZmluZSBfQkxBQ0tGSU5fRE1BX01BUFBJTkdfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RwbWMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCmluZGV4IDk2ZTgyMDguLjkyNWU2NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCkBAIC0xLDkgKzEsMTEgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9kcG1jLmggLSAgTWlzY2VsbGFuZW91cyBJT0NUTCBjb21tYW5kcyBmb3IgRHluYW1pYyBQb3dlcgotICogICAJCQkgCU1hbmFnZW1lbnQgQ29udHJvbGxlciBEcml2ZXIuCisgKiBNaXNjZWxsYW5lb3VzIElPQ1RMIGNvbW1hbmRzIGZvciBEeW5hbWljIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbGxlciBEcml2ZXIKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlIEluYy4KICAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9EUE1DX0hfCiAjZGVmaW5lIF9CTEFDS0ZJTl9EUE1DX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWFybHlfcHJpbnRrLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Vhcmx5X3ByaW50ay5oCmluZGV4IDUzYTc2MmIuLjY4YTkxMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWFybHlfcHJpbnRrLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lYXJseV9wcmludGsuaApAQCAtMSwyNyArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vZWFybHlfcHJpbnRrLmgKLSAqIEF1dGhvcjogICAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmcKKyAqIGZ1bmN0aW9uIHByb3RvdHB5ZXMgZm9yIGVhcmx5IHByaW50awogICoKLSAqIENyZWF0ZWQ6ICAgICAgMTRBdWcyMDA3Ci0gKiBEZXNjcmlwdGlvbjogIGZ1bmN0aW9uIHByb3RvdHB5ZXMgZm9yIGVhcmx5IHByaW50aworICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKLQogI2lmbmRlZiBfX0FTTV9FQVJMWV9QUklOVEtfSF9fCiAjZGVmaW5lIF9fQVNNX0VBUkxZX1BSSU5US19IX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYzgyM2U4ZS4uOGUwNzY0YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xLDQgKzEsOCBAQAotLyogQ2hhbmdlcyBtYWRlIGJ5ICBMRyBTb2Z0IE9jdCAyMDA0Ki8KKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KIAogI2lmbmRlZiBfX0FTTUJGSU5fRUxGX0gKICNkZWZpbmUgX19BU01CRklOX0VMRl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VudHJ5LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VudHJ5LmgKaW5kZXggNTViODA4Zi4uYTY4ODZmNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbnRyeS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZW50cnkuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0JGSU5fRU5UUllfSAogI2RlZmluZSBfX0JGSU5fRU5UUllfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZjbnRsLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZjbnRsLmgKaW5kZXggOWM0MDM3MS4uODcyN2IyYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mY250bC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmNudGwuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9GQ05UTF9ICiAjZGVmaW5lIF9CRklOX0ZDTlRMX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9maXhlZF9jb2RlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaAppbmRleCAzMmM0ZDQ5Li43M2ZlNTNlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaApAQCAtMSw1ICsxLDExIEBACi0vKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZml4ZWQgYWRkcmVzc2VzIHdoZXJlIHVzZXJzcGFjZSBwcm9ncmFtcyBjYW4gZmluZAotICAgYXRvbWljIGNvZGUgc2VxdWVuY2VzLiAgKi8KKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZml4ZWQgYWRkcmVzc2VzIHdoZXJlIHVzZXJzcGFjZSBwcm9ncmFtcworICogY2FuIGZpbmQgYXRvbWljIGNvZGUgc2VxdWVuY2VzLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLwogCiAjaWZuZGVmIF9fQkZJTl9BU01fRklYRURfQ09ERV9IX18KICNkZWZpbmUgX19CRklOX0FTTV9GSVhFRF9DT0RFX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mbGF0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaAppbmRleCA3MzNhMTc4Li5jMTMxNGM1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaApAQCAtMSw4ICsxLDkgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9mbGF0LmggLS0gdUNsaW51eCBmbGF0LWZvcm1hdCBleGVjdXRhYmxlcworICogdUNsaW51eCBmbGF0LWZvcm1hdCBleGVjdXRhYmxlcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywKKyAqIENvcHlyaWdodCAyMDAzLTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpZm5kZWYgX19CTEFDS0ZJTl9GTEFUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBmZTEzOTYxLi41YjQ0ZDA1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CSBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9HUElPX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCAwYjc4Yjg3Li5jMDc4ZGQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0JGSU5fSEFSRElSUV9ICiAjZGVmaW5lIF9fQkZJTl9IQVJESVJRX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDM3MDUzZWMuLmQxZjUwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fSU9fSAogI2RlZmluZSBfQkZJTl9JT19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDQyYTE1ZjUuLmU3YzA2MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMSwxNyArMSwxMCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwMyBIdVRhbworICogICAgICAgICAgICAgICAgMjAwMiBBcmN0dXJ1cyBOZXR3b3JrcyBJbmMuICh3d3cuYXJjdHVydXNuZXR3b3Jrcy5jb20KKyAqICAgICAgICAgICAgICAgICAgICAgICBUZWQgTWEgPG1hdGVkQHN5bXBhdGljby5jYT4KICAqCi0gKiBDaGFuZ2VkIGJ5IEh1VGFvIEFwcjE4LCAyMDAzCi0gKgotICogQ29weXJpZ2h0IHdhcyBtaXNzaW5nIHdoZW4gSSBnb3QgdGhlIGNvZGUgc28gdG9vayBmcm9tIE1JUFMgYXJjaCAuLi5NYVRlZC0tLQotICogQ29weXJpZ2h0IChDKSAxOTk0IGJ5IFdhbGRvcmYgR01CSCwgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAsIDIwMDEgYnkgUmFsZiBCYWVjaGxlCi0gKgotICogQWRhcHRlZCBmb3IgQmxhY2tGaW4gKEFESSkgYnkgVGVkIE1hIDxtYXRlZEBzeW1wYXRpY28uY2E+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgQXJjdHVydXMgTmV0d29ya3MgSW5jLiAod3d3LmFyY3R1cnVzbmV0d29ya3MuY29tKQotICogQ29weXJpZ2h0IChjKSAyMDAyIExpbmVvLCBJbmMuIDxtYXR0d0BsaW5lby5jb20+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaWZuZGVmIF9CRklOX0lSUV9IXwpAQCAtMTksNiArMTIsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KIAorI2luY2x1ZGUgPG1hY2gvYW5vbWFseS5oPgorCiAvKiBTWVNfSVJRUyBhbmQgTlJfSVJRUyBhcmUgZGVmaW5lZCBpbiA8bWFjaC1iZjV4eC9pcnEuaD4gKi8KICNpbmNsdWRlIDxtYWNoL2lycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycV9oYW5kbGVyLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycV9oYW5kbGVyLmgKaW5kZXggN2Q5ZTJkMy4uN2ZiZTQyMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFfaGFuZGxlci5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxX2hhbmRsZXIuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfSVJRX0hBTkRMRVJfSAogI2RlZmluZSBfSVJRX0hBTkRMRVJfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2wxbGF5b3V0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2wxbGF5b3V0LmgKaW5kZXggNzlkYmVmYS4uYzg3ZTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9sMWxheW91dC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbDFsYXlvdXQuaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBsMWxheW91dC5oCiAgKiBEZWZpbmVzIGEgbGF5b3V0IG9mIEwxIHNjcmF0Y2hwYWQgbWVtb3J5IHRoYXQgdXNlcnNwYWNlIGNhbiByZWx5IG9uLgorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9MMUxBWU9VVF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaAppbmRleCA1YTgyMmJiLi5mN2Q2ZDQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKICNkZWZpbmUgX19BU01fTElOS0FHRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGRiZmQ2ODYuLjI2ZjZiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMSw4ICsxLDEzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDAyIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisKICNpZm5kZWYgX19NTVVfSAogI2RlZmluZSBfX01NVV9ICiAKLS8qIENvcHlyaWdodCAoQykgMjAwMiwgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4gKi8KLQogc3RydWN0IHNyYW1fbGlzdF9zdHJ1Y3QgewogCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpuZXh0OwogCXZvaWQgKmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMDQwNDEwYi4uNGEzYmUzNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tbXVfY29udGV4dC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0JMQUNLRklOX01NVV9DT05URVhUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZTMxMjhkZi4uOWMxY2ZmZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfQVNNX0JGSU5fTU9EVUxFX0gKICNkZWZpbmUgX0FTTV9CRklOX01PRFVMRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbXV0ZXguaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbXV0ZXguaAppbmRleCA1Y2M2NDFjLi5mNzI2ZTNhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL211dGV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tdXRleC5oCkBAIC00LDYgKzQsMTAgQEAKICAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYwogICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYwogICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9BU01fTVVURVhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaAppbmRleCBhZmJhYWZhLi4zYWU4YjU2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaApAQCAtMSwxMyArMSw5IEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1ibGFja2Zpbi9uYW5kLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQW5hbG9nIERldmljZXMsIEluYy4KLSAqCUJyeWFuIFd1IDxicnlhbi53dUBhbmFsb2cuY29tPgotICoKKy8qCiAgKiBCRjVYWCAtIE5BTkQgZmxhc2ggY29udHJvbGxlciBwbGF0ZnJvbV9kZXZpY2UgaW5mbwogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogLyogc3RydWN0IGJmNXh4X25hbmRfcGxhdGZvcm0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggMjlkY2Y3NS4uOTQ0YTA3YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9QQUdFX0gKICNkZWZpbmUgX0JMQUNLRklOX1BBR0VfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKaW5kZXggY2JhZmYyNC4uZDA2YTg5YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZV9vZmZzZXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKQEAgLTEsNSArMSwxMCBAQAotCi0vKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiAqLworLyoKKyAqIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcAorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLwogCiAjaWZkZWYgQ09ORklHX0JMQUNLRklOCiAjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmgKaW5kZXggYTZmOTU2OS4uZDQ5YmIyNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BkYS5oCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmgKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQVNNX0JMQUNLRklOX1BEQV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDc4M2M4ZjcuLjgyMWM2OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9QR1RBQkxFX0gKICNkZWZpbmUgX0JMQUNLRklOX1BHVEFCTEVfSAogCkBAIC05Miw2ICs5OCwxMiBAQAogI2RlZmluZQlWTUFMTE9DX1NUQVJUCTAKICNkZWZpbmUJVk1BTExPQ19FTkQJMHhmZmZmZmZmZgogCisvKiBwcm92aWRlIGEgc3BlY2lhbCBnZXRfdW5tYXBwZWRfYXJlYSBmb3IgZnJhbWVidWZmZXIgbW1hcHMgb2Ygbm9tbXUgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgdW5zaWduZWQgbG9uZyk7CisjZGVmaW5lIEhBVkVfQVJDSF9GQl9VTk1BUFBFRF9BUkVBCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAKICNlbmRpZgkJCQkvKiBfQkxBQ0tGSU5fUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvbGwuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCmluZGV4IGEwNTU2NjcuLjA3MmQ4OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCkBAIC0xLDMgKzEsMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKgorICovCisKICNpZm5kZWYgX19CRklOX1BPTExfSAogI2RlZmluZSBfX0JGSU5fUE9MTF9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKaW5kZXggODhlYjVjMC4uZWRkOGVmMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKQEAgLTEsNiArMSw5IEBACiAvKgotICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBibGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KKyAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgQmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMKICAqCivCoCogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfUE9SVE1VWF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCmluZGV4IDgwYzlkNjQuLjQxYmMxODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19BUkNIX0JGSU5fUE9TSVhfVFlQRVNfSAogI2RlZmluZSBfX0FSQ0hfQkZJTl9QT1NJWF9UWVBFU19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGEzNmFkOGQuLmFlYTg4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9CRklOX1BST0NFU1NPUl9ICiAjZGVmaW5lIF9fQVNNX0JGSU5fUFJPQ0VTU09SX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggZTNmMDg2ZC4uMjcyOTBjOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX1BUUkFDRV9ICiAjZGVmaW5lIF9CRklOX1BUUkFDRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaAppbmRleCBhZTRkYWUxLi4xZjUzODFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fU0VDVElPTlNfSAogI2RlZmluZSBfQkxBQ0tGSU5fU0VDVElPTlNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlZ21lbnQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCmluZGV4IDAyY2ZkMDkuLmY4ZTE5ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX1NFR01FTlRfSAogI2RlZmluZSBfQkZJTl9TRUdNRU5UX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAppbmRleCBjZTAwYjAzLi5jZTQwODFhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX0FTTV9CTEFDS0ZJTl9TSUdDT05URVhUX0gKICNkZWZpbmUgX0FTTV9CTEFDS0ZJTl9TSUdDT05URVhUX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdpbmZvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAppbmRleCBlY2E0NTY1Li4zZTgxMzA2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9TSUdJTkZPX0gKICNkZWZpbmUgX0JGSU5fU0lHSU5GT19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDExOGRlZWUuLjZhMGZlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMSwyMyArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0JMQUNLRklOX1NNUF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZDZmZjRiNS4uYjBjN2YwZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX19CRklOX1NQSU5MT0NLX0gKICNkZWZpbmUgX19CRklOX1NQSU5MT0NLX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IGIxZTNjNGMuLmJlNzU3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQVNNX1NQSU5MT0NLX1RZUEVTX0gKICNkZWZpbmUgX19BU01fU1BJTkxPQ0tfVFlQRVNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0YXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCmluZGV4IGQyYjZmMTEuLjJlMjc2NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KKyAqLworCiAjaWZuZGVmIF9CRklOX1NUQVRfSAogI2RlZmluZSBfQkZJTl9TVEFUX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggMzIxZjRkOS4uZDdmMGNjYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdHJpbmcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9TVFJJTkdfSF8KICNkZWZpbmUgX0JMQUNLRklOX1NUUklOR19IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGQ0NDIxMTMuLjg5ZGU2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fU1dBQl9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9TV0FCX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggODVlOGYxNi4uZGRlMTliMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xLDM0ICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgaW5jbHVkZS9hc20vc3lzdGVtLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgIFRvbnkgS291ICh0b255a29AbGluZW8uY2EpCi0gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4KLSAqICAgICAgICAgICAgICAgICAgICAod3d3LmFyY3R1cnVzbmV0d29ya3MuY29tKQotICogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMyBNZXRyb3dlcmtzICh3d3cubWV0cm93ZXJrcy5jb20pCi0gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA0IEFuYWxvZyBEZXZpY2UgSW5jLgotICogQ3JlYXRlZDogICAgIDI1SmFuMjAwMSAtIFRvbnkgS291Ci0gKiBEZXNjcmlwdGlvbjogc3lzdGVtLmggaW5jbHVkZSBmaWxlCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgVG9ueSBLb3UgKHRvbnlrb0BsaW5lby5jYSkKICAqCi0gKiBNb2RpZmllZDogICAgIDIyU2VwMjAwNiAtIFJvYmluIEdldHoKLSAqICAgICAgICAgICAgICAgIC0gbW92ZSBpbmNsdWRlIGJsYWNrZmluLmggZG93biwgc28gSSBjYW4gZ2V0IGFjY2VzcyB0bwotICogICAgICAgICAgICAgICAgICAgaXJxIGZ1bmN0aW9ucyBpbiBvdGhlciBpbmNsdWRlIGZpbGVzLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fU1lTVEVNX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAyYmJmZGQ5Li5hZmIzYTg2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xLDI3ICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL3RocmVhZF9pbmZvLmgKLSAqIEJhc2VkIG9uOiAgICAgaW5jbHVkZS9hc20tbTY4a25vbW11L3RocmVhZF9pbmZvLmgKLSAqIEF1dGhvcjogICAgICAgTEcgU29mdCBJbmRpYQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKiBDcmVhdGVkOiAgICAgIFR1ZSBTZXAgMjEgMjAwNAotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCi0gKiBNb2RpZmllZDoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDg5YTEyZWUuLmE3NGFlMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90bGIuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fVExCX0gKICNkZWZpbmUgX0JMQUNLRklOX1RMQl9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaAppbmRleCAzMTJiNTk2Li42MDlhZDNjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYWNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFjZS5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgYmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisgKiBoZWFkZXIgZmlsZSBmb3IgaGFyZHdhcmUgdHJhY2UgZnVuY3Rpb25zCiAgKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JMQUNLRklOX1RSQUNFXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCmluZGV4IDNjZGM0NTQuLjlmZTBkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTEsMTMgKzEsMTAgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20vdHJhcHMuaAorICogIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgIDIwMDEgTGluZW8sIEluYworICogICAgICAgICAgICAgICAgICAgICAgICBUb255IEtvdQorICogICAgICAgICAgICAgICAgIDE5OTMgSGFtaXNoIE1hY2RvbmFsZAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTMgICAgICAgIEhhbWlzaCBNYWNkb25hbGQKLSAqCi0gKiAgTGluZW8sIEluYyAgICBKdWwgMjAwMSAgICBUb255IEtvdQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpZm5kZWYgX0JGSU5fVFJBUFNfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCAyZjQ2OWExLi5jMDNiODUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMSw0ICsxLDcgQEAKLS8qIENoYW5nZXMgbWFkZSBieSBMaW5lbyBJbmMuICAgIE1heSAyMDAxCisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKICAqIEJhc2VkIG9uOiBpbmNsdWRlL2FzbS1tNjhrbm9tbXUvdWFjY2Vzcy5oCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDAyYjE1MjkuLjc3OWJlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9CRklOX1VOSVNURF9ICiAjZGVmaW5lIF9fQVNNX0JGSU5fVU5JU1REX0gKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBmMDVkMWI5Li5iZDMyYzA5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBnZW5lcmF0ZSBkZWZpbml0aW9ucyBuZWVkZWQgYnkgYXNzZW1ibHkgbGFuZ3VhZ2UgbW9kdWxlcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIGdlbmVyYXRlIGRlZmluaXRpb25zIG5lZWRlZCBieSBhc3NlbWJseSBsYW5ndWFnZSBtb2R1bGVzLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwppbmRleCAzODQ4NjhkLi4xZjE3MDIxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwpAQCAtMiw2ICsyLDcgQEAKICAqIGJmaW5fZG1hXzV4eC5jIC0gQmxhY2tmaW4gRE1BIGltcGxlbWVudGF0aW9uCiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKaW5kZXggZmM0NjgxYy4uMjI3MDVlZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQorICogR1BJTyBBYnN0cmFjdGlvbiBMYXllcgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEdQSU8gQWJzdHJhY3Rpb24gTGF5ZXIKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCmluZGV4IDM2MTkzZWUuLmY3YjljZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYwpAQCAtMSwyNSArMSwxMSBAQAogLyoKICAqIEJsYWNrZmluIENQTEIgaW5pdGlhbGl6YXRpb24KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKaW5kZXggOGUxZTllOS4uNjllMGU1MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYwpAQCAtMSwyMiArMSwxMSBAQAogLyoKLSAqICAgICAgICAgICAgICAgQmxhY2tmaW4gQ1BMQiBleGNlcHRpb24gaGFuZGxpbmcuCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQmxhY2tmaW4gQ1BMQiBleGNlcHRpb24gaGFuZGxpbmcgZm9yIHdoZW4gTVBVIGluIG9uCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYwppbmRleCA1ZDhhZDUwLi5mZDlhMmYzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCkBAIC0xLDI0ICsxLDkgQEAKIC8qCiAgKiBCbGFja2ZpbiBDUExCIGluaXRpYWxpemF0aW9uCiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYm1nci5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxibWdyLmMKaW5kZXggZDllYTQ2Yy4uNWI4ODg2MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxibWdyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxibWdyLmMKQEAgLTEsMjYgKzEsMTQgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUtYy9jcGxibWdyLmMKICAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCiAgKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgTWNUZXJuYW4gPG1tY3Rlcm5hbkBhaXJ2YW5hLmNvbT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDAxTm92MjAwOAogICogRGVzY3JpcHRpb246ICBDUExCIG1pc3MgaGFuZGxlci4KICAqCiAgKiBNb2RpZmllZDoKICAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDggQWlydmFuYSBJbmMuCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiaW5mby5jCmluZGV4IDY0ZDc4MzAuLjBiZGFhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYwpAQCAtMiw2ICsyLDcgQEAKICAqIGFyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMgLSBkaXNwbGF5IENQTEIgc3RhdHVzCiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKQEAgLTExMSwyNCArMTEyLDIxIEBACiAJLnNob3cgID0gY3BsYmluZm9fc2hvdywKIH07CiAKKyNkZWZpbmUgQ1BMQklORk9fRENQTEJfRkxBRyAweDgwMDAwMDAwCisKIHN0YXRpYyBpbnQgY3BsYmluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljaGFyIGJ1ZlsyNTZdLCAqcGF0aCwgKnA7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJY2hhciBjcGxiX3R5cGU7CiAJdW5zaWduZWQgaW50IGNwdTsKLQljaGFyICpzX2NwdSwgKnNfY3BsYjsKIAlpbnQgcmV0OwogCXN0cnVjdCBzZXFfZmlsZSAqbTsKIAlzdHJ1Y3QgY3BsYmluZm9fZGF0YSAqY2RhdGE7CiAKLQlwYXRoID0gZF9wYXRoKCZmaWxlLT5mX3BhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChJU19FUlIocGF0aCkpCi0JCXJldHVybiBQVFJfRVJSKHBhdGgpOwotCXNfY3B1ID0gc3Ryc3RyKHBhdGgsICIvY3B1Iik7Ci0Jc19jcGxiID0gc3RycmNocihwYXRoLCAnLycpOwotCWlmICghc19jcHUgfHwgIXNfY3BsYikKLQkJcmV0dXJuIC1FSU5WQUw7CisJY3B1ID0gKHVuc2lnbmVkIGludClwZGUtPmRhdGE7CisJY3BsYl90eXBlID0gY3B1ICYgQ1BMQklORk9fRENQTEJfRkxBRyA/ICdEJyA6ICdJJzsKKwljcHUgJj0gfkNQTEJJTkZPX0RDUExCX0ZMQUc7CiAKLQljcHUgPSBzaW1wbGVfc3RydG91bChzX2NwdSArIDQsICZwLCAxMCk7CiAJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xMzksNyArMTM3LDcgQEAKIAljZGF0YSA9IG0tPnByaXZhdGU7CiAKIAljZGF0YS0+cG9zID0gMDsKLQljZGF0YS0+Y3BsYl90eXBlID0gdG91cHBlcihzX2NwbGJbMV0pOworCWNkYXRhLT5jcGxiX3R5cGUgPSBjcGxiX3R5cGU7CiAJY3BsYmluZm9fc2VxX2luaXQoY2RhdGEsIGNwdSk7CiAKIAlyZXR1cm4gMDsKQEAgLTE2OCw4ICsxNjYsMTAgQEAKIAkJaWYgKCFjcHVfZGlyKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJcHJvY19jcmVhdGUoImljcGxiIiwgU19JUlVHTywgY3B1X2RpciwgJmNwbGJpbmZvX2ZvcHMpOwotCQlwcm9jX2NyZWF0ZSgiZGNwbGIiLCBTX0lSVUdPLCBjcHVfZGlyLCAmY3BsYmluZm9fZm9wcyk7CisJCXByb2NfY3JlYXRlX2RhdGEoImljcGxiIiwgU19JUlVHTywgY3B1X2RpciwgJmNwbGJpbmZvX2ZvcHMsCisJCQkodm9pZCAqKWNwdSk7CisJCXByb2NfY3JlYXRlX2RhdGEoImRjcGxiIiwgU19JUlVHTywgY3B1X2RpciwgJmNwbGJpbmZvX2ZvcHMsCisJCQkodm9pZCAqKShjcHUgfCBDUExCSU5GT19EQ1BMQl9GTEFHKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYwppbmRleCAyZjYyYTlmLi5lNzRlNzRkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBEeW5hbWljIERNQSBtYXBwaW5nIHN1cHBvcnQKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBEeW5hbWljIERNQSBtYXBwaW5nIHN1cHBvcnQuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggOTMxYzc4Yi4uODRlZDgzNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTEsMjUgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2Vhcmx5X3ByaW50ay5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYwotICogQXV0aG9yOiAgICAgICBSb2JpbiBHZXR6IDxyZ2V0ekBibGFja2Zpbi51Y2xpbnV4Lm9yZworICogYWxsb3cgYSBjb25zb2xlIHRvIGJlIHVzZWQgZm9yIGVhcmx5IHByaW50aworICogZGVyaXZlZCBmcm9tIGFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwogICoKLSAqIENyZWF0ZWQ6ICAgICAgMTRBdWcyMDA3Ci0gKiBEZXNjcmlwdGlvbjogIGFsbG93IGEgY29uc29sZSB0byBiZSB1c2VkIGZvciBlYXJseSBwcmludGsKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lbnRyeS5TCmluZGV4IDNmODc2OWIuLmYyN2RjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZW50cnkuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9lbnRyeS5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TCmluZGV4IDBkMmQ5ZTAuLjA1NjU5MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZpeGVkX2NvZGUuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9maXhlZF9jb2RlLlMKQEAgLTYsNyArNiwxMiBAQAogICogVGhlc2UgYXJlIGFsaWduZWQgdG8gMTYgYnl0ZXMsIHNvIHRoYXQgd2UgaGF2ZSBzb21lIHNwYWNlIHRvIHJlcGxhY2UKICAqIHRoZXNlIHNlcXVlbmNlcyB3aXRoIHNvbWV0aGluZyBlbHNlIChlLmcuIGtlcm5lbCB0cmFwcyBpZiB3ZSBldmVyIGRvCiAgKiBCRjU2MSBTTVApLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZsYXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZsYXQuYwppbmRleCBkMTg4YjI0Li5hODhkYWRkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9mbGF0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jCkBAIC0xLDIxICsxLDcgQEAKIC8qCi0gKiAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jCisgKiBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBbmFsb2cgRGV2aWNlcywgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jCmluZGV4IGMyNmMzNGQuLjExOGM1YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwppbmRleCA0YjVmZDM2Li5kYjlmOWM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jCmluZGV4IDY3ZmM3YTUuLmE2ZGZhNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjZGVmaW5lIHByX2ZtdChmbXQpICJtb2R1bGUgJXM6ICIgZm10CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZjViMjg2MS4uNDMwYWUzOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQmxhY2tmaW4gYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwcm9jZXNzIGhhbmRsaW5nCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgQmxhY2tmaW4gYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwcm9jZXNzIGhhbmRsaW5nLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzMGY0ODI4Li4wOTgyYjVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwpAQCAtMSwzMCArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwotICogQmFzZWQgb246ICAgICBUYWtlbiBmcm9tIGxpbnV4L2tlcm5lbC9wdHJhY2UuYwotICogQXV0aG9yOiAgICAgICBsaW51eC9rZXJuZWwvcHRyYWNlLmMgaXMgYnkgUm9zcyBCaXJvIDEvMjMvOTIsIGVkaXRlZCBieSBMaW51cyBUb3J2YWxkcworICogbGludXgva2VybmVsL3B0cmFjZS5jIGlzIGJ5IFJvc3MgQmlybyAxLzIzLzkyLCBlZGl0ZWQgYnkgTGludXMgVG9ydmFsZHMKKyAqIHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMS8yMy85MgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKaW5kZXggMzY5NTM1Yi4uYzIwMmE0NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCkBAIC0xLDkgKzEsNSBAQAogLyoKLSAqIGFyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2hhZG93X2NvbnNvbGUuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NoYWRvd19jb25zb2xlLmMKaW5kZXggOGI4YzcxMC4uNTU3ZTlmZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2hhZG93X2NvbnNvbGUuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaGFkb3dfY29uc29sZS5jCkBAIC00LDggKzQsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYwppbmRleCBkYmMzYmJmLi45ZDkwYzE4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc3lzX2JmaW4uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3N5c19iZmluLmMKaW5kZXggM2RhNjBmYi4uYWZjZWYxMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc3lzX2JmaW4uYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jCkBAIC0xLDMyICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIGNvbnRhaW5zIHZhcmlvdXMgcmFuZG9tIHN5c3RlbSBjYWxscyB0aGF0IGhhdmUgYSBub24tc3RhbmRhcmQKKyAqIGNhbGxpbmcgc2VxdWVuY2Ugb24gdGhlIExpbnV4L0JsYWNrZmluIHBsYXRmb3JtLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB2YXJpb3VzIHJhbmRvbSBzeXN0ZW0gY2FsbHMgdGhhdAotICogICAgICAgICAgICAgICBoYXZlIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2Ugb24gdGhlIExpbnV4L2JmaW4KLSAqICAgICAgICAgICAgICAgcGxhdGZvcm0uCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTkxLDMgKzY5LDE0IEBACiB7CiAJcmV0dXJuIHNhZmVfZG1hX21lbWNweShkZXN0LCBzcmMsIGxlbik7CiB9CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQikgfHwgZGVmaW5lZChDT05GSUdfRkJfTU9EVUxFKQorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Cit1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIG9yaWdfYWRkciwKKwl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpaW5mby0+c2NyZWVuX2Jhc2U7Cit9CitFWFBPUlRfU1lNQk9MKGdldF9mYl91bm1hcHBlZF9hcmVhKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCmluZGV4IGY5NzE1NzYuLjM1OWNmYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2tlcm5lbC90aW1lLXRzLmMKLSAqCiAgKiBCYXNlZCBvbiBhcm0gY2xvY2tldmVudHMgaW1wbGVtZW50YXRpb24gYW5kIG9sZCBiZmluIHRpbWUgdGljay4KICAqCi0gKiBDb3B5cmlnaHQoQykgMjAwOCwgR2VvVGVjaG5vbG9naWVzLCBWaXRqYSBNYWthcm92CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY3MgSW5jLgorICogICAgICAgICAgICAgICAgMjAwOCBHZW9UZWNobm9sb2dpZXMKKyAqICAgICAgICAgICAgICAgICAgICAgVml0amEgTWFrYXJvdgogICoKLSAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMIHZlcnNpb24gMi4gRm9yIGRldGFpbHMgc2VlCi0gKiBrZXJuZWwtYmFzZS9DT1BZSU5HLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYwppbmRleCBhZGI1NGFhLi5iZDNiNTNkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CkBAIC04MSwxMSArODIsMTEgQEAKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAvKgogICogU2hvdWxkIHJldHVybiB1c2Vjb25kcyBzaW5jZSBsYXN0IHRpbWVyIHRpY2sKICAqLwotI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXR0aW1lb2Zmc2V0KHZvaWQpCit1MzIgYXJjaF9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBjbG9ja3NfcGVyX2ppZmZ5OwpAQCAtMTg0LDY1ICsxODUsNiBAQAogCXRpbWVfc2NoZWRfaW5pdCh0aW1lcl9pbnRlcnJ1cHQpOwogfQogCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX1RJTUUKLXZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgc2VxOwotCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjOwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQkJdXNlYyA9IGdldHRpbWVvZmZzZXQoKTsKLQkJc2VjID0geHRpbWUudHZfc2VjOwotCQl1c2VjICs9ICh4dGltZS50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyk7Ci0JfQotCXdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKLQotCXdoaWxlICh1c2VjID49IFVTRUNfUEVSX1NFQykgewotCQl1c2VjIC09IFVTRUNfUEVSX1NFQzsKLQkJc2VjKys7Ci0JfQotCi0JdHYtPnR2X3NlYyA9IHNlYzsKLQl0di0+dHZfdXNlYyA9IHVzZWM7Ci19Ci1FWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7Ci0KLWludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKLXsKLQl0aW1lX3Qgd3RtX3NlYywgc2VjID0gdHYtPnR2X3NlYzsKLQlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQkvKgotCSAqIFRoaXMgaXMgcmV2b2x0aW5nLiBXZSBuZWVkIHRvIHNldCB0aGUgeHRpbWUudHZfdXNlYwotCSAqIGNvcnJlY3RseS4gSG93ZXZlciwgdGhlIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMKLQkgKiBpcyB2YWx1ZSBhdCB0aGUgbGFzdCB0aWNrLgotCSAqIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkKLQkgKiB3b3VsZCBoYXZlIGRvbmUsIGFuZCB0aGVuIHVuZG8gaXQhCi0JICovCi0JbnNlYyAtPSAoZ2V0dGltZW9mZnNldCgpICogTlNFQ19QRVJfVVNFQyk7Ci0KLQl3dG1fc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKLQotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKLQotCW50cF9jbGVhcigpOwotCi0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0jZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX1RJTUUgKi8KLQogLyoKICAqIFNjaGVkdWxlciBjbG9jayAtIHJldHVybnMgY3VycmVudCB0aW1lIGluIG5hbm9zZWMgdW5pdHMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCmluZGV4IDU2NDY0Y2IuLjZiNzMyNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICAgSGFtaXNoIE1hY2RvbmFsZAorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgdXNlcyBTL1cgaW50ZXJydXB0IDE1IGZvciB0aGUgc3lzdGVtIGNhbGxzCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMjFhYzdjMi4uMTBlMTI1MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKLSAqIEJhc2VkIG9uOiAgICAgbm9uZSAtIG9yaWdpbmFsIHdvcmsKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgVHVlIFNlcCAyMSAyMDA0Ci0gKiBEZXNjcmlwdGlvbjogIE1hc3RlciBsaW5rZXIgc2NyaXB0IGZvciBibGFja2ZpbiBhcmNoaXRlY3R1cmUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjZGVmaW5lIFZNTElOVVhfU1lNQk9MKF9zeW1fKSBfIyNfc3ltXwpAQCAtOTYsOCArNzMsNyBAQAogCXsKIAkJX19zZGF0YSA9IC47CiAJCS8qIFRoaXMgZ2V0cyBkb25lIGZpcnN0LCBzbyB0aGUgZ2xvYiBkb2Vzbid0IHN1Y2sgaXQgaW4gKi8KLQkJLiA9IEFMSUdOKDMyKTsKLQkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKKwkJQ0FDSEVMSU5FX0FMSUdORURfREFUQSgzMikKIAogI2lmICFMMV9EQVRBX0FfTEVOR1RICiAJCS4gPSBBTElHTigzMik7CkBAIC0xMTYsMTIgKzkyLDcgQEAKIAkJREFUQV9EQVRBCiAJCUNPTlNUUlVDVE9SUwogCi0JCS8qIG1ha2Ugc3VyZSB0aGUgaW5pdF90YXNrIGlzIGFsaWduZWQgdG8gdGhlCi0JCSAqIGtlcm5lbCB0aHJlYWQgc2l6ZSBzbyB3ZSBjYW4gbG9jYXRlIHRoZSBrZXJuZWwKLQkJICogc3RhY2sgcHJvcGVybHkgYW5kIHF1aWNrbHkuCi0JCSAqLwotCQkuID0gQUxJR04oVEhSRUFEX1NJWkUpOwotCQkqKC5pbml0X3Rhc2suZGF0YSkKKwkJSU5JVF9UQVNLX0RBVEEoVEhSRUFEX1NJWkUpCiAKIAkJX19lZGF0YSA9IC47CiAJfQpAQCAtMTM0LDM5ICsxMDUsMTAgQEAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX19pbml0X2JlZ2luID0gLjsKIAotCS5pbml0LnRleHQgOgotCXsKLQkJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JCV9fc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9fZWluaXR0ZXh0ID0gLjsKLQl9Ci0JLmluaXQuZGF0YSA6Ci0JewotCQkuID0gQUxJR04oMTYpOwotCQlJTklUX0RBVEEKLQl9Ci0JLmluaXQuc2V0dXAgOgotCXsKLQkJLiA9IEFMSUdOKDE2KTsKLQkJX19fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX19zZXR1cF9lbmQgPSAuOwotCX0KLQkuaW5pdGNhbGwuaW5pdCA6Ci0JewotCQlfX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX19pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQkuY29uX2luaXRjYWxsLmluaXQgOgotCXsKLQkJX19fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotCX0KKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisJLiA9IEFMSUdOKDE2KTsKKwlJTklUX0RBVEFfU0VDVElPTigxNikKIAlQRVJDUFUoNCkKLQlTRUNVUklUWV9JTklUCiAKIAkvKiB3ZSBoYXZlIHRvIGRpc2NhcmQgZXhpdCB0ZXh0IGFuZCBzdWNoIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsIHRvCiAJICogaGFuZGxlIGVtYmVkZGVkIGNyb3NzLXNlY3Rpb24gcmVmZXJlbmNlcyAoYWx0IGluc3RydWN0aW9ucywgYnVnCkBAIC0xODEsMTggKzEyMyw5IEBACiAJCUVYSVRfREFUQQogCX0KIAotCS5pbml0LnJhbWZzIDoKLQl7Ci0JCS4gPSBBTElHTig0KTsKLQkJX19faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJLiA9IEFMSUdOKDQpOwotCQlfX19pbml0cmFtZnNfZW5kID0gLjsKLQl9Ci0KIAlfX2wxX2xtYV9zdGFydCA9IC47CiAKLQkudGV4dF9sMSBMMV9DT0RFX1NUQVJUIDogQVQoTE9BREFERFIoLmluaXQucmFtZnMpICsgU0laRU9GKC5pbml0LnJhbWZzKSkKKwkudGV4dF9sMSBMMV9DT0RFX1NUQVJUIDogQVQoTE9BREFERFIoLmV4aXQuZGF0YSkgKyBTSVpFT0YoLmV4aXQuZGF0YSkpCiAJewogCQkuID0gQUxJR04oNCk7CiAJCV9fc3RleHRfbDEgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jIGIvYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jCmluZGV4IGE4YzI3OWUuLmFiNjlkODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2FzaGxkaTMuYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgImdjY2xpYi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jIGIvYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jCmluZGV4IGEwZDM0MTkuLmI1YjM1MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2FzaHJkaTMuYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgImdjY2xpYi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvY2hlY2tzdW0uYyBiL2FyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMKaW5kZXggY2Q2MDVlNy4uYzYyOTY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvY2hlY2tzdW0uYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jCkBAIC0xLDMyICsxLDEyIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jCi0gKiBCYXNlZCBvbjogICAgIG5vbmUgLSBvcmlnaW5hbCB3b3JrCi0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKLSAqICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0Ci0gKiAgICAgICAgICAgICAgIGludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWCBvcGVyYXRpbmcKKyAqIHN5c3RlbS4gSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgQlNEIFNvY2tldCBpbnRlcmZhY2UgYXMgdGhlCisgKiBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvZGl2c2kzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUwppbmRleCAyYWM1OWM3Li5mODljNWE0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUwpAQCAtMSwxMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICAxNiAvIDMyIGJpdCBzaWduZWQgZGl2aXNpb24uCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCisgKgorICogMTYgLyAzMiBiaXQgc2lnbmVkIGRpdmlzaW9uLgogICogICAgICAgICAgICAgICAgIFNwZWNpYWwgY2FzZXMgOgogICogICAgICAgICAgICAgICAgICAgICAgMSkgIElmKG51bWVyYXRvciA9PSAwKQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCkBAIC0yMiwyNSArMjEsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIwIC0gUXVvdGllbnQgICAgKG8pCiAgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJzIFVzZWQgOiBSMi1SNyxQMC1QMgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAuZ2xvYmFsICAgX19fZGl2c2kzOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvZ2NjbGliLmggYi9hcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaAppbmRleCA5Y2NkMzlhLi43MjRmMDdmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaAorKysgYi9hcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNkZWZpbmUgQklUU19QRVJfVU5JVCAgOApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jIGIvYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jCmluZGV4IGU1N2JmNmYuLjUzZjE3NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2xzaHJkaTMuYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgImdjY2xpYi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY2hyLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUwppbmRleCA1ZGE0MjgxLi41NDJlNDBmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jbXAuUyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TCmluZGV4IDIxOWZhMjguLmNlNWI5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNweS5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKaW5kZXggZTY1NGExOC4uYzMxYmYyMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKQEAgLTEsMzYgKzEsMTMgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL21lbWNweS5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIGludGVybmFsIHZlcnNpb24gb2YgbWVtY3B5KCksIGlzc3VlZCBieSB0aGUgY29tcGlsZXIgdG8gY29weSBibG9ja3Mgb2YKKyAqIGRhdGEgYXJvdW5kLiBUaGlzIGlzIHJlYWxseSBtZW1tb3ZlKCkgLSBpdCBoYXMgdG8gYmUgYWJsZSB0byBkZWFsIHdpdGgKKyAqIHBvc3NpYmxlIG92ZXJsYXBzLCBiZWNhdXNlIHRoYXQgYW1iaWd1aXR5IGlzIHdoZW4gdGhlIGNvbXBpbGVyIGdpdmVzIHVwCisgKiBhbmQgY2FsbHMgYSBmdW5jdGlvbi4gV2UgaGF2ZSBvdXIgb3duLCBpbnRlcm5hbCB2ZXJzaW9uIHNvIHRoYXQgd2UgZ2V0CisgKiBzb21ldGhpbmcgd2UgdHJ1c3QsIGV2ZW4gaWYgdGhlIHVzZXIgaGFzIHJlZGVmaW5lZCB0aGUgbm9ybWFsIHN5bWJvbC4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBpbnRlcm5hbCB2ZXJzaW9uIG9mIG1lbWNweSgpLCBpc3N1ZWQgYnkgdGhlIGNvbXBpbGVyCi0gKiAgICAgICAgICAgICAgIHRvIGNvcHkgYmxvY2tzIG9mIGRhdGEgYXJvdW5kLgotICogICAgICAgICAgICAgICBUaGlzIGlzIHJlYWxseSBtZW1tb3ZlKCkgLSBpdCBoYXMgdG8gYmUgYWJsZSB0byBkZWFsIHdpdGgKLSAqICAgICAgICAgICAgICAgcG9zc2libGUgb3ZlcmxhcHMsIGJlY2F1c2UgdGhhdCBhbWJpZ3VpdHkgaXMgd2hlbiB0aGUgY29tcGlsZXIKLSAqICAgICAgICAgICAgICAgZ2l2ZXMgdXAgYW5kIGNhbGxzIGEgZnVuY3Rpb24uIFdlIGhhdmUgb3VyIG93biwgaW50ZXJuYWwgdmVyc2lvbgotICogICAgICAgICAgICAgICBzbyB0aGF0IHdlIGdldCBzb21ldGhpbmcgd2UgdHJ1c3QsIGV2ZW4gaWYgdGhlIHVzZXIgaGFzIHJlZGVmaW5lZAotICogICAgICAgICAgICAgICB0aGUgbm9ybWFsIHN5bWJvbC4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCmluZGV4IDMzZjg2NTMuLjgwYzI0MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21lbW1vdmUuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL21lbXNldC5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKaW5kZXggODE1OTEzNi4uYzMwZDk5YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbW9kc2kzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUwppbmRleCBjYTFkZDM5Li44YjBjN2Q0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUwpAQCAtMSwzNiArMSwxMiBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbW9kc2kzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogVGhpcyBwcm9ncmFtIGNvbXB1dGVzIDMyIGJpdCBzaWduZWQgcmVtYWluZGVyLiBJdCBjYWxscyBkaXYzMiBmdW5jdGlvbgorICogZm9yIHF1b3RpZW50IGVzdGltYXRpb24uCisgKiAgIFJlZ2lzdGVycyBpbjogIFIwLCBSMSA9IE51bWVyYXRvci8gRGVub21pbmF0b3IKKyAqICAgUmVnaXN0ZXJzIG91dDogUjAgICAgID0gUmVtYWluZGVyCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBwcm9ncmFtIGNvbXB1dGVzIDMyIGJpdCBzaWduZWQgcmVtYWluZGVyLiBJdCBjYWxscyBkaXYzMiBmdW5jdGlvbgotICogICAgICAgICAgICAgICBmb3IgcXVvdGllbnQgZXN0aW1hdGlvbi4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqICAgICAgICAgICAgICAgUmVnaXN0ZXJzIHVzZWQgOgotICogICAgICAgICAgICAgICBOdW1lcmF0b3IvIERlbm9taW5hdG9yIGluICBSMCwgUjEKLSAqICAgICAgICAgICAgICAgICBSMCAgLSAgcmV0dXJucyByZW1haW5kZXIuCi0gKiAgICAgICAgICAgICAgICAgUjItUjcKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogLmdsb2JhbCBfX19tb2RzaTM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tdWxkaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCmluZGV4IGFiZGUxMjAuLjk1M2EzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCisgKi8KKwogLmFsaWduIDIKIC5nbG9iYWwgX19fbXVsZGkzOwogLnR5cGUgX19fbXVsZGkzLCBTVFRfRlVOQzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUwppbmRleCA0Njg1YjdhLi4yNTBmNGQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TCkBAIC0xLDMwICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KKyAqIEltcGxlbWVudGF0aW9uIG9mIG91dHN7YndsfSBmb3IgQmxhY2tGaW4gcHJvY2Vzc29ycyB1c2luZyB6ZXJvIG92ZXJoZWFkIGxvb3BzLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgVHVlIE1hciAyMiAxNToyNzoyNCBDRVNUIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgSW1wbGVtZW50YXRpb24gb2Ygb3V0c3tid2x9IGZvciBCbGFja0ZpbiBwcm9jZXNzb3JzIHVzaW5nIHplcm8gb3ZlcmhlYWQgbG9vcHMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgQnV5V2F5cyBCVgorICogICAgICAgICAgICAgICAgICAgICAgQmFzIFZlcm1ldWxlbiA8YmFzQGJ1eXdheXMubmw+CiAgKgotICogTW9kaWZpZWQ6ICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQmFzIFZlcm1ldWxlbiwgQnV5V2F5cyBCViA8YmFzQGJ1eXdheXMubmw+Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9zbXVsc2kzX2hpZ2hwYXJ0LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9zbXVsc2kzX2hpZ2hwYXJ0LlMKaW5kZXggZTM4M2NkMy4uOTllZThjNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvc211bHNpM19oaWdocGFydC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL3NtdWxzaTNfaGlnaHBhcnQuUwpAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQorICovCisKIC5hbGlnbiAyCiAuZ2xvYmFsIF9fX3NtdWxzaTNfaGlnaHBhcnQ7CiAudHlwZSBfX19zbXVsc2kzX2hpZ2hwYXJ0LCBTVFRfRlVOQzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUwppbmRleCA1OGZkOTZkLi45N2U5MDQzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi91ZGl2c2kzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMKaW5kZXggNGYyYjc2ZS4uMTY4ZWJhNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvdW1vZHNpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogbGliZ2NjMSByb3V0aW5lcyBmb3IgQmxhY2tmaW4gNXh4CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgbGliZ2NjMSByb3V0aW5lcyBmb3IgQmxhY2tmaW4gNXh4CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmZGVmIENPTkZJR19BUklUSE1FVElDX09QU19MMQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvdW11bHNpM19oaWdocGFydC5TIGIvYXJjaC9ibGFja2Zpbi9saWIvdW11bHNpM19oaWdocGFydC5TCmluZGV4IDY3Yjc5OTMuLjA1MTgyNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL3VtdWxzaTNfaGlnaHBhcnQuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi91bXVsc2kzX2hpZ2hwYXJ0LlMKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKKyAqLworCiAuYWxpZ24gMgogLmdsb2JhbCBfX191bXVsc2kzX2hpZ2hwYXJ0OwogLnR5cGUgX19fdW11bHNpM19oaWdocGFydCwgU1RUX0ZVTkM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKaW5kZXggMDNlNGE5OS4uMDE5NzVjMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy9lemJyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCi0gKiBBdXRob3I6ICAgICAgIEJyeWFuIFd1IDxjb29sb25leUBrZXJuZWwub3JnPgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC01NzEsMTkgKzU0OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CiB7CiAJVlJQQUlSKFZMRVZfMTAwLCA0MDAwMDAwMDApLApAQCAtNjYwLDggKzYyNSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpicmRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemJyZF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMKaW5kZXggNjk4ZTg4Yy4uNzhiNDM2MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICAgQnJ5YW4gV3UgPGNvb2xvbmV5QGtlcm5lbC5vcmc+CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oCmluZGV4IDc4ZGExYTAuLjg1NmIzMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmY1MTguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmNTE4LmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9iZjUxOC5oCi0gKiBCYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZjUyNy5oCi0gKiBBdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1MTgKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1MThfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBkYmFkZTkzLi45NzBkMzEwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDgzNDIxZDMuLjZjZmIyNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTEyLmgKaW5kZXggODIwYzEzYy4uNDkzMDIwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxMi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTEyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MTJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKaW5kZXggZGZlNDkyZC4uZTFkOTk5MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTE0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUxNF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaAppbmRleCAxNGRmNDNkLi42YjM2NGVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9jZGVmYmY1MTYuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTE2X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxOC5oCmluZGV4IGJhZmIzNzAuLjkyOWI5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2NkZWZiZjUxOC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MThfSApAQCAtMjExLDYgKzE4Niw0NyBAQAogI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfQUJPUlQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQUJPUlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQUJPUlQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0FCT1JULCB2YWwpCiAKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0NUTCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9DVEwodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lFKCkgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lFKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0lFKHZhbCkgICAgICAgICAgICAgYmZpbl93cml0ZTE2KEVNQUNfUFRQX0lFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9JU1RBVCgpICAgICAgICAgICAgICBiZmluX3JlYWQxNihFTUFDX1BUUF9JU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JU1RBVCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9JU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfRk9GRigpICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfRk9GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9GT0ZGKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9GT0ZGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjEoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYxKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYyKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjMoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYzKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BRERFTkQoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BRERFTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfQURERU5EKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfQURERU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BQ0NSKCkgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BQ0NSKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FDQ1IodmFsKSAgICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FDQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX09GRlNFVCgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX09GRlNFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9PRkZTRVQodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9PRkZTRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RJTUVMTygpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RJTUVMTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9USU1FTE8odmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9USU1FTE8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RJTUVISSgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RJTUVISSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9USU1FSEkodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9USU1FSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1JYU05BUExPKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1JYU05BUExPKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUlhTTkFQSEkoKSAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUlhTTkFQSEkpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9UWFNOQVBMTygpICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9UWFNOQVBMTykKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RYU05BUEhJKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RYU05BUEhJKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfQUxBUk1MTygpICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfQUxBUk1MTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9BTEFSTUxPKHZhbCkgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9BTEFSTUxPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BTEFSTUhJKCkgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BTEFSTUhJKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FMQVJNSEkodmFsKSAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FMQVJNSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lEX09GRigpICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lEX09GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JRF9PRkYodmFsKSAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9JRF9PRkYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lEX1NOQVAoKSAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0lEX1NOQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfSURfU05BUCh2YWwpICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfSURfU05BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUFBTX1NUQVJUSEkoKSAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUFBTX1NUQVJUSEkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfUFBTX1NUQVJUSEkodmFsKSAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfUFBTX1NUQVJUSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1BQU19QRVJJT0QoKSAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1BQU19QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfUFBTX1BFUklPRCh2YWwpICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfUFBTX1BFUklPRCwgdmFsKQorCiAvKiBSZW1vdmFibGUgU3RvcmFnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QV1JfQ1RMKCkgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QV1JfQ09OVFJPTCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaAppbmRleCBlZTNkNDczLi4xZDk3MGRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZkJGNTF4X2Jhc2UuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MlhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oCmluZGV4IGE5NmNhOTAuLjliNTA1YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKaW5kZXggNTZlZTVhNy4uYjVhZGNhMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2RlZkJGNTE0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MTRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oCmluZGV4IGRmYzkzODQuLjdlYjE4NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxNi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTE2X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTguaAppbmRleCA2ZTk4MmFiLi43OTRjZjA2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvZGVmQkY1MTguaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxOF9ICkBAIC02NDgsNCArNjI0LDMyIEBACiAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJXUiAgMHgxICAgICAgICAvKiBSZWFkIFdhaXQgUmVxdWVzdCAqLwogCisvKiBCaXQgbWFza3MgZm9yIEVNQUNfUFRQX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQVFBfRU4gIDB4MSAgICAgICAgLyogRW5hYmxlIHRoZSBQVFBfVFNZTkMgbW9kdWxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVEwgIDB4MiAgICAgICAgLyogVGltZXN0YW1wIGxvY2sgY29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBU0VOICAweDEwICAgICAgIC8qIEF1eGlsaWFyeSBzbmFwc2hvdCBjb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUFBTRU4gIDB4ODAgICAgICAgLyogUHVsc2UtcGVyLXNlY29uZCAoUFBTKSBjb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0tPRU4gIDB4MjAwMCAgICAgLyogQ2xvY2sgb3V0cHV0IGNvbnRyb2wgKi8KKworLyogQml0IG1hc2tzIGZvciBFTUFDX1BUUF9JRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFMSUUgIDB4MSAgICAgICAgLyogQWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYRUlFICAweDIgICAgICAgIC8qIFJlY2VpdmUgZXZlbnQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYR0lFICAweDQgICAgICAgIC8qIFJlY2VpdmUgZ2VuZXJhbCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRYSUUgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYT1ZFICAweDEwICAgICAgIC8qIFJlY2VpdmUgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFhPVkUgIDB4MjAgICAgICAgLyogVHJhbnNtaXQgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFTSUUgIDB4NDAgICAgICAgLyogQXV4aWxpYXJ5IHNuYXBzaG90IGludGVycnVwdCBlbmFibGUgKi8KKworLyogQml0IG1hc2tzIGZvciBFTUFDX1BUUF9JU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBTFMgIDB4MSAgICAgICAgLyogQWxhcm0gc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJYRUwgIDB4MiAgICAgICAgLyogUmVjZWl2ZSBldmVudCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJYR0wgIDB4NCAgICAgICAgLyogUmVjZWl2ZSBnZW5lcmFsIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFhUTCAgMHg4ICAgICAgICAvKiBUcmFuc21pdCBzbmFwc2hvdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUlhPViAgMHgxMCAgICAgICAvKiBSZWNlaXZlIHNuYXBzaG90IG92ZXJydW4gc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRYT1YgIDB4MjAgICAgICAgLyogVHJhbnNtaXQgc25hcHNob3Qgb3ZlcnJ1biBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFTTCAgMHg0MCAgICAgICAvKiBBdXhpbGlhcnkgc25hcHNob3QgaW50ZXJydXB0IHN0YXR1cyAqLworCiAjZW5kaWYgLyogX0RFRl9CRjUxOF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCmluZGV4IDFiZWM4ZDEuLmUwNmY0MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvZGVmQkY1MXhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxWF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDk3NTc2ODMuLmJiYWIyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCAzZmYwZjA5Li4xNGU1MmVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvaXJxLmgKLSAqIGJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2lycS5oCi0gKiBhdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MThfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGEwZmM3N2YuLmUzNTI5MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jCmluZGV4IDMxNTFmZDUuLmJiMDViZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgQnJ5YW4gV3UgPGNvb2xvbmV5QGtlcm5lbC5vcmc+CisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKaW5kZXggMDhhM2YwMS4uZjE5OTZiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbS1iZjUyNy5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC02MTYsMTIgKzU5NSw2IEBACiB9OwogI2VuZGlmICAvKiBzcGkgbWFzdGVyIGFuZCBkZXZpY2VzICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNzg2LDYgKzc1OSwxMSBAQAogCQkuaXJxID0gSVJRX1BGOCwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtODIxLDE5ICs3OTksNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogCVZSUEFJUihWTEVWXzEwMCwgNDAwMDAwMDAwKSwKQEAgLTkwOSwxMCArODc0LDYgQEAKIAkmYmZpbl9zcGkwX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC05NDIsOCArOTAzLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIAkmY21fZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjbV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKaW5kZXggNjhiNGM4MC4uY2FkMjNiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTYxMSwxOSArNTg5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIAlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCkBAIC03MzIsOCArNjk3LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemJyZF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV6YnJkX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwppbmRleCAyODQ5YjA5Li5mMDk2NjVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtNzE2LDEyICs2OTQsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl91YXJ0X3Jlc291cmNlc1tdID0gewogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMApAQCAtODM3LDYgKzgwOSwxMSBAQAogCQkuaXJxID0gSVJRX1BGOCwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtOTA1LDE5ICs4ODIsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogCVZSUEFJUihWTEVWXzEwMCwgNDAwMDAwMDAwKSwKQEAgLTEwMDEsMTAgKzk2NSw2IEBACiAJJmJmNTJ4X3QzNTBtY3FiX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC0xMDM4LDggKzk5OCw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemtpdF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMKaW5kZXggMjMxODc3NS4uN2JjNzU3NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmgKaW5kZXggMzgzMmFhYi4uZmY2OGM4OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2JmNTI3LmgKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTI3Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTI3X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZWJkNmNlYi4uYzFkNTViOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWQgZmlsZQotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCBlYTljYjBmLi5lN2Q2MDM0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyMi5oCmluZGV4IDY2M2MyYmIuLjEwNzlhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjIuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKaW5kZXggMDAzNzdlYi4uZGMzMTE5ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyNS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKaW5kZXggZmNhOGRiNy4uZDY1Nzk0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjdfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oCmluZGV4IDFmZTc2ZDguLjcwMTRkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MnhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTJYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaAppbmRleCAwYThjZGNkLi5jYjEzOWEyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyMi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MjIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUyMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmgKaW5kZXggNWNkNzU3Ni4uODJhYmVmYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjUuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTI1LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MjVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oCmluZGV4IGYwNDBmMzYuLjU3MGExMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTI3X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKaW5kZXggNjhiNTVkMC4uZjgyMTcwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyeF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MlhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAwNmI2ZWViLi4xMDRiZmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggOGVhNjYwZC4uYWE2NTc5YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MjdfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDcyYjE2NTIuLmQ0NTE4YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW50cy1wcmlvcml0eS5jCmluZGV4IGY4YzhhY2QuLjQ0Y2EyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYwppbmRleCA2YzJiNDdmLi40M2Y0M2EwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCkBAIC0xLDMyICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvSDg2MDYuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBKYXZpZXIgSGVycmVybyA8amhlcnJlcm9AaHZzaXN0ZW1hcy5lcz4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDctMjAwOCBIViBTaXN0ZW1hcyBTLkwuCisgKiAgICAgICAgICAgICAgICAgICAgICBKYXZpZXIgSGVycmVybyA8amhlcnJlcm9AaHZzaXN0ZW1hcy5lcz4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNwotICogRGVzY3JpcHRpb246ICBCb2FyZCBJbmZvIEZpbGUgZm9yIHRoZSBIViBTaXN0ZW1hcyBIODYwNiBib2FyZAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMKLSAqCQkgQ29weXJpZ2h0IDIwMDcsMjAwOCBIViBTaXN0ZW1hcyBTLkwuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwppbmRleCA4MjA4ZDY3Li5iNTgwODg0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwpAQCAtMSwxNiArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JsYWNrc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBCZW5qYW1pbiBNYXR0aGV3cyA8Ym1hdEBsbGUucm9jaGVzdGVyLmVkdT4KLSAqICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIEJvYXJkIEluZm8gRmlsZSBmb3IgdGhlIEJsYWNrU3RhbXAKICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDgKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgSW5mbyBGaWxlIGZvciB0aGUgQmxhY2tTdGFtcAotICoKLSAqIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiAgICAgICAgICAgICAgICAyMDA4IEJlbmphbWluIE1hdHRoZXdzIDxibWF0QGxsZS5yb2NoZXN0ZXIuZWR1PgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgogICogTW9yZSBpbmZvIGFib3V0IHRoZSBCbGFja1N0YW1wIGF0OgogICogCWh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy9nZi9wcm9qZWN0L2JsYWNrc3RhbXAvCkBAIC0yODEsMTkgKzI3NSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC0zODQsOCArMzY1LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogCSZpMmNfZ3Bpb19kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJsYWNrc3RhbXBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jCmluZGV4IDc0NDNiMjYuLjdmYzNiODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTMzLmMKQEAgLTEsMzAgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4gQ29weXJpZ2h0IDIwMDUKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjYxLDE5ICsyNDEsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01MDYsOCArNDczLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1MzNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCmluZGV4IGZkNTE4ZTMuLmQ0Njg5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgT3JpZ2luYWwgV29yawotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOiAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+IC0gTmFtZWQgdGhlIGJvYXJkcwotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzMsMTIgKzExLDE0IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMzYyLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KQEAgLTU2LDEyICszNiw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KIC8qCiAgKiAgVVNCLUxBTiBFekV4dGVuZGVyIGJvYXJkCiAgKiAgRHJpdmVyIG5lZWRzIHRvIGtub3cgYWRkcmVzcywgaXJxIGFuZCBmbGFnIHBpbi4KQEAgLTk4LDU0ICs3Miw2OSBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX1BTRDQyNTZHKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkdfTU9EVUxFKQotc3RhdGljIGNvbnN0IGNoYXIgKm1hcF9wcm9iZXNbXSA9IHsKLQkic3RtX2ZsYXNoIiwKLQlOVUxMLAorI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXpraXRfcGFydGl0aW9uc19hW10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICJib290bG9hZGVyKG5vciBhKSIsCisJCS5zaXplICAgICAgID0gMHg0MDAwMCwKKwkJLm9mZnNldCAgICAgPSAwLAorCX0sIHsKKwkJLm5hbWUgICAgICAgPSAibGludXgga2VybmVsKG5vciBhKSIsCisJCS5zaXplICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBzdG1fcHJpX2RhdGFfYSA9IHsKLQkubWFwbmFtZSAgICA9ICJGbGFzaCBBIFByaW1hcnkiLAotCS5tYXBfcHJvYmVzID0gbWFwX3Byb2JlcywKLQkuYmFua3dpZHRoICA9IDIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlemtpdF9mbGFzaF9kYXRhX2EgPSB7CisJLndpZHRoICAgICAgPSAyLAorCS5wYXJ0cyAgICAgID0gZXpraXRfcGFydGl0aW9uc19hLAorCS5ucl9wYXJ0cyAgID0gQVJSQVlfU0laRShlemtpdF9wYXJ0aXRpb25zX2EpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdG1fcHJpX3Jlc291cmNlX2EgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV6a2l0X2ZsYXNoX3Jlc291cmNlX2EgPSB7CiAJLnN0YXJ0ID0gMHgyMDAwMDAwMCwKIAkuZW5kICAgPSAweDIwMGZmZmZmLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RtX3ByaV9kZXZpY2VfYSA9IHsKLQkubmFtZSAgICAgICAgICA9ICJtdGQtcmFtIiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV6a2l0X2ZsYXNoX2RldmljZV9hID0geworCS5uYW1lICAgICAgICAgID0gInBoeXNtYXAtZmxhc2giLAogCS5pZCAgICAgICAgICAgID0gMCwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzdG1fcHJpX2RhdGFfYSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXpraXRfZmxhc2hfZGF0YV9hLAogCX0sCiAJLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSAgICAgID0gJnN0bV9wcmlfcmVzb3VyY2VfYSwKKwkucmVzb3VyY2UgICAgICA9ICZlemtpdF9mbGFzaF9yZXNvdXJjZV9hLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0ZGF0YV9tdGRfcmFtIHN0bV9wcmlfZGF0YV9iID0gewotCS5tYXBuYW1lICAgID0gIkZsYXNoIEIgUHJpbWFyeSIsCi0JLm1hcF9wcm9iZXMgPSBtYXBfcHJvYmVzLAotCS5iYW5rd2lkdGggID0gMiwKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlemtpdF9wYXJ0aXRpb25zX2JbXSA9IHsKKwl7CisJCS5uYW1lICAgPSAiZmlsZSBzeXN0ZW0obm9yIGIpIiwKKwkJLnNpemUgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RtX3ByaV9yZXNvdXJjZV9iID0geworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXpraXRfZmxhc2hfZGF0YV9iID0geworCS53aWR0aCAgICAgID0gMiwKKwkucGFydHMgICAgICA9IGV6a2l0X3BhcnRpdGlvbnNfYiwKKwkubnJfcGFydHMgICA9IEFSUkFZX1NJWkUoZXpraXRfcGFydGl0aW9uc19iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXpraXRfZmxhc2hfcmVzb3VyY2VfYiA9IHsKIAkuc3RhcnQgPSAweDIwMTAwMDAwLAogCS5lbmQgICA9IDB4MjAxZmZmZmYsCiAJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdG1fcHJpX2RldmljZV9iID0gewotCS5uYW1lICAgICAgICAgID0gIm10ZC1yYW0iLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXpraXRfZmxhc2hfZGV2aWNlX2IgPSB7CisJLm5hbWUgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkICAgICAgICAgICAgPSA0LAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnN0bV9wcmlfZGF0YV9iLAorCQkucGxhdGZvcm1fZGF0YSA9ICZlemtpdF9mbGFzaF9kYXRhX2IsCiAJfSwKIAkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlICAgICAgPSAmc3RtX3ByaV9yZXNvdXJjZV9iLAorCS5yZXNvdXJjZSAgICAgID0gJmV6a2l0X2ZsYXNoX3Jlc291cmNlX2IsCiB9OwogI2VuZGlmCiAKQEAgLTQwMCwxOSArMzg5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ2MCwxMyArNDM2LDIxIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBiZmluX2kyY19ib2FyZF9pbmZvW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplemtpdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAogCSZiZmluX2RwbWMsCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkcpIHx8IGRlZmluZWQoQ09ORklHX01URF9QU0Q0MjU2R19NT0RVTEUpCi0JJnN0bV9wcmlfZGV2aWNlX2EsCi0JJnN0bV9wcmlfZGV2aWNlX2IsCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKKwkmZXpraXRfZmxhc2hfZGV2aWNlX2EsCisJJmV6a2l0X2ZsYXNoX2RldmljZV9iLAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUExBVFJBTSkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BMQVRSQU1fTU9EVUxFKQpAQCAtNDgyLDEwICs0NjYsNiBAQAogCSZiZmluX3NwaTBfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi0JJmJmaW5fZmJfYWR2NzM5M19kZXZpY2UsCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKIAkmcnRjX2RldmljZSwKICNlbmRpZgpAQCAtNTA3LDggKzQ4Nyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKIAkmaTJjX2dwaW9fZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemtpdF9pbml0KHZvaWQpCkBAIC01MTYsNiArNDk0LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZXpraXRfZGV2aWNlcywgQVJSQVlfU0laRShlemtpdF9kZXZpY2VzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShiZmluX3NwaV9ib2FyZF9pbmZvKSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYmZpbl9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJmaW5faTJjX2JvYXJkX2luZm8pKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwppbmRleCBmMTliNjMzLi42NDRiZTVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwpAQCAtMSwzNCArMSwxMiBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2lwMHguYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYmYxLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgSXZhbiBEYW5vdiA8aWRhbm92QGdtYWlsLmNvbT4KLSAqICAgICAgICAgICAgICAgTW9kaWZpZWQgZm9yIElQMFggRGF2aWQgUm93ZQorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA3IERhdmlkIFJvd2UKKyAqICAgICAgICAgICAgICAgIDIwMDYgSW50cmF0cmFkZSBMdGQuCisgKiAgICAgICAgICAgICAgICAgICAgIEl2YW4gRGFub3YgPGlkYW5vdkBnbWFpbC5jb20+CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNwotICogRGVzY3JpcHRpb246ICBCb2FyZCBpbmZvIGZpbGUgZm9yIHRoZSBJUDA0L0lQMDggYm9hcmRzLCB3aGljaAotICogICAgICAgICAgICAgICBhcmUgZGVyaXZlZCBmcm9tIHRoZSBCbGFja2Zpbk9uZSBWMi4wIGJvYXJkcy4KLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ09weXJpZ2h0IDIwMDcgRGF2aWQgUm93ZQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNiBJbnRyYXRyYWRlIEx0ZC4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0xNDUsNyArMTIzLDYgQEAKIAkuY3RsX3JlZyA9IDB4MTAwMCwJCS8qIENQT0w9MCxDUEhBPTAsU2FuZGlzayAxRyB3b3JrICovCiAJLmVuYWJsZV9kbWEgPSAwLAkJLyogaWYgMSAtIGJsb2NrISEhICovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKaW5kZXggNzI5ZmQ3Yy4uODJmNzBlZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgSW5mbyBGaWxlIGZvciB0aGUgQkY1MzMtU1RBTVAKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTk1LDEyICs3Myw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTkVUMjI3MikgfHwgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzJfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuZXQyMjcyX2JmaW5fcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtNDM2LDE5ICs0MDgsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KIApAQCAtNDg3LDYgKzQ0NiwxMSBAQAogCQkuaXJxID0gMzksCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJiZmluLWFkdjczOTMiLCAweDJCKSwKKwl9LAorI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CkBAIC01MjgsMTAgKzQ5Miw2IEBACiAJJnNtYzkxeF9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLQkmYmZpbl9mYl9hZHY3MzkzX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzIpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyX01PRFVMRSkKIAkmbmV0MjI3Ml9iZmluX2RldmljZSwKICNlbmRpZgpAQCAtNTYzLDggKzUyMyw2IEBACiAJJmkyY19ncGlvX2RldmljZSwKICNlbmRpZgogCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0JGSU5fQVNZTkMpIHx8IGRlZmluZWQoQ09ORklHX01URF9CRklOX0FTWU5DX01PRFVMRSkKIAkmc3RhbXBfZmxhc2hfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMKaW5kZXggN2E0NDNjMy4uNGExNGE0NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oCmluZGV4IGNmNDQyN2MuLmUzZTA1ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9iZjUzMy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1MzNfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCA2OTY1YjQwLi45ZTFmM2RlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDQ5OWU4OTcuLmY0YmQ2ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2NkZWZCRjUzMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaAppbmRleCBiYmMzYzgzLi5mZWIyMzkyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2NkZWZCRjUzMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvY2RlZkJGNTMyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9jZGVmQkY1MzIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmgKaW5kZXggN2Y0NjMzMi4uMDJiMzI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaApAQCAtMSw0OCArMSwxMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIFB1YmxpYwotICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIE5vbi1HUEwgTGljZW5zZSBhbHNvIGF2YWlsYWJsZSBhcyBwYXJ0IG9mIFZpc3VhbERTUCsrCi0gKiBodHRwOi8vd3d3LmFuYWxvZy5jb20vcHJvY2Vzc29ycy9yZXNvdXJjZXMvY3Jvc3Njb3JlL3Zpc3VhbERzcERldlNvZnR3YXJlLmh0bWwKLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDEtMjAwNSBBbmFsb2cgRGV2aWNlcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gKgotICogVGhpcyBmaWxlIHVuZGVyIHNvdXJjZSBjb2RlIGNvbnRyb2wsIHBsZWFzZSBzZW5kIGJ1Z3Mgb3IgY2hhbmdlcyB0bzoKLSAqIGRzcHRvb2xzLnN1cHBvcnRAYW5hbG9nLmNvbQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2RlZkJGNTMyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU3lzdGVtICYgTU1SIGJpdCBhbmQgQWRkcmVzcyBkZWZpbml0aW9ucyBmb3IgQURTUC1CRjUzMgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwotLyogU1lTVEVNICYgTU0gUkVHSVNURVIgQklUICYgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUzMiAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzJfSAogI2RlZmluZSBfREVGX0JGNTMyX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggZTQ1YzE3MC4uMmFmMTlkNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTEsNyArMSw0IEBACiAvKgotICogRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmgKLSAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvaXJxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2lycS5oCmluZGV4IGRiMWUzNDYuLmMzMTQ5OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9pcnEuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2RlZkJGNTMyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0JGNTMzX0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCAyZjU5Y2UwLi4wNzVkYWUxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwppbmRleCBmNTE5OTRiLi44ZjcxNGNmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDogICAgICA/Ci0gKiBEZXNjcmlwdGlvbjogIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYwppbmRleCA4N2FjYjdkLi5jODVmNGQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzdlLmMKQEAgLTEsMzEgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzcuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTI5NywxOSArMjc2LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNjk5LDggKzY2NSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiAJJmNtX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1MzdlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jCmluZGV4IDgyMTlkYzMuLmVhMTFhYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTI5OCwxOSArMjc3LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNjA1LDggKzU3MSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiAJJmNtX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1Mzd1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYwppbmRleCAzOTlmODFkLi4wZGE5MjcyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jCkBAIC0xLDQgKzEsMTAgQEAKIC8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQ2FtYnJpZGdlIFNpZ25hbCBQcm9jZXNzaW5nCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMKaW5kZXggMTBiMzViOC4uOWJhMjkwNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzAyLDcgKzI4MCw2IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3N19jaGlwX2luZm8gPSB7Ci0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiAJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gMTYsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCmluZGV4IDlkYjZiNDAuLmM0NmJhYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0xMjEsMTkgKzk5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19CRklOX0NGUENNQ0lBKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0NGUENNQ0lBX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9wY21jaWFfY2ZfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtMTA3OCwxMiArMTA0Myw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMV9NT0RVTEUpCiAjaW5jbHVkZSA8YXNtL2JmaW4tbHEwMzVxMS5oPgogCkBAIC0xNDk4LDYgKzE0NTcsMTEgQEAKIAkJLnBsYXRmb3JtX2RhdGEgPSAodm9pZCAqKSZhZHA1NTg4X2dwaW9fZGF0YSwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtMTY2OCwxMCArMTYzMiw2IEBACiAJJmJmaW5fbHEwMzVxMV9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLQkmYmZpbl9mYl9hZHY3MzkzX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIAkmYmZpbl91YXJ0X2RldmljZSwKICNlbmRpZgpAQCAtMTcwMiw4ICsxNjYyLDYgQEAKIAkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BMQVRGT1JNKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QTEFURk9STV9NT0RVTEUpCiAJJmJmaW5fYXN5bmNfbmFuZF9kZXZpY2UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCmluZGV4IDYxMzUzZjcuLjU3MTYzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTM3LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTI5OCwxOSArMjc3LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNjA3LDggKzU3Myw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiAJJmNtX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdGNtX2JmNTM3X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYwppbmRleCBkMjNmYzBlLi41YzhjNGVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jCkBAIC0xLDMxICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaAppbmRleCBmMTk0YTg0Li4xN2ZhYjQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBTeXN0ZW0gTU1SIFJlZ2lzdGVyIGFuZCBtZW1vcnkgbWFwIGZvciBBRFNQLUJGNTM3CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjUzNworICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTM3X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZTk1ZDU0Zi4uNjM1YzkxYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkZXIgZmlsZXMKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggOWVlODgzNC4uZWFiMDA2ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JsYWNrZmluLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzQuaAppbmRleCA1ZjhiNWY4Li45MTgyNWM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9jZGVmYmY1MzQuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTM0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNy5oCmluZGV4IGI4ZmM5NDkuLjkzNjNjMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzcuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2NkZWZCRjUzNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCVN5c3RlbSBNTVIgUmVnaXN0ZXIgTWFwCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzN19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKaW5kZXggYTMyMjdmOS4uY2ViYjE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2NkZWZCRjUzNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTM0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaAppbmRleCAzZDZjODNlLi44Y2I1ZDVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNy5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvZGVmYmY1MzcuaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzdfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBkNzdhMzFlLi4xMDRiZmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggYjJhNzFkNS4uMGRlZmE5NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvaXJxLmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9CRjUzN19JUlFfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggODcyODVlNy4uZGE5NzYwMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKaW5kZXggNTFjNDgwOC4uZjY1MDA2MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKaW5kZXggZjJhYzNiMC4uMTRhZjVjMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjM3LDcgKzIxNSw2IEBACiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2ZsYXNoX2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCkBAIC01MDYsMTkgKzQ4Myw2IEBACiAjZW5kaWYKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogCkBAIC02NTgsOCArNjIyLDYgQEAKIAkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jCmluZGV4IGQ2ODM3ZmIuLjVkYzAyMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmY1MzguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmY1MzguaAppbmRleCA5YzhhYmIzLi4wY2Y1YmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmNTM4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZjUzOC5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvYmY1MzguaAotICogQmFzZWQgb246CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1MzgKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTI3CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTM4X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggOTk5ZjIzOS4uNWMxNDgxNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkZXIgZmlsZXMKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDVlY2VlMTYuLjI3OGU4OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzOC9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOC5oCmluZGV4IDFkZTY3NTEuLjQwMWViZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2NkZWZCRjUzOC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzOF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKaW5kZXggMWM1ODkxNC4uNWY2YzM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaApAQCAtMSw0NyArMSw5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogTm9uLUdQTCBMaWNlbnNlIGFsc28gYXZhaWxhYmxlIGFzIHBhcnQgb2YgVmlzdWFsRFNQKysKLSAqIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9wcm9jZXNzb3JzL3Jlc291cmNlcy9jcm9zc2NvcmUvdmlzdWFsRHNwRGV2U29mdHdhcmUuaHRtbAotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMS0yMDA1IEFuYWxvZyBEZXZpY2VzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKiBUaGlzIGZpbGUgdW5kZXIgc291cmNlIGNvZGUgY29udHJvbCwgcGxlYXNlIHNlbmQgYnVncyBvciBjaGFuZ2VzIHRvOgotICogZHNwdG9vbHMuc3VwcG9ydEBhbmFsb2cuY29tCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvZGVmQkY1MzkuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCisKIC8qIFNZU1RFTSAmIE1NIFJFR0lTVEVSIEJJVCAmIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MzgvOSAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzlfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAzMGY0ZjcyLi4yOTVjNzhhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggZmRjODdmZS4uYTRiN2ZjYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRjUzOF9JUlFfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggYzhkYjI2NC4uNjEyMWNmOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jCmluZGV4IDcwZDE3ZTUuLjFmYTc5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2gKKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKaW5kZXggZTU2NWFhZS4uY2NkY2Q2ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0zODAsMTkgKzM1OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WCkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fYXRhcGlfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtNTQ2LDEzICs1MTIsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfZmxhc2hfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3N19jaGlwX2luZm8gPSB7Ci0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiAJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gMTYsCiB9OwpAQCAtODUzLDggKzgxNyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmcGFyYV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTQ4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwppbmRleCBjNjZmMzgwLi4xYTUyODZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjA4LDcgKzE4Niw2IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFgpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFhfTU9EVUxFKQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2FkeGwzNHguaD4KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWR4bDM0eF9wbGF0Zm9ybV9kYXRhIGFkeGwzNHhfaW5mbyA9IHsKIAkueF9heGlzX29mZnNldCA9IDAsCkBAIC02MzYsNyArNjEzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfZmxhc2hfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKQEAgLTY1MCw3ICs2MjYsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0gewotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDE2LAogfTsKQEAgLTY4MSw3ICs2NTYsNiBAQAogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZHhsMzR4X2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCkBAIC05MDgsMTkgKzg4Miw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CiB7CiAvKgpAQCAtMTAyOCw4ICs5ODksNiBAQAogCSZiZmluX2RldmljZV9ncGlva2V5cywKICNlbmRpZgogCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKaW5kZXggZDkyMzliYy4uMDM5YTZkOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaAppbmRleCBjZDMxZjcyLi43YmVhZDVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYmY1NDguaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTeXN0ZW0gTU1SIHJlZ2lzdGVyIGFuZCBtZW1vcnkgbWFwIGZvciBBRFNQLUJGNTQ4Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTQ4X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eC1scTA0My5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eC1scTA0My5oCmluZGV4IDljN2NhNjIuLjg4MjFlZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHgtbHEwNDMuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4LWxxMDQzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgQkY1NFhfTFEwNDNfSAogI2RlZmluZSBCRjU0WF9MUTA0M19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHhfa2V5cy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKaW5kZXggMWZiNGVjNy4uNDkzMzhhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fS1BBRF9ICiAjZGVmaW5lIF9CRklOX0tQQURfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCAyZDFiNWZhLi5kZDQ0YWE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCAzMTg2NjdiLi4xMzMwMmI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDIuaAppbmRleCAwN2FlZmI5Li40MmY0YTk0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ0LmgKaW5kZXggNDMxYTY5Mi4uMjIwNzc5OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0NC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTQ0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oCmluZGV4IDkzMzc2ZTkuLjQyMzQyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDcuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0Ny5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmgKaW5kZXggOWNkNzQzOC4uZGY4NDE4MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTQ4X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OS5oCmluZGV4IGVhZDM2MGIuLjM0Yzg0YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDkuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ5L2NkZWZCRjU0OS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0OV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmgKaW5kZXggNmU2MzZjNC4uYTJlOWQ5OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0eF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTRYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaAppbmRleCBiMTMxNjU0Li5kM2JjNmQxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Mi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0Ml9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKaW5kZXggYzJjNzg1Yi4uZGQ0MTRhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCmluZGV4IDY2MWYwZDguLjVhOWRiYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0Ny5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0OF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmgKaW5kZXggODVkNGJhZC4uODJjZDU5MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oCmluZGV4IDA5NjczNDUuLjZmYzZlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ5LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0OS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTQ5X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKaW5kZXggZTAyMmU4OS4uODU5MGM4YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0eF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NFhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAzYTIwNTE3Li44NTBlMzlkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSwzNCArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2dwaW8uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CSBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQotICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0KLQogI2RlZmluZSBHUElPX1BBMAkwCiAjZGVmaW5lIEdQSU9fUEExCTEKICNkZWZpbmUgR1BJT19QQTIJMgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggZjE5NDYyNS4uMTA2ZGIwNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglSb3kgSHVhbmcgKHJveS5odWFuZ0BhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkY1NDhfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGNlMzcyYmEuLjg5YWQ2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2ludHMtcHJpb3JpdHkuYwppbmRleCA5ZGQwZmEzLi40OGRkM2E0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwppbmRleCA5NDM5YmM2Li4wMjYxYTVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2F0b21pYy5TCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYwppbmRleCA2NTc3ZWNmLi5kZmM4ZDViIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9jbV9iZjU2MS5jCkBAIC0xLDMwICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTYxLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+IENvcHlyaWdodCAyMDA1CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDYKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZGVzY3JpcHRpb24gZmlsZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yODUsMTkgKzI2NSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpc3AxMzYyX2hjZF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01MzIsOCArNDk5LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1NjFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCmluZGV4IGNhZWQ5NmIuLjllMmQ4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2V6a2l0LmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTM4NywxOSArMzY2LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ5Myw4ICs0NTksNiBAQAogCSZpc3AxMzYyX2hjZF9kZXZpY2UsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jCmluZGV4IDZmNzdkYmUuLjhiYTcyNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL3RlcGxhLmMKQEAgLTEsMTUgKzEsMTMgQEAKIC8qCi0gKiAgRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3RlcGxhLmMKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICogIE9ubHkgU01TQzkxQzExMTEgd2FzIHJlZ2lzdGVyZWQsIG1heSBkbyBtb3JlIGxhdGVyLgorICogVGhhbmtzIHRvIEphbWV5IEhpY2tzLgogICoKLSAqICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSksIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+Ci0gKiAgVGhhbmtzIHRvIEphbWV5IEhpY2tzLgorICogT25seSBTTVNDOTFDMTExMSB3YXMgcmVnaXN0ZXJlZCwgbWF5IGRvIG1vcmUgbGF0ZXIuCiAgKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9jb3JlYi5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKaW5kZXggOTM2MzVhNy4uMWU2MGE5MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb3JlYl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29yZWJfZm9wcyA9IHsKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5pb2N0bCAgID0gY29yZWJfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jCmluZGV4IDQyYjAwMzcuLmM5MzhjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmgKaW5kZXggOTk2ODM2Mi4uOWY5YTM2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmY1NjEuaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2JmNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjU2MV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGZkNWU4ODcuLmUzM2UxNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDhiZTMxMzUuLjY3ZDZiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvY2RlZkJGNTYxLmgKaW5kZXggOWQ5ODU4Yy4uODFlY2RiNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2NkZWZCRjU2MS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvY2RlZkJGNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgQyBQT0lOVEVSUyBUTyBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NjFfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oCmluZGV4IDVmYzBmMDUuLmEzMWU1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2RlZkJGNTYxLmgKQEAgLTEsMzIgKzEsNyBAQAotCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2RlZkJGNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU2MV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDc4ODJmNzkuLmE2NTFhOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCA2Njk4Mzg5Li43YjIwOGRiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAotCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2lycS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkY1NjFfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDJlNWFkNjMuLjNhN2I0NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9zbXAuaAppbmRleCBmOWU2NWViLi4zOTBjN2Y0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX01BQ0hfQkY1NjFfU01QCiAjZGVmaW5lIF9NQUNIX0JGNTYxX1NNUAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYwppbmRleCA5ZDJmMjMzLi5iNDQyNDE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUwppbmRleCBmNzJhNmFmLi44ZTYwNTAzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NlY29uZGFyeS5TCkBAIC0xLDI2ICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hlYWQuUwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQkY1NjEgY29yZUIgYm9vdHN0cmFwIGZpbGUKICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqIERlc2NyaXB0aW9uOiAgQkY1NjEgY29yZUIgYm9vdHN0cmFwIGZpbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwppbmRleCA4YzEwNzAxLi41MTBmNTc2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKaW5kZXggNTk5OGQ4Ni4uOWRiYWZjZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgkgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBEbyBzb21lIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIE9LCiAgKgotICogQ3JlYXRlZDogICAgICAyNUp1bDA3Ci0gKiBEZXNjcmlwdGlvbjogIERvIHNvbWUgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgT0sKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8YXNtL2ZpeGVkX2NvZGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKaW5kZXggNGViYmQ3OC4uYTYwYTI0ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwppbmRleCBkOTY2NmZlLi5lYTU0MDMxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCkBAIC0zLDggKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCmluZGV4IDg1YzY1ODAuLjAxNTA2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOgkgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQmxhY2tmaW4gY29yZSBjbG9jayBzY2FsaW5nCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgkgQmxhY2tmaW4gY29yZSBjbG9jayBzY2FsaW5nCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqCQkgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczoJIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCTAyMTEwLTEzMDEJVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCmluZGV4IDFlN2NhYzIuLjk0YTAzNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKQEAgLTEsMzIgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIExpbnVzIFRvcnZhbGRzCisgKiBDb250YWlucyB0aGUgc3lzdGVtLWNhbGwgYW5kIGZhdWx0IGxvdy1sZXZlbCBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFRoaXMgYWxzbyBjb250YWlucyB0aGUgdGltZXItaW50ZXJydXB0IGhhbmRsZXIsIGFzIHdlbGwgYXMgYWxsCisgKiBpbnRlcnJ1cHRzIGFuZCBmYXVsdHMgdGhhdCBjYW4gcmVzdWx0IGluIGEgdGFzay1zd2l0Y2guCiAgKgotICogQ3JlYXRlZDogICAgICA/Ci0gKiBEZXNjcmlwdGlvbjogIGNvbnRhaW5zIHRoZSBzeXN0ZW0tY2FsbCBhbmQgZmF1bHQgbG93LWxldmVsIGhhbmRsaW5nIHJvdXRpbmVzLgotICogICAgICAgICAgICAgICBUaGlzIGFsc28gY29udGFpbnMgdGhlIHRpbWVyLWludGVycnVwdCBoYW5kbGVyLCBhcyB3ZWxsIGFzIGFsbAotICogICAgICAgICAgICAgICBpbnRlcnJ1cHRzIGFuZCBmYXVsdHMgdGhhdCBjYW4gcmVzdWx0IGluIGEgdGFzay1zd2l0Y2guCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogLyogTk9URTogVGhpcyBjb2RlIGhhbmRsZXMgc2lnbmFsLXJlY29nbml0aW9uLCB3aGljaCBoYXBwZW5zIGV2ZXJ5IHRpbWUKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKaW5kZXggOWM3OWRmZS4uY2FiMGEwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCmluZGV4IDgyZDQxN2UuLjgwODVmZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIEQuIEplZmYgRGlvbm5lIDxqZWZmQHJ5ZWhhbS5lZS5yeWVyc29uLmNhPgorICogSW50ZXJydXB0IEVudHJpZXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgRC4gSmVmZiBEaW9ubmUgPGplZmZAcnllaGFtLmVlLnJ5ZXJzb24uY2E+CiAgKiAgICAgICAgICAgICAgIEtlbm5ldGggQWxiYW5vd3NraSA8a2phaGRzQGtqYWhkcy5jb20+CiAgKgotICogQ3JlYXRlZDogICAgICA/Ci0gKiBEZXNjcmlwdGlvbjogIEludGVycnVwdCBFbnRyaWVzCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKaW5kZXggNmZmZGE3OC4uNjYwZWExYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzMgKzEsMTQgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgIDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgMjAwMyBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KKyAqICAgICAgICAgICAgICAgICAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4gTWFUZWQgPG1hdGVkQHN5bXBhdGljby5jYT4KKyAqICAgICAgICAgICAgMjAwMC0yMDAxIExpbmVvLCBJbmMuIEQuIEplZmZmIERpb25uZSA8amVmZkBsaW5lby5jYT4KKyAqICAgICAgICAgICAgICAgICAxOTk5IEQuIEplZmYgRGlvbm5lIDxqZWZmQHVjbGludXgub3JnPgorICogICAgICAgICAgICAgICAgIDE5OTYgUm9tYW4gWmlwcGVsCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIDE5OTYgUm9tYW4gWmlwcGVsCi0gKiAgICAgICAgICAgICAgIDE5OTkgRC4gSmVmZiBEaW9ubmUgPGplZmZAdWNsaW51eC5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDAtMjAwMSBMaW5lbywgSW5jLiBELiBKZWZmZiBEaW9ubmUgPGplZmZAbGluZW8uY2E+Ci0gKiAgICAgICAgICAgICAgIDIwMDIgQXJjdHVydXMgTmV0d29ya3MgSW5jLiBNYVRlZCA8bWF0ZWRAc3ltcGF0aWNvLmNhPgotICogICAgICAgICAgICAgICAyMDAzIE1ldHJvd2Vya3MvTW90b3JvbGEKLSAqICAgICAgICAgICAgICAgMjAwMyBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMKaW5kZXggODgzZTMyNC4uYzY0OTYyNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaXJxcGFuaWMuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogcGFuaWMga2VybmVsIHdpdGggZHVtcCBpbmZvcm1hdGlvbgogICoKLSAqIENyZWF0ZWQ6ICAgICAgPwotICogRGVzY3JpcHRpb246ICBwYW5pYyBrZXJuZWwgd2l0aCBkdW1wIGluZm9ybWF0aW9uCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDogICAgIHJnZXR6IC0gYWRkZWQgY2FjaGUgY2hlY2tpbmcgY29kZSAxNEZlYjA2Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYwppbmRleCAwZTNkNGZmLi44ODM3YmU0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCkBAIC0xLDM1ICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJtL21hY2gtb21hcC9wbS5jCi0gKiBBdXRob3I6ICAgICAgIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPiBDb3B5cmlnaHQgKGMpIDIwMDEKKyAqIEJsYWNrZmluIHBvd2VyIG1hbmFnZW1lbnQKICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDEKLSAqIERlc2NyaXB0aW9uOiAgQmxhY2tmaW4gcG93ZXIgbWFuYWdlbWVudAorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6ICAgICBOaWNvbGFzIFBpdHJlIC0gUFhBMjUwIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiBNb250YSBWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAgICAgICBEYXZpZCBTaW5nbGV0b24gLSBPTUFQMTUxMAotICogICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIE1vbnRhIFZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgICAgICAgIERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPiAtIE9NQVAxNTEwLzE2MTAKLSAqICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCisgKiBiYXNlZCBvbiBhcm0vbWFjaC1vbWFwL3BtLmMKKyAqICAgIENvcHlyaWdodCAyMDAxLCBDbGlmZiBCcmFrZSA8Y2JyYWtlQGFjY2VsZW50LmNvbT4gYW5kIG90aGVycwogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYwppbmRleCAzNDllZTNmLi5kOTg1ODVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKQEAgLTEsMjQgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3NtcC5jCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+Ci0gKiBJUEkgbWFuYWdlbWVudCBiYXNlZCBvbiBhcmNoL2FybS9rZXJuZWwvc21wLmMuCisgKiBJUEkgbWFuYWdlbWVudCBiYXNlZCBvbiBhcmNoL2FybS9rZXJuZWwvc21wLmMgKENvcHlyaWdodCAyMDAyIEFSTSBMaW1pdGVkKQogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaCBiL2FyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oCmluZGV4IGJjMDA2MjguLmZiMGIxNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5jCi0gKiBBdXRob3I6ICAgICAgIE1pa2UgRnJ5c2luZ2VyCisgKiBMb2NhbCBwcm90b3R5cGVzIG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seQogICoKLSAqIENyZWF0ZWQ6ICAgICAgQXVnIDIwMDYKLSAqIERlc2NyaXB0aW9uOiAgTG9jYWwgcHJvdG90eXBlcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0JMQUNLRklOX1NSQU1fSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL2luaXQuYyBiL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCmluZGV4IGI4OGNlN2YuLmJiOWM5OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMgYi9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCmluZGV4IGJlYjFhNjAuLjg0Y2RjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9pc3JhbS1kcml2ZXIuYwpAQCAtMSwxOSArMSw5IEBACiAvKgotICogRGVzY3JpcHRpb246IEluc3RydWN0aW9uIFNSQU0gYWNjZXNzb3IgZnVuY3Rpb25zIGZvciB0aGUgQmxhY2tmaW4KKyAqIEluc3RydWN0aW9uIFNSQU0gYWNjZXNzb3IgZnVuY3Rpb25zIGZvciB0aGUgQmxhY2tmaW4KICAqCiAgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNkZWZpbmUgcHJfZm10KGZtdCkgImlzcmFtOiAiIGZtdApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMgYi9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwppbmRleCBlYjYzYWIzLi5mMDY4YzExIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYworKysgYi9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBTUkFNIGFsbG9jYXRvciBmb3IgQmxhY2tmaW4gb24tY2hpcCBtZW1vcnkKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTUkFNIGFsbG9jYXRvciBmb3IgQmxhY2tmaW4gTDEgYW5kIEwyIG1lbW9yeQorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jCmluZGV4IDZjYzFhMDMuLjU2MmI5YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKICNkZWZpbmUgTlVNQkVSX09GX1BPUlRTIDIKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19zZXJpYWxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNfc2VyaWFsX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkud3JpdGUgICA9IHN5bmNfc2VyaWFsX3dyaXRlLAogCS5yZWFkICAgID0gc3luY19zZXJpYWxfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKaW5kZXggMmI3M2M3YS4uMzFjYTE0MSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogZXh0ZXJuIHZvaWQgdXBkYXRlX3h0aW1lX2Zyb21fY21vcyh2b2lkKTsKIGV4dGVybiBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7Ci1leHRlcm4gaW50IHNldHVwX2lycShpbnQsIHN0cnVjdCBpcnFhY3Rpb24gKik7CiBleHRlcm4gaW50IGhhdmVfcnRjOwogCiB1bnNpZ25lZCBsb25nIGdldF9uc19pbl9qaWZmaWUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtZnMvZ3Bpby5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKaW5kZXggZmUxZmRlOC4uZDg5YWI4MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKQEAgLTg1NSw3ICs4NTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKIAkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKIAkucG9sbCAgICAgICAgPSBncGlvX3BvbGwsCiAJLmlvY3RsICAgICAgID0gZ3Bpb19pb2N0bCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IGQyYTNmZjguLjA1OGFkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtNTIsOCArNTIsNiBAQAogc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCogZmx1c2hfdm1hOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZmx1c2hfYWRkcjsKIAotZXh0ZXJuIGludCBzZXR1cF9pcnEoaW50LCBzdHJ1Y3QgaXJxYWN0aW9uICopOwotCiAvKiBNb2RlIHJlZ2lzdGVycyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJxX3JlZ3NbTlJfQ1BVU10gPSB7CiAgIHJlZ2lfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwppbmRleCA2NTYzM2QwLi5iMTkyMGQ4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwpAQCAtNDYsNyArNDYsNiBAQAogCiBleHRlcm4gdm9pZCB1cGRhdGVfeHRpbWVfZnJvbV9jbW9zKHZvaWQpOwogZXh0ZXJuIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKTsKLWV4dGVybiBpbnQgc2V0dXBfaXJxKGludCwgc3RydWN0IGlycWFjdGlvbiAqKTsKIGV4dGVybiBpbnQgaGF2ZV9ydGM7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9pby5jCmluZGV4IGMyMmY2N2UuLjA5MGNlYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIE5CUl9PRl9QT1JUUyBzaXplb2YoY3Jpc3YzMl9pb3BvcnRzKS9zaXplb2Yoc3RydWN0IGNyaXN2MzJfaW9wb3J0KQorI2RlZmluZSBOQlJfT0ZfUE9SVFMgQVJSQVlfU0laRShjcmlzdjMyX2lvcG9ydHMpCiAKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfZ3JlZW47CiBzdHJ1Y3QgY3Jpc3YzMl9pb3BpbiBjcmlzdjMyX2xlZF9uZXQwX3JlZDsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9pby5jCmluZGV4IGNiNjMyN2IuLmE2OTU4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvaW8uYwpAQCAtNTIsNyArNTIsNyBAQAogCX0KIH07CiAKLSNkZWZpbmUgTkJSX09GX1BPUlRTIHNpemVvZihjcmlzdjMyX2lvcG9ydHMpL3NpemVvZihzdHJ1Y3QgY3Jpc3YzMl9pb3BvcnQpCisjZGVmaW5lIE5CUl9PRl9QT1JUUyBBUlJBWV9TSVpFKGNyaXN2MzJfaW9wb3J0cykKIAogc3RydWN0IGNyaXN2MzJfaW9waW4gY3Jpc3YzMl9sZWRfbmV0MF9ncmVlbjsKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfcmVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjEwL2FyY2gvbW11LmgKaW5kZXggZGY4NGYxNy4uZTgyOWU1YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYxMC9hcmNoL21tdS5oCkBAIC0zMywxMCArMzMsMTAgQEAKIAogLyogQ1JJUyBQVEUgYml0cyAoc2VlIFJfVExCX0xPIGluIHRoZSByZWdpc3RlciBkZXNjcmlwdGlvbikKICAqCi0gKiAgIEJpdDogIDMxLTEzIDEyLS0tLS0tLTQgICAgMyAgICAgICAgMiAgICAgICAxICAgICAgIDAgIAotICogICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAqICAgICAgICB8IHBmbiB8IHJlc2VydmVkIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3ZSAgfAotICogICAgICAgIHxfX19fX3xfX19fX19fX19ffF9fX19fX19ffF9fX19fX198X19fX19fX198X19fX198CisgKiAgIEJpdDogIDMxICAgICAzMC0xMyAxMi0tLS0tLS00ICAgIDMgICAgICAgIDIgICAgICAgMSAgICAgICAwCisgKiAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAqICAgICAgICB8IGNhY2hlIHxwZm4gfCByZXNlcnZlZCB8IGdsb2JhbCB8IHZhbGlkIHwga2VybmVsIHwgd2UgIHwKKyAqICAgICAgICB8X19fX19fX3xfX19ffF9fX19fX19fX198X19fX19fX198X19fX19fX3xfX19fX19fX3xfX19fX3wKICAqCiAgKiAocGZuID0gcGh5c2ljYWwgZnJhbWUgbnVtYmVyKQogICovCkBAIC01Myw2ICs1Myw3IEBACiAjZGVmaW5lIF9QQUdFX1ZBTElECSAgICgxPDwyKSAvKiBwYWdlIGlzIHZhbGlkICovCiAjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFEICAoMTw8MikgLyogc3lub255bSAqLwogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgKDE8PDMpIC8qIGdsb2JhbCBwYWdlIC0gY29udGV4dCBpcyBpZ25vcmVkICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCSAgICgxPDwzMSkgLyogcGFydCBvZiB0aGUgdW5jYWNoZWQgbWVtb3J5IG1hcCAqLwogCiAvKiBCaXRzIHRoZSBIVyBkb2Vzbid0IGNhcmUgYWJvdXQgYnV0IHRoZSBrZXJuZWwgdXNlcyB0aGVtIGluIFNXICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL21tdS5oCmluZGV4IDZiY2RjM2YuLmMxYTEzZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9tbXUuaApAQCAtMjgsMTAgKzI4LDEwIEBACiAvKgogICogQ1JJU3YzMiBQVEUgYml0czoKICAqCi0gKiAgQml0OiAgMzEtMTMgIDEyLTUgICAgIDQgICAgICAgIDMgICAgICAgMiAgICAgICAgMSAgICAgICAgMAotICogICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKwotICogICAgICAgfCBwZm4gfCB6ZXJvIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3cml0ZSB8IGV4ZWN1dGUgfAotICogICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKworICogIEJpdDogICAzMSAgICAgMzAtMTMgIDEyLTUgICAgIDQgICAgICAgIDMgICAgICAgMiAgICAgICAgMSAgICAgICAgMAorICogICAgICAgKy0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rCisgKiAgICAgICB8IGNhY2hlIHwgcGZuIHwgemVybyB8IGdsb2JhbCB8IHZhbGlkIHwga2VybmVsIHwgd3JpdGUgfCBleGVjdXRlIHwKKyAqICAgICAgICstLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKwogICovCiAKIC8qCkBAIC00NSw2ICs0NSw4IEBACiAjZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgKDEgPDwgMykJLyogUGFnZSBpcyB2YWxpZC4gKi8KICNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAoMSA8PCAzKQkvKiBTYW1lIGFzIGFib3ZlLiAqLwogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICgxIDw8IDQpCS8qIEdsb2JhbCBwYWdlLiAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkgICAgKDEgPDwgMzEpCS8qIHBhcnQgb2YgdGhlIHVuY2FjaGVkIG1lbW9yeSBtYXAgKi8KKwogCiAvKgogICogVGhlIGhhcmR3YXJlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZSBiaXRzLCBidXQgdGhlIGtlcm5lbCB1c2VzIHRoZW0gaW4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDc0MTc4YWQuLjE3YmIxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMiwxNiArMiw2IEBACiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+IC8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKICNkZWZpbmUgSEFSRElSUV9CSVRTCTgKIApAQCAtMjQsNCArMTQsNiBAQAogIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKICNlbmRpZgogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgorCiAjZW5kaWYgLyogX19BU01fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA1MGFhOTc0Li4xZmNjZTAwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE5Nyw2ICsxOTcsOCBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsgcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCk7IHJldHVybiBwdGU7IH0KIAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpIF9fcGdwcm90KChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfTk9fQ0FDSEUpKQorCiAKIC8qIHB0ZV92YWwgcmVmZXJzIHRvIGEgcGFnZSBpbiB0aGUgMHg0eHh4eHh4eCBwaHlzaWNhbCBEUkFNIGludGVydmFsCiAgKiBfX3B0ZV9wYWdlKHB0ZV92YWwpIHJlZmVycyB0byB0aGUgInZpcnR1YWwiIERSQU0gaW50ZXJ2YWwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDdmNjQyZmMuLjBjYTdkOTggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtMzgsMTEgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcHJpbnRrKCJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotfQotCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKIAlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNmM4MTgzNi4uYmJmZGE2NyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTEsMTAgKzUxLDcgQEAKIAlfZXRleHQgPSAuIDsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uLiAqLwogCV9fZXRleHQgPSAuOwogCi0JLiA9IEFMSUdOKDQpOwkJCS8qIEV4Y2VwdGlvbiB0YWJsZS4gKi8KLQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCV9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKwlFWENFUFRJT05fVEFCTEUoNCkKIAogCVJPREFUQQogCkBAIC02NywzNiArNjQsMjQgQEAKIAlfX2VkYXRhID0gLiA7CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbi4gKi8KIAlfZWRhdGEgPSAuIDsKIAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwkvKiBpbml0X3Rhc2sgYW5kIHN0YWNrLCBtdXN0IGJlIGFsaWduZWQuICovCi0JLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQorCUlOSVRfVEFTS19EQVRBX1NFQ1RJT04oUEFHRV9TSVpFKQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEuICovCiAJX19pbml0X2JlZ2luID0gLjsKLQkuaW5pdC50ZXh0IDogewotCQkgICBfc2luaXR0ZXh0ID0gLjsKLQkJICAgSU5JVF9URVhUCi0JCSAgIF9laW5pdHRleHQgPSAuOwotCX0KKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAJLmluaXQuZGF0YSA6IHsgSU5JVF9EQVRBIH0KLQkuID0gQUxJR04oMTYpOwotCV9fc2V0dXBfc3RhcnQgPSAuOwotCS5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9Ci0JX19zZXR1cF9lbmQgPSAuOworCS5pbml0LnNldHVwIDogeyBJTklUX1NFVFVQKDE2KSB9CiAjaWZkZWYgQ09ORklHX0VUUkFYX0FSQ0hfVjMyCiAJX19zdGFydF9fX3BhcmFtID0gLjsKIAlfX3BhcmFtIDogeyAqKF9fcGFyYW0pIH0KIAlfX3N0b3BfX19wYXJhbSA9IC47CiAjZW5kaWYKIAkuaW5pdGNhbGwuaW5pdCA6IHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47CisJCUlOSVRfQ0FMTFMKIAl9CiAKIAkuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJCUNPTl9JTklUQ0FMTAogCX0KIAlTRUNVUklUWV9JTklUCiAKQEAgLTExNCw5ICs5OSw3IEBACiAJUEVSQ1BVKFBBR0VfU0laRSkKIAogCS5pbml0LnJhbWZzIDogewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47CisJCUlOSVRfUkFNX0ZTCiAJfQogI2VuZGlmCiAKQEAgLTEzMCwxMSArMTEzLDcgQEAKIAlfX2luaXRfZW5kID0gLjsKIAogCV9fZGF0YV9lbmQgPSAuIDsJCS8qIE1vdmUgdG8gX2VkYXRhID8gKi8KLQlfX2Jzc19zdGFydCA9IC47CQkvKiBCU1MuICovCi0JLmJzcyA6IHsKLQkJKihDT01NT04pCi0JCSooLmJzcykKLQl9CisJQlNTX1NFQ1RJT04oMCwgMCwgMCkKIAogCS4gPSAgQUxJR04gKDB4MjApOwogCV9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCmluZGV4IDZiMGEyYjYuLjA5NzRjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogCiBub19zaWduYWw6CiAJLyogRGlkIHdlIGNvbWUgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwotCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gPj0gMCkgeworCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gIT0gLTEpIHsKIAkJLyogUmVzdGFydCB0aGUgc3lzdGVtIGNhbGwgLSBubyBoYW5kbGVycyBwcmVzZW50ICovCiAJCXN3aXRjaCAoX19mcmFtZS0+Z3I4KSB7CiAJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlCmluZGV4IDc2NTk1ZTguLmI3M2I1NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9NYWtlZmlsZQorKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvTWFrZWZpbGUKQEAgLTExLDMgKzExLDUgQEAKIG9iai15ICs9IHBjaS1kbWEtbm9tbXUubwogZW5kaWYKIGVuZGlmCisKK29iai0kKENPTkZJR19NVEQpICs9IGZsYXNoLm8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9mbGFzaC5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlMzcwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9mbGFzaC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEZsYXNoIG1hcHBpbmdzIGZvciB0aGUgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjZGVmaW5lIE1COTMwOTBfQk9PVFJPTV9BRERSCTB4RkYwMDAwMDAJLyogQm9vdCBST00gKi8KKyNkZWZpbmUgTUI5MzA5MF9CT09UUk9NX1NJWkUJKDIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgTUI5MzA5MF9VU0VSUk9NX0FERFIJMHhGRjIwMDAwMAkvKiBVc2VyIFJPTSAqLworI2RlZmluZSBNQjkzMDkwX1VTRVJST01fU0laRQkoMiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogZGVmYXVsdCBNVEQgcGFydGl0aW9uIHRhYmxlIGZvciBib3RoIG1haW4gZmxhc2ggZGV2aWNlcywgZXhwZWN0ZWQgdG8gYmUKKyAqIG92ZXJyaWRkZW4gYnkgUmVkQm9vdAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbWI5MzA5MF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiRmlsZXN5c3RlbSIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMCwKKwl9Cit9OworCisvKgorICogRGVmaW5pdGlvbiBvZiB0aGUgTUI5MzA5MCBCb290IFJPTSAob24gdGhlIENQVSBjYXJkKQorICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBtYjkzMDkwX2Jvb3Ryb21fZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSAyLAorCS5wYXJ0cwkJPSBtYjkzMDkwX3BhcnRpdGlvbnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1iOTMwOTBfYm9vdHJvbV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gTUI5MzA5MF9CT09UUk9NX0FERFIsCisJLmVuZAkJPSBNQjkzMDkwX0JPT1RST01fQUREUiArIE1COTMwOTBfQk9PVFJPTV9TSVpFIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYjkzMDkwX2Jvb3Ryb20gPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtYjkzMDkwX2Jvb3Ryb21fZGF0YSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm1iOTMwOTBfYm9vdHJvbV9yZXNvdXJjZSwKK307CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIHRoZSBNQjkzMDkwIFVzZXIgUk9NIGRlZmluaXRpb24gKG9uIHRoZSBtb3RoZXJib2FyZCkKKyAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWI5MzA5MF91c2Vycm9tX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLm5yX3BhcnRzCT0gMiwKKwkucGFydHMJCT0gbWI5MzA5MF9wYXJ0aXRpb25zLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtYjkzMDkwX3VzZXJyb21fcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IE1COTMwOTBfVVNFUlJPTV9BRERSLAorCS5lbmQJCT0gTUI5MzA5MF9VU0VSUk9NX0FERFIgKyBNQjkzMDkwX1VTRVJST01fU0laRSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWI5MzA5MF91c2Vycm9tID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbWI5MzA5MF91c2Vycm9tX2RhdGEsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZtYjkzMDkwX3VzZXJyb21fcmVzb3VyY2UsCit9OworCisvKgorICogcmVnaXN0ZXIgdGhlIE1COTMwOTAgZmxhc2hlcworICovCitzdGF0aWMgaW50IF9faW5pdCBtYjkzMDkwX210ZF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYjkzMDkwX2Jvb3Ryb20pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWI5MzA5MF91c2Vycm9tKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobWI5MzA5MF9tdGRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2NjJiMDJlLi5iOWUyNDkwNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDUgKzEsNiBAQAogI2RlZmluZSBWTUxJTlVYX1NZTUJPTChfc3ltXykgXyMjX3N5bV8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIHRhcmdldCBtZW1vcnkgbWFwICovCiAjaWZkZWYgQ09ORklHX0g4MzAwSF9HRU5FUklDCkBAIC03OSwxMSArODAsOCBAQAogCVNDSEVEX1RFWFQKIAlMT0NLX1RFWFQKIAlfX2V0ZXh0ID0gLiA7Ci0JLiA9IEFMSUdOKDE2KTsgICAgICAgICAgLyogRXhjZXB0aW9uIHRhYmxlICAgICAgICAgICAgICAqLwotCV9fX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JX19fc3RvcF9fX2V4X3RhYmxlID0gLjsKIAl9CisJRVhDRVBUSU9OX1RBQkxFKDE2KQogCiAJUk9EQVRBCiAjaWYgZGVmaW5lZChDT05GSUdfUk9NS0VSTkVMKQpAQCAtMTAwLDggKzk4LDcgQEAKIAlfX3NkYXRhID0gLiA7CiAJX19fZGF0YV9zdGFydCA9IC4gOwogCi0JLiA9IEFMSUdOKDB4MjAwMCkgOwotCQkqKC5kYXRhLmluaXRfdGFzaykKKwlJTklUX1RBU0tfREFUQSgweDIwMDApCiAJLiA9IEFMSUdOKDB4NCkgOwogCQlEQVRBX0RBVEEKIAkuID0gQUxJR04oMHg0KSA7CkBAIC0xMTQsMjQgKzExMSwxNiBAQAogCV9fZWluaXR0ZXh0ID0gLjsgCiAJCUlOSVRfREFUQQogCS4gPSBBTElHTigweDQpIDsKKwlJTklUX1NFVFVQKDB4NCkKIAlfX19zZXR1cF9zdGFydCA9IC47CiAJCSooLmluaXQuc2V0dXApCiAJLiA9IEFMSUdOKDB4NCkgOwogCV9fX3NldHVwX2VuZCA9IC47Ci0JX19faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQlfX19pbml0Y2FsbF9lbmQgPSAuOwotCV9fX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCV9fX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworCUlOSVRfQ0FMTFMKKwlDT05fSU5JVENBTEwKIAkJRVhJVF9URVhUCiAJCUVYSVRfREFUQQotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKQotCQkuID0gQUxJR04oNCk7Ci0JX19faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLSAgCQkqKC5pbml0LnJhbWZzKQotICAJX19faW5pdHJhbWZzX2VuZCA9IC47Ci0jZW5kaWYKKwlJTklUX1JBTV9GUwogCS4gPSBBTElHTigweDQpIDsKIAlfX19pbml0X2VuZCA9IC47CiAJX19lZGF0YSA9IC4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA2ODUxZTUyLi4xZWU1OTZjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNjAsOSArNjAsNyBAQAogICAgICAgIGJvb2wKIAogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCi0JYm9vbAotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKKwlkZWZfYm9vbCBuCiAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKaW5kZXggZjkyYmRhYS4uYzY5NTUyYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKQEAgLTY5LDExICs2OSwxMSBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaWEzMl9zaGFyZWRfcGFnZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfc2hhcmVkX3BhZ2Vfdm1fb3BzID0gewogCS5mYXVsdCA9IGlhMzJfaW5zdGFsbF9zaGFyZWRfcGFnZQogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpYTMyX2dhdGVfcGFnZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfZ2F0ZV9wYWdlX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpYTMyX2luc3RhbGxfZ2F0ZV9wYWdlCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCAwZjgyY2MyLi45MWRmOTY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTg5LDEwICs4OSwxMiBAQAogI2RlZmluZSBBQ1BJX1JFTEVBU0VfR0xPQkFMX0xPQ0soZmFjcywgQWNxKQkJCQlcCiAJKChBY3EpID0gaWE2NF9hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soJmZhY3MtPmdsb2JhbF9sb2NrKSkKIAorI2lmZGVmCUNPTkZJR19BQ1BJCiAjZGVmaW5lIGFjcGlfZGlzYWJsZWQgMAkvKiBBQ1BJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9ub2lycSAwCS8qIEFDUEkgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLwogI2RlZmluZSBhY3BpX3BjaV9kaXNhYmxlZCAwIC8qIEFDUEkgUENJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9zdHJpY3QgMQkvKiBubyBBQ1BJIHNwZWMgd29ya2Fyb3VuZHMgb24gSUE2NCAqLworI2VuZGlmCiAjZGVmaW5lIGFjcGlfcHJvY2Vzc29yX2NzdGF0ZV9jaGVjayh4KSAoeCkgLyogbm8gaWRsZSBsaW1pdHMgb24gSUE2NCA6KSAqLwogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYWNwaSh2b2lkKSB7IH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAxM2FiNzE1Li4yMzllY2RjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTksMTAzICsxOSwxMjYgQEAKIAogI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfaW5pdCh4KQkJCSgoeCktPmxvY2sgPSAwKQogCi0jaWZkZWYgQVNNX1NVUFBPUlRFRAogLyoKLSAqIFRyeSB0byBnZXQgdGhlIGxvY2suICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgbG9jaywgbWFrZSBhIG5vbi1zdGFuZGFyZCBjYWxsIHRvCi0gKiBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb24oKS4gIFdlIGRvIG5vdCB1c2UgYSBub3JtYWwgY2FsbCBiZWNhdXNlIHRoYXQgd291bGQgZm9yY2UgYWxsCi0gKiBjYWxsZXJzIG9mIF9fcmF3X3NwaW5fbG9jaygpIHRvIGJlIG5vbi1sZWFmIHJvdXRpbmVzLiAgSW5zdGVhZCwgaWE2NF9zcGlubG9ja19jb250ZW50aW9uKCkgaXMKLSAqIGNhcmVmdWxseSBjb2RlZCB0byB0b3VjaCBvbmx5IHRob3NlIHJlZ2lzdGVycyB0aGF0IF9fcmF3X3NwaW5fbG9jaygpIG1hcmtzICJjbG9iYmVyZWQiLgorICogVGlja2V0IGxvY2tzIGFyZSBjb25jZXB0dWFsbHkgdHdvIHBhcnRzLCBvbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCBoZWFkIG9mCisgKiB0aGUgcXVldWUsIGFuZCB0aGUgb3RoZXIgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0YWlsLiBUaGUgbG9jayBpcyBhY3F1aXJlZAorICogYnkgYXRvbWljYWxseSBub3RpbmcgdGhlIHRhaWwgYW5kIGluY3JlbWVudGluZyBpdCBieSBvbmUgKHRodXMgYWRkaW5nCisgKiBvdXJzZWxmIHRvIHRoZSBxdWV1ZSBhbmQgbm90aW5nIG91ciBwb3NpdGlvbiksIHRoZW4gd2FpdGluZyB1bnRpbCB0aGUgaGVhZAorICogYmVjb21lcyBlcXVhbCB0byB0aGUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRhaWwuCisgKiBUaGUgcGFkIGJpdHMgaW4gdGhlIG1pZGRsZSBhcmUgdXNlZCB0byBwcmV2ZW50IHRoZSBuZXh0X3RpY2tldCBudW1iZXIKKyAqIG92ZXJmbG93aW5nIGludG8gdGhlIG5vd19zZXJ2aW5nIG51bWJlci4KKyAqCisgKiAgIDMxICAgICAgICAgICAgIDE3ICAxNiAgICAxNSAgMTQgICAgICAgICAgICAgICAgICAgIDAKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICB8ICBub3dfc2VydmluZyAgICAgfCBwYWRkaW5nIHwgICBuZXh0X3RpY2tldCAgICAgICAgIHwKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAqLwogCi0jZGVmaW5lIElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMgImFyLmNjdiIsICJhci5wZnMiLCAicDE0IiwgInAxNSIsICJyMjciLCAicjI4IiwgInIyOSIsICJyMzAiLCAiYjYiLCAibWVtb3J5IgorI2RlZmluZSBUSUNLRVRfU0hJRlQJMTcKKyNkZWZpbmUgVElDS0VUX0JJVFMJMTUKKyNkZWZpbmUJVElDS0VUX01BU0sJKCgxIDw8IFRJQ0tFVF9CSVRTKSAtIDEpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19yYXdfc3Bpbl9sb2NrX2ZsYWdzIChyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JcmVnaXN0ZXIgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHIgYXNtICgicjMxIikgPSAmbG9jay0+bG9jazsKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldCwgc2VydmU7CiAKLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0jIGlmZGVmIENPTkZJR19JVEFOSVVNCi0JLyogZG9uJ3QgdXNlIGJybCBvbiBJdGFuaXVtLi4uICovCi0JYXNtIHZvbGF0aWxlICgie1xuXHQiCi0JCSAgICAgICIgIG1vdiBhci5jY3YgPSByMFxuXHQiCi0JCSAgICAgICIgIG1vdiByMjggPSBpcFxuXHQiCi0JCSAgICAgICIgIG1vdiByMzAgPSAxOztcblx0IgotCQkgICAgICAifVxuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUxXSwgcjMwLCBhci5jY3Zcblx0IgotCQkgICAgICAibW92bCByMjkgPSBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180Oztcblx0IgotCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCi0JCSAgICAgICJtb3YgYjYgPSByMjk7O1xuXHQiCi0JCSAgICAgICJtb3YgcjI3PSUyXG5cdCIKLQkJICAgICAgIihwMTQpIGJyLmNvbmQuc3BudC5tYW55IGI2IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbHNlCi0JYXNtIHZvbGF0aWxlICgie1xuXHQiCi0JCSAgICAgICIgIG1vdiBhci5jY3YgPSByMFxuXHQiCi0JCSAgICAgICIgIG1vdiByMjggPSBpcFxuXHQiCi0JCSAgICAgICIgIG1vdiByMzAgPSAxOztcblx0IgotCQkgICAgICAifVxuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUxXSwgcjMwLCBhci5jY3Y7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAiKHAxNCkgYnJsLmNvbmQuc3BudC5tYW55IGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7OyIKLQkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKLSMgZW5kaWYgLyogQ09ORklHX01DS0lOTEVZICovCi0jZWxzZQotIyBpZmRlZiBDT05GSUdfSVRBTklVTQotCS8qIGRvbid0IHVzZSBicmwgb24gSXRhbml1bS4uLiAqLwotCS8qIG1pcy1kZWNsYXJlLCBzbyB3ZSBnZXQgdGhlIGVudHJ5LXBvaW50LCBub3QgaXQncyBmdW5jdGlvbiBkZXNjcmlwdG9yOiAqLwotCWFzbSB2b2xhdGlsZSAoIm1vdiByMzAgPSAxXG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAibW92IGFyLmNjdiA9IHIwOztcblx0IgotCQkgICAgICAiY21weGNoZzQuYWNxIHIzMCA9IFslMF0sIHIzMCwgYXIuY2N2XG5cdCIKLQkJICAgICAgIm1vdmwgcjI5ID0gaWE2NF9zcGlubG9ja19jb250ZW50aW9uOztcblx0IgotCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCi0JCSAgICAgICJtb3YgYjYgPSByMjk7O1xuXHQiCi0JCSAgICAgICIocDE0KSBici5jYWxsLnNwbnQubWFueSBiNiA9IGI2IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbHNlCi0JYXNtIHZvbGF0aWxlICgibW92IHIzMCA9IDFcblx0IgotCQkgICAgICAibW92IHIyNz0lMlxuXHQiCi0JCSAgICAgICJtb3YgYXIuY2N2ID0gcjA7O1xuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUwXSwgcjMwLCBhci5jY3Y7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIihwMTQpIGJybC5jYWxsLnNwbnQubWFueSBiNj1pYTY0X3NwaW5sb2NrX2NvbnRlbnRpb247OyIKLQkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKLSMgZW5kaWYgLyogQ09ORklHX01DS0lOTEVZICovCi0jZW5kaWYKKwl0aWNrZXQgPSBpYTY0X2ZldGNoYWRkKDEsIHAsIGFjcSk7CisKKwlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJcmV0dXJuOworCisJaWE2NF9pbnZhbGEoKTsKKworCWZvciAoOzspIHsKKwkJYXNtIHZvbGF0aWxlICgibGQ0LmMubmMgJTA9WyUxXSIgOiAiPXIiKHNlcnZlKSA6ICJyIihwKSA6ICJtZW1vcnkiKTsKKworCQlpZiAoISgoKHNlcnZlID4+IFRJQ0tFVF9TSElGVCkgXiB0aWNrZXQpICYgVElDS0VUX01BU0spKQorCQkJcmV0dXJuOworCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKGxvY2spIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCAwKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX190aWNrZXRfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWludCB0bXAgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotLyogVW5sb2NrIGJ5IGRvaW5nIGFuIG9yZGVyZWQgc3RvcmUgYW5kIHJlbGVhc2luZyB0aGUgY2FjaGVsaW5lIHdpdGggbnRhICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKngpIHsKLQliYXJyaWVyKCk7Ci0JYXNtIHZvbGF0aWxlICgic3Q0LnJlbC5udGEgWyUwXSA9IHIwXG5cdCIgOjogInIiKHgpKTsKKwlpZiAoISgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIF4gdG1wKSAmIFRJQ0tFVF9NQVNLKSkKKwkJcmV0dXJuIGlhNjRfY21weGNoZyhhY3EsICZsb2NrLT5sb2NrLCB0bXAsIHRtcCArIDEsIHNpemVvZiAodG1wKSkgPT0gdG1wOworCXJldHVybiAwOwogfQogCi0jZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLwotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQotIyBkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKHgpCQkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJCQlcCi0JX191MzIgKmlhNjRfc3BpbmxvY2tfcHRyID0gKF9fdTMyICopICh4KTsJCQkJCVwKLQlfX3U2NCBpYTY0X3NwaW5sb2NrX3ZhbDsJCQkJCQkJXAotCWlhNjRfc3BpbmxvY2tfdmFsID0gaWE2NF9jbXB4Y2hnNF9hY3EoaWE2NF9zcGlubG9ja19wdHIsIDEsIDApOwkJCVwKLQlpZiAodW5saWtlbHkoaWE2NF9zcGlubG9ja192YWwpKSB7CQkJCQkJXAotCQlkbyB7CQkJCQkJCQkJXAotCQkJd2hpbGUgKCppYTY0X3NwaW5sb2NrX3B0cikJCQkJCVwKLQkJCQlpYTY0X2JhcnJpZXIoKTsJCQkJCQlcCi0JCQlpYTY0X3NwaW5sb2NrX3ZhbCA9IGlhNjRfY21weGNoZzRfYWNxKGlhNjRfc3BpbmxvY2tfcHRyLCAxLCAwKTsJXAotCQl9IHdoaWxlIChpYTY0X3NwaW5sb2NrX3ZhbCk7CQkJCQkJXAotCX0JCQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2soeCkJZG8geyBiYXJyaWVyKCk7ICgocmF3X3NwaW5sb2NrX3QgKikgeCktPmxvY2sgPSAwOyB9IHdoaWxlICgwKQotI2VuZGlmIC8qICFBU01fU1VQUE9SVEVEICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgc2hvcnQJKnAgPSAodW5zaWduZWQgc2hvcnQgKikmbG9jay0+bG9jayArIDEsIHRtcDsKIAotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+bG9jayAhPSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3RyeWxvY2soeCkJCShjbXB4Y2hnX2FjcSgmKHgpLT5sb2NrLCAwLCAxKSA9PSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spIFwKLQlkbyB7IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCisJYXNtIHZvbGF0aWxlICgibGQyLmJpYXMgJTA9WyUxXSIgOiAiPXIiKHRtcCkgOiAiciIocCkpOworCUFDQ0VTU19PTkNFKCpwKSA9ICh0bXAgKyAyKSAmIH4xOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldDsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIih0aWNrZXQpIDogInIiKHApIDogIm1lbW9yeSIpOworCQlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJCXJldHVybjsKKwkJY3B1X3JlbGF4KCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCisJcmV0dXJuICEhKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgVElDS0VUX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCisJcmV0dXJuICgodG1wIC0gKHRtcCA+PiBUSUNLRVRfU0hJRlQpKSAmIFRJQ0tFVF9NQVNLKSA+IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKGxvY2spOworfQorI2RlZmluZSBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAlfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fbG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX3RyeWxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3RpY2tldF9zcGluX3VubG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlfX3Jhd19zcGluX2xvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fdW5sb2NrX3dhaXQobG9jayk7Cit9CiAKICNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSgqKHZvbGF0aWxlIGludCAqKShydykgPj0gMCkKICNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpCSgqKHZvbGF0aWxlIGludCAqKShydykgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKaW5kZXggMWE2ZTQ0NS4uNjk2ZWZmMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKQEAgLTExMzAsOTUgKzExMzAsNiBAQAogI2VuZGlmIC8qIENPTkZJR19JQTY0X0JSTF9FTVUgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKLQkvKgotCSAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHNwaW5sb2NrIGNvbnRlbnRpb24uICBJdCB1c2VzIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcKLQkgKiBjb252ZW50aW9uIHRvIGF2b2lkIGNvbnZlcnRpbmcgbGVhZiByb3V0aW5lcyBpbnRvIGludGVyaW9yIHJvdXRpbmVzLiAgQmVjYXVzZQotCSAqIG9mIHRoaXMgc3BlY2lhbCBjb252ZW50aW9uLCB0aGVyZSBhcmUgc2V2ZXJhbCByZXN0cmljdGlvbnM6Ci0JICoKLQkgKiAtIGRvIG5vdCB1c2UgZ3AgcmVsYXRpdmUgdmFyaWFibGVzLCB0aGlzIGNvZGUgaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbAotCSAqICAgYW5kIGZyb20gbW9kdWxlcywgcjEgaXMgdW5kZWZpbmVkLgotCSAqIC0gZG8gbm90IHVzZSBzdGFja2VkIHJlZ2lzdGVycywgdGhlIGNhbGxlciBvd25zIHRoZW0uCi0JICogLSBkbyBub3QgdXNlIHRoZSBzY3JhdGNoIHN0YWNrIHNwYWNlLCB0aGUgY2FsbGVyIG93bnMgaXQuCi0JICogLSBkbyBub3QgdXNlIGFueSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYmVsb3cKLQkgKgotCSAqIElucHV0czoKLQkgKiAgIGFyLnBmcyAtIHNhdmVkIENGTSBvZiBjYWxsZXIKLQkgKiAgIGFyLmNjdiAtIDAgKGFuZCBhdmFpbGFibGUgZm9yIHVzZSkKLQkgKiAgIHIyNyAgICAtIGZsYWdzIGZyb20gc3Bpbl9sb2NrX2lycXNhdmUgb3IgMC4gIE11c3QgYmUgcHJlc2VydmVkLgotCSAqICAgcjI4ICAgIC0gYXZhaWxhYmxlIGZvciB1c2UuCi0JICogICByMjkgICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHIzMCAgICAtIGF2YWlsYWJsZSBmb3IgdXNlLgotCSAqICAgcjMxICAgIC0gYWRkcmVzcyBvZiBsb2NrLCBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIGI2ICAgICAtIHJldHVybiBhZGRyZXNzCi0JICogICBwMTQgICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHAxNSAgICAtIHVzZWQgdG8gdHJhY2sgZmxhZyBzdGF0dXMuCi0JICoKLQkgKiBJZiB5b3UgcGF0Y2ggdGhpcyBjb2RlIHRvIHVzZSBtb3JlIHJlZ2lzdGVycywgZG8gbm90IGZvcmdldCB0byB1cGRhdGUKLQkgKiB0aGUgY2xvYmJlciBsaXN0cyBmb3Igc3Bpbl9sb2NrKCkgaW4gYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmguCi0JICovCi0KLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0KLUdMT0JBTF9FTlRSWShpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KQotCS5wcm9sb2d1ZQotCS5zYXZlIGFyLnBmcywgcjAJLy8gdGhpcyBjb2RlIGVmZmVjdGl2ZWx5IGhhcyBhIHplcm8gZnJhbWUgc2l6ZQotCS5zYXZlIHJwLCByMjgKLQkuYm9keQotCW5vcCAwCi0JdGJpdC5ueiBwMTUscDA9cjI3LElBNjRfUFNSX0lfQklUCi0JLnJlc3RvcmUgc3AJCS8vIHBvcCBleGlzdGluZyBwcm9sb2d1ZSBhZnRlciBuZXh0IGluc24KLQltb3YgYjYgPSByMjgKLQkucHJvbG9ndWUKLQkuc2F2ZSBhci5wZnMsIHIwCi0JLmFsdHJwIGI2Ci0JLmJvZHkKLQk7OwotKHAxNSkJc3NtIHBzci5pCQkvLyByZWVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZXkgd2VyZSBvbgotCQkJCS8vIERhdmlkTSBzYXlzIHRoYXQgc3Jsei5kIGlzIHNsb3cgYW5kIGlzIG5vdCByZXF1aXJlZCBpbiB0aGlzIGNhc2UKLS53YWl0OgotCS8vIGV4cG9uZW50aWFsIGJhY2tvZmYsIGtkYiwgbG9ja21ldGVyIGV0Yy4gZ28gaW4gaGVyZQotCWhpbnQgQHBhdXNlCi0JbGQ0IHIzMD1bcjMxXQkJLy8gZG9uJ3QgdXNlIGxkNC5iaWFzOyBpZiBpdCdzIGNvbnRlbmRlZCwgd2Ugd29uJ3Qgd3JpdGUgdGhlIHdvcmQKLQlub3AgMAotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjMwLHIwCi0ocDE0KQlici5jb25kLnNwdGsuZmV3IC53YWl0Ci0ocDE1KQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cyBpZiB3ZSByZWVuYWJsZWQgdGhlbQotCWJyLmNvbmQuc3B0ay5mZXcgYjYJLy8gbG9jayBpcyBub3cgZnJlZSwgdHJ5IHRvIGFjcXVpcmUKLQkuZ2xvYmFsIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzRfZW5kCS8vIGZvciBrZXJucHJvZgotaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNF9lbmQ6Ci1FTkQoaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNCkKLQotI2Vsc2UKLQotR0xPQkFMX0VOVFJZKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbikKLQkucHJvbG9ndWUKLQkuYWx0cnAgYjYKLQkuYm9keQotCXRiaXQubnogcDE1LHAwPXIyNyxJQTY0X1BTUl9JX0JJVAotCTs7Ci0ud2FpdDoKLShwMTUpCXNzbSBwc3IuaQkJLy8gcmVlbmFibGUgaW50ZXJydXB0cyBpZiB0aGV5IHdlcmUgb24KLQkJCQkvLyBEYXZpZE0gc2F5cyB0aGF0IHNybHouZCBpcyBzbG93IGFuZCBpcyBub3QgcmVxdWlyZWQgaW4gdGhpcyBjYXNlCi0ud2FpdDI6Ci0JLy8gZXhwb25lbnRpYWwgYmFja29mZiwga2RiLCBsb2NrbWV0ZXIgZXRjLiBnbyBpbiBoZXJlCi0JaGludCBAcGF1c2UKLQlsZDQgcjMwPVtyMzFdCQkvLyBkb24ndCB1c2UgbGQ0LmJpYXM7IGlmIGl0J3MgY29udGVuZGVkLCB3ZSB3b24ndCB3cml0ZSB0aGUgd29yZAotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjMwLHIwCi0JbW92IHIzMCA9IDEKLShwMTQpCWJyLmNvbmQuc3B0ay5mZXcgLndhaXQyCi0ocDE1KQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cyBpZiB3ZSByZWVuYWJsZWQgdGhlbQotCTs7Ci0JY21weGNoZzQuYWNxIHIzMD1bcjMxXSwgcjMwLCBhci5jY3YKLQk7OwotCWNtcDQubmUgcDE0LHAwPXIwLHIzMAotKHAxNCkJYnIuY29uZC5zcHRrLmZldyAud2FpdAotCi0JYnIucmV0LnNwdGsubWFueSBiNgkvLyBsb2NrIGlzIG5vdyB0YWtlbgotRU5EKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbikKLQotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIEdMT0JBTF9FTlRSWShpYTY0X2p1bXBfdG9fc2FsKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwppbmRleCA4ZWJjY2I1Li4xNGQzOWUzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwpAQCAtODQsMjYgKzg0LDYgQEAKICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiBFWFBPUlRfU1lNQk9MKHVud19pbml0X3J1bm5pbmcpOwogCi0jaWZkZWYgQVNNX1NVUFBPUlRFRAotIyBpZmRlZiBDT05GSUdfU01QCi0jICBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0vKgotICogVGhpcyBpcyBub3QgYSBub3JtYWwgcm91dGluZSBhbmQgd2UgZG9uJ3Qgd2FudCBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgZm9yIGl0LCBzbyB3ZSB1c2UKLSAqIGEgZmFrZSBkZWNsYXJhdGlvbiBoZXJlLgotICovCi1leHRlcm4gY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180OwotRVhQT1JUX1NZTUJPTChpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KTsKLSMgIGVsc2UKLS8qCi0gKiBUaGlzIGlzIG5vdCBhIG5vcm1hbCByb3V0aW5lIGFuZCB3ZSBkb24ndCB3YW50IGEgZnVuY3Rpb24gZGVzY3JpcHRvciBmb3IgaXQsIHNvIHdlIHVzZQotICogYSBmYWtlIGRlY2xhcmF0aW9uIGhlcmUuCi0gKi8KLWV4dGVybiBjaGFyIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbjsKLUVYUE9SVF9TWU1CT0woaWE2NF9zcGlubG9ja19jb250ZW50aW9uKTsKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfRVNJKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0VTSV9NT0RVTEUpCiBleHRlcm4gdm9pZCBlc2lfY2FsbF9waHlzICh2b2lkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGVzaV9jYWxsX3BoeXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggZDI4NzdhNy4uNDk2YWM3YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC04ODcsNiArODg3LDYwIEBACiAJbWVtY3B5KGN1cnJlbnQtPmNvbW0sIGNvbW0sIHNpemVvZihjdXJyZW50LT5jb21tKSk7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5pc2hfcHRfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgcGFsX21pbl9zdGF0ZV9hcmVhX3QgKm1zLAorCQl1bnNpZ25lZCBsb25nICpuYXQpCit7CisJY29uc3QgdTY0ICpiYW5rOworCisJLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQorCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KKwkgKi8KKwlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7CisJCXJlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX2lpcDsKKwkJcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX2lwc3I7CisJCXJlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX2lmczsKKwl9IGVsc2UgeworCQlyZWdzLT5jcl9paXAgPSBtcy0+cG1zYV94aXA7CisJCXJlZ3MtPmNyX2lwc3IgPSBtcy0+cG1zYV94cHNyOworCQlyZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7CisJfQorCXJlZ3MtPnByID0gbXMtPnBtc2FfcHI7CisJcmVncy0+YjAgPSBtcy0+cG1zYV9icjA7CisJcmVncy0+YXJfcnNjID0gbXMtPnBtc2FfcnNjOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsyLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclszLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIzLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls4LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnI4LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls5LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnI5LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTAsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzExLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxMSwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjEyLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMy0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTMsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzE0LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxNCwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTUtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE1LCBuYXQpOworCWlmIChpYTY0X3BzcihyZWdzKS0+Ym4pCisJCWJhbmsgPSBtcy0+cG1zYV9iYW5rMV9ncjsKKwllbHNlCisJCWJhbmsgPSBtcy0+cG1zYV9iYW5rMF9ncjsKKwljb3B5X3JlZygmYmFua1sxNi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE2LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzE3LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTcsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMTgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxOCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1sxOS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE5LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIwLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjAsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyMSwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syMi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjIyLCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIzLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjMsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjQtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syNS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI1LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI2LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjYsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNywgbmF0KTsKKwljb3B5X3JlZygmYmFua1syOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI4LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI5LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjksIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMzAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIzMCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1szMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjMxLCBuYXQpOworfQorCiAvKiBPbiBlbnRyeSB0byB0aGlzIHJvdXRpbmUsIHdlIGFyZSBydW5uaW5nIG9uIHRoZSBwZXIgY3B1IHN0YWNrLCBzZWUKICAqIG1jYV9hc20uaC4gIFRoZSBvcmlnaW5hbCBzdGFjayBoYXMgbm90IGJlZW4gdG91Y2hlZCBieSB0aGlzIGV2ZW50LiAgU29tZSBvZgogICogdGhlIG9yaWdpbmFsIHN0YWNrJ3MgcmVnaXN0ZXJzIHdpbGwgYmUgaW4gdGhlIFJCUyBvbiB0aGlzIHN0YWNrLiAgVGhpcyBzdGFjawpAQCAtOTIxLDcgKzk3NSw2IEBACiAJdTY0IHIxMiA9IG1zLT5wbXNhX2dyWzEyLTFdLCByMTMgPSBtcy0+cG1zYV9nclsxMy0xXTsKIAl1NjQgYXJfYnNwc3RvcmUgPSByZWdzLT5hcl9ic3BzdG9yZTsKIAl1NjQgYXJfYnNwID0gcmVncy0+YXJfYnNwc3RvcmUgKyAobG9hZHJzID4+IDE2KTsKLQljb25zdCB1NjQgKmJhbms7CiAJY29uc3QgY2hhciAqbXNnOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKQEAgLTEwMjQsNTQgKzEwNzcsOSBAQAogCXAgPSAoY2hhciAqKXIxMiAtIHNpemVvZigqcmVncyk7CiAJb2xkX3JlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKilwOwogCW1lbWNweShvbGRfcmVncywgcmVncywgc2l6ZW9mKCpyZWdzKSk7Ci0JLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQotCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KLQkgKi8KLQlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7Ci0JCW9sZF9yZWdzLT5jcl9paXAgPSBtcy0+cG1zYV9paXA7Ci0JCW9sZF9yZWdzLT5jcl9pcHNyID0gbXMtPnBtc2FfaXBzcjsKLQkJb2xkX3JlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX2lmczsKLQl9IGVsc2UgewotCQlvbGRfcmVncy0+Y3JfaWlwID0gbXMtPnBtc2FfeGlwOwotCQlvbGRfcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX3hwc3I7Ci0JCW9sZF9yZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7Ci0JfQotCW9sZF9yZWdzLT5wciA9IG1zLT5wbXNhX3ByOwotCW9sZF9yZWdzLT5iMCA9IG1zLT5wbXNhX2JyMDsKIAlvbGRfcmVncy0+bG9hZHJzID0gbG9hZHJzOwotCW9sZF9yZWdzLT5hcl9yc2MgPSBtcy0+cG1zYV9yc2M7CiAJb2xkX3VuYXQgPSBvbGRfcmVncy0+YXJfdW5hdDsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclszLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbOC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzktMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnI5LCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEwLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjExLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMi0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEyLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMy0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEzLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjE0LCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjE1LCAmb2xkX3VuYXQpOwotCWlmIChpYTY0X3BzcihvbGRfcmVncyktPmJuKQotCQliYW5rID0gbXMtPnBtc2FfYmFuazFfZ3I7Ci0JZWxzZQotCQliYW5rID0gbXMtPnBtc2FfYmFuazBfZ3I7Ci0JY29weV9yZWcoJmJhbmtbMTYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTYsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTcsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjItMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjIsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjMtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjMsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjQtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjQsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjUtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjUsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjYsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjcsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMzAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMzAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMzEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMzEsICZvbGRfdW5hdCk7CisJZmluaXNoX3B0X3JlZ3Mob2xkX3JlZ3MsIG1zLCAmb2xkX3VuYXQpOwogCiAJLyogTmV4dCBzdGFjayBhIHN0cnVjdCBzd2l0Y2hfc3RhY2suICBtY2FfYXNtLlMgYnVpbHQgYSBwYXJ0aWFsCiAJICogc3dpdGNoX3N0YWNrLCBjb3B5IGl0IGFuZCBmaWxsIGluIHRoZSBibGFua3MgdXNpbmcgcHRfcmVncyBhbmQKQEAgLTExNDEsNiArMTE0OSw4IEBACiBub19tb2Q6CiAJbXByaW50ayhLRVJOX0lORk8gImNwdSAlZCwgJXMgJXMsIG9yaWdpbmFsIHN0YWNrIG5vdCBtb2RpZmllZFxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgdHlwZSwgbXNnKTsKKwlvbGRfdW5hdCA9IHJlZ3MtPmFyX3VuYXQ7CisJZmluaXNoX3B0X3JlZ3MocmVncywgbXMsICZvbGRfdW5hdCk7CiAJcmV0dXJuIHByZXZpb3VzX2N1cnJlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IDZkYjA4NTkuLjc3NmRkNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtNjAsNyArNjAsNiBAQAogICovCiBpbnQgbm9fdW5hbGlnbmVkX3dhcm5pbmc7CiBpbnQgdW5hbGlnbmVkX2R1bXBfc3RhY2s7Ci1zdGF0aWMgaW50IG5vcHJpbnRfd2FybmluZzsKIAogLyoKICAqIEZvciBNLXVuaXQ6CkBAIC0xMzU3LDkgKzEzNTYsOCBAQAogCQkJLyogd2F0Y2ggZm9yIGNvbW1hbmQgbmFtZXMgY29udGFpbmluZyAlcyAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLCBidWYpOwogCQl9IGVsc2UgewotCQkJaWYgKG5vX3VuYWxpZ25lZF93YXJuaW5nICYmICFub3ByaW50X3dhcm5pbmcpIHsKLQkJCQlub3ByaW50X3dhcm5pbmcgPSAxOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCisJCQlpZiAobm9fdW5hbGlnbmVkX3dhcm5pbmcpIHsKKwkJCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCiAJCQkJICAgICAgICJ1bmFsaWduZWQgZXhjZXB0aW9uIHdoaWNoIHJlcXVpcmVkXG4iCiAJCQkJICAgICAgICJrZXJuZWwgYXNzaXN0YW5jZSwgd2hpY2ggZGVncmFkZXMgIgogCQkJCSAgICAgICAidGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCBmNDI2ZGM3Li5lZTA5ZDI2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0L21tL3RsYi5jCkBAIC0xMDAsMjQgKzEwMCwzNiBAQAogICogdGhpcyBwcmltaXRpdmUgaXQgY2FuIGJlIG1vdmVkIHVwIHRvIGEgc3BpbmFwaG9yZS5oIGhlYWRlci4KICAqLwogc3RydWN0IHNwaW5hcGhvcmUgewotCWF0b21pY190CWN1cjsKKwl1bnNpZ25lZCBsb25nCXRpY2tldDsKKwl1bnNpZ25lZCBsb25nCXNlcnZlOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNwaW5hcGhvcmVfaW5pdChzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MsIGludCB2YWwpCiB7Ci0JYXRvbWljX3NldCgmc3MtPmN1ciwgdmFsKTsKKwlzcy0+dGlja2V0ID0gMDsKKwlzcy0+c2VydmUgPSB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCXdoaWxlICh1bmxpa2VseSghYXRvbWljX2FkZF91bmxlc3MoJnNzLT5jdXIsIC0xLCAwKSkpCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmc3MtPmN1cikgPT0gMCkKLQkJCWNwdV9yZWxheCgpOworCXVuc2lnbmVkIGxvbmcgdCA9IGlhNjRfZmV0Y2hhZGQoMSwgJnNzLT50aWNrZXQsIGFjcSksIHNlcnZlOworCisJaWYgKHRpbWVfYmVmb3JlKHQsIHNzLT5zZXJ2ZSkpCisJCXJldHVybjsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIihzZXJ2ZSkgOiAiciIoJnNzLT5zZXJ2ZSkgOiAibWVtb3J5Iik7CisJCWlmICh0aW1lX2JlZm9yZSh0LCBzZXJ2ZSkpCisJCQlyZXR1cm47CisJCWNwdV9yZWxheCgpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCWF0b21pY19hZGQoMSwgJnNzLT5jdXIpOworCWlhNjRfZmV0Y2hhZGQoMSwgJnNzLT5zZXJ2ZSwgcmVsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzcGluYXBob3JlIHB0Y2dfc2VtOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jIGIvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IGFkYjAxNTYuLjVjZGQ3ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMKQEAgLTMyLDI0ICszMiw2IEBACiAJdTY0ICpwcmV2X3Bmc19sb2M7CS8qIHN0YXRlIGZvciBXQVIgZm9yIG9sZCBzcGlubG9jayBvb2wgY29kZSAqLwogfSBpYTY0X2JhY2t0cmFjZV90OwogCi0jaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAzKQotLyoKLSAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIFBDIGlzIGluIHRoZSBzcGlubG9jayBjb250ZW50aW9uIG91dC1vZi1saW5lIGNvZGUKLSAqIHdpdGggbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2UgKG9uIG9sZGVyIGNvbXBpbGVycykuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUodW5zaWduZWQgbG9uZyBwYykKLXsKLQlleHRlcm4gY29uc3QgY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180W10gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKLQlleHRlcm4gY29uc3QgY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZFtdIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7Ci0JdW5zaWduZWQgbG9uZyBzY19zdGFydCA9ICh1bnNpZ25lZCBsb25nKWlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7Ci0JdW5zaWduZWQgbG9uZyBzY19lbmQgPSAodW5zaWduZWQgbG9uZylpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZDsKLQlyZXR1cm4gKHNjX3N0YXJ0ICYmIHNjX2VuZCAmJiBwYyA+PSBzY19zdGFydCAmJiBwYyA8IHNjX2VuZCk7Ci19Ci0jZWxzZQotLyogTmV3ZXIgc3BpbmxvY2sgY29kZSBkb2VzIGEgcHJvcGVyIGJyLmNhbGwgYW5kIHdvcmtzIGZpbmUgd2l0aCB0aGUgdW53aW5kZXIgKi8KLSNkZWZpbmUgaW5fb2xkX29vbF9zcGlubG9ja19jb2RlKHBjKQkwCi0jZW5kaWYKLQogLyogUmV0dXJucyBub24temVybyBpZiB0aGUgUEMgaXMgaW4gdGhlIEludGVycnVwdCBWZWN0b3IgVGFibGUgKi8KIHN0YXRpYyBfX2lubGluZV9fIGludCBpbl9pdnRfY29kZSh1bnNpZ25lZCBsb25nIHBjKQogewpAQCAtODAsNyArNjIsNyBAQAogCSAqLwogCWlmIChidC0+cHJldl9wZnNfbG9jICYmIGJ0LT5yZWdzICYmIGJ0LT5mcmFtZS5wZnNfbG9jID09IGJ0LT5wcmV2X3Bmc19sb2MpCiAJCWJ0LT5mcmFtZS5wZnNfbG9jID0gJmJ0LT5yZWdzLT5hcl9wZnM7Ci0JYnQtPnByZXZfcGZzX2xvYyA9IChpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUoYnQtPmZyYW1lLmlwKSA/IGJ0LT5mcmFtZS5wZnNfbG9jIDogTlVMTCk7CisJYnQtPnByZXZfcGZzX2xvYyA9IE5VTEw7CiAKIAlyZXR1cm4gdW53X3Vud2luZCgmYnQtPmZyYW1lKSA9PSAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggN2RlNzZkZC4uYzBmY2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC01NiwxMCArNTYsMTMgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCXJlc3VsdCA9IGlhNjRfc2FsX3BjaV9jb25maWdfcmVhZChhZGRyLCBtb2RlLCBsZW4sICZkYXRhKTsKIAlpZiAocmVzdWx0ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODAsOSArODMsMTEgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXN1bHQgPSBpYTY0X3NhbF9wY2lfY29uZmlnX3dyaXRlKGFkZHIsIG1vZGUsIGxlbiwgdmFsdWUpOwogCWlmIChyZXN1bHQgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCmluZGV4IDI1ODMxYzQuLjMwOGU2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwpAQCAtMTE5LDcgKzExOSw2IEBACiAgKiBBZGRpdGlvbmFsbHkgbm90ZSB0aGF0IHRoZSBzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX3dhciBhbHNvIGhhcyB0byBiZQogICogcmVtb3ZlZCBmcm9tIGFyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL2h1YmRldi5oCiAgKi8KLXN0YXRpYyB1OCB3YXJfaW1wbGVtZW50ZWQgPSAwOwogCiBzdGF0aWMgczY0IHNuX2RldmljZV9maXh1cF93YXIodTY0IG5hc2lkLCB1NjQgd2lkZ2V0LCBpbnQgZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBzbl9mbHVzaF9kZXZpY2VfY29tbW9uICpjb21tb24pCkBAIC0xMjgsMTEgKzEyNyw4IEBACiAJc3RydWN0IHNuX2ZsdXNoX2RldmljZV93YXIgKmRldl9lbnRyeTsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnYgPSB7MCwwLDAsMH07CiAKLQlpZiAoIXdhcl9pbXBsZW1lbnRlZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgIgotCQkgICAgICAgIlBST00gZmx1c2ggV0FSXG4iKTsKLQkJd2FyX2ltcGxlbWVudGVkID0gMTsKLQl9CisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HCisJCSJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgUFJPTSBmbHVzaCBXQVJcbiIpOwogCiAJd2FyX2xpc3QgPSBremFsbG9jKERFVl9QRVJfV0lER0VUICogc2l6ZW9mKCp3YXJfbGlzdCksIEdGUF9LRVJORUwpOwogCUJVR19PTighd2FyX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwppbmRleCA0YzdlNzQ3Li41NWFjM2M0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwpAQCAtNzg2LDE3ICs3ODYsMTggQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOX0hXUEVSRl9HRVRfT0JKX05PREU6Ci0JCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGEuYXJnIDwgMCkgeworCQlpID0gYS5hcmc7CisJCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGkgPCAwKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJaWYgKChyID0gc25faHdwZXJmX2VudW1fb2JqZWN0cygmbm9iaiwgJm9ianMpKSA9PSAwKSB7Ci0JCQlpZiAoYS5hcmcgPj0gbm9iaikgeworCQkJaWYgKGkgPj0gbm9iaikgewogCQkJCXIgPSAtRUlOVkFMOwogCQkJCXZmcmVlKG9ianMpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9Ci0JCQlpZiAob2Jqc1soaSA9IGEuYXJnKV0uaWQgIT0gYS5hcmcpIHsKKwkJCWlmIChvYmpzW2ldLmlkICE9IGEuYXJnKSB7CiAJCQkJZm9yIChpID0gMDsgaSA8IG5vYmo7IGkrKykgewogCQkJCQlpZiAob2Jqc1tpXS5pZCA9PSBhLmFyZykKIAkJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCBjNDEyMzRmLi4zYTkzMTlmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtMTEsNiArMTEsOSBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCiBjb25maWcgU0JVUwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDU2MDQ4NGEuLjE3NzcxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMSwxMSArMSwxMSBAQAogIwotIyBsaW51eC9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIyBsaW51eC9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCiAjCiAjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CiAjCiAKLXRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogaGVhZC5vIG1pc2MubyBcCi0JCSAgIHBpZ2d5Lm8gdm1saW51eC5sZHMKK3RhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIFwKKwkJICAgdm1saW51eC5iaW4ubHptYSBoZWFkLm8gbWlzYy5vIHBpZ2d5Lm8gdm1saW51eC5sZHMKIAogT0JKRUNUUyA9ICQob2JqKS9oZWFkLm8gJChvYmopL21pc2MubwogCkBAIC0yNyw2ICsyNywxMiBAQAogJChvYmopL3ZtbGludXguYmluLmd6OiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQogCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKworJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCisKIENGTEFHU19taXNjLm8gKz0gLWZwaWMKIAogaWZkZWYgQ09ORklHX01NVQpAQCAtMzcsNSArNDMsOSBAQAogCiBPQkpDT1BZRkxBR1MgKz0gLVIgLmVtcHR5X3plcm9fcGFnZQogCi0kKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguc2NyICQob2JqKS92bWxpbnV4LmJpbi5neiBGT1JDRQorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9HWklQKQk9IGd6CitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0JaSVAyKQk9IGJ6Mgorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9MWk1BKQk9IGx6bWEKKworJChvYmopL3BpZ2d5Lm86ICQob2JqKS92bWxpbnV4LnNjciAkKG9iaikvdm1saW51eC5iaW4uJChzdWZmaXgteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggZDM5NDI5Mi4uMzcwZDYwOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTksMTQwICs5LDQ5IEBACiAgKiBBZGFwdGVkIGZvciBTSCBieSBTdHVhcnQgTWVuZWZ5LCBBdWcgMTk5OQogICoKICAqIDIwMDMtMDItMTI6CVN1cHBvcnQgTTMyUiBieSBUYWtlbyBUYWthaGFzaGkKLSAqIAkJVGhpcyBpcyBiYXNlZCBvbiBhcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCiAvKgogICogZ3ppcCBkZWNsYXJhdGlvbnMKICAqLwotCi0jZGVmaW5lIE9GKGFyZ3MpICBhcmdzCiAjZGVmaW5lIFNUQVRJQyBzdGF0aWMKIAogI3VuZGVmIG1lbXNldAogI3VuZGVmIG1lbWNweQogI2RlZmluZSBtZW16ZXJvKHMsIG4pICAgICBtZW1zZXQgKChzKSwgMCwgKG4pKQogCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVjaDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNoOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICB1bGc7Ci0KLSNkZWZpbmUgV1NJWkUgMHg4MDAwCQkvKiBXaW5kb3cgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDMyaywgKi8KLQkJCQkvKiBhbmQgYSBwb3dlciBvZiB0d28gKi8KLQotc3RhdGljIHVjaCAqaW5idWY7CSAgICAgLyogaW5wdXQgYnVmZmVyICovCi1zdGF0aWMgdWNoIHdpbmRvd1tXU0laRV07ICAgIC8qIFNsaWRpbmcgd2luZG93IGJ1ZmZlciAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW5zaXplID0gMDsgIC8qIHZhbGlkIGJ5dGVzIGluIGluYnVmICovCi1zdGF0aWMgdW5zaWduZWQgaW5wdHIgPSAwOyAgIC8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBvdXRjbnQgPSAwOyAgLyogYnl0ZXMgaW4gb3V0cHV0IGJ1ZmZlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAqLwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgQVNDSUkgdGV4dCAqLwotI2RlZmluZSBDT05USU5VQVRJT04gMHgwMiAvKiBiaXQgMSBzZXQ6IGNvbnRpbnVhdGlvbiBvZiBtdWx0aS1wYXJ0IGd6aXAgZmlsZSAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5lIEVOQ1JZUFRFRCAgICAweDIwIC8qIGJpdCA1IHNldDogZmlsZSBpcyBlbmNyeXB0ZWQgKi8KLSNkZWZpbmUgUkVTRVJWRUQgICAgIDB4QzAgLyogYml0IDYsNzogICByZXNlcnZlZCAqLwotCi0jZGVmaW5lIGdldF9ieXRlKCkgIChpbnB0ciA8IGluc2l6ZSA/IGluYnVmW2lucHRyKytdIDogZmlsbF9pbmJ1ZigpKQotCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAqLwotI2lmZGVmIERFQlVHCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShjb25kKSkgZXJyb3IobXNnKTt9Ci0jICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4Ci0jICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jZWxzZQotIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSMgIGRlZmluZSBUcmFjZSh4KQotIyAgZGVmaW5lIFRyYWNldih4KQotIyAgZGVmaW5lIFRyYWNldnYoeCkKLSMgIGRlZmluZSBUcmFjZWMoYyx4KQotIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgIGZpbGxfaW5idWYodm9pZCk7Ci1zdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCk7CiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICptKTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmlucHV0X2RhdGE7Ci1zdGF0aWMgaW50IGlucHV0X2xlbjsKLQotc3RhdGljIGxvbmcgYnl0ZXNfb3V0ID0gMDsKLXN0YXRpYyB1Y2ggKm91dHB1dF9kYXRhOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb3V0cHV0X3B0ciA9IDA7Ci0KICNpbmNsdWRlICJtMzJyX3Npby5jIgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOwogCi0jZGVmaW5lIEhFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvaW5mbGF0ZS5jIgotCi12b2lkKiBtZW1zZXQodm9pZCogcywgaW50IGMsIHNpemVfdCBuKQorI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKK3N0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQogewotCWludCBpOwotCWNoYXIgKnNzID0gKGNoYXIqKXM7CisJY2hhciAqc3MgPSBzOwogCi0JZm9yIChpPTA7aTxuO2krKykgc3NbaV0gPSBjOworCXdoaWxlIChuLS0pCisJICAgICAgIAkqc3MrKyA9IGM7CiAJcmV0dXJuIHM7CiB9CisjZW5kaWYKIAotdm9pZCogbWVtY3B5KHZvaWQqIF9fZGVzdCwgX19jb25zdCB2b2lkKiBfX3NyYywKLQkJCSAgICBzaXplX3QgX19uKQotewotCWludCBpOwotCWNoYXIgKmQgPSAoY2hhciAqKV9fZGVzdCwgKnMgPSAoY2hhciAqKV9fc3JjOworI2lmZGVmIENPTkZJR19LRVJORUxfR1pJUAorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCiAKLQlmb3IgKGk9MDtpPF9fbjtpKyspIGRbaV0gPSBzW2ldOwotCXJldHVybiBfX2Rlc3Q7Ci19CisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDQwMDAwMAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYyIKKyNlbmRpZgogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpbGwgdGhlIGlucHV0IGJ1ZmZlci4gVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHkKLSAqIGFuZCBhdCBsZWFzdCBvbmUgYnl0ZSBpcyByZWFsbHkgbmVlZGVkLgotICovCi1zdGF0aWMgaW50IGZpbGxfaW5idWYodm9pZCkKLXsKLQlpZiAoaW5zaXplICE9IDApIHsKLQkJZXJyb3IoInJhbiBvdXQgb2YgaW5wdXQgZGF0YSIpOwotCX0KLQotCWluYnVmID0gaW5wdXRfZGF0YTsKLQlpbnNpemUgPSBpbnB1dF9sZW47Ci0JaW5wdHIgPSAxOwotCXJldHVybiBpbmJ1ZlswXTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBXcml0ZSB0aGUgb3V0cHV0IHdpbmRvdyB3aW5kb3dbMC4ub3V0Y250LTFdIGFuZCB1cGRhdGUgY3JjIGFuZCBieXRlc19vdXQuCi0gKiAoVXNlZCBmb3IgdGhlIGRlY29tcHJlc3NlZCBkYXRhIG9ubHkuKQotICovCi1zdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCkKLXsKLSAgICB1bGcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLSAgICB1bnNpZ25lZCBuOwotICAgIHVjaCAqaW4sICpvdXQsIGNoOwotCi0gICAgaW4gPSB3aW5kb3c7Ci0gICAgb3V0ID0gJm91dHB1dF9kYXRhW291dHB1dF9wdHJdOwotICAgIGZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgewotCSAgICBjaCA9ICpvdXQrKyA9ICppbisrOwotCSAgICBjID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKLSAgICB9Ci0gICAgY3JjID0gYzsKLSAgICBieXRlc19vdXQgKz0gKHVsZylvdXRjbnQ7Ci0gICAgb3V0cHV0X3B0ciArPSAodWxnKW91dGNudDsKLSAgICBvdXRjbnQgPSAwOwotfQorI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCisjZW5kaWYKIAogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKIHsKQEAgLTE1MywyMCArNjIsMjAgQEAKIAl3aGlsZSgxKTsJLyogSGFsdCAqLwogfQogCi0vKiByZXR1cm4gZGVjb21wcmVzc2VkIHNpemUgKi8KIHZvaWQKIGRlY29tcHJlc3Nfa2VybmVsKGludCBtbXVfb24sIHVuc2lnbmVkIGNoYXIgKnppbWFnZV9kYXRhLAogCQkgIHVuc2lnbmVkIGludCB6aW1hZ2VfbGVuLCB1bnNpZ25lZCBsb25nIGhlYXApCiB7CisJdW5zaWduZWQgY2hhciAqaW5wdXRfZGF0YSA9IHppbWFnZV9kYXRhOworCWludCBpbnB1dF9sZW4gPSB6aW1hZ2VfbGVuOworCXVuc2lnbmVkIGNoYXIgKm91dHB1dF9kYXRhOworCiAJb3V0cHV0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKUNPTkZJR19NRU1PUllfU1RBUlQgKyAweDIwMDAKIAkJKyAobW11X29uID8gMHg4MDAwMDAwMCA6IDApOwogCWZyZWVfbWVtX3B0ciA9IGhlYXA7Ci0JZnJlZV9tZW1fZW5kX3B0ciA9IGZyZWVfbWVtX3B0ciArIEhFQVBfU0laRTsKLQlpbnB1dF9kYXRhID0gemltYWdlX2RhdGE7Ci0JaW5wdXRfbGVuID0gemltYWdlX2xlbjsKKwlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgQk9PVF9IRUFQX1NJWkU7CiAKLQltYWtlY3JjKCk7Ci0JcHV0cygiVW5jb21wcmVzc2luZyBMaW51eC4uLiAiKTsKLQlndW56aXAoKTsKLQlwdXRzKCJPaywgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CisJcHV0cygiXG5EZWNvbXByZXNzaW5nIExpbnV4Li4uICIpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXRfZGF0YSwgTlVMTCwgZXJyb3IpOworCXB1dHMoImRvbmUuXG5Cb290aW5nIHRoZSBrZXJuZWwuXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZDA2OTMzYi4uNDAxMGYxZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTE2Miw2ICsxNjIsMTMgQEAKICNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwgd3JpdGVsCiAKKyNkZWZpbmUgaW9yZWFkOCByZWFkCisjZGVmaW5lIGlvcmVhZDE2IHJlYWR3CisjZGVmaW5lIGlvcmVhZDMyIHJlYWRsCisjZGVmaW5lIGlvd3JpdGU4IHdyaXRlYgorI2RlZmluZSBpb3dyaXRlMTYgd3JpdGV3CisjZGVmaW5lIGlvd3JpdGUzMiB3cml0ZWwKKwogI2RlZmluZSBtbWlvd2IoKQogCiAjZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSBkbyB7IH0gd2hpbGUgKDApICAvKiBNMzJSX0ZJWE1FICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAxMTc3N2Y3Li43MjVlZGU4IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEsOSArMSwxMSBAQAogI2lmbmRlZiBfQVNNX00zMlJfUEFHRV9ICiAjZGVmaW5lIF9BU01fTTMyUl9QQUdFX0gKIAorI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKLSNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSwgVUwpIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMWE5OTdmYy4uODM5N2MyNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTQwLDggKzE0MCw2IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLmxyKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKIAotI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCi0KICNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCiAKICNlbmRpZiAvKiBfQVNNX00zMlJfUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNzE1NzgxNS4uZWQyNDBiNiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTU1LDYgKzU1LDggQEAKIAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAogCisjZGVmaW5lIFRIUkVBRF9TSVpFIChQQUdFX1NJWkUgPDwgMSkKKwogLyoKICAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCiAgKi8KQEAgLTc2LDggKzc4LDYgQEAKICNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCiAjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKIAotI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCi0KIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewpAQCAtMTI1LDE3ICsxMjUsNiBAQAogCXJldHVybiB0aS0+ZmxhZ3MgPj4gVElfRkxBR19GQVVMVF9DT0RFX1NISUZUOwogfQogCi0jZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCi0KLSNkZWZpbmUgVEhSRUFEX1NJWkUJODE5MgotCi0vKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCi0jZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpCUdFVF9USFJFQURfSU5GTyByZWcKLQkubWFjcm8gR0VUX1RIUkVBRF9JTkZPIHJlZwotCWxkaQlccmVnLCAjLVRIUkVBRF9TSVpFCi0JYW5kCVxyZWcsIHNwCi0JLmVuZG0KLQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMgYi9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKaW5kZXggNjEyZDM1Yi4uNDAzODY5OCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUwpAQCAtMTE4LDYgKzExOCwxMyBAQAogI2RlZmluZSByZXN1bWVfa2VybmVsCQlyZXN0b3JlX2FsbAogI2VuZGlmCiAKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KKyNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykJR0VUX1RIUkVBRF9JTkZPIHJlZworCS5tYWNybyBHRVRfVEhSRUFEX0lORk8gcmVnCisJbGRpCVxyZWcsICMtVEhSRUFEX1NJWkUKKwlhbmQJXHJlZywgc3AKKwkuZW5kbQorCiBFTlRSWShyZXRfZnJvbV9mb3JrKQogCXBvcAlyMAogCWJsCXNjaGVkdWxlX3RhaWwKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaGVhZC5TIGIvYXJjaC9tMzJyL2tlcm5lbC9oZWFkLlMKaW5kZXggMGE3MTk0NC4uYTQ2NjUyZCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9oZWFkLlMKQEAgLTI2OCwxMyArMjY4LDEzIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogU3RhY2sgYXJlYQogICovCi0JLnNlY3Rpb24gLnNwaQorCS5zZWN0aW9uIC5pbml0LmRhdGEsICJhdyIKIAlBTElHTgogCS5nbG9iYWwgc3BpX3N0YWNrX3RvcAogCS56ZXJvCTEwMjQKIHNwaV9zdGFja190b3A6CiAKLQkuc2VjdGlvbiAuc3B1CisJLnNlY3Rpb24gLmluaXQuZGF0YSwgImF3IgogCUFMSUdOCiAJLmdsb2JhbCBzcHVfc3RhY2tfdG9wCiAJLnplcm8JMTAyNApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwppbmRleCAyMjYyNGI1Li43MDA1NzA3IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYworKysgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwpAQCAtMjMsMTIgKzIzLDYgQEAKIEVYUE9SVF9TWU1CT0woaW91bm1hcCk7CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogCi0vKiBOZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8KLS8qIERlbGF5IGxvb3BzICovCi1FWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKLUVYUE9SVF9TWU1CT0woX19kZWxheSk7Ci1FWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKLQogRVhQT1JUX1NZTUJPTChzdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9fc3RybmNweV9mcm9tX3VzZXIpOwogRVhQT1JUX1NZTUJPTChjbGVhcl91c2VyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCmluZGV4IDFiNzU5OGUuLjMxY2VmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CkBAIC04MDUsNyArODA2LDcgQEAKIAogCWlmIChtYXNrICYgfnBoeXNpZHNfY29lcmNlKHBoeXNfY3B1X3ByZXNlbnRfbWFwKSkKIAkJQlVHKCk7Ci0JaWYgKGlwaV9udW0gPj0gTlJfSVBJUykKKwlpZiAoaXBpX251bSA+PSBOUl9JUElTIHx8IGlwaV9udW0gPCAwKQogCQlCVUcoKTsKIAogCW1hc2sgPDw9IElQSV9TSElGVDsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKaW5kZXggYmE2MWM0Yy4uOWNlZGNlZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKQEAgLTMzLDYgKzMzLDE1IEBACiAKICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1MpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQ01PU19NT0RVTEUpCisvKiB0aGlzIG5lZWRzIGEgYmV0dGVyIGhvbWUgKi8KK0RFRklORV9TUElOTE9DSyhydGNfbG9jayk7CisKKyNpZmRlZiBDT05GSUdfUlRDX0RSVl9DTU9TX01PRFVMRQorRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CisjZW5kaWYKKyNlbmRpZiAgLyogcGMtc3R5bGUgJ0NNT1MnIFJUQyBzdXBwb3J0ICovCisKICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpOwogI2VuZGlmCkBAIC02Niw3ICs3NSw3IEBACiAJCWNvdW50ID0gMDsKIAogCWNvdW50ID0gKGxhdGNoIC0gY291bnQpICogVElDS19TSVpFOwotCWVsYXBzZWRfdGltZSA9IChjb3VudCArIGxhdGNoIC8gMikgLyBsYXRjaDsKKwllbGFwc2VkX3RpbWUgPSBESVZfUk9VTkRfQ0xPU0VTVChjb3VudCwgbGF0Y2gpOwogCS8qIE5PVEU6IExBVENIIGlzIGVxdWFsIHRvIHRoZSAiaW50ZXJ2YWwiIHZhbHVlICg9IHJlbG9hZCBjb3VudCkuICovCiAKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KQEAgLTg0LDcgKzkzLDcgQEAKIAlwX2NvdW50ID0gY291bnQ7CiAKIAljb3VudCA9IChsYXRjaCAtIGNvdW50KSAqIFRJQ0tfU0laRTsKLQllbGFwc2VkX3RpbWUgPSAoY291bnQgKyBsYXRjaCAvIDIpIC8gbGF0Y2g7CisJZWxhcHNlZF90aW1lID0gRElWX1JPVU5EX0NMT1NFU1QoY291bnQsIGxhdGNoKTsKIAkvKiBOT1RFOiBMQVRDSCBpcyBlcXVhbCB0byB0aGUgImludGVydmFsIiB2YWx1ZSAoPSByZWxvYWQgY291bnQpLiAqLwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KICNlbGlmIGRlZmluZWQoQ09ORklHX0NISVBfTTMyMzEwKQpAQCAtMjAyLDcgKzIxMSw3IEBACiAKIAkJYnVzX2Nsb2NrID0gYm9vdF9jcHVfZGF0YS5idXNfY2xvY2s7CiAJCWRpdmlkZSA9IGJvb3RfY3B1X2RhdGEudGltZXJfZGl2aWRlOwotCQlsYXRjaCA9IChidXNfY2xvY2svZGl2aWRlICsgSFogLyAyKSAvIEhaOworCQlsYXRjaCA9IERJVl9ST1VORF9DTE9TRVNUKGJ1c19jbG9jay9kaXZpZGUsIEhaKTsKIAogCQlwcmludGsoIlRpbWVyIHN0YXJ0IDogbGF0Y2ggPSAlbGRcbiIsIGxhdGNoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jCmluZGV4IDAzYjE0ZTUuLmZiZDEwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMKQEAgLTEwNCw4ICsxMDQsOCBAQAogCWVpdF92ZWN0b3JbMTg2XSA9ICh1bnNpZ25lZCBsb25nKXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE4N10gPSAodW5zaWduZWQgbG9uZylzbXBfaXBpX3RpbWVyX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE4OF0gPSAodW5zaWduZWQgbG9uZylzbXBfZmx1c2hfY2FjaGVfYWxsX2ludGVycnVwdDsKLQllaXRfdmVjdG9yWzE4OV0gPSAodW5zaWduZWQgbG9uZylzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0OwotCWVpdF92ZWN0b3JbMTkwXSA9IDA7CisJZWl0X3ZlY3RvclsxODldID0gMDsJLyogQ1BVX0JPT1RfSVBJICovCisJZWl0X3ZlY3RvclsxOTBdID0gKHVuc2lnbmVkIGxvbmcpc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE5MV0gPSAwOwogI2VuZGlmCiAJX2ZsdXNoX2NhY2hlX2NvcHliYWNrX2FsbCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGRlNWUyMWMuLjdkYTk0ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogT1VUUFVUX0FSQ0gobTMycikKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQpAQCAtNDAsODMgKzQxLDI0IEBACiAjZW5kaWYKICAgX2V0ZXh0ID0gLjsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uICovCiAKLSAgLiA9IEFMSUdOKDE2KTsJCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOworICBFWENFUFRJT05fVEFCTEUoMTYpCisgIE5PVEVTCiAKICAgUk9EQVRBCi0KLSAgLyogd3JpdGVhYmxlICovCi0gIC5kYXRhIDogewkJCS8qIERhdGEgKi8KLQkqKC5zcHUpCi0JKiguc3BpKQotCURBVEFfREFUQQotCUNPTlNUUlVDVE9SUwotCX0KLQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9fbm9zYXZlX2JlZ2luID0gLjsKLSAgLmRhdGFfbm9zYXZlIDogeyAqKC5kYXRhLm5vc2F2ZSkgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9fbm9zYXZlX2VuZCA9IC47Ci0KLSAgLiA9IEFMSUdOKDMyKTsKLSAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7ICooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIH0KLQorICBSV19EQVRBX1NFQ1RJT04oMzIsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0gIC4gPSBBTElHTig4MTkyKTsJCS8qIGluaXRfdGFzayAqLwotICAuZGF0YS5pbml0X3Rhc2sgOiB7ICooLmRhdGEuaW5pdF90YXNrKSB9Ci0KICAgLyogd2lsbCBiZSBmcmVlZCBhZnRlciBpbml0ICovCi0gIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLworICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogICBfX2luaXRfYmVnaW4gPSAuOwotICAuaW5pdC50ZXh0IDogewotCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVAotCV9laW5pdHRleHQgPSAuOwotICB9Ci0gIC5pbml0LmRhdGEgOiB7IElOSVRfREFUQSB9Ci0gIC4gPSBBTElHTigxNik7Ci0gIF9fc2V0dXBfc3RhcnQgPSAuOwotICAuaW5pdC5zZXR1cCA6IHsgKiguaW5pdC5zZXR1cCkgfQotICBfX3NldHVwX2VuZCA9IC47Ci0gIF9faW5pdGNhbGxfc3RhcnQgPSAuOwotICAuaW5pdGNhbGwuaW5pdCA6IHsKLQlJTklUQ0FMTFMKLSAgfQotICBfX2luaXRjYWxsX2VuZCA9IC47Ci0gIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLSAgLmNvbl9pbml0Y2FsbC5pbml0IDogeyAqKC5jb25faW5pdGNhbGwuaW5pdCkgfQotICBfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotICBTRUNVUklUWV9JTklUCi0gIC4gPSBBTElHTig0KTsKLSAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKLSAgLmFsdGluc3RydWN0aW9ucyA6IHsgKiguYWx0aW5zdHJ1Y3Rpb25zKSB9Ci0gIF9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOwotICAuYWx0aW5zdHJfcmVwbGFjZW1lbnQgOiB7ICooLmFsdGluc3RyX3JlcGxhY2VtZW50KSB9Ci0gIC8qIC5leGl0LnRleHQgaXMgZGlzY2FyZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0byBkZWFsIHdpdGggcmVmZXJlbmNlcwotICAgICBmcm9tIC5hbHRpbnN0cnVjdGlvbnMgYW5kIC5laF9mcmFtZSAqLwotICAuZXhpdC50ZXh0IDogeyBFWElUX1RFWFQgfQotICAuZXhpdC5kYXRhIDogeyBFWElUX0RBVEEgfQotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0cmFtZnNfc3RhcnQgPSAuOwotICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQotICBfX2luaXRyYW1mc19lbmQgPSAuOwotI2VuZGlmCi0KLSAgUEVSQ1BVKDQwOTYpCi0gIC4gPSBBTElHTig0MDk2KTsKKyAgSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQorICBJTklUX0RBVEFfU0VDVElPTigxNikKKyAgUEVSQ1BVKFBBR0VfU0laRSkKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwogICAvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0gIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwotICAuYnNzIDogeyAqKC5ic3MpIH0KLSAgLiA9IEFMSUdOKDQpOwotICBfX2Jzc19zdG9wID0gLjsKKyAgQlNTX1NFQ1RJT04oMCwgMCwgNCkKIAogICBfZW5kID0gLiA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvZGVsYXkuYyBiL2FyY2gvbTMyci9saWIvZGVsYXkuYwppbmRleCBjZWQ1NDliLi45NDBmNDgzIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9tMzJyL2xpYi9kZWxheS5jCkBAIC0xMjIsNCArMTIyLDggQEAKIHsKIAlfX2NvbnN0X3VkZWxheShuc2VjcyAqIDB4MDAwMDUpOyAgLyogMioqMzIgLyAxMDAwMDAwMDAwIChyb3VuZGVkIHVwKSAqLwogfQorCitFWFBPUlRfU1lNQk9MKF9fZGVsYXkpOworRVhQT1JUX1NZTUJPTChfX2NvbnN0X3VkZWxheSk7CitFWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKIEVYUE9SVF9TWU1CT0woX19uZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCmluZGV4IGI3YTc4YWQuLjVkMjg1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKQEAgLTMyLDYgKzMyLDkgQEAKIH0gbWVtX3Byb2ZfdDsKIHN0YXRpYyBtZW1fcHJvZl90IG1lbV9wcm9mW01BWF9OVU1OT0RFU107CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9lbmQ7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1fcHJvZl9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGhvbGVzLCBmcmVlX3BmbjsKQEAgLTQyLDcgKzQ1LDcgQEAKIAkvKiBOb2RlIzAgU0RSQU0gKi8KIAltcCA9ICZtZW1fcHJvZlswXTsKIAltcC0+c3RhcnRfcGZuID0gUEZOX1VQKENPTkZJR19NRU1PUllfU1RBUlQpOwotCW1wLT5wYWdlcyA9IFBGTl9ET1dOKENPTkZJR19NRU1PUllfU0laRSk7CisJbXAtPnBhZ2VzID0gUEZOX0RPV04obWVtb3J5X2VuZCAtIG1lbW9yeV9zdGFydCk7CiAJbXAtPmhvbGVzID0gMDsKIAltcC0+ZnJlZV9wZm4gPSBQRk5fVVAoX19wYShfZW5kKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9tbXUuUyBiL2FyY2gvbTMyci9tbS9tbXUuUwppbmRleCA0OWE2ZDE2Li5lOTQ5MWE1IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vbW11LlMKKysrIGIvYXJjaC9tMzJyL21tL21tdS5TCkBAIC0xNTAsOSArMTUwLDEzIEBACiAKIAk7IHBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKIAlsZAlyMywgQHIzCQkJOyByMzogcG1kIGRhdGEKLQlsZGkJcjIsICMtNDA5NgogCWJlcXoJcjMsIDNmCQkJOyBwbWRfbm9uZSgqcG1kKSA/CiAKKwlhbmQzCXIyLCByMywgIzB4ZmZmCisJYWRkMwlyMiwgcjIsICMtMzU1CQk7IF9LRVJOUEdfVEFCTEUoPTB4MTYzKQorCWJuZXoJcjIsIDNmCQkJOyBwbWRfYmFkKCpwbWQpID8KKwlsZGkJcjIsICMtNDA5NgorCiAJOyBwdGUgPSBwdGVfb2Zmc2V0KHBtZCwgYWRkcmVzcyk7CiAJYW5kCXIyLCByMwkJCTsgcjI6IHB0ZSBiYXNlIGFkZHIKIAlzcmwzCXIzLCByMCwgIzEwCkBAIC0yNjMsOSArMjY3LDkgQEAKIAlsZAlyMSwgQHIzCQkJOyByMTogcG1kCiAJYmVxeglyMSwgM2YJCQk7IHBtZF9ub25lKCpwbWQpID8KIDsKLQlhbmQzCXIxLCByMSwgIzB4ZWZmCi0JbGRpCXI0LCAjNjExCQk7IF9LRVJOUEdfVEFCTEUoPTYxMSkKLQlibmUJcjEsIHI0LCAzZgkJOyAhcG1kX2JhZCgqcG1kKSA/CisJYW5kMwlyMSwgcjEsICMweDNmZgorCWxkaQlyNCwgIzB4MTYzCQk7IF9LRVJOUEdfVEFCTEUoPTB4MTYzKQorCWJuZQlyMSwgcjQsIDNmCQk7IHBtZF9iYWQoKnBtZCkgPwogCiAJLmZpbGxpbnNuCiA0OgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCAyOWRkODQ4Li5lY2RjMTlhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNTYxLDcgKzU2MSw3IEBACiAKIGNvbmZpZyBNVk1FMTQ3X1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBNVk1FMTQ3IHNlcmlhbCBwb3J0cyIKLQlkZXBlbmRzIG9uIE1WTUUxNDcKKwlkZXBlbmRzIG9uIE1WTUUxNDcgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTQ3CiAJICBib2FyZHMuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkgWSBoZXJlLgpAQCAtNTc2LDE0ICs1NzYsMTQgQEAKIAogY29uZmlnIE1WTUUxNjJfU0NDCiAJYm9vbCAiU0NDIHN1cHBvcnQgZm9yIE1WTUUxNjIgc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gTVZNRTE2eAorCWRlcGVuZHMgb24gTVZNRTE2eCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgcG9ydHMgb24gdGhlIE1vdG9yb2xhIE1WTUUxNjIgYW5kCiAJICAxNzIgYm9hcmRzLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5IFkgaGVyZS4KIAogY29uZmlnIEJWTUU2MDAwX1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBCVk1FNjAwMCBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBvbiBCVk1FNjAwMAorCWRlcGVuZHMgb24gQlZNRTYwMDAgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBCVk1FNDAwMCBhbmQgQlZNRTYwMDAKIAkgIGJvYXJkcyBmcm9tIEJWTSBMdGQuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaGFyZGlycV9tbS5oCmluZGV4IDU1NGY2NWIuLjM5NGVlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaApAQCAtMSw4ICsxLDE2IEBACiAjaWZuZGVmIF9fTTY4S19IQVJESVJRX0gKICNkZWZpbmUgX19NNjhLX0hBUkRJUlFfSAogCi0jZGVmaW5lIEhBUkRJUlFfQklUUwk4CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CisvKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNTk0ZWUwZS4uOWE4ODc2ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTQ1LDI1ICs0NSwyNSBAQAogCURFRklORShUSFJFQURfRlBTVEFURSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGZwc3RhdGUpKTsKIAogCS8qIG9mZnNldHMgaW50byB0aGUgcHRfcmVncyAqLwotCURFRklORShQVF9EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQwKSk7Ci0JREVGSU5FKFBUX09SSUdfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX2QwKSk7Ci0JREVGSU5FKFBUX0QxLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDEpKTsKLQlERUZJTkUoUFRfRDIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMikpOwotCURFRklORShQVF9EMywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQzKSk7Ci0JREVGSU5FKFBUX0Q0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDQpKTsKLQlERUZJTkUoUFRfRDUsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNSkpOwotCURFRklORShQVF9BMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEwKSk7Ci0JREVGSU5FKFBUX0ExLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTEpKTsKLQlERUZJTkUoUFRfQTIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMikpOwotCURFRklORShQVF9QQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7Ci0JREVGSU5FKFBUX1NSLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3IpKTsKKwlERUZJTkUoUFRfT0ZGX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDApKTsKKwlERUZJTkUoUFRfT0ZGX09SSUdfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX2QwKSk7CisJREVGSU5FKFBUX09GRl9EMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQxKSk7CisJREVGSU5FKFBUX09GRl9EMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQyKSk7CisJREVGSU5FKFBUX09GRl9EMywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQzKSk7CisJREVGSU5FKFBUX09GRl9ENCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ0KSk7CisJREVGSU5FKFBUX09GRl9ENSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ1KSk7CisJREVGSU5FKFBUX09GRl9BMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEwKSk7CisJREVGSU5FKFBUX09GRl9BMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGExKSk7CisJREVGSU5FKFBUX09GRl9BMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEyKSk7CisJREVGSU5FKFBUX09GRl9QQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7CisJREVGSU5FKFBUX09GRl9TUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSk7CiAKICNpZmRlZiBDT05GSUdfQ09MREZJUkUKIAkvKiBiaXRmaWVsZHMgYXJlIGEgYml0IGRpZmZpY3VsdCAqLwotCURFRklORShQVF9GT1JNQVRWRUMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikgLSAyKTsKKwlERUZJTkUoUFRfT0ZGX0ZPUk1BVFZFQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSAtIDIpOwogI2Vsc2UKIAkvKiBiaXRmaWVsZHMgYXJlIGEgYml0IGRpZmZpY3VsdCAqLwotCURFRklORShQVF9WRUNUT1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykgKyA0KTsKKwlERUZJTkUoUFRfT0ZGX1ZFQ1RPUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSArIDQpOwogI2VuZGlmCiAKIAkvKiBzaWduYWwgZGVmaW5lcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUwppbmRleCBmNTZmYWE1Li41NjA0M2FkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUwpAQCAtNDYsNyArNDYsNyBAQAogRU5UUlkoYnVzZXJyKQogCVNBVkVfQUxMCiAJbW92ZXEJIy0xLCVkMAotCW1vdmVsCSVkMCwlc3BAKFBUX09SSUdfRDApCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX09SSUdfRDApCiAJbW92ZWwJJXNwLCVzcEAtIAkJLyogc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudCAqLwogCWpzcglidXNlcnJfYwogCWFkZHFsCSM0LCVzcApAQCAtNTUsNyArNTUsNyBAQAogRU5UUlkodHJhcCkKIAlTQVZFX0FMTAogCW1vdmVxCSMtMSwlZDAKLQltb3ZlbAklZDAsJXNwQChQVF9PUklHX0QwKQorCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9PUklHX0QwKQogCW1vdmVsCSVzcCwlc3BALSAJCS8qIHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQgKi8KIAlqc3IJdHJhcF9jCiAJYWRkcWwJIzQsJXNwCkBAIC02Nyw3ICs2Nyw3IEBACiBFTlRSWShkYmdpbnRlcnJ1cHQpCiAJU0FWRV9BTEwKIAltb3ZlcQkjLTEsJWQwCi0JbW92ZWwJJWQwLCVzcEAoUFRfT1JJR19EMCkKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfT1JJR19EMCkKIAltb3ZlbAklc3AsJXNwQC0gCQkvKiBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50ICovCiAJanNyCWRiZ2ludGVycnVwdF9jCiAJYWRkcWwJIzQsJXNwCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9tbS9pbml0LmMgYi9hcmNoL202OGtub21tdS9tbS9pbml0LmMKaW5kZXggYjE3MDNjNi4uZjMyMzZkMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCisrKyBiL2FyY2gvbTY4a25vbW11L21tL2luaXQuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCXBhZ2VzKys7CiAJfQotCXByaW50ayAoS0VSTl9OT1RJQ0UgIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWRrIGZyZWVkXG4iLCBwYWdlcyk7CisJcHJpbnRrIChLRVJOX05PVElDRSAiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlZGsgZnJlZWRcbiIsIHBhZ2VzICogKFBBR0VfU0laRSAvIDEwMjQpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjA2ZS9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCmluZGV4IDBmNDFiYTguLjk0MjM5NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL21jZnNpbS5oPgogI2luY2x1ZGUgPGFzbS9tY2Z1YXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL21jZmRtYS5oPgotI2luY2x1ZGUgPGFzbS9tY2Z1YXJ0Lmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCmluZGV4IGIxYWVmNzIuLjlkODBkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUwpAQCAtMzksMTcgKzM5LDE3IEBACiAuZ2xvYmwgaW50aGFuZGxlcjcKIAogYmFkc3lzOgotCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfRDApCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApCiAJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgogCiBkb190cmFjZToKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQkvKiBuZWVkZWQgZm9yIHN0cmFjZSovCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApCS8qIG5lZWRlZCBmb3Igc3RyYWNlKi8KIAlzdWJxbAkjNCwlc3AKIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQogCVJFU1RPUkVfU1dJVENIX1NUQUNLCiAJYWRkcWwJIzQsJXNwCi0JbW92ZWwJJXNwQChQVF9PUklHX0QwKSwlZDEKKwltb3ZlbAklc3BAKFBUX09GRl9PUklHX0QwKSwlZDEKIAltb3ZlbAkjLUVOT1NZUywlZDAKIAljbXBsCSNOUl9zeXNjYWxscywlZDEKIAlqY2MJMWYKQEAgLTU3LDcgKzU3LDcgQEAKIAlsZWEJc3lzX2NhbGxfdGFibGUsICVhMAogCWpic3IJJWEwQCglZDEpCiAKLTE6CW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCisxOgltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KIAlzdWJxbAkjNCwlc3AJCQkvKiBkdW1teSByZXR1cm4gYWRkcmVzcyAqLwogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC03NSw3ICs3NSw3IEBACiAJamJzciAgICBzZXRfZXNwMAogCWFkZHFsICAgIzQsJXNwCiAKLQltb3ZlbAklc3BAKFBUX09SSUdfRDApLCVkMAorCW1vdmVsCSVzcEAoUFRfT0ZGX09SSUdfRDApLCVkMAogCiAJbW92ZWwJJXNwLCVkMQkJCS8qIGdldCB0aHJlYWRfaW5mbyBwb2ludGVyICovCiAJYW5kbAkjLVRIUkVBRF9TSVpFLCVkMQpAQCAtODgsMTAgKzg4LDEwIEBACiAJbGVhCXN5c19jYWxsX3RhYmxlLCVhMAogCW1vdmVsCSVhMEAoJWQwKSwgJWEwCiAJamJzcgklYTBACi0JbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUqLworCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSovCiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKLQlidHN0CSM1LCVzcEAoUFRfU1IpCQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsKi8KKwlidHN0CSM1LCVzcEAoUFRfT0ZGX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCiAJamVxCUx1c2VyX3JldHVybgkJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyovCiAKIExrZXJuZWxfcmV0dXJuOgpAQCAtMTMzLDcgKzEzMyw3IEBACiAgKi8KIGludGhhbmRsZXIxOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIGludGhhbmRsZXIyOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIGludGhhbmRsZXIzOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIGludGhhbmRsZXI0OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIGludGhhbmRsZXI1OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTg4LDcgKzE4OCw3IEBACiAKIGludGhhbmRsZXI2OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIGludGhhbmRsZXI3OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMjEwLDcgKzIxMCw3IEBACiAKIGludGhhbmRsZXI6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0yMjQsNyArMjI0LDcgQEAKIDI6CiAJUkVTVE9SRV9BTEwKIDE6Ci0JbW92ZWIJJXNwQChQVF9TUiksICVkMAorCW1vdmViCSVzcEAoUFRfT0ZGX1NSKSwgJWQwCiAJYW5kCSM3LCAlZDAKIAlqaGkJMmIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKaW5kZXggNTVkZmVmZS4uNmQzNDYwYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCkBAIC0zNSwxNyArMzUsMTcgQEAKIC5nbG9ibCBpbnRoYW5kbGVyCiAKIGJhZHN5czoKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQorCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfT0ZGX0QwKQogCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KIAogZG9fdHJhY2U6Ci0JbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9EMCkJLyogbmVlZGVkIGZvciBzdHJhY2UqLworCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfT0ZGX0QwKSAvKiBuZWVkZWQgZm9yIHN0cmFjZSovCiAJc3VicWwJIzQsJXNwCiAJU0FWRV9TV0lUQ0hfU1RBQ0sKIAlqYnNyCXN5c2NhbGxfdHJhY2UKIAlSRVNUT1JFX1NXSVRDSF9TVEFDSwogCWFkZHFsCSM0LCVzcAotCW1vdmVsCSVzcEAoUFRfT1JJR19EMCksJWQxCisJbW92ZWwJJXNwQChQVF9PRkZfT1JJR19EMCksJWQxCiAJbW92ZWwJIy1FTk9TWVMsJWQwCiAJY21wbAkjTlJfc3lzY2FsbHMsJWQxCiAJamNjCTFmCkBAIC01Myw3ICs1Myw3IEBACiAJbGVhCXN5c19jYWxsX3RhYmxlLCAlYTAKIAlqYnNyCSVhMEAoJWQxKQogCi0xOgltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLworMToJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KIAlzdWJxbAkjNCwlc3AJCQkvKiBkdW1teSByZXR1cm4gYWRkcmVzcyAqLwogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC03OSwxMCArNzksMTAgQEAKIAlsZWEJc3lzX2NhbGxfdGFibGUsJWEwCiAJbW92ZWwJJWEwQCglZDApLCAlYTAKIAlqYnNyCSVhMEAKLQltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSovCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUqLwogCiByZXRfZnJvbV9leGNlcHRpb246Ci0JYnRzdAkjNSwlc3BAKFBUX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCisJYnRzdAkjNSwlc3BAKFBUX09GRl9TUikJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCiAJamVxCUx1c2VyX3JldHVybgkJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyovCiAKIExrZXJuZWxfcmV0dXJuOgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgKi8KIGludGhhbmRsZXI6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZC5sCSMweDNmZiwgJWQwCiAJbHNyLmwgICAjMHgwMiwgICVkMAogCkBAIC0xMzksNyArMTM5LDcgQEAKIDI6CiAJUkVTVE9SRV9BTEwKIDE6Ci0JbW92ZWIJJXNwQChQVF9TUiksICVkMAorCW1vdmViCSVzcEAoUFRfT0ZGX1NSKSwgJWQwCiAJYW5kCSM3LCAlZDAKIAlqaGkJMmIKIAkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGRvIHNvZnR3YXJlIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TCmluZGV4IDNiNDcxYzAuLmRkN2Q1OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwpAQCAtODEsMTEgKzgxLDExIEBACiAKIAltb3ZlbAklZDMsJWEwCiAJamJzcgklYTBACi0JbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLwogCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KIDE6Ci0JbW92ZWwJIy1FTk9TWVMsJWQyCQkvKiBzdHJhY2UgbmVlZHMgLUVOT1NZUyBpbiBQVF9EMCAqLwotCW1vdmVsCSVkMixQVF9EMCglc3ApCQkvKiBvbiBzeXNjYWxsIGVudHJ5ICovCisJbW92ZWwJIy1FTk9TWVMsJWQyCQkvKiBzdHJhY2UgbmVlZHMgLUVOT1NZUyBpbiBQVF9PRkZfRDAgKi8KKwltb3ZlbAklZDIsUFRfT0ZGX0QwKCVzcCkJLyogb24gc3lzY2FsbCBlbnRyeSAqLwogCXN1YnFsCSM0LCVzcAogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC05Myw3ICs5Myw3IEBACiAJYWRkcWwJIzQsJXNwCiAJbW92ZWwJJWQzLCVhMAogCWpic3IJJWEwQAotCW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCiAJc3VicWwJIzQsJXNwCQkJLyogZHVtbXkgcmV0dXJuIGFkZHJlc3MgKi8KIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQpAQCAtMTA0LDcgKzEwNCw3IEBACiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKIAltb3ZlCSMweDI3MDAsJXNyCQkvKiBkaXNhYmxlIGludHJzICovCi0JYnRzdAkjNSwlc3BAKFBUX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCAqLworCWJ0c3QJIzUsJXNwQChQVF9PRkZfU1IpCS8qIGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwgKi8KIAlqZXEJTHVzZXJfcmV0dXJuCQkvKiBpZiBzbywgc2tpcCByZXNjaGVkLCBzaWduYWxzICovCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMTQyLDggKzE0Miw4IEBACiBMcmV0dXJuOgogCW1vdmUJIzB4MjcwMCwlc3IJCS8qIGRpc2FibGUgaW50cnMgKi8KIAltb3ZlbAlzd191c3AsJWEwCQkvKiBnZXQgdXNwICovCi0JbW92ZWwJJXNwQChQVF9QQyksJWEwQC0JLyogY29weSBleGNlcHRpb24gcHJvZ3JhbSBjb3VudGVyICovCi0JbW92ZWwJJXNwQChQVF9GT1JNQVRWRUMpLCVhMEAtLyogY29weSBleGNlcHRpb24gZm9ybWF0L3ZlY3Rvci9zciAqLworCW1vdmVsCSVzcEAoUFRfT0ZGX1BDKSwlYTBALQkvKiBjb3B5IGV4Y2VwdGlvbiBwcm9ncmFtIGNvdW50ZXIgKi8KKwltb3ZlbAklc3BAKFBUX09GRl9GT1JNQVRWRUMpLCVhMEAtIC8qIGNvcHkgZXhjZXB0aW9uIGZvcm1hdC92ZWN0b3Ivc3IgKi8KIAltb3ZlbWwJJXNwQCwlZDEtJWQ1LyVhMC0lYTIKIAlsZWEJJXNwQCgzMiksJXNwCQkvKiBzcGFjZSBmb3IgOCByZWdzICovCiAJbW92ZWwJJXNwQCssJWQwCkBAIC0xODEsOSArMTgxLDkgQEAKIEVOVFJZKGludGhhbmRsZXIpCiAJU0FWRV9BTEwKIAltb3ZlcQkjLTEsJWQwCi0JbW92ZWwJJWQwLCVzcEAoUFRfT1JJR19EMCkKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfT1JJR19EMCkKIAotCW1vdmV3CSVzcEAoUFRfRk9STUFUVkVDKSwlZDAJLyogcHV0IGV4Y2VwdGlvbiAjIGluIGQwICovCisJbW92ZXcJJXNwQChQVF9PRkZfRk9STUFUVkVDKSwlZDAgLyogcHV0IGV4Y2VwdGlvbiAjIGluIGQwICovCiAJYW5kbAkjMHgwM2ZjLCVkMAkJLyogbWFzayBvdXQgdmVjdG9yIG9ubHkgKi8KIAogCW1vdmVsCSVzcCwlc3BALQkJLyogcHVzaCByZWdzIGFyZyAqLwpAQCAtMjAzLDcgKzIwMyw3IEBACiBFTlRSWShmYXN0aGFuZGxlcikKIAlTQVZFX0xPQ0FMCiAKLQltb3Zldwklc3BAKFBUX0ZPUk1BVFZFQyksJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfRk9STUFUVkVDKSwlZDAKIAlhbmRsCSMweDAzZmMsJWQwCQkvKiBtYXNrIG91dCB2ZWN0b3Igb25seSAqLwogCiAJbW92ZWwJJXNwLCVzcEAtCQkvKiBwdXNoIHJlZ3MgYXJnICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMKaW5kZXggYWNjMWYwNS4uZTNlY2IzNiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUwpAQCAtNTkyLDYgKzU5Miw4IEBACiAJbm9wCiAJbWZzCXI3LCByZnNyOwkJLyogc2F2ZSBGU1IgKi8KIAlub3AKKwltdHMJcmZzciwgcjA7CS8qIENsZWFyIHN0aWNreSBmc3IgKi8KKwlub3AKIAlsYQlyMTIsIHIwLCBmdWxsX2V4Y2VwdGlvbgogCXNldF92bXM7CiAJcnRiZAlyMTIsIDA7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKaW5kZXggNmIwMjg4ZS4uMmI4NmMwMyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJYWRkawlyOCwgcjE3LCByMDsgLyogTG9hZCBleGNlcHRpb24gYWRkcmVzcyAqLwogCWJyYWxpZAlyMTUsIGZ1bGxfZXhjZXB0aW9uOyAvKiBCcmFuY2ggdG8gdGhlIGhhbmRsZXIgKi8KIAlub3A7Ci0JbXRzCXIwLCByZnNyOwkvKiBDbGVhciBzdGlja3kgZnNyICovCisJbXRzCXJmc3IsIHIwOwkvKiBDbGVhciBzdGlja3kgZnNyICovCiAJbm9wCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYwppbmRleCA0MjAxYzc0Li5jNTkyZDQ3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjM1LDcgKzIzNSw5IEBACiAJcmVncy0+cGMgPSBwYzsKIAlyZWdzLT5yMSA9IHVzcDsKIAlyZWdzLT5wdF9tb2RlID0gMDsKKyNpZmRlZiBDT05GSUdfTU1VCiAJcmVncy0+bXNyIHw9IE1TUl9VTVM7CisjZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19NTVUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggNzA1YTdhOS4uMWFhZDBkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgTUlQUwogCWJvb2wKIAlkZWZhdWx0IHkKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCkBAIC0xMDEyLDkgKzEwMTMsOSBAQAogCiBjb25maWcgTUlQU19MMV9DQUNIRV9TSElGVAogCWludAotCWRlZmF1bHQgIjQiIGlmIE1BQ0hfREVDU1RBVElPTiB8fCBNSUtST1RJS19SQjUzMgorCWRlZmF1bHQgIjQiIGlmIE1BQ0hfREVDU1RBVElPTiB8fCBNSUtST1RJS19SQjUzMiB8fCBQTUNfTVNQNDIwMF9FVkFMCisJZGVmYXVsdCAiNiIgaWYgTUlQU19DUFVfU0NBQ0hFCiAJZGVmYXVsdCAiNyIgaWYgU0dJX0lQMjIgfHwgU0dJX0lQMjcgfHwgU0dJX0lQMjggfHwgU05JX1JNIHx8IENQVV9DQVZJVU1fT0NURU9OCi0JZGVmYXVsdCAiNCIgaWYgUE1DX01TUDQyMDBfRVZBTAogCWRlZmF1bHQgIjUiCiAKIGNvbmZpZyBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYwppbmRleCAzYWI2ZDgwLi4xOWMxYzgyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAjZGVmaW5lIERCREVWX1RBQl9TSVpFCUFSUkFZX1NJWkUoZGJkZXZfdGFiKQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdTMyIGF1MXh4eF9kYmRtYV9wbV9yZWdzW05VTV9EQkRNQV9DSEFOUyArIDFdWzhdOworc3RhdGljIHUzMiBhdTF4eHhfZGJkbWFfcG1fcmVnc1tOVU1fREJETUFfQ0hBTlMgKyAxXVs2XTsKICNlbmRpZgogCiAKQEAgLTk5MywxNCArOTkzLDEzIEBACiAJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbMF1bM10gPSBhdV9yZWFkbChhZGRyICsgMHgwYyk7CiAKIAkvKiBzYXZlIGNoYW5uZWwgY29uZmlndXJhdGlvbnMgKi8KLQlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPCBOVU1fREJETUFfQ0hBTlM7IGkrKykgeworCWZvciAoaSA9IDEsIGFkZHIgPSBERE1BX0NIQU5ORUxfQkFTRTsgaSA8PSBOVU1fREJETUFfQ0hBTlM7IGkrKykgewogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVswXSA9IGF1X3JlYWRsKGFkZHIgKyAweDAwKTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMV0gPSBhdV9yZWFkbChhZGRyICsgMHgwNCk7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzJdID0gYXVfcmVhZGwoYWRkciArIDB4MDgpOwogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVszXSA9IGF1X3JlYWRsKGFkZHIgKyAweDBjKTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNF0gPSBhdV9yZWFkbChhZGRyICsgMHgxMCk7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzVdID0gYXVfcmVhZGwoYWRkciArIDB4MTQpOwotCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs2XSA9IGF1X3JlYWRsKGFkZHIgKyAweDE4KTsKIAogCQkvKiBoYWx0IGNoYW5uZWwgKi8KIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzBdICYgfjEsIGFkZHIgKyAweDAwKTsKQEAgLTEwMjcsMTQgKzEwMjYsMTMgQEAKIAlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbMF1bM10sIGFkZHIgKyAweDBjKTsKIAogCS8qIHJlc3RvcmUgY2hhbm5lbCBjb25maWd1cmF0aW9ucyAqLwotCWZvciAoaSA9IDEsIGFkZHIgPSBERE1BX0NIQU5ORUxfQkFTRTsgaSA8IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CisJZm9yIChpID0gMSwgYWRkciA9IERETUFfQ0hBTk5FTF9CQVNFOyBpIDw9IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVswXSwgYWRkciArIDB4MDApOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMV0sIGFkZHIgKyAweDA0KTsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzJdLCBhZGRyICsgMHgwOCk7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVszXSwgYWRkciArIDB4MGMpOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNF0sIGFkZHIgKyAweDEwKTsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzVdLCBhZGRyICsgMHgxNCk7Ci0JCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs2XSwgYWRkciArIDB4MTgpOwogCQlhdV9zeW5jKCk7CiAJCWFkZHIgKz0gMHgxMDA7CS8qIG5leHQgY2hhbm5lbCBiYXNlICovCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCmluZGV4IGM4OGM4MjEuLmQ2NzA5MjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKQEAgLTM1NCw2ICszNTQsMjggQEAKIAlhdV9zeW5jKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGF1MXhfaWMwX21hc2thY2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBpbnQgYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOworCisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfV0FLRUNMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfTUFTS0NMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfUklTSU5HQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9GQUxMSU5HQ0xSKTsKKwlhdV9zeW5jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGF1MXhfaWMxX21hc2thY2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBpbnQgYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOworCisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfV0FLRUNMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfTUFTS0NMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfUklTSU5HQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9GQUxMSU5HQ0xSKTsKKwlhdV9zeW5jKCk7Cit9CisKIHN0YXRpYyBpbnQgYXUxeF9pYzFfc2V0d2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKQEAgLTM3OSwyNSArNDAxLDIxIEBACiAvKgogICogaXJxX2NoaXBzIGZvciBib3RoIElDczsgdGhpcyB3YXkgdGhlIG1hc2sgaGFuZGxlcnMgY2FuIGJlCiAgKiBhcyBzaG9ydCBhcyBwb3NzaWJsZS4KLSAqCi0gKiBOT1RFOiB0aGUgLT5hY2soKSBjYWxsYmFjayBpcyB1c2VkIGJ5IHRoZSBoYW5kbGVfZWRnZV9pcnEKLSAqCSBmbG93aGFuZGxlciBvbmx5LCB0aGUgLT5tYXNrX2FjaygpIG9uZSBieSBoYW5kbGVfbGV2ZWxfaXJxLAotICoJIHNvIG5vIG5lZWQgZm9yIGFuIGlycV9jaGlwIGZvciBlYWNoIHR5cGUgb2YgaXJxIChsZXZlbC9lZGdlKS4KICAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhdTF4X2ljMF9jaGlwID0gewogCS5uYW1lCQk9ICJBbGNoZW15LUlDMCIsCi0JLmFjawkJPSBhdTF4X2ljMF9hY2ssCQkvKiBlZGdlICovCisJLmFjawkJPSBhdTF4X2ljMF9hY2ssCiAJLm1hc2sJCT0gYXUxeF9pYzBfbWFzaywKLQkubWFza19hY2sJPSBhdTF4X2ljMF9tYXNrLAkvKiBsZXZlbCAqLworCS5tYXNrX2Fjawk9IGF1MXhfaWMwX21hc2thY2ssCiAJLnVubWFzawkJPSBhdTF4X2ljMF91bm1hc2ssCiAJLnNldF90eXBlCT0gYXUxeF9pY19zZXR0eXBlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhdTF4X2ljMV9jaGlwID0gewogCS5uYW1lCQk9ICJBbGNoZW15LUlDMSIsCi0JLmFjawkJPSBhdTF4X2ljMV9hY2ssCQkvKiBlZGdlICovCisJLmFjawkJPSBhdTF4X2ljMV9hY2ssCiAJLm1hc2sJCT0gYXUxeF9pYzFfbWFzaywKLQkubWFza19hY2sJPSBhdTF4X2ljMV9tYXNrLAkvKiBsZXZlbCAqLworCS5tYXNrX2Fjawk9IGF1MXhfaWMxX21hc2thY2ssCiAJLnVubWFzawkJPSBhdTF4X2ljMV91bm1hc2ssCiAJLnNldF90eXBlCT0gYXUxeF9pY19zZXR0eXBlLAogCS5zZXRfd2FrZQk9IGF1MXhfaWMxX3NldHdha2UsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwppbmRleCBjYzMyYzY5Li40NWI2MWM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKQEAgLTY5LDYgKzY5LDcgQEAKICNlbHNlCiAJYXVfd3JpdGVsKDB4ZiwgQXUxNTAwX1BDSV9DRkcpOwogI2VuZGlmCisJYm9hcmRfcGNpX2lkc2VsID0gbXR4MV9wY2lfaWRzZWw7CiAjZW5kaWYKIAogCS8qIEluaXRpYWxpemUgc3lzX3BpbmZ1bmMgKi8KQEAgLTg1LDggKzg2LDYgQEAKIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTEsIDEpOwkvKiBncmVlbiBvbiAqLwogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMiwgMCk7CS8qIHJlZCBvZmYgKi8KIAotCWJvYXJkX3BjaV9pZHNlbCA9IG10eDFfcGNpX2lkc2VsOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiNEcgU3lzdGVtcyBNVFgtMSBCb2FyZFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwppbmRleCBlMjI3OGMwLi44MzVmM2YwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCkBAIC01MDMsNiArNTAzLDcgQEAKIHsKIAl1MTYgY2hpcF9pZDsKIAlpbnQgcmVzOworCXUzMiAqYm9vdGNyLCB2YWw7CiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCiAJc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgdWFydF9wb3J0WzJdOwogCkBAIC01OTUsNyArNTk2LDEzIEBACiAKIAlhcjdfd2R0X3Jlcy5lbmQgPSBhcjdfd2R0X3Jlcy5zdGFydCArIDB4MjA7CiAKLQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN193ZHQpOworCWJvb3RjciA9ICh1MzIgKilpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfRENMLCA0KTsKKwl2YWwgPSAqYm9vdGNyOworCWlvdW5tYXAoYm9vdGNyKTsKKworCS8qIFJlZ2lzdGVyIHdhdGNoZG9nIG9ubHkgaWYgZW5hYmxlZCBpbiBoYXJkd2FyZSAqLworCWlmICh2YWwgJiBBUjdfV0RUX0hXX0VOQSkKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfd2R0KTsKIAogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCmluZGV4IGRmYmZkN2UuLjkzOGIxZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCkBAIC0xMTIsMTAgKzExMiw4IEBACiB7CiAJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CiAJcmV0ID0gcmVxdWVzdF9pcnEoaW9kZXZfaXJxLCBpb2Rldl9pcnFoZGwsIElSUUZfRElTQUJMRUQsCiAJCQkgICBpb2Rldl9uYW1lLCAmbWlzY2Rldik7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwppbmRleCAwNzllMzNkLi5mYjI4NGMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7Ci0JY2hhciBidWZbQ0xfU0laRV07CisJc3RhdGljIGNoYXIgYnVmW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAKIAkvKiBHZXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgZnJvbSBDRkUgKi8KIAlpZiAoY2ZlX2dldGVudigiTElOVVhfQ01ETElORSIsIGJ1ZiwgQ0xfU0laRSkgPj0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvTWFrZWZpbGUgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQppbmRleCBhYWE1ODVjLi4wMDA2NGI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIG9iai15CQkrPSBjbGsubyBjcHUubyBjcy5vIGdwaW8ubyBpcnEubyBwcm9tLm8gc2V0dXAubyB0aW1lci5vIFwKLQkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8KKwkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8gZGV2LXBjbWNpYS5vIGRldi11YXJ0Lm8gZGV2LXdkdC5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBlYXJseV9wcmludGsubwogCiBvYmoteQkJKz0gYm9hcmRzLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwppbmRleCBmZDc3ZjU0Li4wNWEzNWNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwpAQCAtMjAsMTAgKzIwLDEwIEBACiAjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KICNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KICNpbmNsdWRlIDxiY202M3h4X2lvLmg+Ci0jaW5jbHVkZSA8YmNtNjN4eF9ib2FyZC5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3BjaS5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X2VuZXQuaD4KICNpbmNsdWRlIDxiY202M3h4X2Rldl9kc3AuaD4KKyNpbmNsdWRlIDxiY202M3h4X2Rldl9wY21jaWEuaD4KICNpbmNsdWRlIDxib2FyZF9iY205NjN4eC5oPgogCiAjZGVmaW5lIFBGWAkiYm9hcmRfYmNtOTYzeHg6ICIKQEAgLTc5Myw2ICs3OTMsOSBAQAogewogCXUzMiB2YWw7CiAKKwlpZiAoYm9hcmQuaGFzX3BjY2FyZCkKKwkJYmNtNjN4eF9wY21jaWFfcmVnaXN0ZXIoKTsKKwogCWlmIChib2FyZC5oYXNfZW5ldDAgJiYKIAkgICAgIWJvYXJkX2dldF9tYWNfYWRkcmVzcyhib2FyZC5lbmV0MC5tYWNfYWRkcikpCiAJCWJjbTYzeHhfZW5ldF9yZWdpc3RlcigwLCAmYm9hcmQuZW5ldDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvY3B1LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYwppbmRleCA2ZGM0M2YwLi43MDM3OGJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9jcHUtaW5mby5oPgogI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgpAQCAtMjg0LDYgKzI4NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRtcCwgZXhwZWN0ZWRfY3B1X2lkOwogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogc29jIHJlZ2lzdGVycyBsb2NhdGlvbiBkZXBlbmRzIG9uIGNwdSB0eXBlICovCiAJZXhwZWN0ZWRfY3B1X2lkID0gMDsKQEAgLTI5Myw2ICsyOTUsNyBAQAogCSAqIEJDTTYzMzggYXMgdGhlIHNhbWUgUHJJZCBhcyBCQ00zMzAyIHNlZSBhcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCiAJICovCiAJY2FzZSBDUFVfQkNNMzMwMjoKKwkJX19jcHVfbmFtZVtjcHVdID0gIkJyb2FkY29tIEJDTTYzMzgiOwogCQlleHBlY3RlZF9jcHVfaWQgPSBCQ002MzM4X0NQVV9JRDsKIAkJYmNtNjN4eF9yZWdzX2Jhc2UgPSBiY205NjMzOF9yZWdzX2Jhc2U7CiAJCWJjbTYzeHhfaXJxcyA9IGJjbTk2MzM4X2lycXM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9kZXYtcGNtY2lhLmMgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0ZDkxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi1wY21jaWEuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9jcy5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisjaW5jbHVkZSA8YmNtNjN4eF9kZXZfcGNtY2lhLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgorI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjbWNpYV9yZXNvdXJjZXNbXSA9IHsKKwkvKiBwY21jaWEgcmVnaXN0ZXJzICovCisJeworCQkvKiBzdGFydCAmIGVuZCBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKworCS8qIHBjbWNpYSBtZW1vcnkgem9uZSByZXNvdXJjZXMgKi8KKwl7CisJCS5zdGFydAkJPSBCQ01fUENNQ0lBX0NPTU1PTl9CQVNFX1BBLAorCQkuZW5kCQk9IEJDTV9QQ01DSUFfQ09NTU9OX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gQkNNX1BDTUNJQV9BVFRSX0JBU0VfUEEsCisJCS5lbmQJCT0gQkNNX1BDTUNJQV9BVFRSX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gQkNNX1BDTUNJQV9JT19CQVNFX1BBLAorCQkuZW5kCQk9IEJDTV9QQ01DSUFfSU9fRU5EX1BBLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKworCS8qIFBDTUNJQSBpcnEgKi8KKwl7CisJCS8qIHN0YXJ0IGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCisJLyogZGVjbGFyZSBQQ01DSUEgSU8gcmVzb3VyY2UgYWxzbyAqLworCXsKKwkJLnN0YXJ0CQk9IEJDTV9QQ01DSUFfSU9fQkFTRV9QQSwKKwkJLmVuZAkJPSBCQ01fUENNQ0lBX0lPX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfcGxhdGZvcm1fZGF0YSBwZDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmNtNjN4eF9wY21jaWFfZGV2aWNlID0geworCS5uYW1lCQk9ICJiY202M3h4X3BjbWNpYSIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHBjbWNpYV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHBjbWNpYV9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBkLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjb25maWdfcGNtY2lhX2NzKHVuc2lnbmVkIGludCBjcywKKwkJCQkgICB1MzIgYmFzZSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IGJjbTYzeHhfc2V0X2NzX3N0YXR1cyhjcywgMCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGJjbTYzeHhfc2V0X2NzX2Jhc2UoY3MsIGJhc2UsIHNpemUpOworCWlmICghcmV0KQorCQlyZXQgPSBiY202M3h4X3NldF9jc19zdGF0dXMoY3MsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBfX2luaXRkYXRhIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNzOworCXVuc2lnbmVkIGludAliYXNlOworCXVuc2lnbmVkIGludAlzaXplOworfSBwY21jaWFfY3NbM10gPSB7CisJeworCQkuY3MJPSBNUElfQ1NfUENNQ0lBX0NPTU1PTiwKKwkJLmJhc2UJPSBCQ01fUENNQ0lBX0NPTU1PTl9CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfQ09NTU9OX1NJWkUKKwl9LAorCXsKKwkJLmNzCT0gTVBJX0NTX1BDTUNJQV9BVFRSLAorCQkuYmFzZQk9IEJDTV9QQ01DSUFfQVRUUl9CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfQVRUUl9TSVpFCisJfSwKKwl7CisJCS5jcwk9IE1QSV9DU19QQ01DSUFfSU8sCisJCS5iYXNlCT0gQkNNX1BDTUNJQV9JT19CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfSU9fU0laRQorCX0sCit9OworCitpbnQgX19pbml0IGJjbTYzeHhfcGNtY2lhX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50IHJldCwgaTsKKworCWlmICghQkNNQ1BVX0lTXzYzNDgoKSAmJiAhQkNNQ1BVX0lTXzYzNTgoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiB1c2UgY29ycmVjdCBwY21jaWEgcmVhZHkgZ3BpbyBkZXBlbmRpbmcgb24gcHJvY2Vzc29yICovCisJc3dpdGNoIChiY202M3h4X2dldF9jcHVfaWQoKSkgeworCWNhc2UgQkNNNjM0OF9DUFVfSUQ6CisJCXBkLnJlYWR5X2dwaW8gPSAyMjsKKwkJYnJlYWs7CisKKwljYXNlIEJDTTYzNThfQ1BVX0lEOgorCQlwZC5yZWFkeV9ncGlvID0gMTg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGNtY2lhX3Jlc291cmNlc1swXS5zdGFydCA9IGJjbTYzeHhfcmVnc2V0X2FkZHJlc3MoUlNFVF9QQ01DSUEpOworCXBjbWNpYV9yZXNvdXJjZXNbMF0uZW5kID0gcGNtY2lhX3Jlc291cmNlc1swXS5zdGFydCArCisJCVJTRVRfUENNQ0lBX1NJWkUgLSAxOworCXBjbWNpYV9yZXNvdXJjZXNbNF0uc3RhcnQgPSBiY202M3h4X2dldF9pcnFfbnVtYmVyKElSUV9QQ01DSUEpOworCisJLyogY29uZmlndXJlIHBjbWNpYSBjaGlwIHNlbGVjdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IGNvbmZpZ19wY21jaWFfY3MocGNtY2lhX2NzW2ldLmNzLAorCQkJCSAgICAgICBwY21jaWFfY3NbaV0uYmFzZSwKKwkJCQkgICAgICAgcGNtY2lhX2NzW2ldLnNpemUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZXJyOworCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RldmljZSk7CisKK291dF9lcnI6CisJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gc2V0IHBjbWNpYSBjaGlwIHNlbGVjdFxuIik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi11YXJ0LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTE5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSAtMSwgLyogZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmVuZAkJPSAtMSwgLyogZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gLTEsIC8qIGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmNtNjN4eF91YXJ0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eF91YXJ0IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVhcnRfcmVzb3VyY2VzLAorfTsKKworaW50IF9faW5pdCBiY202M3h4X3VhcnRfcmVnaXN0ZXIodm9pZCkKK3sKKwl1YXJ0X3Jlc291cmNlc1swXS5zdGFydCA9IGJjbTYzeHhfcmVnc2V0X2FkZHJlc3MoUlNFVF9VQVJUMCk7CisJdWFydF9yZXNvdXJjZXNbMF0uZW5kID0gdWFydF9yZXNvdXJjZXNbMF0uc3RhcnQ7CisJdWFydF9yZXNvdXJjZXNbMF0uZW5kICs9IFJTRVRfVUFSVF9TSVpFIC0gMTsKKwl1YXJ0X3Jlc291cmNlc1sxXS5zdGFydCA9IGJjbTYzeHhfZ2V0X2lycV9udW1iZXIoSVJRX1VBUlQwKTsKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3VhcnRfZGV2aWNlKTsKK30KK2FyY2hfaW5pdGNhbGwoYmNtNjN4eF91YXJ0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi13ZHQuYyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi13ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZjNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXdkdC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZW5kCQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJjbTYzeHhfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eC13ZHQiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAorfTsKKworaW50IF9faW5pdCBiY202M3h4X3dkdF9yZWdpc3Rlcih2b2lkKQoreworCXdkdF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBiY202M3h4X3JlZ3NldF9hZGRyZXNzKFJTRVRfV0RUKTsKKwl3ZHRfcmVzb3VyY2VzWzBdLmVuZCA9IHdkdF9yZXNvdXJjZXNbMF0uc3RhcnQ7CisJd2R0X3Jlc291cmNlc1swXS5lbmQgKz0gUlNFVF9XRFRfU0laRSAtIDE7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3dkdF9kZXZpY2UpOworfQorYXJjaF9pbml0Y2FsbChiY202M3h4X3dkdF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvc2V0dXAuYwppbmRleCBiMThhMGNhLi5kMDA1NjU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L3NldHVwLmMKQEAgLTc1LDcgKzc1LDkgQEAKIAkJYmNtNjM0OF9hMV9yZWJvb3QoKTsKIAogCXByaW50ayhLRVJOX0lORk8gInRyaWdnZXJpbmcgd2F0Y2hkb2cgc29mdC1yZXNldC4uLlxuIik7Ci0JYmNtX3BlcmZfd3JpdGVsKFNZU19QTExfU09GVF9SRVNFVCwgUEVSRl9TWVNfUExMX0NUTF9SRUcpOworCXJlZyA9IGJjbV9wZXJmX3JlYWRsKFBFUkZfU1lTX1BMTF9DVExfUkVHKTsKKwlyZWcgfD0gU1lTX1BMTF9TT0ZUX1JFU0VUOworCWJjbV9wZXJmX3dyaXRlbChyZWcsIFBFUkZfU1lTX1BMTF9DVExfUkVHKTsKIAl3aGlsZSAoMSkKIAkJOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCmluZGV4IDM4NGYxODQuLjZmMmFjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKQEAgLTE3LDYgKzE3LDE1IEBACiBERUZJTkVfUldMT0NLKG9jdGVvbl9pcnFfY2l1MV9yd2xvY2spOwogREVGSU5FX1NQSU5MT0NLKG9jdGVvbl9pcnFfbXNpX2xvY2spOwogCitzdGF0aWMgaW50IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisjZWxzZQorCXJldHVybiBjdm14X2dldF9jb3JlX251bSgpOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY29yZV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9TVzA7CkBAIC0xNTIsMTEgKzE2MSwxMCBAQAogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjA7Ci0jaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHU7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwogCQllbjAgJj0gfigxdWxsIDw8IGJpdCk7CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOwpAQCAtMTY3LDI2ICsxNzUsNTcgQEAKIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwotCWVuMCAmPSB+KDF1bGwgPDwgYml0KTsKLQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSwgZW4wKTsKLQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV9hbGxfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKwlpbnQgaW5kZXg7CisJaW50IGNwdTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpbmRleCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpICogMjsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XT1JLUTA7CS8qIEJpdCAwLTYzIG9mIEVOMCAqLwogCi0Jd3JpdGVfbG9jaygmb2N0ZW9uX2lycV9jaXUwX3J3bG9jayk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMCA9CiAJCQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKIAkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKQEAgLTIwMCwxMiArMjM5LDQ2IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7Ci0Jd3JpdGVfdW5sb2NrKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBTZXQgYWZmaW5pdHkgZm9yIHRoZSBpcnEgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyKHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQoreworCWludCBjcHU7CisJaW50IGluZGV4OworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyOworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQorCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7CisJCWVsc2UKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wX1cxQyhpbmRleCksIG1hc2spOworCX0KKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCisvKgorICogTmV3ZXIgb2N0ZW9uIGNoaXBzIGhhdmUgc3VwcG9ydCBmb3IgbG9ja2xlc3MgQ0lVIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MF92MiA9IHsKKwkubmFtZSA9ICJDSVUwIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAorI2VuZGlmCit9OworCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwID0gewogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlLApAQCAtMjY5LDExICszNDIsMTAgQEAKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjE7Ci0jaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHU7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKIAkJZW4xICY9IH4oMXVsbCA8PCBiaXQpOwogCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSksIGVuMSk7CkBAIC0yODQsMjYgKzM1Niw1OCBAQAogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQllbjEgJj0gfigxdWxsIDw8IGJpdCk7Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpLCBlbjEpOwotCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCWludCBpbmRleDsKKwlpbnQgY3B1OworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyICsgMTsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQorc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsCisJCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQl3cml0ZV9sb2NrKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4xID0KIAkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEKIAkJCQkoY29yZWlkICogMiArIDEpKTsKQEAgLTMxOCwxMiArNDIyLDQ2IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMSkpOwotCXdyaXRlX3VubG9jaygmb2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQorCisvKgorICogU2V0IGFmZmluaXR5IGZvciB0aGUgaXJxIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92Mih1bnNpZ25lZCBpbnQgaXJxLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKK3sKKwlpbnQgY3B1OworCWludCBpbmRleDsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyICsgMTsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworCQllbHNlCisJCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMUMoaW5kZXgpLCBtYXNrKTsKKwl9CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAorLyoKKyAqIE5ld2VyIG9jdGVvbiBjaGlwcyBoYXZlIHN1cHBvcnQgZm9yIGxvY2tsZXNzIENJVSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjIgPSB7CisJLm5hbWUgPSAiQ0lVMCIsCisJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX3YyLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92MiwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MSA9IHsKIAkubmFtZSA9ICJDSVUxIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZSwKQEAgLTQyMCw2ICs1NTgsOCBAQAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCWludCBpcnE7CisJc3RydWN0IGlycV9jaGlwICpjaGlwMDsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAxOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIFNldCB0aGUgZGVmYXVsdCBhZmZpbml0eSB0byB0aGUgYm9vdCBjcHUuICovCkBAIC00MzAsNiArNTcwLDE2IEBACiAJaWYgKE5SX0lSUVMgPCBPQ1RFT05fSVJRX0xBU1QpCiAJCXByX2Vycigib2N0ZW9uX2lycV9pbml0OiBOUl9JUlFTIGlzIHNldCB0b28gbG93XG4iKTsKIAorCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONThYWF9QQVNTMl9YKSB8fAorCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWF9QQVNTMl9YKSB8fAorCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWF9QQVNTMl9YKSkgeworCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MF92MjsKKwkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjI7CisJfSBlbHNlIHsKKwkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTA7CisJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxOworCX0KKwogCS8qIDAgLSAxNSByZXNlcnZlZCBmb3IgaTgyNTkgbWFzdGVyIGFuZCBzbGF2ZSBjb250cm9sbGVyLiAqLwogCiAJLyogMTcgLSAyMyBNaXBzIGludGVybmFsICovCkBAIC00NDAsMTQgKzU5MCwxMiBAQAogCiAJLyogMjQgLSA4NyBDSVVfSU5UX1NVTTAgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV09SS1EwOyBpcnEgPD0gT0NURU9OX0lSUV9CT09URE1BOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmb2N0ZW9uX2lycV9jaGlwX2NpdTAsCi0JCQkJCSBoYW5kbGVfcGVyY3B1X2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CiAJfQogCiAJLyogODggLSAxNTEgQ0lVX0lOVF9TVU0xICovCiAJZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dET0cwOyBpcnEgPD0gT0NURU9OX0lSUV9SRVNFUlZFRDE1MTsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJm9jdGVvbl9pcnFfY2hpcF9jaXUxLAotCQkJCQkgaGFuZGxlX3BlcmNwdV9pcnEpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMSwgaGFuZGxlX3BlcmNwdV9pcnEpOwogCX0KIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCkBAIC01MDUsMTQgKzY1MywxMCBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIGludCBpc19pcnFfZW5hYmxlZF9vbl9jcHUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLSAgICAgICB1bnNpZ25lZCBpbnQgaXNzZXQ7Ci0jaWZkZWYgQ09ORklHX1NNUAotICAgICAgIGludCBjb3JlaWQgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0jZW5kaWYKKwl1bnNpZ25lZCBpbnQgaXNzZXQ7CisJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCWludCBiaXQgPSAoaXJxIDwgT0NURU9OX0lSUV9XRE9HMCkgPwotCQlpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCA6IGlycSAtIE9DVEVPTl9JUlFfV0RPRzA7CisJCSAgIGlycSAtIE9DVEVPTl9JUlFfV09SS1EwIDogaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsKICAgICAgICBpZiAoaXJxIDwgNjQpIHsKIAkJaXNzZXQgPSAoY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSkgJgogCQkJKDF1bGwgPDwgYml0KSkgPj4gYml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwppbmRleCAzMmQ1MWEzLi5jMTk4ZWZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwpAQCAtNjUsMTEgKzY1LDEyIEBACiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfTUJPWF9TRVRYKGNvcmVpZCksIGFjdGlvbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fc2VuZF9pcGlfbWFzayhjcHVtYXNrX3QgbWFzaywgdW5zaWduZWQgaW50IGFjdGlvbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fc2VuZF9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkJdW5zaWduZWQgaW50IGFjdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIG1hc2spCisJZm9yX2VhY2hfY3B1X21hc2soaSwgKm1hc2spCiAJCW9jdGVvbl9zZW5kX2lwaV9zaW5nbGUoaSwgYWN0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCmluZGV4IGM2OTgxM2IuLjZjNmExOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3Ci0jIFdlZCBNYXIgIDQgMjM6MDg6MDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNgorIyBTdW4gTm92ICA4IDIyOjU5OjQ3IDIwMDkKICMKIENPTkZJR19NSVBTPXkKIApAQCAtOSwxNiArOSwxOCBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFTU9URV9GVUxPTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1NQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKQEAgLTQ1LDYgKzQ3LDcgQEAKICMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1RYWDk9eQogQ09ORklHX1RPU0hJQkFfUkJUWDQ5Mjc9eQogQ09ORklHX1RPU0hJQkFfUkJUWDQ5Mzg9eQpAQCAtODYsNyArODksNiBAQAogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKQEAgLTEwMSw3ICsxMDMsNyBAQAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCi0jIENPTkZJR19DUFVfTE9PTkdTT04yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTEzNyw2ICsxMzksNyBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CkBAIC0xNTQsNyArMTU3LDEwIEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQpAQCAtMTc1LDYgKzE4MSw3IEBACiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTE5NCwxMSArMjAxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0yMDksOCArMjE3LDEyIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtMjIwLDI1ICsyMzIsMzUgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLSMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTI0Niw4ICsyNjgsOCBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NCw2ICsyOTYsNyBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yODgsNiArMzExLDcgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQpAQCAtMjk1LDcgKzMxOSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMxMSw2ICszMzQsNyBAQAogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldApAQCAtMzM2LDYgKzM2MCw3IEBACiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0Nyw3ICszNzIsNiBAQAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CkBAIC0zNjUsOSArMzg5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTM3Niw5ICs0MDAsOSBAQAogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwogQ09ORklHX01URF9DSEFSPXkKLSMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorQ09ORklHX01URF9CTEtERVZTPW0KK0NPTkZJR19NVERfQkxPQ0s9bQorQ09ORklHX01URF9CTE9DS19STz1tCiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CkBAIC00MTQsMTYgKzQzOCwyMCBAQAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX1JCVFg0OTM5PXkKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDM1LDcgKzQ2MywxNSBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD1tCisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9bQorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9UWFg5TkRGTUM9bQogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCkBAIC00NzEsNiArNTA3LDcgQEAKICMKICMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQogQ09ORklHX0lERV9USU1JTkdTPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAogQ09ORklHX0lERV9HRD15CkBAIC01MzQsOCArNTcxLDEzIEBACiAjCiAKICMKLSMgQSBuZXcgYWx0ZXJuYXRpdmUgRmlyZVdpcmUgc3RhY2sgaXMgYXZhaWxhYmxlIHdpdGggRVhQRVJJTUVOVEFMPXkKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KICMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNTc0LDYgKzYxNiw4IEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX05FMjAwMD15CkBAIC02MDIsMTggKzY0NiwxNSBAQAogIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjUzLDYgKzY5NCw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX1RYWDk9eQpAQCAtNjY2LDcgKzcwOCw5IEBACiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTV9UWDQ5Mzk9bQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC02ODYsNiArNzMwLDEwIEBACiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAKQEAgLTcwMSwxNyArNzQ5LDIyIEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NDAsMjggKzc5MywxNyBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtNzcyLDcgKzgxNCw0MiBAQAogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPW0KKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CitDT05GSUdfU05EX1NPQ19UWFg5QUNMQz1tCitDT05GSUdfSEFTX1RYWDlfQUNMQz15CitDT05GSUdfU05EX1NPQ19UWFg5QUNMQ19BQzk3PW0KK0NPTkZJR19TTkRfU09DX1RYWDlBQ0xDX0dFTkVSSUM9bQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9bQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0FDOTdfQ09ERUM9bQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPW0KICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC03ODMsNiArODYwLDggQEAKICMgTEVEIGRyaXZlcnMKICMKIENPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwpAQCAtNzkyLDcgKzg3MSwxMiBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSz15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQpAQCAtODIwLDYgKzkwNCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1JTNUMzNDg9eQogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtODQwLDggKzkyNSwyNiBAQAogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKIENPTkZJR19SVENfRFJWX1RYNDkzOT15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworQ09ORklHX1RYWDlfRE1BQz1tCitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKyMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODUzLDkgKzk1NiwxMCBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTg2Niw2ICs5NzAsMTAgQEAKIENPTkZJR19HRU5FUklDX0FDTD15CiAKICMKKyMgQ2FjaGVzCisjCisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC04OTAsNyArOTk4LDI3IEBACiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTkyMiw2ICsxMDUwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTI5LDExICsxMDU4LDkgQEAKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19DTURMSU5FPSIiCkBAIC05NDYsNiArMTA3Myw3IEBACiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC05NTksNiArMTA4NywxMCBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGQxNmFmZGQuLjY2NGJhNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLWNvaGVyZW50Lmg+CiAKIHZvaWQgKmRtYV9hbGxvY19ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZyk7CkBAIC03MywxNCArNzQsNCBAQAogZXh0ZXJuIHZvaWQgZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCiAJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKLSNpZiAwCi0jZGVmaW5lIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQotCi1leHRlcm4gaW50IGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsCi0JZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7Ci1leHRlcm4gdm9pZCBkbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkICogZG1hX21hcmtfZGVjbGFyZWRfbWVtb3J5X29jY3VwaWVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSk7Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9BU01fRE1BX01BUFBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IGVmZWRkYzguLjBiODliODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTQ4LDkgKzQ4LDkgQEAKICNkZWZpbmUgRklYX05fQ09MT1VSUyA4CiAJRklYX0NNQVBfQkVHSU4sCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgKEZJWF9OX0NPTE9VUlMgKiBOUl9DUFVTKSwKKwlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIChGSVhfTl9DT0xPVVJTICogTlJfQ1BVUyAqIDIpLAogI2Vsc2UKLQlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIEZJWF9OX0NPTE9VUlMsCisJRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIDIpLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2djbXByZWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2NtcHJlZ3MuaAppbmRleCAzNmZkOTY5Li5jMGNmNzZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2NtcHJlZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2NtcHJlZ3MuaApAQCAtMTksMTUgKzE5LDIwIEBACiAjZGVmaW5lIEdDTVBfR0RCX09GUwkJMHg4MDAwIC8qIEdsb2JhbCBEZWJ1ZyBCbG9jayAqLwogCiAvKiBPZmZzZXRzIHRvIGluZGl2aWR1YWwgR0NNUCByZWdpc3RlcnMgZnJvbSBHQ01QIGJhc2UgKi8KLSNkZWZpbmUgR0NNUE9GUyhibG9jaywgdGFnLCByZWcpCShHQ01QXyMjYmxvY2sjI19PRlMgKyBHQ01QXyMjdGFnIyNfIyNyZWcjI19PRlMpCisjZGVmaW5lIEdDTVBPRlMoYmxvY2ssIHRhZywgcmVnKQlcCisJKEdDTVBfIyNibG9jayMjX09GUyArIEdDTVBfIyN0YWcjI18jI3JlZyMjX09GUykKKyNkZWZpbmUgR0NNUE9GU24oYmxvY2ssIHRhZywgcmVnLCBuKSBcCisJKEdDTVBfIyNibG9jayMjX09GUyArIEdDTVBfIyN0YWcjI18jI3JlZyMjX09GUyhuKSkKIAogI2RlZmluZSBHQ01QR0NCT0ZTKHJlZykJCUdDTVBPRlMoR0NCLCBHQ0IsIHJlZykKKyNkZWZpbmUgR0NNUEdDQk9GU24ocmVnLCBuKQlHQ01QT0ZTbihHQ0IsIEdDQiwgcmVnLCBuKQogI2RlZmluZSBHQ01QQ0xDQk9GUyhyZWcpCUdDTVBPRlMoQ0xDQiwgQ0NCLCByZWcpCiAjZGVmaW5lIEdDTVBDT0NCT0ZTKHJlZykJR0NNUE9GUyhDT0NCLCBDQ0IsIHJlZykKICNkZWZpbmUgR0NNUEdEQk9GUyhyZWcpCQlHQ01QT0ZTKEdEQiwgR0RCLCByZWcpCiAKIC8qIEdDTVAgcmVnaXN0ZXIgYWNjZXNzICovCiAjZGVmaW5lIEdDTVBHQ0IocmVnKQkJCVJFR1AoX2djbXBfYmFzZSwgR0NNUEdDQk9GUyhyZWcpKQorI2RlZmluZSBHQ01QR0NCbihyZWcsIG4pICAgICAgICAgICAgICAgUkVHUChfZ2NtcF9iYXNlLCBHQ01QR0NCT0ZTbihyZWcsIG4pKQogI2RlZmluZSBHQ01QQ0xDQihyZWcpCQkJUkVHUChfZ2NtcF9iYXNlLCBHQ01QQ0xDQk9GUyhyZWcpKQogI2RlZmluZSBHQ01QQ09DQihyZWcpCQkJUkVHUChfZ2NtcF9iYXNlLCBHQ01QQ09DQk9GUyhyZWcpKQogI2RlZmluZSBHQ01QR0RCKHJlZykJCQlSRUdQKF9nY21wX2Jhc2UsIEdDTVBHREJPRlMocmVnKSkKQEAgLTQ5LDEwICs1NCwxMCBAQAogI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfR0NNUEJBU0VfTVNLCUdDTVBHQ0JNU0soR0NNUEJfR0NNUEJBU0UsIDE3KQogI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfU0hGCTAKICNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX01TSwlHQ01QR0NCTVNLKEdDTVBCX0NNREVGVEdULCAyKQotI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfTUVNCTAKLSNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX01FTTEJMQotI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEgMgotI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTIgMworI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfRElTQUJMRUQJMAorI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfTUVNCQkxCisjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMQkJMgorI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTIJCTMKICNkZWZpbmUgR0NNUF9HQ0JfQ0NNQ19PRlMJCTB4MDAxMAkvKiBHbG9iYWwgQ00gQ29udHJvbCAqLwogI2RlZmluZSBHQ01QX0dDQl9HQ1NSQVBfT0ZTCQkweDAwMjAJLyogR2xvYmFsIENTUiBBY2Nlc3MgUHJpdmlsZWdlICovCiAjZGVmaW5lICBHQ01QX0dDQl9HQ1NSQVBfQ01BQ0NFU1NfU0hGCTAKQEAgLTExNSw1ICsxMjAsNiBAQAogI2RlZmluZSBHQ01QX0NDQl9EQkdHUk9VUF9PRlMJCTB4MDEwMAkJLyogRGVidWdCcmVhayBHcm91cCAqLwogCiBleHRlcm4gaW50IF9faW5pdCBnY21wX3Byb2JlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotCitleHRlcm4gaW50IF9faW5pdCBnY21wX25pb2N1KHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGdjbXBfc2V0cmVnaW9uKGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KTsKICNlbmRpZiAvKiBfQVNNX0dDTVBSRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9naWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9naWMuaAppbmRleCBhOGY1NzM0Li45Yjk0MzZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2ljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2dpYy5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lIF9BU01fR0lDUkVHU19ICiAKICN1bmRlZglHSUNJU0JZVEVMSVRUTEVFTkRJQU4KLSNkZWZpbmUgR0lDSVNXT1JETElUVExFRU5ESUFOCiAKIC8qIENvbnN0YW50cyAqLwogI2RlZmluZSBHSUNfUE9MX1BPUwkJCTEKQEAgLTIwLDExICsxOSw3IEBACiAjZGVmaW5lIEdJQ19UUklHX0VER0UJCQkxCiAjZGVmaW5lIEdJQ19UUklHX0xFVkVMCQkJMAogCi0jaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBHSUNfTlVNX0lOVFJTCQkJKDI0ICsgTlJfQ1BVUyAqIDIpCi0jZWxzZQotI2RlZmluZSBHSUNfTlVNX0lOVFJTCQkJMzIKLSNlbmRpZgogCiAjZGVmaW5lIE1TSyhuKSAoKDEgPDwgKG4pKSAtIDEpCiAjZGVmaW5lIFJFRzMyKGFkZHIpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKGFkZHIpKQpAQCAtNzAsMTMgKzY1LDEzIEBACiAjZGVmaW5lIFVTTV9WSVNJQkxFX1NFQ1RJT05fU0laRQkweDEwMDAwCiAKIC8qIFJlZ2lzdGVyIE1hcCBmb3IgU2hhcmVkIFNlY3Rpb24gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfTElUVExFX0VORElBTikgfHwgZGVmaW5lZChHSUNJU1dPUkRMSVRUTEVFTkRJQU4pCiAKICNkZWZpbmUJR0lDX1NIX0NPTkZJR19PRlMJCTB4MDAwMAogCiAvKiBTaGFyZWQgR2xvYmFsIENvdW50ZXIgKi8KICNkZWZpbmUgR0lDX1NIX0NPVU5URVJfMzFfMDBfT0ZTCTB4MDAxMAogI2RlZmluZSBHSUNfU0hfQ09VTlRFUl82M18zMl9PRlMJMHgwMDE0CisjZGVmaW5lIEdJQ19TSF9SRVZJU0lPTklEX09GUwkJMHgwMDIwCiAKIC8qIEludGVycnVwdCBQb2xhcml0eSAqLwogI2RlZmluZSBHSUNfU0hfUE9MXzMxXzBfT0ZTCQkweDAxMDAKQEAgLTE2NCwyNCArMTU5LDMxIEBACiAJKEdJQ19TSF9JTlRSX01BUF9UT19WUEVfQkFTRV9PRlMgKyAoMzIgKiAoaW50cikpICsgKCgodnBlKSAvIDMyKSAqIDQpKQogI2RlZmluZSBHSUNfU0hfTUFQX1RPX1ZQRV9SRUdfQklUKHZwZSkJKDEgPDwgKCh2cGUpICUgMzIpKQogCisvKiBDb252ZXJ0IGFuIGludGVycnVwdCBudW1iZXIgdG8gYSBieXRlIG9mZnNldC9iaXQgZm9yIG11bHRpLXdvcmQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdJQ19JTlRSX09GUyhpbnRyKSAoKChpbnRyKSAvIDMyKSo0KQorI2RlZmluZSBHSUNfSU5UUl9CSVQoaW50cikgKChpbnRyKSAlIDMyKQorCiAvKiBQb2xhcml0eSA6IFJlc2V0IFZhbHVlIGlzIGFsd2F5cyAwICovCiAjZGVmaW5lIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTCQkweDAxMDAKICNkZWZpbmUgR0lDX1NFVF9QT0xBUklUWShpbnRyLCBwb2wpIFwKLQlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMgKyAoKChpbnRyKSAvIDMyKSAqIDQpKSwgKHBvbCkgPDwgKChpbnRyKSAlIDMyKSkKKwlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMgKyBcCisJCUdJQ19JTlRSX09GUyhpbnRyKSksIChwb2wpIDw8IEdJQ19JTlRSX0JJVChpbnRyKSkKIAogLyogVHJpZ2dlcmluZyA6IFJlc2V0IFZhbHVlIGlzIGFsd2F5cyAwICovCiAjZGVmaW5lIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMJCTB4MDE4MAogI2RlZmluZSBHSUNfU0VUX1RSSUdHRVIoaW50ciwgdHJpZykgXAotCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTICsgKCgoaW50cikgLyAzMikgKiA0KSksICh0cmlnKSA8PCAoKGludHIpICUgMzIpKQorCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTICsgXAorCQlHSUNfSU5UUl9PRlMoaW50cikpLCAodHJpZykgPDwgR0lDX0lOVFJfQklUKGludHIpKQogCiAvKiBNYXNrIG1hbmlwdWxhdGlvbiAqLwogI2RlZmluZSBHSUNfU0hfU01BU0tfT0ZTCQkweDAzODAKLSNkZWZpbmUgR0lDX1NFVF9JTlRSX01BU0soaW50ciwgdmFsKSBcCi0JR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NNQVNLX09GUyArICgoKGludHIpIC8gMzIpICogNCkpLCAoKHZhbCkgPDwgKChpbnRyKSAlIDMyKSkpCi0KKyNkZWZpbmUgR0lDX1NFVF9JTlRSX01BU0soaW50cikgXAorCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TTUFTS19PRlMgKyBcCisJCUdJQ19JTlRSX09GUyhpbnRyKSksIDEgPDwgR0lDX0lOVFJfQklUKGludHIpKQogI2RlZmluZSBHSUNfU0hfUk1BU0tfT0ZTCQkweDAzMDAKLSNkZWZpbmUgR0lDX0NMUl9JTlRSX01BU0soaW50ciwgdmFsKSBcCi0JR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1JNQVNLX09GUyArICgoKGludHIpIC8gMzIpICogNCkpLCAoKHZhbCkgPDwgKChpbnRyKSAlIDMyKSkpCisjZGVmaW5lIEdJQ19DTFJfSU5UUl9NQVNLKGludHIpIFwKKwlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfUk1BU0tfT0ZTICsgXAorCQlHSUNfSU5UUl9PRlMoaW50cikpLCAxIDw8IEdJQ19JTlRSX0JJVChpbnRyKSkKIAogLyogUmVnaXN0ZXIgTWFwIGZvciBMb2NhbCBTZWN0aW9uICovCiAjZGVmaW5lIEdJQ19WUEVfQ1RMX09GUwkJCTB4MDAwMApAQCAtMjE5LDE2MSArMjIxLDYgQEAKICNkZWZpbmUgR0lDX1VNVl9TSF9DT1VOVEVSXzMxXzAwX09GUwkweDAwMDAKICNkZWZpbmUgR0lDX1VNVl9TSF9DT1VOVEVSXzYzXzMyX09GUwkweDAwMDQKIAotI2Vsc2UgLyogQ09ORklHX0NQVV9CSUdfRU5ESUFOICovCi0KLSNkZWZpbmUJR0lDX1NIX0NPTkZJR19PRlMJCTB4MDAwMAotCi0vKiBTaGFyZWQgR2xvYmFsIENvdW50ZXIgKi8KLSNkZWZpbmUgR0lDX1NIX0NPVU5URVJfMzFfMDBfT0ZTCTB4MDAxNAotI2RlZmluZSBHSUNfU0hfQ09VTlRFUl82M18zMl9PRlMJMHgwMDEwCi0KLS8qIEludGVycnVwdCBQb2xhcml0eSAqLwotI2RlZmluZSBHSUNfU0hfUE9MXzMxXzBfT0ZTCQkweDAxMDQKLSNkZWZpbmUgR0lDX1NIX1BPTF82M18zMl9PRlMJCTB4MDEwMAotI2RlZmluZSBHSUNfU0hfUE9MXzk1XzY0X09GUwkJMHgwMTBjCi0jZGVmaW5lIEdJQ19TSF9QT0xfMTI3Xzk2X09GUwkJMHgwMTA4Ci0jZGVmaW5lIEdJQ19TSF9QT0xfMTU5XzEyOF9PRlMJCTB4MDExNAotI2RlZmluZSBHSUNfU0hfUE9MXzE5MV8xNjBfT0ZTCQkweDAxMTAKLSNkZWZpbmUgR0lDX1NIX1BPTF8yMjNfMTkyX09GUwkJMHgwMTFjCi0jZGVmaW5lIEdJQ19TSF9QT0xfMjU1XzIyNF9PRlMJCTB4MDExOAotCi0vKiBFZGdlL0xldmVsIFRyaWdnZXJpbmcgKi8KLSNkZWZpbmUgR0lDX1NIX1RSSUdfMzFfMF9PRlMJCTB4MDE4NAotI2RlZmluZSBHSUNfU0hfVFJJR182M18zMl9PRlMJCTB4MDE4MAotI2RlZmluZSBHSUNfU0hfVFJJR185NV82NF9PRlMJCTB4MDE4YwotI2RlZmluZSBHSUNfU0hfVFJJR18xMjdfOTZfT0ZTCQkweDAxODgKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMTU5XzEyOF9PRlMJCTB4MDE5NAotI2RlZmluZSBHSUNfU0hfVFJJR18xOTFfMTYwX09GUwkJMHgwMTkwCi0jZGVmaW5lIEdJQ19TSF9UUklHXzIyM18xOTJfT0ZTCQkweDAxOWMKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMjU1XzIyNF9PRlMJCTB4MDE5OAotCi0vKiBEdWFsIEVkZ2UgVHJpZ2dlcmluZyAqLwotI2RlZmluZSBHSUNfU0hfRFVBTF8zMV8wX09GUwkJMHgwMjA0Ci0jZGVmaW5lIEdJQ19TSF9EVUFMXzYzXzMyX09GUwkJMHgwMjAwCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzk1XzY0X09GUwkJMHgwMjBjCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzEyN185Nl9PRlMJCTB4MDIwOAotI2RlZmluZSBHSUNfU0hfRFVBTF8xNTlfMTI4X09GUwkJMHgwMjE0Ci0jZGVmaW5lIEdJQ19TSF9EVUFMXzE5MV8xNjBfT0ZTCQkweDAyMTAKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMjIzXzE5Ml9PRlMJCTB4MDIxYwotI2RlZmluZSBHSUNfU0hfRFVBTF8yNTVfMjI0X09GUwkJMHgwMjE4Ci0KLS8qIFNldC9DbGVhciBjb3JyZXNwb25kaW5nIGJpdCBpbiBFZGdlIERldGVjdCBSZWdpc3RlciAqLwotI2RlZmluZSBHSUNfU0hfV0VER0VfT0ZTCQkweDAyODAKLQotLyogUmVzZXQgTWFzayAtIERpc2FibGVzIEludGVycnVwdCAqLwotI2RlZmluZSBHSUNfU0hfUk1BU0tfMzFfMF9PRlMJCTB4MDMwNAotI2RlZmluZSBHSUNfU0hfUk1BU0tfNjNfMzJfT0ZTCQkweDAzMDAKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzk1XzY0X09GUwkJMHgwMzBjCi0jZGVmaW5lIEdJQ19TSF9STUFTS18xMjdfOTZfT0ZTCQkweDAzMDgKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzE1OV8xMjhfT0ZTCTB4MDMxNAotI2RlZmluZSBHSUNfU0hfUk1BU0tfMTkxXzE2MF9PRlMJMHgwMzEwCi0jZGVmaW5lIEdJQ19TSF9STUFTS18yMjNfMTkyX09GUwkweDAzMWMKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzI1NV8yMjRfT0ZTCTB4MDMxOAotCi0vKiBTZXQgTWFzayAoV08pIC0gRW5hYmxlcyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzMxXzBfT0ZTCQkweDAzODQKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzYzXzMyX09GUwkJMHgwMzgwCi0jZGVmaW5lIEdJQ19TSF9TTUFTS185NV82NF9PRlMJCTB4MDM4YwotI2RlZmluZSBHSUNfU0hfU01BU0tfMTI3Xzk2X09GUwkJMHgwMzg4Ci0jZGVmaW5lIEdJQ19TSF9TTUFTS18xNTlfMTI4X09GUwkweDAzOTQKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzE5MV8xNjBfT0ZTCTB4MDM5MAotI2RlZmluZSBHSUNfU0hfU01BU0tfMjIzXzE5Ml9PRlMJMHgwMzljCi0jZGVmaW5lIEdJQ19TSF9TTUFTS18yNTVfMjI0X09GUwkweDAzOTgKLQotLyogR2xvYmFsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIChSTykgLSBCaXQgU2V0ID09IEludGVycnVwdCBlbmFibGVkICovCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzMxXzBfT0ZTCQkweDA0MDQKLSNkZWZpbmUgR0lDX1NIX01BU0tfNjNfMzJfT0ZTCQkweDA0MDAKLSNkZWZpbmUgR0lDX1NIX01BU0tfOTVfNjRfT0ZTCQkweDA0MGMKLSNkZWZpbmUgR0lDX1NIX01BU0tfMTI3Xzk2X09GUwkJMHgwNDA4Ci0jZGVmaW5lIEdJQ19TSF9NQVNLXzE1OV8xMjhfT0ZTCQkweDA0MTQKLSNkZWZpbmUgR0lDX1NIX01BU0tfMTkxXzE2MF9PRlMJCTB4MDQxMAotI2RlZmluZSBHSUNfU0hfTUFTS18yMjNfMTkyX09GUwkJMHgwNDFjCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzI1NV8yMjRfT0ZTCQkweDA0MTgKLQotLyogUGVuZGluZyBHbG9iYWwgSW50ZXJydXB0cyAoUk8pICovCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzMxXzBfT0ZTCQkweDA0ODQKLSNkZWZpbmUgR0lDX1NIX1BFTkRfNjNfMzJfT0ZTCQkweDA0ODAKLSNkZWZpbmUgR0lDX1NIX1BFTkRfOTVfNjRfT0ZTCQkweDA0OGMKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMTI3Xzk2X09GUwkJMHgwNDg4Ci0jZGVmaW5lIEdJQ19TSF9QRU5EXzE1OV8xMjhfT0ZTCQkweDA0OTQKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMTkxXzE2MF9PRlMJCTB4MDQ5MAotI2RlZmluZSBHSUNfU0hfUEVORF8yMjNfMTkyX09GUwkJMHgwNDljCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzI1NV8yMjRfT0ZTCQkweDA0OTgKLQotI2RlZmluZSBHSUNfU0hfSU5UUl9NQVBfVE9fUElOX0JBU0VfT0ZTCTB4MDUwMAotCi0vKiBNYXBzIEludGVycnVwdCBYIHRvIGEgUGluICovCi0jZGVmaW5lIEdJQ19TSF9NQVBfVE9fUElOKGludHIpIFwKLQkoR0lDX1NIX0lOVFJfTUFQX1RPX1BJTl9CQVNFX09GUyArICg0ICogaW50cikpCi0KLSNkZWZpbmUgR0lDX1NIX0lOVFJfTUFQX1RPX1ZQRV9CQVNFX09GUwkweDIwMDQKLQotLyoKLSAqIE1hcHMgSW50ZXJydXB0IFggdG8gYSBWUEUuICBUaGlzIGlzIG1vcmUgY29tcGxleCB0aGFuIHRoZSBMRSBjYXNlLCBhcwotICogb2RkIGFuZCBldmVuIHJlZ2lzdGVycyBuZWVkIHRvIGJlIHRyYW5zcG9zZWQuICBJdCBkb2VzIHdvcmsgLSB0cnVzdCBtZSEKLSAqLwotI2RlZmluZSBHSUNfU0hfTUFQX1RPX1ZQRV9SRUdfT0ZGKGludHIsIHZwZSkgXAotCShHSUNfU0hfSU5UUl9NQVBfVE9fVlBFX0JBU0VfT0ZTICsgKDMyICogKGludHIpKSArIFwKLQkoKCgoKHZwZSkgLyAzMikgXiAxKSAtIDEpICogNCkpCi0jZGVmaW5lIEdJQ19TSF9NQVBfVE9fVlBFX1JFR19CSVQodnBlKQkoMSA8PCAoKHZwZSkgJSAzMikpCi0KLS8qIFBvbGFyaXR5ICovCi0jZGVmaW5lIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTCQkweDAxMDAKLSNkZWZpbmUgR0lDX1NFVF9QT0xBUklUWShpbnRyLCBwb2wpIFwKLQlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMgKyA0ICsgKCgoKChpbnRyKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSksIChwb2wpIDw8ICgoaW50cikgJSAzMikpCi0KLS8qIFRyaWdnZXJpbmcgKi8KLSNkZWZpbmUgR0lDX1NIX1NFVF9UUklHR0VSX09GUwkJMHgwMTgwCi0jZGVmaW5lIEdJQ19TRVRfVFJJR0dFUihpbnRyLCB0cmlnKSBcCi0JR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMgKyA0ICsgKCgoKChpbnRyKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSksICh0cmlnKSA8PCAoKGludHIpICUgMzIpKQotCi0vKiBNYXNrIG1hbmlwdWxhdGlvbiAqLwotI2RlZmluZSBHSUNfU0hfU01BU0tfT0ZTCQkweDAzODAKLSNkZWZpbmUgR0lDX1NFVF9JTlRSX01BU0soaW50ciwgdmFsKSBcCi0JR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NNQVNLX09GUyArIDQgKyAoKCgoKGludHIpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKSwgKCh2YWwpIDw8ICgoaW50cikgJSAzMikpKQotCi0jZGVmaW5lIEdJQ19TSF9STUFTS19PRlMJCTB4MDMwMAotI2RlZmluZSBHSUNfQ0xSX0lOVFJfTUFTSyhpbnRyLCB2YWwpIFwKLQlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfUk1BU0tfT0ZTICsgNCArICgoKCgoaW50cikgLyAzMikgXiAxKSAtIDEpICogNCkpLCAoKHZhbCkgPDwgKChpbnRyKSAlIDMyKSkpCi0KLS8qIFJlZ2lzdGVyIE1hcCBmb3IgTG9jYWwgU2VjdGlvbiAqLwotI2RlZmluZSBHSUNfVlBFX0NUTF9PRlMJCQkweDAwMDAKLSNkZWZpbmUgR0lDX1ZQRV9QRU5EX09GUwkJMHgwMDA0Ci0jZGVmaW5lIEdJQ19WUEVfTUFTS19PRlMJCTB4MDAwOAotI2RlZmluZSBHSUNfVlBFX1JNQVNLX09GUwkJMHgwMDBjCi0jZGVmaW5lIEdJQ19WUEVfU01BU0tfT0ZTCQkweDAwMTAKLSNkZWZpbmUgR0lDX1ZQRV9XRF9NQVBfT0ZTCQkweDAwNDAKLSNkZWZpbmUgR0lDX1ZQRV9DT01QQVJFX01BUF9PRlMJCTB4MDA0NAotI2RlZmluZSBHSUNfVlBFX1RJTUVSX01BUF9PRlMJCTB4MDA0OAotI2RlZmluZSBHSUNfVlBFX1BFUkZDVFJfTUFQX09GUwkJMHgwMDUwCi0jZGVmaW5lIEdJQ19WUEVfU1dJTlQwX01BUF9PRlMJCTB4MDA1NAotI2RlZmluZSBHSUNfVlBFX1NXSU5UMV9NQVBfT0ZTCQkweDAwNTgKLSNkZWZpbmUgR0lDX1ZQRV9PVEhFUl9BRERSX09GUwkJMHgwMDgwCi0jZGVmaW5lIEdJQ19WUEVfV0RfQ09ORklHMF9PRlMJCTB4MDA5MAotI2RlZmluZSBHSUNfVlBFX1dEX0NPVU5UMF9PRlMJCTB4MDA5NAotI2RlZmluZSBHSUNfVlBFX1dEX0lOSVRJQUwwX09GUwkJMHgwMDk4Ci0jZGVmaW5lIEdJQ19WUEVfQ09NUEFSRV9MT19PRlMJCTB4MDBhNAotI2RlZmluZSBHSUNfVlBFX0NPTVBBUkVfSElfT0ZTCQkweDAwYTAKLQotI2RlZmluZSBHSUNfVlBFX0VJQ19TSEFET1dfU0VUX0JBU0UJMHgwMTAwCi0jZGVmaW5lIEdJQ19WUEVfRUlDX1NTKGludHIpIFwKLQkoR0lDX0VJQ19TSEFET1dfU0VUX0JBU0UgKyAoNCAqIGludHIpKQotCi0jZGVmaW5lIEdJQ19WUEVfRUlDX1ZFQ19CQVNFCQkweDA4MDAKLSNkZWZpbmUgR0lDX1ZQRV9FSUNfVkVDKGludHIpIFwKLQkoR0lDX1ZQRV9FSUNfVkVDX0JBU0UgKyAoNCAqIGludHIpKQotCi0jZGVmaW5lIEdJQ19WUEVfVEVOQUJMRV9OTUlfT0ZTCQkweDEwMDAKLSNkZWZpbmUgR0lDX1ZQRV9URU5BQkxFX1lRX09GUwkJMHgxMDA0Ci0jZGVmaW5lIEdJQ19WUEVfVEVOQUJMRV9JTlRfMzFfMF9PRlMJMHgxMDgwCi0jZGVmaW5lIEdJQ19WUEVfVEVOQUJMRV9JTlRfNjNfMzJfT0ZTCTB4MTA4NAotCi0vKiBVc2VyIE1vZGUgVmlzaWJsZSBTZWN0aW9uIFJlZ2lzdGVyIE1hcCAqLwotI2RlZmluZSBHSUNfVU1WX1NIX0NPVU5URVJfMzFfMDBfT0ZTCTB4MDAwNAotI2RlZmluZSBHSUNfVU1WX1NIX0NPVU5URVJfNjNfMzJfT0ZTCTB4MDAwMAotCi0jZW5kaWYgLyogIUxFICovCi0KIC8qIE1hc2tzICovCiAjZGVmaW5lIEdJQ19TSF9DT05GSUdfQ09VTlRTVE9QX1NIRgkyOAogI2RlZmluZSBHSUNfU0hfQ09ORklHX0NPVU5UU1RPUF9NU0sJKE1TSygxKSA8PCBHSUNfU0hfQ09ORklHX0NPVU5UU1RPUF9TSEYpCkBAIC00NzMsMTIgKzMyMCwxMyBAQAogICogaW4gYnVpbGRpbmcgaXBpX21hcC4KICAqLwogc3RydWN0IGdpY19pbnRyX21hcCB7Ci0JdW5zaWduZWQgaW50IGludHJudW07IAkvKiBFeHQgSW50ciBOdW0gCSovCiAJdW5zaWduZWQgaW50IGNwdW51bTsJLyogRGlyZWN0ZWQgdG8gdGhpcyBDUFUgKi8KIAl1bnNpZ25lZCBpbnQgcGluOwkvKiBEaXJlY3RlZCB0byB0aGlzIFBpbiAqLwogCXVuc2lnbmVkIGludCBwb2xhcml0eTsJLyogUG9sYXJpdHkgOiArLy0JKi8KIAl1bnNpZ25lZCBpbnQgdHJpZ3R5cGU7CS8qIFRyaWdnZXIgIDogRWRnZS9MZXZsICovCi0JdW5zaWduZWQgaW50IGlwaWZsYWc7CS8qIElzIHVzZWQgZm9yIElQSSA/CSovCisJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBNaXNjIGZsYWdzCSovCisjZGVmaW5lIEdJQ19GTEFHX0lQSSAgICAgICAgICAgMHgwMQorI2RlZmluZSBHSUNfRkxBR19UUkFOU1BBUkVOVCAgIDB4MDIKIH07CiAKIGV4dGVybiB2b2lkIGdpY19pbml0KHVuc2lnbmVkIGxvbmcgZ2ljX2Jhc2VfYWRkciwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAppbmRleCBkZTcxNjk0Li4yMWNiYmM3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCkBAIC03OCw2ICs3OCw5IEBACiAjZGVmaW5lIEFSN19SRUZfQ0xPQ0sJMjUwMDAwMDAKICNkZWZpbmUgQVI3X1hUQUxfQ0xPQ0sJMjQwMDAwMDAKIAorLyogRENMICovCisjZGVmaW5lIEFSN19XRFRfSFdfRU5BCTB4MTAKKwogc3RydWN0IHBsYXRfY3BtYWNfZGF0YSB7CiAJaW50IHJlc2V0X2JpdDsKIAlpbnQgcG93ZXJfYml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaAppbmRleCBmZWVhMDAxLi45MTU5NWZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaApAQCAtMTA0LDYgKzEwNCw4IEBACiAKIAlpZiAoKGdwaW8gPj0gOCkgJiYgKGdwaW8gPD0gMTUpKQogCQlyZXR1cm4gTUFLRV9JUlEoMCwgMjkpOwkJLyogc2hhcmVkIEdQSU8yMDhfMjE1ICovCisKKwlyZXR1cm4gLUVOWElPOwogfQogCiAjaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfcGNtY2lhLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfZGV2X3BjbWNpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWIzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfZGV2X3BjbWNpYS5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgQkNNNjNYWF9ERVZfUENNQ0lBX0hfCisjZGVmaW5lIEJDTTYzWFhfREVWX1BDTUNJQV9IXworCisvKgorICogUENNQ0lBIGRyaXZlciBwbGF0Zm9ybSBkYXRhCisgKi8KK3N0cnVjdCBiY202M3h4X3BjbWNpYV9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgcmVhZHlfZ3BpbzsKK307CisKK2ludCBiY202M3h4X3BjbWNpYV9yZWdpc3Rlcih2b2lkKTsKKworI2VuZGlmIC8qIEJDTTYzWFhfREVWX1BDTUNJQV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCmluZGV4IGY2ODM3NDIuLjA5YTU5YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKQEAgLTQ0LDggKzQ0LDggQEAKIAkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJXAogCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCiAJLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCVwKLQkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCi0JCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAorCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFIHwJXAorCQkJCSAgU0RfQkFMQU5DRV9FWEVDLAlcCiAJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAogCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCiAJLm5yX2JhbGFuY2VfZmFpbGVkCT0gMCwJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IGNlNWI2ZTI3Li45OTQ3ZTU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMjksNyArMjksNyBAQAogI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkwCiAjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCTAKICNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkxCi0jZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkxCisjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkoUEFHRV9TSVpFIDwgMHg0MDAwKQogI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkwCiAjZGVmaW5lIGNwdV9oYXNfZHNwCQkwCiAjZGVmaW5lIGNwdV9oYXNfZWp0YWcJCTAKQEAgLTU0LDYgKzU0LDUgQEAKICNkZWZpbmUgY3B1X2hhc192Y2UJCTAKICNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCiAjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTEKLSNkZWZpbmUgY3B1X2ljYWNoZV9zbm9vcHNfcmVtb3RlX3N0b3JlCTEKIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfTE9PTkdTT05fQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggZDk3NDM1My4uNjA4M2RiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaGF6YXJkcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKICNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgpAQCAtMzYsMTEgKzM3LDEzIEBACiAjaWZkZWYgQ09ORklHXzMyQklUCiAjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAogCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAyNSk7CVwKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCk7CQkJCQlcCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChzd2FwcGVyX3BnX2RpcikKICNlbmRpZgogI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBUTEJNSVNTX0hBTkRMRVJfU0VUVVAoKQkJCQkJCVwKIAl3cml0ZV9jMF9jb250ZXh0KCh1bnNpZ25lZCBsb25nKSBzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMjYpOwlcCisJYmFja190b19iYWNrX2MwX2hhemFyZCgpOwkJCQkJXAogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0Qoc3dhcHBlcl9wZ19kaXIpCiAjZW5kaWYKIApAQCAtMTY1LDEyICsxNjgsMTIgQEAKIAkgKiBoYXZpbmcgQVNJRF9NQVNLIHNtYWxsZXIgdGhhbiB0aGUgaGFyZHdhcmUgbWF4aW11bSwKIAkgKiBtYWtlIHN1cmUgbm8gInNvZnQiIGJpdHMgYmVjb21lICJoYXJkIi4uLgogCSAqLwotCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykKLQkJCXwgKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkgJiBBU0lEX01BU0spKTsKKwl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spIHwKKwkJCSBjcHVfYXNpZChjcHUsIG5leHQpKTsKIAllaGIoKTsgLyogTWFrZSBzdXJlIGl0IHByb3BhZ2F0ZXMgdG8gVENTdGF0dXMgKi8KIAlldnBlKG10ZmxhZ3MpOwogI2Vsc2UKLQl3cml0ZV9jMF9lbnRyeWhpKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkpOworCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2FzaWQoY3B1LCBuZXh0KSk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0QobmV4dC0+cGdkKTsKIApAQCAtMjI2LDExICsyMjksMTEgQEAKIAl9CiAJLyogU2VlIGNvbW1lbnRzIGZvciBzaW1pbGFyIGNvZGUgYWJvdmUgKi8KIAl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spIHwKLQkgICAgICAgICAgICAgICAgIChjcHVfY29udGV4dChjcHUsIG5leHQpICYgQVNJRF9NQVNLKSk7CisJICAgICAgICAgICAgICAgICBjcHVfYXNpZChjcHUsIG5leHQpKTsKIAllaGIoKTsgLyogTWFrZSBzdXJlIGl0IHByb3BhZ2F0ZXMgdG8gVENTdGF0dXMgKi8KIAlldnBlKG10ZmxhZ3MpOwogI2Vsc2UKLQl3cml0ZV9jMF9lbnRyeWhpKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkpOworCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2FzaWQoY3B1LCBuZXh0KSk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0QobmV4dC0+cGdkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBlNjAwY2VkLi41MDUxMWFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX01JUFNfU0VUVVBfSAogI2RlZmluZSBfTUlQU19TRVRVUF9ICiAKLSNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJMjU2CisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTQwOTYKIAogI2lmZGVmICBfX0tFUk5FTF9fCiBleHRlcm4gdm9pZCBzZXR1cF9lYXJseV9wcmludGsodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggZTE1ZjExYS4uYWY0MjM4NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNzcsNyArNzcsMTggQEAKIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCk7CiAKLWV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQoreworCWV4dGVybiBzdHJ1Y3QgcGxhdF9zbXBfb3BzICptcF9vcHM7ICAgICAvKiBwcml2YXRlICovCisKKwltcF9vcHMtPnNlbmRfaXBpX21hc2soJmNwdW1hc2tfb2ZfY3B1KGNwdSksIFNNUF9DQUxMX0ZVTkNUSU9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworCWV4dGVybiBzdHJ1Y3QgcGxhdF9zbXBfb3BzICptcF9vcHM7ICAgICAvKiBwcml2YXRlICovCisKKwltcF9vcHMtPnNlbmRfaXBpX21hc2sobWFzaywgU01QX0NBTExfRlVOQ1RJT04pOworfQogCiAjZW5kaWYgLyogX19BU01fU01QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXRjX2lwaS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKaW5kZXggOGNlNTE3NS4uMTUyNzhkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHNtdGNfaXBpICp0YWlsOwogCWludCBkZXB0aDsKKwlpbnQgcmVzY2hlZF9mbGFnOwkvKiByZXNjaGVkdWxlIGFscmVhZHkgcXVldWVkICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc210Y19pcGlfbnEoc3RydWN0IHNtdGNfaXBpX3EgKnEsIHN0cnVjdCBzbXRjX2lwaSAqcCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcHJhbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4OTAwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcHJhbS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX01JUFNfU1BSQU1fSAorI2RlZmluZSBfTUlQU19TUFJBTV9ICisKKyNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorZXh0ZXJuIF9faW5pdCB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpIHsgfTsKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX01JUFNSMiAqLworCisjZW5kaWYgLyogX01JUFNfU1BSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAwMWNjMTYzLi44NDVkYTIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODYsMTQgKzg2LDcgQEAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAotKHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJXAotCQkJCQkJCQlcCi0JcmV0ID0ga3phbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCk7CQkJXAotCQkJCQkJCQlcCi0JcmV0OwkJCQkJCQlcCi19KQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGt6YWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCiAjZWxzZQogI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAppbmRleCA3OTI0MDQ5Li40MmY2NmMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCkBAIC0xMiwxNyArMTIsMTcgQEAKICNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCiAjIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2xlX2J5dGVzaGlmdC5oPgotIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogIyBkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKICMgZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCiAjZWxpZiBkZWZpbmVkKF9fTUlQU0VMX18pCiAjIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9sZV9zdHJ1Y3QuaD4KICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX2J5dGVzaGlmdC5oPgotIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogIyBkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfbGUKICMgZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2xlCiAjZWxzZQogIyAgZXJyb3IgIk1JUFMsIGJ1dCBuZWl0aGVyIF9fTUlQU0VCX18sIG5vciBfX01JUFNFTF9fPz8/IgogI2VuZGlmCiAKKyMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2dlbmVyaWMuaD4KKwogI2VuZGlmIC8qIF9BU01fTUlQU19VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovaXJxLmMgYi9hcmNoL21pcHMvamF6ei9pcnEuYwppbmRleCA3ZmQxNzBkLi43YmQzMmQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9pcnEuYworKysgYi9hcmNoL21pcHMvamF6ei9pcnEuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHI0MDMwX3RpbWVyX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IHI0MDMwX3RpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gIlI0MDMwIHRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IGU5NjEyMjEuLmVlY2QyYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtMiw2ICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eC9NSVBTIGtlcm5lbC4KICMKIAorQ1BQRkxBR1Nfdm1saW51eC5sZHMgOj0gJChLQlVJTERfQ0ZMQUdTKQorCiBleHRyYS15CQk6PSBoZWFkLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKIAogb2JqLXkJCSs9IGNwdS1wcm9iZS5vIGJyYW5jaC5vIGVudHJ5Lm8gZ2VuZXgubyBpcnEubyBwcm9jZXNzLm8gXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMKaW5kZXggZTAyZjc5Yi4uYmZlYTMyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAliY20xNDgwX3VubWFza19pcnEoY3B1LCBpcnEpOwogCiAJYWN0aW9uLT5oYW5kbGVyCT0gc2lieXRlX2NvdW50ZXJfaGFuZGxlcjsKLQlhY3Rpb24tPmZsYWdzCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVOworCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSOwogCWFjdGlvbi0+bmFtZQk9IG5hbWU7CiAJYWN0aW9uLT5kZXZfaWQJPSBjZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWRzMTI4Ny5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWRzMTI4Ny5jCmluZGV4IDY5OTZkYTQuLjAwYTRkYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1kczEyODcuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBkczEyODdfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gZHMxMjg3X2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJkczEyODciLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKaW5kZXggOTIzNTFlMC4uZjVkMjY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZ3Q2NDF4eF90aW1lcjBfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gZ3Q2NDF4eF90aW1lcjBfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImd0NjQxeHhfdGltZXIwIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYwppbmRleCAyNjUyMzYyLi5iNDY5YWQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jCkBAIC04Myw3ICs4Myw3IEBACiAKIHN0cnVjdCBpcnFhY3Rpb24gYzBfY29tcGFyZV9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPSBjMF9jb21wYXJlX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZSA9ICJ0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMKaW5kZXggYWM1OTAzZC4uZGE3OGVlYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNiMTI1MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJc2IxMjUwX3VubWFza19pcnEoY3B1LCBpcnEpOwogCiAJYWN0aW9uLT5oYW5kbGVyCT0gc2lieXRlX2NvdW50ZXJfaGFuZGxlcjsKLQlhY3Rpb24tPmZsYWdzCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVOworCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSOwogCWFjdGlvbi0+bmFtZQk9IG5hbWU7CiAJYWN0aW9uLT5kZXZfaWQJPSBjZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zbXRjLmMKaW5kZXggOThiZDdkZS4uYjEwMmU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNtdGMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtc210Yy5jCkBAIC0xNzMsMTEgKzE3MywxMiBAQAogCXVuc2lnbmVkIGludCBtdGZsYWdzOwogCWludCBjcHU7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2Q7Ci0JdW5zaWduZWQgbG9uZyBuZXh0c3RhbXAgPSAwTDsKKwl1bnNpZ25lZCBsb25nIG5leHRzdGFtcDsKIAl1bnNpZ25lZCBsb25nIHJlZmVyZW5jZTsKIAogCiByZXBlYXQ6CisJbmV4dHN0YW1wID0gMEw7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkgICAgLyoKIAkgICAgICogRmluZCB2aXJ0dWFsIENQVXMgd2l0aGluIHRoZSBjdXJyZW50IFZQRSB3aG8gaGF2ZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMKaW5kZXggMDAzN2YyMS4uMjE4ZWU2YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdHh4OXRtcl9pcnEgPSB7CiAJLmhhbmRsZXIJPSB0eHg5dG1yX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJ0eHg5dG1yIiwKIAkuZGV2X2lkCQk9ICZ0eHg5X2Nsb2NrX2V2ZW50X2RldmljZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwppbmRleCBmNzA5NjU3Li43YTUxODY2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3dhdGNoLmg+Ci0KKyNpbmNsdWRlIDxhc20vc3ByYW0uaD4KIC8qCiAgKiBOb3QgYWxsIG9mIHRoZSBNSVBTIENQVXMgaGF2ZSB0aGUgIndhaXQiIGluc3RydWN0aW9uIGF2YWlsYWJsZS4gTW9yZW92ZXIsCiAgKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlICJ3YWl0IiBmZWF0dXJlIGRpZmZlcnMgYmV0d2VlbiBDUFUgZmFtaWxpZXMuIFRoaXMKQEAgLTcxMSwxMiArNzExLDYgQEAKIAltaXBzX3Byb2JlX3dhdGNoX3JlZ2lzdGVycyhjKTsKIH0KIAotI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCi1leHRlcm4gdm9pZCBzcHJhbV9jb25maWcodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKSB7fQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcHJvYmVfbWlwcyhzdHJ1Y3QgY3B1aW5mb19taXBzICpjLCB1bnNpZ25lZCBpbnQgY3B1KQogewogCWRlY29kZV9jb25maWdzKGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwppbmRleCA1MzFjZTdiLi5lYTY5NWQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwpAQCAtMTkxLDYgKzE5MSw3IEBACiAJLyogU2V0IHRoZSBTUCBhZnRlciBhbiBlbXB0eSBwdF9yZWdzLiAgKi8KIAlQVFJfTEkJCXNwLCBfVEhSRUFEX1NJWkUgLSAzMiAtIFBUX1NJWkUKIAlQVFJfQUREVQlzcCwgJDI4CisJYmFja190b19iYWNrX2MwX2hhemFyZAogCXNldF9zYXZlZF9zcAlzcCwgdDAsIHQxCiAJUFRSX1NVQlUJc3AsIDQgKiBTWlJFRwkJIyBpbml0IHN0YWNrIHBvaW50ZXIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCmluZGV4IGY3ZDhkNWQuLmVkNWM0NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7CiAJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gInRpbWVyIgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ2ljLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYwppbmRleCBkMjA3MmNkLi5iMTgxZjJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYwpAQCAtMTQsMzggKzE0LDIzIEBACiAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX2dpY19iYXNlOwotc3RhdGljIHVuc2lnbmVkIGludCBfaXJxYmFzZSwgX21hcHNpemUsIG51bXZwZXMsIG51bWludHJzOwotc3RhdGljIHN0cnVjdCBnaWNfaW50cl9tYXAgKl9pbnRybWFwOworc3RhdGljIHVuc2lnbmVkIGludCBfaXJxYmFzZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2ljX2lycV9mbGFnc1tHSUNfTlVNX0lOVFJTXTsKKyNkZWZpbmUgR0lDX0lSUV9GTEFHX0VER0UgICAgICAweDAwMDEKIAotc3RhdGljIHN0cnVjdCBnaWNfcGNwdV9tYXNrIHBjcHVfbWFza3NbTlJfQ1BVU107CitzdHJ1Y3QgZ2ljX3BjcHVfbWFzayBwY3B1X21hc2tzW05SX0NQVVNdOwogc3RhdGljIHN0cnVjdCBnaWNfcGVuZGluZ19yZWdzIHBlbmRpbmdfcmVnc1tOUl9DUFVTXTsKIHN0YXRpYyBzdHJ1Y3QgZ2ljX2ludHJtYXNrX3JlZ3MgaW50cm1hc2tfcmVnc1tOUl9DUFVTXTsKIAotI2RlZmluZSBnaWNfd2VkZ2ViMmJvayAwCS8qCi0JCQkJICogQ2FuIEdJQyBoYW5kbGUgYjJiIHdyaXRlcyB0byB3ZWRnZSByZWdpc3Rlcj8KLQkJCQkgKi8KLSNpZiBnaWNfd2VkZ2ViMmJvayA9PSAwCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdpY193ZWRnZWIyYl9sb2NrKTsKLSNlbmRpZgotCiB2b2lkIGdpY19zZW5kX2lwaSh1bnNpZ25lZCBpbnQgaW50cikKIHsKLSNpZiBnaWNfd2VkZ2ViMmJvayA9PSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSNlbmRpZgogCXByX2RlYnVnKCJDUFUlZDogJXMgc3RhdHVzICUwOHhcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sCiAJCSByZWFkX2MwX3N0YXR1cygpKTsKLQlpZiAoIWdpY193ZWRnZWIyYm9rKQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKIAlHSUNXUklURShHSUNfUkVHKFNIQVJFRCwgR0lDX1NIX1dFREdFKSwgMHg4MDAwMDAwMCB8IGludHIpOwotCWlmICghZ2ljX3dlZGdlYjJib2spIHsKLQkJKHZvaWQpIEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfQ09ORklHKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKLQl9CiB9CiAKIC8qIFRoaXMgaXMgTWFsdGEgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIGJlIGV4cG9ydGVkICovCi1zdGF0aWMgdm9pZCB2cGVfbG9jYWxfc2V0dXAodW5zaWduZWQgaW50IG51bXZwZXMpCitzdGF0aWMgdm9pZCBfX2luaXQgdnBlX2xvY2FsX3NldHVwKHVuc2lnbmVkIGludCBudW12cGVzKQogewogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgdGltZXJfaW50ZXJydXB0ID0gNSwgcGVyZl9pbnRlcnJ1cHQgPSA1OwpAQCAtMTA1LDQ0ICs5MCwzNCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGdpY19pcnFfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQogewotCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOwogCWlycSAtPSBfaXJxYmFzZTsKLQlHSUNfU0VUX0lOVFJfTUFTSyhpcnEsIDEpOworCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOworCUdJQ19TRVRfSU5UUl9NQVNLKGlycSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGdpY19pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0jaWYgZ2ljX3dlZGdlYjJib2sgPT0gMAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jZW5kaWYKLQlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0JR0lDX0NMUl9JTlRSX01BU0soaXJxLCAxKTsKKwlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKKwlHSUNfQ0xSX0lOVFJfTUFTSyhpcnEpOwogCi0JaWYgKF9pbnRybWFwW2lycV0udHJpZ3R5cGUgPT0gR0lDX1RSSUdfRURHRSkgewotCQlpZiAoIWdpY193ZWRnZWIyYm9rKQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdpY193ZWRnZWIyYl9sb2NrLCBmbGFncyk7CisJaWYgKGdpY19pcnFfZmxhZ3NbaXJxXSAmIEdJQ19JUlFfRkxBR19FREdFKQogCQlHSUNXUklURShHSUNfUkVHKFNIQVJFRCwgR0lDX1NIX1dFREdFKSwgaXJxKTsKLQkJaWYgKCFnaWNfd2VkZ2ViMmJvaykgewotCQkJKHZvaWQpIEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfQ09ORklHKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdpY193ZWRnZWIyYl9sb2NrLCBmbGFncyk7Ci0JCX0KLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGdpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOwogCWlycSAtPSBfaXJxYmFzZTsKLQlHSUNfQ0xSX0lOVFJfTUFTSyhpcnEsIDEpOworCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOworCUdJQ19DTFJfSU5UUl9NQVNLKGlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19TRVRfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX1NFVF9JTlRSX01BU0soaXJxKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTE1NSw5ICsxMzAsOCBAQAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJaW50CQlpOwogCi0JcHJfZGVidWcoS0VSTl9ERUJVRyAiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAJaXJxIC09IF9pcnFiYXNlOwotCisJcHJfZGVidWcoS0VSTl9ERUJVRyAiJXMoJWQpIGNhbGxlZFxuIiwgX19mdW5jX18sIGlycSk7CiAJY3B1bWFza19hbmQoJnRtcCwgY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKIAlpZiAoY3B1c19lbXB0eSh0bXApKQogCQlyZXR1cm4gLTE7CkBAIC0xNjgsMTMgKzE0Miw2IEBACiAJCS8qIFJlLXJvdXRlIHRoaXMgSVJRICovCiAJCUdJQ19TSF9NQVBfVE9fVlBFX1NNQVNLKGlycSwgZmlyc3RfY3B1KHRtcCkpOwogCi0JCS8qCi0JCSAqIEZJWE1FOiBhc3N1bXB0aW9uIHRoYXQgX2ludHJtYXAgaXMgb3JkZXJlZCBhbmQgaGFzIG5vIGhvbGVzCi0JCSAqLwotCi0JCS8qIFVwZGF0ZSB0aGUgaW50cl9tYXAgKi8KLQkJX2ludHJtYXBbaXJxXS5jcHVudW0gPSBmaXJzdF9jcHUodG1wKTsKLQogCQkvKiBVcGRhdGUgdGhlIHBjcHVfbWFza3MgKi8KIAkJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKIAkJCWNsZWFyX2JpdChpcnEsIHBjcHVfbWFza3NbaV0ucGNwdV9tYXNrKTsKQEAgLTIwMSw4ICsxNjgsOSBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaW50cih1bnNpZ25lZCBpbnQgaW50ciwgdW5zaWduZWQgaW50IGNwdSwKLQl1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgcG9sYXJpdHksIHVuc2lnbmVkIGludCB0cmlndHlwZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBnaWNfc2V0dXBfaW50cih1bnNpZ25lZCBpbnQgaW50ciwgdW5zaWduZWQgaW50IGNwdSwKKwl1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgcG9sYXJpdHksIHVuc2lnbmVkIGludCB0cmlndHlwZSwKKwl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJLyogU2V0dXAgSW50ciB0byBQaW4gbWFwcGluZyAqLwogCWlmIChwaW4gJiBHSUNfTUFQX1RPX05NSV9NU0spIHsKQEAgLTIyNywzOCArMTk1LDQzIEBACiAJR0lDX1NFVF9UUklHR0VSKGludHIsIHRyaWd0eXBlKTsKIAogCS8qIEluaXQgSW50ciBNYXNrcyAqLwotCUdJQ19TRVRfSU5UUl9NQVNLKGludHIsIDApOworCUdJQ19DTFJfSU5UUl9NQVNLKGludHIpOworCS8qIEluaXRpYWxpc2UgcGVyLWNwdSBJbnRlcnJ1cHQgc29mdHdhcmUgbWFza3MgKi8KKwlpZiAoZmxhZ3MgJiBHSUNfRkxBR19JUEkpCisJCXNldF9iaXQoaW50ciwgcGNwdV9tYXNrc1tjcHVdLnBjcHVfbWFzayk7CisJaWYgKGZsYWdzICYgR0lDX0ZMQUdfVFJBTlNQQVJFTlQpCisJCUdJQ19TRVRfSU5UUl9NQVNLKGludHIpOworCWlmICh0cmlndHlwZSA9PSBHSUNfVFJJR19FREdFKQorCQlnaWNfaXJxX2ZsYWdzW2ludHJdIHw9IEdJQ19JUlFfRkxBR19FREdFOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2Jhc2ljX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBnaWNfYmFzaWNfaW5pdChpbnQgbnVtaW50cnMsIGludCBudW12cGVzLAorCQkJc3RydWN0IGdpY19pbnRyX21hcCAqaW50cm1hcCwgaW50IG1hcHNpemUpCiB7CiAJdW5zaWduZWQgaW50IGksIGNwdTsKIAogCS8qIFNldHVwIGRlZmF1bHRzICovCi0JZm9yIChpID0gMDsgaSA8IEdJQ19OVU1fSU5UUlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1pbnRyczsgaSsrKSB7CiAJCUdJQ19TRVRfUE9MQVJJVFkoaSwgR0lDX1BPTF9QT1MpOwogCQlHSUNfU0VUX1RSSUdHRVIoaSwgR0lDX1RSSUdfTEVWRUwpOwotCQlHSUNfU0VUX0lOVFJfTUFTSyhpLCAwKTsKKwkJR0lDX0NMUl9JTlRSX01BU0soaSk7CisJCWlmIChpIDwgR0lDX05VTV9JTlRSUykKKwkJCWdpY19pcnFfZmxhZ3NbaV0gPSAwOwogCX0KIAogCS8qIFNldHVwIHNwZWNpZmljcyAqLwotCWZvciAoaSA9IDA7IGkgPCBfbWFwc2l6ZTsgaSsrKSB7Ci0JCWNwdSA9IF9pbnRybWFwW2ldLmNwdW51bTsKKwlmb3IgKGkgPSAwOyBpIDwgbWFwc2l6ZTsgaSsrKSB7CisJCWNwdSA9IGludHJtYXBbaV0uY3B1bnVtOwogCQlpZiAoY3B1ID09IFgpCiAJCQljb250aW51ZTsKLQotCQlpZiAoY3B1ID09IDAgJiYgaSAhPSAwICYmIF9pbnRybWFwW2ldLmludHJudW0gPT0gMCAmJgotCQkJCQlfaW50cm1hcFtpXS5pcGlmbGFnID09IDApCisJCWlmIChjcHUgPT0gMCAmJiBpICE9IDAgJiYgaW50cm1hcFtpXS5mbGFncyA9PSAwKQogCQkJY29udGludWU7Ci0KLQkJc2V0dXBfaW50cihfaW50cm1hcFtpXS5pbnRybnVtLAotCQkJCV9pbnRybWFwW2ldLmNwdW51bSwKLQkJCQlfaW50cm1hcFtpXS5waW4sCi0JCQkJX2ludHJtYXBbaV0ucG9sYXJpdHksCi0JCQkJX2ludHJtYXBbaV0udHJpZ3R5cGUpOwotCQkvKiBJbml0aWFsaXNlIHBlci1jcHUgSW50ZXJydXB0IHNvZnR3YXJlIG1hc2tzICovCi0JCWlmIChfaW50cm1hcFtpXS5pcGlmbGFnKQotCQkJc2V0X2JpdChfaW50cm1hcFtpXS5pbnRybnVtLCBwY3B1X21hc2tzW2NwdV0ucGNwdV9tYXNrKTsKKwkJZ2ljX3NldHVwX2ludHIoaSwKKwkJCWludHJtYXBbaV0uY3B1bnVtLAorCQkJaW50cm1hcFtpXS5waW4sCisJCQlpbnRybWFwW2ldLnBvbGFyaXR5LAorCQkJaW50cm1hcFtpXS50cmlndHlwZSwKKwkJCWludHJtYXBbaV0uZmxhZ3MpOwogCX0KIAogCXZwZV9sb2NhbF9zZXR1cChudW12cGVzKTsKQEAgLTI3MywxMiArMjQ2LDExIEBACiAJCSAgICAgdW5zaWduZWQgaW50IGlycWJhc2UpCiB7CiAJdW5zaWduZWQgaW50IGdpY2NvbmZpZzsKKwlpbnQgbnVtdnBlcywgbnVtaW50cnM7CiAKIAlfZ2ljX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKGdpY19iYXNlX2FkZHIsCiAJCQkJCQkgICAgZ2ljX2FkZHJzcGFjZV9zaXplKTsKIAlfaXJxYmFzZSA9IGlycWJhc2U7Ci0JX2ludHJtYXAgPSBpbnRyX21hcDsKLQlfbWFwc2l6ZSA9IGludHJfbWFwX3NpemU7CiAKIAlHSUNSRUFEKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfQ09ORklHKSwgZ2ljY29uZmlnKTsKIAludW1pbnRycyA9IChnaWNjb25maWcgJiBHSUNfU0hfQ09ORklHX05VTUlOVFJTX01TSykgPj4KQEAgLTI5MCw1ICsyNjIsNSBAQAogCiAJcHJfZGVidWcoIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOwogCi0JZ2ljX2Jhc2ljX2luaXQoKTsKKwlnaWNfYmFzaWNfaW5pdChudW1pbnRycywgbnVtdnBlcywgaW50cl9tYXAsIGludHJfbWFwX3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9rc3BkLmMgYi9hcmNoL21pcHMva2VybmVsL2tzcGQuYwppbmRleCBmMjM5N2YwLi5hZDRlMDE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2tzcGQuYworKysgYi9hcmNoL21pcHMva2VybmVsL2tzcGQuYwpAQCAtMTcyLDEzICsxNzIsMjAgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBzcF9zZXRmc3VpZGdpZCggdWlkX3QgdWlkLCBnaWRfdCBnaWQpCitzdGF0aWMgaW50IHNwX3NldGZzdWlkZ2lkKHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQogewotCWN1cnJlbnQtPmNyZWQtPmZzdWlkID0gdWlkOwotCWN1cnJlbnQtPmNyZWQtPmZzZ2lkID0gZ2lkOworCXN0cnVjdCBjcmVkICpuZXc7CiAKLQlrZXlfZnN1aWRfY2hhbmdlZChjdXJyZW50KTsKLQlrZXlfZnNnaWRfY2hhbmdlZChjdXJyZW50KTsKKwluZXcgPSBwcmVwYXJlX2NyZWRzKCk7CisJaWYgKCFuZXcpCisJCXJldHVybiAtRU5PTUVNOworCisJbmV3LT5mc3VpZCA9IHVpZDsKKwluZXctPmZzZ2lkID0gZ2lkOworCisJY29tbWl0X2NyZWRzKG5ldyk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE5Niw3ICsyMDMsNyBAQAogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAJc3RydWN0IHRpbWV2YWwgdHY7CiAJc3RydWN0IHRpbWV6b25lIHR6OwotCWludCBjbWQ7CisJaW50IGVyciwgY21kOwogCiAJY2hhciAqdmN3ZDsKIAlpbnQgc2l6ZTsKQEAgLTIyNSw4ICsyMzIsMTEgQEAKIAkvKiBSdW4gdGhlIHN5c2NhbGwgYXQgdGhlIHByaXZpbGVnZSBvZiB0aGUgdXNlciB3aG8gbG9hZGVkIHRoZQogCSAgIFNQIHByb2dyYW0gKi8KIAotCWlmICh2cGVfZ2V0dWlkKHRjbGltaXQpKQotCQlzcF9zZXRmc3VpZGdpZCh2cGVfZ2V0dWlkKHRjbGltaXQpLCB2cGVfZ2V0Z2lkKHRjbGltaXQpKTsKKwlpZiAodnBlX2dldHVpZCh0Y2xpbWl0KSkgeworCQllcnIgPSBzcF9zZXRmc3VpZGdpZCh2cGVfZ2V0dWlkKHRjbGltaXQpLCB2cGVfZ2V0Z2lkKHRjbGltaXQpKTsKKwkJaWYgKCFlcnIpCisJCQlwcl9lcnIoIkNoYW5nZSBvZiBjcmVkcyBmYWlsZWRcbiIpOworCX0KIAogCXN3aXRjaCAoc2MuY21kKSB7CiAJLyogbmVlZHMgdGhlIGZsYWdzIGFyZ3VtZW50IHRyYW5zbGF0aW5nIGZyb20gU0RFIGtpdCB0bwpAQCAtMjgzLDggKzI5MywxMSBAQAogCQlicmVhazsKICAJfSAvKiBzd2l0Y2ggKi8KIAotCWlmICh2cGVfZ2V0dWlkKHRjbGltaXQpKQotCQlzcF9zZXRmc3VpZGdpZCggMCwgMCk7CisJaWYgKHZwZV9nZXR1aWQodGNsaW1pdCkpIHsKKwkJZXJyID0gc3Bfc2V0ZnN1aWRnaWQoMCwgMCk7CisJCWlmICghZXJyKQorCQkJcHJfZXJyKCJyZXN0b3Jpbmcgb2xkIGNyZWRzIGZhaWxlZFxuIik7CisJfQogCiAJb2xkX2ZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDYyNDJiYzYuLmI3N2ZlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC00MjgsMyArNDI4LDkgQEAKIAlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsICZyZWdzLCAwLAogCSAgICAgICAgICAgICAgIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0cik7CiB9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXMzMl9sb29rdXBfZGNvb2tpZSh1MzIgYTAsIHUzMiBhMSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwlzaXplX3QgbGVuKQoreworCXJldHVybiBzeXNfbG9va3VwX2Rjb29raWUobWVyZ2VfNjQoYTAsIGExKSwgYnVmLCBsZW4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwppbmRleCBhMTBlYmZkLi4zNjRmMDY2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3J0bHguYworKysgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwpAQCAtNzIsOCArNzIsOSBAQAogKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBydGx4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CisJdW5zaWduZWQgaW50IHZwZWZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IGZsYWdzLCB2cGVmbGFnczsKIAogCS8qIE91Z2h0IG5vdCB0byBiZSBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIFNNVEMgYnVpbGRzICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMzkyLDIwICszOTMsMTIgQEAKIAogc3RhdGljIGludCBmaWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQlpbnQgZXJyOwotCi0JbG9ja19rZXJuZWwoKTsKLQllcnIgPSBydGx4X29wZW4obWlub3IsIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyAwIDogMSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIHJ0bHhfb3BlbihpbWlub3IoaW5vZGUpLCAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpOwogfQogCiBzdGF0aWMgaW50IGZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCi0JcmV0dXJuIHJ0bHhfcmVsZWFzZShtaW5vcik7CisJcmV0dXJuIHJ0bHhfcmVsZWFzZShpbWlub3IoaW5vZGUpKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBmaWxlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDliYmY5NzcuLjE0ZGRlNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCVBUUglzeXNfaW9fc3VibWl0CiAJUFRSCXN5c19pb19jYW5jZWwJCQkvKiA0MjQ1ICovCiAJUFRSCXN5c19leGl0X2dyb3VwCi0JUFRSCXN5c19sb29rdXBfZGNvb2tpZQorCVBUUglzeXMzMl9sb29rdXBfZGNvb2tpZQogCVBUUglzeXNfZXBvbGxfY3JlYXRlCiAJUFRSCXN5c19lcG9sbF9jdGwKIAlQVFIJc3lzX2Vwb2xsX3dhaXQJCQkvKiA0MjUwICovCkBAIC01MDUsNyArNTA1LDcgQEAKIAlQVFIJc3lzX2ZjaG1vZGF0CiAJUFRSCXN5c19mYWNjZXNzYXQJCQkvKiA0MzAwICovCiAJUFRSCWNvbXBhdF9zeXNfcHNlbGVjdDYKLQlQVFIJc3lzX3Bwb2xsCisJUFRSCWNvbXBhdF9zeXNfcHBvbGwKIAlQVFIJc3lzX3Vuc2hhcmUKIAlQVFIJc3lzX3NwbGljZQogCVBUUglzeXMzMl9zeW5jX2ZpbGVfcmFuZ2UJCS8qIDQzMDUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IDRlYjEwNmMuLmU3MmU2ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xMjgsMTkgKzEyNyw2IEBACiAJY3B1X2lkbGUoKTsKIH0KIAotdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLQltcF9vcHMtPnNlbmRfaXBpX21hc2sobWFzaywgU01QX0NBTExfRlVOQ1RJT04pOwotfQotCi0vKgotICogV2UgcmV1c2UgdGhlIHNhbWUgdmVjdG9yIGZvciB0aGUgc2luZ2xlIElQSQotICovCi12b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSkKLXsKLQltcF9vcHMtPnNlbmRfaXBpX21hc2soY3B1bWFza19vZl9jcHUoY3B1KSwgU01QX0NBTExfRlVOQ1RJT04pOwotfQotCiAvKgogICogQ2FsbCBpbnRvIGJvdGggaW50ZXJydXB0IGhhbmRsZXJzLCBhcyB3ZSBzaGFyZSB0aGUgSVBJIGZvciB0aGVtCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKaW5kZXggNjcxNTNhMC4uMjQ2MzBmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKQEAgLTc1LDcgKzc1LDYgQEAKIAogYXNpZHVzZSBzbXRjX2xpdmVfYXNpZFtNQVhfU01UQ19UTEJTXVtNQVhfU01UQ19BU0lEU107CiAKLQogLyoKICAqIE51bWJlciBvZiBJbnRlclByb2Nlc3NvciBJbnRlcnJ1cHQgKElQSSkgbWVzc2FnZSBidWZmZXJzIHRvIGFsbG9jYXRlCiAgKi8KQEAgLTM4OCw2ICszODcsNyBAQAogCQlJUElRW2ldLmhlYWQgPSBJUElRW2ldLnRhaWwgPSBOVUxMOwogCQlzcGluX2xvY2tfaW5pdCgmSVBJUVtpXS5sb2NrKTsKIAkJSVBJUVtpXS5kZXB0aCA9IDA7CisJCUlQSVFbaV0ucmVzY2hlZF9mbGFnID0gMDsgLyogTm8gcmVzY2hlZHVsZXMgcXVldWVkIGluaXRpYWxseSAqLwogCX0KIAogCS8qIGNwdV9kYXRhIGluZGV4IHN0YXJ0cyBhdCB6ZXJvICovCkBAIC03NDEsMTEgKzc0MSwyNCBAQAogc3RhdGljIHZvaWQgc210Y19pcGlfcWR1bXAodm9pZCkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3Qgc210Y19pcGkgKnRlbXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUyA7aSsrKSB7Ci0JCXByaW50aygiSVBJUVslZF06IGhlYWQgPSAweCV4LCB0YWlsID0gMHgleCwgZGVwdGggPSAlZFxuIiwKKwkJcHJfaW5mbygiSVBJUVslZF06IGhlYWQgPSAweCV4LCB0YWlsID0gMHgleCwgZGVwdGggPSAlZFxuIiwKIAkJCWksICh1bnNpZ25lZClJUElRW2ldLmhlYWQsICh1bnNpZ25lZClJUElRW2ldLnRhaWwsCiAJCQlJUElRW2ldLmRlcHRoKTsKKwkJdGVtcCA9IElQSVFbaV0uaGVhZDsKKworCQl3aGlsZSAodGVtcCAhPSBJUElRW2ldLnRhaWwpIHsKKwkJCXByX2RlYnVnKCIlZCAlZCAlZDogIiwgdGVtcC0+dHlwZSwgdGVtcC0+ZGVzdCwKKwkJCSAgICAgICAoaW50KXRlbXAtPmFyZyk7CisjaWZkZWYJU01UQ19JUElfREVCVUcKKwkJICAgIHByX2RlYnVnKCIldSAlbHVcbiIsIHRlbXAtPnNlbmRlciwgdGVtcC0+c3RhbXApOworI2Vsc2UKKwkJICAgIHByX2RlYnVnKCJcbiIpOworI2VuZGlmCisJCSAgICB0ZW1wID0gdGVtcC0+Zmxpbms7CisJCX0KIAl9CiB9CiAKQEAgLTc4NCwxMSArNzk3LDE2IEBACiAJaW50IG10ZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyB0Y3Jlc3RhcnQ7CiAJZXh0ZXJuIHZvaWQgcjRrX3dhaXRfaXJxb2ZmKHZvaWQpLCBfX3Bhc3R3YWl0KHZvaWQpOworCWludCBzZXRfcmVzY2hlZF9mbGFnID0gKHR5cGUgPT0gTElOVVhfU01QX0lQSSAmJgorCQkJCWFjdGlvbiA9PSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRik7CiAKIAlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgewogCQlwcmludGsoIkNhbm5vdCBTZW5kIElQSSB0byBzZWxmIVxuIik7CiAJCXJldHVybjsKIAl9CisJaWYgKHNldF9yZXNjaGVkX2ZsYWcgJiYgSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyAhPSAwKQorCQlyZXR1cm47IC8qIFRoZXJlIGlzIGEgcmVzY2hlZHVsZSBxdWV1ZWQgYWxyZWFkeSAqLworCiAJLyogU2V0IHVwIGEgZGVzY3JpcHRvciwgdG8gYmUgZGVsaXZlcmVkIGVpdGhlciBwcm9tcHRseSBvciBxdWV1ZWQgKi8KIAlwaXBpID0gc210Y19pcGlfZHEoJmZyZWVJUElxKTsKIAlpZiAocGlwaSA9PSBOVUxMKSB7CkBAIC04MDEsNiArODE5LDcgQEAKIAlwaXBpLT5kZXN0ID0gY3B1OwogCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCAhPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZCkgewogCQkvKiBJZiBub3Qgb24gc2FtZSBWUEUsIGVucXVldWUgYW5kIHNlbmQgY3Jvc3MtVlBFIGludGVycnVwdCAqLworCQlJUElRW2NwdV0ucmVzY2hlZF9mbGFnIHw9IHNldF9yZXNjaGVkX2ZsYWc7CiAJCXNtdGNfaXBpX25xKCZJUElRW2NwdV0sIHBpcGkpOwogCQlMT0NLX0NPUkVfUFJBKCk7CiAJCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOwpAQCAtODQ3LDYgKzg2Niw3IEBACiAJCQkgKi8KIAkJCXdyaXRlX3RjX2MwX3RjaGFsdCgwKTsKIAkJCVVOTE9DS19DT1JFX1BSQSgpOworCQkJSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyB8PSBzZXRfcmVzY2hlZF9mbGFnOwogCQkJc210Y19pcGlfbnEoJklQSVFbY3B1XSwgcGlwaSk7CiAJCX0gZWxzZSB7CiBwb3N0ZGlyZWN0OgpAQCAtOTk2LDEyICsxMDE2LDE1IEBACiAJCSAqIGFscmVhZHkgZW5hYmxlZC4KIAkJICovCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQogCQlzcGluX2xvY2soJnEtPmxvY2spOwogCQlwaXBpID0gX19zbXRjX2lwaV9kcShxKTsKIAkJc3Bpbl91bmxvY2soJnEtPmxvY2spOwotCQlpZiAocGlwaSAhPSBOVUxMKQorCQlpZiAocGlwaSAhPSBOVUxMKSB7CisJCQlpZiAocGlwaS0+dHlwZSA9PSBMSU5VWF9TTVBfSVBJICYmCisJCQkgICAgKGludClwaXBpLT5hcmcgPT0gU01QX1JFU0NIRURVTEVfWU9VUlNFTEYpCisJCQkJSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyA9IDA7CiAJCQlpcGlfZGVjb2RlKHBpcGkpOworCQl9CiAJCS8qCiAJCSAqIFRoZSB1c2Ugb2YgdGhlIF9fcmF3X2xvY2FsIHJlc3RvcmUgaXNuJ3QKIAkJICogYXMgb2J2aW91c2x5IG5lY2Vzc2FyeSBoZXJlIGFzIGluIHNtdGNfaXBpX3JlcGxheSgpLApAQCAtMTA4Miw2ICsxMTA1LDkgQEAKIAkJCQkgKiB3aXRoIGludGVycnVwdHMgb2ZmCiAJCQkJICovCiAJCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJCWlmIChwaXBpLT50eXBlID09IExJTlVYX1NNUF9JUEkgJiYKKwkJCQkgICAgKGludClwaXBpLT5hcmcgPT0gU01QX1JFU0NIRURVTEVfWU9VUlNFTEYpCisJCQkJCUlQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgPSAwOwogCQkJCWlwaV9kZWNvZGUocGlwaSk7CiAJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJfQpAQCAtMTA5OCw5ICsxMTI0LDggQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2lwaSA9IHsKIAkuaGFuZGxlcgk9IGlwaV9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCi0JLm5hbWUJCT0gIlNNVENfSVBJIiwKLQkuZmxhZ3MJCT0gSVJRRl9QRVJDUFUKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5uYW1lCQk9ICJTTVRDX0lQSSIKIH07CiAKIHN0YXRpYyB2b2lkIHNldHVwX2Nyb3NzX3ZwZV9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBudnBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zcHJhbS5jIGIvYXJjaC9taXBzL2tlcm5lbC9zcHJhbS5jCmluZGV4IDZkZGI1MDcuLjE4MjFkMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3ByYW0uYworKysgYi9hcmNoL21pcHMva2VybmVsL3NwcmFtLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KIAotI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTk4LDggKzE5Nyw3IEBACiAJCW9mZnNldCArPSAyICogU1BSQU1fVEFHX1NUUklERTsKIAl9CiB9Ci0KLV9fY3B1aW5pdCB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKQordm9pZCBfX2NwdWluaXQgc3ByYW1fY29uZmlnKHZvaWQpCiB7CiAJc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwogCXVuc2lnbmVkIGludCBjb25maWcwOwpAQCAtMjA4LDYgKzIwNiw3IEBACiAJY2FzZSBDUFVfMjRLOgogCWNhc2UgQ1BVXzM0SzoKIAljYXNlIENQVV83NEs6CisJY2FzZSBDUFVfMTAwNEs6CiAJCWNvbmZpZzAgPSByZWFkX2MwX2NvbmZpZygpOwogCQkvKiBGSVhNRTogYWRkcmVzc2VzIGFyZSBNYWx0YSBzcGVjaWZpYyAqLwogCQlpZiAoY29uZmlnMCAmICgxPDwyNCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5YmYwZTNkLi4xNjJiMjk5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMSwxNSArMTEsMTUgQEAKIAlub3RlIFBUX05PVEUgRkxBR1MoNCk7CS8qIFJfXyAqLwogfQogCi1pZmRlZiBDT05GSUdfMzJCSVQKLQlpZmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KKyNpZmRlZiBDT05GSUdfMzJCSVQKKwkjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCiAJCWppZmZpZXMgID0gamlmZmllc182NDsKLQllbHNlCisJI2Vsc2UKIAkJamlmZmllcyAgPSBqaWZmaWVzXzY0ICsgNDsKLQllbmRpZgotZWxzZQorCSNlbmRpZgorI2Vsc2UKIAlqaWZmaWVzICA9IGppZmZpZXNfNjQ7Ci1lbmRpZgorI2VuZGlmCiAKIFNFQ1RJT05TCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCBlYjZjNGM1Li42MDQ3NzUyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTE0NCwxNCArMTQ0LDE1IEBACiB9OwogCiBzdHJ1Y3QgewotCS8qIFZpcnR1YWwgcHJvY2Vzc2luZyBlbGVtZW50cyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdnBlX2xpc3Q7Ci0KLQkvKiBUaHJlYWQgY29udGV4dHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRjX2xpc3Q7CisJc3BpbmxvY2tfdCB2cGVfbGlzdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgdnBlX2xpc3Q7CS8qIFZpcnR1YWwgcHJvY2Vzc2luZyBlbGVtZW50cyAqLworCXNwaW5sb2NrX3QgdGNfbGlzdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgdGNfbGlzdDsJLyogVGhyZWFkIGNvbnRleHRzICovCiB9IHZwZWNvbnRyb2wgPSB7Ci0JLnZwZV9saXN0ID0gTElTVF9IRUFEX0lOSVQodnBlY29udHJvbC52cGVfbGlzdCksCi0JLnRjX2xpc3QgPSBMSVNUX0hFQURfSU5JVCh2cGVjb250cm9sLnRjX2xpc3QpCisJLnZwZV9saXN0X2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLnZwZV9saXN0CT0gTElTVF9IRUFEX0lOSVQodnBlY29udHJvbC52cGVfbGlzdCksCisJLnRjX2xpc3RfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkudGNfbGlzdAk9IExJU1RfSEVBRF9JTklUKHZwZWNvbnRyb2wudGNfbGlzdCkKIH07CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHJvZ21lbSh2b2lkICpwdHIpOwpAQCAtMTU5LDI4ICsxNjAsMzggQEAKIC8qIGdldCB0aGUgdnBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1pbm9yICovCiBzdGF0aWMgc3RydWN0IHZwZSAqZ2V0X3ZwZShpbnQgbWlub3IpCiB7Ci0Jc3RydWN0IHZwZSAqdjsKKwlzdHJ1Y3QgdnBlICpyZXMsICp2OwogCiAJaWYgKCFjcHVfaGFzX21pcHNtdCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlyZXMgPSBOVUxMOworCXNwaW5fbG9jaygmdnBlY29udHJvbC52cGVfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHYsICZ2cGVjb250cm9sLnZwZV9saXN0LCBsaXN0KSB7Ci0JCWlmICh2LT5taW5vciA9PSBtaW5vcikKLQkJCXJldHVybiB2OworCQlpZiAodi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCXJlcyA9IHY7CisJCQlicmVhazsKKwkJfQogCX0KKwlzcGluX3VubG9jaygmdnBlY29udHJvbC52cGVfbGlzdF9sb2NrKTsKIAotCXJldHVybiBOVUxMOworCXJldHVybiByZXM7CiB9CiAKIC8qIGdldCB0aGUgdnBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1pbm9yICovCiBzdGF0aWMgc3RydWN0IHRjICpnZXRfdGMoaW50IGluZGV4KQogewotCXN0cnVjdCB0YyAqdDsKKwlzdHJ1Y3QgdGMgKnJlcywgKnQ7CiAKKwlyZXMgPSBOVUxMOworCXNwaW5fbG9jaygmdnBlY29udHJvbC50Y19saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnZwZWNvbnRyb2wudGNfbGlzdCwgbGlzdCkgewotCQlpZiAodC0+aW5kZXggPT0gaW5kZXgpCi0JCQlyZXR1cm4gdDsKKwkJaWYgKHQtPmluZGV4ID09IGluZGV4KSB7CisJCQlyZXMgPSB0OworCQkJYnJlYWs7CisJCX0KIAl9CisJc3Bpbl91bmxvY2soJnZwZWNvbnRyb2wudGNfbGlzdF9sb2NrKTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtMTkwLDE1ICsyMDEsMTcgQEAKIHsKIAlzdHJ1Y3QgdnBlICp2OwogCi0JaWYgKCh2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZwZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJaWYgKCh2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZwZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQl9CiAKIAlJTklUX0xJU1RfSEVBRCgmdi0+dGMpOworCXNwaW5fbG9jaygmdnBlY29udHJvbC52cGVfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZ2LT5saXN0LCAmdnBlY29udHJvbC52cGVfbGlzdCk7CisJc3Bpbl91bmxvY2soJnZwZWNvbnRyb2wudnBlX2xpc3RfbG9jayk7CiAKIAlJTklUX0xJU1RfSEVBRCgmdi0+bm90aWZ5KTsKIAl2LT5taW5vciA9IG1pbm9yOworCiAJcmV0dXJuIHY7CiB9CiAKQEAgLTIxMiw3ICsyMjUsMTAgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZ0Yy0+dGMpOwogCXRjLT5pbmRleCA9IGluZGV4OworCisJc3Bpbl9sb2NrKCZ2cGVjb250cm9sLnRjX2xpc3RfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmdGMtPmxpc3QsICZ2cGVjb250cm9sLnRjX2xpc3QpOworCXNwaW5fdW5sb2NrKCZ2cGVjb250cm9sLnRjX2xpc3RfbG9jayk7CiAKIG91dDoKIAlyZXR1cm4gdGM7CkBAIC0yMjcsNyArMjQzLDcgQEAKIAlrZnJlZSh2KTsKIH0KIAotc3RhdGljIHZvaWQgZHVtcF9tdHJlZ3Modm9pZCkKK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGR1bXBfbXRyZWdzKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKQEAgLTEwNDgsMjAgKzEwNjQsMTkgQEAKIAllbnVtIHZwZV9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgKm5vdDsKIAlzdHJ1Y3QgdnBlICp2OwotCWludCByZXQsIGVyciA9IDA7CisJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CiAJaWYgKG1pbm9yICE9IGltaW5vcihpbm9kZSkpIHsKIAkJLyogYXNzdW1lIG9ubHkgMSBkZXZpY2UgYXQgdGhlIG1vbWVudC4gKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogb25seSB2cGUxIGlzIHN1cHBvcnRlZFxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlwcl93YXJuaW5nKCJWUEUgbG9hZGVyOiBvbmx5IHZwZTEgaXMgc3VwcG9ydGVkXG4iKTsKKworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoKHYgPSBnZXRfdnBlKHRjbGltaXQpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IHVuYWJsZSB0byBnZXQgdnBlXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7CisJCXByX3dhcm5pbmcoIlZQRSBsb2FkZXI6IHVuYWJsZSB0byBnZXQgdnBlXG4iKTsKKworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlzdGF0ZSA9IHhjaGcoJnYtPnN0YXRlLCBWUEVfU1RBVEVfSU5VU0UpOwpAQCAtMTEwMSw4ICsxMTE2LDYgQEAKIAl2LT5zaGFyZWRfcHRyID0gTlVMTDsKIAl2LT5fX3N0YXJ0ID0gMDsKIAotb3V0OgotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU5NCwxNCArMTYwNywxNCBAQAogewogCXN0cnVjdCB2cGUgKnYsICpuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHYsIG4sICZ2cGVjb250cm9sLnZwZV9saXN0LCBsaXN0KSB7Ci0JCWlmICh2LT5zdGF0ZSAhPSBWUEVfU1RBVEVfVU5VU0VEKSB7Ci0JCQlyZWxlYXNlX3ZwZSh2KTsKLQkJfQotCX0KLQogCWRldmljZV9kZWwoJnZwZV9kZXZpY2UpOwogCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCBtb2R1bGVfbmFtZSk7CisKKwkvKiBObyBsb2NraW5nIG5lZWRlZCBoZXJlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHYsIG4sICZ2cGVjb250cm9sLnZwZV9saXN0LCBsaXN0KSB7CisJCWlmICh2LT5zdGF0ZSAhPSBWUEVfU1RBVEVfVU5VU0VEKQorCQkJcmVsZWFzZV92cGUodik7CisJfQogfQogCiBtb2R1bGVfaW5pdCh2cGVfbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKaW5kZXggZjM2OGM3My4uYjMyYjRhMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCkBAIC01NSw3ICs1NSw2IEBACiAJICogaW50LWhhbmRsZXIgaXMgbm90IG9uIGJvb3RzdHJhcAogCSAqLwogCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0gfCBTVDBfQkVWKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCiAJLyogc2V0dGluZyBpcnEgdHJpZ2dlciBtb2RlICovCiAJc2V0X2lycV90cmlnZ2VyX21vZGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYwppbmRleCA4OTBmNzc5Li40NTRiNTM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCkBAIC0xNjMsMzMgKzE2MywzNCBAQAogCiAvKgogICogSW4gdGhlIExpbnV4IGtlcm5lbCwgd2Ugc3VwcG9ydCBzZWxlY3Rpb24gb2YgRlBSIGZvcm1hdCBvbiB0aGUKLSAqIGJhc2lzIG9mIHRoZSBTdGF0dXMuRlIgYml0LiAgVGhpcyBkb2VzIGltcGx5IHRoYXQsIGlmIGEgZnVsbCAzMgotICogRlBScyBhcmUgZGVzaXJlZCwgdGhlcmUgbmVlZHMgdG8gYmUgYSBmbGlwLWZsb3AgdGhhdCBjYW4gYmUgd3JpdHRlbgotICogdG8gb25lIGF0IHRoYXQgYml0IHBvc2l0aW9uLiAgSW4gYW55IGNhc2UsIE8zMiBNSVBTIEFCSSB1c2VzCi0gKiBvbmx5IHRoZSBldmVuIEZQUnMgKFN0YXR1cy5GUiA9IDApLgorICogYmFzaXMgb2YgdGhlIFN0YXR1cy5GUiBiaXQuICBJZiBhbiBGUFUgaXMgbm90IHByZXNlbnQsIHRoZSBGUiBiaXQKKyAqIGlzIGhhcmR3aXJlZCB0byB6ZXJvLCB3aGljaCB3b3VsZCBpbXBseSBhIDMyLWJpdCBGUFUgZXZlbiBmb3IKKyAqIDY0LWJpdCBDUFVzLiAgRm9yIDY0LWJpdCBrZXJuZWxzIHdpdGggbm8gRlBVIHdlIHVzZSBUSUZfMzJCSVRfUkVHUworICogYXMgYSBwcm94eSBmb3IgdGhlIEZSIGJpdCBzbyB0aGF0IGEgNjQtYml0IEZQVSBpcyBlbXVsYXRlZC4gIEluIGFueQorICogY2FzZSwgZm9yIGEgMzItYml0IGtlcm5lbCB3aGljaCB1c2VzIHRoZSBPMzIgTUlQUyBBQkksIG9ubHkgdGhlCisgKiBldmVuIEZQUnMgYXJlIHVzZWQgKFN0YXR1cy5GUiA9IDApLgogICovCi0KLSNkZWZpbmUgQ1AwX1NUQVRVU19GUl9TVVBQT1JUCi0KLSNpZmRlZiBDUDBfU1RBVFVTX0ZSX1NVUFBPUlQKLSNkZWZpbmUgRlJfQklUIFNUMF9GUgorc3RhdGljIGlubGluZSBpbnQgY29wMV82NGJpdChzdHJ1Y3QgcHRfcmVncyAqeGNwKQoreworCWlmIChjcHVfaGFzX2ZwdSkKKwkJcmV0dXJuIHhjcC0+Y3AwX3N0YXR1cyAmIFNUMF9GUjsKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlyZXR1cm4gIXRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUX1JFR1MpOwogI2Vsc2UKLSNkZWZpbmUgRlJfQklUIDAKKwlyZXR1cm4gMDsKICNlbmRpZgorfQogCi0jZGVmaW5lIFNJRlJPTVJFRyhzaSwgeCkgKChzaSkgPSBcCi0JCQkoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSB8fCAhKHggJiAxKSA/IFwKLQkJCShpbnQpY3R4LT5mcHJbeF0gOiBcCi0JCQkoaW50KShjdHgtPmZwclt4ICYgfjFdID4+IDMyICkpCi0jZGVmaW5lIFNJVE9SRUcoc2ksIHgpCShjdHgtPmZwclt4ICYgfigoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSA9PSAwKV0gPSBcCi0JCQkoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSB8fCAhKHggJiAxKSA/IFwKKyNkZWZpbmUgU0lGUk9NUkVHKHNpLCB4KSAoKHNpKSA9IGNvcDFfNjRiaXQoeGNwKSB8fCAhKHggJiAxKSA/IFwKKwkJCShpbnQpY3R4LT5mcHJbeF0gOiAoaW50KShjdHgtPmZwclt4ICYgfjFdID4+IDMyKSkKKworI2RlZmluZSBTSVRPUkVHKHNpLCB4KQkoY3R4LT5mcHJbeCAmIH4oY29wMV82NGJpdCh4Y3ApID09IDApXSA9IFwKKwkJCWNvcDFfNjRiaXQoeGNwKSB8fCAhKHggJiAxKSA/IFwKIAkJCWN0eC0+ZnByW3ggJiB+MV0gPj4gMzIgPDwgMzIgfCAodTMyKShzaSkgOiBcCiAJCQljdHgtPmZwclt4ICYgfjFdIDw8IDMyID4+IDMyIHwgKHU2NCkoc2kpIDw8IDMyKQogCi0jZGVmaW5lIERJRlJPTVJFRyhkaSwgeCkgKChkaSkgPSBcCi0JCQljdHgtPmZwclt4ICYgfigoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSA9PSAwKV0pCi0jZGVmaW5lIERJVE9SRUcoZGksIHgpCShjdHgtPmZwclt4ICYgfigoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSA9PSAwKV0gXAotCQkJPSAoZGkpKQorI2RlZmluZSBESUZST01SRUcoZGksIHgpICgoZGkpID0gY3R4LT5mcHJbeCAmIH4oY29wMV82NGJpdCh4Y3ApID09IDApXSkKKyNkZWZpbmUgRElUT1JFRyhkaSwgeCkJKGN0eC0+ZnByW3ggJiB+KGNvcDFfNjRiaXQoeGNwKSA9PSAwKV0gPSAoZGkpKQogCiAjZGVmaW5lIFNQRlJPTVJFRyhzcCwgeCkgU0lGUk9NUkVHKChzcCkuYml0cywgeCkKICNkZWZpbmUgU1BUT1JFRyhzcCwgeCkJU0lUT1JFRygoc3ApLmJpdHMsIHgpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfc2ltcGxlLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfc2ltcGxlLmMKaW5kZXggMWM1NTVlNi4uZDlhZTFkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2RwX3NpbXBsZS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYwpAQCAtNjIsOCArNjIsNiBAQAogCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoeSwgIm5lZyIpOwogCX0KIAotCWlmIChpZWVlNzU0ZHBfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KHgsICJuZWciLCB4KTsKIAlyZXR1cm4geDsKIH0KIApAQCAtNzYsMTUgKzc0LDEyIEBACiAJQ0xFQVJDWDsKIAlGTFVTSFhEUDsKIAorCS8qIENsZWFyIHNpZ24gQUxXQVlTLCBpcnJlc3BlY3RpdmUgb2YgTmFOICovCisJRFBTSUdOKHgpID0gMDsKKwogCWlmICh4YyA9PSBJRUVFNzU0X0NMQVNTX1NOQU4pIHsKLQkJU0VUQ1goSUVFRTc1NF9JTlZBTElEX09QRVJBVElPTik7Ci0JCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdChpZWVlNzU0ZHBfaW5kZWYoKSwgIm5lZyIpOworCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoaWVlZTc1NGRwX2luZGVmKCksICJhYnMiKTsKIAl9CiAKLQlpZiAoaWVlZTc1NGRwX2lzbmFuKHgpKQkvKiBidXQgbm90IGluZmluaXR5ICovCi0JCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdCh4LCAiYWJzIiwgeCk7Ci0KLQkvKiBxdWljayBmaXggdXAgKi8KLQlEUFNJR04oeCkgPSAwOwogCXJldHVybiB4OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L3NwX3NpbXBsZS5jIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX3NpbXBsZS5jCmluZGV4IDc3MGYwZjQuLjMxNzU0NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9zaW1wbGUuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMKQEAgLTYyLDggKzYyLDYgQEAKIAkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KHksICJuZWciKTsKIAl9CiAKLQlpZiAoaWVlZTc1NHNwX2lzbmFuKHgpKQkvKiBidXQgbm90IGluZmluaXR5ICovCi0JCXJldHVybiBpZWVlNzU0c3BfbmFueGNwdCh4LCAibmVnIiwgeCk7CiAJcmV0dXJuIHg7CiB9CiAKQEAgLTc2LDE1ICs3NCwxMiBAQAogCUNMRUFSQ1g7CiAJRkxVU0hYU1A7CiAKKwkvKiBDbGVhciBzaWduIEFMV0FZUywgaXJyZXNwZWN0aXZlIG9mIE5hTiAqLworCVNQU0lHTih4KSA9IDA7CisKIAlpZiAoeGMgPT0gSUVFRTc1NF9DTEFTU19TTkFOKSB7Ci0JCVNFVENYKElFRUU3NTRfSU5WQUxJRF9PUEVSQVRJT04pOwogCQlyZXR1cm4gaWVlZTc1NHNwX25hbnhjcHQoaWVlZTc1NHNwX2luZGVmKCksICJhYnMiKTsKIAl9CiAKLQlpZiAoaWVlZTc1NHNwX2lzbmFuKHgpKQkvKiBidXQgbm90IGluZmluaXR5ICovCi0JCXJldHVybiBpZWVlNzU0c3BfbmFueGNwdCh4LCAiYWJzIiwgeCk7Ci0KLQkvKiBxdWljayBmaXggdXAgKi8KLQlTUFNJR04oeCkgPSAwOwogCXJldHVybiB4OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwppbmRleCA3ZTQ4ZTc2Li45MzY3ZTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwpAQCAtOTAsNiArOTAsOSBAQAogewogCXZvaWQgKnJldDsKIAorCWlmIChkbWFfYWxsb2NfZnJvbV9jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsICZyZXQpKQorCQlyZXR1cm4gcmV0OworCiAJZ2ZwID0gbWFzc2FnZV9nZnBfZmxhZ3MoZGV2LCBnZnApOwogCiAJcmV0ID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhnZnAsIGdldF9vcmRlcihzaXplKSk7CkBAIC0xMjIsNiArMTI1LDEwIEBACiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB2YWRkcjsKKwlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwlpZiAoZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikpCisJCXJldHVybjsKIAogCXBsYXRfdW5tYXBfZG1hX21lbShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggMTVhYTE5MC4uOGQxZjRmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KQEAgLTEzMiw3ICsxMzMsMTAgQEAKIAlpbmNfcHJlZW1wdF9jb3VudCgpOwogCWlkeCA9IChhZGRyID4+IFBBR0VfU0hJRlQpICYgKEZJWF9OX0NPTE9VUlMgLSAxKTsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JaWR4ICs9IEZJWF9OX0NPTE9VUlMgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWR4ICs9IEZJWF9OX0NPTE9VUlMgKiBzbXBfcHJvY2Vzc29yX2lkKCkgKworCQkoaW5faW50ZXJydXB0KCkgPyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpIDogMCk7CisjZWxzZQorCWlkeCArPSBpbl9pbnRlcnJ1cHQoKSA/IEZJWF9OX0NPTE9VUlMgOiAwOwogI2VuZGlmCiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9DTUFQX0VORCAtIGlkeCk7CiAJcHRlID0gbWtfcHRlKHBhZ2UsIFBBR0VfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMgYi9hcmNoL21pcHMvbW0vc2MtbWlwcy5jCmluZGV4IGI1NWMyZDEuLjVhYjVmYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMKKysrIGIvYXJjaC9taXBzL21tL3NjLW1pcHMuYwpAQCAtMzIsNiArMzIsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgbWlwc19zY19pbnYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisJdW5zaWduZWQgbG9uZyBsc2l6ZSA9IGNwdV9zY2FjaGVfbGluZV9zaXplKCk7CisJdW5zaWduZWQgbG9uZyBhbG1hc2sgPSB+KGxzaXplIC0gMSk7CisKKwljYWNoZV9vcChIaXRfV3JpdGViYWNrX0ludl9TRCwgYWRkciAmIGFsbWFzayk7CisJY2FjaGVfb3AoSGl0X1dyaXRlYmFja19JbnZfU0QsIChhZGRyICsgc2l6ZSAtIDEpICYgYWxtYXNrKTsKIAlibGFzdF9pbnZfc2NhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1hbW9uLmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYwppbmRleCBkZjllNTI2Li40NjlkOWIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYwpAQCAtNzAsMTEgKzcwLDEyIEBACiAJbGF1bmNoLT5zcCA9IHNwOwogCWxhdW5jaC0+YTAgPSBhMDsKIAotCS8qIE1ha2Ugc3VyZSB0YXJnZXQgc2VlcyBwYXJhbWV0ZXJzIGJlZm9yZSB0aGUgZ28gYml0ICovCi0Jc21wX21iKCk7Ci0KKwlzbXBfd21iKCk7ICAgICAgICAgICAgICAvKiBUYXJnZXQgbXVzdCBzZWUgcGFyYW1ldGVycyBiZWZvcmUgZ28gKi8KIAlsYXVuY2gtPmZsYWdzIHw9IExBVU5DSF9GR087CisJc21wX3dtYigpOyAgICAgICAgICAgICAgLyogVGFyZ2V0IG11c3Qgc2VlIGdvIGJlZm9yZSB3ZSBwb2xsICAqLworCiAJd2hpbGUgKChsYXVuY2gtPmZsYWdzICYgTEFVTkNIX0ZHT05FKSA9PSAwKQogCQk7CisJc21wX3JtYigpOyAgICAgIC8qIFRhcmdldCB3aWxsIGJlIHVwZGF0aW5nIGZsYWdzIHNvb24gKi8KIAlwcl9kZWJ1ZygibGF1bmNoOiBjcHUlZCBnb25lIVxuIiwgY3B1KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCmluZGV4IDNlMGE5YjMuLjRjM2ZjYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwpAQCAtODcsNyArODcsNyBAQAogCQlkdW1teSA9IEJPTklUT19QQ0lNQVBfQ0ZHOwogCQlpb2IoKTsgICAgLyogc3luYyAqLwogCi0JCWlycSA9IHJlYWRsKCh1MzIgKilfcGNpY3RybF9ib25pdG9fcGNpY2ZnKTsKKwkJaXJxID0gX19yYXdfcmVhZGwoKHUzMiAqKV9wY2ljdHJsX2Jvbml0b19wY2ljZmcpOwogCQlpb2IoKTsgICAgLyogc3luYyAqLwogCQlpcnEgJj0gMHhmZjsKIAkJQk9OSVRPX1BDSU1BUF9DRkcgPSAwOwpAQCAtMzc5LDM4ICszNzksNDMgQEAKIAogc3RhdGljIGludCBfX2luaXRkYXRhIG1zY19ucl9laWNpcnFzID0gQVJSQVlfU0laRShtc2NfZWljaXJxbWFwKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogLyoKICAqIFRoaXMgR0lDIHNwZWNpZmljIHRhYnVsYXIgYXJyYXkgZGVmaW5lcyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBFeHRlcm5hbAogICogSW50ZXJydXB0cyBhbmQgQ1BVcy9Db3JlIEludGVycnVwdHMuIFRoZSBuYXR1cmUgb2YgdGhlIEV4dGVybmFsCiAgKiBJbnRlcnJ1cHRzIGlzIGFsc28gZGVmaW5lZCBoZXJlIC0gcG9sYXJpdHkvdHJpZ2dlci4KICAqLworCisjZGVmaW5lIEdJQ19DUFVfTk1JIEdJQ19NQVBfVE9fTk1JX01TSwogc3RhdGljIHN0cnVjdCBnaWNfaW50cl9tYXAgZ2ljX2ludHJfbWFwW0dJQ19OVU1fSU5UUlNdID0gewotCXsgR0lDX0VYVF9JTlRSKDApLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMiksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDMpLCAJMCwJR0lDX0NQVV9JTlQwLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNCksIAkwLAlHSUNfQ1BVX0lOVDEsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig1KSwgCTAsCUdJQ19DUFVfSU5UMiwJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDYpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNyksIAkwLAlHSUNfQ1BVX0lOVDQsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig4KSwgCTAsCUdJQ19DUFVfSU5UMywJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDkpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTApLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxMSksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEyKSwgCTAsCUdJQ19DUFVfSU5UMywJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEzKSwgCTAsCUdJQ19NQVBfVE9fTk1JX01TSywJR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTQpLCAJMCwJR0lDX01BUF9UT19OTUlfTVNLLAlHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxNSksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotLyogVGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBnZW5lcmFsIGludGVycnVwdHMgbm93IHdlIGRvIElQSSBvbmVzICovCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyBYLCBYLAkJICAgWCwJIAlYLAkJMCB9LAorCXsgWCwgWCwJCSAgIFgsCQlYLAkJMCB9LAorCXsgMCwgR0lDX0NQVV9JTlQwLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDEsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMiwgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDQsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMywgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDMsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfTk1JLCAgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9OTUksICBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCSAgICAgICAgMCB9LAorCS8qIFRoZSByZW1haW5kZXIgb2YgdGhpcyB0YWJsZSBpcyBpbml0aWFsaXNlZCBieSBmaWxsX2lwaV9tYXAgKi8KIH07Ci0jZW5kaWYKIAogLyoKICAqIEdDTVAgbmVlZHMgdG8gYmUgZGV0ZWN0ZWQgYmVmb3JlIGFueSBTTVAgaW5pdGlhbGlzYXRpb24KICAqLwogaW50IF9faW5pdCBnY21wX3Byb2JlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogeworCWlmIChtaXBzX3JldmlzaW9uX3Njb25pZCAhPSBNSVBTX1JFVklTSU9OX1NDT05fUk9DSVQpIHsKKwkJZ2NtcF9wcmVzZW50ID0gMDsKKwkJcmV0dXJuIGdjbXBfcHJlc2VudDsKKwl9CisKIAlpZiAoZ2NtcF9wcmVzZW50ID49IDApCiAJCXJldHVybiBnY21wX3ByZXNlbnQ7CiAKQEAgLTQxOSwyMCArNDI0LDM1IEBACiAJZ2NtcF9wcmVzZW50ID0gKEdDTVBHQ0IoR0NNUEIpICYgR0NNUF9HQ0JfR0NNUEJfR0NNUEJBU0VfTVNLKSA9PSBHQ01QX0JBU0VfQUREUjsKIAogCWlmIChnY21wX3ByZXNlbnQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJHQ01QIHByZXNlbnRcbiIpOworCQlwcl9kZWJ1ZygiR0NNUCBwcmVzZW50XG4iKTsKIAlyZXR1cm4gZ2NtcF9wcmVzZW50OwogfQogCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBJT0NVJ3MgcHJlc2VudCAqLworaW50IF9faW5pdCBnY21wX25pb2N1KHZvaWQpCit7CisgIHJldHVybiBnY21wX3ByZXNlbnQgPworICAgIChHQ01QR0NCKEdDKSAmIEdDTVBfR0NCX0dDX05VTUlPQ1VfTVNLKSA+PiBHQ01QX0dDQl9HQ19OVU1JT0NVX1NIRiA6CisgICAgMDsKK30KKworLyogU2V0IEdDTVAgcmVnaW9uIGF0dHJpYnV0ZXMgKi8KK3ZvaWQgX19pbml0IGdjbXBfc2V0cmVnaW9uKGludCByZWdpb24sIHVuc2lnbmVkIGxvbmcgYmFzZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbWFzaywgaW50IHR5cGUpCit7CisJR0NNUEdDQm4oQ014QkFTRSwgcmVnaW9uKSA9IGJhc2U7CisJR0NNUEdDQm4oQ014TUFTSywgcmVnaW9uKSA9IG1hc2sgfCB0eXBlOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiBzdGF0aWMgdm9pZCBfX2luaXQgZmlsbF9pcGlfbWFwMShpbnQgYmFzZWludHIsIGludCBjcHUsIGludCBjcHVwaW4pCiB7CiAJaW50IGludHIgPSBiYXNlaW50ciArIGNwdTsKLQlnaWNfaW50cl9tYXBbaW50cl0uaW50cm51bSA9IEdJQ19FWFRfSU5UUihpbnRyKTsKIAlnaWNfaW50cl9tYXBbaW50cl0uY3B1bnVtID0gY3B1OwogCWdpY19pbnRyX21hcFtpbnRyXS5waW4gPSBjcHVwaW47CiAJZ2ljX2ludHJfbWFwW2ludHJdLnBvbGFyaXR5ID0gR0lDX1BPTF9QT1M7CiAJZ2ljX2ludHJfbWFwW2ludHJdLnRyaWd0eXBlID0gR0lDX1RSSUdfRURHRTsKLQlnaWNfaW50cl9tYXBbaW50cl0uaXBpZmxhZyA9IDE7CisJZ2ljX2ludHJfbWFwW2ludHJdLmZsYWdzID0gR0lDX0ZMQUdfSVBJOwogCWlwaV9tYXBbY3B1XSB8PSAoMSA8PCAoY3B1cGluICsgMikpOwogfQogCkBAIC00NDcsNiArNDY3LDEyIEBACiB9CiAjZW5kaWYKIAordm9pZCBfX2luaXQgYXJjaF9pbml0X2lwaWlycShpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCit7CisJc2V0dXBfaXJxKGlycSwgYWN0aW9uKTsKKwlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Cit9CisKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAlpbml0X2k4MjU5X2lycXMoKTsKQEAgLTQ1OCwxMiArNDg0LDE3IEBACiAJCUdDTVBHQ0IoR0lDQkEpID0gR0lDX0JBU0VfQUREUiB8IEdDTVBfR0NCX0dJQ0JBX0VOX01TSzsKIAkJZ2ljX3ByZXNlbnQgPSAxOwogCX0gZWxzZSB7Ci0JCV9tc2MwMV9iaXVfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoTVNDMDFfQklVX1JFR19CQVNFLCBNU0MwMV9CSVVfQUREUlNQQUNFX1NaKTsKLQkJZ2ljX3ByZXNlbnQgPSAoUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKSAmCi0JCU1TQzAxX1NDX0NGR19HSUNQUkVTX01TSykgPj4gTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfU0hGOworCQlpZiAobWlwc19yZXZpc2lvbl9zY29uaWQgPT0gTUlQU19SRVZJU0lPTl9TQ09OX1JPQ0lUKSB7CisJCQlfbXNjMDFfYml1X2Jhc2UgPSAodW5zaWduZWQgbG9uZykKKwkJCQkJaW9yZW1hcF9ub2NhY2hlKE1TQzAxX0JJVV9SRUdfQkFTRSwKKwkJCQkJCU1TQzAxX0JJVV9BRERSU1BBQ0VfU1opOworCQkJZ2ljX3ByZXNlbnQgPSAoUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKSAmCisJCQkJCU1TQzAxX1NDX0NGR19HSUNQUkVTX01TSykgPj4KKwkJCQkJTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfU0hGOworCQl9CiAJfQogCWlmIChnaWNfcHJlc2VudCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkdJQyBwcmVzZW50XG4iKTsKKwkJcHJfZGVidWcoIkdJQyBwcmVzZW50XG4iKTsKIAogCXN3aXRjaCAobWlwc19yZXZpc2lvbl9zY29uaWQpIHsKIAljYXNlIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVDoKQEAgLTUyNiwxNiArNTU3LDE2IEBACiAJCQkJCQkmY29yZWhpX2lycWFjdGlvbik7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJaWYgKGdpY19wcmVzZW50KSB7CiAJCS8qIEZJWE1FICovCiAJCWludCBpOwotCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJCWdpY19jYWxsX2ludF9iYXNlID0gR0lDX05VTV9JTlRSUyAtIE5SX0NQVVM7CiAJCWdpY19yZXNjaGVkX2ludF9iYXNlID0gZ2ljX2NhbGxfaW50X2Jhc2UgLSBOUl9DUFVTOwotCiAJCWZpbGxfaXBpX21hcCgpOwotCQlnaWNfaW5pdChHSUNfQkFTRV9BRERSLCBHSUNfQUREUlNQQUNFX1NaLCBnaWNfaW50cl9tYXAsIEFSUkFZX1NJWkUoZ2ljX2ludHJfbWFwKSwgTUlQU19HSUNfSVJRX0JBU0UpOworI2VuZGlmCisJCWdpY19pbml0KEdJQ19CQVNFX0FERFIsIEdJQ19BRERSU1BBQ0VfU1osIGdpY19pbnRyX21hcCwKKwkJCQlBUlJBWV9TSVpFKGdpY19pbnRyX21hcCksIE1JUFNfR0lDX0lSUV9CQVNFKTsKIAkJaWYgKCFnY21wX3ByZXNlbnQpIHsKIAkJCS8qIEVuYWJsZSB0aGUgR0lDICovCiAJCQlpID0gUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKTsKQEAgLTU0Myw3ICs1NzQsNyBAQAogCQkJCShpIHwgKDB4MSA8PCBNU0MwMV9TQ19DRkdfR0lDRU5BX1NIRikpOwogCQkJcHJfZGVidWcoIkdJQyBFbmFibGVkXG4iKTsKIAkJfQotCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJCS8qIHNldCB1cCBpcGkgaW50ZXJydXB0cyAqLwogCQlpZiAoY3B1X2hhc192aW50KSB7CiAJCQlzZXRfdmlfaGFuZGxlcihNSVBTQ1BVX0lOVF9JUEkwLCBtYWx0YV9pcGlfaXJxZGlzcGF0Y2gpOwpAQCAtNTU2LDE2ICs1ODcsMTQgQEAKIAkJd3JpdGVfYzBfc3RhdHVzKDB4MTEwMGRjMDApOwogCQlwcmludGsoIkNQVSVkOiBzdGF0dXMgcmVnaXN0ZXIgZnJjICUwOHhcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgcmVhZF9jMF9zdGF0dXMoKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJCXNldHVwX2lycShNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19SRVNDSEVEX0lOVChpKSwgJmlycV9yZXNjaGVkKTsKLQkJCXNldHVwX2lycShNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19DQUxMX0lOVChpKSwgJmlycV9jYWxsKTsKLQkJCXNldF9pcnFfaGFuZGxlcihNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19SRVNDSEVEX0lOVChpKSwgaGFuZGxlX3BlcmNwdV9pcnEpOwotCQkJc2V0X2lycV9oYW5kbGVyKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX0NBTExfSU5UKGkpLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlhcmNoX2luaXRfaXBpaXJxKE1JUFNfR0lDX0lSUV9CQVNFICsKKwkJCQkJIEdJQ19SRVNDSEVEX0lOVChpKSwgJmlycV9yZXNjaGVkKTsKKwkJCWFyY2hfaW5pdF9pcGlpcnEoTUlQU19HSUNfSVJRX0JBU0UgKworCQkJCQkgR0lDX0NBTExfSU5UKGkpLCAmaXJxX2NhbGwpOwogCQl9CisjZW5kaWYKIAl9IGVsc2UgeworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogCQkvKiBzZXQgdXAgaXBpIGludGVycnVwdHMgKi8KIAkJaWYgKGNwdV9oYXNfdmVpYykgewogCQkJc2V0X3ZpX2hhbmRsZXIgKE1TQzAxRV9JTlRfU1cwLCBpcGlfcmVzY2hlZF9kaXNwYXRjaCk7CkBAIC01ODAsMTQgKzYwOSwxMCBAQAogCQkJY3B1X2lwaV9yZXNjaGVkX2lycSA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgTUlQU19DUFVfSVBJX1JFU0NIRURfSVJROwogCQkJY3B1X2lwaV9jYWxsX2lycSA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgTUlQU19DUFVfSVBJX0NBTExfSVJROwogCQl9Ci0KLQkJc2V0dXBfaXJxKGNwdV9pcGlfcmVzY2hlZF9pcnEsICZpcnFfcmVzY2hlZCk7Ci0JCXNldHVwX2lycShjcHVfaXBpX2NhbGxfaXJxLCAmaXJxX2NhbGwpOwotCi0JCXNldF9pcnFfaGFuZGxlcihjcHVfaXBpX3Jlc2NoZWRfaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JCXNldF9pcnFfaGFuZGxlcihjcHVfaXBpX2NhbGxfaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JfQorCQlhcmNoX2luaXRfaXBpaXJxKGNwdV9pcGlfcmVzY2hlZF9pcnEsICZpcnFfcmVzY2hlZCk7CisJCWFyY2hfaW5pdF9pcGlpcnEoY3B1X2lwaV9jYWxsX2lycSwgJmlycV9jYWxsKTsKICNlbmRpZgorCX0KIH0KIAogdm9pZCBtYWx0YV9iZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYwppbmRleCA2MTg4OGZmLi45MDM1YzY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMKQEAgLTU0LDcgKzU0LDggQEAKIHsKIAljaGFyICptZW1zaXplX3N0cjsKIAl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKLQljaGFyIGNtZGxpbmVbQ0xfU0laRV0sICpwdHI7CisJY2hhciAqcHRyOworCXN0YXRpYyBjaGFyIGNtZGxpbmVbQ0xfU0laRV0gX19pbml0ZGF0YTsKIAogCS8qIG90aGVyd2lzZSBsb29rIGluIHRoZSBlbnZpcm9ubWVudCAqLwogCW1lbXNpemVfc3RyID0gcHJvbV9nZXRlbnYoIm1lbXNpemUiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXBjaS5jCmluZGV4IGI5NzQzMTkuLjJmYmZhMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+Ci0KKyNpbmNsdWRlIDxhc20vZ2NtcHJlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9tc2MwMV9wY2kuaD4KQEAgLTIwMSw3ICsyMDEsMTEgQEAKIAkJbXNjX21lbV9yZXNvdXJjZS5zdGFydCA9IHN0YXJ0ICYgbWFzazsKIAkJbXNjX21lbV9yZXNvdXJjZS5lbmQgPSAoc3RhcnQgJiBtYXNrKSB8IH5tYXNrOwogCQltc2NfY29udHJvbGxlci5tZW1fb2Zmc2V0ID0gKHN0YXJ0ICYgbWFzaykgLSAobWFwICYgbWFzayk7Ci0KKyNpZmRlZiBDT05GSUdfTUlQU19DTVAKKwkJaWYgKGdjbXBfbmlvY3UoKSkKKwkJCWdjbXBfc2V0cmVnaW9uKDAsIHN0YXJ0LCBtYXNrLAorCQkJCUdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UxKTsKKyNlbmRpZgogCQlNU0NfUkVBRChNU0MwMV9QQ0lfU0MyUElPQkFTTCwgc3RhcnQpOwogCQlNU0NfUkVBRChNU0MwMV9QQ0lfU0MyUElPTVNLTCwgbWFzayk7CiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9NQVBMLCBtYXApOwpAQCAtMjA5LDcgKzIxMywxMSBAQAogCQltc2NfaW9fcmVzb3VyY2UuZW5kID0gKG1hcCAmIG1hc2spIHwgfm1hc2s7CiAJCW1zY19jb250cm9sbGVyLmlvX29mZnNldCA9IDA7CiAJCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSB+bWFzazsKLQorI2lmZGVmIENPTkZJR19NSVBTX0NNUAorCQlpZiAoZ2NtcF9uaW9jdSgpKQorCQkJZ2NtcF9zZXRyZWdpb24oMSwgc3RhcnQsIG1hc2ssCisJCQkJR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEpOworI2VuZGlmCiAJCS8qIElmIHJhbmdlcyBvdmVybGFwIEkvTyB0YWtlcyBwcmVjZWRlbmNlLiAgKi8KIAkJc3RhcnQgPSBzdGFydCAmIG1hc2s7CiAJCWVuZCA9IHN0YXJ0IHwgfm1hc2s7CkBAIC0yNDEsMyArMjQ5LDE2IEBACiAKIAlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjb250cm9sbGVyKTsKIH0KKworLyogRW5hYmxlIFBDSSAyLjEgY29tcGF0aWJpbGl0eSBpbiBQSUlYNCAqLworc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX2RsY3NldHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTggb2RsYywgbmRsYzsKKwkodm9pZCkgcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDgyLCAmb2RsYyk7CisJLyogRW5hYmxlIHBhc3NpdmUgcmVsZWFzZXMgYW5kIGRlbGF5ZWQgdHJhbnNhY3Rpb24gKi8KKwluZGxjID0gb2RsYyB8IDc7CisJKHZvaWQpIHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODIsIG5kbGMpOworfQorCitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMCwKKwlxdWlya19kbGNzZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9pbnQuYwppbmRleCBmMDgwZjExLi43YWNhN2Q1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9hY3Rpb24gPSB7CiAJLmhhbmRsZXIgPQlub19hY3Rpb24sCi0JLmZsYWdzID0JSVJRRl9ESVNBQkxFRCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkubmFtZSA9CQkiVGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYwppbmRleCAxOGIxOTI3Li44ODM2YzYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYwpAQCAtNTksNyArNTksNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwbng4eHh4X3RpbWVyX2lycSA9IHsKIAkuaGFuZGxlcgk9IHBueDh4eHhfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gInBueDh4eHhfdGltZXIiLAogfTsKIApAQCAtNzIsNyArNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtb25vdG9uaWNfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gbW9ub3RvbmljX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gIk1vbm90b25pYyB0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKaW5kZXggNjU1Y2I4ZC4uNTc1Y2QxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwpAQCAtMjIsNyArMjIsNyBAQAogICogb3RoZXJ3aXNlLCB0aGUgb3Byb2ZpbGUgdG9vbCB3aWxsIG5vdCByZWNvZ25pemUgdGhpcyBhbmQgY29tcGxhaW4gYWJvdXQKICAqICJjcHVfdHlwZSAndW5zZXQnIGlzIG5vdCB2YWxpZCIuCiAgKi8KLSNkZWZpbmUgTE9PTkdTT04yX0NQVV9UWVBFCSJtaXBzL2dvZHNvbjIiCisjZGVmaW5lIExPT05HU09OMl9DUFVfVFlQRQkibWlwcy9sb29uZ3NvbjIiCiAKICNkZWZpbmUgTE9PTkdTT04yX0NPVU5URVIxX0VWRU5UKGV2ZW50KQkoKGV2ZW50ICYgMHgwZikgPDwgNSkKICNkZWZpbmUgTE9PTkdTT04yX0NPVU5URVIyX0VWRU5UKGV2ZW50KQkoKGV2ZW50ICYgMHgwZikgPDwgOSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAl1bnNpZ25lZCBpbnQgY3RybDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmVzZXRfY291bnRlcjE7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJlc2V0X2NvdW50ZXIyOwotCWludCBjbnQxX2VuYWxiZWQsIGNudDJfZW5hbGJlZDsKKwlpbnQgY250MV9lbmFibGVkLCBjbnQyX2VuYWJsZWQ7CiB9IHJlZzsKIAogREVGSU5FX1NQSU5MT0NLKHNhbXBsZV9sb2NrKTsKQEAgLTgxLDggKzgxLDggQEAKIAogCXJlZy5jdHJsID0gY3RybDsKIAotCXJlZy5jbnQxX2VuYWxiZWQgPSBjZmdbMF0uZW5hYmxlZDsKLQlyZWcuY250Ml9lbmFsYmVkID0gY2ZnWzFdLmVuYWJsZWQ7CisJcmVnLmNudDFfZW5hYmxlZCA9IGNmZ1swXS5lbmFibGVkOworCXJlZy5jbnQyX2VuYWJsZWQgPSBjZmdbMV0uZW5hYmxlZDsKIAogfQogCkBAIC05OSw3ICs5OSw3IEBACiBzdGF0aWMgdm9pZCBsb29uZ3NvbjJfY3B1X3N0YXJ0KHZvaWQgKmFyZ3MpCiB7CiAJLyogU3RhcnQgYWxsIGNvdW50ZXJzIG9uIGN1cnJlbnQgQ1BVICovCi0JaWYgKHJlZy5jbnQxX2VuYWxiZWQgfHwgcmVnLmNudDJfZW5hbGJlZCkKKwlpZiAocmVnLmNudDFfZW5hYmxlZCB8fCByZWcuY250Ml9lbmFibGVkKQogCQl3cml0ZV9jMF9wZXJmY3RybChyZWcuY3RybCk7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCSAqLwogCiAJLyogQ2hlY2sgd2hldGhlciB0aGUgaXJxIGJlbG9uZ3MgdG8gbWUgKi8KLQllbmFibGVkID0gcmVnLmNudDFfZW5hbGJlZCB8IHJlZy5jbnQyX2VuYWxiZWQ7CisJZW5hYmxlZCA9IHJlZy5jbnQxX2VuYWJsZWQgfCByZWcuY250Ml9lbmFibGVkOwogCWlmICghZW5hYmxlZCkKIAkJcmV0dXJuIElSUV9OT05FOwogCkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzYW1wbGVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGNvdW50ZXIxICYgTE9PTkdTT04yX1BFUkZDTlRfT1ZFUkZMT1cpIHsKLQkJaWYgKHJlZy5jbnQxX2VuYWxiZWQpCisJCWlmIChyZWcuY250MV9lbmFibGVkKQogCQkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCAwKTsKIAkJY291bnRlcjEgPSByZWcucmVzZXRfY291bnRlcjE7CiAJfQogCWlmIChjb3VudGVyMiAmIExPT05HU09OMl9QRVJGQ05UX09WRVJGTE9XKSB7Ci0JCWlmIChyZWcuY250Ml9lbmFsYmVkKQorCQlpZiAocmVnLmNudDJfZW5hYmxlZCkKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgMSk7CiAJCWNvdW50ZXIyID0gcmVnLnJlc2V0X2NvdW50ZXIyOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKaW5kZXggMTA5Yzk1Yy4uMzI1NDhiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKQEAgLTM4NSw2ICszODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgaW50cjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCXN0YXRpYyBjaGFyIHBjaWlycWZsYWc7CisJaW50IHJldDsKICNpZiBkZWZpbmVkKENPTkZJR19QTUNfTVNQNzEyMF9HVykgfHwgZGVmaW5lZChDT05GSUdfUE1DX01TUDcxMjBfRVZBTCkKIAl1bnNpZ25lZCBpbnQJdnBlX3N0YXR1czsKICNlbmRpZgpAQCAtNDAyLDExICs0MDMsMTMgQEAKIAkgKiBhbGxvY2F0aW9uIGFzc2lnbnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gdGhlIGludGVycnVwdC4KIAkgKi8KIAlpZiAocGNpaXJxZmxhZyA9PSAwKSB7Ci0JCXJlcXVlc3RfaXJxKE1TUF9JTlRfUENJLC8qIEhhcmRjb2RlZCBpbnRlcm5hbCBNU1A3MTIwIHdpcmluZyAqLworCQlyZXQgPSByZXF1ZXN0X2lycShNU1BfSU5UX1BDSSwvKiBIYXJkY29kZWQgaW50ZXJuYWwgTVNQNzEyMCB3aXJpbmcgKi8KIAkJCQlicGNpX2ludGVycnVwdCwKIAkJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCiAJCQkJIlBNQyBNU1AgUENJIEhvc3QiLAogCQkJCXByZWcpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OwogCQlwY2lpcnFmbGFnID0gfjA7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvcHJvbS5jIGIvYXJjaC9taXBzL3JiNTMyL3Byb20uYwppbmRleCA0NmNhMjRkLi5hZDViZDEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcmI1MzIvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogdm9pZCBfX2luaXQgcHJvbV9zZXR1cF9jbWRsaW5lKHZvaWQpCiB7Ci0JY2hhciBjbWRfbGluZVtDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBjbWRfbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOwogCWNoYXIgKmNwLCAqYm9hcmQ7CiAJaW50IHByb21fYXJnYzsKIAljaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMKaW5kZXggOWFhOGYyOS4uYzY4NTFkZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCVJFTU9URV9IVUJfU0VORF9JTlRSKENPTVBBQ1RfVE9fTkFTSURfTk9ERUlEKGNwdV90b19ub2RlKGRlc3RpZCkpLCBpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBpcDI3X3NlbmRfaXBpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgYWN0aW9uKQorc3RhdGljIHZvaWQgaXAyN19zZW5kX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgYWN0aW9uKQogewogCXVuc2lnbmVkIGludCBpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwppbmRleCA2ZDBlNTlmLi5kNjgwMmQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBzdHJ1Y3QgaXJxYWN0aW9uIGh1Yl9ydF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBodWJfcnRfY291bnRlcl9oYW5kbGVyLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImh1Yi1ydCIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKaW5kZXggYmE1OTgzOS4uNDA3MDI2OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwpAQCAtMTE3LDEwICsxMTcsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGlycV9kaXJ0eTsKIAotCWlmIChjcHVtYXNrX3dlaWdodChtYXNrKSAhPSAxKSB7Ci0JCXByaW50aygiYXR0ZW1wdGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgZm9yIGlycSAlZCB0byBtdWx0aXBsZSBDUFVzXG4iLCBpcnEpOwotCQlyZXR1cm4gLTE7Ci0JfQogCWkgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwogCiAJLyogQ29udmVydCBsb2dpY2FsIENQVSB0byBwaHlzaWNhbCBDUFUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKaW5kZXggNjM3YTE5NC4uMTVlYTc3OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKQEAgLTQwMywzNiArNDAzLDMxIEBACiBzdGF0aWMgaW50IHNicHJvZl90Yl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBtaW5vcjsKLQlpbnQgZXJyID0gMDsKIAotCWxvY2tfa2VybmVsKCk7CiAJbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWlmIChtaW5vciAhPSAwKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAobWlub3IgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoeGNoZygmc2JwLm9wZW4sIFNCX09QRU5JTkcpICE9IFNCX0NMT1NFRCkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoeGNoZygmc2JwLm9wZW4sIFNCX09QRU5JTkcpICE9IFNCX0NMT1NFRCkKKwkJcmV0dXJuIC1FQlVTWTsKIAogCW1lbXNldCgmc2JwLCAwLCBzaXplb2Yoc3RydWN0IHNicHJvZl90YikpOwogCXNicC5zYnByb2ZfdGJidWYgPSB2bWFsbG9jKE1BWF9UQlNBTVBMRV9CWVRFUyk7CiAJaWYgKCFzYnAuc2Jwcm9mX3RiYnVmKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCQlzYnAub3BlbiA9IFNCX0NMT1NFRDsKKwkJd21iKCk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KKwogCW1lbXNldChzYnAuc2Jwcm9mX3RiYnVmLCAwLCBNQVhfVEJTQU1QTEVfQllURVMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNicC50Yl9zeW5jKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzYnAudGJfcmVhZCk7CiAJbXV0ZXhfaW5pdCgmc2JwLmxvY2spOwogCiAJc2JwLm9wZW4gPSBTQl9PUEVOOworCXdtYigpOwogCi0gIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYnByb2ZfdGJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTQ0MCw3ICs0MzUsNyBAQAogCWludCBtaW5vcjsKIAogCW1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQlpZiAobWlub3IgIT0gMCB8fCAhc2JwLm9wZW4pCisJaWYgKG1pbm9yICE9IDAgfHwgc2JwLm9wZW4gIT0gU0JfQ0xPU0VEKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnNicC5sb2NrKTsKQEAgLTQ0OSw3ICs0NDQsOCBAQAogCQlzYnByb2ZfemJwcm9mX3N0b3AoKTsKIAogCXZmcmVlKHNicC5zYnByb2ZfdGJidWYpOwotCXNicC5vcGVuID0gMDsKKwlzYnAub3BlbiA9IFNCX0NMT1NFRDsKKwl3bWIoKTsKIAogCW11dGV4X3VubG9jaygmc2JwLmxvY2spOwogCkBAIC01ODMsNyArNTc5LDggQEAKIAl9CiAJdGJfZGV2ID0gZGV2OwogCi0Jc2JwLm9wZW4gPSAwOworCXNicC5vcGVuID0gU0JfQ0xPU0VEOworCXdtYigpOwogCXRiX3BlcmlvZCA9IHpiYnVzX21oeiAqIDEwMDAwTEw7CiAJcHJfaW5mbyhERVZOQU1FICI6IGluaXRpYWxpemVkIC0gdGJfcGVyaW9kID0gJWxsZFxuIiwKIAkJKGxvbmcgbG9uZykgdGJfcGVyaW9kKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYwppbmRleCA2MjNmZmM5Li41Mjc3YWFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJYnJlYWs7CiAJfQogCXRzLT50dl9zZWMgPSBzZWM7Ci0JdHYtPnR2X25zZWMgPSAwOworCXRzLT50dl9uc2VjID0gMDsKIH0KIAogaW50IHJ0Y19taXBzX3NldF90aW1lKHVuc2lnbmVkIGxvbmcgc2VjKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS90aW1lLmMgYi9hcmNoL21pcHMvc25pL3RpbWUuYwppbmRleCA2MmRmNmE1Li5mM2I2MGU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3RpbWUuYworKysgYi9hcmNoL21pcHMvc25pL3RpbWUuYwpAQCAtNjcsNyArNjcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBhMjByX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IGEyMHJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImEyMHItdGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCmluZGV4IGM4NjA4MTAuLmQ2NjgwMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKQEAgLTg1LDcgKzg1LDcgQEAKIHN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKIAlpZiAoIXN0cmNtcChpZCwgInNwaS1iYXNlY2xrIikpCi0JCXJldHVybiAoc3RydWN0IGNsayAqKSgodW5zaWduZWQgbG9uZyl0eHg5X2didXNfY2xvY2sgLyAyIC8gNCk7CisJCXJldHVybiAoc3RydWN0IGNsayAqKSgodW5zaWduZWQgbG9uZyl0eHg5X2didXNfY2xvY2sgLyAyIC8gMik7CiAJaWYgKCFzdHJjbXAoaWQsICJpbWJ1c19jbGsiKSkKIAkJcmV0dXJuIChzdHJ1Y3QgY2xrICopKCh1bnNpZ25lZCBsb25nKXR4eDlfZ2J1c19jbG9jayAvIDIpOwogCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJaW50IGFyZ2M7CiAJaW50ICphcmd2MzI7CiAJaW50IGk7CQkJLyogQWx3YXlzIGlnbm9yZSB0aGUgIi1jIiBhdCBhcmd2WzBdICovCi0JY2hhciBidWlsdGluW0NMX1NJWkVdOworCXN0YXRpYyBjaGFyIGJ1aWx0aW5bQ0xfU0laRV0gX19pbml0ZGF0YTsKIAogCWlmIChmd19hcmcwID49IENLU0VHMCB8fCBmd19hcmcxIDwgQ0tTRUcwKSB7CiAJCS8qCkBAIC0zMTUsNyArMzE1LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHByZXByb2Nlc3NfY21kbGluZSh2b2lkKQogewotCWNoYXIgY21kbGluZVtDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBjbWRsaW5lW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAJY2hhciAqczsKIAogCXN0cmNweShjbWRsaW5lLCBhcmNzX2NtZGxpbmUpOwpAQCAtODE3LDcgKzgxNyw4IEBACiBvdXRfcGRldjoKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogb3V0X2dwaW86Ci0JZ3Bpb19yZW1vdmUoJmlvY2xlZC0+Y2hpcCk7CisJaWYgKGdwaW9jaGlwX3JlbW92ZSgmaW9jbGVkLT5jaGlwKSkKKwkJcmV0dXJuOwogb3V0X3VubWFwOgogCWlvdW5tYXAoaW9jbGVkLT5tbWlvYWRkcik7CiBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDhhM2E0ZGQuLjE2N2UxMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMTI5LDQyICsxMjksNDcgQEAKIHN0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CiAjZGVmaW5lIF9fbSh4KSAoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoeCkpCiAKLSNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgsIHB0ciwgc2l6ZSkJXAotKHsJCQkJCQlcCi0JX190eXBlb2YoKihwdHIpKSBfX2d1X3ZhbDsJCVwKLQl1bnNpZ25lZCBsb25nIF9fZ3VfYWRkcjsJCVwKLQlpbnQgX19ndV9lcnI7CQkJCVwKLQlfX2d1X2FkZHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CVwKLQlzd2l0Y2ggKHNpemUpIHsJCQkJXAotCWNhc2UgMTogIF9fZ2V0X3VzZXJfYXNtKCJidSIpOyBicmVhazsJXAotCWNhc2UgMjogIF9fZ2V0X3VzZXJfYXNtKCJodSIpOyBicmVhazsJXAotCWNhc2UgNDogIF9fZ2V0X3VzZXJfYXNtKCIiICApOyBicmVhazsJXAotCWRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsJXAotCX0JCQkJCVwKLQl4ID0gKF9fdHlwZW9mX18oKihwdHIpKSkgX19ndV92YWw7CVwKLQlfX2d1X2VycjsJCQkJXAorI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfYWRkcjsJCQkJCVwKKwlpbnQgX19ndV9lcnI7CQkJCQkJCVwKKwlfX2d1X2FkZHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMTogewkJCQkJCQlcCisJCXVuc2lnbmVkIGNoYXIgX19ndV92YWw7CQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKCJidSIpOwkJCQkJXAorCQkoeCkgPSAqKF9fZm9yY2UgX190eXBlb2ZfXygqKHB0cikpKikgJl9fZ3VfdmFsOwkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwljYXNlIDI6IHsJCQkJCQkJXAorCQl1bnNpZ25lZCBzaG9ydCBfX2d1X3ZhbDsJCQkJXAorCQlfX2dldF91c2VyX2FzbSgiaHUiKTsJCQkJCVwKKwkJKHgpID0gKihfX2ZvcmNlIF9fdHlwZW9mX18oKihwdHIpKSopICZfX2d1X3ZhbDsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJY2FzZSA0OiB7CQkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9fZ3VfdmFsOwkJCQkJXAorCQlfX2dldF91c2VyX2FzbSgiIik7CQkJCQlcCisJCSh4KSA9ICooX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkqKSAmX19ndV92YWw7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl91bmtub3duKCk7CQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCiB9KQogCi0jZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCwgcHRyLCBzaXplKQkJCVwKLSh7CQkJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX19ndV92YWw7CQkJXAotCXVuc2lnbmVkIGxvbmcgX19ndV9hZGRyOwkJCVwKLQlpbnQgX19ndV9lcnI7CQkJCQlcCi0JX19ndV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIChwdHIpOwkJXAotCWlmIChsaWtlbHkoX19hY2Nlc3Nfb2soX19ndV9hZGRyLHNpemUpKSkgewlcCi0JCXN3aXRjaCAoc2l6ZSkgewkJCQlcCi0JCWNhc2UgMTogIF9fZ2V0X3VzZXJfYXNtKCJidSIpOyBicmVhazsJXAotCQljYXNlIDI6ICBfX2dldF91c2VyX2FzbSgiaHUiKTsgYnJlYWs7CVwKLQkJY2FzZSA0OiAgX19nZXRfdXNlcl9hc20oIiIgICk7IGJyZWFrOwlcCi0JCWRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsJXAotCQl9CQkJCQlcCi0JfQkJCQkJCVwKLQllbHNlIHsJCQkJCQlcCi0JCV9fZ3VfZXJyID0gLUVGQVVMVDsJCQlcCi0JCV9fZ3VfdmFsID0gMDsJCQkJXAotCX0JCQkJCQlcCi0JeCA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwkJXAotCV9fZ3VfZXJyOwkJCQkJXAorI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgsIHB0ciwgc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfZTsJCQkJCQkJCVwKKwlpZiAobGlrZWx5KF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKSAocHRyKSwgKHNpemUpKSkpCQlcCisJCV9lID0gX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwgKHB0ciksIChzaXplKSk7CQlcCisJZWxzZSB7CQkJCQkJCQlcCisJCV9lID0gLUVGQVVMVDsJCQkJCQlcCisJCSh4KSA9IChfX3R5cGVvZl9fKHgpKTA7CQkJCQlcCisJfQkJCQkJCQkJXAorCV9lOwkJCQkJCQkJXAogfSkKIAogI2RlZmluZSBfX2dldF91c2VyX2FzbShJTlNOKQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDc2ZjQxYmQuLjEwNTQ5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQ0LDI0ICs0NCw4IEBACiAgIFJPX0RBVEEoUEFHRV9TSVpFKQogCiAgIC8qIHdyaXRlYWJsZSAqLwotICAuZGF0YSA6IHsJCQkvKiBEYXRhICovCi0JREFUQV9EQVRBCi0JQ09OU1RSVUNUT1JTCi0JfQotCi0gIC5kYXRhX25vc2F2ZSA6IHsgTk9TQVZFX0RBVEE7IH0KLQotICAuZGF0YS5wYWdlX2FsaWduZWQgOiB7IFBBR0VfQUxJR05FRF9EQVRBKFBBR0VfU0laRSk7IH0KLSAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7IENBQ0hFTElORV9BTElHTkVEX0RBVEEoMzIpOyB9Ci0KLSAgLyogcmFyZWx5IGNoYW5nZWQgZGF0YSBsaWtlIGNwdSBtYXBzICovCi0gIC4gPSBBTElHTigzMik7Ci0gIC5kYXRhLnJlYWRfbW9zdGx5IDogQVQoQUREUiguZGF0YS5yZWFkX21vc3RseSkpIHsKLQlSRUFEX01PU1RMWV9EQVRBKDMyKTsKLQlfZWRhdGEgPSAuOwkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwotICB9Ci0KLSAgLmRhdGEuaW5pdF90YXNrIDogeyBJTklUX1RBU0tfREFUQShUSFJFQURfU0laRSk7IH0KKyAgUldfREFUQV9TRUNUSU9OKDMyLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQorICBfZWRhdGEgPSAuOwogCiAgIC8qIG1pZ2h0IGdldCBmcmVlZCBhZnRlciBpbml0ICovCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwpAQCAtNzQsMjIgKzU4LDggQEAKICAgLyogd2lsbCBiZSBmcmVlZCBhZnRlciBpbml0ICovCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwkJLyogSW5pdCBjb2RlIGFuZCBkYXRhICovCiAgIF9faW5pdF9iZWdpbiA9IC47Ci0gIC5pbml0LnRleHQgOiB7Ci0JX3Npbml0dGV4dCA9IC47Ci0JSU5JVF9URVhUOwotCV9laW5pdHRleHQgPSAuOwotICB9Ci0gIC5pbml0LmRhdGEgOiB7IElOSVRfREFUQTsgfQotICAuc2V0dXAuaW5pdCA6IHsgSU5JVF9TRVRVUCgxNik7IH0KLQotICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLSAgLmluaXRjYWxsLmluaXQgOiB7Ci0JSU5JVENBTExTCi0gIH0KLSAgX19pbml0Y2FsbF9lbmQgPSAuOwotICAuY29uX2luaXRjYWxsLmluaXQgOiB7IENPTl9JTklUQ0FMTDsgfQotCi0gIFNFQ1VSSVRZX0lOSVQKKyAgSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQorICBJTklUX0RBVEFfU0VDVElPTigxNikKICAgLiA9IEFMSUdOKDQpOwogICBfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOwogICAuYWx0aW5zdHJ1Y3Rpb25zIDogeyAqKC5hbHRpbnN0cnVjdGlvbnMpIH0KQEAgLTEwMCw4ICs3MCw2IEBACiAJLmV4aXQudGV4dCA6IHsgRVhJVF9URVhUOyB9CiAJLmV4aXQuZGF0YSA6IHsgRVhJVF9EQVRBOyB9CiAKLSAgLmluaXQucmFtZnMgOiB7IElOSVRfUkFNX0ZTOyB9Ci0KICAgUEVSQ1BVKDMyKQogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2VuZCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzAzL2luY2x1ZGUvdW5pdC9jbG9jay5oIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwMy9pbmNsdWRlL3VuaXQvY2xvY2suaAppbmRleCA4YjQ1MGU5Li4yYTBiZjc5IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzAzL2luY2x1ZGUvdW5pdC9jbG9jay5oCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDMvaW5jbHVkZS91bml0L2Nsb2NrLmgKQEAgLTIwLDkgKzIwLDkgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1uMTAzMDBfaW9iY2xrOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW4xMDMwMF90c2NfcGVyX0haOwogCi0jZGVmaW5lIE1OMTAzMDBfSU9DTEsJCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX2lvY2xrKQorI2RlZmluZSBNTjEwMzAwX0lPQ0xLCQltbjEwMzAwX2lvY2xrCiAvKiBJZiB0aGlzIHByb2Nlc3NvcnMgaGFzIGEgYW5vdGhlciBjbG9jaywgdW5jb21tZW50IHRoZSBiZWxvdy4gKi8KLS8qICNkZWZpbmUgTU4xMDMwMF9JT0JDTEsJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfaW9iY2xrKSAqLworLyogI2RlZmluZSBNTjEwMzAwX0lPQkNMSwltbjEwMzAwX2lvYmNsayAqLwogCiAjZWxzZSAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCiAKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgTU4xMDMwMF9UU0NDTEsJCU1OMTAzMDBfSU9DTEsKIAogI2lmZGVmIENPTkZJR19NTjEwMzAwX1JUQwotI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfdHNjX3Blcl9IWikKKyNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCW1uMTAzMDBfdHNjX3Blcl9IWgogI2Vsc2UgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwogI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJKE1OMTAzMDBfVFNDQ0xLL0haKQogI2VuZGlmIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L2Nsb2NrLmggYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L2luY2x1ZGUvdW5pdC9jbG9jay5oCmluZGV4IDdkNTE0ODQuLjY3YmUzZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L2Nsb2NrLmgKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvY2xvY2suaApAQCAtMjAsOSArMjAsOSBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW4xMDMwMF9pb2JjbGs7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtbjEwMzAwX3RzY19wZXJfSFo7CiAKLSNkZWZpbmUgTU4xMDMwMF9JT0NMSwkJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfaW9jbGspCisjZGVmaW5lIE1OMTAzMDBfSU9DTEsJCW1uMTAzMDBfaW9jbGsKIC8qIElmIHRoaXMgcHJvY2Vzc29ycyBoYXMgYSBhbm90aGVyIGNsb2NrLCB1bmNvbW1lbnQgdGhlIGJlbG93LiAqLwotLyogI2RlZmluZSBNTjEwMzAwX0lPQkNMSwkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF9pb2JjbGspICovCisvKiAjZGVmaW5lIE1OMTAzMDBfSU9CQ0xLCW1uMTAzMDBfaW9iY2xrICovCiAKICNlbHNlIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KIApAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBNTjEwMzAwX1RTQ0NMSwkJTU4xMDMwMF9JT0NMSwogCiAjaWZkZWYgQ09ORklHX01OMTAzMDBfUlRDCi0jZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF90c2NfcGVyX0haKQorI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJbW4xMDMwMF90c2NfcGVyX0haCiAjZWxzZSAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCiAjZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgkoTU4xMDMwMF9UU0NDTEsvSFopCiAjZW5kaWYgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggZjM4OGRjNi4uNTI0ZDkzNSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC0xOCw2ICsxOCw3IEBACiAJc2VsZWN0IEJVRwogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQgaWYgITY0QklUCisJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKIAloZWxwCiAJICBUaGUgUEEtUklTQyBtaWNyb3Byb2Nlc3NvciBpcyBkZXNpZ25lZCBieSBIZXdsZXR0LVBhY2thcmQgYW5kIHVzZWQKIAkgIGluIG1hbnkgb2YgdGhlaXIgd29ya3N0YXRpb25zICYgc2VydmVycyAoSFA5MDAwIDcwMCBhbmQgODAwIHNlcmllcywKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mY250bC5oCmluZGV4IDVmMzlkNTUuLjFlMWM4MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmNudGwuaApAQCAtMjgsOCArMjgsNiBAQAogI2RlZmluZSBGX1NFVE9XTgkxMgkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfU0VUU0lHCTEzCS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRTSUcJMTQJLyogIGZvciBzb2NrZXRzLiAqLwotI2RlZmluZSBGX0dFVE9XTl9FWAkxNQotI2RlZmluZSBGX1NFVE9XTl9FWAkxNgogCiAvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLwogI2RlZmluZSBGX1JETENLCQkwMQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCBkZTNmZTNhLi42ZmVjNGQ0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMjEsOSArMjEsOSBAQAogI2RlZmluZSBLRVJORUxfTUFQX0VORAkJKFRNUEFMSUFTX01BUF9TVEFSVCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkICp2bWFsbG9jX3N0YXJ0OworZXh0ZXJuIHZvaWQgKnBhcmlzY192bWFsbG9jX3N0YXJ0OwogI2RlZmluZSBQQ1hMX0RNQV9NQVBfU0laRQkoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJCSgodW5zaWduZWQgbG9uZyl2bWFsbG9jX3N0YXJ0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoKHVuc2lnbmVkIGxvbmcpcGFyaXNjX3ZtYWxsb2Nfc3RhcnQpCiAjZGVmaW5lIFZNQUxMT0NfRU5ECQkoS0VSTkVMX01BUF9FTkQpCiAjZW5kaWYgLypfX0FTU0VNQkxZX18qLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggY2U5MzEzMy4uMGQ2ODE4NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEsMjkgKzEsMTEgQEAKIC8qIGhhcmRpcnEuaDogUEEtUklTQyBoYXJkIElSUSBzdXBwb3J0LgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBNYXR0aGV3IFdpbGNveCA8bWF0dGhld0B3aWwuY3g+Ci0gKgotICogVGhlIGxvY2tpbmcgaXMgcmVhbGx5IHF1aXRlIGludGVyZXN0aW5nLiAgVGhlcmUncyBhIGNwdS1sb2NhbAotICogY291bnQgb2YgaG93IG1hbnkgaW50ZXJydXB0cyBhcmUgYmVpbmcgaGFuZGxlZCwgYW5kIGEgZ2xvYmFsCi0gKiBsb2NrLiAgQW4gaW50ZXJydXB0IGNhbiBvbmx5IGJlIHNlcnZpY2VkIGlmIHRoZSBnbG9iYWwgbG9jawotICogaXMgZnJlZS4gIFlvdSBjYW4ndCBiZSBzdXJlIG5vIG1vcmUgaW50ZXJydXB0cyBhcmUgYmVpbmcKLSAqIHNlcnZpY2VkIHVudGlsIHlvdSd2ZSBhY3F1aXJlZCB0aGUgbG9jayBhbmQgdGhlbiBjaGVja2VkCi0gKiBhbGwgdGhlIHBlci1jcHUgaW50ZXJydXB0IGNvdW50cyBhcmUgYWxsIHplcm8uICBJdCdzIGEgc3BlY2lhbGlzZWQKLSAqIGJyX2xvY2ssIGFuZCB0aGF0J3MgZXhhY3RseSBob3cgU3BhcmMgZG9lcyBpdC4gIFdlIGRvbid0IGJlY2F1c2UKLSAqIGl0J3MgbW9yZSBsb2NraW5nIGZvciB1cy4gIFRoaXMgd2F5IGlzIGxvY2stZnJlZSBpbiB0aGUgaW50ZXJydXB0IHBhdGguCiAgKi8KIAogI2lmbmRlZiBfUEFSSVNDX0hBUkRJUlFfSAogI2RlZmluZSBfUEFSSVNDX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBfX3NvZnRpcnFfcGVuZGluZzsgLyogc2V0X2JpdCBpcyB1c2VkIG9uIHRoaXMgKi8KLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLwotCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KIAogI2VuZGlmIC8qIF9QQVJJU0NfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDMwMmY2OGQuLmFlYWQ0MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC01OSw4ICs1OSwxMSBAQAogI2RlZmluZSB1c2VyX21vZGUocmVncykJCQkoKChyZWdzKS0+aWFvcVswXSAmIDMpID8gMSA6IDApCiAjZGVmaW5lIHVzZXJfc3BhY2UocmVncykJCSgoKHJlZ3MpLT5pYXNxWzFdICE9IDApID8gMSA6IDApCiAjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykJKChyZWdzKS0+aWFvcVswXSAmIH4zKQorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+Z3JbMzBdKQogdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOwotI2VuZGlmCisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJkZmQyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMCwwICsxLDQwIEBACisvKiBzeXNjYWxsLmggKi8KKworI2lmbmRlZiBfQVNNX1BBUklTQ19TWVNDQUxMX0hfCisjZGVmaW5lIF9BU01fUEFSSVNDX1NZU0NBTExfSF8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPmdyWzIwXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaSwKKwkJCQkJIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBsb25nICphcmdzKQoreworCUJVR19PTihpKTsKKworCXN3aXRjaCAobikgeworCWNhc2UgNjoKKwkJYXJnc1s1XSA9IHJlZ3MtPmdyWzIxXTsKKwljYXNlIDU6CisJCWFyZ3NbNF0gPSByZWdzLT5nclsyMl07CisJY2FzZSA0OgorCQlhcmdzWzNdID0gcmVncy0+Z3JbMjNdOworCWNhc2UgMzoKKwkJYXJnc1syXSA9IHJlZ3MtPmdyWzI0XTsKKwljYXNlIDI6CisJCWFyZ3NbMV0gPSByZWdzLT5nclsyNV07CisJY2FzZSAxOgorCQlhcmdzWzBdID0gcmVncy0+Z3JbMjZdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKKyNlbmRpZiAvKl9BU01fUEFSSVNDX1NZU0NBTExfSF8qLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggYWM3NzVhNy4uN2VjYzEwMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0zMiw2ICszMiwxMSBAQAogI2RlZmluZSBpbml0X3RocmVhZF9pbmZvICAgICAgICAoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCiAjZGVmaW5lIGluaXRfc3RhY2sgICAgICAgICAgICAgIChpbml0X3RocmVhZF91bmlvbi5zdGFjaykKIAorLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KKyNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCSgoc3RydWN0IHRocmVhZF9pbmZvICopbWZjdGwoMzApKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFkgKi8KKwogLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KIAogI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiAgICAgICAgICAgIDIKQEAgLTQwLDExICs0NSw2IEBACiAjZGVmaW5lIFRIUkVBRF9TSVpFICAgICAgICAgICAgIChQQUdFX1NJWkUgPDwgVEhSRUFEX1NJWkVfT1JERVIpCiAjZGVmaW5lIFRIUkVBRF9TSElGVCAgICAgICAgICAgIChQQUdFX1NISUZUICsgVEhSRUFEX1NJWkVfT1JERVIpCiAKLS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCi0jZGVmaW5lIGN1cnJlbnRfdGhyZWFkX2luZm8oKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKW1mY3RsKDMwKSkKLQotI2VuZGlmIC8qICFfX0FTU0VNQkxZICovCi0KICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkVfQklUCTI4CiAjZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkoMSA8PCBQUkVFTVBUX0FDVElWRV9CSVQpCiAKQEAgLTYwLDYgKzYwLDggQEAKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2F2ZWQgc2lnbmFsIG1hc2sgKi8KICNkZWZpbmUgVElGX0ZSRUVaRQkJNwkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQk4CS8qIGNhbGxiYWNrIGJlZm9yZSByZXR1cm5pbmcgdG8gdXNlciAqLworI2RlZmluZSBUSUZfU0lOR0xFU1RFUAkJOQkvKiBzaW5nbGUgc3RlcHBpbmc/ICovCisjZGVmaW5lIFRJRl9CTE9DS1NURVAJCTEwCS8qIGJyYW5jaCBzdGVwcGluZz8gKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCkBAIC02OSw2ICs3MSw4IEBACiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfRlJFRVpFCQkoMSA8PCBUSUZfRlJFRVpFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDEgPDwgVElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDEgPDwgVElGX1NJTkdMRVNURVApCisjZGVmaW5lIF9USUZfQkxPQ0tTVEVQCQkoMSA8PCBUSUZfQkxPQ0tTVEVQKQogCiAjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sgICAgIChfVElGX1NJR1BFTkRJTkcgfCBfVElGX05PVElGWV9SRVNVTUUgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVElGX05FRURfUkVTQ0hFRCB8IF9USUZfUkVTVE9SRV9TSUdNQVNLKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA2OTljZjhlLi5mY2QzYzcwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMjcwLDggKzI3MCw4IEBACiAJREVGSU5FKERUTEJfT0ZGX0NPVU5ULCBvZmZzZXRvZihzdHJ1Y3QgcGRjX2NhY2hlX2luZm8sIGR0X29mZl9jb3VudCkpOwogCURFRklORShEVExCX0xPT1AsIG9mZnNldG9mKHN0cnVjdCBwZGNfY2FjaGVfaW5mbywgZHRfbG9vcCkpOwogCUJMQU5LKCk7Ci0JREVGSU5FKFBBX0JMT0NLU1RFUF9CSVQsIDMxLVBUX0JMT0NLU1RFUF9CSVQpOwotCURFRklORShQQV9TSU5HTEVTVEVQX0JJVCwgMzEtUFRfU0lOR0xFU1RFUF9CSVQpOworCURFRklORShUSUZfQkxPQ0tTVEVQX1BBX0JJVCwgMzEtVElGX0JMT0NLU1RFUCk7CisJREVGSU5FKFRJRl9TSU5HTEVTVEVQX1BBX0JJVCwgMzEtVElGX1NJTkdMRVNURVApOwogCUJMQU5LKCk7CiAJREVGSU5FKEFTTV9QTURfU0hJRlQsIFBNRF9TSElGVCk7CiAJREVGSU5FKEFTTV9QR0RJUl9TSElGVCwgUEdESVJfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwppbmRleCA4YzQ3MTJiLi4zYTQ0ZjdmIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwpAQCAtMjA0NywxMiArMjA0NywxMyBAQAogCWIsbiAgICAgc3lzY2FsbF9jaGVja19zaWcKIAogc3lzY2FsbF9yZXN0b3JlOgotCS8qIEFyZSB3ZSBiZWluZyBwdHJhY2VkPyAqLwogCUxEUkVHCVRJX1RBU0stVEhSRUFEX1NaX0FMR04tRlJBTUVfU0laRSglcjMwKSwlcjEKIAotCWxkdwlUQVNLX1BUUkFDRSglcjEpLCAlcjE5Ci0JYmIsPAklcjE5LDMxLHN5c2NhbGxfcmVzdG9yZV9yZmkKLQlub3AKKwkvKiBBcmUgd2UgYmVpbmcgcHRyYWNlZD8gKi8KKwlsZHcJVEFTS19GTEFHUyglcjEpLCVyMTkKKwlsZGkJKF9USUZfU0lOR0xFU1RFUHxfVElGX0JMT0NLU1RFUCksJXIyCisJYW5kLENPTkQoPSkJJXIxOSwlcjIsJXIwCisJYixuCXN5c2NhbGxfcmVzdG9yZV9yZmkKIAogCWxkbwlUQVNLX1BUX0ZSMzEoJXIxKSwlcjE5CQkgICAvKiByZWxvYWQgZnByZWdzICovCiAJcmVzdF9mcAklcjE5CkBAIC0yMTEzLDE2ICsyMTE0LDE2IEBACiAJbGRpCTB4MGIsJXIyMAkJCSAgIC8qIENyZWF0ZSBuZXcgUFNXICovCiAJZGVwaQktMSwxMywxLCVyMjAJCQkgICAvKiBDLCBRLCBELCBhbmQgSSBiaXRzICovCiAKLQkvKiBUaGUgdmFsdWVzIG9mIFBBX1NJTkdMRVNURVBfQklUIGFuZCBQQV9CTE9DS1NURVBfQklUIGFyZQotCSAqIHNldCBpbiBpbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGFuZCBjb252ZXJ0ZWQgdG8gUEEgYml0bWFwCisJLyogVGhlIHZhbHVlcyBvZiBTSU5HTEVTVEVQX0JJVCBhbmQgQkxPQ0tTVEVQX0JJVCBhcmUKKwkgKiBzZXQgaW4gdGhyZWFkX2luZm8uaCBhbmQgY29udmVydGVkIHRvIFBBIGJpdG1hcAogCSAqIG51bWJlcnMgaW4gYXNtLW9mZnNldHMuYyAqLwogCi0JLyogaWYgKCglcjE5LlBBX1NJTkdMRVNURVBfQklUKSkgeyAlcjIwLjI3PTF9ICovCi0JZXh0cnUsPQklcjE5LFBBX1NJTkdMRVNURVBfQklULDEsJXIwCisJLyogaWYgKCglcjE5LlNJTkdMRVNURVBfQklUKSkgeyAlcjIwLjI3PTF9ICovCisJZXh0cnUsPQklcjE5LFRJRl9TSU5HTEVTVEVQX1BBX0JJVCwxLCVyMAogCWRlcGkJLTEsMjcsMSwlcjIwCQkJICAgLyogUiBiaXQgKi8KIAotCS8qIGlmICgoJXIxOS5QQV9CTE9DS1NURVBfQklUKSkgeyAlcjIwLjc9MX0gKi8KLQlleHRydSw9ICVyMTksUEFfQkxPQ0tTVEVQX0JJVCwxLCVyMAorCS8qIGlmICgoJXIxOS5CTE9DS1NURVBfQklUKSkgeyAlcjIwLjc9MX0gKi8KKwlleHRydSw9ICVyMTksVElGX0JMT0NLU1RFUF9QQV9CSVQsMSwlcjAKIAlkZXBpCS0xLDcsMSwlcjIwCQkJICAgLyogVCBiaXQgKi8KIAogCVNUUkVHCSVyMjAsVEFTS19QVF9QU1coJXIxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCmluZGV4IDMzMGY1MzYuLjJlNzYxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKQEAgLTQyMyw4ICs0MjMsMyBAQAogICAgICAgICBzZXRfZWllbShjcHVfZWllbSk7CS8qIEVJRU0gOiBlbmFibGUgYWxsIGV4dGVybmFsIGludHIgKi8KIAogfQotCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAidW5leHBlY3RlZCBJUlEgJWRcbiIsIGlycSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNjFlZTBlZS4uMjEyMDc0NiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwpAQCAtODkzLDcgKzg5Myw3IEBACiAJICogb3Vyc2VsdmVzICovCiAJZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CiAJCWlmKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCCi0JCSAgICYmIChzZWNoZHJzW2ldLnNoX3R5cGUgJiBTSEZfQUxMT0MpKSB7CisJCSAgICYmIChzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSkgewogCQkJaW50IHN0cmluZGV4ID0gc2VjaGRyc1tpXS5zaF9saW5rOwogCQkJLyogRklYTUU6IEFXRlVMIEhBQ0sKIAkJCSAqIFRoZSBjYXN0IGlzIHRvIGRyb3AgdGhlIGNvbnN0IGZyb20KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA5MjdkYjM2Li5jNGY0OWU0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpAQCAtMzUsNyArMzYsOCBAQAogICovCiB2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQl0YXNrLT5wdHJhY2UgJj0gfihQVF9TSU5HTEVTVEVQfFBUX0JMT0NLU1RFUCk7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9TSU5HTEVTVEVQKTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX0JMT0NLU1RFUCk7CiAKIAkvKiBtYWtlIHN1cmUgdGhlIHRyYXAgYml0cyBhcmUgbm90IHNldCAqLwogCXBhX3Bzdyh0YXNrKS0+ciA9IDA7CkBAIC01NSw4ICs1Nyw4IEBACiAKIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXRhc2stPnB0cmFjZSAmPSB+UFRfQkxPQ0tTVEVQOwotCXRhc2stPnB0cmFjZSB8PSBQVF9TSU5HTEVTVEVQOworCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfQkxPQ0tTVEVQKTsKKwlzZXRfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9TSU5HTEVTVEVQKTsKIAogCWlmIChwYV9wc3codGFzayktPm4pIHsKIAkJc3RydWN0IHNpZ2luZm8gc2k7CkBAIC05OCw4ICsxMDAsOCBAQAogCiB2b2lkIHVzZXJfZW5hYmxlX2Jsb2NrX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXRhc2stPnB0cmFjZSAmPSB+UFRfU0lOR0xFU1RFUDsKLQl0YXNrLT5wdHJhY2UgfD0gUFRfQkxPQ0tTVEVQOworCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfU0lOR0xFU1RFUCk7CisJc2V0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfQkxPQ0tTVEVQKTsKIAogCS8qIEVuYWJsZSB0YWtlbiBicmFuY2ggdHJhcC4gKi8KIAlwYV9wc3codGFzayktPnIgPSAwOwpAQCAtMjYzLDIyICsyNjUsMjAgQEAKIH0KICNlbmRpZgogCi0KLXZvaWQgc3lzY2FsbF90cmFjZSh2b2lkKQorbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCi0JCXJldHVybjsKLQlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKLQkJcmV0dXJuOwotCXB0cmFjZV9ub3RpZnkoU0lHVFJBUCB8ICgoY3VycmVudC0+cHRyYWNlICYgUFRfVFJBQ0VTWVNHT09EKQotCQkJCSA/IDB4ODAgOiAwKSk7Ci0JLyoKLQkgKiB0aGlzIGlzbid0IHRoZSBzYW1lIGFzIGNvbnRpbnVpbmcgd2l0aCBhIHNpZ25hbCwgYnV0IGl0IHdpbGwgZG8KLQkgKiBmb3Igbm9ybWFsIHVzZS4gIHN0cmFjZSBvbmx5IGNvbnRpbnVlcyB3aXRoIGEgc2lnbmFsIGlmIHRoZQotCSAqIHN0b3BwaW5nIHNpZ25hbCBpcyBub3QgU0lHVFJBUC4gIC1icmwKLQkgKi8KLQlpZiAoY3VycmVudC0+ZXhpdF9jb2RlKSB7Ci0JCXNlbmRfc2lnKGN1cnJlbnQtPmV4aXRfY29kZSwgY3VycmVudCwgMSk7Ci0JCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7Ci0JfQorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSAmJgorCSAgICB0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncykpCisJCXJldHVybiAtMUw7CisKKwlyZXR1cm4gcmVncy0+Z3JbMjBdOworfQorCit2b2lkIGRvX3N5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgc3RlcHBpbmcgPSB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSB8fAorCQl0ZXN0X3RocmVhZF9mbGFnKFRJRl9CTE9DS1NURVApOworCisJaWYgKHN0ZXBwaW5nIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQorCQl0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCBzdGVwcGluZyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggOGViM2M2My4uZTg0NjdlNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgpAQCAtMzQsNyArMzUsNiBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgInNpZ25hbDMyLmgiCiAjZW5kaWYKIApAQCAtNDY4LDYgKzQ2OCw5IEBACiAJCXNpZ2FkZHNldCgmY3VycmVudC0+YmxvY2tlZCxzaWcpOwogCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCXRyYWNlaG9va19zaWduYWxfaGFuZGxlcihzaWcsIGluZm8sIGthLCByZWdzLCAwKTsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwppbmRleCA1OWZjMWE0Li5mNWY5NjAyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKQEAgLTI4OCwxOCArMjg4LDIzIEBACiAJU1RSRUcJJXIxOCxQVF9HUjE4KCVyMikKIAkvKiBGaW5pc2hlZCBzYXZpbmcgdGhpbmdzIGZvciB0aGUgZGVidWdnZXIgKi8KIAotCWxkaWwJTCVzeXNjYWxsX3RyYWNlLCVyMQorCWNvcHkJJXIyLCVyMjYKKwlsZGlsCUwlZG9fc3lzY2FsbF90cmFjZV9lbnRlciwlcjEKIAlsZGlsCUwldHJhY2VzeXNfbmV4dCwlcjIKLQliZQlSJXN5c2NhbGxfdHJhY2UoJXNyNywlcjEpCisJYmUJUiVkb19zeXNjYWxsX3RyYWNlX2VudGVyKCVzcjcsJXIxKQogCWxkbwlSJXRyYWNlc3lzX25leHQoJXIyKSwlcjIKIAkKLXRyYWNlc3lzX25leHQ6CQordHJhY2VzeXNfbmV4dDoKKwkvKiBkb19zeXNjYWxsX3RyYWNlX2VudGVyIGVpdGhlciByZXR1cm5lZCB0aGUgc3lzY2FsbG5vLCBvciAtMUwsCisJICogIHNvIHdlIHNraXAgcmVzdG9yaW5nIHRoZSBQVF9HUjIwIGJlbG93LCBzaW5jZSB3ZSBwdWxsZWQgaXQgZnJvbQorCSAqICB0YXNrLT50aHJlYWQucmVncy5nclsyMF0gYWJvdmUuCisJICovCisJY29weQklcmV0MCwlcjIwCiAJbGRpbAlMJXN5c19jYWxsX3RhYmxlLCVyMQogCWxkbyAgICAgUiVzeXNfY2FsbF90YWJsZSglcjEpLCAlcjE5CiAKIAlsZG8gICAgIC1USFJFQURfU1pfQUxHTi1GUkFNRV9TSVpFKCVyMzApLCVyMSAgICAgIC8qIGdldCB0YXNrIHB0ciAqLwogCUxEUkVHCVRJX1RBU0soJXIxKSwgJXIxCi0JTERSRUcgICBUQVNLX1BUX0dSMjAoJXIxKSwgJXIyMAogCUxEUkVHICAgVEFTS19QVF9HUjI2KCVyMSksICVyMjYJCS8qIFJlc3RvcmUgdGhlIHVzZXJzIGFyZ3MgKi8KIAlMRFJFRyAgIFRBU0tfUFRfR1IyNSglcjEpLCAlcjI1CiAJTERSRUcgICBUQVNLX1BUX0dSMjQoJXIxKSwgJXIyNApAQCAtMzM2LDcgKzM0MSw4IEBACiAjaWZkZWYgQ09ORklHXzY0QklUCiAJbGRvCS0xNiglcjMwKSwlcjI5CQkJLyogUmVmZXJlbmNlIHBhcmFtIHNhdmUgYXJlYSAqLwogI2VuZGlmCi0JYmwJc3lzY2FsbF90cmFjZSwgJXIyCisJbGRvCVRBU0tfUkVHUyglcjEpLCVyMjYKKwlibAlkb19zeXNjYWxsX3RyYWNlX2V4aXQsJXIyCiAJU1RSRUcgICAlcjI4LFRBU0tfUFRfR1IyOCglcjEpICAgICAgICAgIC8qIHNhdmUgcmV0dXJuIHZhbHVlIG5vdyAqLwogCWxkbyAgICAgLVRIUkVBRF9TWl9BTEdOLUZSQU1FX1NJWkUoJXIzMCksJXIxICAgICAgLyogZ2V0IHRhc2sgcHRyICovCiAJTERSRUcJVElfVEFTSyglcjEpLCAlcjEKQEAgLTM1MywxMiArMzU5LDEyIEBACiAKIHRyYWNlc3lzX3NpZ2V4aXQ6CiAJbGRvICAgICAtVEhSRUFEX1NaX0FMR04tRlJBTUVfU0laRSglcjMwKSwlcjEgICAgICAvKiBnZXQgdGFzayBwdHIgKi8KLQlMRFJFRwkwKCVyMSksICVyMQorCUxEUkVHCVRJX1RBU0soJXIxKSwgJXIxCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJbGRvCS0xNiglcjMwKSwlcjI5CQkJLyogUmVmZXJlbmNlIHBhcmFtIHNhdmUgYXJlYSAqLwogI2VuZGlmCi0JYmwJc3lzY2FsbF90cmFjZSwgJXIyCi0Jbm9wCisJYmwJZG9fc3lzY2FsbF90cmFjZV9leGl0LCVyMgorCWxkbwlUQVNLX1JFR1MoJXIxKSwlcjI2CiAKIAlsZGlsCUwlc3lzY2FsbF9leGl0X3JmaSwlcjEKIAliZSxuCVIlc3lzY2FsbF9leGl0X3JmaSglc3I3LCVyMSkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYWVhMTc4NC4uZmRhNGJhYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogCQogLyogbGQgc2NyaXB0IHRvIG1ha2UgaHBwYSBMaW51eCBrZXJuZWwgKi8KICNpZm5kZWYgQ09ORklHXzY0QklUCkBAIC03NywxMyArNzgsNyBAQAogCSAqLwogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCWRhdGFfc3RhcnQgPSAuOwotCS4gPSBBTElHTigxNik7Ci0JLyogRXhjZXB0aW9uIHRhYmxlICovCi0JX19leF90YWJsZSA6IHsKLQkJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLQkJKihfX2V4X3RhYmxlKQotCQlfX3N0b3BfX19leF90YWJsZSA9IC47Ci0JfQorCUVYQ0VQVElPTl9UQUJMRSgxNikKIAogCU5PVEVTCiAKQEAgLTk0LDIzICs4OSw4IEBACiAJCV9fc3RvcF9fX3Vud2luZCA9IC47CiAJfQogCi0JLyogcmFyZWx5IGNoYW5nZWQgZGF0YSBsaWtlIGNwdSBtYXBzICovCi0JLiA9IEFMSUdOKDE2KTsKLQkuZGF0YS5yZWFkX21vc3RseSA6IHsKLQkJKiguZGF0YS5yZWFkX21vc3RseSkKLQl9Ci0KLQkuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwogCS8qIERhdGEgKi8KLQkuZGF0YSA6IHsKLQkJREFUQV9EQVRBCi0JCUNPTlNUUlVDVE9SUwotCX0KLQotCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7Ci0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0JfQorCVJXX0RBVEFfU0VDVElPTihMMV9DQUNIRV9CWVRFUywgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKIAogCS8qIFBBLVJJU0MgbG9ja3MgcmVxdWlyZXMgMTYtYnl0ZSBhbGlnbm1lbnQgKi8KIAkuID0gQUxJR04oMTYpOwpAQCAtMTE4LDE3ICs5OCw2IEBACiAJCSooLmRhdGEubG9ja19hbGlnbmVkKQogCX0KIAotCS8qIG5vc2F2ZSBkYXRhIGlzIHJlYWxseSBvbmx5IHVzZWQgZm9yIHNvZnR3YXJlIHN1c3BlbmQuLi5pdCdzIGhlcmUKLQkgKiBqdXN0IGluIGNhc2Ugd2UgZXZlciBpbXBsZW1lbnQgaXQKLQkgKi8KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQlfX25vc2F2ZV9iZWdpbiA9IC47Ci0JLmRhdGFfbm9zYXZlIDogewotCQkqKC5kYXRhLm5vc2F2ZSkKLQl9Ci0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JX19ub3NhdmVfZW5kID0gLjsKLQogCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIAlfZWRhdGEgPSAuOwogCkBAIC0xNDcsMTQgKzExNiw2IEBACiAJfQogCV9fYnNzX3N0b3AgPSAuOwogCi0KLQkvKiBhc3NlbWJsZXIgY29kZSBleHBlY3RzIGluaXRfdGFzayB0byBiZSAxNmsgYWxpZ25lZCAqLwotCS4gPSBBTElHTigxNjM4NCk7Ci0JLyogaW5pdF90YXNrICovCi0JLmRhdGEuaW5pdF90YXNrIDogewotCQkqKC5kYXRhLmluaXRfdGFzaykKLQl9Ci0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAkuID0gQUxJR04oMTYpOwogCS8qIExpbmthZ2UgdGFibGVzICovCkBAIC0xNzIsNjQgKzEzMywxNyBAQAogCS8qIHJlc2VydmUgc3BhY2UgZm9yIGludGVycnVwdCBzdGFjayBieSBhbGlnbmluZyBfX2luaXQqIHRvIDE2ayAqLwogCS4gPSBBTElHTigxNjM4NCk7CiAJX19pbml0X2JlZ2luID0gLjsKLQkuaW5pdC50ZXh0IDogeyAKLQkJX3Npbml0dGV4dCA9IC47Ci0JCUlOSVRfVEVYVAotCQlfZWluaXR0ZXh0ID0gLjsKLQl9Ci0JLmluaXQuZGF0YSA6IHsKLQkJSU5JVF9EQVRBCi0JfQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0JLmNvbl9pbml0Y2FsbC5pbml0IDogewotCQlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCQlfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQlTRUNVUklUWV9JTklUCi0KLQkvKiBhbHRlcm5hdGUgaW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQuICBUaGlzIGlzIGEgbWVjaGFuaXNtIHg4NiB1c2VzCi0JICogdG8gZGV0ZWN0IHRoZSBDUFUgdHlwZSBhbmQgcmVwbGFjZSBnZW5lcmljIGluc3RydWN0aW9uIHNlcXVlbmNlcwotCSAqIHdpdGggQ1BVIHNwZWNpZmljIG9uZXMuICBXZSBkb24ndCBjdXJyZW50bHkgZG8gdGhpcyBpbiBQQSwgYnV0Ci0JICogaXQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYS4uLgotCSAqLwotCS4gPSBBTElHTig0KTsKLQkuYWx0aW5zdHJ1Y3Rpb25zIDogewotCQlfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOwotCQkqKC5hbHRpbnN0cnVjdGlvbnMpCi0JCV9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOyAKLQl9IAotCS5hbHRpbnN0cl9yZXBsYWNlbWVudCA6IHsKLQkJKiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpCi0JfSAKLQotCS8qIC5leGl0LnRleHQgaXMgZGlzY2FyZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0byBkZWFsIHdpdGggcmVmZXJlbmNlcwotCSAqICBmcm9tIC5hbHRpbnN0cnVjdGlvbnMgYW5kIC5laF9mcmFtZQotCSAqLwotCS5leGl0LnRleHQgOiB7CisJSU5JVF9URVhUX1NFQ1RJT04oMTYzODQpCisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCisJLyogd2UgaGF2ZSB0byBkaXNjYXJkIGV4aXQgdGV4dCBhbmQgc3VjaCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lICovCisJLmV4aXQudGV4dCA6CisJewogCQlFWElUX1RFWFQKIAl9Ci0JLmV4aXQuZGF0YSA6IHsKKwkuZXhpdC5kYXRhIDoKKwl7CiAJCUVYSVRfREFUQQogCX0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuaW5pdC5yYW1mcyA6IHsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQlfX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLSNlbmRpZgogCiAJUEVSQ1BVKFBBR0VfU0laRSkKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCBkNWFjYTMxLi4xM2I2ZTNlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC00MzQsOCArNDM0LDggQEAKICNkZWZpbmUgU0VUX01BUF9PRkZTRVQoeCkgKCh2b2lkICopKCgodW5zaWduZWQgbG9uZykoeCkgKyBWTV9NQVBfT0ZGU0VUKSBcCiAJCQkJICAgICAmIH4oVk1fTUFQX09GRlNFVC0xKSkpCiAKLXZvaWQgKnZtYWxsb2Nfc3RhcnQgX19yZWFkX21vc3RseTsKLUVYUE9SVF9TWU1CT0wodm1hbGxvY19zdGFydCk7Cit2b2lkICpwYXJpc2Nfdm1hbGxvY19zdGFydCBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChwYXJpc2Nfdm1hbGxvY19zdGFydCk7CiAKICNpZmRlZiBDT05GSUdfUEExMQogdW5zaWduZWQgbG9uZyBwY3hsX2RtYV9zdGFydCBfX3JlYWRfbW9zdGx5OwpAQCAtNDk2LDEzICs0OTYsMTQgQEAKICNpZmRlZiBDT05GSUdfUEExMQogCWlmIChocHBhX2RtYV9vcHMgPT0gJnBjeGxfZG1hX29wcykgewogCQlwY3hsX2RtYV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKVNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7Ci0JCXZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChwY3hsX2RtYV9zdGFydCArIFBDWExfRE1BX01BUF9TSVpFKTsKKwkJcGFyaXNjX3ZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChwY3hsX2RtYV9zdGFydAorCQkJCQkJKyBQQ1hMX0RNQV9NQVBfU0laRSk7CiAJfSBlbHNlIHsKIAkJcGN4bF9kbWFfc3RhcnQgPSAwOwotCQl2bWFsbG9jX3N0YXJ0ID0gU0VUX01BUF9PRkZTRVQoTUFQX1NUQVJUKTsKKwkJcGFyaXNjX3ZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChNQVBfU1RBUlQpOwogCX0KICNlbHNlCi0Jdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7CisJcGFyaXNjX3ZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChNQVBfU1RBUlQpOwogI2VuZGlmCiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIHJlc2VydmVkLCAlZGsgZGF0YSwgJWRrIGluaXQpXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA0ZmQ0NzkwLi4yYmExNGU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMzg1LDkgKzM4NSwxNSBAQAogCiBjb25maWcgTk9ERVNfU0hJRlQKIAlpbnQKKwlkZWZhdWx0ICI4IiBpZiBQUEM2NAogCWRlZmF1bHQgIjQiCiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAKK2NvbmZpZyBNQVhfQUNUSVZFX1JFR0lPTlMKKwlpbnQKKwlkZWZhdWx0ICIyNTYiIGlmIFBQQzY0CisJZGVmYXVsdCAiMzIiCisKIGNvbmZpZyBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBQUEM2NApAQCAtNDA4LDYgKzQxNCwxMCBAQAogY29uZmlnIEFSQ0hfUE9QVUxBVEVTX05PREVfTUFQCiAJZGVmX2Jvb2wgeQogCitjb25maWcgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUworICAgICAgIGRlZl9ib29sIHkKKyAgICAgICBkZXBlbmRzIG9uIFBQQ19CT09LM1NfNjQKKwogc291cmNlICJtbS9LY29uZmlnIgogCiBjb25maWcgQVJDSF9NRU1PUllfUFJPQkUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQppbmRleCBhYWNmNjI5Li4xYTU0YTNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCkBAIC0xNjQsNiArMTY0LDE3IEBACiAKIGJvb3QgOj0gYXJjaC8kKEFSQ0gpL2Jvb3QKIAoraWZlcSAoJChDT05GSUdfUkVMT0NBVEFCTEUpLHkpCitxdWlldF9jbWRfcmVsb2NzX2NoZWNrID0gQ0FMTCAgICAkPAorICAgICAgY21kX3JlbG9jc19jaGVjayA9IHBlcmwgJDwgIiQoT0JKRFVNUCkiICIkKG9iaikvdm1saW51eCIKKworUEhPTlkgKz0gcmVsb2NzX2NoZWNrCityZWxvY3NfY2hlY2s6IGFyY2gvcG93ZXJwYy9yZWxvY3NfY2hlY2sucGwgdm1saW51eAorCSQoY2FsbCBjbWQscmVsb2NzX2NoZWNrKQorCit6SW1hZ2U6IHJlbG9jc19jaGVjaworZW5kaWYKKwogJChCT09UX1RBUkdFVFMpOiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgQVJDSD1wcGM2NCAkKGJ1aWxkKT0kKGJvb3QpICQocGF0c3Vic3QgJSwkKGJvb3QpLyUsJEApCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2FkZFJhbURpc2suYyBiL2FyY2gvcG93ZXJwYy9ib290L2FkZFJhbURpc2suYwppbmRleCBjMDJhOTk5Li44OTNmNDQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9hZGRSYW1EaXNrLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkUmFtRGlzay5jCkBAIC01OCw3ICs1OCw3IEBACiAKIAlyZXR1cm4gNjQ7CiB9Ci12b2lkIGdldDRrKEZJTEUgKmZpbGUsIGNoYXIgKmJ1ZiApCitzdGF0aWMgdm9pZCBnZXQ0ayhGSUxFICpmaWxlLCBjaGFyICpidWYgKQogewogCXVuc2lnbmVkIGo7CiAJdW5zaWduZWQgbnVtID0gZnJlYWQoYnVmLCAxLCA0MDk2LCBmaWxlKTsKQEAgLTY2LDEyICs2NiwxMiBAQAogCQlidWZbal0gPSAwOwogfQogCi12b2lkIHB1dDRrKEZJTEUgKmZpbGUsIGNoYXIgKmJ1ZiApCitzdGF0aWMgdm9pZCBwdXQ0ayhGSUxFICpmaWxlLCBjaGFyICpidWYgKQogewogCWZ3cml0ZShidWYsIDEsIDQwOTYsIGZpbGUpOwogfQogCi12b2lkIGRlYXRoKGNvbnN0IGNoYXIgKm1zZywgRklMRSAqZmRlc2MsIGNvbnN0IGNoYXIgKmZuYW1lKSAKK3N0YXRpYyB2b2lkIGRlYXRoKGNvbnN0IGNoYXIgKm1zZywgRklMRSAqZmRlc2MsIGNvbnN0IGNoYXIgKmZuYW1lKQogewogCWZwcmludGYoc3RkZXJyLCBtc2cpOwogCWZjbG9zZShmZGVzYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCmluZGV4IGNlZTgwODAuLmRkMzg2MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCkBAIC0yMTAsNyArMjEwLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKaW5kZXggNGMzNjE4Ni4uOGU5YmU2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKQEAgLTE5OSw3ICsxOTksNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJcnRjQDUwIHsKIAkJCQljb21wYXRpYmxlID0gImF0LDI0YzA4IjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCmluZGV4IGRlMzBiM2YuLjgyZmYyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwpAQCAtMjQ3LDcgKzI0Nyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjU2LDcgKzI1NSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAJCXNyYW1AODAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXNyYW0iOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwppbmRleCBkMTNjYjExLi5lNDVhNjNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwpAQCAtMjUxLDcgKzI1MSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI2MCw3ICsyNTksNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlzcmFtQDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwppbmRleCBlMjk3ZDhiLi4wYzM5MDJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwpAQCAtMjIzLDcgKzIyMyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTIzMiw3ICsyMzEsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlzcmFtQDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwppbmRleCA3YmU4Y2EwLi42Y2E0ZmMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwpAQCAtMjIyLDcgKzIyMiw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKaW5kZXggYzJiOGRiZi4uYzM1M2RhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwpAQCAtMjA5LDcgKzIwOSw2IEBACiAJCQlyZWcgPSA8MHgxNzAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDw5IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAMTcyMCB7CkBAIC0yMjAsNyArMjE5LDYgQEAKIAkJCXJlZyA9IDwweDE3MjAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEwIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAMTc0MCB7CkBAIC0yMzEsNyArMjI5LDYgQEAKIAkJCXJlZyA9IDwweDE3NDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDExIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNjb250cm9sQDE3NjAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N193bGFuLmR0cwppbmRleCA5YTYwMzY5Li45ZWE3ODMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N193bGFuLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N193bGFuLmR0cwpAQCAtNjcsNyArNjcsNyBAQAogCQkJZGV2aWNlLXdpZHRoID0gPDE+OwogCiAJCQlwYXJ0aXRpb25AMCB7Ci0JCQkJcmVnID0gPDAgMHg4MDAwPjsKKwkJCQlyZWcgPSA8MCAweDgwMDAwPjsKIAkJCQlsYWJlbCA9ICJ1LWJvb3QiOwogCQkJCXJlYWQtb25seTsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKaW5kZXggMDYzMzJkNi4uMWUzZWM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cwpAQCAtNDg3LDggKzQ4Nyw4IEBACiAJCQkJICZxZV9waW9fZiA1IDAgICAvKiBVU0JUTiAqLwogCQkJCSAmcWVfcGlvX2YgNiAwICAgLyogVVNCUlAgKi8KIAkJCQkgJnFlX3Bpb19mIDggMCAgIC8qIFVTQlJOICovCi0JCQkJICZiY3NyMTcgICA2IDAgICAvKiBTUEVFRCAqLwotCQkJCSAmYmNzcjE3ICAgNSAxPjsgLyogUE9XRVIgKi8KKwkJCQkgJmJjc3IxNyAgIDEgMCAgIC8qIFNQRUVEICovCisJCQkJICZiY3NyMTcgICAyIDA+OyAvKiBQT1dFUiAqLwogCQl9OwogCiAJCWVuZXQwOiB1Y2NAMjAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXVjbWM1Mi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXVjbWM1Mi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyYTc1OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tdWNtYzUyLmR0cwpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIE1hbnJvbGFuZCBtdWNtYzUyIGJvYXJkIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgorICogQ29weXJpZ2h0IDIwMDYtMjAwNyBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAibWFucm9sYW5kLG11Y21jNTIiOworCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTIiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA0MDAwMDAwPjsJLy8gNjRNQgorCX07CisKKwlzb2M1MjAwQGYwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pbW1yIjsKKwkJcmFuZ2VzID0gPDAgMHhmMDAwMDAwMCAweDAwMDBjMDAwPjsKKwkJcmVnID0gPDB4ZjAwMDAwMDAgMHgwMDAwMDEwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCisJCWNkbUAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItY2RtIiwiZnNsLG1wYzUyMDAtY2RtIjsKKwkJCXJlZyA9IDwweDIwMCAweDM4PjsKKwkJfTsKKworCQltcGM1MjAwX3BpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANTAwIHsKKwkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOworCQkJcmVnID0gPDB4NTAwIDB4ODA+OworCQl9OworCisJCWdwdDA6IHRpbWVyQDYwMCB7CS8vIEdQVCAwIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYwMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MTogdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYxMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDI6IHRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQzOiB0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjMwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKKwkJCXJlZyA9IDwweGIwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOworCQkJcmVnID0gPDB4YzAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlkbWEtY29udHJvbGxlckAxMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOworCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKKwkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKKwkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAorCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OworCQl9OworCisJCXhsYkAxZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXhsYiIsImZzbCxtcGM1MjAwLXhsYiI7CisJCQlyZWcgPSA8MHgxZjAwIDB4MTAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjAwMCB7IC8qIFBTQzEgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47CisJCX07CisKKwkJc2VyaWFsQDIyMDAgeyAvKiBQU0MyIGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAyIDA+OworCQl9OworCisJCXNlcmlhbEAyYzAwIHsgLyogUFNDNiBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MmMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKKwkJfTsKKworCQlldGhlcm5ldEAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJfTsKKworCQltZGlvQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OyAJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgCS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgorCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpbnRlbCxseHQ5NzEiOworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJYXRhQDNhMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKKwkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47CisJCX07CisKKwkJaTJjQDNkNDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKKwkJCWh3bW9uQDJjIHsKKwkJCQljb21wYXRpYmxlID0gImFkLGFkbTkyNDAiOworCQkJCXJlZyA9IDwweDJjPjsKKwkJCX07CisJCQlydGNANTEgeworCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOworCQkJCXJlZyA9IDwweDUxPjsKKwkJCX07CisJCX07CisKKwkJc3JhbUA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKKwkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKKwkJfTsKKwl9OworCisJcGNpQGYwMDAwZDAwIHsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wY2kiLCJmc2wsbXBjNTIwMC1wY2kiOworCQlyZWcgPSA8MHhmMDAwMGQwMCAweDEwMD47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCS8qIElEU0VMIDB4MTAgKi8KKwkJCQkweDgwMDAgMCAwIDEgJm1wYzUyMDBfcGljIDAgMyAzCisJCQkJMHg4MDAwIDAgMCAyICZtcGM1MjAwX3BpYyAwIDMgMworCQkJCTB4ODAwMCAwIDAgMyAmbXBjNTIwMF9waWMgMCAyIDMKKwkJCQkweDgwMDAgMCAwIDQgJm1wYzUyMDBfcGljIDAgMSAzCisJCQkJPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCisJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiAxMCAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMD47CisJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDAgMHg2MDAwMDAwMCAweDYwMDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAyMDAwMDAwIDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgwMTAwMDAwMD47CisJfTsKKworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwiZnNsLG1wYzUyMDAtbHBiIiwic2ltcGxlLWJ1cyI7CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZjgwMDAwMCAweDAwODAwMDAwCisJCQkgIDEgMCAweDgwMDAwMDAwIDB4MDA4MDAwMDAKKwkJCSAgMyAwIDB4ODAwMDAwMDAgMHgwMDgwMDAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDAgMHgwMDgwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJEVFMiOworCQkJCXJlZyA9IDwweDAgMHgwMDEwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJbGFiZWwgPSAiS2VybmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDMwMDAwMCB7CisJCQkJbGFiZWwgPSAiUm9vdEZTIjsKKwkJCQlyZWcgPSA8MHgwMDMwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwMDUwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJVLUJvb3QiOworCQkJCXJlZyA9IDwweDAwNzAwMDAwIDB4MDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NDAwMDAgeworCQkJCWxhYmVsID0gIkVudiI7CisJCQkJcmVnID0gPDB4MDA3NDAwMDAgMHgwMDAyMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc2MDAwMCB7CisJCQkJbGFiZWwgPSAicmVkLiBFbnYiOworCQkJCXJlZyA9IDwweDAwNzYwMDAwIDB4MDAwMjAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3ODAwMDAgeworCQkJCWxhYmVsID0gInJlc2VydmUiOworCQkJCXJlZyA9IDwweDAwNzgwMDAwIDB4MDAwODAwMDA+OworCQkJfTsKKwkJfTsKKworCQlzaW1wbGUxMDA6IGdwaW8tY29udHJvbGxlci0xMDBAMyw2MDAxMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMTAwIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMTA0OiBncGlvLWNvbnRyb2xsZXItMTA0QDMsNjAwMTA0IHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDEwNCAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwMDogZ3Bpby1jb250cm9sbGVyLTIwMEAzLDYwMDIwMCB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDAgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDE6IGdwaW8tY29udHJvbGxlci0yMDFAMyw2MDAyMDEgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjAxIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjAyOiBncGlvLWNvbnRyb2xsZXItMjAyQDMsNjAwMjAyIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwMiAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwMzogZ3Bpby1jb250cm9sbGVyLTIwM0AzLDYwMDIwMyB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDMgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDQ6IGdwaW8tY29udHJvbGxlci0yMDRAMyw2MDAyMDQgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjA0IDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjA2OiBncGlvLWNvbnRyb2xsZXItMjA2QDMsNjAwMjA2IHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwNiAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwNzogZ3Bpby1jb250cm9sbGVyLTIwN0AzLDYwMDIwNyB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDcgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMGY6IGdwaW8tY29udHJvbGxlci0yMGZAMyw2MDAyMGYgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjBmIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cwppbmRleCAzMGJmZGMwLi44YTRlYzMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cwpAQCAtMjQ0LDcgKzI0NCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI1Myw3ICsyNTIsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJCXJ0Y0A1MSB7CiAJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CiAJCQkJcmVnID0gPDB4NTE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMyLmR0cwppbmRleCAwMzAwNDI2Li44NWQ4NTdhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMyLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMyLmR0cwpAQCAtMjQ0LDcgKzI0NCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI1Myw3ICsyNTIsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJCXJ0Y0A1MSB7CiAJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CiAJCQkJcmVnID0gPDB4NTE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCmluZGV4IDllZWZlMDAuLjk0YTMzMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKQEAgLTI2LDggKzI2LDcgQEAKIAkJc2VyaWFsMCA9ICZzZXJpYWwwOwogCQlzZXJpYWwxID0gJnNlcmlhbDE7CiAJCXBjaTAgPSAmcGNpMDsKLQkJLyogcGNpMSBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHBoeXNpY2FsIGNvbm5lY3RvciAqLwotCQlwY2kyID0gJnBjaTI7CisJCXBjaTEgPSAmcGNpMTsKIAl9OwogCiAJY3B1cyB7CkBAIC0zODEsNyArMzgwLDcgQEAKIAkJYnVzLXJhbmdlID0gPDAgMD47CiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwODAwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDY2MDAwMDAwPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwpAQCAtMzkwLDcgKzM4OSw3IEBACiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKIAotCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCXBjaTE6IHBjaWVAZTAwMGEwMDAgewogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIApAQCAtNDAzLDkgKzQwMiw5IEBACiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlpbnRlcnJ1cHRzID0gPDB4MWEgMHgyPjsKIAkJYnVzLXJhbmdlID0gPDB4MCAweGZmPjsKLQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAotCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTMwMDAwMDAgMHgwIDB4MDgwMDAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDB4MCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjgwMDAwMCAweDAgMHgwODAwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzAwMDAwMD47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKQEAgLTQxOSwxMSArNDE4LDExIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKIAkJCQkgIDB4MDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKLQkJCQkgIDB4MCAweDIwMDAwMDAwCisJCQkJICAweDAgMHgxMDAwMDAwMAogCiAJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCiAJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCi0JCQkJICAweDAgMHgwODAwMDAwMD47CisJCQkJICAweDAgMHgwMDgwMDAwMD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKaW5kZXggYzk1OTBiNS4uMWRiMDdmNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cwpAQCAtMTYwLDcgKzE2MCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCSBydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMwNyI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdWMxMDEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3VjMTAxLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTkyNjRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3VjMTAxLmR0cwpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIE1hbnJvbGFuZCB1YzEwMSBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIm1hbnJvbGFuZCx1YzEwMSI7CisJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsdWMxMDEiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA0MDAwMDAwPjsJLy8gNjRNQgorCX07CisKKwlzb2M1MjAwQGYwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pbW1yIjsKKwkJcmFuZ2VzID0gPDAgMHhmMDAwMDAwMCAweDAwMDBjMDAwPjsKKwkJcmVnID0gPDB4ZjAwMDAwMDAgMHgwMDAwMDEwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCisJCWNkbUAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItY2RtIiwiZnNsLG1wYzUyMDAtY2RtIjsKKwkJCXJlZyA9IDwweDIwMCAweDM4PjsKKwkJfTsKKworCQltcGM1MjAwX3BpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANTAwIHsKKwkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOworCQkJcmVnID0gPDB4NTAwIDB4ODA+OworCQl9OworCisJCWdwdDA6IHRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDE6IHRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQyOiB0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MzogdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDQ6IHRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ1OiB0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjUwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NjogdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY2MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDc6IHRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOworCQkJcmVnID0gPDB4YjAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CisJCQlyZWcgPSA8MHhjMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWRtYS1jb250cm9sbGVyQDEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CisJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CisJCX07CisKKwkJeGxiQDFmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGIteGxiIiwiZnNsLG1wYzUyMDAteGxiIjsKKwkJCXJlZyA9IDwweDFmMDAgMHgxMDA+OworCQl9OworCisJCXNlcmlhbEAyMDAwIHsgLyogUFNDMSBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjIwMCB7IC8qIFBTQzIgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDIyMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDIgMD47CisJCX07CisKKwkJc2VyaWFsQDJjMDAgewkJLyogUFNDNiBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MmMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKKwkJfTsKKworCQlldGhlcm5ldEAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJfTsKKworCQltZGlvQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWNvbXBhdGlibGUgPSAiaW50ZWwsbHh0OTcxIjsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkNDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47CisJCQlmc2wscHJlc2VydmUtY2xvY2tpbmc7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCQkJaHdtb25AMmMgeworCQkJCWNvbXBhdGlibGUgPSAiYWQsYWRtOTI0MCI7CisJCQkJcmVnID0gPDB4MmM+OworCQkJfTsKKwkJCXJ0Y0A1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CisJCQkJcmVnID0gPDB4NTE+OworCQkJfTsKKwkJfTsKKworCQlzcmFtQDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iOworCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OworCQl9OworCX07CisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsImZzbCxtcGM1MjAwLWxwYiIsInNpbXBsZS1idXMiOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmY4MDAwMDAgMHgwMDgwMDAwMAorCQkJICAxIDAgMHg4MDAwMDAwMCAweDAwODAwMDAwCisJCQkgIDMgMCAweDgwMDAwMDAwIDB4MDA4MDAwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MDA4MDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJEVFMiOworCQkJCXJlZyA9IDwweDAgMHgwMDEwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJbGFiZWwgPSAiS2VybmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDMwMDAwMCB7CisJCQkJbGFiZWwgPSAiUm9vdEZTIjsKKwkJCQlyZWcgPSA8MHgwMDMwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwMDUwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJVLUJvb3QiOworCQkJCXJlZyA9IDwweDAwNzAwMDAwIDB4MDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NDAwMDAgeworCQkJCWxhYmVsID0gIkVudiI7CisJCQkJcmVnID0gPDB4MDA3NDAwMDAgMHgwMDAxMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc1MDAwMCB7CisJCQkJbGFiZWwgPSAicmVkLiBFbnYiOworCQkJCXJlZyA9IDwweDAwNzUwMDAwIDB4MDAwMTAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NjAwMDAgeworCQkJCWxhYmVsID0gInJlc2VydmUiOworCQkJCXJlZyA9IDwweDAwNzYwMDAwIDB4MDAwYTAwMDA+OworCQkJfTsKKwkJfTsKKworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCmluZGV4IDM4MzhiNzcuLjAzOTZjZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0Nzo0NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc3LDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA1LDcgKzExMiw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDE0ICsxMzgsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0MCw3ICsxNTgsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIxOSwxMSArMjM3LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMzksOSArMjU5LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjUyLDYgKzI3Myw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzI4LDYgKzM1MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQyLDYgKzM2NSw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzY3LDYgKzM5MSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDU3LDYgKzQ4Miw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNDk1LDEwICs1MjEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTE5LDcgKzU0MSw2IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NTgsMTQgKzU3OSwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjM2LDYgKzY1Nyw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NDYsNiArNjY4LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNjY2LDIzICs2ODksMjMgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MTMsMjUgKzczNiwxMiBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTc3NSwxMSArNzg1LDEyIEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldApAQCAtODY2LDYgKzg3NywxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC04ODUsMTAgKzkwMCwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk1OSwxMiArOTc3LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTA2NCw2ICsxMDgyLDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTA3Myw2ICsxMDkyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwOTAsMTAgKzExMTAsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMTA1LDExICsxMTI5LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTExMTgsMjMgKzExNDMsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTU5LDcgKzExODYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyMDAsMTEgKzEyMjYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZwppbmRleCAyOWIwZjM0Li5mNWMwN2ZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjI0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMiArNTYsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc4LDExICs4NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA2LDcgKzExMyw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOSw2ICsxMjUsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQpAQCAtMTI3LDE0ICsxNDAsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0Nyw3ICsxNjUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjI4LDExICsyNDYsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0OCw5ICsyNjgsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNjQsNiArMjg1LDcgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzQ4LDYgKzM3MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzYyLDYgKzM4NSw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzg3LDYgKzQxMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzk3LDYgKzQyMiw3IEBACiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC00MzEsNyArNDU3LDkgQEAKICMKICMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTQ1NCwxMCArNDgyLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNDc1LDYgKzQ5OSw4IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDgzLDYgKzUwOSw3IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CkBAIC01MDIsNyArNTI5LDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTUxNCwxMSArNTQwLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTQwLDYgKzU2OSw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTY4LDYgKzU5OCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTU4NiwxNCArNjE3LDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTY0MCw5ICs2NzQsMTIgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY2MSw2ICs2OTgsOCBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTY4NiwxMCArNzI1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzU5LDYgKzc5NSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzg3LDYgKzgyNCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTgxMiwyMyArODUwLDIzIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg0NywzMCArODg1LDE4IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTEzLDYgKzkzOSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC05MzIsMTAgKzk2MiwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk5MiwxMiArMTAyNSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTEwNDEsNiArMTA3NCw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEwNTAsNiArMTA4NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDY3LDEwICsxMTAyLDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTA4MiwxMSArMTEyMSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMDk1LDIzICsxMTM1LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTEzNiw3ICsxMTc4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTc4LDExICsxMjE5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKaW5kZXggMDdiNmIyNi4uNGY3N2ExYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjIyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzcsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDUsNyArMTEyLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsMTQgKzEzOCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQwLDcgKzE1OCw3IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjIwLDExICsyMzgsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0MCw5ICsyNjAsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNTMsNiArMjc0LDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zMjksNiArMzUxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDMsNiArMzY2LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjgsNiArMzkyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00NTgsNiArNDgzLDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC00ODMsNiArNTA5LDcgQEAKICMKICMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKIENPTkZJR19FRVBST01fTEVHQUNZPXkKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTUwNiwxMCArNTMzLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUzMiw2ICs1NTUsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC01NDAsNyArNTY0LDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU3OSwxNCArNjAyLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NDcsNiArNjcwLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY1Nyw2ICs2ODEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02NzYsMjIgKzcwMSwyOCBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTczOCw2ICs3NjksOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKQEAgLTc0Nyw5ICs3ODAsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NzUsMjUgKzgwNiwxMiBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04MTcsNyArODM1LDcgQEAKICMKICMgTEVEIGRyaXZlcnMKICMKLSMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CiAKQEAgLTg2Niw2ICs4ODQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTg5Myw2ICs5MTIsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtOTEyLDEwICs5MzUsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05ODYsMTIgKzEwMTIsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMDkxLDYgKzExMTcsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMTAwLDYgKzExMjcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTExNywxMCArMTE0NSwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTExMzIsMTEgKzExNjQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTE0NSwyMyArMTE3OCwyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTExODYsNyArMTIyMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIyNywxMSArMTI2MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCmluZGV4IGFmYjFhM2QuLmY5MTY4YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODo0MiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc5LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTA1LDcgKzExMiw2IEBACiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSw3ICsxMzgsNiBAQAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTMzLDcgKzE0NSwxMyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ2LDcgKzE2NCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjcsMTEgKzI0NSwxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ3LDkgKzI2NywxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMzNiw2ICszNTcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM1MCw2ICszNzIsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3NSw2ICszOTgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM4Miw5ICs0MDYsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC00NjcsNiArNDkxLDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldApAQCAtNDkyLDEwICs1MTcsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MTUsNiArNTM2LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPW0KICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTUzNiw2ICs1NTgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU2NCw2ICs1ODcsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC01ODIsMTQgKzYwNiwxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02MzYsMTYgKzY2MywxNiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzIyLDYgKzc0OSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzUwLDYgKzc3OCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTc3NiwyMyArODA1LDIzIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgxMSwzMCArODQwLDE4IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04NzEsMTUgKzg4OCwxNyBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQpAQCAtOTk1LDYgKzEwMTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEwMjIsNiArMTA0MiwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQxLDEyICsxMDY1LDE2IEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKQEAgLTExMTQsNyArMTE0Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyMDEsNiArMTIyOCw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEyMTAsNiArMTIzOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIzLDIzICsxMjUyLDEyIEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwppbmRleCA4NTg1YzdjLi43NWM4MzVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODo1NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjMgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc3LDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA1LDcgKzExMiw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDE0ICsxMzgsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0NSw3ICsxNjMsNyBAQAogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyNSwxMSArMjQzLDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDUsOSArMjY1LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjU4LDYgKzI3OSw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzM0LDYgKzM1Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQ4LDYgKzM3MSw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzczLDYgKzM5Nyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzgyLDkgKzQwNyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC00NjQsNiArNDg5LDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC01MDIsMTAgKzUyOCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MjksNiArNTUxLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNTM4LDcgKzU2MSw2IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NzcsMTQgKzU5OSwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjU0LDYgKzY3Niw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NjQsNiArNjg3LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNjg1LDIyICs3MDksMjggQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC03NDcsNiArNzc3LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CkBAIC03NTYsOSArNzg4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzg5LDI1ICs4MTksMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04NTEsMTEgKzg2OCwxMiBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQz15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CiAjIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTk2OSw2ICs5ODcsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTk5Niw2ICsxMDE1LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTUsMTAgKzEwMzgsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMDg5LDEyICsxMTE1LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTE5NCw2ICsxMjIwLDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTIwMyw2ICsxMjMwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjAsMTAgKzEyNDgsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMjM1LDExICsxMjY3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTEyNDgsMjMgKzEyODEsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMjg5LDcgKzEzMjQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzMzEsMTEgKzEzNjUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCmluZGV4IGEyZGYwNjMuLjQ2NmYwOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjggKzEyNywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Nyw2ICsyNjAsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI1LDkgKzQzMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKQEAgLTYyOCw3ICs2MzUsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY1OCwxMCArNjY3LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzYwLDYgKzc2Niw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODE0LDkgKzgyMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODM0LDYgKzgzOCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC04ODMsNiArODkyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODk0LDcgKzkwNCw2IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtOTM0LDYgKzk0Myw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk0NCw2ICs5NTQsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05OTAsNiArMTAwMSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMDQ1LDYgKzEwNTcsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTE0Niw2ICsxMTU5LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyMTUsNyArMTIyOSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzMjcsNiArMTM0MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzQ0LDYgKzEzNTgsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTM2NSw3ICsxMzgwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNDA3LDExICsxNDIxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZwppbmRleCA5M2ViZDQ0Li42Njk0ZmI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg2LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMTksMjAgKzEyMSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0MCw2ICsxNDEsOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1MCw2ICsyNTMsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY3LDYgKzI3MSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ4LDYgKzM1Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiBDT05GSUdfU1RQPW0KQEAgLTM5Niw5ICs0MDIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTU2NSwxOCArNTcxLDE2IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0ZTTF9QUV9NRElPPXkKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY2Myw2ICs2NjcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjkzLDkgKzY5OCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzEzLDcgKzcxNSw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MzIsNiArNzMzLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtNzg0LDYgKzc4Niw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTg1NCw3ICs4NTcsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC05MjYsNiArOTI4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NDIsNiArOTQ1LDcgQEAKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZwppbmRleCBmZjMzYTdkLi44NmRmMTlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI3LDkgKzQzNCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ4OCw2ICs0OTUsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjA1LDYgKzYxMyw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjQzLDcgKzY1Miw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC03NDEsOSArNzUyLDExIEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzkxLDEwICs4MDQsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04OTYsNiArOTA2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NTAsOSArOTYxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05ODQsNiArOTkyLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC0xMDM2LDYgKzEwNDksNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDQ4LDkgKzEwNjIsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEwODgsOCArMTEwMCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTA5OSw2ICsxMTEzLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTExMiw3ICsxMTI3LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTY0LDYgKzExNzgsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMjcwLDcgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CkBAIC0xMjczLDYgKzEyODksNyBAQAogIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPXkKIENPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CkBAIC0xMzM0LDYgKzEzNTEsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTM4NCw2ICsxNDAyLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0NTMsNyArMTQ3Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1NjksNiArMTU4Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTg2LDYgKzE2MDUsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTYwNCwxMCArMTYyNCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjMwLDEwICsxNjUyLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTY2MCw3ICsxNjgyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzAyLDExICsxNzIzLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCmluZGV4IDc2MjM3ZDQuLjdiZjcxZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyMyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjcsOSArNDM0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC00ODgsNiArNDk1LDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYwNSw2ICs2MTMsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY0NCwxMSArNjUzLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjcxLDYgKzY4Myw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjk4LDYgKzcxMSw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTgwMiw5ICs4MTYsMTEgQEAKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04NTIsMTAgKzg2OCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk1Nyw2ICs5NzAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMTEsOSArMTAyNSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA0NSw2ICsxMDU2LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC0xMDk3LDYgKzExMTMsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTA5LDkgKzExMjYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNDksOCArMTE2NCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTE2MCw2ICsxMTc3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTE3Myw3ICsxMTkxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjI1LDYgKzEyNDIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTMxNiw2ICsxMzM0LDcgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CkBAIC0xMzM0LDYgKzEzNTMsNyBAQAogIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPXkKIENPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CkBAIC0xMzk1LDYgKzE0MTUsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTQ0NSw2ICsxNDY2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1MTQsNyArMTUzNiw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2MzAsNiArMTY1MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjQ3LDYgKzE2NjksNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTY2NSwxMCArMTY4OCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjkxLDEwICsxNzE2LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTcyMSw3ICsxNzQ2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzYzLDExICsxNzg3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnCmluZGV4IGUwZTM2YTEuLjdkZWY4MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU3LDYgKzI2MCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MDQsNiArNTExLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01NDIsNyArNTUwLDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTYxMiw3ICs2MjIsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTYzNSw3ICs2NDcsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC02NjMsMTAgKzY3NCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc1OSw2ICs3NjcsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgxMiw5ICs4MjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTgzMiw2ICs4MzgsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtODgxLDYgKzg5Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTg5Miw5ICs5MDQsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05MjcsNiArOTM3LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTM3LDYgKzk0OCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTk1MCw3ICs5NjIsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA3MCw2ICsxMDgxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMjgsNyArMTE0MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyMDIsNiArMTIxMyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjE5LDYgKzEyMzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI0MCw3ICsxMjUzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjgyLDExICsxMjk0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCmluZGV4IDRmMjdkNDUuLmIzOThiOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU3LDYgKzI2MCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MDcsNiArNTE0LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01NDUsNyArNTUzLDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTYxNyw3ICs2MjcsOSBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjQwLDcgKzY1Miw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTY2OCwxMCArNjc5LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzc2LDYgKzc4NCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODMwLDkgKzgzOSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODYzLDYgKzg2OSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldApAQCAtOTE1LDYgKzkyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTkyNyw5ICs5MzksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTk2Nyw4ICs5NzcsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTk3OCw2ICs5OTAsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05OTEsNyArMTAwNCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0Myw2ICsxMDU1LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTExNDYsNiArMTE1OSw4IEBACiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1dCU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CkBAIC0xMTg2LDYgKzEyMDEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI0Nyw3ICsxMjYzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTM2NSw2ICsxMzgwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzODIsNiArMTM5OCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNDAzLDcgKzE0MjAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0NDUsMTEgKzE0NjEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKaW5kZXggNjQ4ZGFjMC4uZjY3MzE3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OCw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA0LDcgKzQxMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNCw5ICs0MzEsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ4Myw2ICs0OTAsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjM3LDYgKzY0NSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjc2LDExICs2ODUsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03MDMsNiArNzE1LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MzAsNiArNzQzLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODQ1LDEwICs4NTksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05MzAsNiArOTQxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05ODQsOSArOTk2LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfUENGODU3ND15Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTAxNyw3ICsxMDI2LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTA1NSw4ICsxMDYzLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMDY2LDYgKzEwNzYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTExLDYgKzExMjIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9VSENJX0hDRD15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTEyMzgsNiArMTI1MCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjg4LDYgKzEzMDEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM1MCw3ICsxMzY0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQ2NSw2ICsxNDc4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0ODIsNiArMTQ5Niw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNTAzLDcgKzE1MTgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1NDUsMTEgKzE1NTksMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCmluZGV4IGJmNmRlYjguLmE2NjgxMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY4LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI0LDkgKzQzMSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDgzLDYgKzQ5MCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01ODksNiArNTk3LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02MjcsNyArNjM2LDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTcyNSwxMCArNzM2LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODEwLDYgKzgxOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY0LDkgKzg3Myw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX1BDRjg1NzQ9eQotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg5Nyw3ICs5MDMsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05MzUsOCArOTQwLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC05NDYsNiArOTUzLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTkxLDYgKzk5OSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTA1OSw2ICsxMDY4LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTExMTcsNiArMTEyNyw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMTY3LDYgKzExNzgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIyOSw3ICsxMjQxLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTM0NCw2ICsxMzU1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNjEsNiArMTM3Myw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzgyLDcgKzEzOTUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0MjQsMTEgKzE0MzYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKaW5kZXggMzIzNmM0Ny4uYzRlOTJiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OCw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA0LDcgKzQxMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU1Niw5ICs1NjMsMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTYwNiwxMCArNjE1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjk5LDYgKzcwNSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzUyLDkgKzc1OSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzcyLDYgKzc3NiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC04MjEsNiArODMwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODMyLDkgKzg0Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTg2Nyw2ICs4NzUsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC04NzcsNiArODg2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtODkwLDcgKzkwMCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDEwLDYgKzEwMTksNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTA2OCw3ICsxMDc4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTE0MCw2ICsxMTQ5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNTcsNiArMTE2Nyw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMTc4LDcgKzExODksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyMjAsMTEgKzEyMzAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKaW5kZXggOGM1Mjk5ZC4uNGY0MzRiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTUsNiArMjU4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Miw2ICsyNzYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszNzIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MDIsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAzLDcgKzQxMCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNiw2ICs0MjIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyMyw5ICs0MzAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC01ODUsNiArNTkyLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02MjMsNyArNjMxLDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTY5Myw3ICs3MDMsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcxNiw3ICs3MjgsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC03NDQsMTAgKzc1NSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg0MCw2ICs4NDgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg5Myw5ICs5MDIsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkxMyw2ICs5MTksMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTYyLDYgKzk3Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk3Myw5ICs5ODUsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDA4LDYgKzEwMTgsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDE4LDYgKzEwMjksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMDMxLDcgKzEwNDMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTE1MSw2ICsxMTYyLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyMTAsNyArMTIyMiw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyODQsNiArMTI5NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzAxLDYgKzEzMTMsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTMyMiw3ICsxMzM1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMzY0LDExICsxMzc2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnCmluZGV4IGZmMzE2NjcuLmI1MmVjMDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjEyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOCArMTI3LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU1LDYgKzI1OCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzIsNiArMjc2LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDI3LDkgKzQzNCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ5Myw2ICs1MDAsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjM5LDcgKzY0Nyw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTY0OSwxMCArNjU2LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzUwLDYgKzc1NCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODA0LDkgKzgwOSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODUzLDE3ICs4NTUsMjIgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTg5Nyw4ICs5MDQsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTkwOCw2ICs5MTcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk5Miw3ICsxMDAyLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwMzgsNiArMTA0Nyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTA3LDcgKzExMTcsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMTgzLDYgKzExOTIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIwMCw2ICsxMjEwLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyMzIsNyArMTI0Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTI3NCwxMSArMTI4NCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZwppbmRleCBlMjg1ZWMwLi43MzAwNjE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjEgKzEyNywyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0Nyw2ICsxNDgsOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY4LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTAzLDYgKzUxMCw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTQyLDExICs1NTAsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01NjksNiArNTgwLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01OTYsNiArNjA4LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjcyLDcgKzY4NSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzIwLDEwICs3MzUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MTYsNiArODI4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NjksOSArODgyLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04ODksNiArODk5LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTkzOCw2ICs5NTMsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05NDksOSArOTY1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTg0LDYgKzk5OCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk5NCw2ICsxMDA5LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTAwNyw3ICsxMDIzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwNzIsNiArMTA4Nyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTMwLDcgKzExNDYsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjA2LDYgKzEyMjEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMSw2ICsxMjM3LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNDIsNyArMTI1OSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTI4NCwxMSArMTMwMCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZwppbmRleCAxYWIzZTRjLi45ZTkxNThhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjEgKzEyNywyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0Nyw2ICsxNDgsOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzYzLDYgKzM2OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzkyLDYgKzM5OCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTksNyArNDA2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDEyLDYgKzQxOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDk4LDYgKzUwNSw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTUzNywxMSArNTQ1LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTY0LDYgKzU3NSw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTkxLDYgKzYwMyw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTYxMCw2ICs2MjMsNyBAQAogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENDU2PXkKIENPTkZJR19NRF9SQUlENl9QUT15CisjIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0CkBAIC02NzgsNyArNjkyLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MDgsMTAgKzcyNCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgxMyw2ICs4MjYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg2Nyw5ICs4ODEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg4Nyw2ICs4OTgsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTM2LDYgKzk1Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk0Nyw5ICs5NjQsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05ODcsNiArMTAwMiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk5Nyw2ICsxMDEzLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTAxMCw3ICsxMDI3LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDMzLDYgKzEwNDksNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDg1LDYgKzExMDIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTE0Miw2ICsxMTYwLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTExODgsNiArMTIwNyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjQ2LDcgKzEyNjYsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzYxLDYgKzEzODAsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzc2LDYgKzEzOTYsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTM5NiwxMiArMTQxNywxMyBAQAogQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0FTWU5DX01FTUNQWT15CiBDT05GSUdfQVNZTkNfWE9SPXkKK0NPTkZJR19BU1lOQ19QUT15CitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNDQzLDExICsxNDY1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZwppbmRleCAzYTY4Zjg2Li42YjM5OTE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM1Ci0jIFR1ZSBBdWcgMTEgMTk6NTc6NTEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI3ICsxMjYsMjggQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTQsNiArMjU3LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3MSw2ICsyNzUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2Niw2ICszNzEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5NSw2ICs0MDEsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAyLDcgKzQwOSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNSw2ICs0MjEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyMiw5ICs0MjksOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTY1MSw3ICs2NTgsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY4MSwxMCArNjkwLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzg2LDYgKzc5Miw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODQwLDkgKzg0Nyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODYwLDYgKzg2NCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05MDksNiArOTE4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTIwLDkgKzkzMCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTk2MCw2ICs5NjgsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05NzAsNiArOTc5LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05ODMsNyArOTkzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDM1LDYgKzEwNDQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTE0OCw2ICsxMTU4LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyMDcsNyArMTIxOCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzMDYsNiArMTMxNiw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzIxLDYgKzEzMzIsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTM0Miw3ICsxMzU0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMzg0LDExICsxMzk1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZwppbmRleCBmZjA0ZTEwLi5hNWJkZThkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTIzLDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogQ09ORklHX0tTSTg1NjA9eQogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQzLDYgKzI0OCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjAsNiArMjY2LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDgsNiArMzU1LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzcsNiArMzg1LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4NCw3ICszOTMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDA1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01ODIsNiArNTkxLDggQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTU5MSwxMCArNjAyLDcgQEAKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzA0LDEwICs3MTIsMTkgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTcxOSw5ICs3MzYsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzU1LDcgKzc3MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC04MTgsNiArODMyLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTg3Nyw3ICs4OTIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTk0NSw2ICs5NTksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk2Miw2ICs5NzcsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtOTgxLDEwICs5OTcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTAwOCwxMCArMTAyNiwxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMDM5LDcgKzEwNTcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTA3MCwxMSArMTA4NywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCmluZGV4IGZiMTBjYzguLmMxMGUyNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjYsMjcgKzEyOSwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OSw2ICsxOTMsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ0LDYgKzI0OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjEsNiArMjY3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDksNiArMzU2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzgsNiArMzg2LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4NSw3ICszOTQsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00ODMsMTUgKzQ5MiwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU4OCw2ICs1OTYsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNTk4LDkgKzYxMSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02MzQsNyArNjQ1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTY5Niw2ICs3MDYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzU0LDcgKzc2NSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtODIyLDYgKzgzMiw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04MzksNiArODUwLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTg1NywxMCArODY5LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTg4MywxMCArODk3LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtOTEyLDcgKzkyNiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05NDMsMTEgKzk1NiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnCmluZGV4IDVjOGNlNjkuLjhkOWYwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozNCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjcsMjkgKzEzMCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTIsNiArMTk2LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Nyw2ICsyNTIsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY0LDYgKzI3MCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzYxLDYgKzM2OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzkwLDYgKzM5OCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTcsNyArNDA2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDEwLDYgKzQxOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTMwLDcgKzUzOSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC01ODIsMTAgKzU5Myw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY5OCwxNCArNzA2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTcyMSw5ICs3MzksNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzQ2LDYgKzc2Miw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTc1OSw3ICs3NzYsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtODI0LDYgKzg0MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04ODIsNyArODk5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC05NTAsNiArOTY2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk2Nyw2ICs5ODQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtOTg1LDEwICsxMDAzLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwMTEsMTAgKzEwMzEsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMDQwLDcgKzEwNjAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTA3MSwxMSArMTA5MCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCmluZGV4IDE1OGU2M2UuLjliNjNlMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjYsMjggKzEyOSwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5MCw2ICsxOTQsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ1LDYgKzI1MCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjIsNiArMjY4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTksNiArMzY2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODgsNiArMzk2LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5NSw3ICs0MDQsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MDgsNiArNDE2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01ODIsNyArNTkxLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02MzAsMTAgKzY0MSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTczNyw2ICs3NDUsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtNzUxLDkgKzc2NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NzYsNiArNzg3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtNzg5LDcgKzgwMSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC04NTQsNiArODY1LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTkxMiw3ICs5MjQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTk4MCw2ICs5OTEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTk3LDYgKzEwMDksNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTAxNSwxMCArMTAyOCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDQxLDEwICsxMDU2LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTA3MCw3ICsxMDg1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTExMDEsMTEgKzExMTUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcKaW5kZXggMjcyNmZjYTEuLjFiMjM1NjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI3ICsxMjgsMjggQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODgsNiArMTkyLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Miw2ICsyNDcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU5LDYgKzI2NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU1LDYgKzM2Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg0LDYgKzM5Miw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTEsNyArNDAwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDA0LDYgKzQxMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTIxLDcgKzUzMCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNTY5LDEwICs1ODAsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzYsNiArNjg0LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTY5MCw5ICs3MDMsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzE1LDYgKzcyNiw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTc1OCw2ICs3NzAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODE2LDcgKzgyOSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtODcyLDYgKzg4NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04ODcsNiArOTAwLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTkwNyw3ICs5MjEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTM4LDExICs5NTEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcKaW5kZXggYjBjNDY5OC4uOTU5ZDAyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjYsMjYgKzEyOSwyNyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OCw2ICsxOTIsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQyLDYgKzI0Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTksNiArMjY1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDcsNiArMzU0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzYsNiArMzg0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4Myw3ICszOTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTYsNiArNDA0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00ODEsMTUgKzQ5MCwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU4NCw2ICs1OTIsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNTk0LDkgKzYwNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02MzAsNyArNjQxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTcyMSw2ICs3MzEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzc5LDcgKzc5MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtODQ3LDYgKzg1Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODYzLDYgKzg3NCw3IEBACiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtODgxLDEwICs4OTMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtOTA3LDEwICs5MjEsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC05NDcsNyArOTYxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTk3OCwxMSArOTkxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKaW5kZXggMDRjODVkYS4uN2Y1ZWMzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI3LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkzLDYgKzE5Nyw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogQ09ORklHX1NPQ1JBVEVTPXkKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ3LDYgKzI1Miw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjQsNiArMjcwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTgsNiArMzY1LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTYsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAzLDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyMSw5ICs0MjksOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ4Miw2ICs0OTAsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjY4LDcgKzY3Nyw5IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02OTgsMTAgKzcwOSw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc2NSw2ICs3NzMsNyBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CkBAIC03NzQsNyArNzgzLDYgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTgzNCw2ICs4NDIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg4OCw5ICs4OTcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkyMSw2ICs5MjcsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogQ09ORklHX0hXTU9OX1ZJRD15CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldApAQCAtOTczLDYgKzk4NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk4NSw5ICs5OTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTl9ERUJVR19DSElQPXkKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAwNiw4ICsxMDE2LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMDE3LDYgKzEwMjksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTExMTIsNyArMTEyNSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEzNSw2ICsxMTQ3LDcgQEAKICMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMTg0LDYgKzExOTcsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTMxOSw2ICsxMzMzLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzNjksNiArMTM4NCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDM4LDcgKzE0NTQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTUyLDYgKzE1NjcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU2OSw2ICsxNTg1LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE1ODksNyArMTYwNiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNjIxLDExICsxNjM3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCmluZGV4IGU3ZTgxZDYuLmM4MzI3ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI3LDIyICsxMzAsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTAsNyArMTUyLDkgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTk3LDYgKzIwMSw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMjU3LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2OSw2ICsyNzUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQyNiw2ICs0MzMsNyBAQAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ1NSw2ICs0NjMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDYyLDcgKzQ3MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ3NSw2ICs0ODMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTYyMiw2ICs2MzEsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY2Miw3ICs2NzIsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNzMyLDggKzc0NCwxMCBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzgyLDEwICs3OTYsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MjcsMTEgKzgzOCwxNSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTg0Miw2ICs4NTcsNyBAQAogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKICMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKQEAgLTkwOSw2ICs5MjUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9bQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9bQpAQCAtOTY3LDkgKzk4NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTAwMywxNCArMTAxNywyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMDYxLDYgKzEwODUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDcyLDkgKzEwOTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTA5Miw2ICsxMTE1LDcgQEAKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTEwMiw2ICsxMTI2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogQ09ORklHX0FHUD1tCitDT05GSUdfVkdBX0FSQj15CiBDT05GSUdfRFJNPW0KICMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9SMTI4IGlzIG5vdCBzZXQKQEAgLTExMjUsNyArMTE1MCw2IEBACiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTkwLDYgKzEyMTQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI1NCw3ICsxMjc5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTM1Miw2ICsxMzc2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNjksNiArMTM5NCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMzg4LDEwICsxNDE0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE0MTQsMTAgKzE0NDIsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNDQzLDcgKzE0NzEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTQ3NSwxMSArMTUwMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZwppbmRleCAyYzQwNzUyLi44MjU2MzcwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozOSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OCw2ICsxOTIsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQzLDYgKzI0OCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjAsNiArMjY2LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTQsNiArMzYxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODMsNiArMzkxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5MCw3ICszOTksNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02NzcsOSArNjg1LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MjcsMTAgKzczNyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgyNCw2ICs4MzEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg3Niw5ICs4ODQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg5Niw2ICs5MDEsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk0NSw2ICs5NTUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05NTYsOSArOTY3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05NzcsNiArOTg2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTg3LDYgKzk5Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAwMCw3ICsxMDExLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwNjUsNiArMTA3NSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTM0LDcgKzExNDUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEyMDMsNiArMTIxMyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIwLDYgKzEyMzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI0MCw3ICsxMjUyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEyNzEsMTEgKzEyODIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKaW5kZXggODQ1NzMxZC4uOTFkODVkNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI5ICsxMjgsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkwLDYgKzE5NCw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDYsNiArMjUxLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Myw2ICsyNjksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1Nyw2ICszNjQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszOTQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkzLDcgKzQwMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTY4MSw5ICs2ODksMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKQEAgLTczMiwxMCArNzQyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODMxLDYgKzgzOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODg2LDkgKzg5NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTIxLDE0ICs5MjYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk3OSw2ICs5OTQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05OTAsOSArMTAwNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTl9ERUJVR19DSElQPXkKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAxMiw2ICsxMDI2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAyMiw2ICsxMDM3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDM1LDcgKzEwNTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTEwMCw2ICsxMTE1LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExNjksNyArMTE4NSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTIzOCw2ICsxMjUzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyNTUsNiArMTI3MSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjc1LDcgKzEyOTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTMwNiwxMSArMTMyMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZwppbmRleCA0ZjIyOGE5Li5kZWJlMjY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyMiArMTI5LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ5LDYgKzE1MSw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTk2LDYgKzIwMCw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMjU3LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2OSw2ICsyNzUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM3MSw2ICszNzgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxMSw2ICs0MTksNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyMCw5ICs0MjksOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02MzAsNyArNjM5LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NzgsMTAgKzY4OSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc3Miw2ICs3ODAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgyNSw5ICs4MzQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg0NSw2ICs4NTEsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtODk0LDYgKzkwNSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTkwNSw5ICs5MTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTI2LDYgKzkzNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTkzNiw2ICs5NDcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC05NDksNyArOTYxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwNDIsNiArMTA1Myw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTExLDcgKzExMjMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTExODAsNiArMTE5MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTk3LDYgKzEyMDksNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTIxNiwxMCArMTIyOSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMjQyLDEwICsxMjU3LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTI3MSw3ICsxMjg2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzMDMsMTEgKzEzMTcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKaW5kZXggOTE5NjcyNC4uNzQ1MTU1MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjkgKzEyOCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYzLDYgKzI2OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU3LDYgKzM2NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTMsNyArNDAyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjgxLDkgKzY4OSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzMyLDEwICs3NDIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzEsNiArODM4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODYsOSArODk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsMTQgKzkyNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTc5LDYgKzk5NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk5MCw5ICsxMDA2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDEyLDYgKzEwMjYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDIyLDYgKzEwMzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMzUsNyArMTA1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTAwLDYgKzExMTUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTE2OSw3ICsxMTg1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMjcxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNzUsNyArMTI5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzA2LDExICsxMzIyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCmluZGV4IDJlNDlhNmUuLjYzMWQ5MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDMgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI5ICsxMjgsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkwLDYgKzE5NCw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDYsNiArMjUxLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Myw2ICsyNjksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1Nyw2ICszNjQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszOTQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkzLDcgKzQwMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTY4MSw5ICs2ODksMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKQEAgLTczMiwxMCArNzQyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODMxLDYgKzgzOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODg2LDkgKzg5NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTIxLDE0ICs5MjYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk3OSw2ICs5OTQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05OTAsOSArMTAwNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTl9ERUJVR19DSElQPXkKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAxMiw2ICsxMDI2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAyMiw2ICsxMDM3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDM1LDcgKzEwNTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTEwMCw2ICsxMTE1LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExNjksNyArMTE4NSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTIzOCw2ICsxMjUzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyNTUsNiArMTI3MSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjc1LDcgKzEyOTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTMwNiwxMSArMTMyMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCmluZGV4IDEwMjVkYTIuLjUyYWNiYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0NCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19TTVA9eQpAQCAtMzcsNiArMzgsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg5LDExICs5MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTI4LDIyICsxMzEsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTEsNyArMTUzLDkgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjAxLDYgKzIwNSw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiBDT05GSUdfWEVTX01QQzg1eHg9eQpAQCAtMjU2LDYgKzI2MSw3IEBACiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MDUsNiArNDEyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDYsNiArNDU0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDU3LDkgKzQ2Niw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtNjM1LDYgKzY0NCw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY3NCwxMSArNjg0LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcwMSw2ICs3MTQsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MjgsNiArNzQyLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODA0LDcgKzgxOSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODM0LDEwICs4NTEsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05NTEsNiArOTY1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDA2LDggKzEwMjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA0MSwxNCArMTA1NCwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMDk5LDYgKzExMjIsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTEwLDkgKzExMzQsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMTUxLDYgKzExNzMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTYxLDYgKzExODQsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMTgxLDcgKzEyMDUsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMDQsNiArMTIyNyw3IEBACiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTI0OSw2ICsxMjczLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSVNQMTc2MF9IQ0Q9eQorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xNDY2LDYgKzE0OTEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTU0MSw3ICsxNTY3LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTY1OCw2ICsxNjgzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NzUsNiArMTcwMSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjk0LDEwICsxNzIxLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTcyMCwxMCArMTc0OSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE3NDksNyArMTc3OCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTc5MCwxMSArMTgxOCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwppbmRleCA1MjdhZDFhLi4yODk4MDczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjMxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0OSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArODksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMCwyMSArMTMyLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUyLDEyICsxNTMsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU2LDYgKzI1OSw3IEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ1OCw2ICs0NjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NjcsOSArNDc0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTY4MCw2ICs2ODcsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC03MTksMTIgKzcyNywxNSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTc0Nyw2ICs3NTgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTc3NSw2ICs3ODcsNyBAQAogIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTg1MSw3ICs4NjQsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTg4MSwxMCArODk2LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTAxNiw2ICsxMDI4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDcxLDkgKzEwODQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKIENPTkZJR19EUzE2ODI9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMTA2LDE0ICsxMTE2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExNjQsNiArMTE4NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExNzUsOSArMTE5Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEyMTcsNiArMTIzNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEyMjcsNiArMTI0Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEyNDcsNyArMTI2OCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI3MCw2ICsxMjkwLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTMyMiw2ICsxMzQzLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTM5Nyw2ICsxNDE5LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTE1MDEsNiArMTUyNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTc2LDcgKzE2MDAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjgyLDYgKzE3MDUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2OTcsNiArMTcyMSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNzE4LDcgKzE3NDMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9bQpAQCAtMTc2MSwxMSArMTc4NSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPW0KICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwppbmRleCBjZDMzOGQ0Li5lMTk5ZDFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs4OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIxICsxMzIsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTIsMTIgKzE1MywxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTYsNiArMjU5LDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDU4LDYgKzQ2NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ2Nyw5ICs0NzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjgwLDYgKzY4Nyw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTcxOSwxMiArNzI3LDE1IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTDI0PXkKQEAgLTc5Niw3ICs4MDcsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTgyNiwxMCArODM5LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTYxLDYgKzk3MSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTAxNiw5ICsxMDI3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiBDT05GSUdfRFMxNjgyPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA1MSwxNCArMTA1OSwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTA5LDYgKzExMjcsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTIwLDkgKzExMzksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMTYyLDYgKzExNzksNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTcyLDYgKzExOTAsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTkyLDcgKzEyMTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTUsNiArMTIzMyw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyNjcsNiArMTI4Niw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEzNDIsNiArMTM2Miw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xNDQ2LDYgKzE0NjcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTUyMSw3ICsxNTQzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTYyNyw2ICsxNjQ4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjQyLDYgKzE2NjQsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTY2Myw3ICsxNjg2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE3MDYsMTEgKzE3MjgsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz1tCiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKaW5kZXggYmE0Nzg4My4uM2IwZmJmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjMwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0OCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArODksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMSwyMSArMTMzLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUzLDEyICsxNTQsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU3LDYgKzI2MCw3IEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTUwMyw2ICs1MDgsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKIENPTkZJR19USVBDPW0KICMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAogIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC01ODIsNiArNTg4LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNTg5LDcgKzU5Niw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTYwMiw2ICs2MDgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTYxMSw5ICs2MTgsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC03ODAsNiArNzg3LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtODE5LDExICs4MjcsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC04NDYsNiArODU3LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC04NzMsNiArODg1LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtOTQ5LDcgKzk2Miw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtOTc5LDEwICs5OTQsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMTIwLDYgKzExMzIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTExNzUsOSArMTE4OCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogQ09ORklHX0RTMTY4Mj15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEyMTEsMTQgKzEyMjEsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTI2OSw2ICsxMjg5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTI4MCw5ICsxMzAxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTMyMiw2ICsxMzQxLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTMzMiw2ICsxMzUyLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTM1Miw3ICsxMzczLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMzc1LDYgKzEzOTUsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xNDI3LDYgKzE0NDgsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xNTAyLDYgKzE1MjQsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVE0gaXMgbm90IHNldApAQCAtMTYwNyw2ICsxNjMwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE2NjksNyArMTY5Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE3NzUsNiArMTc5OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTc5MSw2ICsxODE1LDcgQEAKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUFJFRU1QVD15CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xODEwLDEwICsxODM1LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE4MzcsMTAgKzE4NjQsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xODcyLDcgKzE4OTksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9bQpAQCAtMTkxNSwxMSArMTk0MSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZwppbmRleCBhNjFmMTgzLi5kZTRkNTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0NSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MywxMSArODQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEyNiwyMiArMTI4LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ5LDYgKzE1MCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjUxLDYgKzI1NCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjgsNiArMjcyLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zODUsNiArMzkwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTQsNiArNDIwLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQyMSw3ICs0MjgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzQsNiArNDQwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDQ1LDkgKzQ1Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTY2Miw2ICs2NjksNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC03MDEsMTEgKzcwOSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03MjgsNiArNzM5LDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzU1LDYgKzc2Nyw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTgxOCwxNCArODMxLDEzIEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTI5LDYgKzk0MSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05ODIsOSArOTk1LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDAyLDcgKzEwMTIsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAyMSw2ICsxMDMwLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAzMSw2ICsxMDQxLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTEwNyw2ICsxMTE4LDcgQEAKICMgQ09ORklHX0xPR08gaXMgbm90IHNldAogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTEyMDksNyArMTIyMSw2IEBACiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMzI5LDYgKzEzNDAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC0xMzg4LDcgKzE0MDAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTA1LDYgKzE1MTYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTUyMiw2ICsxNTM0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE1NDEsMTAgKzE1NTQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTU2NywxMCArMTU4MiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE1OTcsNyArMTYxMiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNjI5LDExICsxNjQzLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwppbmRleCA3MDE2Y2U3Li43NTRhNzliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0NiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NywxMSArODgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMCwyMiArMTMyLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUzLDcgKzE1NCw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1MSwxMyArMjU0LDEzIEBACiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NSw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwNCw2ICs0MDgsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MzQsNiArNDM5LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQxLDcgKzQ0Nyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ1NCw2ICs0NTksNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NDYsNiArNTUyLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01ODUsMTEgKzU5MiwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTIsNiArNjIyLDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjM5LDYgKzY1MCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcxNSw3ICs3MjcsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTc2MywxMCArNzc3LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODgwLDYgKzg5MSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05MzQsOSArOTQ2LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05NTQsNyArOTYzLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTk3Myw2ICs5ODEsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05ODMsNiArOTkyLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTAwMiw2ICsxMDEyLDcgQEAKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTA1LDcgKzExMTYsNiBAQAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTI4LDYgKzExMzgsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMTgwLDYgKzExOTEsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTEzNTgsNiArMTM3MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDI4LDcgKzE0NDEsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU0Niw2ICsxNTU4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1NjMsNiArMTU3Niw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNTgyLDEwICsxNTk2LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2MDgsMTAgKzE2MjQsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNjM4LDcgKzE2NTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE2ODAsMTEgKzE2OTUsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZwppbmRleCBmNWNhMmUwLi44OTk5MWYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODcsMTEgKzg4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzAsMjEgKzEzMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MiwxMyArMTUzLDE1IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKICMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1Nyw2ICsyNjAsNyBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC01MDIsNiArNTA3LDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiBDT05GSUdfVElQQz1tCiAjIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldApAQCAtNTgxLDYgKzU4Nyw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTU4OCw3ICs1OTUsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02MDEsNiArNjA3LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MTAsOSArNjE3LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtODMzLDcgKzg0MCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODYzLDEwICs4NzIsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05OTYsNiArMTAwMiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTA0OSw5ICsxMDU2LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDY5LDYgKzEwNzMsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTExOCw2ICsxMTI3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTEyOSw5ICsxMTM5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE2NCw2ICsxMTcyLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTE3NCw2ICsxMTgzLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTE5NCw3ICsxMjA0LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEyNzQsNiArMTI4Myw3IEBACiAjIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzNDMsNyArMTM1Myw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDUxLDYgKzE0NjAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDY3LDYgKzE0NzcsNyBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTE0ODYsMTAgKzE0OTcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTUxNCwxMCArMTUyNywxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNTUwLDcgKzE1NjMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9bQpAQCAtMTU5MywxMSArMTYwNSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZwppbmRleCBhZWNlNmJiLi4wNTJjZjEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjQ3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowNCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzh4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTc4LDExICs4MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE2LDI4ICsxMTksMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yMzUsMTAgKzIzOSwxMCBAQAogIyBDT05GSUdfOFhYX01JTklNQUxfRlBFTVUgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTYsNiArMjYwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMzgsNiArMzQzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjcsNiArMzczLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM3NCw3ICszODEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zODcsNiArMzkzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MzAsMTYgKzUzNywxNSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GRUM9eQogQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU4MCw2ICs1ODYsNyBAQAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTU5MCw2ICs1OTcsNyBAQAogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKICMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKQEAgLTcxNiw2ICs3MjQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03NzUsNyArNzg0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODQ3LDYgKzg1NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg2NCw2ICs4NzMsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKQEAgLTg4MCwxMCArODkwLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTkwNiwxMCArOTE4LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCmluZGV4IDgxMDUzNjAuLjBmYjY1YTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQorQ09ORklHX1BQQ19QRVJGX0NUUlM9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX0NIRUNLX0NBQ0hFX0NPSEVSRU5DWT15CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzkwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMzUsMjMgKzEzOCwyNCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQpAQCAtMTYxLDEyICsxNjUsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCiAjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNzUsMTIgKzI4MSwxMiBAQAogQ09ORklHX0JJTkZNVF9NSVNDPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yOTgsNiArMzA0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMDksNiArMzE2LDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC02NzQsMTAgKzY4MiwxMiBAQAogIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lCRlVTQj1tCiBDT05GSUdfQlRfSENJVkhDST1tCisjIENPTkZJR19CVF9NUlZMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNjg2LDcgKzY5Niw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTY5OSw2ICs3MDgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC03MTAsOSArNzIwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9bQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTc2Myw2ICs3NzMsNyBAQAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKICMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0dQSU9fQUREUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIApAQCAtODU3LDYgKzg2OCw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRD1tCiBDT05GSUdfU0NTSV8zV185WFhYPW0KIENPTkZJR19TQ1NJX0FDQVJEPW0KQEAgLTkxMiw3ICs5MjQsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtOTgyLDcgKzk5Niw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtMTAxMCwxMCArMTAyNiw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTExNDUsNiArMTE1OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTIwMCw5ICsxMjE0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfUENGODU3ND1tCi0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTIyMCw2ICsxMjMxLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPW0KIENPTkZJR19IV01PTl9WSUQ9bQorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0FETTEwMjE9bQpAQCAtMTI2OSw2ICsxMjg1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19WSUE2ODZBPW0KICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEyODAsNyArMTI5Nyw2IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19XODM2MjdIRj1tCiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKQEAgLTEzMTcsNiArMTMzMyw3IEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTMyNyw2ICsxMzQ0LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMzc4LDYgKzEzOTYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTU4OCw2ICsxNjA3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE2NjgsNyArMTY4OCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE3NzAsNyArMTc4OSw3IEBACiBDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkNfVDEwRElGPW0KIENPTkZJR19DUkNfSVRVX1Q9bQogQ09ORklHX0NSQzMyPXkKQEAgLTE3OTcsNiArMTgxNiw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE4MTQsNiArMTgzNCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQpAQCAtMTgzNCwxMSArMTg1NSwxMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtMTg1Miw2ICsxODc1LDcgQEAKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xODY5LDYgKzE4OTMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtMTg5OSw2ICsxOTI0LDcgQEAKICMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19MU01fTU1BUF9NSU5fQUREUj02NTUzNgogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVg9eQogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNPXkKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTV9WQUxVRT0xCkBAIC0xOTEzLDcgKzE5MzksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9bQpAQCAtMTk1NiwxMSArMTk4MSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcKaW5kZXggMGFhNWI0My4uZWY1ZWRjNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NDkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTE2LDI4ICsxMTgsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTUwLDYgKzE1Myw3IEBACiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15CiBDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMzLDYgKzIzNyw3IEBACiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMjQ2LDYgKzI1MSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzk0LDYgKzQwMCw3IEBACiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDEsNyArNDA4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQxMyw2ICs0MTksNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTYwMCw3ICs2MDcsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNjQ4LDEwICs2NTcsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MzYsMTUgKzc0MiwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzY3LDYgKzc3Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTY4LDYgKzk3OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTk4LDEwICsxMDEwLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwMjQsNiArMTAzOCw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEwNTIsNyArMTA2Nyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTA5NCw2ICsxMTA4LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZwppbmRleCAyYzI5MmUyLi43M2VmOWJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NDkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzcsMTEgKzc5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTUsMjggKzExOCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzNCwxMCArMjM4LDEwIEBACiBDT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTUsNiArMjU5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMzcsNiArMzQyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjYsNiArMzcyLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM3Myw3ICszODAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zODYsNiArMzkyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MjksMTYgKzUzNiwxNSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GRUM9eQogQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYxMSw3ICs2MTcsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjcyLDYgKzY3Nyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTczMSw3ICs3MzcsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04MDMsNiArODA4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04MjAsNiArODI2LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC04MzYsMTAgKzg0MywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC04NjEsMTAgKzg3MCwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZwppbmRleCA0NTY3MWU3Li42M2MzZThkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjUwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowOCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MywxMSArODQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMSwyMiArMTMzLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTQsMTEgKzE1NSwxMyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1OCw2ICsyNjEsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc1LDYgKzI3OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDgyLDYgKzQ4Nyw3IEBACiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC01MTEsNiArNTE3LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTUxOSw3ICs1MjYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC01MzIsNiArNTM4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTQzLDkgKzU1MCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNzExLDYgKzcxOCw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNzUwLDExICs3NTgsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03NzcsNiArNzg4LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC04MDQsNiArODE2LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODcwLDcgKzg4Myw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtOTE4LDEwICs5MzMsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMDQzLDYgKzEwNTUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwOTcsOSArMTExMCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTExNyw2ICsxMTI3LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExNjYsNiArMTE4MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExNzcsOSArMTE5Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMTk4LDYgKzEyMTIsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMjA4LDYgKzEyMjMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMjI3LDcgKzEyNDMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9bQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNzEsNiArMTI4Niw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xNTAwLDYgKzE1MTYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTU2Nyw3ICsxNTg0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTY4MSw2ICsxNjk3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjk4LDYgKzE3MTUsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTcxNiwxMCArMTczNCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNzQyLDYgKzE3NjIsNyBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtMTc3MSw3ICsxNzkyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xODEzLDExICsxODMzLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwppbmRleCAzMGI2OGJmLi41MjBiMDRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM1Ci0jIEZyaSBBdWcgIDcgMDg6MTk6MTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTIzLDI4ICsxMjUsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjQ3LDYgKzI1MCw3IEBACiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMjYwLDYgKzI2NCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzkwLDYgKzM5NSw3IEBACiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTcsNyArNDAzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQwOSw2ICs0MTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTYwOCw3ICs2MTQsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTYxNiwxMCArNjI0LDcgQEAKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02ODUsNiArNjkwLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03NDAsNyArNzQ2LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtNzcxLDE1ICs3NzYsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc5OSw2ICs4MDgsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC04MDksNiArODE5LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDIyLDYgKzEwMzMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDUyLDEwICsxMDY0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwNzksNiArMTA5Myw3IEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMTA5LDcgKzExMjQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExNTEsNiArMTE2NSw3IEBACiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKaW5kZXggMWFlODVhMy4uNDNjM2M0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjUyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzh4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTc2LDExICs3OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE3LDI3ICsxMjAsMjggQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yMzcsMTAgKzI0MSwxMCBAQAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU4LDYgKzI2Miw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ0LDYgKzM0OSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzczLDYgKzM3OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODAsNyArMzg3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNTUzLDE2ICs1NTksMTUgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKIENPTkZJR19GU19FTkVUX0hBU19TQ0M9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfRkVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVRfTURJT19GRUMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzNSw3ICs2NDAsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzA3LDYgKzcxMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NzYsNyArNzgxLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODUxLDYgKzg1NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODY1LDYgKzg3MCw3IEBACiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTg4Nyw3ICs4OTMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTE4LDExICs5MjMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZwppbmRleCBhYWE0NDE2Li41MjNkNWZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBNb24gQXByIDIwIDExOjA2OjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldApAQCAtNTMsMTIgKzU3LDE0IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03OSwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTAzLDcgKzExMCw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExNiw2ICsxMjIsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQpAQCAtMTI0LDE0ICsxMzcsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0NCw3ICsxNjIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjA1LDcgKzIyMyw3IEBACiBDT05GSUdfUFBDX0JFU1RDT01NPXkKIENPTkZJR19QUENfQkVTVENPTU1fQVRBPXkKIENPTkZJR19QUENfQkVTVENPTU1fRkVDPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19TSU1QTEVfR1BJTz15CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTIyOSwxMSArMjQ3LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDksOSArMjY5LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjY1LDYgKzI4Niw3IEBACiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTM0OSw2ICszNzEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Myw2ICszODYsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4OCw2ICs0MTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM5Nyw5ICs0MjIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ1OCw2ICs0ODMsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDkzLDYgKzUxOSw3IEBACiBDT05GSUdfT0ZfR1BJTz15CiBDT05GSUdfT0ZfSTJDPXkKIENPTkZJR19PRl9TUEk9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTUyOSw3ICs1NTYsOSBAQAogQ09ORklHX0VFUFJPTV9BVDI0PXkKICMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU1MiwxMCArNTgxLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTU3Miw2ICs1OTcsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01ODAsNiArNjA3LDcgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKQEAgLTU5OSw3ICs2MjcsNiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNjExLDExICs2MzgsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MzcsNiArNjY3LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NjUsNiArNjk2LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjg0LDE0ICs3MTYsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzM5LDE2ICs3NzQsMTcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NTQsNiArODkwLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPXkKQEAgLTg4Myw2ICs5MjAsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldApAQCAtOTEwLDEwICs5NDgsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MzUsNiArOTY5LDExIEBACiAjCiBDT05GSUdfU1BJX1NQSURFVj1tCiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKQEAgLTk1NywxNiArOTk2LDI3IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldApAQCAtMTAxOSw2ICsxMDY5LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwMzEsOSArMTA4Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTA3MywzMSArMTEyMywyMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiBDT05GSUdfRFJNPXkKICMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9SMTI4IGlzIG5vdCBzZXQKQEAgLTExNjcsNiArMTIwNiw3IEBACiAjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQorIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9URE8yNE0gaXMgbm90IHNldApAQCAtMTE5OCw3ICsxMjM4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjE3LDEwICsxMjU2LDExIEBACiBDT05GSUdfSElEX0NIRVJSWT15CiAjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTEyMzEsMTAgKzEyNzEsMTEgQEAKICMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTI2MSwxNSArMTMwMiwxNyBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQz15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CkBAIC0xNDAwLDYgKzE0NDMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTE0MTEsNiArMTQ1NSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xNDM0LDYgKzE0NzksMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ1MywxMCArMTUwMiwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE1MzMsMTIgKzE1ODUsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xNjI0LDYgKzE2NzYsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xNjMzLDYgKzE2ODYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY1MCwxMCArMTcwNCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTE2NjUsMTEgKzE3MjMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTY3OCwyMyArMTczNywyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTE3MTksNyArMTc4MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTc2MSwxMSArMTgyMSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKaW5kZXggZjIzNDI4Yy4uZDhiMzY0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjUzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MiwxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyMywyOCArMTI1LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjQxLDYgKzI0NCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTgsNiArMjYyLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTAsNiArMzU1LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzksNiArMzg1LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4Niw3ICszOTMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTksNiArNDA1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00NzgsNiArNDg1LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01MTcsMTEgKzUyNSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU0Myw2ICs1NTQsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU3MCw2ICs1ODIsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NjYsOSArNjc5LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MTUsMTAgKzczMCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgyMiw2ICs4MzQsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtODM2LDkgKzg1Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04NjEsNiArODc2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtODc0LDcgKzg5MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC05MzksNiArOTU0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTk5Nyw3ICsxMDEzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMDY5LDYgKzEwODQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA4Niw2ICsxMTAyLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExMDcsNyArMTEyNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTM4LDExICsxMTU0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZwppbmRleCAwMjcxNmY3Li4wMGZhZDgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MiwxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTExNiwyOSArMTE4LDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE1MSw2ICsxNTQsNyBAQAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKQEAgLTIzNiw2ICsyNDAsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTI0OSw2ICsyNTQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDMsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA0LDcgKzQxMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MTYsNiArNDIyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00NzcsNyArNDg0LDYgQEAKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfU0JDODI0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIApAQCAtNjA0LDcgKzYxMCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC02NTIsMTAgKzY2MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcwNCw2ICs3MDksNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNzE0LDYgKzcyMCw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldApAQCAtNzkzLDE1ICs4MDAsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgyNCw2ICs4MzUsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMzIsNiArMTA0NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA2NywxMCArMTA4MCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDkzLDYgKzExMDgsNyBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMTIxLDcgKzExMzcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExNjMsNiArMTE3OCw3IEBACiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZwppbmRleCA0YTk2Y2I2Li42NGRmZjIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1NSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODYsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjcsMjEgKzEyOSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0OSw2ICsxNTAsOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI2Myw2ICsyNjYsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjgwLDYgKzI4NCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQzLDcgKzM0OCw4IEBACiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zNTgsNyArMzY0LDcgQEAKICMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorQ09ORklHX0lORVRfRVNQPXkKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldApAQCAtMzc3LDYgKzM4Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDA2LDYgKzQxMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTMsNyArNDIxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDI2LDYgKzQzMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDMzLDkgKzQ0MSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTYwOCw2ICs2MTYsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY0NywxMSArNjU2LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjc0LDYgKzY4Niw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzAxLDYgKzcxNCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTc3Nyw3ICs3OTEsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTgwMCw3ICs4MTYsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtODI4LDEwICs4NDMsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05MzUsNiArOTQ3LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05OTAsOSArMTAwMyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTAyNSwxNCArMTAzNSwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMDgzLDYgKzExMDMsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDk0LDkgKzExMTUsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMTM1LDYgKzExNTQsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTQ1LDYgKzExNjUsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTU4LDcgKzExNzksNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExODEsNiArMTIwMSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMzMsNiArMTI1NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZIQ0lfSENEIGlzIG5vdCBzZXQKQEAgLTEyOTEsNiArMTMxMyw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMzM4LDYgKzEzNjEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM5Nyw3ICsxNDIxLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTUxNCw2ICsxNTM3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1MjksNiArMTU1Myw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNTUwLDcgKzE1NzUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQpAQCAtMTU5MSwxMyArMTYxNSwxNSBAQAogIwogIyBIYXNoIG1vZGVzCiAjCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTYwNSwxNiArMTYzMSwxNiBAQAogIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX1NIQTUxMj15CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnCmluZGV4IGVlNmFjYzYuLmExMmU3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyNToyMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzkwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzEsMjIgKzEzNCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NCw3ICsxNTYsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODksNiArMTkzLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVNJX0JJVE1BUD15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMjA2LDcgKzIxMSw3IEBACiBDT05GSUdfTVBDODV4eF9SREI9eQogQ09ORklHX1NPQ1JBVEVTPXkKIENPTkZJR19LU0k4NTYwPXkKLSMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKK0NPTkZJR19YRVNfTVBDODV4eD15CiBDT05GSUdfU1RYX0dQMz15CiBDT05GSUdfVFFNODU0MD15CiBDT05GSUdfVFFNODU0MT15CkBAIC0yNTksMTAgKzI2NCwxMCBAQAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKIENPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yODAsNiArMjg1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMDcsNyArMzEzLDcgQEAKIENPTkZJR19QQ0lfU1lTQ0FMTD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX01TST15CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CkBAIC0zMTUsNyArMzIxLDggQEAKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfSEFTX1JBUElESU89eQotIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0CitDT05GSUdfUkFQSURJTz15CitDT05GSUdfUkFQSURJT19ESVNDX1RJTUVPVVQ9MzAKIAogIwogIyBBZHZhbmNlZCBzZXR1cApAQCAtMzQ1LDcgKzM1Miw3IEBACiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0tFWT1tCitDT05GSUdfTkVUX0tFWT15CiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zNjksMTIgKzM3NiwxMiBAQAogQ09ORklHX0FSUEQ9eQogIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9FU1A9eQogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9UVU5ORUw9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKQEAgLTQxMSw2ICs0MTgsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDEsNiArNDQ5LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQ4LDcgKzQ1Nyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2MSw2ICs0NjksNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NTQsNiArNTYzLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01OTMsMTEgKzYwMywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MjAsNiArNjMzLDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjQ3LDYgKzY2MSw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcyMyw3ICs3MzgsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTc1MCw3ICs3NjcsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNzc4LDEwICs3OTQsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03OTgsNiArODExLDcgQEAKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CkBAIC04OTgsNiArOTEyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk1NSw5ICs5NzAsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk5MSwxNSArMTAwMywxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAyMCw2ICsxMDM2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAzMCw2ICsxMDQ3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTA0OSw2ICsxMDY3LDcgQEAKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTUyLDcgKzExNzEsNiBAQAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTc1LDYgKzExOTMsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjI3LDYgKzEyNDYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTEyNDEsNyArMTI2MSw2IEBACiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTE0MjksNiArMTQ0OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDk5LDcgKzE1MTksNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTYyMCw2ICsxNjM5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjM3LDYgKzE2NTcsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTY1NiwxMCArMTY3NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjgzLDEwICsxNzA2LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE3MTQsNyArMTczNyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNzU3LDExICsxNzc5LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3NjksMTYgKzE3OTMsMTYgQEAKICMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT1tCi0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwppbmRleCBkYjA4MmNlLi5jZDcwYjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyNjowMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19TTVA9eQpAQCAtMzcsNiArMzgsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg5LDExICs5MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMyLDIyICsxMzUsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTUsOCArMTU3LDEwIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTIsNiArMTk2LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVNJX0JJVE1BUD15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMjA2LDkgKzIxMSwxMCBAQAogQ09ORklHX01QQzg1eHhfTURTPXkKIENPTkZJR19NUEM4NTM2X0RTPXkKIENPTkZJR19NUEM4NXh4X0RTPXkKK0NPTkZJR19NUEM4NXh4X1JEQj15CiBDT05GSUdfU09DUkFURVM9eQogQ09ORklHX0tTSTg1NjA9eQotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAorQ09ORklHX1hFU19NUEM4NXh4PXkKIENPTkZJR19TVFhfR1AzPXkKIENPTkZJR19UUU04NTQwPXkKIENPTkZJR19UUU04NTQxPXkKQEAgLTI2MSwxMSArMjY3LDExIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yODMsNiArMjg5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMTAsNyArMzE3LDcgQEAKIENPTkZJR19QQ0lfU1lTQ0FMTD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX01TST15CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CkBAIC0zMTgsNyArMzI1LDggQEAKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfSEFTX1JBUElESU89eQotIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0CitDT05GSUdfUkFQSURJTz15CitDT05GSUdfUkFQSURJT19ESVNDX1RJTUVPVVQ9MzAKIAogIwogIyBBZHZhbmNlZCBzZXR1cApAQCAtMzQ4LDcgKzM1Niw3IEBACiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0tFWT1tCitDT05GSUdfTkVUX0tFWT15CiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zNzIsMTIgKzM4MCwxMiBAQAogQ09ORklHX0FSUEQ9eQogIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9FU1A9eQogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9UVU5ORUw9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKQEAgLTQxNCw2ICs0MjIsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDQsNiArNDUzLDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDUxLDcgKzQ2MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2NCw2ICs0NzMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NTcsNiArNTY3LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01OTYsMTEgKzYwNywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MjMsNiArNjM3LDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjUwLDYgKzY2NSw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcyNiw3ICs3NDIsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTc1Myw3ICs3NzEsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNzgxLDEwICs3OTgsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MDEsNiArODE1LDcgQEAKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CkBAIC05MDEsNiArOTE2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk1OCw5ICs5NzQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk5NCwxNSArMTAwNywxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAyMyw2ICsxMDQwLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAzMyw2ICsxMDUxLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTA1Miw2ICsxMDcxLDcgQEAKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTU1LDcgKzExNzUsNiBAQAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTc4LDYgKzExOTcsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjMwLDYgKzEyNTAsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTEyNDQsNyArMTI2NSw2IEBACiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTE0MzIsNiArMTQ1Miw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTAyLDcgKzE1MjMsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTYyMyw2ICsxNjQzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjQwLDYgKzE2NjEsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTY1OSwxMCArMTY4MSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjg2LDEwICsxNzEwLDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE3MTcsNyArMTc0MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNzYwLDExICsxNzgzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3NzIsMTYgKzE3OTcsMTYgQEAKICMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT1tCi0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2Nl9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcKaW5kZXggNjgwOWI2MS4uNDBkNmYwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzYsMTEgKzc4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTMsMjggKzExNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzMywxMCArMjM3LDEwIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTQsNiArMjU4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDAsNiArMzQ1LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc1LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM3Niw3ICszODMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjcsNiArNDczLDggQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKIENPTkZJR19GU19FTkVUX0hBU19TQ0M9eQogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CkBAIC00NzYsMTAgKzQ4NCw3IEBACiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTIwLDYgKzUyNSw3IEBACiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTMwLDYgKzUzNiw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldApAQCAtNTk1LDYgKzYwMiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02MDUsOSArNjE3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY0MSw3ICs2NTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzA1LDYgKzcxNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NjMsNyArNzczLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODM2LDYgKzg0NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NTEsNiArODYxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTg3MSw3ICs4ODIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTAyLDExICs5MTIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZwppbmRleCAwZTg2ODRhLi41YjNhYmI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzEsMjIgKzEzMywyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NCw3ICsxNTUsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTMsMTMgKzI1NiwxMyBAQAogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzcsNiArMjgwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MDYsNiArNDEwLDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDM2LDYgKzQ0MSw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0Myw3ICs0NDksNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NTYsNiArNDYxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTQ5LDYgKzU1NSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTg4LDExICs1OTUsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjE1LDYgKzYyNSw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY0Miw2ICs2NTMsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MTgsNyArNzMwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03NjYsMTAgKzc4MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg4Myw2ICs4OTQsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTM4LDkgKzk1MCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTc0LDE1ICs5ODMsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMDMsNiArMTAxNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMTMsNiArMTAyNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTEwMzIsNiArMTA0Nyw3IEBACiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTEzNSw3ICsxMTUxLDYgQEAKIENPTkZJR19BQzk3X0JVUz15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE1OCw2ICsxMTczLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIxMCw2ICsxMjI2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CkBAIC0xMzg5LDYgKzE0MDYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ1OSw3ICsxNDc3LDYgQEAKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1NzcsNiArMTU5NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTk0LDYgKzE2MTIsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTYxMywxMCArMTYzMiwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjM5LDEwICsxNjYwLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTY2OSw3ICsxNjkwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzExLDExICsxNzMxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKaW5kZXggZGJlOGU4NjkuLjFkYTM0ODggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzh4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTc3LDExICs3OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE1LDI4ICsxMTgsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDEsMTAgKzI0NSwxMCBAQAogQ09ORklHXzhYWF9NSU5JTUFMX0ZQRU1VPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYyLDYgKzI2Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ0LDYgKzM0OSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzczLDYgKzM3OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODAsNyArMzg3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzkzLDYgKzM5OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTQwLDE2ICs1NDcsMTUgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKIENPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MjIsNyArNjI4LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY4Myw2ICs2ODgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03NDIsNyArNzQ4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODE0LDYgKzgxOSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODMxLDYgKzgzNyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtODQ3LDEwICs4NTQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtODcyLDEwICs4ODEsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZwppbmRleCA0Zjg2ODFjLi4yMGJhMGNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKQEAgLTEsNDkgKzEsNTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzMKLSMgVHVlIE1heSAyNyAxNjowODowNiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmMzCisjIFR1ZSBPY3QgIDYgMTA6Mjc6MTggMjAwOQogIwogQ09ORklHX1BQQzY0PXkKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIworQ09ORklHX1BQQ19CT09LM1NfNjQ9eQorIyBDT05GSUdfUFBDX0JPT0szRV82NCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0JPT0szUz15CiBDT05GSUdfUE9XRVI0X09OTFk9eQogQ09ORklHX1BPV0VSND15CiAjIENPTkZJR19UVU5FX0NFTEwgaXMgbm90IHNldAogQ09ORklHX1BQQ19GUFU9eQogQ09ORklHX0FMVElWRUM9eQorIyBDT05GSUdfVlNYIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfNjQ9eQogQ09ORklHX1BQQ19NTV9TTElDRVM9eQogIyBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQorQ09ORklHX1BQQ19QRVJGX0NUUlM9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX1dPUkRfU0laRT02NAotQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CitDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfUFBDPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfUFBDX09GPXkKIENPTkZJR19PRj15CkBAIC01MSwxMSArNjAsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzIsMTAgKzg0LDIwIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTY0CisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtODQsMTMgKzEwNiwxNyBAQAogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC05OCwzMiArMTI0LDUyIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUE9JTlRTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTEzMSwxMSArMTc3LDEwIEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogQ09ORklHX0JMT0NLX0NPTVBBVD15CiAKICMKQEAgLTE1MCwxOSArMTk1LDE0IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CiAjCi1DT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUEFTRU1JPXkKQEAgLTE3OCw4ICsyMTgsMTAgQEAKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9RUEFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ19OQVRJVkU9eQorQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQogIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKQEAgLTIxMyw2ICsyNTUsNyBAQAogIwogQ09ORklHX1BQQ19QQVNFTUlfQ1BVRlJFUT15CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTIyNiwxNiArMjY5LDE5IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogQ09ORklHX0haXzEwMDA9eQogQ09ORklHX0haPTEwMDAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfSFJUSUNLPXkKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15CiBDT05GSUdfSU9NTVVfVk1FUkdFPXkKIENPTkZJR19JT01NVV9IRUxQRVI9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKQEAgLTI0Myw2ICsyODksNyBAQAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTI1MywyMCArMzAwLDI4IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQorIyBDT05GSUdfUFBDXzRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX1BQQ182NEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9OQogIyBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKQEAgLTI4NSw2ICszNDAsOCBAQAogQ09ORklHX1BDSV9NU0k9eQogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15CiBDT05GSUdfUENNQ0lBX0RFQlVHPXkKIENPTkZJR19QQ01DSUE9eQpAQCAtMzAxLDEzICszNTgsMTAgQEAKIENPTkZJR19FTEVDVFJBX0NGPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zNTYsOSArNDEwLDExIEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM2OCwyNSArNDI0LDMyIEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zOTgsMTUgKzQ2MSwxOSBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKICMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKIApAQCAtNDc4LDExICs1NDUsMTcgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC01MDEsMjkgKzU3NCw0MSBAQAogIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwogIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci1DT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQogQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERVNDU0k9eQogQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKIENPTkZJR19JREVfUFJPQ19GUz15CiAKQEAgLTU0MiwxNCArNjI3LDEzIEBACiAjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldApAQCAtNTYzLDggKzY0Nyw2IEBACiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSERfT05MWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC01ODYsMTAgKzY2OCw2IEBACiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQogQ09ORklHX0NIUl9ERVZfU0NIPXkKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15CkBAIC02MDYsNiArNjg0LDggQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02MTQsMTEgKzY5NCwxNiBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldApAQCAtNjI2LDcgKzcxMSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MzcsMTAgKzcyMSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQpAQCAtNjYyLDYgKzc1MCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjkwLDYgKzc3OSw3IEBACiBDT05GSUdfUEFUQV9QQ01DSUE9eQogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcwMywxMiArNzkzLDE1IEBACiAjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9eQogQ09ORklHX01EX1JBSUQ0NTY9eQotQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorIyBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC03MjUsMTIgKzgxOCwxOSBAQAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWT15CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzUzLDYgKzg1Myw5IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTc2MSwxOSArODY0LDIzIEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTc4MywxOSArODkwLDIyIEBACiAjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTgwNiwzMCArOTE2LDQwIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogQ09ORklHX1RJR09OMz15CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldAogQ09ORklHX1BBU0VNSV9NQUM9eQorIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTg3NCwxNyArOTk0LDIzIEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldApAQCAtOTAwLDYgKzEwMjYsNyBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldApAQCAtOTI2LDEwICsxMDUzLDEzIEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NAorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTV9QQVNFTUk9eQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldApAQCAtOTQ4LDU3ICsxMDc4LDg1IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD15CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotQ09ORklHX0kyQ19QQVNFTUk9eQotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUEFTRU1JPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fTEVHQUNZPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogQ09ORklHX0hXTU9OX1ZJRD15CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIworIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CkBAIC0xMDA2LDE0ICsxMTY0LDE3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtMTAyOCwxMCArMTE4OSwxNCBAQAogQ09ORklHX1NFTlNPUlNfTE05MD15CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKQEAgLTEwMzksNiArMTIwNCw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDUwLDQ0ICsxMjE3LDQwIEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiBDT05GSUdfRFJNPXkKK0NPTkZJR19EUk1fS01TX0hFTFBFUj15CitDT05GSUdfRFJNX1RUTT15CiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0CiBDT05GSUdfRFJNX1JBREVPTj15CkBAIC0xMDk5LDYgKzEyNjIsNyBAQAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQl9EREM9eQorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTExNDAsNiArMTMwNCw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtMTE0OCwxMiArMTMxMywxNiBAQAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CkBAIC0xMTc3LDE1ICsxMzQ2LDkgQEAKIENPTkZJR19MT0dPX0xJTlVYX01PTk89eQogQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTk4LDI0ICsxMzYxLDI0IEBACiBDT05GSUdfU05EX1BDTV9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIworQ09ORklHX1NORF9SQVdNSURJX1NFUT15CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUENJPXkKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CkBAIC0xMjM0LDYgKzEzOTcsNyBAQAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldApAQCAtMTI0Niw2ICsxNDEwLDggQEAKICMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKQEAgLTEyNjIsNiArMTQyOCw3IEBACiAjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CkBAIC0xMjc3LDU3ICsxNDQ0LDY0IEBACiAjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgUG93ZXJNYWMgZGV2aWNlcwotIwotCi0jCi0jIEFMU0EgUG93ZXJQQyBkZXZpY2VzCi0jCi0KLSMKLSMgVVNCIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUFBDPXkKK0NPTkZJR19TTkRfVVNCPXkKIENPTkZJR19TTkRfVVNCX0FVRElPPXkKIENPTkZJR19TTkRfVVNCX1VTWDJZPXkKICMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBkZXZpY2VzCi0jCitDT05GSUdfU05EX1BDTUNJQT15CiAjIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAotIwogIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCi0jCi0KLSMKLSMgU29DIEF1ZGlvIGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgT01BUAotIwotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKKyMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0tZRT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfVFdJTkhBTj15CitDT05GSUdfSElEX0tFTlNJTkdUT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19ISURfR1JFRU5BU0lBPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz15CisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1pFUk9QTFVTPXkKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTM0MywxOCArMTUxNywyNiBAQAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTM2Myw2ICsxNTQ1LDggQEAKIENPTkZJR19VU0JfU0w4MTFfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xMzcwLDIwICsxNTU0LDIwIEBACiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTEzOTksNyArMTU4Myw2IEBACiAjCiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC0xNDEyLDcgKzE1OTUsNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xNDIwLDcgKzE2MDMsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTE0MjksNyArMTYxMSwxNSBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTQ0Myw2ICsxNjMzLDcgQEAKICMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0VEQUNfTU1fRURBQz15CiBDT05GSUdfRURBQ19QQVNFTUk9eQorIyBDT05GSUdfRURBQ19DUEM5MjUgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTQ3Miw2ICsxNjYzLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQ4MSwyMSArMTY3NSwzMSBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTUwNCwxMSArMTcwOCwxMyBAQAogIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1MTYsNiArMTcyMiwxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTUyNSw2ICsxNzM1LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19JU085NjYwX0ZTPXkKQEAgLTE1NDksMTYgKzE3NjQsMTQgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19DT05GSUdGU19GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xNTc4LDggKzE3OTEsMTAgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1OTAsMTggKzE4MDUsMTcgQEAKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xNjcyLDI1ICsxODg2LDMwIEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX0lUVV9UPXkKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9bQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xNzAwLDE4ICsxOTE5LDI1IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTcyMSwyNiArMTk0Nyw3MSBAQAogIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdHRVI9eQorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15CiBDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CitDT05GSUdfREVCVUdHRVI9eQogIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCkBAIC0xNzQ5LDIzICsyMDIwLDM0IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX1hPUl9CTE9DS1M9eQogQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0FTWU5DX01FTUNQWT15CiBDT05GSUdfQVNZTkNfWE9SPXkKK0NPTkZJR19BU1lOQ19QUT15CitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQVVUSEVOQz15CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xNzkzLDE0ICsyMDc1LDIwIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9eQogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPXkKIENPTkZJR19DUllQVE9fU0hBMjU2PXkKIENPTkZJR19DUllQVE9fU0hBNTEyPXkKQEAgLTE4MzAsNyArMjExOCwxMyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGFmNDYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwpAQCAtMCwwICsxLDIxOTkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgRnJpIE9jdCAxNiAxMTozNzoxNSAyMDA5CisjCitDT05GSUdfUFBDNjQ9eQorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQk9PSzNTXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQk9PSzNFXzY0PXkKK0NPTkZJR19QUENfQk9PSzNFPXkKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzY0PXkKK0NPTkZJR19QUENfQk9PSzNFX01NVT15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CitDT05GSUdfUFBDX1BFUkZfQ1RSUz15CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTMyCitDT05GSUdfNjRCSVQ9eQorQ09ORklHX1dPUkRfU0laRT02NAorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQorQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0PXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0NPTVBBVD15CitDT05GSUdfU1lTVklQQ19DT01QQVQ9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfVEFTS1NUQVRTPXkKK0NPTkZJR19UQVNLX0RFTEFZX0FDQ1Q9eQorIyBDT05GSUdfVEFTS19YQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTY0CisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUFM9eQorIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfRlJFRVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQorIyBDT05GSUdfQ0dST1VQX0NQVUFDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorQ09ORklHX0JMT0NLX0NPTVBBVD15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorCisjCisjIENQVSBGcmVxdWVuY3kgZHJpdmVycworIworIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT01QQVRfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19JT01NVV9WTUVSR0U9eQorQ09ORklHX0lPTU1VX0hFTFBFUj15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfSVJRX0FMTF9DUFVTPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CitDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKK0NPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15CisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorIyBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMworIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisjIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorQ09ORklHX1BDSV9NU0k9eQorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorQ09ORklHX1BDTUNJQV9JT0NUTD15CitDT05GSUdfQ0FSREJVUz15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCisjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0CisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAorIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHX1BDST1tCisjIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfU0hQQyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxPQ0FUQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMDAwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAwMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19ORVQ9eQorQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9bQorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD15CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CitDT05GSUdfSU5FVF9MUk89eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KKyMgQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEUgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfVFBST1hZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFBST1hZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEw9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQ9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9ERUZSQUdfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz15CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CitDT05GSUdfQkxLX0RFVl9GRD15CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX1RJTUlOR1M9eQorQ09ORklHX0lERV9BVEFQST15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKK0NPTkZJR19CTEtfREVWX0lERVBDST15CitDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9BTUQ3NFhYPXkKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUE9eQorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX05FVExJTks9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQorQ09ORklHX1NDU0lfRkNfQVRUUlM9eQorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NSUF9BVFRSUz15CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CitDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCitDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKK0NPTkZJR19TQ1NJX0lQUj15CitDT05GSUdfU0NTSV9JUFJfVFJBQ0U9eQorQ09ORklHX1NDU0lfSVBSX0RVTVA9eQorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MUEZDPW0KKyMgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ERUJVRz1tCisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMMjQ9eQorQ09ORklHX0FUQV9TRkY9eQorQ09ORklHX1NBVEFfU1ZXPXkKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKK0NPTkZJR19NRF9BVVRPREVURUNUPXkKK0NPTkZJR19NRF9MSU5FQVI9eQorQ09ORklHX01EX1JBSUQwPXkKK0NPTkZJR19NRF9SQUlEMT15CitDT05GSUdfTURfUkFJRDEwPXkKK0NPTkZJR19NRF9SQUlENDU2PXkKKyMgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2IGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENl9QUT15CisjIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX0ZBVUxUWT1tCitDT05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorIyBDT05GSUdfRE1fTE9HX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KKyMgQ09ORklHX0RNX01VTFRJUEFUSF9RTCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9NVUxUSVBBVEhfU1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorQ09ORklHX0lFRUUxMzk0PXkKK0NPTkZJR19JRUVFMTM5NF9PSENJMTM5ND15CisjIENPTkZJR19JRUVFMTM5NF9QQ0lMWU5YIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFMTM5NF9TQlAyPW0KK0NPTkZJR19JRUVFMTM5NF9FVEgxMzk0X1JPTV9FTlRSWT15CitDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCitDT05GSUdfSUVFRTEzOTRfUkFXSU89eQorQ09ORklHX0lFRUUxMzk0X1ZJREVPMTM5ND1tCitDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KKyMgQ09ORklHX0lFRUUxMzk0X1ZFUkJPU0VERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKKyMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0CitDT05GSUdfV0lOREZBUk09eQorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorQ09ORklHX0JST0FEQ09NX1BIWT1tCisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorQ09ORklHX1NVTkdFTT15CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfVkVORE9SXzNDT009eQorQ09ORklHX1ZPUlRFWD15CisjIENPTkZJR19UWVBIT09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorQ09ORklHX1BDTkVUMzI9eQorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorQ09ORklHX0FDRU5JQz15CitDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19USUdPTjM9eQorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKK0NPTkZJR19JWEdCPW0KKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19UUj15CitDT05GSUdfSUJNT0w9eQorIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldAorIyBDT05GSUdfVE1TMzgwVFIgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT15CisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SQVdfRFJJVkVSPXkKK0NPTkZJR19NQVhfUkFXX0RFVlM9MjU2CisjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorQ09ORklHX0kyQ19BTUQ4MTExPXkKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKK0NPTkZJR19GQl9EREM9eQorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorQ09ORklHX0ZCX01BQ01PREVTPXkKK0NPTkZJR19GQl9CQUNLTElHSFQ9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorQ09ORklHX0ZCX09GPXkKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NQVRST1g9eQorQ09ORklHX0ZCX01BVFJPWF9NSUxMRU5JVU09eQorQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15CitDT05GSUdfRkJfTUFUUk9YX0c9eQorQ09ORklHX0ZCX01BVFJPWF9JMkM9bQorQ09ORklHX0ZCX01BVFJPWF9NQVZFTj1tCitDT05GSUdfRkJfUkFERU9OPXkKK0NPTkZJR19GQl9SQURFT05fSTJDPXkKK0NPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKKyMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CitDT05GSUdfRkJfSUJNX0dYVDQ1MDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD1tCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCitDT05GSUdfU05EX1NFUVVFTkNFUj1tCitDT05GSUdfU05EX1NFUV9EVU1NWT1tCitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDST15CisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorQ09ORklHX1NORF9QUEM9eQorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ01DSUE9eQorIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKKyMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0tZRT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfVFdJTkhBTj15CitDT05GSUdfSElEX0tFTlNJTkdUT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19ISURfR1JFRU5BU0lBPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz15CisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1pFUk9QTFVTPXkKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9BUFBMRURJU1BMQVk9bQorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORD1tCisjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1MgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CitDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCitDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15CisjIENPTkZJR19JTkZJTklCQU5EX0lQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfTkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KKyMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00gaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQorIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lTRVI9bQorQ09ORklHX0VEQUM9eQorCisjCisjIFJlcG9ydGluZyBzdWJzeXN0ZW1zCisjCisjIENPTkZJR19FREFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19FREFDX01NX0VEQUM9eQorIyBDT05GSUdfRURBQ19DUEM5MjUgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDJfRlNfWElQPXkKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0VYVDRfRlNfWEFUVFI9eQorQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX1hJUD15CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz15CisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KRlNfRlM9eQorQ09ORklHX0pGU19QT1NJWF9BQ0w9eQorQ09ORklHX0pGU19TRUNVUklUWT15CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPW0KKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorIyBDT05GSUdfSk9MSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YyX0FDTD15CitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WM19BQ0w9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19TVU5SUENfWFBSVF9SRE1BPW0KK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTM9bQorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorQ09ORklHX0NJRlNfWEFUVFI9eQorQ09ORklHX0NJRlNfUE9TSVg9eQorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj15CitDT05GSUdfQ1JDX1QxMERJRj15CitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MjA0OAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CitDT05GSUdfU0NIRURTVEFUUz15CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRV9JUlFGTEFHUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorQ09ORklHX0xBVEVOQ1lUT1A9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDRVJfTUFYX1RSQUNFPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19HRU5FUklDX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFTT0ZGX1RSQUNFUj15CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CitDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CitDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUPXkKK0NPTkZJR19GVFJfRklYVVBfU0VMRlRFU1Q9eQorQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1Q9eQorQ09ORklHX1hNT049eQorIyBDT05GSUdfWE1PTl9ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKK0NPTkZJR19ERUJVR0dFUj15CitDT05GSUdfSVJRU1RBQ0tTPXkKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9eQorQ09ORklHX0FTWU5DX0NPUkU9eQorQ09ORklHX0FTWU5DX01FTUNQWT15CitDT05GSUdfQVNZTkNfWE9SPXkKK0NPTkZJR19BU1lOQ19QUT15CitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19DVFI9bQorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19HSEFTSD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTFpPPW0KKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHEyZmFkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwppbmRleCBmZjk2YmI0Li5iNzkxMTIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjAsMjkgKzEyMiwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xNTUsNiArMTU4LDcgQEAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0yMzksNiArMjQzLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNTIsNiArMjU3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MDEsNiArNDA3LDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwOCw3ICs0MTUsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDIwLDYgKzQyNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDgxLDcgKzQ4OCw2IEBACiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX1NCQzgyNDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTY2NCw3ICs2NzAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNzEyLDEwICs3MjAsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NjQsNiArNzY5LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTc3NCw2ICs3ODAsNyBAQAogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKICMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKQEAgLTg1NSwxNSArODYyLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04ODYsNiArODk3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtOTA1LDcgKzkxNyw2IEBACiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCkBAIC05MjIsNiArOTMzLDcgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CkBAIC05NDAsNiArOTUyLDcgQEAKICMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD15CiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldApAQCAtMTE0OCw2ICsxMTYxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTgzLDEwICsxMTk3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEyMDksNiArMTIyNSw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyMzcsNyArMTI1NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTI3OSw2ICsxMjk1LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwppbmRleCAxMjkzYzQ2Li5lZjUwY2U0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTMxLDI4ICsxMzMsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDQsMTIgKzI0NywxMiBAQAogQ09ORklHX0JJTkZNVF9NSVNDPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjcsNiArMjcwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjAsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODksNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Niw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MDksNiArNDE0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNjMzLDYgKzYzOSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjcyLDExICs2NzksMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02OTgsNiArNzA4LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MjUsNiArNzM2LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODIzLDkgKzgzNSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODcxLDEwICs4ODUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05NzcsNiArOTg4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDMxLDkgKzEwNDMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNTEsNiArMTA2MCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTAwLDYgKzExMTQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTExLDkgKzExMjYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTEzMiw2ICsxMTQ1LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTE0Miw2ICsxMTU2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTE2Miw3ICsxMTc3LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTg2LDYgKzEyMDAsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiBDT05GSUdfSElEX0tZRT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfVFdJTkhBTj15CiBDT05GSUdfSElEX0tFTlNJTkdUT049eQogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjM5LDYgKzEyNTQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xNDA0LDYgKzE0MjAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ2Myw3ICsxNDgwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xNTc2LDYgKzE1OTIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU5Myw2ICsxNjEwLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE2MTQsNyArMTYzMiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNjQ1LDExICsxNjYyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0b3JjZW50ZXJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKaW5kZXggMjgzODRkYy4uNTI0MjYzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE4LDI4ICsxMjAsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDMsNiArMjQ2LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OSw2ICszNTQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OCw2ICszODQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg1LDcgKzM5Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQwNSw5ICs0MTIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjE5LDYgKzYyNiw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY1Nyw3ICs2NjUsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjcwLDYgKzY4MCw3IEBACiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ0NTY9eQogQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKQEAgLTcyOSwxMCArNzQwLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODEzLDYgKzgyMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY3LDkgKzg3Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODg3LDcgKzg5Myw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MDYsNiArOTExLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTE2LDYgKzkyMiw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTYxLDYgKzk2OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTExNDEsNiArMTE0OSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjEwLDcgKzEyMTksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAogQ09ORklHX0VYUE9SVEZTPW0KIApAQCAtMTMwNyw2ICsxMzE1LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTMyNCw2ICsxMzMzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzNDQsNiArMTM1NCw4IEBACiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCA5ZGFkZTE1Li42ZDk0ZDI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0xNSw3ICsxNSwxNiBAQAogCiAJLyogRE1BIG9wZXJhdGlvbnMgb24gdGhhdCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZG1hX21hcF9vcHMJKmRtYV9vcHM7Ci0Jdm9pZAkJCSpkbWFfZGF0YTsKKworCS8qCisJICogV2hlbiBhbiBpb21tdSBpcyBpbiB1c2UsIGRtYV9kYXRhIGlzIHVzZWQgYXMgYSBwdHIgdG8gdGhlIGJhc2Ugb2YgdGhlCisJICogaW9tbXVfdGFibGUuICBPdGhlcndpc2UsIGl0IGlzIGEgc2ltcGxlIG51bWVyaWNhbCBvZmZzZXQuCisJICovCisJdW5pb24geworCQlkbWFfYWRkcl90CWRtYV9vZmZzZXQ7CisJCXZvaWQJCSppb21tdV90YWJsZV9iYXNlOworCX0gZG1hX2RhdGE7CisKICNpZmRlZiBDT05GSUdfU1dJT1RMQgogCWRtYV9hZGRyX3QJCW1heF9kaXJlY3RfZG1hX2FkZHI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggY2IyY2E0MS4uZTI4MWRhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTI2LDcgKzI2LDYgQEAKIGV4dGVybiB2b2lkIGRtYV9kaXJlY3RfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9kbWFfZGlyZWN0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQogLyoKQEAgLTkwLDYgKzg5LDI4IEBACiAJZGV2LT5hcmNoZGF0YS5kbWFfb3BzID0gb3BzOwogfQogCisvKgorICogZ2V0X2RtYV9vZmZzZXQoKQorICoKKyAqIEdldCB0aGUgZG1hIG9mZnNldCBvbiBjb25maWd1cmF0aW9ucyB3aGVyZSB0aGUgZG1hIGFkZHJlc3MgY2FuIGJlIGRldGVybWluZWQKKyAqIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYnkgbG9va2luZyBhdCBhIHNpbXBsZSBvZmZzZXQuICBEaXJlY3QgZG1hIGFuZAorICogc3dpb3RsYiB1c2UgdGhpcyBmdW5jdGlvbiwgYnV0IGl0IGlzIHR5cGljYWxseSBub3QgdXNlZCBieSBpbXBsZW1lbnRhdGlvbnMKKyAqIHdpdGggYW4gaW9tbXUuCisgKi8KK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBnZXRfZG1hX29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldikKKwkJcmV0dXJuIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEuZG1hX29mZnNldDsKKworCXJldHVybiBQQ0lfRFJBTV9PRkZTRVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZG1hX29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3Qgb2ZmKQoreworCWlmIChkZXYpCisJCWRldi0+YXJjaGRhdGEuZG1hX2RhdGEuZG1hX29mZnNldCA9IG9mZjsKK30KKwogLyogdGhpcyB3aWxsIGJlIHJlbW92ZWQgc29vbiAqLwogI2RlZmluZSBmbHVzaF93cml0ZV9idWZmZXJzKCkKIApAQCAtMTgxLDEyICsyMDIsMTIgQEAKIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBoeXNfdG9fZG1hKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGFkZHIpCiB7Ci0JcmV0dXJuIHBhZGRyICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJcmV0dXJuIHBhZGRyICsgZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCBkbWFfdG9fcGh5cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZGFkZHIpCiB7Ci0JcmV0dXJuIGRhZGRyIC0gZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJcmV0dXJuIGRhZGRyIC0gZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIH0KIAogI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCmluZGV4IDNhMTc5ODIuLjIwNzc4YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfVklPCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDA0MDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1JETUEJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDgwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfTExBTgkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAxMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9CVUxLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDIwMDAwKQorI2RlZmluZSBGV19GRUFUVVJFX0JVTEtfUkVNT1ZFCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfWERBQlIJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDA0MDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9NVUxUSVRDRQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDgwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1NQTFBBUglBU01fQ09OU1QoMHgwMDAwMDAwMDAwMTAwMDAwKQpAQCAtNDUsOCArNDUsNyBAQAogI2RlZmluZSBGV19GRUFUVVJFX0xQQVIJCUFTTV9DT05TVCgweDAwMDAwMDAwMDA0MDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfUFMzX0xWMQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwODAwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX0JFQVQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDEwMDAwMDApCi0jZGVmaW5lIEZXX0ZFQVRVUkVfQlVMS19SRU1PVkUJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMjAwMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9DTU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDQwMDAwMDApCisjZGVmaW5lIEZXX0ZFQVRVUkVfQ01PCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC01OCw4ICs1Nyw5IEBACiAJCUZXX0ZFQVRVUkVfUEVSRiB8IEZXX0ZFQVRVUkVfRFVNUCB8IEZXX0ZFQVRVUkVfSU5URVJSVVBUIHwKIAkJRldfRkVBVFVSRV9NSUdSQVRFIHwgRldfRkVBVFVSRV9QRVJGTU9OIHwgRldfRkVBVFVSRV9DUlEgfAogCQlGV19GRUFUVVJFX1ZJTyB8IEZXX0ZFQVRVUkVfUkRNQSB8IEZXX0ZFQVRVUkVfTExBTiB8Ci0JCUZXX0ZFQVRVUkVfQlVMSyB8IEZXX0ZFQVRVUkVfWERBQlIgfCBGV19GRUFUVVJFX01VTFRJVENFIHwKLQkJRldfRkVBVFVSRV9TUExQQVIgfCBGV19GRUFUVVJFX0xQQVIgfCBGV19GRUFUVVJFX0NNTywKKwkJRldfRkVBVFVSRV9CVUxLX1JFTU9WRSB8IEZXX0ZFQVRVUkVfWERBQlIgfAorCQlGV19GRUFUVVJFX01VTFRJVENFIHwgRldfRkVBVFVSRV9TUExQQVIgfCBGV19GRUFUVVJFX0xQQVIgfAorCQlGV19GRUFUVVJFX0NNTywKIAlGV19GRUFUVVJFX1BTRVJJRVNfQUxXQVlTID0gMCwKIAlGV19GRUFUVVJFX0lTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX0lTRVJJRVMgfCBGV19GRUFUVVJFX0xQQVIsCiAJRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb21tdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKaW5kZXggNzQ2NGMwZC4uZWRmYzk4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKQEAgLTcwLDYgKzcwLDE2IEBACiAKIHN0cnVjdCBzY2F0dGVybGlzdDsKIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9pb21tdV90YWJsZV9iYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYmFzZSkKK3sKKwlkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLmlvbW11X3RhYmxlX2Jhc2UgPSBiYXNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmdldF9pb21tdV90YWJsZV9iYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YS5pb21tdV90YWJsZV9iYXNlOworfQorCiAvKiBGcmVlcyB0YWJsZSBmb3IgYW4gaW5kaXZpZHVhbCBkZXZpY2Ugbm9kZSAqLwogZXh0ZXJuIHZvaWQgaW9tbXVfZnJlZV90YWJsZShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgY29uc3QgY2hhciAqbm9kZV9uYW1lKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYy5oCmluZGV4IGNjYzY4YjUuLjVhOWVkZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmgKQEAgLTI5LDcgKzI5LDcgQEAKIHZvaWQgcmVsZWFzZV9wbWNfaGFyZHdhcmUodm9pZCk7CiB2b2lkIHBwY19lbmFibGVfcG1jcyh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19QUEM2NAorI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHBjX3NldF9wbXVfaW51c2UoaW50IGludXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmgKaW5kZXggNmMzZTFmNC4uZWMwYjBiMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lCV9QQUdFX05PX0NBQ0hFCTB4MDA0CS8qIEk6IGNhY2hpbmcgaXMgaW5oaWJpdGVkICovCiAjZGVmaW5lCV9QQUdFX1dSSVRFVEhSVQkweDAwOAkvKiBXOiBjYWNoaW5nIGlzIHdyaXRlLXRocm91Z2ggKi8KICNkZWZpbmUJX1BBR0VfVVNFUgkweDAxMAkvKiBtYXRjaGVzIG9uZSBvZiB0aGUgem9uZSBwZXJtaXNzaW9uIGJpdHMgKi8KKyNkZWZpbmUJX1BBR0VfU1BFQ0lBTAkweDAyMAkvKiBzb2Z0d2FyZTogU3BlY2lhbCBwYWdlICovCiAjZGVmaW5lCV9QQUdFX1JXCTB4MDQwCS8qIHNvZnR3YXJlOiBXcml0ZXMgcGVybWl0dGVkICovCiAjZGVmaW5lCV9QQUdFX0RJUlRZCTB4MDgwCS8qIHNvZnR3YXJlOiBkaXJ0eSBwYWdlICovCiAjZGVmaW5lIF9QQUdFX0hXV1JJVEUJMHgxMDAJLyogaGFyZHdhcmU6IERpcnR5ICYgUlcsIHNldCBpbiBleGNlcHRpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCmluZGV4IDk0ZTk3OTcuLmRkNWVhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMgkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCiAjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMgkvKiBJOiBjYWNoZSBpbmhpYml0ICovCiAjZGVmaW5lIF9QQUdFX1NIQVJFRAkweDAwMDQJLyogTm8gQVNJRCAoY29udGV4dCkgY29tcGFyZSAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDAwOAkvKiBTVyBlbnRyeSwgZm9yY2VkIHRvIDAgYnkgdGhlIFRMQiBtaXNzICovCiAKIC8qIFRoZXNlIGZpdmUgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCiAgKiBpbnRvIHRoZSBUTEIuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaAppbmRleCBjM2I2NTA3Li5mMmIzNzAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKQEAgLTI1LDkgKzI1LDYgQEAKICNpZm5kZWYgX1BBR0VfV1JJVEVUSFJVCiAjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkwCiAjZW5kaWYKLSNpZm5kZWYgX1BBR0VfU1BFQ0lBTAotI2RlZmluZSBfUEFHRV9TUEVDSUFMCTAKLSNlbmRpZgogI2lmbmRlZiBfUEFHRV80S19QRk4KICNkZWZpbmUgX1BBR0VfNEtfUEZOCQkwCiAjZW5kaWYKQEAgLTE3OSw3ICsxNzYsNSBAQAogI2RlZmluZSBIQVZFX1BBR0VfQUdQCiAKIC8qIEFkdmVydGlzZSBzdXBwb3J0IGZvciBfUEFHRV9TUEVDSUFMICovCi0jaWZkZWYgX1BBR0VfU1BFQ0lBTAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAotI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCAwYjljOTEzLi4wM2M4NjJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC03MTEsNiArNzExLDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NDUvNzU1ICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmZmMDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKaW5kZXggODdkZGIzZi4uMzc3NzFhNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCkBAIC0xOCw3ICsxOCw3IEBACiBzdGF0aWMgdm9pZCAqZG1hX2lvbW11X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJICAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKIHsKLQlyZXR1cm4gaW9tbXVfYWxsb2NfY29oZXJlbnQoZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzaXplLAorCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNpemUsCiAJCQkJICAgIGRtYV9oYW5kbGUsIGRldmljZV90b19tYXNrKGRldiksIGZsYWcsCiAJCQkJICAgIGRldl90b19ub2RlKGRldikpOwogfQpAQCAtMjYsNyArMjYsNyBAQAogc3RhdGljIHZvaWQgZG1hX2lvbW11X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKLQlpb21tdV9mcmVlX2NvaGVyZW50KGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKKwlpb21tdV9mcmVlX2NvaGVyZW50KGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKIH0KIAogLyogQ3JlYXRlcyBUQ0VzIGZvciBhIHVzZXIgcHJvdmlkZWQgYnVmZmVyLiAgVGhlIHVzZXIgYnVmZmVyIG11c3QgYmUKQEAgLTM5LDggKzM5LDggQEAKIAkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCXJldHVybiBpb21tdV9tYXBfcGFnZShkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHBhZ2UsIG9mZnNldCwgc2l6ZSwKLQkJCSAgICAgIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOworCXJldHVybiBpb21tdV9tYXBfcGFnZShkZXYsIGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHBhZ2UsIG9mZnNldCwKKwkJCSAgICAgIHNpemUsIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOwogfQogCiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJCQkgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JaW9tbXVfdW5tYXBfcGFnZShkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24sCisJaW9tbXVfdW5tYXBfcGFnZShnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24sCiAJCQkgYXR0cnMpOwogfQogCkBAIC01Nyw3ICs1Nyw3IEBACiAJCQkgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzZ2xpc3QsIG5lbGVtcywKKwlyZXR1cm4gaW9tbXVfbWFwX3NnKGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsCiAJCQkgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKQEAgLTY1LDE0ICs2NSwxNCBAQAogCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCWlvbW11X3VubWFwX3NnKGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNnbGlzdCwgbmVsZW1zLCBkaXJlY3Rpb24sCisJaW9tbXVfdW5tYXBfc2coZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKIAkJICAgICAgIGF0dHJzKTsKIH0KIAogLyogV2Ugc3VwcG9ydCBETUEgdG8vZnJvbSBhbnkgbWVtb3J5IHBhZ2UgdmlhIHRoZSBpb21tdSAqLwogc3RhdGljIGludCBkbWFfaW9tbXVfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewotCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YTsKKwlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGdldF9pb21tdV90YWJsZV9iYXNlKGRldik7CiAKIAlpZiAoIXRibCB8fCB0YmwtPml0X29mZnNldCA+IG1hc2spIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLmMKaW5kZXggMjFiNzg0ZC4uNjIxNTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCkBAIC0yMSwxMyArMjEsNiBAQAogICogZGVmYXVsdCB0aGUgb2Zmc2V0IGlzIFBDSV9EUkFNX09GRlNFVC4KICAqLwogCi11bnNpZ25lZCBsb25nIGdldF9kbWFfZGlyZWN0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaWYgKGRldikKLQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWRldi0+YXJjaGRhdGEuZG1hX2RhdGE7Ci0KLQlyZXR1cm4gUENJX0RSQU1fT0ZGU0VUOwotfQogCiB2b2lkICpkbWFfZGlyZWN0X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKQEAgLTM3LDcgKzMwLDcgQEAKIAlyZXQgPSBfX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOwogCWlmIChyZXQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JKmRtYV9oYW5kbGUgKz0gZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJKmRtYV9oYW5kbGUgKz0gZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIAlyZXR1cm4gcmV0OwogI2Vsc2UKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTUxLDcgKzQ0LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJcmV0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCW1lbXNldChyZXQsIDAsIHNpemUpOwotCSpkbWFfaGFuZGxlID0gdmlydF90b19hYnMocmV0KSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCSpkbWFfaGFuZGxlID0gdmlydF90b19hYnMocmV0KSArIGdldF9kbWFfb2Zmc2V0KGRldik7CiAKIAlyZXR1cm4gcmV0OwogI2VuZGlmCkBAIC03NSw3ICs2OCw3IEBACiAJaW50IGk7CiAKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZW50cywgaSkgewotCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKSArIGdldF9kbWFfb2Zmc2V0KGRldik7CiAJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAkJX19kbWFfc3luY19wYWdlKHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOwogCX0KQEAgLTExMCw3ICsxMDMsNyBAQAogewogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCV9fZG1hX3N5bmNfcGFnZShwYWdlLCBvZmZzZXQsIHNpemUsIGRpcik7Ci0JcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldCArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCXJldHVybiBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQgKyBnZXRfZG1hX29mZnNldChkZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2RpcmVjdF91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCA5MDBlMGVlLi45NzYzMjY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC02NTgsNDIgKzY1OCw0MyBAQAogCWNtcGRpCXIwLDAKIAljcmFuZGMJZXEsY3IxKjQrZXEsZXEKIAlibmUJcmVzdG9yZQotCS8qIGhlcmUgd2UgYXJlIHByZWVtcHRpbmcgdGhlIGN1cnJlbnQgdGFzayAqLwotMToKLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlibAkudHJhY2VfaGFyZGlycXNfb24KLQkvKiBOb3RlOiB3ZSBqdXN0IGNsb2JiZXJlZCByMTAgd2hpY2ggdXNlZCB0byBjb250YWluIHRoZSBwcmV2aW91cwotCSAqIE1TUiBiZWZvcmUgdGhlIGhhcmQtZGlzYWJsaW5nIGRvbmUgYnkgdGhlIGNhbGxlciBvZiBkb193b3JrLgotCSAqIFdlIGRvbid0IGhhdmUgdGhhdCB2YWx1ZSBhbnltb3JlLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgYXMKLQkgKiB3ZSB3aWxsIGhhcmQtZW5hYmxlIHVuY29uZGl0aW9uYWxseSwgd2UgY2FuIGp1c3QgcmVsb2FkIHRoZQotCSAqIGN1cnJlbnQgTVNSIGludG8gcjEwCisKKwkvKiBIZXJlIHdlIGFyZSBwcmVlbXB0aW5nIHRoZSBjdXJyZW50IHRhc2suCisJICoKKwkgKiBFbnN1cmUgaW50ZXJydXB0cyBhcmUgc29mdC1kaXNhYmxlZC4gV2UgYWxzbyBwcm9wZXJseSBtYXJrCisJICogdGhlIFBBQ0EgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIGhhcmQtZGlzYWJsZWQKKwkgKiBhbmQgdHJhY2UgdGhlIGNoYW5nZQogCSAqLwotCW1mbXNyCXIxMAotI2VuZGlmIC8qIENPTkZJR19UUkFDRV9JUlFGTEFHUyAqLwotCWxpCXIwLDEKKwlsaQlyMCwwCiAJc3RiCXIwLFBBQ0FTT0ZUSVJRRU4ocjEzKQogCXN0YglyMCxQQUNBSEFSRElSUUVOKHIxMykKKwlUUkFDRV9ESVNBQkxFX0lOVFMKKworCS8qIENhbGwgdGhlIHNjaGVkdWxlciB3aXRoIHNvZnQgSVJRcyBvZmYgKi8KKzE6CWJsCS5wcmVlbXB0X3NjaGVkdWxlX2lycQorCisJLyogSGFyZC1kaXNhYmxlIGludGVycnVwdHMgYWdhaW4gKGFuZCB1cGRhdGUgUEFDQSkgKi8KICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQotCXdydGVlaQkxCi0JYmwJLnByZWVtcHRfc2NoZWR1bGUKIAl3cnRlZWkJMAogI2Vsc2UKLQlvcmkJcjEwLHIxMCxNU1JfRUUKLQltdG1zcmQJcjEwLDEJCS8qIHJlZW5hYmxlIGludGVycnVwdHMgKi8KLQlibAkucHJlZW1wdF9zY2hlZHVsZQogCW1mbXNyCXIxMAotCWNscnJkaQlyOSxyMSxUSFJFQURfU0hJRlQKLQlybGRpY2wJcjEwLHIxMCw0OCwxCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAqLworCXJsZGljbAlyMTAscjEwLDQ4LDEKIAlyb3RsZGkJcjEwLHIxMCwxNgogCW10bXNyZAlyMTAsMQogI2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNFICovCisJbGkJcjAsMAorCXN0YglyMCxQQUNBSEFSRElSUUVOKHIxMykKKworCS8qIFJlLXRlc3QgZmxhZ3MgYW5kIGV2ZW50dWFsbHkgbG9vcCAqLworCWNscnJkaQlyOSxyMSxUSFJFQURfU0hJRlQKIAlsZAlyNCxUSV9GTEFHUyhyOSkKIAlhbmRpLglyMCxyNCxfVElGX05FRURfUkVTQ0hFRAogCWJuZQkxYgogCWIJcmVzdG9yZQogCiB1c2VyX3dvcms6Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLworCiAJLyogRW5hYmxlIGludGVycnVwdHMgKi8KICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQogCXdydGVlaQkxCkBAIC0xMDM4LDggKzEwMzksNyBAQAogCSAqIFdlIGFyZSBpbiBhIG1vZHVsZSB1c2luZyB0aGUgbW9kdWxlJ3MgVE9DLgogCSAqIFN3aXRjaCB0byBvdXIgVE9DIHRvIHJ1biBpbnNpZGUgdGhlIGNvcmUga2VybmVsLgogCSAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNCxmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIpCi0JbGQJcjIsIDgocjQpCisJbGQJcjIsIFBBQ0FUT0MocjEzKQogCiAJYmwJLmZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgogCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCmluZGV4IDkwNDhmOTYuLjI0ZGNjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NGUuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCmluZGV4IGZlOGY3MWQuLjY0MWM3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCkBAIC0yODIsMTIgKzI4Miw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyAqcHRyID0gZ2RiX3JlZ3M7CiAJaW50IHJlZzsKLSNpZmRlZiBDT05GSUdfU1BFCi0JdW5pb24gewotCQl1MzIgdjMyWzJdOwotCQl1NjQgdjY0OwotCX0gYWNjOwotI2VuZGlmCiAKIAlmb3IgKHJlZyA9IDA7IHJlZyA8IDMyOyByZWcrKykKIAkJVU5QQUNLNjQocmVncy0+Z3ByW3JlZ10sIHB0cik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IGU5ZjQ4NDAuLmU4ZGZkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC0xMTE3LDcgKzExMTcsNyBAQAogCiAJCS8qIEhvb2sgdXAgZGVmYXVsdCBETUEgb3BzICovCiAJCXNkLT5kbWFfb3BzID0gcGNpX2RtYV9vcHM7Ci0JCXNkLT5kbWFfZGF0YSA9ICh2b2lkICopUENJX0RSQU1fT0ZGU0VUOworCQlzZXRfZG1hX29mZnNldCgmZGV2LT5kZXYsIFBDSV9EUkFNX09GRlNFVCk7CiAKIAkJLyogQWRkaXRpb25hbCBwbGF0Zm9ybSBETUEvaW9tbXUgc2V0dXAgKi8KIAkJaWYgKHBwY19tZC5wY2lfZG1hX2Rldl9zZXR1cCkKQEAgLTExOTAsNyArMTE5MCw3IEBACiAgKiBSZXBhcmVudCByZXNvdXJjZSBjaGlsZHJlbiBvZiBwciB0aGF0IGNvbmZsaWN0IHdpdGggcmVzCiAgKiB1bmRlciByZXMsIGFuZCBtYWtlIHJlcyByZXBsYWNlIHRob3NlIGNoaWxkcmVuLgogICovCi1zdGF0aWMgaW50IF9faW5pdCByZXBhcmVudF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpwYXJlbnQsCitzdGF0aWMgaW50IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKIAkJCQkgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCByZXNvdXJjZSAqcCwgKipwcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IGJhOTQ5YTIuLmNjZjU2YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwpAQCAtOTcsNyArOTcsOSBAQAogCSAqIHRvIGRvIGFuIGFwcHJvcHJpYXRlIFRMQiBmbHVzaCBoZXJlIHRvbwogCSAqLwogCWlmIChidXMtPnNlbGYpIHsKKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKIAkJc3RydWN0IHJlc291cmNlICpyZXMgPSBidXMtPnJlc291cmNlWzBdOworI2VuZGlmCiAKIAkJcHJfZGVidWcoIklPIHVubWFwcGluZyBmb3IgUENJLVBDSSBicmlkZ2UgJXNcbiIsCiAJCQkgcGNpX25hbWUoYnVzLT5zZWxmKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGJiY2JhZTEuLjg3ZjE2NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMTYsMjAgKzExNiwyMyBAQAogc3RhdGljIGlubGluZSB1MzIgcGVyZl9nZXRfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIG1tY3JhID0gcmVncy0+ZHNpc3I7CisJdW5zaWduZWQgbG9uZyBzaWh2ID0gTU1DUkFfU0lIVjsKKwl1bnNpZ25lZCBsb25nIHNpcHIgPSBNTUNSQV9TSVBSOwogCiAJaWYgKFRSQVAocmVncykgIT0gMHhmMDApCiAJCXJldHVybiAwOwkvKiBub3QgYSBQTVUgaW50ZXJydXB0ICovCiAKIAlpZiAocHBtdS0+ZmxhZ3MgJiBQUE1VX0FMVF9TSVBSKSB7Ci0JCWlmIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSUhWKQotCQkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUjsKLQkJcmV0dXJuIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSVBSKSA/Ci0JCQlQRVJGX1JFQ09SRF9NSVNDX1VTRVIgOiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKKwkJc2lodiA9IFBPV0VSNl9NTUNSQV9TSUhWOworCQlzaXByID0gUE9XRVI2X01NQ1JBX1NJUFI7CiAJfQotCWlmIChtbWNyYSAmIE1NQ1JBX1NJSFYpCisKKwkvKiBQUiBoYXMgcHJpb3JpdHkgb3ZlciBIViwgc28gb3JkZXIgYmVsb3cgaXMgaW1wb3J0YW50ICovCisJaWYgKG1tY3JhICYgc2lwcikKKwkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKKwlpZiAoKG1tY3JhICYgc2lodikgJiYgKGZyZWV6ZV9ldmVudHNfa2VybmVsICE9IE1NQ1IwX0ZDSFYpKQogCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOwotCXJldHVybiAobW1jcmEgJiBNTUNSQV9TSVBSKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6Ci0JCVBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMGEzMjE2NC4uYzkzMGFjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEwMTYsOSArMTAxNiwxMyBAQAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlpbnQgY3Vycl9mcmFtZSA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOwogCWV4dGVybiB2b2lkIHJldHVybl90b19oYW5kbGVyKHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXJldHVybl90b19oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgcnRoID0gKHVuc2lnbmVkIGxvbmcpcmV0dXJuX3RvX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBtcnRoID0gLTE7CiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0JYWRkciA9ICoodW5zaWduZWQgbG9uZyopYWRkcjsKKwlleHRlcm4gdm9pZCBtb2RfcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7CisJcnRoID0gKih1bnNpZ25lZCBsb25nICopcnRoOworCW1ydGggPSAodW5zaWduZWQgbG9uZyltb2RfcmV0dXJuX3RvX2hhbmRsZXI7CisJbXJ0aCA9ICoodW5zaWduZWQgbG9uZyAqKW1ydGg7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xMDQ0LDcgKzEwNDgsNyBAQAogCQlpZiAoIWZpcnN0ZnJhbWUgfHwgaXAgIT0gbHIpIHsKIAkJCXByaW50aygiWyJSRUciXSBbIlJFRyJdICVwUyIsIHNwLCBpcCwgKHZvaWQgKilpcCk7CiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotCQkJaWYgKGlwID09IGFkZHIgJiYgY3Vycl9mcmFtZSA+PSAwKSB7CisJCQlpZiAoKGlwID09IHJ0aCB8fCBpcCA9PSBtcnRoKSAmJiBjdXJyX2ZyYW1lID49IDApIHsKIAkJCQlwcmludGsoIiAoJXBTKSIsCiAJCQkJICAgICAgICh2b2lkICopY3VycmVudC0+cmV0X3N0YWNrW2N1cnJfZnJhbWVdLnJldCk7CiAJCQkJY3Vycl9mcmFtZS0tOwpAQCAtMTE2NSw3ICsxMTY5LDIyIEBACiAKIHVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXVuc2lnbmVkIGxvbmcgcmV0ID0gUEFHRV9BTElHTihtbS0+YnJrICsgYnJrX3JuZCgpKTsKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBtbS0+YnJrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VXzY0CisJLyoKKwkgKiBJZiB3ZSBhcmUgdXNpbmcgMVRCIHNlZ21lbnRzIGFuZCB3ZSBhcmUgYWxsb3dlZCB0byByYW5kb21pc2UKKwkgKiB0aGUgaGVhcCwgd2UgY2FuIHB1dCBpdCBhYm92ZSAxVEIgc28gaXQgaXMgYmFja2VkIGJ5IGEgMVRCCisJICogc2VnbWVudC4gT3RoZXJ3aXNlIHRoZSBoZWFwIHdpbGwgYmUgaW4gdGhlIGJvdHRvbSAxVEIKKwkgKiB3aGljaCBhbHdheXMgdXNlcyAyNTZNQiBzZWdtZW50cyBhbmQgdGhpcyBtYXkgcmVzdWx0IGluIGEKKwkgKiBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCSAqLworCWlmICghaXNfMzJiaXRfdGFzaygpICYmIChtbXVfaGlnaHVzZXJfc3NpemUgPT0gTU1VX1NFR1NJWkVfMVQpKQorCQliYXNlID0gbWF4X3QodW5zaWduZWQgbG9uZywgbW0tPmJyaywgMVVMIDw8IFNJRF9TSElGVF8xVCk7CisjZW5kaWYKKworCXJldCA9IFBBR0VfQUxJR04oYmFzZSArIGJya19ybmQoKSk7CiAKIAlpZiAocmV0IDwgbW0tPmJyaykKIAkJcmV0dXJuIG1tLT5icms7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA4NjQzMzRiLi5iYWZhYzJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTgwMCw3ICs4MDAsNyBAQAogCXJvb3QgPSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCBBRERSKCIvIikpOwogCWlmIChyb290ICE9IDApIHsKIAkJLyogdHJ5IGNhbGxpbmcgdGhlIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQgbWV0aG9kICovCi0JCXByb21fcHJpbnRmKCJDYWxsaW5nIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLi4uIik7CisJCXByb21fcHJpbnRmKCJDYWxsaW5nIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQuLi4iKTsKIAkJaWYgKGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgMywgMiwgJnJldCwKIAkJCQkgIEFERFIoImlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQiKSwKIAkJCQkgIHJvb3QsCkBAIC04MTQsNiArODE0LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQljYWxsX3Byb20oImNsb3NlIiwgMSwgMCwgcm9vdCk7CisJCXByb21fcHJpbnRmKCIgbm90IGltcGxlbWVudGVkXG4iKTsKIAl9CiAKIAkvKiBubyBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IGNhbGwsIHRyeSB0aGUgb2xkIHdheSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDc5N2VhOTUuLjA0ZjYzOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTU3LDcgKzU3LDYgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KLSNpbmNsdWRlIDxhc20vbW11LWhhc2g2NC5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKaW5kZXggOTJkYzg0NC4uYTEzNmExMWM0OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC03NzcsNyArNzc3LDcgQEAKIAlyZXR1cm4gcHBjX21kLnNldF9ydGNfdGltZSgmdG0pOwogfQogCi12b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQorc3RhdGljIHZvaWQgX19yZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJc3RhdGljIGludCBmaXJzdCA9IDE7CkBAIC04MDAsMTAgKzgwMCwyMyBAQAogCQlyZXR1cm47CiAJfQogCXBwY19tZC5nZXRfcnRjX3RpbWUoJnRtKTsKKwogCXRzLT50dl9zZWMgPSBta3RpbWUodG0udG1feWVhcisxOTAwLCB0bS50bV9tb24rMSwgdG0udG1fbWRheSwKIAkJCSAgICB0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYyk7CiB9CiAKK3ZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJX19yZWFkX3BlcnNpc3RlbnRfY2xvY2sodHMpOworCisJLyogU2FuaXRpemUgaXQgaW4gY2FzZSByZWFsIHRpbWUgY2xvY2sgaXMgc2V0IGJlbG93IEVQT0NIICovCisJaWYgKHRzLT50dl9zZWMgPCAwKSB7CisJCXRzLT50dl9zZWMgPSAwOworCQl0cy0+dHZfbnNlYyA9IDA7CisJfQorCQkKK30KKwogLyogY2xvY2tzb3VyY2UgY29kZSAqLwogc3RhdGljIGN5Y2xlX3QgcnRjX3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKaW5kZXggM2ZhYWYyOS4uMTM3ZGMyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKQEAgLTUwLDYgKzUwLDkgQEAKIC8qIE1heCBzdXBwb3J0ZWQgc2l6ZSBmb3Igc3ltYm9sIG5hbWVzICovCiAjZGVmaW5lIE1BWF9TWU1OQU1FCTY0CiAKKy8qIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHZEU08gKi8KKyNkZWZpbmUgVkRTT19BTElHTk1FTlQJKDEgPDwgMTYpCisKIGV4dGVybiBjaGFyIHZkc28zMl9zdGFydCwgdmRzbzMyX2VuZDsKIHN0YXRpYyB2b2lkICp2ZHNvMzJfa2Jhc2UgPSAmdmRzbzMyX3N0YXJ0Owogc3RhdGljIHVuc2lnbmVkIGludCB2ZHNvMzJfcGFnZXM7CkBAIC0yMzEsMTUgKzIzNCwyOCBAQAogCSAqIHBpY2sgYSBiYXNlIGFkZHJlc3MgZm9yIHRoZSB2RFNPIGluIHByb2Nlc3Mgc3BhY2UuIFdlIHRyeSB0byBwdXQgaXQKIAkgKiBhdCB2ZHNvX2Jhc2Ugd2hpY2ggaXMgdGhlICJuYXR1cmFsIiBiYXNlIGZvciBpdCwgYnV0IHdlIG1pZ2h0IGZhaWwKIAkgKiBhbmQgZW5kIHVwIHB1dHRpbmcgaXQgZWxzZXdoZXJlLgorCSAqIEFkZCBlbm91Z2ggdG8gdGhlIHNpemUgc28gdGhhdCB0aGUgcmVzdWx0IGNhbiBiZSBhbGlnbmVkLgogCSAqLwogCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJdmRzb19iYXNlID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgdmRzb19iYXNlLAotCQkJCSAgICAgIHZkc29fcGFnZXMgPDwgUEFHRV9TSElGVCwgMCwgMCk7CisJCQkJICAgICAgKHZkc29fcGFnZXMgPDwgUEFHRV9TSElGVCkgKworCQkJCSAgICAgICgoVkRTT19BTElHTk1FTlQgLSAxKSAmIFBBR0VfTUFTSyksCisJCQkJICAgICAgMCwgMCk7CiAJaWYgKElTX0VSUl9WQUxVRSh2ZHNvX2Jhc2UpKSB7CiAJCXJjID0gdmRzb19iYXNlOwogCQlnb3RvIGZhaWxfbW1hcHNlbTsKIAl9CiAKKwkvKiBBZGQgcmVxdWlyZWQgYWxpZ25tZW50LiAqLworCXZkc29fYmFzZSA9IEFMSUdOKHZkc29fYmFzZSwgVkRTT19BTElHTk1FTlQpOworCisJLyoKKwkgKiBQdXQgdkRTTyBiYXNlIGludG8gbW0gc3RydWN0LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcKKwkgKiBpbnN0YWxsX3NwZWNpYWxfbWFwcGluZyBvciB0aGUgcGVyZiBjb3VudGVyIG1tYXAgdHJhY2tpbmcgY29kZQorCSAqIHdpbGwgZmFpbCB0byByZWNvZ25pc2UgaXQgYXMgYSB2RFNPIChzaW5jZSBhcmNoX3ZtYV9uYW1lIGZhaWxzKS4KKwkgKi8KKwljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7CisKIAkvKgogCSAqIG91ciB2bWEgZmxhZ3MgZG9uJ3QgaGF2ZSBWTV9XUklURSBzbyBieSBkZWZhdWx0LCB0aGUgcHJvY2VzcyBpc24ndAogCSAqIGFsbG93ZWQgdG8gd3JpdGUgdGhvc2UgcGFnZXMuCkBAIC0yNjAsMTEgKzI3NiwxMCBAQAogCQkJCSAgICAgVk1fTUFZUkVBRHxWTV9NQVlXUklURXxWTV9NQVlFWEVDfAogCQkJCSAgICAgVk1fQUxXQVlTRFVNUCwKIAkJCQkgICAgIHZkc29fcGFnZWxpc3QpOwotCWlmIChyYykKKwlpZiAocmMpIHsKKwkJY3VycmVudC0+bW0tPmNvbnRleHQudmRzb19iYXNlID0gMDsKIAkJZ290byBmYWlsX21tYXBzZW07Ci0KLQkvKiBQdXQgdkRTTyBiYXNlIGludG8gbW0gc3RydWN0ICovCi0JY3VycmVudC0+bW0tPmNvbnRleHQudmRzb19iYXNlID0gdmRzb19iYXNlOworCX0KIAogCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCmluZGV4IDkwNGVmMTMuLjA1NDZiY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKQEAgLTI1LDcgKzI1LDcgQEAKIAkuID0gQUxJR04oMTYpOwogCS50ZXh0CQk6IHsKIAkJKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qIF9fZnRyX2FsdF8qKQotCX0KKwl9CQkgICAgICAJICAgICAgCQkJOnRleHQKIAlQUk9WSURFKF9fZXRleHQgPSAuKTsKIAlQUk9WSURFKF9ldGV4dCA9IC4pOwogCVBST1ZJREUoZXRleHQgPSAuKTsKQEAgLTU2LDcgKzU2LDcgQEAKIAkuZml4dXAJCTogeyAqKC5maXh1cCkgfQogCiAJLmR5bmFtaWMJOiB7ICooLmR5bmFtaWMpIH0JCTp0ZXh0CTpkeW5hbWljCi0JLmdvdAkJOiB7ICooLmdvdCkgfQorCS5nb3QJCTogeyAqKC5nb3QpIH0JCQk6dGV4dAogCS5wbHQJCTogeyAqKC5wbHQpIH0KIAogCV9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKaW5kZXggYmM3YjQxZS4uNzdmNjQyMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCkBAIC0xMDU0LDYgKzEwNTQsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCXRibCA9IGttYWxsb2Moc2l6ZW9mKCp0YmwpLCBHRlBfS0VSTkVMKTsKKwlpZiAodGJsID09IE5VTEwpCisJCXJldHVybiBOVUxMOwogCiAJb2ZfcGFyc2VfZG1hX3dpbmRvdyhkZXYtPmRldi5hcmNoZGF0YS5vZl9ub2RlLCBkbWFfd2luZG93LAogCQkJICAgICZ0YmwtPml0X2luZGV4LCAmb2Zmc2V0LCAmc2l6ZSk7CkBAIC0xMjMzLDcgKzEyMzUsNyBAQAogCQl2aW9fY21vX3NldF9kbWFfb3BzKHZpb2Rldik7CiAJZWxzZQogCQl2aW9kZXYtPmRldi5hcmNoZGF0YS5kbWFfb3BzID0gJmRtYV9pb21tdV9vcHM7Ci0JdmlvZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSB2aW9fYnVpbGRfaW9tbXVfdGFibGUodmlvZGV2KTsKKwlzZXRfaW9tbXVfdGFibGVfYmFzZSgmdmlvZGV2LT5kZXYsIHZpb19idWlsZF9pb21tdV90YWJsZSh2aW9kZXYpKTsKIAlzZXRfZGV2X25vZGUoJnZpb2Rldi0+ZGV2LCBvZl9ub2RlX3RvX25pZChvZl9ub2RlKSk7CiAKIAkvKiBpbml0IGdlbmVyaWMgJ3N0cnVjdCBkZXZpY2UnIGZpZWxkczogKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA1OGRhNDA3Li4yNzczNWE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogRU5UUlkoX3N0ZXh0KQogCkBAIC03MSwxMiArNzIsNyBAQAogCS8qIFJlYWQtb25seSBkYXRhICovCiAJUk9EQVRBCiAKLQkvKiBFeGNlcHRpb24gJiBidWcgdGFibGVzICovCi0JX19leF90YWJsZSA6IEFUKEFERFIoX19leF90YWJsZSkgLSBMT0FEX09GRlNFVCkgewotCQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQl9CisJRVhDRVBUSU9OX1RBQkxFKDApCiAKIAlOT1RFUyA6a2VybmVsIDpub3RlcwogCkBAIC05MywxMiArODksNyBAQAogICovCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX19pbml0X2JlZ2luID0gLjsKLQotCS5pbml0LnRleHQgOiBBVChBRERSKC5pbml0LnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX3Npbml0dGV4dCA9IC47Ci0JCUlOSVRfVEVYVAotCQlfZWluaXR0ZXh0ID0gLjsKLQl9IDprZXJuZWwKKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpIDprZXJuZWwKIAogCS8qIC5leGl0LnRleHQgaXMgZGlzY2FyZGVkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsCiAJICogdG8gZGVhbCB3aXRoIHJlZmVyZW5jZXMgZnJvbSBfX2J1Z190YWJsZQpAQCAtMTIyLDIzICsxMTMsMTYgQEAKICNlbmRpZgogCX0KIAotCS4gPSBBTElHTigxNik7CiAJLmluaXQuc2V0dXAgOiBBVChBRERSKC5pbml0LnNldHVwKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47CisJCUlOSVRfU0VUVVAoMTYpCiAJfQogCiAJLmluaXRjYWxsLmluaXQgOiBBVChBRERSKC5pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQkJX19pbml0Y2FsbF9lbmQgPSAuOwotCQl9CisJCUlOSVRfQ0FMTFMKKwl9CiAKIAkuY29uX2luaXRjYWxsLmluaXQgOiBBVChBRERSKC5jb25faW5pdGNhbGwuaW5pdCkgLSBMT0FEX09GRlNFVCkgewotCQlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCQlfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworCQlDT05fSU5JVENBTEwKIAl9CiAKIAlTRUNVUklUWV9JTklUCkBAIC0xNjksMTQgKzE1MywxMCBAQAogCQlfX3N0b3BfX19md19mdHJfZml4dXAgPSAuOwogCX0KICNlbmRpZgotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCS5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47CisJCUlOSVRfUkFNX0ZTCiAJfQotI2VuZGlmCisKIAlQRVJDUFUoUEFHRV9TSVpFKQogCiAJLiA9IEFMSUdOKDgpOwpAQCAtMjQwLDM2ICsyMjAsMjUgQEAKICNlbmRpZgogCiAJLyogVGhlIGluaXRpYWwgdGFzayBhbmQga2VybmVsIHN0YWNrICovCi0jaWZkZWYgQ09ORklHX1BQQzMyCi0JLiA9IEFMSUdOKDgxOTIpOwotI2Vsc2UKLQkuID0gQUxJR04oMTYzODQpOwotI2VuZGlmCiAJLmRhdGEuaW5pdF90YXNrIDogQVQoQUREUiguZGF0YS5pbml0X3Rhc2spIC0gTE9BRF9PRkZTRVQpIHsKLQkJKiguZGF0YS5pbml0X3Rhc2spCisJCUlOSVRfVEFTS19EQVRBKFRIUkVBRF9TSVpFKQogCX0KIAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCS5kYXRhLnBhZ2VfYWxpZ25lZCA6IEFUKEFERFIoLmRhdGEucGFnZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKSB7Ci0JCSooLmRhdGEucGFnZV9hbGlnbmVkKQorCQlQQUdFX0FMSUdORURfREFUQShQQUdFX1NJWkUpCiAJfQogCi0JLiA9IEFMSUdOKEwxX0NBQ0hFX0JZVEVTKTsKIAkuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IEFUKEFERFIoLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKKwkJQ0FDSEVMSU5FX0FMSUdORURfREFUQShMMV9DQUNIRV9CWVRFUykKIAl9CiAKLQkuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwogCS5kYXRhLnJlYWRfbW9zdGx5IDogQVQoQUREUiguZGF0YS5yZWFkX21vc3RseSkgLSBMT0FEX09GRlNFVCkgewotCQkqKC5kYXRhLnJlYWRfbW9zdGx5KQorCQlSRUFEX01PU1RMWV9EQVRBKEwxX0NBQ0hFX0JZVEVTKQogCX0KIAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCS5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fbm9zYXZlX2JlZ2luID0gLjsKLQkJKiguZGF0YS5ub3NhdmUpCi0JCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCQlfX25vc2F2ZV9lbmQgPSAuOworCQlOT1NBVkVfREFUQQogCX0KIAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwpAQCAtMjgwLDE0ICsyNDksNyBAQAogICogQW5kIGZpbmFsbHkgdGhlIGJzcwogICovCiAKLQkuYnNzIDogQVQoQUREUiguYnNzKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fYnNzX3N0YXJ0ID0gLjsKLQkJKiguc2JzcykgKiguc2NvbW1vbikKLQkJKiguZHluYnNzKQotCQkqKC5ic3MpCi0JCSooQ09NTU9OKQotCQlfX2Jzc19zdG9wID0gLjsKLQl9CisJQlNTX1NFQ1RJT04oMCwgMCwgMCkKIAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9lbmQgPSAuIDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jCmluZGV4IDQ3ZWU2MDMuLjJhYTM3MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGt2bXBwY19leGl0X3RpbWluZ19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3ZtcHBjX2V4aXRfdGltaW5nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrdm1wcGNfZXhpdF90aW1pbmdfZm9wcyA9IHsKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgID0ga3ZtcHBjX2V4aXRfdGltaW5nX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmggYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5oCmluZGV4IGJiMTNiMWYuLjgwNmVmNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaApAQCAtNDgsNyArNDgsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfYWNjb3VudF9leGl0X3N0YXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdHlwZSkKIHsKIAkvKiB0eXBlIGhhcyB0byBiZSBrbm93biBhdCBidWlsZCB0aW1lIGZvciBvcHRpbWl6YXRpb24gKi8KKworCS8qIFRoZSBCVUlMRF9CVUdfT04gYmVsb3cgYnJlYWtzIGluIGZ1bm55IHdheXMsIGNvbW1lbnRlZCBvdXQKKwkgKiBmb3Igbm93IC4uLiAtQmVuSAogCUJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcCh0eXBlKSk7CisJKi8KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEVYVF9JTlRSX0VYSVRTOgogCQl2Y3B1LT5zdGF0LmV4dF9pbnRyX2V4aXRzKys7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKaW5kZXggYzJmOTNkYy4uYmU0ZjM0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwpAQCAtMjUsOCArMjUsOCBAQAogICogICAgIGFsc28gY2xlYXIgbW0tPmNwdV92bV9tYXNrIGJpdHMgd2hlbiBwcm9jZXNzZXMgYXJlIG1pZ3JhdGVkCiAgKi8KIAotI2RlZmluZSBERUJVR19NQVBfQ09OU0lTVEVOQ1kKLSNkZWZpbmUgREVCVUdfQ0xBTVBfTEFTVF9DT05URVhUICAgMzEKKy8vI2RlZmluZSBERUJVR19NQVBfQ09OU0lTVEVOQ1kKKy8vI2RlZmluZSBERUJVR19DTEFNUF9MQVNUX0NPTlRFWFQgICAzMQogLy8jZGVmaW5lIERFQlVHX0hBUkRFUgogCiAvKiBXZSBkb24ndCB1c2UgREVCVUcgYmVjYXVzZSBpdCB0ZW5kcyB0byBiZSBjb21waWxlZCBpbiBhbHdheXMgbm93YWRheXMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCmluZGV4IDgzZjE1NTEuLjUzMDQwOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIAorI2luY2x1ZGUgIm1tdV9kZWNsLmgiCisKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xNjYsNyArMTY4LDcgQEAKICAqIHN1cHBvcnQgZmFsbHMgaW50byB0aGUgc2FtZSBjYXRlZ29yeS4KICAqLwogCi1zdGF0aWMgcHRlX3Qgc2V0X3B0ZV9maWx0ZXIocHRlX3QgcHRlKQorc3RhdGljIHB0ZV90IHNldF9wdGVfZmlsdGVyKHB0ZV90IHB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXB0ZSA9IF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IUFRFRkxBR1MpOwogCWlmIChwdGVfbG9va3Nfbm9ybWFsKHB0ZSkgJiYgIShjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUpIHx8CkBAIC0xNzUsNiArMTc3LDE3IEBACiAJCWlmICghcGcpCiAJCQlyZXR1cm4gcHRlOwogCQlpZiAoIXRlc3RfYml0KFBHX2FyY2hfMSwgJnBnLT5mbGFncykpIHsKKyNpZmRlZiBDT05GSUdfOHh4CisJCQkvKiBPbiA4eHgsIGNhY2hlIGNvbnRyb2wgaW5zdHJ1Y3Rpb25zIChwYXJ0aWN1bGFybHkKKwkJCSAqICJkY2JzdCIgZnJvbSBmbHVzaF9kY2FjaGVfaWNhY2hlKSBmYXVsdCBhcyB3cml0ZQorCQkJICogb3BlcmF0aW9uIGlmIHRoZXJlIGlzIGFuIHVucG9wdWxhdGVkIFRMQiBlbnRyeQorCQkJICogZm9yIHRoZSBhZGRyZXNzIGluIHF1ZXN0aW9uLiBUbyB3b3JrYXJvdW5kIHRoYXQsCisJCQkgKiB3ZSBpbnZhbGlkYXRlIHRoZSBUTEIgaGVyZSwgdGh1cyBhdm9pZGluZyBkY2JzdAorCQkJICogbWlzYmVoYXZpb3VyLgorCQkJICovCisJCQkvKiA4eHggZG9lc24ndCBjYXJlIGFib3V0IFBJRCwgc2l6ZSBvciBpbmQgYXJncyAqLworCQkJX3RsYmlsX3ZhKGFkZHIsIDAsIDAsIDApOworI2VuZGlmIC8qIENPTkZJR184eHggKi8KIAkJCWZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShwZyk7CiAJCQlzZXRfYml0KFBHX2FyY2hfMSwgJnBnLT5mbGFncyk7CiAJCX0KQEAgLTE5NCw3ICsyMDcsNyBAQAogICogYXMgd2UgZG9uJ3QgaGF2ZSB0d28gYml0cyB0byBzcGFyZSBmb3IgX1BBR0VfRVhFQyBhbmQgX1BBR0VfSFdFWEVDIHNvCiAgKiBpbnN0ZWFkIHdlICJmaWx0ZXIgb3V0IiB0aGUgZXhlYyBwZXJtaXNzaW9uIGZvciBub24gY2xlYW4gcGFnZXMuCiAgKi8KLXN0YXRpYyBwdGVfdCBzZXRfcHRlX2ZpbHRlcihwdGVfdCBwdGUpCitzdGF0aWMgcHRlX3Qgc2V0X3B0ZV9maWx0ZXIocHRlX3QgcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJc3RydWN0IHBhZ2UgKnBnOwogCkBAIC0yNzYsNyArMjg5LDcgQEAKIAkgKiB0aGlzIGNvbnRleHQgbWlnaHQgbm90IGhhdmUgYmVlbiBhY3RpdmF0ZWQgeWV0IHdoZW4gdGhpcwogCSAqIGlzIGNhbGxlZC4KIAkgKi8KLQlwdGUgPSBzZXRfcHRlX2ZpbHRlcihwdGUpOworCXB0ZSA9IHNldF9wdGVfZmlsdGVyKHB0ZSwgYWRkcik7CiAKIAkvKiBQZXJmb3JtIHRoZSBzZXR0aW5nIG9mIHRoZSBQVEUgKi8KIAlfX3NldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwppbmRleCBiYzQ0ZGM0Li45NWNlMzU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKQEAgLTcyLDE5ICs3MiwxNyBAQAogMToKICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAgKi8KIAotCS8qIHZtYWxsb2MvaW9yZW1hcCBtYXBwaW5nIGVuY29kaW5nIGJpdHMsIHRoZSAibGkiIGluc3RydWN0aW9ucyBiZWxvdwotCSAqIHdpbGwgYmUgcGF0Y2hlZCBieSB0aGUga2VybmVsIGF0IGJvb3QKKwkvKiB2bWFsbG9jIG1hcHBpbmcgZ2V0cyB0aGUgZW5jb2RpbmcgZnJvbSB0aGUgUEFDQSBhcyB0aGUgbWFwcGluZworCSAqIGNhbiBiZSBkZW1vdGVkIGZyb20gNjRLIC0+IDRLIGR5bmFtaWNhbGx5IG9uIHNvbWUgbWFjaGluZXMKIAkgKi8KLUJFR0lOX0ZUUl9TRUNUSU9OCi0JLyogY2hlY2sgd2hldGhlciB0aGlzIGlzIGluIHZtYWxsb2Mgb3IgaW9yZW1hcCBzcGFjZSAqLwogCWNscmxkaQlyMTEscjEwLDQ4CiAJY21wbGRpCXIxMSwoVk1BTExPQ19TSVpFID4+IDI4KSAtIDEKIAliZ3QJNWYKIAlsaHoJcjExLFBBQ0FWTUFMTE9DU0xMUChyMTMpCiAJYgk2ZgogNToKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0NJX0xBUkdFX1BBR0UpCi1fR0xPQkFMKHNsYl9taXNzX2tlcm5lbF9sb2FkX2lvKQorCS8qIElPIG1hcHBpbmcgKi8KKwlfR0xPQkFMKHNsYl9taXNzX2tlcm5lbF9sb2FkX2lvKQogCWxpCXIxMSwwCiA2OgogQkVHSU5fRlRSX1NFQ1RJT04KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMKaW5kZXggZWYxY2NjZi4uZjI4ODI3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLTY0ZS5oPgogI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKaW5kZXggYzMxZTViNS4uZDQ1YmU1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKQEAgLTUxLDYgKzUxLDggQEAKIC8qIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBib2FyZHMgKi8KIHN0YXRpYyBjaGFyICpib2FyZFtdIF9faW5pdGRhdGEgPSB7CiAJImludGVyY29udHJvbCxkaWdzeS1tdGMiLAorCSJtYW5yb2xhbmQsbXVjbWM1MiIsCisJIm1hbnJvbGFuZCx1YzEwMSIsCiAJInBoeXRlYyxwY20wMzAiLAogCSJwaHl0ZWMscGNtMDMyIiwKIAkicHJvbWVzcyxtb3Rpb25wcm8iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKaW5kZXggNTFmY2FlNC4uZjlhZWUxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCkBAIC0xMzIsMTIgKzEzMiwyNSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWJ1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSAqIFBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1cy0+aXJxID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9idXM7CisJfQogCiAJYnVzLT5uYW1lID0gImVwODI0OGUtbWRpby1iaXRiYW5nIjsKIAlidXMtPnBhcmVudCA9ICZvZmRldi0+ZGV2OwogCXNucHJpbnRmKGJ1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcmVzLnN0YXJ0KTsKIAotCXJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgb2ZkZXYtPm5vZGUpOworCXJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi0+bm9kZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlX2lycToKKwlrZnJlZShidXMtPmlycSk7CitlcnJfZnJlZV9idXM6CisJZnJlZV9tZGlvX2JpdGJhbmcoYnVzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGVwODI0OGVfbWRpb19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCmluZGV4IGFjYTU3NDEuLmE4NmMzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiYXhvbl9tc2k6IGNvdWxkbid0IHBhcnNlIGRjciBwcm9wZXJ0aWVzIG9uICVzXG4iLAogCQkJZG4tPmZ1bGxfbmFtZSk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX21zaWM7CiAJfQogCiAJbXNpYy0+ZGNyX2hvc3QgPSBkY3JfbWFwKGRuLCBkY3JfYmFzZSwgZGNyX2xlbik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYwppbmRleCA5M2IwZWZkLi4zOWQzNjFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMKQEAgLTc3LDcgKzc3LDcgQEAKIHN0YXRpYyB2b2lkIGNlbGxlYl9kbWFfZGV2X3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPSBnZXRfcGNpX2RtYV9vcHMoKTsKLQlkZXYtPmFyY2hkYXRhLmRtYV9kYXRhID0gKHZvaWQgKiljZWxsZWJfZG1hX2RpcmVjdF9vZmZzZXQ7CisJc2V0X2RtYV9vZmZzZXQoZGV2LCBjZWxsZWJfZG1hX2RpcmVjdF9vZmZzZXQpOwogfQogCiBzdGF0aWMgdm9pZCBjZWxsZWJfcGNpX2RtYV9kZXZfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IDQxNmRiMTcuLmNhNWJmZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC02NTcsMTUgKzY1NywxMyBAQAogCiBzdGF0aWMgdm9pZCBjZWxsX2RtYV9kZXZfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkZXZfYXJjaGRhdGEgKmFyY2hkYXRhID0gJmRldi0+YXJjaGRhdGE7Ci0KIAkvKiBPcmRlciBpcyBpbXBvcnRhbnQgaGVyZSwgdGhlc2UgYXJlIG5vdCBtdXR1YWxseSBleGNsdXNpdmUgKi8KIAlpZiAoZ2V0X2RtYV9vcHMoZGV2KSA9PSAmZG1hX2lvbW11X2ZpeGVkX29wcykKIAkJY2VsbF9kbWFfZGV2X3NldHVwX2ZpeGVkKGRldik7CiAJZWxzZSBpZiAoZ2V0X3BjaV9kbWFfb3BzKCkgPT0gJmRtYV9pb21tdV9vcHMpCi0JCWFyY2hkYXRhLT5kbWFfZGF0YSA9IGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldik7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKGRldiwgY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KSk7CiAJZWxzZSBpZiAoZ2V0X3BjaV9kbWFfb3BzKCkgPT0gJmRtYV9kaXJlY3Rfb3BzKQotCQlhcmNoZGF0YS0+ZG1hX2RhdGEgPSAodm9pZCAqKWNlbGxfZG1hX2RpcmVjdF9vZmZzZXQ7CisJCXNldF9kbWFfb2Zmc2V0KGRldiwgY2VsbF9kbWFfZGlyZWN0X29mZnNldCk7CiAJZWxzZQogCQlCVUcoKTsKIH0KQEAgLTk3MywxMSArOTcxLDEwIEBACiAKIHN0YXRpYyB2b2lkIGNlbGxfZG1hX2Rldl9zZXR1cF9maXhlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRldl9hcmNoZGF0YSAqYXJjaGRhdGEgPSAmZGV2LT5hcmNoZGF0YTsKIAl1NjQgYWRkcjsKIAogCWFkZHIgPSBjZWxsX2lvbW11X2dldF9maXhlZF9hZGRyZXNzKGRldikgKyBkbWFfaW9tbXVfZml4ZWRfYmFzZTsKLQlhcmNoZGF0YS0+ZG1hX2RhdGEgPSAodm9pZCAqKWFkZHI7CisJc2V0X2RtYV9vZmZzZXQoZGV2LCBhZGRyKTsKIAogCWRldl9kYmcoZGV2LCAiaW9tbXU6IGZpeGVkIGFkZHIgPSAlbGx4XG4iLCBhZGRyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCmluZGV4IDhmMDc5YjguLjg4NGU4YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJX19zaW1wbGVfYXR0cl9jaGVja19mb3JtYXQoX19mbXQsIDB1bGwpOwkJCVwKIAlyZXR1cm4gc3B1ZnNfYXR0cl9vcGVuKGlub2RlLCBmaWxlLCBfX2dldCwgX19zZXQsIF9fZm10KTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fZm9wcyA9IHsJCQkJXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAkJCQkJCVwKIAkub3BlbgkgPSBfX2ZvcHMgIyMgX29wZW4sCQkJCQlcCiAJLnJlbGVhc2UgPSBzcHVmc19hdHRyX3JlbGVhc2UsCQkJCQlcCkBAIC0zMDksNyArMzA5LDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX21lbV9tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tZW1fbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19tZW1fbW1hcF9mYXVsdCwKIAkuYWNjZXNzID0gc3B1ZnNfbWVtX21tYXBfYWNjZXNzLAogfTsKQEAgLTQzNiw3ICs0MzYsNyBAQAogCXJldHVybiBzcHVmc19wc19mYXVsdCh2bWEsIHZtZiwgMHg0MDAwLCBTUFVGU19DTlRMX01BUF9TSVpFKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19jbnRsX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX2NudGxfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19jbnRsX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xMTQzLDcgKzExNDMsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfc2lnbmFsMV9tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19zaWduYWwxX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfc2lnbmFsMV9tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTI3OSw3ICsxMjc5LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX3NpZ25hbDJfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfc2lnbmFsMl9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX3NpZ25hbDJfbW1hcF9mYXVsdCwKIH07CiAKQEAgLTEzOTcsNyArMTM5Nyw3IEBACiAJcmV0dXJuIHNwdWZzX3BzX2ZhdWx0KHZtYSwgdm1mLCAweDAwMDAsIFNQVUZTX01TU19NQVBfU0laRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbXNzX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX21zc19tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX21zc19tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTQ1OCw3ICsxNDU4LDcgQEAKIAlyZXR1cm4gc3B1ZnNfcHNfZmF1bHQodm1hLCB2bWYsIDB4MDAwMCwgU1BVRlNfUFNfTUFQX1NJWkUpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX3BzbWFwX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX3BzbWFwX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfcHNtYXBfbW1hcF9mYXVsdCwKIH07CiAKQEAgLTE1MTcsNyArMTUxNyw3IEBACiAJcmV0dXJuIHNwdWZzX3BzX2ZhdWx0KHZtYSwgdm1mLCAweDMwMDAsIFNQVUZTX01GQ19NQVBfU0laRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbWZjX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX21mY19tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX21mY19tbWFwX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlCmluZGV4IGNjNzE2MWYuLmNlMDE0OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUKQEAgLTEsMTggKzEsOSBAQAogRVhUUkFfQ0ZMQUdTCSs9IC1tbm8tbWluaW1hbC10b2MKIAotZXh0cmEteSArPSBkdC5vCi0KIG9iai15ICs9IGV4Y2VwdGlvbi5vCi1vYmoteSArPSBodmxvZy5vIGh2bHBjb25maWcubyBscGFyZGF0YS5vIHNldHVwLm8gZHRfbW9kLm8gbWYubyBscGV2ZW50cy5vIFwKK29iai15ICs9IGh2bG9nLm8gaHZscGNvbmZpZy5vIGxwYXJkYXRhLm8gc2V0dXAubyBkdC5vIG1mLm8gbHBldmVudHMubyBcCiAJaHZjYWxsLm8gcHJvYy5vIGh0YWIubyBpb21tdS5vIG1pc2MubyBpcnEubwogb2JqLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KIG9iai0kKENPTkZJR19TTVApICs9IHNtcC5vCiBvYmotJChDT05GSUdfVklPUEFUSCkgKz0gdmlvcGF0aC5vIHZpby5vCiBvYmotJChDT05GSUdfTU9EVUxFUykgKz0ga3N5bXMubwotCi1xdWlldF9jbWRfZHRfc3RyaW5ncyA9IERUX1NUUiAgJEAKLSAgICAgIGNtZF9kdF9zdHJpbmdzID0gJChPQkpDT1BZKSAtLXJlbmFtZS1zZWN0aW9uIC5yb2RhdGEuc3RyMS44PS5kdF9zdHJpbmdzIFwKLQkJCQkkPCAkQAotCi0kKG9iaikvZHRfbW9kLm86CSQob2JqKS9kdC5vCi0JJChjYWxsIGlmX2NoYW5nZWQsZHRfc3RyaW5ncykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMKaW5kZXggYzVhODdhNy4uN2Y0NWE1MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMKQEAgLTUxLDExICs1MSwxNiBAQAogCiAvKgogICogVGhlc2UgYXJlIGNyZWF0ZWQgYnkgdGhlIGxpbmtlciBzY3JpcHQgYXQgdGhlIHN0YXJ0IGFuZCBlbmQKLSAqIG9mIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgYWxsIHRoZSBzdHJpbmdzIGZyb20gdGhpcyBmaWxlLgorICogb2YgdGhlIHNlY3Rpb24gY29udGFpbmluZyBhbGwgdGhlIHN0cmluZ3MgbWFya2VkIHdpdGggdGhlIERTIG1hY3JvLgogICovCiBleHRlcm4gY2hhciBfX2R0X3N0cmluZ3Nfc3RhcnRbXTsKIGV4dGVybiBjaGFyIF9fZHRfc3RyaW5nc19lbmRbXTsKIAorI2RlZmluZSBEUyhzKQkoewlcCisJc3RhdGljIGNvbnN0IGNoYXIgX19zW10gX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmR0X3N0cmluZ3MiKSkpID0gczsgXAorCV9fczsJCVwKK30pCisKIHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgewogCXN0cnVjdCBib290X3BhcmFtX2hlYWRlciBoZWFkZXI7CiAJdTY0IHJlc2VydmVfbWFwWzJdOwpAQCAtNjQsOSArNjksOCBAQAogc3RhdGljIHZvaWQgKiBfX2luaXRkYXRhIGR0X2RhdGE7CiAKIC8qCi0gKiBQdXR0aW5nIHRoZXNlIHN0cmluZ3MgaGVyZSBrZWVwcyB0aGVtIG91dCBvZiB0aGUgc2VjdGlvbgotICogdGhhdCB3ZSByZW5hbWUgdG8gLmR0X3N0cmluZ3MgdXNpbmcgb2JqY29weSBhbmQgY2FwdHVyZQotICogZm9yIHRoZSBzdHJpbmdzIGJsb2Igb2YgdGhlIGZsYXR0ZW5lZCBkZXZpY2UgdHJlZS4KKyAqIFB1dHRpbmcgdGhlc2Ugc3RyaW5ncyBoZXJlIGtlZXBzIHRoZW0gb3V0IG9mIHRoZSAuZHRfc3RyaW5ncyBzZWN0aW9uCisgKiB0aGF0IHdlIGNhcHR1cmUgZm9yIHRoZSBzdHJpbmdzIGJsb2Igb2YgdGhlIGZsYXR0ZW5lZCBkZXZpY2UgdHJlZS4KICAqLwogc3RhdGljIGNoYXIgX19pbml0ZGF0YSBkZXZpY2VfdHlwZV9jcHVbXSA9ICJjcHUiOwogc3RhdGljIGNoYXIgX19pbml0ZGF0YSBkZXZpY2VfdHlwZV9tZW1vcnlbXSA9ICJtZW1vcnkiOwpAQCAtMTczLDcgKzE3Nyw3IEBACiAKICNkZWZpbmUgZHRfZW5kX25vZGUoZHQpIGR0X3B1c2hfdTMyKGR0LCBPRl9EVF9FTkRfTk9ERSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3Aoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCitzdGF0aWMgdm9pZCBfX2luaXQgX19kdF9wcm9wKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwpAQCAtMTkxLDQ0ICsxOTUsMzIgQEAKIAkvKiBUaGUgYWN0dWFsIGRhdGEuICovCiAJZHRfcHVzaF9ieXRlcyhkdCwgZGF0YSwgbGVuKTsKIH0KKyNkZWZpbmUgZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgbGVuKQlfX2R0X3Byb3AoKGR0KSwgRFMobmFtZSksIChkYXRhKSwgKGxlbikpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX3N0cihzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKLQkJY29uc3QgY2hhciAqZGF0YSkKLXsKLQlkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBzdHJsZW4oZGF0YSkgKyAxKTsgLyogKyAxIGZvciBOVUxMICovCi19CisjZGVmaW5lIGR0X3Byb3Bfc3RyKGR0LCBuYW1lLCBkYXRhKQlcCisJZHRfcHJvcCgoZHQpLCBuYW1lLCAoZGF0YSksIHN0cmxlbigoZGF0YSkpICsgMSk7IC8qICsgMSBmb3IgTlVMTCAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF91MzIoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCitzdGF0aWMgdm9pZCBfX2luaXQgX19kdF9wcm9wX3UzMihzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKIAkJdTMyIGRhdGEpCiB7Ci0JZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1MzIpKTsKKwlfX2R0X3Byb3AoZHQsIG5hbWUsICZkYXRhLCBzaXplb2YodTMyKSk7CiB9CisjZGVmaW5lIGR0X3Byb3BfdTMyKGR0LCBuYW1lLCBkYXRhKQlfX2R0X3Byb3BfdTMyKChkdCksIERTKG5hbWUpLCAoZGF0YSkpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZCBkdF9wcm9wX3U2NChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwKLQkJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKLQkJdTY0IGRhdGEpCitzdGF0aWMgdm9pZCBfX2luaXQgX19tYXliZV91bnVzZWQgX19kdF9wcm9wX3U2NChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwKKwkJY29uc3QgY2hhciAqbmFtZSwgdTY0IGRhdGEpCiB7Ci0JZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1NjQpKTsKKwlfX2R0X3Byb3AoZHQsIG5hbWUsICZkYXRhLCBzaXplb2YodTY0KSk7CiB9CisjZGVmaW5lIGR0X3Byb3BfdTY0KGR0LCBuYW1lLCBkYXRhKQlfX2R0X3Byb3BfdTY0KChkdCksIERTKG5hbWUpLCAoZGF0YSkpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX3U2NF9saXN0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAotCQljb25zdCBjaGFyICpuYW1lLCB1NjQgKmRhdGEsIGludCBuKQotewotCWR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIHNpemVvZih1NjQpICogbik7Ci19CisjZGVmaW5lIGR0X3Byb3BfdTY0X2xpc3QoZHQsIG5hbWUsIGRhdGEsIG4pCVwKKwlkdF9wcm9wKChkdCksIG5hbWUsIChkYXRhKSwgc2l6ZW9mKHU2NCkgKiAobikpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX3UzMl9saXN0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAotCQljb25zdCBjaGFyICpuYW1lLCB1MzIgKmRhdGEsIGludCBuKQotewotCWR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIHNpemVvZih1MzIpICogbik7Ci19CisjZGVmaW5lIGR0X3Byb3BfdTMyX2xpc3QoZHQsIG5hbWUsIGRhdGEsIG4pCVwKKwlkdF9wcm9wKChkdCksIG5hbWUsIChkYXRhKSwgc2l6ZW9mKHUzMikgKiAobikpCiAKLSNpZmRlZiBub3R5ZXQKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX2VtcHR5KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lKQotewotCWR0X3Byb3AoZHQsIG5hbWUsIE5VTEwsIDApOwotfQotI2VuZGlmCisjZGVmaW5lIGR0X3Byb3BfZW1wdHkoZHQsIG5hbWUpCQlkdF9wcm9wKChkdCksIG5hbWUsIE5VTEwsIDApCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkdF9jcHVzKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYwppbmRleCA2YzFlMTAxLi45ZDUzY2I0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCXBkbi0+aW9tbXVfdGFibGUgPSBpb21tdV9pbml0X3RhYmxlKHRibCwgLTEpOwogCWVsc2UKIAkJa2ZyZWUodGJsKTsKLQlwZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSBwZG4tPmlvbW11X3RhYmxlOworCXNldF9pb21tdV90YWJsZV9iYXNlKCZwZGV2LT5kZXYsIHBkbi0+aW9tbXVfdGFibGUpOwogfQogI2Vsc2UKICNkZWZpbmUgcGNpX2RtYV9kZXZfc2V0dXBfaXNlcmllcwlOVUxMCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYwppbmRleCBhMGZmMDNhLi43YjFkNjA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKQEAgLTE4OSw3ICsxODksNyBAQAogCX0KICNlbmRpZgogCi0JZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSAmaW9tbXVfdGFibGVfaW9ibWFwOworCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgJmlvbW11X3RhYmxlX2lvYm1hcCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBjaV9kbWFfYnVzX3NldHVwX251bGwoc3RydWN0IHBjaV9idXMgKmIpIHsgfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwppbmRleCAyMTIyNmI3Li40MTRjYTk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwpAQCAtNTQwLDggKzU0MCwxMSBAQAogCS8qIE1ha2Ugc3VyZSBJUlEgaXMgZGlzYWJsZWQgKi8KIAlrd193cml0ZV9yZWcocmVnX2llciwgMCk7CiAKLQkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0ICovCi0JaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycSwga3dfaTJjX2lycSwgMCwgImtleXdlc3QgaTJjIiwgaG9zdCkpCisJLyogUmVxdWVzdCBjaGlwIGludGVycnVwdC4gV2Ugc2V0IElSUUZfVElNRVIgYmVjYXVzZSB3ZSBkb24ndAorCSAqIHdhbnQgdGhhdCBpbnRlcnJ1cHQgZGlzYWJsZWQgYmV0d2VlbiB0aGUgMiBwYXNzZXMgb2YgZHJpdmVyCisJICogc3VzcGVuZCBvciB3ZSdsbCBoYXZlIGlzc3VlcyBydW5uaW5nIHRoZSBwZnVuY3MKKwkgKi8KKwlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBrd19pMmNfaXJxLCBJUlFGX1RJTUVSLCAia2V5d2VzdCBpMmMiLCBob3N0KSkKIAkJaG9zdC0+aXJxID0gTk9fSVJROwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiS2V5V2VzdCBpMmMgQDB4JTA4eCBpcnEgJWQgJXNcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKaW5kZXggYWI2OTkyNS4uOTM3YTU0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJcmV0dXJuIG5fcmVhZCAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHRsX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdGxfZm9wcyA9IHsKIAkub3BlbgkJPSBkdGxfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0gZHRsX2ZpbGVfcmVsZWFzZSwKIAkucmVhZAkJPSBkdGxfZmlsZV9yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2Zpcm13YXJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwppbmRleCA1YTcwN2RhLi4wYTE0ZDhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwpAQCAtNTEsMTEgKzUxLDEwIEBACiAJe0ZXX0ZFQVRVUkVfVklPLAkJImhjYWxsLXZpbyJ9LAogCXtGV19GRUFUVVJFX1JETUEsCQkiaGNhbGwtcmRtYSJ9LAogCXtGV19GRUFUVVJFX0xMQU4sCQkiaGNhbGwtbExBTiJ9LAotCXtGV19GRUFUVVJFX0JVTEssCQkiaGNhbGwtYnVsayJ9LAorCXtGV19GRUFUVVJFX0JVTEtfUkVNT1ZFLAkiaGNhbGwtYnVsayJ9LAogCXtGV19GRUFUVVJFX1hEQUJSLAkJImhjYWxsLXhkYWJyIn0sCiAJe0ZXX0ZFQVRVUkVfTVVMVElUQ0UsCQkiaGNhbGwtbXVsdGktdGNlIn0sCiAJe0ZXX0ZFQVRVUkVfU1BMUEFSLAkJImhjYWxsLXNwbHBhciJ9LAotCXtGV19GRUFUVVJFX0JVTEtfUkVNT1ZFLAkiaGNhbGwtYnVsayJ9LAogfTsKIAogLyogQnVpbGQgdXAgdGhlIGZpcm13YXJlIGZlYXR1cmVzIGJpdG1hc2sgdXNpbmcgdGhlIGNvbnRlbnRzIG9mCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IDY2MWM4ZTAuLjFhMDAwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC00ODIsNyArNDgyLDcgQEAKIAkJCQkgICBwaGItPm5vZGUpOwogCQlpb21tdV90YWJsZV9zZXRwYXJtcyhwaGIsIGRuLCB0YmwpOwogCQlQQ0lfRE4oZG4pLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsLCBwaGItPm5vZGUpOwotCQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IFBDSV9ETihkbiktPmlvbW11X3RhYmxlOworCQlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIFBDSV9ETihkbiktPmlvbW11X3RhYmxlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCWRuID0gZG4tPnBhcmVudDsKIAogCWlmIChkbiAmJiBQQ0lfRE4oZG4pKQotCQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IFBDSV9ETihkbiktPmlvbW11X3RhYmxlOworCQlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIFBDSV9ETihkbiktPmlvbW11X3RhYmxlKTsKIAllbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlvbW11OiBEZXZpY2UgJXMgaGFzIG5vIGlvbW11IHRhYmxlXG4iLAogCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CkBAIC01MzgsNyArNTM4LDcgQEAKIAkgKi8KIAlpZiAoZG1hX3dpbmRvdyA9PSBOVUxMIHx8IHBkbi0+cGFyZW50ID09IE5VTEwpIHsKIAkJcHJfZGVidWcoIiAgbm8gZG1hIHdpbmRvdyBmb3IgZGV2aWNlLCBsaW5raW5nIHRvIHBhcmVudFxuIik7Ci0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKHBkbiktPmlvbW11X3RhYmxlOworCQlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIFBDSV9ETihwZG4pLT5pb21tdV90YWJsZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU1NCw3ICs1NTQsNyBAQAogCQlwcl9kZWJ1ZygiICBmb3VuZCBETUEgd2luZG93LCB0YWJsZTogJXBcbiIsIHBjaS0+aW9tbXVfdGFibGUpOwogCX0KIAotCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gcGNpLT5pb21tdV90YWJsZTsKKwlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIHBjaS0+aW9tbXVfdGFibGUpOwogfQogI2Vsc2UgIC8qIENPTkZJR19QQ0kgKi8KICNkZWZpbmUgcGNpX2RtYV9idXNfc2V0dXBfcFNlcmllcwlOVUxMCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKaW5kZXggYmYyZTFhYy4uMTE2NGMzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwpAQCAtNDMyLDggKzQzMiw2IEBACiAJCS8qIFJlYWQgY29uZmlnIHNwYWNlIGJhY2sgc28gd2UgY2FuIHJlc3RvcmUgYWZ0ZXIgcmVzZXQgKi8KIAkJcmVhZF9tc2lfbXNnKHZpcnEsICZtc2cpOwogCQllbnRyeS0+bXNnID0gbXNnOwotCi0JCXVubWFza19tc2lfaXJxKHZpcnEpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggNDE5ZjhhNi4uYjliZjBlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CkBAIC0yMTksNiArMjIwLDE0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19zdGFydHVwKHVuc2lnbmVkIGludCB2aXJxKQogeworCS8qCisJICogVGhlIGdlbmVyaWMgTVNJIGNvZGUgcmV0dXJucyB3aXRoIHRoZSBpbnRlcnJ1cHQgZGlzYWJsZWQgb24gdGhlCisJICogY2FyZCwgdXNpbmcgdGhlIE1TSSBtYXNrIGJpdHMuIEZpcm13YXJlIGRvZXNuJ3QgYXBwZWFyIHRvIHVubWFzaworCSAqIGF0IHRoYXQgbGV2ZWwsIHNvIHdlIGRvIGl0IGhlcmUgYnkgaGFuZC4KKwkgKi8KKwlpZiAoaXJxX3RvX2Rlc2ModmlycSktPm1zaV9kZXNjKQorCQl1bm1hc2tfbXNpX2lycSh2aXJxKTsKKwogCS8qIHVubWFzayBpdCAqLwogCXhpY3NfdW5tYXNrX2lycSh2aXJxKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9yZWxvY3NfY2hlY2sucGwgYi9hcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyNTcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsCkBAIC0wLDAgKzEsNTYgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIENvcHlyaWdodCDCqSAyMDA5IElCTSBDb3Jwb3JhdGlvbgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisjIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBzY3JpcHQgY2hlY2tzIHRoZSByZWxjb2F0aW9ucyBvZiBhIHZtbGludXggZm9yICJzdXNwaWNpb3VzIgorIyByZWxvY2F0aW9ucy4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworaWYgKCQjQVJHViAhPSAxKSB7CisJZGllICIkMCBbcGF0aCB0byBvYmpkdW1wXSBbcGF0aCB0byB2bWxpbnV4XVxuIjsKK30KKworIyBIYXZlIEtidWlsZCBzdXBwbHkgdGhlIHBhdGggdG8gb2JqZHVtcCBzbyB3ZSBoYW5kbGUgY3Jvc3MgY29tcGlsYXRpb24uCitteSAkb2JqZHVtcCA9IHNoaWZ0OworbXkgJHZtbGludXggPSBzaGlmdDsKK215ICRiYWRfcmVsb2NzX2NvdW50ID0gMDsKK215ICRiYWRfcmVsb2NzID0gIiI7CitteSAkb2xkX2JpbnV0aWxzID0gMDsKKworb3BlbihGRCwgIiRvYmpkdW1wIC1SICR2bWxpbnV4fCIpIG9yIGRpZTsKK3doaWxlICg8RkQ+KSB7CisJc3R1ZHkgJF87CisKKwkjIE9ubHkgbG9vayBhdCByZWxjb2F0aW9uIGxpbmVzLgorCW5leHQgaWYgKCEvXHMrUl8vKTsKKworCSMgVGhlc2UgcmVsb2NhdGlvbnMgYXJlIG9rYXkKKwluZXh0IGlmICgvUl9QUEM2NF9SRUxBVElWRS8gb3IgL1JfUFBDNjRfTk9ORS8gb3IKKwkgICAgICAgICAvUl9QUEM2NF9BRERSNjRccyttYWNoXy8pOworCisJIyBJZiB3ZSBzZWUgdGhpcyB0eXBlIG9mIHJlbGNvYXRpb24gaXQncyBhbiBpZGljYXRpb24gdGhhdAorCSMgd2UgL21heS8gYmUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgYmludXRpbHMuCisJaWYgKC9SX1BQQzY0X1VBRERSNjQvKSB7CisJCSRvbGRfYmludXRpbHMrKzsKKwl9CisKKwkkYmFkX3JlbG9jc19jb3VudCsrOworCSRiYWRfcmVsb2NzIC49ICRfOworfQorCitpZiAoJGJhZF9yZWxvY3NfY291bnQpIHsKKwlwcmludCAiV0FSTklORzogJGJhZF9yZWxvY3NfY291bnQgYmFkIHJlbG9jYXRpb25zXG4iOworCXByaW50ICRiYWRfcmVsb2NzOworfQorCitpZiAoJG9sZF9iaW51dGlscykgeworCXByaW50ICJXQVJOSU5HOiBZb3UgbmVlZCBhdCBiaW51dGlscyA+PSAyLjE5IHRvIGJ1aWxkIGEgIi4KKwkgICAgICAiQ09ORklHX1JFTENPQVRBQkxFIGtlcm5lbFxuIjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggODk2MzllYy4uYWUzYzRkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCS8qIFdlIG9ubHkgaGF2ZSBvbmUgaW9tbXUgdGFibGUgb24gdGhlIG1hYyBmb3Igbm93LCB3aGljaCBtYWtlcwogCSAqIHRoaW5ncyBzaW1wbGUuIFNldHVwIGFsbCBQQ0kgZGV2aWNlcyB0byBwb2ludCB0byB0aGlzIHRhYmxlCiAJICovCi0JZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSAmaW9tbXVfdGFibGVfZGFydDsKKwlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsICZpb21tdV90YWJsZV9kYXJ0KTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfZGFydChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IDBlMDlhNDUuLmJkYmU5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTMzNSw2ICszMzUsMTYgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGludCB1bnJlY292ZXJhYmxlX2V4Y3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHXzR4eAorCS8qIFdlIGhhdmUgbm8gTVNSX1JJIGJpdCBvbiA0eHgsIHNvIHdlIHNpbXBseSByZXR1cm4gZmFsc2UgKi8KKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuICgocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IHhtb25fY29yZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGZyb21pcGkpCiB7CiAJaW50IGNtZCA9IDA7CkBAIC0zODgsNyArMzk4LDcgQEAKIAlicCA9IE5VTEw7CiAJaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfU0YpKSA9PSAoTVNSX0lSfE1TUl9TRikpCiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwotCWlmIChicCB8fCAocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKQorCWlmIChicCB8fCB1bnJlY292ZXJhYmxlX2V4Y3AocmVncykpCiAJCWZyb21pcGkgPSAwOwogCiAJaWYgKCFmcm9taXBpKSB7CkBAIC0zOTksNyArNDA5LDcgQEAKIAkJCSAgICAgICBjcHUsIEJQX05VTShicCkpOwogCQkJeG1vbl9wcmludF9zeW1ib2wocmVncy0+bmlwLCAiICIsICIpXG4iKTsKIAkJfQotCQlpZiAoKHJlZ3MtPm1zciAmIE1TUl9SSSkgPT0gMCkKKwkJaWYgKHVucmVjb3ZlcmFibGVfZXhjcChyZWdzKSkKIAkJCXByaW50ZigiV0FSTklORzogZXhjZXB0aW9uIGlzIG5vdCByZWNvdmVyYWJsZSwgIgogCQkJICAgICAgICJjYW4ndCBjb250aW51ZVxuIik7CiAJCXJlbGVhc2Vfb3V0cHV0X2xvY2soKTsKQEAgLTQ5MCw3ICs1MDAsNyBAQAogCQkJcHJpbnRmKCJTdG9wcGVkIGF0IGJyZWFrcG9pbnQgJXggKCIsIEJQX05VTShicCkpOwogCQkJeG1vbl9wcmludF9zeW1ib2wocmVncy0+bmlwLCAiICIsICIpXG4iKTsKIAkJfQotCQlpZiAoKHJlZ3MtPm1zciAmIE1TUl9SSSkgPT0gMCkKKwkJaWYgKHVucmVjb3ZlcmFibGVfZXhjcChyZWdzKSkKIAkJCXByaW50ZigiV0FSTklORzogZXhjZXB0aW9uIGlzIG5vdCByZWNvdmVyYWJsZSwgIgogCQkJICAgICAgICJjYW4ndCBjb250aW51ZVxuIik7CiAJCXJlbW92ZV9icHRzKCk7CkBAIC01MDcsNiArNTE3LDE1IEBACiAJaW5feG1vbiA9IDA7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19CT09LRQorCWlmIChyZWdzLT5tc3IgJiBNU1JfREUpIHsKKwkJYnAgPSBhdF9icmVha3BvaW50KHJlZ3MtPm5pcCk7CisJCWlmIChicCAhPSBOVUxMKSB7CisJCQlyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZykgJmJwLT5pbnN0clswXTsKKwkJCWF0b21pY19pbmMoJmJwLT5yZWZfY291bnQpOworCQl9CisJfQorI2Vsc2UKIAlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpID09IChNU1JfSVJ8TVNSX1NGKSkgewogCQlicCA9IGF0X2JyZWFrcG9pbnQocmVncy0+bmlwKTsKIAkJaWYgKGJwICE9IE5VTEwpIHsKQEAgLTUyMCw3ICs1MzksNyBAQAogCQkJfQogCQl9CiAJfQotCisjZW5kaWYKIAlpbnNlcnRfY3B1X2JwdHMoKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTg4NCw2ICs5MDMsMTQgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQk9PS0UKK3N0YXRpYyBpbnQgZG9fc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdzLT5tc3IgfD0gTVNSX0RFOworCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApIHwgREJDUjBfSUMgfCBEQkNSMF9JRE0pOworCXJldHVybiAxOworfQorI2Vsc2UKIC8qCiAgKiBTdGVwIGEgc2luZ2xlIGluc3RydWN0aW9uLgogICogU29tZSBpbnN0cnVjdGlvbnMgd2UgZW11bGF0ZSwgb3RoZXJzIHdlIGV4ZWN1dGUgd2l0aCBNU1JfU0Ugc2V0LgpAQCAtOTE0LDYgKzk0MSw3IEBACiAJcmVncy0+bXNyIHw9IE1TUl9TRTsKIAlyZXR1cm4gMTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBib290Y21kcyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggNzA0ZGQzOS4uNzdkZjcyNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAkJfQogCQlpZiAoZGlhZzIwNCgodW5zaWduZWQgbG9uZylTVUJDX1NUSUI2IHwKIAkJCSAgICAodW5zaWduZWQgbG9uZylJTkZPX0VYVCwgcGFnZXMsIGJ1ZikgPj0gMCkgewotCQkJZGlhZzIwNF9zdG9yZV9zYyA9IFNVQkNfU1RJQjc7CisJCQlkaWFnMjA0X3N0b3JlX3NjID0gU1VCQ19TVElCNjsKIAkJCWRpYWcyMDRfaW5mb190eXBlID0gSU5GT19FWFQ7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggMjRiMTI0NC4uZjIzOTYxYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC03OCw3ICs3OCw3IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogY3B1dGltZV90b19tc2Vjcyhjb25zdCBjcHV0aW1lX3QgY3B1dGltZSkKIHsKLQlyZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMCk7CisJcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDApOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWVfdApAQCAtMTYwLDcgKzE2MCw3IEBACiBzdGF0aWMgaW5saW5lIGNsb2NrX3QKIGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lX3QgY3B1dGltZSkKIHsKLQlyZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOworCXJldHVybiBjcHV0aW1lX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZV90CkBAIC0xNzUsNyArMTc1LDcgQEAKIHN0YXRpYyBpbmxpbmUgY2xvY2tfdAogY3B1dGltZTY0X3RvX2Nsb2NrX3QoY3B1dGltZTY0X3QgY3B1dGltZSkKIHsKLSAgICAgICByZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOworICAgICAgIHJldHVybiBjcHV0aW1lX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CiB9CiAKIHN0cnVjdCBzMzkwX2lkbGVfZGF0YSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGVsYXkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCmluZGV4IGEzNTZjOTUuLjhhMDk2YjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCkBAIC0xNCwxMCArMTQsMTEgQEAKICNpZm5kZWYgX1MzOTBfREVMQVlfSAogI2RlZmluZSBfUzM5MF9ERUxBWV9ICiAKLWV4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOwotZXh0ZXJuIHZvaWQgdWRlbGF5X3NpbXBsZSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgbG9uZyB1c2Vjcyk7CitleHRlcm4gdm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgbG9uZyB1c2Vjcyk7CiBleHRlcm4gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpOwogCi0jZGVmaW5lIHVkZWxheShuKSBfX3VkZWxheShuKQorI2RlZmluZSB1ZGVsYXkobikgX191ZGVsYXkoKHVuc2lnbmVkIGxvbmcgbG9uZykgKG4pKQorI2RlZmluZSBtZGVsYXkobikgX191ZGVsYXkoKHVuc2lnbmVkIGxvbmcgbG9uZykgKG4pICogMTAwMCkKIAogI2VuZGlmIC8qIGRlZmluZWQoX1MzOTBfREVMQVlfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3NGQwYmJiLi5lODg1NDQyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC05Miw2ICs5MiwxOCBAQAogLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KICNkZWZpbmUgUl8zOTBfTlVNCTYxCiAKKy8qIEJpdHMgcHJlc2VudCBpbiBBVF9IV0NBUC4gKi8KKyNkZWZpbmUgSFdDQVBfUzM5MF9FU0FOMwkxCisjZGVmaW5lIEhXQ0FQX1MzOTBfWkFSQ0gJMgorI2RlZmluZSBIV0NBUF9TMzkwX1NURkxFCTQKKyNkZWZpbmUgSFdDQVBfUzM5MF9NU0EJCTgKKyNkZWZpbmUgSFdDQVBfUzM5MF9MRElTUAkxNgorI2RlZmluZSBIV0NBUF9TMzkwX0VJTU0JCTMyCisjZGVmaW5lIEhXQ0FQX1MzOTBfREZQCQk2NAorI2RlZmluZSBIV0NBUF9TMzkwX0hQQUdFCTEyOAorI2RlZmluZSBIV0NBUF9TMzkwX0VURjNFSAkyNTYKKyNkZWZpbmUgSFdDQVBfUzM5MF9ISUdIX0dQUlMJNTEyCisKIC8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDUzOTI2M2YuLjk1ZGNmMTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTMxMSw2ICszMTEsMTAgQEAKIAlfX3UzMgkJb3JpZ19ncHIyOwogfSBzMzkwX2NvbXBhdF9yZWdzOwogCit0eXBlZGVmIHN0cnVjdAoreworCV9fdTMyCQlncHJzX2hpZ2hbTlVNX0dQUlNdOworfSBzMzkwX2NvbXBhdF9yZWdzX2hpZ2g7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKaW5kZXggZDY5YmVjMC4uY2ZiODc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTksNiArOSwyMSBAQAogI2lmbmRlZiBfQVNNX1MzOTBfVUNPTlRFWFRfSAogI2RlZmluZSBfQVNNX1MzOTBfVUNPTlRFWFRfSAogCisjZGVmaW5lIFVDX0VYVEVOREVECTB4MDAwMDAwMDEKKworI2lmbmRlZiBfX3MzOTB4X18KKworc3RydWN0IHVjb250ZXh0X2V4dGVuZGVkIHsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CisJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKKwlzdGFja190CQkgIHVjX3N0YWNrOworCV9zaWdyZWdzCSAgdWNfbWNvbnRleHQ7CisJdW5zaWduZWQgbG9uZwkgIHVjX3NpZ21hc2tbMl07CisJdW5zaWduZWQgbG9uZwkgIHVjX2dwcnNfaGlnaFsxNl07Cit9OworCisjZW5kaWYKKwogc3RydWN0IHVjb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CiAJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKaW5kZXggYjUzN2NiMC4uZWVlOTk5OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAlzdHJ1Y3Qgc2lnY29udGV4dDMyIHNjOwogCV9zaWdyZWdzMzIgc3JlZ3M7CiAJaW50IHNpZ25vOworCV9fdTMyIGdwcnNfaGlnaFtOVU1fR1BSU107CiAJX191OCByZXRjb2RlW1MzOTBfU1lTQ0FMTF9TSVpFXTsKIH0gc2lnZnJhbWUzMjsKIApAQCAtNDgsNiArNDksNyBAQAogCV9fdTggcmV0Y29kZVtTMzkwX1NZU0NBTExfU0laRV07CiAJY29tcGF0X3NpZ2luZm9fdCBpbmZvOwogCXN0cnVjdCB1Y29udGV4dDMyIHVjOworCV9fdTMyIGdwcnNfaGlnaFtOVU1fR1BSU107CiB9IHJ0X3NpZ2ZyYW1lMzI7CiAKIGludCBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp0bywgc2lnaW5mb190ICpmcm9tKQpAQCAtMzQ0LDYgKzM0NiwzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhdmVfc2lncmVnc19ncHJzX2hpZ2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIF9fdTMyIF9fdXNlciAqdXJlZ3MpCit7CisJX191MzIgZ3Byc19oaWdoW05VTV9HUFJTXTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BSUzsgaSsrKQorCQlncHJzX2hpZ2hbaV0gPSByZWdzLT5ncHJzW2ldID4+IDMyOworCisJcmV0dXJuIF9fY29weV90b191c2VyKHVyZWdzLCAmZ3Byc19oaWdoLCBzaXplb2YoZ3Byc19oaWdoKSk7Cit9CisKK3N0YXRpYyBpbnQgcmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChzdHJ1Y3QgcHRfcmVncyAqcmVncywgX191MzIgX191c2VyICp1cmVncykKK3sKKwlfX3UzMiBncHJzX2hpZ2hbTlVNX0dQUlNdOworCWludCBlcnIsIGk7CisKKwllcnIgPSBfX2NvcHlfZnJvbV91c2VyKCZncHJzX2hpZ2gsIHVyZWdzLCBzaXplb2YoZ3Byc19oaWdoKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0dQUlM7IGkrKykKKwkJKihfX3UzMiAqKSZyZWdzLT5ncHJzW2ldID0gZ3Byc19oaWdoW2ldOworCXJldHVybiAwOworfQorCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfc2lncmV0dXJuKHZvaWQpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CkBAIC0zNjMsNiArMzg5LDggQEAKIAogCWlmIChyZXN0b3JlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnNyZWdzKSkKIAkJZ290byBiYWRmcmFtZTsKKwlpZiAocmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKSkKKwkJZ290byBiYWRmcmFtZTsKIAogCXJldHVybiByZWdzLT5ncHJzWzJdOwogCkBAIC0zOTQsNiArNDIyLDggQEAKIAogCWlmIChyZXN0b3JlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0KSkKIAkJZ290byBiYWRmcmFtZTsKKwlpZiAocmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKSkKKwkJZ290byBiYWRmcmFtZTsKIAogCWVyciA9IF9fZ2V0X3VzZXIoc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwogCXN0LnNzX3NwID0gY29tcGF0X3B0cihzc19zcCk7CkBAIC00NzQsNiArNTA0LDggQEAKIAogCWlmIChzYXZlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnNyZWdzKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CisJaWYgKHNhdmVfc2lncmVnc19ncHJzX2hpZ2gocmVncywgZnJhbWUtPmdwcnNfaGlnaCkpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCWlmIChfX3B1dF91c2VyKCh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPnNyZWdzLCAmZnJhbWUtPnNjLnNyZWdzKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKQEAgLTUyOSwxMyArNTYxLDE0IEBACiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCiAJLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoVUNfRVhURU5ERUQsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwogCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKIAllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+Z3Byc1sxNV0pLAogCSAgICAgICAgICAgICAgICAgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOwogCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOwogCWVyciB8PSBzYXZlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0KTsKKwllcnIgfD0gc2F2ZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKTsKIAllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7CiAJaWYgKGVycikKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKaW5kZXggNjgyZmI2OS4uY2JkOTkwMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJLmdsb2JsCXN5czMyX3RydW5jYXRlX3dyYXBwZXIKIHN5czMyX3RydW5jYXRlX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCi0JbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgbG9uZworCWxnZnIJJXIzLCVyMwkJCSMgbG9uZwogCWpnCXN5c190cnVuY2F0ZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAogCS5nbG9ibAlzeXMzMl9mdHJ1bmNhdGVfd3JhcHBlcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IGJmOGI0YWUuLmU0OWU5ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkJZGlzYWJsZWRfd2FpdCgwKTsKIAogCXNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSBUT0RfVU5JWF9FUE9DSDsKKwlTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfY2xvY2sgPSBzY2hlZF9jbG9ja19iYXNlX2NjOwogfQogCiAjaWZkZWYgQ09ORklHX1NIQVJFRF9LRVJORUwKQEAgLTE2Nyw2ICsxNjgsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAorCS8qIHJlLWluaXRpYWxpemUgY3B1dGltZSBhY2NvdW50aW5nLiAqLworCXNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSBnZXRfY2xvY2soKTsKKwlTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfY2xvY2sgPSBzY2hlZF9jbG9ja19iYXNlX2NjOworCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lciA9IDB4N2ZmZmZmZmZmZmZmZmZmZlVMTDsKKwlTMzkwX2xvd2NvcmUudXNlcl90aW1lciA9IDA7CisJUzM5MF9sb3djb3JlLnN5c3RlbV90aW1lciA9IDA7CisJYXNtIHZvbGF0aWxlKCJTUFQgMCglMCkiIDogOiAiYSIgKCZTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXIpKTsKKwogCS8qIHJlLXNldHVwIGJvb3QgY29tbWFuZCBsaW5lIHdpdGggbmV3IGlwbCB2bSBwYXJtcyAqLwogCWlwbF91cGRhdGVfcGFyYW1ldGVycygpOwogCXNldHVwX2Jvb3RfY29tbWFuZF9saW5lKCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggZjQzZDJlZS4uNDgyMTVkMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtNTY1LDEwICs1NjUsMTAgQEAKIAlsaAklcjcsMHg4YQkJIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKIAlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCVRSQUNFX0lSUVNfT0ZGCi0JbAklcjEsX19USV90YXNrKCVyOSkKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXIxKSxfX0xDX1BFUl9BVE1JRAotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg0LCVyMSksX19MQ19QRVJfQUREUkVTUwotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKKwlsCSVyOCxfX1RJX3Rhc2soJXI5KQorCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjgpLF9fTENfUEVSX0FUTUlECisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDQsJXI4KSxfX0xDX1BFUl9BRERSRVNTCisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjgpLF9fTENfUEVSX0FDQ0VTU19JRAogCW9pCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfU0lOR0xFX1NURVAgIyBzZXQgVElGX1NJTkdMRV9TVEVQCiAJVFJBQ0VfSVJRU19PTgogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKaW5kZXggYTZmN2IyMC4uOWFmZjFkNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKQEAgLTU0MywxMCArNTQzLDEwIEBACiAJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksX19MQ19TWU5DX0VOVEVSX1RJTUVSCiAJbGxnaAklcjcsX19MQ19TVkNfSU5UX0NPREUJIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKIAlsZwklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKLQlsZwklcjEsX19USV90YXNrKCVyOSkKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXIxKSxfX0xDX1BFUl9BVE1JRAotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg4LCVyMSksX19MQ19QRVJfQUREUkVTUwotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKKwlsZwklcjgsX19USV90YXNrKCVyOSkKKwltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXI4KSxfX0xDX1BFUl9BVE1JRAorCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg4LCVyOCksX19MQ19QRVJfQUREUkVTUworCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXI4KSxfX0xDX1BFUl9BQ0NFU1NfSUQKIAlvaQlfX1RJX2ZsYWdzKzcoJXI5KSxfVElGX1NJTkdMRV9TVEVQICMgc2V0IFRJRl9TSU5HTEVfU1RFUAogCVRSQUNFX0lSUVNfT04KIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYwppbmRleCA1N2JkY2IxLi5mNWZlMzRkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKQEAgLTE4NSw5ICsxODUsNiBAQAogewogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50IHRyYWNlOwogCi0JLyogTm1pJ3MgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4gKi8KLQlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQotCQlnb3RvIG91dDsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKIAkJZ290byBvdXQ7CiAJaWYgKGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZShwYXJlbnQsIGlwLCAmdHJhY2UuZGVwdGgsIDApID09IC1FQlVTWSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IGVlNTdhNDIuLjQ4OTBhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMTU5NSwxMCArMTU5NSw5IEBACiB7CiAJaWYgKHN0cmNtcCh0cmlnZ2VyLT5uYW1lLCBPTl9QQU5JQ19TVFIpID09IDApCiAJCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZWxzZSB7Ci0JCXNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApOwotCQlmb3IgKDs7KTsKLQl9CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CisJZm9yICg7Oyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIHN0b3BfYWN0aW9uID0ge1NIVVRET1dOX0FDVElPTl9TVE9QX1NUUiwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCmluZGV4IGFiMmUzZWQuLjYzOTM4MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYwpAQCAtNTUsNiArNTUsOCBAQAogLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KIHZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQogeworCXZmcmVlKG1vZC0+YXJjaC5zeW1pbmZvKTsKKwltb2QtPmFyY2guc3ltaW5mbyA9IE5VTEw7CiAJdmZyZWUobW9kdWxlX3JlZ2lvbik7CiB9CiAKQEAgLTQwMiw2ICs0MDQsNyBAQAogCQkgICAgc3RydWN0IG1vZHVsZSAqbWUpCiB7CiAJdmZyZWUobWUtPmFyY2guc3ltaW5mbyk7CisJbWUtPmFyY2guc3ltaW5mbyA9IE5VTEw7CiAJcmV0dXJuIG1vZHVsZV9idWdfZmluYWxpemUoaGRyLCBzZWNoZHJzLCBtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IDgwMmM4YWIuLjA3MjlmMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMzEsOSArMzEsOSBAQAogCiBzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls5XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzEwXSA9IHsKIAkJImVzYW4zIiwgInphcmNoIiwgInN0ZmxlIiwgIm1zYSIsICJsZGlzcCIsICJlaW1tIiwgImRmcCIsCi0JCSJlZGF0IiwgImV0ZjNlaCIKKwkJImVkYXQiLCAiZXRmM2VoIiwgImhpZ2hncHJzIgogCX07CiAJc3RydWN0IF9sb3djb3JlICpsYzsKIAl1bnNpZ25lZCBsb25nIG4gPSAodW5zaWduZWQgbG9uZykgdiAtIDE7CkBAIC00OCw3ICs0OCw3IEBACiAJCQkgICBudW1fb25saW5lX2NwdXMoKSwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAogCQkJICAgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpJTEwMCk7CiAJCXNlcV9wdXRzKG0sICJmZWF0dXJlc1x0OiAiKTsKLQkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCQlpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKIAkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOwogCQlzZXFfcHV0cyhtLCAiXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IGE4NzM4NjcuLjY1M2M2YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTcsNiArNTcsNyBAQAogZW51bSBzMzkwX3JlZ3NldCB7CiAJUkVHU0VUX0dFTkVSQUwsCiAJUkVHU0VUX0ZQLAorCVJFR1NFVF9HRU5FUkFMX0VYVEVOREVELAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTg3OSw2ICs4ODAsNjcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgczM5MF9jb21wYXRfcmVnc19oaWdoX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJCSAgICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJY29tcGF0X3Vsb25nX3QgKmdwcnNfaGlnaDsKKworCWdwcnNfaGlnaCA9IChjb21wYXRfdWxvbmdfdCAqKQorCQkmdGFza19wdF9yZWdzKHRhcmdldCktPmdwcnNbcG9zIC8gc2l6ZW9mKGNvbXBhdF91bG9uZ190KV07CisJaWYgKGtidWYpIHsKKwkJY29tcGF0X3Vsb25nX3QgKmsgPSBrYnVmOworCQl3aGlsZSAoY291bnQgPiAwKSB7CisJCQkqaysrID0gKmdwcnNfaGlnaDsKKwkJCWdwcnNfaGlnaCArPSAyOworCQkJY291bnQgLT0gc2l6ZW9mKCprKTsKKwkJfQorCX0gZWxzZSB7CisJCWNvbXBhdF91bG9uZ190IF9fdXNlciAqdSA9IHVidWY7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCWlmIChfX3B1dF91c2VyKCpncHJzX2hpZ2gsIHUrKykpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlncHJzX2hpZ2ggKz0gMjsKKwkJCWNvdW50IC09IHNpemVvZigqdSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczM5MF9jb21wYXRfcmVnc19oaWdoX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJCSAgICAgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJY29tcGF0X3Vsb25nX3QgKmdwcnNfaGlnaDsKKwlpbnQgcmMgPSAwOworCisJZ3Byc19oaWdoID0gKGNvbXBhdF91bG9uZ190ICopCisJCSZ0YXNrX3B0X3JlZ3ModGFyZ2V0KS0+Z3Byc1twb3MgLyBzaXplb2YoY29tcGF0X3Vsb25nX3QpXTsKKwlpZiAoa2J1ZikgeworCQljb25zdCBjb21wYXRfdWxvbmdfdCAqayA9IGtidWY7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCSpncHJzX2hpZ2ggPSAqaysrOworCQkJKmdwcnNfaGlnaCArPSAyOworCQkJY291bnQgLT0gc2l6ZW9mKCprKTsKKwkJfQorCX0gZWxzZSB7CisJCWNvbnN0IGNvbXBhdF91bG9uZ190ICBfX3VzZXIgKnUgPSB1YnVmOworCQl3aGlsZSAoY291bnQgPiAwICYmICFyYykgeworCQkJdW5zaWduZWQgbG9uZyB3b3JkOworCQkJcmMgPSBfX2dldF91c2VyKHdvcmQsIHUrKyk7CisJCQlpZiAocmMpCisJCQkJYnJlYWs7CisJCQkqZ3Byc19oaWdoID0gd29yZDsKKwkJCSpncHJzX2hpZ2ggKz0gMjsKKwkJCWNvdW50IC09IHNpemVvZigqdSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgczM5MF9jb21wYXRfcmVnc2V0c1tdID0gewogCVtSRUdTRVRfR0VORVJBTF0gPSB7CiAJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSU1RBVFVTLApAQCAtODk2LDYgKzk1OCwxNCBAQAogCQkuZ2V0ID0gczM5MF9mcHJlZ3NfZ2V0LAogCQkuc2V0ID0gczM5MF9mcHJlZ3Nfc2V0LAogCX0sCisJW1JFR1NFVF9HRU5FUkFMX0VYVEVOREVEXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJYU1RBVFVTLAorCQkubiA9IHNpemVvZihzMzkwX2NvbXBhdF9yZWdzX2hpZ2gpIC8gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLAorCQkuc2l6ZSA9IHNpemVvZihjb21wYXRfbG9uZ190KSwKKwkJLmFsaWduID0gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLAorCQkuZ2V0ID0gczM5MF9jb21wYXRfcmVnc19oaWdoX2dldCwKKwkJLnNldCA9IHMzOTBfY29tcGF0X3JlZ3NfaGlnaF9zZXQsCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyB1c2VyX3MzOTBfY29tcGF0X3ZpZXcgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggOWVkMTNhMS4uMDYxNDc5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzI5LDcgKzcyOSw3IEBACiAKIAlpZiAoKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDIyKSkpCiAJICAgICYmIChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAzMCkpKSkKLQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA4OworCQllbGZfaHdjYXAgfD0gSFdDQVBfUzM5MF9FVEYzRUg7CiAKIAkvKgogCSAqIENoZWNrIGZvciBhZGRpdGlvbmFsIGZhY2lsaXRpZXMgd2l0aCBzdG9yZS1mYWNpbGl0eS1saXN0LWV4dGVuZGVkLgpAQCAtNzQ4LDExICs3NDgsMjAgQEAKIAkgICAgX19zdGZsZSgmZmFjaWxpdHlfbGlzdF9leHRlbmRlZCwgMSkgPiAwKSB7CiAJCWlmICgoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2MyAtIDQyKSkpCiAJCSAgICAmJiAoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2MyAtIDQ0KSkpKQotCQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA2OworCQkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfREZQOwogCX0KIAorCS8qCisJICogSHVnZSBwYWdlIHN1cHBvcnQgSFdDQVBfUzM5MF9IUEFHRSBpcyBiaXQgNy4KKwkgKi8KIAlpZiAoTUFDSElORV9IQVNfSFBBR0UpCi0JCWVsZl9od2NhcCB8PSAxVUwgPDwgNzsKKwkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfSFBBR0U7CisKKwkvKgorCSAqIDY0LWJpdCByZWdpc3RlciBzdXBwb3J0IGZvciAzMS1iaXQgcHJvY2Vzc2VzCisJICogSFdDQVBfUzM5MF9ISUdIX0dQUlMgaXMgYml0IDkuCisJICovCisJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfSElHSF9HUFJTOwogCiAJc3dpdGNoIChTMzkwX2xvd2NvcmUuY3B1X2lkLm1hY2hpbmUpIHsKIAljYXNlIDB4OTY3MjoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IGM5MzJjYWEuLjkzZTUyMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNzYsNyArNzYsNiBAQAogCV9fdTMyIHN0YXR1czsKIAogCXN3aXRjaCAoc2lnbmFsX3Byb2Nlc3Nvcl9wcygmc3RhdHVzLCAwLCBjcHUsIHNpZ3Bfc2Vuc2UpKSB7Ci0JY2FzZSBzaWdwX29yZGVyX2NvZGVfYWNjZXB0ZWQ6CiAJY2FzZSBzaWdwX3N0YXR1c19zdG9yZWQ6CiAJCS8qIENoZWNrIGZvciBzdG9wcGVkIGFuZCBjaGVjayBzdG9wIHN0YXRlICovCiAJCWlmIChzdGF0dXMgJiAweDUwKQpAQCAtNjM4LDYgKzYzNyw4IEBACiAJLyogV2FpdCB1bnRpbCB0YXJnZXQgY3B1IGlzIGRvd24gKi8KIAl3aGlsZSAoIWNwdV9zdG9wcGVkKGNwdSkpCiAJCWNwdV9yZWxheCgpOworCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yX3AoMCwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKKwkJdWRlbGF5KDEwKTsKIAlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0b3BwZWRcbiIsIGNwdSk7CiB9CkBAIC02NDUsOCArNjQ2LDggQEAKIHZvaWQgY3B1X2RpZSh2b2lkKQogewogCWlkbGVfdGFza19leGl0KCk7Ci0Jc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0JQlVHKCk7CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CiAJZm9yICg7Oyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IGZlOTI3ZDAuLjBjMjZjYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtNDMsNyArNDMsNyBAQAogCWxnaGkJJXIxLDB4MTAwMAogCiAJLyogU2F2ZSBDUFUgYWRkcmVzcyAqLwotCXN0YXAJX19MQ19DUFVfQUREUkVTUyglcjEpCisJc3RhcAlfX0xDX0NQVV9BRERSRVNTKCVyMCkKIAogCS8qIFN0b3JlIHJlZ2lzdGVycyAqLwogCW12YwkweDMxOCg0LCVyMSksX19TRl9FTVBUWSglcjE1KQkvKiBtb3ZlIHByZWZpeCB0byBsb3djb3JlICovCkBAIC02OSw4ICs2OSwyMSBAQAogCXN0bWcJJXIwLCVyMTUsMHgyODAoJXIxKQkJLyogc3RvcmUgZ2VuZXJhbCByZWdpc3RlcnMgKi8KIAogCXN0cHQJMHgzMjgoJXIxKQkJCS8qIHN0b3JlIHRpbWVyICovCisJc3RjawlfX1NGX0VNUFRZKCVyMTUpCQkvKiBzdG9yZSBjbG9jayAqLwogCXN0Y2tjCTB4MzMwKCVyMSkJCQkvKiBzdG9yZSBjbG9jayBjb21wYXJhdG9yICovCiAKKwkvKiBVcGRhdGUgY3B1dGltZSBhY2NvdW50aW5nIGJlZm9yZSBnb2luZyB0byBzbGVlcCAqLworCWxnCSVyMCxfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCisJc2xnCSVyMCwweDMyOCglcjEpCisJYWxnCSVyMCxfX0xDX1NZU1RFTV9USU1FUgorCXN0ZwklcjAsX19MQ19TWVNURU1fVElNRVIKKwltdmMJX19MQ19MQVNUX1VQREFURV9USU1FUig4KSwweDMyOCglcjEpCisJbGcJJXIwLF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sKKwlzbGcJJXIwLF9fU0ZfRU1QVFkoJXIxNSkKKwlhbGcJJXIwLF9fTENfU1RFQUxfVElNRVIKKwlzdGcJJXIwLF9fTENfU1RFQUxfVElNRVIKKwltdmMJX19MQ19MQVNUX1VQREFURV9DTE9DSyg4KSxfX1NGX0VNUFRZKCVyMTUpCisKIAkvKiBBY3RpdmF0ZSBEQVQgKi8KIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDQKIApAQCAtMTU5LDggKzE3Miw3IEBACiAJbGFybAklcjEsLkxyZXN1bWVfY3B1CQkvKiBSZXN1bWUgQ1BVIGFkZHJlc3M6IHIyICovCiAJc3RhcAkwKCVyMSkKIAlsbGdoCSVyMiwwKCVyMSkKLQlsZ2hpCSVyMywweDEwMDAKLQlsbGdoCSVyMSxfX0xDX0NQVV9BRERSRVNTKCVyMykJLyogU3VzcGVuZCBDUFUgYWRkcmVzczogcjEgKi8KKwlsbGdoCSVyMSxfX0xDX0NQVV9BRERSRVNTKCVyMCkJLyogU3VzcGVuZCBDUFUgYWRkcmVzczogcjEgKi8KIAljZ3IJJXIxLCVyMgogCWplCXJlc3RvcmVfcmVnaXN0ZXJzCQkvKiByMSA9IHIyIC0+IG5vdGhpbmcgdG8gZG8gKi8KIAlsYXJsCSVyNCwuTHJlc3RhcnRfc3VzcGVuZF9wc3cJLyogU2V0IG5ldyByZXN0YXJ0IFBTVyAqLwpAQCAtMTg3LDYgKzE5OSw3IEBACiAJYnJjCTIsNGIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KIDU6CiAJc2lncAklcjksJXIyLF9fU0lHUF9TVE9QCS8qIHN0b3AgcmVzdW1lIChjdXJyZW50KSBDUFUgKi8KKwlicmMJMiw1YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogNjoJagk2YgogCiByZXN0YXJ0X3N1c3BlbmQ6CkBAIC0xOTQsMTQgKzIwNywxOCBAQAogCWxsZ2gJJXIyLDAoJXIxKQogNzoKIAlzaWdwCSVyOSwlcjIsX19TSUdQX1NFTlNFCS8qIFdhaXQgZm9yIHJlc3VtZSBDUFUgKi8KKwlicmMJOCw3YgkJCS8qIGFjY2VwdGVkLCBzdGF0dXMgMCwgc3RpbGwgcnVubmluZyAqLwogCWJyYwkyLDdiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCiAJdG1sbAklcjksMHg0MAkJLyogVGVzdCBpZiByZXN1bWUgQ1BVIGlzIHN0b3BwZWQgKi8KIAlqegk3YgogCiByZXN0b3JlX3JlZ2lzdGVyczoKIAkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLwotCWxnaGkJJXIxMywweDEwMDAJCS8qICVyMSA9IHBvaW50ZXIgdG8gc2F2ZSBhcmFlICovCisJbGdoaQklcjEzLDB4MTAwMAkJLyogJXIxID0gcG9pbnRlciB0byBzYXZlIGFyZWEgKi8KIAorCS8qIElnbm9yZSB0aW1lIHNwZW50IGluIHN1c3BlbmRlZCBzdGF0ZS4gKi8KKwlsbGdmCSVyMSwweDMxOCglcjEzKQorCXN0Y2sJX19MQ19MQVNUX1VQREFURV9DTE9DSyglcjEpCiAJc3B0CTB4MzI4KCVyMTMpCQkvKiByZXByb2dyYW0gdGltZXIgKi8KIAkvL3Nja2MJMHgzMzAoJXIxMykJCS8qIHNldCBjbG9jayBjb21wYXJhdG9yICovCiAKQEAgLTIyOSw5ICsyNDYsNiBAQAogCS8qIExvYWQgb2xkIHN0YWNrICovCiAJbGcJJXIxNSwweDJmOCglcjEzKQogCi0JLyogUG9pbnRlciB0byBzYXZlIGFyZWEgKi8KLQlsZ2hpCSVyMTMsMHgxMDAwCi0KIAkvKiBSZXN0b3JlIHByZWZpeCByZWdpc3RlciAqLwogCXNweAkweDMxOCglcjEzKQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Zkc28uYyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCmluZGV4IDQ1YTNlOWEuLmFkZmIzMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCkBAIC0yNDcsNiArMjQ3LDEzIEBACiAJfQogCiAJLyoKKwkgKiBQdXQgdkRTTyBiYXNlIGludG8gbW0gc3RydWN0LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcKKwkgKiBpbnN0YWxsX3NwZWNpYWxfbWFwcGluZyBvciB0aGUgcGVyZiBjb3VudGVyIG1tYXAgdHJhY2tpbmcgY29kZQorCSAqIHdpbGwgZmFpbCB0byByZWNvZ25pc2UgaXQgYXMgYSB2RFNPIChzaW5jZSBhcmNoX3ZtYV9uYW1lIGZhaWxzKS4KKwkgKi8KKwljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7CisKKwkvKgogCSAqIG91ciB2bWEgZmxhZ3MgZG9uJ3QgaGF2ZSBWTV9XUklURSBzbyBieSBkZWZhdWx0LCB0aGUgcHJvY2VzcwogCSAqIGlzbid0IGFsbG93ZWQgdG8gd3JpdGUgdGhvc2UgcGFnZXMuCiAJICogZ2RiIGNhbiBicmVhayB0aGF0IHdpdGggcHRyYWNlIGludGVyZmFjZSwgYW5kIHRodXMgdHJpZ2dlciBDT1cKQEAgLTI2NywxNCArMjc0LDcgQEAKIAkJCQkgICAgIFZNX0FMV0FZU0RVTVAsCiAJCQkJICAgICB2ZHNvX3BhZ2VsaXN0KTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0X3VwOwotCi0JLyogUHV0IHZEU08gYmFzZSBpbnRvIG1tIHN0cnVjdCAqLwotCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IHZkc29fYmFzZTsKLQotCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiAwOwotCisJCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IDA7CiBvdXRfdXA6CiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGJjMTVlZjkuLmE2OGFjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTUxLDYgKzUxLDcgQEAKIAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9lc2hhcmVkID0gLjsJCS8qIEVuZCBvZiBzaGFyZWFibGUgZGF0YSAqLworCV9zZGF0YSA9IC47CQkvKiBTdGFydCBvZiBkYXRhIHNlY3Rpb24gKi8KIAogCUVYQ0VQVElPTl9UQUJMRSgxNikgOmRhdGEKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IGVjNWVlZTcuLjA2Y2NlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAorKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTU4LDcgKzU4LDcgQEAKIGludCBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY29kZSk7CiBpbnQga3ZtX3MzOTBfaW5qZWN0X3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhY3Rpb24pOwogCi1zdGF0aWMgaW5saW5lIGludCBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbmxpbmUgbG9uZyBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtCiAJCS0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKaW5kZXggOTdjMWVjYS4uNzUyYjM2MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jCisrKyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwpAQCAtMjUsMTMgKzI1LDEzIEBACiAJYXNtIHZvbGF0aWxlKCIwOiBicmN0ICUwLDBiIiA6IDogImQiICgobG9vcHMvMikgKyAxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdWRlbGF5X2Rpc2FibGVkKHVuc2lnbmVkIGxvbmcgdXNlY3MpCitzdGF0aWMgdm9pZCBfX3VkZWxheV9kaXNhYmxlZCh1bnNpZ25lZCBsb25nIGxvbmcgdXNlY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCBjcjAsIGNyMF9zYXZlZDsKIAl1NjQgY2xvY2tfc2F2ZWQ7CiAKIAljbG9ja19zYXZlZCA9IGxvY2FsX3RpY2tfZGlzYWJsZSgpOwotCXNldF9jbG9ja19jb21wYXJhdG9yKGdldF9jbG9jaygpICsgKCh1NjQpIHVzZWNzIDw8IDEyKSk7CisJc2V0X2Nsb2NrX2NvbXBhcmF0b3IoZ2V0X2Nsb2NrKCkgKyAodXNlY3MgPDwgMTIpKTsKIAlfX2N0bF9zdG9yZShjcjBfc2F2ZWQsIDAsIDApOwogCWNyMCA9IChjcjBfc2F2ZWQgJiAweGZmZmYwMGUwKSB8IDB4MDAwMDA4MDA7CiAJX19jdGxfbG9hZChjcjAgLCAwLCAwKTsKQEAgLTQ2LDIwICs0NiwyNSBAQAogCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKTsKIH0KIAotc3RhdGljIHZvaWQgX191ZGVsYXlfZW5hYmxlZCh1bnNpZ25lZCBsb25nIHVzZWNzKQorc3RhdGljIHZvaWQgX191ZGVsYXlfZW5hYmxlZCh1bnNpZ25lZCBsb25nIGxvbmcgdXNlY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwotCXU2NCBlbmQsIHRpbWU7CisJdTY0IGNsb2NrX3NhdmVkOworCXU2NCBlbmQ7CiAKIAltYXNrID0gcHN3X2tlcm5lbF9iaXRzIHwgUFNXX01BU0tfV0FJVCB8IFBTV19NQVNLX0VYVCB8IFBTV19NQVNLX0lPOwotCWVuZCA9IGdldF9jbG9jaygpICsgKCh1NjQpIHVzZWNzIDw8IDEyKTsKKwllbmQgPSBnZXRfY2xvY2soKSArICh1c2VjcyA8PCAxMik7CiAJZG8gewotCQl0aW1lID0gZW5kIDwgUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IgPwotCQkJZW5kIDogUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3I7Ci0JCXNldF9jbG9ja19jb21wYXJhdG9yKHRpbWUpOworCQljbG9ja19zYXZlZCA9IDA7CisJCWlmIChlbmQgPCBTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcikgeworCQkJY2xvY2tfc2F2ZWQgPSBsb2NhbF90aWNrX2Rpc2FibGUoKTsKKwkJCXNldF9jbG9ja19jb21wYXJhdG9yKGVuZCk7CisJCX0KIAkJdHJhY2VfaGFyZGlycXNfb24oKTsKIAkJX19sb2FkX3Bzd19tYXNrKG1hc2spOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlpZiAoY2xvY2tfc2F2ZWQpCisJCQlsb2NhbF90aWNrX2VuYWJsZShjbG9ja19zYXZlZCk7CiAJfSB3aGlsZSAoZ2V0X2Nsb2NrKCkgPCBlbmQpOwogCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKTsKIH0KQEAgLTY3LDcgKzcyLDcgQEAKIC8qCiAgKiBXYWl0cyBmb3IgJ3VzZWNzJyBtaWNyb3NlY29uZHMgdXNpbmcgdGhlIFRPRCBjbG9jayBjb21wYXJhdG9yLgogICovCi12b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgbG9uZyB1c2VjcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMDEsMTEgKzEwNiwxMSBAQAogICogU2ltcGxlIHVkZWxheSB2YXJpYW50LiBUbyBiZSB1c2VkIG9uIHN0YXJ0dXAgYW5kIHJlYm9vdAogICogd2hlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXNuJ3Qgd29ya2luZy4KICAqLwotdm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgdXNlY3MpCit2b2lkIHVkZWxheV9zaW1wbGUodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQogewogCXU2NCBlbmQ7CiAKLQllbmQgPSBnZXRfY2xvY2soKSArICgodTY0KSB1c2VjcyA8PCAxMik7CisJZW5kID0gZ2V0X2Nsb2NrKCkgKyAodXNlY3MgPDwgMTIpOwogCXdoaWxlIChnZXRfY2xvY2soKSA8IGVuZCkKIAkJY3B1X3JlbGF4KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19tdmNvcy5jCmluZGV4IDNmMTVhYWYuLjU4ZGEzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19tdmNvcy5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19tdmNvcy5jCkBAIC0zNiw3ICszNiw3IEBACiAJdG1wMSA9IC00MDk2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogLmluc24gc3MsMHhjODAwMDAwMDAwMDAsMCglMCwlMiksMCglMSksMFxuIgotCQkiICAganogICAgN2ZcbiIKKwkJIjk6IGp6ICAgIDdmXG4iCiAJCSIxOiJBTFIiICAlMCwlM1xuIgogCQkiICAiU0xSIiAgJTEsJTNcbiIKIAkJIiAgIlNMUiIgICUyLCUzXG4iCkBAIC00Nyw3ICs0Nyw3IEBACiAJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwogCQkiICAgam5oICAgNGZcbiIKIAkJIjM6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTQsJTIpLDAoJTEpLDBcbiIKLQkJIiAgIlNMUiIgICUwLCU0XG4iCisJCSIxMDoiU0xSIiAgJTAsJTRcbiIKIAkJIiAgIkFMUiIgICUyLCU0XG4iCiAJCSI0OiJMSEkiICAlNCwtMVxuIgogCQkiICAiQUxSIiAgJTQsJTBcbiIJLyogY29weSByZW1haW5pbmcgc2l6ZSwgc3VidHJhY3QgMSAqLwpAQCAtNjEsNyArNjEsNyBAQAogCQkiICAgaiAgICAgOGZcbiIKIAkJIjc6IlNMUiIgICUwLCUwXG4iCiAJCSI4OiBcbiIKLQkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDRiKQorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoM2IsNGIpIEVYX1RBQkxFKDliLDJiKSBFWF9UQUJMRSgxMGIsNGIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiAiZCIgKHJlZzApIDogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBzaXplOwpAQCAtODIsNyArODIsNyBAQAogCXRtcDEgPSAtNDA5NlVMOwogCWFzbSB2b2xhdGlsZSgKIAkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTEpLDAoJTIpLDBcbiIKLQkJIiAgIGp6ICAgIDRmXG4iCisJCSI2OiBqeiAgICA0ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIlNMUiIgICUxLCUzXG4iCiAJCSIgICJTTFIiICAlMiwlM1xuIgpAQCAtOTMsMTEgKzkzLDExIEBACiAJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwogCQkiICAgam5oICAgNWZcbiIKIAkJIjM6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTQsJTEpLDAoJTIpLDBcbiIKLQkJIiAgIlNMUiIgICUwLCU0XG4iCisJCSI3OiJTTFIiICAlMCwlNFxuIgogCQkiICAgaiAgICAgNWZcbiIKIAkJIjQ6IlNMUiIgICUwLCUwXG4iCiAJCSI1OiBcbiIKLQkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDViKQorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoM2IsNWIpIEVYX1RBQkxFKDZiLDJiKSBFWF9UQUJMRSg3Yiw1YikKIAkJOiAiK2EiIChzaXplKSwgIithIiAocHRyKSwgIithIiAoeCksICIrYSIgKHRtcDEpLCAiPWEiICh0bXAyKQogCQk6ICJkIiAocmVnMCkgOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKaW5kZXggZDJmZmJhZC4uMDdkZWFlZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwpAQCAtMzYsMTIgKzM2LDEyIEBACiAJdG1wMSA9IC0yNTZVTDsKIAlhc20gdm9sYXRpbGUoCiAJCSIwOiBtdmNwICAwKCUwLCUyKSwwKCUxKSwlM1xuIgotCQkiICAganogICAgOGZcbiIKKwkJIjEwOmp6ICAgIDhmXG4iCiAJCSIxOiJBTFIiICAlMCwlM1xuIgogCQkiICAgbGEgICAgJTEsMjU2KCUxKVxuIgogCQkiICAgbGEgICAgJTIsMjU2KCUyKVxuIgogCQkiMjogbXZjcCAgMCglMCwlMiksMCglMSksJTNcbiIKLQkJIiAgIGpueiAgIDFiXG4iCisJCSIxMTpqbnogICAxYlxuIgogCQkiICAgaiAgICAgOGZcbiIKIAkJIjM6IGxhICAgICU0LDI1NSglMSlcbiIJLyogJTQgPSBwdHIgKyAyNTUgKi8KIAkJIiAgIkxISSIgICUzLC00MDk2XG4iCkBAIC01MCw3ICs1MCw3IEBACiAJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwogCQkiICAgam5oICAgNWZcbiIKIAkJIjQ6IG12Y3AgIDAoJTQsJTIpLDAoJTEpLCUzXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiMTI6IlNMUiIgICUwLCU0XG4iCiAJCSIgICJBTFIiICAlMiwlNFxuIgogCQkiNToiTEhJIiAgJTQsLTFcbiIKIAkJIiAgIkFMUiIgICU0LCUwXG4iCS8qIGNvcHkgcmVtYWluaW5nIHNpemUsIHN1YnRyYWN0IDEgKi8KQEAgLTY1LDYgKzY1LDcgQEAKIAkJIjg6IlNMUiIgICUwLCUwXG4iCiAJCSI5OiBcbiIKIAkJRVhfVEFCTEUoMGIsM2IpIEVYX1RBQkxFKDJiLDNiKSBFWF9UQUJMRSg0Yiw1YikKKwkJRVhfVEFCTEUoMTBiLDNiKSBFWF9UQUJMRSgxMWIsM2IpIEVYX1RBQkxFKDEyYiw1YikKIAkJOiAiK2EiIChzaXplKSwgIithIiAocHRyKSwgIithIiAoeCksICIrYSIgKHRtcDEpLCAiPWEiICh0bXAyKQogCQk6IDogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBzaXplOwpAQCAtODUsMTIgKzg2LDEyIEBACiAJdG1wMSA9IC0yNTZVTDsKIAlhc20gdm9sYXRpbGUoCiAJCSIwOiBtdmNzICAwKCUwLCUxKSwwKCUyKSwlM1xuIgotCQkiICAganogICAgNWZcbiIKKwkJIjc6IGp6ICAgIDVmXG4iCiAJCSIxOiJBTFIiICAlMCwlM1xuIgogCQkiICAgbGEgICAgJTEsMjU2KCUxKVxuIgogCQkiICAgbGEgICAgJTIsMjU2KCUyKVxuIgogCQkiMjogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKLQkJIiAgIGpueiAgIDFiXG4iCisJCSI4OiBqbnogICAxYlxuIgogCQkiICAgaiAgICAgNWZcbiIKIAkJIjM6IGxhICAgICU0LDI1NSglMSlcbiIgLyogJTQgPSBwdHIgKyAyNTUgKi8KIAkJIiAgIkxISSIgICUzLC00MDk2XG4iCkBAIC05OSwxMSArMTAwLDEyIEBACiAJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwogCQkiICAgam5oICAgNmZcbiIKIAkJIjQ6IG12Y3MgIDAoJTQsJTEpLDAoJTIpLCUzXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiOToiU0xSIiAgJTAsJTRcbiIKIAkJIiAgIGogICAgIDZmXG4iCiAJCSI1OiJTTFIiICAlMCwlMFxuIgogCQkiNjogXG4iCiAJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgyYiwzYikgRVhfVEFCTEUoNGIsNmIpCisJCUVYX1RBQkxFKDdiLDNiKSBFWF9UQUJMRSg4YiwzYikgRVhfVEFCTEUoOWIsNmIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IGM2MGJmYjMuLjI3NTdjNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMjc5LDcgKzI3OSwxMCBAQAogCS8qIGxldHMgY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gcmVwbGFjZSB0aGUgbW0gKi8KIAl0YXNrX2xvY2sodHNrKTsKIAlpZiAoIXRzay0+bW0gfHwgYXRvbWljX3JlYWQoJnRzay0+bW0tPm1tX3VzZXJzKSA+IDEgfHwKLQkgICAgdHNrLT5tbSAhPSB0c2stPmFjdGl2ZV9tbSB8fCAhaGxpc3RfZW1wdHkoJnRzay0+bW0tPmlvY3R4X2xpc3QpKSB7CisjaWZkZWYgQ09ORklHX0FJTworCSAgICAhaGxpc3RfZW1wdHkoJnRzay0+bW0tPmlvY3R4X2xpc3QpIHx8CisjZW5kaWYKKwkgICAgdHNrLT5tbSAhPSB0c2stPmFjdGl2ZV9tbSkgewogCQl0YXNrX3VubG9jayh0c2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yOTUsNyArMjk4LDEwIEBACiAJLyogTm93IGxldHMgY2hlY2sgYWdhaW4gaWYgc29tZXRoaW5nIGhhcHBlbmVkICovCiAJdGFza19sb2NrKHRzayk7CiAJaWYgKCF0c2stPm1tIHx8IGF0b21pY19yZWFkKCZ0c2stPm1tLT5tbV91c2VycykgPiAxIHx8Ci0JICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0gfHwgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSkgeworI2lmZGVmIENPTkZJR19BSU8KKwkgICAgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSB8fAorI2VuZGlmCisJICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0pIHsKIAkJbW1wdXQobW0pOwogCQl0YXNrX3VubG9jayh0c2spOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBiOTQwNDI0Li44OGNkZWI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0zNyw3ICszNyw2IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCi0Jc2VsZWN0IEhBVkVfRlRSQUNFX1NZU0NBTExTCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaWYgTU1VCkBAIC0xMjIsNiArMTIxLDkgQEAKIAlib29sCiAJc2VsZWN0IEFSQ0hfU1VTUEVORF9QT1NTSUJMRQogCitjb25maWcgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUworCWJvb2wKKwogY29uZmlnIFNZU19TVVBQT1JUU19TTVAKIAlib29sCiAKQEAgLTE5Niw2ICsxOTgsNyBAQAogCXNlbGVjdCBDUFVfSEFTX1NSX1JCCiAJc2VsZWN0IENQVV9IQVNfRlBVIGlmICFDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IFNZU19TVVBQT1JUU19UTVUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBNTVUKIAogY29uZmlnIENQVV9TSDRBCiAJYm9vbApAQCAtMjEwLDYgKzIxMyw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfSEFTX0ZQVQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfVE1VCisJc2VsZWN0IFNZU19TVVBQT1JUU19IVUdFVExCRlMgaWYgTU1VCiAKIGNvbmZpZyBDUFVfU0hYMgogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IGZjNTFhOTEuLjY2ZTQwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMTk5LDcgKzE5OSw3IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgXAorQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gXAogCSAgICAgICB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlCiBQSE9OWSArPSBtYWtldG9vbHMgJChCT09UX1RBUkdFVFMpIEZPUkNFCiAKQEAgLTIyNSw2ICsyMjUsNyBAQAogCUBlY2hvICcgIHZtbGludXguc3JlYwkgICAgICAgICAgIC0gQ3JlYXRlIGFuIEVMRiBTLXJlY29yZCcKIAlAZWNobyAnKiB1SW1hZ2UgIAkgICAgICAgICAgIC0gQWxpYXMgdG8gYm9vdGFibGUgVS1Cb290IGltYWdlJwogCUBlY2hvICcgIHVJbWFnZS5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gUy1yZWNvcmQgZm9yIFUtQm9vdCcKKwlAZWNobyAnICB1SW1hZ2UuYmluCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiaW4pJwogCUBlY2hvICcqIHVJbWFnZS5negkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoZ3ppcCknCiAJQGVjaG8gJyAgdUltYWdlLmJ6MgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYnppcDIpJwogCUBlY2hvICcgIHVJbWFnZS5sem1hCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem1hKScKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKaW5kZXggMGEzN2M4Yi4uOTlmZmM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKQEAgLTIwNSw4ICsyMDUsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXByMl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCV9fc2V0X2lvX3BvcnRfYmFzZSgweGEwMDAwMDAwKTsKLQogCS8qIHNldCBQaW4gU2VsZWN0IFJlZ2lzdGVyIEE6CiAJICogL1BDQ19DRDEsIC9QQ0NfQ0QyLCAgUENDX0JWRDEsIFBDQ19CVkQyLAogCSAqIC9JT0lTMTYsICBJUlE0LAlJUlE1LAkgIFVTQjFkX1NVU1BFTkQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCmluZGV4IGViZTk5MjIuLmE0Yjc0MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYwpAQCAtNDIsOCArNDIsNiBAQAogCS8qIEFja25vd2xlZGdlIGFueSBwcmV2aW91cyBldmVudHMgKi8KIAkvKiBYWFggKi8KIAotCV9fc2V0X2lvX3BvcnRfYmFzZSgweGEwMDAwMDAwKTsKLQogCS8qIEFzc2lnbiBhbGwgdmlydHVhbCBJUlFzIHRvIHRoZSBTeXN0ZW0gQVNJQyBpbnQuIGhhbmRsZXIgKi8KIAlmb3IgKGkgPSBIV19FVkVOVF9JUlFfQkFTRTsgaSA8IEhXX0VWRU5UX0lSUV9NQVg7IGkrKykKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZzeXN0ZW1hc2ljX2ludCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwppbmRleCA5NmJjMTY5Li4zYjFjZWI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHNjMjAwNy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CkBAIC0zOCw2ICszOSwyMCBAQAogICogIDB4MTgwMF8wMDAwICBNRkkgICAgICAgICAgICAgIDE2Yml0CiAgKi8KIAorLyogU1dJVENICisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRFMyWzFdID0gRmxhc2hST00gd3JpdGUgcHJvdGVjdCAgT04gICAgIDogd3JpdGUgcHJvdGVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGICAgIDogTm8gd3JpdGUgcHJvdGVjdAorICogRFMyWzJdID0gUk1JSSAvIFRTLCBTQ0lGICAgICAgICAgT04gICAgIDogUk1JSQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGICAgIDogVFMsIFNDSUYzCisgKiBEUzJbM10gPSBDYW1lcmEgLyBWaWRlbyAgICAgICAgICBPTiAgICAgOiBDYW1lcmEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IE5UU0MvUEFMIChJTikKKyAqIERTMls1XSA9IE5UU0NfT1VUIENsb2NrICAgICAgICAgIE9OICAgICA6IE9uIGJvYXJkIE9TQworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGICAgIDogU0g3NzI0IERWX0NMSworICogRFMyWzYtN10gPSBNTUMgLyBTRCAgICAgICAgICAgICAgT04tT0ZGIDogU0QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRi1PTiA6IE1NQworICovCisKIC8qIEhlYXJ0YmVhdCAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgbGVkX3Bvc1tdID0geyAwLCAxLCAyLCAzIH07CiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewpAQCAtNzAsNyArODUsNyBAQAogCQkubmFtZSA9ICJib290IGxvYWRlciIsCiAJCS5vZmZzZXQgPSAwLAogCQkuc2l6ZSA9ICg1ICogMTAyNCAqIDEwMjQpLAotCQkubWFza19mbGFncyA9IE1URF9DQVBfUk9NLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KIAl9LCB7CiAJCS5uYW1lID0gImZyZWUtYXJlYSIsCiAJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCkBAIC0xMjEsNiArMTM2LDcgQEAKIHN0cnVjdCBzaF9ldGhfcGxhdF9kYXRhIHNoX2V0aF9wbGF0ID0gewogCS5waHkgPSAweDFmLCAvKiBTTVNDIExBTjg3MDAgKi8KIAkuZWRtYWNfZW5kaWFuID0gRURNQUNfTElUVExFX0VORElBTiwKKwkuZXRoZXJfbGlua19hY3RpdmVfbG93ID0gMQogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hfZXRoX2RldmljZSA9IHsKQEAgLTM3NSw2ICszOTEsNDMgQEAKIAl9LAogfTsKIAorLyogVG91Y2hTY3JlZW4gKi8KKyNkZWZpbmUgSVJRMCAzMgorc3RhdGljIGludCB0c19nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCWludCB2YWwgPSAwOworCWdwaW9fZnJlZShHUElPX0ZOX0lOVENfSVJRMCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRaMCwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVFowKTsKKworCXZhbCA9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRaMCk7CisKKwlncGlvX2ZyZWUoR1BJT19QVFowKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTAsIE5VTEwpOworCisJcmV0dXJuIHZhbCA/IDAgOiAxOworfQorCitzdGF0aWMgaW50IHRzX2luaXQodm9pZCkKK3sKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTAsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdHNjMjAwN19wbGF0Zm9ybV9kYXRhIHRzYzIwMDdfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDIwMDcsCisJLnhfcGxhdGVfb2htcwkJPSAxODAsCisJLmdldF9wZW5kb3duX3N0YXRlCT0gdHNfZ2V0X3BlbmRvd25fc3RhdGUsCisJLmluaXRfcGxhdGZvcm1faHcJPSB0c19pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB0c19pMmNfY2xpZW50cyA9IHsKKwlJMkNfQk9BUkRfSU5GTygidHNjMjAwNyIsIDB4NDgpLAorCS50eXBlCQk9ICJ0c2MyMDA3IiwKKwkucGxhdGZvcm1fZGF0YQk9ICZ0c2MyMDA3X2luZm8sCisJLmlycQkJPSBJUlEwLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVjb3ZlY19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmaGVhcnRiZWF0X2RldmljZSwKIAkmbm9yX2ZsYXNoX2RldmljZSwKQEAgLTQ1OSw2ICs1MTIsMTEgQEAKICNkZWZpbmUgSU9EUklWRUEgIDB4QTQwNTAxOEEKIHN0YXRpYyBpbnQgX19pbml0IGFyY2hfc2V0dXAodm9pZCkKIHsKKwkvKiBlbmFibGUgU1RBVFVTMCwgU1RBVFVTMiBhbmQgUERTVEFUVVMgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TVEFUVVMwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TVEFUVVMyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QRFNUQVRVUywgTlVMTCk7CisKIAkvKiBlbmFibGUgU0NJRkEwICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRjBfVFhELCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TQ0lGMF9SWEQsIE5VTEwpOwpAQCAtNTg5LDYgKzY0NywxMCBAQAogCQkgKi8KIAkJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRGNCwgTlVMTCk7CiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURjQsIDEpOworCisJCS8qIGVuYWJsZSBUb3VjaFNjcmVlbiAqLworCQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmdHNfaTJjX2NsaWVudHMsIDEpOworCQlzZXRfaXJxX3R5cGUoSVJRMCwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKIAl9CiAKIAkvKiBlbmFibGUgQ0VVMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCmluZGV4IDI1Y2RmNzMuLjUyODAxMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMzUsNyArMzQsNyBAQAogCWludCBtaW5vcjsKIAlpbnQgcmV0ID0gLUVOT0VOVDsKIAotCWxvY2tfa2VybmVsKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKIAlpZiAobWlub3IgPCBERVZDT1VOVCkgewogCQlpZiAob3BlbkNudCA+IDApIHsKQEAgLTQ1LDcgKzQ0LDcgQEAKIAkJCXJldCA9IDA7CiAJCX0KIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCXByZWVtcHRfZW5hYmxlKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjAsOCArNTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBnaW9faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuc2lnbmVkIGludCBkYXRhOwogCXN0YXRpYyB1bnNpZ25lZCBpbnQgYWRkciA9IDA7CkBAIC0xMjksNyArMTI3LDcgQEAKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGdpb19vcGVuLAkvKiBvcGVuICovCiAJLnJlbGVhc2UgPSBnaW9fY2xvc2UsCS8qIHJlbGVhc2UgKi8KLQkuaW9jdGwgPSBnaW9faW9jdGwsCS8qIGlvY3RsICovCisJLnVubG9ja2VkX2lvY3RsID0gZ2lvX2lvY3RsLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZ2lvX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKaW5kZXggNGFmM2E3Ny4uYzM3NjE3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKQEAgLTExLDEwICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYwppbmRleCBhZjY0ZDAzLi5hNWMwZGY3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMKQEAgLTE1LDE0ICsxNSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaWZkZWYgQ09ORklHX01URAogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnNlZF9wYXJ0aXRpb25zOwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcnNrX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lCQk9ICJCb290bG9hZGVyIiwKQEAgLTQxLDYgKzM5LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGZsYXNoX2RhdGEgPSB7CisJLnBhcnRzCQk9IHJza19wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocnNrX3BhcnRpdGlvbnMpLAogCS53aWR0aAkJPSAyLAogfTsKIApAQCAtNjAsNyArNjAsOCBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaF9tdGQ7CisjaWZkZWYgQ09ORklHX01URAorc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gcnNrX2ZsYXNoX21hcCA9IHsKIAkubmFtZQkJPSAiUlNLKyBGbGFzaCIsCkBAIC02OCw2ICs2OSwxMCBAQAogCS5iYW5rd2lkdGgJPSAyLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2hfbXRkOworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnNlZF9wYXJ0aXRpb25zOworCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X210ZF9wYXJ0aXRpb25zKHZvaWQpCiB7CiAJaW50IG5yX3BhcnRzID0gMDsKQEAgLTc3LDE0ICs4MiwxNCBAQAogCW5yX3BhcnRzID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoZmxhc2hfbXRkLCBwcm9iZXMsCiAJCQkJCSZwYXJzZWRfcGFydGl0aW9ucywgMCk7CiAJLyogSWYgdGhlcmUgaXMgbm8gcGFydGl0aW9uIHRhYmxlLCB1c2VkIHRoZSBoYXJkIGNvZGVkIHRhYmxlICovCi0JaWYgKG5yX3BhcnRzIDw9IDApIHsKLQkJZmxhc2hfZGF0YS5wYXJ0cyA9IHJza19wYXJ0aXRpb25zOwotCQlmbGFzaF9kYXRhLm5yX3BhcnRzID0gQVJSQVlfU0laRShyc2tfcGFydGl0aW9ucyk7Ci0JfSBlbHNlIHsKKwlpZiAobnJfcGFydHMgPiAwKSB7CiAJCWZsYXNoX2RhdGEubnJfcGFydHMgPSBucl9wYXJ0czsKIAkJZmxhc2hfZGF0YS5wYXJ0cyA9IHBhcnNlZF9wYXJ0aXRpb25zOwogCX0KIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X210ZF9wYXJ0aXRpb25zKHZvaWQpIHt9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJza19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmZmxhc2hfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYwppbmRleCAwMDk3M2UwLi5lNzhjM2JlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9yOGE2NjU5Ny5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgorI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KICNpbmNsdWRlIDxhc20vc2hfZXRoLmg+CkBAIC0yNTUsNiArMjU2LDY1IEBACiAJfSwKIH07CiAKKy8qIEZTSSAqLworLyoKKyAqIEZTSS1BIHVzZSBleHRlcm5hbCBjbG9jayB3aGljaCBjYW1lIGZyb20gYWs0NjR4LgorICogU28sIHdlIHNob3VsZCBjaGFuZ2UgcGFyZW50IG9mIGZzaQorICovCisjZGVmaW5lIEZDTEtBQ1IJCTB4YTQxNTAwMDgKK3N0YXRpYyB2b2lkIGZzaW1ja19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgc3RhdHVzID0gY3RybF9pbmwoY2xrLT5lbmFibGVfcmVnKTsKKworCS8qIHVzZSBleHRlcm5hbCBjbG9jayAqLworCXN0YXR1cyAmPSB+MHgwMDAwMDBmZjsKKwlzdGF0dXMgfD0gMHgwMDAwMDA4MDsKKwljdHJsX291dGwoc3RhdHVzLCBjbGstPmVuYWJsZV9yZWcpOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgZnNpbWNrX2Nsa19vcHMgPSB7CisJLmluaXQgPSBmc2ltY2tfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZzaW1ja2FfY2xrID0geworCS5uYW1lCQk9ICJmc2ltY2thX2NsayIsCisJLmlkCQk9IC0xLAorCS5vcHMJCT0gJmZzaW1ja19jbGtfb3BzLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUZDTEtBQ1IsCisJLnJhdGUJCT0gMCwgLyogdW5rbm93biAqLworfTsKKworc3RydWN0IHNoX2ZzaV9wbGF0Zm9ybV9pbmZvIGZzaV9pbmZvID0geworCS5wb3J0YV9mbGFncyA9IFNIX0ZTSV9CUlNfSU5WIHwKKwkJICAgICAgIFNIX0ZTSV9PVVRfU0xBVkVfTU9ERSB8CisJCSAgICAgICBTSF9GU0lfSU5fU0xBVkVfTU9ERSB8CisJCSAgICAgICBTSF9GU0lfT0ZNVChQQ00pIHwKKwkJICAgICAgIFNIX0ZTSV9JRk1UKFBDTSksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZzaV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkZTSSIsCisJCS5zdGFydAk9IDB4RkUzQzAwMDAsCisJCS5lbmQJPSAweEZFM0MwMjFkLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IDEwOCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmc2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9mc2kiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShmc2lfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBmc2lfcmVzb3VyY2VzLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmZzaV9pbmZvLAorCX0sCit9OworCiAvKiBLRVlTQyBpbiBTb0MgKE5lZWRzIFNXMzMtMiBzZXQgdG8gT04pICovCiBzdGF0aWMgc3RydWN0IHNoX2tleXNjX2luZm8ga2V5c2NfaW5mbyA9IHsKIAkubW9kZSA9IFNIX0tFWVNDX01PREVfMSwKQEAgLTM5OSw2ICs0NTksNyBAQAogCSZzaF9ldGhfZGV2aWNlLAogCSZzaDc3MjRfdXNiMF9ob3N0X2RldmljZSwKIAkmc2g3NzI0X3VzYjFfZ2FkZ2V0X2RldmljZSwKKwkmZnNpX2RldmljZSwKIH07CiAKICNkZWZpbmUgRUVQUk9NX09QICAgMHhCQTIwNjAwMApAQCAtNDY2LDExICs1MjcsMTMgQEAKIHN0YXRpYyBpbnQgX19pbml0IGRldmljZXNfc2V0dXAodm9pZCkKIHsKIAl1MTYgc3cgPSBjdHJsX2ludyhTVzQxNDApOyAvKiBzZWxlY3QgY2FtZXJhLCBtb25pdG9yICovCisJc3RydWN0IGNsayAqZnNpYV9jbGs7CiAKIAkvKiBSZXNldCBSZWxlYXNlICovCiAJY3RybF9vdXR3KGN0cmxfaW53KEZQR0FfT1VUKSAmCiAJCSAgfigoMSA8PCAxKSAgfCAvKiBMQU4gKi8KIAkJICAgICgxIDw8IDYpICB8IC8qIFZJREVPIERBQyAqLworCQkgICAgKDEgPDwgNykgIHwgLyogQUs0NjQzICovCiAJCSAgICAoMSA8PCAxMikgfCAvKiBVU0IwICovCiAJCSAgICAoMSA8PCAxNCkpLCAvKiBSTUlJICovCiAJCSAgRlBHQV9PVVQpOwpAQCAtNjA5LDYgKzY3MiwzMiBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDEsICAgICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQwLCAgICAgTlVMTCk7CiAKKwkvKiBlbmFibGUgRlNJICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJTUNLQiwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJTUNLQSwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0FTRCwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUFCQ0ssICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUFMUkNLLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0FCQ0ssICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0FMUkNLLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ0xLQVVESU9BTywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUJTRCwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0JTRCwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUJCQ0ssICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUJMUkNLLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0JCQ0ssICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0JMUkNLLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ0xLQVVESU9CTywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUFTRCwgICAgTlVMTCk7CisKKwkvKiBjaGFuZ2UgcGFyZW50IG9mIEZTSSBBICovCisJZnNpYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJmc2lhX2NsayIpOworCWNsa19yZWdpc3RlcigmZnNpbWNrYV9jbGspOworCWNsa19zZXRfcGFyZW50KGZzaWFfY2xrLCAmZnNpbWNrYV9jbGspOworCWNsa19zZXRfcmF0ZShmc2lhX2NsaywgMTEwMDApOworCWNsa19zZXRfcmF0ZSgmZnNpbWNrYV9jbGssIDExMDAwKTsKKwljbGtfcHV0KGZzaWFfY2xrKTsKKwogCS8qCiAJICogZW5hYmxlIFNILUV0aAogCSAqCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggYTEzMTY4Ny4uY2I4Y2Y1NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMjAsMTEgKzIwLDEyIEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVAk/PSAweDAwMDAxMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIAorc3VmZml4LXkgOj0gYmluCiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApICA6PSBnegogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikgOj0gYnoyCiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpICA6PSBsem1hCiAKLXRhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZSB1SW1hZ2UgdUltYWdlLnNyZWMgdUltYWdlLmd6IHVJbWFnZS5iejIgdUltYWdlLmx6bWEKK3RhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZSB1SW1hZ2UgdUltYWdlLnNyZWMgdUltYWdlLmd6IHVJbWFnZS5iejIgdUltYWdlLmx6bWEgdUltYWdlLmJpbgogZXh0cmEteSArPSB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYQogc3ViZGlyLSA6PSBjb21wcmVzc2VkIHJvbWltYWdlCiAKQEAgLTg4LDYgKzg5LDkgQEAKICQob2JqKS91SW1hZ2UubHptYTogJChvYmopL3ZtbGludXguYmluLmx6bWEKIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UsbHptYSkKIAorJChvYmopL3VJbWFnZS5iaW46ICQob2JqKS92bWxpbnV4LmJpbgorCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxub25lKQorCiBPQkpDT1BZRkxBR1Nfdm1saW51eC5zcmVjIDo9IC1JIGJpbmFyeSAtTyBzcmVjCiAkKG9iaikvdm1saW51eC5zcmVjOiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4CiAJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCmluZGV4IDZjMzhhNDMuLjJmNzhkMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDE2OjA0OjExIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjIyOjUwIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTEsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04OCwxOCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEwNyw2ICsxMTgsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE5LDcgKzEzNCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMzUsNyArMTUwLDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE2OSw2ICsxODQsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE1LDYgKzIzMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5Niw3ICszMTMsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkxIGNvbnNvbGU9dHR5U0M1LDM4NDAwIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCIKIAogIwpAQCAtMzE2LDcgKzMzNCwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzY0LDYgKzM4OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzkzLDYgKzQxOCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMCw3ICs0MjYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTMsNiArNDM4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDIyLDkgKzQ0OCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDgwLDYgKzUwNiw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTgzLDcgKzYxMCw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MzcsMTIgKzY2MywxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MjYsNiArNzUwLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTczNiw2ICs3NjEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQpAQCAtNzU3LDkgKzc4Myw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzgwLDYgKzgwMywxMSBAQAogIwogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CkBAIC04MDQsMTEgKzgzMiwxNSBAQAogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI4LDggKzg2MCwxMiBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogQ09ORklHX01FRElBX1NVUFBPUlQ9eQogCkBAIC05NTcsNiArOTkzLDggQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9eQogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtOTkyLDYgKzEwMzAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEwMDMsNiArMTA0Miw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMDU2LDggKzEwOTYsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTIyLDcgKzExNjQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjAyLDYgKzEyNDMsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjEyLDggKzEyNTQsMTEgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEyMjEsNiArMTI2Niw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEyMzQsNyArMTI4MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTI3NSwxMSArMTMyMCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMzQxLDUgKzEzODgsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCmluZGV4IDk1NzE3YTAuLmFlZGJkNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MjQ6NDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTY6MDcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI5LDcgKzMwLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00MCw2ICs0MywxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODYsMTkgKzk2LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTA4LDYgKzExOSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjAsNyArMTM1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Nyw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTgsNiArMjM0LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzIyLDcgKzMzOSw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCBwYW5pYz0zIgogCiAjCkBAIC0zOTUsNiArNDEzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MjQsNiArNDQzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDMxLDcgKzQ1MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ0NCw2ICs0NjMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDk2LDcgKzUxNiwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTU2MSwxMCArNTg1LDcgQEAKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MDUsMTMgKzYyNiwxNCBAQAogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX01BUExFPXkKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTY3NSwxMSArNjk3LDE1IEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzE2LDYgKzc0Miw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtODA3LDcgKzgzNCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC04NjEsOCArODg3LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTkyMiw3ICs5NTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTk0OSw2ICs5NzYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTU4LDggKzk4NiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk2Nyw2ICs5OTgsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC05ODAsNyArMTAxMiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMDEyLDExICsxMDQzLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwNzksNSArMTExMiw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnCmluZGV4IDlhMjJjNjQuLjA3NzQ5MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzcKLSMgVHVlIFNlcCAgOCAxMzo1NjoxOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxNzo1Njo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC01OSwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTc5LDE1ICs4MCw5IEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRD0wCi1DT05GSUdfSU5JVFJBTUZTX1JPT1RfR0lEPTAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FPXkKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9HWklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtMTA3LDIwICsxMDIsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMjM3LDYgKzIzMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxOSw3ICszMTQsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIgogCiAjCkBAIC0zODIsNiArMzc4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MjIsNiArNDE5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTMwLDEwICs1MjgsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MjUsNiArNjIwLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjU3LDkgKzY1Myw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNjkzLDExICs2ODYsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MTcsNiArNzEzLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtNzcxLDYgKzc2OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtODc1LDYgKzg3Myw3IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05NzUsNiArOTc0LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk4OSw3ICs5ODksNyBAQAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX0hBVkVfRlRSQUNFX1NZU0NBTExTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZwppbmRleCAyMDUwYTc2Li5hYzY0Njk3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM3Ci0jIFdlZCBBdWcgMjYgMDk6MDk6MDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NDU6MzkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNjAsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05NywyMCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMjMyLDYgKzIzMiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNCw3ICszMTUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwLCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIG1lbT0xMjBNIG1lbWNodW5rLnZwdT00bSIKIAogIwpAQCAtMzg4LDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQyNCw3ICs0MjgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzcsNiArNDQwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDQ2LDkgKzQ1MCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTA0LDYgKzUwOCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjY2LDEwICs2NzEsNyBAQAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MTMsMTEgKzcxNSwxNSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDPXkKQEAgLTc3MSw2ICs3NzcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODA0LDkgKzgxMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODU2LDExICs4NjAsMTUgQEAKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4MCw4ICs4ODgsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTkzNiw4ICs5NDYsMTAgQEAKIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVPXkKICMgQ09ORklHX1Y0TF9VU0JfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUkFESU9fQURBUFRFUlM9eQorIyBDT05GSUdfSTJDX1NJNDcxMyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MTMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01SODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90IHNldAogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKQEAgLTEwMDMsNyArMTAxNSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAyNiw2ICsxMDM3LDcgQEAKICMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMDcwLDYgKzEwODIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTExNjEsNiArMTE3NCw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTEyMDgsNiArMTIyMyw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjY1LDYgKzEyODEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTMyOSw3ICsxMzQ2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQwOSw2ICsxNDI1LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MjMsNyArMTQ0MCw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE0NDYsNyArMTQ2Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ4NywxMSArMTUwMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCmluZGV4IDQ5NzQxNGMuLjg2YzliYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MjU6MzUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTc6MTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI2LDcgKzI3LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNiwxNyArMzksMjQgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CkBAIC03MCwxOCArODAsMTkgQEAKICMgQ09ORklHX0VWRU5URkQgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtODksNiArMTAwLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX0JBU0VfU01BTEw9MQpAQCAtMTI1LDYgKzE0MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTE2NSw3ICsxODEsNiBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTE3Myw2ICsxODgsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNTAsNyArMjY2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzIxLDExICszMzgsMTQgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00MDksNiArNDI5LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTQxNiw4ICs0MzcsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC00MjUsNiArNDQ5LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNDQ5LDQgKzQ3NCw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCmluZGV4IDc3Njg0ZWQuLjRjMGY4MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MjU6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTc6MzAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iX2Vkb3NrNzc2MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTEsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CkBAIC05MSwxOSArMTAxLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTIsNiArMTIzLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNCw3ICsxMzksNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcxLDYgKzE4Niw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNiw2ICsyMzIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDQsNyArMzIxLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDIwMDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVNDMiwxMTUyMDAgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMC4zOi9zY3JpcHRzL2ZpbGVzeXMgaXA9MTkyLjE2OC4wLjQiCiAKICMKQEAgLTM2Nyw2ICszODUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MTUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDIzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE2LDYgKzQzNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI2LDkgKzQ0Niw5IEBACiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfREVCVUc9eQogQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU2MywxMCArNTgzLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjQ5LDYgKzY2Niw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NTksNiArNjc3LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0g3NzYwPXkKICMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldApAQCAtNjgwLDIwICs2OTksMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKIENPTkZJR19JMkNfREVCVUdfQlVTPXkKIENPTkZJR19JMkNfREVCVUdfQ0hJUD15CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzEyLDggKzczMiwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTgzNyw4ICs4NTksMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05MDAsNyArOTI0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC05NzQsNiArOTk3LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDEwLDE4ICsxMDM0LDIzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldApAQCAtMTAyOSw2ICsxMDU4LDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CkBAIC0xMDQ1LDExICsxMDc1LDExIEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjQsNyArMTA5NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CkBAIC0xMTAwLDExICsxMTI5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMTY4LDUgKzExOTksNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKaW5kZXggODgxMTI4ZS4uOWI3ODU1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI3OjIxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU4OjE4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MiwxOSArMTAyLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjUsNyArMTQyLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Myw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE0LDcgKzIzMiw2IEBACiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIyMiw2ICsyMzksNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDMsNyArMzIxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgogCiAjCkBAIC0zNzEsNiArMzkwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDIxLDkgKzQ0Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00NzcsNiArNDk4LDcgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01NTQsNyArNTc2LDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYxMCwxMCArNjMxLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzA1LDExICs3MjMsMTUgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MTksNiArODQxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTg4OCw2ICs5MTEsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTMwLDggKzk1NCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTk5Nyw3ICsxMDIzLDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA3MSw2ICsxMDk2LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwODIsMTEgKzExMDgsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTEwOTYsNiArMTEyNiw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExMDksNyArMTE0MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTQxLDExICsxMTcxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyMDgsNSArMTI0MCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCmluZGV4IDMyNDlkNDYuLmY1OWJlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI4OjEyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU5OjQ1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKQEAgLTQ2LDExICs1NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODEsMTggKzkxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDAsNiArMTExLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEwNyw3ICsxMjIsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE1NCw2ICsxNjksNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0xOTksNiArMjE1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg4LDcgKzMwNSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTMyMiw2ICszNDAsNyBAQAogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiAjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQVBNX0VNVUxBVElPTj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVCBpcyBub3Qgc2V0CiAKQEAgLTM5MCw3ICs0MDksNiBAQAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtMzk5LDYgKzQxNyw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTQyOCwxMyArNDQ3LDE0IEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfSFA2WFg9eQorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTQ1Miw2ICs0NzIsNyBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTUwNywxMSArNTI4LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjYzLDcgKzY4OCw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03MjUsNyArNzUyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC03ODIsNiArODA4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTc5MSw4ICs4MTgsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC04MDAsNiArODMwLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODEzLDcgKzg0NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtODU0LDExICs4ODQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTkyMCw0ICs5NTIsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnCmluZGV4IGMwZjkyNjMuLjAyNTkwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOS1yb21pbWFnZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFRodSBBdWcgMjAgMTU6MDk6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MDE6NDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNTgsMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC03OCwxNSArNzksOSBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQ9MAotQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRD0wCiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUD15Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTUEgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTEwNiwyMCArMTAxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE3Myw2ICsxNjcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyND15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE5LDYgKzIxNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMSw3ICsyOTcsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHF1aWV0IgogCiAjCkBAIC0zMjQsNiArMzIxLDcgQEAKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNjIsNiArMzYwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDIsNiArNDAxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDg5LDYgKzQ4OSw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTUyMCw5ICs1MjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTU1NiwxMSArNTU0LDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNTgwLDYgKzU4MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTcxOCw2ICs3MjAsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNzMyLDcgKzczNSw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZwppbmRleCBjZWY2MTMxLi44YWU2NWQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDlfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgotIyBUaHUgQXVnIDIwIDIxOjU4OjUyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjU0OjIyIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTYwLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTAyLDIwICsxMDMsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTkwLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzYsNiArMjM3LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE5LDcgKzMyMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzEsMTE1MjAwIgogCiAjCkBAIC0zNDMsNiArMzQ2LDcgQEAKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15CkBAIC0zODMsNiArMzg3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MjMsNiArNDI4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMyLDkgKzQzOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTAwLDcgKzUwNiwxMiBAQAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORD15CisjIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUM9eQorIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKIAogIwogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwpAQCAtNTY0LDExICs1NzUsMTUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CkBAIC02MjEsNiArNjM2LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjUzLDkgKzY2OSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNjg5LDExICs3MDIsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MTMsNiArNzI5LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtODU2LDYgKzg3Myw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtOTQxLDYgKzk2MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDAyLDYgKzEwMjIsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAxNiw3ICsxMDM3LDcgQEAKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCmluZGV4IGJhMDU3MzkuLmMyYTlhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyODo0NSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODowNTo0OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MywxOSArOTMsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNCw2ICsxMTUsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE2LDcgKzEzMSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjMsNiArMTc4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjA4LDYgKzIyNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NSw3ICszMTIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTQxMSw2ICs0MjksNyBAQAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0Miw2ICs0NjEsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDksNyArNDY5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDYyLDYgKzQ4MSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTYzMSw2ICs2NTEsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKQEAgLTY1Myw3ICs2NzQsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC03MjksNiArNzU0LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC03NTQsMTAgKzc4MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg2OCwxMCArODkxLDIwIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtODg2LDkgKzkxOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MTAsNiArOTQxLDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTkyOCwxMSArOTYwLDExIEBACiBDT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19TT1VORD1tCiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2MSw2ICs5OTMsNyBAQAogQ09ORklHX0hJRF9FWktFWT1tCiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049bQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD1tCiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDExLDYgKzEwNDQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTE3Nyw4ICsxMjExLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjUxLDcgKzEyODcsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQpAQCAtMTMzMSw2ICsxMzY2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNDAsOCArMTM3NiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEzNTAsNiArMTM4OSw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMzYzLDcgKzE0MDMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTM5NSwxMSArMTQzNCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNDYyLDUgKzE1MDMsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKaW5kZXggYzBiYzJmZC4uZWMwYzBiNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI5OjUwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjA5OjU5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDksMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgzLDE5ICs5MywyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTYsNyArMTMxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Myw2ICsxNzgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDgsNiArMjI0LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk1LDcgKzMxMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCByb290PS9kZXYvc2RhMSIKIAogIwpAQCAtNDExLDYgKzQyOSw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQwLDYgKzQ1OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0Nyw3ICs0NjcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjAsNiArNDc5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTcyLDEyICs1OTIsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01OTksNiArNjIxLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MjcsNiArNjUwLDcgQEAKICMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NDUsNyArNjY5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzI1LDYgKzc1Myw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzUwLDEwICs3NzksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NjMsMTAgKzg4OSwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTg4MSw5ICs5MTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTA1LDYgKzkzOSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MjMsNyArOTU4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwMjEsOCArMTA1NSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTA4OSw3ICsxMTI1LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtMTE1NSw2ICsxMTkwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNjQsOCArMTIwMCwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTExNzQsNiArMTIxMyw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTg3LDcgKzEyMjcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTIxOSwxMSArMTI1OCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMjg2LDUgKzEzMjcsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCmluZGV4IGM1ODU5ZTguLjc5MDkxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzA6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MTA6NDkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtOTEsMTggKzEwMSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTExLDYgKzEyMiwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjMsNyArMTM4LDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcwLDYgKzE4NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDYsNyArMzIzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzY4LDYgKzM4Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQxNiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MjQsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDM2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyOCw5ICs0NDgsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTU4OSwxMCArNjA5LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjMxLDEzICs2NDgsMTUgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzIwLDExIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtNzIxLDExICs3NDUsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MjksOCArODU2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTkwMCw3ICs5MjksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC05NzYsNiArMTAwNCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAwNiwyNCArMTAzNSwzMCBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTAzNiwxNiArMTA3MSwxNSBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGE0NDMwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA3Nyw1ICsxMTExLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKaW5kZXggZTVhMjFlMS4uNmJiNTk3NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzE6NTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MTQ6MzUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NywxOCArOTcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEwNiw2ICsxMTcsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTEzLDcgKzEyOCw3IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYwLDYgKzE3NSw3IEBACiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMj15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTEsNiArMjI3LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvaGRhMSIKIAogIwpAQCAtMzY0LDYgKzM4Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzkzLDYgKzQxMiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMCw3ICs0MjAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTMsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00OTksMTAgKzUxOSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTYxLDEwICs1NzgsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTU3NSw5ICs2MDIsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjYyLDggKzY4NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzI2LDEyICs3NTMsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC04MDMsNiArODMwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgxMiw4ICs4NDAsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC04MjEsNiArODUyLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODM0LDcgKzg2Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtODc1LDExICs5MDYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk0Myw1ICs5NzYsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZwppbmRleCBiMThjZmQzLi42NTAxODI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxNjowNjo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODoxNzo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI5LDcgKzMwLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg5LDE5ICs5OSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExMSw2ICsxMjMsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIyLDcgKzEzOSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMzgsNyArMTU1LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTczLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIyNCw2ICsyNDIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDgsNyArMzI3LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgZWFybHlwcmludGs9c2VyaWFsIGlwPW9uIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCIKIAogIwpAQCAtMzI4LDcgKzM0OCwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzc2LDYgKzQwMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDA2LDYgKzQzMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQxNCw3ICs0NDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjcsNiArNDU0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDM2LDkgKzQ2NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg1LDcgKzYxMyw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MjEsMTAgKzY0OCw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY1OSwxNCArNjgzLDE5IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNzE1LDYgKzc0NCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTcyNSw2ICs3NTUsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQpAQCAtNzQ2LDE1ICs3NzcsMTcgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CkBAIC03NzcsMTEgKzgxMCwxNCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgwMSw4ICs4MzcsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtOTIyLDcgKzk2MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC05NTIsMTMgKzk4OSwxMyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKIENPTkZJR19VU0JfTTY2NTkyPXkKLUNPTkZJR19TVVBFUkhfQlVJTFRfSU5fTTY2NTkyPXkKICMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldApAQCAtMTAxNyw2ICsxMDU0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDY0LDggKzExMDIsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtMTEyNiw3ICsxMTY2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMTYxLDYgKzEyMDAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNzIsMTEgKzEyMTIsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTExODgsNiArMTIzMiw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTAwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjAxLDcgKzEyNDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CkBAIC0xMjQwLDExICsxMjg0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEzMDgsNSArMTM1NCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwppbmRleCA2N2VkZDNmLi43ZmMxOTUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzM6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MjA6NTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05MSwxOCArMTAxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTEsNiArMTIyLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMyw3ICsxMzgsNyBAQAogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MCw2ICsxODUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTUsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAyLDcgKzMxOSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyIG1lbT02M00gbXRkcGFydHM9cGh5c21hcC1mbGFzaC4wOjB4MDAxMDAwMDAoYm9vdGxvYWRlcilybywweDAwNTAwMDAwKEtlcm5lbClybywweDAwQTAwMDAwKEZpbGVzeXN0ZW0pIgogCiAjCkBAIC0zNjMsNiArMzgxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDMsNiArNDIyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDE0LDkgKzQzNCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NzcsMTAgKzU5Nyw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY2NiwxMSArNjgzLDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzcwLDggKzc5MSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04NDEsNyArODY0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODc3LDYgKzg5OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05MTYsMTggKzkzOSwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0c9eQogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldApAQCAtOTM1LDYgKzk2Myw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtOTQ3LDE2ICs5NzYsMTUgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHgwMDAwMDAwMAorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4YTQwMDAxNTAKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC05ODcsNSArMTAxNSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwppbmRleCAxMDdhOGUzLi45MDNiMDIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzQ6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MjQ6MzEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDggKzI5LDEwIEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MiwyMCArMTAyLDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE1LDYgKzEyNywxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjYsNyArMTQzLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3NCw2ICsxOTEsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQpAQCAtMjI5LDYgKzI0Nyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNSw3ICszMzQsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCkBAIC0zOTYsNiArNDE2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtNDI4LDYgKzQ0OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQzNiw3ICs0NTgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NDksNiArNDcwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDYwLDkgKzQ4Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUxMyw2ICs1MzUsNyBAQAogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTY1MSwxMSArNjc0LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjc3LDYgKzcwMiw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzA0LDYgKzczMCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcyMiw3ICs3NDksMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC04MDQsNiArODM1LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC04MjksMTAgKzg2MSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg3MywxMyArOTAyLDE3IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC05MzMsNiArOTY2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NjEsNiArOTk1LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hJR0hMQU5ERVI9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKQEAgLTk4NywxOSArMTAyMiwyNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA0OSw2ICsxMDkxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA2MCw3ICsxMTAzLDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTEwODEsMTQgKzExMjMsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTAxLDExICsxMTQ2LDExIEBACiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTY5LDYgKzEyMTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMjEsOCArMTI2NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyODksMTIgKzEzMzcsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CkBAIC0xMzcwLDYgKzE0MTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDA0LDIxICsxNDUzLDI3IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE0MjcsNiArMTQ4Miw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ0NSwxMSArMTUwMSwxMSBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NjQsNyArMTUyMCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTUwNiwxMSArMTU2MSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE1NzMsNSArMTYzMCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwppbmRleCA4YTNkYzMwLi4yN2ZmNDZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6Mzc6MjAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6Mjk6MjMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw4ICszMCwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQxLDYgKzQ0LDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU2LDEyICs2NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogQ09ORklHX1JDVV9UUkFDRT15Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVX1RSQUNFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMjAgKzEwMiwyMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CkBAIC0xMTcsNiArMTI4LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyOSw3ICsxNDUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTc4LDYgKzE5NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIzMSw3ICsyNDgsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMzksNiArMjU1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzM4LDcgKzM1NSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKQEAgLTQxOSw2ICs0MzcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCkBAIC00NTIsNiArNDcxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDYwLDcgKzQ4MCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ3Myw2ICs0OTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC01OTEsMTEgKzYxMSwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxNyw2ICs2MzksNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY0NCw2ICs2NjcsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NjIsNyArNjg2LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzIxLDYgKzc0OSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzQ2LDEwICs3NzUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03OTAsMTQgKzgxNiwxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTg1MSw2ICs4ODIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg3OSw2ICs5MTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSElHSExBTkRFUj15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKQEAgLTkwNiwxNSArOTM5LDE3IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtOTM1LDE0ICs5NzAsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTkzLDYgKzEwMzgsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDA0LDkgKzEwNTAsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAyNiwxNCArMTA3MCwxNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwOTksMTEgKzExNDYsMTEgQEAKICMgQ09ORklHX0xPR08gaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTY3LDYgKzEyMTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMTksOCArMTI2NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyODYsMTIgKzEzMzYsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CkBAIC0xMzY3LDYgKzE0MTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDAxLDIyICsxNDUyLDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE0MjUsNiArMTQ4Myw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ0MiwxMSArMTUwMSwxMSBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHXzRLU1RBQ0tTPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xNDYxLDcgKzE1MjAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1MDMsMTEgKzE1NjEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTcxLDUgKzE2MzEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKaW5kZXggNTVjMzY1Ni4uYzQwZGIxMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjM5OjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM0OjI5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CkBAIC00NSwxMSArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODYsMTkgKzk2LDIxIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEwNyw2ICsxMTksMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMTcsNyArMTM0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yODUsNyArMzAzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1zZXJpYWwgaWdub3JlX2xvZ2xldmVsIgogCiAjCkBAIC0zMDksNiArMzI4LDcgQEAKICMKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiAjIENPTkZJR19ORVQgaXMgbm90IHNldApAQCAtMzI3LDkgKzM0Nyw5IEBACiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtNDk4LDYgKzUxOCwxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC01OTcsNyArNjIyLDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJTEVfTE9DS0lORyBpcyBub3Qgc2V0CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC02MzIsNyArNjU5LDYgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTY2OCw3ICs2OTQsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC02ODYsNiArNzExLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC02OTgsMTEgKzcyNCwxNSBAQAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC03MTIsNiArNzQyLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNzQxLDQgKzc3Miw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKaW5kZXggNjllNjE5OS4uNWNhYmRiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQwOjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM1OjA0IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMTkgKzEwMywyMSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEyNCw3ICsxNDEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcyLDYgKzE4OSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTMwOCw3ICszMjYsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIGVhcmx5cHJpbnRrPXNlcmlhbCBpZ25vcmVfbG9nbGV2ZWwiCiAKICMKQEAgLTMzMiw2ICszNTEsNyBAQAogIwogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19ORVQ9eQpAQCAtMzczLDYgKzM5Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAzLDYgKzQyNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMCw3ICs0MzIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzIsOSArNDUzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtNTkxLDEwICs2MTIsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzksNiArNjk3LDExIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtNjk5LDYgKzcyMiwxMCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC03NDEsNyArNzY4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC03NjQsNiArNzkwLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtODExLDYgKzgzOCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtOTU0LDggKzk4MiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05OTAsNyArMTAyMCw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC0xMDE2LDcgKzEwNDUsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMDkwLDYgKzExMTgsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMjksMjIgKzExNTgsMjggQEAKIENPTkZJR19ERUJVR19MSVNUPXkKIENPTkZJR19ERUJVR19TRz15CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTExNTIsNiArMTE4Nyw3IEBACiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTE3MCwxMCArMTIwNiwxMCBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmZlODAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfREVCVUdfQk9PVE1FTT15Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMDMsNSArMTIzOSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCmluZGV4IGM2ZTliMWMuLmY1MjFlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQyOjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM2OjI1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw4ICsyOSwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUwLDExICs1OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NCwyMCArOTQsMjIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMDcsNiArMTE5LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOCw3ICsxMzUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY1LDYgKzE4Miw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxMCw2ICsyMjgsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDMsNyArMzIyLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSBlYXJseXByaW50az1zZXJpYWwiCiAKICMKQEAgLTM3OCw2ICszOTgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwOCw2ICs0MjksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MTYsNyArNDM4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDI5LDYgKzQ1MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTU0MiwxMSArNTY0LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTY4LDYgKzU5Miw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTk1LDYgKzYyMCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTYxMyw3ICs2MzksMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC02NzMsNiArNzAzLDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTY5NCw2ICs3MjUsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTcxOSwxMCArNzUxLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODQwLDEwICs4NjksMjAgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CkBAIC04NjIsOSArOTAxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODgwLDEyICs5MTcsMTUgQEAKIENPTkZJR19NRkRfU001MDE9eQogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05NjksNiArMTAwOSw3IEBACiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtMTA3MSw3ICsxMTEyLDYgQEAKIENPTkZJR19BQzk3X0JVUz1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5NCw2ICsxMTM0LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTE0Miw2ICsxMTgzLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEyMTMsNiArMTI1NSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMjUyLDYgKzEyOTUsNyBAQAogQ09ORklHX1JUQ19EUlZfUjk3MDE9eQogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEyOTMsOCArMTMzNywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM1Nyw3ICsxNDAzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC0xNDIzLDYgKzE0NjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MzQsMTEgKzE0ODAsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTE0NTAsNiArMTUwMCw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDYzLDcgKzE1MTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTQ5NSwxMSArMTU0NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTYyLDUgKzE2MTQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZwppbmRleCBiYzEwNDY5Li5hMTU2Y2QxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0MzoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODozOTo0OCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsOCArMjksMTAgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODQsMjAgKzk0LDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTA3LDYgKzExOSwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTgsNyArMTM1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTAsNiArMjI4LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAzLDcgKzMyMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgZWFybHlwcmludGs9c2VyaWFsIgogCiAjCkBAIC0zNzgsNiArMzk4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDgsNiArNDI5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDE2LDcgKzQzOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyOSw2ICs0NTAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC00MzgsOSArNDYwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTksNiArNTIxLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYyNywxMSArNjUwLDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjUzLDYgKzY3OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjgwLDYgKzcwNiw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY5OCw3ICs3MjUsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC03NTgsNiArNzg5LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc3OSw2ICs4MTEsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTgwNCwxMCArODM3LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTI1LDEwICs5NTUsMjAgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CkBAIC05NDcsOSArOTg3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTY1LDEyICsxMDAzLDE1IEBACiBDT05GSUdfTUZEX1NNNTAxPXkKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTA1NCw2ICsxMDk1LDcgQEAKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC0xMTU2LDcgKzExOTgsNiBAQAogQ09ORklHX0FDOTdfQlVTPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTc5LDYgKzEyMjAsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjI3LDYgKzEyNjksNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTI5OCw2ICsxMzQxLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTEzMzcsNiArMTM4MSw3IEBACiBDT05GSUdfUlRDX0RSVl9SOTcwMT15CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTM3OCw4ICsxNDIzLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDQzLDcgKzE0OTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTE1MDksNiArMTU1NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTUyMCwxMSArMTU2NywxNSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtMTUzNiw2ICsxNTg3LDcgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE1NDksNyArMTYwMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNTgxLDExICsxNjMyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE2NDgsNSArMTcwMSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZwppbmRleCA3NTNmYjI3Li4wNTU1MzZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDM6NTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NDA6MjUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDcgKzI5LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iX1NESzc3ODAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOApAQCAtODgsMjAgKzk4LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTAsNiArMTIxLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMiw3ICsxMzcsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MCw2ICsxODUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQpAQCAtMjI1LDYgKzI0MSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNCw3ICszMzEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMTgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0ibWVtPTEyOE0gY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCBpcD1ib290cCByb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvcm9vdGZzIgogCiAjCkBAIC00MzUsNiArNDUzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00OTYsNiArNTE1LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNTAzLDcgKzUyMyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUxNiw2ICs1MzUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC02NzcsMTIgKzY5NywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcwNCw2ICs3MjYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTczMiw2ICs3NTUsNyBAQAogIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTc2MCw3ICs3ODQsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC04MDQsMTAgKzgzMiw3IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODYyLDEyICs4ODcsMTMgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKIENPTkZJR19NT1VTRV9QUzJfQUxQUz15CkBAIC04NzUsNiArOTAxLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CkBAIC05NDcsNiArOTc0LDExIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQogIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk1NCw3ICs5ODYsNiBAQAogIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05ODYsNiArMTAxNyw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDcyLDExICsxMTA0LDExIEBACiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiAjIENPTkZJR19TTkQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX1BSSU1FPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDk5LDYgKzExMzEsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMTQ5LDYgKzExODIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTI3OCw2ICsxMzEyLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzNDUsNyArMTM4MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0MjUsNiArMTQ1OSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQ2MSwxOCArMTQ5NiwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTE0ODAsNiArMTUyMCw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ5NSwxMSArMTUzNiwxMSBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xNTE0LDcgKzE1NTUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQpAQCAtMTU1MCwxMSArMTU5MCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTYxNyw1ICsxNjU5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZwppbmRleCA4ZGQyZjEzLi4xY2QxNzc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ2OjE1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjQ1OjI4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC01MywxMiArNjIsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVPXkKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfVFJBQ0U9eQotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFPXkKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVV9UUkFDRT15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTA1LDE5ICsxMTQsMjEgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTI2LDYgKzEzNywxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzNyw3ICsxNTMsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTg1LDYgKzIwMSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTMxOSw3ICszMzYsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzMsMTE1MjAwIGlnbm9yZV9sb2dsZXZlbCBlYXJseXByaW50az1zZXJpYWwiCiAKICMKQEAgLTM4OSw2ICs0MDcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxOSw2ICs0MzgsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MjYsNyArNDQ2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQ4LDkgKzQ2Nyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01ODgsMTAgKzYwNyw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0NywxMSArNjYzLDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzQ2LDggKzc2NiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03ODIsOCArODA0LDYgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTgwOSw3ICs4MjksNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODQ2LDYgKzg2NSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04ODIsMjAgKzkwMiwyNyBAQAogQ09ORklHX0RFQlVHX0xJU1Q9eQogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTkwNCw2ICs5MzEsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTkyMCwxMCArOTQ4LDEwIEBACiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC05MzgsNyArOTY2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKQEAgLTk3NCwxMSArMTAwMSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTA0Niw1ICsxMDc1LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZwppbmRleCAxOGY0NmRlLi41NTMxNDQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ3OjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjQ2OjU1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg4LDE4ICs5OCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDgsNiArMTE5LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOSw3ICsxMzQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTM1LDcgKzE1MCw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTY5LDYgKzE4NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw2ICsyMzAsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTYsNyArMzEzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCIKIAogIwpAQCAtMzE2LDcgKzMzNCwxMiBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzYwLDYgKzM4Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg5LDYgKzQxMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Niw3ICs0MjEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsOSArNDQyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU2MCwxMCArNTg0LDcgQEAKIENPTkZJR19NSUk9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY3MSw2ICs2OTIsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02ODEsNiArNzAzLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzAyLDIwICs3MjUsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MzQsOCArNzU4LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtNzg4LDYgKzgxNCw3IEBACiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC04MjIsNyArODQ5LDYgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC04NDUsNiArODcxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtODc3LDYgKzkwNCw3IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CkBAIC04OTEsNiArOTE5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9JU1AxMTZYX0hDRD15CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC05OTAsOCArMTAxOSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC0xMDI4LDggKzEwNTksNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNjIsNyArMTA5MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTExNDAsNiArMTE2OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTQ5LDggKzExNzgsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMTYwLDYgKzExOTIsNyBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE3Myw3ICsxMjA2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEyMDUsMTEgKzEyMzcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI3Myw1ICsxMzA3LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZwppbmRleCA3MjRiYjc3Li42OTIxYjE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ3OjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjUwOjA1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsMTcgKzQwLDI0IEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogCiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTczLDMxICs4MywzNiBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDQsNiArMTU5LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjYyLDcgKzI3OCw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTQ2OSwxMSArNDg2LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNTA3LDcgKzUyOCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC01NTksNyArNTc5LDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNTk0LDcgKzYxNiw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldApAQCAtNjE5LDcgKzY0MCw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTYzNyw2ICs2NTcsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldApAQCAtNjQ1LDggKzY2NiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTY1NCw2ICs2NzgsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC02ODAsNCArNzA1LDUgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKaW5kZXggNmNhNmEyZi4uM2FiYjA2OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0ODoxOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo1MDo1MiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CkBAIC00OCwxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODMsMTggKzkzLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDIsNiArMTEzLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExMyw3ICsxMjgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYwLDYgKzE3NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNSw2ICsyMjEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yODksNyArMzA2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzU1LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg0LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5MSw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MDksOSArNDI4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTQ3LDEwICs1NjYsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0MiwxMCArNjU4LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02NTYsOSArNjgyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY5Miw3ICs3MTYsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzQ2LDcgKzc2OSw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MTUsNyArODQwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04NDksNiArODczLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CkBAIC04NTcsOCArODgyLDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODY2LDYgKzg5NCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTg3OCw3ICs5MDcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTEwLDExICs5MzgsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtOTc5LDUgKzEwMDksNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnCmluZGV4IGI4YWFlMTEuLjFhNDNjZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDk6MDAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTM6MzIgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI2LDcgKzI3LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNiw2ICszOSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDksMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg0LDE4ICs5NCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDQsNiArMTE1LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNSw3ICsxMzAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYyLDYgKzE3Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTEsNyArMzA4LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSIKIAogIwpAQCAtMzY4LDYgKzM4Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDMzLDYgKzQ1Miw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQwLDcgKzQ2MCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2NCw5ICs0ODMsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTk3LDcgKzYxNiw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MDUsNiArNjIzLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjU4LDEwICs2NzcsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcxOSwxMSArNzM1LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI4LDggKzg0OCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODY2LDggKzg4OCw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtOTAwLDcgKzkyMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTM1LDYgKzk1NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NjQsMjQgKzk4NCwzMCBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtOTk0LDE0ICsxMDIwLDEzIEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxNiw3ICsxMDQxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTEwNTksMTEgKzEwODMsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMTI3LDUgKzExNTMsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnCmluZGV4IDMwNmUyMWMuLmI4YTNjOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NTA6NDkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTc6MTEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04OSwxOCArOTksMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA5LDYgKzEyMCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjAsNyArMTM1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Nyw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTIsNiArMjI4LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTIiCiAKICMKQEAgLTM3Myw2ICszOTEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzOCw2ICs0NTcsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0NSw3ICs0NjUsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjksOSArNDg4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTYwNiw2ICs2MjUsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC02MjEsMTAgKzY0MSw3IEBACiAjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjcyLDEyICs2ODksMTMgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtNzI1LDYgKzc0MywxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC03NjIsNyArNzg1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC03ODUsNiArODA3LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtODMxLDYgKzg1NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC05MDAsNiArOTI0LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTk2MSw4ICs5ODYsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTEwMDIsOCArMTAyOSw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtMTAzNiw3ICsxMDYxLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5NSw2ICsxMTE5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMjQsMjQgKzExNDksMzAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTE1NCwxNCArMTE4NSwxMyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzYsNyArMTIwNiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xMjE5LDExICsxMjQ4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI4Nyw1ICsxMzE4LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZwppbmRleCA2MTk0MzgyLi5kNzA5YjdmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjU0OjI0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjU3OjQxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MSwxOSArMTAxLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTEzLDYgKzEyNCwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjUsNyArMTQxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MSw3ICsxNTcsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE3Niw2ICsxOTIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzMsNiArMjUwLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE3LDcgKzMzNSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTMzNiw3ICszNTUsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM4MSw2ICs0MDYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxMCw2ICs0MzYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTcsNyArNDQ0LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDMwLDYgKzQ1Niw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDk0LDcgKzUyMSw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01MDIsNiArNTI4LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNTM1LDEwICs1NjIsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU3NywxMiArNjAxLDEzIEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNjMxLDEwICs2NTYsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTY0NSw5ICs2ODAsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjgxLDcgKzcxNCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03NzgsOCArODEwLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MzksNyArODczLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC04NjYsNiArODk5LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NzgsOCArOTEyLDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTg4OSw2ICs5MjYsNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTAyLDcgKzk0MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MzQsMTEgKzk3MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDAyLDUgKzEwNDEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjRfZGVmY29uZmlnCmluZGV4IDNlZTc4M2EwLi41NmIwYjlmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBNb24gSnVuIDI5IDE2OjI4OjQzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjUwOjU5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTQyLDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTQsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05MSwyMCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTQ0LDcgKzE1MCw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNzgsNiArMTg0LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIyNCw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNDksNiArMjU3LDggQEAKICMKIENPTkZJR19TT0xVVElPTl9FTkdJTkU9eQogQ09ORklHX1NIXzc3MjRfU09MVVRJT05fRU5HSU5FPXkKKyMgQ09ORklHX1NIX0tGUjJSMDkgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRUNPVkVDIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMjY5LDcgKzI3OSwxMCBAQAogIwogIyBETUEgc3VwcG9ydAogIwotIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9ETUFfQVBJPXkKK0NPTkZJR19TSF9ETUE9eQorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9MTIKKyMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIAogIwogIyBDb21wYW5pb24gQ2hpcHMKQEAgLTMwNSw3ICszMTgsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkxIGNvbnNvbGU9dHR5U0MzLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWRoY3AgbWVtY2h1bmsudnB1PTRtIgogCiAjCkBAIC0zMjUsNyArMzM5LDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNzMsNiArMzkzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDIsNiArNDIzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA5LDcgKzQzMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyMiw2ICs0NDMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MzEsOSArNDUzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00ODksNiArNTExLDcgQEAKICMKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02NDgsMTIgKzY3MSwxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02OTcsMTQgKzcxOCwxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0M9eQorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTc1NCw2ICs3ODAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzY0LDYgKzc5MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CkBAIC03ODYsOSArODE0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MzgsMTEgKzg2MywxNSBAQAogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODYyLDggKzg5MSwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtODc2LDI0ICs5MDcsMjQgQEAKIENPTkZJR19WSURFT19WNEwyX0NPTU1PTj15CiAjIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19WNEwxX0NPTVBBVD15Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fTUVESUE9eQorQ09ORklHX0RWQl9DT1JFPW0KK0NPTkZJR19WSURFT19NRURJQT1tCiAKICMKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCiAjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSPXkKK0NPTkZJR19NRURJQV9UVU5FUj1tCiAjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT15Ci1DT05GSUdfTUVESUFfVFVORVJfVERBODI5MD15Ci1DT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz15Ci1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT15Ci1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz15Ci1DT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPXkKLUNPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9eQotQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD15Ci1DT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDM9eQorQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCitDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDM9bQogQ09ORklHX1ZJREVPX1Y0TDI9eQogQ09ORklHX1ZJREVPQlVGX0dFTj15CiBDT05GSUdfVklERU9CVUZfRE1BX0NPTlRJRz15CkBAIC05MDQsNiArOTM1LDcgQEAKICMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BVTA4MjggaXMgbm90IHNldAogQ09ORklHX1NPQ19DQU1FUkE9eQogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSBpcyBub3Qgc2V0CkBAIC05MTksMTUgKzk1MSwxOCBAQAogQ09ORklHX1VTQl9HU1BDQT1tCiAjIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0pFSUxJTkogaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX01SOTczMTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1BBQzIwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDAgaXMgbm90IHNldApAQCAtOTU3LDYgKzk5MiwyNiBAQAogIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAogIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAorQ09ORklHX0RWQl9NQVhfQURBUFRFUlM9OAorIyBDT05GSUdfRFZCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1RUUENJX0VFUFJPTSBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNfU0lBTk9fTURUViBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfRkVfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTcsMTAgKzEwNzIsODAgQEAKICMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCitDT05GSUdfU05EX0pBQ0s9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUEVSSCBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9bQorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKK0NPTkZJR19TTkRfU09DX1NINF9GU0k9bQorQ09ORklHX1NORF9GU0lfQUs0NjQyPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KK0NPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1M9bQorQ09ORklHX1NORF9TT0NfV01fSFVCUz1tCitDT05GSUdfU05EX1NPQ19BRDE4MzY9bQorQ09ORklHX1NORF9TT0NfQUQxOTM4PW0KK0NPTkZJR19TTkRfU09DX0FENzMzMTE9bQorQ09ORklHX1NORF9TT0NfQUs0MTA0PW0KK0NPTkZJR19TTkRfU09DX0FLNDUzNT1tCitDT05GSUdfU05EX1NPQ19BSzQ2NDI9bQorQ09ORklHX1NORF9TT0NfQ1M0MjcwPW0KK0NPTkZJR19TTkRfU09DX0wzPW0KK0NPTkZJR19TTkRfU09DX1BDTTMwMDg9bQorQ09ORklHX1NORF9TT0NfU1BESUY9bQorQ09ORklHX1NORF9TT0NfU1NNMjYwMj1tCitDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyMz1tCitDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyNj1tCitDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMzWD1tCitDT05GSUdfU05EX1NPQ19VREExMzRYPW0KK0NPTkZJR19TTkRfU09DX1VEQTEzODA9bQorQ09ORklHX1NORF9TT0NfV004NTEwPW0KK0NPTkZJR19TTkRfU09DX1dNODUyMz1tCitDT05GSUdfU05EX1NPQ19XTTg1ODA9bQorQ09ORklHX1NORF9TT0NfV004NzI4PW0KK0NPTkZJR19TTkRfU09DX1dNODczMT1tCitDT05GSUdfU05EX1NPQ19XTTg3NTA9bQorQ09ORklHX1NORF9TT0NfV004NzUzPW0KK0NPTkZJR19TTkRfU09DX1dNODc3Nj1tCitDT05GSUdfU05EX1NPQ19XTTg5MDA9bQorQ09ORklHX1NORF9TT0NfV004OTAzPW0KK0NPTkZJR19TTkRfU09DX1dNODk0MD1tCitDT05GSUdfU05EX1NPQ19XTTg5NjA9bQorQ09ORklHX1NORF9TT0NfV004OTYxPW0KK0NPTkZJR19TTkRfU09DX1dNODk3MT1tCitDT05GSUdfU05EX1NPQ19XTTg5NzQ9bQorQ09ORklHX1NORF9TT0NfV004OTg4PW0KK0NPTkZJR19TTkRfU09DX1dNODk5MD1tCitDT05GSUdfU05EX1NPQ19XTTg5OTM9bQorQ09ORklHX1NORF9TT0NfV005MDgxPW0KK0NPTkZJR19TTkRfU09DX01BWDk4Nzc9bQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDMsNiArMTE2OCw3IEBACiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTA3Miw2ICsxMTk4LDcgQEAKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldApAQCAtMTA4Niw5ICsxMjEzLDExIEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTE1MSw5ICsxMjgwLDQ2IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5Nz15CitDT05GSUdfVVNCX1I4QTY2NTk3PXkKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQpAQCAtMTE3Niw2ICsxMzQyLDggQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9eQogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTIyMyw2ICsxMzkxLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEyNzksNiArMTQ0OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzQzLDcgKzE1MTMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDIzLDYgKzE1OTIsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDMzLDggKzE2MDMsMTEgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE0NDIsNiArMTYxNSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE0NTUsNyArMTYyOSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ5NiwxMSArMTY2OSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTYyLDUgKzE3MzcsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCmluZGV4IDU2NGJmN2IuLjdiYzkyNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDA6MDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTg6NTggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODQsMTggKzk0LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDQsNiArMTE1LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNSw3ICsxMzAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYyLDYgKzE3Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTEsNyArMzA4LDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zNTgsNiArMzc2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODcsNiArNDA2LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk0LDcgKzQxNCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMiw5ICs0MzEsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NjMsNyArNTgyLDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU5OSwxMCArNjE3LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NjUsMTAgKzY4MCwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNjc5LDkgKzcwNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc2Niw4ICs3ODksMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTgzOCw3ICs4NjMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTg4NSw2ICs5MDksNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04OTQsOCArOTE5LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtOTAzLDYgKzkzMSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTkxNiw3ICs5NDUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTQ4LDExICs5NzYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTAxNiw1ICsxMDQ2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZwppbmRleCBlYjQzMWM0Li5jMjBhZTVlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjAyOjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjAxOjQxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDksMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg3LDE4ICs5NywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA3LDYgKzExOCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTgsNyArMTMzLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTAsNiArMjI2LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk1LDcgKzMxMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDM4NDAwIgogCiAjCkBAIC0zODIsNiArNDAwLDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTEsNiArNDMwLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDE4LDcgKzQzOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzNiw5ICs0NTUsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NzQsMTAgKzU5Myw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjMyLDEwICs2NDgsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTY0Niw5ICs2NzIsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MzQsOCArNzU4LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MDYsNyArODMyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC04MzMsNiArODU4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg0Miw4ICs4NjgsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC04NTEsNiArODgwLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODY0LDcgKzg5NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC04OTYsMTEgKzkyNSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC05NjUsNSArOTk2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZwppbmRleCA3NTZiZWVjLi44MmJhZWVmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjAzOjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjAzOjU5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OCwxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTgxLDE5ICs5MSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTAxLDYgKzExMiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTIsNyArMTI4LDggQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0xNTksNiArMTc2LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKQEAgLTE5OSw3ICsyMTcsNiBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjQsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yODcsOCArMzA1LDkgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MTAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAuMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM4Miw2ICs0MDEsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODksNyArNDA5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQwNiw5ICs0MjUsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NDksNiArNTY4LDcgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQpAQCAtNTg3LDExICs2MDcsMTMgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTIsNiArNjM0LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKQEAgLTYzMCw2ICs2NTMsNyBAQAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NDgsOCArNjcyLDEzIEBACiAjCiAKICMKLSMgQSBuZXcgYWx0ZXJuYXRpdmUgRmlyZVdpcmUgc3RhY2sgaXMgYXZhaWxhYmxlIHdpdGggRVhQRVJJTUVOVEFMPXkKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KICMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNzI0LDEwICs3NTMsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgyMSwxMCArODQ3LDE5IEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKQEAgLTgzMyw3ICs4NjgsNiBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldApAQCAtODU3LDYgKzg5MSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MzcsMTEgKzk3MiwxMSBAQAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtOTY0LDYgKzk5OSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEwMDksNiArMTA0NSw3IEBACiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEyNDMsNiArMTI4MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1Myw4ICsxMjkxLDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEyNjMsNiArMTMwNCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEyNzYsNyArMTMxOCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKQEAgLTEzMDksNiArMTM1MCw3IEBACiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMzcxLDUgKzE0MTMsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKaW5kZXggN2ZlZGFhZS4uZGQwZTg5MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA0OjQxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjA3OjE0IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTMsMTEgKzYyLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTkxLDIwICsxMDEsMjIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTQsNiArMTI2LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNiw3ICsxNDMsNyBAQAogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Myw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTgsNiArMjM2LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAyLDcgKzMyMSw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCBtZW09NjRNIHJvb3Q9L2Rldi9uZnMiCiAKICMKQEAgLTM4Miw2ICs0MDIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxMiw2ICs0MzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTksNyArNDQxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDMyLDYgKzQ1Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU5MSw2ICs2MTMsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CkBAIC02MDMsNyArNjI2LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjc5LDYgKzcwNiw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzA0LDEwICs3MzIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MDQsMTAgKzgyOSwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTgyMiw5ICs4NTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC04NjEsNiArODk0LDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTg3OSw3ICs5MTMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtOTQ0LDggKzk3NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwMTEsMTIgKzEwNDYsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CkBAIC0xMTA4LDYgKzExNDMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMTksMTEgKzExNTUsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTExMzQsNiArMTE3NCw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTQ3LDcgKzExODgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExODksMTEgKzEyMjksMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMjU5LDUgKzEzMDEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCmluZGV4IGMyOTZjYTUuLjY2MjE1NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDY6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MTE6NDkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODcsMTggKzk3LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNyw2ICsxMTgsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE4LDcgKzEzNCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDYgKzIyNyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5Miw3ICszMTAsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zNzQsNiArMzkzLDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDAsNiArNDYwLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQ3LDcgKzQ2OCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2OSw5ICs0ODksOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC02MDUsMTAgKzYyNSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjg2LDYgKzcwMywxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC03MjMsNyArNzQ1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTc3NSw4ICs3OTYsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODEzLDggKzgzNiw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtODQ3LDcgKzg2OCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODc0LDYgKzg5NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODgzLDggKzkwNCwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTg5Myw2ICs5MTcsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC05MDYsNyArOTMxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkzOCwxMSArOTYyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwMDYsNSArMTAzMiw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnCmluZGV4IGJhMjZiZTEuLmUwNjcxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzcyNF9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA2OjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjE0OjAwIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00NiwxNCArNTUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAogQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTIsMTkgKzk5LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMywxMyArMTIyLDE4IEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2OSw2ICsxODMsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyND15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE0LDcgKzIyOSw2IEBACiAjCiAjIE1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kCiAjCi1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIyMiw2ICsyMzYsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNDYsNiArMjYxLDggQEAKICMgQm9hcmQgc3VwcG9ydAogIwogIyBDT05GSUdfU0hfNzcyNF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfS0ZSMlIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9FQ09WRUMgaXMgbm90IHNldAogCiAjCiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCkBAIC0zMTgsNyArMzM1LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzQ1LDYgKzM2Myw3IEBACiBDT05GSUdfSElCRVJOQVRJT05fTlZTPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15CkBAIC00MjcsNiArNDQ2LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTQzNyw2ICs0NTcsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC00NTYsMjAgKzQ3NywyMSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTQ4OCw4ICs1MTAsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC01NDAsNiArNTY0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC01ODcsNyArNjEyLDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNjQyLDYgKzY2OSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC02NTQsMTEgKzY4MiwxNSBAQAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTY2OCw2ICs3MDAsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC02OTIsNCArNzI1LDUgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKaW5kZXggYjFkOWIyMy4uMTk0ZmY3MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowNzoxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToxNTozNyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ4LDExICs1NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTIsMTkgKzEwMiwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNCw2ICsxMjYsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI1LDcgKzE0Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzMsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2Mz15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw3ICsyMzIsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMjIsNiArMjM5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAzLDcgKzMyMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMiwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgcm9vdGRlbGF5PTEwIgogCiAjCkBAIC0zNzEsNiArMzkwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDEsNiArNDIxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDA5LDcgKzQzMCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyMiw2ICs0NDIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MzEsOSArNDUyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ4OCw2ICs1MDksNyBAQAogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15CiAjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0dQSU9fQUREUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTU2NSw3ICs1ODcsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjIxLDEwICs2NDIsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MTYsMTEgKzczNCwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgzMCw2ICs4NTIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtODk5LDYgKzkyMiw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC05MjMsNiArOTQ3LDggQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC05NTYsOCArOTgyLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTAyMiw3ICsxMDUwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMDk2LDYgKzExMjMsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTEwNywxMSArMTEzNSwxNSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtMTEyMSw2ICsxMTUzLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTEzNCw3ICsxMTY3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTExNjYsMTEgKzExOTgsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTIzMiw1ICsxMjY2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcKaW5kZXggNDI2YTg4Zi4uMzRiZWQ1NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzcwX2dlbmVyaWNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDg6MDUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MTc6MTYgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ1LDE0ICs1NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05MSwxOSArOTgsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTEyLDEzICsxMjEsMTggQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY2LDYgKzE4MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTAsNyArMjI1LDYgQEAKICMKICMgTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQKICMKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjE4LDYgKzIzMiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxMyw3ICszMjgsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMzgsNiArMzU0LDcgQEAKIENPTkZJR19ISUJFUk5BVElPTl9OVlM9eQogQ09ORklHX0hJQkVSTkFUSU9OPXkKIENPTkZJR19QTV9TVERfUEFSVElUSU9OPSIiCisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQpAQCAtNDIwLDYgKzQzNyw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC00MzAsNiArNDQ4LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNDQ5LDIwICs0NjgsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00ODEsOCArNTAxLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtNTMzLDYgKzU1NSw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtNTgwLDcgKzYwMyw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTYzNSw2ICs2NjAsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjQ3LDExICs2NzMsMTUgQEAKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC02NjEsNiArNjkxLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjg1LDQgKzcxNiw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCmluZGV4IGVkMzE2ZjYuLjUxY2JhZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDg6MjkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIEZyaSBTZXAgMjUgMTE6Mzk6MjAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI5LDggKzMwLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKLUNPTkZJR19JT19UUkFQUEVEPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00MSwxMCArNDMsMTcgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldApAQCAtNTMsMTEgKzYyLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC02Nyw4ICs3Nyw3IEBACiBDT05GSUdfVVNFUl9TQ0hFRD15CiAjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldApAQCAtNzksNyArODgsNyBAQAogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKQEAgLTkzLDI4ICsxMDIsMzcgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKK0NPTkZJR19QRVJGX0NPVU5URVJTPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfS1BST0JFUz15CitDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKK0NPTkZJR19HQ09WX0tFUk5FTD15CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNyw3ICsxNDUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzYsNiArMTk0LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE1LDYgKzIzNCwxMiBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzI1NksgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMk1CIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMjIzLDcgKzI0OCw2IEBACiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIzMSw2ICsyNTUsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNTYsNiArMjgxLDcgQEAKICMKICMgQ09ORklHX1NIX0hJR0hMQU5ERVIgaXMgbm90IHNldAogQ09ORklHX1NIX1NINzc4NUxDUj15CisjIENPTkZJR19TSF9TSDc3ODVMQ1JfUFQgaXMgbm90IHNldAogCiAjCiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCkBAIC0yNjQsMTQgKzI5MCwyOSBAQAogQ09ORklHX1NIX1BDTEtfRlJFUT01MDAwMDAwMAogQ09ORklHX1NIX0NMS19DUEc9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCiAjCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKK0NPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfU0hfQ1BVX0ZSRVE9eQogCiAjCiAjIERNQSBzdXBwb3J0CkBAIC0yOTksMTIgKzM0MCwxMiBAQAogQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfR1VTQT15Ci0jIENPTkZJR19TUEFSU0VfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VfSVJRPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTMxMiw3ICszNTMsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMjEsOCArMzYzLDcgQEAKIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldApAQCAtMzM5LDggKzM4MCwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSURMRT15CitDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CitDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQogQ09ORklHX05FVD15CiAKICMKQEAgLTM5Miw2ICs0MzgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNCw2ICs0NjEsOCBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldApAQCAtNDIxLDYgKzQ3MCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQyOSw3ICs0NzksNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NDIsMTggKzQ5MSwxNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTM4LDcgKzU4Niw4IEBACiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC01NjEsNyArNjEwLDcgQEAKIENPTkZJR19TQ1NJX0RNQT15CiAjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCkBAIC01OTEsNiArNjQwLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxMiw2ICs2NjIsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTYzOSw2ICs2OTAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NTcsNyArNzA5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjkwLDYgKzc0Niw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNjk3LDEyICs3NTQsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzM5LDI1ICs3OTEsNDIgQEAKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwogQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CitDT05GSUdfSU5QVVRfRVZCVUc9bQogCiAjCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKQEAgLTc2Niw3ICs4MzUsMTIgQEAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc3Nyw3ICs4NTEsNyBAQAogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15Ci1DT05GSUdfREVWS01FTT15CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCkBAIC03OTYsMTIgKzg3MCwxMCBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CitDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04MDksNiArODgxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09QQ0E9eQpAQCAtODM4LDYgKzkxMSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtODY0LDIxICs5MzgsNDIgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9XRFQ9eQorIyBDT05GSUdfU0hfV0RUX01NQVAgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwpAQCAtODk2LDE0ICs5OTEsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTkxNSwxMiArMTAxMywxMSBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiAjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TWVNfRklMTFJFQ1Q9bQotQ09ORklHX0ZCX1NZU19DT1BZQVJFQT1tCi1DT05GSUdfRkJfU1lTX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotQ09ORklHX0ZCX1NZU19GT1BTPW0KLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC05NTUsNyArMTA1Miw3IEBACiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KKyMgQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TTTUwMT15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CkBAIC05ODEsMTQgKzEwNzgsMTEyIEBACiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAorQ09ORklHX0xPR09fU1VQRVJIX01PTk89eQorQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2PXkKK0NPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0hXREVQPXkKK0NPTkZJR19TTkRfUkFXTUlEST15CitDT05GSUdfU05EX1NFUVVFTkNFUj15CisjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKK0NPTkZJR19TTkRfSFJUSU1FUj15CitDT05GSUdfU05EX1NFUV9IUlRJTUVSX0RFRkFVTFQ9eQorQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUkFXTUlESV9TRVE9eQorQ09ORklHX1NORF9PUEwzX0xJQl9TRVE9eQorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX01QVTQwMV9VQVJUPXkKK0NPTkZJR19TTkRfT1BMM19MSUI9eQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQ01JUENJPXkKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUEVSSCBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwMSwzNCArMTE5NiwzOSBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCi1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAotQ09ORklHX0hJRF9FWktFWT15Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfR1lSQVRJT049eQotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotQ09ORklHX0hJRF9MT0dJVEVDSD15CitDT05GSUdfSElEX0E0VEVDSD1tCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfQkVMS0lOPW0KK0NPTkZJR19ISURfQ0hFUlJZPW0KK0NPTkZJR19ISURfQ0hJQ09OWT1tCitDT05GSUdfSElEX0NZUFJFU1M9bQorQ09ORklHX0hJRF9EUkFHT05SSVNFPW0KKyMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9FWktFWT1tCitDT05GSUdfSElEX0tZRT1tCitDT05GSUdfSElEX0dZUkFUSU9OPW0KK0NPTkZJR19ISURfVFdJTkhBTj1tCitDT05GSUdfSElEX0tFTlNJTkdUT049bQorQ09ORklHX0hJRF9MT0dJVEVDSD1tCiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX01JQ1JPU09GVD15Ci1DT05GSUdfSElEX01PTlRFUkVZPXkKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKK0NPTkZJR19ISURfTUlDUk9TT0ZUPW0KK0NPTkZJR19ISURfTU9OVEVSRVk9bQorQ09ORklHX0hJRF9OVFJJRz1tCitDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KICMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfUEVUQUxZTlg9eQotQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15Ci1DT05GSUdfSElEX1NVTlBMVVM9eQotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9bQorQ09ORklHX0hJRF9TQU1TVU5HPW0KK0NPTkZJR19ISURfU09OWT1tCitDT05GSUdfSElEX1NVTlBMVVM9bQorQ09ORklHX0hJRF9HUkVFTkFTSUE9bQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9bQogIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX0hJRF9aRVJPUExVUz1tCisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEwNDAsMTMgKzEyNDAsMTQgQEAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwotQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKQEAgLTEwNjEsMTAgKzEyNjIsOCBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKQEAgLTExMzMsNyArMTMzMiw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotQ09ORklHX1VTQl9URVNUPW0KKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTE0Myw3ICsxMzQyLDI5IEBACiAjCiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX1NESENJPW0KKyMgQ09ORklHX01NQ19TREhDSV9QQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TREhDSV9QTFRGTT1tCisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19WSUFfU0RNTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC0xMTc5LDYgKzE0MDAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMDMsOSArMTQyNSwyMCBAQAogIwogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VSU89bQorIyBDT05GSUdfVUlPX0NJRiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1NNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fQUVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QQ0lfR0VORVJJQyBpcyBub3Qgc2V0CiAKICMKICMgVEkgVkxZTlEKQEAgLTEyMjUsMTMgKzE0NTgsMTUgQEAKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjc1LDkgKzE1MTAsOSBAQAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFVHRVRMQkZTPXkKK0NPTkZJR19IVUdFVExCX1BBR0U9eQorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CkBAIC0xMjk3LDIwICsxNTMyLDIwIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU0RfVjQ9eQorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15CitDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15CkBAIC0xMzczLDg1ICsxNjA4LDY5IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX1NDSEVEU1RBVFM9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX0xBVEVOQ1lUT1A9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CitDT05GSUdfVFJBQ0VSX01BWF9UUkFDRT15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfR0VORVJJQ19UUkFDRVI9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0lSUVNPRkZfVFJBQ0VSPXkKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9UUkFDRVI9eQorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tfVFJBQ0VSPXkKK0NPTkZJR19LTUVNVFJBQ0U9eQorQ09ORklHX1dPUktRVUVVRV9UUkFDRVI9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fUFJPRklMRVIgaXMgbm90IHNldAorQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0RXQVJGX1VOV0lOREVSPXkKK0NPTkZJR19NQ09VTlQ9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE0NjUsNyArMTY4NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTUwNywxMSArMTcyNSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE1NTYsNyArMTc3Niw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTU3Myw1ICsxNzkzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZwppbmRleCAwMDRlNmY1Li44YzJjNDdlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA5OjM0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjIzOjE4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw4ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15Ci1DT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDEsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTMsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MywxOSArMTAyLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE1LDYgKzEyNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjcsNyArMTQxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Niw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjQsNiArMjM5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzA2LDcgKzMyMiw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM4Niw2ICs0MDMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNSw2ICs0MzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MjMsNyArNDQyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDM2LDYgKzQ1NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDQ1LDkgKzQ2NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01ODUsNiArNjA0LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYwNiw2ICs2MjYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTYzMyw2ICs2NTQsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NTEsNyArNjczLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjg0LDYgKzcxMCw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNjkxLDEwICs3MTgsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NDQsMTMgKzc2OCwxNyBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC04MDMsNiArODMxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09QQ0E9eQpAQCAtODMyLDYgKzg2MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtODU4LDIwICs4ODgsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04OTAsMTQgKzkyMSwxNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk4Miw3ICsxMDE2LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDA1LDYgKzEwMzgsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDU1LDYgKzEwODksNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTE3Myw2ICsxMjA4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjI0LDggKzEyNjAsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjkxLDEyICsxMzI5LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTM3Miw2ICsxNDEwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQwNywxOCArMTQ0NiwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTE0MjYsNiArMTQ3MCw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ0MCwxMSArMTQ4NSwxMSBAQAogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ1OSw3ICsxNTA0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNTAxLDExICsxNTQ1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU2Nyw1ICsxNjEzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKaW5kZXggYWQ3ZDYwOS4uOTIxMTVlNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTA6MzMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6Mjc6MTcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI2LDcgKzI3LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNiw2ICszOSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtNDYsMTEgKzU1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTc3LDE4ICs4NywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC05NiwxMiArMTA3LDE2IEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX0JBU0VfU01BTEw9MQogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0OCw2ICsxNjMsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0xOTMsNiArMjA5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjc0LDcgKzI5MSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwMjEwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0xZjAxIG10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjY0ayhmaXJtKXJvLC0oc3lzKSBuZXRkZXY9MzQsMHgzMDAsZXRoMCAiCiAKICMKQEAgLTMzOSw2ICszNTcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2OCw2ICszODcsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zNzUsNyArMzk1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNTI5LDEwICs1NDgsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU5MSwxMSArNjA3LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjcyLDcgKzY5Miw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTcwOSw4ICs3MzEsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiAjIENPTkZJR19TWVNGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtNzMyLDcgKzc1Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTc2OCw2ICs3ODcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTc3NSw4ICs3OTUsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC03ODUsNiArODA4LDcgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC03OTcsNyArODIxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTgyOCwxMSArODUxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTg5NSw1ICs5MjAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKaW5kZXggMjA3YjBjOS4uZTM4NThkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjExOjAzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjI5OjI2IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0zMCw3ICszMSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTUsMTIgKzY0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVT15CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX1RSQUNFPXkKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1VfVFJBQ0U9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTEsMTkgKzEyMCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CkBAIC0xMzUsNiArMTQ2LDExIEBACiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTE0Nyw3ICsxNjMsNyBAQAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xOTYsNiArMjEyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjU2LDYgKzI3Myw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTM1Myw3ICszNzEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAxMDAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDEwMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIGVhcmx5cHJpbnRrPWJpb3MgaWdub3JlX2xvZ2xldmVsIgogCiAjCkBAIC00MzgsNiArNDU3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00ODksNiArNTA5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01NjIsNyArNTgzLDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU3MCw2ICs1OTAsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC02MDIsMTIgKzYyMywxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzUsNiArNjk0LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjg1LDYgKzcwNSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzA2LDkgKzcyNyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzI5LDExICs3NDcsMTUgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NjIsOCArNzg0LDEyIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04MDgsNiArODM0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD1tCiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC04NjIsNiArODg5LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15CkBAIC04NzYsMTAgKzkwNCwxMSBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKIENPTkZJR19VU0JfTTY2NTkyPXkKICMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CkBAIC05MzksNiArOTY4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC05NTAsNiArOTgwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEwMDIsOCArMTAzMywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTA2Myw3ICsxMDk2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC0xMTI5LDYgKzExNjEsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNjQsMjIgKzExOTcsMjkgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTExODgsNiArMTIyOCw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTIwNSwxMCArMTI0NiwxMCBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMjMsNyArMTI2NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMjU1LDExICsxMjk1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEzMjIsNSArMTM2NCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCmluZGV4IDJiZTJkNzUuLmNiOTE5YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKLSMgVGh1IEF1ZyAyMCAxNTowMzowNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTozMzowMCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC01NywxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtOTUsMjEgKzk2LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE3NSw2ICsxNzUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjAsNiArMjIxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzEyLDcgKzMxNCw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzc0LDYgKzM3Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAzLDYgKzQwNyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMCw3ICs0MTUsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02MTgsMTAgKzYyMiw3IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzE0LDcgKzcxNSw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MzYsNiArNzM2LDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTgxOCw2ICs4MTksNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04ODIsNyArODg0LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtOTA5LDYgKzkxMCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05MjIsNyArOTI0LDcgQEAKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCmluZGV4IDVkOTcwMjYuLmI5ZmU5NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxMjoyOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTozNTowMyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKQEAgLTQ1LDExICs1NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MywxOCArOTMsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwMyw2ICsxMTQsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE1LDcgKzEzMCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjIsNiArMTc3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjA3LDYgKzIyMyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NCw3ICszMTEsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTQwMiwxMCArNDIwLDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC00MTYsOSArNDQ0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTQ5NSw3ICs1MjEsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNTU5LDcgKzU4Nyw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTU3Nyw2ICs2MDQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNTg2LDggKzYxNCwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MjYsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC02MjMsNCArNjU1LDUgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCmluZGV4IDdhZDA4MGUuLjJjYTc5ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjEyOjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjM2OjM2IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKQEAgLTkwLDE5ICsxMDAsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMSw2ICsxMjIsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIzLDcgKzEzOCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzAsNiArMTg1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE1LDYgKzIzMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwNyw3ICszMjQsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDllMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwzODQwME44MSByb290PS9kZXYvbmZzIGlwPTo6Ojo6ZXRoMTphdXRvY29uZiBydyIKIAogIwpAQCAtNTA5LDYgKzUyNyw3IEBACiAjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiBDT05GSUdfU1RQPXkKQEAgLTU5NSw2ICs2MTQsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTYwMyw3ICs2MjMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02MTYsNiArNjM1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNjI4LDkgKzY0OCw5IEBACiBDT05GSUdfTVREPW0KIENPTkZJR19NVERfREVCVUc9eQogQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTgyMCw2ICs4NDAsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CkBAIC04MzIsNyArODUzLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtOTMxLDYgKzk1Niw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtOTU2LDEwICs5ODIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMDg3LDEwICsxMTEwLDIwIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtMTEwNSw5ICsxMTM4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE0OSw2ICsxMTgwLDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTExNjcsNyArMTE5OSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIxNyw2ICsxMjQ4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTE0MTYsOCArMTQ0OCwxMCBAQAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0ODksNyArMTUyMyw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTkxLDYgKzE2MjQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2MjEsMjMgKzE2NTUsMjkgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CkBAIC0xNjUwLDE0ICsxNjkwLDEzIEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY3Miw3ICsxNzExLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE3MTUsMTEgKzE3NTMsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CkBAIC0xNzkwLDUgKzE4MzAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCmluZGV4IDYwOGZlNTYuLmIwMTJjYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTQ6MzYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6NDI6MzMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI5LDcgKzMwLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00MCw2ICs0MywxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkxLDE5ICsxMDEsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTMsNiArMTI0LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNSw3ICsxNDAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQxLDcgKzE1Niw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTc2LDYgKzE5MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIzMyw2ICsyNDksNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTQsNyArMzMxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWRoY3AiCiAKICMKQEAgLTMzNCw3ICszNTIsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM4Miw2ICs0MDYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxMSwxOSArNDM2LDE3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPXkKKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPW0KICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT15Ci1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QUz15Ci1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCi0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKIENPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQogIyBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKQEAgLTQ0NCw2ICs0NjcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NTMsOSArNDc3LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU5MCw3ICs2MTQsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNTk4LDYgKzYyMSw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTYzMSwxMCArNjU1LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTl84MDIxMT15CiBDT05GSUdfTElCRVJUQVM9bQpAQCAtNjQ4LDEyICs2NjksMTMgQEAKICMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUjkxNzBfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JV00gaXMgbm90IHNldAogCiAjCkBAIC03NTAsMTAgKzc3MiwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNzY0LDkgKzc5Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MTMsNiArODQzLDcgQEAKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldApAQCAtODI3LDkgKzg1OCw5IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQotIyBDT05GSUdfU1VQRVJIX09OX0NISVBfUjhBNjY1OTcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCkBAIC04OTMsNiArOTI0LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTkxNyw2ICs5NDksOCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTk0OSw4ICs5ODMsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwMTQsNyArMTA1MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA5MSw2ICsxMTI2LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTEwMyw4ICsxMTM5LDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTExMTIsNiArMTE1MSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExMjUsNyArMTE2NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE2NywxMSArMTIwNiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQpAQCAtMTIzNSw1ICsxMjc2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCmluZGV4IGVlMTk4N2UuLjlmOGFlZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxNToyOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTo0NjoxMyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCwxMSArMTQsMTMgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CkBAIC0yOSw3ICszMSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTQsMTQgKzY0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTExMSwyMCArMTE5LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMzQsNiArMTQyLDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0Niw3ICsxNTksNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTk1LDYgKzIwOCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTI0NCw3ICsyNTgsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMjY1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzIyLDYgKzMzNiw3IEBACiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTMzNCw3ICszNDksOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zNDMsNiArMzU5LDggQEAKICMgQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfUENJRVBPUlRCVVM9eQogQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRV9FQ1JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVBRVJfSU5KRUNUIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lFQVNQTT15CiBDT05GSUdfUENJRUFTUE1fREVCVUc9eQogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldApAQCAtMzY3LDYgKzM4NSw3IEBACiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0lETEU9eQogQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQogQ09ORklHX05FVD15CkBAIC00MjAsNiArNDM5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDIsNyArNDYyLDYgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldApAQCAtNDUwLDYgKzQ2OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQ1OCw3ICs0NzgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NzEsNiArNDkwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00ODAsOSArNTAwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTYyMCw2ICs2NDAsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTDI0PXkKQEAgLTY0MSw2ICs2NjIsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY2OCw2ICs2OTAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02ODYsNyArNzA5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzgyLDYgKzgwOSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzg5LDEwICs4MTcsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NDIsMTQgKzg2NywxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTAyLDYgKzkzMiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKQEAgLTkzMSw2ICs5NjIsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CkBAIC05NTgsMTUgKzk5MCwxNyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTk4NywxNCArMTAyMSwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMDQ1LDYgKzEwODksNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDU2LDkgKzExMDEsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotQ09ORklHX1RIRVJNQUxfSFdNT049eQogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwNzksOCArMTEyMiwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogQ09ORklHX01FRElBX1NVUFBPUlQ9eQogCkBAIC0xMDk5LDYgKzExNDQsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTE4Myw3ICsxMjI5LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjA2LDYgKzEyNTEsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEzMDEsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTM3Myw2ICsxNDIwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xNDIyLDYgKzE0NzAsNyBAQAogQ09ORklHX0VYVDRfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQyPXkKQEAgLTE0MzEsOSArMTQ4MCwxMSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQlRSRlNfRlM9eQogIyBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDk5LDEyICsxNTUwLDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTU3Niw2ICsxNjI3LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2MTAsMTggKzE2NjIsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApAQCAtMTYzMywxMSArMTY5MCwxMSBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmViMDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY1Miw3ICsxNzA5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNjk0LDExICsxNzUwLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3NjQsNSArMTgyMiw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcndzZW0uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcndzZW0uaAppbmRleCAxOTg3ZjNlLi4wNmUyMjUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J3c2VtLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oCkBAIC00MSw3ICs0MSw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKLQl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIFwKKwl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBfX1NQSU5fTE9DS19VTkxPQ0tFRCgobmFtZSkud2FpdF9sb2NrKSwgXAogCSAgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgXAogCSAgX19SV1NFTV9ERVBfTUFQX0lOSVQobmFtZSkgfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMKaW5kZXggNmI1ZDE5MS4uYTM1MWVkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbWFzay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYwpAQCAtNjgsNyArNjgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGltYXNrX2lycV9jaGlwID0gewotCS50eXBlbmFtZQk9ICJTUi5JTUFTSyIsCisJLm5hbWUJCT0gIlNSLklNQVNLIiwKIAkubWFzawkJPSBtYXNrX2ltYXNrX2lycSwKIAkudW5tYXNrCQk9IHVubWFza19pbWFza19pcnEsCiAJLm1hc2tfYWNrCT0gbWFza19pbWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKaW5kZXggNmMwOTJmMS4uMDZlN2UyOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYwpAQCAtODUsNyArODUsNyBAQAogc3RhdGljIHZvaWQgZW5kX2ludGNfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGludGNfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIklOVEMiLAorCS5uYW1lID0gIklOVEMiLAogCS5zdGFydHVwID0gc3RhcnR1cF9pbnRjX2lycSwKIAkuc2h1dGRvd24gPSBzaHV0ZG93bl9pbnRjX2lycSwKIAkuZW5hYmxlID0gZW5hYmxlX2ludGNfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCmluZGV4IDAxNTE5MzMuLmJiNDA3ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKQEAgLTE1Miw4ICsxNTIsNiBAQAogCW1vdi5sCTFmLCByMAogCW1vdi5sCUByMCwgcjYKIAotCXN0aQotCiAJbW92LmwJM2YsIHIwCiAJbW92LmwJNGYsIHIxCiAJbW92CXIxNSwgcjQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggMzUwOTc3NS4uNTQ5MWIwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKyNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKQEAgLTM3Myw2ICszNzQsMTggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0geworCS5tb2RlID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWRtYS1lbmdpbmUiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLApAQCAtMzg1LDYgKzM5OCw3IEBACiAJJnZwdV9kZXZpY2UsCiAJJnZldV9kZXZpY2UsCiAJJmpwdV9kZXZpY2UsCisJJmRtYV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3MjJfZGV2aWNlc19zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwppbmRleCAyYzkwMWY0Li4xMmZmNTZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm5hbWUgPSAiVE1VMCIsCkBAIC0yNDAsNiArMjQxLDE4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZSA9IChTSERNQV9NSVhfSVJRIHwgU0hETUFfRE1BT1IxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLWRtYS1lbmdpbmUiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzgwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCkBAIC0yNDksNiArMjYyLDcgQEAKIAkmdG11NV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCisJJmRtYV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3ODBfZGV2aWNlc19zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYyBiL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKaW5kZXggYmM0ZDhkNy4uZDc2YTIzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCkBAIC0yMCwxMSArMjAsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2R3YXJmLmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgotI2luY2x1ZGUgPGFzbS9kd2FyZi5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKIC8qIFJlc2VydmUgZW5vdWdoIG1lbW9yeSBmb3IgdHdvIHN0YWNrIGZyYW1lcyAqLwpAQCAtNTU1LDkgKzU1NSwzMCBAQAogCSAqIE5PVEU6IHRoZSByZXR1cm4gYWRkcmVzcyBpcyBndWFyYW50ZWVkIHRvIGJlIHNldHVwIGJ5IHRoZQogCSAqIHRpbWUgdGhpcyBmdW5jdGlvbiBtYWtlcyBpdHMgZmlyc3QgZnVuY3Rpb24gY2FsbC4KIAkgKi8KLQlpZiAoIXBjICYmICFwcmV2KQorCWlmICghcGMgfHwgIXByZXYpCiAJCXBjID0gKHVuc2lnbmVkIGxvbmcpY3VycmVudF90ZXh0X2FkZHIoKTsKIAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwkvKgorCSAqIElmIG91ciBzdGFjayBoYXMgYmVlbiBwYXRjaGVkIGJ5IHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIKKwkgKiB0aGVuIHdlIG1pZ2h0IHNlZSB0aGUgYWRkcmVzcyBvZiByZXR1cm5fdG9faGFuZGxlcigpIHdoZXJlIHdlCisJICogZXhwZWN0ZWQgdG8gZmluZCB0aGUgcmVhbCByZXR1cm4gYWRkcmVzcy4KKwkgKi8KKwlpZiAocGMgPT0gKHVuc2lnbmVkIGxvbmcpJnJldHVybl90b19oYW5kbGVyKSB7CisJCWludCBpbmRleCA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCisJCS8qCisJCSAqIFdlIGN1cnJlbnRseSBoYXZlIG5vIHdheSBvZiB0cmFja2luZyBob3cgbWFueQorCQkgKiByZXR1cm5fdG9faGFuZGxlcigpJ3Mgd2UndmUgc2Vlbi4gSWYgdGhlcmUgaXMgbW9yZQorCQkgKiB0aGFuIG9uZSBwYXRjaGVkIHJldHVybiBhZGRyZXNzIG9uIG91ciBzdGFjaywKKwkJICogY29tcGxhaW4gbG91ZGx5LgorCQkgKi8KKwkJV0FSTl9PTihpbmRleCA+IDApOworCisJCXBjID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5yZXQ7CisJfQorI2VuZGlmCisKIAlmcmFtZSA9IG1lbXBvb2xfYWxsb2MoZHdhcmZfZnJhbWVfcG9vbCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFmcmFtZSkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGR3YXJmIGZyYW1lXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggNjhkOTIyMy4uM2ViODQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTEyMSw3ICsxMjEsNyBAQAogRU5UUlkocmVzdW1lX3VzZXJzcGFjZSkKIAkhIHI4OiBjdXJyZW50X3RocmVhZF9pbmZvCiAJY2xpCi0JVFJBQ0VfSVJRU19PZkYKKwlUUkFDRV9JUlFTX09GRgogCW1vdi5sCUAoVElfRkxBR1MscjgpLCByMAkJISBjdXJyZW50X3RocmVhZF9pbmZvLT5mbGFncwogCXRzdAkjKF9USUZfV09SS19NQVNLICYgMHhmZiksIHIwCiAJYnQvcwlfX3Jlc3RvcmVfYWxsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCmluZGV4IGEzZGNjNmQuLjJjNDhlMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCkBAIC0yOTEsMzEgKzI5MSw0OCBAQAogCXJldHVybiBzeXNjYWxsc19tZXRhZGF0YVtucl07CiB9CiAKLXZvaWQgYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQoraW50IHN5c2NhbGxfbmFtZV90b19ucihjaGFyICpuYW1lKQoreworCWludCBpOworCisJaWYgKCFzeXNjYWxsc19tZXRhZGF0YSkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBOUl9zeXNjYWxsczsgaSsrKQorCQlpZiAoc3lzY2FsbHNfbWV0YWRhdGFbaV0pCisJCQlpZiAoIXN0cmNtcChzeXNjYWxsc19tZXRhZGF0YVtpXS0+bmFtZSwgbmFtZSkpCisJCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIHNldF9zeXNjYWxsX2VudGVyX2lkKGludCBudW0sIGludCBpZCkKK3sKKwlzeXNjYWxsc19tZXRhZGF0YVtudW1dLT5lbnRlcl9pZCA9IGlkOworfQorCit2b2lkIHNldF9zeXNjYWxsX2V4aXRfaWQoaW50IG51bSwgaW50IGlkKQoreworCXN5c2NhbGxzX21ldGFkYXRhW251bV0tPmV4aXRfaWQgPSBpZDsKK30KKworc3RhdGljIGludCBfX2luaXQgYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQogewogCWludCBpOwogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICptZXRhOwogCXVuc2lnbmVkIGxvbmcgKipwc3lzX3N5c2NhbGxfdGFibGUgPSAmc3lzX2NhbGxfdGFibGU7Ci0Jc3RhdGljIGF0b21pY190IHJlZnM7Ci0KLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnJlZnMpICE9IDEpCi0JCWdvdG8gZW5kOwogCiAJc3lzY2FsbHNfbWV0YWRhdGEgPSBremFsbG9jKHNpemVvZigqc3lzY2FsbHNfbWV0YWRhdGEpICoKIAkJCQkJRlRSQUNFX1NZU0NBTExfTUFYLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKSB7CiAJCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TWVNDQUxMX01BWDsgaSsrKSB7CiAJCW1ldGEgPSBmaW5kX3N5c2NhbGxfbWV0YShwc3lzX3N5c2NhbGxfdGFibGVbaV0pOwogCQlzeXNjYWxsc19tZXRhZGF0YVtpXSA9IG1ldGE7CiAJfQotCXJldHVybjsKIAotCS8qIFBhcmFub2lkOiBhdm9pZCBvdmVyZmxvdyAqLwotZW5kOgotCWF0b21pY19kZWMoJnJlZnMpOworCXJldHVybiAwOwogfQorYXJjaF9pbml0Y2FsbChhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKTsKICNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NZU0NBTExTICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKaW5kZXggNGZmNTA3Mi4uYjhmYTY1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYwpAQCAtMTQ3LDYgKzE0Nyw5IEBACiAKIHZvaWQgX19pb21lbSAqZ2VuZXJpY19pb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpCiB7CisJaWYgKFBYU0VHKGFkZHIpID49IFAxU0VHKQorCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7CisKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgZ2VuZXJpY19pb19iYXNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwppbmRleCA3Y2I5MzNiLi5lYWM3ZGE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTA2LDcgKzEwNyw3IEBACiBzdGF0aWMgdW5pb24gaXJxX2N0eCAqc29mdGlycV9jdHhbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKICNlbmRpZgogCi1hc21saW5rYWdlIGludCBkb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIF9faXJxX2VudHJ5IGludCBkb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYwppbmRleCA1NDhmNjYwLi5jYmNlNjM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTMzLDQgKzEzNCw2IEBACiAKIAlpZiAoIXNoX212Lm12X25yX2lycXMpCiAJCXNoX212Lm12X25yX2lycXMgPSBOUl9JUlFTOworCisJX19zZXRfaW9fcG9ydF9iYXNlKFAyU0VHKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGY5ZDQ0ZjguLjk5YjRmYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNTQ5LDYgKzU0OSw4IEBACiAKIAlpZiAoY3B1ID09IDApCiAJCXNlcV9wcmludGYobSwgIm1hY2hpbmVcdFx0OiAlc1xuIiwgZ2V0X3N5c3RlbV90eXBlKCkpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAogCXNlcV9wcmludGYobSwgInByb2Nlc3Nvclx0OiAlZFxuIiwgY3B1KTsKIAlzZXFfcHJpbnRmKG0sICJjcHUgZmFtaWx5XHQ6ICVzXG4iLCBpbml0X3V0c25hbWUoKS0+bWFjaGluZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwppbmRleCA4ZGJlMjZiLi40NDRjY2UzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKQEAgLTg0LDYgKzg0LDIxIEBACiBERUNMQVJFX0VYUE9SVChfX21vdnN0cl9pNF9ldmVuKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyX2k0X29kZCk7CiBERUNMQVJFX0VYUE9SVChfX21vdnN0clNJMTJfaTQpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW0pOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTgpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTEyKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kxNik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMjApOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTI0KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kyOCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMzIpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTM2KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k0MCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNDQpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTQ4KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k1Mik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNTYpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTYwKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92bWVtX2k0X2V2ZW4pOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1faTRfb2RkKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kxMl9pNCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDY3Mjk3MDMuLjNkYjM3NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQlpZiAoIShjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQorCWlmICghKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCiAJCXJldHVybiAwOwogCiAJc2V0X3VzZWRfbWF0aCgpOwpAQCAtMTU4LDcgKzE1OCw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JaWYgKCEoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwlpZiAoIShib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gMDsKIAogCWlmICghdXNlZF9tYXRoKCkpIHsKQEAgLTE5OSw3ICsxOTksNyBAQAogI3VuZGVmIENPUFkKIAogI2lmZGVmIENPTkZJR19TSF9GUFUKLQlpZiAoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSB7CisJaWYgKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgewogCQlpbnQgb3duZWRfZnA7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIApAQCAtNDcyLDYgKzQ3Miw3IEBACiAJCWVyciB8PSBfX3B1dF91c2VyKE9SX1IwX1IwLCAmZnJhbWUtPnJldGNvZGVbNl0pOwogCQllcnIgfD0gX19wdXRfdXNlcigoX19OUl9ydF9zaWdyZXR1cm4pLCAmZnJhbWUtPnJldGNvZGVbN10pOwogCQlyZWdzLT5wciA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZS0+cmV0Y29kZTsKKwkJZmx1c2hfaWNhY2hlX3JhbmdlKHJlZ3MtPnByLCByZWdzLT5wciArIHNpemVvZihmcmFtZS0+cmV0Y29kZSkpOwogCX0KIAogCWlmIChlcnIpCkBAIC00OTcsOCArNDk4LDYgQEAKIAlwcl9kZWJ1ZygiU0lHIGRlbGl2ZXIgKCVzOiVkKTogc3A9JXAgcGM9JTA4bHggcHI9JTA4bHhcbiIsCiAJCSBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgZnJhbWUsIHJlZ3MtPnBjLCByZWdzLT5wcik7CiAKLQlmbHVzaF9pY2FjaGVfcmFuZ2UocmVncy0+cHIsIHJlZ3MtPnByICsgc2l6ZW9mKGZyYW1lLT5yZXRjb2RlKSk7Ci0KIAlyZXR1cm4gMDsKIAogZ2l2ZV9zaWdzZWd2OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc21wLmMgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwppbmRleCA0NDJkOGQ0Li4xNjBkYjEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwpAQCAtMzUsNiArMzUsOCBAQAogewogCXN0cnVjdCBzaF9jcHVpbmZvICpjID0gY3B1X2RhdGEgKyBjcHU7CiAKKwltZW1jcHkoYywgJmJvb3RfY3B1X2RhdGEsIHNpemVvZihzdHJ1Y3Qgc2hfY3B1aW5mbykpOworCiAJYy0+bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwppbmRleCA2YWJhOWFmLi43YTJlZTNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KQEAgLTU0LDggKzU1LDggQEAKIC8qIGJpdGZpZWxkOiAxOiB3YXJuIDI6IGZpeHVwIDQ6IHNpZ25hbCAtPiBjb21iaW5hdGlvbnMgMnw0ICYmIDF8Mnw0IGFyZSBub3QKICAgIHZhbGlkISAqLwogc3RhdGljIGludCBzZV91c2VybW9kZSA9IDM7Ci0vKiAwOiBubyB3YXJuaW5nIDE6IHByaW50IGEgd2FybmluZyBtZXNzYWdlICovCi1zdGF0aWMgaW50IHNlX2tlcm5tb2RlX3dhcm4gPSAxOworLyogMDogbm8gd2FybmluZyAxOiBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSwgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLworc3RhdGljIGludCBzZV9rZXJubW9kZV93YXJuOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBjb25zdCBjaGFyICpzZV91c2VybW9kZV9hY3Rpb25bXSA9IHsKQEAgLTE1OSwxMiArMTYwLDEyIEBACiAKIAlvb3BzX2VudGVyKCk7CiAKLQljb25zb2xlX3ZlcmJvc2UoKTsKIAlzcGluX2xvY2tfaXJxKCZkaWVfbG9jayk7CisJY29uc29sZV92ZXJib3NlKCk7CiAJYnVzdF9zcGlubG9ja3MoMSk7CiAKIAlwcmludGsoIiVzOiAlMDRseCBbIyVkXVxuIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllX2NvdW50ZXIpOwotCisJc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSgpOwogCXByaW50X21vZHVsZXMoKTsKIAlzaG93X3JlZ3MocmVncyk7CiAKQEAgLTE4MCw2ICsxODEsNyBAQAogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOworCW9vcHNfZXhpdCgpOwogCiAJaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSkKIAkJY3Jhc2hfa2V4ZWMocmVncyk7CkBAIC0xOTAsNyArMTkyLDYgQEAKIAlpZiAocGFuaWNfb25fb29wcykKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOwogCi0Jb29wc19leGl0KCk7CiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIApAQCAtNDUyLDYgKzQ1MywxMiBAQAogCXVfaW50IHJtOwogCWludCByZXQsIGluZGV4OwogCisJLyoKKwkgKiBYWFg6IFdlIGNhbid0IGhhbmRsZSBtaXhlZCAxNi8zMi1iaXQgaW5zdHJ1Y3Rpb25zIHlldAorCSAqLworCWlmIChpbnN0cnVjdGlvbl9zaXplKGluc3RydWN0aW9uKSAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWluZGV4ID0gKGluc3RydWN0aW9uPj44KSYxNTsJLyogMHgwRjAwICovCiAJcm0gPSByZWdzLT5yZWdzW2luZGV4XTsKIApAQCAtNjE5LDkgKzYyNiw5IEBACiAKIAkJc2VfdXNlciArPSAxOwogCi0jaWZuZGVmIENPTkZJR19DUFVfU0gyQQogCQlzZXRfZnMoVVNFUl9EUyk7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sICh1MTYgKikocmVncy0+cGMgJiB+MSksIDIpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sIChpbnNuX3NpemVfdCAqKShyZWdzLT5wYyAmIH4xKSwKKwkJCQkgICBzaXplb2YoaW5zdHJ1Y3Rpb24pKSkgewogCQkJc2V0X2ZzKG9sZGZzKTsKIAkJCWdvdG8gdXNwYWNlX3NlZ3Y7CiAJCX0KQEAgLTYzMyw3ICs2NDAsNiBAQAogCQkJICAgICAgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCiAJCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKXJlZ3MtPnBjLAogCQkJICAgICAgIGluc3RydWN0aW9uKTsKLSNlbmRpZgogCiAJCWlmIChzZV91c2VybW9kZSAmIDIpCiAJCQlnb3RvIGZpeHVwOwpAQCAtNjczLDEyICs2NzksNiBAQAogCX0gZWxzZSB7CiAJCXNlX3N5cyArPSAxOwogCi0JCWlmIChzZV9rZXJubW9kZV93YXJuKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJVbmFsaWduZWQga2VybmVsIGFjY2VzcyAiCi0JCQkgICAgICAgIm9uIGJlaGFsZiBvZiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKXJlZ3MtPnBjLAotCQkJICAgICAgIGluc3RydWN0aW9uKTsKLQogCQlpZiAocmVncy0+cGMgJiAxKQogCQkJZGllKCJ1bmFsaWduZWQgcHJvZ3JhbSBjb3VudGVyIiwgcmVncywgZXJyb3JfY29kZSk7CiAKQEAgLTY5Miw2ICs2OTIsMTIgQEAKIAkJCWRpZSgiaW5zbiBmYXVsdGluZyBpbiBkb19hZGRyZXNzX2Vycm9yIiwgcmVncywgMCk7CiAJCX0KIAorCQlpZiAoc2Vfa2Vybm1vZGVfd2FybikKKwkJCXByaW50ayhLRVJOX05PVElDRSAiVW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgIgorCQkJICAgICAgICJvbiBiZWhhbGYgb2YgXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAorCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKilyZWdzLT5wYywKKwkJCSAgICAgICBpbnN0cnVjdGlvbik7CisKIAkJaGFuZGxlX3VuYWxpZ25lZF9hY2Nlc3MoaW5zdHJ1Y3Rpb24sIHJlZ3MsCiAJCQkJCSZ1c2VyX21lbV9hY2Nlc3MsIDApOwogCQlzZXRfZnMob2xkZnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDY0ZGMxYWQuLjdmN2I1MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTIyNyw3ICsyMjcsNyBAQAogCiBjaG9pY2UKIAlwcm9tcHQgIkh1Z2VUTEIgcGFnZSBzaXplIgotCWRlcGVuZHMgb24gSFVHRVRMQl9QQUdFICYmIChDUFVfU0g0IHx8IENQVV9TSDUpICYmIE1NVQorCWRlcGVuZHMgb24gSFVHRVRMQl9QQUdFCiAJZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV8xTUIgaWYgUEFHRV9TSVpFXzY0S0IKIAlkZWZhdWx0IEhVR0VUTEJfUEFHRV9TSVpFXzY0SwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwppbmRleCBiMjQ1M2JiLi5iN2YyMzVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNkZWZpbmUgTUFYX0RDQUNIRV9QQUdFUwk2NAkvKiBYWFg6IFR1bmUgZm9yIHdheXMgKi8KICNkZWZpbmUgTUFYX0lDQUNIRV9QQUdFUwkzMgogCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlX29uZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4ZWNfb2Zmc2V0KTsKIAogLyoKQEAgLTQzLDcgKzQzLDcgQEAKICAqIENhbGxlZCBmcm9tIGtlcm5lbC9tb2R1bGUuYzpzeXNfaW5pdF9tb2R1bGUgYW5kIHJvdXRpbmUgZm9yIGEub3V0IGZvcm1hdCwKICAqIHNpZ25hbCBoYW5kbGVyIGNvZGUgYW5kIGtwcm9iZXMgY29kZQogICovCi1zdGF0aWMgdm9pZCBzaDRfZmx1c2hfaWNhY2hlX3JhbmdlKHZvaWQgKmFyZ3MpCitzdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBzaDRfZmx1c2hfaWNhY2hlX3JhbmdlKHZvaWQgKmFyZ3MpCiB7CiAJc3RydWN0IGZsdXNoZXJfZGF0YSAqZGF0YSA9IGFyZ3M7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwpAQCAtNzIsNiArNzIsNyBAQAogCiAJZm9yICh2ID0gc3RhcnQ7IHYgPCBlbmQ7IHYgKz0gTDFfQ0FDSEVfQllURVMpIHsKIAkJdW5zaWduZWQgbG9uZyBpY2FjaGVhZGRyOworCQlpbnQgaiwgbjsKIAogCQlfX29jYndiKHYpOwogCkBAIC03OSw4ICs4MCwxMCBAQAogCQkJCWNwdV9kYXRhLT5pY2FjaGUuZW50cnlfbWFzayk7CiAKIAkJLyogQ2xlYXIgaS1jYWNoZSBsaW5lIHZhbGlkLWJpdCAqLworCQluID0gYm9vdF9jcHVfZGF0YS5pY2FjaGUubl9hbGlhc2VzOwogCQlmb3IgKGkgPSAwOyBpIDwgY3B1X2RhdGEtPmljYWNoZS53YXlzOyBpKyspIHsKLQkJCV9fcmF3X3dyaXRlbCgwLCBpY2FjaGVhZGRyKTsKKwkJCWZvciAoaiA9IDA7IGogPCBuOyBqKyspCisJCQkJX19yYXdfd3JpdGVsKDAsIGljYWNoZWFkZHIgKyAoaiAqIFBBR0VfU0laRSkpOwogCQkJaWNhY2hlYWRkciArPSBjcHVfZGF0YS0+aWNhY2hlLndheV9pbmNyOwogCQl9CiAJfQpAQCAtODksOCArOTIsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBwaHlzKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX29uZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgZXhlY19vZmZzZXQgPSAwOwogCkBAIC0xMDMsOCArMTA1LDcgQEAKIAkJZXhlY19vZmZzZXQgPSAweDIwMDAwMDAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fZmx1c2hfY2FjaGVfNDA5NihzdGFydCB8IFNIX0NBQ0hFX0FTU09DLAotCQkJICAgUDFTRUdBRERSKHBoeXMpLCBleGVjX29mZnNldCk7CisJX19mbHVzaF9jYWNoZV9vbmUoc3RhcnQgfCBTSF9DQUNIRV9BU1NPQywgUDFTRUdBRERSKHBoeXMpLCBleGVjX29mZnNldCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0xMjksOCArMTMwLDggQEAKIAogCQkvKiBMb29wIGFsbCB0aGUgRC1jYWNoZSAqLwogCQluID0gYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzOwotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBhZGRyICs9IDQwOTYpCi0JCQlmbHVzaF9jYWNoZV80MDk2KGFkZHIsIHBoeXMpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBhZGRyICs9IFBBR0VfU0laRSkKKwkJCWZsdXNoX2NhY2hlX29uZShhZGRyLCBwaHlzKTsKIAl9CiAKIAl3bWIoKTsKQEAgLTMxOCwxMSArMzE5LDExIEBACiAJLyogV2Ugb25seSBuZWVkIHRvIGZsdXNoIEQtY2FjaGUgd2hlbiB3ZSBoYXZlIGFsaWFzICovCiAJaWYgKChhZGRyZXNzXnBoeXMpICYgYWxpYXNfbWFzaykgewogCQkvKiBMb29wIDRLIG9mIHRoZSBELWNhY2hlICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoCisJCWZsdXNoX2NhY2hlX29uZSgKIAkJCUNBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAoYWRkcmVzcyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJCS8qIExvb3AgYW5vdGhlciA0SyBvZiB0aGUgRC1jYWNoZSAqLwotCQlmbHVzaF9jYWNoZV80MDk2KAorCQlmbHVzaF9jYWNoZV9vbmUoCiAJCQlDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHBoeXMgJiBhbGlhc19tYXNrKSwKIAkJCXBoeXMpOwogCX0KQEAgLTMzNyw3ICszMzgsNyBAQAogCQkgKiBrZXJuZWwgaGFzIG5ldmVyIGV4ZWN1dGVkIHRoZSBjb2RlIHRocm91Z2ggaXRzIGlkZW50aXR5CiAJCSAqIHRyYW5zbGF0aW9uLgogCQkgKi8KLQkJZmx1c2hfY2FjaGVfNDA5NigKKwkJZmx1c2hfY2FjaGVfb25lKAogCQkJQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8IChhZGRyZXNzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAl9CkBAIC0zOTMsNyArMzk0LDcgQEAKIH0KIAogLyoqCi0gKiBfX2ZsdXNoX2NhY2hlXzQwOTYKKyAqIF9fZmx1c2hfY2FjaGVfb25lCiAgKgogICogQGFkZHI6ICBhZGRyZXNzIGluIG1lbW9yeSBtYXBwZWQgY2FjaGUgYXJyYXkKICAqIEBwaHlzOiAgUDEgYWRkcmVzcyB0byBmbHVzaCAoaGFzIHRvIG1hdGNoIHRhZ3MgaWYgYWRkciBoYXMgJ0EnIGJpdApAQCAtNDA2LDcgKzQwNyw3IEBACiAgKiBvcGVyYXRpb24gKHB1cmdlL3dyaXRlLWJhY2spIGlzIHNlbGVjdGVkIGJ5IHRoZSBsb3dlciAyIGJpdHMgb2YKICAqICdwaHlzJy4KICAqLwotc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAorc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleGVjX29mZnNldCkKIHsKIAlpbnQgd2F5X2NvdW50OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKaW5kZXggMmNhZGVlMi4uMjYwMTkzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCkBAIC03OCw3ICs3OCw3IEBACiAvKgogICogV3JpdGViYWNrJkludmFsaWRhdGUgdGhlIEQtY2FjaGUgb2YgdGhlIHBhZ2UKICAqLwotc3RhdGljIHZvaWQgX19mbHVzaF9kY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIHBoeXMpCitzdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5cykKIHsKIAl1bnNpZ25lZCBsb25nIHdheXMsIHdheXNpemUsIGFkZHJzdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCV9fZmx1c2hfZGNhY2hlX3BhZ2UoUEhZU0FERFIocGFnZV9hZGRyZXNzKHBhZ2UpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNoNzcwNV9mbHVzaF9jYWNoZV9hbGwodm9pZCAqYXJncykKK3N0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHNoNzcwNV9mbHVzaF9jYWNoZV9hbGwodm9pZCAqYXJncykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLmMgYi9hcmNoL3NoL21tL2NhY2hlLmMKaW5kZXggMzVjMzdiNy4uYTJkYzdmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCXJldHVybjsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCWlmIChwZm5fdmFsaWQocGZuKSAmJiBwYWdlX21hcHBpbmcocGFnZSkpIHsKKwlpZiAocGZuX3ZhbGlkKHBmbikpIHsKIAkJaW50IGRpcnR5ID0gdGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKIAkJaWYgKGRpcnR5KSB7CiAJCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7CkBAIC0yNjUsNiArMjY1LDggQEAKIAogdm9pZCBfX2luaXQgY3B1X2NhY2hlX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgY2FjaGVfZGlzYWJsZWQgPSAhKF9fcmF3X3JlYWRsKENDUikgJiBDQ1JfQ0FDSEVfRU5BQkxFKTsKKwogCWNvbXB1dGVfYWxpYXMoJmJvb3RfY3B1X2RhdGEuaWNhY2hlKTsKIAljb21wdXRlX2FsaWFzKCZib290X2NwdV9kYXRhLmRjYWNoZSk7CiAJY29tcHV0ZV9hbGlhcygmYm9vdF9jcHVfZGF0YS5zY2FjaGUpOwpAQCAtMjczLDYgKzI3NSwxMyBAQAogCV9fZmx1c2hfcHVyZ2VfcmVnaW9uCQk9IG5vb3BfX2ZsdXNoX3JlZ2lvbjsKIAlfX2ZsdXNoX2ludmFsaWRhdGVfcmVnaW9uCT0gbm9vcF9fZmx1c2hfcmVnaW9uOwogCisJLyoKKwkgKiBObyBmbHVzaGluZyBpcyBuZWNlc3NhcnkgaW4gdGhlIGRpc2FibGVkIGNhY2hlIGNhc2Ugc28gd2UgY2FuCisJICoganVzdCBrZWVwIHRoZSBub29wIGZ1bmN0aW9ucyBpbiBsb2NhbF9mbHVzaF8uLigpIGFuZCBfX2ZsdXNoXy4uKCkKKwkgKi8KKwlpZiAodW5saWtlbHkoY2FjaGVfZGlzYWJsZWQpKQorCQlnb3RvIHNraXA7CisKIAlpZiAoYm9vdF9jcHVfZGF0YS5mYW1pbHkgPT0gQ1BVX0ZBTUlMWV9TSDIpIHsKIAkJZXh0ZXJuIHZvaWQgX193ZWFrIHNoMl9jYWNoZV9pbml0KHZvaWQpOwogCkBAIC0zMTIsNSArMzIxLDYgQEAKIAkJc2g1X2NhY2hlX2luaXQoKTsKIAl9CiAKK3NraXA6CiAJZW1pdF9jYWNoZV9wYXJhbXMoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKaW5kZXggYzMyNTA2MS4uYTg2ZWFhOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkgKgogCSAqIFBNQiBlbnRyaWVzIGFyZSBhbGwgcHJlLWZhdWx0ZWQuCiAJICovCi0JaWYgKHVubGlrZWx5KHNpemUgPj0gMHgxMDAwMDAwKSkgeworCWlmICh1bmxpa2VseShwaHlzX2FkZHIgPj0gUDFTRUcpKSB7CiAJCXVuc2lnbmVkIGxvbmcgbWFwcGVkID0gcG1iX3JlbWFwKGFkZHIsIHBoeXNfYWRkciwgc2l6ZSwgZmxhZ3MpOwogCiAJCWlmIChsaWtlbHkobWFwcGVkKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggYjFhNzE0YS4uYWFkZTMxMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wbWIuYworKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0zMyw2ICszMyw4IEBACiAKICNkZWZpbmUgTlJfUE1CX0VOVFJJRVMJMTYKIAorc3RhdGljIHZvaWQgX19wbWJfdW5tYXAoc3RydWN0IHBtYl9lbnRyeSAqKTsKKwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwbWJfY2FjaGU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwbWJfbWFwOwogCkBAIC0yMTgsOSArMjIwLDEwIEBACiBsb25nIHBtYl9yZW1hcCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJwOworCXN0cnVjdCBwbWJfZW50cnkgKnBtYnAsICpwbWJlOwogCXVuc2lnbmVkIGxvbmcgd2FudGVkOwogCWludCBwbWJfZmxhZ3MsIGk7CisJbG9uZyBlcnI7CiAKIAkvKiBDb252ZXJ0IHR5cGljYWwgcGdwcm90IHZhbHVlIHRvIHRoZSBQTUIgZXF1aXZhbGVudCAqLwogCWlmIChmbGFncyAmIF9QQUdFX0NBQ0hBQkxFKSB7CkBAIC0yMzYsMjAgKzIzOSwyMiBAQAogCiBhZ2FpbjoKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspIHsKLQkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKIAkJaW50IHJldDsKIAogCQlpZiAoc2l6ZSA8IHBtYl9zaXplc1tpXS5zaXplKQogCQkJY29udGludWU7CiAKIAkJcG1iZSA9IHBtYl9hbGxvYyh2YWRkciwgcGh5cywgcG1iX2ZsYWdzIHwgcG1iX3NpemVzW2ldLmZsYWcpOwotCQlpZiAoSVNfRVJSKHBtYmUpKQotCQkJcmV0dXJuIFBUUl9FUlIocG1iZSk7CisJCWlmIChJU19FUlIocG1iZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIocG1iZSk7CisJCQlnb3RvIG91dDsKKwkJfQogCiAJCXJldCA9IHNldF9wbWJfZW50cnkocG1iZSk7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJcG1iX2ZyZWUocG1iZSk7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBvdXQ7CiAJCX0KIAogCQlwaHlzCSs9IHBtYl9zaXplc1tpXS5zaXplOwpAQCAtMjY0LDEyICsyNjksMjUgQEAKIAkJCXBtYnAtPmxpbmsgPSBwbWJlOwogCiAJCXBtYnAgPSBwbWJlOworCisJCS8qCisJCSAqIEluc3RlYWQgb2YgdHJ5aW5nIHNtYWxsZXIgc2l6ZXMgb24gZXZlcnkgaXRlcmF0aW9uCisJCSAqIChldmVuIGlmIHdlIHN1Y2NlZWQgaW4gYWxsb2NhdGluZyBzcGFjZSksIHRyeSB1c2luZworCQkgKiBwbWJfc2l6ZXNbaV0uc2l6ZSBhZ2Fpbi4KKwkJICovCisJCWktLTsKIAl9CiAKIAlpZiAoc2l6ZSA+PSAweDEwMDAwMDApCiAJCWdvdG8gYWdhaW47CiAKIAlyZXR1cm4gd2FudGVkIC0gc2l6ZTsKKworb3V0OgorCWlmIChwbWJwKQorCQlfX3BtYl91bm1hcChwbWJwKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgcG1iX3VubWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTI4MywxMiArMzAxLDE5IEBACiAJaWYgKHVubGlrZWx5KCFwbWJlKSkKIAkJcmV0dXJuOwogCisJX19wbWJfdW5tYXAocG1iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcG1iX3VubWFwKHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCit7CiAJV0FSTl9PTighdGVzdF9iaXQocG1iZS0+ZW50cnksICZwbWJfbWFwKSk7CiAKIAlkbyB7CiAJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmxpbmsgPSBwbWJlOwogCi0JCWNsZWFyX3BtYl9lbnRyeShwbWJlKTsKKwkJaWYgKHBtYmUtPmVudHJ5ICE9IFBNQl9OT19FTlRSWSkKKwkJCWNsZWFyX3BtYl9lbnRyeShwbWJlKTsKKwogCQlwbWJlID0gcG1ibGluay0+bGluazsKIAogCQlwbWJfZnJlZShwbWJsaW5rKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCA5N2ZjYTQ2Li4wNWVmNTM4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0yNiw2ICsyNiw3IEBACiAJc2VsZWN0IFJUQ19DTEFTUwogCXNlbGVjdCBSVENfRFJWX000OFQ1OQogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCisJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKIAlzZWxlY3QgSEFWRV9ETUFfQVRUUlMKIAlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCiAKQEAgLTQ4LDYgKzQ5LDcgQEAKIAlzZWxlY3QgUlRDX0RSVl9TVU40VgogCXNlbGVjdCBSVENfRFJWX1NUQVJGSVJFCiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKKwlzZWxlY3QgUEVSRl9VU0VfVk1BTExPQwogCiBjb25maWcgQVJDSF9ERUZDT05GSUcKIAlzdHJpbmcKQEAgLTEwMiw2ICsxMDQsOSBAQAogY29uZmlnIE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSwogCWRlZl9ib29sIHkgaWYgU1BBUkM2NAogCitjb25maWcgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKKwlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKKwogY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCWJvb2wKIAlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jIGIvYXJjaC9zcGFyYy9ib290L2J0Zml4dXBwcmVwLmMKaW5kZXggNTJhNDIwOC4uYmJmOTFiOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9ib290L2J0Zml4dXBwcmVwLmMKKysrIGIvYXJjaC9zcGFyYy9ib290L2J0Zml4dXBwcmVwLmMKQEAgLTYxLDE0ICs2MSwxNCBAQAogdW5zaWduZWQgbG9uZyBsYXN0ZnJlbG5vOwogYnRmaXh1cCAqbGFzdGY7CiAKLXZvaWQgZmF0YWwodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLXZvaWQgZmF0YWwodm9pZCkKK3N0YXRpYyB2b2lkIGZhdGFsKHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CitzdGF0aWMgdm9pZCBmYXRhbCh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLCAiTWFsZm9ybWVkIG91dHB1dCBmcm9tIG9iamR1bXBcbiVzXG4iLCBidWZmZXIpOwogCWV4aXQoMSk7CiB9CiAKLWJ0Zml4dXAgKmZpbmQoaW50IHR5cGUsIGNoYXIgKm5hbWUpCitzdGF0aWMgYnRmaXh1cCAqZmluZChpbnQgdHlwZSwgY2hhciAqbmFtZSkKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CkBAIC04OCw3ICs4OCw3IEBACiAJcmV0dXJuIGFycmF5ICsgbGFzdCAtIDE7CiB9CiAKLXZvaWQgc2V0X21vZGUgKGNoYXIgKmJ1ZmZlcikKK3N0YXRpYyB2b2lkIHNldF9tb2RlIChjaGFyICpidWZmZXIpCiB7CiAgIAlmb3IgKG1vZGUgPSAwOzsgbW9kZSsrKQogCQlpZiAoYnVmZmVyW21vZGVdIDwgJzAnIHx8IGJ1ZmZlclttb2RlXSA+ICc5JykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfMzIuYyBiL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfMzIuYwppbmRleCBlOGRjOWFkLi5hYzk0NGFlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jCkBAIC0zNSwxNyArMzUsMTcgQEAKICAqIGFzIFBST00gbG9va3MgZm9yIGEub3V0IGltYWdlIG9ubHkuCiAgKi8KIAotdW5zaWduZWQgc2hvcnQgbGQyKGNoYXIgKnApCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbGQyKGNoYXIgKnApCiB7CiAJcmV0dXJuIChwWzBdIDw8IDgpIHwgcFsxXTsKIH0KIAotdW5zaWduZWQgaW50IGxkNChjaGFyICpwKQorc3RhdGljIHVuc2lnbmVkIGludCBsZDQoY2hhciAqcCkKIHsKIAlyZXR1cm4gKHBbMF0gPDwgMjQpIHwgKHBbMV0gPDwgMTYpIHwgKHBbMl0gPDwgOCkgfCBwWzNdOwogfQogCi12b2lkIHN0NChjaGFyICpwLCB1bnNpZ25lZCBpbnQgeCkKK3N0YXRpYyB2b2lkIHN0NChjaGFyICpwLCB1bnNpZ25lZCBpbnQgeCkKIHsKIAlwWzBdID0geCA+PiAyNDsKIAlwWzFdID0geCA+PiAxNjsKQEAgLTUzLDcgKzUzLDcgQEAKIAlwWzNdID0geDsKIH0KIAotdm9pZCB1c2FnZSh2b2lkKQorc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIHsKIAkvKiBmc19pbWcuZ3ogaXMgYW4gaW1hZ2Ugb2YgaW5pdGlhbCByYW1kaXNrLiAqLwogCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IHBpZ2d5YmFjayB2bWxpbnV4LmFvdXQgU3lzdGVtLm1hcCBmc19pbWcuZ3pcbiIpOwpAQCAtNjEsNyArNjEsNyBAQAogCWV4aXQoMSk7CiB9CiAKLXZvaWQgZGllKGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIGRpZShjaGFyICpzdHIpCiB7CiAJcGVycm9yIChzdHIpOwogCWV4aXQoMSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzY0LmMgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzY0LmMKaW5kZXggYzYzZmQxYi4uYTI2YTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jCisrKyBiL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfNjQuYwpAQCAtMzIsNyArMzIsNyBAQAogLyogTm90ZTogcnVuIHRoaXMgb24gYW4gYS5vdXQga2VybmVsICh1c2UgZWxmdG9hb3V0IGZvciBpdCksIGFzIFBST00gbG9va3MgZm9yIGEub3V0IGltYWdlIG9ubGx5CiAgICB1c2FnZTogcGlnZ3liYWNrIHZtbGludXggU3lzdGVtLm1hcCB0YWlsLCB3aGVyZSB0YWlsIGlzIGd6aXBwZWQgZnMgb2YgdGhlIGluaXRpYWwgcmFtZGlzayAqLwogCi12b2lkIGRpZShjaGFyICpzdHIpCitzdGF0aWMgdm9pZCBkaWUoY2hhciAqc3RyKQogewogCXBlcnJvciAoc3RyKTsKIAlleGl0KDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaAppbmRleCA0ZjYzZWQ4Li4xNjIwMDc2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaApAQCAtNywxNyArNyw3IEBACiAjaWZuZGVmIF9fU1BBUkNfSEFSRElSUV9ICiAjZGVmaW5lIF9fU1BBUkNfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotCi0vKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8gLyogWFhYIFAzIElzIGl0PyAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLwotCiAjZGVmaW5lIEhBUkRJUlFfQklUUyAgICA4CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgogCiAjZW5kaWYgLyogX19TUEFSQ19IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oCmluZGV4IGVhNDMwNTcuLmNiZjQ4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaApAQCAtNiwxMCArNiwxMCBAQAogI2lmbmRlZiBfU1BBUkNfSVJRX0gKICNkZWZpbmUgX1NQQVJDX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQogI2RlZmluZSBOUl9JUlFTICAgIDE2CiAKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKwogI2RlZmluZSBpcnFfY2Fub25pY2FsaXplKGlycSkJKGlycSkKIAogZXh0ZXJuIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAppbmRleCAwZmY5MmZhLi5mM2NiNzkwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtNDEsOCArNDEsOCBAQAogI2RlZmluZSBMT1dfT0JQX0FERFJFU1MJCV9BQygweDAwMDAwMDAwZjAwMDAwMDAsVUwpCiAjZGVmaW5lIEhJX09CUF9BRERSRVNTCQlfQUMoMHgwMDAwMDAwMTAwMDAwMDAwLFVMKQogI2RlZmluZSBWTUFMTE9DX1NUQVJUCQlfQUMoMHgwMDAwMDAwMTAwMDAwMDAwLFVMKQotI2RlZmluZSBWTUFMTE9DX0VORAkJX0FDKDB4MDAwMDAwMDIwMDAwMDAwMCxVTCkKLSNkZWZpbmUgVk1FTU1BUF9CQVNFCQlfQUMoMHgwMDAwMDAwMjAwMDAwMDAwLFVMKQorI2RlZmluZSBWTUFMTE9DX0VORAkJX0FDKDB4MDAwMDAxMDAwMDAwMDAwMCxVTCkKKyNkZWZpbmUgVk1FTU1BUF9CQVNFCQlfQUMoMHgwMDAwMDEwMDAwMDAwMDAwLFVMKQogCiAjZGVmaW5lIHZtZW1tYXAJCQkoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9CQVNFKQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAppbmRleCAyNWU4NDhmLi5kNDdhOThlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKQEAgLTYzLDYgKzYzLDEwIEBACiAJCQkgICAgIDogOiA6ICJtZW1vcnkiKTsgXAogfSB3aGlsZSAoMCkKIAorLyogVGhlIGtlcm5lbCBhbHdheXMgZXhlY3V0ZXMgaW4gVFNPIG1lbW9yeSBtb2RlbCB0aGVzZSBkYXlzLAorICogYW5kIGZ1cnRoZXJtb3JlIG1vc3Qgc3BhcmM2NCBjaGlwcyBpbXBsZW1lbnQgbW9yZSBzdHJpbmdlbnQKKyAqIG1lbW9yeSBvcmRlcmluZyB0aGFuIHJlcXVpcmVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9ucy4KKyAqLwogI2RlZmluZSBtYigpCW1lbWJhcl9zYWZlKCIjU3RvcmVMb2FkIikKICNkZWZpbmUgcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKICNkZWZpbmUgd21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdmlvLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oCmluZGV4IDZjZGJmN2UuLjlkODNkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdmlvLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaApAQCAtMjU4LDggKzI1OCw2IEBACiBzdGF0aWMgaW5saW5lIHUzMiB2aW9fZHJpbmdfYXZhaWwoc3RydWN0IHZpb19kcmluZ19zdGF0ZSAqZHIsCiAJCQkJICB1bnNpZ25lZCBpbnQgcmluZ19zaXplKQogewotCU1BWUJFX0JVSUxEX0JVR19PTighaXNfcG93ZXJfb2ZfMihyaW5nX3NpemUpKTsKLQogCXJldHVybiAoZHItPnBlbmRpbmcgLQogCQkoKGRyLT5wcm9kIC0gZHItPmNvbnMpICYgKHJpbmdfc2l6ZSAtIDEpKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9rdGxiLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9rdGxiLlMKaW5kZXggM2VhNmU4Yy4uMWQzNjE0NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwva3RsYi5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2t0bGIuUwpAQCAtMjgwLDggKzI4MCw4IEBACiAKICNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKIAkvKiBEbyBub3QgdXNlIHRoZSBUU0IgZm9yIHZtZW1tYXAuICAqLwotCW1vdgkJKFZNRU1NQVBfQkFTRSA+PiAyNCksICVnNQotCXNsbHgJCSVnNSwgMjQsICVnNQorCW1vdgkJKFZNRU1NQVBfQkFTRSA+PiA0MCksICVnNQorCXNsbHgJCSVnNSwgNDAsICVnNQogCWNtcAkJJWc0LCVnNQogCWJnZXUscG4JCSV4Y2MsIGt2bWFwX3ZtZW1tYXAKIAkgbm9wCkBAIC0yOTMsOCArMjkzLDggQEAKIAlzZXRoaQkJJWhpKE1PRFVMRVNfVkFERFIpLCAlZzUKIAljbXAJCSVnNCwgJWc1CiAJYmx1LHBuCQkleGNjLCBrdm1hcF9kdGxiX2xvbmdwYXRoCi0JIG1vdgkJKFZNQUxMT0NfRU5EID4+IDI0KSwgJWc1Ci0Jc2xseAkJJWc1LCAyNCwgJWc1CisJIG1vdgkJKFZNQUxMT0NfRU5EID4+IDQwKSwgJWc1CisJc2xseAkJJWc1LCA0MCwgJWc1CiAJY21wCQklZzQsICVnNQogCWJnZXUscG4JCSV4Y2MsIGt2bWFwX2R0bGJfbG9uZ3BhdGgKIAkgbm9wCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2xkYy5jCmluZGV4IGFkZjVmMjcuLmNiM2M3MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2xkYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2xkYy5jCkBAIC0xMjQyLDEzICsxMjQyLDEzIEBACiAJc25wcmludGYobHAtPnR4X2lycV9uYW1lLCBMRENfSVJRX05BTUVfTUFYLCAiJXMgVFgiLCBuYW1lKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKGxwLT5jZmcucnhfaXJxLCBsZGNfcngsCi0JCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfU0hBUkVELAorCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkgIGxwLT5yeF9pcnFfbmFtZSwgbHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSByZXF1ZXN0X2lycShscC0+Y2ZnLnR4X2lycSwgbGRjX3R4LAotCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRCwKKwkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAogCQkJICBscC0+dHhfaXJxX25hbWUsIGxwKTsKIAlpZiAoZXJyKSB7CiAJCWZyZWVfaXJxKGxwLT5jZmcucnhfaXJxLCBscCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMmQ2YTFiMS4uZmE1OTM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtNTYsNyArNTYsOCBAQAogCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudHNbTUFYX0hXRVZFTlRTXTsKIAl1bnNpZ25lZCBsb25nCQl1c2VkX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdFVkVOVFMpXTsKIAl1bnNpZ25lZCBsb25nCQlhY3RpdmVfbWFza1tCSVRTX1RPX0xPTkdTKE1BWF9IV0VWRU5UUyldOwotCWludCBlbmFibGVkOworCXU2NAkJCXBjcjsKKwlpbnQJCQllbmFibGVkOwogfTsKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfZXZlbnRzLCBjcHVfaHdfZXZlbnRzKSA9IHsgLmVuYWJsZWQgPSAxLCB9OwogCkBAIC02OCw4ICs2OSwzMCBAQAogI2RlZmluZSBQSUNfTE9XRVIJMHgwMgogfTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyZl9ldmVudF9lbmNvZGUoY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpwbWFwKQoreworCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpIHBtYXAtPmVuY29kaW5nIDw8IDE2KSB8IHBtYXAtPnBpY19tYXNrOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2RlY29kZSh1bnNpZ25lZCBsb25nIHZhbCwgdTE2ICplbmMsIHU4ICptc2spCit7CisJKm1zayA9IHZhbCAmIDB4ZmY7CisJKmVuYyA9IHZhbCA+PiAxNjsKK30KKworI2RlZmluZSBDKHgpIFBFUkZfQ09VTlRfSFdfQ0FDSEVfIyN4CisKKyNkZWZpbmUgQ0FDSEVfT1BfVU5TVVBQT1JURUQJMHhmZmZlCisjZGVmaW5lIENBQ0hFX09QX05PTlNFTlNFCTB4ZmZmZgorCit0eXBlZGVmIHN0cnVjdCBwZXJmX2V2ZW50X21hcCBjYWNoZV9tYXBfdAorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07CisKIHN0cnVjdCBzcGFyY19wbXUgewogCWNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcAkqKCpldmVudF9tYXApKGludCk7CisJY29uc3QgY2FjaGVfbWFwX3QJCSpjYWNoZV9tYXA7CiAJaW50CQkJCW1heF9ldmVudHM7CiAJaW50CQkJCXVwcGVyX3NoaWZ0OwogCWludAkJCQlsb3dlcl9zaGlmdDsKQEAgLTgwLDIxICsxMDMsMTA5IEBACiAJaW50CQkJCWxvd2VyX25vcDsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgdWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCB1bHRyYTNfcGVyZm1vbl9ldmVudF9tYXBbXSA9IHsKIAlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXSA9IHsgMHgwMDAwLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKIAlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdID0geyAweDAwMDEsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAogCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdID0geyAweDAwMDksIFBJQ19MT1dFUiB9LAogCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10gPSB7IDB4MDAwOSwgUElDX1VQUEVSIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICp1bHRyYTNpX2V2ZW50X21hcChpbnQgZXZlbnRfaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICp1bHRyYTNfZXZlbnRfbWFwKGludCBldmVudF9pZCkKIHsKLQlyZXR1cm4gJnVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRfaWRdOworCXJldHVybiAmdWx0cmEzX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50X2lkXTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgdWx0cmEzaV9wbXUgPSB7Ci0JLmV2ZW50X21hcAk9IHVsdHJhM2lfZXZlbnRfbWFwLAotCS5tYXhfZXZlbnRzCT0gQVJSQVlfU0laRSh1bHRyYTNpX3BlcmZtb25fZXZlbnRfbWFwKSwKK3N0YXRpYyBjb25zdCBjYWNoZV9tYXBfdCB1bHRyYTNfY2FjaGVfbWFwID0geworW0MoTDFEKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDksIFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwOSwgUElDX1VQUEVSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDBhLCBQSUNfTE9XRVIgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwYSwgUElDX1VQUEVSIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMMUkpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwOSwgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDA5LCBQSUNfVVBQRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9OT05TRU5TRSB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfTk9OU0VOU0UgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoTEwpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwYywgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDBjLCBQSUNfVVBQRVIsIH0sCisJfSwKKwlbQyhPUF9XUklURSldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MGMsIFBJQ19MT1dFUiB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDBjLCBQSUNfVVBQRVIgfSwKKwl9LAorCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKERUTEIpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgxMiwgUElDX1VQUEVSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKElUTEIpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgxMSwgUElDX1VQUEVSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKEJQVSldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IHVsdHJhM19wbXUgPSB7CisJLmV2ZW50X21hcAk9IHVsdHJhM19ldmVudF9tYXAsCisJLmNhY2hlX21hcAk9ICZ1bHRyYTNfY2FjaGVfbWFwLAorCS5tYXhfZXZlbnRzCT0gQVJSQVlfU0laRSh1bHRyYTNfcGVyZm1vbl9ldmVudF9tYXApLAogCS51cHBlcl9zaGlmdAk9IDExLAogCS5sb3dlcl9zaGlmdAk9IDQsCiAJLmV2ZW50X21hc2sJPSAweDNmLApAQCAtMTAyLDYgKzIxMywxMjEgQEAKIAkubG93ZXJfbm9wCT0gMHgxNCwKIH07CiAKKy8qIE5pYWdhcmExIGlzIHZlcnkgbGltaXRlZC4gIFRoZSB1cHBlciBQSUMgaXMgaGFyZC1sb2NrZWQgdG8gY291bnQKKyAqIG9ubHkgaW5zdHJ1Y3Rpb25zLCBzbyBpdCBpcyBmcmVlIHJ1bm5pbmcgd2hpY2ggY3JlYXRlcyBhbGwga2luZHMgb2YKKyAqIHByb2JsZW1zLiAgU29tZSBoYXJkd2FyZSBkZXNpZ25zIG1ha2Ugb25lIHdvbmRlciBpZiB0aGUgY3JlYXRvcgorICogZXZlbiBsb29rZWQgYXQgaG93IHRoaXMgc3R1ZmYgZ2V0cyB1c2VkIGJ5IHNvZnR3YXJlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwIG5pYWdhcmExX3BlcmZtb25fZXZlbnRfbWFwW10gPSB7CisJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10gPSB7IDB4MDAsIFBJQ19VUFBFUiB9LAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDAsIFBJQ19VUFBFUiB9LAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdID0geyAwLCBQSUNfTk9ORSB9LAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10gPSB7IDB4MDMsIFBJQ19MT1dFUiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqbmlhZ2FyYTFfZXZlbnRfbWFwKGludCBldmVudF9pZCkKK3sKKwlyZXR1cm4gJm5pYWdhcmExX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50X2lkXTsKK30KKworc3RhdGljIGNvbnN0IGNhY2hlX21hcF90IG5pYWdhcmExX2NhY2hlX21hcCA9IHsKK1tDKEwxRCldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzLCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9XUklURSldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKEwxSSldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDAwLCBQSUNfVVBQRVIgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMiwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfTk9OU0VOU0UgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKExMKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDcsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1dSSVRFKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwNywgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoRFRMQildID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDA1LCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoSVRMQildID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDA0LCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoQlBVKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgbmlhZ2FyYTFfcG11ID0geworCS5ldmVudF9tYXAJPSBuaWFnYXJhMV9ldmVudF9tYXAsCisJLmNhY2hlX21hcAk9ICZuaWFnYXJhMV9jYWNoZV9tYXAsCisJLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKG5pYWdhcmExX3BlcmZtb25fZXZlbnRfbWFwKSwKKwkudXBwZXJfc2hpZnQJPSAwLAorCS5sb3dlcl9zaGlmdAk9IDQsCisJLmV2ZW50X21hc2sJPSAweDcsCisJLnVwcGVyX25vcAk9IDB4MCwKKwkubG93ZXJfbm9wCT0gMHgwLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCBuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtdID0gewogCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAyZmYsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAogCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDJmZiwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCkBAIC0xMTYsMTQgKzM0MiwxMDIgQEAKIAlyZXR1cm4gJm5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50X2lkXTsKIH0KIAorc3RhdGljIGNvbnN0IGNhY2hlX21hcF90IG5pYWdhcmEyX2NhY2hlX21hcCA9IHsKK1tDKEwxRCldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDAyMDgsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMzAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9XUklURSldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDIxMCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzMDIsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKEwxSSldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDAyZmYsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMzAxLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9OT05TRU5TRSB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfTk9OU0VOU0UgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoTEwpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMjA4LCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMzMCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDAyMTAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMzIwLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhEVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MGIwOCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKElUTEIpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHhiMDQsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhCUFUpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSBuaWFnYXJhMl9wbXUgPSB7CiAJLmV2ZW50X21hcAk9IG5pYWdhcmEyX2V2ZW50X21hcCwKKwkuY2FjaGVfbWFwCT0gJm5pYWdhcmEyX2NhY2hlX21hcCwKIAkubWF4X2V2ZW50cwk9IEFSUkFZX1NJWkUobmlhZ2FyYTJfcGVyZm1vbl9ldmVudF9tYXApLAogCS51cHBlcl9zaGlmdAk9IDE5LAogCS5sb3dlcl9zaGlmdAk9IDYsCiAJLmV2ZW50X21hc2sJPSAweGZmZiwKIAkuaHZfYml0CQk9IDB4OCwKLQkuaXJxX2JpdAk9IDB4MDMsCisJLmlycV9iaXQJPSAweDMwLAogCS51cHBlcl9ub3AJPSAweDIyMCwKIAkubG93ZXJfbm9wCT0gMHgyMjAsCiB9OwpAQCAtMTUxLDIzICs0NjUsMzAgQEAKIAkJCSAgICAgIHNwYXJjX3BtdS0+bG93ZXJfbm9wLCBpZHgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAotCQkJCQkgICAgaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewogCXU2NCB2YWwsIG1hc2sgPSBtYXNrX2Zvcl9pbmRleChpZHgpOwogCi0JdmFsID0gcGNyX29wcy0+cmVhZCgpOwotCXBjcl9vcHMtPndyaXRlKCh2YWwgJiB+bWFzaykgfCBod2MtPmNvbmZpZyk7CisJdmFsID0gY3B1Yy0+cGNyOworCXZhbCAmPSB+bWFzazsKKwl2YWwgfD0gaHdjLT5jb25maWc7CisJY3B1Yy0+cGNyID0gdmFsOworCisJcGNyX29wcy0+d3JpdGUoY3B1Yy0+cGNyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCi0JCQkJCSAgICAgaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAl1NjQgbWFzayA9IG1hc2tfZm9yX2luZGV4KGlkeCk7CiAJdTY0IG5vcCA9IG5vcF9mb3JfaW5kZXgoaWR4KTsKLQl1NjQgdmFsID0gcGNyX29wcy0+cmVhZCgpOworCXU2NCB2YWw7CiAKLQlwY3Jfb3BzLT53cml0ZSgodmFsICYgfm1hc2spIHwgbm9wKTsKKwl2YWwgPSBjcHVjLT5wY3I7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBub3A7CisJY3B1Yy0+cGNyID0gdmFsOworCisJcGNyX29wcy0+d3JpdGUoY3B1Yy0+cGNyKTsKIH0KIAogdm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQpAQCAtMTgyLDcgKzUwMyw3IEBACiAJY3B1Yy0+ZW5hYmxlZCA9IDE7CiAJYmFycmllcigpOwogCi0JdmFsID0gcGNyX29wcy0+cmVhZCgpOworCXZhbCA9IGNwdWMtPnBjcjsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdFVkVOVFM7IGkrKykgewogCQlzdHJ1Y3QgcGVyZl9ldmVudCAqY3AgPSBjcHVjLT5ldmVudHNbaV07CkBAIC0xOTQsNyArNTE1LDkgQEAKIAkJdmFsIHw9IGh3Yy0+Y29uZmlnX2Jhc2U7CiAJfQogCi0JcGNyX29wcy0+d3JpdGUodmFsKTsKKwljcHVjLT5wY3IgPSB2YWw7CisKKwlwY3Jfb3BzLT53cml0ZShjcHVjLT5wY3IpOwogfQogCiB2b2lkIGh3X3BlcmZfZGlzYWJsZSh2b2lkKQpAQCAtMjA3LDEwICs1MzAsMTIgQEAKIAogCWNwdWMtPmVuYWJsZWQgPSAwOwogCi0JdmFsID0gcGNyX29wcy0+cmVhZCgpOworCXZhbCA9IGNwdWMtPnBjcjsKIAl2YWwgJj0gfihQQ1JfVVRSQUNFIHwgUENSX1NUUkFDRSB8CiAJCSBzcGFyY19wbXUtPmh2X2JpdCB8IHNwYXJjX3BtdS0+aXJxX2JpdCk7Ci0JcGNyX29wcy0+d3JpdGUodmFsKTsKKwljcHVjLT5wY3IgPSB2YWw7CisKKwlwY3Jfb3BzLT53cml0ZShjcHVjLT5wY3IpOwogfQogCiBzdGF0aWMgdTMyIHJlYWRfcG1jKGludCBpZHgpCkBAIC0yNDIsNyArNTY3LDcgQEAKIH0KIAogc3RhdGljIGludCBzcGFyY19wZXJmX2V2ZW50X3NldF9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAotCQkJCQkgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKKwkJCQkgICAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAlzNjQgbGVmdCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOwogCXM2NCBwZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CkBAIC0yODIsMTkgKzYwNywxOSBAQAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlzcGFyY19wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7CisJc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoY3B1YywgaHdjLCBpZHgpOwogCiAJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBldmVudDsKIAlzZXRfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOwogCiAJc3BhcmNfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7Ci0Jc3BhcmNfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7CisJc3BhcmNfcG11X2VuYWJsZV9ldmVudChjcHVjLCBod2MsIGlkeCk7CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTY0IHNwYXJjX3BlcmZfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKLQkJCQkgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCisJCQkJICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAlpbnQgc2hpZnQgPSA2NCAtIDMyOwogCXU2NCBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKQEAgLTMyNCw3ICs2NDksNyBAQAogCWludCBpZHggPSBod2MtPmlkeDsKIAogCWNsZWFyX2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKLQlzcGFyY19wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7CisJc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoY3B1YywgaHdjLCBpZHgpOwogCiAJYmFycmllcigpOwogCkBAIC0zMzgsMTggKzY2MywyOSBAQAogc3RhdGljIHZvaWQgc3BhcmNfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCiAJc3BhcmNfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaHdjLT5pZHgpOwogfQogCiBzdGF0aWMgdm9pZCBzcGFyY19wbXVfdW50aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlzcGFyY19wbXVfZW5hYmxlX2V2ZW50KGh3YywgaHdjLT5pZHgpOworCisJc3BhcmNfcG11X2VuYWJsZV9ldmVudChjcHVjLCBod2MsIGh3Yy0+aWR4KTsKIH0KIAogc3RhdGljIGF0b21pY190IGFjdGl2ZV9ldmVudHMgPSBBVE9NSUNfSU5JVCgwKTsKIHN0YXRpYyBERUZJTkVfTVVURVgocG1jX2dyYWJfbXV0ZXgpOwogCitzdGF0aWMgdm9pZCBwZXJmX3N0b3Bfbm1pX3dhdGNoZG9nKHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJc3RvcF9ubWlfd2F0Y2hkb2coTlVMTCk7CisJY3B1Yy0+cGNyID0gcGNyX29wcy0+cmVhZCgpOworfQorCiB2b2lkIHBlcmZfZXZlbnRfZ3JhYl9wbWModm9pZCkKIHsKIAlpZiAoYXRvbWljX2luY19ub3RfemVybygmYWN0aXZlX2V2ZW50cykpCkBAIC0zNTgsNyArNjk0LDcgQEAKIAltdXRleF9sb2NrKCZwbWNfZ3JhYl9tdXRleCk7CiAJaWYgKGF0b21pY19yZWFkKCZhY3RpdmVfZXZlbnRzKSA9PSAwKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPiAwKSB7Ci0JCQlvbl9lYWNoX2NwdShzdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7CisJCQlvbl9lYWNoX2NwdShwZXJmX3N0b3Bfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKIAkJCUJVR19PTihhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgIT0gMCk7CiAJCX0KIAkJYXRvbWljX2luYygmYWN0aXZlX2V2ZW50cyk7CkBAIC0zNzUsMzAgKzcxMSwxNjAgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnNwYXJjX21hcF9jYWNoZV9ldmVudCh1NjQgY29uZmlnKQoreworCXVuc2lnbmVkIGludCBjYWNoZV90eXBlLCBjYWNoZV9vcCwgY2FjaGVfcmVzdWx0OworCWNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqcG1hcDsKKworCWlmICghc3BhcmNfcG11LT5jYWNoZV9tYXApCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJY2FjaGVfdHlwZSA9IChjb25maWcgPj4gIDApICYgMHhmZjsKKwlpZiAoY2FjaGVfdHlwZSA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljYWNoZV9vcCA9IChjb25maWcgPj4gIDgpICYgMHhmZjsKKwlpZiAoY2FjaGVfb3AgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVgpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJY2FjaGVfcmVzdWx0ID0gKGNvbmZpZyA+PiAxNikgJiAweGZmOworCWlmIChjYWNoZV9yZXN1bHQgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXBtYXAgPSAmKCgqc3BhcmNfcG11LT5jYWNoZV9tYXApW2NhY2hlX3R5cGVdW2NhY2hlX29wXVtjYWNoZV9yZXN1bHRdKTsKKworCWlmIChwbWFwLT5lbmNvZGluZyA9PSBDQUNIRV9PUF9VTlNVUFBPUlRFRCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlpZiAocG1hcC0+ZW5jb2RpbmcgPT0gQ0FDSEVfT1BfTk9OU0VOU0UpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJcmV0dXJuIHBtYXA7Cit9CisKIHN0YXRpYyB2b2lkIGh3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJcGVyZl9ldmVudF9yZWxlYXNlX3BtYygpOwogfQogCisvKiBNYWtlIHN1cmUgYWxsIGV2ZW50cyBjYW4gYmUgc2NoZWR1bGVkIGludG8gdGhlIGhhcmR3YXJlIGF0CisgKiB0aGUgc2FtZSB0aW1lLiAgVGhpcyBpcyBzaW1wbGlmaWVkIGJ5IHRoZSBmYWN0IHRoYXQgd2Ugb25seQorICogbmVlZCB0byBzdXBwb3J0IDIgc2ltdWx0YW5lb3VzIEhXIGV2ZW50cy4KKyAqLworc3RhdGljIGludCBzcGFyY19jaGVja19jb25zdHJhaW50cyh1bnNpZ25lZCBsb25nICpldmVudHMsIGludCBuX2V2KQoreworCWlmIChuX2V2IDw9IHBlcmZfbWF4X2V2ZW50cykgeworCQl1OCBtc2sxLCBtc2syOworCQl1MTYgZHVtbXk7CisKKwkJaWYgKG5fZXYgPT0gMSkKKwkJCXJldHVybiAwOworCQlCVUdfT04obl9ldiAhPSAyKTsKKwkJcGVyZl9ldmVudF9kZWNvZGUoZXZlbnRzWzBdLCAmZHVtbXksICZtc2sxKTsKKwkJcGVyZl9ldmVudF9kZWNvZGUoZXZlbnRzWzFdLCAmZHVtbXksICZtc2syKTsKKworCQkvKiBJZiBib3RoIGV2ZW50cyBjYW4gZ28gb24gYW55IGNvdW50ZXIsIE9LLiAgKi8KKwkJaWYgKG1zazEgPT0gKFBJQ19VUFBFUiB8IFBJQ19MT1dFUikgJiYKKwkJICAgIG1zazIgPT0gKFBJQ19VUFBFUiB8IFBJQ19MT1dFUikpCisJCQlyZXR1cm4gMDsKKworCQkvKiBJZiBvbmUgZXZlbnQgaXMgbGltaXRlZCB0byBhIHNwZWNpZmljIGNvdW50ZXIsCisJCSAqIGFuZCB0aGUgb3RoZXIgY2FuIGdvIG9uIGJvdGgsIE9LLgorCQkgKi8KKwkJaWYgKChtc2sxID09IFBJQ19VUFBFUiB8fCBtc2sxID09IFBJQ19MT1dFUikgJiYKKwkJICAgIG1zazIgPT0gKFBJQ19VUFBFUiB8IFBJQ19MT1dFUikpCisJCQlyZXR1cm4gMDsKKwkJaWYgKChtc2syID09IFBJQ19VUFBFUiB8fCBtc2syID09IFBJQ19MT1dFUikgJiYKKwkJICAgIG1zazEgPT0gKFBJQ19VUFBFUiB8IFBJQ19MT1dFUikpCisJCQlyZXR1cm4gMDsKKworCQkvKiBJZiB0aGUgZXZlbnRzIGFyZSBmaXhlZCB0byBkaWZmZXJlbnQgY291bnRlcnMsIE9LLiAgKi8KKwkJaWYgKChtc2sxID09IFBJQ19VUFBFUiAmJiBtc2syID09IFBJQ19MT1dFUikgfHwKKwkJICAgIChtc2sxID09IFBJQ19MT1dFUiAmJiBtc2syID09IFBJQ19VUFBFUikpCisJCQlyZXR1cm4gMDsKKworCQkvKiBPdGhlcndpc2UsIHRoZXJlIGlzIGEgY29uZmxpY3QuICAqLworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBjaGVja19leGNsdWRlcyhzdHJ1Y3QgcGVyZl9ldmVudCAqKmV2dHMsIGludCBuX3ByZXYsIGludCBuX25ldykKK3sKKwlpbnQgZXUgPSAwLCBlayA9IDAsIGVoID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJaW50IGksIG4sIGZpcnN0OworCisJbiA9IG5fcHJldiArIG5fbmV3OworCWlmIChuIDw9IDEpCisJCXJldHVybiAwOworCisJZmlyc3QgPSAxOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZXZlbnQgPSBldnRzW2ldOworCQlpZiAoZmlyc3QpIHsKKwkJCWV1ID0gZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyOworCQkJZWsgPSBldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbDsKKwkJCWVoID0gZXZlbnQtPmF0dHIuZXhjbHVkZV9odjsKKwkJCWZpcnN0ID0gMDsKKwkJfSBlbHNlIGlmIChldmVudC0+YXR0ci5leGNsdWRlX3VzZXIgIT0gZXUgfHwKKwkJCSAgIGV2ZW50LT5hdHRyLmV4Y2x1ZGVfa2VybmVsICE9IGVrIHx8CisJCQkgICBldmVudC0+YXR0ci5leGNsdWRlX2h2ICE9IGVoKSB7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxlY3RfZXZlbnRzKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cCwgaW50IG1heF9jb3VudCwKKwkJCSAgc3RydWN0IHBlcmZfZXZlbnQgKmV2dHNbXSwgdW5zaWduZWQgbG9uZyAqZXZlbnRzKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlpbnQgbiA9IDA7CisKKwlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGdyb3VwKSkgeworCQlpZiAobiA+PSBtYXhfY291bnQpCisJCQlyZXR1cm4gLTE7CisJCWV2dHNbbl0gPSBncm91cDsKKwkJZXZlbnRzW24rK10gPSBncm91cC0+aHcuZXZlbnRfYmFzZTsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmdyb3VwLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpICYmCisJCSAgICBldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKKwkJCWlmIChuID49IG1heF9jb3VudCkKKwkJCQlyZXR1cm4gLTE7CisJCQlldnRzW25dID0gZXZlbnQ7CisJCQlldmVudHNbbisrXSA9IGV2ZW50LT5ody5ldmVudF9iYXNlOworCQl9CisJfQorCXJldHVybiBuOworfQorCiBzdGF0aWMgaW50IF9faHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyID0gJmV2ZW50LT5hdHRyOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldnRzW01BWF9IV0VWRU5UU107CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdW5zaWduZWQgbG9uZyBldmVudHNbTUFYX0hXRVZFTlRTXTsKIAljb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnBtYXA7CiAJdTY0IGVuYzsKKwlpbnQgbjsKIAogCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChhdHRyLT50eXBlICE9IFBFUkZfVFlQRV9IQVJEV0FSRSkKKwlpZiAoYXR0ci0+dHlwZSA9PSBQRVJGX1RZUEVfSEFSRFdBUkUpIHsKKwkJaWYgKGF0dHItPmNvbmZpZyA+PSBzcGFyY19wbXUtPm1heF9ldmVudHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcG1hcCA9IHNwYXJjX3BtdS0+ZXZlbnRfbWFwKGF0dHItPmNvbmZpZyk7CisJfSBlbHNlIGlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSkgeworCQlwbWFwID0gc3BhcmNfbWFwX2NhY2hlX2V2ZW50KGF0dHItPmNvbmZpZyk7CisJCWlmIChJU19FUlIocG1hcCkpCisJCQlyZXR1cm4gUFRSX0VSUihwbWFwKTsKKwl9IGVsc2UKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKGF0dHItPmNvbmZpZyA+PSBzcGFyY19wbXUtPm1heF9ldmVudHMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcGVyZl9ldmVudF9ncmFiX3BtYygpOwotCWV2ZW50LT5kZXN0cm95ID0gaHdfcGVyZl9ldmVudF9kZXN0cm95OwotCiAJLyogV2Ugc2F2ZSB0aGUgZW5hYmxlIGJpdHMgaW4gdGhlIGNvbmZpZ19iYXNlLiAgU28gdG8KIAkgKiB0dXJuIG9mZiBzYW1wbGluZyBqdXN0IHdyaXRlICdjb25maWcnLCBhbmQgdG8gZW5hYmxlCiAJICogdGhpbmdzIHdyaXRlICdjb25maWcgfCBjb25maWdfYmFzZScuCkBAIC00MTEsMTUgKzg3NywzOSBAQAogCWlmICghYXR0ci0+ZXhjbHVkZV9odikKIAkJaHdjLT5jb25maWdfYmFzZSB8PSBzcGFyY19wbXUtPmh2X2JpdDsKIAorCWh3Yy0+ZXZlbnRfYmFzZSA9IHBlcmZfZXZlbnRfZW5jb2RlKHBtYXApOworCisJZW5jID0gcG1hcC0+ZW5jb2Rpbmc7CisKKwluID0gMDsKKwlpZiAoZXZlbnQtPmdyb3VwX2xlYWRlciAhPSBldmVudCkgeworCQluID0gY29sbGVjdF9ldmVudHMoZXZlbnQtPmdyb3VwX2xlYWRlciwKKwkJCQkgICBwZXJmX21heF9ldmVudHMgLSAxLAorCQkJCSAgIGV2dHMsIGV2ZW50cyk7CisJCWlmIChuIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlldmVudHNbbl0gPSBod2MtPmV2ZW50X2Jhc2U7CisJZXZ0c1tuXSA9IGV2ZW50OworCisJaWYgKGNoZWNrX2V4Y2x1ZGVzKGV2dHMsIG4sIDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzcGFyY19jaGVja19jb25zdHJhaW50cyhldmVudHMsIG4gKyAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUcnkgdG8gZG8gYWxsIGVycm9yIGNoZWNraW5nIGJlZm9yZSB0aGlzIHBvaW50LCBhcyB1bndpbmRpbmcKKwkgKiBzdGF0ZSBhZnRlciBncmFiYmluZyB0aGUgUE1DIGlzIGRpZmZpY3VsdC4KKwkgKi8KKwlwZXJmX2V2ZW50X2dyYWJfcG1jKCk7CisJZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7CisKIAlpZiAoIWh3Yy0+c2FtcGxlX3BlcmlvZCkgewogCQlod2MtPnNhbXBsZV9wZXJpb2QgPSBNQVhfUEVSSU9EOwogCQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwogCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CiAJfQogCi0JcG1hcCA9IHNwYXJjX3BtdS0+ZXZlbnRfbWFwKGF0dHItPmNvbmZpZyk7Ci0KLQllbmMgPSBwbWFwLT5lbmNvZGluZzsKIAlpZiAocG1hcC0+cGljX21hc2sgJiBQSUNfVVBQRVIpIHsKIAkJaHdjLT5pZHggPSBQSUNfVVBQRVJfSU5ERVg7CiAJCWVuYyA8PD0gc3BhcmNfcG11LT51cHBlcl9zaGlmdDsKQEAgLTQ3Miw3ICs5NjIsNyBAQAogfQogCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBwZXJmX2V2ZW50X25taV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKl9fYXJncykKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICpfX2FyZ3MpCiB7CiAJc3RydWN0IGRpZV9hcmdzICphcmdzID0gX19hcmdzOwogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CkBAIC01MTMsNyArMTAwMyw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQotCQkJc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCQkJc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoY3B1YywgaHdjLCBpZHgpOwogCX0KIAogCXJldHVybiBOT1RJRllfU1RPUDsKQEAgLTUyNSw4ICsxMDE1LDE1IEBACiAKIHN0YXRpYyBib29sIF9faW5pdCBzdXBwb3J0ZWRfcG11KHZvaWQpCiB7Ci0JaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTNpIikpIHsKLQkJc3BhcmNfcG11ID0gJnVsdHJhM2lfcG11OworCWlmICghc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmEzIikgfHwKKwkgICAgIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhMysiKSB8fAorCSAgICAhc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmEzaSIpIHx8CisJICAgICFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTQrIikpIHsKKwkJc3BhcmNfcG11ID0gJnVsdHJhM19wbXU7CisJCXJldHVybiB0cnVlOworCX0KKwlpZiAoIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgIm5pYWdhcmEiKSkgeworCQlzcGFyY19wbXUgPSAmbmlhZ2FyYTFfcG11OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJuaWFnYXJhMiIpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwppbmRleCAxMzg5MTBjLi5kODBhNjVkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKQEAgLTc5LDYgKzc5LDcgQEAKIAogCWVyciA9IC1FTk9ERVY7CiAKKwltdXRleF9sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwogCXdyaXRlX2xvY2soJmRldnRyZWVfbG9jayk7CiAJcHJldnAgPSAmZHAtPnByb3BlcnRpZXM7CiAJd2hpbGUgKCpwcmV2cCkgewpAQCAtODgsOSArODksNyBAQAogCQkJdm9pZCAqb2xkX3ZhbCA9IHByb3AtPnZhbHVlOwogCQkJaW50IHJldDsKIAotCQkJbXV0ZXhfbG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAkJCXJldCA9IHByb21fc2V0cHJvcChkcC0+bm9kZSwgbmFtZSwgdmFsLCBsZW4pOwotCQkJbXV0ZXhfdW5sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwogCiAJCQllcnIgPSAtRUlOVkFMOwogCQkJaWYgKHJldCA+PSAwKSB7CkBAIC0xMDksNiArMTA4LDcgQEAKIAkJcHJldnAgPSAmKCpwcmV2cCktPm5leHQ7CiAJfQogCXdyaXRlX3VubG9jaygmZGV2dHJlZV9sb2NrKTsKKwltdXRleF91bmxvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CiAKIAkvKiBYWFggVXBhdGUgcHJvY2ZzIGlmIG5lY2Vzc2FyeS4uLiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCmluZGV4IGZmNjgzNzMuLmFhMzYyMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCkBAIC0xNDIwLDcgKzE0MjAsNyBAQAogCWZyZWVfYm9vdG1lbShfX3BhKHB0ciksIHNpemUpOwogfQogCi1zdGF0aWMgaW50IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pCitzdGF0aWMgaW50IF9faW5pdCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQogewogCWlmIChjcHVfdG9fbm9kZShmcm9tKSA9PSBjcHVfdG9fbm9kZSh0bykpCiAJCXJldHVybiBMT0NBTF9ESVNUQU5DRTsKQEAgLTE0MjgsMTggKzE0MjgsNTMgQEAKIAkJcmV0dXJuIFJFTU9URV9ESVNUQU5DRTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwZ2RfdCAqcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlpZiAocHVkX25vbmUoKnB1ZCkpIHsKKwkJcG1kX3QgKm5ldzsKKworCQluZXcgPSBfX2FsbG9jX2Jvb3RtZW0oUEFHRV9TSVpFLCBQQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBuZXcpOworCX0KKworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKKwlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKSB7CisJCXB0ZV90ICpuZXc7CisKKwkJbmV3ID0gX19hbGxvY19ib290bWVtKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbWQsIG5ldyk7CisJfQorfQorCiB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBkZWx0YTsKIAl1bnNpZ25lZCBpbnQgY3B1OwotCWludCByYzsKKwlpbnQgcmMgPSAtRUlOVkFMOwogCi0JcmMgPSBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwKLQkJCQkgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSwgNCA8PCAyMCwKLQkJCQkgICAgcGNwdV9jcHVfZGlzdGFuY2UsIHBjcHVfYWxsb2NfYm9vdG1lbSwKLQkJCQkgICAgcGNwdV9mcmVlX2Jvb3RtZW0pOwotCWlmIChyYykKLQkJcGFuaWMoImZhaWxlZCB0byBpbml0aWFsaXplIGZpcnN0IGNodW5rICglZCkiLCByYyk7CisJaWYgKHBjcHVfY2hvc2VuX2ZjICE9IFBDUFVfRkNfUEFHRSkgeworCQlyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLAorCQkJCQkgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSwgNCA8PCAyMCwKKwkJCQkJICAgIHBjcHVfY3B1X2Rpc3RhbmNlLAorCQkJCQkgICAgcGNwdV9hbGxvY19ib290bWVtLAorCQkJCQkgICAgcGNwdV9mcmVlX2Jvb3RtZW0pOworCQlpZiAocmMpCisJCQlwcl93YXJuaW5nKCJQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgIgorCQkJCSAgICJmYWxsaW5nIGJhY2sgdG8gcGFnZSBzaXplXG4iLAorCQkJCSAgIHBjcHVfZmNfbmFtZXNbcGNwdV9jaG9zZW5fZmNdLCByYyk7CisJfQorCWlmIChyYyA8IDApCisJCXJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwKKwkJCQkJICAgcGNwdV9hbGxvY19ib290bWVtLAorCQkJCQkgICBwY3B1X2ZyZWVfYm9vdG1lbSwKKwkJCQkJICAgcGNwdV9wb3B1bGF0ZV9wdGUpOworCWlmIChyYyA8IDApCisJCXBhbmljKCJjYW5ub3QgaW5pdGlhbGl6ZSBwZXJjcHUgYXJlYSAoZXJyPSVkKSIsIHJjKTsKIAogCWRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYwppbmRleCBiOTU2ZmQ3Li5kMjMxY2JkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCkBAIC02MTcsNyArNjE3LDcgQEAKIAkJcnMyID0gZnBzX3JlZ3ZhbChmLCBSUzIoaW5zbikpOwogCiAJCXJkX3ZhbCA9IDA7Ci0JCXNyYzIgPSAocnMyID4+IChvcGYgPT0gRk1VTDh4MTZBVV9PUEYpID8gMTYgOiAwKTsKKwkJc3JjMiA9IHJzMiA+PiAob3BmID09IEZNVUw4eDE2QVVfT1BGID8gMTYgOiAwKTsKIAkJZm9yIChieXRlID0gMDsgYnl0ZSA8IDQ7IGJ5dGUrKykgewogCQkJdTE2IHNyYzEgPSAocnMxID4+IChieXRlICogOCkpICYgMHgwMGZmOwogCQkJdTMyIHByb2QgPSBzcmMxICogc3JjMjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKaW5kZXggYTcwYTVlMS4uMTg4NmQzNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JaWYgKHBhZ2UgJiYgcGFnZV9tYXBwaW5nKHBhZ2UpKSB7CisJaWYgKHBhZ2UpIHsKIAkJdW5zaWduZWQgbG9uZyBwZ19mbGFnczsKIAogCQlwZ19mbGFncyA9IHBhZ2UtPmZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMgYi9hcmNoL3NwYXJjL29wcm9maWxlL2luaXQuYwppbmRleCBmOTdjYjhiLi5mOTAyNGJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL29wcm9maWxlL2luaXQuYworKysgYi9hcmNoL3NwYXJjL29wcm9maWxlL2luaXQuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4JLyogZm9yIEhaICovCiAgCiAjaWZkZWYgQ09ORklHX1NQQVJDNjQKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKaW5kZXggMTRhMTAyZS4uY2Y4YTk3ZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAibGludXgvaXJxcmV0dXJuLmgiCiAjaW5jbHVkZSAibGludXgva2QuaCIKKyNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgogI2luY2x1ZGUgImNoYW5fa2Vybi5oIgogI2luY2x1ZGUgImlycV9rZXJuLmgiCiAjaW5jbHVkZSAiaXJxX3VzZXIuaCIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYwppbmRleCAxOTkzMDA4Li40ZWJjOGEzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgImxpbnV4L2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpbnV4L2xpc3QuaCIKICNpbmNsdWRlICJsaW51eC9tdXRleC5oIgorI2luY2x1ZGUgImxpbnV4L3dvcmtxdWV1ZS5oIgogI2luY2x1ZGUgImFzbS9hdG9taWMuaCIKICNpbmNsdWRlICJpbml0LmgiCiAjaW5jbHVkZSAiaXJxX2tlcm4uaCIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9jb21tb24ubGRzLlMKaW5kZXggMzdlY2M1NS4uYWM1NWI5ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9jb21tb24ubGRzLlMKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9jb21tb24ubGRzLlMKQEAgLTE2LDExICsxNiw3IEBACiAKICAgLiA9IEFMSUdOKDQwOTYpOwogICAubm90ZSA6IHsgKigubm90ZS4qKSB9Ci0gIF9fZXhfdGFibGUgOiB7Ci0JX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLQkqKF9fZXhfdGFibGUpCi0JX19zdG9wX19fZXhfdGFibGUgPSAuOwotICB9CisgIEVYQ0VQVElPTl9UQUJMRSgwKQogCiAgIEJVR19UQUJMRQogCkBAIC00MywyOCArMzksMTcgQEAKICAgfQogCQogICAuaW5pdC5zZXR1cCA6IHsKLQlfX3NldHVwX3N0YXJ0ID0gLjsKLQkqKC5pbml0LnNldHVwKQotCV9fc2V0dXBfZW5kID0gLjsKKwlJTklUX1NFVFVQKDApCiAgIH0KIAotICAuID0gQUxJR04oMzIpOwotICAuZGF0YS5wZXJjcHUgOiB7Ci0JX19wZXJfY3B1X3N0YXJ0ID0gLiA7Ci0JKiguZGF0YS5wZXJjcHUpCi0JX19wZXJfY3B1X2VuZCA9IC4gOwotICB9CisgIFBFUkNQVSgzMikKIAkKICAgLmluaXRjYWxsLmluaXQgOiB7Ci0JX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JSU5JVENBTExTCi0JX19pbml0Y2FsbF9lbmQgPSAuOworCUlOSVRfQ0FMTFMKICAgfQogCiAgIC5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JKiguY29uX2luaXRjYWxsLmluaXQpCi0JX19jb25faW5pdGNhbGxfZW5kID0gLjsKKwlDT05fSU5JVENBTEwKICAgfQogCiAgIC51bWwuaW5pdGNhbGwuaW5pdCA6IHsKQEAgLTExOCw4ICsxMDMsNiBAQAogCiAgICAuID0gQUxJR04oNDA5Nik7CiAgIC5pbml0LnJhbWZzIDogewotCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkqKC5pbml0LnJhbWZzKQotCV9faW5pdHJhbWZzX2VuZCA9IC47CisJSU5JVF9SQU1fRlMKICAgfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMgYi9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKaW5kZXggNzE1YTE4OC4uN2ZjYWQ1OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCisrKyBiL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUwpAQCAtMTYsMTEgKzE2LDcgQEAKICAgX3RleHQgPSAuOwogICBfc3RleHQgPSAuOwogICBfX2luaXRfYmVnaW4gPSAuOwotICAuaW5pdC50ZXh0IDogewotCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVAotCV9laW5pdHRleHQgPSAuOwotICB9CisgIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKIAogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKIApAQCAtOTYsOCArOTIsNyBAQAogICAuaW5pdF9hcnJheSAgICAgOiB7ICooLmluaXRfYXJyYXkpIH0KICAgLmZpbmlfYXJyYXkgICAgIDogeyAqKC5maW5pX2FycmF5KSB9CiAgIC5kYXRhICAgICAgICAgICA6IHsKLSAgICAuID0gQUxJR04oS0VSTkVMX1NUQUNLX1NJWkUpOwkJLyogaW5pdF90YXNrICovCi0gICAgKiguZGF0YS5pbml0X3Rhc2spCisgICAgSU5JVF9UQVNLX0RBVEEoS0VSTkVMX1NUQUNLX1NJWkUpCiAgICAgLiA9IEFMSUdOKEtFUk5FTF9TVEFDS19TSVpFKTsKICAgICAqKC5kYXRhLmluaXRfaXJxc3RhY2spCiAgICAgREFUQV9EQVRBCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pcnEuYyBiL2FyY2gvdW0va2VybmVsL2lycS5jCmluZGV4IDQ1NGNkYjQuLjAzOTI3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2lycS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAibGludXgvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibGludXgva2VybmVsX3N0YXQuaCIKICNpbmNsdWRlICJsaW51eC9tb2R1bGUuaCIKKyNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgogI2luY2x1ZGUgImxpbnV4L3NlcV9maWxlLmgiCiAjaW5jbHVkZSAiYXMtbGF5b3V0LmgiCiAjaW5jbHVkZSAia2Vybl91dGlsLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMgYi9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKaW5kZXggMmViZDM5Ny4uZTdhNmNjYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCisrKyBiL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUwpAQCAtMjIsMTEgKzIyLDcgQEAKICAgX3RleHQgPSAuOwogICBfc3RleHQgPSAuOwogICBfX2luaXRfYmVnaW4gPSAuOwotICAuaW5pdC50ZXh0IDogewotCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVAotCV9laW5pdHRleHQgPSAuOwotICB9CisgIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAKICAgLnRleHQgICAgICA6CkBAIC01Miw4ICs0OCw3IEBACiAgIGluaXQuZGF0YSA6IHsgSU5JVF9EQVRBIH0KICAgLmRhdGEgICAgOgogICB7Ci0gICAgLiA9IEFMSUdOKEtFUk5FTF9TVEFDS19TSVpFKTsJCS8qIGluaXRfdGFzayAqLwotICAgICooLmRhdGEuaW5pdF90YXNrKQorICAgIElOSVRfVEFTS19EQVRBKEtFUk5FTF9TVEFDS19TSVpFKQogICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CiAgICAgKiguZGF0YS5pbml0X2lycXN0YWNrKQogICAgIERBVEFfREFUQQpAQCAtODEsMTkgKzc2LDEwIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIC5zYnNzICAgICAgOgotICB7Ci0gICBfX2Jzc19zdGFydCA9IC47Ci0gICBQUk9WSURFKF9ic3Nfc3RhcnQgPSAuKTsKLSAgICooLnNic3MpCi0gICAqKC5zY29tbW9uKQotICB9Ci0gIC5ic3MgICAgICAgOgotICB7Ci0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgfQorICBfX2Jzc19zdGFydCA9IC47CisgIFBST1ZJREUoX2Jzc19zdGFydCA9IC4pOworICBTQlNTKDApCisgIEJTUygwKQogICBfZW5kID0gLjsKICAgUFJPVklERSAoZW5kID0gLik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDkzNjk4NzkuLjcyYWNlOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtODYsMTAgKzg2LDYgQEAKIGNvbmZpZyBIQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVAogCWRlZl9ib29sIHkKIAotY29uZmlnIEZBU1RfQ01QWENIR19MT0NBTAotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIE1NVQogCWRlZl9ib29sIHkKIApAQCAtNDMyLDYgKzQyOCwxNyBAQAogCSAgb2YgRmxhdCBMb2dpY2FsLiAgWW91IHdpbGwgbmVlZCBhIG5ldyBseW54ZXIuZWxmIGZpbGUgdG8gZmxhc2ggeW91cgogCSAgZmlybXdhcmUgd2l0aCAtIHNlbmQgZW1haWwgdG8gPE1hcnRpbi5CbGlnaEB1cy5pYm0uY29tPi4KIAorY29uZmlnIFg4Nl9TVVBQT1JUU19NRU1PUllfRkFJTFVSRQorCWJvb2wKKwkjIE1DRSBjb2RlIGNhbGxzIG1lbW9yeV9mYWlsdXJlKCk6CisJZGVwZW5kcyBvbiBYODZfTUNFCisJIyBPbiAzMi1iaXQgdGhpcyBhZGRzIHRvbyBiaWcgb2YgTk9ERVNfU0hJRlQgYW5kIHdlIHJ1biBvdXQgb2YgcGFnZSBmbGFnczoKKwlkZXBlbmRzIG9uICFYODZfTlVNQVEKKwkjIE9uIDMyLWJpdCBTUEFSU0VNRU0gYWRkcyB0b28gYmlnIG9mIFNFQ1RJT05TX1dJRFRIOgorCWRlcGVuZHMgb24gWDg2XzY0IHx8ICFTUEFSU0VNRU0KKwlzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRQorCWRlZmF1bHQgeQorCiBjb25maWcgWDg2X1ZJU1dTCiAJYm9vbCAiU0dJIDMyMC81NDAgKFZpc3VhbCBXb3Jrc3RhdGlvbikiCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgUENJICYmIFg4Nl9NUFBBUlNFICYmIFBDSV9HT0RJUkVDVApAQCAtNDg0LDcgKzQ5MSw3IEBACiBzb3VyY2UgImFyY2gveDg2L3hlbi9LY29uZmlnIgogCiBjb25maWcgVk1JCi0JYm9vbCAiVk1JIEd1ZXN0IHN1cHBvcnQiCisJYm9vbCAiVk1JIEd1ZXN0IHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCXNlbGVjdCBQQVJBVklSVAogCWRlcGVuZHMgb24gWDg2XzMyCiAJLS0taGVscC0tLQpAQCAtNDkzLDYgKzUwMCwxNSBAQAogCSAgYXQgdGhlIG1vbWVudCksIGJ5IGxpbmtpbmcgdGhlIGtlcm5lbCB0byBhIEdQTC1lZCBST00gbW9kdWxlCiAJICBwcm92aWRlZCBieSB0aGUgaHlwZXJ2aXNvci4KIAorCSAgQXMgb2YgU2VwdGVtYmVyIDIwMDksIFZNd2FyZSBoYXMgc3RhcnRlZCBhIHBoYXNlZCByZXRpcmVtZW50CisJICBvZiB0aGlzIGZlYXR1cmUgZnJvbSBWTXdhcmUncyBwcm9kdWN0cy4gUGxlYXNlIHNlZQorCSAgZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBmb3IgZGV0YWlscy4gIElmIHlvdSBhcmUKKwkgIHBsYW5uaW5nIHRvIGVuYWJsZSB0aGlzIG9wdGlvbiwgcGxlYXNlIG5vdGUgdGhhdCB5b3UgY2Fubm90CisJICBsaXZlIG1pZ3JhdGUgYSBWTUkgZW5hYmxlZCBWTSB0byBhIGZ1dHVyZSBWTXdhcmUgcHJvZHVjdCwKKwkgIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBWTUkuIFNvIGlmIHlvdSBleHBlY3QgeW91ciBrZXJuZWwgdG8KKwkgIHNlYW1sZXNzbHkgbWlncmF0ZSB0byBuZXdlciBWTXdhcmUgcHJvZHVjdHMsIGtlZXAgdGhpcworCSAgZGlzYWJsZWQuCisKIGNvbmZpZyBLVk1fQ0xPQ0sKIAlib29sICJLVk0gcGFyYXZpcnR1YWxpemVkIGNsb2NrIgogCXNlbGVjdCBQQVJBVklSVApAQCAtMTQyNywxMiArMTQ0Myw4IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuIE9ubHkgZW1iZWRkZWQgc2hvdWxkIHNheSBOIGhlcmUuCiAKLWNvbmZpZyBDQ19TVEFDS1BST1RFQ1RPUl9BTEwKLQlib29sCi0KIGNvbmZpZyBDQ19TVEFDS1BST1RFQ1RPUgogCWJvb2wgIkVuYWJsZSAtZnN0YWNrLXByb3RlY3RvciBidWZmZXIgb3ZlcmZsb3cgZGV0ZWN0aW9uIChFWFBFUklNRU5UQUwpIgotCXNlbGVjdCBDQ19TVEFDS1BST1RFQ1RPUl9BTEwKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB0dXJucyBvbiB0aGUgLWZzdGFjay1wcm90ZWN0b3IgR0NDIGZlYXR1cmUuIFRoaXMKIAkgIGZlYXR1cmUgcHV0cywgYXQgdGhlIGJlZ2lubmluZyBvZiBmdW5jdGlvbnMsIGEgY2FuYXJ5IHZhbHVlIG9uCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IDUyNzUxOWIuLjI2NDk4NDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC00MDAsNyArNDAwLDcgQEAKIAogY29uZmlnIFg4Nl9DTVBYQ0hHNjQKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfUEFFIHx8IFg4Nl82NAorCWRlcGVuZHMgb24gIU0zODYgJiYgIU00ODYKIAogIyB0aGlzIHNob3VsZCBiZSBzZXQgZm9yIGFsbCAtbWFyY2g9Li4gb3B0aW9ucyB3aGVyZSB0aGUgY29tcGlsZXIKICMgZ2VuZXJhdGVzIGNtb3YuCkBAIC00MTIsNiArNDEyLDcgQEAKIAlpbnQKIAlkZWZhdWx0ICI2NCIgaWYgWDg2XzY0CiAJZGVmYXVsdCAiNiIgaWYgWDg2XzMyICYmIFg4Nl9QNl9OT1AKKwlkZWZhdWx0ICI1IiBpZiBYODZfMzIgJiYgWDg2X0NNUFhDSEc2NAogCWRlZmF1bHQgIjQiIGlmIFg4Nl8zMiAmJiAoWDg2X1hBREQgfHwgWDg2X0NNUFhDSEcgfHwgWDg2X0JTV0FQIHx8IFg4Nl9XUF9XT1JLU19PSykKIAlkZWZhdWx0ICIzIgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IGEwMTJlZTguLmQyZDI0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC03Niw3ICs3Niw2IEBACiAJY2NfaGFzX3NwIDo9ICQoc3JjdHJlZSkvc2NyaXB0cy9nY2MteDg2XyQoQklUUyktaGFzLXN0YWNrLXByb3RlY3Rvci5zaAogICAgICAgICBpZmVxICgkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNjX2hhc19zcCkgJChDQykgJChiaWFyY2gpKSx5KQogICAgICAgICAgICAgICAgIHN0YWNrcC15IDo9IC1mc3RhY2stcHJvdGVjdG9yCi0gICAgICAgICAgICAgICAgc3RhY2twLSQoQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SX0FMTCkgKz0gLWZzdGFjay1wcm90ZWN0b3ItYWxsCiAgICAgICAgICAgICAgICAgS0JVSUxEX0NGTEFHUyArPSAkKHN0YWNrcC15KQogICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgJCh3YXJuaW5nIHN0YWNrIHByb3RlY3RvciBlbmFibGVkIGJ1dCBubyBjb21waWxlciBzdXBwb3J0KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKaW5kZXggNzVlNGYwMC4uZjU0M2I3MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCkBAIC0yMywxMyArMjMsMTQgQEAKICAqLwogCS50ZXh0CiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCi0JLnNlY3Rpb24gIi50ZXh0LmhlYWQiLCJheCIsQHByb2diaXRzCisJX19IRUFECiBFTlRSWShzdGFydHVwXzMyKQogCWNsZAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUwppbmRleCBmNjJjMjg0Li4wNzdlMWI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKQEAgLTI0LDYgKzI0LDcgQEAKIAkuY29kZTMyCiAJLnRleHQKIAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgpAQCAtMzMsNyArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAotCS5zZWN0aW9uICIudGV4dC5oZWFkIgorCV9fSEVBRAogCS5jb2RlMzIKIEVOVFJZKHN0YXJ0dXBfMzIpCiAJY2xkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCmluZGV4IGNjMzUzZTEuLmY0MTkzYmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCkBAIC0xLDMgKzEsNSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisKIE9VVFBVVF9GT1JNQVQoQ09ORklHX09VVFBVVF9GT1JNQVQsIENPTkZJR19PVVRQVVRfRk9STUFULCBDT05GSUdfT1VUUFVUX0ZPUk1BVCkKIAogI3VuZGVmIGkzODYKQEAgLTE4LDkgKzIwLDkgQEAKIAkgKiBhZGRyZXNzIDAuCiAJICovCiAJLiA9IDA7Ci0JLnRleHQuaGVhZCA6IHsKKwkuaGVhZC50ZXh0IDogewogCQlfaGVhZCA9IC4gOwotCQkqKC50ZXh0LmhlYWQpCisJCUhFQURfVEVYVAogCQlfZWhlYWQgPSAuIDsKIAl9CiAJLnJvZGF0YS5jb21wcmVzc2VkIDogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9zZXR1cC5sZCBiL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKaW5kZXggMGY2ZWM0NTUuLjAzYzA2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKKysrIGIvYXJjaC94ODYvYm9vdC9zZXR1cC5sZApAQCAtNTMsNiArNTMsOSBAQAogCiAJL0RJU0NBUkQvIDogeyAqKC5ub3RlKikgfQogCisJLyoKKwkgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorCSAqLwogCS4gPSBBU1NFUlQoX2VuZCA8PSAweDgwMDAsICJTZXR1cCB0b28gYmlnISIpOwogCS4gPSBBU1NFUlQoaGRyID09IDB4MWYxLCAiVGhlIHNldHVwIGhlYWRlciBoYXMgdGhlIHdyb25nIG9mZnNldCEiKTsKIAkvKiBOZWNlc3NhcnkgZm9yIHRoZSB2ZXJ5LW9sZC1sb2FkZXIgY2hlY2sgdG8gd29yay4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKaW5kZXggNTg1ZWRlYi4uNDljNTUyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCkBAIC04Miw3ICs4Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKQorCWlmICghaXJxX2ZwdV91c2FibGUoKSkKIAkJZXJyID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMTAzLDcgKzEwMyw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQogCQljcnlwdG9fYWVzX2VuY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOwogCWVsc2UgewogCQlrZXJuZWxfZnB1X2JlZ2luKCk7CkBAIC0xMTYsNyArMTE2LDcgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpCiAJCWNyeXB0b19hZXNfZGVjcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTM0Miw3ICszNDIsNyBAQAogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CiAJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpIHsKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpIHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CiAJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CkBAIC0zNjMsNyArMzYzLDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKSB7CisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKSB7CiAJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggNzQ2MTljNC4uNTgxYjA1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC0yMSw4ICsyMSw4IEBACiAjZGVmaW5lIF9fQVVESVRfQVJDSF9MRQkgICAweDQwMDAwMDAwCiAKICNpZm5kZWYgQ09ORklHX0FVRElUU1lTQ0FMTAotI2RlZmluZSBzeXNleGl0X2F1ZGl0IGludF9yZXRfZnJvbV9zeXNfY2FsbAotI2RlZmluZSBzeXNyZXRsX2F1ZGl0IGludF9yZXRfZnJvbV9zeXNfY2FsbAorI2RlZmluZSBzeXNleGl0X2F1ZGl0IGlhMzJfcmV0X2Zyb21fc3lzX2NhbGwKKyNkZWZpbmUgc3lzcmV0bF9hdWRpdCBpYTMyX3JldF9mcm9tX3N5c19jYWxsCiAjZW5kaWYKIAogI2RlZmluZSBJQTMyX05SX3N5c2NhbGxzICgoaWEzMl9zeXNjYWxsX2VuZCAtIGlhMzJfc3lzX2NhbGxfdGFibGUpLzgpCkBAIC0zOSwxMiArMzksMTIgQEAKIAkuZW5kbSAKIAogCS8qIGNsb2JiZXJzICVlYXggKi8JCi0JLm1hY3JvICBDTEVBUl9SUkVHUyBfcjk9cmF4CisJLm1hY3JvICBDTEVBUl9SUkVHUyBvZmZzZXQ9MCwgX3I5PXJheAogCXhvcmwgCSVlYXgsJWVheAotCW1vdnEJJXJheCxSMTEoJXJzcCkKLQltb3ZxCSVyYXgsUjEwKCVyc3ApCi0JbW92cQklXF9yOSxSOSglcnNwKQotCW1vdnEJJXJheCxSOCglcnNwKQorCW1vdnEJJXJheCxcb2Zmc2V0K1IxMSglcnNwKQorCW1vdnEJJXJheCxcb2Zmc2V0K1IxMCglcnNwKQorCW1vdnEJJVxfcjksXG9mZnNldCtSOSglcnNwKQorCW1vdnEJJXJheCxcb2Zmc2V0K1I4KCVyc3ApCiAJLmVuZG0KIAogCS8qCkBAIC0xNzIsNiArMTcyLDEwIEBACiAJbW92bAlSSVAtUjExKCVyc3ApLCVlZHgJCS8qIFVzZXIgJWVpcCAqLwogCUNGSV9SRUdJU1RFUiByaXAscmR4CiAJUkVTVE9SRV9BUkdTIDEsMjQsMSwxLDEsMQorCXhvcnEJJXI4LCVyOAorCXhvcnEJJXI5LCVyOQorCXhvcnEJJXIxMCwlcjEwCisJeG9ycQklcjExLCVyMTEKIAlwb3BmcQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtOAogCS8qQ0ZJX1JFU1RPUkUgcmZsYWdzKi8KQEAgLTIwMCw5ICsyMDQsOSBAQAogCW1vdmwgUkRJLUFSR09GRlNFVCglcnNwKSwlcjhkCS8qIHJlbG9hZCA1dGggc3lzY2FsbCBhcmcgKi8KIAkuZW5kbQogCi0JLm1hY3JvIGF1ZGl0c3lzX2V4aXQgZXhpdCxlYnBzYXZlPVJCUAorCS5tYWNybyBhdWRpdHN5c19leGl0IGV4aXQKIAl0ZXN0bCAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksVElfZmxhZ3MoJXIxMCkKLQlqbnogaW50X3JldF9mcm9tX3N5c19jYWxsCisJam56IGlhMzJfcmV0X2Zyb21fc3lzX2NhbGwKIAlUUkFDRV9JUlFTX09OCiAJc3RpCiAJbW92bCAlZWF4LCVlc2kJCS8qIHNlY29uZCBhcmcsIHN5c2NhbGwgcmV0dXJuIHZhbHVlICovCkBAIC0yMTMsMTMgKzIxNywxMyBAQAogCWNhbGwgYXVkaXRfc3lzY2FsbF9leGl0CiAJR0VUX1RIUkVBRF9JTkZPKCVyMTApCiAJbW92bCBSQVgtQVJHT0ZGU0VUKCVyc3ApLCVlYXgJLyogcmVsb2FkIHN5c2NhbGwgcmV0dXJuIHZhbHVlICovCi0JbW92bCBcZWJwc2F2ZS1BUkdPRkZTRVQoJXJzcCksJWVicCAvKiByZWxvYWQgdXNlciByZWdpc3RlciB2YWx1ZSAqLwogCW1vdmwgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLCVlZGkKIAljbGkKIAlUUkFDRV9JUlFTX09GRgogCXRlc3RsICVlZGksVElfZmxhZ3MoJXIxMCkKLQlqbnogaW50X3dpdGhfY2hlY2sKLQlqbXAgXGV4aXQKKwlqeiBcZXhpdAorCUNMRUFSX1JSRUdTIC1BUkdPRkZTRVQKKwlqbXAgaW50X3dpdGhfY2hlY2sKIAkuZW5kbQogCiBzeXNlbnRlcl9hdWRpdHN5czoKQEAgLTMyOSw2ICszMzMsOSBAQAogCUNGSV9SRUdJU1RFUiByaXAscmN4CiAJbW92bCBFRkxBR1MtQVJHT0ZGU0VUKCVyc3ApLCVyMTFkCQogCS8qQ0ZJX1JFR0lTVEVSIHJmbGFncyxyMTEqLworCXhvcnEJJXIxMCwlcjEwCisJeG9ycQklcjksJXI5CisJeG9ycQklcjgsJXI4CiAJVFJBQ0VfSVJRU19PTgogCW1vdmwgUlNQLUFSR09GRlNFVCglcnNwKSwlZXNwCiAJQ0ZJX1JFU1RPUkUgcnNwCkBAIC0zNDMsNyArMzUwLDcgQEAKIAlqbXAgY3N0YXJfZGlzcGF0Y2gKIAogc3lzcmV0bF9hdWRpdDoKLQlhdWRpdHN5c19leGl0IHN5c3JldGxfZnJvbV9zeXNfY2FsbCwgUkNYIC8qIHVzZXIgJWVicCBpbiBSQ1ggc2xvdCAqLworCWF1ZGl0c3lzX2V4aXQgc3lzcmV0bF9mcm9tX3N5c19jYWxsCiAjZW5kaWYKIAogY3N0YXJfdHJhY2VzeXM6CkBAIC0zNTMsNyArMzYwLDcgQEAKICNlbmRpZgogCXhjaGdsICVyOWQsJWVicAogCVNBVkVfUkVTVAotCUNMRUFSX1JSRUdTIHI5CisJQ0xFQVJfUlJFR1MgMCwgcjkKIAltb3ZxICQtRU5PU1lTLFJBWCglcnNwKQkvKiBwdHJhY2UgY2FuIGNoYW5nZSB0aGlzIGZvciBhIGJhZCBzeXNjYWxsICovCiAJbW92cSAlcnNwLCVyZGkgICAgICAgIC8qICZwdF9yZWdzIC0+IGFyZzEgKi8KIAljYWxsIHN5c2NhbGxfdHJhY2VfZW50ZXIKQEAgLTQyNSw2ICs0MzIsOCBAQAogCWNhbGwgKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkgIyB4eHg6IHJpcCByZWxhdGl2ZQogaWEzMl9zeXNyZXQ6CiAJbW92cSAlcmF4LFJBWC1BUkdPRkZTRVQoJXJzcCkKK2lhMzJfcmV0X2Zyb21fc3lzX2NhbGw6CisJQ0xFQVJfUlJFR1MgLUFSR09GRlNFVAogCWptcCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwgCiAKIGlhMzJfdHJhY2VzeXM6CQkJIApAQCAtNDQyLDggKzQ1MSw4IEBACiAKIGlhMzJfYmFkc3lzOgogCW1vdnEgJDAsT1JJR19SQVgtQVJHT0ZGU0VUKCVyc3ApCi0JbW92cSAkLUVOT1NZUyxSQVgtQVJHT0ZGU0VUKCVyc3ApCi0Jam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbAorCW1vdnEgJC1FTk9TWVMsJXJheAorCWptcCBpYTMyX3N5c3JldAogCiBxdWlldF9uaV9zeXNjYWxsOgogCW1vdnEgJC1FTk9TWVMsJXJheApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaAppbmRleCBhYzk1OTk1Li40YjE4MDg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaApAQCAtMzEsNiArMzEsNyBAQAogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kb21haW5zKHZvaWQpOwogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X3NodXRkb3duKHZvaWQpOworZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fNjModTE2IGRldmlkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2lvbW11X2RldGVjdCh2b2lkKSB7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oCmluZGV4IDdjNWVmOGIuLjQ2ZmM0NzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2hlY2tzdW1fMzIuaApAQCAtMTYxLDcgKzE2MSw4IEBACiAJICAgICJhZGNsICQwLCAlMAk7XG4iCiAJICAgIDogIj0mciIgKHN1bSkKIAkgICAgOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksCi0JICAgICAgInIiIChodG9ubChsZW4pKSwgInIiIChodG9ubChwcm90bykpLCAiMCIgKHN1bSkpOworCSAgICAgICJyIiAoaHRvbmwobGVuKSksICJyIiAoaHRvbmwocHJvdG8pKSwgIjAiIChzdW0pCisJICAgIDogIm1lbW9yeSIpOwogCiAJcmV0dXJuIGNzdW1fZm9sZChzdW0pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCmluZGV4IDgyY2ViNzguLmVlMTkzMWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKQEAgLTMxMiwxOSArMzEyLDIzIEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY21weGNoZ180ODZfdTY0KHZvbGF0aWxlIHZvaWQgKiwgdTY0LCB1NjQpOwogCi0jZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAotCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiA0KSkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjQoKHB0ciksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAotCWVsc2UJCQkJCQkJCVwKLQkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKWNtcHhjaGdfNDg2X3U2NCgocHRyKSwJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKTsJCVwKLQlfX3JldDsJCQkJCQkJCVwKLX0pCisjZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQlcCisoewkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX29sZCA9IChvKTsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuKTsJCQkJXAorCWFsdGVybmF0aXZlX2lvKCJjYWxsIGNtcHhjaGc4Yl9lbXUiLAkJCVwKKwkJCSJsb2NrOyBjbXB4Y2hnOGIgKCUlZXNpKSIgLAkJXAorCQkgICAgICAgWDg2X0ZFQVRVUkVfQ1g4LAkJCQlcCisJCSAgICAgICAiPUEiIChfX3JldCksCQkJCVwKKwkJICAgICAgICJTIiAoKHB0cikpLCAiMCIgKF9fb2xkKSwJCVwKKwkJICAgICAgICJiIiAoKHVuc2lnbmVkIGludClfX25ldyksCQlcCisJCSAgICAgICAiYyIgKCh1bnNpZ25lZCBpbnQpKF9fbmV3Pj4zMikpCQlcCisJCSAgICAgICA6ICJtZW1vcnkiKTsJCQkJXAorCV9fcmV0OyB9KQorCisKKwogI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCmluZGV4IGU4ZGUyZjYuLjYxN2JkNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2Rlc2NfYmFzZShjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MpCiB7Ci0JcmV0dXJuIGRlc2MtPmJhc2UwIHwgKChkZXNjLT5iYXNlMSkgPDwgMTYpIHwgKChkZXNjLT5iYXNlMikgPDwgMjQpOworCXJldHVybiAodW5zaWduZWQpKGRlc2MtPmJhc2UwIHwgKChkZXNjLT5iYXNlMSkgPDwgMTYpIHwgKChkZXNjLT5iYXNlMikgPDwgMjQpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9kZXNjX2Jhc2Uoc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjLCB1bnNpZ25lZCBsb25nIGJhc2UpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAwZWU3NzBkLi42YTI1ZDVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTE0LDYgKzE0LDEyIEBACiAjaW5jbHVkZSA8YXNtL3N3aW90bGIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaD4KIAorI2lmZGVmIENPTkZJR19JU0EKKyMgZGVmaW5lIElTQV9ETUFfQklUX01BU0sgRE1BX0JJVF9NQVNLKDI0KQorI2Vsc2UKKyMgZGVmaW5lIElTQV9ETUFfQklUX01BU0sgRE1BX0JJVF9NQVNLKDMyKQorI2VuZGlmCisKIGV4dGVybiBkbWFfYWRkcl90IGJhZF9kbWFfYWRkcmVzczsKIGV4dGVybiBpbnQgaW9tbXVfbWVyZ2U7CiBleHRlcm4gc3RydWN0IGRldmljZSB4ODZfZG1hX2ZhbGxiYWNrX2RldjsKQEAgLTEyNCwxMCArMTMwLDggQEAKIAlpZiAoZG1hX2FsbG9jX2Zyb21fY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCAmbWVtb3J5KSkKIAkJcmV0dXJuIG1lbW9yeTsKIAotCWlmICghZGV2KSB7CisJaWYgKCFkZXYpCiAJCWRldiA9ICZ4ODZfZG1hX2ZhbGxiYWNrX2RldjsKLQkJZ2ZwIHw9IEdGUF9ETUE7Ci0JfQogCiAJaWYgKCFpc19kZXZpY2VfZG1hX2NhcGFibGUoZGV2KSkKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAzYmUwMDA0Li5kODM4OTIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTc5Niw2ICs3OTYsNyBAQAogI2RlZmluZSBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUgogaW50IGt2bV91bm1hcF9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSk7CiBpbnQga3ZtX2FnZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSk7Cit2b2lkIGt2bV9zZXRfc3B0ZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSwgcHRlX3QgcHRlKTsKIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKaW5kZXggYjYwOGE2NC4uZjEzNjNiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKQEAgLTEzMyw2ICsxMzMsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9wNV9tY2Uodm9pZCkge30KICNlbmRpZgogCitleHRlcm4gdm9pZCAoKng4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrKShzdHJ1Y3QgbWNlICptKTsKKwogdm9pZCBtY2Vfc2V0dXAoc3RydWN0IG1jZSAqbSk7CiB2b2lkIG1jZV9sb2coc3RydWN0IG1jZSAqbSk7CiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHN5c19kZXZpY2UsIG1jZV9kZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggOGFlYmNjNC4uZWZiMzg5OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC04NDAsNDIgKzg0MCwyMiBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfc2F2ZV9mbGFncyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZjsKLQotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkKLQkJICAgICA6ICI9YSIoZikKLQkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5zYXZlX2ZsKSwKLQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImNjIik7Ci0JcmV0dXJuIGY7CisJcmV0dXJuIFBWT1BfQ0FMTEVFMCh1bnNpZ25lZCBsb25nLCBwdl9pcnFfb3BzLnNhdmVfZmwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgZikKIHsKLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOiAiPWEiKGYpCi0JCSAgICAgOiBQVl9GTEFHU19BUkcoZiksCi0JCSAgICAgICBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMucmVzdG9yZV9mbCksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOworCVBWT1BfVkNBTExFRTEocHZfaXJxX29wcy5yZXN0b3JlX2ZsLCBmKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkKLQkJICAgICA6Ci0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuaXJxX2Rpc2FibGUpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiZWF4IiwgImNjIik7CisJUFZPUF9WQ0FMTEVFMChwdl9pcnFfb3BzLmlycV9kaXNhYmxlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZW5hYmxlKHZvaWQpCiB7Ci0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDoKLQkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5pcnFfZW5hYmxlKSwKLQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIpOworCVBWT1BfVkNBTExFRTAocHZfaXJxX29wcy5pcnFfZW5hYmxlKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX2lycV9zYXZlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaAppbmRleCBkZDBmNWIzLi45MzU3NDczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKQEAgLTQ5NCwxMCArNDk0LDExIEBACiAjZGVmaW5lIEVYVFJBX0NMT0JCRVJTCiAjZGVmaW5lIFZFWFRSQV9DTE9CQkVSUwogI2Vsc2UgIC8qIENPTkZJR19YODZfNjQgKi8KKy8qIFtyZV1heCBpc24ndCBhbiBhcmcsIGJ1dCB0aGUgcmV0dXJuIHZhbCAqLwogI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJCVwKIAl1bnNpZ25lZCBsb25nIF9fZWRpID0gX19lZGksIF9fZXNpID0gX19lc2ksCVwKLQkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAotI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTLCBfX2VheAorCQlfX2VkeCA9IF9fZWR4LCBfX2VjeCA9IF9fZWN4LCBfX2VheCA9IF9fZWF4CisjZGVmaW5lIFBWT1BfQ0FMTF9BUkdTCQlQVk9QX1ZDQUxMX0FSR1MKIAogI2RlZmluZSBQVk9QX0NBTExfQVJHMSh4KQkJIkQiICgodW5zaWduZWQgbG9uZykoeCkpCiAjZGVmaW5lIFBWT1BfQ0FMTF9BUkcyKHgpCQkiUyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKQEAgLTUwOSw2ICs1MTAsNyBAQAogCQkJCSI9YyIgKF9fZWN4KQogI2RlZmluZSBQVk9QX0NBTExfQ0xPQkJFUlMJUFZPUF9WQ0FMTF9DTE9CQkVSUywgIj1hIiAoX19lYXgpCiAKKy8qIHZvaWQgZnVuY3Rpb25zIGFyZSBzdGlsbCBhbGxvd2VkIFtyZV1heCBmb3Igc2NyYXRjaCAqLwogI2RlZmluZSBQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMJIj1hIiAoX19lYXgpCiAjZGVmaW5lIFBWT1BfQ0FMTEVFX0NMT0JCRVJTCVBWT1BfVkNBTExFRV9DTE9CQkVSUwogCkBAIC01ODMsOCArNTg1LDggQEAKIAkJICAgICAgIFZFWFRSQV9DTE9CQkVSUywJCQkJCVwKIAkJICAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKIAotI2RlZmluZSBfX1BWT1BfVkNBTExFRVNBVkUocmV0dHlwZSwgb3AsIHByZSwgcG9zdCwgLi4uKQkJCVwKLQlfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLmZ1bmMsIENMQlJfUkVUX1JFRywJCQlcCisjZGVmaW5lIF9fUFZPUF9WQ0FMTEVFU0FWRShvcCwgcHJlLCBwb3N0LCAuLi4pCQkJCVwKKwlfX19fUFZPUF9WQ0FMTChvcC5mdW5jLCBDTEJSX1JFVF9SRUcsCQkJCVwKIAkJICAgICAgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTLCAsCQkJCVwKIAkJICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKaW5kZXggN2I0NjdiZi4uZDFmNGE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaApAQCAtMjc3LDYgKzI3Nyw3IEBACiB0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CiAKIGV4dGVybiBwdGV2YWxfdCBfX3N1cHBvcnRlZF9wdGVfbWFzazsKK2V4dGVybiB2b2lkIHNldF9ueCh2b2lkKTsKIGV4dGVybiBpbnQgbnhfZW5hYmxlZDsKIAogI2RlZmluZSBwZ3Byb3Rfd3JpdGVjb21iaW5lCXBncHJvdF93cml0ZWNvbWJpbmUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggYzM0MjllOC4uYzk3ODY0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0KQkoKih1bnNpZ25lZCBsb25nICopKCh0KS0+dGhyZWFkLnNwIC0gOCkpCiAKICNkZWZpbmUgdGFza19wdF9yZWdzKHRzaykJKChzdHJ1Y3QgcHRfcmVncyAqKSh0c2spLT50aHJlYWQuc3AwIC0gMSkKLSNkZWZpbmUgS1NUS19FU1AodHNrKQkJLTEgLyogc29ycnkuIGRvZXNuJ3Qgd29yayBmb3Igc3lzY2FsbC4gKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIEtTVEtfRVNQKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCiBleHRlcm4gdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X2lwLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggNmYwNjk1ZC4uNDBlMzdiMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0xNDMsNiArMTQzLDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAogCQkJCXwgMCpTRF9QT1dFUlNBVklOR1NfQkFMQU5DRQkJXAogCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCkBAIC0xNjUsMjEgKzE2NiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCi17Ci0JcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCAwNGViNmM5Li5kMTQxNGFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgorI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgorI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAKIAogLyoKQEAgLTExNCw3ICsxMTYsNyBAQAogLyoKICAqIFRoZSBsYXJnZXN0IHBvc3NpYmxlIE5BU0lEIG9mIGEgQyBvciBNIGJyaWNrICgrIDIpCiAgKi8KLSNkZWZpbmUgVVZfTUFYX05BU0lEX1ZBTFVFCShVVl9NQVhfTlVNQUxJTktfTk9ERVMgKiAyKQorI2RlZmluZSBVVl9NQVhfTkFTSURfVkFMVUUJKFVWX01BWF9OVU1BTElOS19CTEFERVMgKiAyKQogCiBzdHJ1Y3QgdXZfc2Npcl9zIHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKQEAgLTIzMCw2ICsyMzIsMjAgQEAKIAlyZXR1cm4gdXZfc29jX3BoeXNfcmFtX3RvX2dwYShfX3BhKHYpKTsKIH0KIAorLyogZ25vZGUgLT4gcG5vZGUgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9ncGFfdG9fZ25vZGUodW5zaWduZWQgbG9uZyBncGEpCit7CisJcmV0dXJuIGdwYSA+PiB1dl9odWJfaW5mby0+bV92YWw7Cit9CisKKy8qIGdwYSAtPiBwbm9kZSAqLworc3RhdGljIGlubGluZSBpbnQgdXZfZ3BhX3RvX3Bub2RlKHVuc2lnbmVkIGxvbmcgZ3BhKQoreworCXVuc2lnbmVkIGxvbmcgbl9tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKKworCXJldHVybiB1dl9ncGFfdG9fZ25vZGUoZ3BhKSAmIG5fbWFzazsKK30KKwogLyogcG5vZGUsIG9mZnNldCAtLT4gc29ja2V0IHZpcnR1YWwgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqdXZfcG5vZGVfb2Zmc2V0X3RvX3ZhZGRyKGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CkBAIC00MjEsOSArNDM3LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdXZfaHViX3NlbmRfaXBpKGludCBwbm9kZSwgaW50IGFwaWNpZCwgaW50IHZlY3RvcikKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIGRtb2RlID0gZGVzdF9GaXhlZDsKKworCWlmICh2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikKKwkJZG1vZGUgPSBkZXN0X05NSTsKIAogCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8CiAJCQkoKGFwaWNpZCkgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJCQkoZG1vZGUgPDwgVVZIX0lQSV9JTlRfREVMSVZFUllfTU9ERV9TSEZUKSB8CiAJCQkodmVjdG9yIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKTsKIAl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwppbmRleCA4YzQ0YzIzLi41OWNkZmE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwpAQCAtNDgsNyArNDgsNyBAQAogCSAqIFA0LCBDb3JlIGFuZCBiZXlvbmQgQ1BVcwogCSAqLwogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYKLQkgICAgKGMtPng4NiA+IDB4NiB8fCAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21vZGVsID49IDE0KSkpCisJICAgIChjLT54ODYgPiAweGYgfHwgKGMtPng4NiA9PSA2ICYmIGMtPng4Nl9tb2RlbCA+PSAxNCkpKQogCQkJZmxhZ3MtPmJtX2NvbnRyb2wgPSAwOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0X2JtX2NoZWNrKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUwppbmRleCA3ZGEwMGI3Li4wNjBmZmY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCkBAIC01Nyw1ICs1Nyw4IEBACiAJCSooLm5vdGUqKQogCX0KIAorCS8qCisJICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKwkgKi8KIAkuID0gQVNTRVJUKF9lbmQgPD0gV0FLRVVQX1NJWkUsICJXYWtldXAgdG9vIGJpZyEiKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCA5OGYyMzBmLi4wMjg1NTIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0xMjIwLDYgKzEyMjAsOCBAQAogCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMV0gPSAwOwogCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMl0gPSAwOwogCisJYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fNjMoZGV2aWQpOworCiAJLyogZGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50ZXIgKi8KIAlkb21haW4tPmRldl9jbnQgLT0gMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwppbmRleCBiNGI2MWQ0Li5jMjAwMDFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJd3JpdGVsKGN0cmwsIGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NPTlRST0xfT0ZGU0VUKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGlvbW11X2ZlYXR1cmVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTggYml0KQorc3RhdGljIHZvaWQgaW9tbXVfZmVhdHVyZV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1OCBiaXQpCiB7CiAJdTMyIGN0cmw7CiAKQEAgLTUxOSw2ICs1MTksMjYgQEAKIAlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhW2ldIHw9ICgxIDw8IF9iaXQpOwogfQogCitzdGF0aWMgaW50IGdldF9kZXZfZW50cnlfYml0KHUxNiBkZXZpZCwgdTggYml0KQoreworCWludCBpID0gKGJpdCA+PiA1KSAmIDB4MDc7CisJaW50IF9iaXQgPSBiaXQgJiAweDFmOworCisJcmV0dXJuIChhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhW2ldICYgKDEgPDwgX2JpdCkpID4+IF9iaXQ7Cit9CisKKwordm9pZCBhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82Myh1MTYgZGV2aWQpCit7CisJaW50IHN5c21ndDsKKworCXN5c21ndCA9IGdldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfU1lTTUdUMSkgfAorCQkgKGdldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfU1lTTUdUMikgPDwgMSk7CisKKwlpZiAoc3lzbWd0ID09IDB4MDEpCisJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfSVcpOworfQorCiAvKiBXcml0ZXMgdGhlIHNwZWNpZmljIElPTU1VIGZvciBhIGRldmljZSBpbnRvIHRoZSBybG9va3VwIHRhYmxlICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2lvbW11X2Zvcl9kZXZpY2Uoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHUxNiBkZXZpZCkKIHsKQEAgLTU0Nyw2ICs1NjcsOCBAQAogCWlmIChmbGFncyAmIEFDUElfREVWRkxBR19MSU5UMSkKIAkJc2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9MSU5UMV9QQVNTKTsKIAorCWFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKGRldmlkKTsKKwogCXNldF9pb21tdV9mb3JfZGV2aWNlKGlvbW11LCBkZXZpZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCmluZGV4IGY1ZjU4ODYuLjMyNmMyNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpAQCAtMzUyLDE0ICszNTIsMTQgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZGlyX2FkZHJzKTsgaSsrKSB7CiAJCWFsaWFzLnYgPSB1dl9yZWFkX2xvY2FsX21tcihyZWRpcl9hZGRyc1tpXS5hbGlhcyk7Ci0JCWlmIChhbGlhcy5zLmJhc2UgPT0gMCkgeworCQlpZiAoYWxpYXMucy5lbmFibGUgJiYgYWxpYXMucy5iYXNlID09IDApIHsKIAkJCSpzaXplID0gKDFVTCA8PCBhbGlhcy5zLm1fYWxpYXMpOwogCQkJcmVkaXJlY3QudiA9IHV2X3JlYWRfbG9jYWxfbW1yKHJlZGlyX2FkZHJzW2ldLnJlZGlyZWN0KTsKIAkJCSpiYXNlID0gKHVuc2lnbmVkIGxvbmcpcmVkaXJlY3Qucy5kZXN0X2Jhc2UgPDwgREVTVF9TSElGVDsKIAkJCXJldHVybjsKIAkJfQogCX0KLQlCVUcoKTsKKwkqYmFzZSA9ICpzaXplID0gMDsKIH0KIAogZW51bSBtYXBfdHlwZSB7bWFwX3diLCBtYXBfdWN9OwpAQCAtNjE5LDEyICs2MTksMTIgQEAKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmxvd21lbV9yZW1hcF9iYXNlID0gbG93bWVtX3JlZGlyX2Jhc2U7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5sb3dtZW1fcmVtYXBfdG9wID0gbG93bWVtX3JlZGlyX3NpemU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5tX3ZhbCA9IG1fdmFsOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl92YWwgPSBtX3ZhbDsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fdmFsID0gbl92YWw7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5udW1hX2JsYWRlX2lkID0gYmxhZGU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ibGFkZV9wcm9jZXNzb3JfaWQgPSBsY3B1OwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+cG5vZGUgPSBwbm9kZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlX21hc2sgPSBwbm9kZV9tYXNrOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMSA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDFVTCA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0gZ25vZGVfdXBwZXI7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV9leHRyYSA9IGdub2RlX2V4dHJhOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z2xvYmFsX21tcl9iYXNlID0gbW1yX2Jhc2U7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggN2Q1YzNiMC4uOGI1ODFkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtNTI2LDE1ICs1MjYsMjEgQEAKIAogc3RhdGljIGludCBhY3BpX2NwdWZyZXFfYmxhY2tsaXN0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQkvKiBodHRwOi8vd3d3LmludGVsLmNvbS9Bc3NldHMvUERGL3NwZWN1cGRhdGUvMzE0NTU0LnBkZgorCS8qIEludGVsIFhlb24gUHJvY2Vzc29yIDcxMDAgU2VyaWVzIFNwZWNpZmljYXRpb24gVXBkYXRlCisJICogaHR0cDovL3d3dy5pbnRlbC5jb20vQXNzZXRzL1BERi9zcGVjdXBkYXRlLzMxNDU1NC5wZGYKIAkgKiBBTDMwOiBBIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIChNQ0UpIE9jY3VycmluZyBkdXJpbmcgYW4KIAkgKiBFbmhhbmNlZCBJbnRlbCBTcGVlZFN0ZXAgVGVjaG5vbG9neSBSYXRpbyBDaGFuZ2UgTWF5IENhdXNlCi0JICogQm90aCBQcm9jZXNzb3IgQ29yZXMgdG8gTG9jayBVcCB3aGVuIEhUIGlzIGVuYWJsZWQqLworCSAqIEJvdGggUHJvY2Vzc29yIENvcmVzIHRvIExvY2sgVXAuICovCiAJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgewogCQlpZiAoKGMtPng4NiA9PSAxNSkgJiYKIAkJICAgIChjLT54ODZfbW9kZWwgPT0gNikgJiYKLQkJICAgIChjLT54ODZfbWFzayA9PSA4KSAmJiBzbXRfY2FwYWJsZSgpKQorCQkgICAgKGMtPng4Nl9tYXNrID09IDgpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJhY3BpLWNwdWZyZXE6IEludGVsKFIpICIKKwkJCSAgICAiWGVvbihSKSA3MTAwIEVycmF0YSBBTDMwLCBwcm9jZXNzb3JzIG1heSAiCisJCQkgICAgImxvY2sgdXAgb24gZnJlcXVlbmN5IGNoYW5nZXM6IGRpc2FibGluZyAiCisJCQkgICAgImFjcGktY3B1ZnJlcS5cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CisJCSAgICB9CiAJCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU0OSwxMyArNTU1LDE4IEBACiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHBvbGljeS0+Y3B1KTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CisjaWZkZWYgQ09ORklHX1NNUAorCXN0YXRpYyBpbnQgYmxhY2tsaXN0ZWQ7CisjZW5kaWYKIAogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9jcHVfaW5pdFxuIik7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JcmVzdWx0ID0gYWNwaV9jcHVmcmVxX2JsYWNrbGlzdChjKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OworCWlmIChibGFja2xpc3RlZCkKKwkJcmV0dXJuIGJsYWNrbGlzdGVkOworCWJsYWNrbGlzdGVkID0gYWNwaV9jcHVmcmVxX2JsYWNrbGlzdChjKTsKKwlpZiAoYmxhY2tsaXN0ZWQpCisJCXJldHVybiBibGFja2xpc3RlZDsKICNlbmRpZgogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwppbmRleCBjZTJlZDNlLi5jYWJkMmZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtODEzLDcgKzgxMyw3IEBACiAJCQltZW1jcHkoZWJsY3IsIHNhbXVlbDJfZWJsY3IsIHNpemVvZihzYW11ZWwyX2VibGNyKSk7CiAJCQlicmVhazsKIAkJY2FzZSAxIC4uLiAxNToKLQkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOworCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjI7CiAJCQlpZiAoYy0+eDg2X21hc2sgPCA4KSB7CiAJCQkJY3B1X21vZGVsID0gQ1BVX1NBTVVFTDI7CiAJCQkJY3B1bmFtZSA9ICJDMyAnU2FtdWVsIDInIFtDNUJdIjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggNjM5NGFhNS4uM2YxMmRhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAJCSAqIHNldCBpdCB0byAxIHRvIGF2b2lkIHByb2JsZW1zIGluIHRoZSBmdXR1cmUuCiAJCSAqIEZvciBhbGwgb3RoZXJzIGl0J3MgYSBCSU9TIGJ1Zy4KIAkJICovCi0JCWlmICghYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxMSkKKwkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTEpCiAJCQlwcmludGsoS0VSTl9FUlIgRldfV0FSTiBQRlggIkludmFsaWQgemVybyB0cmFuc2l0aW9uICIKIAkJCQkibGF0ZW5jeVxuIik7CiAJCW1heF9sYXRlbmN5ID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IDY5MTFlOTEuLjNhZTVhN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtMjMyLDI4ICsyMzIsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGdldF9mcmVxX2RhdGEgewotCXVuc2lnbmVkIGludCBzcGVlZDsKLQl1bnNpZ25lZCBpbnQgcHJvY2Vzc29yOwotfTsKLQotc3RhdGljIHZvaWQgZ2V0X2ZyZXFfZGF0YSh2b2lkICpfZGF0YSkKK3N0YXRpYyB2b2lkIGdldF9mcmVxX2RhdGEodm9pZCAqX3NwZWVkKQogewotCXN0cnVjdCBnZXRfZnJlcV9kYXRhICpkYXRhID0gX2RhdGE7CisJdW5zaWduZWQgaW50ICpzcGVlZCA9IF9zcGVlZDsKIAotCWRhdGEtPnNwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koZGF0YS0+cHJvY2Vzc29yKTsKKwkqc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGdldF9mcmVxX2RhdGEgZGF0YSA9IHsgLnByb2Nlc3NvciA9IGNwdSB9OworCXVuc2lnbmVkIGludCBzcGVlZDsKIAogCS8qIFlvdSdyZSBzdXBwb3NlZCB0byBlbnN1cmUgQ1BVIGlzIG9ubGluZS4gKi8KLQlpZiAoc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZ2V0X2ZyZXFfZGF0YSwgJmRhdGEsIDEpICE9IDApCisJaWYgKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGdldF9mcmVxX2RhdGEsICZzcGVlZCwgMSkgIT0gMCkKIAkJQlVHKCk7CiAKLQlkcHJpbnRrKCJkZXRlY3RlZCAldSBrSHogYXMgY3VycmVudCBmcmVxdWVuY3lcbiIsIGRhdGEuc3BlZWQpOwotCXJldHVybiBkYXRhLnNwZWVkOworCWRwcmludGsoImRldGVjdGVkICV1IGtIeiBhcyBjdXJyZW50IGZyZXF1ZW5jeVxuIiwgc3BlZWQpOworCXJldHVybiBzcGVlZDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMKaW5kZXggNzAyOWYwZS4uNDcyNzYzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYwpAQCAtOTgsOCArOTgsOSBAQAogfTsKIAogLyogSW5qZWN0IG1jZSBvbiBjdXJyZW50IENQVSAqLwotc3RhdGljIGludCByYWlzZV9sb2NhbChzdHJ1Y3QgbWNlICptKQorc3RhdGljIGludCByYWlzZV9sb2NhbCh2b2lkKQogeworCXN0cnVjdCBtY2UgKm0gPSAmX19nZXRfY3B1X3ZhcihpbmplY3RtKTsKIAlpbnQgY29udGV4dCA9IE1DSl9DVFgobS0+aW5qZWN0X2ZsYWdzKTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgY3B1ID0gbS0+ZXh0Y3B1OwpAQCAtMTY3LDEyICsxNjgsMTIgQEAKIAkJCX0KIAkJCWNwdV9yZWxheCgpOwogCQl9Ci0JCXJhaXNlX2xvY2FsKG0pOworCQlyYWlzZV9sb2NhbCgpOwogCQlwdXRfY3B1KCk7CiAJCXB1dF9vbmxpbmVfY3B1cygpOwogCX0gZWxzZQogI2VuZGlmCi0JCXJhaXNlX2xvY2FsKG0pOworCQlyYWlzZV9sb2NhbCgpOwogfQogCiAvKiBFcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IDJmNWFhYjIuLjcyMWE3N2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC04NSw2ICs4NSwxOCBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2UsIG1jZXNfc2Vlbik7CiBzdGF0aWMgaW50CQkJY3B1X21pc3Npbmc7CiAKK3N0YXRpYyB2b2lkIGRlZmF1bHRfZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQoreworCXByX2VtZXJnKCJObyBodW1hbiByZWFkYWJsZSBNQ0UgZGVjb2Rpbmcgc3VwcG9ydCBvbiB0aGlzIENQVSB0eXBlLlxuIik7CisJcHJfZW1lcmcoIlJ1biB0aGUgbWVzc2FnZSB0aHJvdWdoICdtY2Vsb2cgLS1hc2NpaScgdG8gZGVjb2RlLlxuIik7Cit9CisKKy8qCisgKiBDUFUvY2hpcHNldCBzcGVjaWZpYyBFREFDIGNvZGUgY2FuIHJlZ2lzdGVyIGEgY2FsbGJhY2sgaGVyZSB0byBwcmludAorICogTUNFIGVycm9ycyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm06CisgKi8KK3ZvaWQgKCp4ODZfbWNlX2RlY29kZV9jYWxsYmFjaykoc3RydWN0IG1jZSAqbSkgPSBkZWZhdWx0X2RlY29kZV9tY2U7CitFWFBPUlRfU1lNQk9MKHg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrKTsKIAogLyogTUNBIGJhbmtzIHBvbGxlZCBieSB0aGUgcGVyaW9kIHBvbGxpbmcgdGltZXIgZm9yIGNvcnJlY3RlZCBldmVudHMgKi8KIERFRklORV9QRVJfQ1BVKG1jZV9iYW5rc190LCBtY2VfcG9sbF9iYW5rcykgPSB7CkBAIC0xNjUsNDkgKzE3Nyw0NiBAQAogCXNldF9iaXQoMCwgJm1jZV9uZWVkX25vdGlmeSk7CiB9CiAKLXZvaWQgX193ZWFrIGRlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKLXsKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyB2b2lkIHByaW50X21jZShzdHJ1Y3QgbWNlICptKQogewotCXByaW50ayhLRVJOX0VNRVJHCi0JICAgICAgICJDUFUgJWQ6IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uOiAlMTZMeCBCYW5rICVkOiAlMDE2THhcbiIsCisJcHJfZW1lcmcoIkNQVSAlZDogTWFjaGluZSBDaGVjayBFeGNlcHRpb246ICUxNkx4IEJhbmsgJWQ6ICUwMTZMeFxuIiwKIAkgICAgICAgbS0+ZXh0Y3B1LCBtLT5tY2dzdGF0dXMsIG0tPmJhbmssIG0tPnN0YXR1cyk7CisKIAlpZiAobS0+aXApIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlJJUCVzICUwMng6PCUwMTZMeD4gIiwKLQkJICAgICAgICEobS0+bWNnc3RhdHVzICYgTUNHX1NUQVRVU19FSVBWKSA/ICIgIUlORVhBQ1QhIiA6ICIiLAotCQkgICAgICAgbS0+Y3MsIG0tPmlwKTsKKwkJcHJfZW1lcmcoIlJJUCVzICUwMng6PCUwMTZMeD4gIiwKKwkJCSEobS0+bWNnc3RhdHVzICYgTUNHX1NUQVRVU19FSVBWKSA/ICIgIUlORVhBQ1QhIiA6ICIiLAorCQkJCW0tPmNzLCBtLT5pcCk7CisKIAkJaWYgKG0tPmNzID09IF9fS0VSTkVMX0NTKQogCQkJcHJpbnRfc3ltYm9sKCJ7JXN9IiwgbS0+aXApOwotCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCQlwcl9jb250KCJcbiIpOwogCX0KLQlwcmludGsoS0VSTl9FTUVSRyAiVFNDICVsbHggIiwgbS0+dHNjKTsKLQlpZiAobS0+YWRkcikKLQkJcHJpbnRrKEtFUk5fQ09OVCAiQUREUiAlbGx4ICIsIG0tPmFkZHIpOwotCWlmIChtLT5taXNjKQotCQlwcmludGsoS0VSTl9DT05UICJNSVNDICVsbHggIiwgbS0+bWlzYyk7Ci0JcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiUFJPQ0VTU09SICV1OiV4IFRJTUUgJWxsdSBTT0NLRVQgJXUgQVBJQyAleFxuIiwKLQkJCW0tPmNwdXZlbmRvciwgbS0+Y3B1aWQsIG0tPnRpbWUsIG0tPnNvY2tldGlkLAotCQkJbS0+YXBpY2lkKTsKIAotCWRlY29kZV9tY2UobSk7CisJcHJfZW1lcmcoIlRTQyAlbGx4ICIsIG0tPnRzYyk7CisJaWYgKG0tPmFkZHIpCisJCXByX2NvbnQoIkFERFIgJWxseCAiLCBtLT5hZGRyKTsKKwlpZiAobS0+bWlzYykKKwkJcHJfY29udCgiTUlTQyAlbGx4ICIsIG0tPm1pc2MpOworCisJcHJfY29udCgiXG4iKTsKKwlwcl9lbWVyZygiUFJPQ0VTU09SICV1OiV4IFRJTUUgJWxsdSBTT0NLRVQgJXUgQVBJQyAleFxuIiwKKwkJbS0+Y3B1dmVuZG9yLCBtLT5jcHVpZCwgbS0+dGltZSwgbS0+c29ja2V0aWQsIG0tPmFwaWNpZCk7CisKKwkvKgorCSAqIFByaW50IG91dCBodW1hbi1yZWFkYWJsZSBkZXRhaWxzIGFib3V0IHRoZSBNQ0UgZXJyb3IsCisJICogKGlmIHRoZSBDUFUgaGFzIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGF0KToKKwkgKi8KKwl4ODZfbWNlX2RlY29kZV9jYWxsYmFjayhtKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfbWNlX2hlYWQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9FTUVSRyAiXG5IQVJEV0FSRSBFUlJPUlxuIik7CisJcHJfZW1lcmcoIlxuSEFSRFdBUkUgRVJST1JcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9tY2VfdGFpbCh2b2lkKQogewotCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIGlzIG5vdCBhIHNvZnR3YXJlIHByb2JsZW0hXG4iCi0jaWYgKCFkZWZpbmVkKENPTkZJR19FREFDKSB8fCAhZGVmaW5lZChDT05GSUdfQ1BVX1NVUF9BTUQpKQotCSAgICAgICAiUnVuIHRocm91Z2ggbWNlbG9nIC0tYXNjaWkgdG8gZGVjb2RlIGFuZCBjb250YWN0IHlvdXIgaGFyZHdhcmUgdmVuZG9yXG4iCi0jZW5kaWYKLQkgICAgICAgKTsKKwlwcl9lbWVyZygiVGhpcyBpcyBub3QgYSBzb2Z0d2FyZSBwcm9ibGVtIVxuIik7CiB9CiAKICNkZWZpbmUgUEFOSUNfVElNRU9VVCA1IC8qIDUgc2Vjb25kcyAqLwpAQCAtMjIxLDYgKzIzMCw3IEBACiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYW5pYyh2b2lkKQogewogCWxvbmcgdGltZW91dCA9IFBBTklDX1RJTUVPVVQqVVNFQ19QRVJfU0VDOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXdoaWxlICh0aW1lb3V0LS0gPiAwKQpAQCAtMjg4LDYgKzI5OCw3IEBACiBzdGF0aWMgaW50IG1zcl90b19vZmZzZXQodTMyIG1zcikKIHsKIAl1bnNpZ25lZCBiYW5rID0gX19nZXRfY3B1X3ZhcihpbmplY3RtLmJhbmspOworCiAJaWYgKG1zciA9PSByaXBfbXNyKQogCQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IG1jZSwgaXApOwogCWlmIChtc3IgPT0gTVNSX0lBMzJfTUN4X1NUQVRVUyhiYW5rKSkKQEAgLTMwNSwxMyArMzE2LDI1IEBACiBzdGF0aWMgdTY0IG1jZV9yZG1zcmwodTMyIG1zcikKIHsKIAl1NjQgdjsKKwogCWlmIChfX2dldF9jcHVfdmFyKGluamVjdG0pLmZpbmlzaGVkKSB7CiAJCWludCBvZmZzZXQgPSBtc3JfdG9fb2Zmc2V0KG1zcik7CisKIAkJaWYgKG9mZnNldCA8IDApCiAJCQlyZXR1cm4gMDsKIAkJcmV0dXJuICoodTY0ICopKChjaGFyICopJl9fZ2V0X2NwdV92YXIoaW5qZWN0bSkgKyBvZmZzZXQpOwogCX0KLQlyZG1zcmwobXNyLCB2KTsKKworCWlmIChyZG1zcmxfc2FmZShtc3IsICZ2KSkgeworCQlXQVJOX09OQ0UoMSwgIm1jZTogVW5hYmxlIHRvIHJlYWQgbXNyICVkIVxuIiwgbXNyKTsKKwkJLyoKKwkJICogUmV0dXJuIHplcm8gaW4gY2FzZSB0aGUgYWNjZXNzIGZhdWx0ZWQuIFRoaXMgc2hvdWxkCisJCSAqIG5vdCBoYXBwZW4gbm9ybWFsbHkgYnV0IGNhbiBoYXBwZW4gaWYgdGhlIENQVSBkb2VzCisJCSAqIHNvbWV0aGluZyB3ZWlyZCwgb3IgaWYgdGhlIGNvZGUgaXMgYnVnZ3kuCisJCSAqLworCQl2ID0gMDsKKwl9CisKIAlyZXR1cm4gdjsKIH0KIApAQCAtMzE5LDYgKzM0Miw3IEBACiB7CiAJaWYgKF9fZ2V0X2NwdV92YXIoaW5qZWN0bSkuZmluaXNoZWQpIHsKIAkJaW50IG9mZnNldCA9IG1zcl90b19vZmZzZXQobXNyKTsKKwogCQlpZiAob2Zmc2V0ID49IDApCiAJCQkqKHU2NCAqKSgoY2hhciAqKSZfX2dldF9jcHVfdmFyKGluamVjdG0pICsgb2Zmc2V0KSA9IHY7CiAJCXJldHVybjsKQEAgLTQxNSw3ICs0MzksNyBAQAogCQltLT5pcCA9IG1jZV9yZG1zcmwocmlwX21zcik7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAvKgogICogQ2FsbGVkIGFmdGVyIGludGVycnVwdHMgaGF2ZSBiZWVuIHJlZW5hYmxlZCBhZ2FpbgogICogd2hlbiBhIE1DRSBoYXBwZW5lZCBkdXJpbmcgYW4gaW50ZXJydXB0cyBvZmYgcmVnaW9uCkBAIC0xMTcyLDYgKzExOTYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewogCQlzdHJ1Y3QgbWNlX2JhbmsgKmIgPSAmbWNlX2JhbmtzW2ldOworCiAJCWItPmN0bCA9IC0xVUxMOwogCQliLT5pbml0ID0gMTsKIAl9CkBAIC0xMTg5LDcgKzEyMTQsOCBAQAogCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOwogCiAJYiA9IGNhcCAmIE1DR19CQU5LQ05UX01BU0s7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibWNlOiBDUFUgc3VwcG9ydHMgJWQgTUNFIGJhbmtzXG4iLCBiKTsKKwlpZiAoIWJhbmtzKQorCQlwcmludGsoS0VSTl9JTkZPICJtY2U6IENQVSBzdXBwb3J0cyAlZCBNQ0UgYmFua3NcbiIsIGIpOwogCiAJaWYgKGIgPiBNQVhfTlJfQkFOS1MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTIwMyw2ICsxMjI5LDcgQEAKIAliYW5rcyA9IGI7CiAJaWYgKCFtY2VfYmFua3MpIHsKIAkJaW50IGVyciA9IG1jZV9iYW5rc19pbml0KCk7CisKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTIzNyw2ICsxMjY0LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKCFiLT5pbml0KQogCQkJY29udGludWU7CiAJCXdybXNybChNU1JfSUEzMl9NQ3hfQ1RMKGkpLCBiLT5jdGwpOwpAQCAtMTYyNiw2ICsxNjU0LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgMCk7CiAJfQpAQCAtMTkxMSw2ICsxOTQwLDcgQEAKIAkJY21jaV9jbGVhcigpOwogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgMCk7CiAJfQpAQCAtMTkyOCw2ICsxOTU4LDcgQEAKIAkJY21jaV9yZWVuYWJsZSgpOwogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgYi0+Y3RsKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCmluZGV4IDg4OWY2NjUuLjdjNzg1NjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDYzYTU2ZDEuLmIzYTFkYmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtMzQsMjAgKzM0LDMxIEBACiAvKiBIb3cgbG9uZyB0byB3YWl0IGJldHdlZW4gcmVwb3J0aW5nIHRoZXJtYWwgZXZlbnRzICovCiAjZGVmaW5lIENIRUNLX0lOVEVSVkFMCQkoMzAwICogSFopCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShfX3U2NCwgbmV4dF9jaGVjaykgPSBJTklUSUFMX0pJRkZJRVM7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGhlcm1hbF90aHJvdHRsZV9jb3VudCk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGhlcm1hbF90aHJvdHRsZV9hY3RpdmUpOworLyoKKyAqIEN1cnJlbnQgdGhlcm1hbCB0aHJvdHRsaW5nIHN0YXRlOgorICovCitzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSB7CisJYm9vbAkJCWlzX3Rocm90dGxlZDsKIAotc3RhdGljIGF0b21pY190IHRoZXJtX3Rocm90X2VuCQk9IEFUT01JQ19JTklUKDApOworCXU2NAkJCW5leHRfY2hlY2s7CisJdW5zaWduZWQgbG9uZwkJdGhyb3R0bGVfY291bnQ7CisJdW5zaWduZWQgbG9uZwkJbGFzdF90aHJvdHRsZV9jb3VudDsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSwgdGhlcm1hbF9zdGF0ZSk7CisKK3N0YXRpYyBhdG9taWNfdCB0aGVybV90aHJvdF9lbgk9IEFUT01JQ19JTklUKDApOwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAjZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKF9uYW1lKQkJCQlcCiAJc3RhdGljIFNZU0RFVl9BVFRSKF9uYW1lLCAwNDQ0LCB0aGVybV90aHJvdF9zeXNkZXZfc2hvd18jI19uYW1lLCBOVUxMKQogCiAjZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKG5hbWUpCQkJXAotc3RhdGljIHNzaXplX3QgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCVwKLQkJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJICAgICAgY2hhciAqYnVmKQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3QgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNuYW1lKAkJCQlcCisJCQlzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAkJCQlcCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCQljaGFyICpidWYpCQkJCQlcCiB7CQkJCQkJCQkJXAogCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOwkJCQkJXAogCXNzaXplX3QgcmV0OwkJCQkJCQlcCkBAIC01NSw3ICs2Niw3IEBACiAJcHJlZW1wdF9kaXNhYmxlKCk7CS8qIENQVSBob3RwbHVnICovCQkJXAogCWlmIChjcHVfb25saW5lKGNwdSkpCQkJCQkJXAogCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwJCQkJXAotCQkJICAgICAgcGVyX2NwdSh0aGVybWFsX3Rocm90dGxlXyMjbmFtZSwgY3B1KSk7CVwKKwkJCSAgICAgIHBlcl9jcHUodGhlcm1hbF9zdGF0ZSwgY3B1KS5uYW1lKTsJXAogCWVsc2UJCQkJCQkJCVwKIAkJcmV0ID0gMDsJCQkJCQlcCiAJcHJlZW1wdF9lbmFibGUoKTsJCQkJCQlcCkBAIC02MywxMSArNzQsMTEgQEAKIAlyZXR1cm4gcmV0OwkJCQkJCQlcCiB9CiAKLWRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKGNvdW50KTsKLWRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKGNvdW50KTsKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKHRocm90dGxlX2NvdW50KTsKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKHRocm90dGxlX2NvdW50KTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRoZXJtYWxfdGhyb3R0bGVfYXR0cnNbXSA9IHsKLQkmYXR0cl9jb3VudC5hdHRyLAorCSZhdHRyX3Rocm90dGxlX2NvdW50LmF0dHIsCiAJTlVMTAogfTsKIApAQCAtOTMsMzMgKzEwNCwzOSBAQAogICogICAgICAgICAgMSA6IEV2ZW50IHNob3VsZCBiZSBsb2dnZWQgZnVydGhlciwgYW5kIGEgbWVzc2FnZSBoYXMgYmVlbgogICogICAgICAgICAgICAgIHByaW50ZWQgdG8gdGhlIHN5c2xvZy4KICAqLwotc3RhdGljIGludCB0aGVybV90aHJvdF9wcm9jZXNzKGludCBjdXJyKQorc3RhdGljIGludCB0aGVybV90aHJvdF9wcm9jZXNzKGJvb2wgaXNfdGhyb3R0bGVkKQogewotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JX191NjQgdG1wX2ppZmZzID0gZ2V0X2ppZmZpZXNfNjQoKTsKLQlib29sIHdhc190aHJvdHRsZWQgPSBfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfYWN0aXZlKTsKLQlib29sIGlzX3Rocm90dGxlZCA9IF9fZ2V0X2NwdV92YXIodGhlcm1hbF90aHJvdHRsZV9hY3RpdmUpID0gY3VycjsKKwlzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSAqc3RhdGU7CisJdW5zaWduZWQgaW50IHRoaXNfY3B1OworCWJvb2wgd2FzX3Rocm90dGxlZDsKKwl1NjQgbm93OworCisJdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbm93ID0gZ2V0X2ppZmZpZXNfNjQoKTsKKwlzdGF0ZSA9ICZwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIHRoaXNfY3B1KTsKKworCXdhc190aHJvdHRsZWQgPSBzdGF0ZS0+aXNfdGhyb3R0bGVkOworCXN0YXRlLT5pc190aHJvdHRsZWQgPSBpc190aHJvdHRsZWQ7CiAKIAlpZiAoaXNfdGhyb3R0bGVkKQotCQlfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfY291bnQpKys7CisJCXN0YXRlLT50aHJvdHRsZV9jb3VudCsrOwogCi0JaWYgKCEod2FzX3Rocm90dGxlZCBeIGlzX3Rocm90dGxlZCkgJiYKLQkgICAgdGltZV9iZWZvcmU2NCh0bXBfamlmZnMsIF9fZ2V0X2NwdV92YXIobmV4dF9jaGVjaykpKQorCWlmICh0aW1lX2JlZm9yZTY0KG5vdywgc3RhdGUtPm5leHRfY2hlY2spICYmCisJCQlzdGF0ZS0+dGhyb3R0bGVfY291bnQgIT0gc3RhdGUtPmxhc3RfdGhyb3R0bGVfY291bnQpCiAJCXJldHVybiAwOwogCi0JX19nZXRfY3B1X3ZhcihuZXh0X2NoZWNrKSA9IHRtcF9qaWZmcyArIENIRUNLX0lOVEVSVkFMOworCXN0YXRlLT5uZXh0X2NoZWNrID0gbm93ICsgQ0hFQ0tfSU5URVJWQUw7CisJc3RhdGUtPmxhc3RfdGhyb3R0bGVfY291bnQgPSBzdGF0ZS0+dGhyb3R0bGVfY291bnQ7CiAKIAkvKiBpZiB3ZSBqdXN0IGVudGVyZWQgdGhlIHRoZXJtYWwgZXZlbnQgKi8KIAlpZiAoaXNfdGhyb3R0bGVkKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkNQVSVkOiBUZW1wZXJhdHVyZSBhYm92ZSB0aHJlc2hvbGQsICIKLQkJICAgICAgICJjcHUgY2xvY2sgdGhyb3R0bGVkICh0b3RhbCBldmVudHMgPSAlbHUpXG4iLAotCQkgICAgICAgY3B1LCBfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfY291bnQpKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVJWQ6IFRlbXBlcmF0dXJlIGFib3ZlIHRocmVzaG9sZCwgY3B1IGNsb2NrIHRocm90dGxlZCAodG90YWwgZXZlbnRzID0gJWx1KVxuIiwgdGhpc19jcHUsIHN0YXRlLT50aHJvdHRsZV9jb3VudCk7CiAKIAkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogCQlyZXR1cm4gMTsKIAl9CiAJaWYgKHdhc190aHJvdHRsZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6IFRlbXBlcmF0dXJlL3NwZWVkIG5vcm1hbFxuIiwgY3B1KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6IFRlbXBlcmF0dXJlL3NwZWVkIG5vcm1hbFxuIiwgdGhpc19jcHUpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTIxMyw3ICsyMzAsNyBAQAogCV9fdTY0IG1zcl92YWw7CiAKIAlyZG1zcmwoTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKLQlpZiAodGhlcm1fdGhyb3RfcHJvY2Vzcyhtc3JfdmFsICYgVEhFUk1fU1RBVFVTX1BST0NIT1QpKQorCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKChtc3JfdmFsICYgVEhFUk1fU1RBVFVTX1BST0NIT1QpICE9IDApKQogCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KG1zcl92YWwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYwppbmRleCAzMTU3MzhjLi43M2M4NmRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKQEAgLTg0Niw3ICs4NDYsNyBAQAogCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CiAKIAlyYW5nZV9zdW1zID0gc3VtX3JhbmdlcyhyYW5nZSwgbnJfcmFuZ2UpOwotCXByaW50ayhLRVJOX0lORk8gInRvdGFsIFJBTSBjb3ZlcnJlZDogJWxkTVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJlZDogJWxkTVxuIiwKIAkgICAgICAgcmFuZ2Vfc3VtcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CiAKIAlpZiAobXRycl9jaHVua19zaXplICYmIG10cnJfZ3Jhbl9zaXplKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCmluZGV4IGYwNGU3MjUuLjNjMWIxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCkBAIC05NiwxNyArOTYsMjQgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgYmFzZSwgc2l6ZTsKIAljaGFyICpwdHI7CiAJY2hhciBsaW5lW0xJTkVfU0laRV07CisJaW50IGxlbmd0aDsKIAlzaXplX3QgbGluZWxlbjsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoIWxlbikKLQkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQobGluZSwgMCwgTElORV9TSVpFKTsKLQlpZiAobGVuID4gTElORV9TSVpFKQotCQlsZW4gPSBMSU5FX1NJWkU7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGxpbmUsIGJ1ZiwgbGVuIC0gMSkpCisKKwlsZW5ndGggPSBsZW47CisJbGVuZ3RoLS07CisKKwlpZiAobGVuZ3RoID4gTElORV9TSVpFIC0gMSkKKwkJbGVuZ3RoID0gTElORV9TSVpFIC0gMTsKKworCWlmIChsZW5ndGggPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcihsaW5lLCBidWYsIGxlbmd0aCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJbGluZWxlbiA9IHN0cmxlbihsaW5lKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggYTNjN2FkYi4uYjU4MDFjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTE3OTAsNiArMTc5MCw5IEBACiB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlpZiAoIXg4Nl9wbXUuYXBpYyB8fCAheDg2X3BtdV9pbml0aWFsaXplZCgpKQorCQlyZXR1cm47CisKIAlhcGljLT5zZW5kX0lQSV9zZWxmKExPQ0FMX1BFTkRJTkdfVkVDVE9SKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKaW5kZXggZjdjZGIzYi4uY2Q5N2NlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCkBAIC0xNiw2ICsxNiwyMiBAQAogLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCiB1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKIAorc3RhdGljIGlubGluZSBib29sIGlzX2NyYXNoZWRfcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworI2lmbmRlZiBDT05GSUdfWDg2X1BBRQorCS8qCisJICogbm9uLVBBRSBrZHVtcCBrZXJuZWwgZXhlY3V0ZWQgZnJvbSBhIFBBRSBvbmUgd2lsbCBjcm9wIGhpZ2ggcHRlCisJICogYml0cyBhbmQgcG9rZSB1bndhbnRlZCBzcGFjZSBjb3VudGluZyBhZ2FpbiBmcm9tIGFkZHJlc3MgMCwgd2UKKwkgKiBkb24ndCB3YW50IHRoYXQuIHB0ZSBtdXN0IGZpdCBpbnRvIHVuc2lnbmVkIGxvbmcuIEluIGZhY3QgdGhlCisJICogdGVzdCBjaGVja3MgaGlnaCAxMiBiaXRzIGZvciBiZWluZyB6ZXJvIChwZm4gd2lsbCBiZSBzaGlmdGVkIGxlZnQKKwkgKiBieSBQQUdFX1NISUZUKS4KKwkgKi8KKwlyZXR1cm4gcHRlX3BmbihwZm5fcHRlKHBmbiwgX19wZ3Byb3QoMCkpKSA9PSBwZm47CisjZWxzZQorCXJldHVybiB0cnVlOworI2VuZGlmCit9CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCkBAIC00MSw2ICs1Nyw5IEBACiAJaWYgKCFjc2l6ZSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIWlzX2NyYXNoZWRfcGZuX3ZhbGlkKHBmbikpCisJCXJldHVybiAtRUZBVUxUOworCiAJdmFkZHIgPSBrbWFwX2F0b21pY19wZm4ocGZuLCBLTV9QVEUwKTsKIAogCWlmICghdXNlcmJ1ZikgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggODU0MTliYi4uZDE3ZDQ4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC0xMzc4LDggKzEzNzgsOCBAQAogCWlmIChtYiA8IDE2KQogCQlyZXR1cm4gMTAyNCoxMDI0OwogCi0JLyogVG8gMzJNQiBmb3IgYW55dGhpbmcgYWJvdmUgdGhhdCAqLwotCXJldHVybiAzMioxMDI0KjEwMjQ7CisJLyogVG8gNjRNQiBmb3IgYW55dGhpbmcgYWJvdmUgdGhhdCAqLworCXJldHVybiA2NCoxMDI0KjEwMjQ7CiB9CiAKICNkZWZpbmUgTUFYX1JFU09VUkNFX1NJWkUgKChyZXNvdXJjZV9zaXplX3QpLTEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggMmFjZmQzZi4uYjljODMwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMTc4LDYgKzE3OCwxMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfY29uc29sZV9yZWdpc3RlcihzdHJ1Y3QgY29uc29sZSAqY29uLCBpbnQga2VlcF9lYXJseSkKIHsKKwlpZiAoZWFybHlfY29uc29sZS0+aW5kZXggIT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiRVJST1I6IGVhcmx5cHJpbnRrPSAlcyBhbHJlYWR5IHVzZWRcbiIsCisJCSAgICAgICBjb24tPm5hbWUpOworCQlyZXR1cm47CisJfQogCWVhcmx5X2NvbnNvbGUgPSBjb247CiAJaWYgKGtlZXBfZWFybHkpCiAJCWVhcmx5X2NvbnNvbGUtPmZsYWdzICY9IH5DT05fQk9PVDsKQEAgLTIwMSw4ICsyMDYsMTEgQEAKIAogCXdoaWxlICgqYnVmICE9ICdcMCcpIHsKIAkJaWYgKCFzdHJuY21wKGJ1ZiwgInNlcmlhbCIsIDYpKSB7Ci0JCQllYXJseV9zZXJpYWxfaW5pdChidWYgKyA2KTsKKwkJCWJ1ZiArPSA2OworCQkJZWFybHlfc2VyaWFsX2luaXQoYnVmKTsKIAkJCWVhcmx5X2NvbnNvbGVfcmVnaXN0ZXIoJmVhcmx5X3NlcmlhbF9jb25zb2xlLCBrZWVwKTsKKwkJCWlmICghc3RybmNtcChidWYsICIsdHR5UyIsIDUpKQorCQkJCWJ1ZiArPSA1OwogCQl9CiAJCWlmICghc3RybmNtcChidWYsICJ0dHlTIiwgNCkpIHsKIAkJCWVhcmx5X3NlcmlhbF9pbml0KGJ1ZiArIDQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGFkNWJkOTguLmNkY2ZiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTQ1NCw4ICs0NTQsMTAgQEAKIAlpZiAoYWRkX2VmaV9tZW1tYXApCiAJCWRvX2FkZF9lZmlfbWVtbWFwKCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJeDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSBlZmlfZ2V0X3RpbWU7CiAJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBlZmlfc2V0X3J0Y19tbXNzOworI2VuZGlmCiAKIAkvKiBTZXR1cCBmb3IgRUZJIHJ1bnRpbWUgc2VydmljZSAqLwogCXJlYm9vdF90eXBlID0gQk9PVF9FRkk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwppbmRleCAyMThhYWQ3Li4wNTBjMjc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTc5LDcgKzc5LDcgQEAKICAqIGFueSBwYXJ0aWN1bGFyIEdEVCBsYXlvdXQsIGJlY2F1c2Ugd2UgbG9hZCBvdXIgb3duIGFzIHNvb24gYXMgd2UKICAqIGNhbi4KICAqLwotLnNlY3Rpb24gLnRleHQuaGVhZCwiYXgiLEBwcm9nYml0cworX19IRUFECiBFTlRSWShzdGFydHVwXzMyKQogCS8qIHRlc3QgS0VFUF9TRUdNRU5UUyBmbGFnIHRvIHNlZSBpZiB0aGUgYm9vdGxvYWRlciBpcyBhc2tpbmcKIAkJdXMgdG8gbm90IHJlbG9hZCBzZWdtZW50cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggZDBiYzBhMS4uNzgwY2Q5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCkBAIC00MCw3ICs0MCw3IEBACiBMM19TVEFSVF9LRVJORUwgPSBwdWRfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKQogCiAJLnRleHQKLQkuc2VjdGlvbiAudGV4dC5oZWFkCisJX19IRUFECiAJLmNvZGU2NAogCS5nbG9ibCBzdGFydHVwXzY0CiBzdGFydHVwXzY0OgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2kzODZfa3N5bXNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMKaW5kZXggNDNjZWM2Yi4uOWMzYmQ0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2kzODZfa3N5bXNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Nl9rc3ltc18zMi5jCkBAIC0xMCw2ICsxMCwxNiBAQAogRVhQT1JUX1NZTUJPTChtY291bnQpOwogI2VuZGlmCiAKKy8qCisgKiBOb3RlLCB0aGlzIGlzIGEgcHJvdG90eXBlIHRvIGdldCBhdCB0aGUgc3ltYm9sIGZvcgorICogdGhlIGV4cG9ydCwgYnV0IGRvbnQgdXNlIGl0IGZyb20gQyBjb2RlLCBpdCBpcyB1c2VkCisgKiBieSBhc3NlbWJseSBjb2RlIGFuZCBpcyBub3QgdXNpbmcgQyBjYWxsaW5nIGNvbnZlbnRpb24hCisgKi8KKyNpZm5kZWYgQ09ORklHX1g4Nl9DTVBYQ0hHNjQKK2V4dGVybiB2b2lkIGNtcHhjaGc4Yl9lbXUodm9pZCk7CitFWFBPUlRfU1lNQk9MKGNtcHhjaGc4Yl9lbXUpOworI2VuZGlmCisKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycS5jIGIvYXJjaC94ODYva2VybmVsL2lycS5jCmluZGV4IDc0NjU2ZDEuLjA0YmJkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKQEAgLTYzLDEwICs2MywxMCBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDTlQiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlcmZfaXJxcyk7Ci0Jc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdHNcbiIpOworCXNlcV9wcmludGYocCwgIiAgUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcnJ1cHRzXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTkQiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlbmRpbmdfaXJxcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYwppbmRleCAzNjZiYWExLi5mNGM1MzhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKQEAgLTMxNyw2ICszMTcsMTIgQEAKIAkJcmV0dXJuIFVDT0RFX05GT1VORDsKIAl9CiAKKwlpZiAoKih1MzIgKilmaXJtd2FyZS0+ZGF0YSAhPSBVQ09ERV9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogaW52YWxpZCBVQ09ERV9NQUdJQyAoMHglMDh4KVxuIiwKKwkJICAgICAgICoodTMyICopZmlybXdhcmUtPmRhdGEpOworCQlyZXR1cm4gVUNPREVfRVJST1I7CisJfQorCiAJcmV0ID0gZ2VuZXJpY19sb2FkX21pY3JvY29kZShjcHUsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7CiAKIAlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDY0YjgzOGUuLmE2ZTgwNGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAvKgogICogVGhpcyB2YXJpYWJsZSBiZWNvbWVzIDEgaWYgaW9tbXU9cHQgaXMgcGFzc2VkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgotICogSWYgdGhpcyB2YXJpYWJsZSBpcyAxLCBJT01NVSBpbXBsZW1lbnRhdGlvbnMgZG8gbm8gRE1BIHJhbnNsYXRpb24gZm9yCisgKiBJZiB0aGlzIHZhcmlhYmxlIGlzIDEsIElPTU1VIGltcGxlbWVudGF0aW9ucyBkbyBubyBETUEgdHJhbnNsYXRpb24gZm9yCiAgKiBkZXZpY2VzIGFuZCBhbGxvdyBldmVyeSBkZXZpY2UgdG8gYWNjZXNzIHRvIHdob2xlIHBoeXNpY2FsIG1lbW9yeS4gVGhpcyBpcwogICogdXNlZnVsIGlmIGEgdXNlciB3YW50IHRvIHVzZSBhbiBJT01NVSBvbmx5IGZvciBLVk0gZGV2aWNlIGFzc2lnbm1lbnQgdG8KICAqIGd1ZXN0cyBhbmQgbm90IGZvciBkcml2ZXIgZG1hIHRyYW5zbGF0aW9uLgpAQCAtNDUsMTIgKzQ1LDEwIEBACiBkbWFfYWRkcl90IGJhZF9kbWFfYWRkcmVzcyBfX3JlYWRfbW9zdGx5ID0gMDsKIEVYUE9SVF9TWU1CT0woYmFkX2RtYV9hZGRyZXNzKTsKIAotLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiBCZXR0ZXIgd291bGQKLSAgIGJlIHByb2JhYmx5IGEgc21hbGxlciBETUEgbWFzaywgYnV0IHRoaXMgaXMgYnVnLXRvLWJ1ZyBjb21wYXRpYmxlCi0gICB0byBvbGRlciBpMzg2LiAqLworLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiAqLwogc3RydWN0IGRldmljZSB4ODZfZG1hX2ZhbGxiYWNrX2RldiA9IHsKIAkuaW5pdF9uYW1lID0gImZhbGxiYWNrIGRldmljZSIsCi0JLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkuY29oZXJlbnRfZG1hX21hc2sgPSBJU0FfRE1BX0JJVF9NQVNLLAogCS5kbWFfbWFzayA9ICZ4ODZfZG1hX2ZhbGxiYWNrX2Rldi5jb2hlcmVudF9kbWFfbWFzaywKIH07CiBFWFBPUlRfU1lNQk9MKHg4Nl9kbWFfZmFsbGJhY2tfZGV2KTsKQEAgLTMxMSw3ICszMDksNyBAQAogCWFtZF9pb21tdV9zaHV0ZG93bigpOwogfQogLyogTXVzdCBleGVjdXRlIGFmdGVyIFBDSSBzdWJzeXN0ZW0gKi8KLWZzX2luaXRjYWxsKHBjaV9pb21tdV9pbml0KTsKK3Jvb3Rmc19pbml0Y2FsbChwY2lfaW9tbXVfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfUENJCiAvKiBNYW55IFZJQSBicmlkZ2VzIHNlZW0gdG8gY29ycnVwdCBkYXRhIGZvciBEQUMuIERpc2FibGUgaXQgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwppbmRleCA5OGE4MjdlLi5hN2YxYjY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYWQ1MzViNi4uZWI2MmNiYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC02NjQsMyArNjY0LDggQEAKIAlyZXR1cm4gZG9fYXJjaF9wcmN0bChjdXJyZW50LCBjb2RlLCBhZGRyKTsKIH0KIAordW5zaWduZWQgbG9uZyBLU1RLX0VTUChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfSUEzMikpID8KKwkJCSh0YXNrX3B0X3JlZ3ModGFzayktPnNwKSA6ICgodGFzayktPnRocmVhZC51c2Vyc3ApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IDI3MzQ5ZjkuLmY5MzA3ODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Rib290Lmg+CiAjaW5jbHVkZSA8YWNwaS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQzNSw2ICs0MzYsMTQgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzUiKSwKIAkJfSwKIAl9LAorCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIEFwcGxlIE1hY21pbmkzLDEgKi8KKwkJLmNhbGxiYWNrID0gc2V0X3BjaV9yZWJvb3QsCisJCS5pZGVudCA9ICJBcHBsZSBNYWNtaW5pMywxIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY21pbmkzLDEiKSwKKwkJfSwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCBlMDlmMGUyLi4yYTM0ZjljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtNjYwLDYgKzY2MCwxMyBAQAogCQl9LAogCX0sCiAJeworCQkuY2FsbGJhY2sgPSBkbWlfbG93X21lbW9yeV9jb3JydXB0aW9uLAorCQkuaWRlbnQgPSAiUGhvZW5peC9NU0MgQklPUyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIlBob2VuaXgvTVNDIiksCisJCX0sCisJfSwKKwl7CiAJLyoKIAkgKiBBTUkgQklPUyB3aXRoIGxvdyBtZW1vcnkgY29ycnVwdGlvbiB3YXMgZm91bmQgb24gSW50ZWwgREc0NUlEIGJvYXJkLgogCSAqIEl0IGhhc2UgZGlmZmVyZW50IERNSV9CSU9TX1ZFTkRPUiA9ICJJbnRlbCBDb3JwLiIsIGZvciBub3cgd2Ugd2lsbApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKaW5kZXggZGNiMDBkMi4uYmUyNTczNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCkBAIC0zOCw3ICszOCw4IEBACiAjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKIAkJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKShyZWdzLT5icCArIHNpemVvZihsb25nKSk7CiAjZWxzZQotCQl1bnNpZ25lZCBsb25nICpzcCA9ICh1bnNpZ25lZCBsb25nICopcmVncy0+c3A7CisJCXVuc2lnbmVkIGxvbmcgKnNwID0KKwkJCSh1bnNpZ25lZCBsb25nICopa2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyk7CiAJCS8qCiAJCSAqIFJldHVybiBhZGRyZXNzIGlzIGVpdGhlciBkaXJlY3RseSBhdCBzdGFjayBwb2ludGVyCiAJCSAqIG9yIGFib3ZlIGEgc2F2ZWQgZmxhZ3MuIEVmbGFncyBoYXMgYml0cyAyMi0zMSB6ZXJvLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCmluZGV4IDUwM2MxZjIuLjE3NDBjODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKQEAgLTIzLDggKzIzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmF1X2NvbnRyb2wJKip1dl9iYXVfdGFibGVfYmFzZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQJCQl1dl9iYXVfcmV0cnlfbGltaXQgX19yZWFkX21vc3RseTsKIAotLyogcG9zaXRpb24gb2YgcG5vZGUgKHdoaWNoIGlzIG5hc2lkPj4xKTogKi8KLXN0YXRpYyBpbnQJCQl1dl9uc2hpZnQgX19yZWFkX21vc3RseTsKIC8qIGJhc2UgcG5vZGUgaW4gdGhpcyBwYXJ0aXRpb24gKi8KIHN0YXRpYyBpbnQJCQl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSBfX3JlYWRfbW9zdGx5OwogCkBAIC03MjMsNyArNzIxLDcgQEAKIAlCVUdfT04oIWFkcCk7CiAKIAlwYSA9IHV2X2dwYShhZHApOyAvKiBuZWVkIHRoZSByZWFsIG5hc2lkKi8KLQluID0gcGEgPj4gdXZfbnNoaWZ0OworCW4gPSB1dl9ncGFfdG9fcG5vZGUocGEpOwogCW0gPSBwYSAmIHV2X21tYXNrOwogCiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSwKQEAgLTc3OCw3ICs3NzYsNyBAQAogCSAqIG5lZWQgdGhlIHBub2RlIG9mIHdoZXJlIHRoZSBtZW1vcnkgd2FzIHJlYWxseSBhbGxvY2F0ZWQKIAkgKi8KIAlwYSA9IHV2X2dwYShwcXApOwotCXBuID0gcGEgPj4gdXZfbnNoaWZ0OworCXBuID0gdXZfZ3BhX3RvX3Bub2RlKHBhKTsKIAl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsCiAJCQkgICAgICBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVCwKIAkJCSAgICAgICgodW5zaWduZWQgbG9uZylwbiA8PCBVVl9QQVlMT0FEUV9QTk9ERV9TSElGVCkgfApAQCAtODQzLDggKzg0MSw3IEBACiAJCQkJICAgICAgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGN1cl9jcHUpKTsKIAogCXV2X2JhdV9yZXRyeV9saW1pdCA9IDE7Ci0JdXZfbnNoaWZ0ID0gdXZfaHViX2luZm8tPm5fdmFsOwotCXV2X21tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKKwl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm1fdmFsKSAtIDE7CiAJbmJsYWRlcyA9IHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsKIAogCXV2X2JhdV90YWJsZV9iYXNlcyA9IChzdHJ1Y3QgYmF1X2NvbnRyb2wgKiopCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYwppbmRleCA2OTlmN2VlLi5jZDAyMjEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKQEAgLTMsOCArMywxNiBAQAogI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgZGVmaW5lZChDT05GSUdfQUNQSV9TTEVFUCkKKyNkZWZpbmUgX190cmFtcGluaXQKKyNkZWZpbmUgX190cmFtcGluaXRkYXRhCisjZWxzZQorI2RlZmluZSBfX3RyYW1waW5pdCBfX2NwdWluaXQKKyNkZWZpbmUgX190cmFtcGluaXRkYXRhIF9fY3B1aW5pdGRhdGEKKyNlbmRpZgorCiAvKiByZWFkeSBmb3IgeDg2XzY0IGFuZCB4ODYgKi8KLXVuc2lnbmVkIGNoYXIgKl9fY3B1aW5pdGRhdGEgdHJhbXBvbGluZV9iYXNlID0gX192YShUUkFNUE9MSU5FX0JBU0UpOwordW5zaWduZWQgY2hhciAqX190cmFtcGluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKIAogdm9pZCBfX2luaXQgcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSh2b2lkKQogewpAQCAtMjYsNyArMzQsNyBAQAogICogYm9vdHN0cmFwIGludG8gdGhlIHBhZ2UgY29uY2VybmVkLiBUaGUgY2FsbGVyCiAgKiBoYXMgbWFkZSBzdXJlIGl0J3Mgc3VpdGFibHkgYWxpZ25lZC4KICAqLwotdW5zaWduZWQgbG9uZyBfX2NwdWluaXQgc2V0dXBfdHJhbXBvbGluZSh2b2lkKQordW5zaWduZWQgbG9uZyBfX3RyYW1waW5pdCBzZXR1cF90cmFtcG9saW5lKHZvaWQpCiB7CiAJbWVtY3B5KHRyYW1wb2xpbmVfYmFzZSwgdHJhbXBvbGluZV9kYXRhLCBUUkFNUE9MSU5FX1NJWkUpOwogCXJldHVybiB2aXJ0X3RvX3BoeXModHJhbXBvbGluZV9iYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCmluZGV4IDU5NmQ1NGMuLjNhZjJkZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwpAQCAtMzIsOCArMzIsMTIgQEAKICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIAorI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCisuc2VjdGlvbiAucm9kYXRhLCAiYSIsIEBwcm9nYml0cworI2Vsc2UKIC8qIFdlIGNhbiBmcmVlIHVwIHRoZSB0cmFtcG9saW5lIGFmdGVyIGJvb3R1cCBpZiBjcHUgaG90cGx1ZyBpcyBub3Qgc3VwcG9ydGVkLiAqLwogX19DUFVJTklUUk9EQVRBCisjZW5kaWYKIC5jb2RlMTYKIAogRU5UUlkodHJhbXBvbGluZV9kYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCBhNjY1YzcxLi43ZTM3ZGNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNzIsMTEgKzcyLDkgQEAKIAogLyoKICAqIFRoZSBJRFQgaGFzIHRvIGJlIHBhZ2UtYWxpZ25lZCB0byBzaW1wbGlmeSB0aGUgUGVudGl1bQotICogRjAgMEYgYnVnIHdvcmthcm91bmQuLiBXZSBoYXZlIGEgc3BlY2lhbCBsaW5rIHNlZ21lbnQKLSAqIGZvciB0aGlzLgorICogRjAgMEYgYnVnIHdvcmthcm91bmQuCiAgKi8KLWdhdGVfZGVzYyBpZHRfdGFibGVbTlJfVkVDVE9SU10KLQlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaWR0IikpKSA9IHsgeyB7IHsgMCwgMCB9IH0gfSwgfTsKK2dhdGVfZGVzYyBpZHRfdGFibGVbTlJfVkVDVE9SU10gX19wYWdlX2FsaWduZWRfZGF0YSA9IHsgeyB7IHsgMCwgMCB9IH0gfSwgfTsKICNlbmRpZgogCiBERUNMQVJFX0JJVE1BUCh1c2VkX3ZlY3RvcnMsIE5SX1ZFQ1RPUlMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYwppbmRleCAwMjdiNWI0Li5mMzc5MzA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCXJldHVybjsKIAogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKSkgewotCQlwcl9pbmZvKCJTa2lwcGluZyBzeW5jaHJvbml6YXRpb24gY2hlY2tzIGFzIFRTQyBpcyByZWxpYWJsZS5cbiIpOworCQlwcmludGtfb25jZShLRVJOX0lORk8gIlNraXBwaW5nIHN5bmNocm9uaXphdGlvbiBjaGVja3MgYXMgVFNDIGlzIHJlbGlhYmxlLlxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwppbmRleCAzMWU2ZjZjLi5kNDMwZTRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAogCXB2X2luZm8ucGFyYXZpcnRfZW5hYmxlZCA9IDE7CiAJcHZfaW5mby5rZXJuZWxfcnBsID0ga2VybmVsX2NzICYgU0VHTUVOVF9SUExfTUFTSzsKLQlwdl9pbmZvLm5hbWUgPSAidm1pIjsKKwlwdl9pbmZvLm5hbWUgPSAidm1pIFtkZXByZWNhdGVkXSI7CiAKIAlwdl9pbml0X29wcy5wYXRjaCA9IHZtaV9wYXRjaDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhNDZhY2NjLi4zYzY4ZmUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjUsMTcgKzY1LDExIEBACiAjZW5kaWYKIAogCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCi0KLQkvKiBib290c3RyYXBwaW5nIGNvZGUgKi8KLQkudGV4dC5oZWFkIDogQVQoQUREUigudGV4dC5oZWFkKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV90ZXh0ID0gLjsKLQkJKigudGV4dC5oZWFkKQotCX0gOnRleHQgPSAweDkwOTAKLQotCS8qIFRoZSByZXN0IG9mIHRoZSB0ZXh0ICovCiAJLnRleHQgOiAgQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgeworCQlfdGV4dCA9IC47CisJCS8qIGJvb3RzdHJhcHBpbmcgY29kZSAqLworCQlIRUFEX1RFWFQKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCS8qIG5vdCByZWFsbHkgbmVlZGVkLCBhbHJlYWR5IHBhZ2UgYWxpZ25lZCAqLwogCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkJKigudGV4dC5wYWdlX2FsaWduZWQpCiAjZW5kaWYKQEAgLTk0LDEzICs4OCw3IEBACiAKIAlOT1RFUyA6dGV4dCA6bm90ZQogCi0JLyogRXhjZXB0aW9uIHRhYmxlICovCi0JLiA9IEFMSUdOKDE2KTsKLQlfX2V4X3RhYmxlIDogQVQoQUREUihfX2V4X3RhYmxlKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0gOnRleHQgPSAweDkwOTAKKwlFWENFUFRJT05fVEFCTEUoMTYpIDp0ZXh0ID0gMHg5MDkwCiAKIAlST19EQVRBKFBBR0VfU0laRSkKIApAQCAtMTE4LDcgKzEwNiw2IEBACiAjZW5kaWYKIAogCQlQQUdFX0FMSUdORURfREFUQShQQUdFX1NJWkUpCi0JCSooLmRhdGEuaWR0KQogCiAJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoQ09ORklHX1g4Nl9MMV9DQUNIRV9CWVRFUykKIApAQCAtMTM1LDI0ICsxMjIsMjEgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKICNkZWZpbmUgVlNZU0NBTExfQUREUiAoLTEwKjEwMjQqMTAyNCkKLSNkZWZpbmUgVlNZU0NBTExfUEhZU19BRERSICgoTE9BREFERFIoLmRhdGEpICsgU0laRU9GKC5kYXRhKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpCi0jZGVmaW5lIFZTWVNDQUxMX1ZJUlRfQUREUiAoKEFERFIoLmRhdGEpICsgU0laRU9GKC5kYXRhKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpCiAKLSNkZWZpbmUgVkxPQURfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gVlNZU0NBTExfUEhZU19BRERSKQorI2RlZmluZSBWTE9BRF9PRkZTRVQgKFZTWVNDQUxMX0FERFIgLSBfX3ZzeXNjYWxsXzAgKyBMT0FEX09GRlNFVCkKICNkZWZpbmUgVkxPQUQoeCkgKEFERFIoeCkgLSBWTE9BRF9PRkZTRVQpCiAKLSNkZWZpbmUgVlZJUlRfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gVlNZU0NBTExfVklSVF9BRERSKQorI2RlZmluZSBWVklSVF9PRkZTRVQgKFZTWVNDQUxMX0FERFIgLSBfX3ZzeXNjYWxsXzApCiAjZGVmaW5lIFZWSVJUKHgpIChBRERSKHgpIC0gVlZJUlRfT0ZGU0VUKQogCisJLiA9IEFMSUdOKDQwOTYpOworCV9fdnN5c2NhbGxfMCA9IC47CisKIAkuID0gVlNZU0NBTExfQUREUjsKLQkudnN5c2NhbGxfMCA6IEFUKFZTWVNDQUxMX1BIWVNfQUREUikgeworCS52c3lzY2FsbF8wIDogQVQoVkxPQUQoLnZzeXNjYWxsXzApKSB7CiAJCSooLnZzeXNjYWxsXzApCiAJfSA6dXNlcgogCi0JX192c3lzY2FsbF8wID0gVlNZU0NBTExfVklSVF9BRERSOwotCiAJLiA9IEFMSUdOKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpOwogCS52c3lzY2FsbF9mbiA6IEFUKFZMT0FEKC52c3lzY2FsbF9mbikpIHsKIAkJKigudnN5c2NhbGxfZm4pCkBAIC0xOTIsMTEgKzE3Niw5IEBACiAJCSooLnZzeXNjYWxsXzMpCiAJfQogCi0JLiA9IFZTWVNDQUxMX1ZJUlRfQUREUiArIFBBR0VfU0laRTsKKwkuID0gX192c3lzY2FsbF8wICsgUEFHRV9TSVpFOwogCiAjdW5kZWYgVlNZU0NBTExfQUREUgotI3VuZGVmIFZTWVNDQUxMX1BIWVNfQUREUgotI3VuZGVmIFZTWVNDQUxMX1ZJUlRfQUREUgogI3VuZGVmIFZMT0FEX09GRlNFVAogI3VuZGVmIFZMT0FECiAjdW5kZWYgVlZJUlRfT0ZGU0VUCkBAIC0yMTksMzYgKzIwMSwxMiBAQAogCVBFUkNQVV9WQUREUigwLCA6cGVyY3B1KQogI2VuZGlmCiAKLQkuaW5pdC50ZXh0IDogQVQoQUREUiguaW5pdC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJOmluaXQKICNlbmRpZgogCi0JLmluaXQuZGF0YSA6IEFUKEFERFIoLmluaXQuZGF0YSkgLSBMT0FEX09GRlNFVCkgewotCQlJTklUX0RBVEEKLQl9Ci0KLQkuID0gQUxJR04oMTYpOwotCS5pbml0LnNldHVwIDogQVQoQUREUiguaW5pdC5zZXR1cCkgLSBMT0FEX09GRlNFVCkgewotCQlfX3NldHVwX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5zZXR1cCkKLQkJX19zZXR1cF9lbmQgPSAuOwotCX0KLQkuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCi0JLmNvbl9pbml0Y2FsbC5pbml0IDogQVQoQUREUiguY29uX2luaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9CisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAKIAkueDg2X2NwdV9kZXYuaW5pdCA6IEFUKEFERFIoLng4Nl9jcHVfZGV2LmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX194ODZfY3B1X2Rldl9zdGFydCA9IC47CkBAIC0yNTYsOCArMjE0LDYgQEAKIAkJX194ODZfY3B1X2Rldl9lbmQgPSAuOwogCX0KIAotCVNFQ1VSSVRZX0lOSVQKLQogCS4gPSBBTElHTig4KTsKIAkucGFyYWluc3RydWN0aW9ucyA6IEFUKEFERFIoLnBhcmFpbnN0cnVjdGlvbnMpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX19wYXJhaW5zdHJ1Y3Rpb25zID0gLjsKQEAgLTI4OCwxNSArMjQ0LDYgQEAKIAkJRVhJVF9EQVRBCiAJfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKLQl9Ci0jZW5kaWYKLQogI2lmICFkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8ICFkZWZpbmVkKENPTkZJR19TTVApCiAJUEVSQ1BVKFBBR0VfU0laRSkKICNlbmRpZgpAQCAtMzU4LDYgKzMwNSw5IEBACiAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorICovCiAuID0gQVNTRVJUKChfZW5kIC0gTE9BRF9PRkZTRVQgPD0gS0VSTkVMX0lNQUdFX1NJWkUpLAogCSAgICJrZXJuZWwgaW1hZ2UgYmlnZ2VyIHRoYW4gS0VSTkVMX0lNQUdFX1NJWkUiKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IDgyYWQ1MjMuLjE0NGU3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkgKiBpdHNlbGYgd2l0aCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgY29udGludWVzIGNvdW50aW5nCiAJICogZnJvbSB0aGVyZS4KIAkgKi8KLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZwcy0+cGl0X3RpbWVyLnRpbWVyKTsKKwlyZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJnBzLT5waXRfdGltZXIudGltZXIpOwogCWVsYXBzZWQgPSBwcy0+cGl0X3RpbWVyLnBlcmlvZCAtIGt0aW1lX3RvX25zKHJlbWFpbmluZyk7CiAJZWxhcHNlZCA9IG1vZF82NChlbGFwc2VkLCBwcy0+cGl0X3RpbWVyLnBlcmlvZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggMWFlNWNlYi4uMjNjMjE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCWlmIChhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CisJcmVtYWluaW5nID0gaHJ0aW1lcl9nZXRfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAJaWYgKGt0aW1lX3RvX25zKHJlbWFpbmluZykgPCAwKQogCQlyZW1haW5pbmcgPSBrdGltZV9zZXQoMCwgMCk7CiAKQEAgLTY2NCw3ICs2NjQsNyBAQAogewogCWt0aW1lX3Qgbm93ID0gYXBpYy0+bGFwaWNfdGltZXIudGltZXIuYmFzZS0+Z2V0X3RpbWUoKTsKIAotCWFwaWMtPmxhcGljX3RpbWVyLnBlcmlvZCA9IGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX1RNSUNUKSAqCisJYXBpYy0+bGFwaWNfdGltZXIucGVyaW9kID0gKHU2NClhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgKgogCQkgICAgQVBJQ19CVVNfQ1lDTEVfTlMgKiBhcGljLT5kaXZpZGVfY291bnQ7CiAJYXRvbWljX3NldCgmYXBpYy0+bGFwaWNfdGltZXIucGVuZGluZywgMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCBlY2E0MWFlLi44MThiOTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0xNTYsNiArMTU2LDggQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgIm1tdXRyYWNlLmgiCiAKKyNkZWZpbmUgU1BURV9IT1NUX1dSSVRFQUJMRSAoMVVMTCA8PCBQVF9GSVJTVF9BVkFJTF9CSVRTX1NISUZUKQorCiAjZGVmaW5lIFNIQURPV19QVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKIAogc3RydWN0IGt2bV9ybWFwX2Rlc2MgewpAQCAtNjM0LDkgKzYzNiw3IEBACiAJaWYgKCpzcHRlICYgc2hhZG93X2FjY2Vzc2VkX21hc2spCiAJCWt2bV9zZXRfcGZuX2FjY2Vzc2VkKHBmbik7CiAJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpCi0JCWt2bV9yZWxlYXNlX3Bmbl9kaXJ0eShwZm4pOwotCWVsc2UKLQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCWt2bV9zZXRfcGZuX2RpcnR5KHBmbik7CiAJcm1hcHAgPSBnZm5fdG9fcm1hcChrdm0sIHNwLT5nZm5zW3NwdGUgLSBzcC0+c3B0XSwgc3AtPnJvbGUubGV2ZWwpOwogCWlmICghKnJtYXBwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicm1hcF9yZW1vdmU6ICVwICVsbHggMC0+QlVHXG4iLCBzcHRlLCAqc3B0ZSk7CkBAIC03NDgsNyArNzQ4LDggQEAKIAlyZXR1cm4gd3JpdGVfcHJvdGVjdGVkOwogfQogCi1zdGF0aWMgaW50IGt2bV91bm1hcF9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKQorc3RhdGljIGludCBrdm1fdW5tYXBfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl1NjQgKnNwdGU7CiAJaW50IG5lZWRfdGxiX2ZsdXNoID0gMDsKQEAgLTc2Myw4ICs3NjQsNDcgQEAKIAlyZXR1cm4gbmVlZF90bGJfZmx1c2g7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3NldF9wdGVfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCWludCBuZWVkX2ZsdXNoID0gMDsKKwl1NjQgKnNwdGUsIG5ld19zcHRlOworCXB0ZV90ICpwdGVwID0gKHB0ZV90ICopZGF0YTsKKwlwZm5fdCBuZXdfcGZuOworCisJV0FSTl9PTihwdGVfaHVnZSgqcHRlcCkpOworCW5ld19wZm4gPSBwdGVfcGZuKCpwdGVwKTsKKwlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIE5VTEwpOworCXdoaWxlIChzcHRlKSB7CisJCUJVR19PTighaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlKSk7CisJCXJtYXBfcHJpbnRrKCJrdm1fc2V0X3B0ZV9ybWFwcDogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7CisJCW5lZWRfZmx1c2ggPSAxOworCQlpZiAocHRlX3dyaXRlKCpwdGVwKSkgeworCQkJcm1hcF9yZW1vdmUoa3ZtLCBzcHRlKTsKKwkJCV9fc2V0X3NwdGUoc3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCW5ld19zcHRlID0gKnNwdGUgJn4gKFBUNjRfQkFTRV9BRERSX01BU0spOworCQkJbmV3X3NwdGUgfD0gKHU2NCluZXdfcGZuIDw8IFBBR0VfU0hJRlQ7CisKKwkJCW5ld19zcHRlICY9IH5QVF9XUklUQUJMRV9NQVNLOworCQkJbmV3X3NwdGUgJj0gflNQVEVfSE9TVF9XUklURUFCTEU7CisJCQlpZiAoaXNfd3JpdGVibGVfcHRlKCpzcHRlKSkKKwkJCQlrdm1fc2V0X3Bmbl9kaXJ0eShzcHRlX3RvX3Bmbigqc3B0ZSkpOworCQkJX19zZXRfc3B0ZShzcHRlLCBuZXdfc3B0ZSk7CisJCQlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIHNwdGUpOworCQl9CisJfQorCWlmIChuZWVkX2ZsdXNoKQorCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGt2bV9oYW5kbGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsCi0JCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHApKQorCQkJICB1bnNpZ25lZCBsb25nIGRhdGEsCisJCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpKQogewogCWludCBpLCBqOwogCWludCByZXR2YWwgPSAwOwpAQCAtNzg2LDEzICs4MjYsMTUgQEAKIAkJaWYgKGh2YSA+PSBzdGFydCAmJiBodmEgPCBlbmQpIHsKIAkJCWdmbl90IGdmbl9vZmZzZXQgPSAoaHZhIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CiAKLQkJCXJldHZhbCB8PSBoYW5kbGVyKGt2bSwgJm1lbXNsb3QtPnJtYXBbZ2ZuX29mZnNldF0pOworCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLCAmbWVtc2xvdC0+cm1hcFtnZm5fb2Zmc2V0XSwKKwkJCQkJICBkYXRhKTsKIAogCQkJZm9yIChqID0gMDsgaiA8IEtWTV9OUl9QQUdFX1NJWkVTIC0gMTsgKytqKSB7CiAJCQkJaW50IGlkeCA9IGdmbl9vZmZzZXQ7CiAJCQkJaWR4IC89IEtWTV9QQUdFU19QRVJfSFBBR0UoUFRfRElSRUNUT1JZX0xFVkVMICsgaik7CiAJCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLAotCQkJCQkmbWVtc2xvdC0+bHBhZ2VfaW5mb1tqXVtpZHhdLnJtYXBfcGRlKTsKKwkJCQkJJm1lbXNsb3QtPmxwYWdlX2luZm9bal1baWR4XS5ybWFwX3BkZSwKKwkJCQkJZGF0YSk7CiAJCQl9CiAJCX0KIAl9CkBAIC04MDIsMTAgKzg0NCwxNiBAQAogCiBpbnQga3ZtX3VubWFwX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKQogewotCXJldHVybiBrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwga3ZtX3VubWFwX3JtYXBwKTsKKwlyZXR1cm4ga3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsIDAsIGt2bV91bm1hcF9ybWFwcCk7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX2FnZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKQordm9pZCBrdm1fc2V0X3NwdGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsIHB0ZV90IHB0ZSkKK3sKKwlrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwgKHVuc2lnbmVkIGxvbmcpJnB0ZSwga3ZtX3NldF9wdGVfcm1hcHApOworfQorCitzdGF0aWMgaW50IGt2bV9hZ2Vfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSB1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdTY0ICpzcHRlOwogCWludCB5b3VuZyA9IDA7CkBAIC04NDEsMTMgKzg4OSwxMyBAQAogCWdmbiA9IHVuYWxpYXNfZ2ZuKHZjcHUtPmt2bSwgZ2ZuKTsKIAlybWFwcCA9IGdmbl90b19ybWFwKHZjcHUtPmt2bSwgZ2ZuLCBzcC0+cm9sZS5sZXZlbCk7CiAKLQlrdm1fdW5tYXBfcm1hcHAodmNwdS0+a3ZtLCBybWFwcCk7CisJa3ZtX3VubWFwX3JtYXBwKHZjcHUtPmt2bSwgcm1hcHAsIDApOwogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwogfQogCiBpbnQga3ZtX2FnZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSkKIHsKLQlyZXR1cm4ga3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsIGt2bV9hZ2Vfcm1hcHApOworCXJldHVybiBrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwgMCwga3ZtX2FnZV9ybWFwcCk7CiB9CiAKICNpZmRlZiBNTVVfREVCVUcKQEAgLTE3NTYsNyArMTgwNCw3IEBACiAJCSAgICB1bnNpZ25lZCBwdGVfYWNjZXNzLCBpbnQgdXNlcl9mYXVsdCwKIAkJICAgIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LCBpbnQgbGV2ZWwsCiAJCSAgICBnZm5fdCBnZm4sIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSwKLQkJICAgIGJvb2wgY2FuX3Vuc3luYykKKwkJICAgIGJvb2wgY2FuX3Vuc3luYywgYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb24pCiB7CiAJdTY0IHNwdGU7CiAJaW50IHJldCA9IDA7CkBAIC0xNzgzLDYgKzE4MzEsOSBAQAogCQlzcHRlIHw9IGt2bV94ODZfb3BzLT5nZXRfbXRfbWFzayh2Y3B1LCBnZm4sCiAJCQlrdm1faXNfbW1pb19wZm4ocGZuKSk7CiAKKwlpZiAocmVzZXRfaG9zdF9wcm90ZWN0aW9uKQorCQlzcHRlIHw9IFNQVEVfSE9TVF9XUklURUFCTEU7CisKIAlzcHRlIHw9ICh1NjQpcGZuIDw8IFBBR0VfU0hJRlQ7CiAKIAlpZiAoKHB0ZV9hY2Nlc3MgJiBBQ0NfV1JJVEVfTUFTSykKQEAgLTE4MjgsNyArMTg3OSw4IEBACiAJCQkgdW5zaWduZWQgcHRfYWNjZXNzLCB1bnNpZ25lZCBwdGVfYWNjZXNzLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwKIAkJCSBpbnQgKnB0d3JpdGUsIGludCBsZXZlbCwgZ2ZuX3QgZ2ZuLAotCQkJIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSkKKwkJCSBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUsCisJCQkgYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb24pCiB7CiAJaW50IHdhc19ybWFwcGVkID0gMDsKIAlpbnQgd2FzX3dyaXRlYmxlID0gaXNfd3JpdGVibGVfcHRlKCpzcHRlcCk7CkBAIC0xODYwLDcgKzE5MTIsOCBAQAogCX0KIAogCWlmIChzZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCi0JCSAgICAgIGRpcnR5LCBsZXZlbCwgZ2ZuLCBwZm4sIHNwZWN1bGF0aXZlLCB0cnVlKSkgeworCQkgICAgICBkaXJ0eSwgbGV2ZWwsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSwKKwkJICAgICAgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKSkgewogCQlpZiAod3JpdGVfZmF1bHQpCiAJCQkqcHR3cml0ZSA9IDE7CiAJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7CkBAIC0xODc3LDggKzE5MzAsNyBAQAogCXBhZ2VfaGVhZGVyX3VwZGF0ZV9zbG90KHZjcHUtPmt2bSwgc3B0ZXAsIGdmbik7CiAJaWYgKCF3YXNfcm1hcHBlZCkgewogCQlybWFwX2NvdW50ID0gcm1hcF9hZGQodmNwdSwgc3B0ZXAsIGdmbik7Ci0JCWlmICghaXNfcm1hcF9zcHRlKCpzcHRlcCkpCi0JCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKKwkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CiAJCWlmIChybWFwX2NvdW50ID4gUk1BUF9SRUNZQ0xFX1RIUkVTSE9MRCkKIAkJCXJtYXBfcmVjeWNsZSh2Y3B1LCBzcHRlcCwgZ2ZuKTsKIAl9IGVsc2UgewpAQCAtMTkwOSw3ICsxOTYxLDcgQEAKIAkJaWYgKGl0ZXJhdG9yLmxldmVsID09IGxldmVsKSB7CiAJCQltbXVfc2V0X3NwdGUodmNwdSwgaXRlcmF0b3Iuc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCiAJCQkJICAgICAwLCB3cml0ZSwgMSwgJnB0X3dyaXRlLAotCQkJCSAgICAgbGV2ZWwsIGdmbiwgcGZuLCBmYWxzZSk7CisJCQkJICAgICBsZXZlbCwgZ2ZuLCBwZm4sIGZhbHNlLCB0cnVlKTsKIAkJCSsrdmNwdS0+c3RhdC5wZl9maXhlZDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IGQyZmVjOWMuLjcyNTU4ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0yNzMsOSArMjczLDEzIEBACiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCB2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubW11X3NlcSkpCiAJCXJldHVybjsKIAlrdm1fZ2V0X3BmbihwZm4pOworCS8qCisJICogd2UgY2FsbCBtbXVfc2V0X3NwdGUoKSB3aXRoIHJlc2V0X2hvc3RfcHJvdGVjdGlvbiA9IHRydWUgYmVhY3VzZSB0aGF0CisJICogdmNwdS0+YXJjaC51cGRhdGVfcHRlLnBmbiB3YXMgZmV0Y2hlZCBmcm9tIGdldF91c2VyX3BhZ2VzKHdyaXRlID0gMSkuCisJICovCiAJbW11X3NldF9zcHRlKHZjcHUsIHNwdGUsIHBhZ2UtPnJvbGUuYWNjZXNzLCBwdGVfYWNjZXNzLCAwLCAwLAogCQkgICAgIGdwdGUgJiBQVF9ESVJUWV9NQVNLLCBOVUxMLCBQVF9QQUdFX1RBQkxFX0xFVkVMLAotCQkgICAgIGdwdGVfdG9fZ2ZuKGdwdGUpLCBwZm4sIHRydWUpOworCQkgICAgIGdwdGVfdG9fZ2ZuKGdwdGUpLCBwZm4sIHRydWUsIHRydWUpOwogfQogCiAvKgpAQCAtMzA4LDcgKzMxMiw3IEBACiAJCQkJICAgICB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKIAkJCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCiAJCQkJICAgICBwdHdyaXRlLCBsZXZlbCwKLQkJCQkgICAgIGd3LT5nZm4sIHBmbiwgZmFsc2UpOworCQkJCSAgICAgZ3ctPmdmbiwgcGZuLCBmYWxzZSwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC01NTgsNiArNTYyLDcgQEAKIHN0YXRpYyBpbnQgRk5BTUUoc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCWludCBpLCBvZmZzZXQsIG5yX3ByZXNlbnQ7CisJYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb247CiAKIAlvZmZzZXQgPSBucl9wcmVzZW50ID0gMDsKIApAQCAtNTk1LDkgKzYwMCwxNiBAQAogCiAJCW5yX3ByZXNlbnQrKzsKIAkJcHRlX2FjY2VzcyA9IHNwLT5yb2xlLmFjY2VzcyAmIEZOQU1FKGdwdGVfYWNjZXNzKSh2Y3B1LCBncHRlKTsKKwkJaWYgKCEoc3AtPnNwdFtpXSAmIFNQVEVfSE9TVF9XUklURUFCTEUpKSB7CisJCQlwdGVfYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKKwkJCXJlc2V0X2hvc3RfcHJvdGVjdGlvbiA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXNldF9ob3N0X3Byb3RlY3Rpb24gPSAxOworCQl9CiAJCXNldF9zcHRlKHZjcHUsICZzcC0+c3B0W2ldLCBwdGVfYWNjZXNzLCAwLCAwLAogCQkJIGlzX2RpcnR5X2dwdGUoZ3B0ZSksIFBUX1BBR0VfVEFCTEVfTEVWRUwsIGdmbiwKLQkJCSBzcHRlX3RvX3BmbihzcC0+c3B0W2ldKSwgdHJ1ZSwgZmFsc2UpOworCQkJIHNwdGVfdG9fcGZuKHNwLT5zcHRbaV0pLCB0cnVlLCBmYWxzZSwKKwkJCSByZXNldF9ob3N0X3Byb3RlY3Rpb24pOwogCX0KIAogCXJldHVybiAhbnJfcHJlc2VudDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCA5NDRjYzljLi5jMTc0MDRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC03NjcsNiArNzY3LDggQEAKIAkJcmR0c2NsbCh0c2NfdGhpcyk7CiAJCWRlbHRhID0gdmNwdS0+YXJjaC5ob3N0X3RzYyAtIHRzY190aGlzOwogCQlzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArPSBkZWx0YTsKKwkJaWYgKGlzX25lc3RlZChzdm0pKQorCQkJc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldCArPSBkZWx0YTsKIAkJdmNwdS0+Y3B1ID0gY3B1OwogCQlrdm1fbWlncmF0ZV90aW1lcnModmNwdSk7CiAJCXN2bS0+YXNpZF9nZW5lcmF0aW9uID0gMDsKQEAgLTIwNTcsMTAgKzIwNTksMTQgQEAKIAogCXN3aXRjaCAoZWN4KSB7CiAJY2FzZSBNU1JfSUEzMl9UU0M6IHsKLQkJdTY0IHRzYzsKKwkJdTY0IHRzY19vZmZzZXQ7CiAKLQkJcmR0c2NsbCh0c2MpOwotCQkqZGF0YSA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ICsgdHNjOworCQlpZiAoaXNfbmVzdGVkKHN2bSkpCisJCQl0c2Nfb2Zmc2V0ID0gc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldDsKKwkJZWxzZQorCQkJdHNjX29mZnNldCA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0OworCisJCSpkYXRhID0gdHNjX29mZnNldCArIG5hdGl2ZV9yZWFkX3RzYygpOwogCQlicmVhazsKIAl9CiAJY2FzZSBNU1JfSzZfU1RBUjoKQEAgLTIxNDYsMTAgKzIxNTIsMTcgQEAKIAogCXN3aXRjaCAoZWN4KSB7CiAJY2FzZSBNU1JfSUEzMl9UU0M6IHsKLQkJdTY0IHRzYzsKKwkJdTY0IHRzY19vZmZzZXQgPSBkYXRhIC0gbmF0aXZlX3JlYWRfdHNjKCk7CisJCXU2NCBnX3RzY19vZmZzZXQgPSAwOwogCi0JCXJkdHNjbGwodHNjKTsKLQkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgPSBkYXRhIC0gdHNjOworCQlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJCWdfdHNjX29mZnNldCA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0IC0KKwkJCQkgICAgICAgc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldDsKKwkJCXN2bS0+bmVzdGVkLmhzYXZlLT5jb250cm9sLnRzY19vZmZzZXQgPSB0c2Nfb2Zmc2V0OworCQl9CisKKwkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgPSB0c2Nfb2Zmc2V0ICsgZ190c2Nfb2Zmc2V0OworCiAJCWJyZWFrOwogCX0KIAljYXNlIE1TUl9LNl9TVEFSOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IGYzODEyMDEuLmVkNTNiNDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTcwOSw3ICs3MDksNyBAQAogCWlmICh2Y3B1LT5jcHUgIT0gY3B1KSB7CiAJCXZjcHVfY2xlYXIodm14KTsKIAkJa3ZtX21pZ3JhdGVfdGltZXJzKHZjcHUpOwotCQl2cGlkX3N5bmNfdmNwdV9hbGwodm14KTsKKwkJc2V0X2JpdChLVk1fUkVRX1RMQl9GTFVTSCwgJnZjcHUtPnJlcXVlc3RzKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJbGlzdF9hZGQoJnZteC0+bG9jYWxfdmNwdXNfbGluaywKIAkJCSAmcGVyX2NwdSh2Y3B1c19vbl9jcHUsIGNwdSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IGJlNDUxZWUuLmFlMDdkMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTE1OTEsNiArMTU5MSw4IEBACiAKIAlpZiAoY3B1aWQtPm5lbnQgPCAxKQogCQlnb3RvIG91dDsKKwlpZiAoY3B1aWQtPm5lbnQgPiBLVk1fTUFYX0NQVUlEX0VOVFJJRVMpCisJCWNwdWlkLT5uZW50ID0gS1ZNX01BWF9DUFVJRF9FTlRSSUVTOwogCXIgPSAtRU5PTUVNOwogCWNwdWlkX2VudHJpZXMgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikgKiBjcHVpZC0+bmVudCk7CiAJaWYgKCFjcHVpZF9lbnRyaWVzKQpAQCAtMTY5MCw3ICsxNjkyLDcgQEAKIAl1bnNpZ25lZCBiYW5rX251bSA9IG1jZ19jYXAgJiAweGZmLCBiYW5rOwogCiAJciA9IC1FSU5WQUw7Ci0JaWYgKCFiYW5rX251bSkKKwlpZiAoIWJhbmtfbnVtIHx8IGJhbmtfbnVtID49IEtWTV9NQVhfTUNFX0JBTktTKQogCQlnb3RvIG91dDsKIAlpZiAobWNnX2NhcCAmIH4oS1ZNX01DRV9DQVBfU1VQUE9SVEVEIHwgMHhmZiB8IDB4ZmYwMDAwKSkKIAkJZ290byBvdXQ7CkBAIC00MDQ5LDcgKzQwNTEsNyBAQAogCXJldHVybiBrdm1fd3JpdGVfZ3Vlc3RfdmlydChkdGFibGUuYmFzZSArIGluZGV4KjgsIHNlZ19kZXNjLCBzaXplb2YoKnNlZ19kZXNjKSwgdmNwdSk7CiB9CiAKLXN0YXRpYyB1MzIgZ2V0X3Rzc19iYXNlX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorc3RhdGljIGdwYV90IGdldF90c3NfYmFzZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgICAgc3RydWN0IGRlc2Nfc3RydWN0ICpzZWdfZGVzYykKIHsKIAl1MzIgYmFzZV9hZGRyID0gZ2V0X2Rlc2NfYmFzZShzZWdfZGVzYyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKaW5kZXggOWU2MDkyMC4uODVmNWRiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2xpYi9NYWtlZmlsZQpAQCAtMTYsNyArMTYsOSBAQAogICAgICAgICBsaWIteSArPSBjaGVja3N1bV8zMi5vCiAgICAgICAgIGxpYi15ICs9IHN0cnN0cl8zMi5vCiAgICAgICAgIGxpYi15ICs9IHNlbWFwaG9yZV8zMi5vIHN0cmluZ18zMi5vCi0KK2lmbmVxICgkKENPTkZJR19YODZfQ01QWENIRzY0KSx5KQorICAgICAgICBsaWIteSArPSBjbXB4Y2hnOGJfZW11Lm8KK2VuZGlmCiAgICAgICAgIGxpYi0kKENPTkZJR19YODZfVVNFXzNETk9XKSArPSBtbXhfMzIubwogZWxzZQogICAgICAgICBvYmoteSArPSBpb182NC5vIGlvbWFwX2NvcHlfNjQubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NtcHhjaGc4Yl9lbXUuUyBiL2FyY2gveDg2L2xpYi9jbXB4Y2hnOGJfZW11LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4Y2I3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9jbXB4Y2hnOGJfZW11LlMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKglvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUtYXNtLmg+CisjaW5jbHVkZSA8YXNtL2ZyYW1lLmg+CisjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorCisKKy50ZXh0CisKKy8qCisgKiBJbnB1dHM6CisgKiAlZXNpIDogbWVtb3J5IGxvY2F0aW9uIHRvIGNvbXBhcmUKKyAqICVlYXggOiBsb3cgMzIgYml0cyBvZiBvbGQgdmFsdWUKKyAqICVlZHggOiBoaWdoIDMyIGJpdHMgb2Ygb2xkIHZhbHVlCisgKiAlZWJ4IDogbG93IDMyIGJpdHMgb2YgbmV3IHZhbHVlCisgKiAlZWN4IDogaGlnaCAzMiBiaXRzIG9mIG5ldyB2YWx1ZQorICovCitFTlRSWShjbXB4Y2hnOGJfZW11KQorQ0ZJX1NUQVJUUFJPQworCisjCisjIEVtdWxhdGUgJ2NtcHhjaGc4YiAoJWVzaSknIG9uIFVQIGV4Y2VwdCB3ZSBkb24ndAorIyBzZXQgdGhlIHdob2xlIFpGIHRoaW5nIChjYWxsZXIgd2lsbCBqdXN0IGNvbXBhcmUKKyMgZWF4OmVkeCB3aXRoIHRoZSBleHBlY3RlZCB2YWx1ZSkKKyMKK2NtcHhjaGc4Yl9lbXU6CisJcHVzaGZsCisJY2xpCisKKwljbXBsICAoJWVzaSksICVlYXgKKwlqbmUgbm90X3NhbWUKKwljbXBsIDQoJWVzaSksICVlZHgKKwlqbmUgaGFsZl9zYW1lCisKKwltb3ZsICVlYngsICAoJWVzaSkKKwltb3ZsICVlY3gsIDQoJWVzaSkKKworCXBvcGZsCisJcmV0CisKKyBub3Rfc2FtZToKKwltb3ZsICAoJWVzaSksICVlYXgKKyBoYWxmX3NhbWU6CisJbW92bCA0KCVlc2kpLCAlZWR4CisKKwlwb3BmbAorCXJldAorCitDRklfRU5EUFJPQworRU5EUFJPQyhjbXB4Y2hnOGJfZW11KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCA5YjVhOWY1Li4wNjYzMGQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMSw5ICsxLDEwIEBACiBvYmoteQk6PSAgaW5pdC5vIGluaXRfJChCSVRTKS5vIGZhdWx0Lm8gaW9yZW1hcC5vIGV4dGFibGUubyBwYWdlYXR0ci5vIG1tYXAubyBcCi0JICAgIHBhdC5vIHBndGFibGUubyBwaHlzYWRkci5vIGd1cC5vCisJICAgIHBhdC5vIHBndGFibGUubyBwaHlzYWRkci5vIGd1cC5vIHNldHVwX254Lm8KIAogIyBNYWtlIHN1cmUgX19waHlzX2FkZHIgaGFzIG5vIHN0YWNrcHJvdGVjdG9yCiBub3N0YWNrcCA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKIENGTEFHU19waHlzYWRkci5vCQk6PSAkKG5vc3RhY2twKQorQ0ZMQUdTX3NldHVwX254Lm8JCTo9ICQobm9zdGFja3ApCiAKIG9iai0kKENPTkZJR19TTVApCQkrPSB0bGIubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggMDYwNzExOS4uNzNmZmQ1NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtMjgsNjkgKzI4LDYgQEAKICNlbmRpZgogOwogCi1pbnQgbnhfZW5hYmxlZDsKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BBRSkKLXN0YXRpYyBpbnQgZGlzYWJsZV9ueCBfX2NwdWluaXRkYXRhOwotCi0vKgotICogbm9leGVjID0gb258b2ZmCi0gKgotICogQ29udHJvbCBub24tZXhlY3V0YWJsZSBtYXBwaW5ncyBmb3IgcHJvY2Vzc2VzLgotICoKLSAqIG9uICAgICAgRW5hYmxlCi0gKiBvZmYgICAgIERpc2FibGUKLSAqLwotc3RhdGljIGludCBfX2luaXQgbm9leGVjX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpZiAoIXN0cikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFzdHJuY21wKHN0ciwgIm9uIiwgMikpIHsKLQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfTlg7Ci0JCWRpc2FibGVfbnggPSAwOwotCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAib2ZmIiwgMykpIHsKLQkJZGlzYWJsZV9ueCA9IDE7Ci0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9leGVjIiwgbm9leGVjX3NldHVwKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfbngodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdls0XSwgbCwgaDsKLQotCWlmIChjcHVfaGFzX3BhZSAmJiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID4gMHg4MDAwMDAwMSkpIHsKLQkJY3B1aWQoMHg4MDAwMDAwMSwgJnZbMF0sICZ2WzFdLCAmdlsyXSwgJnZbM10pOwotCi0JCWlmICgodlszXSAmICgxIDw8IDIwKSkgJiYgIWRpc2FibGVfbngpIHsKLQkJCXJkbXNyKE1TUl9FRkVSLCBsLCBoKTsKLQkJCWwgfD0gRUZFUl9OWDsKLQkJCXdybXNyKE1TUl9FRkVSLCBsLCBoKTsKLQkJCW54X2VuYWJsZWQgPSAxOwotCQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfTlg7Ci0JCX0KLQl9Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNldF9ueCh2b2lkKQotewotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci12b2lkIF9fY3B1aW5pdCBjaGVja19lZmVyKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBlZmVyOwotCi0JcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKLQlpZiAoIShlZmVyICYgRUZFUl9OWCkgfHwgZGlzYWJsZV9ueCkKLQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX05YOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgdXNlX3BzZSwKIAkJCQkJICBpbnQgdXNlX2dicGFnZXMpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggMzM0ZTYzYy4uMmZlYjliZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMTcwLDggKzE3MCw3IEBACiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGh5c19hZGRyICsgc2l6ZSksCiAJCQkJcHJvdF92YWwsIG5ld19wcm90X3ZhbCk7Ci0JCQlmcmVlX21lbXR5cGUocGh5c19hZGRyLCBwaHlzX2FkZHIgKyBzaXplKTsKLQkJCXJldHVybiBOVUxMOworCQkJZ290byBlcnJfZnJlZV9tZW10eXBlOwogCQl9CiAJCXByb3RfdmFsID0gbmV3X3Byb3RfdmFsOwogCX0KQEAgLTE5NywyNiArMTk2LDI1IEBACiAJICovCiAJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBWTV9JT1JFTUFQLCBjYWxsZXIpOwogCWlmICghYXJlYSkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyX2ZyZWVfbWVtdHlwZTsKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgYXJlYS0+YWRkcjsKIAotCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwaHlzX2FkZHIsIHNpemUsIHByb3RfdmFsKSkgewotCQlmcmVlX21lbXR5cGUocGh5c19hZGRyLCBwaHlzX2FkZHIgKyBzaXplKTsKLQkJZnJlZV92bV9hcmVhKGFyZWEpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHBoeXNfYWRkciwgc2l6ZSwgcHJvdF92YWwpKQorCQlnb3RvIGVycl9mcmVlX2FyZWE7CiAKLQlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKHZhZGRyLCB2YWRkciArIHNpemUsIHBoeXNfYWRkciwgcHJvdCkpIHsKLQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JCWZyZWVfdm1fYXJlYShhcmVhKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UodmFkZHIsIHZhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwcm90KSkKKwkJZ290byBlcnJfZnJlZV9hcmVhOwogCiAJcmV0X2FkZHIgPSAodm9pZCBfX2lvbWVtICopICh2YWRkciArIG9mZnNldCk7CiAJbW1pb3RyYWNlX2lvcmVtYXAodW5hbGlnbmVkX3BoeXNfYWRkciwgdW5hbGlnbmVkX3NpemUsIHJldF9hZGRyKTsKIAogCXJldHVybiByZXRfYWRkcjsKK2Vycl9mcmVlX2FyZWE6CisJZnJlZV92bV9hcmVhKGFyZWEpOworZXJyX2ZyZWVfbWVtdHlwZToKKwlmcmVlX21lbXR5cGUocGh5c19hZGRyLCBwaHlzX2FkZHIgKyBzaXplKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQuYyBiL2FyY2gveDg2L21tL3BhdC5jCmluZGV4IDcyNTdjZjMuLmU3OGNkMGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC5jCisrKyBiL2FyY2gveDg2L21tL3BhdC5jCkBAIC04MSw2ICs4MSw3IEBACiB2b2lkIHBhdF9pbml0KHZvaWQpCiB7CiAJdTY0IHBhdDsKKwlib29sIGJvb3RfY3B1ID0gIWJvb3RfcGF0X3N0YXRlOwogCiAJaWYgKCFwYXRfZW5hYmxlZCkKIAkJcmV0dXJuOwpAQCAtMTIyLDggKzEyMywxMCBAQAogCQlyZG1zcmwoTVNSX0lBMzJfQ1JfUEFULCBib290X3BhdF9zdGF0ZSk7CiAKIAl3cm1zcmwoTVNSX0lBMzJfQ1JfUEFULCBwYXQpOwotCXByaW50ayhLRVJOX0lORk8gIng4NiBQQVQgZW5hYmxlZDogY3B1ICVkLCBvbGQgMHglTHgsIG5ldyAweCVMeFxuIiwKLQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBib290X3BhdF9zdGF0ZSwgcGF0KTsKKworCWlmIChib290X2NwdSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAieDg2IFBBVCBlbmFibGVkOiBjcHUgJWQsIG9sZCAweCVMeCwgbmV3IDB4JUx4XG4iLAorCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBib290X3BhdF9zdGF0ZSwgcGF0KTsKIH0KIAogI3VuZGVmIFBBVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc2V0dXBfbnguYyBiL2FyY2gveDg2L21tL3NldHVwX254LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzZDhlZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L21tL3NldHVwX254LmMKQEAgLTAsMCArMSw2OSBAQAorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCitpbnQgbnhfZW5hYmxlZDsKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BBRSkKK3N0YXRpYyBpbnQgZGlzYWJsZV9ueCBfX2NwdWluaXRkYXRhOworCisvKgorICogbm9leGVjID0gb258b2ZmCisgKgorICogQ29udHJvbCBub24tZXhlY3V0YWJsZSBtYXBwaW5ncyBmb3IgcHJvY2Vzc2VzLgorICoKKyAqIG9uICAgICAgRW5hYmxlCisgKiBvZmYgICAgIERpc2FibGUKKyAqLworc3RhdGljIGludCBfX2luaXQgbm9leGVjX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzdHJuY21wKHN0ciwgIm9uIiwgMikpIHsKKwkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfTlg7CisJCWRpc2FibGVfbnggPSAwOworCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAib2ZmIiwgMykpIHsKKwkJZGlzYWJsZV9ueCA9IDE7CisJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKKwl9CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm9leGVjIiwgbm9leGVjX3NldHVwKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKK3ZvaWQgX19pbml0IHNldF9ueCh2b2lkKQoreworCXVuc2lnbmVkIGludCB2WzRdLCBsLCBoOworCisJaWYgKGNwdV9oYXNfcGFlICYmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPiAweDgwMDAwMDAxKSkgeworCQljcHVpZCgweDgwMDAwMDAxLCAmdlswXSwgJnZbMV0sICZ2WzJdLCAmdlszXSk7CisKKwkJaWYgKCh2WzNdICYgKDEgPDwgMjApKSAmJiAhZGlzYWJsZV9ueCkgeworCQkJcmRtc3IoTVNSX0VGRVIsIGwsIGgpOworCQkJbCB8PSBFRkVSX05YOworCQkJd3Jtc3IoTVNSX0VGRVIsIGwsIGgpOworCQkJbnhfZW5hYmxlZCA9IDE7CisJCQlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9OWDsKKwkJfQorCX0KK30KKyNlbHNlCit2b2lkIHNldF9ueCh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0Cit2b2lkIF9fY3B1aW5pdCBjaGVja19lZmVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBlZmVyOworCisJcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKKwlpZiAoIShlZmVyICYgRUZFUl9OWCkgfHwgZGlzYWJsZV9ueCkKKwkJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX05YOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDUyZTYyZTUuLmIyMmQxM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIGxhdCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX21tYXBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfbW1hcF9vcHMgPSB7CiAJLmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZGVidWdmcy5jIGIvYXJjaC94ODYveGVuL2RlYnVnZnMuYwppbmRleCBiNTMyMjVkLi5lMTMzY2UyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZGVidWdmcy5jCisrKyBiL2FyY2gveDg2L3hlbi9kZWJ1Z2ZzLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1MzJfYXJyYXlfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHUzMl9hcnJheV9mb3BzID0gewogCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5vcGVuCT0gdTMyX2FycmF5X29wZW4sCiAJLnJlbGVhc2U9IHhlbl9hcnJheV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IDU0NGViNzQuLmRmYmY3MGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogc3RhdGljIHZvaWQgeGVuX2NwdWlkKHVuc2lnbmVkIGludCAqYXgsIHVuc2lnbmVkIGludCAqYngsCiAJCSAgICAgIHVuc2lnbmVkIGludCAqY3gsIHVuc2lnbmVkIGludCAqZHgpCiB7CisJdW5zaWduZWQgbWFza2VieCA9IH4wOwogCXVuc2lnbmVkIG1hc2tlY3ggPSB+MDsKIAl1bnNpZ25lZCBtYXNrZWR4ID0gfjA7CiAKQEAgLTE4NSw5ICsxODYsMTYgQEAKIAkgKiBNYXNrIG91dCBpbmNvbnZlbmllbnQgZmVhdHVyZXMsIHRvIHRyeSBhbmQgZGlzYWJsZSBhcyBtYW55CiAJICogdW5zdXBwb3J0ZWQga2VybmVsIHN1YnN5c3RlbXMgYXMgcG9zc2libGUuCiAJICovCi0JaWYgKCpheCA9PSAxKSB7CisJc3dpdGNoICgqYXgpIHsKKwljYXNlIDE6CiAJCW1hc2tlY3ggPSBjcHVpZF9sZWFmMV9lY3hfbWFzazsKIAkJbWFza2VkeCA9IGNwdWlkX2xlYWYxX2VkeF9tYXNrOworCQlicmVhazsKKworCWNhc2UgMHhiOgorCQkvKiBTdXBwcmVzcyBleHRlbmRlZCB0b3BvbG9neSBzdHVmZiAqLworCQltYXNrZWJ4ID0gMDsKKwkJYnJlYWs7CiAJfQogCiAJYXNtKFhFTl9FTVVMQVRFX1BSRUZJWCAiY3B1aWQiCkBAIC0xOTcsNiArMjA1LDcgQEAKIAkJICAiPWQiICgqZHgpCiAJCTogIjAiICgqYXgpLCAiMiIgKCpjeCkpOwogCisJKmJ4ICY9IG1hc2tlYng7CiAJKmN4ICY9IG1hc2tlY3g7CiAJKmR4ICY9IG1hc2tlZHg7CiB9CkBAIC0xMDc1LDYgKzEwODQsOCBAQAogCSAqIFNldCB1cCBzb21lIHBhZ2V0YWJsZSBzdGF0ZSBiZWZvcmUgc3RhcnRpbmcgdG8gc2V0IGFueSBwdGVzLgogCSAqLwogCisJeGVuX2luaXRfbW11X29wcygpOworCiAJLyogUHJldmVudCB1bndhbnRlZCBiaXRzIGZyb20gYmVpbmcgc2V0IGluIFBURXMuICovCiAJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX0dMT0JBTDsKIAlpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQpAQCAtMTA4Miw2ICsxMDkzLDExIEBACiAKIAlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9JT01BUDsKIAorI2lmZGVmIENPTkZJR19YODZfNjQKKwkvKiBXb3JrIG91dCBpZiB3ZSBzdXBwb3J0IE5YICovCisJY2hlY2tfZWZlcigpOworI2VuZGlmCisKIAl4ZW5fc2V0dXBfZmVhdHVyZXMoKTsKIAogCS8qIEdldCBtZm4gbGlzdCAqLwpAQCAtMTA5NCw3ICsxMTEwLDYgQEAKIAkgKi8KIAl4ZW5fc2V0dXBfc3RhY2twcm90ZWN0b3IoKTsKIAotCXhlbl9pbml0X21tdV9vcHMoKTsKIAl4ZW5faW5pdF9pcnFfb3BzKCk7CiAJeGVuX2luaXRfY3B1aWRfbWFzaygpOwogCkBAIC0xMTIzLDExICsxMTM4LDYgQEAKIAogCXBnZCA9IChwZ2RfdCAqKXhlbl9zdGFydF9pbmZvLT5wdF9iYXNlOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qIFdvcmsgb3V0IGlmIHdlIHN1cHBvcnQgTlggKi8KLQljaGVja19lZmVyKCk7Ci0jZW5kaWYKLQogCS8qIERvbid0IGRvIHRoZSBmdWxsIHZjcHVfaW5mbyBwbGFjZW1lbnQgc3R1ZmYgdW50aWwgd2UgaGF2ZSBhCiAJICAgcG9zc2libGUgbWFwIGFuZCBhIG5vbi1kdW1teSBzaGFyZWRfaW5mby4gKi8KIAlwZXJfY3B1KHhlbl92Y3B1LCAwKSA9ICZIWVBFUlZJU09SX3NoYXJlZF9pbmZvLT52Y3B1X2luZm9bMF07CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYwppbmRleCAxOTA4NWZmLi4xOWY3ZGYzIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5MjFiNmZmLi45YjUyNjE1IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTUsNiArMTUsOCBAQAogICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAKICNpbmNsdWRlIDx2YXJpYW50L2NvcmUuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgpAQCAtMTA3LDQxICsxMDksMTggQEAKIAogICAuZml4dXAgICA6IHsgKiguZml4dXApIH0KIAotICAuID0gQUxJR04oMTYpOwotCi0gIF9fZXhfdGFibGUgOiB7Ci0gICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgICAqKF9fZXhfdGFibGUpCi0gICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotICB9Ci0KKyAgRVhDRVBUSU9OX1RBQkxFKDE2KQogICAvKiBEYXRhIHNlY3Rpb24gKi8KIAotICAuID0gQUxJR04oWENIQUxfSUNBQ0hFX0xJTkVTSVpFKTsKICAgX2ZkYXRhID0gLjsKLSAgLmRhdGEgOgotICB7Ci0gICAgREFUQV9EQVRBCi0gICAgQ09OU1RSVUNUT1JTCi0gICAgLiA9IEFMSUdOKFhDSEFMX0lDQUNIRV9MSU5FU0laRSk7Ci0gICAgKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKLSAgfQotCisgIFJXX0RBVEFfU0VDVElPTihYQ0hBTF9JQ0FDSEVfTElORVNJWkUsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAgIF9lZGF0YSA9IC47CiAKLSAgLyogVGhlIGluaXRpYWwgdGFzayAqLwotICAuID0gQUxJR04oODE5Mik7Ci0gIC5kYXRhLmluaXRfdGFzayA6IHsgKiguZGF0YS5pbml0X3Rhc2spIH0KLQogICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGFuZCBkYXRhOiAqLwogCi0gIC4gPSBBTElHTigxIDw8IDEyKTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9iZWdpbiA9IC47Ci0gIC5pbml0LnRleHQgOiB7Ci0gIAlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQorICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAKICAgLmluaXQuZGF0YSA6CiAgIHsKQEAgLTE2OCwzNiArMTQ3LDE1IEBACiAJCSAgIC5EZWJ1Z0ludGVycnVwdFZlY3Rvci50ZXh0KTsKICAgCiAgICAgX19ib290X3JlbG9jX3RhYmxlX2VuZCA9IEFCU09MVVRFKC4pIDsKKworICAgIElOSVRfU0VUVVAoWENIQUxfSUNBQ0hFX0xJTkVTSVpFKQorICAgIElOSVRfQ0FMTFMKKyAgICBDT05fSU5JVENBTEwKKyAgICBTRUNVUklUWV9JTklUQ0FMTAorICAgIElOSVRfUkFNX0ZTCiAgIH0KIAotICAuID0gQUxJR04oWENIQUxfSUNBQ0hFX0xJTkVTSVpFKTsKLQotICBfX3NldHVwX3N0YXJ0ID0gLjsKLSAgLmluaXQuc2V0dXAgOiB7ICooLmluaXQuc2V0dXApIH0KLSAgX19zZXR1cF9lbmQgPSAuOwotCi0gIF9faW5pdGNhbGxfc3RhcnQgPSAuOwotICAuaW5pdGNhbGwuaW5pdCA6IHsKLQlJTklUQ0FMTFMKLSAgfQotICBfX2luaXRjYWxsX2VuZCA9IC47Ci0KLSAgX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotICAuY29uX2luaXRjYWxsLmluaXQgOiB7ICooLmNvbl9pbml0Y2FsbC5pbml0KSB9Ci0gIF9fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0KLSAgU0VDVVJJVFlfSU5JVAotCi0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRyYW1mc19zdGFydCA9LjsKLSAgLmluaXQucmFtZnMgOiB7ICooLmluaXQucmFtZnMpIH0KLSAgX19pbml0cmFtZnNfZW5kID0gLjsKLSNlbmRpZgotCi0gIFBFUkNQVSg0MDk2KQotCisgIFBFUkNQVShQQUdFX1NJWkUpCiAKICAgLyogV2UgbmVlZCB0aGlzIGR1bW15IHNlZ21lbnQgaGVyZSAqLwogCkBAIC0yNTIsMTYgKzIxMCwxMSBAQAogCQkgIC5Eb3VibGVFeGNlcHRpb25WZWN0b3IubGl0ZXJhbCkKIAogICAuID0gKExPQURBRERSKCAuRG91YmxlRXhjZXB0aW9uVmVjdG9yLnRleHQgKSArIFNJWkVPRiggLkRvdWJsZUV4Y2VwdGlvblZlY3Rvci50ZXh0ICkgKyAzKSAmIH4gMzsKLSAgLiA9IEFMSUdOKDEgPDwgMTIpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKIAogICBfX2luaXRfZW5kID0gLjsKIAotICAuID0gQUxJR04oODE5Mik7Ci0KLSAgLyogQlNTIHNlY3Rpb24gKi8KLSAgX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgOiB7ICooLmJzcy5wYWdlX2FsaWduZWQpICooLmJzcykgfQotICBfYnNzX2VuZCA9IC47CisgIEJTU19TRUNUSU9OKDAsIDgxOTIsIDApCiAKICAgX2VuZCA9IC47CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1iYXJyaWVyLmMgYi9ibG9jay9ibGstYmFycmllci5jCmluZGV4IDY1OTNhYjMuLjg4NzNiOWIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1iYXJyaWVyLmMKKysrIGIvYmxvY2svYmxrLWJhcnJpZXIuYwpAQCAtMzUwLDYgKzM1MCw3IEBACiAKIAlpZiAoYmlvLT5iaV9wcml2YXRlKQogCQljb21wbGV0ZShiaW8tPmJpX3ByaXZhdGUpOworCV9fZnJlZV9wYWdlKGJpb19wYWdlKGJpbykpOwogCiAJYmlvX3B1dChiaW8pOwogfQpAQCAtMzcyLDMwICszNzMsNTAgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCWludCB0eXBlID0gZmxhZ3MgJiBESVNDQVJEX0ZMX0JBUlJJRVIgPwogCQlESVNDQVJEX0JBUlJJRVIgOiBESVNDQVJEX05PQkFSUklFUjsKKwlzdHJ1Y3QgYmlvICpiaW87CisJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXEpCiAJCXJldHVybiAtRU5YSU87CiAKLQlpZiAoIXEtPnByZXBhcmVfZGlzY2FyZF9mbikKKwlpZiAoIWJsa19xdWV1ZV9kaXNjYXJkKHEpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAl3aGlsZSAobnJfc2VjdHMgJiYgIXJldCkgewotCQlzdHJ1Y3QgYmlvICpiaW8gPSBiaW9fYWxsb2MoZ2ZwX21hc2ssIDApOwotCQlpZiAoIWJpbykKLQkJCXJldHVybiAtRU5PTUVNOworCQl1bnNpZ25lZCBpbnQgc2VjdG9yX3NpemUgPSBxLT5saW1pdHMubG9naWNhbF9ibG9ja19zaXplOworCQl1bnNpZ25lZCBpbnQgbWF4X2Rpc2NhcmRfc2VjdG9ycyA9CisJCQltaW4ocS0+bGltaXRzLm1heF9kaXNjYXJkX3NlY3RvcnMsIFVJTlRfTUFYID4+IDkpOwogCisJCWJpbyA9IGJpb19hbGxvYyhnZnBfbWFzaywgMSk7CisJCWlmICghYmlvKQorCQkJZ290byBvdXQ7CisJCWJpby0+Ymlfc2VjdG9yID0gc2VjdG9yOwogCQliaW8tPmJpX2VuZF9pbyA9IGJsa2Rldl9kaXNjYXJkX2VuZF9pbzsKIAkJYmlvLT5iaV9iZGV2ID0gYmRldjsKIAkJaWYgKGZsYWdzICYgRElTQ0FSRF9GTF9XQUlUKQogCQkJYmlvLT5iaV9wcml2YXRlID0gJndhaXQ7CiAKLQkJYmlvLT5iaV9zZWN0b3IgPSBzZWN0b3I7CisJCS8qCisJCSAqIEFkZCBhIHplcm9lZCBvbmUtc2VjdG9yIHBheWxvYWQgYXMgdGhhdCdzIHdoYXQKKwkJICogb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG5lZWQuICBJZiB3ZSdsbCBldmVyIG5lZWQKKwkJICogbW9yZSB0aGUgaW50ZXJmYWNlIHdpbGwgbmVlZCByZXZpc2l0aW5nLgorCQkgKi8KKwkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCQlpZiAoIXBhZ2UpCisJCQlnb3RvIG91dF9mcmVlX2JpbzsKKwkJaWYgKGJpb19hZGRfcGNfcGFnZShxLCBiaW8sIHBhZ2UsIHNlY3Rvcl9zaXplLCAwKSA8IHNlY3Rvcl9zaXplKQorCQkJZ290byBvdXRfZnJlZV9wYWdlOwogCi0JCWlmIChucl9zZWN0cyA+IHF1ZXVlX21heF9od19zZWN0b3JzKHEpKSB7Ci0JCQliaW8tPmJpX3NpemUgPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSA8PCA5OwotCQkJbnJfc2VjdHMgLT0gcXVldWVfbWF4X2h3X3NlY3RvcnMocSk7Ci0JCQlzZWN0b3IgKz0gcXVldWVfbWF4X2h3X3NlY3RvcnMocSk7CisJCS8qCisJCSAqIEFuZCBvdmVycmlkZSB0aGUgYmlvIHNpemUgLSB0aGUgd2F5IGRpc2NhcmQgd29ya3Mgd2UKKwkJICogdG91Y2ggbWFueSBtb3JlIGJsb2NrcyBvbiBkaXNrIHRoYW4gdGhlIGFjdHVhbCBwYXlsb2FkCisJCSAqIGxlbmd0aC4KKwkJICovCisJCWlmIChucl9zZWN0cyA+IG1heF9kaXNjYXJkX3NlY3RvcnMpIHsKKwkJCWJpby0+Ymlfc2l6ZSA9IG1heF9kaXNjYXJkX3NlY3RvcnMgPDwgOTsKKwkJCW5yX3NlY3RzIC09IG1heF9kaXNjYXJkX3NlY3RvcnM7CisJCQlzZWN0b3IgKz0gbWF4X2Rpc2NhcmRfc2VjdG9yczsKIAkJfSBlbHNlIHsKIAkJCWJpby0+Ymlfc2l6ZSA9IG5yX3NlY3RzIDw8IDk7CiAJCQlucl9zZWN0cyA9IDA7CkBAIC00MTQsNSArNDM1LDExIEBACiAJCWJpb19wdXQoYmlvKTsKIAl9CiAJcmV0dXJuIHJldDsKK291dF9mcmVlX3BhZ2U6CisJX19mcmVlX3BhZ2UocGFnZSk7CitvdXRfZnJlZV9iaW86CisJYmlvX3B1dChiaW8pOworb3V0OgorCXJldHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTChibGtkZXZfaXNzdWVfZGlzY2FyZCk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCA4MTM1MjI4Li43MWRhNTExIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJibGsuaCIKIAogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChibG9ja19yZW1hcCk7CitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGJsb2NrX3JxX3JlbWFwKTsKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoYmxvY2tfYmlvX2NvbXBsZXRlKTsKIAogc3RhdGljIGludCBfX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKTsKQEAgLTEwMjksNyArMTAzMCw3IEBACiAJaWYgKG5vdyA9PSBwYXJ0LT5zdGFtcCkKIAkJcmV0dXJuOwogCi0JaWYgKHBhcnQtPmluX2ZsaWdodCkgeworCWlmIChwYXJ0X2luX2ZsaWdodChwYXJ0KSkgewogCQlfX3BhcnRfc3RhdF9hZGQoY3B1LCBwYXJ0LCB0aW1lX2luX3F1ZXVlLAogCQkJCXBhcnRfaW5fZmxpZ2h0KHBhcnQpICogKG5vdyAtIHBhcnQtPnN0YW1wKSk7CiAJCV9fcGFydF9zdGF0X2FkZChjcHUsIHBhcnQsIGlvX3RpY2tzLCAobm93IC0gcGFydC0+c3RhbXApKTsKQEAgLTExMjQsNyArMTEyNSw2IEBACiAJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9ESVNDQVJEOwogCQlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpCiAJCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfU09GVEJBUlJJRVI7Ci0JCXJlcS0+cS0+cHJlcGFyZV9kaXNjYXJkX2ZuKHJlcS0+cSwgcmVxKTsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkKIAkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0hBUkRCQVJSSUVSOwogCkBAIC0xMTYxLDcgKzExNjEsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGludCBmZiA9IGJpby0+YmlfcncgJiBSRVFfRkFJTEZBU1RfTUFTSzsKIAlpbnQgcndfZmxhZ3M7CiAKLQlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikgJiYgYmlvX2hhc19kYXRhKGJpbykgJiYKKwlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikgJiYKIAkgICAgKHEtPm5leHRfb3JkZXJlZCA9PSBRVUVVRV9PUkRFUkVEX05PTkUpKSB7CiAJCWJpb19lbmRpbyhiaW8sIC1FT1BOT1RTVVBQKTsKIAkJcmV0dXJuIDA7CkBAIC0xNDM3LDcgKzE0MzcsOCBAQAogCQkJZ290byBlbmRfaW87CiAJCX0KIAotCQlpZiAodW5saWtlbHkobnJfc2VjdG9ycyA+IHF1ZXVlX21heF9od19zZWN0b3JzKHEpKSkgeworCQlpZiAodW5saWtlbHkoIWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0RJU0NBUkQpICYmCisJCQkgICAgIG5yX3NlY3RvcnMgPiBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYmlvIHRvbyBiaWcgZGV2aWNlICVzICgldSA+ICV1KVxuIiwKIAkJCSAgICAgICBiZGV2bmFtZShiaW8tPmJpX2JkZXYsIGIpLAogCQkJICAgICAgIGJpb19zZWN0b3JzKGJpbyksCkBAIC0xNDcwLDcgKzE0NzEsNyBAQAogCQkJZ290byBlbmRfaW87CiAKIAkJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0RJU0NBUkQpICYmCi0JCSAgICAhcS0+cHJlcGFyZV9kaXNjYXJkX2ZuKSB7CisJCSAgICAhYmxrX3F1ZXVlX2Rpc2NhcmQocSkpIHsKIAkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBlbmRfaW87CiAJCX0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKaW5kZXggODM0MTNmZi4uNjZkNGFhOCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXNldHRpbmdzLmMKKysrIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKQEAgLTM0LDIzICszNCw2IEBACiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9wcmVwX3JxKTsKIAogLyoqCi0gKiBibGtfcXVldWVfc2V0X2Rpc2NhcmQgLSBzZXQgYSBkaXNjYXJkX3NlY3RvcnMgZnVuY3Rpb24gZm9yIHF1ZXVlCi0gKiBAcToJCXF1ZXVlCi0gKiBAZGZuOglwcmVwYXJlX2Rpc2NhcmQgZnVuY3Rpb24KLSAqCi0gKiBJdCdzIHBvc3NpYmxlIGZvciBhIHF1ZXVlIHRvIHJlZ2lzdGVyIGEgZGlzY2FyZCBjYWxsYmFjayB3aGljaCBpcyB1c2VkCi0gKiB0byB0cmFuc2Zvcm0gYSBkaXNjYXJkIHJlcXVlc3QgaW50byB0aGUgYXBwcm9wcmlhdGUgdHlwZSBmb3IgdGhlCi0gKiBoYXJkd2FyZS4gSWYgbm9uZSBpcyByZWdpc3RlcmVkLCB0aGVuIGRpc2NhcmQgcmVxdWVzdHMgYXJlIGZhaWxlZAotICogd2l0aCAlRU9QTk9UU1VQUC4KLSAqCi0gKi8KLXZvaWQgYmxrX3F1ZXVlX3NldF9kaXNjYXJkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBwcmVwYXJlX2Rpc2NhcmRfZm4gKmRmbikKLXsKLQlxLT5wcmVwYXJlX2Rpc2NhcmRfZm4gPSBkZm47Ci19Ci1FWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9zZXRfZGlzY2FyZCk7Ci0KLS8qKgogICogYmxrX3F1ZXVlX21lcmdlX2J2ZWMgLSBzZXQgYSBtZXJnZV9idmVjIGZ1bmN0aW9uIGZvciBxdWV1ZQogICogQHE6CQlxdWV1ZQogICogQG1iZm46CW1lcmdlX2J2ZWNfZm4KQEAgLTExMSw3ICs5NCw5IEBACiAJbGltLT5tYXhfaHdfc2VnbWVudHMgPSBNQVhfSFdfU0VHTUVOVFM7CiAJbGltLT5zZWdfYm91bmRhcnlfbWFzayA9IEJMS19TRUdfQk9VTkRBUllfTUFTSzsKIAlsaW0tPm1heF9zZWdtZW50X3NpemUgPSBNQVhfU0VHTUVOVF9TSVpFOwotCWxpbS0+bWF4X3NlY3RvcnMgPSBsaW0tPm1heF9od19zZWN0b3JzID0gU0FGRV9NQVhfU0VDVE9SUzsKKwlsaW0tPm1heF9zZWN0b3JzID0gQkxLX0RFRl9NQVhfU0VDVE9SUzsKKwlsaW0tPm1heF9od19zZWN0b3JzID0gSU5UX01BWDsKKwlsaW0tPm1heF9kaXNjYXJkX3NlY3RvcnMgPSBTQUZFX01BWF9TRUNUT1JTOwogCWxpbS0+bG9naWNhbF9ibG9ja19zaXplID0gbGltLT5waHlzaWNhbF9ibG9ja19zaXplID0gbGltLT5pb19taW4gPSA1MTI7CiAJbGltLT5ib3VuY2VfcGZuID0gKHVuc2lnbmVkIGxvbmcpKEJMS19CT1VOQ0VfQU5ZID4+IFBBR0VfU0hJRlQpOwogCWxpbS0+YWxpZ25tZW50X29mZnNldCA9IDA7CkBAIC0xNjQsNiArMTQ5LDcgQEAKIAlxLT51bnBsdWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXE7CiAKIAlibGtfc2V0X2RlZmF1bHRfbGltaXRzKCZxLT5saW1pdHMpOworCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBTQUZFX01BWF9TRUNUT1JTKTsKIAogCS8qCiAJICogSWYgdGhlIGNhbGxlciBkaWRuJ3Qgc3VwcGx5IGEgbG9jaywgZmFsbCBiYWNrIHRvIG91ciBlbWJlZGRlZApAQCAtMjU0LDYgKzI0MCwxOCBAQAogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMpOwogCiAvKioKKyAqIGJsa19xdWV1ZV9tYXhfZGlzY2FyZF9zZWN0b3JzIC0gc2V0IG1heCBzZWN0b3JzIGZvciBhIHNpbmdsZSBkaXNjYXJkCisgKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCisgKiBAbWF4X2Rpc2NhcmRfc2VjdG9yczogbWF4aW11bSBudW1iZXIgb2Ygc2VjdG9ycyB0byBkaXNjYXJkCisgKiovCit2b2lkIGJsa19xdWV1ZV9tYXhfZGlzY2FyZF9zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQl1bnNpZ25lZCBpbnQgbWF4X2Rpc2NhcmRfc2VjdG9ycykKK3sKKwlxLT5saW1pdHMubWF4X2Rpc2NhcmRfc2VjdG9ycyA9IG1heF9kaXNjYXJkX3NlY3RvcnM7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9tYXhfZGlzY2FyZF9zZWN0b3JzKTsKKworLyoqCiAgKiBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMgLSBzZXQgbWF4IHBoeXMgc2VnbWVudHMgZm9yIGEgcmVxdWVzdCBmb3IgdGhpcyBxdWV1ZQogICogQHE6ICB0aGUgcmVxdWVzdCBxdWV1ZSBmb3IgdGhlIGRldmljZQogICogQG1heF9zZWdtZW50czogIG1heCBudW1iZXIgb2Ygc2VnbWVudHMKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zeXNmcy5jIGIvYmxvY2svYmxrLXN5c2ZzLmMKaW5kZXggYjc4YzljMy4uOGE2ZDgxYSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTQ1Miw2ICs0NTIsNyBAQAogCWlmIChyZXQpIHsKIAkJa29iamVjdF91ZXZlbnQoJnEtPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAkJa29iamVjdF9kZWwoJnEtPmtvYmopOworCQlibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKGRpc2tfdG9fZGV2KGRpc2spKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTQ2NSwxMSArNDY2LDExIEBACiAJaWYgKFdBUk5fT04oIXEpKQogCQlyZXR1cm47CiAKLQlpZiAocS0+cmVxdWVzdF9mbikgeworCWlmIChxLT5yZXF1ZXN0X2ZuKQogCQllbHZfdW5yZWdpc3Rlcl9xdWV1ZShxKTsKIAotCQlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9SRU1PVkUpOwotCQlrb2JqZWN0X2RlbCgmcS0+a29iaik7Ci0JCWtvYmplY3RfcHV0KCZkaXNrX3RvX2RldihkaXNrKS0+a29iaik7Ci0JfQorCWtvYmplY3RfdWV2ZW50KCZxLT5rb2JqLCBLT0JKX1JFTU9WRSk7CisJa29iamVjdF9kZWwoJnEtPmtvYmopOworCWJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGlza190b19kZXYoZGlzaykpOworCWtvYmplY3RfcHV0KCZkaXNrX3RvX2RldihkaXNrKS0+a29iaik7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGFnLmMgYi9ibG9jay9ibGstdGFnLmMKaW5kZXggMmU1Y2ZlYi4uNmIwZjUyYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRhZy5jCisrKyBiL2Jsb2NrL2Jsay10YWcuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAJCW1heF9kZXB0aCAtPSAyOwogCQlpZiAoIW1heF9kZXB0aCkKIAkJCW1heF9kZXB0aCA9IDE7Ci0JCWlmIChxLT5pbl9mbGlnaHRbMF0gPiBtYXhfZGVwdGgpCisJCWlmIChxLT5pbl9mbGlnaHRbQkxLX1JXX0FTWU5DXSA+IG1heF9kZXB0aCkKIAkJCXJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggMWNhODEzYi4uYWExZTk1MyAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC0xNzMsNiArMTczLDcgQEAKIAl1bnNpZ25lZCBpbnQgY2ZxX3NsaWNlWzJdOwogCXVuc2lnbmVkIGludCBjZnFfc2xpY2VfYXN5bmNfcnE7CiAJdW5zaWduZWQgaW50IGNmcV9zbGljZV9pZGxlOworCXVuc2lnbmVkIGludCBjZnFfbGF0ZW5jeTsKIAogCXN0cnVjdCBsaXN0X2hlYWQgY2ljX2xpc3Q7CiAKQEAgLTE4MCw2ICsxODEsOCBAQAogCSAqIEZhbGxiYWNrIGR1bW15IGNmcXEgZm9yIGV4dHJlbWUgT09NIGNvbmRpdGlvbnMKIAkgKi8KIAlzdHJ1Y3QgY2ZxX3F1ZXVlIG9vbV9jZnFxOworCisJdW5zaWduZWQgbG9uZyBsYXN0X2VuZF9zeW5jX3JxOwogfTsKIAogZW51bSBjZnFxX3N0YXRlX2ZsYWdzIHsKQEAgLTE5Myw2ICsxOTYsNyBAQAogCUNGUV9DRlFRX0ZMQUdfc2xpY2VfbmV3LAkvKiBubyByZXF1ZXN0cyBkaXNwYXRjaGVkIGluIHNsaWNlICovCiAJQ0ZRX0NGUVFfRkxBR19zeW5jLAkJLyogc3luY2hyb25vdXMgcXVldWUgKi8KIAlDRlFfQ0ZRUV9GTEFHX2Nvb3AsCQkvKiBoYXMgZG9uZSBhIGNvb3AganVtcCBvZiB0aGUgcXVldWUgKi8KKwlDRlFfQ0ZRUV9GTEFHX2Nvb3BfcHJlZW1wdCwJLyogY29vcCBwcmVlbXB0ICovCiB9OwogCiAjZGVmaW5lIENGUV9DRlFRX0ZOUyhuYW1lKQkJCQkJCVwKQEAgLTIxOSw2ICsyMjMsNyBAQAogQ0ZRX0NGUVFfRk5TKHNsaWNlX25ldyk7CiBDRlFfQ0ZRUV9GTlMoc3luYyk7CiBDRlFfQ0ZRUV9GTlMoY29vcCk7CitDRlFfQ0ZRUV9GTlMoY29vcF9wcmVlbXB0KTsKICN1bmRlZiBDRlFfQ0ZRUV9GTlMKIAogI2RlZmluZSBjZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgZm10LCBhcmdzLi4uKQlcCkBAIC0yMjcsNyArMjMyLDcgQEAKIAlibGtfYWRkX3RyYWNlX21zZygoY2ZxZCktPnF1ZXVlLCAiY2ZxICIgZm10LCAjI2FyZ3MpCiAKIHN0YXRpYyB2b2lkIGNmcV9kaXNwYXRjaF9pbnNlcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci1zdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKiwgaW50LAorc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9nZXRfcXVldWUoc3RydWN0IGNmcV9kYXRhICosIGJvb2wsCiAJCQkJICAgICAgIHN0cnVjdCBpb19jb250ZXh0ICosIGdmcF90KTsKIHN0YXRpYyBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNmcV9jaWNfbG9va3VwKHN0cnVjdCBjZnFfZGF0YSAqLAogCQkJCQkJc3RydWN0IGlvX2NvbnRleHQgKik7CkBAIC0yMzgsMjcgKzI0MywyNCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZnFfcXVldWUgKmNpY190b19jZnFxKHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljLAotCQkJCQkgICAgaW50IGlzX3N5bmMpCisJCQkJCSAgICBib29sIGlzX3N5bmMpCiB7Ci0JcmV0dXJuIGNpYy0+Y2ZxcVshIWlzX3N5bmNdOworCXJldHVybiBjaWMtPmNmcXFbaXNfc3luY107CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaWNfc2V0X2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsCi0JCQkJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgaW50IGlzX3N5bmMpCisJCQkJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgYm9vbCBpc19zeW5jKQogewotCWNpYy0+Y2ZxcVshIWlzX3N5bmNdID0gY2ZxcTsKKwljaWMtPmNmcXFbaXNfc3luY10gPSBjZnFxOwogfQogCiAvKgogICogV2UgcmVnYXJkIGEgcmVxdWVzdCBhcyBTWU5DLCBpZiBpdCdzIGVpdGhlciBhIHJlYWQgb3IgaGFzIHRoZSBTWU5DIGJpdAogICogc2V0IChpbiB3aGljaCBjYXNlIGl0IGNvdWxkIGFsc28gYmUgZGlyZWN0IFdSSVRFKS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2ZxX2Jpb19zeW5jKHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyBpbmxpbmUgYm9vbCBjZnFfYmlvX3N5bmMoc3RydWN0IGJpbyAqYmlvKQogewotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEIHx8IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQgfHwgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKTsKIH0KIAogLyoKQEAgLTI4NSw3ICsyODcsNyBAQAogICogaWYgYSBxdWV1ZSBpcyBtYXJrZWQgc3luYyBhbmQgaGFzIHN5bmMgaW8gcXVldWVkLiBBIHN5bmMgcXVldWUgd2l0aCBhc3luYwogICogaW8gb25seSwgc2hvdWxkIG5vdCBnZXQgZnVsbCBzeW5jIHNsaWNlIGxlbmd0aC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2ZxX3ByaW9fc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgc3luYywKK3N0YXRpYyBpbmxpbmUgaW50IGNmcV9wcmlvX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBzeW5jLAogCQkJCSB1bnNpZ25lZCBzaG9ydCBwcmlvKQogewogCWNvbnN0IGludCBiYXNlX3NsaWNlID0gY2ZxZC0+Y2ZxX3NsaWNlW3N5bmNdOwpAQCAtMzEzLDcgKzMxNSw3IEBACiAgKiBpc24ndCB2YWxpZCB1bnRpbCB0aGUgZmlyc3QgcmVxdWVzdCBmcm9tIHRoZSBkaXNwYXRjaCBpcyBhY3RpdmF0ZWQKICAqIGFuZCB0aGUgc2xpY2UgdGltZSBzZXQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNmcV9zbGljZV91c2VkKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitzdGF0aWMgaW5saW5lIGJvb2wgY2ZxX3NsaWNlX3VzZWQoc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKIAlpZiAoY2ZxX2NmcXFfc2xpY2VfbmV3KGNmcXEpKQogCQlyZXR1cm4gMDsKQEAgLTQ4OCw3ICs0OTAsNyBAQAogICogd2Ugd2lsbCBzZXJ2aWNlIHRoZSBxdWV1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkIGNmcV9zZXJ2aWNlX3RyZWVfYWRkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwKLQkJCQkgaW50IGFkZF9mcm9udCkKKwkJCQkgYm9vbCBhZGRfZnJvbnQpCiB7CiAJc3RydWN0IHJiX25vZGUgKipwLCAqcGFyZW50OwogCXN0cnVjdCBjZnFfcXVldWUgKl9fY2ZxcTsKQEAgLTUwNCwxMSArNTA2LDIwIEBACiAJCX0gZWxzZQogCQkJcmJfa2V5ICs9IGppZmZpZXM7CiAJfSBlbHNlIGlmICghYWRkX2Zyb250KSB7CisJCS8qCisJCSAqIEdldCBvdXIgcmIga2V5IG9mZnNldC4gU3VidHJhY3QgYW55IHJlc2lkdWFsIHNsaWNlCisJCSAqIHZhbHVlIGNhcnJpZWQgZnJvbSBsYXN0IHNlcnZpY2UuIEEgbmVnYXRpdmUgcmVzaWQKKwkJICogY291bnQgaW5kaWNhdGVzIHNsaWNlIG92ZXJydW4sIGFuZCB0aGlzIHNob3VsZCBwb3NpdGlvbgorCQkgKiB0aGUgbmV4dCBzZXJ2aWNlIHRpbWUgZnVydGhlciBhd2F5IGluIHRoZSB0cmVlLgorCQkgKi8KIAkJcmJfa2V5ID0gY2ZxX3NsaWNlX29mZnNldChjZnFkLCBjZnFxKSArIGppZmZpZXM7Ci0JCXJiX2tleSArPSBjZnFxLT5zbGljZV9yZXNpZDsKKwkJcmJfa2V5IC09IGNmcXEtPnNsaWNlX3Jlc2lkOwogCQljZnFxLT5zbGljZV9yZXNpZCA9IDA7Ci0JfSBlbHNlCi0JCXJiX2tleSA9IDA7CisJfSBlbHNlIHsKKwkJcmJfa2V5ID0gLUhaOworCQlfX2NmcXEgPSBjZnFfcmJfZmlyc3QoJmNmcWQtPnNlcnZpY2VfdHJlZSk7CisJCXJiX2tleSArPSBfX2NmcXEgPyBfX2NmcXEtPnJiX2tleSA6IGppZmZpZXM7CisJfQogCiAJaWYgKCFSQl9FTVBUWV9OT0RFKCZjZnFxLT5yYl9ub2RlKSkgewogCQkvKgpAQCAtNTQyLDcgKzU1Myw3IEBACiAJCQluID0gJigqcCktPnJiX2xlZnQ7CiAJCWVsc2UgaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpID4gY2ZxX2NsYXNzX2lkbGUoX19jZnFxKSkKIAkJCW4gPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JCWVsc2UgaWYgKHJiX2tleSA8IF9fY2ZxcS0+cmJfa2V5KQorCQllbHNlIGlmICh0aW1lX2JlZm9yZShyYl9rZXksIF9fY2ZxcS0+cmJfa2V5KSkKIAkJCW4gPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZQogCQkJbiA9ICYoKnApLT5yYl9yaWdodDsKQEAgLTgyMiw4ICs4MzMsMTAgQEAKIAkgKiByZXBvc2l0aW9uIGluIGZpZm8gaWYgbmV4dCBpcyBvbGRlciB0aGFuIHJxCiAJICovCiAJaWYgKCFsaXN0X2VtcHR5KCZycS0+cXVldWVsaXN0KSAmJiAhbGlzdF9lbXB0eSgmbmV4dC0+cXVldWVsaXN0KSAmJgotCSAgICB0aW1lX2JlZm9yZShuZXh0LT5zdGFydF90aW1lLCBycS0+c3RhcnRfdGltZSkpCisJICAgIHRpbWVfYmVmb3JlKHJxX2ZpZm9fdGltZShuZXh0KSwgcnFfZmlmb190aW1lKHJxKSkpIHsKIAkJbGlzdF9tb3ZlKCZycS0+cXVldWVsaXN0LCAmbmV4dC0+cXVldWVsaXN0KTsKKwkJcnFfc2V0X2ZpZm9fdGltZShycSwgcnFfZmlmb190aW1lKG5leHQpKTsKKwl9CiAKIAljZnFfcmVtb3ZlX3JlcXVlc3QobmV4dCk7CiB9CkBAIC04MzksNyArODUyLDcgQEAKIAkgKiBEaXNhbGxvdyBtZXJnZSBvZiBhIHN5bmMgYmlvIGludG8gYW4gYXN5bmMgcmVxdWVzdC4KIAkgKi8KIAlpZiAoY2ZxX2Jpb19zeW5jKGJpbykgJiYgIXJxX2lzX3N5bmMocnEpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyoKIAkgKiBMb29rdXAgdGhlIGNmcXEgdGhhdCB0aGlzIGJpbyB3aWxsIGJlIHF1ZXVlZCB3aXRoLiBBbGxvdwpAQCAtODQ3LDEzICs4NjAsMTAgQEAKIAkgKi8KIAljaWMgPSBjZnFfY2ljX2xvb2t1cChjZnFkLCBjdXJyZW50LT5pb19jb250ZXh0KTsKIAlpZiAoIWNpYykKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWNmcXEgPSBjaWNfdG9fY2ZxcShjaWMsIGNmcV9iaW9fc3luYyhiaW8pKTsKLQlpZiAoY2ZxcSA9PSBSUV9DRlFRKHJxKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2ZxcSA9PSBSUV9DRlFRKHJxKTsKIH0KIAogc3RhdGljIHZvaWQgX19jZnFfc2V0X2FjdGl2ZV9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCkBAIC04ODEsNyArODkxLDcgQEAKICAqLwogc3RhdGljIHZvaWQKIF9fY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkgICAgaW50IHRpbWVkX291dCkKKwkJICAgIGJvb2wgdGltZWRfb3V0KQogewogCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAic2xpY2UgZXhwaXJlZCB0PSVkIiwgdGltZWRfb3V0KTsKIApAQCAtOTA5LDcgKzkxOSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgdGltZWRfb3V0KQorc3RhdGljIGlubGluZSB2b2lkIGNmcV9zbGljZV9leHBpcmVkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCB0aW1lZF9vdXQpCiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKIApAQCAtOTM3LDEwICs5NDcsMTMgQEAKIHsKIAlpZiAoIWNmcXEpIHsKIAkJY2ZxcSA9IGNmcV9nZXRfbmV4dF9xdWV1ZShjZnFkKTsKLQkJaWYgKGNmcXEpCisJCWlmIChjZnFxICYmICFjZnFfY2ZxcV9jb29wX3ByZWVtcHQoY2ZxcSkpCiAJCQljZnFfY2xlYXJfY2ZxcV9jb29wKGNmcXEpOwogCX0KIAorCWlmIChjZnFxKQorCQljZnFfY2xlYXJfY2ZxcV9jb29wX3ByZWVtcHQoY2ZxcSk7CisKIAlfX2NmcV9zZXRfYWN0aXZlX3F1ZXVlKGNmcWQsIGNmcXEpOwogCXJldHVybiBjZnFxOwogfQpAQCAtMTAyMSw3ICsxMDM0LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9jbG9zZV9jb29wZXJhdG9yKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKIAkJCQkJICAgICAgc3RydWN0IGNmcV9xdWV1ZSAqY3VyX2NmcXEsCi0JCQkJCSAgICAgIGludCBwcm9iZSkKKwkJCQkJICAgICAgYm9vbCBwcm9iZSkKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxOwogCkBAIC0xMDg1LDYgKzEwOTgsMTUgQEAKIAlpZiAoIWNpYyB8fCAhYXRvbWljX3JlYWQoJmNpYy0+aW9jLT5ucl90YXNrcykpCiAJCXJldHVybjsKIAorCS8qCisJICogSWYgb3VyIGF2ZXJhZ2UgdGhpbmsgdGltZSBpcyBsYXJnZXIgdGhhbiB0aGUgcmVtYWluaW5nIHRpbWUKKwkgKiBzbGljZSwgdGhlbiBkb24ndCBpZGxlLiBUaGlzIGF2b2lkcyBvdmVycnVubmluZyB0aGUgYWxsb3R0ZWQKKwkgKiB0aW1lIHNsaWNlLgorCSAqLworCWlmIChzYW1wbGVfdmFsaWQoY2ljLT50dGltZV9zYW1wbGVzKSAmJgorCSAgICAoY2ZxcS0+c2xpY2VfZW5kIC0gamlmZmllcyA8IGNpYy0+dHRpbWVfbWVhbikpCisJCXJldHVybjsKKwogCWNmcV9tYXJrX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpOwogCiAJLyoKQEAgLTExMjQsOSArMTE0Niw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqY2ZxX2NoZWNrX2ZpZm8oc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKLQlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBjZnFxLT5jZnFkOwotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQlpbnQgZmlmbzsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBOVUxMOwogCiAJaWYgKGNmcV9jZnFxX2ZpZm9fZXhwaXJlKGNmcXEpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTExMzYsMTMgKzExNTYsMTEgQEAKIAlpZiAobGlzdF9lbXB0eSgmY2ZxcS0+ZmlmbykpCiAJCXJldHVybiBOVUxMOwogCi0JZmlmbyA9IGNmcV9jZnFxX3N5bmMoY2ZxcSk7CiAJcnEgPSBycV9lbnRyeV9maWZvKGNmcXEtPmZpZm8ubmV4dCk7Ci0KLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcnEtPnN0YXJ0X3RpbWUgKyBjZnFkLT5jZnFfZmlmb19leHBpcmVbZmlmb10pKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBycV9maWZvX3RpbWUocnEpKSkKIAkJcnEgPSBOVUxMOwogCi0JY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJmaWZvPSVwIiwgcnEpOworCWNmcV9sb2dfY2ZxcShjZnFxLT5jZnFkLCBjZnFxLCAiZmlmbz0lcCIsIHJxKTsKIAlyZXR1cm4gcnE7CiB9CiAKQEAgLTEyNDMsMTYgKzEyNjEsODMgQEAKIAlyZXR1cm4gZGlzcGF0Y2hlZDsKIH0KIAorc3RhdGljIGJvb2wgY2ZxX21heV9kaXNwYXRjaChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCit7CisJdW5zaWduZWQgaW50IG1heF9kaXNwYXRjaDsKKworCS8qCisJICogRHJhaW4gYXN5bmMgcmVxdWVzdHMgYmVmb3JlIHdlIHN0YXJ0IHN5bmMgSU8KKwkgKi8KKwlpZiAoY2ZxX2NmcXFfaWRsZV93aW5kb3coY2ZxcSkgJiYgY2ZxZC0+cnFfaW5fZHJpdmVyW0JMS19SV19BU1lOQ10pCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhbiBhc3luYyBxdWV1ZSBhbmQgd2UgaGF2ZSBzeW5jIElPIGluIGZsaWdodCwgbGV0IGl0IHdhaXQKKwkgKi8KKwlpZiAoY2ZxZC0+c3luY19mbGlnaHQgJiYgIWNmcV9jZnFxX3N5bmMoY2ZxcSkpCisJCXJldHVybiBmYWxzZTsKKworCW1heF9kaXNwYXRjaCA9IGNmcWQtPmNmcV9xdWFudHVtOworCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKKwkJbWF4X2Rpc3BhdGNoID0gMTsKKworCS8qCisJICogRG9lcyB0aGlzIGNmcXEgYWxyZWFkeSBoYXZlIHRvbyBtdWNoIElPIGluIGZsaWdodD8KKwkgKi8KKwlpZiAoY2ZxcS0+ZGlzcGF0Y2hlZCA+PSBtYXhfZGlzcGF0Y2gpIHsKKwkJLyoKKwkJICogaWRsZSBxdWV1ZSBtdXN0IGFsd2F5cyBvbmx5IGhhdmUgYSBzaW5nbGUgSU8gaW4gZmxpZ2h0CisJCSAqLworCQlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyoKKwkJICogV2UgaGF2ZSBvdGhlciBxdWV1ZXMsIGRvbid0IGFsbG93IG1vcmUgSU8gZnJvbSB0aGlzIG9uZQorCQkgKi8KKwkJaWYgKGNmcWQtPmJ1c3lfcXVldWVzID4gMSkKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKgorCQkgKiBTb2xlIHF1ZXVlIHVzZXIsIGFsbG93IGJpZ2dlciBzbGljZQorCQkgKi8KKwkJbWF4X2Rpc3BhdGNoICo9IDQ7CisJfQorCisJLyoKKwkgKiBBc3luYyBxdWV1ZXMgbXVzdCB3YWl0IGEgYml0IGJlZm9yZSBiZWluZyBhbGxvd2VkIGRpc3BhdGNoLgorCSAqIFdlIGFsc28gcmFtcCB1cCB0aGUgZGlzcGF0Y2ggZGVwdGggZ3JhZHVhbGx5IGZvciBhc3luYyBJTywKKwkgKiBiYXNlZCBvbiB0aGUgbGFzdCBzeW5jIElPIHdlIHNlcnZpY2VkCisJICovCisJaWYgKCFjZnFfY2ZxcV9zeW5jKGNmcXEpICYmIGNmcWQtPmNmcV9sYXRlbmN5KSB7CisJCXVuc2lnbmVkIGxvbmcgbGFzdF9zeW5jID0gamlmZmllcyAtIGNmcWQtPmxhc3RfZW5kX3N5bmNfcnE7CisJCXVuc2lnbmVkIGludCBkZXB0aDsKKworCQlkZXB0aCA9IGxhc3Rfc3luYyAvIGNmcWQtPmNmcV9zbGljZVsxXTsKKwkJaWYgKCFkZXB0aCAmJiAhY2ZxcS0+ZGlzcGF0Y2hlZCkKKwkJCWRlcHRoID0gMTsKKwkJaWYgKGRlcHRoIDwgbWF4X2Rpc3BhdGNoKQorCQkJbWF4X2Rpc3BhdGNoID0gZGVwdGg7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBiZWxvdyB0aGUgY3VycmVudCBtYXgsIGFsbG93IGEgZGlzcGF0Y2gKKwkgKi8KKwlyZXR1cm4gY2ZxcS0+ZGlzcGF0Y2hlZCA8IG1heF9kaXNwYXRjaDsKK30KKwogLyoKICAqIERpc3BhdGNoIGEgcmVxdWVzdCBmcm9tIGNmcXEsIG1vdmluZyB0aGVtIHRvIHRoZSByZXF1ZXN0IHF1ZXVlCiAgKiBkaXNwYXRjaCBsaXN0LgogICovCi1zdGF0aWMgdm9pZCBjZnFfZGlzcGF0Y2hfcmVxdWVzdChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitzdGF0aWMgYm9vbCBjZnFfZGlzcGF0Y2hfcmVxdWVzdChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCiAJQlVHX09OKFJCX0VNUFRZX1JPT1QoJmNmcXEtPnNvcnRfbGlzdCkpOwogCisJaWYgKCFjZnFfbWF5X2Rpc3BhdGNoKGNmcWQsIGNmcXEpKQorCQlyZXR1cm4gZmFsc2U7CisKIAkvKgogCSAqIGZvbGxvdyBleHBpcmVkIHBhdGgsIGVsc2UgZ2V0IGZpcnN0IG5leHQgYXZhaWxhYmxlCiAJICovCkBAIC0xMjcxLDYgKzEzNTYsOCBAQAogCQlhdG9taWNfbG9uZ19pbmMoJmNpYy0+aW9jLT5yZWZjb3VudCk7CiAJCWNmcWQtPmFjdGl2ZV9jaWMgPSBjaWM7CiAJfQorCisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0xMjgxLDcgKzEzNjgsNiBAQAogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7Ci0JdW5zaWduZWQgaW50IG1heF9kaXNwYXRjaDsKIAogCWlmICghY2ZxZC0+YnVzeV9xdWV1ZXMpCiAJCXJldHVybiAwOwpAQCAtMTI5NCw0OCArMTM4MCwxMSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogRHJhaW4gYXN5bmMgcmVxdWVzdHMgYmVmb3JlIHdlIHN0YXJ0IHN5bmMgSU8KKwkgKiBEaXNwYXRjaCBhIHJlcXVlc3QgZnJvbSB0aGlzIGNmcXEsIGlmIGl0IGlzIGFsbG93ZWQKIAkgKi8KLQlpZiAoY2ZxX2NmcXFfaWRsZV93aW5kb3coY2ZxcSkgJiYgY2ZxZC0+cnFfaW5fZHJpdmVyW0JMS19SV19BU1lOQ10pCisJaWYgKCFjZnFfZGlzcGF0Y2hfcmVxdWVzdChjZnFkLCBjZnFxKSkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIElmIHRoaXMgaXMgYW4gYXN5bmMgcXVldWUgYW5kIHdlIGhhdmUgc3luYyBJTyBpbiBmbGlnaHQsIGxldCBpdCB3YWl0Ci0JICovCi0JaWYgKGNmcWQtPnN5bmNfZmxpZ2h0ICYmICFjZnFfY2ZxcV9zeW5jKGNmcXEpKQotCQlyZXR1cm4gMDsKLQotCW1heF9kaXNwYXRjaCA9IGNmcWQtPmNmcV9xdWFudHVtOwotCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKLQkJbWF4X2Rpc3BhdGNoID0gMTsKLQotCS8qCi0JICogRG9lcyB0aGlzIGNmcXEgYWxyZWFkeSBoYXZlIHRvbyBtdWNoIElPIGluIGZsaWdodD8KLQkgKi8KLQlpZiAoY2ZxcS0+ZGlzcGF0Y2hlZCA+PSBtYXhfZGlzcGF0Y2gpIHsKLQkJLyoKLQkJICogaWRsZSBxdWV1ZSBtdXN0IGFsd2F5cyBvbmx5IGhhdmUgYSBzaW5nbGUgSU8gaW4gZmxpZ2h0Ci0JCSAqLwotCQlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCi0JCQlyZXR1cm4gMDsKLQotCQkvKgotCQkgKiBXZSBoYXZlIG90aGVyIHF1ZXVlcywgZG9uJ3QgYWxsb3cgbW9yZSBJTyBmcm9tIHRoaXMgb25lCi0JCSAqLwotCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyoKLQkJICogd2UgYXJlIHRoZSBvbmx5IHF1ZXVlLCBhbGxvdyB1cCB0byA0IHRpbWVzIG9mICdxdWFudHVtJwotCQkgKi8KLQkJaWYgKGNmcXEtPmRpc3BhdGNoZWQgPj0gNCAqIG1heF9kaXNwYXRjaCkKLQkJCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogRGlzcGF0Y2ggYSByZXF1ZXN0IGZyb20gdGhpcyBjZnFxCi0JICovCi0JY2ZxX2Rpc3BhdGNoX3JlcXVlc3QoY2ZxZCwgY2ZxcSk7CiAJY2ZxcS0+c2xpY2VfZGlzcGF0Y2grKzsKIAljZnFfY2xlYXJfY2ZxcV9tdXN0X2Rpc3BhdGNoKGNmcXEpOwogCkBAIC0xNjM1LDcgKzE2ODQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBjZnFfaW5pdF9jZnFxKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwKLQkJCSAgcGlkX3QgcGlkLCBpbnQgaXNfc3luYykKKwkJCSAgcGlkX3QgcGlkLCBib29sIGlzX3N5bmMpCiB7CiAJUkJfQ0xFQVJfTk9ERSgmY2ZxcS0+cmJfbm9kZSk7CiAJUkJfQ0xFQVJfTk9ERSgmY2ZxcS0+cF9ub2RlKTsKQEAgLTE2NTUsNyArMTcwNCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICoKLWNmcV9maW5kX2FsbG9jX3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgaW50IGlzX3N5bmMsCitjZnFfZmluZF9hbGxvY19xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGJvb2wgaXNfc3luYywKIAkJICAgICBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLCAqbmV3X2NmcXEgPSBOVUxMOwpAQCAtMTcxOSw3ICsxNzY4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKgotY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCBpc19zeW5jLCBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAorY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGJvb2wgaXNfc3luYywgc3RydWN0IGlvX2NvbnRleHQgKmlvYywKIAkgICAgICBnZnBfdCBnZnBfbWFzaykKIHsKIAljb25zdCBpbnQgaW9wcmlvID0gdGFza19pb3ByaW8oaW9jKTsKQEAgLTE5NTEsMTAgKzIwMDAsMTMgQEAKIAllbmFibGVfaWRsZSA9IG9sZF9pZGxlID0gY2ZxX2NmcXFfaWRsZV93aW5kb3coY2ZxcSk7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZjaWMtPmlvYy0+bnJfdGFza3MpIHx8ICFjZnFkLT5jZnFfc2xpY2VfaWRsZSB8fAotCSAgICAoY2ZxZC0+aHdfdGFnICYmIENJQ19TRUVLWShjaWMpKSkKKwkgICAgKCFjZnFkLT5jZnFfbGF0ZW5jeSAmJiBjZnFkLT5od190YWcgJiYgQ0lDX1NFRUtZKGNpYykpKQogCQllbmFibGVfaWRsZSA9IDA7CiAJZWxzZSBpZiAoc2FtcGxlX3ZhbGlkKGNpYy0+dHRpbWVfc2FtcGxlcykpIHsKLQkJaWYgKGNpYy0+dHRpbWVfbWVhbiA+IGNmcWQtPmNmcV9zbGljZV9pZGxlKQorCQl1bnNpZ25lZCBpbnQgc2xpY2VfaWRsZSA9IGNmcWQtPmNmcV9zbGljZV9pZGxlOworCQlpZiAoc2FtcGxlX3ZhbGlkKGNpYy0+c2Vla19zYW1wbGVzKSAmJiBDSUNfU0VFS1koY2ljKSkKKwkJCXNsaWNlX2lkbGUgPSBtc2Vjc190b19qaWZmaWVzKENGUV9NSU5fVFQpOworCQlpZiAoY2ljLT50dGltZV9tZWFuID4gc2xpY2VfaWRsZSkKIAkJCWVuYWJsZV9pZGxlID0gMDsKIAkJZWxzZQogCQkJZW5hYmxlX2lkbGUgPSAxOwpAQCAtMTk3Myw3ICsyMDI1LDcgQEAKICAqIENoZWNrIGlmIG5ld19jZnFxIHNob3VsZCBwcmVlbXB0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHF1ZXVlLiBSZXR1cm4gMCBmb3IKICAqIG5vIG9yIGlmIHdlIGFyZW4ndCBzdXJlLCBhIDEgd2lsbCBjYXVzZSBhIHByZWVtcHQuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiBjZnFfc2hvdWxkX3ByZWVtcHQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpuZXdfY2ZxcSwKIAkJICAgc3RydWN0IHJlcXVlc3QgKnJxKQogewpAQCAtMTk4MSw0OCArMjAzMyw1NiBAQAogCiAJY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKIAlpZiAoIWNmcXEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoY2ZxX3NsaWNlX3VzZWQoY2ZxcSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCWlmIChjZnFfY2xhc3NfaWRsZShuZXdfY2ZxcSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogaWYgdGhlIG5ldyByZXF1ZXN0IGlzIHN5bmMsIGJ1dCB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcXVldWUgaXMKIAkgKiBub3QsIGxldCB0aGUgc3luYyByZXF1ZXN0IGhhdmUgcHJpb3JpdHkuCiAJICovCiAJaWYgKHJxX2lzX3N5bmMocnEpICYmICFjZnFfY2ZxcV9zeW5jKGNmcXEpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIFNvIGJvdGggcXVldWVzIGFyZSBzeW5jLiBMZXQgdGhlIG5ldyByZXF1ZXN0IGdldCBkaXNrIHRpbWUgaWYKIAkgKiBpdCdzIGEgbWV0YWRhdGEgcmVxdWVzdCBhbmQgdGhlIGN1cnJlbnQgcXVldWUgaXMgZG9pbmcgcmVndWxhciBJTy4KIAkgKi8KIAlpZiAocnFfaXNfbWV0YShycSkgJiYgIWNmcXEtPm1ldGFfcGVuZGluZykKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBBbGxvdyBhbiBSVCByZXF1ZXN0IHRvIHByZS1lbXB0IGFuIG9uZ29pbmcgbm9uLVJUIGNmcXEgdGltZXNsaWNlLgogCSAqLwogCWlmIChjZnFfY2xhc3NfcnQobmV3X2NmcXEpICYmICFjZnFfY2xhc3NfcnQoY2ZxcSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCWlmICghY2ZxZC0+YWN0aXZlX2NpYyB8fCAhY2ZxX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyoKIAkgKiBpZiB0aGlzIHJlcXVlc3QgaXMgYXMtZ29vZCBhcyBvbmUgd2Ugd291bGQgZXhwZWN0IGZyb20gdGhlCiAJICogY3VycmVudCBjZnFxLCBsZXQgaXQgcHJlZW1wdAogCSAqLwotCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgcnEpKQotCQlyZXR1cm4gMTsKKwlpZiAoY2ZxX3JxX2Nsb3NlKGNmcWQsIHJxKSAmJiAoIWNmcV9jZnFxX2Nvb3AobmV3X2NmcXEpIHx8CisJICAgIGNmcWQtPmJ1c3lfcXVldWVzID09IDEpKSB7CisJCS8qCisJCSAqIE1hcmsgbmV3IHF1ZXVlIGNvb3BfcHJlZW1wdCwgc28gaXRzIGNvb3AgZmxhZyB3aWxsIG5vdCBiZQorCQkgKiBjbGVhcmVkIHdoZW4gbmV3IHF1ZXVlIGdldHMgc2NoZWR1bGVkIGF0IHRoZSB2ZXJ5IGZpcnN0IHRpbWUKKwkJICovCisJCWNmcV9tYXJrX2NmcXFfY29vcF9wcmVlbXB0KG5ld19jZnFxKTsKKwkJY2ZxX21hcmtfY2ZxcV9jb29wKG5ld19jZnFxKTsKKwkJcmV0dXJuIHRydWU7CisJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtMjEwNyw2ICsyMTY3LDcgQEAKIAogCWNmcV9hZGRfcnFfcmIocnEpOwogCisJcnFfc2V0X2ZpZm9fdGltZShycSwgamlmZmllcyArIGNmcWQtPmNmcV9maWZvX2V4cGlyZVtycV9pc19zeW5jKHJxKV0pOwogCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsICZjZnFxLT5maWZvKTsKIAogCWNmcV9ycV9lbnF1ZXVlZChjZnFkLCBjZnFxLCBycSk7CkBAIC0yMTU3LDggKzIyMTgsMTAgQEAKIAlpZiAoY2ZxX2NmcXFfc3luYyhjZnFxKSkKIAkJY2ZxZC0+c3luY19mbGlnaHQtLTsKIAotCWlmIChzeW5jKQorCWlmIChzeW5jKSB7CiAJCVJRX0NJQyhycSktPmxhc3RfZW5kX3JlcXVlc3QgPSBub3c7CisJCWNmcWQtPmxhc3RfZW5kX3N5bmNfcnEgPSBub3c7CisJfQogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBhY3RpdmUgcXVldWUsIGNoZWNrIGlmIGl0IG5lZWRzIHRvIGJlIGV4cGlyZWQsCkBAIC0yMjg0LDcgKzIzNDcsNyBAQAogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwogCWNvbnN0IGludCBydyA9IHJxX2RhdGFfZGlyKHJxKTsKLQljb25zdCBpbnQgaXNfc3luYyA9IHJxX2lzX3N5bmMocnEpOworCWNvbnN0IGJvb2wgaXNfc3luYyA9IHJxX2lzX3N5bmMocnEpOwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjQ4MCw4ICsyNTQzLDkgQEAKIAljZnFkLT5jZnFfc2xpY2VbMV0gPSBjZnFfc2xpY2Vfc3luYzsKIAljZnFkLT5jZnFfc2xpY2VfYXN5bmNfcnEgPSBjZnFfc2xpY2VfYXN5bmNfcnE7CiAJY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUgPSBjZnFfc2xpY2VfaWRsZTsKKwljZnFkLT5jZnFfbGF0ZW5jeSA9IDE7CiAJY2ZxZC0+aHdfdGFnID0gMTsKLQorCWNmcWQtPmxhc3RfZW5kX3N5bmNfcnEgPSBqaWZmaWVzOwogCXJldHVybiBjZnFkOwogfQogCkBAIC0yNTQ5LDYgKzI2MTMsNyBAQAogU0hPV19GVU5DVElPTihjZnFfc2xpY2Vfc3luY19zaG93LCBjZnFkLT5jZnFfc2xpY2VbMV0sIDEpOwogU0hPV19GVU5DVElPTihjZnFfc2xpY2VfYXN5bmNfc2hvdywgY2ZxZC0+Y2ZxX3NsaWNlWzBdLCAxKTsKIFNIT1dfRlVOQ1RJT04oY2ZxX3NsaWNlX2FzeW5jX3JxX3Nob3csIGNmcWQtPmNmcV9zbGljZV9hc3luY19ycSwgMCk7CitTSE9XX0ZVTkNUSU9OKGNmcV9sb3dfbGF0ZW5jeV9zaG93LCBjZnFkLT5jZnFfbGF0ZW5jeSwgMCk7CiAjdW5kZWYgU0hPV19GVU5DVElPTgogCiAjZGVmaW5lIFNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBfX0NPTlYpCQkJXApAQCAtMjU4MCw2ICsyNjQ1LDcgQEAKIFNUT1JFX0ZVTkNUSU9OKGNmcV9zbGljZV9hc3luY19zdG9yZSwgJmNmcWQtPmNmcV9zbGljZVswXSwgMSwgVUlOVF9NQVgsIDEpOwogU1RPUkVfRlVOQ1RJT04oY2ZxX3NsaWNlX2FzeW5jX3JxX3N0b3JlLCAmY2ZxZC0+Y2ZxX3NsaWNlX2FzeW5jX3JxLCAxLAogCQlVSU5UX01BWCwgMCk7CitTVE9SRV9GVU5DVElPTihjZnFfbG93X2xhdGVuY3lfc3RvcmUsICZjZnFkLT5jZnFfbGF0ZW5jeSwgMCwgMSwgMCk7CiAjdW5kZWYgU1RPUkVfRlVOQ1RJT04KIAogI2RlZmluZSBDRlFfQVRUUihuYW1lKSBcCkBAIC0yNTk1LDYgKzI2NjEsNyBAQAogCUNGUV9BVFRSKHNsaWNlX2FzeW5jKSwKIAlDRlFfQVRUUihzbGljZV9hc3luY19ycSksCiAJQ0ZRX0FUVFIoc2xpY2VfaWRsZSksCisJQ0ZRX0FUVFIobG93X2xhdGVuY3kpLAogCV9fQVRUUl9OVUxMCiB9OwogCmRpZmYgLS1naXQgYS9ibG9jay9jb21wYXRfaW9jdGwuYyBiL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCmluZGV4IDc4NjVhMzQuLjliZDA4NmMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCisrKyBiL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCkBAIC0yMSw2ICsyMSwxMSBAQAogCXJldHVybiBwdXRfdXNlcih2YWwsIChjb21wYXRfaW50X3QgX191c2VyICopY29tcGF0X3B0cihhcmcpKTsKIH0KIAorc3RhdGljIGludCBjb21wYXRfcHV0X3VpbnQodW5zaWduZWQgbG9uZyBhcmcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGNvbXBhdF91aW50X3QgX191c2VyICopY29tcGF0X3B0cihhcmcpKTsKK30KKwogc3RhdGljIGludCBjb21wYXRfcHV0X2xvbmcodW5zaWduZWQgbG9uZyBhcmcsIGxvbmcgdmFsKQogewogCXJldHVybiBwdXRfdXNlcih2YWwsIChjb21wYXRfbG9uZ190IF9fdXNlciAqKWNvbXBhdF9wdHIoYXJnKSk7CkBAIC03MzQsNiArNzM5LDE0IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEhESU9fR0VUR0VPOgogCQlyZXR1cm4gY29tcGF0X2hkaW9fZ2V0Z2VvKGRpc2ssIGJkZXYsIGNvbXBhdF9wdHIoYXJnKSk7CisJY2FzZSBCTEtQQlNaR0VUOgorCQlyZXR1cm4gY29tcGF0X3B1dF91aW50KGFyZywgYmRldl9waHlzaWNhbF9ibG9ja19zaXplKGJkZXYpKTsKKwljYXNlIEJMS0lPTUlOOgorCQlyZXR1cm4gY29tcGF0X3B1dF91aW50KGFyZywgYmRldl9pb19taW4oYmRldikpOworCWNhc2UgQkxLSU9PUFQ6CisJCXJldHVybiBjb21wYXRfcHV0X3VpbnQoYXJnLCBiZGV2X2lvX29wdChiZGV2KSk7CisJY2FzZSBCTEtBTElHTk9GRjoKKwkJcmV0dXJuIGNvbXBhdF9wdXRfaW50KGFyZywgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KGJkZXYpKTsKIAljYXNlIEJMS0ZMU0JVRjoKIAljYXNlIEJMS1JPU0VUOgogCWNhc2UgQkxLRElTQ0FSRDoKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDE5NzViNjEuLmE4NDcwNDYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtMTA1OSw5ICsxMDU5LDcgQEAKIAkJcmV0dXJuIGNvdW50OwogCiAJc3RybGNweShlbGV2YXRvcl9uYW1lLCBuYW1lLCBzaXplb2YoZWxldmF0b3JfbmFtZSkpOwotCXN0cnN0cmlwKGVsZXZhdG9yX25hbWUpOwotCi0JZSA9IGVsZXZhdG9yX2dldChlbGV2YXRvcl9uYW1lKTsKKwllID0gZWxldmF0b3JfZ2V0KHN0cnN0cmlwKGVsZXZhdG9yX25hbWUpKTsKIAlpZiAoIWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlbGV2YXRvcjogdHlwZSAlcyBub3QgZm91bmRcbiIsIGVsZXZhdG9yX25hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jCmluZGV4IGQzZTZiNTguLjFmNGQxZGUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2lvY3RsLmMKKysrIGIvYmxvY2svaW9jdGwuYwpAQCAtMTM4LDYgKzEzOCwxMSBAQAogCXJldHVybiBwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKTsKIH0KIAorc3RhdGljIGludCBwdXRfdWludCh1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlyZXR1cm4gcHV0X3VzZXIodmFsLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZyk7Cit9CisKIHN0YXRpYyBpbnQgcHV0X2xvbmcodW5zaWduZWQgbG9uZyBhcmcsIGxvbmcgdmFsKQogewogCXJldHVybiBwdXRfdXNlcih2YWwsIChsb25nIF9fdXNlciAqKWFyZyk7CkBAIC0yNjMsMTAgKzI2OCwxOCBAQAogCQlyZXR1cm4gcHV0X2xvbmcoYXJnLCAoYmRpLT5yYV9wYWdlcyAqIFBBR0VfQ0FDSEVfU0laRSkgLyA1MTIpOwogCWNhc2UgQkxLUk9HRVQ6CiAJCXJldHVybiBwdXRfaW50KGFyZywgYmRldl9yZWFkX29ubHkoYmRldikgIT0gMCk7Ci0JY2FzZSBCTEtCU1pHRVQ6IC8qIGdldCB0aGUgbG9naWNhbCBibG9jayBzaXplIChjZi4gQkxLU1NaR0VUKSAqLworCWNhc2UgQkxLQlNaR0VUOiAvKiBnZXQgYmxvY2sgZGV2aWNlIHNvZnQgYmxvY2sgc2l6ZSAoY2YuIEJMS1NTWkdFVCkgKi8KIAkJcmV0dXJuIHB1dF9pbnQoYXJnLCBibG9ja19zaXplKGJkZXYpKTsKLQljYXNlIEJMS1NTWkdFVDogLyogZ2V0IGJsb2NrIGRldmljZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSAqLworCWNhc2UgQkxLU1NaR0VUOiAvKiBnZXQgYmxvY2sgZGV2aWNlIGxvZ2ljYWwgYmxvY2sgc2l6ZSAqLwogCQlyZXR1cm4gcHV0X2ludChhcmcsIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpKTsKKwljYXNlIEJMS1BCU1pHRVQ6IC8qIGdldCBibG9jayBkZXZpY2UgcGh5c2ljYWwgYmxvY2sgc2l6ZSAqLworCQlyZXR1cm4gcHV0X3VpbnQoYXJnLCBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoYmRldikpOworCWNhc2UgQkxLSU9NSU46CisJCXJldHVybiBwdXRfdWludChhcmcsIGJkZXZfaW9fbWluKGJkZXYpKTsKKwljYXNlIEJMS0lPT1BUOgorCQlyZXR1cm4gcHV0X3VpbnQoYXJnLCBiZGV2X2lvX29wdChiZGV2KSk7CisJY2FzZSBCTEtBTElHTk9GRjoKKwkJcmV0dXJuIHB1dF9pbnQoYXJnLCBiZGV2X2FsaWdubWVudF9vZmZzZXQoYmRldikpOwogCWNhc2UgQkxLU0VDVEdFVDoKIAkJcmV0dXJuIHB1dF91c2hvcnQoYXJnLCBxdWV1ZV9tYXhfc2VjdG9ycyhiZGV2X2dldF9xdWV1ZShiZGV2KSkpOwogCWNhc2UgQkxLUkFTRVQ6CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVhZC5jIGIvY3J5cHRvL2FlYWQuYwppbmRleCBkOWFhNzMzLi4wYTU1ZGE3IDEwMDY0NAotLS0gYS9jcnlwdG8vYWVhZC5jCisrKyBiL2NyeXB0by9hZWFkLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcHEuYyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCmluZGV4IGI4OGRiNmQuLjZiNWNjNGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCkBAIC0yNiwxNCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgogCiAvKioKLSAqIHNjcmliYmxlIC0gc3BhY2UgdG8gaG9sZCB0aHJvd2F3YXkgUCBidWZmZXIgZm9yIHN5bmNocm9ub3VzIGdlbl9zeW5kcm9tZQorICogcHFfc2NyaWJibGVfcGFnZSAtIHNwYWNlIHRvIGhvbGQgdGhyb3dhd2F5IFAgb3IgUSBidWZmZXIgZm9yCisgKiBzeW5jaHJvbm91cyBnZW5fc3luZHJvbWUKICAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzY3JpYmJsZTsKLQotc3RhdGljIGJvb2wgaXNfcmFpZDZfemVyb19ibG9jayhzdHJ1Y3QgcGFnZSAqcCkKLXsKLQlyZXR1cm4gcCA9PSAodm9pZCAqKSByYWlkNl9lbXB0eV96ZXJvX3BhZ2U7Ci19CitzdGF0aWMgc3RydWN0IHBhZ2UgKnBxX3NjcmliYmxlX3BhZ2U7CiAKIC8qIHRoZSBzdHJ1Y3QgcGFnZSAqYmxvY2tzW10gcGFyYW1ldGVyIHBhc3NlZCB0byBhc3luY19nZW5fc3luZHJvbWUoKQogICogYW5kIGFzeW5jX3N5bmRyb21lX3ZhbCgpIGNvbnRhaW5zIHRoZSAnUCcgZGVzdGluYXRpb24gYWRkcmVzcyBhdApAQCAtODMsNyArNzksNyBAQAogCSAqIHNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIGFjY29yZGluZ2x5CiAJICovCiAJZm9yIChpID0gMCwgaWR4ID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKQorCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJZG1hX3NyY1tpZHhdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBibG9ja3NbaV0sIG9mZnNldCwgbGVuLAogCQkJCQkgICAgRE1BX1RPX0RFVklDRSk7CkBAIC0xNjAsOSArMTU2LDkgQEAKIAkJc3JjcyA9ICh2b2lkICoqKSBibG9ja3M7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKSB7CisJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkgewogCQkJQlVHX09OKGkgPiBkaXNrcyAtIDMpOyAvKiBQIG9yIFEgY2FuJ3QgYmUgemVybyAqLwotCQkJc3Jjc1tpXSA9IGJsb2Nrc1tpXTsKKwkJCXNyY3NbaV0gPSAodm9pZCopcmFpZDZfZW1wdHlfemVyb19wYWdlOwogCQl9IGVsc2UKIAkJCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKSArIG9mZnNldDsKIAl9CkBAIC0xODYsMTAgKzE4MiwxNCBAQAogICogYmxvY2tzW2Rpc2tzLTFdIHRvIE5VTEwuICBXaGVuIFAgb3IgUSBpcyBvbWl0dGVkICdsZW4nIG11c3QgYmUgPD0KICAqIFBBR0VfU0laRSBhcyBhIHRlbXBvcmFyeSBidWZmZXIgb2YgdGhpcyBzaXplIGlzIHVzZWQgaW4gdGhlCiAgKiBzeW5jaHJvbm91cyBwYXRoLiAgJ2Rpc2tzJyBhbHdheXMgYWNjb3VudHMgZm9yIGJvdGggZGVzdGluYXRpb24KLSAqIGJ1ZmZlcnMuCisgKiBidWZmZXJzLiAgSWYgYW55IHNvdXJjZSBidWZmZXJzIChibG9ja3NbaV0gd2hlcmUgaSA8IGRpc2tzIC0gMikgYXJlCisgKiBzZXQgdG8gTlVMTCB0aG9zZSBidWZmZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgcmFpZDZfemVyb19wYWdlCisgKiBpbiB0aGUgc3luY2hyb25vdXMgcGF0aCBhbmQgb21pdHRlZCBpbiB0aGUgaGFyZHdhcmUtYXN5bmNocm9ub3VzCisgKiBwYXRoLgogICoKICAqICdibG9ja3MnIG5vdGU6IGlmIHN1Ym1pdC0+c2NyaWJibGUgaXMgTlVMTCB0aGVuIHRoZSBjb250ZW50cyBvZgotICogJ2Jsb2NrcycgbWF5IGJlIG92ZXJyaWRkZW4KKyAqICdibG9ja3MnIG1heSBiZSBvdmVyd3JpdHRlbiB0byBwZXJmb3JtIGFkZHJlc3MgY29udmVyc2lvbnMKKyAqIChkbWFfbWFwX3BhZ2UoKSBvciBwYWdlX2FkZHJlc3MoKSkuCiAgKi8KIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCiBhc3luY19nZW5fc3luZHJvbWUoc3RydWN0IHBhZ2UgKipibG9ja3MsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBkaXNrcywKQEAgLTIyNywxMSArMjI3LDExIEBACiAJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCiAJaWYgKCFQKGJsb2NrcywgZGlza3MpKSB7Ci0JCVAoYmxvY2tzLCBkaXNrcykgPSBzY3JpYmJsZTsKKwkJUChibG9ja3MsIGRpc2tzKSA9IHBxX3NjcmliYmxlX3BhZ2U7CiAJCUJVR19PTihsZW4gKyBvZmZzZXQgPiBQQUdFX1NJWkUpOwogCX0KIAlpZiAoIVEoYmxvY2tzLCBkaXNrcykpIHsKLQkJUShibG9ja3MsIGRpc2tzKSA9IHNjcmliYmxlOworCQlRKGJsb2NrcywgZGlza3MpID0gcHFfc2NyaWJibGVfcGFnZTsKIAkJQlVHX09OKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSk7CiAJfQogCWRvX3N5bmNfZ2VuX3N5bmRyb21lKGJsb2Nrcywgb2Zmc2V0LCBkaXNrcywgbGVuLCBzdWJtaXQpOwpAQCAtMjY1LDggKzI2NSwxMCBAQAogCQkJCQkJICAgICAgbGVuKTsKIAlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlID0gY2hhbiA/IGNoYW4tPmRldmljZSA6IE5VTEw7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKKwl1bnNpZ25lZCBjaGFyIGNvZWZzW2Rpc2tzLTJdOwogCWVudW0gZG1hX2N0cmxfZmxhZ3MgZG1hX2ZsYWdzID0gc3VibWl0LT5jYl9mbiA/IERNQV9QUkVQX0lOVEVSUlVQVCA6IDA7CiAJZG1hX2FkZHJfdCAqZG1hX3NyYyA9IE5VTEw7CisJaW50IHNyY19jbnQgPSAwOwogCiAJQlVHX09OKGRpc2tzIDwgNCk7CiAKQEAgLTI4NSwyMiArMjg3LDMyIEBACiAJCQkgX19mdW5jX18sIGRpc2tzLCBsZW4pOwogCQlpZiAoIVAoYmxvY2tzLCBkaXNrcykpCiAJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfUFFfRElTQUJMRV9QOworCQllbHNlCisJCQlwcVswXSA9IGRtYV9tYXBfcGFnZShkZXYsIFAoYmxvY2tzLCBkaXNrcyksCisJCQkJCSAgICAgb2Zmc2V0LCBsZW4sCisJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWlmICghUShibG9ja3MsIGRpc2tzKSkKIAkJCWRtYV9mbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1E7CisJCWVsc2UKKwkJCXBxWzFdID0gZG1hX21hcF9wYWdlKGRldiwgUShibG9ja3MsIGRpc2tzKSwKKwkJCQkJICAgICBvZmZzZXQsIGxlbiwKKwkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwogCQlpZiAoc3VibWl0LT5mbGFncyAmIEFTWU5DX1RYX0ZFTkNFKQogCQkJZG1hX2ZsYWdzIHw9IERNQV9QUkVQX0ZFTkNFOwotCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykKIAkJCWlmIChsaWtlbHkoYmxvY2tzW2ldKSkgewotCQkJCUJVR19PTihpc19yYWlkNl96ZXJvX2Jsb2NrKGJsb2Nrc1tpXSkpOwotCQkJCWRtYV9zcmNbaV0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBibG9ja3NbaV0sCi0JCQkJCQkJICBvZmZzZXQsIGxlbiwKLQkJCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCQkJCWRtYV9zcmNbc3JjX2NudF0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBibG9ja3NbaV0sCisJCQkJCQkJCW9mZnNldCwgbGVuLAorCQkJCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJCQljb2Vmc1tzcmNfY250XSA9IHJhaWQ2X2dmZXhwW2ldOworCQkJCXNyY19jbnQrKzsKIAkJCX0KIAogCQlmb3IgKDs7KSB7CiAJCQl0eCA9IGRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX3BxX3ZhbChjaGFuLCBwcSwgZG1hX3NyYywKLQkJCQkJCQkgICAgZGlza3MgLSAyLAotCQkJCQkJCSAgICByYWlkNl9nZmV4cCwKKwkJCQkJCQkgICAgc3JjX2NudCwKKwkJCQkJCQkgICAgY29lZnMsCiAJCQkJCQkJICAgIGxlbiwgcHFyZXMsCiAJCQkJCQkJICAgIGRtYV9mbGFncyk7CiAJCQlpZiAobGlrZWx5KHR4KSkKQEAgLTM3Myw5ICszODUsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhc3luY19wcV9pbml0KHZvaWQpCiB7Ci0Jc2NyaWJibGUgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXBxX3NjcmliYmxlX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCi0JaWYgKHNjcmliYmxlKQorCWlmIChwcV9zY3JpYmJsZV9wYWdlKQogCQlyZXR1cm4gMDsKIAogCXByX2VycigiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBzcGFyZSBwYWdlXG4iLCBfX2Z1bmNfXyk7CkBAIC0zODUsNyArMzk3LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFzeW5jX3BxX2V4aXQodm9pZCkKIHsKLQlwdXRfcGFnZShzY3JpYmJsZSk7CisJcHV0X3BhZ2UocHFfc2NyaWJibGVfcGFnZSk7CiB9CiAKIG1vZHVsZV9pbml0KGFzeW5jX3BxX2luaXQpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3JhaWQ2X3JlY292LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYwppbmRleCA2ZDczZGRlLi45NDNmMmFiIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYwpAQCAtMTMxLDggKzEzMSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotX18yZGF0YV9yZWNvdl80KHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHN0cnVjdCBwYWdlICoqYmxvY2tzLAotCSAgICAgIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCitfXzJkYXRhX3JlY292XzQoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnEsICphLCAqYjsKQEAgLTE0Myw4ICsxNDMsOCBAQAogCXZvaWQgKmNiX3BhcmFtID0gc3VibWl0LT5jYl9wYXJhbTsKIAl2b2lkICpzY3JpYmJsZSA9IHN1Ym1pdC0+c2NyaWJibGU7CiAKLQlwID0gYmxvY2tzWzQtMl07Ci0JcSA9IGJsb2Nrc1s0LTFdOworCXAgPSBibG9ja3NbZGlza3MtMl07CisJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIAogCWEgPSBibG9ja3NbZmFpbGFdOwogCWIgPSBibG9ja3NbZmFpbGJdOwpAQCAtMTcwLDggKzE3MCw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotX18yZGF0YV9yZWNvdl81KHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHN0cnVjdCBwYWdlICoqYmxvY2tzLAotCSAgICAgIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCitfXzJkYXRhX3JlY292XzUoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnEsICpnLCAqZHAsICpkcTsKQEAgLTE4MSwyMSArMTgxLDIyIEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuID0gc3VibWl0LT5jYl9mbjsKIAl2b2lkICpjYl9wYXJhbSA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJdm9pZCAqc2NyaWJibGUgPSBzdWJtaXQtPnNjcmliYmxlOwotCWludCB1bmluaXRpYWxpemVkX3Zhcihnb29kKTsKLQlpbnQgaTsKKwlpbnQgZ29vZF9zcmNzLCBnb29kLCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCWdvb2Rfc3JjcyA9IDA7CisJZ29vZCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBkaXNrcy0yOyBpKyspIHsKKwkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJY29udGludWU7CiAJCWlmIChpID09IGZhaWxhIHx8IGkgPT0gZmFpbGIpCiAJCQljb250aW51ZTsKLQkJZWxzZSB7Ci0JCQlnb29kID0gaTsKLQkJCWJyZWFrOwotCQl9CisJCWdvb2QgPSBpOworCQlnb29kX3NyY3MrKzsKIAl9Ci0JQlVHX09OKGkgPj0gMyk7CisJQlVHX09OKGdvb2Rfc3JjcyA+IDEpOwogCi0JcCA9IGJsb2Nrc1s1LTJdOwotCXEgPSBibG9ja3NbNS0xXTsKKwlwID0gYmxvY2tzW2Rpc2tzLTJdOworCXEgPSBibG9ja3NbZGlza3MtMV07CiAJZyA9IGJsb2Nrc1tnb29kXTsKIAogCS8qIENvbXB1dGUgc3luZHJvbWUgd2l0aCB6ZXJvIGZvciB0aGUgbWlzc2luZyBkYXRhIHBhZ2VzCkBAIC0yNjMsMTAgKzI2NCwxMCBAQAogCSAqIGRlbHRhIHAgYW5kIGRlbHRhIHEKIAkgKi8KIAlkcCA9IGJsb2Nrc1tmYWlsYV07Ci0JYmxvY2tzW2ZhaWxhXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWJsb2Nrc1tmYWlsYV0gPSBOVUxMOwogCWJsb2Nrc1tkaXNrcy0yXSA9IGRwOwogCWRxID0gYmxvY2tzW2ZhaWxiXTsKLQlibG9ja3NbZmFpbGJdID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJYmxvY2tzW2ZhaWxiXSA9IE5VTEw7CiAJYmxvY2tzW2Rpc2tzLTFdID0gZHE7CiAKIAlpbml0X2FzeW5jX3N1Ym1pdChzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCB0eCwgTlVMTCwgTlVMTCwgc2NyaWJibGUpOwpAQCAtMzIzLDYgKzMyNCw4IEBACiBhc3luY19yYWlkNl8yZGF0YV9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCiAJCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKKwlpbnQgbm9uX3plcm9fc3JjcywgaTsKKwogCUJVR19PTihmYWlsYSA9PSBmYWlsYik7CiAJaWYgKGZhaWxiIDwgZmFpbGEpCiAJCXN3YXAoZmFpbGEsIGZhaWxiKTsKQEAgLTMzNCwxMSArMzM3LDEzIEBACiAJICovCiAJaWYgKCFzdWJtaXQtPnNjcmliYmxlKSB7CiAJCXZvaWQgKipwdHJzID0gKHZvaWQgKiopIGJsb2NrczsKLQkJaW50IGk7CiAKIAkJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKKwkJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCQlwdHJzW2ldID0gKHZvaWQgKikgcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQkJZWxzZQorCQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKIAogCQlyYWlkNl8yZGF0YV9yZWNvdihkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgcHRycyk7CiAKQEAgLTM0NywxOSArMzUyLDMwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXN3aXRjaCAoZGlza3MpIHsKLQljYXNlIDQ6CisJbm9uX3plcm9fc3JjcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTIgJiYgbm9uX3plcm9fc3JjcyA8IDQ7IGkrKykKKwkJaWYgKGJsb2Nrc1tpXSkKKwkJCW5vbl96ZXJvX3NyY3MrKzsKKwlzd2l0Y2ggKG5vbl96ZXJvX3NyY3MpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQkvKiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDIgc291cmNlcyAtIHRoZSBmYWlsZWQgZGV2aWNlcy4gKi8KKwkJQlVHKCk7CisKKwljYXNlIDI6CiAJCS8qIGRtYSBkZXZpY2VzIGRvIG5vdCB1bmlmb3JtbHkgdW5kZXJzdGFuZCBhIHplcm8gc291cmNlIHBxCiAJCSAqIG9wZXJhdGlvbiAoaW4gY29udHJhc3QgdG8gdGhlIHN5bmNocm9ub3VzIGNhc2UpLCBzbwotCQkgKiBleHBsaWNpdGx5IGhhbmRsZSB0aGUgNCBkaXNrIHNwZWNpYWwgY2FzZQorCQkgKiBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgNCBkaXNrIGFycmF5IHdpdGgKKwkJICogYm90aCBkYXRhIGRpc2tzIG1pc3NpbmcuCiAJCSAqLwotCQlyZXR1cm4gX18yZGF0YV9yZWNvdl80KGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKLQljYXNlIDU6CisJCXJldHVybiBfXzJkYXRhX3JlY292XzQoZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKKwljYXNlIDM6CiAJCS8qIGRtYSBkZXZpY2VzIGRvIG5vdCB1bmlmb3JtbHkgdW5kZXJzdGFuZCBhIHNpbmdsZQogCQkgKiBzb3VyY2UgcHEgb3BlcmF0aW9uIChpbiBjb250cmFzdCB0byB0aGUgc3luY2hyb25vdXMKLQkJICogY2FzZSksIHNvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSA1IGRpc2sgc3BlY2lhbCBjYXNlCisJCSAqIGNhc2UpLCBzbyBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgNSBkaXNrCisJCSAqIGFycmF5IHdpdGggMiBvZiAzIGRhdGEgZGlza3MgbWlzc2luZy4KIAkJICovCi0JCXJldHVybiBfXzJkYXRhX3JlY292XzUoYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOworCQlyZXR1cm4gX18yZGF0YV9yZWNvdl81KGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfbihkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOwogCX0KQEAgLTM4NSw2ICs0MDEsNyBAQAogCWRtYV9hc3luY190eF9jYWxsYmFjayBjYl9mbiA9IHN1Ym1pdC0+Y2JfZm47CiAJdm9pZCAqY2JfcGFyYW0gPSBzdWJtaXQtPmNiX3BhcmFtOwogCXZvaWQgKnNjcmliYmxlID0gc3VibWl0LT5zY3JpYmJsZTsKKwlpbnQgZ29vZF9zcmNzLCBnb29kLCBpOwogCXN0cnVjdCBwYWdlICpzcmNzWzJdOwogCiAJcHJfZGVidWcoIiVzOiBkaXNrczogJWQgbGVuOiAlenVcbiIsIF9fZnVuY19fLCBkaXNrcywgYnl0ZXMpOwpAQCAtMzk0LDExICs0MTEsMTMgQEAKIAkgKi8KIAlpZiAoIXNjcmliYmxlKSB7CiAJCXZvaWQgKipwdHJzID0gKHZvaWQgKiopIGJsb2NrczsKLQkJaW50IGk7CiAKIAkJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKKwkJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCQlwdHJzW2ldID0gKHZvaWQqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJCWVsc2UKKwkJCQlwdHJzW2ldID0gcGFnZV9hZGRyZXNzKGJsb2Nrc1tpXSk7CiAKIAkJcmFpZDZfZGF0YXBfcmVjb3YoZGlza3MsIGJ5dGVzLCBmYWlsYSwgcHRycyk7CiAKQEAgLTQwNyw2ICs0MjYsMjAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJZ29vZF9zcmNzID0gMDsKKwlnb29kID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykgeworCQlpZiAoaSA9PSBmYWlsYSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYmxvY2tzW2ldKSB7CisJCQlnb29kID0gaTsKKwkJCWdvb2Rfc3JjcysrOworCQkJaWYgKGdvb2Rfc3JjcyA+IDEpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJQlVHX09OKGdvb2Rfc3JjcyA9PSAwKTsKKwogCXAgPSBibG9ja3NbZGlza3MtMl07CiAJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIApAQCAtNDE0LDE0ICs0NDcsMTMgQEAKIAkgKiBVc2UgdGhlIGRlYWQgZGF0YSBwYWdlIGFzIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBkZWx0YSBxCiAJICovCiAJZHEgPSBibG9ja3NbZmFpbGFdOwotCWJsb2Nrc1tmYWlsYV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwlibG9ja3NbZmFpbGFdID0gTlVMTDsKIAlibG9ja3NbZGlza3MtMV0gPSBkcTsKIAotCS8qIGluIHRoZSA0IGRpc2sgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNpbmdsZSBzb3VyY2UKLQkgKiBtdWx0aXBsaWNhdGlvbgorCS8qIGluIHRoZSA0LWRpc2sgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNpbmdsZSBzb3VyY2UKKwkgKiBtdWx0aXBsaWNhdGlvbiB3aXRoIHRoZSBvbmUgZ29vZCBkYXRhIGJsb2NrLgogCSAqLwotCWlmIChkaXNrcyA9PSA0KSB7Ci0JCWludCBnb29kID0gZmFpbGEgPT0gMCA/IDEgOiAwOworCWlmIChnb29kX3NyY3MgPT0gMSkgewogCQlzdHJ1Y3QgcGFnZSAqZyA9IGJsb2Nrc1tnb29kXTsKIAogCQlpbml0X2FzeW5jX3N1Ym1pdChzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCB0eCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwppbmRleCBiNDU5YTkwLi43OTE4MmRjIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCkBAIC00NCwyMCArNDQsMjMgQEAKIAl2b2lkICpjYl9wYXJhbV9vcmlnID0gc3VibWl0LT5jYl9wYXJhbTsKIAllbnVtIGFzeW5jX3R4X2ZsYWdzIGZsYWdzX29yaWcgPSBzdWJtaXQtPmZsYWdzOwogCWVudW0gZG1hX2N0cmxfZmxhZ3MgZG1hX2ZsYWdzOwotCWludCB4b3Jfc3JjX2NudDsKKwlpbnQgeG9yX3NyY19jbnQgPSAwOwogCWRtYV9hZGRyX3QgZG1hX2Rlc3Q7CiAKIAkvKiBtYXAgdGhlIGRlc3QgYmlkcmVjdGlvbmFsIGluIGNhc2UgaXQgaXMgcmUtdXNlZCBhcyBhIHNvdXJjZSAqLwogCWRtYV9kZXN0ID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBkZXN0LCBvZmZzZXQsIGxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspIHsKIAkJLyogb25seSBtYXAgdGhlIGRlc3Qgb25jZSAqLworCQlpZiAoIXNyY19saXN0W2ldKQorCQkJY29udGludWU7CiAJCWlmICh1bmxpa2VseShzcmNfbGlzdFtpXSA9PSBkZXN0KSkgewotCQkJZG1hX3NyY1tpXSA9IGRtYV9kZXN0OworCQkJZG1hX3NyY1t4b3Jfc3JjX2NudCsrXSA9IGRtYV9kZXN0OwogCQkJY29udGludWU7CiAJCX0KLQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgc3JjX2xpc3RbaV0sIG9mZnNldCwKLQkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlkbWFfc3JjW3hvcl9zcmNfY250KytdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBzcmNfbGlzdFtpXSwgb2Zmc2V0LAorCQkJCQkJICAgICAgbGVuLCBETUFfVE9fREVWSUNFKTsKIAl9CisJc3JjX2NudCA9IHhvcl9zcmNfY250OwogCiAJd2hpbGUgKHNyY19jbnQpIHsKIAkJc3VibWl0LT5mbGFncyA9IGZsYWdzX29yaWc7CkBAIC0xMjMsNyArMTI2LDcgQEAKIAkgICAgaW50IHNyY19jbnQsIHNpemVfdCBsZW4sIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCiB7CiAJaW50IGk7Ci0JaW50IHhvcl9zcmNfY250OworCWludCB4b3Jfc3JjX2NudCA9IDA7CiAJaW50IHNyY19vZmYgPSAwOwogCXZvaWQgKmRlc3RfYnVmOwogCXZvaWQgKipzcmNzOwpAQCAtMTM1LDggKzEzOCw5IEBACiAKIAkvKiBjb252ZXJ0IHRvIGJ1ZmZlciBwb2ludGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCi0JCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OwotCisJCWlmIChzcmNfbGlzdFtpXSkKKwkJCXNyY3NbeG9yX3NyY19jbnQrK10gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OworCXNyY19jbnQgPSB4b3Jfc3JjX2NudDsKIAkvKiBzZXQgZGVzdGluYXRpb24gYWRkcmVzcyAqLwogCWRlc3RfYnVmID0gcGFnZV9hZGRyZXNzKGRlc3QpICsgb2Zmc2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IGRkODcyOWQuLjkzZDJjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yMTEsNiArMjExLDE4IEBACiAJc2VsZWN0IEFDUElfQ09OVEFJTkVSCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SCisJdHJpc3RhdGUgIlByb2Nlc3NvciBBZ2dyZWdhdG9yIgorCWRlcGVuZHMgb24gQUNQSV9QUk9DRVNTT1IKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gWDg2CisJaGVscAorCSAgQUNQSSA0LjAgZGVmaW5lcyBwcm9jZXNzb3IgQWdncmVnYXRvciwgd2hpY2ggZW5hYmxlcyBPUyB0byBwZXJmb3JtCisJICBzcGVjaWZpYyBwcm9jZXNzb3IgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbCB0aGF0IGFwcGxpZXMgdG8gYWxsCisJICBwcm9jZXNzb3JzIGluIHRoZSBwbGF0Zm9ybS4gQ3VycmVudGx5IG9ubHkgbG9naWNhbCBwcm9jZXNzb3IgaWRsaW5nCisJICBpcyBkZWZpbmVkLCB3aGljaCBpcyB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24uIFRoaXMgZHJpdmVyCisJICBzdXBwb3J0cyB0aGUgbmV3IGRldmljZS4KKwogY29uZmlnIEFDUElfVEhFUk1BTAogCXRyaXN0YXRlICJUaGVybWFsIFpvbmUiCiAJZGVwZW5kcyBvbiBBQ1BJX1BST0NFU1NPUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IDgyY2Q0OWQuLjc3MDIxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTYyLDMgKzYyLDUgQEAKIHByb2Nlc3Nvci15CQkJOj0gcHJvY2Vzc29yX2NvcmUubyBwcm9jZXNzb3JfdGhyb3R0bGluZy5vCiBwcm9jZXNzb3IteQkJCSs9IHByb2Nlc3Nvcl9pZGxlLm8gcHJvY2Vzc29yX3RoZXJtYWwubwogcHJvY2Vzc29yLSQoQ09ORklHX0NQVV9GUkVRKQkrPSBwcm9jZXNzb3JfcGVyZmxpYi5vCisKK29iai0kKENPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SKSArPSBhY3BpX3BhZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWMuYyBiL2RyaXZlcnMvYWNwaS9hYy5jCmluZGV4IDk4Yjk2OTAuLmI2ZWQ2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hYy5jCkBAIC0yNDUsNiArMjQ1LDcgQEAKIAkJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCiAJCQkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmRldiksIGV2ZW50LAogCQkJCQkJICAodTMyKSBhYy0+c3RhdGUpOworCQlhY3BpX25vdGlmaWVyX2NhbGxfY2hhaW4oZGV2aWNlLCBldmVudCwgKHUzMikgYWMtPnN0YXRlKTsKICNpZmRlZiBDT05GSUdfQUNQSV9TWVNGU19QT1dFUgogCQlrb2JqZWN0X3VldmVudCgmYWMtPmNoYXJnZXIuZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX3BhZC5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2RiOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX3BhZC5jCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogYWNwaV9wYWQuYyBBQ1BJIFByb2Nlc3NvciBBZ2dyZWdhdG9yIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKworI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0NMQVNTCSJwcm9jZXNzb3JfYWdncmVnYXRvciIKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9ERVZJQ0VfTkFNRSAiUHJvY2Vzc29yIEFnZ3JlZ2F0b3IiCisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfTk9USUZZIDB4ODAKK3N0YXRpYyBERUZJTkVfTVVURVgoaXNvbGF0ZWRfY3B1c19sb2NrKTsKKworI2RlZmluZSBNV0FJVF9TVUJTVEFURV9NQVNLCSgweGYpCisjZGVmaW5lIE1XQUlUX0NTVEFURV9NQVNLCSgweGYpCisjZGVmaW5lIE1XQUlUX1NVQlNUQVRFX1NJWkUJKDQpCisjZGVmaW5lIENQVUlEX01XQUlUX0xFQUYgKDUpCisjZGVmaW5lIENQVUlENV9FQ1hfRVhURU5TSU9OU19TVVBQT1JURUQgKDB4MSkKKyNkZWZpbmUgQ1BVSUQ1X0VDWF9JTlRFUlJVUFRfQlJFQUsJKDB4MikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBvd2VyX3NhdmluZ19td2FpdF9lYXg7CitzdGF0aWMgdm9pZCBwb3dlcl9zYXZpbmdfbXdhaXRfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CisJdW5zaWduZWQgaW50IGhpZ2hlc3RfY3N0YXRlID0gMDsKKwl1bnNpZ25lZCBpbnQgaGlnaGVzdF9zdWJjc3RhdGUgPSAwOworCWludCBpOworCisJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVdBSVQpKQorCQlyZXR1cm47CisJaWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgPCBDUFVJRF9NV0FJVF9MRUFGKQorCQlyZXR1cm47CisKKwljcHVpZChDUFVJRF9NV0FJVF9MRUFGLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCWlmICghKGVjeCAmIENQVUlENV9FQ1hfRVhURU5TSU9OU19TVVBQT1JURUQpIHx8CisJICAgICEoZWN4ICYgQ1BVSUQ1X0VDWF9JTlRFUlJVUFRfQlJFQUspKQorCQlyZXR1cm47CisKKwllZHggPj49IE1XQUlUX1NVQlNUQVRFX1NJWkU7CisJZm9yIChpID0gMDsgaSA8IDcgJiYgZWR4OyBpKyssIGVkeCA+Pj0gTVdBSVRfU1VCU1RBVEVfU0laRSkgeworCQlpZiAoZWR4ICYgTVdBSVRfU1VCU1RBVEVfTUFTSykgeworCQkJaGlnaGVzdF9jc3RhdGUgPSBpOworCQkJaGlnaGVzdF9zdWJjc3RhdGUgPSBlZHggJiBNV0FJVF9TVUJTVEFURV9NQVNLOworCQl9CisJfQorCXBvd2VyX3NhdmluZ19td2FpdF9lYXggPSAoaGlnaGVzdF9jc3RhdGUgPDwgTVdBSVRfU1VCU1RBVEVfU0laRSkgfAorCQkoaGlnaGVzdF9zdWJjc3RhdGUgLSAxKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX09OLCAmaSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1RJTUUpICYmIGRlZmluZWQoQ09ORklHX1g4NikKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkvKgorCQkgKiBBTUQgRmFtMTBoIFRTQyB3aWxsIHRpY2sgaW4gYWxsCisJCSAqIEMvUC9TMC9TMSBzdGF0ZXMgd2hlbiB0aGlzIGJpdCBpcyBzZXQuCisJCSAqLworCQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKSkKKwkJCXJldHVybjsKKworCQkvKkZBTEwgVEhST1VHSCovCisJZGVmYXVsdDoKKwkJLyogVFNDIGNvdWxkIGhhbHQgaW4gaWRsZSwgc28gbm90aWZ5IHVzZXJzICovCisJCW1hcmtfdHNjX3Vuc3RhYmxlKCJUU0MgaGFsdHMgaW4gaWRsZSIpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfd2VpZ2h0W05SX0NQVVNdOworc3RhdGljIGludCB0c2tfaW5fY3B1W05SX0NQVVNdID0ge1swIC4uLiBOUl9DUFVTLTFdID0gLTF9Oworc3RhdGljIERFQ0xBUkVfQklUTUFQKHBhZF9idXN5X2NwdXNfYml0cywgTlJfQ1BVUyk7CitzdGF0aWMgdm9pZCByb3VuZF9yb2Jpbl9jcHUodW5zaWduZWQgaW50IHRza19pbmRleCkKK3sKKwlzdHJ1Y3QgY3B1bWFzayAqcGFkX2J1c3lfY3B1cyA9IHRvX2NwdW1hc2socGFkX2J1c3lfY3B1c19iaXRzKTsKKwljcHVtYXNrX3Zhcl90IHRtcDsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgbWluX3dlaWdodCA9IC0xLCBwcmVmZXJyZWRfY3B1OworCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdG1wLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwljcHVtYXNrX2NsZWFyKHRtcCk7CisJZm9yX2VhY2hfY3B1KGNwdSwgcGFkX2J1c3lfY3B1cykKKwkJY3B1bWFza19vcih0bXAsIHRtcCwgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KSk7CisJY3B1bWFza19hbmRub3QodG1wLCBjcHVfb25saW5lX21hc2ssIHRtcCk7CisJLyogYXZvaWQgSFQgc2liaWxpbmdzIGlmIHBvc3NpYmxlICovCisJaWYgKGNwdW1hc2tfZW1wdHkodG1wKSkKKwkJY3B1bWFza19hbmRub3QodG1wLCBjcHVfb25saW5lX21hc2ssIHBhZF9idXN5X2NwdXMpOworCWlmIChjcHVtYXNrX2VtcHR5KHRtcCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCQlyZXR1cm47CisJfQorCWZvcl9lYWNoX2NwdShjcHUsIHRtcCkgeworCQlpZiAoY3B1X3dlaWdodFtjcHVdIDwgbWluX3dlaWdodCkgeworCQkJbWluX3dlaWdodCA9IGNwdV93ZWlnaHRbY3B1XTsKKwkJCXByZWZlcnJlZF9jcHUgPSBjcHU7CisJCX0KKwl9CisKKwlpZiAodHNrX2luX2NwdVt0c2tfaW5kZXhdICE9IC0xKQorCQljcHVtYXNrX2NsZWFyX2NwdSh0c2tfaW5fY3B1W3Rza19pbmRleF0sIHBhZF9idXN5X2NwdXMpOworCXRza19pbl9jcHVbdHNrX2luZGV4XSA9IHByZWZlcnJlZF9jcHU7CisJY3B1bWFza19zZXRfY3B1KHByZWZlcnJlZF9jcHUsIHBhZF9idXN5X2NwdXMpOworCWNwdV93ZWlnaHRbcHJlZmVycmVkX2NwdV0rKzsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKHByZWZlcnJlZF9jcHUpKTsKK30KKworc3RhdGljIHZvaWQgZXhpdF9yb3VuZF9yb2Jpbih1bnNpZ25lZCBpbnQgdHNrX2luZGV4KQoreworCXN0cnVjdCBjcHVtYXNrICpwYWRfYnVzeV9jcHVzID0gdG9fY3B1bWFzayhwYWRfYnVzeV9jcHVzX2JpdHMpOworCWNwdW1hc2tfY2xlYXJfY3B1KHRza19pbl9jcHVbdHNrX2luZGV4XSwgcGFkX2J1c3lfY3B1cyk7CisJdHNrX2luX2NwdVt0c2tfaW5kZXhdID0gLTE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZV9wY3QgPSA1OyAvKiBwZXJjZW50YWdlICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX3JvYmluX3RpbWUgPSAxMDsgLyogc2Vjb25kICovCitzdGF0aWMgaW50IHBvd2VyX3NhdmluZ190aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7LnNjaGVkX3ByaW9yaXR5ID0gMX07CisJaW50IGRvX3NsZWVwOworCXVuc2lnbmVkIGludCB0c2tfaW5kZXggPSAodW5zaWduZWQgbG9uZylkYXRhOworCXU2NCBsYXN0X2ppZmZpZXMgPSAwOworCisJc2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsIFNDSEVEX1JSLCAmcGFyYW0pOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaW50IGNwdTsKKwkJdTY0IGV4cGlyZV90aW1lOworCisJCXRyeV90b19mcmVlemUoKTsKKworCQkvKiByb3VuZCByb2JpbiB0byBjcHVzICovCisJCWlmIChsYXN0X2ppZmZpZXMgKyByb3VuZF9yb2Jpbl90aW1lICogSFogPCBqaWZmaWVzKSB7CisJCQlsYXN0X2ppZmZpZXMgPSBqaWZmaWVzOworCQkJcm91bmRfcm9iaW5fY3B1KHRza19pbmRleCk7CisJCX0KKworCQlkb19zbGVlcCA9IDA7CisKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7CisJCS8qCisJCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHRlc3QKKwkJICogTkVFRF9SRVNDSEVEOgorCQkgKi8KKwkJc21wX21iKCk7CisKKwkJZXhwaXJlX3RpbWUgPSBqaWZmaWVzICsgSFogKiAoMTAwIC0gaWRsZV9wY3QpIC8gMTAwOworCisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCQljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRU5URVIsCisJCQkJJmNwdSk7CisJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKKworCQkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOworCQkJc21wX21iKCk7CisJCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCV9fbXdhaXQocG93ZXJfc2F2aW5nX213YWl0X2VheCwgMSk7CisKKwkJCXN0YXJ0X2NyaXRpY2FsX3RpbWluZ3MoKTsKKwkJCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9FWElULAorCQkJCSZjcHUpOworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCQlpZiAoamlmZmllcyA+IGV4cGlyZV90aW1lKSB7CisJCQkJZG9fc2xlZXAgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKKworCQkvKgorCQkgKiBjdXJyZW50IHNjaGVkX3J0IGhhcyB0aHJlc2hvbGQgZm9yIHJ0IHRhc2sgcnVubmluZyB0aW1lLgorCQkgKiBXaGVuIGEgcnQgdGFzayB1c2VzIDk1JSBDUFUgdGltZSwgdGhlIHJ0IHRocmVhZCB3aWxsIGJlCisJCSAqIHNjaGVkdWxlZCBvdXQgZm9yIDUlIENQVSB0aW1lIHRvIG5vdCBzdGFydmUgb3RoZXIgdGFza3MuIEJ1dAorCQkgKiB0aGUgbWVjaGFuaXNtIG9ubHkgd29ya3Mgd2hlbiBhbGwgQ1BVcyBoYXZlIFJUIHRhc2sgcnVubmluZywKKwkJICogYXMgaWYgb25lIENQVSBoYXNuJ3QgUlQgdGFzaywgUlQgdGFzayBmcm9tIG90aGVyIENQVXMgd2lsbAorCQkgKiBib3Jyb3cgQ1BVIHRpbWUgZnJvbSB0aGlzIENQVSBhbmQgY2F1c2UgUlQgdGFzayB1c2UgPiA5NSUKKwkJICogQ1BVIHRpbWUuIFRvIG1ha2UgJ2F2b2lkIHN0YXJhdGlvbicgd29yaywgdGFrZXMgYSBuYXAgaGVyZS4KKwkJICovCisJCWlmIChkb19zbGVlcCkKKwkJCXNjaGVkdWxlX3RpbWVvdXRfa2lsbGFibGUoSFogKiBpZGxlX3BjdCAvIDEwMCk7CisJfQorCisJZXhpdF9yb3VuZF9yb2Jpbih0c2tfaW5kZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwc190c2tzW05SX0NQVVNdOworc3RhdGljIHVuc2lnbmVkIGludCBwc190c2tfbnVtOworc3RhdGljIGludCBjcmVhdGVfcG93ZXJfc2F2aW5nX3Rhc2sodm9pZCkKK3sKKwlwc190c2tzW3BzX3Rza19udW1dID0ga3RocmVhZF9ydW4ocG93ZXJfc2F2aW5nX3RocmVhZCwKKwkJKHZvaWQgKikodW5zaWduZWQgbG9uZylwc190c2tfbnVtLAorCQkicG93ZXJfc2F2aW5nLyVkIiwgcHNfdHNrX251bSk7CisJaWYgKHBzX3Rza3NbcHNfdHNrX251bV0pIHsKKwkJcHNfdHNrX251bSsrOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfcG93ZXJfc2F2aW5nX3Rhc2sodm9pZCkKK3sKKwlpZiAocHNfdHNrX251bSA+IDApIHsKKwkJcHNfdHNrX251bS0tOworCQlrdGhyZWFkX3N0b3AocHNfdHNrc1twc190c2tfbnVtXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfcG93ZXJfc2F2aW5nX3Rhc2tfbnVtKHVuc2lnbmVkIGludCBudW0pCit7CisJaWYgKG51bSA+IHBzX3Rza19udW0pIHsKKwkJd2hpbGUgKHBzX3Rza19udW0gPCBudW0pIHsKKwkJCWlmIChjcmVhdGVfcG93ZXJfc2F2aW5nX3Rhc2soKSkKKwkJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKG51bSA8IHBzX3Rza19udW0pIHsKKwkJd2hpbGUgKHBzX3Rza19udW0gPiBudW0pCisJCQlkZXN0cm95X3Bvd2VyX3NhdmluZ190YXNrKCk7CisJfQorfQorCitzdGF0aWMgaW50IGFjcGlfcGFkX2lkbGVfY3B1cyh1bnNpZ25lZCBpbnQgbnVtX2NwdXMpCit7CisJZ2V0X29ubGluZV9jcHVzKCk7CisKKwludW1fY3B1cyA9IG1pbl90KHVuc2lnbmVkIGludCwgbnVtX2NwdXMsIG51bV9vbmxpbmVfY3B1cygpKTsKKwlzZXRfcG93ZXJfc2F2aW5nX3Rhc2tfbnVtKG51bV9jcHVzKTsKKworCXB1dF9vbmxpbmVfY3B1cygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDMyX3QgYWNwaV9wYWRfaWRsZV9jcHVzX251bSh2b2lkKQoreworCXJldHVybiBwc190c2tfbnVtOworfQorCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9ycnRpbWVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmbnVtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG51bSA8IDEgfHwgbnVtID49IDEwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlyb3VuZF9yb2Jpbl90aW1lID0gbnVtOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX3JydGltZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZCIsIHJvdW5kX3JvYmluX3RpbWUpOworfQorc3RhdGljIERFVklDRV9BVFRSKHJydGltZSwgU19JUlVHT3xTX0lXVVNSLAorCWFjcGlfcGFkX3JydGltZV9zaG93LAorCWFjcGlfcGFkX3JydGltZV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX2lkbGVwY3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmbnVtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG51bSA8IDEgfHwgbnVtID49IDEwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlpZGxlX3BjdCA9IG51bTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9pZGxlcGN0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkIiwgaWRsZV9wY3QpOworfQorc3RhdGljIERFVklDRV9BVFRSKGlkbGVwY3QsIFNfSVJVR098U19JV1VTUiwKKwlhY3BpX3BhZF9pZGxlcGN0X3Nob3csCisJYWNwaV9wYWRfaWRsZXBjdF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX2lkbGVjcHVzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBudW07CisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJm51bSkpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJYWNwaV9wYWRfaWRsZV9jcHVzKG51bSk7CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfaWRsZWNwdXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gY3B1bWFza19zY25wcmludGYoYnVmLCBQQUdFX1NJWkUsCisJCXRvX2NwdW1hc2socGFkX2J1c3lfY3B1c19iaXRzKSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaWRsZWNwdXMsIFNfSVJVR098U19JV1VTUiwKKwlhY3BpX3BhZF9pZGxlY3B1c19zaG93LAorCWFjcGlfcGFkX2lkbGVjcHVzX3N0b3JlKTsKKworc3RhdGljIGludCBhY3BpX3BhZF9hZGRfc3lzZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlY3B1cyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVwY3QpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVjcHVzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9ycnRpbWUpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVjcHVzKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVwY3QpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGFkX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZWNwdXMpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlcGN0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfcnJ0aW1lKTsKK30KKworLyogUXVlcnkgZmlybXdhcmUgaG93IG1hbnkgQ1BVcyBzaG91bGQgYmUgaWRsZSAqLworc3RhdGljIGludCBhY3BpX3BhZF9wdXIoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKm51bV9jcHVzKQoreworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZTsKKwlpbnQgcmV2LCBudW0sIHJldCA9IC1FSU5WQUw7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfUFVSIiwgTlVMTCwgJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwYWNrYWdlID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKHBhY2thZ2UtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UgfHwgcGFja2FnZS0+cGFja2FnZS5jb3VudCAhPSAyKQorCQlnb3RvIG91dDsKKwlyZXYgPSBwYWNrYWdlLT5wYWNrYWdlLmVsZW1lbnRzWzBdLmludGVnZXIudmFsdWU7CisJbnVtID0gcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1sxXS5pbnRlZ2VyLnZhbHVlOworCWlmIChyZXYgIT0gMSkKKwkJZ290byBvdXQ7CisJKm51bV9jcHVzID0gbnVtOworCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiByZXQ7Cit9CisKKy8qIE5vdGlmeSBmaXJtd2FyZSBob3cgbWFueSBDUFVzIGFyZSBpZGxlICovCitzdGF0aWMgdm9pZCBhY3BpX3BhZF9vc3QoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgc3RhdCwKKwl1aW50MzJfdCBpZGxlX2NwdXMpCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1zWzNdID0geworCQl7LnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUix9LAorCQl7LnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUix9LAorCQl7LnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSLH0sCisJfTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdCA9IHszLCBwYXJhbXN9OworCisJcGFyYW1zWzBdLmludGVnZXIudmFsdWUgPSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX05PVElGWTsKKwlwYXJhbXNbMV0uaW50ZWdlci52YWx1ZSA9ICBzdGF0OworCXBhcmFtc1syXS5idWZmZXIubGVuZ3RoID0gNDsKKwlwYXJhbXNbMl0uYnVmZmVyLnBvaW50ZXIgPSAodm9pZCAqKSZpZGxlX2NwdXM7CisJYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX09TVCIsICZhcmdfbGlzdCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGFkX2hhbmRsZV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCWludCBudW1fY3B1cywgcmV0OworCXVpbnQzMl90IGlkbGVfY3B1czsKKworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJaWYgKGFjcGlfcGFkX3B1cihoYW5kbGUsICZudW1fY3B1cykpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCQlyZXR1cm47CisJfQorCXJldCA9IGFjcGlfcGFkX2lkbGVfY3B1cyhudW1fY3B1cyk7CisJaWRsZV9jcHVzID0gYWNwaV9wYWRfaWRsZV9jcHVzX251bSgpOworCWlmICghcmV0KQorCQlhY3BpX3BhZF9vc3QoaGFuZGxlLCAwLCBpZGxlX2NwdXMpOworCWVsc2UKKwkJYWNwaV9wYWRfb3N0KGhhbmRsZSwgMSwgMCk7CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhY3BpX3BhZF9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsCisJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGRhdGE7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX05PVElGWToKKwkJYWNwaV9wYWRfaGFuZGxlX25vdGlmeShoYW5kbGUpOworCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGRldmljZSwgZXZlbnQsIDApOworCQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywKKwkJCWRldl9uYW1lKCZkZXZpY2UtPmRldiksIGV2ZW50LCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyJVbnN1cHBvcnRlZCBldmVudCBbMHgleF1cbiIsIGV2ZW50KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGFjcGlfcGFkX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9DTEFTUyk7CisKKwlpZiAoYWNwaV9wYWRfYWRkX3N5c2ZzKGRldmljZSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAorCQlBQ1BJX0RFVklDRV9OT1RJRlksIGFjcGlfcGFkX25vdGlmeSwgZGV2aWNlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJYWNwaV9wYWRfcmVtb3ZlX3N5c2ZzKGRldmljZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlfcGFkX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKKwlpbnQgdHlwZSkKK3sKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCWFjcGlfcGFkX2lkbGVfY3B1cygwKTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisKKwlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihkZXZpY2UtPmhhbmRsZSwKKwkJQUNQSV9ERVZJQ0VfTk9USUZZLCBhY3BpX3BhZF9ub3RpZnkpOworCWFjcGlfcGFkX3JlbW92ZV9zeXNmcyhkZXZpY2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHBhZF9kZXZpY2VfaWRzW10gPSB7CisJeyJBQ1BJMDAwQyIsIDB9LAorCXsiIiwgMH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBwYWRfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9wYWRfZHJpdmVyID0geworCS5uYW1lID0gInByb2Nlc3Nvcl9hZ2dyZWdhdG9yIiwKKwkuY2xhc3MgPSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0NMQVNTLAorCS5pZHMgPSBwYWRfZGV2aWNlX2lkcywKKwkub3BzID0geworCQkuYWRkID0gYWNwaV9wYWRfYWRkLAorCQkucmVtb3ZlID0gYWNwaV9wYWRfcmVtb3ZlLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhZF9pbml0KHZvaWQpCit7CisJcG93ZXJfc2F2aW5nX213YWl0X2luaXQoKTsKKwlpZiAocG93ZXJfc2F2aW5nX213YWl0X2VheCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcGFkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3BhZF9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcGFkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFjcGlfcGFkX2luaXQpOworbW9kdWxlX2V4aXQoYWNwaV9wYWRfZXhpdCk7CitNT0RVTEVfQVVUSE9SKCJTaGFvaHVhIExpPHNoYW9odWEubGlAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFByb2Nlc3NvciBBZ2dyZWdhdG9yIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCmluZGV4IDhlNjc5ZWYuLmE0NDcxZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKQEAgLTEwMyw5ICsxMDMsOSBAQAogCiAjZGVmaW5lIEFDUElfTUFYX1JFRkVSRU5DRV9DT1VOVCAgICAgICAgMHgxMDAwCiAKLS8qIFNpemUgb2YgY2FjaGVkIG1lbW9yeSBtYXBwaW5nIGZvciBzeXN0ZW0gbWVtb3J5IG9wZXJhdGlvbiByZWdpb24gKi8KKy8qIERlZmF1bHQgcGFnZSBzaXplIGZvciB1c2UgaW4gbWFwcGluZyBtZW1vcnkgZm9yIG9wZXJhdGlvbiByZWdpb25zICovCiAKLSNkZWZpbmUgQUNQSV9TWVNNRU1fUkVHSU9OX1dJTkRPV19TSVpFICA0MDk2CisjZGVmaW5lIEFDUElfREVGQVVMVF9QQUdFX1NJWkUgICAgICAgICAgNDA5NgkvKiBNdXN0IGJlIHBvd2VyIG9mIDIgKi8KIAogLyogb3duZXJfaWQgdHJhY2tpbmcuIDggZW50cmllcyBhbGxvd3MgZm9yIDI1NSBvd25lcl9pZHMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCmluZGV4IDNhNTRiNzMuLjJiZDgzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKQEAgLTc3LDcgKzc3LDggQEAKIAl2b2lkICpsb2dpY2FsX2FkZHJfcHRyID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9tZW1fc3BhY2VfY29udGV4dCAqbWVtX2luZm8gPSByZWdpb25fY29udGV4dDsKIAl1MzIgbGVuZ3RoOwotCWFjcGlfc2l6ZSB3aW5kb3dfc2l6ZTsKKwlhY3BpX3NpemUgbWFwX2xlbmd0aDsKKwlhY3BpX3NpemUgcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoOwogI2lmZGVmIEFDUElfTUlTQUxJR05NRU5UX05PVF9TVVBQT1JURUQKIAl1MzIgcmVtYWluZGVyOwogI2VuZGlmCkBAIC0xNDQsMjUgKzE0NSwzOSBAQAogCQl9CiAKIAkJLyoKLQkJICogRG9uJ3QgYXR0ZW1wdCB0byBtYXAgbWVtb3J5IGJleW9uZCB0aGUgZW5kIG9mIHRoZSByZWdpb24sIGFuZAotCQkgKiBjb25zdHJhaW4gdGhlIG1heGltdW0gbWFwcGluZyBzaXplIHRvIHNvbWV0aGluZyByZWFzb25hYmxlLgorCQkgKiBBdHRlbXB0IHRvIG1hcCBmcm9tIHRoZSByZXF1ZXN0ZWQgYWRkcmVzcyB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24uCisJCSAqIEhvd2V2ZXIsIHdlIHdpbGwgbmV2ZXIgbWFwIG1vcmUgdGhhbiBvbmUgcGFnZSwgbm9yIHdpbGwgd2UgY3Jvc3MKKwkJICogYSBwYWdlIGJvdW5kYXJ5LgogCQkgKi8KLQkJd2luZG93X3NpemUgPSAoYWNwaV9zaXplKQorCQltYXBfbGVuZ3RoID0gKGFjcGlfc2l6ZSkKIAkJICAgICgobWVtX2luZm8tPmFkZHJlc3MgKyBtZW1faW5mby0+bGVuZ3RoKSAtIGFkZHJlc3MpOwogCi0JCWlmICh3aW5kb3dfc2l6ZSA+IEFDUElfU1lTTUVNX1JFR0lPTl9XSU5ET1dfU0laRSkgewotCQkJd2luZG93X3NpemUgPSBBQ1BJX1NZU01FTV9SRUdJT05fV0lORE9XX1NJWkU7CisJCS8qCisJCSAqIElmIG1hcHBpbmcgdGhlIGVudGlyZSByZW1haW5pbmcgcG9ydGlvbiBvZiB0aGUgcmVnaW9uIHdpbGwgY3Jvc3MKKwkJICogYSBwYWdlIGJvdW5kYXJ5LCBqdXN0IG1hcCB1cCB0byB0aGUgcGFnZSBib3VuZGFyeSwgZG8gbm90IGNyb3NzLgorCQkgKiBPbiBzb21lIHN5c3RlbXMsIGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeSB3aGlsZSBtYXBwaW5nIHJlZ2lvbnMKKwkJICogY2FuIGNhdXNlIHdhcm5pbmdzIGlmIHRoZSBwYWdlcyBoYXZlIGRpZmZlcmVudCBhdHRyaWJ1dGVzCisJCSAqIGR1ZSB0byByZXNvdXJjZSBtYW5hZ2VtZW50CisJCSAqLworCQlwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGggPQorCQkgICAgQUNQSV9ST1VORF9VUChhZGRyZXNzLCBBQ1BJX0RFRkFVTFRfUEFHRV9TSVpFKSAtIGFkZHJlc3M7CisKKwkJaWYgKCFwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGgpIHsKKwkJCXBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aCA9IEFDUElfREVGQVVMVF9QQUdFX1NJWkU7CisJCX0KKworCQlpZiAobWFwX2xlbmd0aCA+IHBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aCkgeworCQkJbWFwX2xlbmd0aCA9IHBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aDsKIAkJfQogCiAJCS8qIENyZWF0ZSBhIG5ldyBtYXBwaW5nIHN0YXJ0aW5nIGF0IHRoZSBhZGRyZXNzIGdpdmVuICovCiAKLQkJbWVtX2luZm8tPm1hcHBlZF9sb2dpY2FsX2FkZHJlc3MgPQotCQkJYWNwaV9vc19tYXBfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpIGFkZHJlc3MsIHdpbmRvd19zaXplKTsKKwkJbWVtX2luZm8tPm1hcHBlZF9sb2dpY2FsX2FkZHJlc3MgPSBhY3BpX29zX21hcF9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykgYWRkcmVzcywgbWFwX2xlbmd0aCk7CiAJCWlmICghbWVtX2luZm8tPm1hcHBlZF9sb2dpY2FsX2FkZHJlc3MpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkJICAgICJDb3VsZCBub3QgbWFwIG1lbW9yeSBhdCAlOC44WCU4LjhYLCBzaXplICVYIiwKIAkJCQkgICAgQUNQSV9GT1JNQVRfTkFUSVZFX1VJTlQoYWRkcmVzcyksCi0JCQkJICAgICh1MzIpIHdpbmRvd19zaXplKSk7CisJCQkJICAgICh1MzIpIG1hcF9sZW5ndGgpKTsKIAkJCW1lbV9pbmZvLT5tYXBwZWRfbGVuZ3RoID0gMDsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCQl9CkBAIC0xNzAsNyArMTg1LDcgQEAKIAkJLyogU2F2ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgbWFwcGluZyBzaXplICovCiAKIAkJbWVtX2luZm8tPm1hcHBlZF9waHlzaWNhbF9hZGRyZXNzID0gYWRkcmVzczsKLQkJbWVtX2luZm8tPm1hcHBlZF9sZW5ndGggPSB3aW5kb3dfc2l6ZTsKKwkJbWVtX2luZm8tPm1hcHBlZF9sZW5ndGggPSBtYXBfbGVuZ3RoOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmMKaW5kZXggMTM1ZmJmZS4uNzQxMTkxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtOTQsMzYgKzk0LDMzIEBACiAKIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfZ2V0X2RldmljZSk7CiAKK2FjcGlfc3RhdHVzIGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGEpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIl9TVEEiLCBOVUxMLCBzdGEpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcmV0dXJuIEFFX09LOworCisJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpIHsKKwkJKnN0YSA9IEFDUElfU1RBX0RFVklDRV9QUkVTRU5UIHwgQUNQSV9TVEFfREVWSUNFX0VOQUJMRUQgfAorCQkgICAgICAgQUNQSV9TVEFfREVWSUNFX1VJICAgICAgfCBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkc7CisJCXJldHVybiBBRV9PSzsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKwogaW50IGFjcGlfYnVzX2dldF9zdGF0dXMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHN0YSA9IDA7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGE7CiAKKwlzdGF0dXMgPSBhY3BpX2J1c19nZXRfc3RhdHVzX2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgJnN0YSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICogRXZhbHVhdGUgX1NUQSBpZiBwcmVzZW50LgotCSAqLwotCWlmIChkZXZpY2UtPmZsYWdzLmR5bmFtaWNfc3RhdHVzKSB7Ci0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2aWNlLT5oYW5kbGUsICJfU1RBIiwgTlVMTCwgJnN0YSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9IChpbnQpc3RhOwotCX0KLQotCS8qCi0JICogQWNjb3JkaW5nIHRvIEFDUEkgc3BlYyBzb21lIGRldmljZSBjYW4gYmUgcHJlc2VudCBhbmQgZnVuY3Rpb25hbAotCSAqIGV2ZW4gaWYgdGhlIHBhcmVudCBpcyBub3QgcHJlc2VudCBidXQgZnVuY3Rpb25hbC4KLQkgKiBJbiBzdWNoIGNvbmRpdGlvbnMgdGhlIGNoaWxkIGRldmljZSBzaG91bGQgbm90IGluaGVyaXQgdGhlIHN0YXR1cwotCSAqIGZyb20gdGhlIHBhcmVudC4KLQkgKi8KLQllbHNlCi0JCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0KLQkJICAgIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UIHwgQUNQSV9TVEFfREVWSUNFX0VOQUJMRUQgfAotCQkgICAgQUNQSV9TVEFfREVWSUNFX1VJICAgICAgfCBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkc7CisJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPSAoaW50KSBzdGE7CiAKIAlpZiAoZGV2aWNlLT5zdGF0dXMuZnVuY3Rpb25hbCAmJiAhZGV2aWNlLT5zdGF0dXMucHJlc2VudCkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJEZXZpY2UgWyVzXSBzdGF0dXMgWyUwOHhdOiAiCkBAIC0xMzUsMTAgKzEzMiw4IEBACiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRGV2aWNlIFslc10gc3RhdHVzIFslMDh4XVxuIiwKIAkJCSAgZGV2aWNlLT5wbnAuYnVzX2lkLAogCQkJICAodTMyKSBTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSkpOwotCiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfZ2V0X3N0YXR1cyk7CiAKIHZvaWQgYWNwaV9idXNfcHJpdmF0ZV9kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IDkzMzViODcuLjBjOWM2YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXR0b24uYworKysgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKQEAgLTI1MSw2ICsyNTEsOSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdGU7CiAKKwlpZiAoIWxpZF9kZXZpY2UpCisJCXJldHVybiAtRU5PREVWOworCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGxpZF9kZXZpY2UtPmhhbmRsZSwgIl9MSUQiLCBOVUxMLAogCQkJCSAgICAgICAmc3RhdGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kb2NrLmMgYi9kcml2ZXJzL2FjcGkvZG9jay5jCmluZGV4IDNhMmNmZWYuLjczMzhiNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2RvY2suYwpAQCAtNjcsNyArNjcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZGVwZW5kZW50X2RldmljZXM7CiAJc3RydWN0IGxpc3RfaGVhZCBob3RwbHVnX2RldmljZXM7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmlsaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgc2libGluZzsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkb2NrX2RldmljZTsKIH07CiBzdGF0aWMgTElTVF9IRUFEKGRvY2tfc3RhdGlvbnMpOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAKIAlpZiAoaXNfZG9jayhoYW5kbGUpKQogCQlyZXR1cm4gMTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKSB7CiAJCWlmIChmaW5kX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGhhbmRsZSkpCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC02MTksNyArNjE5LDcgQEAKIAkgKiBtYWtlIHN1cmUgdGhpcyBoYW5kbGUgaXMgZm9yIGEgZGV2aWNlIGRlcGVuZGVudCBvbiB0aGUgZG9jaywKIAkgKiB0aGlzIHdvdWxkIGluY2x1ZGUgdGhlIGRvY2sgc3RhdGlvbiBpdHNlbGYKIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKSB7CiAJCS8qCiAJCSAqIEFuIEFUQSBiYXkgY2FuIGJlIGluIGEgZG9jayBhbmQgaXRzZWxmIGNhbiBiZSBlamVjdGVkCiAJCSAqIHNlcGVyYXRlbHksIHNvIHRoZXJlIGFyZSB0d28gJ2RvY2sgc3RhdGlvbnMnIHdoaWNoIG5lZWQgdGhlCkBAIC02NTEsNyArNjUxLDcgQEAKIAlpZiAoIWRvY2tfc3RhdGlvbl9jb3VudCkKIAkJcmV0dXJuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2libGluZykgewogCQlkZCA9IGZpbmRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgaGFuZGxlKTsKIAkJaWYgKGRkKQogCQkJZG9ja19kZWxfaG90cGx1Z19kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CkBAIC03ODcsNyArNzg3LDcgQEAKIAlpZiAoZXZlbnQgIT0gQUNQSV9OT1RJRllfQlVTX0NIRUNLICYmIGV2ZW50ICE9IEFDUElfTk9USUZZX0RFVklDRV9DSEVDSwogCSAgICYmIGV2ZW50ICE9IEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1QpCiAJCXJldHVybiAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJaWYgKGRvY2tfc3RhdGlvbi0+aGFuZGxlID09IGhhbmRsZSkgewogCQkJc3RydWN0IGRvY2tfZGF0YSAqZG9ja19kYXRhOwogCkBAIC05NTgsNyArOTU4LDcgQEAKIAlkb2NrX3N0YXRpb24tPmxhc3RfZG9ja190aW1lID0gamlmZmllcyAtIEhaOwogCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPmRlcGVuZGVudF9kZXZpY2VzKTsKIAlJTklUX0xJU1RfSEVBRCgmZG9ja19zdGF0aW9uLT5ob3RwbHVnX2RldmljZXMpOwotCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPnNpYmlsaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmZG9ja19zdGF0aW9uLT5zaWJsaW5nKTsKIAlzcGluX2xvY2tfaW5pdCgmZG9ja19zdGF0aW9uLT5kZF9sb2NrKTsKIAltdXRleF9pbml0KCZkb2NrX3N0YXRpb24tPmhwX2xvY2spOwogCUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoJmRvY2tfbm90aWZpZXJfbGlzdCk7CkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogCWFkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CiAKIAlkb2NrX3N0YXRpb25fY291bnQrKzsKLQlsaXN0X2FkZCgmZG9ja19zdGF0aW9uLT5zaWJpbGluZywgJmRvY2tfc3RhdGlvbnMpOworCWxpc3RfYWRkKCZkb2NrX3N0YXRpb24tPnNpYmxpbmcsICZkb2NrX3N0YXRpb25zKTsKIAlyZXR1cm4gMDsKIAogZG9ja19hZGRfZXJyX3VucmVnaXN0ZXI6CkBAIC0xMTQ5LDcgKzExNDksNyBAQAogCXN0cnVjdCBkb2NrX3N0YXRpb24gKnRtcDsKIAogCXVucmVnaXN0ZXJfYWNwaV9idXNfbm90aWZpZXIoJmRvY2tfYWNwaV9ub3RpZmllcik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRvY2tfc3RhdGlvbiwgdG1wLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRvY2tfc3RhdGlvbiwgdG1wLCAmZG9ja19zdGF0aW9ucywgc2libGluZykKIAkJZG9ja19yZW1vdmUoZG9ja19zdGF0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCBmNzA3OTYwLi5iYWVmMjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtMTE5LDYgKzExOSw4IEBACiB9ICpib290X2VjLCAqZmlyc3RfZWM7CiAKIHN0YXRpYyBpbnQgRUNfRkxBR1NfTVNJOyAvKiBPdXQtb2Ytc3BlYyBNU0kgY29udHJvbGxlciAqLworc3RhdGljIGludCBFQ19GTEFHU19WQUxJREFURV9FQ0RUOyAvKiBBU1VTdGVjIEVDRFRzIG5lZWQgdG8gYmUgdmFsaWRhdGVkICovCitzdGF0aWMgaW50IEVDX0ZMQUdTX1NLSVBfRFNEVF9TQ0FOOyAvKiBOb3QgYWxsIEJJT1Mgc3Vydml2ZSBlYXJseSBEU0RUIHNjYW4gKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24gTWFuYWdlbWVudApAQCAtMjMyLDEwICsyMzQsOCBAQAogCQkJfQogCQkJYWR2YW5jZV90cmFuc2FjdGlvbihlYywgYWNwaV9lY19yZWFkX3N0YXR1cyhlYykpOwogCQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWxheSkpOwotCQlpZiAoIWVjLT5jdXJyLT5pcnFfY291bnQgfHwKLQkJICAgIChhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIEFDUElfRUNfRkxBR19JQkYpKQorCQlpZiAoYWNwaV9lY19yZWFkX3N0YXR1cyhlYykgJiBBQ1BJX0VDX0ZMQUdfSUJGKQogCQkJYnJlYWs7Ci0JCS8qIHRyeSByZXN0YXJ0IGNvbW1hbmQgaWYgd2UgZ2V0IGFueSBmYWxzZSBpbnRlcnJ1cHRzICovCiAJCXByX2RlYnVnKFBSRUZJWCAiY29udHJvbGxlciByZXNldCwgcmVzdGFydCB0cmFuc2FjdGlvblxuIik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZlYy0+Y3Vycl9sb2NrLCBmbGFncyk7CiAJCXN0YXJ0X3RyYW5zYWN0aW9uKGVjKTsKQEAgLTg5OSw2ICs4OTksNDQgQEAKIAl7IiIsIDB9LAogfTsKIAorLyogU29tZSBCSU9TIGRvIG5vdCBzdXJ2aXZlIGVhcmx5IERTRFQgc2Nhbiwgc2tpcCBpdCAqLworc3RhdGljIGludCBlY19za2lwX2RzZHRfc2Nhbihjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJRUNfRkxBR1NfU0tJUF9EU0RUX1NDQU4gPSAxOworCXJldHVybiAwOworfQorCisvKiBBU1VTdGVrIG9mdGVuIHN1cHBsaWVzIHVzIHdpdGggYnJva2VuIEVDRFQsIHZhbGlkYXRlIGl0ICovCitzdGF0aWMgaW50IGVjX3ZhbGlkYXRlX2VjZHQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCUVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQgPSAxOworCXJldHVybiAwOworfQorCisvKiBNU0kgRUMgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQsIGVuYWJsZSBpdCAqLworc3RhdGljIGludCBlY19mbGFnX21zaShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJRUNfRkxBR1NfTVNJID0gMTsKKwlFQ19GTEFHU19WQUxJREFURV9FQ0RUID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgZWNfZG1pX3RhYmxlW10gPSB7CisJeworCWVjX3NraXBfZHNkdF9zY2FuLCAiQ29tcGFsIEpGTDkyIiwgeworCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJDT01QQUwiKSwKKwlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJKRkw5MiIpIH0sIE5VTEx9LAorCXsKKwllY19mbGFnX21zaSwgIk1TSSBoYXJkd2FyZSIsIHsKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiTWljcm8tU3RhciIpLAorCURNSV9NQVRDSChETUlfQ0hBU1NJU19WRU5ET1IsICJNSUNSTy1TdGFyIikgfSwgTlVMTH0sCisJeworCWVjX3ZhbGlkYXRlX2VjZHQsICJBU1VTIGhhcmR3YXJlIiwgeworCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJBU1VTIikgfSwgTlVMTH0sCisJe30sCit9OworCisKIGludCBfX2luaXQgYWNwaV9lY19lY2R0X3Byb2JlKHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtOTExLDExICs5NDksNyBAQAogCS8qCiAJICogR2VuZXJhdGUgYSBib290IGVjIGNvbnRleHQKIAkgKi8KLQlpZiAoZG1pX25hbWVfaW5fdmVuZG9ycygiTWljcm8tU3RhciIpIHx8Ci0JICAgIGRtaV9uYW1lX2luX3ZlbmRvcnMoIk5vdGVib29rIikpIHsKLQkJcHJfaW5mbyhQUkVGSVggIkVuYWJsaW5nIHNwZWNpYWwgdHJlYXRtZW50IGZvciBFQyBmcm9tIE1TSS5cbiIpOwotCQlFQ19GTEFHU19NU0kgPSAxOwotCX0KKwlkbWlfY2hlY2tfc3lzdGVtKGVjX2RtaV90YWJsZSk7CiAJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfRUNEVCwgMSwKIAkJCQkoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZlY2R0X3B0cik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CkBAIC05MjYsNyArOTYwLDcgQEAKIAkJYm9vdF9lYy0+aGFuZGxlID0gQUNQSV9ST09UX09CSkVDVDsKIAkJYWNwaV9nZXRfaGFuZGxlKEFDUElfUk9PVF9PQkpFQ1QsIGVjZHRfcHRyLT5pZCwgJmJvb3RfZWMtPmhhbmRsZSk7CiAJCS8qIERvbid0IHRydXN0IEVDRFQsIHdoaWNoIGNvbWVzIGZyb20gQVNVU1RlayAqLwotCQlpZiAoIWRtaV9uYW1lX2luX3ZlbmRvcnMoIkFTVVMiKSAmJiBFQ19GTEFHU19NU0kgPT0gMCkKKwkJaWYgKCFFQ19GTEFHU19WQUxJREFURV9FQ0RUKQogCQkJZ290byBpbnN0YWxsOwogCQlzYXZlZF9lYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2VjKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2F2ZWRfZWMpCkBAIC05MzQsNiArOTY4LDEwIEBACiAJCW1lbWNweShzYXZlZF9lYywgYm9vdF9lYywgc2l6ZW9mKHN0cnVjdCBhY3BpX2VjKSk7CiAJLyogZmFsbCB0aHJvdWdoICovCiAJfQorCisJaWYgKEVDX0ZMQUdTX1NLSVBfRFNEVF9TQ0FOKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIFRoaXMgd29ya2Fyb3VuZCBpcyBuZWVkZWQgb25seSBvbiBzb21lIGJyb2tlbiBtYWNoaW5lcywKIAkgKiB3aGljaCByZXF1aXJlIGVhcmx5IEVDLCBidXQgZmFpbCB0byBwcm92aWRlIEVDRFQgKi8KIAlwcmludGsoS0VSTl9ERUJVRyBQUkVGSVggIkxvb2sgdXAgRUMgaW4gRFNEVFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggNTYzM2I4Ni4uN2MxYzU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtMTE2MSw3ICsxMTYxLDEzIEBACiAJCQkgICAgICAgcmVzX2xpc3RfZWxlbS0+bmFtZSwKIAkJCSAgICAgICAobG9uZyBsb25nKSByZXNfbGlzdF9lbGVtLT5zdGFydCwKIAkJCSAgICAgICAobG9uZyBsb25nKSByZXNfbGlzdF9lbGVtLT5lbmQpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiQUNQSTogRGV2aWNlIG5lZWRzIGFuIEFDUEkgZHJpdmVyXG4iKTsKKwkJCWlmIChhY3BpX2VuZm9yY2VfcmVzb3VyY2VzID09IEVORk9SQ0VfUkVTT1VSQ0VTX0xBWCkKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFDUEk6IFRoaXMgY29uZmxpY3QgbWF5IgorCQkJCSAgICAgICAiIGNhdXNlIHJhbmRvbSBwcm9ibGVtcyBhbmQgc3lzdGVtIgorCQkJCSAgICAgICAiIGluc3RhYmlsaXR5XG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIkFDUEk6IElmIGFuIEFDUEkgZHJpdmVyIGlzIGF2YWlsYWJsZSIKKwkJCSAgICAgICAiIGZvciB0aGlzIGRldmljZSwgeW91IHNob3VsZCB1c2UgaXQgaW5zdGVhZCBvZiIKKwkJCSAgICAgICAiIHRoZSBuYXRpdmUgZHJpdmVyXG4iKTsKIAkJfQogCQlpZiAoYWNwaV9lbmZvcmNlX3Jlc291cmNlcyA9PSBFTkZPUkNFX1JFU09VUkNFU19TVFJJQ1QpCiAJCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCAzMTEyMjIxLi4xYWY4MDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtMzg5LDYgKzM4OSwxNyBAQAogCiAJCXBidXMgPSBwZGV2LT5zdWJvcmRpbmF0ZTsKIAkJcGNpX2Rldl9wdXQocGRldik7CisKKwkJLyoKKwkJICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZvciBhIG5vbi1QQ0kgZGV2aWNlIHRoYXQgaGFzIGEKKwkJICogUENJIHBhcmVudCAoZWcuIGEgZGlzayB1bmRlciBhIFBDSSBTQVRBIGNvbnRyb2xsZXIpLiAgSW4gdGhhdAorCQkgKiBjYXNlIHBkZXYtPnN1Ym9yZGluYXRlIHdpbGwgYmUgTlVMTCBmb3IgdGhlIHBhcmVudC4KKwkJICovCisJCWlmICghcGJ1cykgeworCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiTm90IGEgUENJLXRvLVBDSSBicmlkZ2VcbiIpOworCQkJcGRldiA9IE5VTEw7CisJCQlicmVhazsKKwkJfQogCX0KIG91dDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgdG1wLCAmZGV2aWNlX2xpc3QsIG5vZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYyBiL2RyaXZlcnMvYWNwaS9wb3dlcl9tZXRlci5jCmluZGV4IGU2YmZkNzcuLjJlZjcwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wb3dlcl9tZXRlci5jCisrKyBiL2RyaXZlcnMvYWNwaS9wb3dlcl9tZXRlci5jCkBAIC0yOTQsNyArMjk0LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiBkYXRhOworCS8qIF9QVFAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb3RoZXJ3aXNlICovCisJaWYgKGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF90cmlwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvYy5jIGIvZHJpdmVycy9hY3BpL3Byb2MuYwppbmRleCBkMGQ1NTBkLi5kMGQyNWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jLmMKQEAgLTM5MywxMSArMzkzLDEzIEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CiAJY2hhciBzdHJidWZbNV07CiAJY2hhciBzdHJbNV0gPSAiIjsKLQlpbnQgbGVuID0gY291bnQ7CisJdW5zaWduZWQgaW50IGxlbiA9IGNvdW50OwogCXN0cnVjdCBhY3BpX2RldmljZSAqZm91bmRfZGV2ID0gTlVMTDsKIAogCWlmIChsZW4gPiA0KQogCQlsZW4gPSA0OworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHJidWYsIGJ1ZmZlciwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IGMyZDRkNmUuLmVjNzQyYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC03NzAsNyArNzcwLDcgQEAKIAkgICAgLm5vdGlmaWVyX2NhbGwgPSBhY3BpX2NwdV9zb2Z0X25vdGlmeSwKIH07CiAKLXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2NwdWluaXQgYWNwaV9wcm9jZXNzb3JfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBOVUxMOwogCWludCByZXN1bHQgPSAwOwpAQCAtODYzLDEzICs4NjMsNiBAQAogCQlnb3RvIGVycl9yZW1vdmVfc3lzZnM7CiAJfQogCi0JaWYgKHByLT5mbGFncy50aHJvdHRsaW5nKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlcyBbJXNdIChzdXBwb3J0cyIsCi0JCSAgICAgICBhY3BpX2RldmljZV9uYW1lKGRldmljZSksIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpKTsKLQkJcHJpbnRrKCIgJWQgdGhyb3R0bGluZyBzdGF0ZXMiLCBwci0+dGhyb3R0bGluZy5zdGF0ZV9jb3VudCk7Ci0JCXByaW50aygiKVxuIik7Ci0JfQotCiAJcmV0dXJuIDA7CiAKIGVycl9yZW1vdmVfc3lzZnM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCmluZGV4IGNjNjFhNjIuLmJiZDA2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCkBAIC0xMTY2LDcgKzExNjYsNiBAQAogI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPSBOVUxMOwogI2VuZGlmCi0JdW5zaWduZWQgaW50IGk7CiAKIAlpZiAoYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZSkKIAkJcmV0dXJuIDA7CkBAIC0xMjE0LDEzICsxMjEzLDYgQEAKIAkJYWNwaV9wcm9jZXNzb3Jfc2V0dXBfY3B1aWRsZShwcik7CiAJCWlmIChjcHVpZGxlX3JlZ2lzdGVyX2RldmljZSgmcHItPnBvd2VyLmRldikpCiAJCQlyZXR1cm4gLUVJTzsKLQotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiQ1BVJWQgKHBvd2VyIHN0YXRlczoiLCBwci0+aWQpOwotCQlmb3IgKGkgPSAxOyBpIDw9IHByLT5wb3dlci5jb3VudDsgaSsrKQotCQkJaWYgKHByLT5wb3dlci5zdGF0ZXNbaV0udmFsaWQpCi0JCQkJcHJpbnRrKCIgQyVkW0MlZF0iLCBpLAotCQkJCSAgICAgICBwci0+cG93ZXIuc3RhdGVzW2ldLnR5cGUpOwotCQlwcmludGsoIilcbiIpOwogCX0KICNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAkvKiAncG93ZXInIFtSXSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwppbmRleCA0YzZjMTRjLi4xYzVkN2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwpAQCAtMTEzMywxNSArMTEzMywxNSBAQAogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl90aHJvdHRsaW5nICpwdGhyb3R0bGluZzsKIAorCWlmICghcHIpCisJCXJldHVybiAtRUlOVkFMOworCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJICAicGJsa19hZGRyZXNzWzB4JTA4eF0gZHV0eV9vZmZzZXRbJWRdIGR1dHlfd2lkdGhbJWRdXG4iLAogCQkJICBwci0+dGhyb3R0bGluZy5hZGRyZXNzLAogCQkJICBwci0+dGhyb3R0bGluZy5kdXR5X29mZnNldCwKIAkJCSAgcHItPnRocm90dGxpbmcuZHV0eV93aWR0aCkpOwogCi0JaWYgKCFwcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKgogCSAqIEV2YWx1YXRlIF9QVEMsIF9UU1MgYW5kIF9UUEMKIAkgKiBUaGV5IG11c3QgYWxsIGJlIHByZXNlbnQgb3Igbm9uZSBvZiB0aGVtIGNhbiBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggNDA4ZWJkZS4uMTRhNzQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC0yMiw2ICsyMiw4IEBACiAjZGVmaW5lIEFDUElfQlVTX0hJRAkJCSJMTlhTWUJVUyIKICNkZWZpbmUgQUNQSV9CVVNfREVWSUNFX05BTUUJCSJTeXN0ZW0gQnVzIgogCisjZGVmaW5lIEFDUElfSVNfUk9PVF9ERVZJQ0UoZGV2aWNlKSAgICAoIShkZXZpY2UpLT5wYXJlbnQpCisKIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV9kZXZpY2VfbGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKGFjcGlfYnVzX2lkX2xpc3QpOwogREVGSU5FX01VVEVYKGFjcGlfZGV2aWNlX2xvY2spOwpAQCAtNDMsNDAgKzQ1LDE5IEBACiB7CiAJaW50IGxlbjsKIAlpbnQgY291bnQ7Ci0KLQlpZiAoIWFjcGlfZGV2LT5mbGFncy5oYXJkd2FyZV9pZCAmJiAhYWNwaV9kZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQ7CiAKIAlsZW4gPSBzbnByaW50Zihtb2RhbGlhcywgc2l6ZSwgImFjcGk6Iik7CiAJc2l6ZSAtPSBsZW47CiAKLQlpZiAoYWNwaV9kZXYtPmZsYWdzLmhhcmR3YXJlX2lkKSB7Ci0JCWNvdW50ID0gc25wcmludGYoJm1vZGFsaWFzW2xlbl0sIHNpemUsICIlczoiLAotCQkJCSBhY3BpX2Rldi0+cG5wLmhhcmR3YXJlX2lkKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlkLCAmYWNwaV9kZXYtPnBucC5pZHMsIGxpc3QpIHsKKwkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsIGlkLT5pZCk7CiAJCWlmIChjb3VudCA8IDAgfHwgY291bnQgPj0gc2l6ZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlsZW4gKz0gY291bnQ7CiAJCXNpemUgLT0gY291bnQ7CiAJfQogCi0JaWYgKGFjcGlfZGV2LT5mbGFncy5jb21wYXRpYmxlX2lkcykgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdDsKLQkJaW50IGk7Ci0KLQkJY2lkX2xpc3QgPSBhY3BpX2Rldi0+cG5wLmNpZF9saXN0OwotCQlmb3IgKGkgPSAwOyBpIDwgY2lkX2xpc3QtPmNvdW50OyBpKyspIHsKLQkJCWNvdW50ID0gc25wcmludGYoJm1vZGFsaWFzW2xlbl0sIHNpemUsICIlczoiLAotCQkJCQkgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpOwotCQkJaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+PSBzaXplKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiJXMgY2lkWyVpXSBleGNlZWRzIGV2ZW50IGJ1ZmZlciBzaXplIiwKLQkJCQkgICAgICAgYWNwaV9kZXYtPnBucC5kZXZpY2VfbmFtZSwgaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlsZW4gKz0gY291bnQ7Ci0JCQlzaXplIC09IGNvdW50OwotCQl9Ci0JfQotCiAJbW9kYWxpYXNbbGVuXSA9ICdcMCc7CiAJcmV0dXJuIGxlbjsKIH0KQEAgLTE4Myw3ICsxNjQsNyBAQAogYWNwaV9kZXZpY2VfaGlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYWNwaV9kZXYtPnBucC5oYXJkd2FyZV9pZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGFjcGlfZGV2aWNlX2hpZChhY3BpX2RldikpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGhpZCwgMDQ0NCwgYWNwaV9kZXZpY2VfaGlkX3Nob3csIE5VTEwpOwogCkBAIC0yMTksMTcgKzIwMCwxMyBAQAogCQkJZ290byBlbmQ7CiAJfQogCi0JaWYgKGRldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpIHsKLQkJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2hpZCk7Ci0JCWlmIChyZXN1bHQpCi0JCQlnb3RvIGVuZDsKLQl9CisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2hpZCk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBlbmQ7CiAKLQlpZiAoZGV2LT5mbGFncy5oYXJkd2FyZV9pZCB8fCBkZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RhbGlhcyk7Ci0JCWlmIChyZXN1bHQpCi0JCQlnb3RvIGVuZDsKLQl9CisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX21vZGFsaWFzKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGVuZDsKIAogICAgICAgICAvKgogICAgICAgICAgKiBJZiBkZXZpY2UgaGFzIF9FSjAsICdlamVjdCcgZmlsZSBpcyBjcmVhdGVkIHRoYXQgaXMgdXNlZCB0byB0cmlnZ2VyCkBAIC0yNTUsMTEgKzIzMiw4IEBACiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfZWplY3QpOwogCi0JaWYgKGRldi0+ZmxhZ3MuaGFyZHdhcmVfaWQgfHwgZGV2LT5mbGFncy5jb21wYXRpYmxlX2lkcykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX21vZGFsaWFzKTsKLQotCWlmIChkZXYtPmZsYWdzLmhhcmR3YXJlX2lkKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaGlkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9oaWQpOwogCWlmIChkZXYtPmhhbmRsZSkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX3BhdGgpOwogfQpAQCAtMjcxLDYgKzI0NSw3IEBACiAJCQkgIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCAqaWRzKQogewogCWNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCAqaWQ7CisJc3RydWN0IGFjcGlfaGFyZHdhcmVfaWQgKmh3aWQ7CiAKIAkvKgogCSAqIElmIHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGxvYWQgZGV2aWNlCkBAIC0yNzksNDAgKzI1NCwzMCBAQAogCWlmICghZGV2aWNlLT5zdGF0dXMucHJlc2VudCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCkgewotCQlmb3IgKGlkID0gaWRzOyBpZC0+aWRbMF07IGlkKyspIHsKLQkJCWlmICghc3RyY21wKChjaGFyKilpZC0+aWQsIGRldmljZS0+cG5wLmhhcmR3YXJlX2lkKSkKKwlmb3IgKGlkID0gaWRzOyBpZC0+aWRbMF07IGlkKyspCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaHdpZCwgJmRldmljZS0+cG5wLmlkcywgbGlzdCkKKwkJCWlmICghc3RyY21wKChjaGFyICopIGlkLT5pZCwgaHdpZC0+aWQpKQogCQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JaWYgKGRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3QgPSBkZXZpY2UtPnBucC5jaWRfbGlzdDsKLQkJaW50IGk7Ci0KLQkJZm9yIChpZCA9IGlkczsgaWQtPmlkWzBdOyBpZCsrKSB7Ci0JCQkvKiBjb21wYXJlIG11bHRpcGxlIF9DSUQgZW50cmllcyBhZ2FpbnN0IGRyaXZlciBpZHMgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewotCQkJCWlmICghc3RyY21wKChjaGFyKilpZC0+aWQsCi0JCQkJCSAgICBjaWRfbGlzdC0+aWRzW2ldLnN0cmluZykpCi0JCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JfQogCiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfbWF0Y2hfZGV2aWNlX2lkcyk7CiAKK3N0YXRpYyB2b2lkIGFjcGlfZnJlZV9pZHMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGFjcGlfaGFyZHdhcmVfaWQgKmlkLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlkLCB0bXAsICZkZXZpY2UtPnBucC5pZHMsIGxpc3QpIHsKKwkJa2ZyZWUoaWQtPmlkKTsKKwkJa2ZyZWUoaWQpOworCX0KK30KKwogc3RhdGljIHZvaWQgYWNwaV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CiAKLQlrZnJlZShhY3BpX2Rldi0+cG5wLmNpZF9saXN0KTsKLQlpZiAoYWNwaV9kZXYtPmZsYWdzLmhhcmR3YXJlX2lkKQotCQlrZnJlZShhY3BpX2Rldi0+cG5wLmhhcmR3YXJlX2lkKTsKLQlpZiAoYWNwaV9kZXYtPmZsYWdzLnVuaXF1ZV9pZCkKLQkJa2ZyZWUoYWNwaV9kZXYtPnBucC51bmlxdWVfaWQpOworCWFjcGlfZnJlZV9pZHMoYWNwaV9kZXYpOwogCWtmcmVlKGFjcGlfZGV2KTsKIH0KIApAQCAtMzc4LDE1ICszNDMsMTMgQEAKIHN0YXRpYyBpbnQgYWNwaV9kZXZpY2VfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JY2hhciAqaGlkOwogCi0JaGlkID0gYWNwaV9kZXZpY2VfaGlkKGRldmljZSk7Ci0JaWYgKCFzdHJjbXAoaGlkLCBBQ1BJX0JVVFRPTl9ISURfUE9XRVJGKSkKKwlpZiAoZGV2aWNlLT5kZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTikKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUE9XRVJfQlVUVE9OLAogCQkJCQkJICAgICBhY3BpX2RldmljZV9ub3RpZnlfZml4ZWQsCiAJCQkJCQkgICAgIGRldmljZSk7Ci0JZWxzZSBpZiAoIXN0cmNtcChoaWQsIEFDUElfQlVUVE9OX0hJRF9TTEVFUEYpKQorCWVsc2UgaWYgKGRldmljZS0+ZGV2aWNlX3R5cGUgPT0gQUNQSV9CVVNfVFlQRV9TTEVFUF9CVVRUT04pCiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1NMRUVQX0JVVFRPTiwKIAkJCQkJCSAgICAgYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkLApAQCAtNDA0LDEwICszNjcsMTAgQEAKIAogc3RhdGljIHZvaWQgYWNwaV9kZXZpY2VfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCWlmICghc3RyY21wKGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpLCBBQ1BJX0JVVFRPTl9ISURfUE9XRVJGKSkKKwlpZiAoZGV2aWNlLT5kZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTikKIAkJYWNwaV9yZW1vdmVfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1BPV0VSX0JVVFRPTiwKIAkJCQkJCWFjcGlfZGV2aWNlX25vdGlmeV9maXhlZCk7Ci0JZWxzZSBpZiAoIXN0cmNtcChhY3BpX2RldmljZV9oaWQoZGV2aWNlKSwgQUNQSV9CVVRUT05fSElEX1NMRUVQRikpCisJZWxzZSBpZiAoZGV2aWNlLT5kZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTikKIAkJYWNwaV9yZW1vdmVfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1NMRUVQX0JVVFRPTiwKIAkJCQkJCWFjcGlfZGV2aWNlX25vdGlmeV9maXhlZCk7CiAJZWxzZQpAQCAtNDc0LDEyICs0MzcsMTIgQEAKIAkudWV2ZW50CQk9IGFjcGlfZGV2aWNlX3VldmVudCwKIH07CiAKLXN0YXRpYyBpbnQgYWNwaV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCi0JCQkJIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50KQorc3RhdGljIGludCBhY3BpX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBhY3BpX2RldmljZV9idXNfaWQgKmFjcGlfZGV2aWNlX2J1c19pZCwgKm5ld19idXNfaWQ7CiAJaW50IGZvdW5kID0gMDsKKwogCS8qCiAJICogTGlua2FnZQogCSAqIC0tLS0tLS0KQEAgLTUwMSw4ICs0NjQsOSBAQAogCSAqIElmIGZhaWxlZCwgY3JlYXRlIG9uZSBhbmQgbGluayBpdCBpbnRvIGFjcGlfYnVzX2lkX2xpc3QKIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFjcGlfZGV2aWNlX2J1c19pZCwgJmFjcGlfYnVzX2lkX2xpc3QsIG5vZGUpIHsKLQkJaWYoIXN0cmNtcChhY3BpX2RldmljZV9idXNfaWQtPmJ1c19pZCwgZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZD8gZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgOiAiZGV2aWNlIikpIHsKLQkJCWFjcGlfZGV2aWNlX2J1c19pZC0+aW5zdGFuY2Vfbm8gKys7CisJCWlmICghc3RyY21wKGFjcGlfZGV2aWNlX2J1c19pZC0+YnVzX2lkLAorCQkJICAgIGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpKSkgeworCQkJYWNwaV9kZXZpY2VfYnVzX2lkLT5pbnN0YW5jZV9ubysrOwogCQkJZm91bmQgPSAxOwogCQkJa2ZyZWUobmV3X2J1c19pZCk7CiAJCQlicmVhazsKQEAgLTUxMCw3ICs0NzQsNyBAQAogCX0KIAlpZiAoIWZvdW5kKSB7CiAJCWFjcGlfZGV2aWNlX2J1c19pZCA9IG5ld19idXNfaWQ7Ci0JCXN0cmNweShhY3BpX2RldmljZV9idXNfaWQtPmJ1c19pZCwgZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCA/IGRldmljZS0+cG5wLmhhcmR3YXJlX2lkIDogImRldmljZSIpOworCQlzdHJjcHkoYWNwaV9kZXZpY2VfYnVzX2lkLT5idXNfaWQsIGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpKTsKIAkJYWNwaV9kZXZpY2VfYnVzX2lkLT5pbnN0YW5jZV9ubyA9IDA7CiAJCWxpc3RfYWRkX3RhaWwoJmFjcGlfZGV2aWNlX2J1c19pZC0+bm9kZSwgJmFjcGlfYnVzX2lkX2xpc3QpOwogCX0KQEAgLTUyNCw3ICs0ODgsNyBAQAogCW11dGV4X3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAKIAlpZiAoZGV2aWNlLT5wYXJlbnQpCi0JCWRldmljZS0+ZGV2LnBhcmVudCA9ICZwYXJlbnQtPmRldjsKKwkJZGV2aWNlLT5kZXYucGFyZW50ID0gJmRldmljZS0+cGFyZW50LT5kZXY7CiAJZGV2aWNlLT5kZXYuYnVzID0gJmFjcGlfYnVzX3R5cGU7CiAJZGV2aWNlLT5kZXYucmVsZWFzZSA9ICZhY3BpX2RldmljZV9yZWxlYXNlOwogCXJlc3VsdCA9IGRldmljZV9yZWdpc3RlcigmZGV2aWNlLT5kZXYpOwpAQCAtNjY0LDYgKzYyOCwzMyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSBFbnVtZXJhdGlvbgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfYnVzX2dldF9wYXJlbnQoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlpbnQgcmV0OworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOworCisJLyoKKwkgKiBGaXhlZCBoYXJkd2FyZSBkZXZpY2VzIGRvIG5vdCBhcHBlYXIgaW4gdGhlIG5hbWVzcGFjZSBhbmQgZG8gbm90CisJICogaGF2ZSBoYW5kbGVzLCBidXQgd2UgZmFicmljYXRlIGFjcGlfZGV2aWNlcyBmb3IgdGhlbSwgc28gd2UgaGF2ZQorCSAqIHRvIGRlYWwgd2l0aCB0aGVtIHNwZWNpYWxseS4KKwkgKi8KKwlpZiAoaGFuZGxlID09IE5VTEwpCisJCXJldHVybiBhY3BpX3Jvb3Q7CisKKwlkbyB7CisJCXN0YXR1cyA9IGFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZoYW5kbGUpOworCQlpZiAoc3RhdHVzID09IEFFX05VTExfRU5UUlkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJcmV0dXJuIGFjcGlfcm9vdDsKKworCQlyZXQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSk7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldHVybiBkZXZpY2U7CisJfSB3aGlsZSAoMSk7Cit9CisKIGFjcGlfc3RhdHVzCiBhY3BpX2J1c19nZXRfZWpkKGFjcGlfaGFuZGxlIGhhbmRsZSwgYWNwaV9oYW5kbGUgKmVqZCkKIHsKQEAgLTg3NiwxMSArODY3LDYgQEAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCWRldmljZS0+ZmxhZ3MuZHluYW1pY19zdGF0dXMgPSAxOwogCi0JLyogUHJlc2VuY2Ugb2YgX0NJRCBpbmRpY2F0ZXMgJ2NvbXBhdGlibGVfaWRzJyAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9DSUQiLCAmdGVtcCk7Ci0JaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQlkZXZpY2UtPmZsYWdzLmNvbXBhdGlibGVfaWRzID0gMTsKLQogCS8qIFByZXNlbmNlIG9mIF9STVYgaW5kaWNhdGVzICdyZW1vdmFibGUnICovCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX1JNViIsICZ0ZW1wKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCkBAIC05MTgsOCArOTA0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYWNwaV9kZXZpY2VfZ2V0X2J1c2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLAotCQkJCSAgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSkKK3N0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX2dldF9idXNpZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAljaGFyIGJ1c19pZFs1XSA9IHsgJz8nLCAwIH07CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgc2l6ZW9mKGJ1c19pZCksIGJ1c19pZCB9OwpAQCAtOTMxLDEwICs5MTYsMTIgQEAKIAkgKiBUaGUgZGV2aWNlJ3MgQnVzIElEIGlzIHNpbXBseSB0aGUgb2JqZWN0IG5hbWUuCiAJICogVEJEOiBTaG91bGRuJ3QgdGhpcyB2YWx1ZSBiZSB1bmlxdWUgKHdpdGhpbiB0aGUgQUNQSSBuYW1lc3BhY2UpPwogCSAqLwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNQSV9CVVNfVFlQRV9TWVNURU06CisJaWYgKEFDUElfSVNfUk9PVF9ERVZJQ0UoZGV2aWNlKSkgewogCQlzdHJjcHkoZGV2aWNlLT5wbnAuYnVzX2lkLCAiQUNQSSIpOwotCQlicmVhazsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZGV2aWNlLT5kZXZpY2VfdHlwZSkgewogCWNhc2UgQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT046CiAJCXN0cmNweShkZXZpY2UtPnBucC5idXNfaWQsICJQV1JGIik7CiAJCWJyZWFrOwpAQCAtOTQyLDcgKzkyOSw3IEBACiAJCXN0cmNweShkZXZpY2UtPnBucC5idXNfaWQsICJTTFBGIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX1NJTkdMRV9OQU1FLCAmYnVmZmVyKTsKKwkJYWNwaV9nZXRfbmFtZShkZXZpY2UtPmhhbmRsZSwgQUNQSV9TSU5HTEVfTkFNRSwgJmJ1ZmZlcik7CiAJCS8qIENsZWFuIHVwIHRyYWlsaW5nIHVuZGVyc2NvcmVzIChpZiBhbnkpICovCiAJCWZvciAoaSA9IDM7IGkgPiAxOyBpLS0pIHsKIAkJCWlmIChidXNfaWRbaV0gPT0gJ18nKQpAQCAtMTAwMCwyMDQgKzk4NywxMzQgQEAKIAlyZXR1cm4gYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RDSyIsICZ0bXApOwogfQogCi1zdGF0aWMgc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCoKLWFjcGlfYWRkX2NpZCgKLQlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAgICAgICAgICppbmZvLAotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICAgICAgICAgKm5ld19jaWQpCitjaGFyICphY3BpX2RldmljZV9oaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAgICAqY2lkOwotCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5leHRfaWRfc3RyaW5nOwotCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgY2lkX2xlbmd0aDsKLQlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIG5ld19jaWRfbGVuZ3RoOwotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaGlkOwogCisJaGlkID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2aWNlLT5wbnAuaWRzLCBzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCwgbGlzdCk7CisJcmV0dXJuIGhpZC0+aWQ7Cit9CitFWFBPUlRfU1lNQk9MKGFjcGlfZGV2aWNlX2hpZCk7CiAKLQkvKiBBbGxvY2F0ZSBuZXcgQ0lEIGxpc3Qgd2l0aCByb29tIGZvciB0aGUgbmV3IENJRCAqLworc3RhdGljIHZvaWQgYWNwaV9hZGRfaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQ7CiAKLQlpZiAoIW5ld19jaWQpCi0JCW5ld19jaWRfbGVuZ3RoID0gaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmxpc3Rfc2l6ZTsKLQllbHNlIGlmIChpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QubGlzdF9zaXplKQotCQluZXdfY2lkX2xlbmd0aCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5saXN0X3NpemUgKwotCQkJbmV3X2NpZC0+bGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkKTsKLQllbHNlCi0JCW5ld19jaWRfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QpICsgbmV3X2NpZC0+bGVuZ3RoOworCWlkID0ga21hbGxvYyhzaXplb2YoKmlkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZCkKKwkJcmV0dXJuOwogCi0JY2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQobmV3X2NpZF9sZW5ndGgpOwotCWlmICghY2lkKSB7Ci0JCXJldHVybiBOVUxMOworCWlkLT5pZCA9IGttYWxsb2Moc3RybGVuKGRldl9pZCkgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkLT5pZCkgeworCQlrZnJlZShpZCk7CisJCXJldHVybjsKIAl9CiAKLQljaWQtPmxpc3Rfc2l6ZSA9IG5ld19jaWRfbGVuZ3RoOwotCWNpZC0+Y291bnQgPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuY291bnQ7Ci0JaWYgKG5ld19jaWQpCi0JCWNpZC0+Y291bnQrKzsKLQluZXh0X2lkX3N0cmluZyA9IChjaGFyICopIGNpZC0+aWRzICsgKGNpZC0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpKTsKLQotCS8qIENvcHkgYWxsIGV4aXN0aW5nIENJRHMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuY291bnQ7IGkrKykgewotCQljaWRfbGVuZ3RoID0gaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmlkc1tpXS5sZW5ndGg7Ci0JCWNpZC0+aWRzW2ldLnN0cmluZyA9IG5leHRfaWRfc3RyaW5nOwotCQljaWQtPmlkc1tpXS5sZW5ndGggPSBjaWRfbGVuZ3RoOwotCi0JCUFDUElfTUVNQ1BZKG5leHRfaWRfc3RyaW5nLCBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuaWRzW2ldLnN0cmluZywKLQkJCWNpZF9sZW5ndGgpOwotCi0JCW5leHRfaWRfc3RyaW5nICs9IGNpZF9sZW5ndGg7Ci0JfQotCi0JLyogQXBwZW5kIHRoZSBuZXcgQ0lEICovCi0KLQlpZiAobmV3X2NpZCkgewotCQljaWQtPmlkc1tpXS5zdHJpbmcgPSBuZXh0X2lkX3N0cmluZzsKLQkJY2lkLT5pZHNbaV0ubGVuZ3RoID0gbmV3X2NpZC0+bGVuZ3RoOwotCi0JCUFDUElfTUVNQ1BZKG5leHRfaWRfc3RyaW5nLCBuZXdfY2lkLT5zdHJpbmcsIG5ld19jaWQtPmxlbmd0aCk7Ci0JfQotCi0JcmV0dXJuIGNpZDsKKwlzdHJjcHkoaWQtPmlkLCBkZXZfaWQpOworCWxpc3RfYWRkX3RhaWwoJmlkLT5saXN0LCAmZGV2aWNlLT5wbnAuaWRzKTsKIH0KIAotc3RhdGljIHZvaWQgYWNwaV9kZXZpY2Vfc2V0X2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLAotCQkJICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsCi0JCQkgICAgICAgaW50IHR5cGUpCitzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9zZXRfaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm8gPSBOVUxMOwotCWNoYXIgKmhpZCA9IE5VTEw7Ci0JY2hhciAqdWlkID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IE5VTEw7Ci0JY2hhciAqY2lkX2FkZCA9IE5VTEw7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OworCWludCBpOwogCi0Jc3dpdGNoICh0eXBlKSB7CisJc3dpdGNoIChkZXZpY2UtPmRldmljZV90eXBlKSB7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX0RFVklDRToKLQkJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmaW5mbyk7CisJCWlmIChBQ1BJX0lTX1JPT1RfREVWSUNFKGRldmljZSkpIHsKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9TWVNURU1fSElEKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKEFDUElfSVNfUk9PVF9ERVZJQ0UoZGV2aWNlLT5wYXJlbnQpKSB7CisJCQkvKiBcX1NCXywgdGhlIG9ubHkgcm9vdC1sZXZlbCBuYW1lc3BhY2UgZGV2aWNlICovCisJCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfQlVTX0hJRCk7CisJCQlzdHJjcHkoZGV2aWNlLT5wbnAuZGV2aWNlX25hbWUsIEFDUElfQlVTX0RFVklDRV9OQU1FKTsKKwkJCXN0cmNweShkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsIEFDUElfQlVTX0NMQVNTKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oZGV2aWNlLT5oYW5kbGUsICZpbmZvKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICIlczogRXJyb3IgcmVhZGluZyBkZXZpY2UgaW5mb1xuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpCi0JCQloaWQgPSBpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmc7Ci0JCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfVUlEKQotCQkJdWlkID0gaW5mby0+dW5pcXVlX2lkLnN0cmluZzsKLQkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9DSUQpCisJCQlhY3BpX2FkZF9pZChkZXZpY2UsIGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZyk7CisJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQ0lEKSB7CiAJCQljaWRfbGlzdCA9ICZpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3Q7CisJCQlmb3IgKGkgPSAwOyBpIDwgY2lkX2xpc3QtPmNvdW50OyBpKyspCisJCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBjaWRfbGlzdC0+aWRzW2ldLnN0cmluZyk7CisJCX0KIAkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9BRFIpIHsKIAkJCWRldmljZS0+cG5wLmJ1c19hZGRyZXNzID0gaW5mby0+YWRkcmVzczsKIAkJCWRldmljZS0+ZmxhZ3MuYnVzX2FkZHJlc3MgPSAxOwogCQl9CiAKLQkJLyogSWYgd2UgaGF2ZSBhIHZpZGVvL2JheS9kb2NrIGRldmljZSwgYWRkIG91ciBzZWxmZGVmaW5lZAotCQkgICBISUQgdG8gdGhlIENJRCBsaXN0LiBMaWtlIHRoYXQgdGhlIHZpZGVvL2JheS9kb2NrIGRyaXZlcnMKLQkJICAgd2lsbCBnZXQgYXV0b2xvYWRlZCBhbmQgdGhlIGRldmljZSBtaWdodCBzdGlsbCBtYXRjaAotCQkgICBhZ2FpbnN0IGFub3RoZXIgZHJpdmVyLgotCQkqLworCQlrZnJlZShpbmZvKTsKKworCQkvKgorCQkgKiBTb21lIGRldmljZXMgZG9uJ3QgcmVsaWFibHkgaGF2ZSBfSElEcyAmIF9DSURzLCBzbyBhZGQKKwkJICogc3ludGhldGljIEhJRHMgdG8gbWFrZSBzdXJlIGRyaXZlcnMgY2FuIGZpbmQgdGhlbS4KKwkJICovCiAJCWlmIChhY3BpX2lzX3ZpZGVvX2RldmljZShkZXZpY2UpKQotCQkJY2lkX2FkZCA9IEFDUElfVklERU9fSElEOworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1ZJREVPX0hJRCk7CiAJCWVsc2UgaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2JheV9tYXRjaChkZXZpY2UpKSkKLQkJCWNpZF9hZGQgPSBBQ1BJX0JBWV9ISUQ7CisJCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfQkFZX0hJRCk7CiAJCWVsc2UgaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2RvY2tfbWF0Y2goZGV2aWNlKSkpCi0JCQljaWRfYWRkID0gQUNQSV9ET0NLX0hJRDsKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9ET0NLX0hJRCk7CiAKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BPV0VSOgotCQloaWQgPSBBQ1BJX1BPV0VSX0hJRDsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1BPV0VSX0hJRCk7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1I6Ci0JCWhpZCA9IEFDUElfUFJPQ0VTU09SX09CSkVDVF9ISUQ7Ci0JCWJyZWFrOwotCWNhc2UgQUNQSV9CVVNfVFlQRV9TWVNURU06Ci0JCWhpZCA9IEFDUElfU1lTVEVNX0hJRDsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1BST0NFU1NPUl9PQkpFQ1RfSElEKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1RIRVJNQUw6Ci0JCWhpZCA9IEFDUElfVEhFUk1BTF9ISUQ7CisJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9USEVSTUFMX0hJRCk7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT046Ci0JCWhpZCA9IEFDUElfQlVUVE9OX0hJRF9QT1dFUkY7CisJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9CVVRUT05fSElEX1BPV0VSRik7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9CVVNfVFlQRV9TTEVFUF9CVVRUT046Ci0JCWhpZCA9IEFDUElfQlVUVE9OX0hJRF9TTEVFUEY7CisJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9CVVRUT05fSElEX1NMRUVQRik7CiAJCWJyZWFrOwogCX0KIAogCS8qCi0JICogXF9TQgotCSAqIC0tLS0KLQkgKiBGaXggZm9yIHRoZSBzeXN0ZW0gcm9vdCBidXMgZGV2aWNlIC0tIHRoZSBvbmx5IHJvb3QtbGV2ZWwgZGV2aWNlLgorCSAqIFdlIGJ1aWxkIGFjcGlfZGV2aWNlcyBmb3Igc29tZSBvYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBfSElEIG9yIF9DSUQsCisJICogZS5nLiwgUENJIGJyaWRnZXMgYW5kIHNsb3RzLiAgRHJpdmVycyBjYW4ndCBiaW5kIHRvIHRoZXNlIG9iamVjdHMsCisJICogYnV0IHdlIGRvIHVzZSB0aGVtIGluZGlyZWN0bHkgYnkgdHJhdmVyc2luZyB0aGUgYWNwaV9kZXZpY2UgdHJlZS4KKwkgKiBUaGlzIGdlbmVyaWMgSUQgaXNuJ3QgdXNlZnVsIGZvciBkcml2ZXIgYmluZGluZywgYnV0IGl0IHByb3ZpZGVzCisJICogdGhlIHVzZWZ1bCBwcm9wZXJ0eSB0aGF0ICJldmVyeSBhY3BpX2RldmljZSBoYXMgYW4gSUQuIgogCSAqLwotCWlmICgoKGFjcGlfaGFuZGxlKXBhcmVudCA9PSBBQ1BJX1JPT1RfT0JKRUNUKSAmJiAodHlwZSA9PSBBQ1BJX0JVU19UWVBFX0RFVklDRSkpIHsKLQkJaGlkID0gQUNQSV9CVVNfSElEOwotCQlzdHJjcHkoZGV2aWNlLT5wbnAuZGV2aWNlX25hbWUsIEFDUElfQlVTX0RFVklDRV9OQU1FKTsKLQkJc3RyY3B5KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywgQUNQSV9CVVNfQ0xBU1MpOwotCX0KLQotCWlmIChoaWQpIHsKLQkJZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzdHJsZW4gKGhpZCkgKyAxKTsKLQkJaWYgKGRldmljZS0+cG5wLmhhcmR3YXJlX2lkKSB7Ci0JCQlzdHJjcHkoZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQsIGhpZCk7Ci0JCQlkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkID0gMTsKLQkJfQotCX0KLQlpZiAoIWRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQpCi0JCWRldmljZS0+cG5wLmhhcmR3YXJlX2lkID0gIiI7Ci0KLQlpZiAodWlkKSB7Ci0JCWRldmljZS0+cG5wLnVuaXF1ZV9pZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHN0cmxlbiAodWlkKSArIDEpOwotCQlpZiAoZGV2aWNlLT5wbnAudW5pcXVlX2lkKSB7Ci0JCQlzdHJjcHkoZGV2aWNlLT5wbnAudW5pcXVlX2lkLCB1aWQpOwotCQkJZGV2aWNlLT5mbGFncy51bmlxdWVfaWQgPSAxOwotCQl9Ci0JfQotCWlmICghZGV2aWNlLT5mbGFncy51bmlxdWVfaWQpCi0JCWRldmljZS0+cG5wLnVuaXF1ZV9pZCA9ICIiOwotCi0JaWYgKGNpZF9saXN0IHx8IGNpZF9hZGQpIHsKLQkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqbGlzdDsKLQotCQlpZiAoY2lkX2FkZCkgewotCQkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgY2lkOwotCQkJY2lkLmxlbmd0aCA9IHN0cmxlbiAoY2lkX2FkZCkgKyAxOwotCQkJY2lkLnN0cmluZyA9IGNpZF9hZGQ7Ci0KLQkJCWxpc3QgPSBhY3BpX2FkZF9jaWQoaW5mbywgJmNpZCk7Ci0JCX0gZWxzZSB7Ci0JCQlsaXN0ID0gYWNwaV9hZGRfY2lkKGluZm8sIE5VTEwpOwotCQl9Ci0KLQkJaWYgKGxpc3QpIHsKLQkJCWRldmljZS0+cG5wLmNpZF9saXN0ID0gbGlzdDsKLQkJCWlmIChjaWRfYWRkKQotCQkJCWRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMgPSAxOwotCQl9Ci0JfQotCi0Ja2ZyZWUoaW5mbyk7CisJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+cG5wLmlkcykpCisJCWFjcGlfYWRkX2lkKGRldmljZSwgImRldmljZSIpOwogfQogCi1zdGF0aWMgaW50IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKK3N0YXRpYyBpbnQgYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JaW50IHJlc3VsdCA9IDA7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCiAJLyoKIAkgKiBDb250ZXh0CiAJICogLS0tLS0tLQogCSAqIEF0dGFjaCB0aGlzICdzdHJ1Y3QgYWNwaV9kZXZpY2UnIHRvIHRoZSBBQ1BJIG9iamVjdC4gIFRoaXMgbWFrZXMKLQkgKiByZXNvbHV0aW9ucyBmcm9tIGhhbmRsZS0+ZGV2aWNlIHZlcnkgZWZmaWNpZW50LiAgTm90ZSB0aGF0IHdlIG5lZWQKLQkgKiB0byBiZSBjYXJlZnVsIHdpdGggZml4ZWQtZmVhdHVyZSBkZXZpY2VzIGFzIHRoZXkgYWxsIGF0dGFjaCB0byB0aGUKLQkgKiByb290IG9iamVjdC4KKwkgKiByZXNvbHV0aW9ucyBmcm9tIGhhbmRsZS0+ZGV2aWNlIHZlcnkgZWZmaWNpZW50LiAgRml4ZWQgaGFyZHdhcmUKKwkgKiBkZXZpY2VzIGhhdmUgbm8gaGFuZGxlcywgc28gd2Ugc2tpcCB0aGVtLgogCSAqLwotCWlmICh0eXBlICE9IEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OICYmCi0JICAgIHR5cGUgIT0gQUNQSV9CVVNfVFlQRV9TTEVFUF9CVVRUT04pIHsKLQkJc3RhdHVzID0gYWNwaV9hdHRhY2hfZGF0YShkZXZpY2UtPmhhbmRsZSwKLQkJCQkJICBhY3BpX2J1c19kYXRhX2hhbmRsZXIsIGRldmljZSk7CisJaWYgKCFkZXZpY2UtPmhhbmRsZSkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJFcnJvciBhdHRhY2hpbmcgZGV2aWNlIGRhdGFcbiIpOwotCQkJcmVzdWx0ID0gLUVOT0RFVjsKLQkJfQotCX0KLQlyZXR1cm4gcmVzdWx0OworCXN0YXR1cyA9IGFjcGlfYXR0YWNoX2RhdGEoZGV2aWNlLT5oYW5kbGUsCisJCQkJICBhY3BpX2J1c19kYXRhX2hhbmRsZXIsIGRldmljZSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlyZXR1cm4gMDsKKworCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIGF0dGFjaGluZyBkZXZpY2UgZGF0YVxuIik7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9idXNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCBpbnQgcm1kZXZpY2UpCkBAIC0xMjIzLDE3ICsxMTQwLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWFjcGlfYWRkX3NpbmdsZV9vYmplY3Qoc3RydWN0IGFjcGlfZGV2aWNlICoqY2hpbGQsCi0JCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCwgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSwKLQkJCXN0cnVjdCBhY3BpX2J1c19vcHMgKm9wcykKK3N0YXRpYyBpbnQgYWNwaV9hZGRfc2luZ2xlX29iamVjdChzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCwKKwkJCQkgIGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcgc3RhLAorCQkJCSAgc3RydWN0IGFjcGlfYnVzX29wcyAqb3BzKQogewotCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKLQotCi0JaWYgKCFjaGlsZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCiAJZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXZpY2UpIHsKQEAgLTEyNDEsNzUgKzExNTUsMzEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJSU5JVF9MSVNUX0hFQUQoJmRldmljZS0+cG5wLmlkcyk7CisJZGV2aWNlLT5kZXZpY2VfdHlwZSA9IHR5cGU7CiAJZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7Ci0JZGV2aWNlLT5wYXJlbnQgPSBwYXJlbnQ7CisJZGV2aWNlLT5wYXJlbnQgPSBhY3BpX2J1c19nZXRfcGFyZW50KGhhbmRsZSk7CiAJZGV2aWNlLT5idXNfb3BzID0gKm9wczsgLyogd29ya3JvdW5kIGZvciBub3QgY2FsbCAuc3RhcnQgKi8KKwlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9IHN0YTsKIAotCi0JYWNwaV9kZXZpY2VfZ2V0X2J1c2lkKGRldmljZSwgaGFuZGxlLCB0eXBlKTsKKwlhY3BpX2RldmljZV9nZXRfYnVzaWQoZGV2aWNlKTsKIAogCS8qCiAJICogRmxhZ3MKIAkgKiAtLS0tLQotCSAqIEdldCBwcmlvciB0byBjYWxsaW5nIGFjcGlfYnVzX2dldF9zdGF0dXMoKSBzbyB3ZSBrbm93IHdoZXRoZXIKLQkgKiBvciBub3QgX1NUQSBpcyBwcmVzZW50LiAgTm90ZSB0aGF0IHdlIG9ubHkgbG9vayBmb3Igb2JqZWN0Ci0JICogaGFuZGxlcyAtLSBjYW5ub3QgZXZhbHVhdGUgb2JqZWN0cyB1bnRpbCB3ZSBrbm93IHRoZSBkZXZpY2UgaXMKLQkgKiBwcmVzZW50IGFuZCBwcm9wZXJseSBpbml0aWFsaXplZC4KKwkgKiBOb3RlIHRoYXQgd2Ugb25seSBsb29rIGZvciBvYmplY3QgaGFuZGxlcyAtLSBjYW5ub3QgZXZhbHVhdGUgb2JqZWN0cworCSAqIHVudGlsIHdlIGtub3cgdGhlIGRldmljZSBpcyBwcmVzZW50IGFuZCBwcm9wZXJseSBpbml0aWFsaXplZC4KIAkgKi8KIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZmxhZ3MoZGV2aWNlKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGVuZDsKIAogCS8qCi0JICogU3RhdHVzCi0JICogLS0tLS0tCi0JICogU2VlIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudC4gIFdlIGFsd2F5cyBhc3N1bWUgdGhhdCBub24tRGV2aWNlCi0JICogYW5kIG5vbi1Qcm9jZXNzb3Igb2JqZWN0cyAoZS5nLiB0aGVybWFsIHpvbmVzLCBwb3dlciByZXNvdXJjZXMsCi0JICogZXRjLikgYXJlIHByZXNlbnQsIGZ1bmN0aW9uaW5nLCBldGMuIChhdCBsZWFzdCB3aGVuIHBhcmVudCBvYmplY3QKLQkgKiBpcyBwcmVzZW50KS4gIE5vdGUgdGhhdCBfU1RBIGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nIGZvciBzb21lCi0JICogb2JqZWN0cyAoZS5nLiBwb3dlciByZXNvdXJjZXMpIHNvIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBob3cgd2UgdXNlCi0JICogaXQuCi0JICovCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUjoKLQljYXNlIEFDUElfQlVTX1RZUEVfREVWSUNFOgotCQlyZXN1bHQgPSBhY3BpX2J1c19nZXRfc3RhdHVzKGRldmljZSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUocmVzdWx0KSkgewotCQkJcmVzdWx0ID0gLUVOT0RFVjsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JCS8qCi0JCSAqIFdoZW4gdGhlIGRldmljZSBpcyBuZWl0aGVyIHByZXNlbnQgbm9yIGZ1bmN0aW9uYWwsIHRoZQotCQkgKiBkZXZpY2Ugc2hvdWxkIG5vdCBiZSBhZGRlZCB0byBMaW51eCBBQ1BJIGRldmljZSB0cmVlLgotCQkgKiBXaGVuIHRoZSBzdGF0dXMgb2YgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCBidXQgZnVuY3RpbmFsLAotCQkgKiBpdCBzaG91bGQgYmUgYWRkZWQgdG8gTGludXggQUNQSSB0cmVlLiBGb3IgZXhhbXBsZSA6IGJheQotCQkgKiBkZXZpY2UgLCBkb2NrIGRldmljZS4KLQkJICogSW4gc3VjaCBjb25kaXRpb25zIGl0IGlzIHVubmNlc3NhcnkgdG8gY2hlY2sgd2hldGhlciBpdCBpcwotCQkgKiBiYXkgZGV2aWNlIG9yIGRvY2sgZGV2aWNlLgotCQkgKi8KLQkJaWYgKCFkZXZpY2UtPnN0YXR1cy5wcmVzZW50ICYmICFkZXZpY2UtPnN0YXR1cy5mdW5jdGlvbmFsKSB7Ci0JCQlyZXN1bHQgPSAtRU5PREVWOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPQotCQkgICAgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8Ci0JCSAgICBBQ1BJX1NUQV9ERVZJQ0VfVUkgICAgICB8IEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORzsKLQkJYnJlYWs7Ci0JfQotCi0JLyoKIAkgKiBJbml0aWFsaXplIERldmljZQogCSAqIC0tLS0tLS0tLS0tLS0tLS0tCiAJICogVEJEOiBTeW5jaCB3aXRoIENvcmUncyBlbnVtZXJhdGlvbi9pbml0aWFsaXphdGlvbiBwcm9jZXNzLgogCSAqLwotCi0JLyoKLQkgKiBIYXJkd2FyZSBJRCwgVW5pcXVlIElELCAmIEJ1cyBBZGRyZXNzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqLwotCWFjcGlfZGV2aWNlX3NldF9pZChkZXZpY2UsIHBhcmVudCwgaGFuZGxlLCB0eXBlKTsKKwlhY3BpX2RldmljZV9zZXRfaWQoZGV2aWNlKTsKIAogCS8qCiAJICogUG93ZXIgTWFuYWdlbWVudApAQCAtMTM0MSwxMCArMTIxMSwxMCBAQAogCQkJZ290byBlbmQ7CiAJfQogCi0JaWYgKChyZXN1bHQgPSBhY3BpX2RldmljZV9zZXRfY29udGV4dChkZXZpY2UsIHR5cGUpKSkKKwlpZiAoKHJlc3VsdCA9IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KGRldmljZSkpKQogCQlnb3RvIGVuZDsKIAotCXJlc3VsdCA9IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKGRldmljZSwgcGFyZW50KTsKKwlyZXN1bHQgPSBhY3BpX2RldmljZV9yZWdpc3RlcihkZXZpY2UpOwogCiAJLyoKIAkgKiBCaW5kIF9BRFItQmFzZWQgRGV2aWNlcyB3aGVuIGhvdCBhZGQKQEAgLTEzNTUsMTY1ICsxMjI1LDE0MyBAQAogCX0KIAogZW5kOgotCWlmICghcmVzdWx0KQorCWlmICghcmVzdWx0KSB7CisJCWFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZidWZmZXIpOworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCisJCQkiQWRkaW5nICVzIFslc10gcGFyZW50ICVzXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5kZXYpLAorCQkJIChjaGFyICopIGJ1ZmZlci5wb2ludGVyLAorCQkJIGRldmljZS0+cGFyZW50ID8gZGV2X25hbWUoJmRldmljZS0+cGFyZW50LT5kZXYpIDoKKwkJCQkJICAiKG51bGwpIikpOworCQlrZnJlZShidWZmZXIucG9pbnRlcik7CiAJCSpjaGlsZCA9IGRldmljZTsKLQllbHNlCisJfSBlbHNlCiAJCWFjcGlfZGV2aWNlX3JlbGVhc2UoJmRldmljZS0+ZGV2KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9idXNfc2NhbihzdHJ1Y3QgYWNwaV9kZXZpY2UgKnN0YXJ0LCBzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMpCisjZGVmaW5lIEFDUElfU1RBX0RFRkFVTFQgKEFDUElfU1RBX0RFVklDRV9QUkVTRU5UIHwgQUNQSV9TVEFfREVWSUNFX0VOQUJMRUQgfCBcCisJCQkgIEFDUElfU1RBX0RFVklDRV9VSSAgICAgIHwgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HKQorCitzdGF0aWMgaW50IGFjcGlfYnVzX3R5cGVfYW5kX3N0YXR1cyhhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqdHlwZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGEpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQgPSBOVUxMOwotCXN0cnVjdCBhY3BpX2RldmljZSAqY2hpbGQgPSBOVUxMOwotCWFjcGlfaGFuZGxlIHBoYW5kbGUgPSBOVUxMOwotCWFjcGlfaGFuZGxlIGNoYW5kbGUgPSBOVUxMOwotCWFjcGlfb2JqZWN0X3R5cGUgdHlwZSA9IDA7Ci0JdTMyIGxldmVsID0gMTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9vYmplY3RfdHlwZSBhY3BpX3R5cGU7CiAKKwlzdGF0dXMgPSBhY3BpX2dldF90eXBlKGhhbmRsZSwgJmFjcGlfdHlwZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghc3RhcnQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcGFyZW50ID0gc3RhcnQ7Ci0JcGhhbmRsZSA9IHN0YXJ0LT5oYW5kbGU7Ci0KLQkvKgotCSAqIFBhcnNlIHRocm91Z2ggdGhlIEFDUEkgbmFtZXNwYWNlLCBpZGVudGlmeSBhbGwgJ2RldmljZXMnLCBhbmQKLQkgKiBjcmVhdGUgYSBuZXcgJ3N0cnVjdCBhY3BpX2RldmljZScgZm9yIGVhY2guCi0JICovCi0Jd2hpbGUgKChsZXZlbCA+IDApICYmIHBhcmVudCkgewotCi0JCXN0YXR1cyA9IGFjcGlfZ2V0X25leHRfb2JqZWN0KEFDUElfVFlQRV9BTlksIHBoYW5kbGUsCi0JCQkJCSAgICAgIGNoYW5kbGUsICZjaGFuZGxlKTsKLQotCQkvKgotCQkgKiBJZiB0aGlzIHNjb3BlIGlzIGV4aGF1c3RlZCB0aGVuIG1vdmUgb3VyIHdheSBiYWNrIHVwLgotCQkgKi8KLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlsZXZlbC0tOwotCQkJY2hhbmRsZSA9IHBoYW5kbGU7Ci0JCQlhY3BpX2dldF9wYXJlbnQocGhhbmRsZSwgJnBoYW5kbGUpOwotCQkJaWYgKHBhcmVudC0+cGFyZW50KQotCQkJCXBhcmVudCA9IHBhcmVudC0+cGFyZW50OwotCQkJY29udGludWU7Ci0JCX0KLQotCQlzdGF0dXMgPSBhY3BpX2dldF90eXBlKGNoYW5kbGUsICZ0eXBlKTsKKwlzd2l0Y2ggKGFjcGlfdHlwZSkgeworCWNhc2UgQUNQSV9UWVBFX0FOWToJCS8qIGZvciBBQ1BJX1JPT1RfT0JKRUNUICovCisJY2FzZSBBQ1BJX1RZUEVfREVWSUNFOgorCQkqdHlwZSA9IEFDUElfQlVTX1RZUEVfREVWSUNFOworCQlzdGF0dXMgPSBhY3BpX2J1c19nZXRfc3RhdHVzX2hhbmRsZShoYW5kbGUsIHN0YSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgaXMgYSBzY29wZSBvYmplY3QgdGhlbiBwYXJzZSBpdCAoZGVwdGgtZmlyc3QpLgotCQkgKi8KLQkJaWYgKHR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX1NDT1BFKSB7Ci0JCQlsZXZlbCsrOwotCQkJcGhhbmRsZSA9IGNoYW5kbGU7Ci0JCQljaGFuZGxlID0gTlVMTDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIG9iamVjdHMgdGhhdCB3ZSBjb25zaWRlciAnZGV2aWNlcycuCi0JCSAqLwotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBBQ1BJX1RZUEVfREVWSUNFOgotCQkJdHlwZSA9IEFDUElfQlVTX1RZUEVfREVWSUNFOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNQSV9UWVBFX1BST0NFU1NPUjoKLQkJCXR5cGUgPSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUjsKLQkJCWJyZWFrOwotCQljYXNlIEFDUElfVFlQRV9USEVSTUFMOgotCQkJdHlwZSA9IEFDUElfQlVTX1RZUEVfVEhFUk1BTDsKLQkJCWJyZWFrOwotCQljYXNlIEFDUElfVFlQRV9QT1dFUjoKLQkJCXR5cGUgPSBBQ1BJX0JVU19UWVBFX1BPV0VSOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChvcHMtPmFjcGlfb3BfYWRkKQotCQkJc3RhdHVzID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmY2hpbGQsIHBhcmVudCwKLQkJCQljaGFuZGxlLCB0eXBlLCBvcHMpOwotCQllbHNlCi0JCQlzdGF0dXMgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGNoYW5kbGUsICZjaGlsZCk7Ci0KKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwljYXNlIEFDUElfVFlQRV9QUk9DRVNTT1I6CisJCSp0eXBlID0gQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1I7CisJCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGhhbmRsZSwgc3RhKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKG9wcy0+YWNwaV9vcF9zdGFydCAmJiAhKG9wcy0+YWNwaV9vcF9hZGQpKSB7Ci0JCQlzdGF0dXMgPSBhY3BpX3N0YXJ0X3NpbmdsZV9vYmplY3QoY2hpbGQpOwotCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogSWYgdGhlIGRldmljZSBpcyBwcmVzZW50LCBlbmFibGVkLCBhbmQgZnVuY3Rpb25pbmcgdGhlbgotCQkgKiBwYXJzZSBpdHMgc2NvcGUgKGRlcHRoLWZpcnN0KS4gIE5vdGUgdGhhdCB3ZSBuZWVkIHRvCi0JCSAqIHJlcHJlc2VudCBhYnNlbnQgZGV2aWNlcyB0byBmYWNpbGl0YXRlIFBuUCBub3RpZmljYXRpb25zCi0JCSAqIC0tIGJ1dCBvbmx5IHRoZSBzdWJ0cmVlIGhlYWQgKG5vdCBhbGwgb2YgaXRzIGNoaWxkcmVuLAotCQkgKiB3aGljaCB3aWxsIGJlIGVudW1lcmF0ZWQgd2hlbiB0aGUgcGFyZW50IGlzIGluc2VydGVkKS4KLQkJICoKLQkJICogVEJEOiBOZWVkIG5vdGlmaWNhdGlvbnMgYW5kIG90aGVyIGRldGVjdGlvbiBtZWNoYW5pc21zCi0JCSAqICAgICAgaW4gcGxhY2UgYmVmb3JlIHdlIGNhbiBmdWxseSBpbXBsZW1lbnQgdGhpcy4KLQkJICovCi0JCSAvKgotCQkgKiBXaGVuIHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQgYnV0IGZ1bmN0aW9uYWwsIGl0IGlzIGFsc28KLQkJICogbmVjZXNzYXJ5IHRvIHNjYW4gdGhlIGNoaWxkcmVuIG9mIHRoaXMgZGV2aWNlLgotCQkgKi8KLQkJaWYgKGNoaWxkLT5zdGF0dXMucHJlc2VudCB8fCAoIWNoaWxkLT5zdGF0dXMucHJlc2VudCAmJgotCQkJCQljaGlsZC0+c3RhdHVzLmZ1bmN0aW9uYWwpKSB7Ci0JCQlzdGF0dXMgPSBhY3BpX2dldF9uZXh0X29iamVjdChBQ1BJX1RZUEVfQU5ZLCBjaGFuZGxlLAotCQkJCQkJICAgICAgTlVMTCwgTlVMTCk7Ci0JCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCQlsZXZlbCsrOwotCQkJCXBoYW5kbGUgPSBjaGFuZGxlOwotCQkJCWNoYW5kbGUgPSBOVUxMOwotCQkJCXBhcmVudCA9IGNoaWxkOwotCQkJfQotCQl9CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CisJY2FzZSBBQ1BJX1RZUEVfVEhFUk1BTDoKKwkJKnR5cGUgPSBBQ1BJX0JVU19UWVBFX1RIRVJNQUw7CisJCSpzdGEgPSBBQ1BJX1NUQV9ERUZBVUxUOworCQlicmVhazsKKwljYXNlIEFDUElfVFlQRV9QT1dFUjoKKwkJKnR5cGUgPSBBQ1BJX0JVU19UWVBFX1BPV0VSOworCQkqc3RhID0gQUNQSV9TVEFfREVGQVVMVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX2J1c19jaGVja19hZGQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsLAorCQkJCSAgICAgIHZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR1cm5fdmFsdWUpCit7CisJc3RydWN0IGFjcGlfYnVzX29wcyAqb3BzID0gY29udGV4dDsKKwlpbnQgdHlwZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhOworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gYWNwaV9idXNfdHlwZV9hbmRfc3RhdHVzKGhhbmRsZSwgJnR5cGUsICZzdGEpOworCWlmIChyZXN1bHQpCisJCXJldHVybiBBRV9PSzsKKworCWlmICghKHN0YSAmIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UKSAmJgorCSAgICAhKHN0YSAmIEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORykpCisJCXJldHVybiBBRV9DVFJMX0RFUFRIOworCisJLyoKKwkgKiBXZSBtYXkgYWxyZWFkeSBoYXZlIGFuIGFjcGlfZGV2aWNlIGZyb20gYSBwcmV2aW91cyBlbnVtZXJhdGlvbi4gIElmCisJICogc28sIHdlIG5lZWRuJ3QgYWRkIGl0IGFnYWluLCBidXQgd2UgbWF5IHN0aWxsIGhhdmUgdG8gc3RhcnQgaXQuCisJICovCisJZGV2aWNlID0gTlVMTDsKKwlhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSk7CisJaWYgKG9wcy0+YWNwaV9vcF9hZGQgJiYgIWRldmljZSkKKwkJYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmZGV2aWNlLCBoYW5kbGUsIHR5cGUsIHN0YSwgb3BzKTsKKworCWlmICghZGV2aWNlKQorCQlyZXR1cm4gQUVfQ1RSTF9ERVBUSDsKKworCWlmIChvcHMtPmFjcGlfb3Bfc3RhcnQgJiYgIShvcHMtPmFjcGlfb3BfYWRkKSkgeworCQlzdGF0dXMgPSBhY3BpX3N0YXJ0X3NpbmdsZV9vYmplY3QoZGV2aWNlKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJcmV0dXJuIEFFX0NUUkxfREVQVEg7CisJfQorCisJaWYgKCEqcmV0dXJuX3ZhbHVlKQorCQkqcmV0dXJuX3ZhbHVlID0gZGV2aWNlOworCXJldHVybiBBRV9PSzsKK30KKworc3RhdGljIGludCBhY3BpX2J1c19zY2FuKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfYnVzX29wcyAqb3BzLAorCQkJIHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl2b2lkICpkZXZpY2UgPSBOVUxMOworCisJc3RhdHVzID0gYWNwaV9idXNfY2hlY2tfYWRkKGhhbmRsZSwgMCwgb3BzLCAmZGV2aWNlKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0FOWSwgaGFuZGxlLCBBQ1BJX1VJTlQzMl9NQVgsCisJCQkJICAgIGFjcGlfYnVzX2NoZWNrX2FkZCwgb3BzLCAmZGV2aWNlKTsKKworCWlmIChjaGlsZCkKKwkJKmNoaWxkID0gZGV2aWNlOworCXJldHVybiAwOworfQorCiBpbnQKIGFjcGlfYnVzX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCwKIAkgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlKQogewotCWludCByZXN1bHQ7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKIAltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOwogCW9wcy5hY3BpX29wX2FkZCA9IDE7CiAKLQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KGNoaWxkLCBwYXJlbnQsIGhhbmRsZSwgdHlwZSwgJm9wcyk7Ci0JaWYgKCFyZXN1bHQpCi0JCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW4oKmNoaWxkLCAmb3BzKTsKLQotCXJldHVybiByZXN1bHQ7CisJYWNwaV9idXNfc2NhbihoYW5kbGUsICZvcHMsIGNoaWxkKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfYWRkKTsKIAogaW50IGFjcGlfYnVzX3N0YXJ0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCWludCByZXN1bHQ7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKKwltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOworCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKIAotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlc3VsdCA9IGFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChkZXZpY2UpOwotCWlmICghcmVzdWx0KSB7Ci0JCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7Ci0JCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKLQkJcmVzdWx0ID0gYWNwaV9idXNfc2NhbihkZXZpY2UsICZvcHMpOwotCX0KLQlyZXR1cm4gcmVzdWx0OworCWFjcGlfYnVzX3NjYW4oZGV2aWNlLT5oYW5kbGUsICZvcHMsIE5VTEwpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19zdGFydCk7CiAKQEAgLTE1NzIsMTUgKzE0MjAsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfYnVzX3RyaW0pOwogCi1zdGF0aWMgaW50IGFjcGlfYnVzX3NjYW5fZml4ZWQoc3RydWN0IGFjcGlfZGV2aWNlICpyb290KQorc3RhdGljIGludCBhY3BpX2J1c19zY2FuX2ZpeGVkKHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCXN0cnVjdCBhY3BpX2J1c19vcHMgb3BzOwogCi0JaWYgKCFyb290KQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7CiAJb3BzLmFjcGlfb3BfYWRkID0gMTsKIAlvcHMuYWNwaV9vcF9zdGFydCA9IDE7CkBAIC0xNTg5LDE2ICsxNDM0LDE2IEBACiAJICogRW51bWVyYXRlIGFsbCBmaXhlZC1mZWF0dXJlIGRldmljZXMuCiAJICovCiAJaWYgKChhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX1BPV0VSX0JVVFRPTikgPT0gMCkgewotCQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIGFjcGlfcm9vdCwKLQkJCQkJCU5VTEwsCisJCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgTlVMTCwKIAkJCQkJCUFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OLAorCQkJCQkJQUNQSV9TVEFfREVGQVVMVCwKIAkJCQkJCSZvcHMpOwogCX0KIAogCWlmICgoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9TTEVFUF9CVVRUT04pID09IDApIHsKLQkJcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmZGV2aWNlLCBhY3BpX3Jvb3QsCi0JCQkJCQlOVUxMLAorCQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIE5VTEwsCiAJCQkJCQlBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTiwKKwkJCQkJCUFDUElfU1RBX0RFRkFVTFQsCiAJCQkJCQkmb3BzKTsKIAl9CiAKQEAgLTE2MjEsMjQgKzE0NjYsMTUgQEAKIAl9CiAKIAkvKgotCSAqIENyZWF0ZSB0aGUgcm9vdCBkZXZpY2UgaW4gdGhlIGJ1cydzIGRldmljZSB0cmVlCi0JICovCi0JcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmYWNwaV9yb290LCBOVUxMLCBBQ1BJX1JPT1RfT0JKRUNULAotCQkJCQlBQ1BJX0JVU19UWVBFX1NZU1RFTSwgJm9wcyk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBEb25lOwotCi0JLyoKIAkgKiBFbnVtZXJhdGUgZGV2aWNlcyBpbiB0aGUgQUNQSSBuYW1lc3BhY2UuCiAJICovCi0JcmVzdWx0ID0gYWNwaV9idXNfc2Nhbl9maXhlZChhY3BpX3Jvb3QpOworCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW4oQUNQSV9ST09UX09CSkVDVCwgJm9wcywgJmFjcGlfcm9vdCk7CiAKIAlpZiAoIXJlc3VsdCkKLQkJcmVzdWx0ID0gYWNwaV9idXNfc2NhbihhY3BpX3Jvb3QsICZvcHMpOworCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuX2ZpeGVkKCk7CiAKIAlpZiAocmVzdWx0KQogCQlhY3BpX2RldmljZV91bnJlZ2lzdGVyKGFjcGlfcm9vdCwgQUNQSV9CVVNfUkVNT1ZBTF9OT1JNQUwpOwogCi1Eb25lOgogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IGE5MGFmY2MuLjRjYzFiODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC00MTMsNiArNDEzLDMwIEBACiAJCX0sCiAJfSwKIAl7CisJLmNhbGxiYWNrID0gaW5pdF9zZXRfc2NpX2VuX29uX3Jlc3VtZSwKKwkuaWRlbnQgPSAiSGV3bGV0dC1QYWNrYXJkIFBhdmlsaW9uIGR2NCIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NCIpLAorCQl9LAorCX0sCisJeworCS5jYWxsYmFjayA9IGluaXRfc2V0X3NjaV9lbl9vbl9yZXN1bWUsCisJLmlkZW50ID0gIkhld2xldHQtUGFja2FyZCBQYXZpbGlvbiBkdjciLAorCS5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjciKSwKKwkJfSwKKwl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X3NldF9zY2lfZW5fb25fcmVzdW1lLAorCS5pZGVudCA9ICJIZXdsZXR0LVBhY2thcmQgQ29tcGFxIFByZXNhcmlvIENRNDAgTm90ZWJvb2sgUEMiLAorCS5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDb21wYXEgUHJlc2FyaW8gQ1E0MCBOb3RlYm9vayBQQyIpLAorCQl9LAorCX0sCisJewogCS5jYWxsYmFjayA9IGluaXRfb2xkX3N1c3BlbmRfb3JkZXJpbmcsCiAJLmlkZW50ID0gIlBhbmFzb25pYyBDRjUxLTJMIiwKIAkubWF0Y2hlcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggOTRiMWE0Yy4uMDVkZmY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCQkJCQkJc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIHNzaXplX3QgYWNwaV92aWRlb19kZXZpY2Vfd3JpdGVfYnJpZ2h0bmVzcyhzdHJ1Y3QgZmlsZSAqZmlsZSwKIAljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSk7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX29wZW5fZnMsCiAJLnJlYWQgPSBzZXFfcmVhZCwKQEAgLTExMDksNyArMTEwOSwxMiBAQAogCSAqLwogCiAJLyogRG9lcyB0aGlzIGRldmljZSBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZz8gKi8KLQlpZiAodmlkZW8tPmNhcC5fRE9TKSB7CisJaWYgKHZpZGVvLT5jYXAuX0RPUyB8fCB2aWRlby0+Y2FwLl9ET0QpIHsKKwkJaWYgKCF2aWRlby0+Y2FwLl9ET1MpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgRldfQlVHCisJCQkJIkFDUEkoJXMpIGRlZmluZXMgX0RPRCBidXQgbm90IF9ET1NcbiIsCisJCQkJYWNwaV9kZXZpY2VfYmlkKHZpZGVvLT5kZXZpY2UpKTsKKwkJfQogCQl2aWRlby0+ZmxhZ3MubXVsdGloZWFkID0gMTsKIAkJc3RhdHVzID0gMDsKIAl9CkBAIC0xMjE4LDcgKzEyMjMsNyBAQAogCXUzMiBzdGF0ZSA9IDA7CiAKIAotCWlmICghZGV2IHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCisJaWYgKCFkZXYgfHwgY291bnQgPj0gc2l6ZW9mKHN0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCkBAIC0xMjc1LDcgKzEyODAsNyBAQAogCWludCBpOwogCiAKLQlpZiAoIWRldiB8fCAhZGV2LT5icmlnaHRuZXNzIHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCisJaWYgKCFkZXYgfHwgIWRldi0+YnJpZ2h0bmVzcyB8fCBjb3VudCA+PSBzaXplb2Yoc3RyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKQEAgLTE1NTcsNyArMTU2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG9wdCwgb3B0aW9uczsKIAogCi0JaWYgKCF2aWRlbyB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQorCWlmICghdmlkZW8gfHwgY291bnQgPj0gc2l6ZW9mKHN0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3RhdHVzID0gYWNwaV92aWRlb19idXNfUE9TVF9vcHRpb25zKHZpZGVvLCAmb3B0aW9ucyk7CkBAIC0xNTk3LDcgKzE2MDIsNyBAQAogCXVuc2lnbmVkIGxvbmcgb3B0OwogCiAKLQlpZiAoIXZpZGVvIHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCisJaWYgKCF2aWRlbyB8fCBjb3VudCA+PSBzaXplb2Yoc3RyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKQEAgLTE5ODYsNiArMTk5MSwxMCBAQAogCiAJcmVzdWx0ID0gYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbChkZXZpY2UsIGxldmVsX25leHQpOwogCisJaWYgKCFyZXN1bHQpCisJCWJhY2tsaWdodF9mb3JjZV91cGRhdGUoZGV2aWNlLT5iYWNrbGlnaHQsCisJCQkJICAgICAgIEJBQ0tMSUdIVF9VUERBVEVfSE9US0VZKTsKKwogb3V0OgogCWlmIChyZXN1bHQpCiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkZhaWxlZCB0byBzd2l0Y2ggdGhlIGJyaWdodG5lc3NcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCmluZGV4IDcwMzJmMjUuLjU3NTU5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKQEAgLTg0LDcgKzg0LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBEb2VzIHRoaXMgZGV2aWNlIGFibGUgdG8gc3VwcG9ydCB2aWRlbyBzd2l0Y2hpbmcgPyAqLwotCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPRCIsICZoX2R1bW15KSkgJiYKKwlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET0QiLCAmaF9kdW1teSkpIHx8CiAJICAgIEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9TIiwgJmhfZHVtbXkpKSkKIAkJdmlkZW9fY2FwcyB8PSBBQ1BJX1ZJREVPX09VVFBVVF9TV0lUQ0hJTkc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCBhY2QxMTYyLi5hMzI0MWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0xMjIsNiArMTIyLDcgQEAKIAlIT1NUX1ZFUlNJT04JCT0gMHgxMCwgLyogQUhDSSBzcGVjLiB2ZXJzaW9uIGNvbXBsaWFuY3kgKi8KIAlIT1NUX0VNX0xPQwkJPSAweDFjLCAvKiBFbmNsb3N1cmUgTWFuYWdlbWVudCBsb2NhdGlvbiAqLwogCUhPU1RfRU1fQ1RMCQk9IDB4MjAsIC8qIEVuY2xvc3VyZSBNYW5hZ2VtZW50IENvbnRyb2wgKi8KKwlIT1NUX0NBUDIJCT0gMHgyNCwgLyogaG9zdCBjYXBhYmlsaXRpZXMsIGV4dGVuZGVkICovCiAKIAkvKiBIT1NUX0NUTCBiaXRzICovCiAJSE9TVF9SRVNFVAkJPSAoMSA8PCAwKSwgIC8qIHJlc2V0IGNvbnRyb2xsZXI7IHNlbGYtY2xlYXIgKi8KQEAgLTEyOSwxNiArMTMwLDI5IEBACiAJSE9TVF9BSENJX0VOCQk9ICgxIDw8IDMxKSwgLyogQUhDSSBlbmFibGVkICovCiAKIAkvKiBIT1NUX0NBUCBiaXRzICovCisJSE9TVF9DQVBfU1hTCQk9ICgxIDw8IDUpLCAgLyogU3VwcG9ydHMgRXh0ZXJuYWwgU0FUQSAqLwogCUhPU1RfQ0FQX0VNUwkJPSAoMSA8PCA2KSwgIC8qIEVuY2xvc3VyZSBNYW5hZ2VtZW50IHN1cHBvcnQgKi8KLQlIT1NUX0NBUF9TU0MJCT0gKDEgPDwgMTQpLCAvKiBTbHVtYmVyIGNhcGFibGUgKi8KKwlIT1NUX0NBUF9DQ0MJCT0gKDEgPDwgNyksICAvKiBDb21tYW5kIENvbXBsZXRpb24gQ29hbGVzY2luZyAqLworCUhPU1RfQ0FQX1BBUlQJCT0gKDEgPDwgMTMpLCAvKiBQYXJ0aWFsIHN0YXRlIGNhcGFibGUgKi8KKwlIT1NUX0NBUF9TU0MJCT0gKDEgPDwgMTQpLCAvKiBTbHVtYmVyIHN0YXRlIGNhcGFibGUgKi8KKwlIT1NUX0NBUF9QSU9fTVVMVEkJPSAoMSA8PCAxNSksIC8qIFBJTyBtdWx0aXBsZSBEUlEgc3VwcG9ydCAqLworCUhPU1RfQ0FQX0ZCUwkJPSAoMSA8PCAxNiksIC8qIEZJUy1iYXNlZCBzd2l0Y2hpbmcgc3VwcG9ydCAqLwogCUhPU1RfQ0FQX1BNUAkJPSAoMSA8PCAxNyksIC8qIFBvcnQgTXVsdGlwbGllciBzdXBwb3J0ICovCisJSE9TVF9DQVBfT05MWQkJPSAoMSA8PCAxOCksIC8qIFN1cHBvcnRzIEFIQ0kgbW9kZSBvbmx5ICovCiAJSE9TVF9DQVBfQ0xPCQk9ICgxIDw8IDI0KSwgLyogQ29tbWFuZCBMaXN0IE92ZXJyaWRlIHN1cHBvcnQgKi8KKwlIT1NUX0NBUF9MRUQJCT0gKDEgPDwgMjUpLCAvKiBTdXBwb3J0cyBhY3Rpdml0eSBMRUQgKi8KIAlIT1NUX0NBUF9BTFBNCQk9ICgxIDw8IDI2KSwgLyogQWdncmVzc2l2ZSBMaW5rIFBNIHN1cHBvcnQgKi8KIAlIT1NUX0NBUF9TU1MJCT0gKDEgPDwgMjcpLCAvKiBTdGFnZ2VyZWQgU3Bpbi11cCAqLworCUhPU1RfQ0FQX01QUwkJPSAoMSA8PCAyOCksIC8qIE1lY2hhbmljYWwgcHJlc2VuY2Ugc3dpdGNoICovCiAJSE9TVF9DQVBfU05URgkJPSAoMSA8PCAyOSksIC8qIFNOb3RpZmljYXRpb24gcmVnaXN0ZXIgKi8KIAlIT1NUX0NBUF9OQ1EJCT0gKDEgPDwgMzApLCAvKiBOYXRpdmUgQ29tbWFuZCBRdWV1ZWluZyAqLwogCUhPU1RfQ0FQXzY0CQk9ICgxIDw8IDMxKSwgLyogUENJIERBQyAoNjQtYml0IERNQSkgc3VwcG9ydCAqLwogCisJLyogSE9TVF9DQVAyIGJpdHMgKi8KKwlIT1NUX0NBUDJfQk9ICQk9ICgxIDw8IDApLCAgLyogQklPUy9PUyBoYW5kb2ZmIHN1cHBvcnRlZCAqLworCUhPU1RfQ0FQMl9OVk1IQ0kJPSAoMSA8PCAxKSwgIC8qIE5WTUhDSSBzdXBwb3J0ZWQgKi8KKwlIT1NUX0NBUDJfQVBTVAkJPSAoMSA8PCAyKSwgIC8qIEF1dG9tYXRpYyBwYXJ0aWFsIHRvIHNsdW1iZXIgKi8KKwogCS8qIHJlZ2lzdGVycyBmb3IgZWFjaCBTQVRBIHBvcnQgKi8KIAlQT1JUX0xTVF9BRERSCQk9IDB4MDAsIC8qIGNvbW1hbmQgbGlzdCBETUEgYWRkciAqLwogCVBPUlRfTFNUX0FERFJfSEkJPSAweDA0LCAvKiBjb21tYW5kIGxpc3QgRE1BIGFkZHIgaGkgKi8KQEAgLTI2Nyw4ICsyODEsMTAgQEAKIHN0cnVjdCBhaGNpX2hvc3RfcHJpdiB7CiAJdW5zaWduZWQgaW50CQlmbGFnczsJCS8qIEFIQ0lfSEZMQUdfKiAqLwogCXUzMgkJCWNhcDsJCS8qIGNhcCB0byB1c2UgKi8KKwl1MzIJCQljYXAyOwkJLyogY2FwMiB0byB1c2UgKi8KIAl1MzIJCQlwb3J0X21hcDsJLyogcG9ydCBtYXAgdG8gdXNlICovCiAJdTMyCQkJc2F2ZWRfY2FwOwkvKiBzYXZlZCBpbml0aWFsIGNhcCAqLworCXUzMgkJCXNhdmVkX2NhcDI7CS8qIHNhdmVkIGluaXRpYWwgY2FwMiAqLwogCXUzMgkJCXNhdmVkX3BvcnRfbWFwOwkvKiBzYXZlZCBpbml0aWFsIHBvcnRfbWFwICovCiAJdTMyIAkJCWVtX2xvYzsgLyogZW5jbG9zdXJlIG1hbmFnZW1lbnQgbG9jYXRpb24gKi8KIH07CkBAIC0zMzEsMTIgKzM0NywxNSBAQAogCiBzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfaG9zdF9jYXBzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X2NhcDIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiBzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfcG9ydF9jbWQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAKIERFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXBzLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXBzLCBOVUxMKTsKK0RFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXAyLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXAyLCBOVUxMKTsKIERFVklDRV9BVFRSKGFoY2lfaG9zdF92ZXJzaW9uLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF92ZXJzaW9uLCBOVUxMKTsKIERFVklDRV9BVFRSKGFoY2lfcG9ydF9jbWQsIFNfSVJVR08sIGFoY2lfc2hvd19wb3J0X2NtZCwgTlVMTCk7CiAKQEAgLTM0NSw2ICszNjQsNyBAQAogCSZkZXZfYXR0cl9lbV9tZXNzYWdlX3R5cGUsCiAJJmRldl9hdHRyX2VtX21lc3NhZ2UsCiAJJmRldl9hdHRyX2FoY2lfaG9zdF9jYXBzLAorCSZkZXZfYXR0cl9haGNpX2hvc3RfY2FwMiwKIAkmZGV2X2F0dHJfYWhjaV9ob3N0X3ZlcnNpb24sCiAJJmRldl9hdHRyX2FoY2lfcG9ydF9jbWQsCiAJTlVMTApAQCAtNDQ3LDcgKzQ2Nyw4IEBACiAJW2JvYXJkX2FoY2lfc2I2MDBdID0KIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMIHwKLQkJCQkgQUhDSV9IRkxBR19OT19NU0kgfCBBSENJX0hGTEFHX1NFQ1QyNTUpLAorCQkJCSBBSENJX0hGTEFHX05PX01TSSB8IEFIQ0lfSEZMQUdfU0VDVDI1NSB8CisJCQkJIEFIQ0lfSEZMQUdfMzJCSVRfT05MWSksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKQEAgLTU1NCw3ICs1NzUsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTUpLCBib2FyZF9haGNpX3NiNzAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KIAogCS8qIEFNRCAqLwotCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBTQjkwMCAqLworCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBIdWRzb24tMiAqLwogCS8qIEFNRCBpcyB1c2luZyBSQUlEIGNsYXNzIG9ubHkgZm9yIGFoY2kgY29udHJvbGxlcnMgKi8KIAl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSAgUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmZmZiwgYm9hcmRfYWhjaSB9LApAQCAtNTg0LDYgKzYwNSw3IEBACiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1OSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1YSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1YiksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU4MCksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIExpbnV4IElEICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMCksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMiksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCkBAIC03MzIsNiArNzU0LDE2IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIGhwcml2LT5jYXApOwogfQogCitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfaG9zdF9jYXAyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2hvc3QpOworCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIGhwcml2LT5jYXAyKTsKK30KKwogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTc3MSw3ICs4MDMsNyBAQAogCQkJCSAgICAgc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdikKIHsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBwY2ltX2lvbWFwX3RhYmxlKHBkZXYpW0FIQ0lfUENJX0JBUl07Ci0JdTMyIGNhcCwgcG9ydF9tYXA7CisJdTMyIGNhcCwgY2FwMiwgdmVycywgcG9ydF9tYXA7CiAJaW50IGk7CiAJaW50IG12OwogCkBAIC03ODQsNiArODE2LDE0IEBACiAJaHByaXYtPnNhdmVkX2NhcCA9IGNhcCA9IHJlYWRsKG1taW8gKyBIT1NUX0NBUCk7CiAJaHByaXYtPnNhdmVkX3BvcnRfbWFwID0gcG9ydF9tYXAgPSByZWFkbChtbWlvICsgSE9TVF9QT1JUU19JTVBMKTsKIAorCS8qIENBUDIgcmVnaXN0ZXIgaXMgb25seSBkZWZpbmVkIGZvciBBSENJIDEuMiBhbmQgbGF0ZXIgKi8KKwl2ZXJzID0gcmVhZGwobW1pbyArIEhPU1RfVkVSU0lPTik7CisJaWYgKCh2ZXJzID4+IDE2KSA+IDEgfHwKKwkgICAoKHZlcnMgPj4gMTYpID09IDEgJiYgKHZlcnMgJiAweEZGRkYpID49IDB4MjAwKSkKKwkJaHByaXYtPnNhdmVkX2NhcDIgPSBjYXAyID0gcmVhZGwobW1pbyArIEhPU1RfQ0FQMik7CisJZWxzZQorCQlocHJpdi0+c2F2ZWRfY2FwMiA9IGNhcDIgPSAwOworCiAJLyogc29tZSBjaGlwcyBoYXZlIGVycmF0YSBwcmV2ZW50aW5nIDY0Yml0IHVzZSAqLwogCWlmICgoY2FwICYgSE9TVF9DQVBfNjQpICYmIChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHXzMyQklUX09OTFkpKSB7CiAJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LApAQCAtODY5LDYgKzkwOSw3IEBACiAKIAkvKiByZWNvcmQgdmFsdWVzIHRvIHVzZSBkdXJpbmcgb3BlcmF0aW9uICovCiAJaHByaXYtPmNhcCA9IGNhcDsKKwlocHJpdi0+Y2FwMiA9IGNhcDI7CiAJaHByaXYtPnBvcnRfbWFwID0gcG9ydF9tYXA7CiB9CiAKQEAgLTg4Nyw2ICs5MjgsOCBAQAogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhvc3QtPmlvbWFwW0FIQ0lfUENJX0JBUl07CiAKIAl3cml0ZWwoaHByaXYtPnNhdmVkX2NhcCwgbW1pbyArIEhPU1RfQ0FQKTsKKwlpZiAoaHByaXYtPnNhdmVkX2NhcDIpCisJCXdyaXRlbChocHJpdi0+c2F2ZWRfY2FwMiwgbW1pbyArIEhPU1RfQ0FQMik7CiAJd3JpdGVsKGhwcml2LT5zYXZlZF9wb3J0X21hcCwgbW1pbyArIEhPU1RfUE9SVFNfSU1QTCk7CiAJKHZvaWQpIHJlYWRsKG1taW8gKyBIT1NUX1BPUlRTX0lNUEwpOwkvKiBmbHVzaCAqLwogfQpAQCAtMjUzNCwxMyArMjU3NywxNCBAQAogCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhvc3QtPmRldik7CiAJdm9pZCBfX2lvbWVtICptbWlvID0gaG9zdC0+aW9tYXBbQUhDSV9QQ0lfQkFSXTsKLQl1MzIgdmVycywgY2FwLCBpbXBsLCBzcGVlZDsKKwl1MzIgdmVycywgY2FwLCBjYXAyLCBpbXBsLCBzcGVlZDsKIAljb25zdCBjaGFyICpzcGVlZF9zOwogCXUxNiBjYzsKIAljb25zdCBjaGFyICpzY2NfczsKIAogCXZlcnMgPSByZWFkbChtbWlvICsgSE9TVF9WRVJTSU9OKTsKIAljYXAgPSBocHJpdi0+Y2FwOworCWNhcDIgPSBocHJpdi0+Y2FwMjsKIAlpbXBsID0gaHByaXYtPnBvcnRfbWFwOwogCiAJc3BlZWQgPSAoY2FwID4+IDIwKSAmIDB4ZjsKQEAgLTI1ODMsMjUgKzI2MjcsMjkgQEAKIAkJImZsYWdzOiAiCiAJCSIlcyVzJXMlcyVzJXMlcyIKIAkJIiVzJXMlcyVzJXMlcyVzIgotCQkiJXNcbiIKKwkJIiVzJXMlcyVzJXMlc1xuIgogCQksCiAKLQkJY2FwICYgKDEgPDwgMzEpID8gIjY0Yml0ICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMzApID8gIm5jcSAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI5KSA/ICJzbnRmICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMjgpID8gImlsY2sgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyNykgPyAic3RhZyAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI2KSA/ICJwbSAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI1KSA/ICJsZWQgIiA6ICIiLAotCi0JCWNhcCAmICgxIDw8IDI0KSA/ICJjbG8gIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxOSkgPyAibnogIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxOCkgPyAib25seSAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDE3KSA/ICJwbXAgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxNSkgPyAicGlvICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTQpID8gInNsdW0gIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxMykgPyAicGFydCAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDYpID8gImVtcyAiOiAiIgorCQljYXAgJiBIT1NUX0NBUF82NCA/ICI2NGJpdCAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX05DUSA/ICJuY3EgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9TTlRGID8gInNudGYgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9NUFMgPyAiaWxjayAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1NTUyA/ICJzdGFnICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfQUxQTSA/ICJwbSAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0xFRCA/ICJsZWQgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9DTE8gPyAiY2xvICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfT05MWSA/ICJvbmx5ICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfUE1QID8gInBtcCAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0ZCUyA/ICJmYnMgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9QSU9fTVVMVEkgPyAicGlvICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfU1NDID8gInNsdW0gIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9QQVJUID8gInBhcnQgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9DQ0MgPyAiY2NjICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfRU1TID8gImVtcyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1NYUyA/ICJzeHMgIiA6ICIiLAorCQljYXAyICYgSE9TVF9DQVAyX0FQU1QgPyAiYXBzdCAiIDogIiIsCisJCWNhcDIgJiBIT1NUX0NBUDJfTlZNSENJID8gIm52bXAgIiA6ICIiLAorCQljYXAyICYgSE9TVF9DQVAyX0JPSCA/ICJib2ggIiA6ICIiCiAJCSk7CiB9CiAKQEAgLTI2NTAsMTcgKzI2OTgsMTUgQEAKIAl9CiB9CiAKLS8qCi0gKiBTQjYwMCBhaGNpIGNvbnRyb2xsZXIgb24gY2VydGFpbiBib2FyZHMgY2FuJ3QgZG8gNjRiaXQgRE1BIHdpdGgKLSAqIG9sZGVyIEJJT1MuCi0gKi8KLXN0YXRpYyBib29sIGFoY2lfc2I2MDBfMzJiaXRfb25seShzdHJ1Y3QgcGNpX2RldiAqcGRldikKKy8qIG9ubHkgc29tZSBTQjYwMCBhaGNpIGNvbnRyb2xsZXJzIGNhbiBkbyA2NGJpdCBETUEgKi8KK3N0YXRpYyBib29sIGFoY2lfc2I2MDBfZW5hYmxlXzY0Yml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBzeXNpZHNbXSA9IHsKIAkJLyoKIAkJICogVGhlIG9sZGVzdCB2ZXJzaW9uIGtub3duIHRvIGJlIGJyb2tlbiBpcyAwOTAxIGFuZAogCQkgKiB3b3JraW5nIGlzIDE1MDEgd2hpY2ggd2FzIHJlbGVhc2VkIG9uIDIwMDctMTAtMjYuCi0JCSAqIEZvcmNlIDMyYml0IERNQSBvbiBhbnl0aGluZyBvbGRlciB0aGFuIDE1MDEuCisJCSAqIEVuYWJsZSA2NGJpdCBETUEgb24gMTUwMSBhbmQgYW55dGhpbmcgbmV3ZXIuCisJCSAqCiAJCSAqIFBsZWFzZSByZWFkIGJrbyM5NDEyIGZvciBtb3JlIGluZm8uCiAJCSAqLwogCQl7CkBAIC0yNjczLDQ2ICsyNzE5LDU3IEBACiAJCQkuZHJpdmVyX2RhdGEgPSAiMjAwNzEwMjYiLAkvKiB5eXl5bW1kZCAqLwogCQl9LAogCQkvKgotCQkgKiBJdCdzIHlldCB1bmtub3duIHdoZXRoZXIgbW9yZSByZWNlbnQgQklPUyBmaXhlcyB0aGUKLQkJICogcHJvYmxlbS4gIEJsYWNrbGlzdCB0aGUgd2hvbGUgYm9hcmQgZm9yIHRoZSB0aW1lCi0JCSAqIGJlaW5nLiAgUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyB0aHJlYWQgZm9yIG1vcmUKLQkJICogaW5mby4KKwkJICogQWxsIEJJT1MgdmVyc2lvbnMgZm9yIHRoZSBNU0kgSzlBMiBQbGF0aW51bSAoTVMtNzM3NikKKwkJICogc3VwcG9ydCA2NGJpdCBETUEuCiAJCSAqCi0JCSAqIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmxpbnV4LmlkZS80MjMyNgorCQkgKiBCSU9TIHZlcnNpb25zIGVhcmxpZXIgdGhhbiAxLjUgaGFkIHRoZSBNYW51ZmFjdHVyZXIgRE1JCisJCSAqIGZpZWxkcyBhcyAiTUlDUk8tU1RBUiBJTlRFUkFOVElPTkFMIENPLixMVEQiLgorCQkgKiBUaGlzIHNwZWxsaW5nIG1pc3Rha2Ugd2FzIGZpeGVkIGluIEJJT1MgdmVyc2lvbiAxLjUsIHNvCisJCSAqIDEuNSBhbmQgbGF0ZXIgaGF2ZSB0aGUgTWFudWZhY3R1cmVyIGFzCisJCSAqICJNSUNSTy1TVEFSIElOVEVSTkFUSU9OQUwgQ08uLExURCIuCisJCSAqIFNvIHRyeSB0byBtYXRjaCBvbiBETUlfQk9BUkRfVkVORE9SIG9mICJNSUNSTy1TVEFSIElOVEVSIi4KKwkJICoKKwkJICogQklPUyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gMS45IGhhZCBhIEJvYXJkIFByb2R1Y3QgTmFtZQorCQkgKiBETUkgZmllbGQgb2YgIk1TLTczNzYiLiBUaGlzIHdhcyBjaGFuZ2VkIHRvIGJlCisJCSAqICJLOUEyIFBsYXRpbnVtIChNUy03Mzc2KSIgaW4gdmVyc2lvbiAxLjksIGJ1dCB3ZSBjYW4gc3RpbGwKKwkJICogbWF0Y2ggb24gRE1JX0JPQVJEX05BTUUgb2YgIk1TLTczNzYiLgogCQkgKi8KIAkJewotCQkJLmlkZW50ID0gIkdpZ2FieXRlIEdBLU1BNjlWTS1TMiIsCisJCQkuaWRlbnQgPSAiTVNJIEs5QTIgUGxhdGludW0iLAogCQkJLm1hdGNoZXMgPSB7CiAJCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCi0JCQkJCSAgIkdpZ2FieXRlIFRlY2hub2xvZ3kgQ28uLCBMdGQuIiksCi0JCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiR0EtTUE2OVZNLVMyIiksCisJCQkJCSAgIk1JQ1JPLVNUQVIgSU5URVIiKSwKKwkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJNUy03Mzc2IiksCiAJCQl9LAogCQl9LAogCQl7IH0KIAl9OwogCWNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICptYXRjaDsKKwlpbnQgeWVhciwgbW9udGgsIGRhdGU7CisJY2hhciBidWZbOV07CiAKIAltYXRjaCA9IGRtaV9maXJzdF9tYXRjaChzeXNpZHMpOwogCWlmIChwZGV2LT5idXMtPm51bWJlciAhPSAwIHx8IHBkZXYtPmRldmZuICE9IFBDSV9ERVZGTigweDEyLCAwKSB8fAogCSAgICAhbWF0Y2gpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChtYXRjaC0+ZHJpdmVyX2RhdGEpIHsKLQkJaW50IHllYXIsIG1vbnRoLCBkYXRlOwotCQljaGFyIGJ1Zls5XTsKKwlpZiAoIW1hdGNoLT5kcml2ZXJfZGF0YSkKKwkJZ290byBlbmFibGVfNjRiaXQ7CiAKLQkJZG1pX2dldF9kYXRlKERNSV9CSU9TX0RBVEUsICZ5ZWFyLCAmbW9udGgsICZkYXRlKTsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwNGQlMDJkJTAyZCIsIHllYXIsIG1vbnRoLCBkYXRlKTsKKwlkbWlfZ2V0X2RhdGUoRE1JX0JJT1NfREFURSwgJnllYXIsICZtb250aCwgJmRhdGUpOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDRkJTAyZCUwMmQiLCB5ZWFyLCBtb250aCwgZGF0ZSk7CiAKLQkJaWYgKHN0cmNtcChidWYsIG1hdGNoLT5kcml2ZXJfZGF0YSkgPj0gMCkKLQkJCXJldHVybiBmYWxzZTsKLQorCWlmIChzdHJjbXAoYnVmLCBtYXRjaC0+ZHJpdmVyX2RhdGEpID49IDApCisJCWdvdG8gZW5hYmxlXzY0Yml0OworCWVsc2UgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiBCSU9TIHRvbyBvbGQsICIKIAkJCSAgICJmb3JjaW5nIDMyYml0IERNQSwgdXBkYXRlIEJJT1NcbiIsIG1hdGNoLT5pZGVudCk7Ci0JfSBlbHNlCi0JCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcGRldi0+ZGV2LCAiJXM6IHRoaXMgYm9hcmQgY2FuJ3QgIgotCQkJICAgImRvIDY0Yml0IERNQSwgZm9yY2luZyAzMmJpdFxuIiwgbWF0Y2gtPmlkZW50KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAorZW5hYmxlXzY0Yml0OgorCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcGRldi0+ZGV2LCAiJXM6IGVuYWJsaW5nIDY0Yml0IERNQVxuIiwKKwkJICAgbWF0Y2gtPmlkZW50KTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjg1OCw2ICsyOTE1LDU1IEBACiAJcmV0dXJuIHBkZXYtPmJ1cy0+bnVtYmVyID09ICh2YWwgPj4gOCkgJiYgcGRldi0+ZGV2Zm4gPT0gKHZhbCAmIDB4ZmYpOwogfQogCisjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCitzdGF0aWMgdm9pZCBhaGNpX2d0Zl9maWx0ZXJfd29ya2Fyb3VuZChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIHN5c2lkc1tdID0geworCQkvKgorCQkgKiBBc3BpcmUgMzgxMFQgaXNzdWVzIGEgYnVuY2ggb2YgU0FUQSBlbmFibGUgY29tbWFuZHMKKwkJICogdmlhIF9HVEYgaW5jbHVkaW5nIGFuIGludmFsaWQgb25lIGFuZCBvbmUgd2hpY2ggaXMKKwkJICogcmVqZWN0ZWQgYnkgdGhlIGRldmljZS4gIEFtb25nIHRoZSBzdWNjZXNzZnVsIG9uZXMKKwkJICogaXMgRlBETUEgbm9uLXplcm8gb2Zmc2V0IGVuYWJsZSB3aGljaCB3aGVuIGVuYWJsZWQKKwkJICogb25seSBvbiB0aGUgZHJpdmUgc2lkZSBsZWFkcyB0byBOQ1EgY29tbWFuZAorCQkgKiBmYWlsdXJlcy4gIEZpbHRlciBpdCBvdXQuCisJCSAqLworCQl7CisJCQkuaWRlbnQgPSAiQXNwaXJlIDM4MTBUIiwKKwkJCS5tYXRjaGVzID0geworCQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFzcGlyZSAzODEwVCIpLAorCQkJfSwKKwkJCS5kcml2ZXJfZGF0YSA9ICh2b2lkICopQVRBX0FDUElfRklMVEVSX0ZQRE1BX09GRlNFVCwKKwkJfSwKKwkJeyB9CisJfTsKKwljb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pID0gZG1pX2ZpcnN0X21hdGNoKHN5c2lkcyk7CisJdW5zaWduZWQgaW50IGZpbHRlcjsKKwlpbnQgaTsKKworCWlmICghZG1pKQorCQlyZXR1cm47CisKKwlmaWx0ZXIgPSAodW5zaWduZWQgbG9uZylkbWktPmRyaXZlcl9kYXRhOworCWRldl9wcmludGsoS0VSTl9JTkZPLCBob3N0LT5kZXYsCisJCSAgICJhcHBseWluZyBleHRyYSBBQ1BJIF9HVEYgZmlsdGVyIDB4JXggZm9yICVzXG4iLAorCQkgICBmaWx0ZXIsIGRtaS0+aWRlbnQpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbaV07CisJCXN0cnVjdCBhdGFfbGluayAqbGluazsKKwkJc3RydWN0IGF0YV9kZXZpY2UgKmRldjsKKworCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkKKwkJCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpCisJCQkJZGV2LT5ndGZfZmlsdGVyIHw9IGZpbHRlcjsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGFoY2lfZ3RmX2ZpbHRlcl93b3JrYXJvdW5kKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKK3t9CisjZW5kaWYKKwogc3RhdGljIGludCBhaGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwpAQCAtMjkyNiw5ICszMDMyLDkgQEAKIAlpZiAoYm9hcmRfaWQgPT0gYm9hcmRfYWhjaV9zYjcwMCAmJiBwZGV2LT5yZXZpc2lvbiA+PSAweDQwKQogCQlocHJpdi0+ZmxhZ3MgJj0gfkFIQ0lfSEZMQUdfSUdOX1NFUlJfSU5URVJOQUw7CiAKLQkvKiBhcHBseSBzYjYwMCAzMmJpdCBvbmx5IHF1aXJrICovCi0JaWYgKGFoY2lfc2I2MDBfMzJiaXRfb25seShwZGV2KSkKLQkJaHByaXYtPmZsYWdzIHw9IEFIQ0lfSEZMQUdfMzJCSVRfT05MWTsKKwkvKiBvbmx5IHNvbWUgU0I2MDBzIGNhbiBkbyA2NGJpdCBETUEgKi8KKwlpZiAoYWhjaV9zYjYwMF9lbmFibGVfNjRiaXQocGRldikpCisJCWhwcml2LT5mbGFncyAmPSB+QUhDSV9IRkxBR18zMkJJVF9PTkxZOwogCiAJaWYgKChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX05PX01TSSkgfHwgcGNpX2VuYWJsZV9tc2kocGRldikpCiAJCXBjaV9pbnR4KHBkZXYsIDEpOwpAQCAtMzAyMyw2ICszMTI5LDkgQEAKIAkvKiBhcHBseSB3b3JrYXJvdW5kIGZvciBBU1VTIFA1VyBESCBEZWx1eGUgbWFpbmJvYXJkICovCiAJYWhjaV9wNXdkaF93b3JrYXJvdW5kKGhvc3QpOwogCisJLyogYXBwbHkgZ3RmIGZpbHRlciBxdWlyayAqLworCWFoY2lfZ3RmX2ZpbHRlcl93b3JrYXJvdW5kKGhvc3QpOworCiAJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCiAJcmMgPSBhaGNpX2NvbmZpZ3VyZV9kbWFfbWFza3MocGRldiwgaHByaXYtPmNhcCAmIEhPU1RfQ0FQXzY0KTsKIAlpZiAocmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwppbmRleCAwMTk2NGI2Li5iMDg4MmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKQEAgLTIwLDE5ICsyMCw5IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAKLWVudW0gewotCUFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSCT0gMSA8PCAwLAotCUFUQV9BQ1BJX0ZJTFRFUl9MT0NLCT0gMSA8PCAxLAotCUFUQV9BQ1BJX0ZJTFRFUl9ESVBNCT0gMSA8PCAyLAotCi0JQVRBX0FDUElfRklMVEVSX0RFRkFVTFQJPSBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUiB8Ci0JCQkJICBBVEFfQUNQSV9GSUxURVJfTE9DSyB8Ci0JCQkJICBBVEFfQUNQSV9GSUxURVJfRElQTSwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX2FjcGlfZ3RmX2ZpbHRlciA9IEFUQV9BQ1BJX0ZJTFRFUl9ERUZBVUxUOwordW5zaWduZWQgaW50IGF0YV9hY3BpX2d0Zl9maWx0ZXIgPSBBVEFfQUNQSV9GSUxURVJfREVGQVVMVDsKIG1vZHVsZV9wYXJhbV9uYW1lZChhY3BpX2d0Zl9maWx0ZXIsIGF0YV9hY3BpX2d0Zl9maWx0ZXIsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFjcGlfZ3RmX2ZpbHRlciwgImZpbHRlciBtYXNrIGZvciBBQ1BJIF9HVEYgY29tbWFuZHMsIHNldCB0byBmaWx0ZXIgb3V0ICgweDE9c2V0IHhmZXJtb2RlLCAweDI9bG9jay9mcmVlemUgbG9jaywgMHg0PURJUE0pIik7CitNT0RVTEVfUEFSTV9ERVNDKGFjcGlfZ3RmX2ZpbHRlciwgImZpbHRlciBtYXNrIGZvciBBQ1BJIF9HVEYgY29tbWFuZHMsIHNldCB0byBmaWx0ZXIgb3V0ICgweDE9c2V0IHhmZXJtb2RlLCAweDI9bG9jay9mcmVlemUgbG9jaywgMHg0PURJUE0sIDB4OD1GUERNQSBub24temVybyBvZmZzZXQsIDB4MTA9RlBETUEgRE1BIFNldHVwIEZJUyBhdXRvLWFjdGl2YXRlKSIpOwogCiAjZGVmaW5lIE5PX1BPUlRfTVVMVAkJMHhmZmZmCiAjZGVmaW5lIFNBVEFfQURSKHJvb3QsIHBtcCkJKCgocm9vdCkgPDwgMTYpIHwgKHBtcCkpCkBAIC02MTMsMTAgKzYwMywxMSBAQAogCXRmLT5jb21tYW5kID0gZ3RmLT50Zls2XTsJLyogMHgxZjcgKi8KIH0KIAotc3RhdGljIGludCBhdGFfYWNwaV9maWx0ZXJfdGYoY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsCitzdGF0aWMgaW50IGF0YV9hY3BpX2ZpbHRlcl90ZihzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICpwdGYpCiB7Ci0JaWYgKGF0YV9hY3BpX2d0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUikgeworCWlmIChkZXYtPmd0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUikgewogCQkvKiBsaWJhdGEgZG9lc24ndCB1c2UgQUNQSSB0byBjb25maWd1cmUgdHJhbnNmZXIgbW9kZS4KIAkJICogSXQgd2lsbCBvbmx5IGNvbmZ1c2UgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBTa2lwLgogCQkgKi8KQEAgLTYyNSw3ICs2MTYsNyBAQAogCQkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKGF0YV9hY3BpX2d0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfTE9DSykgeworCWlmIChkZXYtPmd0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfTE9DSykgewogCQkvKiBCSU9TIHdyaXRlcnMsIHNvcnJ5IGJ1dCB3ZSBkb24ndCB3YW5uYSBsb2NrCiAJCSAqIGZlYXR1cmVzIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IHNhaWQgc28uCiAJCSAqLwpAQCAtNjQ3LDEyICs2MzgsMjMgQEAKIAkJCXJldHVybiAxOwogCX0KIAotCWlmIChhdGFfYWNwaV9ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0RJUE0pIHsKKwlpZiAodGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9TRVRfRkVBVFVSRVMgJiYKKwkgICAgdGYtPmZlYXR1cmUgPT0gU0VURkVBVFVSRVNfU0FUQV9FTkFCTEUpIHsKIAkJLyogaW5oaWJpdCBlbmFibGluZyBESVBNICovCi0JCWlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9GRUFUVVJFUyAmJgotCQkgICAgdGYtPmZlYXR1cmUgPT0gU0VURkVBVFVSRVNfU0FUQV9FTkFCTEUgJiYKKwkJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9ESVBNICYmCiAJCSAgICB0Zi0+bnNlY3QgPT0gU0FUQV9ESVBNKQogCQkJcmV0dXJuIDE7CisKKwkJLyogaW5oaWJpdCBGUERNQSBub24temVybyBvZmZzZXQgKi8KKwkJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9PRkZTRVQgJiYKKwkJICAgICh0Zi0+bnNlY3QgPT0gU0FUQV9GUERNQV9PRkZTRVQgfHwKKwkJICAgICB0Zi0+bnNlY3QgPT0gU0FUQV9GUERNQV9JTl9PUkRFUikpCisJCQlyZXR1cm4gMTsKKworCQkvKiBpbmhpYml0IEZQRE1BIGF1dG8gYWN0aXZhdGlvbiAqLworCQlpZiAoZGV2LT5ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0ZQRE1BX0FBICYmCisJCSAgICB0Zi0+bnNlY3QgPT0gU0FUQV9GUERNQV9BQSkKKwkJCXJldHVybiAxOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzA0LDcgKzcwNiw3IEBACiAJCXBwdGYgPSAmcHRmOwogCX0KIAotCWlmICghYXRhX2FjcGlfZmlsdGVyX3RmKCZ0ZiwgcHB0ZikpIHsKKwlpZiAoIWF0YV9hY3BpX2ZpbHRlcl90ZihkZXYsICZ0ZiwgcHB0ZikpIHsKIAkJcnRmID0gdGY7CiAJCWVycl9tYXNrID0gYXRhX2V4ZWNfaW50ZXJuYWwoZGV2LCAmcnRmLCBOVUxMLAogCQkJCQkgICAgIERNQV9OT05FLCBOVUxMLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDBkZGFmNDMuLmRjNzI2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNDkxOSwxMCArNDkxOSwxMSBAQAogICovCiB2b2lkIGF0YV9xY19mcmVlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwogCXVuc2lnbmVkIGludCB0YWc7CiAKIAlXQVJOX09OX09OQ0UocWMgPT0gTlVMTCk7IC8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCisJYXAgPSBxYy0+YXA7CiAKIAlxYy0+ZmxhZ3MgPSAwOwogCXRhZyA9IHFjLT50YWc7CkBAIC00OTM0LDExICs0OTM1LDEzIEBACiAKIHZvaWQgX19hdGFfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwotCXN0cnVjdCBhdGFfbGluayAqbGluayA9IHFjLT5kZXYtPmxpbms7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CiAKIAlXQVJOX09OX09OQ0UocWMgPT0gTlVMTCk7IC8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCiAJV0FSTl9PTl9PTkNFKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKTsKKwlhcCA9IHFjLT5hcDsKKwlsaW5rID0gcWMtPmRldi0+bGluazsKIAogCWlmIChsaWtlbHkocWMtPmZsYWdzICYgQVRBX1FDRkxBR19ETUFNQVApKQogCQlhdGFfc2dfY2xlYW4ocWMpOwpAQCAtNTAyOCwxMiArNTAzMSwxNCBAQAogCQkJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfRkFJTEVEOwogCiAJCWlmICh1bmxpa2VseShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0ZBSUxFRCkpIHsKLQkJCWlmICghYXRhX3RhZ19pbnRlcm5hbChxYy0+dGFnKSkgewotCQkJCS8qIGFsd2F5cyBmaWxsIHJlc3VsdCBURiBmb3IgZmFpbGVkIHFjICovCi0JCQkJZmlsbF9yZXN1bHRfdGYocWMpOworCQkJLyogYWx3YXlzIGZpbGwgcmVzdWx0IFRGIGZvciBmYWlsZWQgcWMgKi8KKwkJCWZpbGxfcmVzdWx0X3RmKHFjKTsKKworCQkJaWYgKCFhdGFfdGFnX2ludGVybmFsKHFjLT50YWcpKQogCQkJCWF0YV9xY19zY2hlZHVsZV9laChxYyk7Ci0JCQkJcmV0dXJuOwotCQkJfQorCQkJZWxzZQorCQkJCV9fYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJCXJldHVybjsKIAkJfQogCiAJCVdBUk5fT05fT05DRShhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTik7CkBAIC01NTkxLDYgKzU1OTYsOSBAQAogCiAJCWRldi0+bGluayA9IGxpbms7CiAJCWRldi0+ZGV2bm8gPSBkZXYgLSBsaW5rLT5kZXZpY2U7CisjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCisJCWRldi0+Z3RmX2ZpbHRlciA9IGF0YV9hY3BpX2d0Zl9maWx0ZXI7CisjZW5kaWYKIAkJYXRhX2Rldl9pbml0KGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCBhMDQ0ODhmLi5iYmEyYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtMjY2NywxNCArMjY2NywxNCBAQAogCQlkZXYtPnBpb19tb2RlID0gWEZFUl9QSU9fMDsKIAkJZGV2LT5mbGFncyAmPSB+QVRBX0RGTEFHX1NMRUVQSU5HOwogCi0JCWlmICghYXRhX3BoeXNfbGlua19vZmZsaW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKSB7Ci0JCQkvKiBhcHBseSBjbGFzcyBvdmVycmlkZSAqLwotCQkJaWYgKGxmbGFncyAmIEFUQV9MRkxBR19BU1NVTUVfQVRBKQotCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX0FUQTsKLQkJCWVsc2UgaWYgKGxmbGFncyAmIEFUQV9MRkxBR19BU1NVTUVfU0VNQikKLQkJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9TRU1CX1VOU1VQOwotCQl9IGVsc2UKLQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CisJCWlmIChhdGFfcGh5c19saW5rX29mZmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpCisJCQljb250aW51ZTsKKworCQkvKiBhcHBseSBjbGFzcyBvdmVycmlkZSAqLworCQlpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9BVEEpCisJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9BVEE7CisJCWVsc2UgaWYgKGxmbGFncyAmIEFUQV9MRkxBR19BU1NVTUVfU0VNQikKKwkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX1NFTUJfVU5TVVA7CiAJfQogCiAJLyogcmVjb3JkIGN1cnJlbnQgbGluayBzcGVlZCAqLwpAQCAtMjcxMywzNCArMjcxMyw0OCBAQAogCWFwLT5wZmxhZ3MgJj0gfkFUQV9QRkxBR19FSF9QRU5ESU5HOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobGluay0+YXAtPmxvY2ssIGZsYWdzKTsKIAotCS8qIE1ha2Ugc3VyZSBvbmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQgY29ycmVzcG9uZC4KKwkvKgorCSAqIE1ha2Ugc3VyZSBvbmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQgY29ycmVzcG9uZC4KIAkgKiBIb3RwbHVnIGNvdWxkIGhhdmUgaGFwcGVuZWQgZHVyaW5nIHJlc2V0IGFuZCBzb21lCiAJICogY29udHJvbGxlcnMgZmFpbCB0byB3YWl0IHdoaWxlIGEgZHJpdmUgaXMgc3Bpbm5pbmcgdXAgYWZ0ZXIKIAkgKiBiZWluZyBob3RwbHVnZ2VkIGNhdXNpbmcgbWlzZGV0ZWN0aW9uLiAgQnkgY3Jvc3MgY2hlY2tpbmcKLQkgKiBsaW5rIG9ubGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCwgdGhvc2UgY29uZGl0aW9ucwotCSAqIGNhbiBiZSByZWxpYWJseSBkZXRlY3RlZCBhbmQgcmV0cmllZC4KKwkgKiBsaW5rIG9uL29mZmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQsIHRob3NlCisJICogY29uZGl0aW9ucyBjYW4gYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYW5kIHJldHJpZWQuCiAJICovCiAJbnJfdW5rbm93biA9IDA7CiAJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkgewotCQkvKiBjb252ZXJ0IGFsbCBBVEFfREVWX1VOS05PV04gdG8gQVRBX0RFVl9OT05FICovCi0JCWlmIChjbGFzc2VzW2Rldi0+ZGV2bm9dID09IEFUQV9ERVZfVU5LTk9XTikgewotCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKLQkJCWlmIChhdGFfcGh5c19saW5rX29ubGluZShhdGFfZGV2X3BoeXNfbGluayhkZXYpKSkKKwkJaWYgKGF0YV9waHlzX2xpbmtfb25saW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKSB7CisJCQlpZiAoY2xhc3Nlc1tkZXYtPmRldm5vXSA9PSBBVEFfREVWX1VOS05PV04pIHsKKwkJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsICJsaW5rIG9ubGluZSAiCisJCQkJCSAgICAgICAiYnV0IGRldmljZSBtaXNjbGFzc2lmZWRcbiIpOworCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CiAJCQkJbnJfdW5rbm93bisrOworCQkJfQorCQl9IGVsc2UgaWYgKGF0YV9waHlzX2xpbmtfb2ZmbGluZShhdGFfZGV2X3BoeXNfbGluayhkZXYpKSkgeworCQkJaWYgKGF0YV9jbGFzc19lbmFibGVkKGNsYXNzZXNbZGV2LT5kZXZub10pKQorCQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgImxpbmsgb2ZmbGluZSwgIgorCQkJCQkgICAgICAgImNsZWFyaW5nIGNsYXNzICVkIHRvIE5PTkVcbiIsCisJCQkJCSAgICAgICBjbGFzc2VzW2Rldi0+ZGV2bm9dKTsKKwkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CisJCX0gZWxzZSBpZiAoY2xhc3Nlc1tkZXYtPmRldm5vXSA9PSBBVEFfREVWX1VOS05PV04pIHsKKwkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgImxpbmsgc3RhdHVzIHVua25vd24sICIKKwkJCQkgICAgICAgImNsZWFyaW5nIFVOS05PV04gdG8gTk9ORVxuIik7CisJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOwogCQl9CiAJfQogCiAJaWYgKGNsYXNzaWZ5ICYmIG5yX3Vua25vd24pIHsKIAkJaWYgKHRyeSA8IG1heF90cmllcykgewogCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywgImxpbmsgb25saW5lIGJ1dCAiCi0JCQkJICAgICAgICJkZXZpY2UgbWlzY2xhc3NpZmllZCwgcmV0cnlpbmdcbiIpOworCQkJCQkiJWQgZGV2aWNlcyBtaXNjbGFzc2lmaWVkLCByZXRyeWluZ1xuIiwKKwkJCQkJbnJfdW5rbm93bik7CiAJCQlmYWlsZWRfbGluayA9IGxpbms7CiAJCQlyYyA9IC1FQUdBSU47CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywKLQkJCSAgICAgICAibGluayBvbmxpbmUgYnV0IGRldmljZSBtaXNjbGFzc2lmaWVkLCAiCi0JCQkgICAgICAgImRldmljZSBkZXRlY3Rpb24gbWlnaHQgZmFpbFxuIik7CisJCQkJImxpbmsgb25saW5lIGJ1dCAlZCBkZXZpY2VzIG1pc2NsYXNzaWZpZWQsICIKKwkJCQkiZGV2aWNlIGRldGVjdGlvbiBtaWdodCBmYWlsXG4iLCBucl91bmtub3duKTsKIAl9CiAKIAkvKiByZXNldCBzdWNjZXNzZnVsLCBzY2hlZHVsZSByZXZhbGlkYXRpb24gKi8KQEAgLTI5NjcsMTIgKzI5ODEsMTQgQEAKIAkgKiBkZXZpY2UgZGV0ZWN0aW9uIG1lc3NhZ2VzIGJhY2t3YXJkcy4KIAkgKi8KIAlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7Ci0JCWlmICghKG5ld19tYXNrICYgKDEgPDwgZGV2LT5kZXZubykpIHx8Ci0JCSAgICBkZXYtPmNsYXNzID09IEFUQV9ERVZfUE1QKQorCQlpZiAoIShuZXdfbWFzayAmICgxIDw8IGRldi0+ZGV2bm8pKSkKIAkJCWNvbnRpbnVlOwogCiAJCWRldi0+Y2xhc3MgPSBlaGMtPmNsYXNzZXNbZGV2LT5kZXZub107CiAKKwkJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9QTVApCisJCQljb250aW51ZTsKKwogCQllaGMtPmkuZmxhZ3MgfD0gQVRBX0VISV9QUklOVElORk87CiAJCXJjID0gYXRhX2Rldl9jb25maWd1cmUoZGV2KTsKIAkJZWhjLT5pLmZsYWdzICY9IH5BVEFfRUhJX1BSSU5USU5GTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKaW5kZXggYmU4ZTI2Mi4uODIzZTYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLmgKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKQEAgLTExOCw2ICsxMTgsOCBAQAogCiAvKiBsaWJhdGEtYWNwaS5jICovCiAjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCitleHRlcm4gdW5zaWduZWQgaW50IGF0YV9hY3BpX2d0Zl9maWx0ZXI7CisKIGV4dGVybiB2b2lkIGF0YV9hY3BpX2Fzc29jaWF0ZV9zYXRhX3BvcnQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfYWNwaV9hc3NvY2lhdGUoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKIGV4dGVybiB2b2lkIGF0YV9hY3BpX2Rpc3NvY2lhdGUoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCmluZGV4IGZjOWM1ZDYuLjE0MzJkYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAKIAlpZiAocHJpbnRfaW5mbyAmJiBhZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJICYmICFhbGlfYXRhcGlfZG1hKSB7CiAJCWF0YV9kZXZfcHJpbnRrKGFkZXYsIEtFUk5fV0FSTklORywKLQkJCSAgICAgICAiV0FSTklORzogQVRBUEkgRE1BIGRpc2FibGVkIGZvciByZWxpYWJsaXR5IGlzc3Vlcy4gIEl0IGNhbiBiZSBlbmFibGVkXG4iKTsKKwkJCSAgICAgICAiV0FSTklORzogQVRBUEkgRE1BIGRpc2FibGVkIGZvciByZWxpYWJpbGl0eSBpc3N1ZXMuICBJdCBjYW4gYmUgZW5hYmxlZFxuIik7CiAJCWF0YV9kZXZfcHJpbnRrKGFkZXYsIEtFUk5fV0FSTklORywKIAkJCSAgICAgICAiV0FSTklORzogdmlhIHBhdGFfYWxpLmF0YXBpX2RtYSBtb2RwYXJhbSBvciBjb3JyZXNwb25kaW5nIHN5c2ZzIG5vZGUuXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwppbmRleCBhYTRiM2Y2Li5hZTQ0NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFKSwgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSksIH0sCiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9JREUpLCB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUpLCB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERSksIH0sCiAKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdHA4Njd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0cDg2N3guYwppbmRleCA3OTkwZGU5Li42ZmU3ZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0cDg2N3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0cDg2N3guYwpAQCAtMTE4LDIwICsxMTgsMTMgQEAKIAlpbnQJCXBjaTY2bWh6OwogfTsKIAotc3RhdGljIGlubGluZSB1OCBhdHA4Njd4X3NwZWVkX3RvX21vZGUodTggc3BlZWQpCi17Ci0JcmV0dXJuIHNwZWVkIC0gWEZFUl9VRE1BXzAgKyAxOwotfQotCiBzdGF0aWMgdm9pZCBhdHA4Njd4X3NldF9kbWFtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlzdHJ1Y3QgYXRwODY3eF9wcml2ICpkcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdTggc3BlZWQgPSBhZGV2LT5kbWFfbW9kZTsKIAl1OCBiOwotCXU4IG1vZGU7Ci0KLQltb2RlID0gYXRwODY3eF9zcGVlZF90b19tb2RlKHNwZWVkKTsKKwl1OCBtb2RlID0gc3BlZWQgLSBYRkVSX1VETUFfMCArIDE7CiAKIAkvKgogCSAqIERvYyA2LjYuOTogZGVjcmVhc2UgdGhlIHVkbWEgbW9kZSB2YWx1ZSBieSAxIGZvciBzYWZlciBVRE1BIHNwZWVkCkBAIC0xNTYsMjUgKzE0OSwzOCBAQAogCWlvd3JpdGU4KGIsIGRwLT5kbWFfbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKHVuc2lnbmVkIGludCBjbGspCitzdGF0aWMgaW50IGF0cDg2N3hfZ2V0X2FjdGl2ZV9jbG9ja3Nfc2hpZnRlZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCXVuc2lnbmVkIGludCBjbGspCiB7CisJc3RydWN0IGF0cDg2N3hfcHJpdiAqZHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGNoYXIgY2xvY2tzID0gY2xrOwogCisJLyoKKwkgKiBEb2MgNi42Ljk6IGluY3JlYXNlIHRoZSBjbG9jayB2YWx1ZSBieSAxIGZvciBzYWZlciBQSU8gc3BlZWQKKwkgKiBvbiA2Nk1IeiBidXMKKwkgKi8KKwlpZiAoZHAtPnBjaTY2bWh6KQorCQljbG9ja3MrKzsKKwogCXN3aXRjaCAoY2xvY2tzKSB7CiAJY2FzZSAwOgogCQljbG9ja3MgPSAxOwogCQlicmVhazsKLQljYXNlIDEgLi4uIDc6Ci0JCWJyZWFrOwotCWNhc2UgOCAuLi4gMTI6Ci0JCWNsb2NrcyA9IDc7CisJY2FzZSAxIC4uLiA2OgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJBVFA4NjdYOiBhY3RpdmUgJWRjbGsgaXMgaW52YWxpZC4gIgotCQkJIlVzaW5nIGRlZmF1bHQgOGNsay5cbiIsIGNsayk7Ci0JCWNsb2NrcyA9IDA7CS8qIDggY2xrICovCisJCQkiVXNpbmcgMTJjbGsuXG4iLCBjbGspOworCWNhc2UgOSAuLi4gMTI6CisJCWNsb2NrcyA9IDc7CS8qIDEyIGNsayAqLwogCQlicmVhazsKKwljYXNlIDc6CisJY2FzZSA4OgkvKiBkZWZhdWx0IDggY2xrICovCisJCWNsb2NrcyA9IDA7CisJCWdvdG8gYWN0aXZlX2Nsb2NrX3NoaWZ0X2RvbmU7CiAJfQorCithY3RpdmVfY2xvY2tfc2hpZnRfZG9uZToKIAlyZXR1cm4gY2xvY2tzIDw8IEFUUDg2N1hfSU9fUElPU1BEX0FDVElWRV9TSElGVDsKIH0KIApAQCAtMTg4LDIwICsxOTQsMjAgQEAKIAkJYnJlYWs7CiAJY2FzZSAxIC4uLiAxMToKIAkJYnJlYWs7Ci0JY2FzZSAxMjoKLQkJY2xvY2tzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMzogY2FzZSAxNDoKLQkJLS1jbG9ja3M7CisJY2FzZSAxMzoKKwljYXNlIDE0OgorCQktLWNsb2NrczsJLyogYnkgdGhlIHNwZWMgKi8KIAkJYnJlYWs7CiAJY2FzZSAxNToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVRQODY3WDogcmVjb3ZlciAlZGNsayBpcyBpbnZhbGlkLiAiCi0JCQkiVXNpbmcgZGVmYXVsdCAxNWNsay5cbiIsIGNsayk7Ci0JCWNsb2NrcyA9IDA7CS8qIDEyIGNsayAqLworCQkJIlVzaW5nIGRlZmF1bHQgMTJjbGsuXG4iLCBjbGspOworCWNhc2UgMTI6CS8qIGRlZmF1bHQgMTIgY2xrICovCisJCWNsb2NrcyA9IDA7CiAJCWJyZWFrOwogCX0KKwogCXJldHVybiBjbG9ja3MgPDwgQVRQODY3WF9JT19QSU9TUERfUkVDT1ZFUl9TSElGVDsKIH0KIApAQCAtMjMwLDI1ICsyMzYsMzggQEAKIAkJYiA9IChiICYgfkFUUDg2N1hfSU9fRE1BTU9ERV9NU1RSX01BU0spOwogCWlvd3JpdGU4KGIsIGRwLT5kbWFfbW9kZSk7CiAKLQliID0gYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKHQuYWN0aXZlKSB8Ci0JCWF0cDg2N3hfZ2V0X3JlY292ZXJfY2xvY2tzX3NoaWZ0ZWQodC5yZWNvdmVyKTsKLQlpZiAoZHAtPnBjaTY2bWh6KQotCQliICs9IDB4MTA7CisJYiA9IGF0cDg2N3hfZ2V0X2FjdGl2ZV9jbG9ja3Nfc2hpZnRlZChhcCwgdC5hY3RpdmUpIHwKKwkgICAgYXRwODY3eF9nZXRfcmVjb3Zlcl9jbG9ja3Nfc2hpZnRlZCh0LnJlY292ZXIpOwogCiAJaWYgKGFkZXYtPmRldm5vICYgMSkKIAkJaW93cml0ZTgoYiwgZHAtPnNsYXZlX3Bpb3NwZCk7CiAJZWxzZQogCQlpb3dyaXRlOChiLCBkcC0+bXN0cl9waW9zcGQpOwogCi0JLyoKLQkgKiB1c2UgdGhlIHNhbWUgdmFsdWUgZm9yIGNvbWFuZCB0aW1pbmcgYXMgZm9yIFBJTyB0aW1pbWcKLQkgKi8KKwliID0gYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKGFwLCB0LmFjdDhiKSB8CisJICAgIGF0cDg2N3hfZ2V0X3JlY292ZXJfY2xvY2tzX3NoaWZ0ZWQodC5yZWM4Yik7CisKIAlpb3dyaXRlOChiLCBkcC0+ZWlnaHRiX3Bpb3NwZCk7CiB9CiAKK3N0YXRpYyBpbnQgYXRwODY3eF9jYWJsZV9vdmVycmlkZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FSVE9QICYmCisJCShwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY3QSB8fAorCQkgcGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2N0IpKSB7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdHA4Njd4X2NhYmxlX2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCXJldHVybiBBVEFfQ0JMX1BBVEE0MF9TSE9SVDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CisKKwlpZiAoYXRwODY3eF9jYWJsZV9vdmVycmlkZShwZGV2KSkKKwkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwX1NIT1JUOworCisJcmV0dXJuIEFUQV9DQkxfUEFUQV9VTks7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGF0cDg2N3hfc2h0ID0gewpAQCAtNDcxLDcgKzQ5MCw2IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODY3eCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYXRwODY3eF9vcHMsCiAJfTsKQEAgLTUxNSw2ICs1MzMsMjMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXRwODY3eF9yZWluaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWF0cDg2N3hfZml4dXAoaG9zdCk7CisKKwlhdGFfaG9zdF9yZXN1bWUoaG9zdCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0cDg2N3hfcGNpX3RibFtdID0gewogCXsgUENJX1ZERVZJQ0UoQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY3QSksCTAgfSwKIAl7IFBDSV9WREVWSUNFKEFSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2N0IpLAkwIH0sCkBAIC01MjYsNiArNTYxLDEwIEBACiAJLmlkX3RhYmxlIAk9IGF0cDg2N3hfcGNpX3RibCwKIAkucHJvYmUgCQk9IGF0cDg2N3hfaW5pdF9vbmUsCiAJLnJlbW92ZQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBhdGFfcGNpX2RldmljZV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXRwODY3eF9yZWluaXRfb25lLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhdHA4Njd4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCmluZGV4IGY0OTgxNGQuLjNiYmVkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwpAQCAtMjM1LDggKzIzNSw3IEBACiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwotCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZzYzEyMDBfc2h0LCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDQ1NjU3Y2EuLjg4OTg0YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJeyAidnQ4MjUxIiwJUENJX0RFVklDRV9JRF9WSUFfODI1MSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAiY3g3MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCiAJeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKLQl7ICJ2dDY0MTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDE1LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAorCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweGZmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCiAJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IDE3ZjlmZjkuLjZmNTA5M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTEzODIsNiArMTM4MiwyNSBAQAogCSAqLwogCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0RFTEFZRURfRUgpCiAJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKworCS8qIFBJTyBjb21tYW5kcyBuZWVkIGV4Y2x1c2l2ZSBsaW5rOiBubyBvdGhlciBjb21tYW5kcyBbRE1BIG9yIFBJT10KKwkgKiBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKwkgKiBzZXQgZXhjbF9saW5rIHdoZW4gd2Ugd2FudCB0byBzZW5kIGEgUElPIGNvbW1hbmQgaW4gRE1BIG1vZGUKKwkgKiBvciBhIG5vbi1OQ1EgY29tbWFuZCBpbiBOQ1EgbW9kZS4KKwkgKiBXaGVuIHdlIHJlY2VpdmUgYSBjb21tYW5kIGZyb20gdGhhdCBsaW5rLCBhbmQgdGhlcmUgYXJlIG5vCisJICogb3V0c3RhbmRpbmcgY29tbWFuZHMsIG1hcmsgYSBmbGFnIHRvIGNsZWFyIGV4Y2xfbGluayBhbmQgbGV0CisJICogdGhlIGNvbW1hbmQgZ28gdGhyb3VnaC4KKwkgKi8KKwlpZiAodW5saWtlbHkoYXAtPmV4Y2xfbGluaykpIHsKKwkJaWYgKGxpbmsgPT0gYXAtPmV4Y2xfbGluaykgeworCQkJaWYgKGFwLT5ucl9hY3RpdmVfbGlua3MpCisJCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCQkJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfQ0xFQVJfRVhDTDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwl9CisKIAkvKgogCSAqIElmIHRoZSBwb3J0IGlzIGNvbXBsZXRlbHkgaWRsZSwgdGhlbiBhbGxvdyB0aGUgbmV3IHFjLgogCSAqLwpAQCAtMTM5NSw4ICsxNDE0LDE0IEBACiAJICogZG9lc24ndCBhbGxvdyBpdC4KIAkgKi8KIAlpZiAoKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikgJiYKLQkgICAgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKSAmJiBhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCi0JCXJldHVybiAwOworCSAgICAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pKSB7CisJCWlmIChhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSB7CisJCQlhcC0+ZXhjbF9saW5rID0gbGluazsKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwkJfQorCX0KIAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCA4NmE0MDU4Li4xZWI0ZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0xNTk0LDkgKzE1OTQsMjEgQEAKIAkgICAgIWF0YV9kZXZfZW5hYmxlZChsaW5rLT5kZXZpY2UpKQogCQlzYXRhX2xpbmtfaGFyZHJlc2V0KGxpbmssIHNhdGFfZGViX3RpbWluZ19ob3RwbHVnLCBkZWFkbGluZSwKIAkJCQkgICAgTlVMTCwgTlVMTCk7Ci0JZWxzZSBpZiAoIShlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1FVSUVUKSkKLQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fSU5GTywKLQkJCQkibnY6IHNraXBwaW5nIGhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKwllbHNlIHsKKwkJY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nID0gc2F0YV9laGNfZGViX3RpbWluZyhlaGMpOworCQlpbnQgcmM7CisKKwkJaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkpCisJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9JTkZPLCAibnY6IHNraXBwaW5nICIKKwkJCQkJImhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKworCQkvKiBtYWtlIHN1cmUgdGhlIGxpbmsgaXMgb25saW5lICovCisJCXJjID0gc2F0YV9saW5rX3Jlc3VtZShsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKKwkJLyogd2hpbmUgYWJvdXQgcGh5IHJlc3VtZSBmYWlsdXJlIGJ1dCBwcm9jZWVkICovCisJCWlmIChyYyAmJiByYyAhPSAtRU9QTk9UU1VQUCkKKwkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsICJmYWlsZWQgdG8gcmVzdW1lICIKKwkJCQkJImxpbmsgKGVycm5vPSVkKVxuIiwgcmMpOworCX0KIAogCS8qIGRldmljZSBzaWduYXR1cmUgYWNxdWlzaXRpb24gaXMgdW5yZWxpYWJsZSAqLwogCXJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggYmRkNDNjNy4uMDJlZmQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC05Myw3ICs5Myw2IEBACiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NzM3MiksIHZ0NjQyMCB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCAweDUyODcpLCB2dDgyNTEgfSwgLyogMiBzYXRhIGNobmxzIChNYXN0ZXIvU2xhdmUpICovCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4OTAwMCksIHZ0ODI1MSB9LAotCXsgUENJX1ZERVZJQ0UoVklBLCAweDkwNDApLCB2dDgyNTEgfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA5NzNiZjJhLi42M2MxNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC02ODksMTUgKzY4OSwxOSBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkcml2ZXJfYWRkX2F0dHJzKCVzKSBmYWlsZWRcbiIsCiAJCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKIAl9Ci0JZXJyb3IgPSBhZGRfYmluZF9maWxlcyhkcnYpOwotCWlmIChlcnJvcikgewotCQkvKiBEaXR0byAqLwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhZGRfYmluZF9maWxlcyglcykgZmFpbGVkXG4iLAotCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CisKKwlpZiAoIWRydi0+c3VwcHJlc3NfYmluZF9hdHRycykgeworCQllcnJvciA9IGFkZF9iaW5kX2ZpbGVzKGRydik7CisJCWlmIChlcnJvcikgeworCQkJLyogRGl0dG8gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9iaW5kX2ZpbGVzKCVzKSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CisJCX0KIAl9CiAKIAlrb2JqZWN0X3VldmVudCgmcHJpdi0+a29iaiwgS09CSl9BREQpOwogCXJldHVybiAwOworCiBvdXRfdW5yZWdpc3RlcjoKIAlrZnJlZShkcnYtPnApOwogCWRydi0+cCA9IE5VTEw7CkBAIC03MjAsNyArNzI0LDggQEAKIAlpZiAoIWRydi0+YnVzKQogCQlyZXR1cm47CiAKLQlyZW1vdmVfYmluZF9maWxlcyhkcnYpOworCWlmICghZHJ2LT5zdXBwcmVzc19iaW5kX2F0dHJzKQorCQlyZW1vdmVfYmluZF9maWxlcyhkcnYpOwogCWRyaXZlcl9yZW1vdmVfYXR0cnMoZHJ2LT5idXMsIGRydik7CiAJZHJpdmVyX3JlbW92ZV9maWxlKGRydiwgJmRyaXZlcl9hdHRyX3VldmVudCk7CiAJa2xpc3RfcmVtb3ZlKCZkcnYtPnAtPmtub2RlX2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggZWQyZWJkMy4uZjM2Nzg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJCXB1dF9kcml2ZXIob3RoZXIpOwogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBEcml2ZXIgJyVzJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsICIKIAkJCSJhYm9ydGluZy4uLlxuIiwgZHJ2LT5uYW1lKTsKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJcmV0ID0gYnVzX2FkZF9kcml2ZXIoZHJ2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggZWQxNTZhMTMuLjRmYTk1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC01MjEsMTEgKzUyMSwxNSBAQAogewogCWludCByZXR2YWwsIGNvZGU7CiAKKwkvKiBtYWtlIHN1cmUgZHJpdmVyIHdvbid0IGhhdmUgYmluZC91bmJpbmQgYXR0cmlidXRlcyAqLworCWRydi0+ZHJpdmVyLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlOworCiAJLyogdGVtcG9yYXJ5IHNlY3Rpb24gdmlvbGF0aW9uIGR1cmluZyBwcm9iZSgpICovCiAJZHJ2LT5wcm9iZSA9IHByb2JlOwogCXJldHZhbCA9IGNvZGUgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKIAotCS8qIEZpeHVwIHRoYXQgc2VjdGlvbiB2aW9sYXRpb24sIGJlaW5nIHBhcmFub2lkIGFib3V0IGNvZGUgc2Nhbm5pbmcKKwkvKgorCSAqIEZpeHVwIHRoYXQgc2VjdGlvbiB2aW9sYXRpb24sIGJlaW5nIHBhcmFub2lkIGFib3V0IGNvZGUgc2Nhbm5pbmcKIAkgKiB0aGUgbGlzdCBvZiBkcml2ZXJzIGluIG9yZGVyIHRvIHByb2JlIG5ldyBkZXZpY2VzLiAgQ2hlY2sgdG8gc2VlCiAJICogaWYgdGhlIHByb2JlIHdhcyBzdWNjZXNzZnVsLCBhbmQgbWFrZSBzdXJlIGFueSBmb3JjZWQgcHJvYmVzIG9mCiAJICogbmV3IGRldmljZXMgZmFpbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IGUwZGM0MDcuLjhhYTI0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtNTExLDYgKzUxMSw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKKwl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSBmYWxzZTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QucHJldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDM4NTU2ZjYuLmE3NzA0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtNTEsOCArNTEsNiBAQAogewogCWludCByZXR2YWwgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIVxuIik7Ci0KIAlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKQogCQlyZXR2YWwgPSAtRUlOVkFMOwogCWVsc2UgaWYgKGRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24pCkBAIC05Myw4ICs5MSw2IEBACiAJd2FrZV91cF9hbGwoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSk7CiAKICBvdXQ6Ci0JZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIHJldHVybnMgJWQhXG4iLCByZXR2YWwpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9EQUM5NjAuYyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKaW5kZXggNmZhN2IwZi4uZWI0ZmExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9EQUM5NjAuYworKysgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtNjQyMiwxNiArNjQyMywxMCBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAotCi0vKgotICBEQUM5NjBfUHJvY1JlYWRTdGF0dXMgaW1wbGVtZW50cyByZWFkaW5nIC9wcm9jL3JkL3N0YXR1cy4KLSovCi0KLXN0YXRpYyBpbnQgREFDOTYwX1Byb2NSZWFkU3RhdHVzKGNoYXIgKlBhZ2UsIGNoYXIgKipTdGFydCwgb2ZmX3QgT2Zmc2V0LAotCQkJCSBpbnQgQ291bnQsIGludCAqRU9GLCB2b2lkICpEYXRhKQorc3RhdGljIGludCBkYWM5NjBfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKICAgdW5zaWduZWQgY2hhciAqU3RhdHVzTWVzc2FnZSA9ICJPS1xuIjsKLSAgaW50IENvbnRyb2xsZXJOdW1iZXIsIEJ5dGVzQXZhaWxhYmxlOworICBpbnQgQ29udHJvbGxlck51bWJlcjsKICAgZm9yIChDb250cm9sbGVyTnVtYmVyID0gMDsKICAgICAgICBDb250cm9sbGVyTnVtYmVyIDwgREFDOTYwX0NvbnRyb2xsZXJDb3VudDsKICAgICAgICBDb250cm9sbGVyTnVtYmVyKyspCkBAIC02NDQ0LDUyICs2NDM5LDQ5IEBACiAJICBicmVhazsKIAl9CiAgICAgfQotICBCeXRlc0F2YWlsYWJsZSA9IHN0cmxlbihTdGF0dXNNZXNzYWdlKSAtIE9mZnNldDsKLSAgaWYgKENvdW50ID49IEJ5dGVzQXZhaWxhYmxlKQotICAgIHsKLSAgICAgIENvdW50ID0gQnl0ZXNBdmFpbGFibGU7Ci0gICAgICAqRU9GID0gdHJ1ZTsKLSAgICB9Ci0gIGlmIChDb3VudCA8PSAwKSByZXR1cm4gMDsKLSAgKlN0YXJ0ID0gUGFnZTsKLSAgbWVtY3B5KFBhZ2UsICZTdGF0dXNNZXNzYWdlW09mZnNldF0sIENvdW50KTsKLSAgcmV0dXJuIENvdW50OworICBzZXFfcHV0cyhtLCBTdGF0dXNNZXNzYWdlKTsKKyAgcmV0dXJuIDA7CiB9CiAKLQotLyoKLSAgREFDOTYwX1Byb2NSZWFkSW5pdGlhbFN0YXR1cyBpbXBsZW1lbnRzIHJlYWRpbmcgL3Byb2MvcmQvY04vaW5pdGlhbF9zdGF0dXMuCi0qLwotCi1zdGF0aWMgaW50IERBQzk2MF9Qcm9jUmVhZEluaXRpYWxTdGF0dXMoY2hhciAqUGFnZSwgY2hhciAqKlN0YXJ0LCBvZmZfdCBPZmZzZXQsCi0JCQkJCWludCBDb3VudCwgaW50ICpFT0YsIHZvaWQgKkRhdGEpCitzdGF0aWMgaW50IGRhYzk2MF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBEYXRhOwotICBpbnQgQnl0ZXNBdmFpbGFibGUgPSBDb250cm9sbGVyLT5Jbml0aWFsU3RhdHVzTGVuZ3RoIC0gT2Zmc2V0OwotICBpZiAoQ291bnQgPj0gQnl0ZXNBdmFpbGFibGUpCi0gICAgewotICAgICAgQ291bnQgPSBCeXRlc0F2YWlsYWJsZTsKLSAgICAgICpFT0YgPSB0cnVlOwotICAgIH0KLSAgaWYgKENvdW50IDw9IDApIHJldHVybiAwOwotICAqU3RhcnQgPSBQYWdlOwotICBtZW1jcHkoUGFnZSwgJkNvbnRyb2xsZXItPkNvbWJpbmVkU3RhdHVzQnVmZmVyW09mZnNldF0sIENvdW50KTsKLSAgcmV0dXJuIENvdW50OworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYWM5NjBfcHJvY19zaG93LCBOVUxMKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjOTYwX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFjOTYwX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKIAotLyoKLSAgREFDOTYwX1Byb2NSZWFkQ3VycmVudFN0YXR1cyBpbXBsZW1lbnRzIHJlYWRpbmcgL3Byb2MvcmQvY04vY3VycmVudF9zdGF0dXMuCi0qLwotCi1zdGF0aWMgaW50IERBQzk2MF9Qcm9jUmVhZEN1cnJlbnRTdGF0dXMoY2hhciAqUGFnZSwgY2hhciAqKlN0YXJ0LCBvZmZfdCBPZmZzZXQsCi0JCQkJCWludCBDb3VudCwgaW50ICpFT0YsIHZvaWQgKkRhdGEpCitzdGF0aWMgaW50IGRhYzk2MF9pbml0aWFsX3N0YXR1c19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotICBEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKikgRGF0YTsKKwlEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKiltLT5wcml2YXRlOworCXNlcV9wcmludGYobSwgIiUuKnMiLCBDb250cm9sbGVyLT5Jbml0aWFsU3RhdHVzTGVuZ3RoLCBDb250cm9sbGVyLT5Db21iaW5lZFN0YXR1c0J1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRhYzk2MF9pbml0aWFsX3N0YXR1c19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRhYzk2MF9pbml0aWFsX3N0YXR1c19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgZGFjOTYwX2N1cnJlbnRfc3RhdHVzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisgIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBtLT5wcml2YXRlOwogICB1bnNpZ25lZCBjaGFyICpTdGF0dXNNZXNzYWdlID0KICAgICAiTm8gUmVidWlsZCBvciBDb25zaXN0ZW5jeSBDaGVjayBpbiBQcm9ncmVzc1xuIjsKICAgaW50IFByb2dyZXNzTWVzc2FnZUxlbmd0aCA9IHN0cmxlbihTdGF0dXNNZXNzYWdlKTsKLSAgaW50IEJ5dGVzQXZhaWxhYmxlOwogICBpZiAoamlmZmllcyAhPSBDb250cm9sbGVyLT5MYXN0Q3VycmVudFN0YXR1c1RpbWUpCiAgICAgewogICAgICAgQ29udHJvbGxlci0+Q3VycmVudFN0YXR1c0xlbmd0aCA9IDA7CkBAIC02NTEzLDQ5ICs2NTA1LDQxIEBACiAJfQogICAgICAgQ29udHJvbGxlci0+TGFzdEN1cnJlbnRTdGF0dXNUaW1lID0gamlmZmllczsKICAgICB9Ci0gIEJ5dGVzQXZhaWxhYmxlID0gQ29udHJvbGxlci0+Q3VycmVudFN0YXR1c0xlbmd0aCAtIE9mZnNldDsKLSAgaWYgKENvdW50ID49IEJ5dGVzQXZhaWxhYmxlKQotICAgIHsKLSAgICAgIENvdW50ID0gQnl0ZXNBdmFpbGFibGU7Ci0gICAgICAqRU9GID0gdHJ1ZTsKLSAgICB9Ci0gIGlmIChDb3VudCA8PSAwKSByZXR1cm4gMDsKLSAgKlN0YXJ0ID0gUGFnZTsKLSAgbWVtY3B5KFBhZ2UsICZDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzQnVmZmVyW09mZnNldF0sIENvdW50KTsKLSAgcmV0dXJuIENvdW50OworCXNlcV9wcmludGYobSwgIiUuKnMiLCBDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzTGVuZ3RoLCBDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzQnVmZmVyKTsKKwlyZXR1cm4gMDsKIH0KIAotCi0vKgotICBEQUM5NjBfUHJvY1JlYWRVc2VyQ29tbWFuZCBpbXBsZW1lbnRzIHJlYWRpbmcgL3Byb2MvcmQvY04vdXNlcl9jb21tYW5kLgotKi8KLQotc3RhdGljIGludCBEQUM5NjBfUHJvY1JlYWRVc2VyQ29tbWFuZChjaGFyICpQYWdlLCBjaGFyICoqU3RhcnQsIG9mZl90IE9mZnNldCwKLQkJCQkgICAgICBpbnQgQ291bnQsIGludCAqRU9GLCB2b2lkICpEYXRhKQorc3RhdGljIGludCBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotICBEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKikgRGF0YTsKLSAgaW50IEJ5dGVzQXZhaWxhYmxlID0gQ29udHJvbGxlci0+VXNlclN0YXR1c0xlbmd0aCAtIE9mZnNldDsKLSAgaWYgKENvdW50ID49IEJ5dGVzQXZhaWxhYmxlKQotICAgIHsKLSAgICAgIENvdW50ID0gQnl0ZXNBdmFpbGFibGU7Ci0gICAgICAqRU9GID0gdHJ1ZTsKLSAgICB9Ci0gIGlmIChDb3VudCA8PSAwKSByZXR1cm4gMDsKLSAgKlN0YXJ0ID0gUGFnZTsKLSAgbWVtY3B5KFBhZ2UsICZDb250cm9sbGVyLT5Vc2VyU3RhdHVzQnVmZmVyW09mZnNldF0sIENvdW50KTsKLSAgcmV0dXJuIENvdW50OworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjOTYwX2N1cnJlbnRfc3RhdHVzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFjOTYwX2N1cnJlbnRfc3RhdHVzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKIAotLyoKLSAgREFDOTYwX1Byb2NXcml0ZVVzZXJDb21tYW5kIGltcGxlbWVudHMgd3JpdGluZyAvcHJvYy9yZC9jTi91c2VyX2NvbW1hbmQuCi0qLworc3RhdGljIGludCBkYWM5NjBfdXNlcl9jb21tYW5kX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopbS0+cHJpdmF0ZTsKIAotc3RhdGljIGludCBEQUM5NjBfUHJvY1dyaXRlVXNlckNvbW1hbmQoc3RydWN0IGZpbGUgKmZpbGUsCisJc2VxX3ByaW50ZihtLCAiJS4qcyIsIENvbnRyb2xsZXItPlVzZXJTdGF0dXNMZW5ndGgsIENvbnRyb2xsZXItPlVzZXJTdGF0dXNCdWZmZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYWM5NjBfdXNlcl9jb21tYW5kX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKkJ1ZmZlciwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBDb3VudCwgdm9pZCAqRGF0YSkKKwkJCQkgICAgICAgc2l6ZV90IENvdW50LCBsb2ZmX3QgKnBvcykKIHsKLSAgREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopIERhdGE7CisgIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAgIHVuc2lnbmVkIGNoYXIgQ29tbWFuZEJ1ZmZlcls4MF07CiAgIGludCBMZW5ndGg7CiAgIGlmIChDb3VudCA+IHNpemVvZihDb21tYW5kQnVmZmVyKS0xKSByZXR1cm4gLUVJTlZBTDsKQEAgLTY1NzIsNiArNjU1NiwxNCBAQAogCSAgICA/IENvdW50IDogLUVCVVNZKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY193cml0ZSwKK307CiAKIC8qCiAgIERBQzk2MF9DcmVhdGVQcm9jRW50cmllcyBjcmVhdGVzIHRoZSAvcHJvYy9yZC8uLi4gZW50cmllcyBmb3IgdGhlCkBAIC02NTg2LDIzICs2NTc4LDE3IEBACiAKIAlpZiAoREFDOTYwX1Byb2NEaXJlY3RvcnlFbnRyeSA9PSBOVUxMKSB7CiAgIAkJREFDOTYwX1Byb2NEaXJlY3RvcnlFbnRyeSA9IHByb2NfbWtkaXIoInJkIiwgTlVMTCk7Ci0gIAkJU3RhdHVzUHJvY0VudHJ5ID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgic3RhdHVzIiwgMCwKKyAgCQlTdGF0dXNQcm9jRW50cnkgPSBwcm9jX2NyZWF0ZSgic3RhdHVzIiwgMCwKIAkJCQkJICAgREFDOTYwX1Byb2NEaXJlY3RvcnlFbnRyeSwKLQkJCQkJICAgREFDOTYwX1Byb2NSZWFkU3RhdHVzLCBOVUxMKTsKKwkJCQkJICAgJmRhYzk2MF9wcm9jX2ZvcHMpOwogCX0KIAogICAgICAgc3ByaW50ZihDb250cm9sbGVyLT5Db250cm9sbGVyTmFtZSwgImMlZCIsIENvbnRyb2xsZXItPkNvbnRyb2xsZXJOdW1iZXIpOwogICAgICAgQ29udHJvbGxlclByb2NFbnRyeSA9IHByb2NfbWtkaXIoQ29udHJvbGxlci0+Q29udHJvbGxlck5hbWUsCiAJCQkJICAgICAgIERBQzk2MF9Qcm9jRGlyZWN0b3J5RW50cnkpOwotICAgICAgY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiaW5pdGlhbF9zdGF0dXMiLCAwLCBDb250cm9sbGVyUHJvY0VudHJ5LAotCQkJICAgICBEQUM5NjBfUHJvY1JlYWRJbml0aWFsU3RhdHVzLCBDb250cm9sbGVyKTsKLSAgICAgIGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImN1cnJlbnRfc3RhdHVzIiwgMCwgQ29udHJvbGxlclByb2NFbnRyeSwKLQkJCSAgICAgREFDOTYwX1Byb2NSZWFkQ3VycmVudFN0YXR1cywgQ29udHJvbGxlcik7Ci0gICAgICBVc2VyQ29tbWFuZFByb2NFbnRyeSA9Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgidXNlcl9jb21tYW5kIiwgU19JV1VTUiB8IFNfSVJVU1IsCi0JCQkgICAgICAgQ29udHJvbGxlclByb2NFbnRyeSwgREFDOTYwX1Byb2NSZWFkVXNlckNvbW1hbmQsCi0JCQkgICAgICAgQ29udHJvbGxlcik7Ci0gICAgICBVc2VyQ29tbWFuZFByb2NFbnRyeS0+d3JpdGVfcHJvYyA9IERBQzk2MF9Qcm9jV3JpdGVVc2VyQ29tbWFuZDsKKyAgICAgIHByb2NfY3JlYXRlX2RhdGEoImluaXRpYWxfc3RhdHVzIiwgMCwgQ29udHJvbGxlclByb2NFbnRyeSwgJmRhYzk2MF9pbml0aWFsX3N0YXR1c19wcm9jX2ZvcHMsIENvbnRyb2xsZXIpOworICAgICAgcHJvY19jcmVhdGVfZGF0YSgiY3VycmVudF9zdGF0dXMiLCAwLCBDb250cm9sbGVyUHJvY0VudHJ5LCAmZGFjOTYwX2N1cnJlbnRfc3RhdHVzX3Byb2NfZm9wcywgQ29udHJvbGxlcik7CisgICAgICBVc2VyQ29tbWFuZFByb2NFbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoInVzZXJfY29tbWFuZCIsIFNfSVdVU1IgfCBTX0lSVVNSLCBDb250cm9sbGVyUHJvY0VudHJ5LCAmZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX2ZvcHMsIENvbnRyb2xsZXIpOwogICAgICAgQ29udHJvbGxlci0+Q29udHJvbGxlclByb2NFbnRyeSA9IENvbnRyb2xsZXJQcm9jRW50cnk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCAyNGMzZTIxLi42Mzk5ZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0zNiw5ICszNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtNjYsNiArNjgsMTIgQEAKIE1PRFVMRV9WRVJTSU9OKCIzLjYuMjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGludCBjY2lzc19hbGxvd19ocHNhOworbW9kdWxlX3BhcmFtKGNjaXNzX2FsbG93X2hwc2EsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoY2Npc3NfYWxsb3dfaHBzYSwKKwkiUHJldmVudCBjY2lzcyBkcml2ZXIgZnJvbSBhY2Nlc3NpbmcgaGFyZHdhcmUga25vd24gdG8gYmUgIgorCSIgc3VwcG9ydGVkIGJ5IHRoZSBocHNhIGRyaXZlciIpOworCiAjaW5jbHVkZSAiY2Npc3NfY21kLmgiCiAjaW5jbHVkZSAiY2Npc3MuaCIKICNpbmNsdWRlIDxsaW51eC9jY2lzc19pb2N0bC5oPgpAQCAtOTksOCArMTA3LDYgQEAKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0OX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNEF9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjRCfSwKLQl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9BTllfSUQsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0JCVBDSV9DTEFTU19TVE9SQUdFX1JBSUQgPDwgOCwgMHhmZmZmIDw8IDgsIDB9LAogCXswLH0KIH07CiAKQEAgLTEyMSw4ICsxMjcsNiBAQAogCXsweDQwOUQwRTExLCAiU21hcnQgQXJyYXkgNjQwMCBFTSIsICZTQTVfYWNjZXNzfSwKIAl7MHg0MDkxMEUxMSwgIlNtYXJ0IEFycmF5IDZpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMjUxMDNDLCAiU21hcnQgQXJyYXkgUDYwMCIsICZTQTVfYWNjZXNzfSwKLQl7MHgzMjIzMTAzQywgIlNtYXJ0IEFycmF5IFA4MDAiLCAmU0E1X2FjY2Vzc30sCi0JezB4MzIzNDEwM0MsICJTbWFydCBBcnJheSBQNDAwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMzUxMDNDLCAiU21hcnQgQXJyYXkgUDQwMGkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIxMTEwM0MsICJTbWFydCBBcnJheSBFMjAwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjEyMTAzQywgIlNtYXJ0IEFycmF5IEUyMDAiLCAmU0E1X2FjY2Vzc30sCkBAIC0xMzAsNiArMTM0LDEwIEBACiAJezB4MzIxNDEwM0MsICJTbWFydCBBcnJheSBFMjAwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjE1MTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMzcxMDNDLCAiU21hcnQgQXJyYXkgRTUwMCIsICZTQTVfYWNjZXNzfSwKKy8qIGNvbnRyb2xsZXJzIGJlbG93IHRoaXMgbGluZSBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkgdGhlIGhwc2EgZHJpdmVyLiAqLworI2RlZmluZSBIUFNBX0JPVU5EQVJZIDB4MzIyMzEwM0MKKwl7MHgzMjIzMTAzQywgIlNtYXJ0IEFycmF5IFA4MDAiLCAmU0E1X2FjY2Vzc30sCisJezB4MzIzNDEwM0MsICJTbWFydCBBcnJheSBQNDAwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyM0QxMDNDLCAiU21hcnQgQXJyYXkgUDcwMG0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MTEwM0MsICJTbWFydCBBcnJheSBQMjEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNDMxMDNDLCAiU21hcnQgQXJyYXkgUDQxMCIsICZTQTVfYWNjZXNzfSwKQEAgLTEzOCw3ICsxNDYsNiBAQAogCXsweDMyNDkxMDNDLCAiU21hcnQgQXJyYXkgUDgxMiIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjRBMTAzQywgIlNtYXJ0IEFycmF5IFA3MTJtIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNEIxMDNDLCAiU21hcnQgQXJyYXkgUDcxMW0iLCAmU0E1X2FjY2Vzc30sCi0JezB4RkZGRjEwM0MsICJVbmtub3duIFNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAogfTsKIAogLyogSG93IGxvbmcgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3IgYm9hcmQgdG8gZ28gaW50byBzaW1wbGUgbW9kZSAqLwpAQCAtMTU1LDYgKzE2MiwxMCBAQAogCiBzdGF0aWMgY3Rscl9pbmZvX3QgKmhiYVtNQVhfQ1RMUl07CiAKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNjaXNzX3NjYW5fdGhyZWFkOworc3RhdGljIERFRklORV9NVVRFWChzY2FuX211dGV4KTsKK3N0YXRpYyBMSVNUX0hFQUQoc2Nhbl9xKTsKKwogc3RhdGljIHZvaWQgZG9fY2Npc3NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZG9fY2Npc3NfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCBjY2lzc19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSk7CkBAIC0xNjQsOSArMTc1LDkgQEAKIHN0YXRpYyBpbnQgY2Npc3NfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKTsKIAogc3RhdGljIGludCBjY2lzc19yZXZhbGlkYXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKLXN0YXRpYyBpbnQgcmVidWlsZF9sdW5fdGFibGUoY3Rscl9pbmZvX3QgKmgsIGludCBmaXJzdF90aW1lKTsKK3N0YXRpYyBpbnQgcmVidWlsZF9sdW5fdGFibGUoY3Rscl9pbmZvX3QgKmgsIGludCBmaXJzdF90aW1lLCBpbnQgdmlhX2lvY3RsKTsKIHN0YXRpYyBpbnQgZGVyZWdpc3Rlcl9kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4LAotCQkJICAgaW50IGNsZWFyX2FsbCk7CisJCQkgICBpbnQgY2xlYXJfYWxsLCBpbnQgdmlhX2lvY3RsKTsKIAogc3RhdGljIHZvaWQgY2Npc3NfcmVhZF9jYXBhY2l0eShpbnQgY3RsciwgaW50IGxvZ3ZvbCwgaW50IHdpdGhpcnEsCiAJCQlzZWN0b3JfdCAqdG90YWxfc2l6ZSwgdW5zaWduZWQgaW50ICpibG9ja19zaXplKTsKQEAgLTE4OSw4ICsyMDAsMTMgQEAKIHN0YXRpYyBpbnQgcHJvY2Vzc19zZW5kY21kX2Vycm9yKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpOwogCiBzdGF0aWMgdm9pZCBmYWlsX2FsbF9jbWRzKHVuc2lnbmVkIGxvbmcgY3Rscik7CitzdGF0aWMgaW50IGFkZF90b19zY2FuX2xpc3Qoc3RydWN0IGN0bHJfaW5mbyAqaCk7CiBzdGF0aWMgaW50IHNjYW5fdGhyZWFkKHZvaWQgKmRhdGEpOwogc3RhdGljIGludCBjaGVja19mb3JfdW5pdF9hdHRlbnRpb24oY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYyk7CitzdGF0aWMgdm9pZCBjY2lzc19oYmFfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgY2Npc3NfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGNjaXNzX2ZyZWVfZ2VuZGlzayhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCk7CitzdGF0aWMgdm9pZCBjY2lzc19mcmVlX2RyaXZlX2luZm8oY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIGNjaXNzX3Byb2Npbml0KGludCBpKTsKQEAgLTI0NSw3ICsyNjEsMTAgQEAKIAogI2luY2x1ZGUgImNjaXNzX3Njc2kuYyIJCS8qIEZvciBTQ1NJIHRhcGUgc3VwcG9ydCAqLwogCi0jZGVmaW5lIFJBSURfVU5LTk9XTiA2CitzdGF0aWMgY29uc3QgY2hhciAqcmFpZF9sYWJlbFtdID0geyAiMCIsICI0IiwgIjEoMSswKSIsICI1IiwgIjUrMSIsICJBREciLAorCSJVTktOT1dOIgorfTsKKyNkZWZpbmUgUkFJRF9VTktOT1dOIChzaXplb2YocmFpZF9sYWJlbCkgLyBzaXplb2YocmFpZF9sYWJlbFswXSktMSkKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKQEAgLTI1NSw5ICsyNzQsNiBAQAogI2RlZmluZSBFTkdfR0lHIDEwMDAwMDAwMDAKICNkZWZpbmUgRU5HX0dJR19GQUNUT1IgKEVOR19HSUcvNTEyKQogI2RlZmluZSBFTkdBR0VfU0NTSQkiZW5nYWdlIHNjc2kiCi1zdGF0aWMgY29uc3QgY2hhciAqcmFpZF9sYWJlbFtdID0geyAiMCIsICI0IiwgIjEoMSswKSIsICI1IiwgIjUrMSIsICJBREciLAotCSJVTktOT1dOIgotfTsKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19jY2lzczsKIApAQCAtMzE4LDcgKzMzNCw3IEBACiAJY3Rscl9pbmZvX3QgKmggPSBzZXEtPnByaXZhdGU7CiAJdW5zaWduZWQgY3RsciA9IGgtPmN0bHI7CiAJbG9mZl90ICpwb3MgPSB2OwotCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSAmaC0+ZHJ2Wypwb3NdOworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSBoLT5kcnZbKnBvc107CiAKIAlpZiAoKnBvcyA+IGgtPmhpZ2hlc3RfbHVuKQogCQlyZXR1cm4gMDsKQEAgLTMzMSw3ICszNDcsNyBAQAogCXZvbF9zel9mcmFjICo9IDEwMDsKIAlzZWN0b3JfZGl2KHZvbF9zel9mcmFjLCBFTkdfR0lHX0ZBQ1RPUik7CiAKLQlpZiAoZHJ2LT5yYWlkX2xldmVsID4gNSkKKwlpZiAoZHJ2LT5yYWlkX2xldmVsIDwgMCB8fCBkcnYtPnJhaWRfbGV2ZWwgPiBSQUlEX1VOS05PV04pCiAJCWRydi0+cmFpZF9sZXZlbCA9IFJBSURfVU5LTk9XTjsKIAlzZXFfcHJpbnRmKHNlcSwgImNjaXNzL2MlZGQlZDoiCiAJCQkiXHQlNHUuJTAydUdCXHRSQUlEICVzXG4iLApAQCAtNDI2LDcgKzQ0Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2Npc3NfcHJvY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2Npc3NfcHJvY19mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IGNjaXNzX3NlcV9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCkBAIC00NTQsOSArNDcwLDE5IEBACiAjZGVmaW5lIHRvX2hiYShuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGN0bHJfaW5mbywgZGV2KQogI2RlZmluZSB0b19kcnYobikgY29udGFpbmVyX29mKG4sIGRyaXZlX2luZm9fc3RydWN0LCBkZXYpCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgY2Npc3NfaG9zdF90eXBlID0gewotCS5uYW1lCQk9ICJjY2lzc19ob3N0IiwKLX07CitzdGF0aWMgc3NpemVfdCBob3N0X3N0b3JlX3Jlc2NhbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gdG9faGJhKGRldik7CisKKwlhZGRfdG9fc2Nhbl9saXN0KGgpOworCXdha2VfdXBfcHJvY2VzcyhjY2lzc19zY2FuX3RocmVhZCk7CisJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZoLT5zY2FuX3dhaXQpOworCisJcmV0dXJuIGNvdW50OworfQorREVWSUNFX0FUVFIocmVzY2FuLCBTX0lXVVNSLCBOVUxMLCBob3N0X3N0b3JlX3Jlc2Nhbik7CiAKIHN0YXRpYyBzc2l6ZV90IGRldl9zaG93X3VuaXF1ZV9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNTYwLDExICs1ODYsMTAxIEBACiB9CiBERVZJQ0VfQVRUUihyZXYsIFNfSVJVR08sIGRldl9zaG93X3JldiwgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IGNjaXNzX3Nob3dfbHVuaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IHRvX2RydihkZXYpOworCXN0cnVjdCBjdGxyX2luZm8gKmggPSB0b19oYmEoZHJ2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgbHVuaWRbOF07CisKKwlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghZHJ2LT5oZWFkcykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCW1lbWNweShsdW5pZCwgZHJ2LT5MdW5JRCwgc2l6ZW9mKGx1bmlkKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIweCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQlsdW5pZFswXSwgbHVuaWRbMV0sIGx1bmlkWzJdLCBsdW5pZFszXSwKKwkJbHVuaWRbNF0sIGx1bmlkWzVdLCBsdW5pZFs2XSwgbHVuaWRbN10pOworfQorREVWSUNFX0FUVFIobHVuaWQsIFNfSVJVR08sIGNjaXNzX3Nob3dfbHVuaWQsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBjY2lzc19zaG93X3JhaWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gdG9fZHJ2KGRldik7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHRvX2hiYShkcnYtPmRldi5wYXJlbnQpOworCWludCByYWlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXJhaWQgPSBkcnYtPnJhaWRfbGV2ZWw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJaWYgKHJhaWQgPCAwIHx8IHJhaWQgPiBSQUlEX1VOS05PV04pCisJCXJhaWQgPSBSQUlEX1VOS05PV047CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBzdHJsZW4ocmFpZF9sYWJlbFtyYWlkXSkgKyA3LCAiUkFJRCAlc1xuIiwKKwkJCXJhaWRfbGFiZWxbcmFpZF0pOworfQorREVWSUNFX0FUVFIocmFpZF9sZXZlbCwgU19JUlVHTywgY2Npc3Nfc2hvd19yYWlkX2xldmVsLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgY2Npc3Nfc2hvd191c2FnZV9jb3VudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gdG9fZHJ2KGRldik7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHRvX2hiYShkcnYtPmRldi5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50OworCisJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCWlmIChoLT5idXN5X2NvbmZpZ3VyaW5nKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwljb3VudCA9IGRydi0+dXNhZ2VfY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIlZFxuIiwgY291bnQpOworfQorREVWSUNFX0FUVFIodXNhZ2VfY291bnQsIFNfSVJVR08sIGNjaXNzX3Nob3dfdXNhZ2VfY291bnQsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY2Npc3NfaG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9yZXNjYW4uYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjY2lzc19ob3N0X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gY2Npc3NfaG9zdF9hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpjY2lzc19ob3N0X2F0dHJfZ3JvdXBzW10gPSB7CisJJmNjaXNzX2hvc3RfYXR0cl9ncm91cCwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGNjaXNzX2hvc3RfdHlwZSA9IHsKKwkubmFtZQkJPSAiY2Npc3NfaG9zdCIsCisJLmdyb3VwcwkJPSBjY2lzc19ob3N0X2F0dHJfZ3JvdXBzLAorCS5yZWxlYXNlCT0gY2Npc3NfaGJhX3JlbGVhc2UsCit9OworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY2Npc3NfZGV2X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3VuaXF1ZV9pZC5hdHRyLAogCSZkZXZfYXR0cl9tb2RlbC5hdHRyLAogCSZkZXZfYXR0cl92ZW5kb3IuYXR0ciwKIAkmZGV2X2F0dHJfcmV2LmF0dHIsCisJJmRldl9hdHRyX2x1bmlkLmF0dHIsCisJJmRldl9hdHRyX3JhaWRfbGV2ZWwuYXR0ciwKKwkmZGV2X2F0dHJfdXNhZ2VfY291bnQuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC01ODAsMTIgKzY5NiwyNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBjY2lzc19kZXZfdHlwZSA9IHsKIAkubmFtZQkJPSAiY2Npc3NfZGV2aWNlIiwKIAkuZ3JvdXBzCQk9IGNjaXNzX2Rldl9hdHRyX2dyb3VwcywKKwkucmVsZWFzZQk9IGNjaXNzX2RldmljZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBjY2lzc19idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAiY2Npc3MiLAogfTsKIAorLyoKKyAqIGNjaXNzX2hiYV9yZWxlYXNlIGlzIGNhbGxlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQKKyAqIG9mIGgtPmRldiBnb2VzIHRvIHplcm8uCisgKi8KK3N0YXRpYyB2b2lkIGNjaXNzX2hiYV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKgorCSAqIG5vdGhpbmcgdG8gZG8sIGJ1dCBuZWVkIHRoaXMgdG8gYXZvaWQgYSB3YXJuaW5nCisJICogYWJvdXQgbm90IGhhdmluZyBhIHJlbGVhc2UgaGFuZGxlciBmcm9tIGxpYi9rcmVmLmMuCisJICovCit9CiAKIC8qCiAgKiBJbml0aWFsaXplIHN5c2ZzIGVudHJ5IGZvciBlYWNoIGNvbnRyb2xsZXIuICBUaGlzIHNldHMgdXAgYW5kIHJlZ2lzdGVycwpAQCAtNjA5LDYgKzczNywxNiBAQAogc3RhdGljIHZvaWQgY2Npc3NfZGVzdHJveV9oYmFfc3lzZnNfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAlkZXZpY2VfZGVsKCZoLT5kZXYpOworCXB1dF9kZXZpY2UoJmgtPmRldik7IC8qIGZpbmFsIHB1dC4gKi8KK30KKworLyogY2Npc3NfZGV2aWNlX3JlbGVhc2UgaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudAorICogb2YgaC0+ZHJ2W3hdZGV2IGdvZXMgdG8gemVyby4KKyAqLworc3RhdGljIHZvaWQgY2Npc3NfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSB0b19kcnYoZGV2KTsKKwlrZnJlZShkcnYpOwogfQogCiAvKgpAQCAtNjE3LDI0ICs3NTUsMzkgQEAKICAqIC9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXYvY2NpcyMvLiBXZSBhbHNvIGNyZWF0ZSBhIGxpbmsgZnJvbQogICogL3N5cy9ibG9jay9jY2lzcyFjI2QjIHRvIHRoaXMgZW50cnkuCiAgKi8KLXN0YXRpYyBpbnQgY2Npc3NfY3JlYXRlX2xkX3N5c2ZzX2VudHJ5KHN0cnVjdCBjdGxyX2luZm8gKmgsCi0JCQkJICAgICAgIGRyaXZlX2luZm9fc3RydWN0ICpkcnYsCitzdGF0aWMgbG9uZyBjY2lzc19jcmVhdGVfbGRfc3lzZnNfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwKIAkJCQkgICAgICAgaW50IGRydl9pbmRleCkKIHsKLQlkZXZpY2VfaW5pdGlhbGl6ZSgmZHJ2LT5kZXYpOwotCWRydi0+ZGV2LnR5cGUgPSAmY2Npc3NfZGV2X3R5cGU7Ci0JZHJ2LT5kZXYuYnVzID0gJmNjaXNzX2J1c190eXBlOwotCWRldl9zZXRfbmFtZSgmZHJ2LT5kZXYsICJjJWRkJWQiLCBoLT5jdGxyLCBkcnZfaW5kZXgpOwotCWRydi0+ZGV2LnBhcmVudCA9ICZoLT5kZXY7Ci0JcmV0dXJuIGRldmljZV9hZGQoJmRydi0+ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0tPmRldmljZV9pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisKKwlkZXYgPSAmaC0+ZHJ2W2Rydl9pbmRleF0tPmRldjsKKwlkZXZpY2VfaW5pdGlhbGl6ZShkZXYpOworCWRldi0+dHlwZSA9ICZjY2lzc19kZXZfdHlwZTsKKwlkZXYtPmJ1cyA9ICZjY2lzc19idXNfdHlwZTsKKwlkZXZfc2V0X25hbWUoZGV2LCAiYyVkZCVkIiwgaC0+Y3RsciwgZHJ2X2luZGV4KTsKKwlkZXYtPnBhcmVudCA9ICZoLT5kZXY7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmRldmljZV9pbml0aWFsaXplZCA9IDE7CisJcmV0dXJuIGRldmljZV9hZGQoZGV2KTsKIH0KIAogLyoKICAqIFJlbW92ZSBzeXNmcyBlbnRyaWVzIGZvciBhIGxvZ2ljYWwgZHJpdmUuCiAgKi8KLXN0YXRpYyB2b2lkIGNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoZHJpdmVfaW5mb19zdHJ1Y3QgKmRydikKK3N0YXRpYyB2b2lkIGNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGRydl9pbmRleCwKKwlpbnQgY3Rscl9leGl0aW5nKQogewotCWRldmljZV9kZWwoJmRydi0+ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaC0+ZHJ2W2Rydl9pbmRleF0tPmRldjsKKworCS8qIHNwZWNpYWwgY2FzZSBmb3IgYypkMCwgd2Ugb25seSBkZXN0cm95IGl0IG9uIGNvbnRyb2xsZXIgZXhpdCAqLworCWlmIChkcnZfaW5kZXggPT0gMCAmJiAhY3Rscl9leGl0aW5nKQorCQlyZXR1cm47CisKKwlkZXZpY2VfZGVsKGRldik7CisJcHV0X2RldmljZShkZXYpOyAvKiB0aGUgImZpbmFsIiBwdXQuICovCisJaC0+ZHJ2W2Rydl9pbmRleF0gPSBOVUxMOwogfQogCiAvKgpAQCAtNzUxLDcgKzkwNCw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImNjaXNzX29wZW4gJXNcbiIsIGJkZXYtPmJkX2Rpc2stPmRpc2tfbmFtZSk7CiAjZW5kaWYJCQkJLyogQ0NJU1NfREVCVUcgKi8KIAotCWlmIChob3N0LT5idXN5X2luaXRpYWxpemluZyB8fCBkcnYtPmJ1c3lfY29uZmlndXJpbmcpCisJaWYgKGRydi0+YnVzeV9jb25maWd1cmluZykKIAkJcmV0dXJuIC1FQlVTWTsKIAkvKgogCSAqIFJvb3QgaXMgYWxsb3dlZCB0byBvcGVuIHJhdyB2b2x1bWUgemVybyBldmVuIGlmIGl0J3Mgbm90IGNvbmZpZ3VyZWQKQEAgLTc2Nyw3ICs5MjAsOCBAQAogCQkJaWYgKE1JTk9SKGJkZXYtPmJkX2RldikgJiAweDBmKSB7CiAJCQkJcmV0dXJuIC1FTlhJTzsKIAkJCQkvKiBpZiBpdCBpcywgbWFrZSBzdXJlIHdlIGhhdmUgYSBMVU4gSUQgKi8KLQkJCX0gZWxzZSBpZiAoZHJ2LT5MdW5JRCA9PSAwKSB7CisJCQl9IGVsc2UgaWYgKG1lbWNtcChkcnYtPkx1bklELCBDVExSX0xVTklELAorCQkJCXNpemVvZihkcnYtPkx1bklEKSkpIHsKIAkJCQlyZXR1cm4gLUVOWElPOwogCQkJfQogCQl9CkBAIC0xMTMyLDEyICsxMjg2LDEzIEBACiAJY2FzZSBDQ0lTU19ERVJFR0RJU0s6CiAJY2FzZSBDQ0lTU19SRUdORVdEOgogCWNhc2UgQ0NJU1NfUkVWQUxJRFZPTFM6Ci0JCXJldHVybiByZWJ1aWxkX2x1bl90YWJsZShob3N0LCAwKTsKKwkJcmV0dXJuIHJlYnVpbGRfbHVuX3RhYmxlKGhvc3QsIDAsIDEpOwogCiAJY2FzZSBDQ0lTU19HRVRMVU5JTkZPOnsKIAkJCUxvZ3ZvbEluZm9fc3RydWN0IGx1bmluZm87CiAKLQkJCWx1bmluZm8uTHVuSUQgPSBkcnYtPkx1bklEOworCQkJbWVtY3B5KCZsdW5pbmZvLkx1bklELCBkcnYtPkx1bklELAorCQkJCXNpemVvZihsdW5pbmZvLkx1bklEKSk7CiAJCQlsdW5pbmZvLm51bV9vcGVucyA9IGRydi0+dXNhZ2VfY291bnQ7CiAJCQlsdW5pbmZvLm51bV9wYXJ0cyA9IDA7CiAJCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZsdW5pbmZvLApAQCAtMTQ3NSw3ICsxNjMwLDEwIEBACiAJCS8qIG1ha2Ugc3VyZSB0aGUgZGlzayBoYXMgYmVlbiBhZGRlZCBhbmQgdGhlIGRyaXZlIGlzIHJlYWwKIAkJICogYmVjYXVzZSB0aGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbWlkZGxlIG9mIGluaXRfb25lLgogCQkgKi8KLQkJaWYgKCEoaC0+ZHJ2W2N1cnJfcXVldWVdLnF1ZXVlKSB8fCAhKGgtPmRydltjdXJyX3F1ZXVlXS5oZWFkcykpCisJCWlmICghaC0+ZHJ2W2N1cnJfcXVldWVdKQorCQkJY29udGludWU7CisJCWlmICghKGgtPmRydltjdXJyX3F1ZXVlXS0+cXVldWUpIHx8CisJCQkhKGgtPmRydltjdXJyX3F1ZXVlXS0+aGVhZHMpKQogCQkJY29udGludWU7CiAJCWJsa19zdGFydF9xdWV1ZShoLT5nZW5kaXNrW2N1cnJfcXVldWVdLT5xdWV1ZSk7CiAKQEAgLTE1MzIsMTMgKzE2OTAsMTEgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvZ191bml0X3RvX3Njc2kzYWRkcihjdGxyX2luZm9fdCAqaCwgdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSwKLQl1aW50MzJfdCBsb2dfdW5pdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dfdW5pdF90b19zY3NpM2FkZHIoY3Rscl9pbmZvX3QgKmgsCisJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSwgdWludDMyX3QgbG9nX3VuaXQpCiB7Ci0JbG9nX3VuaXQgPSBoLT5kcnZbbG9nX3VuaXRdLkx1bklEICYgMHgwM2ZmZjsKLQltZW1zZXQoJnNjc2kzYWRkcls0XSwgMCwgNCk7Ci0JbWVtY3B5KCZzY3NpM2FkZHJbMF0sICZsb2dfdW5pdCwgNCk7Ci0Jc2NzaTNhZGRyWzNdIHw9IDB4NDA7CisJbWVtY3B5KHNjc2kzYWRkciwgaC0+ZHJ2W2xvZ191bml0XS0+THVuSUQsCisJCXNpemVvZihoLT5kcnZbbG9nX3VuaXRdLT5MdW5JRCkpOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFNDU0kgdmVuZG9yLCBtb2RlbCwgYW5kIHJldmlzaW9uIG9mIGEgbG9naWNhbCBkcml2ZQpAQCAtMTYxNSwxNiArMTc3MSwyMyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgY2Npc3NfYWRkX2Rpc2soY3Rscl9pbmZvX3QgKmgsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAorLyoKKyAqIGNjaXNzX2FkZF9kaXNrIHNldHMgdXAgdGhlIGJsb2NrIGRldmljZSBxdWV1ZSBmb3IgYSBsb2dpY2FsIGRyaXZlCisgKi8KK3N0YXRpYyBpbnQgY2Npc3NfYWRkX2Rpc2soY3Rscl9pbmZvX3QgKmgsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCQkJCWludCBkcnZfaW5kZXgpCiB7CiAJZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19jY2lzc19yZXF1ZXN0LCAmaC0+bG9jayk7CisJaWYgKCFkaXNrLT5xdWV1ZSkKKwkJZ290byBpbml0X3F1ZXVlX2ZhaWx1cmU7CiAJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJjY2lzcy9jJWRkJWQiLCBoLT5jdGxyLCBkcnZfaW5kZXgpOwogCWRpc2stPm1ham9yID0gaC0+bWFqb3I7CiAJZGlzay0+Zmlyc3RfbWlub3IgPSBkcnZfaW5kZXggPDwgTldEX1NISUZUOwogCWRpc2stPmZvcHMgPSAmY2Npc3NfZm9wczsKLQlkaXNrLT5wcml2YXRlX2RhdGEgPSAmaC0+ZHJ2W2Rydl9pbmRleF07Ci0JZGlzay0+ZHJpdmVyZnNfZGV2ID0gJmgtPmRydltkcnZfaW5kZXhdLmRldjsKKwlpZiAoY2Npc3NfY3JlYXRlX2xkX3N5c2ZzX2VudHJ5KGgsIGRydl9pbmRleCkpCisJCWdvdG8gY2xlYW51cF9xdWV1ZTsKKwlkaXNrLT5wcml2YXRlX2RhdGEgPSBoLT5kcnZbZHJ2X2luZGV4XTsKKwlkaXNrLT5kcml2ZXJmc19kZXYgPSAmaC0+ZHJ2W2Rydl9pbmRleF0tPmRldjsKIAogCS8qIFNldCB1cCBxdWV1ZSBpbmZvcm1hdGlvbiAqLwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoZGlzay0+cXVldWUsIGgtPnBkZXYtPmRtYV9tYXNrKTsKQEAgLTE2NDIsMTQgKzE4MDUsMjEgQEAKIAlkaXNrLT5xdWV1ZS0+cXVldWVkYXRhID0gaDsKIAogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoZGlzay0+cXVldWUsCi0JCQkJICAgICBoLT5kcnZbZHJ2X2luZGV4XS5ibG9ja19zaXplKTsKKwkJCQkgICAgIGgtPmRydltkcnZfaW5kZXhdLT5ibG9ja19zaXplKTsKIAogCS8qIE1ha2Ugc3VyZSBhbGwgcXVldWUgZGF0YSBpcyB3cml0dGVuIG91dCBiZWZvcmUgKi8KLQkvKiBzZXR0aW5nIGgtPmRydltkcnZfaW5kZXhdLnF1ZXVlLCBhcyBzZXR0aW5nIHRoaXMgKi8KKwkvKiBzZXR0aW5nIGgtPmRydltkcnZfaW5kZXhdLT5xdWV1ZSwgYXMgc2V0dGluZyB0aGlzICovCiAJLyogYWxsb3dzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBzdGFydCB0aGUgcXVldWUgKi8KIAl3bWIoKTsKLQloLT5kcnZbZHJ2X2luZGV4XS5xdWV1ZSA9IGRpc2stPnF1ZXVlOworCWgtPmRydltkcnZfaW5kZXhdLT5xdWV1ZSA9IGRpc2stPnF1ZXVlOwogCWFkZF9kaXNrKGRpc2spOworCXJldHVybiAwOworCitjbGVhbnVwX3F1ZXVlOgorCWJsa19jbGVhbnVwX3F1ZXVlKGRpc2stPnF1ZXVlKTsKKwlkaXNrLT5xdWV1ZSA9IE5VTEw7Citpbml0X3F1ZXVlX2ZhaWx1cmU6CisJcmV0dXJuIC0xOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgdGhlIHVzYWdlX2NvdW50IG9mIHRoZSBkcml2ZSB0byBiZSB1cGRhdGVkL2FkZGVkLgpAQCAtMTY2Miw3ICsxODMyLDggQEAKICAqIGlzIGFsc28gdGhlIGNvbnRyb2xsZXIgbm9kZS4gIEFueSBjaGFuZ2VzIHRvIGRpc2sgMCB3aWxsIHNob3cgdXAgb24KICAqIHRoZSBuZXh0IHJlYm9vdC4KICAqLwotc3RhdGljIHZvaWQgY2Npc3NfdXBkYXRlX2RyaXZlX2luZm8oaW50IGN0bHIsIGludCBkcnZfaW5kZXgsIGludCBmaXJzdF90aW1lKQorc3RhdGljIHZvaWQgY2Npc3NfdXBkYXRlX2RyaXZlX2luZm8oaW50IGN0bHIsIGludCBkcnZfaW5kZXgsIGludCBmaXJzdF90aW1lLAorCWludCB2aWFfaW9jdGwpCiB7CiAJY3Rscl9pbmZvX3QgKmggPSBoYmFbY3Rscl07CiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7CkBAIC0xNjcyLDIxICsxODQzLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJaW50IHJldCA9IDA7CiAJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydmluZm87Ci0JaW50IHdhc19vbmx5X2NvbnRyb2xsZXJfbm9kZTsKIAogCS8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlzayBhbmQgbW9kaWZ5IHRoZSBkcml2ZXIgc3RydWN0dXJlICovCiAJaW5xX2J1ZmYgPSBrbWFsbG9jKHNpemVvZihJbnF1aXJ5RGF0YV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKLQlkcnZpbmZvID0ga21hbGxvYyhzaXplb2YoKmRydmluZm8pLCBHRlBfS0VSTkVMKTsKKwlkcnZpbmZvID0ga3phbGxvYyhzaXplb2YoKmRydmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5xX2J1ZmYgPT0gTlVMTCB8fCBkcnZpbmZvID09IE5VTEwpCiAJCWdvdG8gbWVtX21zZzsKIAotCS8qIFNlZSBpZiB3ZSdyZSB0cnlpbmcgdG8gdXBkYXRlIHRoZSAiY29udHJvbGxlciBub2RlIgotCSAqIHRoaXMgd2lsbCBoYXBwZW4gdGhlIHdoZW4gdGhlIGZpcnN0IGxvZ2ljYWwgZHJpdmUgZ2V0cwotCSAqIGNyZWF0ZWQgYnkgQUNVLgotCSAqLwotCXdhc19vbmx5X2NvbnRyb2xsZXJfbm9kZSA9IChkcnZfaW5kZXggPT0gMCAmJgotCQkJCWgtPmRydlswXS5yYWlkX2xldmVsID09IC0xKTsKLQogCS8qIHRlc3RpbmcgdG8gc2VlIGlmIDE2LWJ5dGUgQ0RCcyBhcmUgYWxyZWFkeSBiZWluZyB1c2VkICovCiAJaWYgKGgtPmNjaXNzX3JlYWQgPT0gQ0NJU1NfUkVBRF8xNikgewogCQljY2lzc19yZWFkX2NhcGFjaXR5XzE2KGgtPmN0bHIsIGRydl9pbmRleCwgMSwKQEAgLTE3MTksMTYgKzE4ODIsMTkgQEAKIAkJCQlkcnZpbmZvLT5tb2RlbCwgZHJ2aW5mby0+cmV2KTsKIAljY2lzc19nZXRfc2VyaWFsX25vKGN0bHIsIGRydl9pbmRleCwgMSwgZHJ2aW5mby0+c2VyaWFsX25vLAogCQkJc2l6ZW9mKGRydmluZm8tPnNlcmlhbF9ubykpOworCS8qIFNhdmUgdGhlIGx1bmlkIGluIGNhc2Ugd2UgZGVyZWdpc3RlciB0aGUgZGlzaywgYmVsb3cuICovCisJbWVtY3B5KGRydmluZm8tPkx1bklELCBoLT5kcnZbZHJ2X2luZGV4XS0+THVuSUQsCisJCXNpemVvZihkcnZpbmZvLT5MdW5JRCkpOwogCiAJLyogSXMgaXQgdGhlIHNhbWUgZGlzayB3ZSBhbHJlYWR5IGtub3csIGFuZCBub3RoaW5nJ3MgY2hhbmdlZD8gKi8KLQlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0ucmFpZF9sZXZlbCAhPSAtMSAmJgorCWlmIChoLT5kcnZbZHJ2X2luZGV4XS0+cmFpZF9sZXZlbCAhPSAtMSAmJgogCQkoKG1lbWNtcChkcnZpbmZvLT5zZXJpYWxfbm8sCi0JCQkJaC0+ZHJ2W2Rydl9pbmRleF0uc2VyaWFsX25vLCAxNikgPT0gMCkgJiYKLQkJZHJ2aW5mby0+YmxvY2tfc2l6ZSA9PSBoLT5kcnZbZHJ2X2luZGV4XS5ibG9ja19zaXplICYmCi0JCWRydmluZm8tPm5yX2Jsb2NrcyA9PSBoLT5kcnZbZHJ2X2luZGV4XS5ucl9ibG9ja3MgJiYKLQkJZHJ2aW5mby0+aGVhZHMgPT0gaC0+ZHJ2W2Rydl9pbmRleF0uaGVhZHMgJiYKLQkJZHJ2aW5mby0+c2VjdG9ycyA9PSBoLT5kcnZbZHJ2X2luZGV4XS5zZWN0b3JzICYmCi0JCWRydmluZm8tPmN5bGluZGVycyA9PSBoLT5kcnZbZHJ2X2luZGV4XS5jeWxpbmRlcnMpKQorCQkJCWgtPmRydltkcnZfaW5kZXhdLT5zZXJpYWxfbm8sIDE2KSA9PSAwKSAmJgorCQlkcnZpbmZvLT5ibG9ja19zaXplID09IGgtPmRydltkcnZfaW5kZXhdLT5ibG9ja19zaXplICYmCisJCWRydmluZm8tPm5yX2Jsb2NrcyA9PSBoLT5kcnZbZHJ2X2luZGV4XS0+bnJfYmxvY2tzICYmCisJCWRydmluZm8tPmhlYWRzID09IGgtPmRydltkcnZfaW5kZXhdLT5oZWFkcyAmJgorCQlkcnZpbmZvLT5zZWN0b3JzID09IGgtPmRydltkcnZfaW5kZXhdLT5zZWN0b3JzICYmCisJCWRydmluZm8tPmN5bGluZGVycyA9PSBoLT5kcnZbZHJ2X2luZGV4XS0+Y3lsaW5kZXJzKSkKIAkJCS8qIFRoZSBkaXNrIGlzIHVuY2hhbmdlZCwgbm90aGluZyB0byB1cGRhdGUgKi8KIAkJCWdvdG8gZnJlZXJldDsKIApAQCAtMTczOCwxOCArMTkwNCwxNyBAQAogCSAqIElmIHRoZSBkaXNrIGFscmVhZHkgZXhpc3RzIHRoZW4gZGVyZWdpc3RlciBpdCBiZWZvcmUgcHJvY2VlZGluZwogCSAqICh1bmxlc3MgaXQncyB0aGUgZmlyc3QgZGlzayAoZm9yIHRoZSBjb250cm9sbGVyIG5vZGUpLgogCSAqLwotCWlmIChoLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsICE9IC0xICYmIGRydl9pbmRleCAhPSAwKSB7CisJaWYgKGgtPmRydltkcnZfaW5kZXhdLT5yYWlkX2xldmVsICE9IC0xICYmIGRydl9pbmRleCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImRpc2sgJWQgaGFzIGNoYW5nZWQuXG4iLCBkcnZfaW5kZXgpOwogCQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7Ci0JCWgtPmRydltkcnZfaW5kZXhdLmJ1c3lfY29uZmlndXJpbmcgPSAxOworCQloLT5kcnZbZHJ2X2luZGV4XS0+YnVzeV9jb25maWd1cmluZyA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOwogCi0JCS8qIGRlcmVnaXN0ZXJfZGlzayBzZXRzIGgtPmRydltkcnZfaW5kZXhdLnF1ZXVlID0gTlVMTAorCQkvKiBkZXJlZ2lzdGVyX2Rpc2sgc2V0cyBoLT5kcnZbZHJ2X2luZGV4XS0+cXVldWUgPSBOVUxMCiAJCSAqIHdoaWNoIGtlZXBzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIHN0YXJ0aW5nCiAJCSAqIHRoZSBxdWV1ZS4KIAkJICovCi0JCXJldCA9IGRlcmVnaXN0ZXJfZGlzayhoLCBkcnZfaW5kZXgsIDApOwotCQloLT5kcnZbZHJ2X2luZGV4XS5idXN5X2NvbmZpZ3VyaW5nID0gMDsKKwkJcmV0ID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGRydl9pbmRleCwgMCwgdmlhX2lvY3RsKTsKIAl9CiAKIAkvKiBJZiB0aGUgZGlzayBpcyBpbiB1c2UgcmV0dXJuICovCkBAIC0xNzU3LDIyICsxOTIyLDMxIEBACiAJCWdvdG8gZnJlZXJldDsKIAogCS8qIFNhdmUgdGhlIG5ldyBpbmZvcm1hdGlvbiBmcm9tIGNjaXNzX2dlb21ldHJ5X2lucXVpcnkKLQkgKiBhbmQgc2VyaWFsIG51bWJlciBpbnF1aXJ5LgorCSAqIGFuZCBzZXJpYWwgbnVtYmVyIGlucXVpcnkuICBJZiB0aGUgZGlzayB3YXMgZGVyZWdpc3RlcmVkCisJICogYWJvdmUsIHRoZW4gaC0+ZHJ2W2Rydl9pbmRleF0gd2lsbCBiZSBOVUxMLgogCSAqLwotCWgtPmRydltkcnZfaW5kZXhdLmJsb2NrX3NpemUgPSBkcnZpbmZvLT5ibG9ja19zaXplOwotCWgtPmRydltkcnZfaW5kZXhdLm5yX2Jsb2NrcyA9IGRydmluZm8tPm5yX2Jsb2NrczsKLQloLT5kcnZbZHJ2X2luZGV4XS5oZWFkcyA9IGRydmluZm8tPmhlYWRzOwotCWgtPmRydltkcnZfaW5kZXhdLnNlY3RvcnMgPSBkcnZpbmZvLT5zZWN0b3JzOwotCWgtPmRydltkcnZfaW5kZXhdLmN5bGluZGVycyA9IGRydmluZm8tPmN5bGluZGVyczsKLQloLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsID0gZHJ2aW5mby0+cmFpZF9sZXZlbDsKLQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0uc2VyaWFsX25vLCBkcnZpbmZvLT5zZXJpYWxfbm8sIDE2KTsKLQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0udmVuZG9yLCBkcnZpbmZvLT52ZW5kb3IsIFZFTkRPUl9MRU4gKyAxKTsKLQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0ubW9kZWwsIGRydmluZm8tPm1vZGVsLCBNT0RFTF9MRU4gKyAxKTsKLQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0ucmV2LCBkcnZpbmZvLT5yZXYsIFJFVl9MRU4gKyAxKTsKKwlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0gPT0gTlVMTCkgeworCQlkcnZpbmZvLT5kZXZpY2VfaW5pdGlhbGl6ZWQgPSAwOworCQloLT5kcnZbZHJ2X2luZGV4XSA9IGRydmluZm87CisJCWRydmluZm8gPSBOVUxMOyAvKiBzbyBpdCB3b24ndCBiZSBmcmVlZCBiZWxvdy4gKi8KKwl9IGVsc2UgeworCQkvKiBzcGVjaWFsIGNhc2UgZm9yIGN4ZDAgKi8KKwkJaC0+ZHJ2W2Rydl9pbmRleF0tPmJsb2NrX3NpemUgPSBkcnZpbmZvLT5ibG9ja19zaXplOworCQloLT5kcnZbZHJ2X2luZGV4XS0+bnJfYmxvY2tzID0gZHJ2aW5mby0+bnJfYmxvY2tzOworCQloLT5kcnZbZHJ2X2luZGV4XS0+aGVhZHMgPSBkcnZpbmZvLT5oZWFkczsKKwkJaC0+ZHJ2W2Rydl9pbmRleF0tPnNlY3RvcnMgPSBkcnZpbmZvLT5zZWN0b3JzOworCQloLT5kcnZbZHJ2X2luZGV4XS0+Y3lsaW5kZXJzID0gZHJ2aW5mby0+Y3lsaW5kZXJzOworCQloLT5kcnZbZHJ2X2luZGV4XS0+cmFpZF9sZXZlbCA9IGRydmluZm8tPnJhaWRfbGV2ZWw7CisJCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS0+c2VyaWFsX25vLCBkcnZpbmZvLT5zZXJpYWxfbm8sIDE2KTsKKwkJbWVtY3B5KGgtPmRydltkcnZfaW5kZXhdLT52ZW5kb3IsIGRydmluZm8tPnZlbmRvciwKKwkJCVZFTkRPUl9MRU4gKyAxKTsKKwkJbWVtY3B5KGgtPmRydltkcnZfaW5kZXhdLT5tb2RlbCwgZHJ2aW5mby0+bW9kZWwsIE1PREVMX0xFTiArIDEpOworCQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0tPnJldiwgZHJ2aW5mby0+cmV2LCBSRVZfTEVOICsgMSk7CisJfQogCiAJKytoLT5udW1fbHVuczsKIAlkaXNrID0gaC0+Z2VuZGlza1tkcnZfaW5kZXhdOwotCXNldF9jYXBhY2l0eShkaXNrLCBoLT5kcnZbZHJ2X2luZGV4XS5ucl9ibG9ja3MpOworCXNldF9jYXBhY2l0eShkaXNrLCBoLT5kcnZbZHJ2X2luZGV4XS0+bnJfYmxvY2tzKTsKIAogCS8qIElmIGl0J3Mgbm90IGRpc2sgMCAoZHJ2X2luZGV4ICE9IDApCiAJICogb3IgaWYgaXQgd2FzIGRpc2sgMCwgYnV0IHRoZXJlIHdhcyBwcmV2aW91c2x5CkBAIC0xNzgwLDggKzE5NTQsMTUgQEAKIAkgKiAocmFpZF9sZXZlID09IC0xKSB0aGVuIHdlIHdhbnQgdG8gdXBkYXRlIHRoZQogCSAqIGxvZ2ljYWwgZHJpdmUncyBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAoZHJ2X2luZGV4IHx8IGZpcnN0X3RpbWUpCi0JCWNjaXNzX2FkZF9kaXNrKGgsIGRpc2ssIGRydl9pbmRleCk7CisJaWYgKGRydl9pbmRleCB8fCBmaXJzdF90aW1lKSB7CisJCWlmIChjY2lzc19hZGRfZGlzayhoLCBkaXNrLCBkcnZfaW5kZXgpICE9IDApIHsKKwkJCWNjaXNzX2ZyZWVfZ2VuZGlzayhoLCBkcnZfaW5kZXgpOworCQkJY2Npc3NfZnJlZV9kcml2ZV9pbmZvKGgsIGRydl9pbmRleCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczolZCBjb3VsZCBub3QgdXBkYXRlICIKKwkJCQkiZGlzayAlZFxuIiwgaC0+Y3RsciwgZHJ2X2luZGV4KTsKKwkJCS0taC0+bnVtX2x1bnM7CisJCX0KKwl9CiAKIGZyZWVyZXQ6CiAJa2ZyZWUoaW5xX2J1ZmYpOwpAQCAtMTc5MywyOCArMTk3NCw3MCBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCB0aGUgZmlyc3QgaW5kZXggb2YgdGhlIGNvbnRyb2xsZXJzIGRyaXZlIGFycmF5Ci0gKiB0aGF0IGhhcyBhIC0xIGZvciB0aGUgcmFpZF9sZXZlbCBhbmQgd2lsbCByZXR1cm4gdGhhdCBpbmRleC4gIFRoaXMgaXMKLSAqIHdoZXJlIG5ldyBkcml2ZXMgd2lsbCBiZSBhZGRlZC4gIElmIHRoZSBpbmRleCB0byBiZSByZXR1cm5lZCBpcyBncmVhdGVyCi0gKiB0aGFuIHRoZSBoaWdoZXN0X2x1biBpbmRleCBmb3IgdGhlIGNvbnRyb2xsZXIgdGhlbiBoaWdoZXN0X2x1biBpcyBzZXQKLSAqIHRvIHRoaXMgbmV3IGluZGV4LiAgSWYgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSBpbmRleGVzIHRoZW4gLTEgaXMgcmV0dXJuZWQuCi0gKiAiY29udHJvbGxlcl9ub2RlIiBpcyB1c2VkIHRvIGtub3cgaWYgdGhpcyBpcyBhIHJlYWwgbG9naWNhbCBkcml2ZSwgb3IganVzdAotICogdGhlIGNvbnRyb2xsZXIgbm9kZSwgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGlzIGNvdW50cyB0b3dhcmRzIGhpZ2hlc3RfbHVuLgorICogdGhhdCBoYXMgYSBudWxsIGRydiBwb2ludGVyIGFuZCBhbGxvY2F0ZSB0aGUgZHJpdmUgaW5mbyBzdHJ1Y3QgYW5kCisgKiB3aWxsIHJldHVybiB0aGF0IGluZGV4ICAgVGhpcyBpcyB3aGVyZSBuZXcgZHJpdmVzIHdpbGwgYmUgYWRkZWQuCisgKiBJZiB0aGUgaW5kZXggdG8gYmUgcmV0dXJuZWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0X2x1biBpbmRleCBmb3IKKyAqIHRoZSBjb250cm9sbGVyIHRoZW4gaGlnaGVzdF9sdW4gaXMgc2V0ICogdG8gdGhpcyBuZXcgaW5kZXguCisgKiBJZiB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIGluZGV4ZXMgb3IgaWYgdGhhIGFsbG9jYXRpb24gZmFpbHMsIHRoZW4gLTEKKyAqIGlzIHJldHVybmVkLiAgKiAiY29udHJvbGxlcl9ub2RlIiBpcyB1c2VkIHRvIGtub3cgaWYgdGhpcyBpcyBhIHJlYWwKKyAqIGxvZ2ljYWwgZHJpdmUsIG9yIGp1c3QgdGhlIGNvbnRyb2xsZXIgbm9kZSwgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGlzCisgKiBjb3VudHMgdG93YXJkcyBoaWdoZXN0X2x1bi4KICAqLwotc3RhdGljIGludCBjY2lzc19maW5kX2ZyZWVfZHJpdmVfaW5kZXgoaW50IGN0bHIsIGludCBjb250cm9sbGVyX25vZGUpCitzdGF0aWMgaW50IGNjaXNzX2FsbG9jX2RyaXZlX2luZm8oY3Rscl9pbmZvX3QgKmgsIGludCBjb250cm9sbGVyX25vZGUpCiB7CiAJaW50IGk7CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydjsKIAorCS8qIFNlYXJjaCBmb3IgYW4gZW1wdHkgc2xvdCBmb3Igb3VyIGRyaXZlIGluZm8gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ0lTU19NQVhfTFVOOyBpKyspIHsKLQkJaWYgKGhiYVtjdGxyXS0+ZHJ2W2ldLnJhaWRfbGV2ZWwgPT0gLTEpIHsKLQkJCWlmIChpID4gaGJhW2N0bHJdLT5oaWdoZXN0X2x1bikKLQkJCQlpZiAoIWNvbnRyb2xsZXJfbm9kZSkKLQkJCQkJaGJhW2N0bHJdLT5oaWdoZXN0X2x1biA9IGk7CisKKwkJLyogaWYgbm90IGN4ZDAgY2FzZSwgYW5kIGl0J3Mgb2NjdXBpZWQsIHNraXAgaXQuICovCisJCWlmIChoLT5kcnZbaV0gJiYgaSAhPSAwKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIElmIGl0J3MgY3hkMCBjYXNlLCBhbmQgZHJ2IGlzIGFsbG9jJ2VkIGFscmVhZHksIGFuZCBhCisJCSAqIGRpc2sgaXMgY29uZmlndXJlZCB0aGVyZSwgc2tpcCBpdC4KKwkJICovCisJCWlmIChpID09IDAgJiYgaC0+ZHJ2W2ldICYmIGgtPmRydltpXS0+cmFpZF9sZXZlbCAhPSAtMSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlJ3ZlIGZvdW5kIGFuIGVtcHR5IHNsb3QuICBVcGRhdGUgaGlnaGVzdF9sdW4KKwkJICogcHJvdmlkZWQgdGhpcyBpc24ndCBqdXN0IHRoZSBmYWtlIGN4ZDAgY29udHJvbGxlciBub2RlLgorCQkgKi8KKwkJaWYgKGkgPiBoLT5oaWdoZXN0X2x1biAmJiAhY29udHJvbGxlcl9ub2RlKQorCQkJaC0+aGlnaGVzdF9sdW4gPSBpOworCisJCS8qIElmIGFkZGluZyBhIHJlYWwgZGlzayBhdCBjeGQwLCBhbmQgaXQncyBhbHJlYWR5IGFsbG9jJ2VkICovCisJCWlmIChpID09IDAgJiYgaC0+ZHJ2W2ldICE9IE5VTEwpCiAJCQlyZXR1cm4gaTsKLQkJfQorCisJCS8qCisJCSAqIEZvdW5kIGFuIGVtcHR5IHNsb3QsIG5vdCBhbHJlYWR5IGFsbG9jJ2VkLiAgQWxsb2NhdGUgaXQuCisJCSAqIE1hcmsgaXQgd2l0aCByYWlkX2xldmVsID09IC0xLCBzbyB3ZSBrbm93IGl0J3MgbmV3IGxhdGVyIG9uLgorCQkgKi8KKwkJZHJ2ID0ga3phbGxvYyhzaXplb2YoKmRydiksIEdGUF9LRVJORUwpOworCQlpZiAoIWRydikKKwkJCXJldHVybiAtMTsKKwkJZHJ2LT5yYWlkX2xldmVsID0gLTE7IC8qIHNvIHdlIGtub3cgaXQncyBuZXcgKi8KKwkJaC0+ZHJ2W2ldID0gZHJ2OworCQlyZXR1cm4gaTsKIAl9CiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgdm9pZCBjY2lzc19mcmVlX2RyaXZlX2luZm8oY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgpCit7CisJa2ZyZWUoaC0+ZHJ2W2Rydl9pbmRleF0pOworCWgtPmRydltkcnZfaW5kZXhdID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgY2Npc3NfZnJlZV9nZW5kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4KQoreworCXB1dF9kaXNrKGgtPmdlbmRpc2tbZHJ2X2luZGV4XSk7CisJaC0+Z2VuZGlza1tkcnZfaW5kZXhdID0gTlVMTDsKK30KKwogLyogY2Npc3NfYWRkX2dlbmRpc2sgZmluZHMgYSBmcmVlIGhiYVtdLT5kcnYgc3RydWN0dXJlCiAgKiBhbmQgYWxsb2NhdGVzIGEgZ2VuZGlzayBpZiBuZWVkZWQsIGFuZCBzZXRzIHRoZSBsdW5pZAogICogaW4gdGhlIGRydmluZm8gc3RydWN0dXJlLiAgIEl0IHJldHVybnMgdGhlIGluZGV4IGludG8KQEAgLTE4MjQsMTMgKzIwNDcsMTUgQEAKICAqIGEgbWVhbnMgdG8gdGFsayB0byB0aGUgY29udHJvbGxlciBpbiBjYXNlIG5vIGxvZ2ljYWwKICAqIGRyaXZlcyBoYXZlIHlldCBiZWVuIGNvbmZpZ3VyZWQuCiAgKi8KLXN0YXRpYyBpbnQgY2Npc3NfYWRkX2dlbmRpc2soY3Rscl9pbmZvX3QgKmgsIF9fdTMyIGx1bmlkLCBpbnQgY29udHJvbGxlcl9ub2RlKQorc3RhdGljIGludCBjY2lzc19hZGRfZ2VuZGlzayhjdGxyX2luZm9fdCAqaCwgdW5zaWduZWQgY2hhciBsdW5pZFtdLAorCWludCBjb250cm9sbGVyX25vZGUpCiB7CiAJaW50IGRydl9pbmRleDsKIAotCWRydl9pbmRleCA9IGNjaXNzX2ZpbmRfZnJlZV9kcml2ZV9pbmRleChoLT5jdGxyLCBjb250cm9sbGVyX25vZGUpOworCWRydl9pbmRleCA9IGNjaXNzX2FsbG9jX2RyaXZlX2luZm8oaCwgY29udHJvbGxlcl9ub2RlKTsKIAlpZiAoZHJ2X2luZGV4ID09IC0xKQogCQlyZXR1cm4gLTE7CisKIAkvKkNoZWNrIGlmIHRoZSBnZW5kaXNrIG5lZWRzIHRvIGJlIGFsbG9jYXRlZCAqLwogCWlmICghaC0+Z2VuZGlza1tkcnZfaW5kZXhdKSB7CiAJCWgtPmdlbmRpc2tbZHJ2X2luZGV4XSA9CkBAIC0xODM5LDIzICsyMDY0LDI0IEBACiAJCQlwcmludGsoS0VSTl9FUlIgImNjaXNzJWQ6IGNvdWxkIG5vdCAiCiAJCQkJImFsbG9jYXRlIGEgbmV3IGRpc2sgJWRcbiIsCiAJCQkJaC0+Y3RsciwgZHJ2X2luZGV4KTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gZXJyX2ZyZWVfZHJpdmVfaW5mbzsKIAkJfQogCX0KLQloLT5kcnZbZHJ2X2luZGV4XS5MdW5JRCA9IGx1bmlkOwotCWlmIChjY2lzc19jcmVhdGVfbGRfc3lzZnNfZW50cnkoaCwgJmgtPmRydltkcnZfaW5kZXhdLCBkcnZfaW5kZXgpKQorCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS0+THVuSUQsIGx1bmlkLAorCQlzaXplb2YoaC0+ZHJ2W2Rydl9pbmRleF0tPkx1bklEKSk7CisJaWYgKGNjaXNzX2NyZWF0ZV9sZF9zeXNmc19lbnRyeShoLCBkcnZfaW5kZXgpKQogCQlnb3RvIGVycl9mcmVlX2Rpc2s7Ci0KIAkvKiBEb24ndCBuZWVkIHRvIG1hcmsgdGhpcyBidXN5IGJlY2F1c2Ugbm9ib2R5ICovCiAJLyogZWxzZSBrbm93cyBhYm91dCB0aGlzIGRpc2sgeWV0IHRvIGNvbnRlbmQgKi8KIAkvKiBmb3IgYWNjZXNzIHRvIGl0LiAqLwotCWgtPmRydltkcnZfaW5kZXhdLmJ1c3lfY29uZmlndXJpbmcgPSAwOworCWgtPmRydltkcnZfaW5kZXhdLT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKIAl3bWIoKTsKIAlyZXR1cm4gZHJ2X2luZGV4OwogCiBlcnJfZnJlZV9kaXNrOgotCXB1dF9kaXNrKGgtPmdlbmRpc2tbZHJ2X2luZGV4XSk7Ci0JaC0+Z2VuZGlza1tkcnZfaW5kZXhdID0gTlVMTDsKKwljY2lzc19mcmVlX2dlbmRpc2soaCwgZHJ2X2luZGV4KTsKK2Vycl9mcmVlX2RyaXZlX2luZm86CisJY2Npc3NfZnJlZV9kcml2ZV9pbmZvKGgsIGRydl9pbmRleCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xODcyLDIxICsyMDk4LDI1IEBACiAJaWYgKGgtPmdlbmRpc2tbMF0gIT0gTlVMTCkgLyogYWxyZWFkeSBkaWQgdGhpcz8gVGhlbiBiYWlsLiAqLwogCQlyZXR1cm47CiAKLQlkcnZfaW5kZXggPSBjY2lzc19hZGRfZ2VuZGlzayhoLCAwLCAxKTsKLQlpZiAoZHJ2X2luZGV4ID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGNvdWxkIG5vdCAiCi0JCQkiYWRkIGRpc2sgMC5cbiIsIGgtPmN0bHIpOwotCQlyZXR1cm47Ci0JfQotCWgtPmRydltkcnZfaW5kZXhdLmJsb2NrX3NpemUgPSA1MTI7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0ubnJfYmxvY2tzID0gMDsKLQloLT5kcnZbZHJ2X2luZGV4XS5oZWFkcyA9IDA7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uc2VjdG9ycyA9IDA7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uY3lsaW5kZXJzID0gMDsKLQloLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsID0gLTE7Ci0JbWVtc2V0KGgtPmRydltkcnZfaW5kZXhdLnNlcmlhbF9ubywgMCwgMTYpOworCWRydl9pbmRleCA9IGNjaXNzX2FkZF9nZW5kaXNrKGgsIENUTFJfTFVOSUQsIDEpOworCWlmIChkcnZfaW5kZXggPT0gLTEpCisJCWdvdG8gZXJyb3I7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmJsb2NrX3NpemUgPSA1MTI7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPm5yX2Jsb2NrcyA9IDA7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmhlYWRzID0gMDsKKwloLT5kcnZbZHJ2X2luZGV4XS0+c2VjdG9ycyA9IDA7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmN5bGluZGVycyA9IDA7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPnJhaWRfbGV2ZWwgPSAtMTsKKwltZW1zZXQoaC0+ZHJ2W2Rydl9pbmRleF0tPnNlcmlhbF9ubywgMCwgMTYpOwogCWRpc2sgPSBoLT5nZW5kaXNrW2Rydl9pbmRleF07Ci0JY2Npc3NfYWRkX2Rpc2soaCwgZGlzaywgZHJ2X2luZGV4KTsKKwlpZiAoY2Npc3NfYWRkX2Rpc2soaCwgZGlzaywgZHJ2X2luZGV4KSA9PSAwKQorCQlyZXR1cm47CisJY2Npc3NfZnJlZV9nZW5kaXNrKGgsIGRydl9pbmRleCk7CisJY2Npc3NfZnJlZV9kcml2ZV9pbmZvKGgsIGRydl9pbmRleCk7CitlcnJvcjoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBjb3VsZCBub3QgIgorCQkiYWRkIGRpc2sgMC5cbiIsIGgtPmN0bHIpOworCXJldHVybjsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGFkZCBhbmQgcmVtb3ZlIGxvZ2ljYWwgZHJpdmVzIGZyb20gdGhlIExvZ2ljYWwKQEAgLTE4OTcsNyArMjEyNyw4IEBACiAgKiBJTlBVVAogICogaAkJPSBUaGUgY29udHJvbGxlciB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb25zIG9uCiAgKi8KLXN0YXRpYyBpbnQgcmVidWlsZF9sdW5fdGFibGUoY3Rscl9pbmZvX3QgKmgsIGludCBmaXJzdF90aW1lKQorc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUsCisJaW50IHZpYV9pb2N0bCkKIHsKIAlpbnQgY3RsciA9IGgtPmN0bHI7CiAJaW50IG51bV9sdW5zOwpAQCAtMTkwNyw3ICsyMTM4LDcgQEAKIAlpbnQgaTsKIAlpbnQgZHJ2X2ZvdW5kOwogCWludCBkcnZfaW5kZXggPSAwOwotCV9fdTMyIGx1bmlkID0gMDsKKwl1bnNpZ25lZCBjaGFyIGx1bmlkWzhdID0gQ1RMUl9MVU5JRDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQpAQCAtMTk2MCwxMyArMjE5MSwxMyBAQAogCQlkcnZfZm91bmQgPSAwOwogCiAJCS8qIHNraXAgaG9sZXMgaW4gdGhlIGFycmF5IGZyb20gYWxyZWFkeSBkZWxldGVkIGRyaXZlcyAqLwotCQlpZiAoaC0+ZHJ2W2ldLnJhaWRfbGV2ZWwgPT0gLTEpCisJCWlmIChoLT5kcnZbaV0gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCiAJCWZvciAoaiA9IDA7IGogPCBudW1fbHVuczsgaisrKSB7Ci0JCQltZW1jcHkoJmx1bmlkLCAmbGRfYnVmZi0+TFVOW2pdWzBdLCA0KTsKLQkJCWx1bmlkID0gbGUzMl90b19jcHUobHVuaWQpOwotCQkJaWYgKGgtPmRydltpXS5MdW5JRCA9PSBsdW5pZCkgeworCQkJbWVtY3B5KGx1bmlkLCAmbGRfYnVmZi0+TFVOW2pdWzBdLCBzaXplb2YobHVuaWQpKTsKKwkJCWlmIChtZW1jbXAoaC0+ZHJ2W2ldLT5MdW5JRCwgbHVuaWQsCisJCQkJc2l6ZW9mKGx1bmlkKSkgPT0gMCkgewogCQkJCWRydl9mb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xOTc0LDExICsyMjA1LDExIEBACiAJCWlmICghZHJ2X2ZvdW5kKSB7CiAJCQkvKiBEZXJlZ2lzdGVyIGl0IGZyb20gdGhlIE9TLCBpdCdzIGdvbmUuICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7Ci0JCQloLT5kcnZbaV0uYnVzeV9jb25maWd1cmluZyA9IDE7CisJCQloLT5kcnZbaV0tPmJ1c3lfY29uZmlndXJpbmcgPSAxOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7Ci0JCQlyZXR1cm5fY29kZSA9IGRlcmVnaXN0ZXJfZGlzayhoLCBpLCAxKTsKLQkJCWNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoJmgtPmRydltpXSk7Ci0JCQloLT5kcnZbaV0uYnVzeV9jb25maWd1cmluZyA9IDA7CisJCQlyZXR1cm5fY29kZSA9IGRlcmVnaXN0ZXJfZGlzayhoLCBpLCAxLCB2aWFfaW9jdGwpOworCQkJaWYgKGgtPmRydltpXSAhPSBOVUxMKQorCQkJCWgtPmRydltpXS0+YnVzeV9jb25maWd1cmluZyA9IDA7CiAJCX0KIAl9CiAKQEAgLTE5OTIsMTcgKzIyMjMsMTYgQEAKIAogCQlkcnZfZm91bmQgPSAwOwogCi0JCW1lbWNweSgmbHVuaWQsICZsZF9idWZmLT5MVU5baV1bMF0sIDQpOwotCQlsdW5pZCA9IGxlMzJfdG9fY3B1KGx1bmlkKTsKLQorCQltZW1jcHkobHVuaWQsICZsZF9idWZmLT5MVU5baV1bMF0sIHNpemVvZihsdW5pZCkpOwogCQkvKiBGaW5kIGlmIHRoZSBMVU4gaXMgYWxyZWFkeSBpbiB0aGUgZHJpdmUgYXJyYXkKIAkJICogb2YgdGhlIGRyaXZlci4gIElmIHNvIHRoZW4gdXBkYXRlIGl0cyBpbmZvCiAJCSAqIGlmIG5vdCBpbiB1c2UuICBJZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGZpbmQKIAkJICogdGhlIGZpcnN0IGZyZWUgaW5kZXggYW5kIGFkZCBpdC4KIAkJICovCiAJCWZvciAoaiA9IDA7IGogPD0gaC0+aGlnaGVzdF9sdW47IGorKykgewotCQkJaWYgKGgtPmRydltqXS5yYWlkX2xldmVsICE9IC0xICYmCi0JCQkJaC0+ZHJ2W2pdLkx1bklEID09IGx1bmlkKSB7CisJCQlpZiAoaC0+ZHJ2W2pdICE9IE5VTEwgJiYKKwkJCQltZW1jbXAoaC0+ZHJ2W2pdLT5MdW5JRCwgbHVuaWQsCisJCQkJCXNpemVvZihoLT5kcnZbal0tPkx1bklEKSkgPT0gMCkgewogCQkJCWRydl9pbmRleCA9IGo7CiAJCQkJZHJ2X2ZvdW5kID0gMTsKIAkJCQlicmVhazsKQEAgLTIwMTUsNyArMjI0NSw4IEBACiAJCQlpZiAoZHJ2X2luZGV4ID09IC0xKQogCQkJCWdvdG8gZnJlZXJldDsKIAkJfQotCQljY2lzc191cGRhdGVfZHJpdmVfaW5mbyhjdGxyLCBkcnZfaW5kZXgsIGZpcnN0X3RpbWUpOworCQljY2lzc191cGRhdGVfZHJpdmVfaW5mbyhjdGxyLCBkcnZfaW5kZXgsIGZpcnN0X3RpbWUsCisJCQl2aWFfaW9jdGwpOwogCX0JCS8qIGVuZCBmb3IgKi8KIAogZnJlZXJldDoKQEAgLTIwMzIsNiArMjI2MywyNSBAQAogCWdvdG8gZnJlZXJldDsKIH0KIAorc3RhdGljIHZvaWQgY2Npc3NfY2xlYXJfZHJpdmVfaW5mbyhkcml2ZV9pbmZvX3N0cnVjdCAqZHJpdmVfaW5mbykKK3sKKwkvKiB6ZXJvIG91dCB0aGUgZGlzayBzaXplIGluZm8gKi8KKwlkcml2ZV9pbmZvLT5ucl9ibG9ja3MgPSAwOworCWRyaXZlX2luZm8tPmJsb2NrX3NpemUgPSAwOworCWRyaXZlX2luZm8tPmhlYWRzID0gMDsKKwlkcml2ZV9pbmZvLT5zZWN0b3JzID0gMDsKKwlkcml2ZV9pbmZvLT5jeWxpbmRlcnMgPSAwOworCWRyaXZlX2luZm8tPnJhaWRfbGV2ZWwgPSAtMTsKKwltZW1zZXQoZHJpdmVfaW5mby0+c2VyaWFsX25vLCAwLCBzaXplb2YoZHJpdmVfaW5mby0+c2VyaWFsX25vKSk7CisJbWVtc2V0KGRyaXZlX2luZm8tPm1vZGVsLCAwLCBzaXplb2YoZHJpdmVfaW5mby0+bW9kZWwpKTsKKwltZW1zZXQoZHJpdmVfaW5mby0+cmV2LCAwLCBzaXplb2YoZHJpdmVfaW5mby0+cmV2KSk7CisJbWVtc2V0KGRyaXZlX2luZm8tPnZlbmRvciwgMCwgc2l6ZW9mKGRyaXZlX2luZm8tPnZlbmRvcikpOworCS8qCisJICogZG9uJ3QgY2xlYXIgdGhlIExVTklEIHRob3VnaCwgd2UgbmVlZCB0byByZW1lbWJlciB3aGljaAorCSAqIG9uZSB0aGlzIG9uZSBpcy4KKwkgKi8KK30KKwogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGRlcmVnaXN0ZXIgdGhlIGRpc2sgYW5kIGl0J3MgcXVldWUgZnJvbSB0aGUKICAqIGtlcm5lbC4gIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRyb2xsZXIgbG9jayBoZWxkIGFuZCB0aGUKICAqIGRydiBzdHJ1Y3R1cmVzIGJ1c3lfY29uZmlndXJpbmcgZmxhZyBzZXQuICBJdCdzIHBhcmFtZXRlcnMgYXJlOgpAQCAtMjA0Niw0MyArMjI5Niw0OCBAQAogICogICAgICAgICAgICAgdGhlIGRpc2sgaW4gcHJlcGFyYXRpb24gZm9yIHJlLWFkZGluZyBpdC4gIEluIHRoaXMgY2FzZQogICogICAgICAgICAgICAgdGhlIGhpZ2hlc3RfbHVuIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZCBhbmQgdGhlIEx1bklECiAgKiAgICAgICAgICAgICBzaG91bGQgbm90IGJlIGNsZWFyZWQuCisgKiB2aWFfaW9jdGwKKyAqICAgIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgd2UndmUgcmVhY2hlZCB0aGlzIHBhdGggdmlhIGlvY3RsLgorICogICAgVGhpcyBhZmZlY3RzIHRoZSBtYXhpbXVtIHVzYWdlIGNvdW50IGFsbG93ZWQgZm9yIGMwZDAgdG8gYmUgbWVzc2VkIHdpdGguCisgKiAgICBJZiB0aGlzIHBhdGggaXMgcmVhY2hlZCB2aWEgaW9jdGwoKSwgdGhlbiB0aGUgbWF4X3VzYWdlX2NvdW50IHdpbGwKKyAqICAgIGJlIDEsIGFzIHRoZSBwcm9jZXNzIGNhbGxpbmcgaW9jdGwoKSBoYXMgZ290IHRvIGhhdmUgdGhlIGRldmljZSBvcGVuLgorICogICAgSWYgd2UgZ2V0IGhlcmUgdmlhIHN5c2ZzLCB0aGVuIHRoZSBtYXggdXNhZ2UgY291bnQgd2lsbCBiZSB6ZXJvLgogKi8KIHN0YXRpYyBpbnQgZGVyZWdpc3Rlcl9kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4LAotCQkJICAgaW50IGNsZWFyX2FsbCkKKwkJCSAgIGludCBjbGVhcl9hbGwsIGludCB2aWFfaW9jdGwpCiB7CiAJaW50IGk7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7CiAJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydjsKKwlpbnQgcmVjYWxjdWxhdGVfaGlnaGVzdF9sdW47CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCXJldHVybiAtRVBFUk07CiAKLQlkcnYgPSAmaC0+ZHJ2W2Rydl9pbmRleF07CisJZHJ2ID0gaC0+ZHJ2W2Rydl9pbmRleF07CiAJZGlzayA9IGgtPmdlbmRpc2tbZHJ2X2luZGV4XTsKIAogCS8qIG1ha2Ugc3VyZSBsb2dpY2FsIHZvbHVtZSBpcyBOT1QgaXMgdXNlICovCiAJaWYgKGNsZWFyX2FsbCB8fCAoaC0+Z2VuZGlza1swXSA9PSBkaXNrKSkgewotCQlpZiAoZHJ2LT51c2FnZV9jb3VudCA+IDEpCisJCWlmIChkcnYtPnVzYWdlX2NvdW50ID4gdmlhX2lvY3RsKQogCQkJcmV0dXJuIC1FQlVTWTsKIAl9IGVsc2UgaWYgKGRydi0+dXNhZ2VfY291bnQgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCisJcmVjYWxjdWxhdGVfaGlnaGVzdF9sdW4gPSAoZHJ2ID09IGgtPmRydltoLT5oaWdoZXN0X2x1bl0pOworCiAJLyogaW52YWxpZGF0ZSB0aGUgZGV2aWNlcyBhbmQgZGVyZWdpc3RlciB0aGUgZGlzay4gIElmIGl0IGlzIGRpc2sKIAkgKiB6ZXJvIGRvIG5vdCBkZXJlZ2lzdGVyIGl0IGJ1dCBqdXN0IHplcm8gb3V0IGl0J3MgdmFsdWVzLiAgVGhpcwogCSAqIGFsbG93cyB1cyB0byBkZWxldGUgZGlzayB6ZXJvIGJ1dCBrZWVwIHRoZSBjb250cm9sbGVyIHJlZ2lzdGVyZWQuCiAJICovCiAJaWYgKGgtPmdlbmRpc2tbMF0gIT0gZGlzaykgewogCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwotCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkKKwkJaWYgKGRpc2stPmZsYWdzICYgR0VOSERfRkxfVVApIHsKKwkJCWNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoaCwgZHJ2X2luZGV4LCAwKTsKIAkJCWRlbF9nZW5kaXNrKGRpc2spOwotCQlpZiAocSkgewotCQkJYmxrX2NsZWFudXBfcXVldWUocSk7Ci0JCQkvKiBTZXQgZHJ2LT5xdWV1ZSB0byBOVUxMIHNvIHRoYXQgd2UgZG8gbm90IHRyeQotCQkJICogdG8gY2FsbCBibGtfc3RhcnRfcXVldWUgb24gdGhpcyBxdWV1ZSBpbiB0aGUKLQkJCSAqIGludGVycnVwdCBoYW5kbGVyCi0JCQkgKi8KLQkJCWRydi0+cXVldWUgPSBOVUxMOwogCQl9CisJCWlmIChxKQorCQkJYmxrX2NsZWFudXBfcXVldWUocSk7CiAJCS8qIElmIGNsZWFyX2FsbCBpcyBzZXQgdGhlbiB3ZSBhcmUgZGVsZXRpbmcgdGhlIGxvZ2ljYWwKIAkJICogZHJpdmUsIG5vdCBqdXN0IHJlZnJlc2hpbmcgaXRzIGluZm8uICBGb3IgZHJpdmVzCiAJCSAqIG90aGVyIHRoYW4gZGlzayAwIHdlIHdpbGwgY2FsbCBwdXRfZGlzay4gIFdlIGRvIG5vdApAQCAtMjEwNSwzNCArMjM2MCwyMCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIDApOworCQljY2lzc19jbGVhcl9kcml2ZV9pbmZvKGRydik7CiAJfQogCiAJLS1oLT5udW1fbHVuczsKLQkvKiB6ZXJvIG91dCB0aGUgZGlzayBzaXplIGluZm8gKi8KLQlkcnYtPm5yX2Jsb2NrcyA9IDA7Ci0JZHJ2LT5ibG9ja19zaXplID0gMDsKLQlkcnYtPmhlYWRzID0gMDsKLQlkcnYtPnNlY3RvcnMgPSAwOwotCWRydi0+Y3lsaW5kZXJzID0gMDsKLQlkcnYtPnJhaWRfbGV2ZWwgPSAtMTsJLyogVGhpcyBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgdmFyaWFibGUgdG8KLQkJCQkgKiBpbmRpY2F0ZSB0aGF0IHRoaXMgZWxlbWVudCBvZiB0aGUgZHJpdmUKLQkJCQkgKiBhcnJheSBpcyBmcmVlLgotCQkJCSAqLwogCi0JaWYgKGNsZWFyX2FsbCkgewotCQkvKiBjaGVjayB0byBzZWUgaWYgaXQgd2FzIHRoZSBsYXN0IGRpc2sgKi8KLQkJaWYgKGRydiA9PSBoLT5kcnYgKyBoLT5oaWdoZXN0X2x1bikgewotCQkJLyogaWYgc28sIGZpbmQgdGhlIG5ldyBoaWdodGVzdCBsdW4gKi8KLQkJCWludCBpLCBuZXdoaWdoZXN0ID0gLTE7Ci0JCQlmb3IgKGkgPSAwOyBpIDw9IGgtPmhpZ2hlc3RfbHVuOyBpKyspIHsKLQkJCQkvKiBpZiB0aGUgZGlzayBoYXMgc2l6ZSA+IDAsIGl0IGlzIGF2YWlsYWJsZSAqLwotCQkJCWlmIChoLT5kcnZbaV0uaGVhZHMpCi0JCQkJCW5ld2hpZ2hlc3QgPSBpOwotCQkJfQotCQkJaC0+aGlnaGVzdF9sdW4gPSBuZXdoaWdoZXN0OworCS8qIGlmIGl0IHdhcyB0aGUgbGFzdCBkaXNrLCBmaW5kIHRoZSBuZXcgaGlnaHRlc3QgbHVuICovCisJaWYgKGNsZWFyX2FsbCAmJiByZWNhbGN1bGF0ZV9oaWdoZXN0X2x1bikgeworCQlpbnQgaSwgbmV3aGlnaGVzdCA9IC0xOworCQlmb3IgKGkgPSAwOyBpIDw9IGgtPmhpZ2hlc3RfbHVuOyBpKyspIHsKKwkJCS8qIGlmIHRoZSBkaXNrIGhhcyBzaXplID4gMCwgaXQgaXMgYXZhaWxhYmxlICovCisJCQlpZiAoaC0+ZHJ2W2ldICYmIGgtPmRydltpXS0+aGVhZHMpCisJCQkJbmV3aGlnaGVzdCA9IGk7CiAJCX0KLQotCQlkcnYtPkx1bklEID0gMDsKKwkJaC0+aGlnaGVzdF9sdW4gPSBuZXdoaWdoZXN0OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI0NzksOCArMjcyMCw2IEBACiAJfSBlbHNlIHsJCS8qIEdldCBnZW9tZXRyeSBmYWlsZWQgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IHJlYWRpbmcgZ2VvbWV0cnkgZmFpbGVkXG4iKTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgaGVhZHM9JWQsIHNlY3RvcnM9JWQsIGN5bGluZGVycz0lZFxuXG4iLAotCSAgICAgICBkcnYtPmhlYWRzLCBkcnYtPnNlY3RvcnMsIGRydi0+Y3lsaW5kZXJzKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI1MTQsOSArMjc1Myw2IEBACiAJCSp0b3RhbF9zaXplID0gMDsKIAkJKmJsb2NrX3NpemUgPSBCTE9DS19TSVpFOwogCX0KLQlpZiAoKnRvdGFsX3NpemUgIT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgYmxvY2tzPSAlbGx1IGJsb2NrX3NpemU9ICVkXG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKSp0b3RhbF9zaXplKzEsICpibG9ja19zaXplKTsKIAlrZnJlZShidWYpOwogfQogCkBAIC0yNTY4LDcgKzI4MDQsOCBAQAogCUlucXVpcnlEYXRhX3N0cnVjdCAqaW5xX2J1ZmYgPSBOVUxMOwogCiAJZm9yIChsb2d2b2wgPSAwOyBsb2d2b2wgPCBDSVNTX01BWF9MVU47IGxvZ3ZvbCsrKSB7Ci0JCWlmIChoLT5kcnZbbG9ndm9sXS5MdW5JRCA9PSBkcnYtPkx1bklEKSB7CisJCWlmIChtZW1jbXAoaC0+ZHJ2W2xvZ3ZvbF0tPkx1bklELCBkcnYtPkx1bklELAorCQkJc2l6ZW9mKGRydi0+THVuSUQpKSA9PSAwKSB7CiAJCQlGT1VORCA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtMzA1Myw4ICszMjkwLDcgQEAKIAkvKiBUaGUgZmlyc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgY29udHJvbGxlciBlcnJvciByZXBvcnRpbmcuICovCiAJYy0+SGVhZGVyLlRhZy5sb3dlciA9IChjLT5jbWRpbmRleCA8PCAzKTsKIAljLT5IZWFkZXIuVGFnLmxvd2VyIHw9IDB4MDQ7CS8qIGZsYWcgZm9yIGRpcmVjdCBsb29rdXAuICovCi0JYy0+SGVhZGVyLkxVTi5Mb2dEZXYuVm9sSWQgPSBkcnYtPkx1bklEOwotCWMtPkhlYWRlci5MVU4uTG9nRGV2Lk1vZGUgPSAxOworCW1lbWNweSgmYy0+SGVhZGVyLkxVTiwgZHJ2LT5MdW5JRCwgc2l6ZW9mKGRydi0+THVuSUQpKTsKIAljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOwkvLyAxMiBieXRlIGNvbW1hbmRzIG5vdCBpbiBGVyB5ZXQ7CiAJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsJLy8gSXQgaXMgYSBjb21tYW5kLgogCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKQEAgLTMyMzIsMjAgKzM0NjgsMTIxIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCisvKioKKyAqIGFkZF90b19zY2FuX2xpc3QoKSAtIGFkZCBjb250cm9sbGVyIHRvIHJlc2NhbiBxdWV1ZQorICogQGg6CQkgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyLgorICoKKyAqIEFkZHMgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHJlc2NhbiBxdWV1ZSBpZiBub3QgYWxyZWFkeSBvbiB0aGUgcXVldWUuCisgKgorICogcmV0dXJucyAxIGlmIGFkZGVkIHRvIHRoZSBxdWV1ZSwgMCBpZiBza2lwcGVkIChjb3VsZCBiZSBvbiB0aGUKKyAqIHF1ZXVlIGFscmVhZHksIG9yIHRoZSBjb250cm9sbGVyIGNvdWxkIGJlIGluaXRpYWxpemluZyBvciBzaHV0dGluZworICogZG93bikuCisgKiovCitzdGF0aWMgaW50IGFkZF90b19zY2FuX2xpc3Qoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICp0ZXN0X2g7CisJaW50IGZvdW5kID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChoLT5idXN5X2luaXRpYWxpemluZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW11dGV4X3RyeWxvY2soJmgtPmJ1c3lfc2h1dHRpbmdfZG93bikpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmc2Nhbl9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXN0X2gsICZzY2FuX3EsIHNjYW5fbGlzdCkgeworCQlpZiAodGVzdF9oID09IGgpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZm91bmQgJiYgIWgtPmJ1c3lfc2Nhbm5pbmcpIHsKKwkJSU5JVF9DT01QTEVUSU9OKGgtPnNjYW5fd2FpdCk7CisJCWxpc3RfYWRkX3RhaWwoJmgtPnNjYW5fbGlzdCwgJnNjYW5fcSk7CisJCXJldCA9IDE7CisJfQorCW11dGV4X3VubG9jaygmc2Nhbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoLT5idXN5X3NodXR0aW5nX2Rvd24pOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiByZW1vdmVfZnJvbV9zY2FuX2xpc3QoKSAtIHJlbW92ZSBjb250cm9sbGVyIGZyb20gcmVzY2FuIHF1ZXVlCisgKiBAaDoJCQkgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyLgorICoKKyAqIFJlbW92ZXMgdGhlIGNvbnRyb2xsZXIgZnJvbSB0aGUgcmVzY2FuIHF1ZXVlIGlmIHByZXNlbnQuIEJsb2NrcyBpZgorICogdGhlIGNvbnRyb2xsZXIgaXMgY3VycmVudGx5IGNvbmR1Y3RpbmcgYSByZXNjYW4uCisgKiovCitzdGF0aWMgdm9pZCByZW1vdmVfZnJvbV9zY2FuX2xpc3Qoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICp0ZXN0X2gsICp0bXBfaDsKKwlpbnQgc2Nhbm5pbmcgPSAwOworCisJbXV0ZXhfbG9jaygmc2Nhbl9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRlc3RfaCwgdG1wX2gsICZzY2FuX3EsIHNjYW5fbGlzdCkgeworCQlpZiAodGVzdF9oID09IGgpIHsKKwkJCWxpc3RfZGVsKCZoLT5zY2FuX2xpc3QpOworCQkJY29tcGxldGVfYWxsKCZoLT5zY2FuX3dhaXQpOworCQkJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoJmgtPmJ1c3lfc2Nhbm5pbmcpCisJCXNjYW5uaW5nID0gMDsKKwltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCisJaWYgKHNjYW5uaW5nKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZoLT5zY2FuX3dhaXQpOworfQorCisvKioKKyAqIHNjYW5fdGhyZWFkKCkgLSBrZXJuZWwgdGhyZWFkIHVzZWQgdG8gcmVzY2FuIGNvbnRyb2xsZXJzCisgKiBAZGF0YToJIElnbm9yZWQuCisgKgorICogQSBrZXJuZWwgdGhyZWFkIHVzZWQgc2NhbiBmb3IgZHJpdmUgdG9wb2xvZ3kgY2hhbmdlcyBvbgorICogY29udHJvbGxlcnMuIFRoZSB0aHJlYWQgcHJvY2Vzc2VzIG9ubHkgb25lIGNvbnRyb2xsZXIgYXQgYSB0aW1lCisgKiB1c2luZyBhIHF1ZXVlLiAgQ29udHJvbGxlcnMgYXJlIGFkZGVkIHRvIHRoZSBxdWV1ZSB1c2luZworICogYWRkX3RvX3NjYW5fbGlzdCgpIGFuZCByZW1vdmVkIGZyb20gdGhlIHF1ZXVlIGVpdGhlciBhZnRlciBkb25lCisgKiBwcm9jZXNzaW5nIG9yIHVzaW5nIHJlbW92ZV9mcm9tX3NjYW5fbGlzdCgpLgorICoKKyAqIHJldHVybnMgMC4KKyAqKi8KIHN0YXRpYyBpbnQgc2Nhbl90aHJlYWQodm9pZCAqZGF0YSkKIHsKLQljdGxyX2luZm9fdCAqaCA9IGRhdGE7Ci0JaW50IHJjOwotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwotCWgtPnJlc2Nhbl93YWl0ID0gJndhaXQ7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKIAotCWZvciAoOzspIHsKLQkJcmMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJndhaXQpOworCXdoaWxlICgxKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlKCk7CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQlicmVhazsKLQkJaWYgKCFyYykKLQkJCXJlYnVpbGRfbHVuX3RhYmxlKGgsIDApOworCisJCXdoaWxlICgxKSB7CisJCQltdXRleF9sb2NrKCZzY2FuX211dGV4KTsKKwkJCWlmIChsaXN0X2VtcHR5KCZzY2FuX3EpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaCA9IGxpc3RfZW50cnkoc2Nhbl9xLm5leHQsCisJCQkJICAgICAgIHN0cnVjdCBjdGxyX2luZm8sCisJCQkJICAgICAgIHNjYW5fbGlzdCk7CisJCQlsaXN0X2RlbCgmaC0+c2Nhbl9saXN0KTsKKwkJCWgtPmJ1c3lfc2Nhbm5pbmcgPSAxOworCQkJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKworCQkJaWYgKGgpIHsKKwkJCQlyZWJ1aWxkX2x1bl90YWJsZShoLCAwLCAwKTsKKwkJCQljb21wbGV0ZV9hbGwoJmgtPnNjYW5fd2FpdCk7CisJCQkJbXV0ZXhfbG9jaygmc2Nhbl9tdXRleCk7CisJCQkJaC0+YnVzeV9zY2FubmluZyA9IDA7CisJCQkJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKwkJCX0KKwkJfQogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zMjY4LDggKzM2MDUsOCBAQAogCWNhc2UgUkVQT1JUX0xVTlNfQ0hBTkdFRDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogcmVwb3J0IExVTiBkYXRhICIKIAkJCSJjaGFuZ2VkXG4iLCBoLT5jdGxyKTsKLQkJaWYgKGgtPnJlc2Nhbl93YWl0KQotCQkJY29tcGxldGUoaC0+cmVzY2FuX3dhaXQpOworCQlhZGRfdG9fc2Nhbl9saXN0KGgpOworCQl3YWtlX3VwX3Byb2Nlc3MoY2Npc3Nfc2Nhbl90aHJlYWQpOwogCQlyZXR1cm4gMTsKIAlicmVhazsKIAljYXNlIFBPV0VSX09SX1JFU0VUOgpAQCAtMzQyMiw3ICszNzU5LDI3IEBACiAJX191NjQgY2ZnX29mZnNldDsKIAlfX3UzMiBjZmdfYmFzZV9hZGRyOwogCV9fdTY0IGNmZ19iYXNlX2FkZHJfaW5kZXg7Ci0JaW50IGksIGVycjsKKwlpbnQgaSwgcHJvZF9pbmRleCwgZXJyOworCisJc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJYm9hcmRfaWQgPSAoKChfX3UzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAorCQkgICAgc3Vic3lzdGVtX3ZlbmRvcl9pZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9kdWN0cyk7IGkrKykgeworCQkvKiBTdGFuZCBhc2lkZSBmb3IgaHBzYSBkcml2ZXIgb24gcmVxdWVzdCAqLworCQlpZiAoY2Npc3NfYWxsb3dfaHBzYSAmJiBwcm9kdWN0c1tpXS5ib2FyZF9pZCA9PSBIUFNBX0JPVU5EQVJZKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChib2FyZF9pZCA9PSBwcm9kdWN0c1tpXS5ib2FyZF9pZCkKKwkJCWJyZWFrOworCX0KKwlwcm9kX2luZGV4ID0gaTsKKwlpZiAocHJvZF9pbmRleCA9PSBBUlJBWV9TSVpFKHByb2R1Y3RzKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJInVucmVjb2duaXplZCBib2FyZCBJRDogMHglMDhseCwgaWdub3JpbmcuXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpIGJvYXJkX2lkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyogY2hlY2sgdG8gc2VlIGlmIGNvbnRyb2xsZXIgaGFzIGJlZW4gZGlzYWJsZWQgKi8KIAkvKiBCRUZPUkUgdHJ5aW5nIHRvIGVuYWJsZSBpdCAqLwpAQCAtMzQ0NiwxMSArMzgwMyw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0Jc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7Ci0Jc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7Ci0JYm9hcmRfaWQgPSAoKChfX3UzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAotCQkgICAgc3Vic3lzdGVtX3ZlbmRvcl9pZCk7Ci0KICNpZmRlZiBDQ0lTU19ERUJVRwogCXByaW50aygiY29tbWFuZCA9ICV4XG4iLCBjb21tYW5kKTsKIAlwcmludGsoImlycSA9ICV4XG4iLCBwZGV2LT5pcnEpOwpAQCAtMzQ4OSw3ICszODQxLDcgQEAKIAkJaWYgKHNjcmF0Y2hwYWQgPT0gQ0NJU1NfRklSTVdBUkVfUkVBRFkpCiAJCQlicmVhazsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dChIWiAvIDEwKTsJLyogd2FpdCAxMDBtcyAqLworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CS8qIHdhaXQgMTAwbXMgKi8KIAl9CiAJaWYgKHNjcmF0Y2hwYWQgIT0gQ0NJU1NfRklSTVdBUkVfUkVBRFkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IEJvYXJkIG5vdCByZWFkeS4gIFRpbWVkIG91dC5cbiIpOwpAQCAtMzUzNiwxNCArMzg4OCw5IEBACiAJICogbGVhdmUgYSBsaXR0bGUgcm9vbSBmb3IgaW9jdGwgY2FsbHMuCiAJICovCiAJYy0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihjLT5jZmd0YWJsZS0+Q21kc091dE1heCkpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2R1Y3RzKTsgaSsrKSB7Ci0JCWlmIChib2FyZF9pZCA9PSBwcm9kdWN0c1tpXS5ib2FyZF9pZCkgewotCQkJYy0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbaV0ucHJvZHVjdF9uYW1lOwotCQkJYy0+YWNjZXNzID0gKihwcm9kdWN0c1tpXS5hY2Nlc3MpOwotCQkJYy0+bnJfY21kcyA9IGMtPm1heF9jb21tYW5kcyAtIDQ7Ci0JCQlicmVhazsKLQkJfQotCX0KKwljLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1twcm9kX2luZGV4XS5wcm9kdWN0X25hbWU7CisJYy0+YWNjZXNzID0gKihwcm9kdWN0c1twcm9kX2luZGV4XS5hY2Nlc3MpOworCWMtPm5yX2NtZHMgPSBjLT5tYXhfY29tbWFuZHMgLSA0OwogCWlmICgocmVhZGIoJmMtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMF0pICE9ICdDJykgfHwKIAkgICAgKHJlYWRiKCZjLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzFdKSAhPSAnSScpIHx8CiAJICAgIChyZWFkYigmYy0+Y2ZndGFibGUtPlNpZ25hdHVyZVsyXSkgIT0gJ1MnKSB8fApAQCAtMzU1MiwyNyArMzg5OSw2IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAl9Ci0JLyogV2UgZGlkbid0IGZpbmQgdGhlIGNvbnRyb2xsZXIgaW4gb3VyIGxpc3QuIFdlIGtub3cgdGhlCi0JICogc2lnbmF0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIGFuIEhQIGRldmljZSBsZXQncyB0cnkgdG8KLQkgKiBiaW5kIHRvIHRoZSBkZXZpY2UgYW5kIGZpcmUgaXQgdXAuIE90aGVyd2lzZSB3ZSBiYWlsLgotCSAqLwotCWlmIChpID09IEFSUkFZX1NJWkUocHJvZHVjdHMpKSB7Ci0JCWlmIChzdWJzeXN0ZW1fdmVuZG9yX2lkID09IFBDSV9WRU5ET1JfSURfSFApIHsKLQkJCWMtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW2ktMV0ucHJvZHVjdF9uYW1lOwotCQkJYy0+YWNjZXNzID0gKihwcm9kdWN0c1tpLTFdLmFjY2Vzcyk7Ci0JCQljLT5ucl9jbWRzID0gYy0+bWF4X2NvbW1hbmRzIC0gNDsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBUaGlzIGlzIGFuIHVua25vd24gIgotCQkJCSJTbWFydCBBcnJheSBjb250cm9sbGVyLlxuIgotCQkJCSJjY2lzczogUGxlYXNlIHVwZGF0ZSB0byB0aGUgbGF0ZXN0IGRyaXZlciAiCi0JCQkJImF2YWlsYWJsZSBmcm9tIHd3dy5ocC5jb20uXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBTb3JyeSwgSSBkb24ndCBrbm93IGhvdyIKLQkJCQkiIHRvIGFjY2VzcyB0aGUgU21hcnQgQXJyYXkgY29udHJvbGxlciAlMDhseFxuIgotCQkJCQksICh1bnNpZ25lZCBsb25nKWJvYXJkX2lkKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7Ci0JCX0KLQl9CiAjaWZkZWYgQ09ORklHX1g4NgogCXsKIAkJLyogTmVlZCB0byBlbmFibGUgcHJlZmV0Y2ggaW4gdGhlIFNDU0kgY29yZSBmb3IgNjQwMCBpbiB4ODYgKi8KQEAgLTM2MTUsNyArMzk0MSw3IEBACiAJCQlicmVhazsKIAkJLyogZGVsYXkgYW5kIHRyeSBhZ2FpbiAqLwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKKwkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDEpKTsKIAl9CiAKICNpZmRlZiBDQ0lTU19ERUJVRwpAQCAtMzY2OSwxNSArMzk5NSwxNiBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9oYmEoaW50IGkpCitzdGF0aWMgdm9pZCBmcmVlX2hiYShpbnQgbikKIHsKLQljdGxyX2luZm9fdCAqcCA9IGhiYVtpXTsKLQlpbnQgbjsKKwljdGxyX2luZm9fdCAqaCA9IGhiYVtuXTsKKwlpbnQgaTsKIAotCWhiYVtpXSA9IE5VTEw7Ci0JZm9yIChuID0gMDsgbiA8IENJU1NfTUFYX0xVTjsgbisrKQotCQlwdXRfZGlzayhwLT5nZW5kaXNrW25dKTsKLQlrZnJlZShwKTsKKwloYmFbbl0gPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBoLT5oaWdoZXN0X2x1biArIDE7IGkrKykKKwkJaWYgKGgtPmdlbmRpc2tbaV0gIT0gTlVMTCkKKwkJCXB1dF9kaXNrKGgtPmdlbmRpc2tbaV0pOworCWtmcmVlKGgpOwogfQogCiAvKiBTZW5kIGEgbWVzc2FnZSBDREIgdG8gdGhlIGZpcm13YXJlLiAqLwpAQCAtMzkxOCwxNCArNDI0NSwxNyBAQAogCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAxOwogCUlOSVRfSExJU1RfSEVBRCgmaGJhW2ldLT5jbXBRKTsKIAlJTklUX0hMSVNUX0hFQUQoJmhiYVtpXS0+cmVxUSk7CisJbXV0ZXhfaW5pdCgmaGJhW2ldLT5idXN5X3NodXR0aW5nX2Rvd24pOwogCiAJaWYgKGNjaXNzX3BjaV9pbml0KGhiYVtpXSwgcGRldikgIT0gMCkKLQkJZ290byBjbGVhbjA7CisJCWdvdG8gY2xlYW5fbm9fcmVsZWFzZV9yZWdpb25zOwogCiAJc3ByaW50ZihoYmFbaV0tPmRldm5hbWUsICJjY2lzcyVkIiwgaSk7CiAJaGJhW2ldLT5jdGxyID0gaTsKIAloYmFbaV0tPnBkZXYgPSBwZGV2OwogCisJaW5pdF9jb21wbGV0aW9uKCZoYmFbaV0tPnNjYW5fd2FpdCk7CisKIAlpZiAoY2Npc3NfY3JlYXRlX2hiYV9zeXNmc19lbnRyeShoYmFbaV0pKQogCQlnb3RvIGNsZWFuMDsKIApAQCAtNDAwMSw4ICs0MzMxLDcgQEAKIAloYmFbaV0tPm51bV9sdW5zID0gMDsKIAloYmFbaV0tPmhpZ2hlc3RfbHVuID0gLTE7CiAJZm9yIChqID0gMDsgaiA8IENJU1NfTUFYX0xVTjsgaisrKSB7Ci0JCWhiYVtpXS0+ZHJ2W2pdLnJhaWRfbGV2ZWwgPSAtMTsKLQkJaGJhW2ldLT5kcnZbal0ucXVldWUgPSBOVUxMOworCQloYmFbaV0tPmRydltqXSA9IE5VTEw7CiAJCWhiYVtpXS0+Z2VuZGlza1tqXSA9IE5VTEw7CiAJfQogCkBAIC00MDM1LDE0ICs0MzY0LDggQEAKIAogCWhiYVtpXS0+Y2Npc3NfbWF4X3NlY3RvcnMgPSAyMDQ4OwogCisJcmVidWlsZF9sdW5fdGFibGUoaGJhW2ldLCAxLCAwKTsKIAloYmFbaV0tPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKLQotCXJlYnVpbGRfbHVuX3RhYmxlKGhiYVtpXSwgMSk7Ci0JaGJhW2ldLT5jY2lzc19zY2FuX3RocmVhZCA9IGt0aHJlYWRfcnVuKHNjYW5fdGhyZWFkLCBoYmFbaV0sCi0JCQkJImNjaXNzX3NjYW4lMDJkIiwgaSk7Ci0JaWYgKElTX0VSUihoYmFbaV0tPmNjaXNzX3NjYW5fdGhyZWFkKSkKLQkJcmV0dXJuIFBUUl9FUlIoaGJhW2ldLT5jY2lzc19zY2FuX3RocmVhZCk7Ci0KIAlyZXR1cm4gMTsKIAogY2xlYW40OgpAQCAtNDA2MiwxOCArNDM4NSwxNCBAQAogY2xlYW4xOgogCWNjaXNzX2Rlc3Ryb3lfaGJhX3N5c2ZzX2VudHJ5KGhiYVtpXSk7CiBjbGVhbjA6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2NsZWFuX25vX3JlbGVhc2VfcmVnaW9uczoKIAloYmFbaV0tPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKLQkvKiBjbGVhbnVwIGFueSBxdWV1ZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkICovCi0JZm9yIChqPTA7IGogPD0gaGJhW2ldLT5oaWdoZXN0X2x1bjsgaisrKXsKLQkJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9ICYoaGJhW2ldLT5kcnZbal0pOwotCQlpZiAoZHJ2LT5xdWV1ZSkKLQkJCWJsa19jbGVhbnVwX3F1ZXVlKGRydi0+cXVldWUpOwotCX0KKwogCS8qCiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCiAJICovCi0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9oYmEoaSk7CiAJcmV0dXJuIC0xOwpAQCAtNDEyNSw4ICs0NDQ0LDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWt0aHJlYWRfc3RvcChoYmFbaV0tPmNjaXNzX3NjYW5fdGhyZWFkKTsKKwltdXRleF9sb2NrKCZoYmFbaV0tPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAKKwlyZW1vdmVfZnJvbV9zY2FuX2xpc3QoaGJhW2ldKTsKIAlyZW1vdmVfcHJvY19lbnRyeShoYmFbaV0tPmRldm5hbWUsIHByb2NfY2Npc3MpOwogCXVucmVnaXN0ZXJfYmxrZGV2KGhiYVtpXS0+bWFqb3IsIGhiYVtpXS0+ZGV2bmFtZSk7CiAKQEAgLTQxMzYsOCArNDQ1NiwxMCBAQAogCQlpZiAoZGlzaykgewogCQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkaXNrLT5xdWV1ZTsKIAotCQkJaWYgKGRpc2stPmZsYWdzICYgR0VOSERfRkxfVVApCisJCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkgeworCQkJCWNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoaGJhW2ldLCBqLCAxKTsKIAkJCQlkZWxfZ2VuZGlzayhkaXNrKTsKKwkJCX0KIAkJCWlmIChxKQogCQkJCWJsa19jbGVhbnVwX3F1ZXVlKHEpOwogCQl9CkBAIC00MTcwLDYgKzQ0OTIsNyBAQAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWNjaXNzX2Rlc3Ryb3lfaGJhX3N5c2ZzX2VudHJ5KGhiYVtpXSk7CisJbXV0ZXhfdW5sb2NrKCZoYmFbaV0tPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAJZnJlZV9oYmEoaSk7CiB9CiAKQEAgLTQyMDIsMTUgKzQ1MjUsMjUgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJLyogU3RhcnQgdGhlIHNjYW4gdGhyZWFkICovCisJY2Npc3Nfc2Nhbl90aHJlYWQgPSBrdGhyZWFkX3J1bihzY2FuX3RocmVhZCwgTlVMTCwgImNjaXNzX3NjYW4iKTsKKwlpZiAoSVNfRVJSKGNjaXNzX3NjYW5fdGhyZWFkKSkgeworCQllcnIgPSBQVFJfRVJSKGNjaXNzX3NjYW5fdGhyZWFkKTsKKwkJZ290byBlcnJfYnVzX3VucmVnaXN0ZXI7CisJfQorCiAJLyogUmVnaXN0ZXIgZm9yIG91ciBQQ0kgZGV2aWNlcyAqLwogCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNjaXNzX3BjaV9kcml2ZXIpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2J1c19yZWdpc3RlcjsKKwkJZ290byBlcnJfdGhyZWFkX3N0b3A7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogCi1lcnJfYnVzX3JlZ2lzdGVyOgorZXJyX3RocmVhZF9zdG9wOgorCWt0aHJlYWRfc3RvcChjY2lzc19zY2FuX3RocmVhZCk7CitlcnJfYnVzX3VucmVnaXN0ZXI6CiAJYnVzX3VucmVnaXN0ZXIoJmNjaXNzX2J1c190eXBlKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQyMjcsNiArNDU2MCw3IEBACiAJCQljY2lzc19yZW1vdmVfb25lKGhiYVtpXS0+cGRldik7CiAJCX0KIAl9CisJa3RocmVhZF9zdG9wKGNjaXNzX3NjYW5fdGhyZWFkKTsKIAlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL2NjaXNzIiwgTlVMTCk7CiAJYnVzX3VucmVnaXN0ZXIoJmNjaXNzX2J1c190eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3MuaAppbmRleCAwNmE1ZGIyLi4zMTUyNGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBDQ0lTU19ICiAKICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJjY2lzc19jbWQuaCIKIApAQCAtMjksNyArMzAsNyBAQAogfTsKIHR5cGVkZWYgc3RydWN0IF9kcml2ZV9pbmZvX3N0cnVjdAogewotIAlfX3UzMiAgIEx1bklEOwkKKwl1bnNpZ25lZCBjaGFyIEx1bklEWzhdOwogCWludCAJdXNhZ2VfY291bnQ7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOwogCXNlY3Rvcl90IG5yX2Jsb2NrczsKQEAgLTUxLDYgKzUyLDcgQEAKIAljaGFyIHZlbmRvcltWRU5ET1JfTEVOICsgMV07IC8qIFNDU0kgdmVuZG9yIHN0cmluZyAqLwogCWNoYXIgbW9kZWxbTU9ERUxfTEVOICsgMV07ICAgLyogU0NTSSBtb2RlbCBzdHJpbmcgKi8KIAljaGFyIHJldltSRVZfTEVOICsgMV07ICAgICAgIC8qIFNDU0kgcmV2aXNpb24gc3RyaW5nICovCisJY2hhciBkZXZpY2VfaW5pdGlhbGl6ZWQ7ICAgICAvKiBpbmRpY2F0ZXMgd2hldGhlciBkZXYgaXMgaW5pdGlhbGl6ZWQgKi8KIH0gZHJpdmVfaW5mb19zdHJ1Y3Q7CiAKIHN0cnVjdCBjdGxyX2luZm8gCkBAIC04Niw3ICs4OCw3IEBACiAJQllURQljY2lzc19yZWFkX2NhcGFjaXR5OwogCiAJLy8gaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBsb2dpY2FsIHZvbHVtZQotCWRyaXZlX2luZm9fc3RydWN0IGRydltDSVNTX01BWF9MVU5dOworCWRyaXZlX2luZm9fc3RydWN0ICpkcnZbQ0lTU19NQVhfTFVOXTsKIAogCXN0cnVjdCBhY2Nlc3NfbWV0aG9kIGFjY2VzczsKIApAQCAtMTA4LDYgKzExMCw4IEBACiAJaW50CQkJbnJfZnJlZXM7IAogCWludAkJCWJ1c3lfY29uZmlndXJpbmc7CiAJaW50CQkJYnVzeV9pbml0aWFsaXppbmc7CisJaW50CQkJYnVzeV9zY2FubmluZzsKKwlzdHJ1Y3QgbXV0ZXgJCWJ1c3lfc2h1dHRpbmdfZG93bjsKIAogCS8qIFRoaXMgZWxlbWVudCBob2xkcyB0aGUgemVybyBiYXNlZCBxdWV1ZSBudW1iZXIgb2YgdGhlIGxhc3QKIAkgKiBxdWV1ZSB0byBiZSBzdGFydGVkLiAgSXQgaXMgdXNlZCBmb3IgZmFpcm5lc3MuCkBAIC0xMjIsOCArMTI2LDggQEAKIAkvKiBhbmQgc2F2ZWQgZm9yIGxhdGVyIHByb2Nlc3NpbmcgKi8KICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgYWxpdmU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gKnJlc2Nhbl93YWl0OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2Npc3Nfc2Nhbl90aHJlYWQ7CisJc3RydWN0IGxpc3RfaGVhZCBzY2FuX2xpc3Q7CisJc3RydWN0IGNvbXBsZXRpb24gc2Nhbl93YWl0OwogCXN0cnVjdCBkZXZpY2UgZGV2OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCmluZGV4IGI4MmQ0MzguLjY0MjI2NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTE3Nyw3ICsxNzgsNiBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIGlkYV9wcm9jaW5pdChpbnQgaSk7Ci1zdGF0aWMgaW50IGlkYV9wcm9jX2dldF9pbmZvKGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKICNlbHNlCiBzdGF0aWMgdm9pZCBpZGFfcHJvY2luaXQoaW50IGkpIHt9CiAjZW5kaWYKQEAgLTIwNiw2ICsyMDYsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYXJyYXk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGFfcHJvY19mb3BzOwogCiAvKgogICogR2V0IHVzIGEgZmlsZSBpbiAvcHJvYy9hcnJheSB0aGF0IHNheXMgc29tZXRoaW5nIGFib3V0IGVhY2ggY29udHJvbGxlci4KQEAgLTIxOCwxOSArMjE5LDE2IEBACiAJCWlmICghcHJvY19hcnJheSkgcmV0dXJuOwogCX0KIAotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoaGJhW2ldLT5kZXZuYW1lLCAwLCBwcm9jX2FycmF5LAotCQkJICAgICAgIGlkYV9wcm9jX2dldF9pbmZvLCBoYmFbaV0pOworCXByb2NfY3JlYXRlX2RhdGEoaGJhW2ldLT5kZXZuYW1lLCAwLCBwcm9jX2FycmF5LCAmaWRhX3Byb2NfZm9wcywgaGJhW2ldKTsKIH0KIAogLyoKICAqIFJlcG9ydCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbnRyb2xsZXIuCiAgKi8KLXN0YXRpYyBpbnQgaWRhX3Byb2NfZ2V0X2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlkYV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCW9mZl90IHBvcyA9IDA7Ci0Jb2ZmX3QgbGVuID0gMDsKLQlpbnQgc2l6ZSwgaSwgY3RscjsKLQljdGxyX2luZm9fdCAqaCA9IChjdGxyX2luZm9fdCopZGF0YTsKKwlpbnQgaSwgY3RscjsKKwljdGxyX2luZm9fdCAqaCA9IChjdGxyX2luZm9fdCopbS0+cHJpdmF0ZTsKIAlkcnZfaW5mb190ICpkcnY7CiAjaWZkZWYgQ1BRX1BST0NfUFJJTlRfUVVFVUVTCiAJY21kbGlzdF90ICpjOwpAQCAtMjM4LDcgKzIzNiw3IEBACiAjZW5kaWYKIAogCWN0bHIgPSBoLT5jdGxyOwotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlciwgIiVzOiAgQ29tcGFxICVzIENvbnRyb2xsZXJcbiIKKwlzZXFfcHJpbnRmKG0sICIlczogIENvbXBhcSAlcyBDb250cm9sbGVyXG4iCiAJCSIgICAgICAgQm9hcmQgSUQ6IDB4JTA4bHhcbiIKIAkJIiAgICAgICBGaXJtd2FyZSBSZXZpc2lvbjogJWMlYyVjJWNcbiIKIAkJIiAgICAgICBDb250cm9sbGVyIFNpZzogMHglMDhseFxuIgpAQCAtMjU4LDU1ICsyNTYsNTQgQEAKIAkJaC0+bG9nX2RyaXZlcywgaC0+cGh5c19kcml2ZXMsCiAJCWgtPlFkZXB0aCwgaC0+bWF4UXNpbmNlaW5pdCk7CiAKLQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7Ci0JCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIkxvZ2ljYWwgRHJpdmUgSW5mbzpcbiIpOwotCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKKwlzZXFfcHV0cyhtLCAiTG9naWNhbCBEcml2ZSBJbmZvOlxuIik7CiAKIAlmb3IoaT0wOyBpPGgtPmxvZ19kcml2ZXM7IGkrKykgewogCQlkcnYgPSAmaC0+ZHJ2W2ldOwotCQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiaWRhL2MlZGQlZDogYmxrc3o9JWQgbnJfYmxrcz0lZFxuIiwKKwkJc2VxX3ByaW50ZihtLCAiaWRhL2MlZGQlZDogYmxrc3o9JWQgbnJfYmxrcz0lZFxuIiwKIAkJCQljdGxyLCBpLCBkcnYtPmJsa19zaXplLCBkcnYtPm5yX2Jsa3MpOwotCQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CiAJfQogCiAjaWZkZWYgQ1BRX1BST0NfUFJJTlRfUVVFVUVTCiAJc3Bpbl9sb2NrX2lycXNhdmUoSURBX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsgCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIlxuQ3VycmVudCBRdWV1ZXM6XG4iKTsKLQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJc2VxX3B1dHMobSwgIlxuQ3VycmVudCBRdWV1ZXM6XG4iKTsKIAogCWMgPSBoLT5yZXFROwotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJyZXFRID0gJXAiLCBjKTsgcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCXNlcV9wcmludGYobSwgInJlcVEgPSAlcCIsIGMpOwogCWlmIChjKSBjPWMtPm5leHQ7CiAJd2hpbGUoYyAmJiBjICE9IGgtPnJlcVEpIHsKLQkJc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIi0+JXAiLCBjKTsKLQkJcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCQlzZXFfcHJpbnRmKG0sICItPiVwIiwgYyk7CiAJCWM9Yy0+bmV4dDsKIAl9CiAKIAljID0gaC0+Y21wUTsKLQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiXG5jbXBRID0gJXAiLCBjKTsgcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCXNlcV9wcmludGYobSwgIlxuY21wUSA9ICVwIiwgYyk7CiAJaWYgKGMpIGM9Yy0+bmV4dDsKIAl3aGlsZShjICYmIGMgIT0gaC0+Y21wUSkgewotCQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiLT4lcCIsIGMpOwotCQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJCXNlcV9wcmludGYobSwgIi0+JXAiLCBjKTsKIAkJYz1jLT5uZXh0OwogCX0KIAotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJcbiIpOyBwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShJREFfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOyAKICNlbmRpZgotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJucl9hbGxvY3MgPSAlZFxubnJfZnJlZXMgPSAlZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJucl9hbGxvY3MgPSAlZFxubnJfZnJlZXMgPSAlZFxuIiwKIAkJCWgtPm5yX2FsbG9jcywgaC0+bnJfZnJlZXMpOwotCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKLQotCSplb2YgPSAxOwotCSpzdGFydCA9IGJ1ZmZlcitvZmZzZXQ7Ci0JbGVuIC09IG9mZnNldDsKLQlpZiAobGVuPmxlbmd0aCkKLQkJbGVuID0gbGVuZ3RoOwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgaWRhX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaWRhX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkYV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGlkYV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogbW9kdWxlX3BhcmFtX2FycmF5KGVpc2EsIGludCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IGVkZGE5ZWEuLmJkMTEyYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC05NDksNyArOTQ5LDcgQEAKIAlsby0+bG9fc3RhdGUgPSBMb191bmJvdW5kOwogCS8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0JaWYgKG1heF9wYXJ0ID4gMCkKKwlpZiAobWF4X3BhcnQgPiAwICYmIGJkZXYpCiAJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKIAltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDQzZjE5MzguLjUxMDQyZjBiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0zLDcgKzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19ibGsuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCkBAIC0xODMsMzQgKzE4Miw2IEBACiAJCXZibGstPnZxLT52cV9vcHMtPmtpY2sodmJsay0+dnEpOwogfQogCi0vKiByZXR1cm4gQVRBIGlkZW50aWZ5IGRhdGEKLSAqLwotc3RhdGljIGludCB2aXJ0YmxrX2lkZW50aWZ5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB2b2lkICphcmdwKQotewotCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCXZvaWQgKm9wYXF1ZTsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCW9wYXF1ZSA9IGttYWxsb2MoVklSVElPX0JMS19JRF9CWVRFUywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvcGFxdWUpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gdmlydGlvX2NvbmZpZ19idWYodmJsay0+dmRldiwgVklSVElPX0JMS19GX0lERU5USUZZLAotCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIGlkZW50aWZ5KSwgb3BhcXVlLAotCQlWSVJUSU9fQkxLX0lEX0JZVEVTKTsKLQotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBvcGFxdWUsIFZJUlRJT19CTEtfSURfQllURVMpKQotCQllcnIgPSAtRUZBVUxUOwotCi1vdXRfa2ZyZWU6Ci0Ja2ZyZWUob3BhcXVlKTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgdm9pZCB2aXJ0YmxrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CiAJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0xJTlVYX0JMT0NLOwpAQCAtMjIyLDEwICsxOTMsNiBAQAogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IGRpc2stPnByaXZhdGVfZGF0YTsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWRhdGE7Ci0KLQlpZiAoY21kID09IEhESU9fR0VUX0lERU5USVRZKQotCQlyZXR1cm4gdmlydGJsa19pZGVudGlmeShkaXNrLCBhcmdwKTsKIAogCS8qCiAJICogT25seSBhbGxvdyB0aGUgZ2VuZXJpYyBTQ1NJIGlvY3RscyBpZiB0aGUgaG9zdCBjYW4gc3VwcG9ydCBpdC4KQEAgLTIzMyw3ICsyMDAsOCBAQAogCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZibGstPnZkZXYsIFZJUlRJT19CTEtfRl9TQ1NJKSkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKLQlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwgYXJncCk7CisJcmV0dXJuIHNjc2lfY21kX2lvY3RsKGRpc2stPnF1ZXVlLCBkaXNrLCBtb2RlLCBjbWQsCisJCQkgICAgICAodm9pZCBfX3VzZXIgKilkYXRhKTsKIH0KIAogLyogV2UgcHJvdmlkZSBnZXRnZW8gb25seSB0byBwbGVhc2Ugc29tZSBvbGQgYm9vdGxvYWRlci9wYXJ0aXRpb25pbmcgdG9vbHMgKi8KQEAgLTMzMiw3ICszMDAsNiBAQAogCX0KIAogCXZibGstPmRpc2stPnF1ZXVlLT5xdWV1ZWRhdGEgPSB2YmxrOwotCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfVklSVCwgdmJsay0+ZGlzay0+cXVldWUpOwogCiAJaWYgKGluZGV4IDwgMjYpIHsKIAkJc3ByaW50Zih2YmxrLT5kaXNrLT5kaXNrX25hbWUsICJ2ZCVjIiwgJ2EnICsgaW5kZXggJSAyNik7CkBAIC00NDUsNyArNDEyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKIAlWSVJUSU9fQkxLX0ZfQkFSUklFUiwgVklSVElPX0JMS19GX1NFR19NQVgsIFZJUlRJT19CTEtfRl9TSVpFX01BWCwKIAlWSVJUSU9fQkxLX0ZfR0VPTUVUUlksIFZJUlRJT19CTEtfRl9STywgVklSVElPX0JMS19GX0JMS19TSVpFLAotCVZJUlRJT19CTEtfRl9TQ1NJLCBWSVJUSU9fQkxLX0ZfSURFTlRJRlksIFZJUlRJT19CTEtfRl9GTFVTSAorCVZJUlRJT19CTEtfRl9TQ1NJLCBWSVJUSU9fQkxLX0ZfRkxVU0gKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCA3YmE5MWFhLi40NGJjOGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKQEAgLTU5MSw2ICs1OTEsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNhbmNlbF93b3JrX3N5bmMoJmRhdGEtPndvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJmRhdGEtPndha2VyKTsKIAogCWNsZWFyX2JpdChCVFVTQl9JU09DX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CiAJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKQEAgLTU5OSwxMSArNjAwLDEzIEBACiAJYnR1c2Jfc3RvcF90cmFmZmljKGRhdGEpOwogCWVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gZmFpbGVkOwogCiAJZGF0YS0+aW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOwogCitmYWlsZWQ6CisJdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicygmZGF0YS0+ZGVmZXJyZWQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDA4YTZmNTAuLjZhYWQ5OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC0zMjMsNyArMzIzLDcgQEAKIAogY29uZmlnIFNYCiAJdHJpc3RhdGUgIlNwZWNpYWxpeCBTWCAoYW5kIFNJKSBjYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKFBDSSB8fCBFSVNBIHx8IElTQSkKKwlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiAoUENJIHx8IEVJU0EgfHwgSVNBKSAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgU1ggYW5kIFNJIG11bHRpcG9ydCBzZXJpYWwgY2FyZHMuCiAJICBQbGVhc2UgcmVhZCB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NlcmlhbC9zeC50eHQ+IGZvciBkZXRhaWxzLgpAQCAtMzM0LDcgKzMzNCw3IEBACiAKIGNvbmZpZyBSSU8KIAl0cmlzdGF0ZSAiU3BlY2lhbGl4IFJJTyBzeXN0ZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRAorCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTcGVjaWFsaXggUklPLCBhIHNtYXJ0IHNlcmlhbCBjYXJkIHdoaWNoCiAJICBkcml2ZXMgYW4gb3V0Ym9hcmQgYm94IHRoYXQgY2FuIHN1cHBvcnQgdXAgdG8gMTI4IHBvcnRzLiAgUHJvZHVjdApAQCAtMzk1LDcgKzM5NSw3IEBACiAKIGNvbmZpZyBBMjIzMgogCXRyaXN0YXRlICJDb21tb2RvcmUgQTIyMzIgc2VyaWFsIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgWk9SUk8gJiYgQlJPS0VOX09OX1NNUAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFpPUlJPICYmIEJST0tFTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHN1cHBvcnRzIHRoZSAyMjMyIDctcG9ydCBzZXJpYWwgY2FyZCBzaGlwcGVkIHdpdGggdGhlCiAJICBBbWlnYSAyMDAwIGFuZCBvdGhlciBab3Jyby1idXMgbWFjaGluZXMsIGRhdGluZyBmcm9tIDE5ODkuICBBdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hZ3AuaCBiL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKaW5kZXggZDZmMzZjMC4uODcwZjEyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hZ3AuaAorKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCkBAIC0xMzEsNyArMTMxLDcgQEAKIHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgewogCWNvbnN0IHN0cnVjdCBhZ3BfdmVyc2lvbiAqdmVyc2lvbjsKIAljb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgKmRyaXZlcjsKLQlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKKwljb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKIAl2b2lkICpwcmV2aW91c19zaXplOwogCXZvaWQgKmN1cnJlbnRfc2l6ZTsKIAl2b2lkICpkZXZfcHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMKaW5kZXggNWVhNGRhOC4uZGQ4NGFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jCkBAIC00MCw3ICs0MCw3IEBACiAJeyAwLCAwLCAwIH0sIC8qIGZpbGxlZCBpbiBieSBhbHBoYV9jb3JlX2FncF9zZXR1cCAqLwogfTsKIAotc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFscGhhX2NvcmVfYWdwX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWxwaGFfY29yZV9hZ3Bfdm1fb3BzID0gewogCS5mYXVsdCA9IGFscGhhX2NvcmVfYWdwX3ZtX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggNDA2ODQ2Ny4uMTBlMWYwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC0xMTYxLDEyICsxMTYxLDYgQEAKIAogCWludGVsX2k5eHhfc2V0dXBfZmx1c2goKTsKIAotI2lmZGVmIFVTRV9QQ0lfRE1BX0FQSSAKLQlpZiAocGNpX3NldF9kbWFfbWFzayhpbnRlbF9wcml2YXRlLnBjaWRldiwgRE1BX0JJVF9NQVNLKDM2KSkpCi0JCWRldl9lcnIoJmludGVsX3ByaXZhdGUucGNpZGV2LT5kZXYsCi0JCQkic2V0IGdmeCBkZXZpY2UgZG1hIG1hc2sgMzZiaXQgZmFpbGVkIVxuIik7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQogCkBAIC0yNDU2LDYgKzI0NTAsMTEgQEAKIAkJCQkmYnJpZGdlLT5tb2RlKTsKIAl9CiAKKwlpZiAoYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5ID09IGludGVsX2k5NjVfbWFza19tZW1vcnkpCisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKGludGVsX3ByaXZhdGUucGNpZGV2LCBETUFfQklUX01BU0soMzYpKSkKKwkJCWRldl9lcnIoJmludGVsX3ByaXZhdGUucGNpZGV2LT5kZXYsCisJCQkJInNldCBnZnggZGV2aWNlIGRtYSBtYXNrIDM2Yml0IGZhaWxlZCFcbiIpOworCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGJyaWRnZSk7CiAJcmV0dXJuIGFncF9hZGRfYnJpZGdlKGJyaWRnZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCmluZGV4IDYwYWI3NTEuLjFjMTI5MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCkBAIC0yMTcsNyArMjE3LDcgQEAKIAkuY29uZmlndXJlCQk9IHBhcmlzY19hZ3BfY29uZmlndXJlLAogCS5mZXRjaF9zaXplCQk9IHBhcmlzY19hZ3BfZmV0Y2hfc2l6ZSwKIAkudGxiX2ZsdXNoCQk9IHBhcmlzY19hZ3BfdGxiZmx1c2gsCi0JLm1hc2tfbWVtb3J5CQk9IHBhcmlzY19hZ3BfcGFnZV9tYXNrX21lbW9yeSwKKwkubWFza19tZW1vcnkJCT0gcGFyaXNjX2FncF9tYXNrX21lbW9yeSwKIAkubWFza3MJCQk9IHBhcmlzY19hZ3BfbWFza3MsCiAJLmFncF9lbmFibGUJCT0gcGFyaXNjX2FncF9lbmFibGUsCiAJLmNhY2hlX2ZsdXNoCQk9IGdsb2JhbF9jYWNoZV9mbHVzaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMgYi9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jCmluZGV4IGFhY2E0MDIuLjRmNTY4Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJcmV0dXJuIGFzID8gMCA6IC1FTk9NRU07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFwbV9iaW9zX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhcG1fYmlvc19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBhcG1fcmVhZCwKIAkucG9sbAkJPSBhcG1fcG9sbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKaW5kZXggNzNhMDc2NS4uZmUyY2IyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKKysrIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9iZmluLW90cC5jIGIvZHJpdmVycy9jaGFyL2JmaW4tb3RwLmMKaW5kZXggZTNkZDI0Yi4uODM2ZDRmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2JmaW4tb3RwLmMKKysrIGIvZHJpdmVycy9jaGFyL2JmaW4tb3RwLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogIyBkZWZpbmUgYmZpbl9vdHBfaW9jdGwgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmaW5fb3RwX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZmluX290cF9mb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS51bmxvY2tlZF9pb2N0bCA9IGJmaW5fb3RwX2lvY3RsLAogCS5yZWFkICAgICAgICAgICA9IGJmaW5fb3RwX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCmluZGV4IGRmNTAzOGIuLjQyNTQ0NTdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKQEAgLTMzNTQsNyArMzM1NCw3IEBACiAJCQljb250aW51ZTsKIAkJfQogI2lmZGVmIE1PRFVMRQotCQlpZiAoaXNwYXJhbSAmJiBpcnFbaV0pCisJCWlmIChpc3BhcmFtICYmIGkgPCBOUl9DQVJEUyAmJiBpcnFbaV0pCiAJCQljeV9pc2FfaXJxID0gaXJxW2ldOwogCQllbHNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kdGxrLmMgYi9kcml2ZXJzL2NoYXIvZHRsay5jCmluZGV4IDUyZTA2NTguLjA0NWM5MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kdGxrLmMKKysrIGIvZHJpdmVycy9jaGFyL2R0bGsuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGZvciAtRUJVU1kgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogZm9yIHJlcXVlc3RfcmVnaW9uICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGxvb3BzX3Blcl9qaWZmeSAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4JLyogY3ljbGVfa2VybmVsX2xvY2soKSAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIGluYl9wLCBvdXRiX3AsIGluYiwgb3V0YiwgZXRjLiAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGZvciBnZXRfdXNlciwgZXRjLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggOWQ1ODllMy4uZGRlNTEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCmluZGV4IDllNGU1NjkuLmQ0MDBjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VucnRjLmMgYi9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKaW5kZXggYWFjMDk4NS4uMzFlN2M5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5ydGMuYwpAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBSVENfVkVSU0lPTgkiMS4wNyIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggMjVjZTE1Yi4uYTYzMmYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTY3OCw3ICs2NzgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaHZjX3BvbGwpOwogCiAvKioKLSAqIGh2Y19yZXNpemUoKSAtIFVwZGF0ZSB0ZXJtaW5hbCB3aW5kb3cgc2l6ZSBpbmZvcm1hdGlvbi4KKyAqIF9faHZjX3Jlc2l6ZSgpIC0gVXBkYXRlIHRlcm1pbmFsIHdpbmRvdyBzaXplIGluZm9ybWF0aW9uLgogICogQGhwOgkJSFZDIGNvbnNvbGUgcG9pbnRlcgogICogQHdzOgkJVGVybWluYWwgd2luZG93IHNpemUgc3RydWN0dXJlCiAgKgpAQCAtNjg3LDEyICs2ODcsMTIgQEAKICAqCiAgKiBMb2NraW5nOglMb2NraW5nIGZyZWU7IHRoZSBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBob2xkaW5nIGhwLT5sb2NrCiAgKi8KLXZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKQordm9pZCBfX2h2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKIHsKIAlocC0+d3MgPSB3czsKIAlzY2hlZHVsZV93b3JrKCZocC0+dHR5X3Jlc2l6ZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChodmNfcmVzaXplKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9faHZjX3Jlc2l6ZSk7CiAKIC8qCiAgKiBUaGlzIGt0aHJlYWQgaXMgZWl0aGVyIHBvbGxpbmcgb3IgaW50ZXJydXB0IGRyaXZlbi4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmggYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAppbmRleCAzYzg1ZDc4Li4xMDk1MGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAorKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBIVkNfQ09OU09MRV9ICiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYXggbnVtYmVyIG9mIGNvbnNvbGUgYWRhcHRlcnMgdGhhdCBjYW4vd2lsbCBiZSBmb3VuZCBhcwpAQCAtODgsNyArODksMTYgQEAKIHZvaWQgaHZjX2tpY2sodm9pZCk7CiAKIC8qIFJlc2l6ZSBodmMgdHR5IHRlcm1pbmFsIHdpbmRvdyAqLwotZXh0ZXJuIHZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKK2V4dGVybiB2b2lkIF9faHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhwLT5sb2NrLCBmbGFncyk7CisJX19odmNfcmVzaXplKGhwLCB3cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHAtPmxvY2ssIGZsYWdzKTsKK30KIAogLyogZGVmYXVsdCBub3RpZmllciBmb3IgaXJxIGJhc2VkIG5vdGlmaWNhdGlvbiAqLwogZXh0ZXJuIGludCBub3RpZmllcl9hZGRfaXJxKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCAwZWNhYzdlLi5iOGE1ZDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMjczLDcgKzI3Myw5IEBACiAJY2FzZSBNU0dfVFlQRV9XSU5TSVpFOgogCQlpZiAocmItPm1idWYtPmRhdGFsZW4gIT0gc2l6ZW9mKHN0cnVjdCB3aW5zaXplKSkKIAkJCWJyZWFrOwotCQlodmNfcmVzaXplKHByaXYtPmh2YywgKigoc3RydWN0IHdpbnNpemUgKikgcmItPm1idWYtPmRhdGEpKTsKKwkJLyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBodmMgaXMgbG9ja2VkLCB3aGljaAorCQkgKiBpcyB0aGUgY2FzZSB3aGVuIGNhbGxlZCBmcm9tIGh2Y19pdWN2X2dldF9jaGFycygpICovCisJCV9faHZjX3Jlc2l6ZShwcml2LT5odmMsICooKHN0cnVjdCB3aW5zaXplICopIHJiLT5tYnVmLT5kYXRhKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNU0dfVFlQRV9FUlJPUjoJLyogaWdub3JlZCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCmluZGV4IGViYTk5OWYuLmE2ZWUzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwpAQCAtNTUsNyArNTUsNyBAQAogCW5vdGlmeV9yZW1vdGVfdmlhX2V2dGNobih4ZW5fc3RhcnRfaW5mby0+Y29uc29sZS5kb21VLmV2dGNobik7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCBfX3dyaXRlX2NvbnNvbGUoY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSB4ZW5jb25zX2ludGVyZmFjZSgpOwogCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJvZDsKQEAgLTc2LDYgKzc2LDI5IEBACiAJcmV0dXJuIHNlbnQ7CiB9CiAKK3N0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQgPSBsZW47CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgd2hvbGUgYnVmZmVyIGlzIGVtaXR0ZWQsIHBvbGxpbmcgaWYKKwkgKiBuZWNlc3NhcnkuICBXZSBkb24ndCBldmVyIHdhbnQgdG8gcmVseSBvbiB0aGUgaHZjIGRhZW1vbgorCSAqIGJlY2F1c2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY29uc29sZSBvdXRwdXQgaXMgd2hlbiB0aGUKKwkgKiBrZXJuZWwgaXMgY3JpcHBsZWQuCisJICovCisJd2hpbGUgKGxlbikgeworCQlpbnQgc2VudCA9IF9fd3JpdGVfY29uc29sZShkYXRhLCBsZW4pOworCQkKKwkJZGF0YSArPSBzZW50OworCQlsZW4gLT0gc2VudDsKKworCQlpZiAodW5saWtlbHkobGVuKSkKKwkJCUhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF95aWVsZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCByZWFkX2NvbnNvbGUodWludDMyX3QgdnRlcm1ubywgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHhlbmNvbnNfaW50ZXJmYWNlKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKaW5kZXggMDBkZDNkZS4uMDZhYWQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQkgcGRldi0+bmFtZSk7CiAJaWYgKG1lbSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtZW0pOwotCXJuZ19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlybmdfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXJuZ19iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCmluZGV4IDk2Mjk2OGYuLjkxNTE1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcm5nLmg+CiAKIC8qIFRoZSBob3N0IHdpbGwgZmlsbCBhbnkgYnVmZmVyIHdlIGdpdmUgaXQgd2l0aCBzd2VldCwgc3dlZXQgcmFuZG9tbmVzcy4gIFdlCkBAIC0xMTcsNyArMTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJdmRldi0+Y29uZmlnLT5yZXNldCh2ZGV2KTsKIAlod3JuZ191bnJlZ2lzdGVyKCZ2aXJ0aW9faHdybmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwppbmRleCA0MWZjMTFkLi42NTU0NWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwbWkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggMDkwNTA3OS4uZWM1ZTNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IGFiMmYzMzQuLjQwMjgzOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTE5LDYgKzE5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNmM4YjY1ZC4uYTA3NGZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtMzAxLDcgKzMwMSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHsKICNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QKIAkuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXNwZWMuYyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCmluZGV4IDMwZjA5NWEuLjE5OTcyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tc3BlYy5jCisrKyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1zcGVjX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXNwZWNfdm1fb3BzID0gewogCS5vcGVuID0gbXNwZWNfb3BlbiwKIAkuY2xvc2UgPSBtc3BlY19jbG9zZSwKIAkuZmF1bHQgPSBtc3BlY19mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCBlYzU4ZDhjLi5kMzQwMGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcHR5LmMgYi9kcml2ZXJzL2NoYXIvcHR5LmMKaW5kZXggNTM3NjFjZS4uNjJmMjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3B0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9wdHkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTI2MSw2ICsyNjIsOSBAQAogCXJldHVybiAwOwogfQogCisvKiBUcmFkaXRpb25hbCBCU0QgZGV2aWNlcyAqLworI2lmZGVmIENPTkZJR19MRUdBQ1lfUFRZUworCiBzdGF0aWMgaW50IHB0eV9pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKm9fdHR5OwpAQCAtMzEwLDI0ICszMTQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wcyA9IHsKLQkuaW5zdGFsbCA9IHB0eV9pbnN0YWxsLAotCS5vcGVuID0gcHR5X29wZW4sCi0JLmNsb3NlID0gcHR5X2Nsb3NlLAotCS53cml0ZSA9IHB0eV93cml0ZSwKLQkud3JpdGVfcm9vbSA9IHB0eV93cml0ZV9yb29tLAotCS5mbHVzaF9idWZmZXIgPSBwdHlfZmx1c2hfYnVmZmVyLAotCS5jaGFyc19pbl9idWZmZXIgPSBwdHlfY2hhcnNfaW5fYnVmZmVyLAotCS51bnRocm90dGxlID0gcHR5X3VudGhyb3R0bGUsCi0JLnNldF90ZXJtaW9zID0gcHR5X3NldF90ZXJtaW9zLAotCS5yZXNpemUgPSBwdHlfcmVzaXplCi19OwotCi0vKiBUcmFkaXRpb25hbCBCU0QgZGV2aWNlcyAqLwotI2lmZGVmIENPTkZJR19MRUdBQ1lfUFRZUwotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpwdHlfZHJpdmVyLCAqcHR5X3NsYXZlX2RyaXZlcjsKLQogc3RhdGljIGludCBwdHlfYnNkX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMzQxLDcgKzMyNywxMiBAQAogc3RhdGljIGludCBsZWdhY3lfY291bnQgPSBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVDsKIG1vZHVsZV9wYXJhbShsZWdhY3lfY291bnQsIGludCwgMCk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wc19ic2QgPSB7CisvKgorICogVGhlIG1hc3RlciBzaWRlIG9mIGEgcHR5IGNhbiBkbyBUSU9DU1BUTENLIGFuZCB0aHVzCisgKiBoYXMgcHR5X2JzZF9pb2N0bC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBtYXN0ZXJfcHR5X29wc19ic2QgPSB7CisJLmluc3RhbGwgPSBwdHlfaW5zdGFsbCwKIAkub3BlbiA9IHB0eV9vcGVuLAogCS5jbG9zZSA9IHB0eV9jbG9zZSwKIAkud3JpdGUgPSBwdHlfd3JpdGUsCkBAIC0zNTQsOCArMzQ1LDIzIEBACiAJLnJlc2l6ZSA9IHB0eV9yZXNpemUKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2xhdmVfcHR5X29wc19ic2QgPSB7CisJLmluc3RhbGwgPSBwdHlfaW5zdGFsbCwKKwkub3BlbiA9IHB0eV9vcGVuLAorCS5jbG9zZSA9IHB0eV9jbG9zZSwKKwkud3JpdGUgPSBwdHlfd3JpdGUsCisJLndyaXRlX3Jvb20gPSBwdHlfd3JpdGVfcm9vbSwKKwkuZmx1c2hfYnVmZmVyID0gcHR5X2ZsdXNoX2J1ZmZlciwKKwkuY2hhcnNfaW5fYnVmZmVyID0gcHR5X2NoYXJzX2luX2J1ZmZlciwKKwkudW50aHJvdHRsZSA9IHB0eV91bnRocm90dGxlLAorCS5zZXRfdGVybWlvcyA9IHB0eV9zZXRfdGVybWlvcywKKwkucmVzaXplID0gcHR5X3Jlc2l6ZQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGxlZ2FjeV9wdHlfaW5pdCh2b2lkKQogeworCXN0cnVjdCB0dHlfZHJpdmVyICpwdHlfZHJpdmVyLCAqcHR5X3NsYXZlX2RyaXZlcjsKKwogCWlmIChsZWdhY3lfY291bnQgPD0gMCkKIAkJcmV0dXJuOwogCkBAIC0zODMsNyArMzg5LDcgQEAKIAlwdHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSAzODQwMDsKIAlwdHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyB8IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAJcHR5X2RyaXZlci0+b3RoZXIgPSBwdHlfc2xhdmVfZHJpdmVyOwotCXR0eV9zZXRfb3BlcmF0aW9ucyhwdHlfZHJpdmVyLCAmcHR5X29wcyk7CisJdHR5X3NldF9vcGVyYXRpb25zKHB0eV9kcml2ZXIsICZtYXN0ZXJfcHR5X29wc19ic2QpOwogCiAJcHR5X3NsYXZlX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwdHlfc2xhdmVfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJwdHlfc2xhdmUiOwpAQCAtMzk5LDcgKzQwNSw3IEBACiAJcHR5X3NsYXZlX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfAogCQkJCQlUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXB0eV9zbGF2ZV9kcml2ZXItPm90aGVyID0gcHR5X2RyaXZlcjsKLQl0dHlfc2V0X29wZXJhdGlvbnMocHR5X3NsYXZlX2RyaXZlciwgJnB0eV9vcHMpOworCXR0eV9zZXRfb3BlcmF0aW9ucyhwdHlfc2xhdmVfZHJpdmVyLCAmc2xhdmVfcHR5X29wc19ic2QpOwogCiAJaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIocHR5X2RyaXZlcikpCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciBwdHkgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYwppbmRleCAwMWYyNjU0Li5mMTIxMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKQEAgLTMyLDYgKzMyLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwppbmRleCA3NDMzOTU1Li43ODA1MDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwpAQCAtMzEsNiArMzEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwppbmRleCAyZmI0OWU4Li40N2ZhYjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgX19FWFBMSUNJVF9ERUZfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IGUwZDBmOGIuLmJjNGFiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jIGIvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jCmluZGV4IDMzYTJiNTMuLjk2MTA4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJfYTIyMzIuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMKQEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYyBiL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYwppbmRleCA1OTQyYTlkLi40NTIzNzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKKysrIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCkBAIC0yMjAsOCArMjIwLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChsb25nKWluZm8gPCAobG9uZykoJmN5X3BvcnRbMF0pCi0JICAgIHx8IChsb25nKSgmY3lfcG9ydFtOUl9QT1JUU10pIDwgKGxvbmcpaW5mbykgeworCWlmIChpbmZvIDwgJmN5X3BvcnRbMF0gfHwgaW5mbyA+PSAmY3lfcG9ydFtOUl9QT1JUU10pIHsKIAkJcHJpbnRrKCJXYXJuaW5nOiBjeWNsYWRlc19wb3J0IG91dCBvZiByYW5nZSBmb3IgKCVzKSBpbiAlc1xuIiwKIAkJCQluYW1lLCByb3V0aW5lKTsKIAkJcmV0dXJuIDE7CkBAIC01MjAsMTUgKzUxOSwxMyBAQAogCQlwYW5pYygiVHhJbnQgb24gZGVidWcgcG9ydCEhISIpOwogCX0KICNlbmRpZgotCi0JaW5mbyA9ICZjeV9wb3J0W2NoYW5uZWxdOwotCiAJLyogdmFsaWRhdGUgdGhlIHBvcnQgbnVtYmVyIChhcyBjb25maWd1cmVkIGFuZCBvcGVuKSAqLwogCWlmICgoY2hhbm5lbCA8IDApIHx8IChOUl9QT1JUUyA8PSBjaGFubmVsKSkgewogCQliYXNlX2FkZHJbQ3lJRVJdICY9IH4oQ3lUeE1wdHkgfCBDeVR4UmR5KTsKIAkJYmFzZV9hZGRyW0N5VEVPSVJdID0gQ3lOT1RSQU5TOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQorCWluZm8gPSAmY3lfcG9ydFtjaGFubmVsXTsKIAlpbmZvLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7CiAJaWYgKGluZm8tPnR0eSA9PSAwKSB7CiAJCWJhc2VfYWRkcltDeUlFUl0gJj0gfihDeVR4TXB0eSB8IEN5VHhSZHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGZkM2RjZWQuLjhjMjYyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTM2LDYgKzM2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggNTNlNTA0Zi4uZGI2ZGNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTI3LDYgKzI3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RsY2xrLmMgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwppbmRleCA4ZjIyODRiLi44MGVhNmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGxjbGsuYworKysgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkvKiBldmVyeXRoaW5nLi4uICovCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogZXJyb3IgY29kZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDQ1ZDU4MDAuLjQ3YzJkMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtNjk2LDggKzY5Niw3IEBACiAKIAljbWQuaGVhZGVyLmluID0gcGNycmVhZF9oZWFkZXI7CiAJY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKLQlCVUdfT04oY21kLmhlYWRlci5pbi5sZW5ndGggPiBSRUFEX1BDUl9SRVNVTFRfU0laRSk7Ci0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgY21kLmhlYWRlci5pbi5sZW5ndGgsCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgUkVBRF9QQ1JfUkVTVUxUX1NJWkUsCiAJCQkgICJhdHRlbXB0aW5nIHRvIHJlYWQgYSBwY3IgdmFsdWUiKTsKIAogCWlmIChyYyA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKaW5kZXggMzEwODk5MS4uNjZmYTRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jCkBAIC00MDIsMjggKzQwMiwyNiBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHR0eV9zdHJ1Y3QsIGJ1Zi53b3JrLndvcmspOwogCXVuc2lnbmVkIGxvbmcgCWZsYWdzOwogCXN0cnVjdCB0dHlfbGRpc2MgKmRpc2M7Ci0Jc3RydWN0IHR0eV9idWZmZXIgKnRidWYsICpoZWFkOwotCWNoYXIgKmNoYXJfYnVmOwotCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOwogCiAJZGlzYyA9IHR0eV9sZGlzY19yZWYodHR5KTsKIAlpZiAoZGlzYyA9PSBOVUxMKQkvKiAgIVRUWV9MRElTQyAqLwogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCS8qIFNvIHdlIGtub3cgYSBmbHVzaCBpcyBydW5uaW5nICovCi0Jc2V0X2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKLQloZWFkID0gdHR5LT5idWYuaGVhZDsKLQlpZiAoaGVhZCAhPSBOVUxMKSB7Ci0JCXR0eS0+YnVmLmhlYWQgPSBOVUxMOwotCQlmb3IgKDs7KSB7Ci0JCQlpbnQgY291bnQgPSBoZWFkLT5jb21taXQgLSBoZWFkLT5yZWFkOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpKSB7CisJCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkOworCQl3aGlsZSAoKGhlYWQgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7CisJCQlpbnQgY291bnQ7CisJCQljaGFyICpjaGFyX2J1ZjsKKwkJCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOworCisJCQljb3VudCA9IGhlYWQtPmNvbW1pdCAtIGhlYWQtPnJlYWQ7CiAJCQlpZiAoIWNvdW50KSB7CiAJCQkJaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkKIAkJCQkJYnJlYWs7Ci0JCQkJdGJ1ZiA9IGhlYWQ7Ci0JCQkJaGVhZCA9IGhlYWQtPm5leHQ7Ci0JCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgdGJ1Zik7CisJCQkJdHR5LT5idWYuaGVhZCA9IGhlYWQtPm5leHQ7CisJCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgaGVhZCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQkvKiBMZGlzYyBvciB1c2VyIGlzIHRyeWluZyB0byBmbHVzaCB0aGUgYnVmZmVycwpAQCAtNDQ1LDkgKzQ0Myw5IEBACiAJCQkJCQkJZmxhZ19idWYsIGNvdW50KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAJCX0KLQkJLyogUmVzdG9yZSB0aGUgcXVldWUgaGVhZCAqLwotCQl0dHktPmJ1Zi5oZWFkID0gaGVhZDsKKwkJY2xlYXJfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpOwogCX0KKwogCS8qIFdlIG1heSBoYXZlIGEgZGVmZXJyZWQgcmVxdWVzdCB0byBmbHVzaCB0aGUgaW5wdXQgYnVmZmVyLAogCSAgIGlmIHNvIHB1bGwgdGhlIGNoYWluIHVuZGVyIHRoZSBsb2NrIGFuZCBlbXB0eSB0aGUgcXVldWUgKi8KIAlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKSB7CkBAIC00NTUsNyArNDUzLDYgQEAKIAkJY2xlYXJfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKTsKIAkJd2FrZV91cCgmdHR5LT5yZWFkX3dhaXQpOwogCX0KLQljbGVhcl9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCiAJdHR5X2xkaXNjX2RlcmVmKGRpc2MpOwpAQCAtNDcxLDcgKzQ2OCw3IEBACiAgKi8KIHZvaWQgdHR5X2ZsdXNoX3RvX2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JZmx1c2hfdG9fbGRpc2MoJnR0eS0+YnVmLndvcmsud29yayk7CisJZmx1c2hfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggZWExOGExMi4uNTk0OTllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTM4OSw3ICsxMzg5LDcgQEAKICAqCW9mIHR0eXMgdGhhdCB0aGUgZHJpdmVyIGtlZXBzLgogICoKICAqCVRoaXMgbWV0aG9kIGdldHMgY2FsbGVkIGZyb20gYSB3b3JrIHF1ZXVlIHNvIHRoYXQgdGhlIGRyaXZlciBwcml2YXRlCi0gKglzaHV0ZG93biBvcHMgY2FuIHNsZWVwIChuZWVkZWQgZm9yIFVTQiBhdCBsZWFzdCkKKyAqCWNsZWFudXAgb3BzIGNhbiBzbGVlcCAobmVlZGVkIGZvciBVU0IgYXQgbGVhc3QpCiAgKi8KIHN0YXRpYyB2b2lkIHJlbGVhc2Vfb25lX3R0eShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CkBAIC0xMzk3LDEwICsxMzk3LDkgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0dHlfc3RydWN0LCBoYW5ndXBfd29yayk7CiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IHR0eS0+ZHJpdmVyOwogCi0JaWYgKHR0eS0+b3BzLT5zaHV0ZG93bikKLQkJdHR5LT5vcHMtPnNodXRkb3duKHR0eSk7Ci0JZWxzZQotCQl0dHlfc2h1dGRvd24odHR5KTsKKwlpZiAodHR5LT5vcHMtPmNsZWFudXApCisJCXR0eS0+b3BzLT5jbGVhbnVwKHR0eSk7CisKIAl0dHktPm1hZ2ljID0gMDsKIAl0dHlfZHJpdmVyX2tyZWZfcHV0KGRyaXZlcik7CiAJbW9kdWxlX3B1dChkcml2ZXItPm93bmVyKTsKQEAgLTE0MTUsNiArMTQxNCwxMiBAQAogc3RhdGljIHZvaWQgcXVldWVfcmVsZWFzZV9vbmVfdHR5KHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHR0eV9zdHJ1Y3QsIGtyZWYpOworCisJaWYgKHR0eS0+b3BzLT5zaHV0ZG93bikKKwkJdHR5LT5vcHMtPnNodXRkb3duKHR0eSk7CisJZWxzZQorCQl0dHlfc2h1dGRvd24odHR5KTsKKwogCS8qIFRoZSBoYW5ndXAgcXVldWUgaXMgbm93IGZyZWUgc28gd2UgY2FuIHJldXNlIGl0IHJhdGhlciB0aGFuCiAJICAgd2FzdGUgYSBjaHVuayBvZiBtZW1vcnkgZm9yIGVhY2ggcG9ydCAqLwogCUlOSVRfV09SSygmdHR5LT5oYW5ndXBfd29yaywgcmVsZWFzZV9vbmVfdHR5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwppbmRleCBhYWZkYmFlLi5mZWI1NTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCkBAIC01MTgsNyArNTE4LDcgQEAKIHN0YXRpYyBpbnQgdHR5X2xkaXNjX2hhbHQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAljbGVhcl9iaXQoVFRZX0xESVNDLCAmdHR5LT5mbGFncyk7Ci0JcmV0dXJuIGNhbmNlbF9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmspOworCXJldHVybiBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnR0eS0+YnVmLndvcmspOwogfQogCiAvKioKQEAgLTc1NiwxMiArNzU2LDkgQEAKIAkgKiBOX1RUWS4KIAkgKi8KIAlpZiAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TKSB7Ci0JCS8qIE1ha2Ugc3VyZSB0aGUgb2xkIGxkaXNjIGlzIHF1aWVzY2VudCAqLwotCQl0dHlfbGRpc2NfaGFsdCh0dHkpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJCS8qIEF2b2lkIHJhY2luZyBzZXRfbGRpc2Mgb3IgdHR5X2xkaXNjX3JlbGVhc2UgKi8KIAkJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7CisJCXR0eV9sZGlzY19oYWx0KHR0eSk7CiAJCWlmICh0dHktPmxkaXNjKSB7CS8qIE5vdCB5ZXQgY2xvc2VkICovCiAJCQkvKiBTd2l0Y2ggYmFjayB0byBOX1RUWSAqLwogCQkJdHR5X2xkaXNjX3JlaW5pdCh0dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9wb3J0LmMgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwppbmRleCBhNGJiYjI4Li4yZTg1NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwpAQCAtMjIxLDYgKzIyMSw5IEBACiAJICAgdGhlIHBvcnQgaGFzIGp1c3QgaHVuZyB1cCBvciBpcyBpbiBhbm90aGVyIGVycm9yIHN0YXRlICovCiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkJCSh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKKwkJLyogSW5kaWNhdGUgd2UgYXJlIG9wZW4gKi8KKwkJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQorCQkJdHR5X3BvcnRfcmFpc2VfZHRyX3J0cyhwb3J0KTsKIAkJcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCAwZDMyOGI1Li5hMDM1YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4KICNpbmNsdWRlICJodmNfY29uc29sZS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCmluZGV4IDI5YzY1MWEuLmVkODZkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCkBAIC05ODEsOCArOTgxLDEwIEBACiAJCQlnb3RvIGVwZXJtOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdnNhLCAoc3RydWN0IHZ0X3NldGFjdGl2YXRlIF9fdXNlciAqKWFyZywKLQkJCQkJCXNpemVvZihzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUpKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQkJCQlzaXplb2Yoc3RydWN0IHZ0X3NldGFjdGl2YXRlKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQogCQlpZiAodnNhLmNvbnNvbGUgPT0gMCB8fCB2c2EuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKIAkJCXJldCA9IC1FTlhJTzsKIAkJZWxzZSB7CkBAIC0xNTMwLDcgKzE1MzIsNyBAQAogCiAJY2FzZSBQSU9fVU5JTUFQOgogCWNhc2UgR0lPX1VOSU1BUDoKLQkJcmV0ID0gZG9fdW5pbWFwX2lvY3RsKGNtZCwgdXAsIHBlcm0sIHZjKTsKKwkJcmV0ID0gY29tcGF0X3VuaW1hcF9pb2N0bChjbWQsIHVwLCBwZXJtLCB2Yyk7CiAJCWJyZWFrOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwppbmRleCBmNDBhYjY5Li40ODQ2ZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKKysrIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCkBAIC01NTksNyArNTU5LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBod2ljYXBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh3aWNhcF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS53cml0ZSA9IGh3aWNhcF93cml0ZSwKIAkucmVhZCA9IGh3aWNhcF9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggMzkzOGM3OC4uZmY1N2M0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC00MSw3ICs0MSw3IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICosIGNwdWZyZXFfY3B1X2RhdGEpOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogLyogVGhpcyBvbmUga2VlcHMgdHJhY2sgb2YgdGhlIHByZXZpb3VzbHkgc2V0IGdvdmVybm9yIG9mIGEgcmVtb3ZlZCBDUFUgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqLCBjcHVmcmVxX2NwdV9nb3Zlcm5vcik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltDUFVGUkVRX05BTUVfTEVOXSwgY3B1ZnJlcV9jcHVfZ292ZXJub3IpOwogI2VuZGlmCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwdWZyZXFfZHJpdmVyX2xvY2spOwogCkBAIC03NzQsMTAgKzc3NCwxMiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBqOwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JaWYgKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSkpIHsKLQkJcG9saWN5LT5nb3Zlcm5vciA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSk7CisJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdjsKKworCWdvdiA9IF9fZmluZF9nb3Zlcm5vcihwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpKTsKKwlpZiAoZ292KSB7CisJCXBvbGljeS0+Z292ZXJub3IgPSBnb3Y7CiAJCWRwcmludGsoIlJlc3RvcmluZyBnb3Zlcm5vciAlcyBmb3IgY3B1ICVkXG4iLAogCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vci0+bmFtZSwgY3B1KTsKIAl9CkBAIC05NDksMTAgKzk1MSwxMyBAQAogc3RhdGljIGludCBjcHVmcmVxX2FkZF9kZXYoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCBmb3VuZCA9IDA7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgajsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpbnQgc2libGluZzsKKyNlbmRpZgogCiAJaWYgKGNwdV9pc19vZmZsaW5lKGNwdSkpCiAJCXJldHVybiAwOwpAQCAtOTk5LDcgKzEwMDQsMTkgQEAKIAlJTklUX1dPUksoJnBvbGljeS0+dXBkYXRlLCBoYW5kbGVfdXBkYXRlKTsKIAogCS8qIFNldCBnb3Zlcm5vciBiZWZvcmUgLT5pbml0LCBzbyB0aGF0IGRyaXZlciBjb3VsZCBjaGVjayBpdCAqLwotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJZm9yX2VhY2hfb25saW5lX2NwdShzaWJsaW5nKSB7CisJCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3AgPSBwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIHNpYmxpbmcpOworCQlpZiAoY3AgJiYgY3AtPmdvdmVybm9yICYmCisJCSAgICAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwLT5yZWxhdGVkX2NwdXMpKSkgeworCQkJcG9saWN5LT5nb3Zlcm5vciA9IGNwLT5nb3Zlcm5vcjsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmCisJaWYgKCFmb3VuZCkKKwkJcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAkvKiBjYWxsIGRyaXZlci4gRnJvbSB0aGVuIG9uIHRoZSBjcHVmcmVxIG11c3QgYmUgYWJsZQogCSAqIHRvIGFjY2VwdCBhbGwgY2FsbHMgdG8gLT52ZXJpZnkgYW5kIC0+c2V0cG9saWN5IGZvciB0aGlzIENQVQogCSAqLwpAQCAtMTExMSw3ICsxMTI4LDggQEAKICNpZmRlZiBDT05GSUdfU01QCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQlwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpID0gZGF0YS0+Z292ZXJub3I7CisJc3RybmNweShwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCBkYXRhLT5nb3Zlcm5vci0+bmFtZSwKKwkJCUNQVUZSRVFfTkFNRV9MRU4pOwogI2VuZGlmCiAKIAkvKiBpZiB3ZSBoYXZlIG90aGVyIENQVXMgc3RpbGwgcmVnaXN0ZXJlZCwgd2UgbmVlZCB0byB1bmxpbmsgdGhlbSwKQEAgLTExMzUsNyArMTE1Myw4IEBACiAJCQkJY29udGludWU7CiAJCQlkcHJpbnRrKCJyZW1vdmluZyBsaW5rIGZvciBjcHUgJXVcbiIsIGopOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCQkJcGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaikgPSBkYXRhLT5nb3Zlcm5vcjsKKwkJCXN0cm5jcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaiksCisJCQkJZGF0YS0+Z292ZXJub3ItPm5hbWUsIENQVUZSRVFfTkFNRV9MRU4pOwogI2VuZGlmCiAJCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGopOwogCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmNwdV9zeXNfZGV2LT5rb2JqLCAiY3B1ZnJlcSIpOwpAQCAtMTYwNiw5ICsxNjI1LDIyIEBACiAKIHZvaWQgY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpnb3Zlcm5vcikKIHsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpbnQgY3B1OworI2VuZGlmCisKIAlpZiAoIWdvdmVybm9yKQogCQlyZXR1cm47CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcChwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCBnb3Zlcm5vci0+bmFtZSkpCisJCQlzdHJjcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgY3B1KSwgIlwwIik7CisJfQorI2VuZGlmCisKIAltdXRleF9sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAlsaXN0X2RlbCgmZ292ZXJub3ItPmdvdmVybm9yX2xpc3QpOwogCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCmluZGV4IGJjMzNkZGMuLmM3YjA4MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCkBAIC0xMTYsOSArMTE2LDkgQEAKIAogCWlkbGVfdGltZSA9IGNwdXRpbWU2NF9zdWIoY3VyX3dhbGxfdGltZSwgYnVzeV90aW1lKTsKIAlpZiAod2FsbCkKLQkJKndhbGwgPSBjdXJfd2FsbF90aW1lOworCQkqd2FsbCA9IChjcHV0aW1lNjRfdClqaWZmaWVzX3RvX3VzZWNzKGN1cl93YWxsX3RpbWUpOwogCi0JcmV0dXJuIGlkbGVfdGltZTsKKwlyZXR1cm4gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoaWRsZV90aW1lKTs7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbGwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCAwNzE2OTlkLi40YjM0YWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTEzMyw5ICsxMzMsOSBAQAogCiAJaWRsZV90aW1lID0gY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLCBidXN5X3RpbWUpOwogCWlmICh3YWxsKQotCQkqd2FsbCA9IGN1cl93YWxsX3RpbWU7CisJCSp3YWxsID0gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoY3VyX3dhbGxfdGltZSk7CiAKLQlyZXR1cm4gaWRsZV90aW1lOworCXJldHVybiAoY3B1dGltZTY0X3QpamlmZmllc190b191c2VjcyhpZGxlX3RpbWUpOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKaW5kZXggYWQ0MWYxOS4uMTJmZGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC03Niw4ICs3NiwxMSBAQAogI2VuZGlmCiAJLyogYXNrIHRoZSBnb3Zlcm5vciBmb3IgdGhlIG5leHQgc3RhdGUgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5zZWxlY3QoZGV2KTsKLQlpZiAobmVlZF9yZXNjaGVkKCkpCisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcmV0dXJuOworCX0KKwogCXRhcmdldF9zdGF0ZSA9ICZkZXYtPnN0YXRlc1tuZXh0X3N0YXRlXTsKIAogCS8qIGVudGVyIHRoZSBzdGF0ZSBhbmQgdXBkYXRlIHN0YXRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCA3NmNiNmIzLi4wYWY4MDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTI0LDYgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlICJwYWRsb2NrLmgiCiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgU1RBQ0tfQUxJR04gMTYKKyNlbHNlCisjZGVmaW5lIFNUQUNLX0FMSUdOIDQKKyNlbmRpZgorCiBzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyB7CiAJc3RydWN0IHNoYXNoX2Rlc2MgZmFsbGJhY2s7CiB9OwpAQCAtNjQsNyArNzAsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGExX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGludCBzcGFjZTsKQEAgLTEyOCw3ICsxMzYsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGEyNTZfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgaW50IHNwYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCAwMjEyN2U1Li41NWM5YzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNDcsNiArNDcsMTggQEAKIAkgIFNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIHdoZXJlIGRlYnVnZ2luZyBtZXNzYWdlCiAJICBwcmludGVkIHdpbGwgYmUgYWRkZWQgdG8gZGVidWdnaW5nIG1lc3NhZ2UuCiAKKyBjb25maWcgRURBQ19ERUNPREVfTUNFCisJdHJpc3RhdGUgIkRlY29kZSBNQ0VzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0gKG9ubHkgb24gQU1EIGZvciBub3cpIgorCWRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgJiYgWDg2X01DRQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBkZWNvZGUgTWFjaGluZSBDaGVjayBFeGNlcHRpb25zCisJICBvY2N1cmluZyBvbiB5b3VyIG1hY2hpbmUgaW4gaHVtYW4tcmVhZGFibGUgZm9ybS4KKworCSAgWW91IHNob3VsZCBkZWZpbml0ZWx5IHNheSBZIGhlcmUgaW4gY2FzZSB5b3Ugd2FudCB0byBkZWNvZGUgTUNFcworCSAgd2hpY2ggb2NjdXIgcmVhbGx5IGVhcmx5IHVwb24gYm9vdCwgYmVmb3JlIHRoZSBtb2R1bGUgaW5mcmFzdHJ1Y3R1cmUKKwkgIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCiBjb25maWcgRURBQ19NTV9FREFDCiAJdHJpc3RhdGUgIk1haW4gTWVtb3J5IEVEQUMgKEVycm9yIERldGVjdGlvbiBBbmQgQ29ycmVjdGlvbikgcmVwb3J0aW5nIgogCWhlbHAKQEAgLTU5LDcgKzcxLDcgQEAKIAogY29uZmlnIEVEQUNfQU1ENjQKIAl0cmlzdGF0ZSAiQU1ENjQgKE9wdGVyb24sIEF0aGxvbjY0KSBLOCwgRjEwaCwgRjExaCIKLQlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBLOF9OQiAmJiBYODZfNjQgJiYgUENJICYmIENQVV9TVVBfQU1ECisJZGVwZW5kcyBvbiBFREFDX01NX0VEQUMgJiYgSzhfTkIgJiYgWDg2XzY0ICYmIFBDSSAmJiBFREFDX0RFQ09ERV9NQ0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlIEFNRCA2NAogCSAgRmFtaWxpZXMgb2YgTWVtb3J5IENvbnRyb2xsZXJzIChLOCwgRjEwaCBhbmQgRjExaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQppbmRleCA3YTQ3M2JiLi5iYzVkYzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCkBAIC02LDcgKzYsNiBAQAogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICMKIAotCiBvYmotJChDT05GSUdfRURBQykJCQk6PSBlZGFjX3N0dWIubwogb2JqLSQoQ09ORklHX0VEQUNfTU1fRURBQykJCSs9IGVkYWNfY29yZS5vCiAKQEAgLTE3LDkgKzE2LDcgQEAKIGVkYWNfY29yZS1vYmpzCSs9IGVkYWNfcGNpLm8gZWRhY19wY2lfc3lzZnMubwogZW5kaWYKIAotaWZkZWYgQ09ORklHX0NQVV9TVVBfQU1ECi1lZGFjX2NvcmUtb2JqcyAgKz0gZWRhY19tY2VfYW1kLm8KLWVuZGlmCitvYmotJChDT05GSUdfRURBQ19ERUNPREVfTUNFKQkJKz0gZWRhY19tY2VfYW1kLm8KIAogb2JqLSQoQ09ORklHX0VEQUNfQU1ENzZYKQkJKz0gYW1kNzZ4X2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfQ1BDOTI1KQkJKz0gY3BjOTI1X2VkYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggNGU1NTFlNi4uYTM4ODMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xNSw4ICsxNSw4IEBACiAKIC8qIExvb2t1cCB0YWJsZSBmb3IgYWxsIHBvc3NpYmxlIE1DIGNvbnRyb2wgaW5zdGFuY2VzICovCiBzdHJ1Y3QgYW1kNjRfcHZ0Owotc3RhdGljIHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaV9sb29rdXBbTUFYX05VTU5PREVTXTsKLXN0YXRpYyBzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnRfbG9va3VwW01BWF9OVU1OT0RFU107CitzdGF0aWMgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpX2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CitzdGF0aWMgc3RydWN0IGFtZDY0X3B2dCAqcHZ0X2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CiAKIC8qCiAgKiBTZWUgRjJ4ODAgZm9yIEs4IGFuZCBGMnhbMSwwXTgwIGZvciBGYW0xMCBhbmQgbGF0ZXIuIFRoZSB0YWJsZSBiZWxvdyBpcyBvbmx5CkBAIC0xODksNyArMTg5LDEwIEBACiAvKiBNYXAgZnJvbSBhIENTUk9XIGVudHJ5IHRvIHRoZSBtYXNrIGVudHJ5IHRoYXQgb3BlcmF0ZXMgb24gaXQgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGFtZDY0X21hcF90b19kY3NfbWFzayhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIGludCBjc3JvdykKIHsKLQlyZXR1cm4gY3Nyb3cgPj4gKHB2dC0+bnVtX2Rjc20gPj4gMyk7CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZiAmJiBwdnQtPmV4dF9tb2RlbCA8IE9QVEVST05fQ1BVX1JFVl9GKQorCQlyZXR1cm4gY3Nyb3c7CisJZWxzZQorCQlyZXR1cm4gY3Nyb3cgPj4gMTsKIH0KIAogLyogcmV0dXJuIHRoZSAnYmFzZScgYWRkcmVzcyB0aGUgaSd0aCBDUyBlbnRyeSBvZiB0aGUgJ2RjdCcgRFJBTSBjb250cm9sbGVyICovCkBAIC0yNzksMjkgKzI4MiwyNiBAQAogCWludGx2X2VuID0gcHZ0LT5kcmFtX0ludGx2RW5bMF07CiAKIAlpZiAoaW50bHZfZW4gPT0gMCkgewotCQlmb3IgKG5vZGVfaWQgPSAwOyA7ICkgeworCQlmb3IgKG5vZGVfaWQgPSAwOyBub2RlX2lkIDwgRFJBTV9SRUdfQ09VTlQ7IG5vZGVfaWQrKykgewogCQkJaWYgKGFtZDY0X2Jhc2VfbGltaXRfbWF0Y2gocHZ0LCBzeXNfYWRkciwgbm9kZV9pZCkpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmICgrK25vZGVfaWQgPj0gRFJBTV9SRUdfQ09VTlQpCi0JCQkJZ290byBlcnJfbm9fbWF0Y2g7CisJCQkJZ290byBmb3VuZDsKIAkJfQotCQlnb3RvIGZvdW5kOworCQlnb3RvIGVycl9ub19tYXRjaDsKIAl9CiAKLQlpZiAodW5saWtlbHkoKGludGx2X2VuICE9ICgweDAxIDw8IDgpKSAmJgotCQkgICAgIChpbnRsdl9lbiAhPSAoMHgwMyA8PCA4KSkgJiYKLQkJICAgICAoaW50bHZfZW4gIT0gKDB4MDcgPDwgOCkpKSkgeworCWlmICh1bmxpa2VseSgoaW50bHZfZW4gIT0gMHgwMSkgJiYKKwkJICAgICAoaW50bHZfZW4gIT0gMHgwMykgJiYKKwkJICAgICAoaW50bHZfZW4gIT0gMHgwNykpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICJqdW5rIHZhbHVlIG9mIDB4JXggZXh0cmFjdGVkIGZyb20gIgogCQkJICAgICAiSW50bHZFbiBmaWVsZCBvZiBEUkFNIEJhc2UgUmVnaXN0ZXIgZm9yIG5vZGUgMDogIgotCQkJICAgICAiVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMgYSBCSU9TIGJ1Zy5cbiIsIGludGx2X2VuKTsKKwkJCSAgICAgInRoaXMgcHJvYmFibHkgaW5kaWNhdGVzIGEgQklPUyBidWcuXG4iLCBpbnRsdl9lbik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWJpdHMgPSAoKCh1MzIpIHN5c19hZGRyKSA+PiAxMikgJiBpbnRsdl9lbjsKIAogCWZvciAobm9kZV9pZCA9IDA7IDsgKSB7Ci0JCWlmICgocHZ0LT5kcmFtX2xpbWl0W25vZGVfaWRdICYgaW50bHZfZW4pID09IGJpdHMpCisJCWlmICgocHZ0LT5kcmFtX0ludGx2U2VsW25vZGVfaWRdICYgaW50bHZfZW4pID09IGJpdHMpCiAJCQlicmVhazsJLyogaW50bHZfc2VsIGZpZWxkIG1hdGNoZXMgKi8KIAogCQlpZiAoKytub2RlX2lkID49IERSQU1fUkVHX0NPVU5UKQpAQCAtMzExLDEwICszMTEsMTAgQEAKIAkvKiBzYW5pdHkgdGVzdCBmb3Igc3lzX2FkZHIgKi8KIAlpZiAodW5saWtlbHkoIWFtZDY0X2Jhc2VfbGltaXRfbWF0Y2gocHZ0LCBzeXNfYWRkciwgbm9kZV9pZCkpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCi0JCQkgICIlcygpOiBzeXNfYWRkciAweCVseCBmYWxscyBvdXRzaWRlIGJhc2UvbGltaXQgIgotCQkJICAiYWRkcmVzcyByYW5nZSBmb3Igbm9kZSAlZCB3aXRoIG5vZGUgaW50ZXJsZWF2aW5nICIKLQkJCSAgImVuYWJsZWQuXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc3lzX2FkZHIsCi0JCQkgIG5vZGVfaWQpOworCQkJICAgICAiJXMoKTogc3lzX2FkZHIgMHglbGx4IGZhbGxzIG91dHNpZGUgYmFzZS9saW1pdCAiCisJCQkgICAgICJhZGRyZXNzIHJhbmdlIGZvciBub2RlICVkIHdpdGggbm9kZSBpbnRlcmxlYXZpbmcgIgorCQkJICAgICAiZW5hYmxlZC5cbiIsCisJCQkgICAgIF9fZnVuY19fLCBzeXNfYWRkciwgbm9kZV9pZCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJICogYmFzZS9tYXNrIHJlZ2lzdGVyIHBhaXIsIHRlc3QgdGhlIGNvbmRpdGlvbiBzaG93biBuZWFyIHRoZSBzdGFydCBvZgogCSAqIHNlY3Rpb24gMy41LjQgKHAuIDg0LCBCS0RHICMyNjA5NCwgSzgsIHJldkEtRSkuCiAJICovCi0JZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3Nyb3crKykgeworCWZvciAoY3Nyb3cgPSAwOyBjc3JvdyA8IHB2dC0+Y3NfY291bnQ7IGNzcm93KyspIHsKIAogCQkvKiBUaGlzIERSQU0gY2hpcCBzZWxlY3QgaXMgZGlzYWJsZWQgb24gdGhpcyBub2RlICovCiAJCWlmICgocHZ0LT5kY3NiMFtjc3Jvd10gJiBLOF9EQ1NCX0NTX0VOQUJMRSkgPT0gMCkKQEAgLTczNCw3ICs3MzQsNyBAQAogCXU2NCBiYXNlLCBtYXNrOwogCiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKLQlCVUdfT04oKGNzcm93IDwgMCkgfHwgKGNzcm93ID49IENISVBTRUxFQ1RfQ09VTlQpKTsKKwlCVUdfT04oKGNzcm93IDwgMCkgfHwgKGNzcm93ID49IHB2dC0+Y3NfY291bnQpKTsKIAogCWJhc2UgPSBiYXNlX2Zyb21fZGN0X2Jhc2UocHZ0LCBjc3Jvdyk7CiAJbWFzayA9IG1hc2tfZnJvbV9kY3RfbWFzayhwdnQsIGNzcm93KTsKQEAgLTk2MiwzNSArOTYyLDI3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGFtZDY0X3NldF9kY3RfYmFzZV9hbmRfbWFzayhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JaWYgKHB2dC0+ZXh0X21vZGVsID49IE9QVEVST05fQ1BVX1JFVl9GKSB7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmICYmIHB2dC0+ZXh0X21vZGVsIDwgT1BURVJPTl9DUFVfUkVWX0YpIHsKKwkJcHZ0LT5kY3NiX2Jhc2UJCT0gUkVWX0VfRENTQl9CQVNFX0JJVFM7CisJCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9FX0RDU01fTUFTS19CSVRTOworCQlwdnQtPmRjc19tYXNrX25vdHVzZWQJPSBSRVZfRV9EQ1NfTk9UVVNFRF9CSVRTOworCQlwdnQtPmRjc19zaGlmdAkJPSBSRVZfRV9EQ1NfU0hJRlQ7CisJCXB2dC0+Y3NfY291bnQJCT0gODsKKwkJcHZ0LT5udW1fZGNzbQkJPSA4OworCX0gZWxzZSB7CiAJCXB2dC0+ZGNzYl9iYXNlCQk9IFJFVl9GX0YxWGhfRENTQl9CQVNFX0JJVFM7CiAJCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9GX0YxWGhfRENTTV9NQVNLX0JJVFM7CiAJCXB2dC0+ZGNzX21hc2tfbm90dXNlZAk9IFJFVl9GX0YxWGhfRENTX05PVFVTRURfQklUUzsKIAkJcHZ0LT5kY3Nfc2hpZnQJCT0gUkVWX0ZfRjFYaF9EQ1NfU0hJRlQ7CiAKLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4NikgewotCQljYXNlIDB4ZjoKLQkJCXB2dC0+bnVtX2Rjc20gPSBSRVZfRl9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDEwOgotCQkJcHZ0LT5udW1fZGNzbSA9IEYxMF9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDExOgotCQkJcHZ0LT5udW1fZGNzbSA9IEYxMV9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWFtZDY0X3ByaW50ayhLRVJOX0VSUiwgIlVuc3VwcG9ydGVkIGZhbWlseSFcbiIpOwotCQkJYnJlYWs7CisJCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDExKSB7CisJCQlwdnQtPmNzX2NvdW50ID0gNDsKKwkJCXB2dC0+bnVtX2Rjc20gPSAyOworCQl9IGVsc2UgeworCQkJcHZ0LT5jc19jb3VudCA9IDg7CisJCQlwdnQtPm51bV9kY3NtID0gNDsKIAkJfQotCX0gZWxzZSB7Ci0JCXB2dC0+ZGNzYl9iYXNlCQk9IFJFVl9FX0RDU0JfQkFTRV9CSVRTOwotCQlwdnQtPmRjc21fbWFzawkJPSBSRVZfRV9EQ1NNX01BU0tfQklUUzsKLQkJcHZ0LT5kY3NfbWFza19ub3R1c2VkCT0gUkVWX0VfRENTX05PVFVTRURfQklUUzsKLQkJcHZ0LT5kY3Nfc2hpZnQJCT0gUkVWX0VfRENTX1NISUZUOwotCQlwdnQtPm51bV9kY3NtCQk9IFJFVl9FX0RDU01fQ09VTlQ7CiAJfQogfQogCkBAIC0xMDAzLDcgKzk5NSw3IEBACiAKIAlhbWQ2NF9zZXRfZGN0X2Jhc2VfYW5kX21hc2socHZ0KTsKIAotCWZvciAoY3MgPSAwOyBjcyA8IENISVBTRUxFQ1RfQ09VTlQ7IGNzKyspIHsKKwlmb3IgKGNzID0gMDsgY3MgPCBwdnQtPmNzX2NvdW50OyBjcysrKSB7CiAJCXJlZyA9IEs4X0RDU0IwICsgKGNzICogNCk7CiAJCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwdnQtPmRyYW1fZjJfY3RsLCByZWcsCiAJCQkJCQkmcHZ0LT5kY3NiMFtjc10pOwpAQCAtMTE5Myw3ICsxMTg1LDcgQEAKIAkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgbm9kZSB0aGF0IGRldGVjdGVkIHRoZSBlcnJvci4KIAkgKi8KIAlzcmNfbWNpID0gZmluZF9tY19ieV9zeXNfYWRkcihtY2ksIFN5c3RlbUFkZHJlc3MpOwotCWlmIChzcmNfbWNpKSB7CisJaWYgKCFzcmNfbWNpKSB7CiAJCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAogCQkJICAgICAiZmFpbGVkIHRvIG1hcCBlcnJvciBhZGRyZXNzIDB4JWx4IHRvIGEgbm9kZVxuIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpU3lzdGVtQWRkcmVzcyk7CkBAIC0xMzc2LDggKzEzNjgsOCBAQAogCiAJcHZ0LT5kcmFtX0ludGx2RW5bZHJhbV0gPSAobG93X2Jhc2UgPj4gOCkgJiAweDc7CiAKLQlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKCgodTY0KSBoaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCAzMikgfAotCQkJCSgodTY0KSBsb3dfYmFzZSAmIDB4RkZGRjAwMDApKSkgPDwgODsKKwlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKHU2NCloaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAorCQkJICAgICAgICgoKHU2NClsb3dfYmFzZSAgJiAweEZGRkYwMDAwKSA8PCA4KTsKIAogCWxvd19vZmZzZXQgPSBLOF9EUkFNX0xJTUlUX0xPVyArIChkcmFtIDw8IDMpOwogCWhpZ2hfb2Zmc2V0ID0gRjEwX0RSQU1fTElNSVRfSElHSCArIChkcmFtIDw8IDMpOwpAQCAtMTM5OCw5ICsxMzkwLDkgQEAKIAkgKiBFeHRyYWN0IGFkZHJlc3MgdmFsdWVzIGFuZCBmb3JtIGEgTElNSVQgYWRkcmVzcy4gTGltaXQgaXMgdGhlIEhJR0hFU1QKIAkgKiBtZW1vcnkgbG9jYXRpb24gb2YgdGhlIHJlZ2lvbiwgc28gbG93IDI0IGJpdHMgbmVlZCB0byBiZSBhbGwgb25lcy4KIAkgKi8KLQlsb3dfbGltaXQgfD0gMHgwMDAwRkZGRjsKLQlwdnQtPmRyYW1fbGltaXRbZHJhbV0gPQotCQkoKCgodTY0KSBoaWdoX2xpbWl0IDw8IDMyKSArICh1NjQpIGxvd19saW1pdCkgPDwgOCkgfCAoMHhGRik7CisJcHZ0LT5kcmFtX2xpbWl0W2RyYW1dID0gKCgodTY0KWhpZ2hfbGltaXQgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAorCQkJCSgoKHU2NCkgbG93X2xpbWl0ICYgMHhGRkZGMDAwMCkgPDwgOCkgfAorCQkJCTB4MDBGRkZGRkY7CiB9CiAKIHN0YXRpYyB2b2lkIGYxMF9yZWFkX2RyYW1fY3RsX3JlZ2lzdGVyKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKQEAgLTE1NjYsNyArMTU1OCw3IEBACiAKIAlkZWJ1Z2YxKCJJbnB1dEFkZHI9MHgleCAgY2hhbm5lbHNlbGVjdD0lZFxuIiwgaW5fYWRkciwgY3MpOwogCi0JZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3Nyb3crKykgeworCWZvciAoY3Nyb3cgPSAwOyBjc3JvdyA8IHB2dC0+Y3NfY291bnQ7IGNzcm93KyspIHsKIAogCQljc19iYXNlID0gYW1kNjRfZ2V0X2RjdF9iYXNlKHB2dCwgY3MsIGNzcm93KTsKIAkJaWYgKCEoY3NfYmFzZSAmIEs4X0RDU0JfQ1NfRU5BQkxFKSkKQEAgLTIyNjIsNyArMjI1NCw3IEBACiB7CiAJdTMyIGVjICA9IEVSUk9SX0NPREUoaW5mby0+bmJzbCk7CiAJdTMyIHhlYyA9IEVYVF9FUlJPUl9DT0RFKGluZm8tPm5ic2wpOwotCWludCBlY2NfdHlwZSA9IGluZm8tPm5ic2ggJiAoMHgzIDw8IDEzKTsKKwlpbnQgZWNjX3R5cGUgPSAoaW5mby0+bmJzaCA+PiAxMykgJiAweDM7CiAKIAkvKiBCYWlsIGVhcmx5IG91dCBpZiB0aGlzIHdhcyBhbiAnb2JzZXJ2ZWQnIGVycm9yICovCiAJaWYgKFBQKGVjKSA9PSBLOF9OQlNMX1BQX09CUykKQEAgLTI0OTcsNyArMjQ4OSw3IEBACiAgKiBOT1RFOiBDUFUgUmV2aXNpb24gRGVwZW5kZW50IGNvZGUKICAqCiAgKiBJbnB1dDoKLSAqCUBjc3Jvd19uciBDaGlwU2VsZWN0IFJvdyBOdW1iZXIgKDAuLkNISVBTRUxFQ1RfQ09VTlQtMSkKKyAqCUBjc3Jvd19uciBDaGlwU2VsZWN0IFJvdyBOdW1iZXIgKDAuLnB2dC0+Y3NfY291bnQtMSkKICAqCWs4IHByaXZhdGUgcG9pbnRlciB0byAtLT4KICAqCQkJRFJBTSBCYW5rIEFkZHJlc3MgbWFwcGluZyByZWdpc3RlcgogICoJCQlub2RlX2lkCkBAIC0yNTc3LDcgKzI1NjksNyBAQAogCQkocHZ0LT5uYmNmZyAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIgogCQkpOwogCi0JZm9yIChpID0gMDsgaSA8IENISVBTRUxFQ1RfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwdnQtPmNzX2NvdW50OyBpKyspIHsKIAkJY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaV07CiAKIAkJaWYgKChwdnQtPmRjc2IwW2ldICYgSzhfRENTQl9DU19FTkFCTEUpID09IDApIHsKQEAgLTI5ODgsNyArMjk4MCw3IEBACiAJCWdvdG8gZXJyX2V4aXQ7CiAKIAlyZXQgPSAtRU5PTUVNOwotCW1jaSA9IGVkYWNfbWNfYWxsb2MoMCwgQ0hJUFNFTEVDVF9DT1VOVCwgcHZ0LT5jaGFubmVsX2NvdW50LCBub2RlX2lkKTsKKwltY2kgPSBlZGFjX21jX2FsbG9jKDAsIHB2dC0+Y3NfY291bnQsIHB2dC0+Y2hhbm5lbF9jb3VudCwgbm9kZV9pZCk7CiAJaWYgKCFtY2kpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKQEAgLTMxNzEsNyArMzE2Myw3IEBACiAJb3BzdGF0ZV9pbml0KCk7CiAKIAlpZiAoY2FjaGVfazhfbm9ydGhicmlkZ2VzKCkgPCAwKQotCQlnb3RvIGVycl9leGl0OworCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAJaWYgKGVycikKQEAgLTMxOTcsOCArMzE4OSw2IEBACiAKIGVycl8ybmRfc3RhZ2U6CiAJZGVidWdmMCgiMm5kIHN0YWdlIGZhaWxlZFxuIik7Ci0KLWVycl9leGl0OgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKaW5kZXggOGVhMDdlMi4uYzZmMzU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAorKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCkBAIC0xMzIsNiArMTMyLDggQEAKICNkZWZpbmUgRURBQ19BTUQ2NF9WRVJTSU9OCQkiIFZlcjogMy4yLjAgIiBfX0RBVEVfXwogI2RlZmluZSBFREFDX01PRF9TVFIJCQkiYW1kNjRfZWRhYyIKIAorI2RlZmluZSBFREFDX01BWF9OVU1OT0RFUwkJOAorCiAvKiBFeHRlbmRlZCBNb2RlbCBmcm9tIENQVUlELCBmb3IgQ1BVIFJldmlzaW9uIG51bWJlcnMgKi8KICNkZWZpbmUgT1BURVJPTl9DUFVfTEVfUkVWX0MJCTAKICNkZWZpbmUgT1BURVJPTl9DUFVfUkVWX0QJCTEKQEAgLTE0Miw3ICsxNDQsNyBAQAogI2RlZmluZSBPUFRFUk9OX0NQVV9SRVZfRkEJCTUKIAogLyogSGFyZHdhcmUgbGltaXQgb24gQ2hpcFNlbGVjdCByb3dzIHBlciBNQyBhbmQgcHJvY2Vzc29ycyBwZXIgc3lzdGVtICovCi0jZGVmaW5lIENISVBTRUxFQ1RfQ09VTlQJCTgKKyNkZWZpbmUgTUFYX0NTX0NPVU5UCQkJOAogI2RlZmluZSBEUkFNX1JFR19DT1VOVAkJCTgKIAogCkBAIC0xOTMsNyArMTk1LDYgQEAKICAqLwogI2RlZmluZSBSRVZfRV9EQ1NCX0JBU0VfQklUUwkJKDB4RkZFMEZFMDBVTEwpCiAjZGVmaW5lIFJFVl9FX0RDU19TSElGVAkJCTQKLSNkZWZpbmUgUkVWX0VfRENTTV9DT1VOVAkJOAogCiAjZGVmaW5lIFJFVl9GX0YxWGhfRENTQl9CQVNFX0JJVFMJKDB4MUZGODNGRTBVTEwpCiAjZGVmaW5lIFJFVl9GX0YxWGhfRENTX1NISUZUCQk4CkBAIC0yMDQsOSArMjA1LDYgQEAKICAqLwogI2RlZmluZSBSRVZfRl9EQ1NCX0JBU0VfQklUUwkJKDB4MUZGODNGRTBVTEwpCiAjZGVmaW5lIFJFVl9GX0RDU19TSElGVAkJCTgKLSNkZWZpbmUgUkVWX0ZfRENTTV9DT1VOVAkJNAotI2RlZmluZSBGMTBfRENTTV9DT1VOVAkJCTQKLSNkZWZpbmUgRjExX0RDU01fQ09VTlQJCQkyCiAKIC8qIERSQU0gQ1MgTWFzayBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSzhfRENTTTAJCQkweDYwCkBAIC0zNzQsMTMgKzM3MiwxMSBAQAogCiAjZGVmaW5lIFNFVF9OQl9EUkFNX0lOSkVDVElPTl9XUklURSh3b3JkLCBiaXRzKSAgXAogCQkJCQkoQklUKCgod29yZCkgJiAweEYpICsgMjApIHwgXAotCQkJCQlCSVQoMTcpIHwgIFwKLQkJCQkJKChiaXRzKSAmIDB4RikpCisJCQkJCUJJVCgxNykgfCBiaXRzKQogCiAjZGVmaW5lIFNFVF9OQl9EUkFNX0lOSkVDVElPTl9SRUFEKHdvcmQsIGJpdHMpICBcCiAJCQkJCShCSVQoKCh3b3JkKSAmIDB4RikgKyAyMCkgfCBcCi0JCQkJCUJJVCgxNikgfCAgXAotCQkJCQkoKGJpdHMpICYgMHhGKSkKKwkJCQkJQklUKDE2KSB8ICBiaXRzKQogCiAjZGVmaW5lIEs4X05CQ0FQCQkJMHhFOAogI2RlZmluZSBLOF9OQkNBUF9DT1JFUwkJCShCSVQoMTIpfEJJVCgxMykpCkBAIC00NDUsMTIgKzQ0MSwxMiBAQAogCXUzMiBkYmFtMTsJCS8qIERSQU0gQmFzZSBBZGRyZXNzIE1hcHBpbmcgcmVnIGZvciBEQ1QxICovCiAKIAkvKiBEUkFNIENTIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMgRjJ4WzEsMF1bNUM6NDBdICovCi0JdTMyIGRjc2IwW0NISVBTRUxFQ1RfQ09VTlRdOwotCXUzMiBkY3NiMVtDSElQU0VMRUNUX0NPVU5UXTsKKwl1MzIgZGNzYjBbTUFYX0NTX0NPVU5UXTsKKwl1MzIgZGNzYjFbTUFYX0NTX0NPVU5UXTsKIAogCS8qIERSQU0gQ1MgTWFzayBSZWdpc3RlcnMgRjJ4WzEsMF1bNkM6NjBdICovCi0JdTMyIGRjc20wW0NISVBTRUxFQ1RfQ09VTlRdOwotCXUzMiBkY3NtMVtDSElQU0VMRUNUX0NPVU5UXTsKKwl1MzIgZGNzbTBbTUFYX0NTX0NPVU5UXTsKKwl1MzIgZGNzbTFbTUFYX0NTX0NPVU5UXTsKIAogCS8qCiAJICogRGVjb2RlZCBwYXJ0cyBvZiBEUkFNIEJBU0UgYW5kIExJTUlUIFJlZ2lzdGVycwpAQCAtNDcwLDYgKzQ2Niw3IEBACiAJICovCiAJdTMyIGRjc2JfYmFzZTsJCS8qIERDU0IgYmFzZSBiaXRzICovCiAJdTMyIGRjc21fbWFzazsJCS8qIERDU00gbWFzayBiaXRzICovCisJdTMyIGNzX2NvdW50OwkJLyogbnVtIGNoaXAgc2VsZWN0cyAoPT0gbnVtIERDU0IgcmVnaXN0ZXJzKSAqLwogCXUzMiBudW1fZGNzbTsJCS8qIE51bWJlciBvZiBEQ1NNIHJlZ2lzdGVycyAqLwogCXUzMiBkY3NfbWFza19ub3R1c2VkOwkvKiBEQ1NNIG5vdHVzZWQgbWFzayBiaXRzICovCiAJdTMyIGRjc19zaGlmdDsJCS8qIERDU0IgYW5kIERDU00gc2hpZnQgdmFsdWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfaW5qLmMKaW5kZXggZDM2NzViNy4uMjlmMWY3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfaW5qLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfaW5qLmMKQEAgLTEsNSArMSwxMSBAQAogI2luY2x1ZGUgImFtZDY0X2VkYWMuaCIKIAorc3RhdGljIHNzaXplX3QgYW1kNjRfaW5qZWN0X3NlY3Rpb25fc2hvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXhcbiIsIHB2dC0+aW5qZWN0aW9uLnNlY3Rpb24pOworfQorCiAvKgogICogc3RvcmUgZXJyb3IgaW5qZWN0aW9uIHNlY3Rpb24gdmFsdWUgd2hpY2ggcmVmZXJzIHRvIG9uZSBvZiA0IDE2LWJ5dGUgc2VjdGlvbnMKICAqIHdpdGhpbiBhIDY0LWJ5dGUgY2FjaGVsaW5lCkBAIC0xNSwxMiArMjEsMjYgQEAKIAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmdmFsdWUpOwogCWlmIChyZXQgIT0gLUVJTlZBTCkgeworCisJCWlmICh2YWx1ZSA+IDMpIHsKKwkJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCisJCQkJICAgICAiJXM6IGludmFsaWQgc2VjdGlvbiAweCVseFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCB2YWx1ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCiAJCXB2dC0+aW5qZWN0aW9uLnNlY3Rpb24gPSAodTMyKSB2YWx1ZTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBhbWQ2NF9pbmplY3Rfd29yZF9zaG93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleFxuIiwgcHZ0LT5pbmplY3Rpb24ud29yZCk7Cit9CisKIC8qCiAgKiBzdG9yZSBlcnJvciBpbmplY3Rpb24gd29yZCB2YWx1ZSB3aGljaCByZWZlcnMgdG8gb25lIG9mIDkgMTYtYml0IHdvcmQgb2YgdGhlCiAgKiAxNi1ieXRlICgxMjgtYml0ICsgRUNDIGJpdHMpIHNlY3Rpb24KQEAgLTM3LDE0ICs1NywyNSBAQAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmdmFsdWUpOwogCWlmIChyZXQgIT0gLUVJTlZBTCkgewogCi0JCXZhbHVlID0gKHZhbHVlIDw9IDgpID8gdmFsdWUgOiAwOwotCQlwdnQtPmluamVjdGlvbi53b3JkID0gKHUzMikgdmFsdWU7CisJCWlmICh2YWx1ZSA+IDgpIHsKKwkJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCisJCQkJICAgICAiJXM6IGludmFsaWQgd29yZCAweCVseFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCB2YWx1ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCisJCXB2dC0+aW5qZWN0aW9uLndvcmQgPSAodTMyKSB2YWx1ZTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBhbWQ2NF9pbmplY3RfZWNjX3ZlY3Rvcl9zaG93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleFxuIiwgcHZ0LT5pbmplY3Rpb24uYml0X21hcCk7Cit9CisKIC8qCiAgKiBzdG9yZSAxNiBiaXQgZXJyb3IgaW5qZWN0aW9uIHZlY3RvciB3aGljaCBlbmFibGVzIGluamVjdGluZyBlcnJvcnMgdG8gdGhlCiAgKiBjb3JyZXNwb25kaW5nIGJpdCB3aXRoaW4gdGhlIGVycm9yIGluamVjdGlvbiB3b3JkIGFib3ZlLiBXaGVuIHVzZWQgZHVyaW5nIGEKQEAgLTYwLDggKzkxLDE0IEBACiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTYsICZ2YWx1ZSk7CiAJaWYgKHJldCAhPSAtRUlOVkFMKSB7CiAKLQkJcHZ0LT5pbmplY3Rpb24uYml0X21hcCA9ICh1MzIpIHZhbHVlICYgMHhGRkZGOworCQlpZiAodmFsdWUgJiAweEZGRkYwMDAwKSB7CisJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLAorCQkJCSAgICAgIiVzOiBpbnZhbGlkIEVjY1ZlY3RvcjogMHglbHhcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgdmFsdWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAorCQlwdnQtPmluamVjdGlvbi5iaXRfbWFwID0gKHUzMikgdmFsdWU7CiAJCXJldHVybiBjb3VudDsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE0Nyw3ICsxODQsNyBAQAogCQkJLm5hbWUgPSAiaW5qZWN0X3NlY3Rpb24iLAogCQkJLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpCiAJCX0sCi0JCS5zaG93ID0gTlVMTCwKKwkJLnNob3cgPSBhbWQ2NF9pbmplY3Rfc2VjdGlvbl9zaG93LAogCQkuc3RvcmUgPSBhbWQ2NF9pbmplY3Rfc2VjdGlvbl9zdG9yZSwKIAl9LAogCXsKQEAgLTE1NSw3ICsxOTIsNyBAQAogCQkJLm5hbWUgPSAiaW5qZWN0X3dvcmQiLAogCQkJLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpCiAJCX0sCi0JCS5zaG93ID0gTlVMTCwKKwkJLnNob3cgPSBhbWQ2NF9pbmplY3Rfd29yZF9zaG93LAogCQkuc3RvcmUgPSBhbWQ2NF9pbmplY3Rfd29yZF9zdG9yZSwKIAl9LAogCXsKQEAgLTE2Myw3ICsyMDAsNyBAQAogCQkJLm5hbWUgPSAiaW5qZWN0X2VjY192ZWN0b3IiLAogCQkJLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpCiAJCX0sCi0JCS5zaG93ID0gTlVMTCwKKwkJLnNob3cgPSBhbWQ2NF9pbmplY3RfZWNjX3ZlY3Rvcl9zaG93LAogCQkuc3RvcmUgPSBhbWQ2NF9pbmplY3RfZWNjX3ZlY3Rvcl9zdG9yZSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYwppbmRleCAwYzIxYzM3Li43MTNlZDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCkBAIC0zLDYgKzMsNyBAQAogCiBzdGF0aWMgYm9vbCByZXBvcnRfZ2FydF9lcnJvcnM7CiBzdGF0aWMgdm9pZCAoKm5iX2J1c19kZWNvZGVyKShpbnQgbm9kZV9pZCwgc3RydWN0IGVycl9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkICgqb3JpZ19tY2VfY2FsbGJhY2spKHN0cnVjdCBtY2UgKm0pOwogCiB2b2lkIGFtZF9yZXBvcnRfZ2FydF9lcnJvcnMoYm9vbCB2KQogewpAQCAtMzYyLDcgKzM2Myw3IEBACiAJCXByX3dhcm5pbmcoIkh1aD8gVW5rbm93biBNQ0UgZXJyb3IgMHgleFxuIiwgZWMpOwogfQogCi12b2lkIGRlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKK3N0YXRpYyB2b2lkIGFtZF9kZWNvZGVfbWNlKHN0cnVjdCBtY2UgKm0pCiB7CiAJc3RydWN0IGVycl9yZWdzIHJlZ3M7CiAJaW50IG5vZGUsIGVjYzsKQEAgLTQyMCwzICs0MjEsMzIgQEAKIAogCWFtZF9kZWNvZGVfZXJyX2NvZGUobS0+c3RhdHVzICYgMHhmZmZmKTsKIH0KKworc3RhdGljIGludCBfX2luaXQgbWNlX2FtZF9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBXZSBjYW4gZGVjb2RlIE1DRXMgZm9yIE9wdGVyb24gYW5kIGxhdGVyIENQVXM6CisJICovCisJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmCisJICAgIChib290X2NwdV9kYXRhLng4NiA+PSAweGYpKSB7CisJCS8qIHNhZmUgdGhlIGRlZmF1bHQgZGVjb2RlIG1jZSBjYWxsYmFjayAqLworCQlvcmlnX21jZV9jYWxsYmFjayA9IHg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrOworCisJCXg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrID0gYW1kX2RlY29kZV9tY2U7CisJfQorCisJcmV0dXJuIDA7Cit9CitlYXJseV9pbml0Y2FsbChtY2VfYW1kX2luaXQpOworCisjaWZkZWYgTU9EVUxFCitzdGF0aWMgdm9pZCBfX2V4aXQgbWNlX2FtZF9leGl0KHZvaWQpCit7CisJeDg2X21jZV9kZWNvZGVfY2FsbGJhY2sgPSBvcmlnX21jZV9jYWxsYmFjazsKK30KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQgTUNFIGRlY29kZXIiKTsKK01PRFVMRV9BTElBUygiZWRhYy1tY2UtYW1kIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfZXhpdChtY2VfYW1kX2V4aXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYwppbmRleCBkMzM1MDg2Li43N2E5NTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKQEAgLTExNzMsNyArMTE3Myw3IEBACiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChwdnQtPmJyYW5jaF8xLCB3aGVyZSwKIAkJCQkJJnB2dC0+YjFfbXRyW3Nsb3Rfcm93XSk7CiAJCQlkZWJ1Z2YyKCJNVFIlZCB3aGVyZT0weCV4IEIxIHZhbHVlPTB4JXhcbiIsIHNsb3Rfcm93LAotCQkJCXdoZXJlLCBwdnQtPmIwX210cltzbG90X3Jvd10pOworCQkJCXdoZXJlLCBwdnQtPmIxX210cltzbG90X3Jvd10pOwogCQl9IGVsc2UgewogCQkJcHZ0LT5iMV9tdHJbc2xvdF9yb3ddID0gMDsKIAkJfQpAQCAtMTIzMiw3ICsxMjMyLDcgQEAKIAlzdHJ1Y3QgY3Nyb3dfaW5mbyAqcF9jc3JvdzsKIAlpbnQgZW1wdHksIGNoYW5uZWxfY291bnQ7CiAJaW50IG1heF9jc3Jvd3M7Ci0JaW50IG10cjsKKwlpbnQgbXRyLCBtdHIxOwogCWludCBjc3Jvd19tZWdzOwogCWludCBjaGFubmVsOwogCWludCBjc3JvdzsKQEAgLTEyNTEsOSArMTI1MSwxMCBAQAogCiAJCS8qIHVzZSBicmFuY2ggMCBmb3IgdGhlIGJhc2lzICovCiAJCW10ciA9IHB2dC0+YjBfbXRyW2Nzcm93ID4+IDFdOworCQltdHIxID0gcHZ0LT5iMV9tdHJbY3Nyb3cgPj4gMV07CiAKIAkJLyogaWYgbm8gRElNTVMgb24gdGhpcyByb3csIGNvbnRpbnVlICovCi0JCWlmICghTVRSX0RJTU1TX1BSRVNFTlQobXRyKSkKKwkJaWYgKCFNVFJfRElNTVNfUFJFU0VOVChtdHIpICYmICFNVFJfRElNTVNfUFJFU0VOVChtdHIxKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEZBS0UgT1VUIFZBTFVFUywgRklYTUUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCmluZGV4IGIwOGI2ZDguLmY5OWQxMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYwpAQCAtNDYsOSArNDYsMTAgQEAKIC8qIExpbWl0cyBmb3IgaTU0MDAgKi8KICNkZWZpbmUgTlVNX01UUlNfUEVSX0JSQU5DSAk0CiAjZGVmaW5lIENIQU5ORUxTX1BFUl9CUkFOQ0gJMgorI2RlZmluZSBNQVhfRElNTVNfUEVSX0NIQU5ORUwJTlVNX01UUlNfUEVSX0JSQU5DSAogI2RlZmluZQlNQVhfQ0hBTk5FTFMJCTQKLSNkZWZpbmUgTUFYX0RJTU1TCQkoTUFYX0NIQU5ORUxTICogNCkJLyogVXAgdG8gNCBESU1NJ3MgcGVyIGNoYW5uZWwgKi8KLSNkZWZpbmUgTUFYX0NTUk9XUwkJKE1BWF9ESU1NUyAqIDIpCQkvKiBtYXggcG9zc2libGUgY3Nyb3dzIHBlciBjaGFubmVsICovCisvKiBtYXggcG9zc2libGUgY3Nyb3dzIHBlciBjaGFubmVsICovCisjZGVmaW5lIE1BWF9DU1JPV1MJCShNQVhfRElNTVNfUEVSX0NIQU5ORUwpCiAKIC8qIERldmljZSAxNiwKICAqIEZ1bmN0aW9uIDA6IFN5c3RlbSBBZGRyZXNzCkBAIC0zMzEsNyArMzMyLDYgQEAKIAogc3RydWN0IGk1NDAwX2RpbW1faW5mbyB7CiAJaW50IG1lZ2FieXRlczsJCS8qIHNpemUsIDAgbWVhbnMgbm90IHByZXNlbnQgICovCi0JaW50IGR1YWxfcmFuazsKIH07CiAKIC8qIGRyaXZlciBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCkBAIC04NDksMTEgKzg0OSw5IEBACiAJaW50IG47CiAKIAkvKiBUaGVyZSBpcyBvbmUgTVRSIGZvciBlYWNoIHNsb3QgcGFpciBvZiBGQi1ESU1NcywKLQkgICBFYWNoIHNsb3QgbWF5IGhhdmUgb25lIG9yIHR3byByYW5rcyAoMiBjc3Jvd3MpLAogCSAgIEVhY2ggc2xvdCBwYWlyIG1heSBiZSBhdCBicmFuY2ggMCBvciBicmFuY2ggMS4KLQkgICBTbywgY3Nyb3cgc2hvdWxkIGJlIGRpdmlkZWQgYnkgZWlnaHQKIAkgKi8KLQluID0gY3Nyb3cgPj4gMzsKKwluID0gY3Nyb3c7CiAKIAlpZiAobiA+PSBOVU1fTVRSU19QRVJfQlJBTkNIKSB7CiAJCWRlYnVnZjAoIkVSUk9SOiB0cnlpbmcgdG8gYWNjZXNzIGFuIGludmFsaWQgY3Nyb3c6ICVkXG4iLApAQCAtOTA1LDI1ICs5MDMsMjIgQEAKIAkJYW1iX3ByZXNlbnRfcmVnID0gZGV0ZXJtaW5lX2FtYl9wcmVzZW50X3JlZyhwdnQsIGNoYW5uZWwpOwogCiAJCS8qIERldGVybWluZSBpZiB0aGVyZSBpcyBhIERJTU0gcHJlc2VudCBpbiB0aGlzIERJTU0gc2xvdCAqLwotCQlpZiAoYW1iX3ByZXNlbnRfcmVnICYgKDEgPDwgKGNzcm93ID4+IDEpKSkgewotCQkJZGluZm8tPmR1YWxfcmFuayA9IE1UUl9ESU1NX1JBTksobXRyKTsKKwkJaWYgKGFtYl9wcmVzZW50X3JlZyAmICgxIDw8IGNzcm93KSkgeworCQkJLyogU3RhcnQgd2l0aCB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIGEgQmFuaworCQkJICogb24gdGhlIERSQU0gKi8KKwkJCWFkZHJCaXRzID0gTVRSX0RSQU1fQkFOS1NfQUREUl9CSVRTKG10cik7CisJCQkvKiBBZGQgdGhlbnVtYmVyIG9mIFJPVyBiaXRzICovCisJCQlhZGRyQml0cyArPSBNVFJfRElNTV9ST1dTX0FERFJfQklUUyhtdHIpOworCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgQ09MVU1OIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX0NPTFNfQUREUl9CSVRTKG10cik7CisJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBSQU5LIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JBTksobXRyKTsKIAotCQkJaWYgKCEoKGRpbmZvLT5kdWFsX3JhbmsgPT0gMCkgJiYKLQkJCQkoKGNzcm93ICYgMHgxKSA9PSAweDEpKSkgewotCQkJCS8qIFN0YXJ0IHdpdGggdGhlIG51bWJlciBvZiBiaXRzIGZvciBhIEJhbmsKLQkJCQkgKiBvbiB0aGUgRFJBTSAqLwotCQkJCWFkZHJCaXRzID0gTVRSX0RSQU1fQkFOS1NfQUREUl9CSVRTKG10cik7Ci0JCQkJLyogQWRkIHRoZW51bWJlciBvZiBST1cgYml0cyAqLwotCQkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JPV1NfQUREUl9CSVRTKG10cik7Ci0JCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgQ09MVU1OIGJpdHMgKi8KLQkJCQlhZGRyQml0cyArPSBNVFJfRElNTV9DT0xTX0FERFJfQklUUyhtdHIpOworCQkJYWRkckJpdHMgKz0gNjsJLyogYWRkIDY0IGJpdHMgcGVyIERJTU0gKi8KKwkJCWFkZHJCaXRzIC09IDIwOwkvKiBkaXZpZGUgYnkgMl5eMjAgKi8KKwkJCWFkZHJCaXRzIC09IDM7CS8qIDggYml0cyBwZXIgYnl0ZXMgKi8KIAotCQkJCWFkZHJCaXRzICs9IDY7CS8qIGFkZCA2NCBiaXRzIHBlciBESU1NICovCi0JCQkJYWRkckJpdHMgLT0gMjA7CS8qIGRpdmlkZSBieSAyXl4yMCAqLwotCQkJCWFkZHJCaXRzIC09IDM7CS8qIDggYml0cyBwZXIgYnl0ZXMgKi8KLQotCQkJCWRpbmZvLT5tZWdhYnl0ZXMgPSAxIDw8IGFkZHJCaXRzOwotCQkJfQorCQkJZGluZm8tPm1lZ2FieXRlcyA9IDEgPDwgYWRkckJpdHM7CiAJCX0KIAl9CiB9CkBAIC05NTEsMTIgKzk0NiwxMiBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogU2NhbiBhbGwgdGhlIGFjdHVhbCBDU1JPV1MgKHdoaWNoIGlzICMgb2YgRElNTVMgKiAyKQorCS8qIFNjYW4gYWxsIHRoZSBhY3R1YWwgQ1NST1dTCiAJICogYW5kIGNhbGN1bGF0ZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggRElNTQogCSAqIFN0YXJ0IHdpdGggdGhlIGhpZ2hlc3QgY3Nyb3cgZmlyc3QsIHRvIGRpc3BsYXkgaXQgZmlyc3QKIAkgKiBhbmQgd29yayB0b3dhcmQgdGhlIDB0aCBjc3JvdwogCSAqLwotCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaCAqIDI7CisJbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoOwogCWZvciAoY3Nyb3cgPSBtYXhfY3Nyb3dzIC0gMTsgY3Nyb3cgPj0gMDsgY3Nyb3ctLSkgewogCiAJCS8qIG9uIGFuIG9kZCBjc3JvdywgZmlyc3Qgb3V0cHV0IGEgJ2JvdW5kYXJ5JyBtYXJrZXIsCkBAIC0xMDY0LDcgKzEwNTksNyBAQAogCiAJLyogR2V0IHRoZSBzZXQgb2YgTVRSWzAtM10gcmVncyBieSBlYWNoIGJyYW5jaCAqLwogCWZvciAoc2xvdF9yb3cgPSAwOyBzbG90X3JvdyA8IE5VTV9NVFJTX1BFUl9CUkFOQ0g7IHNsb3Rfcm93KyspIHsKLQkJaW50IHdoZXJlID0gTVRSMCArIChzbG90X3JvdyAqIHNpemVvZih1MzIpKTsKKwkJaW50IHdoZXJlID0gTVRSMCArIChzbG90X3JvdyAqIHNpemVvZih1MTYpKTsKIAogCQkvKiBCcmFuY2ggMCBzZXQgb2YgTVRSIHJlZ2lzdGVycyAqLwogCQlwY2lfcmVhZF9jb25maWdfd29yZChwdnQtPmJyYW5jaF8wLCB3aGVyZSwKQEAgLTExNDYsNyArMTE0MSw3IEBACiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAogCWNoYW5uZWxfY291bnQgPSBwdnQtPm1heGNoOwotCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaCAqIDI7CisJbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoOwogCiAJZW1wdHkgPSAxOwkJLyogQXNzdW1lIE5PIG1lbW9yeSAqLwogCkBAIC0xMjE1LDI4ICsxMjEwLDYgQEAKIH0KIAogLyoKLSAqIGk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhwZGV2LCAmbnVtX2Nzcm93cywgJm51bV9jaGFubmVscykKLSAqCi0gKglhc2sgdGhlIGRldmljZSBob3cgbWFueSBjaGFubmVscyBhcmUgcHJlc2VudCBhbmQgaG93IG1hbnkgQ1NST1dTCi0gKgkgYXMgd2VsbAotICovCi1zdGF0aWMgdm9pZCBpNTQwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCWludCAqbnVtX2RpbW1zX3Blcl9jaGFubmVsLAotCQkJCQlpbnQgKm51bV9jaGFubmVscykKLXsKLQl1OCB2YWx1ZTsKLQotCS8qIE5lZWQgdG8gcmV0cmlldmUganVzdCBob3cgbWFueSBjaGFubmVscyBhbmQgZGltbXMgcGVyIGNoYW5uZWwgYXJlCi0JICogc3VwcG9ydGVkIG9uIHRoaXMgbWVtb3J5IGNvbnRyb2xsZXIKLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBNQVhESU1NUEVSQ0gsICZ2YWx1ZSk7Ci0JKm51bV9kaW1tc19wZXJfY2hhbm5lbCA9IChpbnQpdmFsdWUgKiAyOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgTUFYQ0gsICZ2YWx1ZSk7Ci0JKm51bV9jaGFubmVscyA9IChpbnQpdmFsdWU7Ci19Ci0KLS8qCiAgKglpNTQwMF9wcm9iZTEJUHJvYmUgZm9yIE9ORSBpbnN0YW5jZSBvZiBkZXZpY2UgdG8gc2VlIGlmIGl0IGlzCiAgKgkJCXByZXNlbnQuCiAgKglyZXR1cm46CkBAIC0xMjYzLDIyICsxMjM2LDE2IEBACiAJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIEFzayB0aGUgZGV2aWNlcyBmb3IgdGhlIG51bWJlciBvZiBDU1JPV1MgYW5kIENIQU5ORUxTIHNvCi0JICogdGhhdCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBtZW1vcnkgcmVzb3VyY2VzLCBldGMKLQkgKgotCSAqIFRoZSBDaGlwc2V0IHdpbGwgcmVwb3J0IHdoYXQgaXQgY2FuIGhhbmRsZSB3aGljaCB3aWxsIGJlIGdyZWF0ZXIKLQkgKiBvciBlcXVhbCB0byB3aGF0IHRoZSBtb3RoZXJib2FyZCBtYW51ZmFjdHVyZXIgd2lsbCBpbXBsZW1lbnQuCi0JICoKLQkgKiBBcyB3ZSBkb24ndCBoYXZlIGEgbW90aGVyYm9hcmQgaWRlbnRpZmljYXRpb24gcm91dGluZSB0byBkZXRlcm1pbmUKKwkvKiBBcyB3ZSBkb24ndCBoYXZlIGEgbW90aGVyYm9hcmQgaWRlbnRpZmljYXRpb24gcm91dGluZSB0byBkZXRlcm1pbmUKIAkgKiBhY3R1YWwgbnVtYmVyIG9mIHNsb3RzL2RpbW1zIHBlciBjaGFubmVsLCB3ZSB0aHVzIHV0aWxpemUgdGhlCiAJICogcmVzb3VyY2UgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjaGlwc2V0LiBUaHVzLCB3ZSBtaWdodCBoYXZlCiAJICogaGF2ZSBtb3JlIERJTU1zIHBlciBjaGFubmVsIHRoYW4gYWN0dWFsbHkgb24gdGhlIG1vYm8sIGJ1dCB0aGlzCiAJICogYWxsb3dzIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCB1cHRvIHRoZSBjaGlwc2V0IG1heCwgd2l0aG91dAogCSAqIHNvbWUgZmFuY3kgbW9ibyBkZXRlcm1pbmF0aW9uLgogCSAqLwotCWk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhwZGV2LCAmbnVtX2RpbW1zX3Blcl9jaGFubmVsLAotCQkJCQkmbnVtX2NoYW5uZWxzKTsKLQludW1fY3Nyb3dzID0gbnVtX2RpbW1zX3Blcl9jaGFubmVsICogMjsKKwludW1fZGltbXNfcGVyX2NoYW5uZWwgPSBNQVhfRElNTVNfUEVSX0NIQU5ORUw7CisJbnVtX2NoYW5uZWxzID0gTUFYX0NIQU5ORUxTOworCW51bV9jc3Jvd3MgPSBudW1fZGltbXNfcGVyX2NoYW5uZWw7CiAKIAlkZWJ1Z2YwKCJNQzogJXMoKTogTnVtYmVyIG9mIC0gQ2hhbm5lbHM9ICVkICBESU1NUz0gJWQgIENTUk9XUz0gJWRcbiIsCiAJCV9fZnVuY19fLCBudW1fY2hhbm5lbHMsIG51bV9kaW1tc19wZXJfY2hhbm5lbCwgbnVtX2Nzcm93cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggMTU3ZjY1MC4uY2YyNzQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMjYsNyArMjYsOSBAQAogI2luY2x1ZGUgIm1wYzg1eHhfZWRhYy5oIgogCiBzdGF0aWMgaW50IGVkYWNfZGV2X2lkeDsKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IGVkYWNfcGNpX2lkeDsKKyNlbmRpZgogc3RhdGljIGludCBlZGFjX21jX2lkeDsKIAogc3RhdGljIHUzMiBvcmlnX2Rkcl9lcnJfZGlzYWJsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCmluZGV4IGNlZDE4NmQuLjUwODkzMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKaW5kZXggNTBmMDE3Ni4uOThkYmJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKQEAgLTE4OCwxNCArMTg4LDcgQEAKIC8qIEltcG9zc2libGUgbG9naW5faWQsIHRvIGRldGVjdCBsb2dvdXQgYXR0ZW1wdCBiZWZvcmUgc3VjY2Vzc2Z1bCBsb2dpbiAqLwogI2RlZmluZSBJTlZBTElEX0xPR0lOX0lEIDB4MTAwMDAKIAotLyoKLSAqIFBlciBzZWN0aW9uIDcuNC44IG9mIHRoZSBTQlAtMiBzcGVjLCBhIG1ndF9PUkJfdGltZW91dCB2YWx1ZSBjYW4gYmUKLSAqIHByb3ZpZGVkIGluIHRoZSBjb25maWcgcm9tLiBNb3N0IGRldmljZXMgZG8gcHJvdmlkZSBhIHZhbHVlLCB3aGljaAotICogd2UnbGwgdXNlIGZvciBsb2dpbiBtYW5hZ2VtZW50IG9yYnMsIGJ1dCB3aXRoIHNvbWUgc2FuZSBsaW1pdHMuCi0gKi8KLSNkZWZpbmUgU0JQMl9NSU5fTE9HSU5fT1JCX1RJTUVPVVQJNTAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVAk0MDAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX09SQl9USU1FT1VUCQkyMDAwVQkvKiBUaW1lb3V0IGluIG1zICovCisjZGVmaW5lIFNCUDJfT1JCX1RJTUVPVVQJCTIwMDBVCQkvKiBUaW1lb3V0IGluIG1zICovCiAjZGVmaW5lIFNCUDJfT1JCX05VTEwJCQkweDgwMDAwMDAwCiAjZGVmaW5lIFNCUDJfUkVUUllfTElNSVQJCTB4ZgkJLyogMTUgcmV0cmllcyAqLwogI2RlZmluZSBTQlAyX0NZQ0xFX0xJTUlUCQkoMHhjOCA8PCAxMikJLyogMjAwIDEyNXVzIGN5Y2xlcyAqLwpAQCAtMTAzNCw3ICsxMDI3LDYgQEAKIHsKIAlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOwogCWludCBrZXksIHZhbHVlOwotCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCiAJZndfY3NyX2l0ZXJhdG9yX2luaXQoJmNpLCBkaXJlY3RvcnkpOwogCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmY2ksICZrZXksICZ2YWx1ZSkpIHsKQEAgLTEwNTksMTcgKzEwNTEsNyBAQAogCiAJCWNhc2UgU0JQMl9DU1JfVU5JVF9DSEFSQUNURVJJU1RJQ1M6CiAJCQkvKiB0aGUgdGltZW91dCB2YWx1ZSBpcyBzdG9yZWQgaW4gNTAwbXMgdW5pdHMgKi8KLQkJCXRpbWVvdXQgPSAoKHVuc2lnbmVkIGludCkgdmFsdWUgPj4gOCAmIDB4ZmYpICogNTAwOwotCQkJdGltZW91dCA9IG1heCh0aW1lb3V0LCBTQlAyX01JTl9MT0dJTl9PUkJfVElNRU9VVCk7Ci0JCQl0Z3QtPm1ndF9vcmJfdGltZW91dCA9Ci0JCQkJICBtaW4odGltZW91dCwgU0JQMl9NQVhfTE9HSU5fT1JCX1RJTUVPVVQpOwotCi0JCQlpZiAodGltZW91dCA+IHRndC0+bWd0X29yYl90aW1lb3V0KQotCQkJCWZ3X25vdGlmeSgiJXM6IGNvbmZpZyByb20gY29udGFpbnMgJWRzICIKLQkJCQkJICAibWFuYWdlbWVudCBPUkIgdGltZW91dCwgbGltaXRpbmcgIgotCQkJCQkgICJ0byAlZHNcbiIsIHRndC0+YnVzX2lkLAotCQkJCQkgIHRpbWVvdXQgLyAxMDAwLAotCQkJCQkgIHRndC0+bWd0X29yYl90aW1lb3V0IC8gMTAwMCk7CisJCQl0Z3QtPm1ndF9vcmJfdGltZW91dCA9ICh2YWx1ZSA+PiA4ICYgMHhmZikgKiA1MDA7CiAJCQlicmVhazsKIAogCQljYXNlIFNCUDJfQ1NSX0xPR0lDQUxfVU5JVF9OVU1CRVI6CkBAIC0xMDg3LDYgKzEwNjksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFBlciBzZWN0aW9uIDcuNC44IG9mIHRoZSBTQlAtMiBzcGVjLCBhIG1ndF9PUkJfdGltZW91dCB2YWx1ZSBjYW4gYmUKKyAqIHByb3ZpZGVkIGluIHRoZSBjb25maWcgcm9tLiBNb3N0IGRldmljZXMgZG8gcHJvdmlkZSBhIHZhbHVlLCB3aGljaAorICogd2UnbGwgdXNlIGZvciBsb2dpbiBtYW5hZ2VtZW50IG9yYnMsIGJ1dCB3aXRoIHNvbWUgc2FuZSBsaW1pdHMuCisgKi8KK3N0YXRpYyB2b2lkIHNicDJfY2xhbXBfbWFuYWdlbWVudF9vcmJfdGltZW91dChzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IHRndC0+bWd0X29yYl90aW1lb3V0OworCisJaWYgKHRpbWVvdXQgPiA0MDAwMCkKKwkJZndfbm90aWZ5KCIlczogJWRzIG1ndF9PUkJfdGltZW91dCBsaW1pdGVkIHRvIDQwc1xuIiwKKwkJCSAgdGd0LT5idXNfaWQsIHRpbWVvdXQgLyAxMDAwKTsKKworCXRndC0+bWd0X29yYl90aW1lb3V0ID0gY2xhbXBfdmFsKHRpbWVvdXQsIDUwMDAsIDQwMDAwKTsKK30KKwogc3RhdGljIHZvaWQgc2JwMl9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBzYnAyX3RhcmdldCAqdGd0LCB1MzIgbW9kZWwsCiAJCQkJICB1MzIgZmlybXdhcmVfcmV2aXNpb24pCiB7CkBAIC0xMTcxLDYgKzExNjksNyBAQAogCQkJICAgICAgICZmaXJtd2FyZV9yZXZpc2lvbikgPCAwKQogCQlnb3RvIGZhaWxfdGd0X3B1dDsKIAorCXNicDJfY2xhbXBfbWFuYWdlbWVudF9vcmJfdGltZW91dCh0Z3QpOwogCXNicDJfaW5pdF93b3JrYXJvdW5kcyh0Z3QsIG1vZGVsLCBmaXJtd2FyZV9yZXZpc2lvbik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwppbmRleCA0MjBhOTZlLi4wNTFkMWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwpAQCAtOTM5LDcgKzkzOSw3IEBACiAKIAlpZiAoaWJmdF9hZGRyKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImlCRlQgZGV0ZWN0ZWQgYXQgMHglbGx4LlxuIiwKLQkJICAgICAgICh1NjQpdmlydF90b19waHlzKCh2b2lkICopaWJmdF9hZGRyKSk7CisJCSAgICAgICAodTY0KWlzYV92aXJ0X3RvX2J1cyhpYmZ0X2FkZHIpKTsKIAogCQlyYyA9IGliZnRfY2hlY2tfZGV2aWNlKCk7CiAJCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCmluZGV4IGQ1M2ZiYmYuLmRmYjE1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwpAQCAtNjUsMTAgKzY1LDEwIEBACiAJCSAqIHNvIHNraXAgdGhhdCBhcmVhICovCiAJCWlmIChwb3MgPT0gVkdBX01FTSkKIAkJCXBvcyArPSBWR0FfU0laRTsKLQkJdmlydCA9IHBoeXNfdG9fdmlydChwb3MpOworCQl2aXJ0ID0gaXNhX2J1c190b192aXJ0KHBvcyk7CiAJCWlmIChtZW1jbXAodmlydCwgSUJGVF9TSUdOLCBJQkZUX1NJR05fTEVOKSA9PSAwKSB7CiAJCQl1bnNpZ25lZCBsb25nICphZGRyID0KLQkJCSAgICAodW5zaWduZWQgbG9uZyAqKXBoeXNfdG9fdmlydChwb3MgKyA0KTsKKwkJCSAgICAodW5zaWduZWQgbG9uZyAqKWlzYV9idXNfdG9fdmlydChwb3MgKyA0KTsKIAkJCWxlbiA9ICphZGRyOwogCQkJLyogaWYgdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUgZXh0ZW5kcyBwYXN0IDFNLAogCQkJICogdGhlIHRhYmxlIGNhbm5vdCBiZSB2YWxpZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IGJiMTFhNDIuLjUwZGUwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAKIAkJZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZ3Bpb19jbGFzcywgZGVzYy0+Y2hpcC0+ZGV2LCBNS0RFVigwLCAwKSwKIAkJCQlkZXNjLCBpb25hbWUgPyBpb25hbWUgOiAiZ3BpbyVkIiwgZ3Bpbyk7Ci0JCWlmIChkZXYpIHsKKwkJaWYgKCFJU19FUlIoZGV2KSkgewogCQkJaWYgKGRpcmVjdGlvbl9tYXlfY2hhbmdlKQogCQkJCXN0YXR1cyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAogCQkJCQkJJmdwaW9fYXR0cl9ncm91cCk7CkBAIC02NzksNyArNjc5LDcgQEAKIAkJCWlmIChzdGF0dXMgIT0gMCkKIAkJCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwogCQl9IGVsc2UKLQkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJCWlmIChzdGF0dXMgPT0gMCkKIAkJCXNldF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncyk7CiAJfQpAQCAtODAwLDExICs4MDAsMTEgQEAKIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKIAlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBjaGlwLT5kZXYsIE1LREVWKDAsIDApLCBjaGlwLAogCQkJCSJncGlvY2hpcCVkIiwgY2hpcC0+YmFzZSk7Ci0JaWYgKGRldikgeworCWlmICghSVNfRVJSKGRldikpIHsKIAkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkJJmdwaW9jaGlwX2F0dHJfZ3JvdXApOwogCX0gZWxzZQotCQlzdGF0dXMgPSAtRU5PREVWOworCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJY2hpcC0+ZXhwb3J0ZWQgPSAoc3RhdHVzID09IDApOwogCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CiAKQEAgLTE0ODcsNyArMTQ4Nyw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGdwaW9saWJfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9saWJfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9saWJfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBncGlvbGliX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKaW5kZXggYWZhZDE0Ny4uNDkzODRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwpAQCAtNDYwLDcgKzQ2MCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorLyogQ2Fubm90IHVzZSBfX2RldmV4aXQgYXMgZ3Bpb190d2w0MDMwX3Byb2JlKCkgY2FsbHMgdXMgKi8KK3N0YXRpYyBpbnQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgc3RhdHVzOwpAQCAtNDkzLDcgKzQ5NCw3IEBACiAJLmRyaXZlci5uYW1lCT0gInR3bDQwMzBfZ3BpbyIsCiAJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5wcm9iZQkJPSBncGlvX3R3bDQwMzBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChncGlvX3R3bDQwMzBfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IGdwaW9fdHdsNDAzMF9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBncGlvX3R3bDQwMzBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCBiYTcyOGFkLi41Y2FlMGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtNDgyLDYgKzQ4Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPnVzZXJfbW9kZXMsIGhlYWQpCiAJCWRybV9tb2RlX3JlbW92ZShjb25uZWN0b3IsIG1vZGUpOwogCisJa2ZyZWUoY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZSk7CiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJZHJtX21vZGVfb2JqZWN0X3B1dChkZXYsICZjb25uZWN0b3ItPmJhc2UpOwogCWxpc3RfZGVsKCZjb25uZWN0b3ItPmhlYWQpOwpAQCAtMTU1NSw4ICsxNTU2LDYgQEAKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IHJldCA9IDA7CiAKLQlEUk1fREVCVUdfS01TKCJcbiIpOwotCiAJaWYgKCFyZXEtPmZsYWdzKSB7CiAJCURSTV9FUlJPUigibm8gb3BlcmF0aW9uIHNldFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IGZlODY5NzQuLmJiZmQxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAKIHN0YXRpYyB2b2lkIGRybV9tb2RlX3ZhbGlkYXRlX2ZsYWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgICBpbnQgZmxhZ3MpCkBAIC05MCw3ICs5MSwxNSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKIAkJbW9kZS0+c3RhdHVzID0gTU9ERV9VTlZFUklGSUVEOwogCi0JY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoY29ubmVjdG9yKTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSkgeworCQlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT04pCisJCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQllbHNlCisJCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQlpZiAoY29ubmVjdG9yLT5mdW5jcy0+Zm9yY2UpCisJCQljb25uZWN0b3ItPmZ1bmNzLT5mb3JjZShjb25uZWN0b3IpOworCX0gZWxzZQorCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IpOwogCiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7CiAJCURSTV9ERUJVR19LTVMoIiVzIGlzIGRpc2Nvbm5lY3RlZFxuIiwKQEAgLTI2Nyw2ICsyNzYsNjYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGJvb2wgZHJtX2hhc19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBfY29ubiA9IGNvbm5lY3Rvci0+ZmJfaGVscGVyX3ByaXZhdGU7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlICpjbWRsaW5lX21vZGU7CisKKwlpZiAoIWZiX2hlbHBfY29ubikKKwkJcmV0dXJuIGZhbHNlOworCisJY21kbGluZV9tb2RlID0gJmZiX2hlbHBfY29ubi0+Y21kbGluZV9tb2RlOworCXJldHVybiBjbWRsaW5lX21vZGUtPnNwZWNpZmllZDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fcGlja19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7CisKKwlpZiAoIWZiX2hlbHBfY29ubikKKwkJcmV0dXJuIG1vZGU7CisKKwljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisJaWYgKGNtZGxpbmVfbW9kZS0+c3BlY2lmaWVkID09IGZhbHNlKQorCQlyZXR1cm4gbW9kZTsKKworCS8qIGF0dGVtcHQgdG8gZmluZCBhIG1hdGNoaW5nIG1vZGUgaW4gdGhlIGxpc3Qgb2YgbW9kZXMKKwkgKiAgd2UgaGF2ZSBnb3R0ZW4gc28gZmFyLCBpZiBub3QgYWRkIGEgQ1ZUIG1vZGUgdGhhdCBjb25mb3JtcworCSAqLworCWlmIChjbWRsaW5lX21vZGUtPnJiIHx8IGNtZGxpbmVfbW9kZS0+bWFyZ2lucykKKwkJZ290byBjcmVhdGVfbW9kZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwkJLyogY2hlY2sgd2lkdGgvaGVpZ2h0ICovCisJCWlmIChtb2RlLT5oZGlzcGxheSAhPSBjbWRsaW5lX21vZGUtPnhyZXMgfHwKKwkJICAgIG1vZGUtPnZkaXNwbGF5ICE9IGNtZGxpbmVfbW9kZS0+eXJlcykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWRsaW5lX21vZGUtPnJlZnJlc2hfc3BlY2lmaWVkKSB7CisJCQlpZiAobW9kZS0+dnJlZnJlc2ggIT0gY21kbGluZV9tb2RlLT5yZWZyZXNoKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlKSB7CisJCQlpZiAoIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gbW9kZTsKKwl9CisKK2NyZWF0ZV9tb2RlOgorCW1vZGUgPSBkcm1fY3Z0X21vZGUoY29ubmVjdG9yLT5kZXYsIGNtZGxpbmVfbW9kZS0+eHJlcywKKwkJCSAgICBjbWRsaW5lX21vZGUtPnlyZXMsCisJCQkgICAgY21kbGluZV9tb2RlLT5yZWZyZXNoX3NwZWNpZmllZCA/IGNtZGxpbmVfbW9kZS0+cmVmcmVzaCA6IDYwLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+cmIsIGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+bWFyZ2lucyk7CisJZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCWxpc3RfYWRkKCZtb2RlLT5oZWFkLCAmY29ubmVjdG9yLT5tb2Rlcyk7CisJcmV0dXJuIG1vZGU7Cit9CisKIHN0YXRpYyBib29sIGRybV9jb25uZWN0b3JfZW5hYmxlZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIHN0cmljdCkKIHsKIAlib29sIGVuYWJsZTsKQEAgLTMxNywxMCArMzg2LDE2IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCURSTV9ERUJVR19LTVMoImxvb2tpbmcgZm9yIHByZWZlcnJlZCBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKLQkJCSAgY29ubmVjdG9yLT5iYXNlLmlkKTsKKwkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgY21kbGluZSBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKKwkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CiAKLQkJbW9kZXNbaV0gPSBkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCk7CisJCS8qIGdvdCBmb3IgY29tbWFuZCBsaW5lIG1vZGUgZmlyc3QgKi8KKwkJbW9kZXNbaV0gPSBkcm1fcGlja19jbWRsaW5lX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKKwkJaWYgKCFtb2Rlc1tpXSkgeworCQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAorCQkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CisJCQltb2Rlc1tpXSA9IGRybV9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKKwkJfQogCQkvKiBObyBwcmVmZXJyZWQgbW9kZXMsIHBpY2sgb25lIG9mZiB0aGUgbGlzdCAqLwogCQlpZiAoIW1vZGVzW2ldICYmICFsaXN0X2VtcHR5KCZjb25uZWN0b3ItPm1vZGVzKSkgewogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2Rlc1tpXSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpCkBAIC0zNjksNiArNDQ0LDggQEAKIAlteV9zY29yZSA9IDE7CiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQogCQlteV9zY29yZSsrOworCWlmIChkcm1faGFzX2NtZGxpbmVfbW9kZShjb25uZWN0b3IpKQorCQlteV9zY29yZSsrOwogCWlmIChkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCkpCiAJCW15X3Njb3JlKys7CiAKQEAgLTk0Myw2ICsxMDIwLDggQEAKIHsKIAlpbnQgY291bnQgPSAwOwogCisJZHJtX2ZiX2hlbHBlcl9wYXJzZV9jb21tYW5kX2xpbmUoZGV2KTsKKwogCWNvdW50ID0gZHJtX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZGV2LAogCQkJCQkJIGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoLAogCQkJCQkJIGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCk7CkBAIC05NTAsNyArMTAyOSw3IEBACiAJLyoKIAkgKiB3ZSBzaG91bGRuJ3QgZW5kIHVwIHdpdGggbm8gbW9kZXMgaGVyZS4KIAkgKi8KLQlXQVJOKCFjb3VudCwgIkNvbm5lY3RlZCBjb25uZWN0b3Igd2l0aCAwIG1vZGVzXG4iKTsKKwlXQVJOKCFjb3VudCwgIk5vIGNvbm5lY3RvcnMgcmVwb3J0ZWQgY29ubmVjdGVkIHdpdGggbW9kZXNcbiIpOwogCiAJZHJtX3NldHVwX2NydGNzKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggOTBkNzZiYS4uY2VhNjY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTEwOSw3ICsxMDksOSBAQAogCiAKIC8qIFZhbGlkIEVESUQgaGVhZGVyIGhhcyB0aGVzZSBieXRlcyAqLwotc3RhdGljIHU4IGVkaWRfaGVhZGVyW10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAgfTsKK3N0YXRpYyBjb25zdCB1OCBlZGlkX2hlYWRlcltdID0geworCTB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAKK307CiAKIC8qKgogICogZWRpZF9pc192YWxpZCAtIHNhbml0eSBjaGVjayBFRElEIGRhdGEKQEAgLTUwMCw2ICs1MDIsMTkgQEAKIAl9CiAJcmV0dXJuIG1vZGU7CiB9CisKKy8qCisgKiAwIGlzIHJlc2VydmVkLiAgVGhlIHNwZWMgc2F5cyAweDAxIGZpbGwgZm9yIHVudXNlZCB0aW1pbmdzLiAgU29tZSBvbGQKKyAqIG1vbml0b3JzIGZpbGwgd2l0aCBhc2NpaSBzcGFjZSAoMHgyMCkgaW5zdGVhZC4KKyAqLworc3RhdGljIGludAorYmFkX3N0ZF90aW1pbmcodTggYSwgdTggYikKK3sKKwlyZXR1cm4gKGEgPT0gMHgwMCAmJiBiID09IDB4MDApIHx8CisJICAgICAgIChhID09IDB4MDEgJiYgYiA9PSAweDAxKSB8fAorCSAgICAgICAoYSA9PSAweDIwICYmIGIgPT0gMHgyMCk7Cit9CisKIC8qKgogICogZHJtX21vZGVfc3RkIC0gY29udmVydCBzdGFuZGFyZCBtb2RlIGluZm8gKHdpZHRoLCBoZWlnaHQsIHJlZnJlc2gpIGludG8gbW9kZQogICogQHQ6IHN0YW5kYXJkIHRpbWluZyBwYXJhbXMKQEAgLTUxMyw2ICs1MjgsNyBAQAogICovCiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGVfc3RkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICAgc3RydWN0IHN0ZF90aW1pbmcgKnQsCisJCQkJICAgICAgaW50IHJldmlzaW9uLAogCQkJCSAgICAgIGludCB0aW1pbmdfbGV2ZWwpCiB7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CkBAIC01MjMsMTQgKzUzOSwyMCBAQAogCXVuc2lnbmVkIHZmcmVxID0gKHQtPnZmcmVxX2FzcGVjdCAmIEVESURfVElNSU5HX1ZGUkVRX01BU0spCiAJCT4+IEVESURfVElNSU5HX1ZGUkVRX1NISUZUOwogCisJaWYgKGJhZF9zdGRfdGltaW5nKHQtPmhzaXplLCB0LT52ZnJlcV9hc3BlY3QpKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIEFjY29yZGluZyB0byB0aGUgRURJRCBzcGVjLCB0aGUgaGRpc3BsYXkgPSBoc2l6ZSAqIDggKyAyNDggKi8KIAloc2l6ZSA9IHQtPmhzaXplICogOCArIDI0ODsKIAkvKiB2cmVmcmVzaF9yYXRlID0gdmZyZXEgKyA2MCAqLwogCXZyZWZyZXNoX3JhdGUgPSB2ZnJlcSArIDYwOwogCS8qIHRoZSB2ZGlzcGxheSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBhc3BlY3QgcmF0aW8gKi8KLQlpZiAoYXNwZWN0X3JhdGlvID09IDApCi0JCXZzaXplID0gKGhzaXplICogMTApIC8gMTY7Ci0JZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDEpCisJaWYgKGFzcGVjdF9yYXRpbyA9PSAwKSB7CisJCWlmIChyZXZpc2lvbiA8IDMpCisJCQl2c2l6ZSA9IGhzaXplOworCQllbHNlCisJCQl2c2l6ZSA9IChoc2l6ZSAqIDEwKSAvIDE2OworCX0gZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDEpCiAJCXZzaXplID0gKGhzaXplICogMykgLyA0OwogCWVsc2UgaWYgKGFzcGVjdF9yYXRpbyA9PSAyKQogCQl2c2l6ZSA9IChoc2l6ZSAqIDQpIC8gNTsKQEAgLTUzOCw3ICs1NjAsOCBAQAogCQl2c2l6ZSA9IChoc2l6ZSAqIDkpIC8gMTY7CiAJLyogSERUViBoYWNrICovCiAJaWYgKGhzaXplID09IDEzNjAgJiYgdnNpemUgPT0gNzY1ICYmIHZyZWZyZXNoX3JhdGUgPT0gNjApIHsKLQkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCk7CisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDAsCisJCQkJICAgIGZhbHNlKTsKIAkJbW9kZS0+aGRpc3BsYXkgPSAxMzY2OwogCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gMTsKIAkJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfZW5kIC0gMTsKQEAgLTU1Nyw3ICs1ODAsOCBAQAogCQltb2RlID0gZHJtX2d0Zl9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBMRVZFTF9DVlQ6Ci0JCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDApOworCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwLAorCQkJCSAgICBmYWxzZSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gbW9kZTsKQEAgLTYwMiw2ICs2MjYsMTIgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJLyogaXQgaXMgaW5jb3JyZWN0IGlmIGhzeW5jL3ZzeW5jIHdpZHRoIGlzIHplcm8gKi8KKwlpZiAoIWhzeW5jX3B1bHNlX3dpZHRoIHx8ICF2c3luY19wdWxzZV93aWR0aCkgeworCQlEUk1fREVCVUdfS01TKCJJbmNvcnJlY3QgRGV0YWlsZWQgdGltaW5nLiAiCisJCQkJIldyb25nIEhzeW5jL1ZzeW5jIHB1bHNlIHdpZHRoXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZGV2KTsKIAlpZiAoIW1vZGUpCiAJCXJldHVybiBOVUxMOwpAQCAtNjIzLDYgKzY1MywxNSBAQAogCW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX3N0YXJ0ICsgdnN5bmNfcHVsc2Vfd2lkdGg7CiAJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyB2Ymxhbms7CiAKKwkvKiBwZXJmb3JtIHRoZSBiYXNpYyBjaGVjayBmb3IgdGhlIGRldGFpbGVkIHRpbWluZyAqLworCWlmIChtb2RlLT5oc3luY19lbmQgPiBtb2RlLT5odG90YWwgfHwKKwkJbW9kZS0+dnN5bmNfZW5kID4gbW9kZS0+dnRvdGFsKSB7CisJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBtb2RlKTsKKwkJRFJNX0RFQlVHX0tNUygiSW5jb3JyZWN0IGRldGFpbGVkIHRpbWluZy4gIgorCQkJCSJTeW5jIGlzIGJleW9uZCB0aGUgYmxhbmsuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CiAKIAlpZiAocHQtPm1pc2MgJiBEUk1fRURJRF9QVF9JTlRFUkxBQ0VEKQpAQCAtNzc5LDcgKzgxOCw3IEBACiAJCQljb250aW51ZTsKIAogCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgJmVkaWQtPnN0YW5kYXJkX3RpbWluZ3NbaV0sCi0JCQkJCXRpbWluZ19sZXZlbCk7CisJCQkJICAgICAgIGVkaWQtPnJldmlzaW9uLCB0aW1pbmdfbGV2ZWwpOwogCQlpZiAobmV3bW9kZSkgewogCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOwogCQkJbW9kZXMrKzsKQEAgLTgyOSwxMyArODY4LDEzIEBACiAJCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfQ1BEQVRBOgogCQkJCWJyZWFrOwogCQkJY2FzZSBFRElEX0RFVEFJTF9TVERfTU9ERVM6Ci0JCQkJLyogRml2ZSBtb2RlcyBwZXIgZGV0YWlsZWQgc2VjdGlvbiAqLwotCQkJCWZvciAoaiA9IDA7IGogPCA1OyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgNjsgaSsrKSB7CiAJCQkJCXN0cnVjdCBzdGRfdGltaW5nICpzdGQ7CiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOwogCiAJCQkJCXN0ZCA9ICZkYXRhLT5kYXRhLnRpbWluZ3Nbal07CiAJCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsCisJCQkJCQkJICAgICAgIGVkaWQtPnJldmlzaW9uLAogCQkJCQkJCSAgICAgICB0aW1pbmdfbGV2ZWwpOwogCQkJCQlpZiAobmV3bW9kZSkgewogCQkJCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOwpAQCAtOTY0LDcgKzEwMDMsOSBAQAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOwogCiAJCQkJc3RkID0gJmRhdGEtPmRhdGEudGltaW5nc1tqXTsKLQkJCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgc3RkLCB0aW1pbmdfbGV2ZWwpOworCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsCisJCQkJCQkgICAgICAgZWRpZC0+cmV2aXNpb24sCisJCQkJCQkgICAgICAgdGltaW5nX2xldmVsKTsKIAkJCQlpZiAobmV3bW9kZSkgewogCQkJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CiAJCQkJCW1vZGVzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCAyYzQ2NzEzLi5kYzhlMzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTQwLDYgKzQwLDE5OSBAQAogCiBzdGF0aWMgTElTVF9IRUFEKGtlcm5lbF9mYl9oZWxwZXJfbGlzdCk7CiAKK2ludCBkcm1fZmJfaGVscGVyX2FkZF9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwljb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2FkZF9jb25uZWN0b3IpOworCitzdGF0aWMgaW50IG15X2F0b2koY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgdmFsID0gMDsKKworCWZvciAoOzsgbmFtZSsrKSB7CisJCXN3aXRjaCAoKm5hbWUpIHsKKwkJY2FzZSAnMCcgLi4uICc5JzoKKwkJCXZhbCA9IDEwKnZhbCsoKm5hbWUtJzAnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIHZhbDsKKwkJfQorCX0KK30KKworLyoqCisgKiBkcm1fZmJfaGVscGVyX2Nvbm5lY3Rvcl9wYXJzZV9jb21tYW5kX2xpbmUgLSBwYXJzZSBjb21tYW5kIGxpbmUgZm9yIGNvbm5lY3RvcgorICogQGNvbm5lY3RvciAtIGNvbm5lY3RvciB0byBwYXJzZSBsaW5lIGZvcgorICogQG1vZGVfb3B0aW9uIC0gcGVyIGNvbm5lY3RvciBtb2RlIG9wdGlvbgorICoKKyAqIFRoaXMgcGFyc2VzIHRoZSBjb25uZWN0b3Igc3BlY2lmaWMgdGhlbiBnZW5lcmljIGNvbW1hbmQgbGluZXMgZm9yCisgKiBtb2RlcyBhbmQgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGNvbm5lY3Rvci4KKyAqCisgKiBUaGlzIHVzZXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZmIgbW9kZWRiLmMsIGV4Y2VwdCBmb3IgZXh0cmEKKyAqCTx4cmVzPng8eXJlcz5bTV1bUl1bLTxicHA+XVtAPHJlZnJlc2g+XVtpXVttXVtlRGRdCisgKgorICogZW5hYmxlL2VuYWJsZSBEaWdpdGFsL2Rpc2FibGUgYml0IGF0IHRoZSBlbmQKKyAqLworc3RhdGljIGJvb2wgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3JfcGFyc2VfY29tbWFuZF9saW5lKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCQkgICAgICAgY29uc3QgY2hhciAqbW9kZV9vcHRpb24pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgbmFtZWxlbjsKKwlpbnQgcmVzX3NwZWNpZmllZCA9IDAsIGJwcF9zcGVjaWZpZWQgPSAwLCByZWZyZXNoX3NwZWNpZmllZCA9IDA7CisJdW5zaWduZWQgaW50IHhyZXMgPSAwLCB5cmVzID0gMCwgYnBwID0gMzIsIHJlZnJlc2ggPSAwOworCWludCB5cmVzX3NwZWNpZmllZCA9IDAsIGN2dCA9IDAsIHJiID0gMCwgaW50ZXJsYWNlID0gMCwgbWFyZ2lucyA9IDA7CisJaW50IGk7CisJZW51bSBkcm1fY29ubmVjdG9yX2ZvcmNlIGZvcmNlID0gRFJNX0ZPUkNFX1VOU1BFQ0lGSUVEOworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKworCWlmICghZmJfaGVscF9jb25uKQorCQlyZXR1cm4gZmFsc2U7CisKKwljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisJaWYgKCFtb2RlX29wdGlvbikKKwkJbW9kZV9vcHRpb24gPSBmYl9tb2RlX29wdGlvbjsKKworCWlmICghbW9kZV9vcHRpb24pIHsKKwkJY21kbGluZV9tb2RlLT5zcGVjaWZpZWQgPSBmYWxzZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5hbWUgPSBtb2RlX29wdGlvbjsKKwluYW1lbGVuID0gc3RybGVuKG5hbWUpOworCWZvciAoaSA9IG5hbWVsZW4tMTsgaSA+PSAwOyBpLS0pIHsKKwkJc3dpdGNoIChuYW1lW2ldKSB7CisJCWNhc2UgJ0AnOgorCQkJbmFtZWxlbiA9IGk7CisJCQlpZiAoIXJlZnJlc2hfc3BlY2lmaWVkICYmICFicHBfc3BlY2lmaWVkICYmCisJCQkgICAgIXlyZXNfc3BlY2lmaWVkKSB7CisJCQkJcmVmcmVzaCA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJcmVmcmVzaF9zcGVjaWZpZWQgPSAxOworCQkJCWlmIChjdnQgfHwgcmIpCisJCQkJCWN2dCA9IDA7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJY2FzZSAnLSc6CisJCQluYW1lbGVuID0gaTsKKwkJCWlmICghYnBwX3NwZWNpZmllZCAmJiAheXJlc19zcGVjaWZpZWQpIHsKKwkJCQlicHAgPSBteV9hdG9pKCZuYW1lW2krMV0pOworCQkJCWJwcF9zcGVjaWZpZWQgPSAxOworCQkJCWlmIChjdnQgfHwgcmIpCisJCQkJCWN2dCA9IDA7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlpZiAoIXlyZXNfc3BlY2lmaWVkKSB7CisJCQkJeXJlcyA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJeXJlc19zcGVjaWZpZWQgPSAxOworCQkJfSBlbHNlCisJCQkJZ290byBkb25lOworCQljYXNlICcwJyAuLi4gJzknOgorCQkJYnJlYWs7CisJCWNhc2UgJ00nOgorCQkJaWYgKCF5cmVzX3NwZWNpZmllZCkKKwkJCQljdnQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ1InOgorCQkJaWYgKCFjdnQpCisJCQkJcmIgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKCFjdnQpCisJCQkJbWFyZ2lucyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlpZiAoIWN2dCkKKwkJCQlpbnRlcmxhY2UgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT047CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHx8CisJCQkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSkKKwkJCQlmb3JjZSA9IERSTV9GT1JDRV9PTjsKKwkJCWVsc2UKKwkJCQlmb3JjZSA9IERSTV9GT1JDRV9PTl9ESUdJVEFMOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT0ZGOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisJaWYgKGkgPCAwICYmIHlyZXNfc3BlY2lmaWVkKSB7CisJCXhyZXMgPSBteV9hdG9pKG5hbWUpOworCQlyZXNfc3BlY2lmaWVkID0gMTsKKwl9Citkb25lOgorCisJRFJNX0RFQlVHX0tNUygiY21kbGluZSBtb2RlIGZvciBjb25uZWN0b3IgJXMgJWR4JWRAJWRIeiVzJXMlc1xuIiwKKwkJZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpLCB4cmVzLCB5cmVzLAorCQkocmVmcmVzaCkgPyByZWZyZXNoIDogNjAsIChyYikgPyAiIHJlZHVjZWQgYmxhbmtpbmciIDoKKwkJIiIsIChtYXJnaW5zKSA/ICIgd2l0aCBtYXJnaW5zIiA6ICIiLCAoaW50ZXJsYWNlKSA/CisJCSIgaW50ZXJsYWNlZCIgOiAiIik7CisKKwlpZiAoZm9yY2UpIHsKKwkJY29uc3QgY2hhciAqczsKKwkJc3dpdGNoIChmb3JjZSkgeworCQljYXNlIERSTV9GT1JDRV9PRkY6IHMgPSAiT0ZGIjsgYnJlYWs7CisJCWNhc2UgRFJNX0ZPUkNFX09OX0RJR0lUQUw6IHMgPSAiT04gLSBkaWciOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBEUk1fRk9SQ0VfT046IHMgPSAiT04iOyBicmVhazsKKwkJfQorCisJCURSTV9JTkZPKCJmb3JjaW5nICVzIGNvbm5lY3RvciAlc1xuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvciksIHMpOworCQljb25uZWN0b3ItPmZvcmNlID0gZm9yY2U7CisJfQorCisJaWYgKHJlc19zcGVjaWZpZWQpIHsKKwkJY21kbGluZV9tb2RlLT5zcGVjaWZpZWQgPSB0cnVlOworCQljbWRsaW5lX21vZGUtPnhyZXMgPSB4cmVzOworCQljbWRsaW5lX21vZGUtPnlyZXMgPSB5cmVzOworCX0KKworCWlmIChyZWZyZXNoX3NwZWNpZmllZCkgeworCQljbWRsaW5lX21vZGUtPnJlZnJlc2hfc3BlY2lmaWVkID0gdHJ1ZTsKKwkJY21kbGluZV9tb2RlLT5yZWZyZXNoID0gcmVmcmVzaDsKKwl9CisKKwlpZiAoYnBwX3NwZWNpZmllZCkgeworCQljbWRsaW5lX21vZGUtPmJwcF9zcGVjaWZpZWQgPSB0cnVlOworCQljbWRsaW5lX21vZGUtPmJwcCA9IGJwcDsKKwl9CisJY21kbGluZV9tb2RlLT5yYiA9IHJiID8gdHJ1ZSA6IGZhbHNlOworCWNtZGxpbmVfbW9kZS0+Y3Z0ID0gY3Z0ICA/IHRydWUgOiBmYWxzZTsKKwljbWRsaW5lX21vZGUtPmludGVybGFjZSA9IGludGVybGFjZSA/IHRydWUgOiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9wYXJzZV9jb21tYW5kX2xpbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWNoYXIgKm9wdGlvbiA9IE5VTEw7CisKKwkJLyogZG8gc29tZXRoaW5nIG9uIHJldHVybiAtIHR1cm4gb2ZmIGNvbm5lY3RvciBtYXliZSAqLworCQlpZiAoZmJfZ2V0X29wdGlvbnMoZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpLCAmb3B0aW9uKSkKKwkJCWNvbnRpbnVlOworCisJCWRybV9mYl9oZWxwZXJfY29ubmVjdG9yX3BhcnNlX2NvbW1hbmRfbGluZShjb25uZWN0b3IsIG9wdGlvbik7CisJfQorCXJldHVybiAwOworfQorCiBib29sIGRybV9mYl9oZWxwZXJfZm9yY2Vfa2VybmVsX21vZGUodm9pZCkKIHsKIAlpbnQgaSA9IDA7CkBAIC04Nyw2ICsyODAsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3Jlc3RvcmUpOwogCisjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCiBzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7CiAJZHJtX2ZiX2hlbHBlcl9yZXN0b3JlKCk7CkBAIC0xMDMsNiArMjk3LDcgQEAKIAkuaGVscF9tc2cgPSAiZm9yY2UtZmIoVikiLAogCS5hY3Rpb25fbXNnID0gIlJlc3RvcmUgZnJhbWVidWZmZXIgY29uc29sZSIsCiB9OworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfb24oc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CkBAIC0yNTksNiArNDU0LDEwOSBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCk7CiAKK3N0YXRpYyBpbnQgc2V0Y29scmVnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAorCQkgICAgIHUxNiBibHVlLCB1MTYgcmVnbm8sIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBmYl9oZWxwZXItPmZiOworCWludCBwaW5kZXg7CisKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SKSB7CisJCXUzMiAqcGFsZXR0ZTsKKwkJdTMyIHZhbHVlOworCQkvKiBwbGFjZSBjb2xvciBpbiBwc3VlZG9wYWxldHRlICovCisJCWlmIChyZWdubyA+IDE2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXBhbGV0dGUgPSAodTMyICopaW5mby0+cHNldWRvX3BhbGV0dGU7CisJCXJlZCA+Pj0gKDE2IC0gaW5mby0+dmFyLnJlZC5sZW5ndGgpOworCQlncmVlbiA+Pj0gKDE2IC0gaW5mby0+dmFyLmdyZWVuLmxlbmd0aCk7CisJCWJsdWUgPj49ICgxNiAtIGluZm8tPnZhci5ibHVlLmxlbmd0aCk7CisJCXZhbHVlID0gKHJlZCA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgfAorCQkJKGdyZWVuIDw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKKwkJCShibHVlIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7CisJCXBhbGV0dGVbcmVnbm9dID0gdmFsdWU7CisJCXJldHVybiAwOworCX0KKworCXBpbmRleCA9IHJlZ25vOworCisJaWYgKGZiLT5iaXRzX3Blcl9waXhlbCA9PSAxNikgeworCQlwaW5kZXggPSByZWdubyA8PCAzOworCisJCWlmIChmYi0+ZGVwdGggPT0gMTYgJiYgcmVnbm8gPiA2MykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmItPmRlcHRoID09IDE1ICYmIHJlZ25vID4gMzEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZmItPmRlcHRoID09IDE2KSB7CisJCQl1MTYgciwgZywgYjsKKwkJCWludCBpOworCQkJaWYgKHJlZ25vIDwgMzIpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgcmVkLAorCQkJCQkJZ3JlZW4sIGJsdWUsIHBpbmRleCArIGkpOworCQkJfQorCisJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9nZXQoY3J0YywgJnIsCisJCQkJCQkgICAgJmcsICZiLAorCQkJCQkJICAgIHBpbmRleCA+PiAxKTsKKworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgciwKKwkJCQkJCQkgICAgZ3JlZW4sIGIsCisJCQkJCQkJICAgIChwaW5kZXggPj4gMSkgKyBpKTsKKwkJfQorCX0KKworCWlmIChmYi0+ZGVwdGggIT0gMTYpCisJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX3NldChjcnRjLCByZWQsIGdyZWVuLCBibHVlLCBwaW5kZXgpOworCXJldHVybiAwOworfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9zZXRjbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKKwl1MTYgKnJlZCwgKmdyZWVuLCAqYmx1ZSwgKnRyYW5zcDsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IGksIHJjID0gMDsKKwlpbnQgc3RhcnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0uY3J0Y19pZCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBmYl9oZWxwZXItPmNydGNfY291bnQpCisJCQljb250aW51ZTsKKworCQlyZWQgPSBjbWFwLT5yZWQ7CisJCWdyZWVuID0gY21hcC0+Z3JlZW47CisJCWJsdWUgPSBjbWFwLT5ibHVlOworCQl0cmFuc3AgPSBjbWFwLT50cmFuc3A7CisJCXN0YXJ0ID0gY21hcC0+c3RhcnQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGNtYXAtPmxlbjsgaSsrKSB7CisJCQl1MTYgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgaHRyYW5zcCA9IDB4ZmZmZjsKKworCQkJaHJlZCA9ICpyZWQrKzsKKwkJCWhncmVlbiA9ICpncmVlbisrOworCQkJaGJsdWUgPSAqYmx1ZSsrOworCisJCQlpZiAodHJhbnNwKQorCQkJCWh0cmFuc3AgPSAqdHJhbnNwKys7CisKKwkJCXJjID0gc2V0Y29scmVnKGNydGMsIGhyZWQsIGhncmVlbiwgaGJsdWUsIHN0YXJ0KyssIGluZm8pOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKKwkJfQorCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKKwl9CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3NldGNtYXApOworCiBpbnQgZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sCiAJCQkgICAgdW5zaWduZWQgcmVkLAogCQkJICAgIHVuc2lnbmVkIGdyZWVuLApAQCAtMjcwLDEwICs1NjgsMTMgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCWludCBpOworCWludCByZXQ7CisKKwlpZiAocmVnbm8gPiAyNTUpCisJCXJldHVybiAxOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBmYl9oZWxwZXItPmZiOwotCisJCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKIAkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CiAJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5jcnRjX2lkKQogCQkJCWJyZWFrOwpAQCAtMjgxLDM1ICs1ODIsMTEgQEAKIAkJaWYgKGkgPT0gZmJfaGVscGVyLT5jcnRjX2NvdW50KQogCQkJY29udGludWU7CiAKLQkJaWYgKHJlZ25vID4gMjU1KQotCQkJcmV0dXJuIDE7CisJCXJldCA9IHNldGNvbHJlZyhjcnRjLCByZWQsIGdyZWVuLCBibHVlLCByZWdubywgaW5mbyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JCWlmIChmYi0+ZGVwdGggPT0gOCkgewotCQkJZmJfaGVscGVyLT5mdW5jcy0+Z2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlZ25vKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKHJlZ25vIDwgMTYpIHsKLQkJCXN3aXRjaCAoZmItPmRlcHRoKSB7Ci0JCQljYXNlIDE1OgotCQkJCWZiLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAoKHJlZCAmIDB4ZjgwMCkgPj4gMSkgfAotCQkJCQkoKGdyZWVuICYgMHhmODAwKSA+PiAgNikgfAotCQkJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMTY6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IChyZWQgJiAweGY4MDApIHwKLQkJCQkJKChncmVlbiAmIDB4ZmMwMCkgPj4gIDUpIHwKLQkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyNDoKLQkJCWNhc2UgMzI6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9Ci0JCQkJCSgoKHJlZCA+PiA4KSAmIDB4ZmYpIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8Ci0JCQkJCSgoKGdyZWVuID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAotCQkJCQkoKChibHVlID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQorCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00MzAsNyArNzA3LDcgQEAKIAogCQlpZiAoY3J0Yy0+ZmIgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuZmIpIHsKIAkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcoJmZiX2hlbHBlci0+Y3J0Y19pbmZvLT5tb2RlX3NldCk7CisJCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTQ3OSwxMSArNzU2LDE0IEBACiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXkpOwogCiBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCBwcmVmZXJyZWRfYnBwLAogCQkJCSAgaW50ICgqZmJfY3JlYXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICAgdWludDMyX3QgZmJfd2lkdGgsCiAJCQkJCQkgICB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9oZWlnaHQsCisJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9icHAsCiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcHRyKSkKIHsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CkBAIC00OTcsOCArNzc3LDQ4IEBACiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9IE5VTEw7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcjsKKwl1aW50MzJfdCBzdXJmYWNlX2RlcHRoID0gMjQsIHN1cmZhY2VfYnBwID0gMzI7CiAKKwkvKiBpZiBkcml2ZXIgcGlja3MgOCBvciAxNiBieSBkZWZhdWx0IHVzZSB0aGF0CisJICAgZm9yIGJvdGggZGVwdGgvYnBwICovCisJaWYgKHByZWZlcnJlZF9icHAgIT0gc3VyZmFjZV9icHApIHsKKwkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gcHJlZmVycmVkX2JwcDsKKwl9CiAJLyogZmlyc3QgdXAgZ2V0IGEgY291bnQgb2YgY3J0Y3Mgbm93IGluIHVzZSBhbmQgbmV3IG1pbi9tYXhlcyB3aWR0aC9oZWlnaHRzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKworCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKworCQlpZiAoIWZiX2hlbHBfY29ubikKKwkJCWNvbnRpbnVlOworCQkKKwkJY21kbGluZV9tb2RlID0gJmZiX2hlbHBfY29ubi0+Y21kbGluZV9tb2RlOworCisJCWlmIChjbWRsaW5lX21vZGUtPmJwcF9zcGVjaWZpZWQpIHsKKwkJCXN3aXRjaCAoY21kbGluZV9tb2RlLT5icHApIHsKKwkJCWNhc2UgODoKKwkJCQlzdXJmYWNlX2RlcHRoID0gc3VyZmFjZV9icHAgPSA4OworCQkJCWJyZWFrOworCQkJY2FzZSAxNToKKwkJCQlzdXJmYWNlX2RlcHRoID0gMTU7CisJCQkJc3VyZmFjZV9icHAgPSAxNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTY6CisJCQkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gMTY7CisJCQkJYnJlYWs7CisJCQljYXNlIDI0OgorCQkJCXN1cmZhY2VfZGVwdGggPSBzdXJmYWNlX2JwcCA9IDI0OworCQkJCWJyZWFrOworCQkJY2FzZSAzMjoKKwkJCQlzdXJmYWNlX2RlcHRoID0gMjQ7CisJCQkJc3VyZmFjZV9icHAgPSAzMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0YykpIHsKIAkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUpIHsKQEAgLTUyNyw3ICs4NDcsOCBAQAogCS8qIGRvIHdlIGhhdmUgYW4gZmIgYWxyZWFkeT8gKi8KIAlpZiAobGlzdF9lbXB0eSgmZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCkpIHsKIAkJcmV0ID0gKCpmYl9jcmVhdGUpKGRldiwgZmJfd2lkdGgsIGZiX2hlaWdodCwgc3VyZmFjZV93aWR0aCwKLQkJCQkgICBzdXJmYWNlX2hlaWdodCwgJmZiKTsKKwkJCQkgICBzdXJmYWNlX2hlaWdodCwgc3VyZmFjZV9kZXB0aCwgc3VyZmFjZV9icHAsCisJCQkJICAgJmZiKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQluZXdfZmIgPSAxOwpAQCAtNjE4LDEwICs5MzksMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9mcmVlKTsKIAotdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCkKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdWludDMyX3QgcGl0Y2gsCisJCQkgICAgdWludDMyX3QgZGVwdGgpCiB7CiAJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJaW5mby0+Zml4LnZpc3VhbCA9IGRlcHRoID09IDggPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOgorCQlGQl9WSVNVQUxfVFJVRUNPTE9SOwogCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CiAJaW5mby0+Zml4LnhwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KIAlpbmZvLT5maXgueXBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCmluZGV4IDQ5NDA0Y2UuLjUxZjY3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgSFZfRkFDVE9SCQkJMTAwMAogc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jdnRfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaGRpc3BsYXksCiAJCQkJICAgICAgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCi0JCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQpCisJCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQsIGJvb2wgbWFyZ2lucykKIHsKIAkvKiAxKSB0b3AvYm90dG9tIG1hcmdpbiBzaXplICglIG9mIGhlaWdodCkgLSBkZWZhdWx0OiAxLjgsICovCiAjZGVmaW5lCUNWVF9NQVJHSU5fUEVSQ0VOVEFHRQkJMTgKQEAgLTEwMSw3ICsxMDEsNiBAQAogCS8qIFBpeGVsIENsb2NrIHN0ZXAgKGtIeikgKi8KICNkZWZpbmUgQ1ZUX0NMT0NLX1NURVAJCQkyNTAKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGU7Ci0JYm9vbCBtYXJnaW5zID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IHZmaWVsZHJhdGUsIGhwZXJpb2Q7CiAJaW50IGhkaXNwbGF5X3JuZCwgaG1hcmdpbiwgdmRpc3BsYXlfcm5kLCB2bWFyZ2luLCB2c3luYzsKIAlpbnQgaW50ZXJsYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCmluZGV4IDdlMWZiZTUuLjRhYzkwMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKQEAgLTM2OSwyOCArMzY5LDI4IEBACiB9CiAKIC8qKiBBR1AgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKIH07CiAKIC8qKiBTaGFyZWQgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2htX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX3NobV9vcHMgPSB7CiAJLmZhdWx0ID0gZHJtX3ZtX3NobV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9zaG1fY2xvc2UsCiB9OwogCiAvKiogRE1BIHZpcnR1YWwgbWVtb3J5IG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX2RtYV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9kbWFfb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9kbWFfZmF1bHQsCiAJLm9wZW4gPSBkcm1fdm1fb3BlbiwKIAkuY2xvc2UgPSBkcm1fdm1fY2xvc2UsCiB9OwogCiAvKiogU2NhdHRlci1nYXRoZXIgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2dfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2dfb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9zZ19mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDQ1ZDUwN2UuLmU1YjEzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMTIyNyw4ICsxMjI3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBUcnkgdG8gc2V0IHVwIEZCQyB3aXRoIGEgcmVhc29uYWJsZSBjb21wcmVzc2VkIGJ1ZmZlciBzaXplICovCi0JaWYgKElTX01PQklMRShkZXYpICYmIChJU19JOVhYKGRldikgfHwgSVNfSTk2NUcoZGV2KSB8fCBJU19HTTQ1KGRldikpICYmCi0JICAgIGk5MTVfcG93ZXJzYXZlKSB7CisJaWYgKEk5MTVfSEFTX0ZCQyhkZXYpICYmIGk5MTVfcG93ZXJzYXZlKSB7CiAJCWludCBjZmJfc2l6ZTsKIAogCQkvKiBUcnkgdG8gZ2V0IGFuIDhNIGJ1ZmZlci4uLiAqLwpAQCAtMTQ2OCw2ICsxNDY3LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+ZXJyb3JfbG9jayk7CiAJZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID0gMDsKKwlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gMDsKIAogCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIEk5MTVfTlVNX1BJUEUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBiOTM4MTRjLi43ZjQzNmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTg5LDcgKzg5LDggQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CiAJfQogCi0JZGV2X3ByaXYtPnN1c3BlbmRlZCA9IDE7CisJLyogTW9kZXNldCBvbiByZXN1bWUsIG5vdCBsaWQgZXZlbnRzICovCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTI0LDcgKzEyNSw3IEBACiAJCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKIAl9CiAKLQlkZXZfcHJpdi0+c3VzcGVuZGVkID0gMDsKKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGIyNGIyZDEuLjU3MjA0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjAyLDYgKzIwMiw3IEBACiAJc3BpbmxvY2tfdCB1c2VyX2lycV9sb2NrOwogCS8qKiBSZWZjb3VudCBmb3IgaTkxNV91c2VyX2lycV9nZXQoKSB2ZXJzdXMgaTkxNV91c2VyX2lycV9wdXQoKS4gKi8KIAlpbnQgdXNlcl9pcnFfcmVmY291bnQ7CisJdTMyIHRyYWNlX2lycV9zZXFubzsKIAkvKiogQ2FjaGVkIHZhbHVlIG9mIElNUiB0byBhdm9pZCByZWFkcyBpbiB1cGRhdGluZyB0aGUgYml0ZmllbGQgKi8KIAl1MzIgaXJxX21hc2tfcmVnOwogCXUzMiBwaXBlc3RhdFsyXTsKQEAgLTI3Myw3ICsyNzQsNyBAQAogCXN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIGRpc3BsYXk7CiAKIAkvKiBSZWdpc3RlciBzdGF0ZSAqLwotCWJvb2wgc3VzcGVuZGVkOworCWJvb2wgbW9kZXNldF9vbl9saWQ7CiAJdTggc2F2ZUxCQjsKIAl1MzIgc2F2ZURTUEFDTlRSOwogCXUzMiBzYXZlRFNQQkNOVFI7CkBAIC0yOTUsNiArMjk2LDEyIEBACiAJdTMyIHNhdmVWQkxBTktfQTsKIAl1MzIgc2F2ZVZTWU5DX0E7CiAJdTMyIHNhdmVCQ0xSUEFUX0E7CisJdTMyIHNhdmVUUkFOU19IVE9UQUxfQTsKKwl1MzIgc2F2ZVRSQU5TX0hCTEFOS19BOworCXUzMiBzYXZlVFJBTlNfSFNZTkNfQTsKKwl1MzIgc2F2ZVRSQU5TX1ZUT1RBTF9BOworCXUzMiBzYXZlVFJBTlNfVkJMQU5LX0E7CisJdTMyIHNhdmVUUkFOU19WU1lOQ19BOwogCXUzMiBzYXZlUElQRUFTVEFUOwogCXUzMiBzYXZlRFNQQVNUUklERTsKIAl1MzIgc2F2ZURTUEFTSVpFOwpAQCAtMzAzLDggKzMxMCwxMSBAQAogCXUzMiBzYXZlRFNQQVNVUkY7CiAJdTMyIHNhdmVEU1BBVElMRU9GRjsKIAl1MzIgc2F2ZVBGSVRfUEdNX1JBVElPUzsKKwl1MzIgc2F2ZUJMQ19ISVNUX0NUTDsKIAl1MzIgc2F2ZUJMQ19QV01fQ1RMOwogCXUzMiBzYXZlQkxDX1BXTV9DVEwyOworCXUzMiBzYXZlQkxDX0NQVV9QV01fQ1RMOworCXUzMiBzYXZlQkxDX0NQVV9QV01fQ1RMMjsKIAl1MzIgc2F2ZUZQQjA7CiAJdTMyIHNhdmVGUEIxOwogCXUzMiBzYXZlRFBMTF9COwpAQCAtMzE2LDYgKzMyNiwxMiBAQAogCXUzMiBzYXZlVkJMQU5LX0I7CiAJdTMyIHNhdmVWU1lOQ19COwogCXUzMiBzYXZlQkNMUlBBVF9COworCXUzMiBzYXZlVFJBTlNfSFRPVEFMX0I7CisJdTMyIHNhdmVUUkFOU19IQkxBTktfQjsKKwl1MzIgc2F2ZVRSQU5TX0hTWU5DX0I7CisJdTMyIHNhdmVUUkFOU19WVE9UQUxfQjsKKwl1MzIgc2F2ZVRSQU5TX1ZCTEFOS19COworCXUzMiBzYXZlVFJBTlNfVlNZTkNfQjsKIAl1MzIgc2F2ZVBJUEVCU1RBVDsKIAl1MzIgc2F2ZURTUEJTVFJJREU7CiAJdTMyIHNhdmVEU1BCU0laRTsKQEAgLTM0MSw2ICszNTcsNyBAQAogCXUzMiBzYXZlUEZJVF9DT05UUk9MOwogCXUzMiBzYXZlX3BhbGV0dGVfYVsyNTZdOwogCXUzMiBzYXZlX3BhbGV0dGVfYlsyNTZdOworCXUzMiBzYXZlRFBGQ19DQl9CQVNFOwogCXUzMiBzYXZlRkJDX0NGQl9CQVNFOwogCXUzMiBzYXZlRkJDX0xMX0JBU0U7CiAJdTMyIHNhdmVGQkNfQ09OVFJPTDsKQEAgLTM0OCw2ICszNjUsMTIgQEAKIAl1MzIgc2F2ZUlFUjsKIAl1MzIgc2F2ZUlJUjsKIAl1MzIgc2F2ZUlNUjsKKwl1MzIgc2F2ZURFSUVSOworCXUzMiBzYXZlREVJTVI7CisJdTMyIHNhdmVHVElFUjsKKwl1MzIgc2F2ZUdUSU1SOworCXUzMiBzYXZlRkRJX1JYQV9JTVI7CisJdTMyIHNhdmVGRElfUlhCX0lNUjsKIAl1MzIgc2F2ZUNBQ0hFX01PREVfMDsKIAl1MzIgc2F2ZURfU1RBVEU7CiAJdTMyIHNhdmVEU1BDTEtfR0FURV9EOwpAQCAtMzgxLDYgKzQwNCwxNiBAQAogCXUzMiBzYXZlUElQRUJfRFBfTElOS19NOwogCXUzMiBzYXZlUElQRUFfRFBfTElOS19OOwogCXUzMiBzYXZlUElQRUJfRFBfTElOS19OOworCXUzMiBzYXZlRkRJX1JYQV9DVEw7CisJdTMyIHNhdmVGRElfVFhBX0NUTDsKKwl1MzIgc2F2ZUZESV9SWEJfQ1RMOworCXUzMiBzYXZlRkRJX1RYQl9DVEw7CisJdTMyIHNhdmVQRkFfQ1RMXzE7CisJdTMyIHNhdmVQRkJfQ1RMXzE7CisJdTMyIHNhdmVQRkFfV0lOX1NaOworCXUzMiBzYXZlUEZCX1dJTl9TWjsKKwl1MzIgc2F2ZVBGQV9XSU5fUE9TOworCXUzMiBzYXZlUEZCX1dJTl9QT1M7CiAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZHJtX21tIGd0dF9zcGFjZTsKQEAgLTQ5MSw2ICs1MjQsOCBAQAogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BoeXNfb2JqZWN0ICpwaHlzX29ianNbSTkxNV9NQVhfUEhZU19PQkpFQ1RdOwogCX0gbW07CiAJc3RydWN0IHNkdm9fZGV2aWNlX21hcHBpbmcgc2R2b19tYXBwaW5nc1syXTsKKwkvKiBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBMVkRTX0JPUkRFUiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QgKi8KKwl1bnNpZ25lZCBpbnQgbHZkc19ib3JkZXJfYml0czsKIAogCS8qIFJlY2xvY2tpbmcgc3VwcG9ydCAqLwogCWJvb2wgcmVuZGVyX3JlY2xvY2tfYXZhaWw7CkBAIC02NjUsNiArNzAwLDcgQEAKIGV4dGVybiBpbnQgaTkxNV9pcnFfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIHZvaWQgaTkxNV91c2VyX2lycV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfdHJhY2VfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pOwogdm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfZW5hYmxlX2ludGVycnVwdCAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKQEAgLTk3OSw3ICsxMDE1LDEwIEBACiAKICNkZWZpbmUgSEFTX0ZXX0JMQyhkZXYpIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikgfHwgSVNfSUdETkcoZGV2KSkKICNkZWZpbmUgSEFTX1BJUEVfQ1hTUihkZXYpIChJU19HNFgoZGV2KSB8fCBJU19JR0RORyhkZXYpKQotI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSVNfTU9CSUxFKGRldikgJiYgKElTX0k5WFgoZGV2KSB8fCBJU19JOTY1RyhkZXYpKSkKKyNkZWZpbmUgSTkxNV9IQVNfRkJDKGRldikgKElTX01PQklMRShkZXYpICYmIFwKKwkJCSAgIChJU19JOVhYKGRldikgfHwgSVNfR000NShkZXYpKSAmJiBcCisJCQkgICAhSVNfSUdEKGRldikgJiYgXAorCQkJICAgIUlTX0lHRE5HKGRldikpCiAKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDQwNzI3ZDQuLmFiZmMyN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBzZXFubzsKIAotCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKQorCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlIHx8IGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKQogCQlyZXR1cm47CiAKIAlzZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOwpAQCAtMTc5NCw2ICsxNzk0LDEyIEBACiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQorCisJaWYgKHVubGlrZWx5IChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vICYmCisJCSAgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKGRldl9wcml2LT50cmFjZV9pcnFfc2Vxbm8sIHNlcW5vKSkpIHsKKwkJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKKwkJZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyA9IDA7CisJfQogfQogCiB2b2lkCkBAIC0zMzUyLDcgKzMzNTgsNyBAQAogCWV4ZWNfc3RhcnQgPSAodWludDMyX3QpIGV4ZWNfb2Zmc2V0ICsgZXhlYy0+YmF0Y2hfc3RhcnRfb2Zmc2V0OwogCWV4ZWNfbGVuID0gKHVpbnQzMl90KSBleGVjLT5iYXRjaF9sZW47CiAKLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3N1Ym1pdChkZXYsIGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubyk7CisJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9zdWJtaXQoZGV2LCBkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gKyAxKTsKIAogCWNvdW50ID0gbmJveCA/IG5ib3ggOiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA0ZGZlZWM3Li5jM2NlZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTcyNSw2ICs3MjUsMTYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwogfQogCit2b2lkIGk5MTVfdHJhY2VfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID09IDApCisJCWk5MTVfdXNlcl9pcnFfZ2V0KGRldik7CisKKwlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gc2Vxbm87Cit9CisKIHN0YXRpYyBpbnQgaTkxNV93YWl0X2lycShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IGlycV9ucikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggMDQ2NmRkYi4uMTY4N2VkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC05NjgsNiArOTY4LDggQEAKICNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKIC8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLwogI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qIEVuYWJsZSBib3JkZXIgZm9yIHVuc2NhbGVkIChvciBhc3BlY3Qtc2NhbGVkKSBkaXNwbGF5ICovCisjZGVmaW5lICAgTFZEU19CT1JERVJfRU5BQkxFCQkoMSA8PCAxNSkKIC8qCiAgKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKICAqIHBpeGVsLgpAQCAtMTA3OCw2ICsxMDgwLDggQEAKICNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVAkJKDApCiAjZGVmaW5lICAgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSwkJKDB4ZmZmZikKIAorI2RlZmluZSBCTENfSElTVF9DVEwJCTB4NjEyNjAKKwogLyogVFYgcG9ydCBjb250cm9sICovCiAjZGVmaW5lIFRWX0NUTAkJCTB4NjgwMDAKIC8qKiBFbmFibGVzIHRoZSBUViBlbmNvZGVyICovCkBAIC0xNzgwLDYgKzE3ODQsMTEgQEAKICNkZWZpbmUgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIDk2NSBvciBsYXRlciAqLwogI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCiAjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfU1RBVFVTCQkoMVVMPDwwKQorI2RlZmluZSAgIFBJUEVfQlBDX01BU0sgCQkJKDcgPDwgNSkgLyogSXJvbmxha2UgKi8KKyNkZWZpbmUgICBQSVBFXzhCUEMJCQkJKDAgPDwgNSkKKyNkZWZpbmUgICBQSVBFXzEwQlBDCQkJCSgxIDw8IDUpCisjZGVmaW5lICAgUElQRV82QlBDCQkJCSgyIDw8IDUpCisjZGVmaW5lICAgUElQRV8xMkJQQwkJCQkoMyA8PCA1KQogCiAjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKICNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKQEAgLTE3OTAsMTcgKzE3OTksMjkgQEAKICNkZWZpbmUgICBEU1BBUkJfQUVORF9TSElGVAkwCiAKICNkZWZpbmUgRFNQRlcxCQkJMHg3MDAzNAorI2RlZmluZSAgIERTUEZXX1NSX1NISUZUCTIzCisjZGVmaW5lICAgRFNQRldfQ1VSU09SQl9TSElGVAkxNgorI2RlZmluZSAgIERTUEZXX1BMQU5FQl9TSElGVAk4CiAjZGVmaW5lIERTUEZXMgkJCTB4NzAwMzgKKyNkZWZpbmUgICBEU1BGV19DVVJTT1JBX01BU0sJMHgwMDAwM2YwMAorI2RlZmluZSAgIERTUEZXX0NVUlNPUkFfU0hJRlQJMTYKICNkZWZpbmUgRFNQRlczCQkJMHg3MDAzYworI2RlZmluZSAgIERTUEZXX0hQTExfU1JfRU4JKDE8PDMxKQorI2RlZmluZSAgIERTUEZXX0NVUlNPUl9TUl9TSElGVAkyNAogI2RlZmluZSAgIElHRF9TRUxGX1JFRlJFU0hfRU4JKDE8PDMwKQogCiAvKiBGSUZPIHdhdGVybWFyayBzaXplcyBldGMgKi8KKyNkZWZpbmUgRzRYX0ZJRk9fTElORV9TSVpFCTY0CiAjZGVmaW5lIEk5MTVfRklGT19MSU5FX1NJWkUJNjQKICNkZWZpbmUgSTgzMF9GSUZPX0xJTkVfU0laRQkzMgorCisjZGVmaW5lIEc0WF9GSUZPX1NJWkUJCTEyNwogI2RlZmluZSBJOTQ1X0ZJRk9fU0laRQkJMTI3IC8qIDk0NSAmIDk2NSAqLwogI2RlZmluZSBJOTE1X0ZJRk9fU0laRQkJOTUKICNkZWZpbmUgSTg1NUdNX0ZJRk9fU0laRQkxMjcgLyogSW4gY2FjaGVsaW5lcyAqLwogI2RlZmluZSBJODMwX0ZJRk9fU0laRQkJOTUKKworI2RlZmluZSBHNFhfTUFYX1dNCQkweDNmCiAjZGVmaW5lIEk5MTVfTUFYX1dNCQkweDNmCiAKICNkZWZpbmUgSUdEX0RJU1BMQVlfRklGTwk1MTIgLyogaW4gNjRieXRlIHVuaXQgKi8KQEAgLTIwMzAsNiArMjA1MSwxMSBAQAogI2RlZmluZSBQRkFfQ1RMXzEgICAgICAgICAgICAgICAweDY4MDgwCiAjZGVmaW5lIFBGQl9DVExfMSAgICAgICAgICAgICAgIDB4Njg4ODAKICNkZWZpbmUgIFBGX0VOQUJMRSAgICAgICAgICAgICAgKDE8PDMxKQorI2RlZmluZSAgUEZfRklMVEVSX01BU0sJCSgzPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9QUk9HUkFNTUVECSgwPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9NRURfM3gzCSgxPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9FREdFX0VOSEFOQ0UJKDI8PDIzKQorI2RlZmluZSAgUEZfRklMVEVSX0VER0VfU09GVEVOCSgzPDwyMykKICNkZWZpbmUgUEZBX1dJTl9TWgkJMHg2ODA3NAogI2RlZmluZSBQRkJfV0lOX1NaCQkweDY4ODc0CiAjZGVmaW5lIFBGQV9XSU5fUE9TCQkweDY4MDcwCkBAIC0yMTQ5LDExICsyMTc1LDExIEBACiAjZGVmaW5lICBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX01BU0sJCSgzPDwxMykKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9ESVNBQkxFICAgICAgICAgICAgICAgICgwPDwxMSkKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9FTkFCTEUgICAgICAgICAgICAgICAgICgyPDwxMSkKLSNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9NQVNLCQkJKDI8PDExKQorI2RlZmluZSAgRFJFRl9TU0NfU09VUkNFX01BU0sJCQkoMzw8MTEpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRElTQUJMRSAgICAgICAgICAoMDw8OSkKICNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX0NLNTA1X0VOQUJMRQkJKDE8PDkpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgICAoMjw8OSkKLSNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMjw8OSkKKyNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMzw8OSkKICNkZWZpbmUgIERSRUZfU1VQRVJTUFJFQURfU09VUkNFX0RJU0FCTEUgICAgICAgICgwPDw3KQogI2RlZmluZSAgRFJFRl9TVVBFUlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgKDI8PDcpCiAjZGVmaW5lICBEUkVGX1NTQzRfRE9XTlNQUkVBRCAgICAgICAgICAgICAgICAgICAoMDw8NikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggYmQ2ZDhkOS4uOTkyZDU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTMyLDExICszMiwxNSBAQAogc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIJZHBsbF9yZWc7CiAKLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQSkgJiBEUExMX1ZDT19FTkFCTEUpOwotCWVsc2UKLQkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9CKSAmIERQTExfVkNPX0VOQUJMRSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZHBsbF9yZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gUENIX0RQTExfQTogUENIX0RQTExfQjsKKwl9IGVsc2UgeworCQlkcGxsX3JlZyA9IChwaXBlID09IFBJUEVfQSkgPyBEUExMX0E6IERQTExfQjsKKwl9CisKKwlyZXR1cm4gKEk5MTVfUkVBRChkcGxsX3JlZykgJiBEUExMX1ZDT19FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKQEAgLTQ5LDYgKzUzLDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTY4LDYgKzc1LDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTIzMiwxMCArMjQyLDE2IEBACiAJLyogUGlwZSAmIHBsYW5lIEEgaW5mbyAqLwogCWRldl9wcml2LT5zYXZlUElQRUFDT05GID0gSTkxNV9SRUFEKFBJUEVBQ09ORik7CiAJZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9IEk5MTVfUkVBRChQSVBFQVNSQyk7Ci0JZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOwotCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChGUEExKTsKLQlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOwotCWlmIChJU19JOTY1RyhkZXYpKQorCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlRlBBMCA9IEk5MTVfUkVBRChQQ0hfRlBBMCk7CisJCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChQQ0hfRlBBMSk7CisJCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKFBDSF9EUExMX0EpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlRlBBMCA9IEk5MTVfUkVBRChGUEEwKTsKKwkJZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOworCQlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOworCX0KKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQgPSBJOTE1X1JFQUQoRFBMTF9BX01EKTsKIAlkZXZfcHJpdi0+c2F2ZUhUT1RBTF9BID0gSTkxNV9SRUFEKEhUT1RBTF9BKTsKIAlkZXZfcHJpdi0+c2F2ZUhCTEFOS19BID0gSTkxNV9SRUFEKEhCTEFOS19BKTsKQEAgLTI0Myw3ICsyNTksMjQgQEAKIAlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BID0gSTkxNV9SRUFEKFZUT1RBTF9BKTsKIAlkZXZfcHJpdi0+c2F2ZVZCTEFOS19BID0gSTkxNV9SRUFEKFZCTEFOS19BKTsKIAlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgPSBJOTE1X1JFQUQoVlNZTkNfQSk7Ci0JZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKwlpZiAoIUlTX0lHRE5HKGRldikpCisJCWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gSTkxNV9SRUFEKEJDTFJQQVRfQSk7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZUZESV9UWEFfQ1RMID0gSTkxNV9SRUFEKEZESV9UWEFfQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVGRElfUlhBX0NUTCA9IEk5MTVfUkVBRChGRElfUlhBX0NUTCk7CisKKwkJZGV2X3ByaXYtPnNhdmVQRkFfQ1RMXzEgPSBJOTE1X1JFQUQoUEZBX0NUTF8xKTsKKwkJZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1NaID0gSTkxNV9SRUFEKFBGQV9XSU5fU1opOworCQlkZXZfcHJpdi0+c2F2ZVBGQV9XSU5fUE9TID0gSTkxNV9SRUFEKFBGQV9XSU5fUE9TKTsKKworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hUT1RBTF9BID0gSTkxNV9SRUFEKFRSQU5TX0hUT1RBTF9BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IQkxBTktfQSA9IEk5MTVfUkVBRChUUkFOU19IQkxBTktfQSk7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfSFNZTkNfQSA9IEk5MTVfUkVBRChUUkFOU19IU1lOQ19BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WVE9UQUxfQSA9IEk5MTVfUkVBRChUUkFOU19WVE9UQUxfQSk7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVkJMQU5LX0EgPSBJOTE1X1JFQUQoVFJBTlNfVkJMQU5LX0EpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZTWU5DX0EgPSBJOTE1X1JFQUQoVFJBTlNfVlNZTkNfQSk7CisJfQogCiAJZGV2X3ByaXYtPnNhdmVEU1BBQ05UUiA9IEk5MTVfUkVBRChEU1BBQ05UUik7CiAJZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFID0gSTkxNV9SRUFEKERTUEFTVFJJREUpOwpAQCAtMjYwLDEwICsyOTMsMTYgQEAKIAkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCiAJZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYgPSBJOTE1X1JFQUQoUElQRUJDT05GKTsKIAlkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDID0gSTkxNV9SRUFEKFBJUEVCU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoRlBCMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKEZQQjEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKFBDSF9GUEIwKTsKKwkJZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKFBDSF9GUEIxKTsKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoUENIX0RQTExfQik7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKEZQQjApOworCQlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoRlBCMSk7CisJCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7CisJfQorCWlmIChJU19JOTY1RyhkZXYpICYmICFJU19JR0RORyhkZXYpKQogCQlkZXZfcHJpdi0+c2F2ZURQTExfQl9NRCA9IEk5MTVfUkVBRChEUExMX0JfTUQpOwogCWRldl9wcml2LT5zYXZlSFRPVEFMX0IgPSBJOTE1X1JFQUQoSFRPVEFMX0IpOwogCWRldl9wcml2LT5zYXZlSEJMQU5LX0IgPSBJOTE1X1JFQUQoSEJMQU5LX0IpOwpAQCAtMjcxLDcgKzMxMCwyNCBAQAogCWRldl9wcml2LT5zYXZlVlRPVEFMX0IgPSBJOTE1X1JFQUQoVlRPVEFMX0IpOwogCWRldl9wcml2LT5zYXZlVkJMQU5LX0IgPSBJOTE1X1JFQUQoVkJMQU5LX0IpOwogCWRldl9wcml2LT5zYXZlVlNZTkNfQiA9IEk5MTVfUkVBRChWU1lOQ19CKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOworCWlmICghSVNfSUdETkcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0IgPSBJOTE1X1JFQUQoQkNMUlBBVF9CKTsKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlRkRJX1RYQl9DVEwgPSBJOTE1X1JFQUQoRkRJX1RYQl9DVEwpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEJfQ1RMID0gSTkxNV9SRUFEKEZESV9SWEJfQ1RMKTsKKworCQlkZXZfcHJpdi0+c2F2ZVBGQl9DVExfMSA9IEk5MTVfUkVBRChQRkJfQ1RMXzEpOworCQlkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fU1ogPSBJOTE1X1JFQUQoUEZCX1dJTl9TWik7CisJCWRldl9wcml2LT5zYXZlUEZCX1dJTl9QT1MgPSBJOTE1X1JFQUQoUEZCX1dJTl9QT1MpOworCisJCWRldl9wcml2LT5zYXZlVFJBTlNfSFRPVEFMX0IgPSBJOTE1X1JFQUQoVFJBTlNfSFRPVEFMX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hCTEFOS19CID0gSTkxNV9SRUFEKFRSQU5TX0hCTEFOS19CKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19CID0gSTkxNV9SRUFEKFRSQU5TX0hTWU5DX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZUT1RBTF9CID0gSTkxNV9SRUFEKFRSQU5TX1ZUT1RBTF9CKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WQkxBTktfQiA9IEk5MTVfUkVBRChUUkFOU19WQkxBTktfQik7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQiA9IEk5MTVfUkVBRChUUkFOU19WU1lOQ19CKTsKKwl9CiAKIAlkZXZfcHJpdi0+c2F2ZURTUEJDTlRSID0gSTkxNV9SRUFEKERTUEJDTlRSKTsKIAlkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUgPSBJOTE1X1JFQUQoRFNQQlNUUklERSk7CkBAIC0yOTAsMjMgKzM0Niw0MSBAQAogc3RhdGljIHZvaWQgaTkxNV9yZXN0b3JlX21vZGVzZXRfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgZHBsbF9hX3JlZywgZnBhMF9yZWcsIGZwYTFfcmVnOworCWludCBkcGxsX2JfcmVnLCBmcGIwX3JlZywgZnBiMV9yZWc7CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKIAkJcmV0dXJuOwogCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZHBsbF9hX3JlZyA9IFBDSF9EUExMX0E7CisJCWRwbGxfYl9yZWcgPSBQQ0hfRFBMTF9COworCQlmcGEwX3JlZyA9IFBDSF9GUEEwOworCQlmcGIwX3JlZyA9IFBDSF9GUEIwOworCQlmcGExX3JlZyA9IFBDSF9GUEExOworCQlmcGIxX3JlZyA9IFBDSF9GUEIxOworCX0gZWxzZSB7CisJCWRwbGxfYV9yZWcgPSBEUExMX0E7CisJCWRwbGxfYl9yZWcgPSBEUExMX0I7CisJCWZwYTBfcmVnID0gRlBBMDsKKwkJZnBiMF9yZWcgPSBGUEIwOworCQlmcGExX3JlZyA9IEZQQTE7CisJCWZwYjFfcmVnID0gRlBCMTsKKwl9CisKIAkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCiAJLyogUHJpbWUgdGhlIGNsb2NrICovCiAJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCisJCUk5MTVfV1JJVEUoZHBsbF9hX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0EgJgogCQkJICAgfkRQTExfVkNPX0VOQUJMRSk7CiAJCURSTV9VREVMQVkoMTUwKTsKIAl9Ci0JSTkxNV9XUklURShGUEEwLCBkZXZfcHJpdi0+c2F2ZUZQQTApOwotCUk5MTVfV1JJVEUoRlBBMSwgZGV2X3ByaXYtPnNhdmVGUEExKTsKKwlJOTE1X1dSSVRFKGZwYTBfcmVnLCBkZXZfcHJpdi0+c2F2ZUZQQTApOworCUk5MTVfV1JJVEUoZnBhMV9yZWcsIGRldl9wcml2LT5zYXZlRlBBMSk7CiAJLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKKwlJOTE1X1dSSVRFKGRwbGxfYV9yZWcsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKIAlEUk1fVURFTEFZKDE1MCk7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCUk5MTVfV1JJVEUoRFBMTF9BX01ELCBkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCk7CiAJRFJNX1VERUxBWSgxNTApOwogCkBAIC0zMTcsNyArMzkxLDI0IEBACiAJSTkxNV9XUklURShWVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVWVE9UQUxfQSk7CiAJSTkxNV9XUklURShWQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVWQkxBTktfQSk7CiAJSTkxNV9XUklURShWU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZVZTWU5DX0EpOwotCUk5MTVfV1JJVEUoQkNMUlBBVF9BLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSk7CisJaWYgKCFJU19JR0RORyhkZXYpKQorCQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOworCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShGRElfUlhBX0NUTCwgZGV2X3ByaXYtPnNhdmVGRElfUlhBX0NUTCk7CisJCUk5MTVfV1JJVEUoRkRJX1RYQV9DVEwsIGRldl9wcml2LT5zYXZlRkRJX1RYQV9DVEwpOworCisJCUk5MTVfV1JJVEUoUEZBX0NUTF8xLCBkZXZfcHJpdi0+c2F2ZVBGQV9DVExfMSk7CisJCUk5MTVfV1JJVEUoUEZBX1dJTl9TWiwgZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1NaKTsKKwkJSTkxNV9XUklURShQRkFfV0lOX1BPUywgZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1BPUyk7CisKKwkJSTkxNV9XUklURShUUkFOU19IVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVUUkFOU19IVE9UQUxfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfSEJMQU5LX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfSEJMQU5LX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX0hTWU5DX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfSFNZTkNfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfVlRPVEFMX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZCTEFOS19BKTsKKwkJSTkxNV9XUklURShUUkFOU19WU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZTWU5DX0EpOworCX0KIAogCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLwogCUk5MTVfV1JJVEUoRFNQQVNJWkUsIGRldl9wcml2LT5zYXZlRFNQQVNJWkUpOwpAQCAtMzM5LDE0ICs0MzAsMTQgQEAKIAogCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KIAlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0IgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJSTkxNV9XUklURShEUExMX0IsIGRldl9wcml2LT5zYXZlRFBMTF9CICYKKwkJSTkxNV9XUklURShkcGxsX2JfcmVnLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCiAJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKIAkJRFJNX1VERUxBWSgxNTApOwogCX0KLQlJOTE1X1dSSVRFKEZQQjAsIGRldl9wcml2LT5zYXZlRlBCMCk7Ci0JSTkxNV9XUklURShGUEIxLCBkZXZfcHJpdi0+c2F2ZUZQQjEpOworCUk5MTVfV1JJVEUoZnBiMF9yZWcsIGRldl9wcml2LT5zYXZlRlBCMCk7CisJSTkxNV9XUklURShmcGIxX3JlZywgZGV2X3ByaXYtPnNhdmVGUEIxKTsKIAkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IpOworCUk5MTVfV1JJVEUoZHBsbF9iX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0IpOwogCURSTV9VREVMQVkoMTUwKTsKIAlpZiAoSVNfSTk2NUcoZGV2KSkKIAkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKQEAgLTM1OSw3ICs0NTAsMjQgQEAKIAlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKIAlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKIAlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKKwlpZiAoIUlTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQik7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKEZESV9SWEJfQ1RMLCBkZXZfcHJpdi0+c2F2ZUZESV9SWEJfQ1RMKTsKKwkJSTkxNV9XUklURShGRElfVFhCX0NUTCwgZGV2X3ByaXYtPnNhdmVGRElfVFhCX0NUTCk7CisKKwkJSTkxNV9XUklURShQRkJfQ1RMXzEsIGRldl9wcml2LT5zYXZlUEZCX0NUTF8xKTsKKwkJSTkxNV9XUklURShQRkJfV0lOX1NaLCBkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fU1opOworCQlJOTE1X1dSSVRFKFBGQl9XSU5fUE9TLCBkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fUE9TKTsKKworCQlJOTE1X1dSSVRFKFRSQU5TX0hUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX0hUT1RBTF9CKTsKKwkJSTkxNV9XUklURShUUkFOU19IQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19IQkxBTktfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19CKTsKKwkJSTkxNV9XUklURShUUkFOU19WVE9UQUxfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19WVE9UQUxfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfVkJMQU5LX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfVkJMQU5LX0IpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZTWU5DX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQik7CisJfQogCiAJLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCiAJSTkxNV9XUklURShEU1BCU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BCU0laRSk7CkBAIC00MDQsMjEgKzUxMiw0MyBAQAogCQlkZXZfcHJpdi0+c2F2ZUNVUlNJWkUgPSBJOTE1X1JFQUQoQ1VSU0laRSk7CiAKIAkvKiBDUlQgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoQURQQSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKFBDSF9BRFBBKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoQURQQSk7CisJfQogCiAJLyogTFZEUyBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOwotCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgPSBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fUENIX0NUTDEpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX1BDSF9DVEwyKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DUFVfQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwyID0gSTkxNV9SRUFEKEJMQ19QV01fQ1BVX0NUTDIpOworCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoUENIX0xWRFMpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKKwkJZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBJOTE1X1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7CisJCWRldl9wcml2LT5zYXZlQkxDX0hJU1RfQ1RMID0gSTkxNV9SRUFEKEJMQ19ISVNUX0NUTCk7CisJCWlmIChJU19JOTY1RyhkZXYpKQorCQkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKwkJaWYgKElTX01PQklMRShkZXYpICYmICFJU19JODMwKGRldikpCisJCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7CisJfQorCisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOwotCWRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PRkZfREVMQVlTKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IgPSBJOTE1X1JFQUQoUFBfRElWSVNPUik7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQQ0hfUFBfT05fREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTID0gSTkxNV9SRUFEKFBDSF9QUF9PRkZfREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SID0gSTkxNV9SRUFEKFBDSF9QUF9ESVZJU09SKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOworCQlkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT0ZGX0RFTEFZUyk7CisJCWRldl9wcml2LT5zYXZlUFBfRElWSVNPUiA9IEk5MTVfUkVBRChQUF9ESVZJU09SKTsKKwl9CiAKIAkvKiBEaXNwbGF5IFBvcnQgc3RhdGUgKi8KIAlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpKSB7CkBAIC00MzcsMTYgKzU2NywyMyBAQAogCS8qIEZJWE1FOiBzYXZlIFRWICYgU0RWTyBzdGF0ZSAqLwogCiAJLyogRkJDIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0NGQl9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMiA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTDIpOwotCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOworCWlmIChJU19HTTQ1KGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEUEZDX0NCX0JBU0UgPSBJOTE1X1JFQUQoRFBGQ19DQl9CQVNFKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSA9IEk5MTVfUkVBRChGQkNfQ0ZCX0JBU0UpOworCQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKKwkJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wyKTsKKwkJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTCk7CisJfQogCiAJLyogVkdBIHN0YXRlICovCiAJZGV2X3ByaXYtPnNhdmVWR0EwID0gSTkxNV9SRUFEKFZHQTApOwogCWRldl9wcml2LT5zYXZlVkdBMSA9IEk5MTVfUkVBRChWR0ExKTsKIAlkZXZfcHJpdi0+c2F2ZVZHQV9QRCA9IEk5MTVfUkVBRChWR0FfUEQpOwotCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOworCWlmIChJU19JR0RORyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKENQVV9WR0FDTlRSTCk7CisJZWxzZQorCQlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKFZHQUNOVFJMKTsKIAogCWk5MTVfc2F2ZV92Z2EoZGV2KTsKIH0KQEAgLTQ4NSwyMiArNjIyLDQxIEBACiAJCUk5MTVfV1JJVEUoQ1VSU0laRSwgZGV2X3ByaXYtPnNhdmVDVVJTSVpFKTsKIAogCS8qIENSVCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJSTkxNV9XUklURShQQ0hfQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKIAogCS8qIExWRFMgc3RhdGUgKi8KLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJSTkxNV9XUklURShCTENfUFdNX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKLQlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoUENIX0xWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7CisJfSBlbHNlIGlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQogCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7CiAKLQlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOwotCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOwotCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7Ci0JSTkxNV9XUklURShQUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOwotCUk5MTVfV1JJVEUoUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKLQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShCTENfUFdNX1BDSF9DVEwxLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMKTsKKwkJSTkxNV9XUklURShCTENfUFdNX1BDSF9DVEwyLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMik7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19DUFVfUFdNX0NUTCk7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwyKTsKKwkJSTkxNV9XUklURShQQ0hfUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUENIX1BQX09GRl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUENIX1BQX0RJVklTT1IsIGRldl9wcml2LT5zYXZlUFBfRElWSVNPUik7CisJCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJfSBlbHNlIHsKKwkJSTkxNV9XUklURShQRklUX1BHTV9SQVRJT1MsIGRldl9wcml2LT5zYXZlUEZJVF9QR01fUkFUSU9TKTsKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CisJCUk5MTVfV1JJVEUoQkxDX0hJU1RfQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19ISVNUX0NUTCk7CisJCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUFBfT0ZGX0RFTEFZUywgZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTKTsKKwkJSTkxNV9XUklURShQUF9ESVZJU09SLCBkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IpOworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJfQogCiAJLyogRGlzcGxheSBQb3J0IHN0YXRlICovCiAJaWYgKFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KSkgewpAQCAtNTExLDEzICs2NjcsMjIgQEAKIAkvKiBGSVhNRTogcmVzdG9yZSBUViAmIFNEVk8gc3RhdGUgKi8KIAogCS8qIEZCQyBpbmZvICovCi0JSTkxNV9XUklURShGQkNfQ0ZCX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFKTsKLQlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKLQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIpOwotCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wpOworCWlmIChJU19HTTQ1KGRldikpIHsKKwkJZzR4X2Rpc2FibGVfZmJjKGRldik7CisJCUk5MTVfV1JJVEUoRFBGQ19DQl9CQVNFLCBkZXZfcHJpdi0+c2F2ZURQRkNfQ0JfQkFTRSk7CisJfSBlbHNlIHsKKwkJaTh4eF9kaXNhYmxlX2ZiYyhkZXYpOworCQlJOTE1X1dSSVRFKEZCQ19DRkJfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UpOworCQlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKKwkJSTkxNV9XUklURShGQkNfQ09OVFJPTDIsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyKTsKKwkJSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCk7CisJfQogCiAJLyogVkdBIHN0YXRlICovCi0JSTkxNV9XUklURShWR0FDTlRSTCwgZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCk7CisJaWYgKElTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQ1BVX1ZHQUNOVFJMLCBkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoVkdBQ05UUkwsIGRldl9wcml2LT5zYXZlVkdBQ05UUkwpOwogCUk5MTVfV1JJVEUoVkdBMCwgZGV2X3ByaXYtPnNhdmVWR0EwKTsKIAlJOTE1X1dSSVRFKFZHQTEsIGRldl9wcml2LT5zYXZlVkdBMSk7CiAJSTkxNV9XUklURShWR0FfUEQsIGRldl9wcml2LT5zYXZlVkdBX1BEKTsKQEAgLTU0Myw4ICs3MDgsMTcgQEAKIAlpOTE1X3NhdmVfZGlzcGxheShkZXYpOwogCiAJLyogSW50ZXJydXB0IHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKLQlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJTVIpOworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlREVJRVIgPSBJOTE1X1JFQUQoREVJRVIpOworCQlkZXZfcHJpdi0+c2F2ZURFSU1SID0gSTkxNV9SRUFEKERFSU1SKTsKKwkJZGV2X3ByaXYtPnNhdmVHVElFUiA9IEk5MTVfUkVBRChHVElFUik7CisJCWRldl9wcml2LT5zYXZlR1RJTVIgPSBJOTE1X1JFQUQoR1RJTVIpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEFfSU1SID0gSTkxNV9SRUFEKEZESV9SWEFfSU1SKTsKKwkJZGV2X3ByaXYtPnNhdmVGRElfUlhCX0lNUiA9IEk5MTVfUkVBRChGRElfUlhCX0lNUik7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKKwkJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKKwl9CiAKIAkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KIAlkZXZfcHJpdi0+c2F2ZURfU1RBVEUgPSBJOTE1X1JFQUQoRF9TVEFURSk7CkBAIC02MDksOCArNzgzLDE3IEBACiAJaTkxNV9yZXN0b3JlX2Rpc3BsYXkoZGV2KTsKIAogCS8qIEludGVycnVwdCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUgKElFUiwgZGV2X3ByaXYtPnNhdmVJRVIpOwotCUk5MTVfV1JJVEUgKElNUiwgIGRldl9wcml2LT5zYXZlSU1SKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKERFSUVSLCBkZXZfcHJpdi0+c2F2ZURFSUVSKTsKKwkJSTkxNV9XUklURShERUlNUiwgZGV2X3ByaXYtPnNhdmVERUlNUik7CisJCUk5MTVfV1JJVEUoR1RJRVIsIGRldl9wcml2LT5zYXZlR1RJRVIpOworCQlJOTE1X1dSSVRFKEdUSU1SLCBkZXZfcHJpdi0+c2F2ZUdUSU1SKTsKKwkJSTkxNV9XUklURShGRElfUlhBX0lNUiwgZGV2X3ByaXYtPnNhdmVGRElfUlhBX0lNUik7CisJCUk5MTVfV1JJVEUoRkRJX1JYQl9JTVIsIGRldl9wcml2LT5zYXZlRkRJX1JYQl9JTVIpOworCX0gZWxzZSB7CisJCUk5MTVfV1JJVEUgKElFUiwgZGV2X3ByaXYtPnNhdmVJRVIpOworCQlJOTE1X1dSSVRFIChJTVIsICBkZXZfcHJpdi0+c2F2ZUlNUik7CisJfQogCiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCiAJSTkxNV9XUklURSAoRF9TVEFURSwgZGV2X3ByaXYtPnNhdmVEX1NUQVRFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAppbmRleCA1NTY3YTQwLi4wMTg0MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCkBAIC0xNTgsMTYgKzE1OCwxNyBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8pLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9kZXZpY2UgKiwgZGV2KQorCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQogCQkJICAgICBfX2ZpZWxkKHUzMiwgc2Vxbm8pCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKKwkJCSAgIGk5MTVfdHJhY2VfaXJxX2dldChkZXYsIHNlcW5vKTsKIAkJCSAgICksCiAKLQkgICAgVFBfcHJpbnRrKCJkZXY9JXAsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3RfZmx1c2gsCkBAIC0xNzgsMjAgKzE3OSwyMCBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8sIGZsdXNoX2RvbWFpbnMsIGludmFsaWRhdGVfZG9tYWlucyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgX19maWVsZCh1MzIsIGZsdXNoX2RvbWFpbnMpCiAJCQkgICAgIF9fZmllbGQodTMyLCBpbnZhbGlkYXRlX2RvbWFpbnMpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKIAkJCSAgIF9fZW50cnktPmZsdXNoX2RvbWFpbnMgPSBmbHVzaF9kb21haW5zOwogCQkJICAgX19lbnRyeS0+aW52YWxpZGF0ZV9kb21haW5zID0gaW52YWxpZGF0ZV9kb21haW5zOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUsIGZsdXNoPSUwNHgsIGludmFsaWRhdGU9JTA0eCIsCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSwgZmx1c2g9JTA0eCwgaW52YWxpZGF0ZT0lMDR4IiwKIAkJICAgICAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubywKIAkJICAgICAgX19lbnRyeS0+Zmx1c2hfZG9tYWlucywgX19lbnRyeS0+aW52YWxpZGF0ZV9kb21haW5zKQogKTsKQEAgLTIwNCwxNiArMjA1LDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUsCkBAIC0yMjMsMTYgKzIyNCwxNiBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8pLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9kZXZpY2UgKiwgZGV2KQorCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQogCQkJICAgICBfX2ZpZWxkKHUzMiwgc2Vxbm8pCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKIAkJCSAgICksCiAKLQkgICAgVFBfcHJpbnRrKCJkZXY9JXAsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9iZWdpbiwKQEAgLTI0MiwxNiArMjQzLDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF93YWl0X2VuZCwKQEAgLTI2MSwxNiArMjYyLDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9yaW5nX3dhaXRfYmVnaW4sCkBAIC0yODAsMTQgKzI4MSwxNCBAQAogCSAgICBUUF9BUkdTKGRldiksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCIsIF9fZW50cnktPmRldikKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUiLCBfX2VudHJ5LT5kZXYpCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X3Jpbmdfd2FpdF9lbmQsCkBAIC0yOTcsMTQgKzI5OCwxNCBAQAogCSAgICBUUF9BUkdTKGRldiksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCIsIF9fZW50cnktPmRldikKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUiLCBfX2VudHJ5LT5kZXYpCiApOwogCiAjZW5kaWYgLyogX0k5MTVfVFJBQ0VfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwppbmRleCA0MzM3NDE0Li45NmNkMjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCkBAIC0zNTEsMjAgKzM1MSwxOCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCXN0cnVjdCBiZGJfZHJpdmVyX2ZlYXR1cmVzICpkcml2ZXI7CiAKLQkvKiBzZXQgZGVmYXVsdCBmb3IgY2hpcHMgd2l0aG91dCBlRFAgKi8KLQlpZiAoIVNVUFBPUlRTX0VEUChkZXYpKSB7Ci0JCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KIAlkcml2ZXIgPSBmaW5kX3NlY3Rpb24oYmRiLCBCREJfRFJJVkVSX0ZFQVRVUkVTKTsKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkKKwlpZiAoZHJpdmVyICYmIFNVUFBPUlRTX0VEUChkZXYpICYmCisJICAgIGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkgewogCQlkZXZfcHJpdi0+ZWRwX3N1cHBvcnQgPSAxOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7CisJfQogCi0JaWYgKGRyaXZlci0+ZHVhbF9mcmVxdWVuY3kpCisJaWYgKGRyaXZlciAmJiBkcml2ZXItPmR1YWxfZnJlcXVlbmN5KQogCQlkZXZfcHJpdi0+cmVuZGVyX3JlY2xvY2tfYXZhaWwgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggOTNmZjZjMC4uM2JhNjU0NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTk0Myw2ICs5NDMsNyBAQAogICAgIGNsb2NrLm0gPSA1ICogKGNsb2NrLm0xICsgMikgKyAoY2xvY2subTIgKyAyKTsKICAgICBjbG9jay5wID0gKGNsb2NrLnAxICogY2xvY2sucDIpOwogICAgIGNsb2NrLmRvdCA9IDk2MDAwICogY2xvY2subSAvIChjbG9jay5uICsgMikgLyBjbG9jay5wOworICAgIGNsb2NrLnZjbyA9IDA7CiAgICAgbWVtY3B5KGJlc3RfY2xvY2ssICZjbG9jaywgc2l6ZW9mKGludGVsX2Nsb2NrX3QpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyNjAsOSArMTI2MSwxMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIFByZS1pOTY1IG5lZWRzIHRvIGluc3RhbGwgYSBmZW5jZSBmb3IgdGlsZWQgc2Nhbi1vdXQgKi8KLQlpZiAoIUlTX0k5NjVHKGRldikgJiYKLQkgICAgb2JqX3ByaXYtPmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FICYmCisJLyogSW5zdGFsbCBhIGZlbmNlIGZvciB0aWxlZCBzY2FuLW91dC4gUHJlLWk5NjUgYWx3YXlzIG5lZWRzIGEgZmVuY2UsCisJICogd2hlcmVhcyA5NjUrIG9ubHkgcmVxdWlyZXMgYSBmZW5jZSBpZiB1c2luZyBmcmFtZWJ1ZmZlciBjb21wcmVzc2lvbi4KKwkgKiBGb3Igc2ltcGxpY2l0eSwgd2UgYWx3YXlzIGluc3RhbGwgYSBmZW5jZSBhcyB0aGUgY29zdCBpcyBub3QgdGhhdCBvbmVyb3VzLgorCSAqLworCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUgJiYKIAkgICAgb2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcob2JqKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC0xNTEzLDcgKzE1MTYsNyBAQAogCQkvKiBFbmFibGUgcGFuZWwgZml0dGluZyBmb3IgTFZEUyAqLwogCQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKIAkJCXRlbXAgPSBJOTE1X1JFQUQocGZfY3RsX3JlZyk7Ci0JCQlJOTE1X1dSSVRFKHBmX2N0bF9yZWcsIHRlbXAgfCBQRl9FTkFCTEUpOworCQkJSTkxNV9XUklURShwZl9jdGxfcmVnLCB0ZW1wIHwgUEZfRU5BQkxFIHwgUEZfRklMVEVSX01FRF8zeDMpOwogCiAJCQkvKiBjdXJyZW50bHkgZnVsbCBhc3BlY3QgKi8KIAkJCUk5MTVfV1JJVEUocGZfd2luX3BvcywgMCk7CkBAIC0xODAxLDYgKzE4MDQsOCBAQAogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKKwkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKKwogCQkvKiBFbmFibGUgdGhlIERQTEwgKi8KIAkJdGVtcCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CiAJCWlmICgodGVtcCAmIERQTExfVkNPX0VOQUJMRSkgPT0gMCkgewpAQCAtMTgzOCw3ICsxODQzLDYgQEAKIAogCQkvKiBHaXZlIHRoZSBvdmVybGF5IHNjYWxlciBhIGNoYW5jZSB0byBlbmFibGUgaWYgaXQncyBvbiB0aGlzIHBpcGUgKi8KIAkJLy9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgdHJ1ZSk7IFRPRE8KLQkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKIAlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhkZXYpOwpAQCAtMjA4Miw3ICsyMDg2LDcgQEAKICNkZWZpbmUgTElOS19OIDB4ODAwMDAKIAogc3RhdGljIHZvaWQKLWlnZG5nX2NvbXB1dGVfbV9uKGludCBieXRlc19wZXJfcGl4ZWwsIGludCBubGFuZXMsCitpZ2RuZ19jb21wdXRlX21fbihpbnQgYml0c19wZXJfcGl4ZWwsIGludCBubGFuZXMsCiAJCWludCBwaXhlbF9jbG9jaywgaW50IGxpbmtfY2xvY2ssCiAJCXN0cnVjdCBmZGlfbV9uICptX24pCiB7CkBAIC0yMDkyLDcgKzIwOTYsOCBAQAogCiAJdGVtcCA9ICh1NjQpIERBVEFfTiAqIHBpeGVsX2Nsb2NrOwogCXRlbXAgPSBkaXZfdTY0KHRlbXAsIGxpbmtfY2xvY2spOwotCW1fbi0+Z21jaF9tID0gZGl2X3U2NCh0ZW1wICogYnl0ZXNfcGVyX3BpeGVsLCBubGFuZXMpOworCW1fbi0+Z21jaF9tID0gZGl2X3U2NCh0ZW1wICogYml0c19wZXJfcGl4ZWwsIG5sYW5lcyk7CisJbV9uLT5nbWNoX20gPj49IDM7IC8qIGNvbnZlcnQgdG8gYnl0ZXNfcGVyX3BpeGVsICovCiAJbV9uLT5nbWNoX24gPSBEQVRBX047CiAJZmRpX3JlZHVjZV9yYXRpbygmbV9uLT5nbWNoX20sICZtX24tPmdtY2hfbik7CiAKQEAgLTIxNDAsNiArMjE0NSwxMyBAQAogCUlHRF9DVVJTT1JfR1VBUkRfV00sCiAJSUdEX0ZJRk9fTElORV9TSVpFCiB9Oworc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGc0eF93bV9pbmZvID0geworCUc0WF9GSUZPX1NJWkUsCisJRzRYX01BWF9XTSwKKwlHNFhfTUFYX1dNLAorCTIsCisJRzRYX0ZJRk9fTElORV9TSVpFLAorfTsKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBpOTQ1X3dtX2luZm8gPSB7CiAJSTk0NV9GSUZPX1NJWkUsCiAJSTkxNV9NQVhfV00sCkBAIC0yNDMwLDE3ICsyNDQyLDc0IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHVudXNlZCwgaW50IHVudXNlZDIsCi0JCQkgIGludCB1bnVzZWQzLCBpbnQgdW51c2VkNCkKK3N0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgIGludCBwbGFuZWFfY2xvY2ssCisJCQkgIGludCBwbGFuZWJfY2xvY2ssIGludCBzcl9oZGlzcGxheSwgaW50IHBpeGVsX3NpemUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgZndfYmxjX3NlbGYgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEYpOworCWludCB0b3RhbF9zaXplLCBjYWNoZWxpbmVfc2l6ZTsKKwlpbnQgcGxhbmVhX3dtLCBwbGFuZWJfd20sIGN1cnNvcmFfd20sIGN1cnNvcmJfd20sIGN1cnNvcl9zcjsKKwlzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBwbGFuZWFfcGFyYW1zLCBwbGFuZWJfcGFyYW1zOworCXVuc2lnbmVkIGxvbmcgbGluZV90aW1lX3VzOworCWludCBzcl9jbG9jaywgc3JfZW50cmllcyA9IDAsIGVudHJpZXNfcmVxdWlyZWQ7CiAKLQlpZiAoaTkxNV9wb3dlcnNhdmUpCi0JCWZ3X2JsY19zZWxmIHw9IEZXX0JMQ19TRUxGX0VOOwotCWVsc2UKLQkJZndfYmxjX3NlbGYgJj0gfkZXX0JMQ19TRUxGX0VOOwotCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIGZ3X2JsY19zZWxmKTsKKwkvKiBDcmVhdGUgY29waWVzIG9mIHRoZSBiYXNlIHNldHRpbmdzIGZvciBlYWNoIHBpcGUgKi8KKwlwbGFuZWFfcGFyYW1zID0gcGxhbmViX3BhcmFtcyA9IGc0eF93bV9pbmZvOworCisJLyogR3JhYiBhIGNvdXBsZSBvZiBnbG9iYWwgdmFsdWVzIGJlZm9yZSB3ZSBvdmVyd3JpdGUgdGhlbSAqLworCXRvdGFsX3NpemUgPSBwbGFuZWFfcGFyYW1zLmZpZm9fc2l6ZTsKKwljYWNoZWxpbmVfc2l6ZSA9IHBsYW5lYV9wYXJhbXMuY2FjaGVsaW5lX3NpemU7CisKKwkvKgorCSAqIE5vdGU6IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJmbG93IGZvciB2YXJpb3VzIGNsb2NrICYKKwkgKiBsYXRlbmN5IHZhbHVlcy4KKwkgKiBjbG9ja3MgZ28gZnJvbSBhIGZldyB0aG91c2FuZCB0byBzZXZlcmFsIGh1bmRyZWQgdGhvdXNhbmQuCisJICogbGF0ZW5jeSBpcyB1c3VhbGx5IGEgZmV3IHRob3VzYW5kCisJICovCisJZW50cmllc19yZXF1aXJlZCA9ICgocGxhbmVhX2Nsb2NrIC8gMTAwMCkgKiBwaXhlbF9zaXplICogbGF0ZW5jeV9ucykgLworCQkxMDAwOworCWVudHJpZXNfcmVxdWlyZWQgLz0gRzRYX0ZJRk9fTElORV9TSVpFOworCXBsYW5lYV93bSA9IGVudHJpZXNfcmVxdWlyZWQgKyBwbGFuZWFfcGFyYW1zLmd1YXJkX3NpemU7CisKKwllbnRyaWVzX3JlcXVpcmVkID0gKChwbGFuZWJfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX3NpemUgKiBsYXRlbmN5X25zKSAvCisJCTEwMDA7CisJZW50cmllc19yZXF1aXJlZCAvPSBHNFhfRklGT19MSU5FX1NJWkU7CisJcGxhbmViX3dtID0gZW50cmllc19yZXF1aXJlZCArIHBsYW5lYl9wYXJhbXMuZ3VhcmRfc2l6ZTsKKworCWN1cnNvcmFfd20gPSBjdXJzb3JiX3dtID0gMTY7CisJY3Vyc29yX3NyID0gMzI7CisKKwlEUk1fREVCVUcoIkZJRk8gd2F0ZXJtYXJrcyAtIEE6ICVkLCBCOiAlZFxuIiwgcGxhbmVhX3dtLCBwbGFuZWJfd20pOworCisJLyogQ2FsYyBzciBlbnRyaWVzIGZvciBvbmUgcGxhbmUgY29uZmlncyAqLworCWlmIChzcl9oZGlzcGxheSAmJiAoIXBsYW5lYV9jbG9jayB8fCAhcGxhbmViX2Nsb2NrKSkgeworCQkvKiBzZWxmLXJlZnJlc2ggaGFzIG11Y2ggaGlnaGVyIGxhdGVuY3kgKi8KKwkJY29uc3Qgc3RhdGljIGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7CisKKwkJc3JfY2xvY2sgPSBwbGFuZWFfY2xvY2sgPyBwbGFuZWFfY2xvY2sgOiBwbGFuZWJfY2xvY2s7CisJCWxpbmVfdGltZV91cyA9ICgoc3JfaGRpc3BsYXkgKiAxMDAwKSAvIHNyX2Nsb2NrKTsKKworCQkvKiBVc2UgbnMvdXMgdGhlbiBkaXZpZGUgdG8gcHJlc2VydmUgcHJlY2lzaW9uICovCisJCXNyX2VudHJpZXMgPSAoKChzcl9sYXRlbmN5X25zIC8gbGluZV90aW1lX3VzKSArIDEpICoKKwkJCSAgICAgIHBpeGVsX3NpemUgKiBzcl9oZGlzcGxheSkgLyAxMDAwOworCQlzcl9lbnRyaWVzID0gcm91bmR1cChzcl9lbnRyaWVzIC8gY2FjaGVsaW5lX3NpemUsIDEpOworCQlEUk1fREVCVUcoInNlbGYtcmVmcmVzaCBlbnRyaWVzOiAlZFxuIiwgc3JfZW50cmllcyk7CisJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOKTsKKwl9CisKKwlEUk1fREVCVUcoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogJWQsIEI6ICVkLCBTUiAlZFxuIiwKKwkJICBwbGFuZWFfd20sIHBsYW5lYl93bSwgc3JfZW50cmllcyk7CisKKwlwbGFuZWFfd20gJj0gMHgzZjsKKwlwbGFuZWJfd20gJj0gMHgzZjsKKworCUk5MTVfV1JJVEUoRFNQRlcxLCAoc3JfZW50cmllcyA8PCBEU1BGV19TUl9TSElGVCkgfAorCQkgICAoY3Vyc29yYl93bSA8PCBEU1BGV19DVVJTT1JCX1NISUZUKSB8CisJCSAgIChwbGFuZWJfd20gPDwgRFNQRldfUExBTkVCX1NISUZUKSB8IHBsYW5lYV93bSk7CisJSTkxNV9XUklURShEU1BGVzIsIChJOTE1X1JFQUQoRFNQRlcyKSAmIERTUEZXX0NVUlNPUkFfTUFTSykgfAorCQkgICAoY3Vyc29yYV93bSA8PCBEU1BGV19DVVJTT1JBX1NISUZUKSk7CisJLyogSFBMTCBvZmYgaW4gU1IgaGFzIHNvbWUgaXNzdWVzIG9uIEc0eC4uLiBkaXNhYmxlIGl0ICovCisJSTkxNV9XUklURShEU1BGVzMsIChJOTE1X1JFQUQoRFNQRlczKSAmIH5EU1BGV19IUExMX1NSX0VOKSB8CisJCSAgIChjdXJzb3Jfc3IgPDwgRFNQRldfQ1VSU09SX1NSX1NISUZUKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGk5NjVfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB1bnVzZWQsIGludCB1bnVzZWQyLApAQCAtMjU4Niw2ICsyNjU1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHBsYW5lYV9jbG9jayA9IDAsIHBsYW5lYl9jbG9jayA9IDAsIHNyX2Nsb2NrID0gMDsKIAlpbnQgZW5hYmxlZCA9IDAsIHBpeGVsX3NpemUgPSAwOwogCisJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20pCisJCXJldHVybjsKKwogCS8qIEdldCB0aGUgY2xvY2sgY29uZmlnIGZyb20gYm90aCBwbGFuZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKQEAgLTI3NjMsNyArMjgzNSw3IEBACiAKIAkvKiBGREkgbGluayAqLwogCWlmIChJU19JR0RORyhkZXYpKSB7Ci0JCWludCBsYW5lLCBsaW5rX2J3OworCQlpbnQgbGFuZSwgbGlua19idywgYnBwOwogCQkvKiBlRFAgZG9lc24ndCByZXF1aXJlIEZESSBsaW5rLCBzbyBqdXN0IHNldCBEUCBNL04KIAkJICAgYWNjb3JkaW5nIHRvIGN1cnJlbnQgbGluayBjb25maWcgKi8KIAkJaWYgKGlzX2VkcCkgewpAQCAtMjc4MiwxMCArMjg1NCw3MiBAQAogCQkJbGFuZSA9IDQ7CiAJCQlsaW5rX2J3ID0gMjcwMDAwOwogCQl9Ci0JCWlnZG5nX2NvbXB1dGVfbV9uKDMsIGxhbmUsIHRhcmdldF9jbG9jaywKKworCQkvKiBkZXRlcm1pbmUgcGFuZWwgY29sb3IgZGVwdGggKi8KKwkJdGVtcCA9IEk5MTVfUkVBRChwaXBlY29uZl9yZWcpOworCisJCXN3aXRjaCAodGVtcCAmIFBJUEVfQlBDX01BU0spIHsKKwkJY2FzZSBQSVBFXzhCUEM6CisJCQlicHAgPSAyNDsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfMTBCUEM6CisJCQlicHAgPSAzMDsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfNkJQQzoKKwkJCWJwcCA9IDE4OworCQkJYnJlYWs7CisJCWNhc2UgUElQRV8xMkJQQzoKKwkJCWJwcCA9IDM2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInVua25vd24gcGlwZSBicGMgdmFsdWVcbiIpOworCQkJYnBwID0gMjQ7CisJCX0KKworCQlpZ2RuZ19jb21wdXRlX21fbihicHAsIGxhbmUsIHRhcmdldF9jbG9jaywKIAkJCQkgIGxpbmtfYncsICZtX24pOwogCX0KIAorCS8qIElyb25sYWtlOiB0cnkgdG8gc2V0dXAgZGlzcGxheSByZWYgY2xvY2sgYmVmb3JlIERQTEwKKwkgKiBlbmFibGluZy4gVGhpcyBpcyBvbmx5IHVuZGVyIGRyaXZlcidzIGNvbnRyb2wgYWZ0ZXIKKwkgKiBQQ0ggQiBzdGVwcGluZywgcHJldmlvdXMgY2hpcHNldCBzdGVwcGluZyBzaG91bGQgYmUKKwkgKiBpZ25vcmluZyB0aGlzIHNldHRpbmcuCisJICovCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJdGVtcCA9IEk5MTVfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJLyogQWx3YXlzIGVuYWJsZSBub25zcHJlYWQgc291cmNlICovCisJCXRlbXAgJj0gfkRSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLOworCQl0ZW1wIHw9IERSRUZfTk9OU1BSRUFEX1NPVVJDRV9FTkFCTEU7CisJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKworCQl0ZW1wICY9IH5EUkVGX1NTQ19TT1VSQ0VfTUFTSzsKKwkJdGVtcCB8PSBEUkVGX1NTQ19TT1VSQ0VfRU5BQkxFOworCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJdWRlbGF5KDIwMCk7CisKKwkJaWYgKGlzX2VkcCkgeworCQkJaWYgKGRldl9wcml2LT5sdmRzX3VzZV9zc2MpIHsKKwkJCQl0ZW1wIHw9IERSRUZfU1NDMV9FTkFCTEU7CisJCQkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJCQl1ZGVsYXkoMjAwKTsKKworCQkJCXRlbXAgJj0gfkRSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfTUFTSzsKKwkJCQl0ZW1wIHw9IERSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfRE9XTlNQUkVBRDsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCX0gZWxzZSB7CisJCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX05PTlNQUkVBRDsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChJU19JR0QoZGV2KSkgewogCQlmcCA9ICgxIDw8IGNsb2NrLm4pIDw8IDE2IHwgY2xvY2subTEgPDwgOCB8IGNsb2NrLm0yOwogCQlpZiAoaGFzX3JlZHVjZWRfY2xvY2spCkBAIC0yOTM2LDYgKzMwNzAsOCBAQAogCiAJCWx2ZHMgPSBJOTE1X1JFQUQobHZkc19yZWcpOwogCQlsdmRzIHw9IExWRFNfUE9SVF9FTiB8IExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIHwgTFZEU19QSVBFQl9TRUxFQ1Q7CisJCS8qIHNldCB0aGUgY29ycmVzcG9uc2RpbmcgTFZEU19CT1JERVIgYml0ICovCisJCWx2ZHMgfD0gZGV2X3ByaXYtPmx2ZHNfYm9yZGVyX2JpdHM7CiAJCS8qIFNldCB0aGUgQjAtQjMgZGF0YSBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8KIAkJICogc2V0IHRoZSBEUExMcyBmb3IgZHVhbC1jaGFubmVsIG1vZGUgb3Igbm90LgogCQkgKi8KQEAgLTMwOTUsNyArMzIzMSw2IEBACiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpibzsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CiAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lOwogCXVpbnQzMl90IGNvbnRyb2wgPSAocGlwZSA9PSAwKSA/IENVUkFDTlRSIDogQ1VSQkNOVFI7CiAJdWludDMyX3QgYmFzZSA9IChwaXBlID09IDApID8gQ1VSQUJBU0UgOiBDVVJCQkFTRTsKIAl1aW50MzJfdCB0ZW1wID0gSTkxNV9SRUFEKGNvbnRyb2wpOwpAQCAtMzE4Miw5ICszMzE3LDYgQEAKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKIAl9CiAKLQlpZiAoKElTX0k5NjVHKGRldikgfHwgcGxhbmUgPT0gMCkpCi0JCWludGVsX3VwZGF0ZV9mYmMoY3J0YywgJmNydGMtPm1vZGUpOwotCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IGFkZHI7CkBAIC0zMjQ0LDYgKzMzNzYsMTYgQEAKIAlpbnRlbF9jcnRjLT5sdXRfYltyZWdub10gPSBibHVlID4+IDg7CiB9CiAKK3ZvaWQgaW50ZWxfY3J0Y19mYl9nYW1tYV9nZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCSAgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJKnJlZCA9IGludGVsX2NydGMtPmx1dF9yW3JlZ25vXSA8PCA4OworCSpncmVlbiA9IGludGVsX2NydGMtPmx1dF9nW3JlZ25vXSA8PCA4OworCSpibHVlID0gaW50ZWxfY3J0Yy0+bHV0X2JbcmVnbm9dIDw8IDg7Cit9CisKIHN0YXRpYyB2b2lkIGludGVsX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJIHUxNiAqYmx1ZSwgdWludDMyX3Qgc2l6ZSkKIHsKQEAgLTM4MzUsNiArMzk3Nyw3IEBACiAJLm1vZGVfc2V0X2Jhc2UgPSBpbnRlbF9waXBlX3NldF9iYXNlLAogCS5wcmVwYXJlID0gaW50ZWxfY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSBpbnRlbF9jcnRjX2NvbW1pdCwKKwkubG9hZF9sdXQgPSBpbnRlbF9jcnRjX2xvYWRfbHV0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0gewpAQCAtNDExNyw3ICs0MjYwLDkgQEAKIAkgKiBEaXNhYmxlIGNsb2NrIGdhdGluZyByZXBvcnRlZCB0byB3b3JrIGluY29ycmVjdGx5IGFjY29yZGluZyB0byB0aGUKIAkgKiBzcGVjcywgYnV0IGVuYWJsZSBhcyBtdWNoIGVsc2UgYXMgd2UgY2FuLgogCSAqLwotCWlmIChJU19HNFgoZGV2KSkgeworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKElTX0c0WChkZXYpKSB7CiAJCXVpbnQzMl90IGRzcGNsa19nYXRlOwogCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QxLCAwKTsKIAkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMiwgVkZfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfApAQCAtNDIwNSw3ICs0MzUwLDkgQEAKIAkJCWk4MzBfZ2V0X2Rpc3BsYXlfY2xvY2tfc3BlZWQ7CiAKIAkvKiBGb3IgRklGTyB3YXRlcm1hcmsgdXBkYXRlcyAqLwotCWlmIChJU19HNFgoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gTlVMTDsKKwllbHNlIGlmIChJU19HNFgoZGV2KSkKIAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gZzR4X3VwZGF0ZV93bTsKIAllbHNlIGlmIChJU19JOTY1RyhkZXYpKQogCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBpOTY1X3VwZGF0ZV93bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IGY0ODU2YTUuLmQ4MzQ0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiB7CiAJc3RydWN0IGludGVsX2RwX3ByaXYgICAqZHBfcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAKLQlEUk1fRVJST1IoImkyY19pbml0ICVzXG4iLCBuYW1lKTsKKwlEUk1fREVCVUdfS01TKCJpMmNfaW5pdCAlc1xuIiwgbmFtZSk7CiAJZHBfcHJpdi0+YWxnby5ydW5uaW5nID0gZmFsc2U7CiAJZHBfcHJpdi0+YWxnby5hZGRyZXNzID0gMDsKIAlkcF9wcml2LT5hbGdvLmF1eF9jaCA9IGludGVsX2RwX2kyY19hdXhfY2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDhhYTRiN2YuLmVmNjFmZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0xNzUsNiArMTc1LDggQEAKIGV4dGVybiB2b2lkIGludGVsZmJfcmVzdG9yZSh2b2lkKTsKIGV4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAogCQkJCSAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKTsKK2V4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkJICAgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKIAogZXh0ZXJuIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqbW9kZV9jbWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwppbmRleCA3YmE0YTIzLi4yYjBmZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTYwLDEwICs2MCwxMiBAQAogCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAogCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCiAJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKKwkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyBpbnRlbF9mYl9oZWxwZXJfZnVuY3MgPSB7CiAJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZmJfZ2FtbWFfc2V0LAorCS5nYW1tYV9nZXQgPSBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldCwKIH07CiAKIApAQCAtMTEwLDYgKzExMiw3IEBACiBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZiX3dpZHRoLAogCQkJICB1aW50MzJfdCBmYl9oZWlnaHQsIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsCiAJCQkgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLCB1aW50MzJfdCBzdXJmYWNlX2JwcCwKIAkJCSAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC0xMjIsMTIgKzEyNSwxNiBAQAogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKIAlpbnQgc2l6ZSwgcmV0LCBtbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOwogCisJLyogd2UgZG9uJ3QgZG8gcGFja2VkIDI0YnBwICovCisJaWYgKHN1cmZhY2VfYnBwID09IDI0KQorCQlzdXJmYWNlX2JwcCA9IDMyOworCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwogCi0JbW9kZV9jbWQuYnBwID0gMzI7CisJbW9kZV9jbWQuYnBwID0gc3VyZmFjZV9icHA7CiAJbW9kZV9jbWQucGl0Y2ggPSBBTElHTihtb2RlX2NtZC53aWR0aCAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KSwgNjQpOwotCW1vZGVfY21kLmRlcHRoID0gMjQ7CisJbW9kZV9jbWQuZGVwdGggPSBzdXJmYWNlX2RlcHRoOwogCiAJc2l6ZSA9IG1vZGVfY21kLnBpdGNoICogbW9kZV9jbWQuaGVpZ2h0OwogCXNpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwpAQCAtMjA1LDcgKzIxMiw3IEBACiAKIC8vCW1lbXNldChpbmZvLT5zY3JlZW5fYmFzZSwgMCwgc2l6ZSk7CiAKLQlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCk7CisJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gsIGZiLT5kZXB0aCk7CiAJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCBmYiwgZmJfd2lkdGgsIGZiX2hlaWdodCk7CiAKIAkvKiBGSVhNRTogd2UgcmVhbGx5IHNob3VsZG4ndCBleHBvc2UgbW1pbyBzcGFjZSBhdCBhbGwgKi8KQEAgLTI0Myw3ICsyNTAsNyBAQAogCWludCByZXQ7CiAKIAlEUk1fREVCVUcoIlxuIik7Ci0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCBpbnRlbGZiX2NyZWF0ZSk7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCAzMiwgaW50ZWxmYl9jcmVhdGUpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGludGVsZmJfcHJvYmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGZhMzA0ZTEuLjY2M2FiNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJY29ubmVjdG9yID0gJmludGVsX291dHB1dC0+YmFzZTsKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF9oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKLQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEKTsKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7CiAJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmludGVsX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CiAKIAlpbnRlbF9vdXRwdXQtPnR5cGUgPSBJTlRFTF9PVVRQVVRfSERNSTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCA5OGFlM2Q3Li4wNTU5OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCArIHZzeW5jX3BvczsKIAkJLyoga2VlcCB0aGUgdnN5bmMgd2lkdGggY29uc3RhbnQgKi8KIAkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgPQotCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ICsgdnN5bmNfd2lkdGg7CisJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCArIHZzeW5jX3dpZHRoOwogCQlib3JkZXIgPSAxOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX1NDQUxFX0FTUEVDVDoKQEAgLTUyNiw2ICs1MjYsMTQgQEAKIAlsdmRzX3ByaXYtPnBmaXRfY29udHJvbCA9IHBmaXRfY29udHJvbDsKIAlsdmRzX3ByaXYtPnBmaXRfcGdtX3JhdGlvcyA9IHBmaXRfcGdtX3JhdGlvczsKIAkvKgorCSAqIFdoZW4gdGhlcmUgZXhpc3RzIHRoZSBib3JkZXIsIGl0IG1lYW5zIHRoYXQgdGhlIExWRFNfQk9SRFIKKwkgKiBzaG91bGQgYmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAoYm9yZGVyKQorCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyB8PSBMVkRTX0JPUkRFUl9FTkFCTEU7CisJZWxzZQorCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyAmPSB+KExWRFNfQk9SREVSX0VOQUJMRSk7CisJLyoKIAkgKiBYWFg6IEl0IHdvdWxkIGJlIG5pY2UgdG8gc3VwcG9ydCBsb3dlciByZWZyZXNoIHJhdGVzIG9uIHRoZQogCSAqIHBhbmVscyB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24sIGFuZCBwZXJoYXBzIG1hdGNoIHRoZQogCSAqIHVzZXIncyByZXF1ZXN0ZWQgcmVmcmVzaCByYXRlLgpAQCAtNjU2LDYgKzY2NCwxNSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogTGlkIGV2ZW50cy4gTm90ZSB0aGUgdXNlIG9mICdtb2Rlc2V0X29uX2xpZCc6CisgKiAgLSB3ZSBzZXQgaXQgb24gbGlkIGNsb3NlLCBhbmQgcmVzZXQgaXQgb24gb3BlbgorICogIC0gd2UgdXNlIGl0IGFzIGEgIm9ubHkgb25jZSIgYml0IChpZSB3ZSBpZ25vcmUKKyAqICAgIGR1cGxpY2F0ZSBldmVudHMgd2hlcmUgaXQgd2FzIGFscmVhZHkgcHJvcGVybHkKKyAqICAgIHNldC9yZXNldCkKKyAqICAtIHRoZSBzdXNwZW5kL3Jlc3VtZSBwYXRocyB3aWxsIGFsc28gc2V0IGl0IHRvCisgKiAgICB6ZXJvLCBzaW5jZSB0aGV5IHJlc3RvcmUgdGhlIG1vZGUgKCJsaWQgb3BlbiIpLgorICovCiBzdGF0aWMgaW50IGludGVsX2xpZF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCiAJCQkgICAgdm9pZCAqdW51c2VkKQogewpAQCAtNjYzLDEzICs2ODAsMTkgQEAKIAkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbGlkX25vdGlmaWVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKIAotCWlmIChhY3BpX2xpZF9vcGVuKCkgJiYgIWRldl9wcml2LT5zdXNwZW5kZWQpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlpZiAoIWFjcGlfbGlkX29wZW4oKSkgeworCQlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAxOworCQlyZXR1cm4gTk9USUZZX09LOwogCX0KIAotCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldl9wcml2LT5kZXYpOworCWlmICghZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkKQorCQlyZXR1cm4gTk9USUZZX09LOworCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IGM2NGVhYjQuLjljYTkxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTA4Miw3ICsxMDgyLDggQEAKIAljb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZfbW9kZSA9IGludGVsX3R2X21vZGVfZmluZChpbnRlbF9vdXRwdXQpOwogCiAJLyogRW5zdXJlIFRWIHJlZnJlc2ggaXMgY2xvc2UgdG8gZGVzaXJlZCByZWZyZXNoICovCi0JaWYgKHR2X21vZGUgJiYgYWJzKHR2X21vZGUtPnJlZnJlc2ggLSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgPCAxMCkKKwlpZiAodHZfbW9kZSAmJiBhYnModHZfbW9kZS0+cmVmcmVzaCAtIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpICogMTAwMCkKKwkJCQk8IDEwMDApCiAJCXJldHVybiBNT0RFX09LOwogCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2ViM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACitta3JlZ3RhYmxlCisqX3JlZ19zYWZlLmgKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKaW5kZXggMDlhMjg5MjMuLmI1NzEzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtNDksNyArNDksNyBAQAogCXJhZGVvbl9jcy5vIHJhZGVvbl9iaW9zLm8gcmFkZW9uX2JlbmNobWFyay5vIHIxMDAubyByMzAwLm8gcjQyMC5vIFwKIAlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKIAlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKLQlyNjAwX2JsaXRfa21zLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IDVkNDAyMDguLmMxMWRkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTIzMTQsNyArMjMxNCw3IEBACiAJVUNIQVIgdWNTU19TdGVwOwogCVVDSEFSIHVjU1NfRGVsYXk7CiAJVUNIQVIgdWNTU19JZDsKLQlVQ0hBUiB1Y1JlY29tbWFuZGVkUmVmX0RpdjsKKwlVQ0hBUiB1Y1JlY29tbWVuZGVkUmVmX0RpdjsKIAlVQ0hBUiB1Y1NTX1JhbmdlOwkvKiBpdCB3YXMgcmVzZXJ2ZWQgZm9yIFYxMSAqLwogfSBBVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IDZhMDE1OTIuLmMxNTI4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgImF0b20uaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKIAotLyogZXZpbCBidXQgaW5jbHVkaW5nIGF0b21iaW9zLmggaXMgbXVjaCB3b3JzZSAqLwotYm9vbCByYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGluZGV4LAotCQkJCVNFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gKmNydGNfdGltaW5nLAotCQkJCWludDMyX3QgKnBpeGVsX2Nsb2NrKTsKIHN0YXRpYyB2b2lkIGF0b21iaW9zX292ZXJzY2FuX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtMjQ4LDE4ICsyNDQsMTggQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMSk7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpCiAJCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgMSk7Ci0JCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIDEpOwogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDApOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDEpOwotCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCAwKTsKIAkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkKIAkJCWF0b21iaW9zX2VuYWJsZV9jcnRjX21lbXJlcShjcnRjLCAwKTsKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjcwLDU5ICsyNjYsMTQ3IEBACiAKIHN0YXRpYyB2b2lkCiBhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTICogY3J0Y19wYXJhbSkKKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBjb252X3BhcmFtOworCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVXNpbmdEVERUaW1pbmcpOworCXUxNiBtaXNjID0gMDsKIAotCWNvbnZfcGFyYW0udXNIX1NpemUgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU2l6ZSk7Ci0JY29udl9wYXJhbS51c0hfQmxhbmtpbmdfVGltZSA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9CbGFua2luZ19UaW1lKTsKLQljb252X3BhcmFtLnVzVl9TaXplID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+dXNWX1NpemUpOwotCWNvbnZfcGFyYW0udXNWX0JsYW5raW5nX1RpbWUgPQotCSAgICBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfQmxhbmtpbmdfVGltZSk7Ci0JY29udl9wYXJhbS51c0hfU3luY09mZnNldCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9TeW5jT2Zmc2V0KTsKLQljb252X3BhcmFtLnVzSF9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnVzVl9TeW5jT2Zmc2V0ID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+dXNWX1N5bmNPZmZzZXQpOwotCWNvbnZfcGFyYW0udXNWX1N5bmNXaWR0aCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9TeW5jV2lkdGgpOwotCWNvbnZfcGFyYW0uc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0KLQkgICAgY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzKTsKLQljb252X3BhcmFtLnVjQ1JUQyA9IGNydGNfcGFyYW0tPnVjQ1JUQzsKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJYXJncy51c0hfU2l6ZSA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaGRpc3BsYXkpOworCWFyZ3MudXNIX0JsYW5raW5nX1RpbWUgPQorCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hibGFua19lbmQgLSBtb2RlLT5jcnRjX2hkaXNwbGF5KTsKKwlhcmdzLnVzVl9TaXplID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSk7CisJYXJncy51c1ZfQmxhbmtpbmdfVGltZSA9CisJICAgIGNwdV90b19sZTE2KG1vZGUtPmNydGNfdmJsYW5rX2VuZCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCWFyZ3MudXNIX1N5bmNPZmZzZXQgPQorCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y19oZGlzcGxheSk7CisJYXJncy51c0hfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwlhcmdzLnVzVl9TeW5jT2Zmc2V0ID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCWFyZ3MudXNWX1N5bmNXaWR0aCA9CisJCWNwdV90b19sZTE2KG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydCk7CisJLyphcmdzLnVjSF9Cb3JkZXIgPSBtb2RlLT5oYm9yZGVyOyovCisJLyphcmdzLnVjVl9Cb3JkZXIgPSBtb2RlLT52Ym9yZGVyOyovCisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykKKwkJbWlzYyB8PSBBVE9NX1ZTWU5DX1BPTEFSSVRZOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKQorCQltaXNjIHw9IEFUT01fSFNZTkNfUE9MQVJJVFk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19DU1lOQykKKwkJbWlzYyB8PSBBVE9NX0NPTVBPU0lURVNZTkM7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCW1pc2MgfD0gQVRPTV9JTlRFUkxBQ0U7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQorCQltaXNjIHw9IEFUT01fRE9VQkxFX0NMT0NLX01PREU7CisKKwlhcmdzLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGNwdV90b19sZTE2KG1pc2MpOworCWFyZ3MudWNDUlRDID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAKIAlwcmludGsoImV4ZWN1dGluZyBzZXQgY3J0YyBkdGQgdGltaW5nXG4iKTsKLQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZjb252X3BhcmFtKTsKKwlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAotdm9pZCBhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgICAgU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqCi0JCQkgICAgICBjcnRjX3BhcmFtKQorc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIGNvbnZfcGFyYW07CisJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVGltaW5nKTsKKwl1MTYgbWlzYyA9IDA7CiAKLQljb252X3BhcmFtLnVzSF9Ub3RhbCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9Ub3RhbCk7Ci0JY29udl9wYXJhbS51c0hfRGlzcCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9EaXNwKTsKLQljb252X3BhcmFtLnVzSF9TeW5jU3RhcnQgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1N0YXJ0KTsKLQljb252X3BhcmFtLnVzSF9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnVzVl9Ub3RhbCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9Ub3RhbCk7Ci0JY29udl9wYXJhbS51c1ZfRGlzcCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9EaXNwKTsKLQljb252X3BhcmFtLnVzVl9TeW5jU3RhcnQgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfU3luY1N0YXJ0KTsKLQljb252X3BhcmFtLnVzVl9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7Ci0JY29udl9wYXJhbS51Y0NSVEMgPSBjcnRjX3BhcmFtLT51Y0NSVEM7Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuUmlnaHQgPSBjcnRjX3BhcmFtLT51Y092ZXJzY2FuUmlnaHQ7Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuTGVmdCA9IGNydGNfcGFyYW0tPnVjT3ZlcnNjYW5MZWZ0OwotCWNvbnZfcGFyYW0udWNPdmVyc2NhbkJvdHRvbSA9IGNydGNfcGFyYW0tPnVjT3ZlcnNjYW5Cb3R0b207Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuVG9wID0gY3J0Y19wYXJhbS0+dWNPdmVyc2NhblRvcDsKLQljb252X3BhcmFtLnVjUmVzZXJ2ZWQgPSBjcnRjX3BhcmFtLT51Y1Jlc2VydmVkOworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLnVzSF9Ub3RhbCA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaHRvdGFsKTsKKwlhcmdzLnVzSF9EaXNwID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oZGlzcGxheSk7CisJYXJncy51c0hfU3luY1N0YXJ0ID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19zdGFydCk7CisJYXJncy51c0hfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwlhcmdzLnVzVl9Ub3RhbCA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfdnRvdGFsKTsKKwlhcmdzLnVzVl9EaXNwID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSk7CisJYXJncy51c1ZfU3luY1N0YXJ0ID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCk7CisJYXJncy51c1ZfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0KTsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQorCQltaXNjIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCisJCW1pc2MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQorCQltaXNjIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJbWlzYyB8PSBBVE9NX0lOVEVSTEFDRTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCisJCW1pc2MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKKworCWFyZ3Muc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0gY3B1X3RvX2xlMTYobWlzYyk7CisJYXJncy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKIAogCXByaW50aygiZXhlY3V0aW5nIHNldCBjcnRjIHRpbWluZ1xuIik7Ci0JYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmY29udl9wYXJhbSk7CisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0b21iaW9zX3NldF9zcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBlbmFibGUpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSBOVUxMOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEVuYWJsZVNwcmVhZFNwZWN0cnVtT25QUExMKTsKKwlFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiBhcmdzOworCUVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlMgbGVnYWN5X2FyZ3M7CisJdWludDE2X3QgcGVyY2VudGFnZSA9IDA7CisJdWludDhfdCB0eXBlID0gMCwgc3RlcCA9IDAsIGRlbGF5ID0gMCwgcmFuZ2UgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJCS8qIG9ubHkgZW5hYmxlIHNwcmVhZCBzcGVjdHJ1bSBvbiBMVkRTICovCisJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CisJCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCWlmIChkaWcgJiYgZGlnLT5zcykgeworCQkJCQlwZXJjZW50YWdlID0gZGlnLT5zcy0+cGVyY2VudGFnZTsKKwkJCQkJdHlwZSA9IGRpZy0+c3MtPnR5cGU7CisJCQkJCXN0ZXAgPSBkaWctPnNzLT5zdGVwOworCQkJCQlkZWxheSA9IGRpZy0+c3MtPmRlbGF5OworCQkJCQlyYW5nZSA9IGRpZy0+c3MtPnJhbmdlOworCQkJCX0gZWxzZSBpZiAoZW5hYmxlKQorCQkJCQlyZXR1cm47CisJCQl9IGVsc2UgaWYgKGVuYWJsZSkKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmFkZW9uX2VuY29kZXIpCisJCXJldHVybjsKKworCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwkJYXJncy51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSA9IGNwdV90b19sZTE2KHBlcmNlbnRhZ2UpOworCQlhcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcCA9IHN0ZXA7CisJCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bURlbGF5ID0gZGVsYXk7CisJCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bVJhbmdlID0gcmFuZ2U7CisJCWFyZ3MudWNQcGxsID0gcmFkZW9uX2NydGMtPmNydGNfaWQgPyBBVE9NX1BQTEwyIDogQVRPTV9QUExMMTsKKwkJYXJncy51Y0VuYWJsZSA9IGVuYWJsZTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZsZWdhY3lfYXJncywgMCwgc2l6ZW9mKGxlZ2FjeV9hcmdzKSk7CisJCWxlZ2FjeV9hcmdzLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlID0gY3B1X3RvX2xlMTYocGVyY2VudGFnZSk7CisJCWxlZ2FjeV9hcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJbGVnYWN5X2FyZ3MudWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5ID0gKHN0ZXAgJiAzKSA8PCAyOworCQlsZWdhY3lfYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcFNpemVfRGVsYXkgfD0gKGRlbGF5ICYgNykgPDwgNDsKKwkJbGVnYWN5X2FyZ3MudWNFbmFibGUgPSBlbmFibGU7CisJCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmxlZ2FjeV9hcmdzKTsKKwl9CiB9CiAKIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCkBAIC0zMzMsMTIgKzQxNywxMyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IE5VTEw7CiAJdWludDhfdCBmcmV2LCBjcmV2OwotCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldFBpeGVsQ2xvY2spOworCWludCBpbmRleDsKIAlTRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlMgKnNwYzFfcHRyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjIgKnNwYzJfcHRyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjMgKnNwYzNfcHRyOwotCXVpbnQzMl90IHNjbG9jayA9IG1vZGUtPmNsb2NrOworCXVpbnQzMl90IHBsbF9jbG9jayA9IG1vZGUtPmNsb2NrOworCXVpbnQzMl90IGFkanVzdGVkX2Nsb2NrOwogCXVpbnQzMl90IHJlZl9kaXYgPSAwLCBmYl9kaXYgPSAwLCBmcmFjX2ZiX2RpdiA9IDAsIHBvc3RfZGl2ID0gMDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsOwogCWludCBwbGxfZmxhZ3MgPSAwOwpAQCAtMzQ2LDggKzQzMSw2IEBACiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJdWludDMyX3Qgc3NfY250bDsKLQogCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSkKQEAgLTM1OCwxNSArNDQxLDYgQEAKIAkJCXBsbF9mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9ISUdIX0ZCX0RJVjsKIAkJZWxzZQogCQkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOwotCi0JCS8qIGRpc2FibGUgc3ByZWFkIHNwZWN0cnVtIGNsb2NraW5nIGZvciBub3cgLS0gdGhhbmtzIEhlZHkgTGFtYXJyICovCi0JCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7Ci0JCQlzc19jbnRsID0gUlJFRzMyKEFWSVZPX1AxUExMX0lOVF9TU19DTlRMKTsKLQkJCVdSRUczMihBVklWT19QMVBMTF9JTlRfU1NfQ05UTCwgc3NfY250bCAmIH4xKTsKLQkJfSBlbHNlIHsKLQkJCXNzX2NudGwgPSBSUkVHMzIoQVZJVk9fUDJQTExfSU5UX1NTX0NOVEwpOwotCQkJV1JFRzMyKEFWSVZPX1AyUExMX0lOVF9TU19DTlRMLCBzc19jbnRsICYgfjEpOwotCQl9CiAJfSBlbHNlIHsKIAkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfTEVHQUNZOwogCkBAIC0zOTMsMTQgKzQ2Nyw0MyBAQAogCQl9CiAJfQogCisJLyogRENFMysgaGFzIGFuIEFkanVzdERpc3BsYXlQbGwgdGhhdCB3aWxsIGFkanVzdCB0aGUgcGl4ZWwgY2xvY2sKKwkgKiBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgZW5jb2Rlci90cmFuc21pdHRlciB0byB3b3JrIGFyb3VuZAorCSAqIHNwZWNpYWwgaHcgcmVxdWlyZW1lbnRzLgorCSAqLworCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKKwkJQURKVVNUX0RJU1BMQVlfUExMX1BTX0FMTE9DQVRJT04gYWRqdXN0X3BsbF9hcmdzOworCisJCWlmICghZW5jb2RlcikKKwkJCXJldHVybjsKKworCQltZW1zZXQoJmFkanVzdF9wbGxfYXJncywgMCwgc2l6ZW9mKGFkanVzdF9wbGxfYXJncykpOworCQlhZGp1c3RfcGxsX2FyZ3MudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CisJCWFkanVzdF9wbGxfYXJncy51Y1RyYW5zbWl0dGVySUQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKKwkJYWRqdXN0X3BsbF9hcmdzLnVjRW5jb2RlTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CisKKwkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBBZGp1c3REaXNwbGF5UGxsKTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsCisJCQkJICAgaW5kZXgsICh1aW50MzJfdCAqKSZhZGp1c3RfcGxsX2FyZ3MpOworCQlhZGp1c3RlZF9jbG9jayA9IGxlMTZfdG9fY3B1KGFkanVzdF9wbGxfYXJncy51c1BpeGVsQ2xvY2spICogMTA7CisJfSBlbHNlIHsKKwkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJgorCQkgICAgKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkID09IEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xKSkKKwkJCWFkanVzdGVkX2Nsb2NrID0gbW9kZS0+Y2xvY2sgKiAyOworCQllbHNlCisJCQlhZGp1c3RlZF9jbG9jayA9IG1vZGUtPmNsb2NrOworCX0KKwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDFwbGw7CiAJZWxzZQogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDJwbGw7CiAKLQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBtb2RlLT5jbG9jaywgJnNjbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCXJhZGVvbl9jb21wdXRlX3BsbChwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCiAJCQkgICAmcmVmX2RpdiwgJnBvc3RfZGl2LCBwbGxfZmxhZ3MpOwogCisJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZXRQaXhlbENsb2NrKTsKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LAogCQkJICAgICAgJmNyZXYpOwogCkBAIC00MDksNyArNTEyLDcgQEAKIAkJc3dpdGNoIChjcmV2KSB7CiAJCWNhc2UgMToKIAkJCXNwYzFfcHRyID0gKFBJWEVMX0NMT0NLX1BBUkFNRVRFUlMgKikgJiBhcmdzLnNQQ0xLSW5wdXQ7Ci0JCQlzcGMxX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoc2Nsb2NrKTsKKwkJCXNwYzFfcHRyLT51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKIAkJCXNwYzFfcHRyLT51c1JlZkRpdiA9IGNwdV90b19sZTE2KHJlZl9kaXYpOwogCQkJc3BjMV9wdHItPnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOwogCQkJc3BjMV9wdHItPnVjRnJhY0ZiRGl2ID0gZnJhY19mYl9kaXY7CkBAIC00MjIsNyArNTI1LDcgQEAKIAkJY2FzZSAyOgogCQkJc3BjMl9wdHIgPQogCQkJICAgIChQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YyICopICYgYXJncy5zUENMS0lucHV0OwotCQkJc3BjMl9wdHItPnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHNjbG9jayk7CisJCQlzcGMyX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQlzcGMyX3B0ci0+dXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKIAkJCXNwYzJfcHRyLT51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCXNwYzJfcHRyLT51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwpAQCAtNDM3LDcgKzU0MCw3IEBACiAJCQkJcmV0dXJuOwogCQkJc3BjM19wdHIgPQogCQkJICAgIChQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YzICopICYgYXJncy5zUENMS0lucHV0OwotCQkJc3BjM19wdHItPnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHNjbG9jayk7CisJCQlzcGMzX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQlzcGMzX3B0ci0+dXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKIAkJCXNwYzNfcHRyLT51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCXNwYzNfcHRyLT51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwpAQCAtNTI3LDYgKzYzMCwxNiBAQAogCQlXUkVHMzIoQVZJVk9fRDFWR0FfQ09OVFJPTCwgMCk7CiAJZWxzZQogCQlXUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCwgMCk7CisKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKKwkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkKSB7CisJCQlXUkVHMzIoUjcwMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCQlXUkVHMzIoUjcwMF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJfSBlbHNlIHsKKwkJCVdSRUczMihSNzAwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJCVdSRUczMihSNzAwX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOworCQl9CisJfQogCVdSRUczMihBVklWT19EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh1MzIpIGZiX2xvY2F0aW9uKTsKIAlXUkVHMzIoQVZJVk9fRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKwpAQCAtNTYzLDYgKzY3NiwxMCBAQAogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIob2xkX2ZiKTsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2ZiLT5vYmopOwogCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc0LDEzNCArNjkxLDI0IEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIGNydGNfdGltaW5nOwotCWludCBuZWVkX3R2X3RpbWluZ3MgPSAwOwotCWJvb2wgcmV0OwogCiAJLyogVE9ETyBjb2xvciB0aWxpbmcgKi8KLQltZW1zZXQoJmNydGNfdGltaW5nLCAwLCBzaXplb2YoY3J0Y190aW1pbmcpKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCS8qIGZpbmQgdHYgc3RkICovCi0JCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKLQkJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKLQotCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkgewotCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCQkJCWlmICh0dl9kYWMpIHsKLQkJCQkJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8Ci0JCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8Ci0JCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCi0JCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAxOwotCQkJCQllbHNlCi0JCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljcnRjX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQlpZiAobmVlZF90dl90aW1pbmdzKSB7Ci0JCXJldCA9IHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHJkZXYsIG5lZWRfdHZfdGltaW5ncyAtIDEsCi0JCQkJCQkgJmNydGNfdGltaW5nLCAmYWRqdXN0ZWRfbW9kZS0+Y2xvY2spOwotCQlpZiAocmV0ID09IGZhbHNlKQotCQkJbmVlZF90dl90aW1pbmdzID0gMDsKLQl9Ci0KLQlpZiAoIW5lZWRfdHZfdGltaW5ncykgewotCQljcnRjX3RpbWluZy51c0hfVG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbDsKLQkJY3J0Y190aW1pbmcudXNIX0Rpc3AgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5OwotCQljcnRjX3RpbWluZy51c0hfU3luY1N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQkJY3J0Y190aW1pbmcudXNIX1N5bmNXaWR0aCA9Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtIGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQ7Ci0KLQkJY3J0Y190aW1pbmcudXNWX1RvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWw7Ci0JCWNydGNfdGltaW5nLnVzVl9EaXNwID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJY3J0Y190aW1pbmcudXNWX1N5bmNTdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQ7Ci0JCWNydGNfdGltaW5nLnVzVl9TeW5jV2lkdGggPQotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0OwotCi0JCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7Ci0KLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQotCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJCWNydGNfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PSBBVE9NX0lOVEVSTEFDRTsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKLQl9Ci0KKwlhdG9tYmlvc19zZXRfc3MoY3J0YywgMCk7CiAJYXRvbWJpb3NfY3J0Y19zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwotCWF0b21iaW9zX2NydGNfc2V0X3RpbWluZyhjcnRjLCAmY3J0Y190aW1pbmcpOworCWF0b21iaW9zX3NldF9zcyhjcnRjLCAxKTsKKwlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAKIAlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJYXRvbWJpb3NfY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCWVsc2UgewotCQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkgewotCQkJU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTIGNydGNfZHRkX3RpbWluZzsKLQkJCW1lbXNldCgmY3J0Y19kdGRfdGltaW5nLCAwLCBzaXplb2YoY3J0Y19kdGRfdGltaW5nKSk7Ci0KLQkJCS8qIHNldHVwIEZQIHNoYWRvdyByZWdzIG9uIFI0eHggKi8KLQkJCWNydGNfZHRkX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU2l6ZSA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JCQljcnRjX2R0ZF90aW1pbmcudXNWX1NpemUgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5OwotCQkJY3J0Y19kdGRfdGltaW5nLnVzSF9CbGFua2luZ19UaW1lID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQgLQotCQkJICAgIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JCQljcnRjX2R0ZF90aW1pbmcudXNWX0JsYW5raW5nX1RpbWUgPQotCQkJICAgIGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU3luY09mZnNldCA9Ci0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c1ZfU3luY09mZnNldCA9Ci0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU3luY1dpZHRoID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQkJCWNydGNfZHRkX3RpbWluZy51c1ZfU3luY1dpZHRoID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydDsKLQkJCS8qIGNydGNfZHRkX3RpbWluZy51Y0hfQm9yZGVyID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYm9yZGVyOyAqLwotCQkJLyogY3J0Y19kdGRfdGltaW5nLnVjVl9Cb3JkZXIgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3Zib3JkZXI7ICovCi0KLQkJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQkJCWNydGNfZHRkX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0KLQkJCQkgICAgQVRPTV9WU1lOQ19QT0xBUklUWTsKLQotCQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCQkJY3J0Y19kdGRfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PQotCQkJCSAgICBBVE9NX0hTWU5DX1BPTEFSSVRZOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQotCQkJCWNydGNfZHRkX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0KLQkJCQkgICAgQVRPTV9DT01QT1NJVEVTWU5DOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJCQljcnRjX2R0ZF90aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9Ci0JCQkJICAgIEFUT01fSU5URVJMQUNFOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCQkJY3J0Y19kdGRfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PQotCQkJCSAgICBBVE9NX0RPVUJMRV9DTE9DS19NT0RFOwotCi0JCQlhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKGNydGMsICZjcnRjX2R0ZF90aW1pbmcpOwotCQl9CisJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQorCQkJYXRvbWJpb3Nfc2V0X2NydGNfZHRkX3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAkJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAkJcmFkZW9uX2xlZ2FjeV9hdG9tX3NldF9zdXJmYWNlKGNydGMpOwogCX0KIAlhdG9tYmlvc19vdmVyc2Nhbl9zZXR1cChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKIAlhdG9tYmlvc19zY2FsZXJfc2V0dXAoY3J0Yyk7Ci0JcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczMyw2ICs3NDAsNyBAQAogCS5tb2RlX3NldF9iYXNlID0gYXRvbWJpb3NfY3J0Y19zZXRfYmFzZSwKIAkucHJlcGFyZSA9IGF0b21iaW9zX2NydGNfcHJlcGFyZSwKIAkuY29tbWl0ID0gYXRvbWJpb3NfY3J0Y19jb21taXQsCisJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCiB9OwogCiB2b2lkIHJhZGVvbl9hdG9tYmlvc19pbml0X2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oCmluZGV4IGUyYjkyYzQuLmQ0ZTZlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaApAQCAtNTcsMTMgKzU3LDQgQEAKICNkZWZpbmUJVkdBX1JFTkRFUl9DT05UUk9MCQkJCTB4MDMwMAogI2RlZmluZQkJVkdBX1ZTVEFUVVNfQ05UTF9NQVNLCQkJCTB4MDAwMzAwMDAKIAotLyogQVZJVk8gZGlzYWJsZSBWR0EgcmVuZGVyaW5nICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmFkZW9uX2F2aXZvX3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1MzIgdmdhX3JlbmRlcjsKLQl2Z2FfcmVuZGVyID0gUlJFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCk7Ci0JdmdhX3JlbmRlciAmPSB+VkdBX1ZTVEFUVVNfQ05UTF9NQVNLOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXIpOwotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKaW5kZXggZmIyMTFlNS4uMGQ3OTU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKQEAgLTU2MSw3ICs1NjEsNyBAQAogCWNoYXIgKmdwdV9wcmVmaXg7CiB9OwogCi1zdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXRfbmV3KHVuc2lnbmVkIG8pCitzdGF0aWMgc3RydWN0IG9mZnNldCAqb2Zmc2V0X25ldyh1bnNpZ25lZCBvKQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIApAQCAtNTczLDEyICs1NzMsMTIgQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIHRhYmxlX29mZnNldF9hZGQoc3RydWN0IHRhYmxlICp0LCBzdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXQpCitzdGF0aWMgdm9pZCB0YWJsZV9vZmZzZXRfYWRkKHN0cnVjdCB0YWJsZSAqdCwgc3RydWN0IG9mZnNldCAqb2Zmc2V0KQogewogCWxpc3RfYWRkX3RhaWwoJm9mZnNldC0+bGlzdCwgJnQtPm9mZnNldHMpOwogfQogCi12b2lkIHRhYmxlX2luaXQoc3RydWN0IHRhYmxlICp0KQorc3RhdGljIHZvaWQgdGFibGVfaW5pdChzdHJ1Y3QgdGFibGUgKnQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJnQtPm9mZnNldHMpOwogCXQtPm9mZnNldF9tYXggPSAwOwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJdC0+dGFibGUgPSBOVUxMOwogfQogCi12b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyB2b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKIHsKIAl1bnNpZ25lZCBubGxvb3AsIGksIGosIG4sIGMsIGlkOwogCkBAIC02MTEsNyArNjExLDcgQEAKIAlwcmludGYoIn07XG4iKTsKIH0KIAotaW50IHRhYmxlX2J1aWxkKHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyBpbnQgdGFibGVfYnVpbGQoc3RydWN0IHRhYmxlICp0KQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIAl1bnNpZ25lZCBpLCBtOwpAQCAtNjMxLDcgKzYzMSw3IEBACiB9CiAKIHN0YXRpYyBjaGFyIGdwdV9uYW1lWzEwXTsKLWludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIGludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCUZJTEUgKmZpbGU7CiAJcmVnZXhfdCBtYXNrX3JleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggYmU1MWM1Zi4uYzllOTNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicjEwMGQuaCIKKyNpbmNsdWRlICJyczEwMGQuaCIKKyNpbmNsdWRlICJydjIwMGQuaCIKKyNpbmNsdWRlICJydjI1MGQuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC02MCwxOCArNjMsNyBAQAogCiAvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgogICogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KICAqLwotaW50IHIyMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2dwdV93YWl0X2Zvcl92c3luYzIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZGVidWdmc19tY19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCiAKIC8qCiAgKiBQQ0kgR0FSVApAQCAtMTUyLDEzNiArMTQ0LDYgQEAKIAlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCi0KLS8qCi0gKiBNQwotICovCi12b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IG92MF9zY2FsZV9jbnRsLCBjcnRjX2V4dF9jbnRsLCBjcnRjX2dlbl9jbnRsLCBjcnRjMl9nZW5fY250bDsKLQotCS8qIEZJWE1FOiBpcyB0aGlzIGZ1bmN0aW9uIGNvcnJlY3QgZm9yIHJzMTAwLHJzMjAwLHJzMzAwID8gKi8KLQlpZiAocjEwMF9ndWlfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBHVUkgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCi0JLyogc3RvcCBkaXNwbGF5IGFuZCBtZW1vcnkgYWNjZXNzICovCi0Jb3YwX3NjYWxlX2NudGwgPSBSUkVHMzIoUkFERU9OX09WMF9TQ0FMRV9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX09WMF9TQ0FMRV9DTlRMLCBvdjBfc2NhbGVfY250bCAmIH5SQURFT05fU0NBTEVSX0VOQUJMRSk7Ci0JY3J0Y19leHRfY250bCA9IFJSRUczMihSQURFT05fQ1JUQ19FWFRfQ05UTCk7Ci0JV1JFRzMyKFJBREVPTl9DUlRDX0VYVF9DTlRMLCBjcnRjX2V4dF9jbnRsIHwgUkFERU9OX0NSVENfRElTUExBWV9ESVMpOwotCWNydGNfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwpOwotCi0JcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMocmRldik7Ci0KLQlXUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwsCi0JICAgICAgIChjcnRjX2dlbl9jbnRsICYgfihSQURFT05fQ1JUQ19DVVJfRU4gfCBSQURFT05fQ1JUQ19JQ09OX0VOKSkgfAotCSAgICAgICBSQURFT05fQ1JUQ19ESVNQX1JFUV9FTl9CIHwgUkFERU9OX0NSVENfRVhUX0RJU1BfRU4pOwotCi0JaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpKSB7Ci0JCWNydGMyX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCk7Ci0KLQkJcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMyKHJkZXYpOwotCQlXUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMLAotCQkgICAgICAgKGNydGMyX2dlbl9jbnRsICYKLQkJICAgICAgICB+KFJBREVPTl9DUlRDMl9DVVJfRU4gfCBSQURFT05fQ1JUQzJfSUNPTl9FTikpIHwKLQkJICAgICAgIFJBREVPTl9DUlRDMl9ESVNQX1JFUV9FTl9CKTsKLQl9Ci0KLQl1ZGVsYXkoNTAwKTsKLX0KLQotdm9pZCByMTAwX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCXIgPSByMTAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUjEwMCBNQyAhXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCS8qIE5vdmVsbCBidWcgMjA0ODgyIGZvciBSTjUwL002L003IHdpdGggOC8xNi8zMk1CIFZSQU0sCi0JICogaWYgdGhlIGFwZXJ0dXJlIGlzIDY0TUIgYnV0IHdlIGhhdmUgMzJNQiBWUkFNCi0JICogd2UgcmVwb3J0IG9ubHkgMzJNQiBWUkFNIGJ1dCB3ZSBoYXZlIHRvIHNldCBNQ19GQl9MT0NBVElPTgotCSAqIHRvIDY0TUIsIG90aGVyd2lzZSB0aGUgZ3B1IGFjY2lkZW50aWFsbHkgZGllcyAqLwotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSQURFT05fTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMihSQURFT05fTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0KLQkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJBREVPTl9CVVNfTUFTVEVSX0RJUzsKLQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCB0bXApOwotCi0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0FHUF9UT1AsIHRtcCA+PiAxNik7Ci0JCXRtcCB8PSBSRUdfU0VUKFJBREVPTl9NQ19BR1BfU1RBUlQsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+PiAxNik7Ci0JCVdSRUczMihSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzIoUkFERU9OX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSk7Ci0JfSBlbHNlIHsKLQkJV1JFRzMyKFJBREVPTl9NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzIoUkFERU9OX0FHUF9CQVNFLCAwKTsKLQl9Ci0KLQl0bXAgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKSAmIFJBREVPTl9IRFBfQVBFUl9DTlRMOwotCXRtcCB8PSAoNyA8PCAyOCk7Ci0JV1JFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgdG1wIHwgUkFERU9OX0hEUF9TT0ZUX1JFU0VUIHwgUkFERU9OX0hEUF9SRUFEX0JVRkZFUl9JTlZBTElEQVRFKTsKLQkodm9pZClSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXApOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotfQotCi1pbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXIxMDBfZ3B1X2luaXQocmRldik7Ci0JLyogRGlzYWJsZSBnYXJ0IHdoaWNoIGFsc28gZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JcjEwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHIxMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQlyMTAwX21jX3NldHVwKHJkZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHIxMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogSW50ZXJydXB0cwotICovCiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcCA9IDA7CkBAIC0zMjQsNyArMTg2LDcgQEAKIAogaW50IHIxMDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHN0YXR1cywgbXNpX3JlYXJtOwogCiAJc3RhdHVzID0gcjEwMF9pcnFfYWNrKHJkZXYpOwogCWlmICghc3RhdHVzKSB7CkBAIC0zNDcsNiArMjA5LDIxIEBACiAJCX0KIAkJc3RhdHVzID0gcjEwMF9pcnFfYWNrKHJkZXYpOwogCX0KKwlpZiAocmRldi0+bXNpX2VuYWJsZWQpIHsKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX1JTNDAwOgorCQljYXNlIENISVBfUlM0ODA6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSAmIH5SUzQwMF9NU0lfUkVBUk07CisJCQlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9BSUNfQ05UTCwgbXNpX3JlYXJtIHwgUlM0MDBfTVNJX1JFQVJNKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4pICYgflJWMzcwX01TSV9SRUFSTV9FTjsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSB8IFJWMzcwX01TSV9SRUFSTV9FTik7CisJCQlicmVhazsKKwkJfQorCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTM1OCwxMCArMjM1LDYgQEAKIAkJcmV0dXJuIFJSRUczMihSQURFT05fQ1JUQzJfQ1JOVF9GUkFNRSk7CiB9CiAKLQotLyoKLSAqIEZlbmNlIGVtaXNzaW9uCi0gKi8KIHZvaWQgcjEwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewpAQCAtMzc3LDE2ICsyNTAsMTIgQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fU1dfSU5UX0ZJUkUpOwogfQogCi0KLS8qCi0gKiBXcml0ZWJhY2sKLSAqLwogaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwKKwkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIFJBREVPTl9HUFVfUEFHRV9TSVpFLAogCQkJCQkgdHJ1ZSwKIAkJCQkJIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKIAkJCQkJIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKQEAgLTUwNCwxMCArMzczLDYgQEAKIAlyZXR1cm4gcjsKIH0KIAotCi0vKgotICogQ1AKLSAqLwogc3RhdGljIGludCByMTAwX2NwX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTYxMiw2ICs0NzcsNyBAQAogCX0KIAlyZXR1cm4gZXJyOwogfQorCiBzdGF0aWMgdm9pZCByMTAwX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKQEAgLTcxMiwxOSArNTc4LDE5IEBACiAJaW5kaXJlY3QxX3N0YXJ0ID0gMTY7CiAJLyogY3Agc2V0dXAgKi8KIAlXUkVHMzIoMHg3MTgsIHByZV93cml0ZV90aW1lciB8IChwcmVfd3JpdGVfbGltaXQgPDwgMjgpKTsKLQlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsCi0jaWZkZWYgX19CSUdfRU5ESUFOCi0JICAgICAgIFJBREVPTl9CVUZfU1dBUF8zMkJJVCB8Ci0jZW5kaWYKLQkgICAgICAgUkVHX1NFVChSQURFT05fUkJfQlVGU1osIHJiX2J1ZnN6KSB8CisJdG1wID0gKFJFR19TRVQoUkFERU9OX1JCX0JVRlNaLCByYl9idWZzeikgfAogCSAgICAgICBSRUdfU0VUKFJBREVPTl9SQl9CTEtTWiwgcmJfYmxrc3opIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fTUFYX0ZFVENILCBtYXhfZmV0Y2gpIHwKIAkgICAgICAgUkFERU9OX1JCX05PX1VQREFURSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdG1wIHw9IFJBREVPTl9CVUZfU1dBUF8zMkJJVDsKKyNlbmRpZgorCVdSRUczMihSQURFT05fQ1BfUkJfQ05UTCwgdG1wKTsKKwogCS8qIFNldCByaW5nIGFkZHJlc3MgKi8KIAlEUk1fSU5GTygicmFkZW9uOiByaW5nIGF0IDB4JTAxNmxYXG4iLCAodW5zaWduZWQgbG9uZylyZGV2LT5jcC5ncHVfYWRkcik7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9CQVNFLCByZGV2LT5jcC5ncHVfYWRkcik7CiAJLyogRm9yY2UgcmVhZCAmIHdyaXRlIHB0ciB0byAwICovCi0JdG1wID0gUlJFRzMyKFJBREVPTl9DUF9SQl9DTlRMKTsKIAlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsIHRtcCB8IFJBREVPTl9SQl9SUFRSX1dSX0VOQSk7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9SUFRSX1dSLCAwKTsKIAlXUkVHMzIoUkFERU9OX0NQX1JCX1dQVFIsIDApOwpAQCAtODYzLDEzICs3MjksMTEgQEAKIHZvaWQgcjEwMF9jc19kdW1wX3BhY2tldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIGlkeDsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeDsKIAlmb3IgKGkgPSAwOyBpIDw9IChwa3QtPmNvdW50ICsgMSk7IGkrKywgaWR4KyspIHsKIAkJRFJNX0lORk8oImliWyVkXT0weCUwOFhcbiIsIGlkeCwgaWJbaWR4XSk7CkBAIC04OTYsNyArNzYwLDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTM5LDcgKzgwMyw2IEBACiAgKi8KIGludCByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGM7CkBAIC05NDcsOCArODEwLDkgQEAKIAlpbnQgY3J0Y19pZDsKIAlpbnQgcjsKIAl1aW50MzJfdCBoZWFkZXIsIGhfaWR4LCByZWc7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCi0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJaWIgPSBwLT5pYi0+cHRyOwogCiAJLyogcGFyc2UgdGhlIHdhaXQgdW50aWwgKi8KIAlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJndhaXRyZWxvYywgcC0+aWR4KTsKQEAgLTk2MywyNCArODI3LDI0IEBACiAJCXJldHVybiByOwogCX0KIAotCWlmIChpYl9jaHVuay0+a2RhdGFbd2FpdHJlbG9jLmlkeCArIDFdICE9IFJBREVPTl9XQUlUX0NSVENfVkxJTkUpIHsKKwlpZiAocmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0cmVsb2MuaWR4ICsgMSkgIT0gUkFERU9OX1dBSVRfQ1JUQ19WTElORSkgewogCQlEUk1fRVJST1IoInZsaW5lIHdhaXQgaGFkIGlsbGVnYWwgd2FpdCB1bnRpbFxuIik7CiAJCXIgPSAtRUlOVkFMOwogCQlyZXR1cm4gcjsKIAl9CiAKIAkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLwotCXIgPSByMTAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKKwlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJnAzcmVsb2MsIHAtPmlkeCArIHdhaXRyZWxvYy5jb3VudCArIDIpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCWhfaWR4ID0gcC0+aWR4IC0gMjsKLQlwLT5pZHggKz0gd2FpdHJlbG9jLmNvdW50OwotCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50OworCXAtPmlkeCArPSB3YWl0cmVsb2MuY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKIAotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF07Ci0JY3J0Y19pZCA9IGliX2NodW5rLT5rZGF0YVtoX2lkeCArIDVdOwotCXJlZyA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF0gPj4gMjsKKwloZWFkZXIgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4KTsKKwljcnRjX2lkID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBoX2lkeCArIDUpOworCXJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOwogCW11dGV4X2xvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChwLT5yZGV2LT5kZGV2LCBjcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAJaWYgKCFvYmopIHsKQEAgLTk5NCwxNiArODU4LDE2IEBACiAKIAlpZiAoIWNydGMtPmVuYWJsZWQpIHsKIAkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgd2FpdCB1bnRpbCAqLwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7Ci0JCWliX2NodW5rLT5rZGF0YVtoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgM10gPSBQQUNLRVQyKDApOwogCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CiAJCXN3aXRjaCAocmVnKSB7CiAJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EID4+IDI7CiAJCQlicmVhazsKIAkJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBSQURFT05fQ1JUQzJfR1VJX1RSSUdfVkxJTkUgPj4gMjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTAxMSw4ICs4NzUsOCBAQAogCQkJciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHhdID0gaGVhZGVyOwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAzXSB8PSBSQURFT05fRU5HX0RJU1BMQVlfU0VMRUNUX0NSVEMxOworCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgM10gfD0gUkFERU9OX0VOR19ESVNQTEFZX1NFTEVDVF9DUlRDMTsKIAl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CkBAIC0xMDMzLDcgKzg5Nyw2IEBACiBpbnQgcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICpyZWxvY3NfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgcDNyZWxvYzsKIAl1bnNpZ25lZCBpZHg7CkBAIC0xMDQ0LDcgKzkwNyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMDU3LDcgKzkxOSw3IEBACiAJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgJnAzcmVsb2MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTEyNiw3ICs5ODgsNiBAQAogCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCSAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMTM0LDExICs5OTUsMTMgQEAKIAlpbnQgcjsKIAlpbnQgaSwgZmFjZTsKIAl1MzIgdGlsZV9mbGFncyA9IDA7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CkBAIC0xMTY2LDggKzEwMjksOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTE3OCw4ICsxMDQxLDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT5jYlswXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMDoKIAljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8xOgpAQCAtMTE5Miw3ICsxMDU1LDcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8wOgpAQCAtMTIwOCw4ICsxMDcxLDggQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzA6CkBAIC0xMjI1LDggKzEwODgsOCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMDoKQEAgLTEyNDIsMTIgKzExMDUsMTIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTI2MywxNyArMTEyNiwxNyBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKLQkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6Ci0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DTlRMOgotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKIAkJY2FzZSA3OgogCQljYXNlIDg6CiAJCWNhc2UgOToKQEAgLTEyOTEsMTMgKzExNTQsMTMgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbG9yIGJ1ZmZlciBmb3JtYXQgKCVkKSAhXG4iLAotCQkJCSAgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKLQkJc3dpdGNoIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4ZikgeworCQlzd2l0Y2ggKGlkeF92YWx1ZSAmIDB4ZikgewogCQljYXNlIDA6CiAJCQl0cmFjay0+emIuY3BwID0gMjsKIAkJCWJyZWFrOwpAQCAtMTMyMSw0NCArMTE4NCw0NCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ05UTDoKIAkJewotCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZUWF9GTVQ6Ci0JCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVEVYX1NJWkVfMDoKIAljYXNlIFJBREVPTl9QUF9URVhfU0laRV8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9TSVpFXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9TSVpFXzApIC8gODsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8wOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfUElUQ0hfMCkgLyA4OwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArIDMyOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMDoKIAljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8xOgogCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RYRklMVEVSXzApIC8gMjQ7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9NQVhfTUlQX0xFVkVMX01BU0spCisJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpZHhfdmFsdWUgJiBSQURFT05fTUFYX01JUF9MRVZFTF9NQVNLKQogCQkJCQkJID4+IFJBREVPTl9NQVhfTUlQX0xFVkVMX1NISUZUKTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI3KSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJYnJlYWs7CkBAIC0xMzY2LDE2ICsxMjI5LDE2IEBACiAJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMToKIAljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9UWEZPUk1BVF8wKSAvIDI0OwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfTk9OX1BPV0VSMikgeworCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAxOwogCQl9IGVsc2UgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDA7Ci0JCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX1dJRFRIX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9XSURUSF9NQVNLKTsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOwogCQl9Ci0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9DVUJJQ19NQVBfRU5BQkxFKQorCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0NVQklDX01BUF9FTkFCTEUpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAyOwotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgewogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9JODoKIAkJY2FzZSBSQURFT05fVFhGT1JNQVRfUkdCMzMyOgogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9ZODoKQEAgLTE0MDIsMTMgKzEyNjUsMTMgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18xOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzI6Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0bXAgPSBpZHhfdmFsdWU7CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzApIC8gNDsKIAkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDQ7IGZhY2UrKykgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOwpAQCAtMTQyNywxNSArMTI5MCwxNCBAQAogCQkJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCQkJIHN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXVuc2lnbmVkIGlkeDsKLQotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiB2YWx1ZTsKIAlpZHggPSBwa3QtPmlkeCArIDE7Ci0JaWYgKChpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgMSkgPiByYWRlb25fb2JqZWN0X3NpemUocm9iaikpIHsKKwl2YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMik7CisJaWYgKCh2YWx1ZSArIDEpID4gcmFkZW9uX29iamVjdF9zaXplKHJvYmopKSB7CiAJCURSTV9FUlJPUigiW2RybV0gQnVmZmVyIHRvbyBzbWFsbCBmb3IgUEFDS0VUMyBJTkRYX0JVRkZFUiAiCiAJCQkgICIobmVlZCAldSBoYXZlICVsdSkgIVxuIiwKLQkJCSAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArIDEsCisJCQkgIHZhbHVlICsgMSwKIAkJCSAgcmFkZW9uX29iamVjdF9zaXplKHJvYmopKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTQ0NSw1OSArMTMwNywyMCBAQAogc3RhdGljIGludCByMTAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl1bnNpZ25lZCBpZHg7Ci0JdW5zaWduZWQgaSwgYzsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CiAJaW50IHI7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3dpdGNoIChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKLQkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK107Ci0JCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKLQkJZm9yIChpID0gMDsgaSA8IChjIC0gMSk7IGkgKz0gMiwgaWR4ICs9IDMpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMl0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI0OwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKLQkJfQotCQlpZiAoYyAmIDEpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCX0KKwkJciA9IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihwLCBwa3QsIGlkeCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19JTkRYX0JVRkZFUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE1MDYsNyArMTMyOSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIocCwgcGt0LCByZWxvYy0+cm9iaik7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKQEAgLTE1MjAsMjcgKzEzNDMsMjcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT5udW1fYXJyYXlzID0gMTsKLQkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWJfY2h1bmstPmtkYXRhW2lkeCsyXSk7CisJCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikpOwogCiAJCXRyYWNrLT5hcnJheXNbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+YXJyYXlzWzBdLmVzaXplID0gdHJhY2stPnZ0eF9zaXplOwogCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT5tYXhfaW5keCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpOwogCi0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrM107CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzMpOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EOgotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4KzFdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQpAQCAtMTU0OCwxMSArMTM3MSwxMSBAQAogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbi1wYWNrZXQgdmVydGV4IGRhdGEgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EXzI6Ci0JCWlmICgoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSA+PiA0KSAmIDB4MykgIT0gMykgewogCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudDsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKQEAgLTE1NjAsMjggKzEzODMsMjggQEAKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW4tcGFja2V0IHZlcnRleCBkYXRhICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRl8yOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIG9mIHZlcnRleCBidWZmZXJzIHNldHVwIGVsc2V3aGVyZSAqLwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFhfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgb2YgdmVydGV4IGJ1ZmZlcnMgc2V0dXAgZWxzZXdoZXJlICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CkBAIC0yMDMzLDcgKzE4NTYsNyBAQAogCXIxMDBfcGxsX2VycmF0YV9hZnRlcl9kYXRhKHJkZXYpOwogfQogCi1pbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpZiAoQVNJQ19JU19STjUwKHJkZXYpKSB7CiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcm41MF9yZWdfc2FmZV9ibTsKQEAgLTIwNDIsOSArMTg2NSw4IEBACiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcjEwMF9yZWdfc2FmZV9ibTsKIAkJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjEwMF9yZWdfc2FmZV9ibSk7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIHIyMDBfaW5pdChyZGV2KTsKKwkJcjIwMF9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjM0Miw5ICsyMTY0LDExIEBACiAJCW1vZGUxID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1swXS0+YmFzZS5tb2RlOwogCQlwaXhlbF9ieXRlczEgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKIAl9Ci0JaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7Ci0JCW1vZGUyID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5tb2RlOwotCQlwaXhlbF9ieXRlczIgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKKwkJaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7CisJCQltb2RlMiA9ICZyZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UubW9kZTsKKwkJCXBpeGVsX2J5dGVzMiA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4OworCQl9CiAJfQogCiAJbWluX21lbV9lZmYuZnVsbCA9IHJmaXhlZF9jb25zdF84KDApOwpAQCAtMjU1NSw3ICsyMzc5LDcgQEAKIAkvKgogCSAgRmluZCB0aGUgdG90YWwgbGF0ZW5jeSBmb3IgdGhlIGRpc3BsYXkgZGF0YS4KIAkqLwotCWRpc3BfbGF0ZW5jeV9vdmVyaGVhZC5mdWxsID0gcmZpeGVkX2NvbnN0KDgwKTsKKwlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9jb25zdCg4KTsKIAlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9kaXYoZGlzcF9sYXRlbmN5X292ZXJoZWFkLCBzY2xrX2ZmKTsKIAltY19sYXRlbmN5X21jbGsuZnVsbCArPSBkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCArIGN1cl9sYXRlbmN5X21jbGsuZnVsbDsKIAltY19sYXRlbmN5X3NjbGsuZnVsbCArPSBkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCArIGN1cl9sYXRlbmN5X3NjbGsuZnVsbDsKQEAgLTI3NTMsOCArMjU3NywxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHIxMDBfY3NfdHJhY2tfdGV4dHVyZV9wcmludChzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlICp0KQogewogCURSTV9FUlJPUigicGl0Y2ggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnBpdGNoKTsKKwlEUk1fRVJST1IoInVzZV9waXRjaCAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT51c2VfcGl0Y2gpOwogCURSTV9FUlJPUigid2lkdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPndpZHRoKTsKKwlEUk1fRVJST1IoIndpZHRoXzExICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT53aWR0aF8xMSk7CiAJRFJNX0VSUk9SKCJoZWlnaHQgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+aGVpZ2h0KTsKKwlEUk1fRVJST1IoImhlaWdodF8xMSAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5oZWlnaHRfMTEpOwogCURSTV9FUlJPUigibnVtIGxldmVscyAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPm51bV9sZXZlbHMpOwogCURSTV9FUlJPUigiZGVwdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnR4ZGVwdGgpOwogCURSTV9FUlJPUigiYnBwICAgICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmNwcCk7CkBAIC0yODE0LDE1ICsyNjQxLDE3IEBACiAJCQkJZWxzZQogCQkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLnBpdGNoIC8gKDEgPDwgaSk7CiAJCQl9IGVsc2UgewotCQkJCXcgPSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGggLyAoMSA8PCBpKTsKKwkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoOwogCQkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKIAkJCQkJdyB8PSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGhfMTE7CisJCQkJdyA9IHcgLyAoMSA8PCBpKTsKIAkJCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLnJvdW5kdXBfdykKIAkJCQkJdyA9IHJvdW5kdXBfcG93X29mX3R3byh3KTsKIAkJCX0KLQkJCWggPSB0cmFjay0+dGV4dHVyZXNbdV0uaGVpZ2h0IC8gKDEgPDwgaSk7CisJCQloID0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodDsKIAkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKIAkJCQloIHw9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHRfMTE7CisJCQloID0gaCAvICgxIDw8IGkpOwogCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX2gpCiAJCQkJaCA9IHJvdW5kdXBfcG93X29mX3R3byhoKTsKIAkJCXNpemUgKz0gdyAqIGg7CkBAIC0zMTU3LDcgKzI5ODYsNyBAQAogCVdSRUczMihSXzAwMDc0MF9DUF9DU1FfQ05UTCwgMCk7CiAKIAkvKiBTYXZlIGZldyBDUlRDIHJlZ2lzdGVycyAqLwotCXNhdmUtPkdFTk1PX1dUID0gUlJFRzMyKFJfMDAwM0MwX0dFTk1PX1dUKTsKKwlzYXZlLT5HRU5NT19XVCA9IFJSRUc4KFJfMDAwM0MyX0dFTk1PX1dUKTsKIAlzYXZlLT5DUlRDX0VYVF9DTlRMID0gUlJFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwpOwogCXNhdmUtPkNSVENfR0VOX0NOVEwgPSBSUkVHMzIoUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCk7CiAJc2F2ZS0+Q1VSX09GRlNFVCA9IFJSRUczMihSXzAwMDI2MF9DVVJfT0ZGU0VUKTsKQEAgLTMxNjcsNyArMjk5Niw3IEBACiAJfQogCiAJLyogRGlzYWJsZSBWR0EgYXBlcnR1cmUgYWNjZXNzICovCi0JV1JFRzMyKFJfMDAwM0MwX0dFTk1PX1dULCBDXzAwMDNDMF9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBDXzAwMDNDMl9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOwogCS8qIERpc2FibGUgY3Vyc29yLCBvdmVybGF5LCBjcnRjICovCiAJV1JFRzMyKFJfMDAwMjYwX0NVUl9PRkZTRVQsIHNhdmUtPkNVUl9PRkZTRVQgfCBTXzAwMDI2MF9DVVJfTE9DSygxKSk7CiAJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwgfApAQCAtMzE5OSwxMCArMzAyOCwyNjQgQEAKIAkJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKIAl9CiAJLyogUmVzdG9yZSBDUlRDIHJlZ2lzdGVycyAqLwotCVdSRUczMihSXzAwMDNDMF9HRU5NT19XVCwgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBzYXZlLT5HRU5NT19XVCk7CiAJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwpOwogCVdSRUczMihSXzAwMDA1MF9DUlRDX0dFTl9DTlRMLCBzYXZlLT5DUlRDX0dFTl9DTlRMKTsKIAlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKIAkJV1JFRzMyKFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMLCBzYXZlLT5DUlRDMl9HRU5fQ05UTCk7CiAJfQogfQorCit2b2lkIHIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBSUkVHOChSXzAwMDNDMl9HRU5NT19XVCk7CisJV1JFRzgoUl8wMDAzQzJfR0VOTU9fV1QsIENfMDAwM0MyX1ZHQV9SQU1fRU4gJiB0bXApOworfQorCitzdGF0aWMgdm9pZCByMTAwX2RlYnVnZnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyID0gcjEwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSByMTAwX21jIGRlYnVnZnMgZmlsZS5cbiIpOworfQorCitzdGF0aWMgdm9pZCByMTAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHIxMDBfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlyMTAwX21jX3N0b3AocmRldiwgJnNhdmUpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJV1JFRzMyKFJfMDAwMTRDX01DX0FHUF9MT0NBVElPTiwKKwkJCVNfMDAwMTRDX01DX0FHUF9TVEFSVChyZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMTRDX01DX0FHUF9UT1AocmRldi0+bWMuZ3R0X2VuZCA+PiAxNikpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIGxvd2VyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKTsKKwkJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUlYyMDApCisJCQlXUkVHMzIoUl8wMDAxNUNfQUdQX0JBU0VfMiwKKwkJCQl1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSAmIDB4ZmYpOworCX0gZWxzZSB7CisJCVdSRUczMihSXzAwMDE0Q19NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIDApOworCQlpZiAocmRldi0+ZmFtaWx5ID4gQ0hJUF9SVjIwMCkKKwkJCVdSRUczMihSXzAwMDE1Q19BR1BfQkFTRV8yLCAwKTsKKwl9CisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyMTAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZW91dC5cbiIpOworCS8qIFByb2dyYW0gTUMsIHNob3VsZCBiZSBhIDMyYml0cyBsaW1pdGVkIGFkZHJlc3Mgc3BhY2UgKi8KKwlXUkVHMzIoUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04sCisJCVNfMDAwMTQ4X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHIxMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CisJLyogV2UgbmVlZCB0byBmb3JjZSBvbiBzb21lIG9mIHRoZSBibG9jayAqLworCXRtcCA9IFJSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMKTsKKwl0bXAgfD0gU18wMDAwMERfRk9SQ0VfQ1AoMSkgfCBTXzAwMDAwRF9GT1JDRV9WSVAoMSk7CisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjI1MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMjgwKSkKKwkJdG1wIHw9IFNfMDAwMDBEX0ZPUkNFX0RJU1AxKDEpIHwgU18wMDAwMERfRk9SQ0VfRElTUDIoMSk7CisJV1JFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwsIHRtcCk7Cit9CisKK3N0YXRpYyBpbnQgcjEwMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcjEwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXIxMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcjEwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcjEwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByMTAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByMTAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByMTAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyMTAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByMTAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXUzMiB0bXA7CisKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKKwlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQl0bXAgPSBHXzAwMDE1Q19NQ19GQl9TVEFSVChSUkVHMzIoUl8wMDAxNUNfTkJfVE9NKSk7CisJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSB0bXAgPDwgMTY7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOworCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7CisJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIHsKKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOworCQl9CisJfQorCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiAwOworfQorCitpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJLyogUmVnaXN0ZXIgZGVidWdmcyBmaWxlIHNwZWNpZmljIHRvIHRoaXMgZ3JvdXAgb2YgYXNpY3MgKi8KKwlyMTAwX2RlYnVnZnMocmRldik7CisJLyogRGlzYWJsZSBWR0EgKi8KKwlyMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgY29tYmlvcyBmb3IgUlM0MDAvUlM0ODAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIFNldCBhc2ljIGVycmF0YSAqLworCXIxMDBfZXJyYXRhKHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXIxMDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHIxMDBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkgeworCQlyID0gcjEwMF9wY2lfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlyMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjEwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXIxMDBfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJCXIxMDBfcGNpX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggNzBhODJlZC4uMGRhZjBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTg0LDYgKzg0LDggQEAKIAkJICAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCSAgICAgICB1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZyk7CiAKKworCiBzdGF0aWMgaW5saW5lIGludCByMTAwX3JlbG9jX3BpdGNoX29mZnNldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJCQkgIHVuc2lnbmVkIGlkeCwKQEAgLTkzLDkgKzk1LDcgQEAKIAl1MzIgdGlsZV9mbGFncyA9IDA7CiAJdTMyIHRtcDsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKLQotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiB2YWx1ZTsKIAogCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJaWYgKHIpIHsKQEAgLTEwNCw3ICsxMDQsOCBAQAogCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCXJldHVybiByOwogCX0KLQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MDAzZmZmZmY7CisJdmFsdWUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJdG1wID0gdmFsdWUgJiAweDAwM2ZmZmZmOwogCXRtcCArPSAoKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCkgPj4gMTApOwogCiAJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCkBAIC0xMTksNiArMTIwLDY0IEBACiAJfQogCiAJdG1wIHw9IHRpbGVfZmxhZ3M7Ci0JcC0+aWItPnB0cltpZHhdID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzZmMwMDAwMCkgfCB0bXA7CisJcC0+aWItPnB0cltpZHhdID0gKHZhbHVlICYgMHgzZmMwMDAwMCkgfCB0bXA7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQkJICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBjLCBpOworCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOworCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKKwlpbnQgciA9IDA7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOworCXUzMiBpZHhfdmFsdWU7CisKKwlpYiA9IHAtPmliLT5wdHI7CisJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKKwljID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgrKykgJiAweDFGOworCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKKwlmb3IgKGkgPSAwOyBpIDwgKGMgLSAxKTsgaSs9MiwgaWR4Kz0zKSB7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAorCQkJCSAgcGt0LT5vcGNvZGUpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlpYltpZHgrMV0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisKKwkJdHJhY2stPmFycmF5c1tpICsgMF0uZXNpemUgPSBpZHhfdmFsdWUgPj4gODsKKwkJdHJhY2stPmFycmF5c1tpICsgMF0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgcGFja2V0MyAlZFxuIiwKKwkJCQkgIHBrdC0+b3Bjb2RlKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWliW2lkeCsyXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmFycmF5c1tpICsgMV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGlkeF92YWx1ZSA+PiAyNDsKKwkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKKwl9CisJaWYgKGMgJiAxKSB7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAorCQkJCQkgIHBrdC0+b3Bjb2RlKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWJbaWR4KzFdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAxKSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWR4X3ZhbHVlID4+IDg7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7CisJfQorCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oCmluZGV4IGM0YjI1N2UuLmRmMjlhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmgKQEAgLTM4MSw2ICszODEsMjQgQEAKICNkZWZpbmUgICBTXzAwMDA1NF9WQ1JUQ19JRFhfTUFTVEVSKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDI0KQogI2RlZmluZSAgIEdfMDAwMDU0X1ZDUlRDX0lEWF9NQVNURVIoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4N0YpCiAjZGVmaW5lICAgQ18wMDAwNTRfVkNSVENfSURYX01BU1RFUiAgICAgICAgICAgICAgICAgICAgMHg4MEZGRkZGRgorI2RlZmluZSBSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0OAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxNENfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNEMKKyNkZWZpbmUgICBTXzAwMDE0Q19NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE0Q19NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0Q19NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNENfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTRDX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0Q19NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMTcwX0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTcwCisjZGVmaW5lICAgU18wMDAxNzBfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDE3MF9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIFJfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgIDB4MDAwMjNDCiAjZGVmaW5lICAgU18wMDAyM0NfRElTUExBWV9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKQEAgLTQwMywyNSArNDIxLDI1IEBACiAjZGVmaW5lICAgU18wMDAzNjBfQ1VSMl9MT0NLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQogI2RlZmluZSAgIEdfMDAwMzYwX0NVUjJfTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDM2MF9DVVIyX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCi0jZGVmaW5lIFJfMDAwM0MwX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwCi0jZGVmaW5lICAgU18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCi0jZGVmaW5lICAgR18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQotI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQotI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9SQU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKLSNkZWZpbmUgICBTXzAwMDNDMF9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMikKLSNkZWZpbmUgICBHXzAwMDNDMF9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MykKLSNkZWZpbmUgICBDXzAwMDNDMF9WR0FfQ0tTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYzCi0jZGVmaW5lICAgU18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCi0jZGVmaW5lICAgR18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgotI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQotI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9IU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKLSNkZWZpbmUgICBTXzAwMDNDMF9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKLSNkZWZpbmUgICBHXzAwMDNDMF9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDNDMF9WR0FfVlNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lIFJfMDAwM0MyX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwCisjZGVmaW5lICAgU18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IgICAgICAgICAgICAgICAgMHhGRQorI2RlZmluZSAgIFNfMDAwM0MyX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwM0MyX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX1ZHQV9SQU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkQKKyNkZWZpbmUgICBTXzAwMDNDMl9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgICBHXzAwMDNDMl9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDNDMl9WR0FfQ0tTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYzCisjZGVmaW5lICAgU18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwgICAgICAgICAgICAgICAgICAgMHhERgorI2RlZmluZSAgIFNfMDAwM0MyX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwM0MyX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX1ZHQV9IU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4QkYKKyNkZWZpbmUgICBTXzAwMDNDMl9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDNDMl9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMl9WR0FfVlNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweDdGCiAjZGVmaW5lIFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0Y4CiAjZGVmaW5lICAgU18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCiAjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCkBAIC01NDUsNiArNTYzLDQ2IEBACiAjZGVmaW5lICAgU18wMDA3NzRfU0NSQVRDSF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkZGRkYpIDw8IDUpCiAjZGVmaW5lICAgR18wMDA3NzRfU0NSQVRDSF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDdGRkZGRkYpCiAjZGVmaW5lICAgQ18wMDA3NzRfU0NSQVRDSF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCiAjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCiAjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKQEAgLTYwNCw0ICs2NjIsNTMgQEAKICNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgogCisKKyNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQKKyNkZWZpbmUgICBTXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDAwRF9TQ0xLX1NSQ19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY4CisjZGVmaW5lICAgU18wMDAwMERfVENMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfVENMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfVENMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjhGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0NQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0hEUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSERQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSURDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1ZJUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVklQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RBTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RETSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVERNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwppbmRleCA1NjhjNzRiLi5lYjc0MGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwpAQCAtOTYsNyArOTYsNiBAQAogCQkgICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJICAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMDUsMTEgKzEwNCwxMSBAQAogCWludCBpOwogCWludCBmYWNlOwogCXUzMiB0aWxlX2ZsYWdzID0gMDsKKwl1MzIgaWR4X3ZhbHVlOwogCiAJaWIgPSBwLT5pYi0+cHRyOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7Ci0KKwlpZHhfdmFsdWUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CkBAIC0xMzcsOCArMTM2LDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT56Yi5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUk9GRlNFVDoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE0OSw4ICsxNDgsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMDoKIAljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMToKQEAgLTE2Niw3ICsxNjUsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8wOgpAQCAtMjA4LDEyICsyMDcsMTIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMjI5LDE3ICsyMjgsMTcgQEAKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9DT0xPUl9NSUNST1RJTEVfRU5BQkxFOwogCi0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgfigweDcgPDwgMTYpOworCQl0bXAgPSBpZHhfdmFsdWUgJiB+KDB4NyA8PCAxNik7CiAJCXRtcCB8PSB0aWxlX2ZsYWdzOwogCQlpYltpZHhdID0gdG1wOwogCi0JCXRyYWNrLT5jYlswXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKKwkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9ERVBUSFBJVENIOgotCQl0cmFjay0+emIucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CisJCXRyYWNrLT56Yi5waXRjaCA9IGlkeF92YWx1ZSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ05UTDoKLQkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSB7CiAJCWNhc2UgNzoKIAkJY2FzZSA4OgogCQljYXNlIDk6CkBAIC0yNTcsMTggKzI1NiwxOCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSk7CisJCQkJICAoKGlkeF92YWx1ZSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIWFlfT0ZGU0VUX0VOQUJMRSkgeworCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIWFlfT0ZGU0VUX0VOQUJMRSkgewogCQkJRFJNX0VSUk9SKCJObyBzdXBwb3J0IGZvciBkZXB0aCB4eSBvZmZzZXQgaW4ga21zXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1pfRU5BQkxFKTsKKwkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGlkeF92YWx1ZSAmIFJBREVPTl9aX0VOQUJMRSk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMOgotCQlzd2l0Y2ggKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHhmKSB7CisJCXN3aXRjaCAoaWR4X3ZhbHVlICYgMHhmKSB7CiAJCWNhc2UgMDoKIAkJCXRyYWNrLT56Yi5jcHAgPSAyOwogCQkJYnJlYWs7CkBAIC0yOTIsMjcgKzI5MSwyNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ05UTDoKIAkJewotCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgMHgyMTBjOgogCQkvKiBWQVBfVkZfTUFYX1ZUWF9JTkRYICovCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMEZGRkZGRlVMOworCQl0cmFjay0+bWF4X2luZHggPSBpZHhfdmFsdWUgJiAweDAwRkZGRkZGVUw7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9TRV9WVFhfRk1UXzA6Ci0JCXRyYWNrLT52dHhfc2l6ZSA9IHIyMDBfZ2V0X3Z0eF9zaXplXzAoaWJfY2h1bmstPmtkYXRhW2lkeF0pOworCQl0cmFjay0+dnR4X3NpemUgPSByMjAwX2dldF92dHhfc2l6ZV8wKGlkeF92YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9TRV9WVFhfRk1UXzE6Ci0JCXRyYWNrLT52dHhfc2l6ZSArPSByMjAwX2dldF92dHhfc2l6ZV8xKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplICs9IHIyMDBfZ2V0X3Z0eF9zaXplXzEoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYU0laRV8wOgogCWNhc2UgUjIwMF9QUF9UWFNJWkVfMToKQEAgLTMyMSw4ICszMjAsOCBAQAogCWNhc2UgUjIwMF9QUF9UWFNJWkVfNDoKIAljYXNlIFIyMDBfUFBfVFhTSVpFXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWFNJWkVfMCkgLyAzMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzA6CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMToKQEAgLTMzMSw3ICszMzAsNyBAQAogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzQ6CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYUElUQ0hfMCkgLyAzMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAzMjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWR4X3ZhbHVlICsgMzI7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8wOgogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8xOgpAQCAtMzQwLDEyICszMzksMTIgQEAKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfNDoKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYRklMVEVSXzApIC8gMzI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFIyMDBfTUFYX01JUF9MRVZFTF9NQVNLKQorCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9ICgoaWR4X3ZhbHVlICYgUjIwMF9NQVhfTUlQX0xFVkVMX01BU0spCiAJCQkJCQkgPj4gUjIwMF9NQVhfTUlQX0xFVkVMX1NISUZUKTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI3KSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJYnJlYWs7CkBAIC0zNjQsOCArMzYzLDggQEAKIAljYXNlIFIyMDBfUFBfVFhGT1JNQVRfWF80OgogCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF9YXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZPUk1BVF9YXzApIC8gMzI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDc7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweDM7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gaWR4X3ZhbHVlICYgMHg3OworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDE2KSAmIDB4MzsKIAkJLyogMkQsIDNELCBDVUJFICovCiAJCXN3aXRjaCAodG1wKSB7CiAJCWNhc2UgMDoKQEAgLTM4OSwxNCArMzg4LDE0IEBACiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzQ6CiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZPUk1BVF8wKSAvIDMyOwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSMjAwX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKKwkJaWYgKGlkeF92YWx1ZSAmIFIyMDBfVFhGT1JNQVRfTk9OX1BPV0VSMikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDE7CiAJCX0gZWxzZSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gMDsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOwotCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfTUFTSyk7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWR4X3ZhbHVlID4+IFJBREVPTl9UWEZPUk1BVF9XSURUSF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfV0lEVEhfTUFTSyk7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfTUFTSyk7CiAJCX0KLQkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfRk9STUFUX01BU0spKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKIAkJY2FzZSBSMjAwX1RYRk9STUFUX0k4OgogCQljYXNlIFIyMDBfVFhGT1JNQVRfUkdCMzMyOgogCQljYXNlIFIyMDBfVFhGT1JNQVRfWTg6CkBAIC00MjQsOCArNDIzLDggQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzA6CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzE6CkBAIC00MzMsNyArNDMyLDcgQEAKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMzoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNDoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNToKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRtcCA9IGlkeF92YWx1ZTsKIAkJaSA9IChyZWcgLSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzApIC8gMzI7CiAJCWZvciAoZmFjZSA9IDA7IGZhY2UgPCA0OyBmYWNlKyspIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ud2lkdGggPSAxIDw8ICgodG1wID4+IChmYWNlICogOCkpICYgMHhmKTsKQEAgLTQ0OCw5ICs0NDcsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibSA9IHIyMDBfcmVnX3NhZmVfYm07CiAJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjIwMF9yZWdfc2FmZV9ibSk7Ci0JcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IGJiMTUxZWMuLjJmNDNlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC0zMyw0MyArMzMsMTYgQEAKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicjEwMF90cmFjay5oIgogI2luY2x1ZGUgInIzMDBkLmgiCi0KKyNpbmNsdWRlICJydjM1MGQuaCIKICNpbmNsdWRlICJyMzAwX3JlZ19zYWZlLmgiCiAKLS8qIHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotaW50IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19zZXR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2NzX3BhY2tldF9wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAotCQkJIHVuc2lnbmVkIGlkeCk7Ci1pbnQgcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApOwotaW50IHIxMDBfY3NfcGFyc2VfcGFja2V0MChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKLQkJCSAgY29uc3QgdW5zaWduZWQgKmF1dGgsIHVuc2lnbmVkIG4sCi0JCQkgIHJhZGVvbl9wYWNrZXQwX2NoZWNrX3QgY2hlY2spOwotaW50IHIxMDBfY3NfdHJhY2tfY2hlY2tfcGt0M19pbmR4X2J1ZmZlcihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCQkJIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCi0JCQkJCSBzdHJ1Y3QgcmFkZW9uX29iamVjdCAqcm9iaik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiByMzAwLHIzNTAscnYzNTAscnYzNzAscnYzODAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCi12b2lkIHIzMDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQorLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwICovCiAKIC8qCiAgKiBydjM3MCxydjM4MCBQQ0lFIEdBUlQKICAqLworc3RhdGljIGludCBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wOwpAQCAtMTQwLDcgKzExMyw3IEBACiAJdG1wID0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDQwOTY7CisJdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9MTywgdG1wKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX1NUQVJUX0hJLCAwKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9ISSwgMCk7CkBAIC0xODIsNTkgKzE1NSw2IEBACiAJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAotLyoKLSAqIE1DCi0gKi8KLWludCByMzAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JaW50IHI7Ci0KLQlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Ci0JfQotCi0JcjMwMF9ncHVfaW5pdChyZGV2KTsKLQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKLQkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JfQotCi0JLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JLyogUHJvZ3JhbSBHUFUgbWVtb3J5IHNwYWNlICovCi0JcjEwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHIzMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JcjEwMF9tY19zZXR1cChyZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByMzAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEZlbmNlIGVtaXNzaW9uCi0gKi8KIHZvaWQgcjMwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewpAQCAtMjYwLDEwICsxODAsNiBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9TV19JTlRfRklSRSk7CiB9CiAKLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KIGludCByMzAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgIHVpbnQ2NF90IHNyY19vZmZzZXQsCiAJCSAgdWludDY0X3QgZHN0X29mZnNldCwKQEAgLTU4MiwxMSArNDk4LDYgQEAKIAlyMTAwX3ZyYW1faW5pdF9zaXplcyhyZGV2KTsKIH0KIAotCi0vKgotICogUENJRSBMYW5lcwotICovCi0KIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcykKIHsKIAl1aW50MzJfdCBsaW5rX3dpZHRoX2NudGwsIG1hc2s7CkBAIC02NDYsMTAgKzU1Nyw2IEBACiAKIH0KIAotCi0vKgotICogRGVidWdmcyBpbmZvCi0gKi8KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CkBAIC02ODAsNyArNTg3LDcgQEAKIH07CiAjZW5kaWYKIAotaW50IHJ2MzcwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcnYzNzBfcGNpZV9nYXJ0X2luZm9fbGlzdCwgMSk7CkBAIC02ODksMjUgKzU5NiwyMiBAQAogI2VuZGlmCiB9CiAKLQotLyoKLSAqIENTIGZ1bmN0aW9ucwotICovCiBzdGF0aWMgaW50IHIzMDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1aW50MzJfdCB0bXAsIHRpbGVfZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGk7CiAJaW50IHI7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOworCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwogCXN3aXRjaChyZWcpIHsKIAljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6CiAJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKQEAgLTczOCw4ICs2NDIsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPmNiW2ldLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPmNiW2ldLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmNiW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIzMDBfWkJfREVQVEhPRkZTRVQ6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC03NTAsOCArNjU0LDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT56Yi5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1RYX09GRlNFVF8wOgogCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCs0OgpAQCAtNzc3LDMyICs2ODEsMzIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCS8qIFRyYWNrZWQgcmVnaXN0ZXJzICovCiAJY2FzZSAweDIwODQ6CiAJCS8qIFZBUF9WRl9DTlRMICovCi0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgMHgyMEI0OgogCQkvKiBWQVBfVlRYX1NJWkUgKi8KLQkJdHJhY2stPnZ0eF9zaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDdGOworCQl0cmFjay0+dnR4X3NpemUgPSBpZHhfdmFsdWUgJiAweDdGOwogCQlicmVhazsKIAljYXNlIDB4MjEzNDoKIAkJLyogVkFQX1ZGX01BWF9WVFhfSU5EWCAqLwotCQl0cmFjay0+bWF4X2luZHggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MDBGRkZGRkZVTDsKKwkJdHJhY2stPm1heF9pbmR4ID0gaWR4X3ZhbHVlICYgMHgwMEZGRkZGRlVMOwogCQlicmVhazsKIAljYXNlIDB4NDNFNDoKIAkJLyogU0NfU0NJU1NPUjEgKi8KLQkJdHJhY2stPm1heHkgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDEzKSAmIDB4MUZGRikgKyAxOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDEzKSAmIDB4MUZGRikgKyAxOwogCQlpZiAocC0+cmRldi0+ZmFtaWx5IDwgQ0hJUF9SVjUxNSkgewogCQkJdHJhY2stPm1heHkgLT0gMTQ0MDsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4NEUwMDoKIAkJLyogUkIzRF9DQ1RMICovCi0JCXRyYWNrLT5udW1fY2IgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDUpICYgMHgzKSArIDE7CisJCXRyYWNrLT5udW1fY2IgPSAoKGlkeF92YWx1ZSA+PiA1KSAmIDB4MykgKyAxOwogCQlicmVhazsKIAljYXNlIDB4NEUzODoKIAljYXNlIDB4NEUzQzoKQEAgLTgyNSwxMyArNzI5LDEzIEBACiAJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQogCQkJdGlsZV9mbGFncyB8PSBSMzAwX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKIAkJaSA9IChyZWcgLSAweDRFMzgpID4+IDI7Ci0JCXRyYWNrLT5jYltpXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZFOwotCQlzd2l0Y2ggKCgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjEpICYgMHhGKSkgeworCQl0cmFjay0+Y2JbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkU7CisJCXN3aXRjaCAoKChpZHhfdmFsdWUgPj4gMjEpICYgMHhGKSkgewogCQljYXNlIDk6CiAJCWNhc2UgMTE6CiAJCWNhc2UgMTI6CkBAIC04NTQsMTMgKzc1OCwxMyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIxKSAmIDB4RikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gMjEpICYgMHhGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4NEYwMDoKIAkJLyogWkJfQ05UTCAqLwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAyKSB7CisJCWlmIChpZHhfdmFsdWUgJiAyKSB7CiAJCQl0cmFjay0+el9lbmFibGVkID0gdHJ1ZTsKIAkJfSBlbHNlIHsKIAkJCXRyYWNrLT56X2VuYWJsZWQgPSBmYWxzZTsKQEAgLTg2OCw3ICs3NzIsNyBAQAogCQlicmVhazsKIAljYXNlIDB4NEYxMDoKIAkJLyogWkJfRk9STUFUICovCi0JCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHhGKSkgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgJiAweEYpKSB7CiAJCWNhc2UgMDoKIAkJY2FzZSAxOgogCQkJdHJhY2stPnpiLmNwcCA9IDI7CkBAIC04NzgsNyArNzgyLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHogYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweEYpKTsKKwkJCQkgIChpZHhfdmFsdWUgJiAweEYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwpAQCAtODk3LDE3ICs4MDEsMTcgQEAKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfREVQVEhNSUNST1RJTEVfVElMRUQ7OwogCi0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgfigweDcgPDwgMTYpOworCQl0bXAgPSBpZHhfdmFsdWUgJiB+KDB4NyA8PCAxNik7CiAJCXRtcCB8PSB0aWxlX2ZsYWdzOwogCQlpYltpZHhdID0gdG1wOwogCi0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZDOworCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkM7CiAJCWJyZWFrOwogCWNhc2UgMHg0MTA0OgogCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQkJYm9vbCBlbmFibGVkOwogCi0JCQllbmFibGVkID0gISEoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAoMSA8PCBpKSk7CisJCQllbmFibGVkID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgaSkpOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSBlbmFibGVkOwogCQl9CiAJCWJyZWFrOwpAQCAtOTI5LDkgKzgzMyw5IEBACiAJY2FzZSAweDQ0RkM6CiAJCS8qIFRYX0ZPUk1BVDFfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NEMwKSA+PiAyOwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjUpICYgMHgzOworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDI1KSAmIDB4MzsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnRleF9jb29yZF90eXBlID0gdG1wOwotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MUYpKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSAmIDB4MUYpKSB7CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWDg6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWTRYNDoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aM1kzWDI6CkBAIC05NzEsNyArODc1LDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHRleHR1cmUgZm9ybWF0ICV1XG4iLAotCQkJCSAgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgxRikpOworCQkJCSAgKGlkeF92YWx1ZSAmIDB4MUYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTk5NCwxMSArODk4LDExIEBACiAJY2FzZSAweDQ0M0M6CiAJCS8qIFRYX0ZJTFRFUjBfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NDAwKSA+PiAyOwotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4NzsKKwkJdG1wID0gaWR4X3ZhbHVlICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDQgfHwgdG1wID09IDYpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKIAkJfQotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMykgJiAweDc7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNCB8fCB0bXAgPT0gNikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOwogCQl9CkBAIC0xMDIxLDEyICs5MjUsMTIgQEAKIAljYXNlIDB4NDUzQzoKIAkJLyogVFhfRk9STUFUMl9bMC0xNV0gKi8KIAkJaSA9IChyZWcgLSAweDQ1MDApID4+IDI7Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZGOworCQl0bXAgPSBpZHhfdmFsdWUgJiAweDNGRkY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IHRtcCArIDE7CiAJCWlmIChwLT5yZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkgewotCQkJdG1wID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNSkgJiAxKSA8PCAxMTsKKwkJCXRtcCA9ICgoaWR4X3ZhbHVlID4+IDE1KSAmIDEpIDw8IDExOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoXzExID0gdG1wOwotCQkJdG1wID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAxKSA8PCAxMTsKKwkJCXRtcCA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDEpIDw8IDExOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodF8xMSA9IHRtcDsKIAkJfQogCQlicmVhazsKQEAgLTEwNDgsMTUgKzk1MiwxNSBAQAogCWNhc2UgMHg0NEJDOgogCQkvKiBUWF9GT1JNQVQwX1swLTE1XSAqLwogCQlpID0gKHJlZyAtIDB4NDQ4MCkgPj4gMjsKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDdGRjsKKwkJdG1wID0gaWR4X3ZhbHVlICYgMHg3RkY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IHRtcCArIDE7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxMSkgJiAweDdGRjsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAxMSkgJiAweDdGRjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IHRtcCArIDE7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNikgJiAweEY7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjYpICYgMHhGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9IHRtcDsKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAoMSA8PCAzMSk7CisJCXRtcCA9IGlkeF92YWx1ZSAmICgxIDw8IDMxKTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9ICEhdG1wOwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjIpICYgMHhGOworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDIyKSAmIDB4RjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSB0bXA7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9aUEFTU19BRERSOgpAQCAtMTA2Nyw3ICs5NzEsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSAweDRiZTg6CiAJCS8qIHZhbGlkIHJlZ2lzdGVyIG9ubHkgb24gUlY1MzAgKi8KQEAgLTEwODUsNjAgKzk4OSwyMCBAQAogc3RhdGljIGludCByMzAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwotCiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1bnNpZ25lZCBpZHg7Ci0JdW5zaWduZWQgaSwgYzsKIAlpbnQgcjsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeCArIDE7CiAJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKIAlzd2l0Y2gocGt0LT5vcGNvZGUpIHsKIAljYXNlIFBBQ0tFVDNfM0RfTE9BRF9WQlBOVFI6Ci0JCWMgPSBpYl9jaHVuay0+a2RhdGFbaWR4KytdICYgMHgxRjsKLQkJdHJhY2stPm51bV9hcnJheXMgPSBjOwotCQlmb3IgKGkgPSAwOyBpIDwgKGMgLSAxKTsgaSs9MiwgaWR4Kz0zKSB7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDg7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOwotCQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJCWlmIChyKSB7Ci0JCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgcGFja2V0MyAlZFxuIiwKLQkJCQkJICBwa3QtPm9wY29kZSk7Ci0JCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCXJldHVybiByOwotCQkJfQotCQkJaWJbaWR4KzJdID0gaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0ucm9iaiA9IHJlbG9jLT5yb2JqOwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNDsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDFdLmVzaXplICY9IDB4N0Y7Ci0JCX0KLQkJaWYgKGMgJiAxKSB7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDg7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOwotCQl9CisJCXIgPSByMTAwX3BhY2tldDNfbG9hZF92YnBudHIocCwgcGt0LCBpZHgpOworCQlpZiAocikKKwkJCXJldHVybiByOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfSU5EWF9CVUZGRVI6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0xMTQ3LDcgKzEwMTEsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4KzFdID0gaWJfY2h1bmstPmtkYXRhW2lkeCsxXSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHgrMV0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIocCwgcGt0LCByZWxvYy0+cm9iaik7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKQEAgLTExNTgsMTEgKzEwMjIsMTEgQEAKIAkJLyogTnVtYmVyIG9mIGR3b3JkcyBpcyB2dHhfc2l6ZSAqIChudW1fdmVydGljZXMgLSAxKQogCQkgKiBQUklNX1dBTEsgbXVzdCBiZSBlcXVhbCB0byAzIHZlcnRleCBkYXRhIGluIGVtYmVkZGVkCiAJCSAqIGluIGNtZCBzdHJlYW0gKi8KLQkJaWYgKCgoaWJfY2h1bmstPmtkYXRhW2lkeCsxXSA+PiA0KSAmIDB4MykgIT0gMykgeworCQlpZiAoKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpID4+IDQpICYgMHgzKSAhPSAzKSB7CiAJCQlEUk1fRVJST1IoIlBSSU1fV0FMSyBtdXN0IGJlIDMgZm9yIElNTUQgZHJhd1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewpAQCAtMTE3MywxMSArMTAzNywxMSBAQAogCQkvKiBOdW1iZXIgb2YgZHdvcmRzIGlzIHZ0eF9zaXplICogKG51bV92ZXJ0aWNlcyAtIDEpCiAJCSAqIFBSSU1fV0FMSyBtdXN0IGJlIGVxdWFsIHRvIDMgdmVydGV4IGRhdGEgaW4gZW1iZWRkZWQKIAkJICogaW4gY21kIHN0cmVhbSAqLwotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiA0KSAmIDB4MykgIT0gMykgeworCQlpZiAoKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQ7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKQEAgLTExODUsMjggKzEwNDksMjggQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUZfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTkRYXzI6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwpAQCAtMTI2NSwxMiArMTEyOSw2IEBACiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjMwMF9yZWdfc2FmZV9ibSk7CiB9CiAKLWludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcjMwMF9zZXRfcmVnX3NhZmUocmRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgcjMwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXN0cnVjdCByMTAwX21jX3NhdmUgc2F2ZTsKQEAgLTEzMDQsMyArMTE2MiwxOTggQEAKIAkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CiAJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogfQorCit2b2lkIHIzMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CisJLyogV2UgbmVlZCB0byBmb3JjZSBvbiBzb21lIG9mIHRoZSBibG9jayAqLworCXRtcCA9IFJSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMKTsKKwl0bXAgfD0gU18wMDAwMERfRk9SQ0VfQ1AoMSkgfCBTXzAwMDAwRF9GT1JDRV9WSVAoMSk7CisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjM1MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzgwKSkKKwkJdG1wIHw9IFNfMDAwMDBEX0ZPUkNFX1ZBUCgxKTsKKwlXUkVHMzJfUExMKFJfMDAwMDBEX1NDTEtfQ05UTCwgdG1wKTsKK30KKworc3RhdGljIGludCByMzAwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyMzAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyMzAwX2dwdV9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCisJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJciA9IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcjEwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByMzAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcjMwMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcjMwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcjEwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHIzMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMzAwX3N1c3BlbmQocmRldik7CisJcjEwMF9jcF9maW5pKHJkZXYpOworCXIxMDBfd2JfZmluaShyZGV2KTsKKwlyMTAwX2liX2ZpbmkocmRldik7CisJcmFkZW9uX2dlbV9maW5pKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcjMwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJLyogRGlzYWJsZSBWR0EgKi8KKwlyMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgY29tYmlvcyBmb3IgUlM0MDAvUlM0ODAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIFNldCBhc2ljIGVycmF0YSAqLworCXIzMDBfZXJyYXRhKHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXIzMDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKSB7CisJCXIgPSByMTAwX3BjaV9nYXJ0X2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCXIzMDBfc2V0X3JlZ19zYWZlKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByMzAwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcjMwMF9zdXNwZW5kKHJkZXYpOworCQlyMTAwX2NwX2ZpbmkocmRldik7CisJCXIxMDBfd2JfZmluaShyZGV2KTsKKwkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oCmluZGV4IGQ0ZmEzZWIuLjRjNzMxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmgKQEAgLTk2LDYgKzk2LDIxMSBAQAogI2RlZmluZSAgIFNfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKICNkZWZpbmUgICBHXzAwMDE3MF9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCiAjZGVmaW5lICAgQ18wMDAxNzBfQUdQX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKIAogCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RETSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RWX1NDTEsgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVQlBJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX09WMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IDQ5YTJmZGMuLjFjZWZkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC0xNTUsNiArMTU1LDkgQEAKIHN0YXRpYyB2b2lkIHI0MjBfY2xvY2tfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiBzY2xrX2NudGw7CisKKwlpZiAocmFkZW9uX2R5bmNsa3MgIT0gLTEgJiYgcmFkZW9uX2R5bmNsa3MpCisJCXJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CiAJc2Nsa19jbnRsID0gUlJFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwpOwogCXNjbGtfY250bCB8PSBTXzAwMDAwRF9GT1JDRV9DUCgxKSB8IFNfMDAwMDBEX0ZPUkNFX1ZJUCgxKTsKIAlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjQyMCkKQEAgLTE2Nyw2ICsxNzAsOCBAQAogCWludCByOwogCiAJcjMwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXI0MjBfY2xvY2tfcmVzdW1lKHJkZXYpOwogCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCiAJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKQEAgLTI2Nyw3ICsyNzIsNiBAQAogewogCWludCByOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IHRydWU7CiAJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwpAQCAtMzA3LDYgKzMxMSw4IEBACiAJfQogCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwogCXIzMDBfdnJhbV9pbmZvKHJkZXYpOwogCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmgKaW5kZXggYTQ4YTdkYi4uZmM3OGQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMGQuaApAQCAtMjEyLDkgKzIxMiw5IEBACiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9FMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCi0jZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQotI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1ZBUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9WQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9JRENUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCkBAIC0yMjQsMjQgKzIyNCwyNCBAQAogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1VTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFZfU0NMSyAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1VCUElDICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfT1YwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCmluZGV4IGUxZDVlMDMuLjdiYWE3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKQEAgLTM4NCw5ICszODQsMTYgQEAKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxR1JQSF9USUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMCkKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxR1JQSF9NQUNST19BRERSRVNTX01PREUgICAgICAgICAgICAgICAgICAoMSA8PCAyMSkKIAorLyogVGhlIFI3eHggKl9ISUdIIHN1cmZhY2UgcmVncyBhcmUgYmFja3dhcmRzOyB0aGUgRDEgcmVncyBhcmUgaW4gdGhlIEQyCisgKiBibG9jayBhbmQgdmljZSB2ZXJzYS4gIFRoaXMgYXBwbGllcyB0byBHUlBILCBDVVIsIGV0Yy4KKyAqLwogI2RlZmluZSBBVklWT19EMUdSUEhfTFVUX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEwOAogI2RlZmluZSBBVklWT19EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4NjExMAorI2RlZmluZSBSNzAwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgIDB4NjkxNAorI2RlZmluZSBSNzAwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgIDB4NjExNAogI2RlZmluZSBBVklWT19EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4NjExOAorI2RlZmluZSBSNzAwX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgIDB4NjkxYworI2RlZmluZSBSNzAwX0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgIDB4NjExYwogI2RlZmluZSBBVklWT19EMUdSUEhfUElUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyMAogI2RlZmluZSBBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyNAogI2RlZmluZSBBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyOApAQCAtNDA0LDYgKzQxMSw4IEBACiAjICAgICAgIGRlZmluZSBBVklWT19EMUNVUlNPUl9NT0RFX01BU0sgICAgICAgICAoMyA8PCA4KQogIyAgICAgICBkZWZpbmUgQVZJVk9fRDFDVVJTT1JfTU9ERV8yNEJQUCAgICAgICAgMgogI2RlZmluZSBBVklWT19EMUNVUl9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgMHg2NDA4CisjZGVmaW5lIFI3MDBfRDFDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAweDZjMGMKKyNkZWZpbmUgUjcwMF9EMkNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgIDB4NjQwYwogI2RlZmluZSBBVklWT19EMUNVUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMHg2NDEwCiAjZGVmaW5lIEFWSVZPX0QxQ1VSX1BPU0lUSU9OICAgICAgICAgICAgICAgICAgICAweDY0MTQKICNkZWZpbmUgQVZJVk9fRDFDVVJfSE9UX1NQT1QgICAgICAgICAgICAgICAgICAgIDB4NjQxOApAQCAtNDQ1LDYgKzQ1NCw4IEBACiAjZGVmaW5lIEFWSVZPX0QxTU9ERV9WQkxBTktfU1RBVFVTICAgICAgICAgICAgICAweDY1MzQKICMgICAgICAgZGVmaW5lIEFWSVZPX1ZCTEFOS19BQ0sgICAgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQgICAgICAgICAgICAweDY1MzgKKyNkZWZpbmUgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVRVUyAgICAgICAgICAgICAgIDB4NjUzYworIyAgICAgICBkZWZpbmUgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVQgICAgICAgICAgKDEgPDwgMTIpCiAjZGVmaW5lIEFWSVZPX0R4TU9ERV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDY1NDAKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxTU9ERV9JTlRfTUFTSyAgICAgICAgICAgICgxIDw8IDApCiAjICAgICAgIGRlZmluZSBBVklWT19EMk1PREVfSU5UX01BU0sgICAgICAgICAgICAoMSA8PCA4KQpAQCAtNTAyLDYgKzUxMyw3IEBACiAKICNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZCTEFOS19TVEFUVVMgICAgICAgICAgICAgIDB4NmQzNAogI2RlZmluZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EICAgICAgICAgICAgMHg2ZDM4CisjZGVmaW5lIEFWSVZPX0QyTU9ERV9WTElORV9TVEFUVVMgICAgICAgICAgICAgICAweDZkM2MKICNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZJRVdQT1JUX1NUQVJUICAgICAgICAgICAgIDB4NmQ4MAogI2RlZmluZSBBVklWT19EMk1PREVfVklFV1BPUlRfU0laRSAgICAgICAgICAgICAgMHg2ZDg0CiAjZGVmaW5lIEFWSVZPX0QyTU9ERV9FWFRfT1ZFUlNDQU5fTEVGVF9SSUdIVCAgICAweDZkODgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggZDRiMGI5ZC4uZjc0MzUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTI2LDEwOCArMjYsMTMgQEAKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLwogI2luY2x1ZGUgImRybVAuaCIKLSNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAiYXRvbS5oIgorI2luY2x1ZGUgInI1MjBkLmgiCiAKLS8qIHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnY1MTVfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2NTE1X2RlYnVnZnNfZ2FfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MCAqLwogCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgotICogcjUyMCxydjUzMCxydjU2MCxydjU3MCxyNTgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLwotdm9pZCByNTIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNTIwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0KLS8qCi0gKiBNQwotICovCi1pbnQgcjUyMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0JaWYgKHJ2NTE1X2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgcGlwZXMgIVxuIik7Ci0JfQotCWlmIChydjUxNV9kZWJ1Z2ZzX2dhX2luZm9faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIHBpcGVzICFcbiIpOwotCX0KLQotCXI1MjBfZ3B1X2luaXQocmRldik7Ci0JcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gRGlzYWJsaW5nIEFHUFxuIik7Ci0JCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQl9IGVsc2UgewotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCX0KLQl9Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHI1MjBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUjUyMF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUjUyMF9NQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyX01DKFI1MjBfTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0JV1JFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTiwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQkJdG1wID0gUkVHX1NFVChSNTIwX01DX0FHUF9UT1AsIHRtcCA+PiAxNik7Ci0JCXRtcCB8PSBSRUdfU0VUKFI1MjBfTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMTYpOwotCQlXUkVHMzJfTUMoUjUyMF9NQ19BR1BfTE9DQVRJT04sIHRtcCk7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSk7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFXzIsIDApOwotCX0gZWxzZSB7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFLCAwKTsKLQkJV1JFRzMyX01DKFI1MjBfTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIHI1MjBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByNTIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQotaW50IHI1MjBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcjUyMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIGk7CiAJdWludDMyX3QgdG1wOwpAQCAtMTQzLDEyICs0OCwxMiBAQAogCXJldHVybiAtMTsKIH0KIAotdm9pZCByNTIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcjUyMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBwaXBlX3NlbGVjdF9jdXJyZW50LCBnYl9waXBlX3NlbGVjdCwgdG1wOwogCiAJcjEwMF9oZHBfcmVzZXQocmRldik7Ci0JcnM2MDBfZGlzYWJsZV92Z2EocmRldik7CisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogCS8qCiAJICogRFNUX1BJUEVfQ09ORklHCQkweDE3MEMKIAkgKiBHQl9USUxFX0NPTkZJRwkJMHg0MDE4CkBAIC0xODYsMTAgKzkxLDYgQEAKIAl9CiB9CiAKLQotLyoKLSAqIFZSQU0gaW5mbwotICovCiBzdGF0aWMgdm9pZCByNTIwX3ZyYW1fZ2V0X3R5cGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wOwpAQCAtMjMzLDcgKzEzNCwxNjkgQEAKIAlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNjbGssIGEpOwogfQogCi12b2lkIHI1MjBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjUyMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJ2NTE1X2JhbmR3aWR0aF9hdml2b191cGRhdGUocmRldik7CisJc3RydWN0IHJ2NTE1X21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisKKwkvKiBXYWl0IGZvciBtYyBpZGxlICovCisJaWYgKHI1MjBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBNQyBpZGxlIHRpbWVvdXQgYmVmb3JlIHVwZGF0aW5nIE1DLlxuIik7CisJLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCisJV1JFRzMyKFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSk7CisJLyogUHJvZ3JhbSBNQywgc2hvdWxkIGJlIGEgMzJiaXRzIGxpbWl0ZWQgYWRkcmVzcyBzcGFjZSAqLworCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19GQl9MT0NBVElPTiwKKwkJCVNfMDAwMDA0X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMDA0X01DX0ZCX1RPUChyZGV2LT5tYy52cmFtX2VuZCA+PiAxNikpOworCVdSRUczMihSXzAwMDEzNF9IRFBfRkJfTE9DQVRJT04sCisJCVNfMDAwMTM0X0hEUF9GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlXUkVHMzJfTUMoUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OLAorCQkJU18wMDAwMDVfTUNfQUdQX1NUQVJUKHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDVfTUNfQUdQX1RPUChyZGV2LT5tYy5ndHRfZW5kID4+IDE2KSk7CisJCVdSRUczMl9NQyhSXzAwMDAwNl9BR1BfQkFTRSwgbG93ZXJfMzJfYml0cyhyZGV2LT5tYy5hZ3BfYmFzZSkpOworCQlXUkVHMzJfTUMoUl8wMDAwMDdfQUdQX0JBU0VfMiwKKwkJCVNfMDAwMDA3X0FHUF9CQVNFX0FERFJfMih1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSkpOworCX0gZWxzZSB7CisJCVdSRUczMl9NQyhSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04sIDB4RkZGRkZGRkYpOworCQlXUkVHMzJfTUMoUl8wMDAwMDZfQUdQX0JBU0UsIDApOworCQlXUkVHMzJfTUMoUl8wMDAwMDdfQUdQX0JBU0VfMiwgMCk7CisJfQorCisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKworc3RhdGljIGludCByNTIwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyNTIwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcjUyMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcnM2MDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcjUyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHI1MjBfc3RhcnR1cChyZGV2KTsKK30KKworaW50IHI1MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXI1MjBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnY1MTVfZGVidWdmcyhyZGV2KTsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcnYzNzBfcGNpZV9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjUyMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJ2NTE1X3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhZjYxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMGQuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SNTIwRF9IX18KKyNkZWZpbmUgX19SNTIwRF9IX18KKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4CisjZGVmaW5lICAgU18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQkJNX0hJQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDBFNDBfUkJCTV9ISUJVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCQk1fSElCVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9TS0lEX0NGQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDBFNDBfU0tJRF9DRkJVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1NLSURfQ0ZCVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfVkZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX1ZGX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9WRl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworCisjZGVmaW5lIFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDAwNQorI2RlZmluZSAgIFNfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDZfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYKKyNkZWZpbmUgICBTXzAwMDAwNl9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDA2X0FHUF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAwMDdfQUdQX0JBU0VfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcKKyNkZWZpbmUgICBTXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDAwN19BR1BfQkFTRV9BRERSXzIgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCBlYWIzMWMxLi4yNzhmNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9tb2RlLmgiCiAjaW5jbHVkZSAicjYwMGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKICNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCiAKICNkZWZpbmUgUEZQX1VDT0RFX1NJWkUgNTc2CiAjZGVmaW5lIFBNNF9VQ09ERV9TSVpFIDE3OTIKQEAgLTY1LDE2ICs2NSwxMSBAQAogCiBpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiByNjAwLHJ2NjEwLHJ2NjMwLHJ2NjIwLHJ2NjM1LHJ2NjcwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLworLyogcjYwMCxydjYxMCxydjYzMCxydjYyMCxydjYzNSxydjY3MCAqLwogaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHI2MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0KIC8qCiAgKiBSNjAwIFBDSUUgR0FSVAogICovCkBAIC0xNjgsNyArMTYzLDcgQEAKIAlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9TRU1fQ05UTCwgdG1wIHwgRU5BQkxFX1NFTUFQSE9SRV9NT0RFKTsKIAlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9TRU1fQ05UTCwgdG1wIHwgRU5BQkxFX1NFTUFQSE9SRV9NT0RFKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9TVEFSVF9BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTIpOwotCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCAocmRldi0+bWMuZ3R0X2VuZCAtIDEpID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCByZGV2LT5nYXJ0LnRhYmxlX2FkZHIgPj4gMTIpOwogCVdSRUczMihWTV9DT05URVhUMF9DTlRMLCBFTkFCTEVfQ09OVEVYVCB8IFBBR0VfVEFCTEVfREVQVEgoMCkgfAogCQkJCVJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQpOwpAQCAtMjI1LDYgKzIyMCw0MCBAQAogCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKK3ZvaWQgcjYwMF9hZ3BfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUXzAoMCkgfCBCQU5LX1NFTEVDVF8xKDEpKTsKKwkvKiBTZXR1cCBUTEIgY29udHJvbCAqLworCXRtcCA9IEVOQUJMRV9MMV9UTEIgfCBFTkFCTEVfTDFfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTIHwKKwkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSkgfAorCQlFTkFCTEVfV0FJVF9MMl9RVUVSWTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9TWVNfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9TWVNfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9IRFBfQ05UTCwgdG1wIHwgRU5BQkxFX0wxX1NUUklDVF9PUkRFUklORyk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfSERQX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1dSX0FfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9SRF9CX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfV1JfQl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1BETUFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9QRE1BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKK30KKwogaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwpAQCAtMjQwLDE0ICsyNjksOSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgcjYwMF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCByNjAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7Ci0JdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOwotCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7Ci0JdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7Ci0JdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7Ci0JdTY0IG9sZF92cmFtX3N0YXJ0OworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CiAJdTMyIHRtcDsKIAlpbnQgaSwgajsKIApAQCAtMjYxLDk5ICsyODUsNjQgQEAKIAl9CiAJV1JFRzMyKEhEUF9SRUdfQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDApOwogCi0JZDF2Z2FfY29udHJvbCA9IFJSRUczMihEMVZHQV9DT05UUk9MKTsKLQlkMnZnYV9jb250cm9sID0gUlJFRzMyKEQyVkdBX0NPTlRST0wpOwotCXZnYV9yZW5kZXJfY29udHJvbCA9IFJSRUczMihWR0FfUkVOREVSX0NPTlRST0wpOwotCXZnYV9oZHBfY29udHJvbCA9IFJSRUczMihWR0FfSERQX0NPTlRST0wpOwotCWQxY3J0Y19jb250cm9sID0gUlJFRzMyKEQxQ1JUQ19DT05UUk9MKTsKLQlkMmNydGNfY29udHJvbCA9IFJSRUczMihEMkNSVENfQ09OVFJPTCk7Ci0Jb2xkX3ZyYW1fc3RhcnQgPSAodTY0KShSUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04pICYgMHhGRkZGKSA8PCAyNDsKLQluZXdfZDFncnBoX3ByaW1hcnkgPSBSUkVHMzIoRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDFncnBoX3NlY29uZGFyeSA9IFJSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QxZ3JwaF9wcmltYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQluZXdfZDFncnBoX3NlY29uZGFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QyZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QyZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMmdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QyZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCi0JLyogU3RvcCBhbGwgdmlkZW8gKi8KLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIDApOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIDApOwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMUNSVENfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQotCW1kZWxheSgxKTsKKwlydjUxNV9tY19zdG9wKHJkZXYsICZzYXZlKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIExvY2tvdXQgYWNjZXNzIHRocm91Z2ggVkdBIGFwZXJ0dXJlKi8KKwkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSAoZG9lc24ndCBleGlzdCBiZWZvcmUgUjYwMCkgKi8KIAlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCBWR0FfTUVNT1JZX0RJU0FCTEUpOwotCiAJLyogVXBkYXRlIGNvbmZpZ3VyYXRpb24gKi8KLQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKLQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgKHJkZXYtPm1jLnZyYW1fZW5kIC0gMSkgPj4gMTIpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJaWYgKHJkZXYtPm1jLnZyYW1fc3RhcnQgPCByZGV2LT5tYy5ndHRfc3RhcnQpIHsKKwkJCS8qIFZSQU0gYmVmb3JlIEFHUCAqLworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9lbmQgPj4gMTIpOworCQl9IGVsc2UgeworCQkJLyogVlJBTSBhZnRlciBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJCXJkZXYtPm1jLnZyYW1fZW5kID4+IDEyKTsKKwkJfQorCX0gZWxzZSB7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTIpOworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCX0KIAlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7Ci0JdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKIAl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CiAJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7CiAJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKLQlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpIHwgMHgzRkYpOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9TSVpFLCByZGV2LT5tYy5tY192cmFtX3NpemUgfCAweDNGRik7CiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxNik7Ci0JCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAyMik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMjIpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKIAl9IGVsc2UgewogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIDApOwogCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgMHgwRkZGRkZGRik7CiAJCVdSRUczMihNQ19WTV9BR1BfQk9ULCAweDBGRkZGRkZGKTsKIAl9Ci0JV1JFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QxZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDJncnBoX3ByaW1hcnkpOwotCVdSRUczMihEMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9zZWNvbmRhcnkpOwotCVdSRUczMihWR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7Ci0KLQkvKiBVbmxvY2sgaG9zdCBhY2Nlc3MgKi8KLQlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCB2Z2FfaGRwX2NvbnRyb2wpOwotCi0JbWRlbGF5KDEpOwogCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gTUMgbm90IGlkbGUgIVxuIik7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZWRvdXQgIVxuIik7CiAJfQotCi0JLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMUNSVENfQ09OVFJPTCwgZDFjcnRjX2NvbnRyb2wpOwotCVdSRUczMihEMkNSVENfQ09OVFJPTCwgZDJjcnRjX2NvbnRyb2wpOwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDApOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDApOwotCVdSRUczMihEMVZHQV9DT05UUk9MLCBkMXZnYV9jb250cm9sKTsKLQlXUkVHMzIoRDJWR0FfQ09OVFJPTCwgZDJ2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgdmdhX3JlbmRlcl9jb250cm9sKTsKLQorCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7CiAJLyogd2UgbmVlZCB0byBvd24gVlJBTSwgc28gdHVybiBvZmYgdGhlIFZHQSByZW5kZXJlciBoZXJlCiAJICogdG8gc3RvcCBpdCBvdmVyd3JpdGluZyBvdXIgb2JqZWN0cyAqLwotCXJhZGVvbl9hdml2b192Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogfQogCiBpbnQgcjYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWZpeGVkMjBfMTIgYTsKIAl1MzIgdG1wOwotCWludCBjaGFuc2l6ZTsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CiAJaW50IHI7CiAKIAkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KLQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKIAl0bXAgPSBSUkVHMzIoUkFNQ0ZHKTsKIAlpZiAodG1wICYgQ0hBTlNJWkVfT1ZFUlJJREUpIHsKQEAgLTM2MywyMyArMzUyLDM2IEBACiAJfSBlbHNlIHsKIAkJY2hhbnNpemUgPSAzMjsKIAl9Ci0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1I2MDApIHsKLQkJcmRldi0+bWMudnJhbV93aWR0aCA9IDggKiBjaGFuc2l6ZTsKLQl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjcwKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSA0ICogY2hhbnNpemU7Ci0JfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MTApIHx8Ci0JCQkocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MjApKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSBjaGFuc2l6ZTsKLQl9IGVsc2UgaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYzMCkgfHwKLQkJCShyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYzNSkpIHsKLQkJcmRldi0+bWMudnJhbV93aWR0aCA9IDIgKiBjaGFuc2l6ZTsKKwl0bXAgPSBSUkVHMzIoQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKIAl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCisJaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCkBAIC00MDcsNDAgKzQwOSwzNCBAQAogCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSB7Ci0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJgotCQkJCQkJCQkweEZGRkYpIDw8IDI0OwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLmd0dF9zaXplKSB7Ci0JCQkJLyogRW5vdWdoIHBsYWNlIGFmdGVyIHZyYW0gKi8KLQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7Ci0JCQl9IGVsc2UgaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKLQkJCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlIHZyYW0gKi8KLQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBOb3QgZW5vdWdoIHBsYWNlIGFmdGVyIG9yIGJlZm9yZSBzaHJpbmsKLQkJCQkgKiBnYXJ0IHNpemUKLQkJCQkgKi8KLQkJCQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+ICgweEZGRkZGRkZGVUwgLSB0bXApKSB7Ci0JCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7Ci0JCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKLQkJCQl9IGVsc2UgewotCQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7Ci0JCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gMHhGRkZGRkZGRlVMIC0gdG1wOwotCQkJCX0KLQkJCX0KLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CisJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmCisJCQkJCQkJMHhGRkZGKSA8PCAyNDsKKwkJdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLmd0dF9zaXplKSB7CisJCQkvKiBFbm91Z2ggcGxhY2UgYWZ0ZXIgdnJhbSAqLworCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOworCQl9IGVsc2UgaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKKwkJCS8qIEVub3VnaCBwbGFjZSBiZWZvcmUgdnJhbSAqLworCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKIAkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweDAwMDAwMDAwVUw7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCS8qIE5vdCBlbm91Z2ggcGxhY2UgYWZ0ZXIgb3IgYmVmb3JlIHNocmluaworCQkJICogZ2FydCBzaXplCisJCQkgKi8KKwkJCWlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID4gKDB4RkZGRkZGRkZVTCAtIHRtcCkpIHsKKwkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOworCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwkJCX0gZWxzZSB7CisJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOworCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gMHhGRkZGRkZGRlVMIC0gdG1wOworCQkJfQogCQl9CisJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKIAl9CiAJcmRldi0+bWMudnJhbV9zdGFydCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JcmRldi0+bWMudnJhbV9lbmQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOworCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7CiAJcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOwotCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZTsKKwlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KQEAgLTQ1Niw2ICs0NTIsNyBAQAogICovCiBpbnQgcjYwMF9ncHVfc29mdF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOwogCXUzMiBncmJtX2J1c3lfbWFzayA9IFNfMDA4MDEwX1ZDX0JVU1koMSkgfCBTXzAwODAxMF9WR1RfQlVTWV9OT19ETUEoMSkgfAogCQkJCVNfMDA4MDEwX1ZHVF9CVVNZKDEpIHwgU18wMDgwMTBfVEEwM19CVVNZKDEpIHwKIAkJCQlTXzAwODAxMF9UQ19CVVNZKDEpIHwgU18wMDgwMTBfU1hfQlVTWSgxKSB8CkBAIC00NzMsMTMgKzQ3MCwyNSBAQAogCQkJU18wMDgwMTRfQ0IwX0JVU1koMSkgfCBTXzAwODAxNF9DQjFfQlVTWSgxKSB8CiAJCQlTXzAwODAxNF9DQjJfQlVTWSgxKSB8IFNfMDA4MDE0X0NCM19CVVNZKDEpOwogCXUzMiBzcmJtX3Jlc2V0ID0gMDsKKwl1MzIgdG1wOwogCisJZGV2X2luZm8ocmRldi0+ZGV2LCAiR1BVIHNvZnRyZXNldCBcbiIpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTBfR1JCTV9TVEFUVVM9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDgwMTBfR1JCTV9TVEFUVVMpKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDE0X0dSQk1fU1RBVFVTMj0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwODAxNF9HUkJNX1NUQVRVUzIpKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDAwRTUwX1NSQk1fU1RBVFVTPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSk7CisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOworCX0KIAkvKiBEaXNhYmxlIENQIHBhcnNpbmcvcHJlZmV0Y2hpbmcgKi8KIAlXUkVHMzIoUl8wMDg2RDhfQ1BfTUVfQ05UTCwgU18wMDg2RDhfQ1BfTUVfSEFMVCgweGZmKSk7CiAJLyogQ2hlY2sgaWYgYW55IG9mIHRoZSByZW5kZXJpbmcgYmxvY2sgaXMgYnVzeSBhbmQgcmVzZXQgaXQgKi8KIAlpZiAoKFJSRUczMihSXzAwODAxMF9HUkJNX1NUQVRVUykgJiBncmJtX2J1c3lfbWFzaykgfHwKIAkgICAgKFJSRUczMihSXzAwODAxNF9HUkJNX1NUQVRVUzIpICYgZ3JibTJfYnVzeV9tYXNrKSkgewotCQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCBTXzAwODAyMF9TT0ZUX1JFU0VUX0NSKDEpIHwKKwkJdG1wID0gU18wMDgwMjBfU09GVF9SRVNFVF9DUigxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0RCKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfQ0IoMSkgfAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9QQSgxKSB8CkBAIC00OTEsMTQgKzUwMCwxOCBAQAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9UQygxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1RBKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkMoMSkgfAotCQkJU18wMDgwMjBfU09GVF9SRVNFVF9WR1QoMSkpOworCQkJU18wMDgwMjBfU09GVF9SRVNFVF9WR1QoMSk7CisJCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUPTB4JTA4WFxuIiwgdG1wKTsKKwkJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgdG1wKTsKIAkJKHZvaWQpUlJFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCk7CiAJCXVkZWxheSg1MCk7CiAJCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIDApOwogCQkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKIAl9CiAJLyogUmVzZXQgQ1AgKHdlIGFsd2F5cyByZXNldCBDUCkgKi8KLQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCBTXzAwODAyMF9TT0ZUX1JFU0VUX0NQKDEpKTsKKwl0bXAgPSBTXzAwODAyMF9TT0ZUX1JFU0VUX0NQKDEpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIlJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVD0weCUwOFhcbiIsIHRtcCk7CisJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgdG1wKTsKIAkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKIAl1ZGVsYXkoNTApOwogCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIDApOwpAQCAtNTI2LDYgKzUzOSwxNCBAQAogCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfUkxDKDEpOwogCWlmIChHXzAwMEU1MF9TRU1fQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKIAkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX1NFTSgxKTsKKwlpZiAoR18wMDBFNTBfQklGX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9CSUYoMSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQ9MHglMDhYXG4iLCBzcmJtX3Jlc2V0KTsKKwlXUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VULCBzcmJtX3Jlc2V0KTsKKwkodm9pZClSUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUKTsKKwl1ZGVsYXkoNTApOworCVdSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQsIDApOworCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOwogCVdSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQsIHNyYm1fcmVzZXQpOwogCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOwogCXVkZWxheSg1MCk7CkBAIC01MzMsNiArNTU0LDE3IEBACiAJKHZvaWQpUlJFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCk7CiAJLyogV2FpdCBhIGxpdHRsZSBmb3IgdGhpbmdzIHRvIHNldHRsZSBkb3duICovCiAJdWRlbGF5KDUwKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDEwX0dSQk1fU1RBVFVTPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDA4MDEwX0dSQk1fU1RBVFVTKSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAxNF9HUkJNX1NUQVRVUzI9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDgwMTRfR1JCTV9TVEFUVVMyKSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwMEU1MF9TUkJNX1NUQVRVUz0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpOworCS8qIEFmdGVyIHJlc2V0IHdlIG5lZWQgdG8gcmVpbml0IHRoZSBhc2ljIGFzIEdQVSBvZnRlbiBlbmR1cCBpbiBhbgorCSAqIGluY29oZXJlbnQgc3RhdGUuCisJICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODI2LDcgKzg1OCw4IEBACiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjMwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8Ci0JICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM4ODApKSB7CiAJCVdSRUczMihEQl9ERUJVRywgUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUpOwogCX0gZWxzZSB7CiAJCVdSRUczMihEQl9ERUJVRywgMCk7CkBAIC04NDMsNyArODc2LDggQEAKIAl0bXAgPSBSUkVHMzIoU1FfTVNfRklGT19TSVpFUyk7CiAJaWYgKCgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJdG1wID0gKENBQ0hFX0ZJRk9fU0laRSgweGEpIHwKIAkJICAgICAgIEZFVENIX0ZJRk9fSElXQVRFUigweGEpIHwKIAkJICAgICAgIERPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKQEAgLTg4Niw3ICs5MjAsOCBAQAogCQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMoMCkpOwogCX0gZWxzZSBpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KIAkJc3FfY29uZmlnICY9IH5WQ19FTkFCTEU7CiAKQEAgLTk0Myw3ICs5NzgsOCBAQAogCiAJaWYgKCgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIENBQ0hFX0lOVkFMSURBVElPTihUQ19PTkxZKSk7CiAJfSBlbHNlIHsKIAkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIENBQ0hFX0lOVkFMSURBVElPTihWQ19BTkRfVEMpKTsKQEAgLTk2OSw4ICsxMDA1LDkgQEAKIAl0bXAgPSByZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMgKiAxNjsKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9SVjYxMDoKLQljYXNlIENISVBfUlM3ODA6CiAJY2FzZSBDSElQX1JWNjIwOgorCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CiAJCXRtcCArPSAzMjsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjcwOgpAQCAtMTAxMSw4ICsxMDQ4LDkgQEAKIAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX1JWNjEwOgotCWNhc2UgQ0hJUF9SUzc4MDoKIAljYXNlIENISVBfUlY2MjA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKIAkJdG1wID0gVENfTDJfU0laRSg4KTsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjMwOgpAQCAtMTIzNCwxOSArMTI3MiwxNyBAQAogCiAJLyogU2V0IHJpbmcgYnVmZmVyIHNpemUgKi8KIAlyYl9idWZzeiA9IGRybV9vcmRlcihyZGV2LT5jcC5yaW5nX3NpemUgLyA4KTsKKwl0bXAgPSBSQl9OT19VUERBVEUgfCAoZHJtX29yZGVyKFJBREVPTl9HUFVfUEFHRV9TSVpFLzgpIDw8IDgpIHwgcmJfYnVmc3o7CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JV1JFRzMyKENQX1JCX0NOVEwsIEJVRl9TV0FQXzMyQklUIHwgUkJfTk9fVVBEQVRFIHwKLQkJKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOwotI2Vsc2UKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOworCXRtcCB8PSBCVUZfU1dBUF8zMkJJVDsKICNlbmRpZgorCVdSRUczMihDUF9SQl9DTlRMLCB0bXApOwogCVdSRUczMihDUF9TRU1fV0FJVF9USU1FUiwgMHg0KTsKIAogCS8qIFNldCB0aGUgd3JpdGUgcG9pbnRlciBkZWxheSAqLwogCVdSRUczMihDUF9SQl9XUFRSX0RFTEFZLCAwKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KLQl0bXAgPSBSUkVHMzIoQ1BfUkJfQ05UTCk7CiAJV1JFRzMyKENQX1JCX0NOVEwsIHRtcCB8IFJCX1JQVFJfV1JfRU5BKTsKIAlXUkVHMzIoQ1BfUkJfUlBUUl9XUiwgMCk7CiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwpAQCAtMTM0MywzMiArMTM3OSw0NyBAQAogCXJldHVybiByOwogfQogCi0vKgotICogV3JpdGViYWNrCi0gKi8KLWludCByNjAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHI2MDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlXUkVHMzIoU0NSQVRDSF9VTVNLLCAwKTsKKwlpZiAocmRldi0+d2Iud2Jfb2JqKSB7CisJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPndiLndiX29iaik7CisJCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+d2Iud2Jfb2JqKTsKKwl9Cit9CisKK3ZvaWQgcjYwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXI2MDBfd2JfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+d2Iud2Jfb2JqKSB7CisJCXJhZGVvbl9vYmplY3RfdW5yZWYoJnJkZXYtPndiLndiX29iaik7CisJCXJkZXYtPndiLndiID0gTlVMTDsKKwkJcmRldi0+d2Iud2Jfb2JqID0gTlVMTDsKKwl9Cit9CisKK2ludCByNjAwX3diX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwKLQkJCQkJIHRydWUsCi0JCQkJCSBSQURFT05fR0VNX0RPTUFJTl9HVFQsCi0JCQkJCSBmYWxzZSwgJnJkZXYtPndiLndiX29iaik7CisJCXIgPSByYWRlb25fb2JqZWN0X2NyZWF0ZShyZGV2LCBOVUxMLCBSQURFT05fR1BVX1BBR0VfU0laRSwgdHJ1ZSwKKwkJCQlSQURFT05fR0VNX0RPTUFJTl9HVFQsIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLAotCQkJCSAgICAgIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKLQkJCQkgICAgICAmcmRldi0+d2IuZ3B1X2FkZHIpOworCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9HVFQsCisJCQkJJnJkZXYtPndiLmdwdV9hZGRyKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyNjAwX3diX2ZpbmkocmRldik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlyID0gcmFkZW9uX29iamVjdF9rbWFwKHJkZXYtPndiLndiX29iaiwgKHZvaWQgKiopJnJkZXYtPndiLndiKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyNjAwX3diX2ZpbmkocmRldik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KQEAgLTEzNzksMjEgKzE0MzAsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpZiAocmRldi0+d2Iud2Jfb2JqKSB7Ci0JCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPndiLndiX29iaik7Ci0JCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+d2Iud2Jfb2JqKTsKLQkJcmFkZW9uX29iamVjdF91bnJlZigmcmRldi0+d2Iud2Jfb2JqKTsKLQkJcmRldi0+d2Iud2IgPSBOVUxMOwotCQlyZGV2LT53Yi53Yl9vYmogPSBOVUxMOwotCX0KLX0KLQotCi0vKgotICogQ1MKLSAqLwogdm9pZCByNjAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CkBAIC0xNDE3LDggKzE0NTMsOCBAQAogCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewotCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogNDA5Nik7Ci0JcjYwMF9rbXNfYmxpdF9jb3B5KHJkZXYsIHNyY19vZmZzZXQsIGRzdF9vZmZzZXQsIG51bV9wYWdlcyAqIDQwOTYpOworCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogUkFERU9OX0dQVV9QQUdFX1NJWkUpOworCXI2MDBfa21zX2JsaXRfY29weShyZGV2LCBzcmNfb2Zmc2V0LCBkc3Rfb2Zmc2V0LCBudW1fcGFnZXMgKiBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAJcjYwMF9ibGl0X2RvbmVfY29weShyZGV2LCBmZW5jZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDcwLDExICsxNTA2LDE0IEBACiB7CiAJaW50IHI7CiAKLQlyNjAwX2dwdV9yZXNldChyZGV2KTsKLQlyNjAwX21jX3Jlc3VtZShyZGV2KTsKLQlyID0gcjYwMF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwlyNjAwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyNjAwX2FncF9lbmFibGUocmRldik7CisJfSBlbHNlIHsKKwkJciA9IHI2MDBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CiAJcjYwMF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTE0OTMsOSArMTUzMiw4IEBACiAJciA9IHI2MDBfY3BfcmVzdW1lKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gcjYwMF93Yl9pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwkvKiB3cml0ZSBiYWNrIGJ1ZmZlciBhcmUgbm90IHZpdGFsIHNvIGRvbid0IHdvcnJ5IGFib3V0IGZhaWx1cmUgKi8KKwlyNjAwX3diX2VuYWJsZShyZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxNywxNSArMTU1NSwxMiBAQAogewogCWludCByOwogCi0JaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKLQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQl9CisJLyogRG8gbm90IHJlc2V0IEdQVSBiZWZvcmUgcG9zdGluZywgb24gcjYwMCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC0xNTM4LDcgKzE1NzMsNyBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CkBAIC0xNTQ2LDEzICsxNTgxLDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKLQogaW50IHI2MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIHdhaXQgZm9yIHJpbmcgdG8gYmUgZW1wdHkgKi8KIAlyNjAwX2NwX3N0b3AocmRldik7CiAJcmRldi0+Y3AucmVhZHkgPSBmYWxzZTsKLQorCXI2MDBfd2JfZGlzYWJsZShyZGV2KTsKIAlyNjAwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwogCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KIAlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKQEAgLTE1NjksNyArMTYwMyw2IEBACiB7CiAJaW50IHI7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKIAlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0xNTg2LDggKzE2MTksMTAgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBNdXN0IGJlIGFuIEFUT01CSU9TICovCi0JaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpCisJaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFI2MDAgR1BVXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0xNjAwLDI0ICsxNjM1LDIwIEBACiAJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHI2MDBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KLQkJCXI2MDBfZmluaShyZGV2KTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTY0NiwxMiArMTY3NywxMCBAQAogCiAJciA9IHI2MDBfc3RhcnR1cChyZGV2KTsKIAlpZiAocikgewotCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KLQkJCXI2MDBfZmluaShyZGV2KTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKLQkJfQorCQlyNjAwX3N1c3BlbmQocmRldik7CisJCXI2MDBfd2JfZmluaShyZGV2KTsKKwkJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwkJcjYwMF9wY2llX2dhcnRfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KIAlpZiAocmRldi0+YWNjZWxfd29ya2luZykgewpAQCAtMTY2MCw3ICsxNjg5LDcgQEAKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKIAkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAkJfQotCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJCWlmIChyKSB7CiAJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKQEAgLTE2NzYsMTkgKzE3MDUsMTUgQEAKIAogCXI2MDBfYmxpdF9maW5pKHJkZXYpOwogCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJcjYwMF93Yl9maW5pKHJkZXYpOwogCXI2MDBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpCi0JCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOwotCWVsc2UKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKIAlyZGV2LT5iaW9zID0gTlVMTDsKIAlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKaW5kZXggZDk4OGVlYy4uNWVhNDMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCkBAIC03NzQsMTEgKzc3NCwxMCBAQAogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGNiX2Zvcm1hdCwgdGV4X2Zvcm1hdDsKKwlpbnQgc3gyLCBzeTIsIGR4MiwgZHkyOwogCXU2NCB2Yl9hZGRyOwogCXUzMiAqdmI7CiAKLQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7Ci0KIAlpZiAoKGRldl9wcml2LT5ibGl0X3ZiLT51c2VkICsgNDgpID4gZGV2X3ByaXYtPmJsaXRfdmItPnRvdGFsKSB7CiAKIAkJcjYwMF9ub21tX3B1dF92YihkZXYpOwpAQCAtNzg3LDE5ICs3ODYsMTMgQEAKIAkJCXJldHVybjsKIAogCQlzZXRfc2hhZGVycyhkZXYpOwotCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAJfQorCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAotCWlmIChjcHAgPT0gNCkgewotCQljYl9mb3JtYXQgPSBDT0xPUl84XzhfOF84OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzhfOF84Xzg7Ci0JfSBlbHNlIGlmIChjcHAgPT0gMikgewotCQljYl9mb3JtYXQgPSBDT0xPUl81XzZfNTsKLQkJdGV4X2Zvcm1hdCA9IEZNVF81XzZfNTsKLQl9IGVsc2UgewotCQljYl9mb3JtYXQgPSBDT0xPUl84OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzg7Ci0JfQorCXN4MiA9IHN4ICsgdzsKKwlzeTIgPSBzeSArIGg7CisJZHgyID0gZHggKyB3OworCWR5MiA9IGR5ICsgaDsKIAogCXZiWzBdID0gaTJmKGR4KTsKIAl2YlsxXSA9IGkyZihkeSk7CkBAIC04MDcsMzEgKzgwMCw0NiBAQAogCXZiWzNdID0gaTJmKHN5KTsKIAogCXZiWzRdID0gaTJmKGR4KTsKLQl2Yls1XSA9IGkyZihkeSArIGgpOworCXZiWzVdID0gaTJmKGR5Mik7CiAJdmJbNl0gPSBpMmYoc3gpOwotCXZiWzddID0gaTJmKHN5ICsgaCk7CisJdmJbN10gPSBpMmYoc3kyKTsKIAotCXZiWzhdID0gaTJmKGR4ICsgdyk7Ci0JdmJbOV0gPSBpMmYoZHkgKyBoKTsKLQl2YlsxMF0gPSBpMmYoc3ggKyB3KTsKLQl2YlsxMV0gPSBpMmYoc3kgKyBoKTsKKwl2Yls4XSA9IGkyZihkeDIpOworCXZiWzldID0gaTJmKGR5Mik7CisJdmJbMTBdID0gaTJmKHN4Mik7CisJdmJbMTFdID0gaTJmKHN5Mik7CisKKwlzd2l0Y2goY3BwKSB7CisJY2FzZSA0OgorCQljYl9mb3JtYXQgPSBDT0xPUl84XzhfOF84OworCQl0ZXhfZm9ybWF0ID0gRk1UXzhfOF84Xzg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY2JfZm9ybWF0ID0gQ09MT1JfNV82XzU7CisJCXRleF9mb3JtYXQgPSBGTVRfNV82XzU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNiX2Zvcm1hdCA9IENPTE9SXzg7CisJCXRleF9mb3JtYXQgPSBGTVRfODsKKwkJYnJlYWs7CisJfQogCiAJLyogc3JjICovCiAJc2V0X3RleF9yZXNvdXJjZShkZXZfcHJpdiwgdGV4X2Zvcm1hdCwKIAkJCSBzcmNfcGl0Y2ggLyBjcHAsCi0JCQkgc3kgKyBoLCBzcmNfcGl0Y2ggLyBjcHAsCisJCQkgc3kyLCBzcmNfcGl0Y2ggLyBjcHAsCiAJCQkgc3JjX2dwdV9hZGRyKTsKIAogCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCi0JCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCAoc3JjX3BpdGNoICogKHN5ICsgaCkpLCBzcmNfZ3B1X2FkZHIpOworCQkJICAgIFI2MDBfVENfQUNUSU9OX0VOQSwgc3JjX3BpdGNoICogc3kyLCBzcmNfZ3B1X2FkZHIpOwogCiAJLyogZHN0ICovCiAJc2V0X3JlbmRlcl90YXJnZXQoZGV2X3ByaXYsIGNiX2Zvcm1hdCwKLQkJCSAgZHN0X3BpdGNoIC8gY3BwLCBkeSArIGgsCisJCQkgIGRzdF9waXRjaCAvIGNwcCwgZHkyLAogCQkJICBkc3RfZ3B1X2FkZHIpOwogCiAJLyogc2Npc3NvcnMgKi8KLQlzZXRfc2Npc3NvcnMoZGV2X3ByaXYsIGR4LCBkeSwgZHggKyB3LCBkeSArIGgpOworCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgZHgsIGR5LCBkeDIsIGR5Mik7CiAKIAkvKiBWZXJ0ZXggYnVmZmVyIHNldHVwICovCiAJdmJfYWRkciA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ICsKQEAgLTg0NCw3ICs4NTIsNyBAQAogCiAJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKIAkJCSAgICBSNjAwX0NCX0FDVElPTl9FTkEgfCBSNjAwX0NCMF9ERVNUX0JBU0VfRU5BLAotCQkJICAgIGRzdF9waXRjaCAqIChkeSArIGgpLCBkc3RfZ3B1X2FkZHIpOworCQkJICAgIGRzdF9waXRjaCAqIGR5MiwgZHN0X2dwdV9hZGRyKTsKIAogCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkICs9IDEyICogNDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKaW5kZXggYWNhZTMzZS4uZGJmNzE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MTApIHx8CiAJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYyMCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwKSB8fAotCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzg4MCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzEwKSkKIAkJc3FfY29uZmlnID0gMDsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IDMzYjg5Y2QuLjBkODIwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInI2MDBkLmgiCi0jaW5jbHVkZSAiYXZpdm9kLmgiCiAKIHN0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKTsKQEAgLTU3LDcgKzU2LDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTgsNyArOTcsNiBAQAogc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqcmVsb2NzX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHAzcmVsb2M7CiAJdW5zaWduZWQgaWR4OwpAQCAtMTA5LDcgKzEwNyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMjEsNyArMTE4LDcgQEAKIAkJCSAgcDNyZWxvYy5pZHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTQ2LDcgKzE0Myw2IEBACiBzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2Nfbm9tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKnJlbG9jc19jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jOwogCXVuc2lnbmVkIGlkeDsKQEAgLTE1Nyw3ICsxNTMsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJKmNzX3JlbG9jID0gTlVMTDsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlyZWxvY3NfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX3JlbG9jc19pZHhdOwogCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKIAlpZiAocikgewpAQCAtMTY5LDcgKzE2NCw3IEBACiAJCQkgIHAzcmVsb2MuaWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlkeCA9IGliX2NodW5rLT5rZGF0YVtwM3JlbG9jLmlkeCArIDFdOworCWlkeCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgcDNyZWxvYy5pZHggKyAxKTsKIAlpZiAoaWR4ID49IHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KSB7CiAJCURSTV9FUlJPUigiUmVsb2NzIGF0ICVkIGFmdGVyIHJlbG9jYXRpb25zIGNodW5rIGVuZCAlZCAhXG4iLAogCQkJICBpZHgsIHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KTsKQEAgLTE4MSwxMyArMTc2LDEzNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHI2MDBfY3NfcGFja2V0X25leHRfdmxpbmUoKSAtIHBhcnNlIHVzZXJzcGFjZSBWTElORSBwYWNrZXQKKyAqIEBwYXJzZXI6CQlwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgorICoKKyAqIFVzZXJzcGFjZSBzZW5kcyBhIHNwZWNpYWwgc2VxdWVuY2UgZm9yIFZMSU5FIHdhaXRzLgorICogUEFDS0VUMCAtIFZMSU5FX1NUQVJUX0VORCArIHZhbHVlCisgKiBQQUNLRVQzIC0gV0FJVF9SRUdfTUVNIHBvbGwgdmxpbmUgc3RhdHVzIHJlZworICogUkVMT0MgKFAzKSAtIGNydGNfaWQgaW4gcmVsb2MuCisgKgorICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhpcyBhbmQgcmVsb2NhdGVzIHRoZSBWTElORSBTVEFSVCBFTkQKKyAqIGFuZCBXQUlUX1JFR19NRU0gcGFja2V0cyB0byB0aGUgY29ycmVjdCBjcnRjLgorICogSXQgYWxzbyBkZXRlY3RzIGEgc3dpdGNoZWQgb2ZmIGNydGMgYW5kIG51bGxzIG91dCB0aGUKKyAqIHdhaXQgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YzsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jLCB3YWl0X3JlZ19tZW07CisJaW50IGNydGNfaWQ7CisJaW50IHI7CisJdWludDMyX3QgaGVhZGVyLCBoX2lkeCwgcmVnLCB3YWl0X3JlZ19tZW1faW5mbzsKKwl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CisKKwlpYiA9IHAtPmliLT5wdHI7CisKKwkvKiBwYXJzZSB0aGUgV0FJVF9SRUdfTUVNICovCisJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZ3YWl0X3JlZ19tZW0sIHAtPmlkeCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogY2hlY2sgaXRzIGEgV0FJVF9SRUdfTUVNICovCisJaWYgKHdhaXRfcmVnX21lbS50eXBlICE9IFBBQ0tFVF9UWVBFMyB8fAorCSAgICB3YWl0X3JlZ19tZW0ub3Bjb2RlICE9IFBBQ0tFVDNfV0FJVF9SRUdfTUVNKSB7CisJCURSTV9FUlJPUigidmxpbmUgd2FpdCBtaXNzaW5nIFdBSVRfUkVHX01FTSBzZWdtZW50XG4iKTsKKwkJciA9IC1FSU5WQUw7CisJCXJldHVybiByOworCX0KKworCXdhaXRfcmVnX21lbV9pbmZvID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0X3JlZ19tZW0uaWR4ICsgMSk7CisJLyogYml0IDQgaXMgcmVnICgwKSBvciBtZW0gKDEpICovCisJaWYgKHdhaXRfcmVnX21lbV9pbmZvICYgMHgxMCkgeworCQlEUk1fRVJST1IoInZsaW5lIFdBSVRfUkVHX01FTSB3YWl0aW5nIG9uIE1FTSByYXRoZXIgdGhhbiBSRUdcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCS8qIHdhaXRpbmcgZm9yIHZhbHVlIHRvIGJlIGVxdWFsICovCisJaWYgKCh3YWl0X3JlZ19tZW1faW5mbyAmIDB4NykgIT0gMHgzKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGZ1bmN0aW9uIG5vdCBlcXVhbFxuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisJaWYgKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIHdhaXRfcmVnX21lbS5pZHggKyAyKSA8PCAyKSAhPSBBVklWT19EMU1PREVfVkxJTkVfU1RBVFVTKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGJhZCByZWdcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgd2FpdF9yZWdfbWVtLmlkeCArIDUpICE9IEFWSVZPX0QxTU9ERV9WTElORV9TVEFUKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGJhZCBiaXQgbWFza1xuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLworCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4ICsgd2FpdF9yZWdfbWVtLmNvdW50ICsgMik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaF9pZHggPSBwLT5pZHggLSAyOworCXAtPmlkeCArPSB3YWl0X3JlZ19tZW0uY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKKworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaF9pZHgpOworCWNydGNfaWQgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4ICsgMiArIDcgKyAxKTsKKwlyZWcgPSBDUF9QQUNLRVQwX0dFVF9SRUcoaGVhZGVyKTsKKwltdXRleF9sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQocC0+cmRldi0+ZGRldiwgY3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMpOworCWlmICghb2JqKSB7CisJCURSTV9FUlJPUigiY2Fubm90IGZpbmQgY3J0YyAlZFxuIiwgY3J0Y19pZCk7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisJcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKKwljcnRjX2lkID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CisKKwlpZiAoIWNydGMtPmVuYWJsZWQpIHsKKwkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgV0FJVF9SRUdfTUVNICovCisJCWliW2hfaWR4ICsgMl0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA0XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgNV0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDZdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA3XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgOF0gPSBQQUNLRVQyKDApOworCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CisJCXN3aXRjaCAocmVnKSB7CisJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKKwkJCWhlYWRlciAmPSB+UjYwMF9DUF9QQUNLRVQwX1JFR19NQVNLOworCQkJaGVhZGVyIHw9IEFWSVZPX0QyTU9ERV9WTElORV9TVEFSVF9FTkQgPj4gMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ1bmtub3duIGNydGMgcmVsb2NcbiIpOworCQkJciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgNF0gPSBBVklWT19EMk1PREVfVkxJTkVfU1RBVFVTID4+IDI7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcC0+cmRldi0+ZGRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByOworfQorCiBzdGF0aWMgaW50IHI2MDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJCXVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogeworCWludCByOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6Ci0JY2FzZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EOgorCQlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCQlpZHgsIHJlZyk7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCkBAIC0yMTgsMTcgKzMzNiwxOCBAQAogc3RhdGljIGludCByNjAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAl2b2xhdGlsZSB1MzIgKmliOwogCXVuc2lnbmVkIGlkeDsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIHN0YXJ0X3JlZywgZW5kX3JlZywgcmVnOwogCWludCByOworCXUzMiBpZHhfdmFsdWU7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOworCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwogCXN3aXRjaCAocGt0LT5vcGNvZGUpIHsKIAljYXNlIFBBQ0tFVDNfU1RBUlRfM0RfQ01EQlVGOgogCQlpZiAocC0+ZmFtaWx5ID49IENISVBfUlY3NzAgfHwgcGt0LT5jb3VudCkgewpAQCAtMjU5LDggKzM3OCw4IEBACiAJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWliW2lkeCswXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCWliW2lkeCsxXSA9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQlpYltpZHgrMF0gPSBpZHhfdmFsdWUgKyAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCWliW2lkeCsxXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX0RSQVdfSU5ERVhfQVVUTzoKIAkJaWYgKHBrdC0+Y291bnQgIT0gMSkgewpAQCAtMjgxLDE0ICs0MDAsMTQgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qIGJpdCA0IGlzIHJlZyAoMCkgb3IgbWVtICgxKSAqLwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeCswXSAmIDB4MTApIHsKKwkJaWYgKGlkeF92YWx1ZSAmIDB4MTApIHsKIAkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJCQlpZiAocikgewogCQkJCURSTV9FUlJPUigiYmFkIFdBSVRfUkVHX01FTVxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpYltpZHgrMV0gKz0gKHUzMikocmVsb2MtPmxvYmouZ3B1X29mZnNldCAmIDB4ZmZmZmZmZmYpOwotCQkJaWJbaWR4KzJdID0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCQlpYltpZHgrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQzoKQEAgLTI5Nyw4ICs0MTYsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogMHhmZmZmZmZmZi8weDAgaXMgZmx1c2ggYWxsIGNhY2hlIGZsYWcgKi8KLQkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHgrMV0gIT0gMHhmZmZmZmZmZiB8fAotCQkgICAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSAhPSAwKSB7CisJCWlmIChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICE9IDB4ZmZmZmZmZmYgfHwKKwkJICAgIHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikgIT0gMCkgewogCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKIAkJCWlmIChyKSB7CiAJCQkJRFJNX0VSUk9SKCJiYWQgU1VSRkFDRV9TWU5DXG4iKTsKQEAgLTMxOSw3ICs0MzgsNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWJbaWR4KzFdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKLQkJCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJCWliW2lkeCsyXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfRVZFTlRfV1JJVEVfRU9QOgpAQCAtMzMzLDEwICs0NTIsMTAgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWliW2lkeCsxXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJaWJbaWR4KzJdICs9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUc6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX0VORCkgfHwKQEAgLTM0Nyw2ICs0NjYsMjMgQEAKIAkJZm9yIChpID0gMDsgaSA8IHBrdC0+Y291bnQ7IGkrKykgewogCQkJcmVnID0gc3RhcnRfcmVnICsgKDQgKiBpKTsKIAkJCXN3aXRjaCAocmVnKSB7CisJCQljYXNlIFNRX0VTR1NfUklOR19CQVNFOgorCQkJY2FzZSBTUV9HU1ZTX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfRVNUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9HU1RNUF9SSU5HX0JBU0U6CisJCQljYXNlIFNRX1ZTVE1QX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfUFNUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9GQlVGX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfUkVEVUNfUklOR19CQVNFOgorCQkJY2FzZSBTWF9NRU1PUllfRVhQT1JUX0JBU0U6CisJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCQlpZiAocikgeworCQkJCQlEUk1fRVJST1IoImJhZCBTRVRfQ09ORklHX1JFRyAiCisJCQkJCQkJIjB4JTA0WFxuIiwgcmVnKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWliW2lkeCsxK2ldICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCQkJYnJlYWs7CiAJCQljYXNlIENQX0NPSEVSX0JBU0U6CiAJCQkJLyogdXNlIFBBQ0tFVDNfU1VSRkFDRV9TWU5DICovCiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTYsNyArNDkyLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfRU5EKSB8fApAQCAtMzY4LDYgKzUwNCw3IEBACiAJCQlyZWcgPSBzdGFydF9yZWcgKyAoNCAqIGkpOwogCQkJc3dpdGNoIChyZWcpIHsKIAkJCWNhc2UgREJfREVQVEhfQkFTRToKKwkJCWNhc2UgREJfSFRJTEVfREFUQV9CQVNFOgogCQkJY2FzZSBDQl9DT0xPUjBfQkFTRToKIAkJCWNhc2UgQ0JfQ09MT1IxX0JBU0U6CiAJCQljYXNlIENCX0NPTE9SMl9CQVNFOgpAQCAtNDIxLDcgKzU1OCw3IEBACiAJCQlEUk1fRVJST1IoImJhZCBTRVRfUkVTT1VSQ0VcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9SRVNPVVJDRV9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX1JFU09VUkNFX0VORCkgfHwKQEAgLTQzMCw3ICs1NjcsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IChwa3QtPmNvdW50IC8gNyk7IGkrKykgewotCQkJc3dpdGNoIChHX19TUV9WVFhfQ09OU1RBTlRfVFlQRShpYltpZHgrKGkqNykrNisxXSkpIHsKKwkJCXN3aXRjaCAoR19fU1FfVlRYX0NPTlNUQU5UX1RZUEUocmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgrKGkqNykrNisxKSkpIHsKIAkJCWNhc2UgU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFOgogCQkJCS8qIHRleCBiYXNlICovCiAJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTQ1NSw3ICs1OTIsNyBAQAogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQl9CiAJCQkJaWJbaWR4KzErKGkqNykrMF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZmZmZmZmZik7Ci0JCQkJaWJbaWR4KzErKGkqNykrMl0gfD0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCQkJaWJbaWR4KzErKGkqNykrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNRX1RFWF9WVFhfSU5WQUxJRF9URVhUVVJFOgogCQkJY2FzZSBTUV9URVhfVlRYX0lOVkFMSURfQlVGRkVSOgpAQCAtNDY2LDcgKzYwMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9BTFVfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQUxVX0NPTlNUX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfRU5EKSB8fApAQCAtNDc2LDcgKzYxMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9CT09MX0NPTlNUOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQk9PTF9DT05TVF9PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQk9PTF9DT05TVF9FTkQpIHx8CkBAIC00ODYsNyArNjIzLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9MT09QX0NPTlNUX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9MT09QX0NPTlNUX0VORCkgfHwKQEAgLTQ5Niw3ICs2MzMsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19TRVRfQ1RMX0NPTlNUOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NUTF9DT05TVF9PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQ1RMX0NPTlNUX0VORCkgfHwKQEAgLTUxMCw3ICs2NDcsNyBAQAogCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1NBTVBMRVJcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX1NBTVBMRVJfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX1NBTVBMRVJfRU5EKSB8fApAQCAtNjAyLDYgKzczOSw4IEBACiAJa2ZyZWUocGFyc2VyLT5yZWxvY3MpOwogCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPm5jaHVua3M7IGkrKykgewogCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rZGF0YSk7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtwYWdlWzBdKTsKKwkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua3BhZ2VbMV0pOwogCX0KIAlrZnJlZShwYXJzZXItPmNodW5rcyk7CiAJa2ZyZWUocGFyc2VyLT5jaHVua3NfYXJyYXkpOwpAQCAtNjM5LDcgKzc3OCw2IEBACiAJICogdW5jYWNoZWQpLiAqLwogCWliX2NodW5rID0gJnBhcnNlci5jaHVua3NbcGFyc2VyLmNodW5rX2liX2lkeF07CiAJcGFyc2VyLmliLT5sZW5ndGhfZHcgPSBpYl9jaHVuay0+bGVuZ3RoX2R3OwotCW1lbWNweSgodm9pZCAqKXBhcnNlci5pYi0+cHRyLCBpYl9jaHVuay0+a2RhdGEsIGliX2NodW5rLT5sZW5ndGhfZHcqNCk7CiAJKmwgPSBwYXJzZXIuaWItPmxlbmd0aF9kdzsKIAlyID0gcjYwMF9jc19wYXJzZSgmcGFyc2VyKTsKIAlpZiAocikgewpAQCAtNjQ3LDYgKzc4NSwxMiBAQAogCQlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CisJciA9IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoJnBhcnNlcik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOworCQlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOworCQlyZXR1cm4gcjsKKwl9CiAJcjYwMF9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByKTsKIAlyZXR1cm4gcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCA0YTkwMjhhLi4yN2FiNDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCkBAIC0xMTksNiArMTE5LDcgQEAKICNkZWZpbmUJREJfREVCVUcJCQkJCTB4OTgzMAogI2RlZmluZQkJUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUJCQkoMSA8PCAzMSkKICNkZWZpbmUJREJfREVQVEhfQkFTRQkJCQkJMHgyODAwQworI2RlZmluZQlEQl9IVElMRV9EQVRBX0JBU0UJCQkJMHgyODAxNAogI2RlZmluZQlEQl9XQVRFUk1BUktTCQkJCQkweDk4MzgKICNkZWZpbmUJCURFUFRIX0ZSRUUoeCkJCQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJCURFUFRIX0ZMVVNIKHgpCQkJCQkoKHgpIDw8IDUpCkBAIC0xNzEsNiArMTcyLDE0IEBACiAjZGVmaW5lIFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzE0CiAjICAgICAgIGRlZmluZSBOVU1fR1NfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQogIyAgICAgICBkZWZpbmUgTlVNX0VTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFNRX0VTR1NfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM0MAorI2RlZmluZSBTUV9HU1ZTX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNDgKKyNkZWZpbmUgU1FfRVNUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzUwCisjZGVmaW5lIFNRX0dTVE1QX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM1OAorI2RlZmluZSBTUV9WU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNjAKKyNkZWZpbmUgU1FfUFNUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzY4CisjZGVmaW5lIFNRX0ZCVUZfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM3MAorI2RlZmluZSBTUV9SRURVQ19SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNzgKIAogI2RlZmluZSBHUkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKICMgICAgICAgZGVmaW5lIEdSQk1fUkVBRF9USU1FT1VUKHgpICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQpAQCAtMjcxLDYgKzI4MCwxMCBAQAogI2RlZmluZQlQQ0lFX1BPUlRfSU5ERVgJCQkJCTB4MDAzOAogI2RlZmluZQlQQ0lFX1BPUlRfREFUQQkJCQkJMHgwMDNDCiAKKyNkZWZpbmUgQ0hNQVAJCQkJCQkweDIwMDQKKyNkZWZpbmUJCU5PT0ZDSEFOX1NISUZUCQkJCQkxMgorI2RlZmluZQkJTk9PRkNIQU5fTUFTSwkJCQkJMHgwMDAwMzAwMAorCiAjZGVmaW5lIFJBTUNGRwkJCQkJCTB4MjQwOAogI2RlZmluZQkJTk9PRkJBTktfU0hJRlQJCQkJCTAKICNkZWZpbmUJCU5PT0ZCQU5LX01BU0sJCQkJCTB4MDAwMDAwMDEKQEAgLTM1Miw2ICszNjUsNyBAQAogCiAKICNkZWZpbmUJU1hfTUlTQwkJCQkJCTB4MjgzNTAKKyNkZWZpbmUJU1hfTUVNT1JZX0VYUE9SVF9CQVNFCQkJCTB4OTAxMAogI2RlZmluZQlTWF9ERUJVR18xCQkJCQkweDkwNTQKICNkZWZpbmUJCVNNWF9FVkVOVF9SRUxFQVNFCQkJCSgxIDw8IDApCiAjZGVmaW5lCQlFTkFCTEVfTkVXX1NNWF9BRERSRVNTCQkJCSgxIDw8IDE2KQpAQCAtNjQzLDYgKzY1Nyw3IEBACiAjZGVmaW5lCQlHXzAwMEU1MF9NQ0RXX0JVU1koeCkJCQkoKCh4KSA+PiAxMykgJiAxKQogI2RlZmluZQkJR18wMDBFNTBfU0VNX0JVU1koeCkJCQkoKCh4KSA+PiAxNCkgJiAxKQogI2RlZmluZQkJR18wMDBFNTBfUkxDX0JVU1koeCkJCQkoKCh4KSA+PiAxNSkgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfQklGX0JVU1koeCkJCQkoKCh4KSA+PiAyOSkgJiAxKQogI2RlZmluZQlSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQJCQkweDBFNjAKICNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfQklGKHgpCQkoKCh4KSAmIDEpIDw8IDEpCiAjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX0NHKHgpCQkoKCh4KSAmIDEpIDw8IDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCA2MzExYjEzLi43NTdmNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTQ0LDYgKzQ0LDI0IEBACiAgKgktIFRFU1RJTkcsIFRFU1RJTkcsIFRFU1RJTkcKICAqLwogCisvKiBJbml0aWFsaXphdGlvbiBwYXRoOgorICogIFdlIGV4cGVjdCB0aGF0IGFjY2VsZXJhdGlvbiBpbml0aWFsaXphdGlvbiBtaWdodCBmYWlsIGZvciB2YXJpb3VzCisgKiAgcmVhc29ucyBldmVuIHRob3VnaHQgd2Ugd29yayBoYXJkIHRvIG1ha2UgaXQgd29ya3Mgb24gbW9zdAorICogIGNvbmZpZ3VyYXRpb25zLiBJbiBvcmRlciB0byBzdGlsbCBoYXZlIGEgd29ya2luZyB1c2Vyc3BhY2UgaW4gc3VjaAorICogIHNpdHVhdGlvbiB0aGUgaW5pdCBwYXRoIG11c3Qgc3VjY2VlZCB1cCB0byB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKKyAqICBpbml0aWFsaXphdGlvbiBwb2ludC4gRmFpbHVyZSBiZWZvcmUgdGhpcyBwb2ludCBhcmUgY29uc2lkZXJlZCBhcworICogIGZhdGFsIGVycm9yLiBIZXJlIGlzIHRoZSBpbml0IGNhbGxjaGFpbiA6CisgKiAgICAgIHJhZGVvbl9kZXZpY2VfaW5pdCAgcGVyZm9ybSBjb21tb24gc3RydWN0dXJlLCBtdXRleCBpbml0aWFsaXphdGlvbgorICogICAgICBhc2ljX2luaXQgICAgICAgICAgIHNldHVwIHRoZSBHUFUgbWVtb3J5IGxheW91dCBhbmQgcGVyZm9ybSBhbGwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgdGltZSBpbml0aWFsaXphdGlvbiAoZmFpbHVyZSBpbiB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXJlIGNvbnNpZGVyZWQgZmF0YWwpCisgKiAgICAgIGFzaWNfc3RhcnR1cCAgICAgICAgc2V0dXAgdGhlIEdQVSBhY2NlbGVyYXRpb24sIGluIG9yZGVyIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93IGd1aWRlbGluZSB0aGUgZmlyc3QgdGhpbmcgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNob3VsZCBkbyBpcyBzZXR0aW5nIHRoZSBHUFUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgY29udHJvbGxlciAob25seSBNQyBzZXR1cCBmYWlsdXJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGNvbnNpZGVyZWQgYXMgZmF0YWwpCisgKi8KKwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMTIxLDYgKzEzOSwxMCBAQAogCXVpbnQzMl90IGRlZmF1bHRfc2NsazsKIH07CiAKKy8qCisgKiBQb3dlciBtYW5hZ2VtZW50CisgKi8KK2ludCByYWRlb25fcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qCiAgKiBGZW5jZXMuCkBAIC0yNTgsNiArMjgwLDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2dhcnRfdGFibGVfdnJhbQl2cmFtOwogfTsKIAorI2RlZmluZSBSQURFT05fR1BVX1BBR0VfU0laRSA0MDk2CisKIHN0cnVjdCByYWRlb25fZ2FydCB7CiAJZG1hX2FkZHJfdAkJCXRhYmxlX2FkZHI7CiAJdW5zaWduZWQJCQludW1fZ3B1X3BhZ2VzOwpAQCAtMzQyLDcgKzM2Niw3IEBACiAJdW5zaWduZWQgbG9uZwkJaWR4OwogCXVpbnQ2NF90CQlncHVfYWRkcjsKIAlzdHJ1Y3QgcmFkZW9uX2ZlbmNlCSpmZW5jZTsKLQl2b2xhdGlsZSB1aW50MzJfdAkqcHRyOworCXVpbnQzMl90CSpwdHI7CiAJdWludDMyX3QJCWxlbmd0aF9kdzsKIH07CiAKQEAgLTQxNSw3ICs0MzksMTIgQEAKIHN0cnVjdCByYWRlb25fY3NfY2h1bmsgewogCXVpbnQzMl90CQljaHVua19pZDsKIAl1aW50MzJfdAkJbGVuZ3RoX2R3OworCWludCBrcGFnZV9pZHhbMl07CisJdWludDMyX3QgICAgICAgICAgICAgICAgKmtwYWdlWzJdOwogCXVpbnQzMl90CQkqa2RhdGE7CisJdm9pZCBfX3VzZXIgKnVzZXJfcHRyOworCWludCBsYXN0X2NvcGllZF9wYWdlOworCWludCBsYXN0X3BhZ2VfaW5kZXg7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciB7CkBAIC00MzgsOCArNDY3LDM4IEBACiAJc3RydWN0IHJhZGVvbl9pYgkqaWI7CiAJdm9pZAkJCSp0cmFjazsKIAl1bnNpZ25lZAkJZmFtaWx5OworCWludCBwYXJzZXJfZXJyb3I7CiB9OwogCitleHRlcm4gaW50IHJhZGVvbl9jc191cGRhdGVfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIGludCBwZ19pZHgpOworZXh0ZXJuIGludCByYWRlb25fY3NfZmluaXNoX3BhZ2VzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKKworCitzdGF0aWMgaW5saW5lIHUzMiByYWRlb25fZ2V0X2liX3ZhbHVlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCBpbnQgaWR4KQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwl1MzIgcGdfaWR4LCBwZ19vZmZzZXQ7CisJdTMyIGlkeF92YWx1ZSA9IDA7CisJaW50IG5ld19wYWdlOworCisJcGdfaWR4ID0gKGlkeCAqIDQpIC8gUEFHRV9TSVpFOworCXBnX29mZnNldCA9IChpZHggKiA0KSAlIFBBR0VfU0laRTsKKworCWlmIChpYmMtPmtwYWdlX2lkeFswXSA9PSBwZ19pZHgpCisJCXJldHVybiBpYmMtPmtwYWdlWzBdW3BnX29mZnNldC80XTsKKwlpZiAoaWJjLT5rcGFnZV9pZHhbMV0gPT0gcGdfaWR4KQorCQlyZXR1cm4gaWJjLT5rcGFnZVsxXVtwZ19vZmZzZXQvNF07CisKKwluZXdfcGFnZSA9IHJhZGVvbl9jc191cGRhdGVfcGFnZXMocCwgcGdfaWR4KTsKKwlpZiAobmV3X3BhZ2UgPCAwKSB7CisJCXAtPnBhcnNlcl9lcnJvciA9IG5ld19wYWdlOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZHhfdmFsdWUgPSBpYmMtPmtwYWdlW25ld19wYWdlXVtwZ19vZmZzZXQvNF07CisJcmV0dXJuIGlkeF92YWx1ZTsKK30KKwogc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgewogCXVuc2lnbmVkCWlkeDsKIAl1bnNpZ25lZAl0eXBlOwpAQCAtNTM3LDE4ICs1OTYsOCBAQAogCXZvaWQgKCpmaW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCXZvaWQgKCplcnJhdGEpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqdnJhbV9pbmZvKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnZnYV9zZXRfc3RhdGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKTsKIAlpbnQgKCpncHVfcmVzZXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCptY19pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKm1jX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCp3Yl9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKndiX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCpnYXJ0X2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqZ2FydF9maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0JaW50ICgqZ2FydF9lbmFibGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqZ2FydF9kaXNhYmxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKmdhcnRfdGxiX2ZsdXNoKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqZ2FydF9zZXRfcGFnZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIAlpbnQgKCpjcF9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKQEAgLTU1OCw3ICs2MDcsNiBAQAogCXZvaWQgKCpyaW5nX3N0YXJ0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqcmluZ190ZXN0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnJpbmdfaWJfZXhlY3V0ZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKLQlpbnQgKCppYl90ZXN0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqaXJxX3NldCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKmlycV9wcm9jZXNzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdTMyICgqZ2V0X3ZibGFua19jb3VudGVyKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwpAQCAtNTc5LDcgKzYyNyw5IEBACiAJCSAgICB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICAgdW5zaWduZWQgbnVtX3BhZ2VzLAogCQkgICAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworCXVpbnQzMl90ICgqZ2V0X2VuZ2luZV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpzZXRfZW5naW5lX2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKKwl1aW50MzJfdCAoKmdldF9tZW1vcnlfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqc2V0X21lbW9yeV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IG1lbV9jbG9jayk7CiAJdm9pZCAoKnNldF9wY2llX2xhbmVzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKIAl2b2lkICgqc2V0X2Nsb2NrX2dhdGluZykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwpAQCAtNzM2LDEyICs3ODYsMTIgQEAKIAlib29sCQkJCXNodXRkb3duOwogCWJvb2wJCQkJc3VzcGVuZDsKIAlib29sCQkJCW5lZWRfZG1hMzI7Ci0JYm9vbAkJCQluZXdfaW5pdF9wYXRoOwogCWJvb2wJCQkJYWNjZWxfd29ya2luZzsKIAlzdHJ1Y3QgcmFkZW9uX3N1cmZhY2VfcmVnIHN1cmZhY2VfcmVnc1tSQURFT05fR0VNX01BWF9TVVJGQUNFU107CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICptZV9mdzsJLyogYWxsIGZhbWlseSBNRSBmaXJtd2FyZSAqLwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGZwX2Z3OwkvKiByNi83MDAgUEZQIGZpcm13YXJlICovCiAJc3RydWN0IHI2MDBfYmxpdCByNjAwX2JsaXQ7CisJaW50IG1zaV9lbmFibGVkOyAvKiBtc2kgZW5hYmxlZCAqLwogfTsKIAogaW50IHJhZGVvbl9kZXZpY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTg5NiwyOCArOTQ2LDE0IEBACiAjZGVmaW5lIHJhZGVvbl9yZXN1bWUocmRldikgKHJkZXYpLT5hc2ljLT5yZXN1bWUoKHJkZXYpKQogI2RlZmluZSByYWRlb25fc3VzcGVuZChyZGV2KSAocmRldiktPmFzaWMtPnN1c3BlbmQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fY3NfcGFyc2UocCkgcmRldi0+YXNpYy0+Y3NfcGFyc2UoKHApKQotI2RlZmluZSByYWRlb25fZXJyYXRhKHJkZXYpIChyZGV2KS0+YXNpYy0+ZXJyYXRhKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3ZyYW1faW5mbyhyZGV2KSAocmRldiktPmFzaWMtPnZyYW1faW5mbygocmRldikpCiAjZGVmaW5lIHJhZGVvbl92Z2Ffc2V0X3N0YXRlKHJkZXYsIHN0YXRlKSAocmRldiktPmFzaWMtPnZnYV9zZXRfc3RhdGUoKHJkZXYpLCAoc3RhdGUpKQogI2RlZmluZSByYWRlb25fZ3B1X3Jlc2V0KHJkZXYpIChyZGV2KS0+YXNpYy0+Z3B1X3Jlc2V0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX21jX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT5tY19pbml0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX21jX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT5tY19maW5pKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3diX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT53Yl9pbml0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3diX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT53Yl9maW5pKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dwdV9nYXJ0X2luaXQocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2luaXQoKHJkZXYpKQotI2RlZmluZSByYWRlb25fZ3B1X2dhcnRfZmluaShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZmluaSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZW5hYmxlKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dhcnRfZGlzYWJsZShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZGlzYWJsZSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nYXJ0X3RsYl9mbHVzaChyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfdGxiX2ZsdXNoKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgaSwgcCkgKHJkZXYpLT5hc2ljLT5nYXJ0X3NldF9wYWdlKChyZGV2KSwgKGkpLCAocCkpCi0jZGVmaW5lIHJhZGVvbl9jcF9pbml0KHJkZXYscnNpemUpIChyZGV2KS0+YXNpYy0+Y3BfaW5pdCgocmRldiksIChyc2l6ZSkpCi0jZGVmaW5lIHJhZGVvbl9jcF9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfZmluaSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9jcF9kaXNhYmxlKHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfZGlzYWJsZSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9jcF9jb21taXQocmRldikgKHJkZXYpLT5hc2ljLT5jcF9jb21taXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fcmluZ19zdGFydChyZGV2KSAocmRldiktPmFzaWMtPnJpbmdfc3RhcnQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fcmluZ190ZXN0KHJkZXYpIChyZGV2KS0+YXNpYy0+cmluZ190ZXN0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3JpbmdfaWJfZXhlY3V0ZShyZGV2LCBpYikgKHJkZXYpLT5hc2ljLT5yaW5nX2liX2V4ZWN1dGUoKHJkZXYpLCAoaWIpKQotI2RlZmluZSByYWRlb25faWJfdGVzdChyZGV2KSAocmRldiktPmFzaWMtPmliX3Rlc3QoKHJkZXYpKQogI2RlZmluZSByYWRlb25faXJxX3NldChyZGV2KSAocmRldiktPmFzaWMtPmlycV9zZXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25faXJxX3Byb2Nlc3MocmRldikgKHJkZXYpLT5hc2ljLT5pcnFfcHJvY2VzcygocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIocmRldiwgY3J0YykgKHJkZXYpLT5hc2ljLT5nZXRfdmJsYW5rX2NvdW50ZXIoKHJkZXYpLCAoY3J0YykpCkBAIC05MjUsNyArOTYxLDkgQEAKICNkZWZpbmUgcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5X2JsaXQoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQogI2RlZmluZSByYWRlb25fY29weV9kbWEocmRldiwgcywgZCwgbnAsIGYpIChyZGV2KS0+YXNpYy0+Y29weV9kbWEoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQogI2RlZmluZSByYWRlb25fY29weShyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5KChyZGV2KSwgKHMpLCAoZCksIChucCksIChmKSkKKyNkZWZpbmUgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikgKHJkZXYpLT5hc2ljLT5nZXRfZW5naW5lX2Nsb2NrKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3NldF9lbmdpbmVfY2xvY2socmRldiwgZSkgKHJkZXYpLT5hc2ljLT5zZXRfZW5naW5lX2Nsb2NrKChyZGV2KSwgKGUpKQorI2RlZmluZSByYWRlb25fZ2V0X21lbW9yeV9jbG9jayhyZGV2KSAocmRldiktPmFzaWMtPmdldF9tZW1vcnlfY2xvY2soKHJkZXYpKQogI2RlZmluZSByYWRlb25fc2V0X21lbW9yeV9jbG9jayhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9lbmdpbmVfY2xvY2soKHJkZXYpLCAoZSkpCiAjZGVmaW5lIHJhZGVvbl9zZXRfcGNpZV9sYW5lcyhyZGV2LCBsKSAocmRldiktPmFzaWMtPnNldF9wY2llX2xhbmVzKChyZGV2KSwgKGwpKQogI2RlZmluZSByYWRlb25fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9jbG9ja19nYXRpbmcoKHJkZXYpLCAoZSkpCkBAIC05NDMsNiArOTgxLDggQEAKIGV4dGVybiB2b2lkIHJhZGVvbl9zY3JhdGNoX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX3N1cmZhY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHJhZGVvbl9jc19wYXJzZXJfaW5pdChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCByYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKIC8qIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAscjIwMCxydjI1MCxyczMwMCxydjI4MCAqLwogc3RydWN0IHIxMDBfbWNfc2F2ZSB7CkBAIC05NzQsMjMgKzEwMTQsNzEgQEAKIGV4dGVybiB2b2lkIHIxMDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByMTAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByMTAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX3JiMmRfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX2NwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9jc190cmFja19jaGVja19wa3QzX2luZHhfYnVmZmVyKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQkJCXN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKTsKK2V4dGVybiBpbnQgcjEwMF9jc19wYXJzZV9wYWNrZXQwKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJY29uc3QgdW5zaWduZWQgKmF1dGgsIHVuc2lnbmVkIG4sCisJCQkJcmFkZW9uX3BhY2tldDBfY2hlY2tfdCBjaGVjayk7CitleHRlcm4gaW50IHIxMDBfY3NfcGFja2V0X3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJdW5zaWduZWQgaWR4KTsKKworLyogcnYyMDAscnYyNTAscnYyODAgKi8KK2V4dGVybiB2b2lkIHIyMDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwICovCiBleHRlcm4gdm9pZCByMzAwX3NldF9yZWdfc2FmZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjMwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9jbG9ja19zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcjQyMCxyNDIzLHJ2NDEwICovCitleHRlcm4gaW50IHI0MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdTMyIHI0MjBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZyk7CiBleHRlcm4gdm9pZCByNDIwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcsIHUzMiB2KTsKIGV4dGVybiBpbnQgcjQyMF9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiBydjUxNSAqLworc3RydWN0IHJ2NTE1X21jX3NhdmUgeworCXUzMiBkMXZnYV9jb250cm9sOworCXUzMiBkMnZnYV9jb250cm9sOworCXUzMiB2Z2FfcmVuZGVyX2NvbnRyb2w7CisJdTMyIHZnYV9oZHBfY29udHJvbDsKKwl1MzIgZDFjcnRjX2NvbnRyb2w7CisJdTMyIGQyY3J0Y19jb250cm9sOworfTsKIGV4dGVybiB2b2lkIHJ2NTE1X2JhbmR3aWR0aF9hdml2b191cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJ2NTE1X3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBydjUxNV9tY19zdG9wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSAqc2F2ZSk7CitleHRlcm4gdm9pZCBydjUxNV9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKTsKK2V4dGVybiB2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnY1MTVfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2NTE1X3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisvKiByczQwMCAqLworZXh0ZXJuIGludCByczQwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczQwMF9nYXJ0X2FkanVzdF9zaXplKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczQwMF9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisvKiByczYwMCAqLworZXh0ZXJuIHZvaWQgcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM2MDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczYwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIHJzNjkwLCByczc0MCAqLwogZXh0ZXJuIHZvaWQgcnM2OTBfbGluZV9idWZmZXJfYWRqdXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LApAQCAtMTAwOSw4ICsxMDk3LDkgQEAKIGV4dGVybiB2b2lkIHI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiBpbnQgcjYwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHI2MDBfd2JfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX3NjcmF0Y2hfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfYmxpdF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCA4OTY4Zjc4Li5jMThmYmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC0zMSwzOCArMzEsMzAgQEAKIC8qCiAgKiBjb21tb24gZnVuY3Rpb25zCiAgKi8KK3VpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIAordWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7Cit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgbWVtX2Nsb2NrKTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKIC8qCiAgKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAKICAqLwotaW50IHIxMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHVpbnQzMl90IHIxMDBfbW1fcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcjEwMF9tbV93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwotdm9pZCByMTAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF92Z2Ffc2V0X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKTsKIGludCByMTAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHUzMiByMTAwX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwotaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9wY2lfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9wY2lfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX3BjaV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfcGNpX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX3BjaV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotdm9pZCByMTAwX2NwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2NwX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX2NwX2NvbW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTgzLDMzICs3NSwyMSBAQAogaW50IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcpOwogdm9pZCByMTAwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwotaW50IHIxMDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHIxMDBfYXNpYyA9IHsKIAkuaW5pdCA9ICZyMTAwX2luaXQsCi0JLmVycmF0YSA9ICZyMTAwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnIxMDBfdnJhbV9pbmZvLAorCS5maW5pID0gJnIxMDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyMTAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyMTAwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMTAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyMTAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcjEwMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZyMTAwX3BjaV9nYXJ0X2luaXQsCi0JLmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnIxMDBfcGNpX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcjEwMF9wY2lfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjEwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0xMTgsNyArOTgsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gTlVMTCwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0xMzEsNTUgKzExMywzOCBAQAogLyoKICAqIHIzMDAscjM1MCxydjM1MCxydjM4MAogICovCi1pbnQgcjMwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjMwMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMzAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjMwMF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfZmVuY2VfcmluZ19lbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7Ci1pbnQgcjMwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCBydjM3MF9wY2llX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7Ci11aW50MzJfdCBydjM3MF9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7Ci12b2lkIHJ2MzcwX3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKLXZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcyk7Ci1pbnQgcjMwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKLQkJICB1aW50NjRfdCBzcmNfb2Zmc2V0LAotCQkgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCi0JCSAgdW5zaWduZWQgbnVtX3BhZ2VzLAotCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKLQorZXh0ZXJuIGludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMzAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworZXh0ZXJuIGludCByMzAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKK2V4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKK2V4dGVybiB1aW50MzJfdCBydjM3MF9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CitleHRlcm4gdm9pZCBydjM3MF9wY2llX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CitleHRlcm4gdm9pZCBydjM3MF9zZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKK2V4dGVybiBpbnQgcjMwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCXVpbnQ2NF90IHNyY19vZmZzZXQsCisJCQl1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkJdW5zaWduZWQgbnVtX3BhZ2VzLAorCQkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMzAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjMwMF9pbml0LAotCS5lcnJhdGEgPSAmcjMwMF9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZyMzAwX3ZyYW1faW5mbywKKwkuZmluaSA9ICZyMzAwX2ZpbmksCisJLnN1c3BlbmQgPSAmcjMwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjMwMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcjMwMF9tY19pbml0LAotCS5tY19maW5pID0gJnIzMDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcjEwMF9wY2lfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcjEwMF9wY2lfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnIxMDBfcGNpX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMTg4LDcgKzE1Myw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKQEAgLTIwOSwyNiArMTc2LDE0IEBACiAJLmZpbmkgPSAmcjQyMF9maW5pLAogCS5zdXNwZW5kID0gJnI0MjBfc3VzcGVuZCwKIAkucmVzdW1lID0gJnI0MjBfcmVzdW1lLAotCS5lcnJhdGEgPSBOVUxMLAotCS52cmFtX2luZm8gPSBOVUxMLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSBOVUxMLAotCS53Yl9maW5pID0gTlVMTCwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSBOVUxMLAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMjM3LDcgKzE5Miw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMjUwLDQyICsyMDcsMjcgQEAKIC8qCiAgKiByczQwMCxyczQ4MAogICovCi12b2lkIHJzNDAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM0MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNDAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIHVpbnQzMl90IHJzNDAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJzNDAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNDAwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcjMwMF9pbml0LAotCS5lcnJhdGEgPSAmcnM0MDBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnM0MDBfdnJhbV9pbmZvLAorCS5pbml0ID0gJnJzNDAwX2luaXQsCisJLmZpbmkgPSAmcnM0MDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyczQwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcnM0MDBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnJzNDAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcnM0MDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcnM0MDBfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcnM0MDBfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyczQwMF9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnJzNDAwX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnM0MDBfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM0MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMjk0LDcgKzIzNiw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0zMDcsMTggKzI1MSwxMyBAQAogLyoKICAqIHJzNjAwLgogICovCi1pbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczYwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM2MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7Ci1pbnQgcnM2MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByczYwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7CiB1aW50MzJfdCByczYwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwpAQCAtMzI2LDI4ICsyNjUsMTcgQEAKIHZvaWQgcnM2MDBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNjAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcnM2MDBfaW5pdCwKLQkuZXJyYXRhID0gJnJzNjAwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnJzNjAwX3ZyYW1faW5mbywKKwkuZmluaSA9ICZyczYwMF9maW5pLAorCS5zdXNwZW5kID0gJnJzNjAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyczYwMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcnM2MDBfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZyczYwMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZyczYwMF9nYXJ0X2luaXQsCi0JLmdhcnRfZmluaSA9ICZyczYwMF9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnJzNjAwX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnM2MDBfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyczYwMF9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0zNTYsNyArMjg0LDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMzY3LDM3ICsyOTcsMjYgQEAKIC8qCiAgKiByczY5MCxyczc0MAogICovCi12b2lkIHJzNjkwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjkwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2OTBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjkwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByczY5MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByczY5MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnM2OTBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnM2OTBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnM2OTBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNjkwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcnM2MDBfaW5pdCwKLQkuZXJyYXRhID0gJnJzNjkwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnJzNjkwX3ZyYW1faW5mbywKKwkuaW5pdCA9ICZyczY5MF9pbml0LAorCS5maW5pID0gJnJzNjkwX2ZpbmksCisJLnN1c3BlbmQgPSAmcnM2OTBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJzNjkwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyczY5MF9tY19pbml0LAotCS5tY19maW5pID0gJnJzNjkwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnJzNDAwX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJzNDAwX2dhcnRfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcnM0MDBfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZyczQwMF9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNDAwX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMzAwX3Jpbmdfc3RhcnQsCiAJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyczYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyczYwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnJzNjAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTQwNiw3ICszMjUsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjMwMF9jb3B5X2RtYSwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTQyMCw0MSArMzQxLDI5IEBACiAgKiBydjUxNQogICovCiBpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NTE1X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnY1MTVfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnY1MTVfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnY1MTVfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1aW50MzJfdCBydjUxNV9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJ2NTE1X3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjUxNV9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnY1MTVfYXNpYyA9IHsKIAkuaW5pdCA9ICZydjUxNV9pbml0LAotCS5lcnJhdGEgPSAmcnY1MTVfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnY1MTVfdnJhbV9pbmZvLAorCS5maW5pID0gJnJ2NTE1X2ZpbmksCisJLnN1c3BlbmQgPSAmcnY1MTVfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJ2NTE1X3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZydjUxNV9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcnY1MTVfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZydjUxNV9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNDYzLDcgKzM3Miw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtNDc2LDM1ICszODcsMjEgQEAKIC8qCiAgKiByNTIwLHJ2NTMwLHJ2NTYwLHJ2NTcwLHI1ODAKICAqLwotdm9pZCByNTIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI1MjBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNTIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNTIwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNTIwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHI1MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjUyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNTIwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcnY1MTVfaW5pdCwKLQkuZXJyYXRhID0gJnI1MjBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcjUyMF92cmFtX2luZm8sCisJLmluaXQgPSAmcjUyMF9pbml0LAorCS5maW5pID0gJnJ2NTE1X2ZpbmksCisJLnN1c3BlbmQgPSAmcnY1MTVfc3VzcGVuZCwKKwkucmVzdW1lID0gJnI1MjBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NTE1X2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyNTIwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcjUyMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNTEzLDEzICs0MTAsMTUgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcsCi0JLmJhbmR3aWR0aF91cGRhdGUgPSAmcjUyMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCiB9OwogCiAvKgpAQCAtNTUyLDM3ICs0NTEsMjMgQEAKIAkJCSB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IG9ial9zaXplKTsKIGludCByNjAwX2NsZWFyX3N1cmZhY2VfcmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgcmVnKTsKIHZvaWQgcjYwMF9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKLWludCByNjAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHI2MDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByNjAwX2NvcHlfYmxpdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJICAgdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKIAkJICAgdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjYwMF9hc2ljID0gewotCS5lcnJhdGEgPSBOVUxMLAogCS5pbml0ID0gJnI2MDBfaW5pdCwKIAkuZmluaSA9ICZyNjAwX2ZpbmksCiAJLnN1c3BlbmQgPSAmcjYwMF9zdXNwZW5kLAogCS5yZXN1bWUgPSAmcjYwMF9yZXN1bWUsCiAJLmNwX2NvbW1pdCA9ICZyNjAwX2NwX2NvbW1pdCwKLQkudnJhbV9pbmZvID0gTlVMTCwKIAkudmdhX3NldF9zdGF0ZSA9ICZyNjAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyNjAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9IE5VTEwsCi0JLm1jX2ZpbmkgPSBOVUxMLAotCS53Yl9pbml0ID0gJnI2MDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyNjAwX3diX2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gTlVMTCwKLQkuZ2FydF9kaXNhYmxlID0gTlVMTCwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSBOVUxMLAotCS5jcF9maW5pID0gTlVMTCwKLQkuY3BfZGlzYWJsZSA9IE5VTEwsCi0JLnJpbmdfc3RhcnQgPSBOVUxMLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyNjAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyNjAwX2lycV9wcm9jZXNzLAogCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjYwMF9mZW5jZV9yaW5nX2VtaXQsCkBAIC01OTAsMTMgKzQ3NSwxNSBAQAogCS5jb3B5X2JsaXQgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnI2MDBfY29weV9ibGl0LAogCS5jb3B5ID0gJnI2MDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByNjAwX2NsZWFyX3N1cmZhY2VfcmVnLAotCS5iYW5kd2lkdGhfdXBkYXRlID0gJnI1MjBfYmFuZHdpZHRoX3VwZGF0ZSwKKwkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZydjUxNV9iYW5kd2lkdGhfdXBkYXRlLAogfTsKIAogLyoKQEAgLTYwOSwzMCArNDk2LDE3IEBACiBpbnQgcnY3NzBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBydjc3MF9hc2ljID0gewotCS5lcnJhdGEgPSBOVUxMLAogCS5pbml0ID0gJnJ2NzcwX2luaXQsCiAJLmZpbmkgPSAmcnY3NzBfZmluaSwKIAkuc3VzcGVuZCA9ICZydjc3MF9zdXNwZW5kLAogCS5yZXN1bWUgPSAmcnY3NzBfcmVzdW1lLAogCS5jcF9jb21taXQgPSAmcjYwMF9jcF9jb21taXQsCi0JLnZyYW1faW5mbyA9IE5VTEwsCiAJLmdwdV9yZXNldCA9ICZydjc3MF9ncHVfcmVzZXQsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjYwMF92Z2Ffc2V0X3N0YXRlLAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSAmcjYwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnI2MDBfd2JfZmluaSwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKLQkucmluZ19zdGFydCA9IE5VTEwsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnI2MDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnI2MDBfaXJxX3Byb2Nlc3MsCiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKQEAgLTY0MCwxMyArNTE0LDE1IEBACiAJLmNvcHlfYmxpdCA9ICZyNjAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHkgPSAmcjYwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcsCi0JLmJhbmR3aWR0aF91cGRhdGUgPSAmcjUyMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDc0Mzc0MjEuLjJlZDg4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtNDYsNyArNDYsOCBAQAogCQkJICB1aW50MzJfdCBzdXBwb3J0ZWRfZGV2aWNlLAogCQkJICBpbnQgY29ubmVjdG9yX3R5cGUsCiAJCQkgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCi0JCQkgIGJvb2wgbGlua2IsIHVpbnQzMl90IGlncF9sYW5lX2luZm8pOworCQkJICBib29sIGxpbmtiLCB1aW50MzJfdCBpZ3BfbGFuZV9pbmZvLAorCQkJICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogLyogZnJvbSByYWRlb25fbGVnYWN5X2VuY29kZXIuYyAqLwogZXh0ZXJuIHZvaWQKQEAgLTE5Myw2ICsxOTQsMjMgQEAKIAlEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQKIH07CiAKK2NvbnN0IHVpbnQxNl90IHN1cHBvcnRlZF9kZXZpY2VzX2Nvbm5lY3Rvcl9vYmplY3RfaWRfY29udmVydFtdID0geworCUNPTk5FQ1RPUl9PQkpFQ1RfSURfTk9ORSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSwgLyogbm90IGFsbCBib2FyZHMgc3VwcG9ydCBETCAqLworCUNPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9ELCAvKiBub3QgYWxsIGJvYXJkcyBzdXBwb3J0IERMICovCisJQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EsIC8qIHRlY2huaWNhbGx5IERWSS1BICovCisJQ09OTkVDVE9SX09CSkVDVF9JRF9DT01QT1NJVEUsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8sCisJQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfOVBJTl9ESU4sCisJQ09OTkVDVE9SX09CSkVDVF9JRF85UElOX0RJTiwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JULAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0EsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQiwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTworfTsKKwogY29uc3QgaW50IG9iamVjdF9jb25uZWN0b3JfY29udmVydFtdID0gewogCURSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duLAogCURSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLApAQCAtMjI5LDcgKzI0Nyw3IEBACiAJQVRPTV9PQkpFQ1RfSEVBREVSICpvYmpfaGVhZGVyOwogCWludCBpLCBqLCBwYXRoX3NpemUsIGRldmljZV9zdXBwb3J0OwogCWludCBjb25uZWN0b3JfdHlwZTsKLQl1aW50MTZfdCBpZ3BfbGFuZV9pbmZvLCBjb25uX2lkOworCXVpbnQxNl90IGlncF9sYW5lX2luZm8sIGNvbm5faWQsIGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiAJYm9vbCBsaW5rYjsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjIGRkY19idXM7CiAKQEAgLTI3MiwxNSArMjkwLDEzIEBACiAJCQkgICAgKGxlMTZfdG9fY3B1KHBhdGgtPnVzQ29ubk9iamVjdElkKSAmCiAJCQkgICAgIE9CSkVDVF9UWVBFX01BU0spID4+IE9CSkVDVF9UWVBFX1NISUZUOwogCi0JCQlpZiAoKGxlMTZfdG9fY3B1KHBhdGgtPnVzRGV2aWNlVGFnKSA9PQotCQkJICAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkKLQkJCSAgICB8fCAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09Ci0JCQkJQVRPTV9ERVZJQ0VfVFYyX1NVUFBPUlQpCi0JCQkgICAgfHwgKGxlMTZfdG9fY3B1KHBhdGgtPnVzRGV2aWNlVGFnKSA9PQotCQkJCUFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQkJLyogVE9ETyBDViBzdXBwb3J0ICovCisJCQlpZiAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09CisJCQkJQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgJiYKKwkJCS8qIElHUCBjaGlwcyAqLworCQkJaWYgKChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApICYmCiAJCQkgICAgKGNvbl9vYmpfaWQgPT0KIAkJCSAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9QQ0lFX0NPTk5FQ1RPUikpIHsKIAkJCQl1aW50MTZfdCBpZ3Bfb2Zmc2V0ID0gMDsKQEAgLTMxNCw2ICszMzAsNyBAQAogCQkJCQkJY29ubmVjdG9yX3R5cGUgPQogCQkJCQkJICAgIG9iamVjdF9jb25uZWN0b3JfY29udmVydAogCQkJCQkJICAgIFtjdF07CisJCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY3Q7CiAJCQkJCQlpZ3BfbGFuZV9pbmZvID0KIAkJCQkJCSAgICBzbG90X2NvbmZpZyAmIDB4ZmZmZjsKIAkJCQkJfSBlbHNlCkBAIC0zMjQsNiArMzQxLDcgQEAKIAkJCQlpZ3BfbGFuZV9pbmZvID0gMDsKIAkJCQljb25uZWN0b3JfdHlwZSA9CiAJCQkJICAgIG9iamVjdF9jb25uZWN0b3JfY29udmVydFtjb25fb2JqX2lkXTsKKwkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29uX29ial9pZDsKIAkJCX0KIAogCQkJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKQpAQCAtNDI4LDcgKzQ0Niw4IEBACiAJCQkJCQkgIGxlMTZfdG9fY3B1KHBhdGgtPgogCQkJCQkJCSAgICAgIHVzRGV2aWNlVGFnKSwKIAkJCQkJCSAgY29ubmVjdG9yX3R5cGUsICZkZGNfYnVzLAotCQkJCQkJICBsaW5rYiwgaWdwX2xhbmVfaW5mbyk7CisJCQkJCQkgIGxpbmtiLCBpZ3BfbGFuZV9pbmZvLAorCQkJCQkJICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogCQl9CiAJfQpAQCAtNDM4LDYgKzQ1Nyw0NSBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdWludDE2X3QgYXRvbWJpb3NfZ2V0X2Nvbm5lY3Rvcl9vYmplY3RfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSBpbnQgY29ubmVjdG9yX3R5cGUsCisJCQkJCQkgdWludDE2X3QgZGV2aWNlcykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCXJldHVybiBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnQKKwkJCVtjb25uZWN0b3JfdHlwZV07CisJfSBlbHNlIGlmICgoKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSB8fAorCQkgICAgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEKSkgJiYKKwkJICAgKGRldmljZXMgJiBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQpKSAgeworCQlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwkJc3RydWN0IGF0b21fY29udGV4dCAqY3R4ID0gbW9kZV9pbmZvLT5hdG9tX2NvbnRleHQ7CisJCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIFhUTURTX0luZm8pOworCQl1aW50MTZfdCBzaXplLCBkYXRhX29mZnNldDsKKwkJdWludDhfdCBmcmV2LCBjcmV2OworCQlBVE9NX1hUTURTX0lORk8gKnh0bWRzOworCisJCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIoY3R4LCBpbmRleCwgJnNpemUsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKKwkJeHRtZHMgPSAoQVRPTV9YVE1EU19JTkZPICopKGN0eC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKworCQlpZiAoeHRtZHMtPnVjU3VwcG9ydGVkTGluayAmIEFUT01fWFRNRFNfU1VQUE9SVEVEX0RVQUxMSU5LKSB7CisJCQlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRDsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnQKKwkJCVtjb25uZWN0b3JfdHlwZV07CisJfQorfQorCiBzdHJ1Y3QgYmlvc19jb25uZWN0b3IgewogCWJvb2wgdmFsaWQ7CiAJdWludDE2X3QgbGluZV9tdXg7CkBAIC01OTYsMTQgKzY1NCwyMCBAQAogCiAJLyogYWRkIHRoZSBjb25uZWN0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0U7IGkrKykgewotCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLnZhbGlkKQorCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLnZhbGlkKSB7CisJCQl1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkID0KKwkJCQlhdG9tYmlvc19nZXRfY29ubmVjdG9yX29iamVjdF9pZChkZXYsCisJCQkJCQkgICAgICBiaW9zX2Nvbm5lY3RvcnNbaV0uY29ubmVjdG9yX3R5cGUsCisJCQkJCQkgICAgICBiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcyk7CiAJCQlyYWRlb25fYWRkX2F0b21fY29ubmVjdG9yKGRldiwKIAkJCQkJCSAgYmlvc19jb25uZWN0b3JzW2ldLmxpbmVfbXV4LAogCQkJCQkJICBiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcywKIAkJCQkJCSAgYmlvc19jb25uZWN0b3JzW2ldLgogCQkJCQkJICBjb25uZWN0b3JfdHlwZSwKIAkJCQkJCSAgJmJpb3NfY29ubmVjdG9yc1tpXS5kZGNfYnVzLAotCQkJCQkJICBmYWxzZSwgMCk7CisJCQkJCQkgIGZhbHNlLCAwLAorCQkJCQkJICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKKwkJfQogCX0KIAogCXJhZGVvbl9saW5rX2VuY29kZXJfY29ubmVjdG9yKGRldik7CkBAIC02NDQsOCArNzA4LDEyIEBACiAJCSAgICBsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvLnVzUmVmZXJlbmNlQ2xvY2spOwogCQlwMXBsbC0+cmVmZXJlbmNlX2RpdiA9IDA7CiAKLQkJcDFwbGwtPnBsbF9vdXRfbWluID0KLQkJICAgIGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udXNNaW5QaXhlbENsb2NrUExMX091dHB1dCk7CisJCWlmIChjcmV2IDwgMikKKwkJCXAxcGxsLT5wbGxfb3V0X21pbiA9CisJCQkJbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKKwkJZWxzZQorCQkJcDFwbGwtPnBsbF9vdXRfbWluID0KKwkJCQlsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzEyLnVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQpOwogCQlwMXBsbC0+cGxsX291dF9tYXggPQogCQkgICAgbGUzMl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKIApAQCAtNjU0LDYgKzcyMiwxNiBAQAogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQkJZWxzZQogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDIwMDAwOworCQl9IGVsc2UgaWYgKHAxcGxsLT5wbGxfb3V0X21pbiA+IDY0ODAwKSB7CisJCQkvKiBMaW1pdGluZyB0aGUgcGxsIG91dHB1dCByYW5nZSBpcyBhIGdvb2QgdGhpbmcgZ2VuZXJhbGx5IGFzCisJCQkgKiBpdCBsaW1pdHMgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBwbGwgY29tYmluYXRpb25zIGZvciBhIGdpdmVuCisJCQkgKiBmcmVxdWVuY3kgcHJlc3VtYWJseSB0byB0aGUgb25lcyB0aGF0IHdvcmsgYmVzdCBvbiBlYWNoIGNhcmQuCisJCQkgKiBIb3dldmVyLCBjZXJ0YWluIGR1YWxsaW5rIERWSSBtb25pdG9ycyBzZWVtIHRvIGxpa2UKKwkJCSAqIHBsbCBjb21iaW5hdGlvbnMgdGhhdCB3b3VsZCBiZSBsaW1pdGVkIGJ5IHRoaXMgYXQgbGVhc3Qgb24KKwkJCSAqIHByZS1EQ0UgMy4wIHI2eHggaGFyZHdhcmUuICBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgYWRqdXN0ZWQgcGVyCisJCQkgKiBmYW1pbHkuCisJCQkgKi8KKwkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQl9CiAKIAkJcDFwbGwtPnBsbF9pbl9taW4gPQpAQCAtNzcwLDYgKzg0OCw0NiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIHN0cnVjdCByYWRlb25fYXRvbV9zcyAqcmFkZW9uX2F0b21iaW9zX2dldF9zc19pbmZvKHN0cnVjdAorCQkJCQkJCSAgcmFkZW9uX2VuY29kZXIKKwkJCQkJCQkgICplbmNvZGVyLAorCQkJCQkJCSAgaW50IGlkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgUFBMTF9TU19JbmZvKTsKKwl1aW50MTZfdCBkYXRhX29mZnNldDsKKwlzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gKnNzX2luZm87CisJdWludDhfdCBmcmV2LCBjcmV2OworCXN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3MgPSBOVUxMOworCisJaWYgKGlkID4gQVRPTV9NQVhfU1NfRU5UUlkpCisJCXJldHVybiBOVUxMOworCisJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsICZmcmV2LAorCQkJICAgICAgICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCisJc3NfaW5mbyA9CisJICAgIChzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisKKwlpZiAoc3NfaW5mbykgeworCQlzcyA9CisJCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2F0b21fc3MpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXNzKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJc3MtPnBlcmNlbnRhZ2UgPSBsZTE2X3RvX2NwdShzc19pbmZvLT5hc1NTX0luZm9baWRdLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKKwkJc3MtPnR5cGUgPSBzc19pbmZvLT5hc1NTX0luZm9baWRdLnVjU3ByZWFkU3BlY3RydW1UeXBlOworCQlzcy0+c3RlcCA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19TdGVwOworCQlzcy0+ZGVsYXkgPSBzc19pbmZvLT5hc1NTX0luZm9baWRdLnVjU1NfRGVsYXk7CisJCXNzLT5yYW5nZSA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19SYW5nZTsKKwkJc3MtPnJlZmRpdiA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNSZWNvbW1lbmRlZFJlZl9EaXY7CisJfQorCXJldHVybiBzczsKK30KKwogdW5pb24gbHZkc19pbmZvIHsKIAlzdHJ1Y3QgX0FUT01fTFZEU19JTkZPIGluZm87CiAJc3RydWN0IF9BVE9NX0xWRFNfSU5GT19WMTIgaW5mb18xMjsKQEAgLTgwMSwyNyArOTE5LDMxIEBACiAJCWlmICghbHZkcykKIAkJCXJldHVybiBOVUxMOwogCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmRvdGNsb2NrID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuY2xvY2sgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNQaXhDbGspICogMTA7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hBY3RpdmUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWQWN0aXZlKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUuaGJsYW5rID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSEJsYW5raW5nX1RpbWUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5ob3ZlcnBsdXMgPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY09mZnNldCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3dpZHRoID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSFN5bmNXaWR0aCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnZibGFuayA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZCbGFua2luZ19UaW1lKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUudm92ZXJwbHVzID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzVlN5bmNPZmZzZXQpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY193aWR0aCA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZTeW5jV2lkdGgpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5odG90YWwgPSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hCbGFua2luZ19UaW1lKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgPSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hTeW5jT2Zmc2V0KTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfZW5kID0gbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY1dpZHRoKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnRvdGFsID0gbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWQmxhbmtpbmdfVGltZSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX3N0YXJ0ID0gbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY1dpZHRoKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfZW5kID0gbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY1dpZHRoKTsKIAkJbHZkcy0+cGFuZWxfcHdyX2RlbGF5ID0KIAkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c09mZkRlbGF5SW5Ncyk7CiAJCWx2ZHMtPmx2ZHNfbWlzYyA9IGx2ZHNfaW5mby0+aW5mby51Y0xWRFNfTWlzYzsKKwkJLyogc2V0IGNydGMgdmFsdWVzICovCisJCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbHZkcy0+bmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCisJCWx2ZHMtPnNzID0gcmFkZW9uX2F0b21iaW9zX2dldF9zc19pbmZvKGVuY29kZXIsIGx2ZHNfaW5mby0+aW5mby51Y1NTX0lkKTsKIAogCQllbmNvZGVyLT5uYXRpdmVfbW9kZSA9IGx2ZHMtPm5hdGl2ZV9tb2RlOwogCX0KQEAgLTg2MCw4ICs5ODIsNyBAQAogfQogCiBib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCi0JCQkJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqY3J0Y190aW1pbmcsCi0JCQkJaW50MzJfdCAqcGl4ZWxfY2xvY2spCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CiAJQVRPTV9BTkFMT0dfVFZfSU5GTyAqdHZfaW5mbzsKQEAgLTg2OSw3ICs5OTAsNyBAQAogCUFUT01fRFREX0ZPUk1BVCAqZHRkX3RpbWluZ3M7CiAJaW50IGRhdGFfaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBBbmFsb2dUVl9JbmZvKTsKIAl1OCBmcmV2LCBjcmV2OwotCXVpbnQxNl90IGRhdGFfb2Zmc2V0OworCXUxNiBkYXRhX29mZnNldCwgbWlzYzsKIAogCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGRhdGFfaW5kZXgsIE5VTEwsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKIApAQCAtODc5LDI4ICsxMDAwLDM3IEBACiAJCWlmIChpbmRleCA+IE1BWF9TVVBQT1JURURfVFZfVElNSU5HKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCWNydGNfdGltaW5nLT51c0hfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1RvdGFsKTsKLQkJY3J0Y190aW1pbmctPnVzSF9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKLQkJY3J0Y190aW1pbmctPnVzSF9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCk7Ci0JCWNydGNfdGltaW5nLT51c0hfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX2h0b3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfVG90YWwpOworCQltb2RlLT5jcnRjX2hkaXNwbGF5ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKKwkJbW9kZS0+Y3J0Y19oc3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1N0YXJ0KTsKKwkJbW9kZS0+Y3J0Y19oc3luY19lbmQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCkgKworCQkJbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOwogCi0JCWNydGNfdGltaW5nLT51c1ZfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1RvdGFsKTsKLQkJY3J0Y190aW1pbmctPnVzVl9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKLQkJY3J0Y190aW1pbmctPnVzVl9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCk7Ci0JCWNydGNfdGltaW5nLT51c1ZfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX3Z0b3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfVG90YWwpOworCQltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKKwkJbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1N0YXJ0KTsKKwkJbW9kZS0+Y3J0Y192c3luY19lbmQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCkgKworCQkJbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOwogCi0JCWNydGNfdGltaW5nLT5zdXNNb2RlTWlzY0luZm8gPSB0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnN1c01vZGVNaXNjSW5mbzsKKwkJbW9kZS0+ZmxhZ3MgPSAwOworCQltaXNjID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOworCQlpZiAobWlzYyAmIEFUT01fVlNZTkNfUE9MQVJJVFkpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0hTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9DT01QT1NJVEVTWU5DKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19DU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0lOVEVSTEFDRSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCQlpZiAobWlzYyAmIEFUT01fRE9VQkxFX0NMT0NLX01PREUpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CiAKLQkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5SaWdodCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuUmlnaHQpOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkxlZnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhbkxlZnQpOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkJvdHRvbSA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuQm90dG9tKTsKLQkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5Ub3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhblRvcCk7Ci0JCSpwaXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOworCQltb2RlLT5jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOwogCiAJCWlmIChpbmRleCA9PSAxKSB7CiAJCQkvKiBQQUwgdGltaW5ncyBhcHBlYXIgdG8gaGF2ZSB3cm9uZyB2YWx1ZXMgZm9yIHRvdGFscyAqLwotCQkJY3J0Y190aW1pbmctPnVzSF9Ub3RhbCAtPSAxOwotCQkJY3J0Y190aW1pbmctPnVzVl9Ub3RhbCAtPSAxOworCQkJbW9kZS0+Y3J0Y19odG90YWwgLT0gMTsKKwkJCW1vZGUtPmNydGNfdnRvdGFsIC09IDE7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAyOgpAQCAtOTA5LDE3ICsxMDM5LDM2IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJZHRkX3RpbWluZ3MgPSAmdHZfaW5mb192MV8yLT5hTW9kZVRpbWluZ3NbaW5kZXhdOwotCQljcnRjX3RpbWluZy0+dXNIX1RvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQmxhbmtpbmdfVGltZSk7Ci0JCWNydGNfdGltaW5nLT51c0hfRGlzcCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNPZmZzZXQpOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hTeW5jV2lkdGgpOwotCQljcnRjX3RpbWluZy0+dXNWX1RvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQmxhbmtpbmdfVGltZSk7Ci0JCWNydGNfdGltaW5nLT51c1ZfRGlzcCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVlN5bmNPZmZzZXQpOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX2h0b3RhbCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsKKwkJCWxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hCbGFua2luZ19UaW1lKTsKKwkJbW9kZS0+Y3J0Y19oZGlzcGxheSA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpOworCQltb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNPZmZzZXQpOworCQltb2RlLT5jcnRjX2hzeW5jX2VuZCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNXaWR0aCk7CiAKLQkJY3J0Y190aW1pbmctPnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOwotCQkqcGl4ZWxfY2xvY2sgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNQaXhDbGspICogMTA7CisJCW1vZGUtPmNydGNfdnRvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkJsYW5raW5nX1RpbWUpOworCQltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSk7CisJCW1vZGUtPmNydGNfdnN5bmNfc3RhcnQgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY09mZnNldCk7CisJCW1vZGUtPmNydGNfdnN5bmNfZW5kID0gbW9kZS0+Y3J0Y192c3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY1dpZHRoKTsKKworCQltb2RlLT5mbGFncyA9IDA7CisJCW1pc2MgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzKTsKKwkJaWYgKG1pc2MgJiBBVE9NX1ZTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OVlNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9IU1lOQ19QT0xBUklUWSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCQlpZiAobWlzYyAmIEFUT01fQ09NUE9TSVRFU1lOQykKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfQ1NZTkM7CisJCWlmIChtaXNjICYgQVRPTV9JTlRFUkxBQ0UpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKKwkJaWYgKG1pc2MgJiBBVE9NX0RPVUJMRV9DTE9DS19NT0RFKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19EQkxTQ0FOOworCisJCW1vZGUtPmNsb2NrID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzUGl4Q2xrKSAqIDEwOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIHRydWU7CkBAIC05ODQsNiArMTEzMywyNCBAQAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQogCit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCUdFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEdldEVuZ2luZUNsb2NrKTsKKworCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOworCXJldHVybiBhcmdzLnVsUmV0dXJuRW5naW5lQ2xvY2s7Cit9CisKK3VpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJR0VUX01FTU9SWV9DTE9DS19QU19BTExPQ0FUSU9OIGFyZ3M7CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgR2V0TWVtb3J5Q2xvY2spOworCisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJcmV0dXJuIGFyZ3MudWxSZXR1cm5NZW1vcnlDbG9jazsKK30KKwogdm9pZCByYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJCSAgdWludDMyX3QgZW5nX2Nsb2NrKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmVuY2htYXJrLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYwppbmRleCAyZTkzOGY3Li4xMGJkNTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYwpAQCAtNjMsNyArNjMsNyBAQAogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5X2RtYShyZGV2LCBzYWRkciwgZGFkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQpAQCAtODgsNyArODgsNyBAQAogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzYWRkciwgZGFkZHIsIHNpemUgLyA0MDk2LCBmZW5jZSk7CisJCXIgPSByYWRlb25fY29weV9ibGl0KHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7CiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKaW5kZXggOTZlMzdhNi4uOTA2OTIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwpAQCAtMzMsMTIgKzMzLDQ3IEBACiAvKgogICogQklPUy4KICAqLworCisvKiBJZiB5b3UgYm9vdCBhbiBJR1AgYm9hcmQgd2l0aCBhIGRpc2NyZXRlIGNhcmQgYXMgdGhlIHByaW1hcnksCisgKiB0aGUgSUdQIHJvbSBpcyBub3QgYWNjZXNzaWJsZSB2aWEgdGhlIHJvbSBiYXIgYXMgdGhlIElHUCByb20gaXMKKyAqIHBhcnQgb2YgdGhlIHN5c3RlbSBiaW9zLiAgT24gYm9vdCwgdGhlIHN5c3RlbSBiaW9zIHB1dHMgYQorICogY29weSBvZiB0aGUgaWdwIHJvbSBhdCB0aGUgc3RhcnQgb2YgdnJhbSBpZiBhIGRpc2NyZXRlIGNhcmQgaXMKKyAqIHByZXNlbnQuCisgKi8KK3N0YXRpYyBib29sIGlncF9yZWFkX2Jpb3NfZnJvbV92cmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQ4X3QgX19pb21lbSAqYmlvczsKKwlyZXNvdXJjZV9zaXplX3QgdnJhbV9iYXNlOworCXJlc291cmNlX3NpemVfdCBzaXplID0gMjU2ICogMTAyNDsgLyogPz8/ICovCisKKwlyZGV2LT5iaW9zID0gTlVMTDsKKwl2cmFtX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOworCWJpb3MgPSBpb3JlbWFwKHZyYW1fYmFzZSwgc2l6ZSk7CisJaWYgKCFiaW9zKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoc2l6ZSA9PSAwIHx8IGJpb3NbMF0gIT0gMHg1NSB8fCBiaW9zWzFdICE9IDB4YWEpIHsKKwkJaW91bm1hcChiaW9zKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZGV2LT5iaW9zID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocmRldi0+YmlvcyA9PSBOVUxMKSB7CisJCWlvdW5tYXAoYmlvcyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJbWVtY3B5KHJkZXYtPmJpb3MsIGJpb3MsIHNpemUpOworCWlvdW5tYXAoYmlvcyk7CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBib29sIHJhZGVvbl9yZWFkX2Jpb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDhfdCBfX2lvbWVtICpiaW9zOwogCXNpemVfdCBzaXplOwogCiAJcmRldi0+YmlvcyA9IE5VTEw7CisJLyogWFhYOiBzb21lIGNhcmRzIG1heSByZXR1cm4gMCBmb3Igcm9tIHNpemU/IGRkeCBoYXMgYSB3b3JrYXJvdW5kICovCiAJYmlvcyA9IHBjaV9tYXBfcm9tKHJkZXYtPnBkZXYsICZzaXplKTsKIAlpZiAoIWJpb3MpIHsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzQxLDcgKzM3Niw5IEBACiAKIHN0YXRpYyBib29sIHJhZGVvbl9yZWFkX2Rpc2FibGVkX2Jpb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCisJCXJldHVybiBpZ3BfcmVhZF9iaW9zX2Zyb21fdnJhbShyZGV2KTsKKwllbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkKIAkJcmV0dXJuIHI3MDBfcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwogCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCiAJCXJldHVybiByNjAwX3JlYWRfZGlzYWJsZWRfYmlvcyhyZGV2KTsKQEAgLTM1Niw3ICszOTMsMTIgQEAKIAlib29sIHI7CiAJdWludDE2X3QgdG1wOwogCi0JciA9IHJhZGVvbl9yZWFkX2Jpb3MocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlyID0gaWdwX3JlYWRfYmlvc19mcm9tX3ZyYW0ocmRldik7CisJCWlmIChyID09IGZhbHNlKQorCQkJciA9IHJhZGVvbl9yZWFkX2Jpb3MocmRldik7CisJfSBlbHNlCisJCXIgPSByYWRlb25fcmVhZF9iaW9zKHJkZXYpOwogCWlmIChyID09IGZhbHNlKSB7CiAJCXIgPSByYWRlb25fcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKaW5kZXggMTUyZWVmMS4uYTgxMzU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJhdG9tLmgiCiAKIC8qIDEwIGtoeiAqLwotc3RhdGljIHVpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3VpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqc3BsbCA9ICZyZGV2LT5jbG9jay5zcGxsOwogCXVpbnQzMl90IGZiX2RpdiwgcmVmX2RpdiwgcG9zdF9kaXYsIHNjbGs7CkBAIC00MTEsNyArNDExLDcgQEAKIAkJCQkJUjMwMF9QSVhDTEtfVFJBTlNfQUxXQVlTX09OYiB8CiAJCQkJCVIzMDBfUElYQ0xLX1RWT19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAotCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYik7CisJCQkJCVIzMDBfUDJHMkNMS19EQUNfQUxXQVlTX09OYik7CiAJCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCB0bXApOwogCQkJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjM1MCkgewogCQkJCXRtcCA9IFJSRUczMl9QTEwoUjMwMF9TQ0xLX0NOVEwyKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCQkJCQlSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJCVIzMDBfUDJHMkNMS19BTFdBWVNfT05iKTsKKwkJCQkJUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iKTsKIAkJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAKIAkJCQl0bXAgPSBSUkVHMzJfUExMKFJBREVPTl9NQ0xLX01JU0MpOwpAQCAtNjU0LDcgKzY1NCw3IEBACiAJCQkJIFIzMDBfUElYQ0xLX1RSQU5TX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1BJWENMS19UVk9fQUxXQVlTX09OYiB8CiAJCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKLQkJCQkgUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAorCQkJCSBSMzAwX1AyRzJDTEtfREFDX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX0RJU1BfREFDX1BJWENMS19EQUMyX0JMQU5LX09GRik7CiAJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAJCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzNTApIHsKQEAgLTcwNSw3ICs3MDUsNyBAQAogCQkJCSBSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKKwkJCQkgUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9ESVNQX0RBQ19QSVhDTEtfREFDMl9CTEFOS19PRkYpOwogCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCB0bXApOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDc0ODI2NWEuLjUyNTNjYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTQ5LDcgKzQ5LDggQEAKIAkJCSAgICB1aW50MzJfdCBjb25uZWN0b3JfaWQsCiAJCQkgICAgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwKIAkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUsCi0JCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cyk7CisJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKKwkJCSAgICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogLyogZnJvbSByYWRlb25fbGVnYWN5X2VuY29kZXIuYyAqLwogZXh0ZXJuIHZvaWQKQEAgLTgwOCwyNSArODA5LDI1IEBACiAJbHZkcy0+cGFuZWxfYmxvbl9kZWxheSA9IChsdmRzX3NzX2dlbl9jbnRsID4+IFJBREVPTl9MVkRTX1BXUlNFUV9ERUxBWTJfU0hJRlQpICYgMHhmOwogCiAJaWYgKGZwX3ZlcnRfc3RyZXRjaCAmIFJBREVPTl9WRVJUX1NUUkVUQ0hfRU5BQkxFKQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgKChmcF92ZXJ0X3N0cmV0Y2ggJiBSQURFT05fVkVSVF9QQU5FTF9TSVpFKSA+PgogCQkgICAgIFJBREVPTl9WRVJUX1BBTkVMX1NISUZUKSArIDE7CiAJZWxzZQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgKFJSRUczMihSQURFT05fQ1JUQ19WX1RPVEFMX0RJU1ApID4+IDE2KSArIDE7CiAKIAlpZiAoZnBfaG9yel9zdHJldGNoICYgUkFERU9OX0hPUlpfU1RSRVRDSF9FTkFCTEUpCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICAoKChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9QQU5FTF9TSVpFKSA+PgogCQkgICAgICBSQURFT05fSE9SWl9QQU5FTF9TSElGVCkgKyAxKSAqIDg7CiAJZWxzZQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPQogCQkgICAgKChSUkVHMzIoUkFERU9OX0NSVENfSF9UT1RBTF9ESVNQKSA+PiAxNikgKyAxKSAqIDg7CiAKLQlpZiAoKGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPCA2NDApIHx8Ci0JICAgIChsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzIDwgNDgwKSkgewotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0gNjQwOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0gNDgwOworCWlmICgobHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPCA2NDApIHx8CisJICAgIChsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA8IDQ4MCkpIHsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPSA2NDA7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0gNDgwOwogCX0KIAogCXBwbGxfZGl2X3NlbCA9IFJSRUc4KFJBREVPTl9DTE9DS19DTlRMX0lOREVYICsgMSkgJiAweDM7CkBAIC04NDYsOCArODQ3LDggQEAKIAlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSAyMDA7CiAKIAlEUk1fSU5GTygiUGFuZWwgaW5mbyBkZXJpdmVkIGZyb20gcmVnaXN0ZXJzXG4iKTsKLQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcywKLQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpOworCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSwKKwkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KTsKIAogCXJldHVybiBsdmRzOwogfQpAQCAtODgyLDExICs4ODMsMTEgQEAKIAogCQlEUk1fSU5GTygiUGFuZWwgSUQgU3RyaW5nOiAlc1xuIiwgc3RtcCk7CiAKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9IFJCSU9TMTYobGNkX2luZm8gKyAweDE5KTsKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyA9IFJCSU9TMTYobGNkX2luZm8gKyAweDFiKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgxOSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MWIpOwogCi0JCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzLAotCQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpOworCQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXksCisJCQkgbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCiAJCWx2ZHMtPnBhbmVsX3ZjY19kZWxheSA9IFJCSU9TMTYobGNkX2luZm8gKyAweDJjKTsKIAkJaWYgKGx2ZHMtPnBhbmVsX3ZjY19kZWxheSA+IDIwMDAgfHwgbHZkcy0+cGFuZWxfdmNjX2RlbGF5IDwgMCkKQEAgLTk0NCwyNyArOTQ1LDI1IEBACiAJCQlpZiAodG1wID09IDApCiAJCQkJYnJlYWs7CiAKLQkJCWlmICgoUkJJT1MxNih0bXApID09IGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMpICYmCisJCQlpZiAoKFJCSU9TMTYodG1wKSA9PSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSkgJiYKIAkJCSAgICAoUkJJT1MxNih0bXAgKyAyKSA9PQotCQkJICAgICBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzKSkgewotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhibGFuayA9Ci0JCQkJICAgIChSQklPUzE2KHRtcCArIDE3KSAtIFJCSU9TMTYodG1wICsgMTkpKSAqIDg7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuaG92ZXJwbHVzID0KLQkJCQkgICAgKFJCSU9TMTYodG1wICsgMjEpIC0gUkJJT1MxNih0bXAgKyAxOSkgLQotCQkJCSAgICAgMSkgKiA4OwotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3dpZHRoID0KLQkJCQkgICAgUkJJT1M4KHRtcCArIDIzKSAqIDg7CisJCQkgICAgIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KSkgeworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmh0b3RhbCA9IFJCSU9TMTYodG1wICsgMTcpICogODsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19zdGFydCA9IFJCSU9TMTYodG1wICsgMjEpICogODsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19lbmQgPSAoUkJJT1M4KHRtcCArIDIzKSArCisJCQkJCQkJICAgICAgIFJCSU9TMTYodG1wICsgMjEpKSAqIDg7CiAKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS52YmxhbmsgPSAoUkJJT1MxNih0bXAgKyAyNCkgLQotCQkJCQkJCSAgICBSQklPUzE2KHRtcCArIDI2KSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUudm92ZXJwbHVzID0KLQkJCQkgICAgKChSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmKSAtCi0JCQkJICAgICBSQklPUzE2KHRtcCArIDI2KSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfd2lkdGggPQotCQkJCSAgICAoKFJCSU9TMTYodG1wICsgMjgpICYgMHhmODAwKSA+PiAxMSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuZG90Y2xvY2sgPQotCQkJCSAgICBSQklPUzE2KHRtcCArIDkpICogMTA7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnRvdGFsID0gUkJJT1MxNih0bXAgKyAyNCk7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgPSBSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmOworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX2VuZCA9CisJCQkJCSgoUkJJT1MxNih0bXAgKyAyOCkgJiAweGY4MDApID4+IDExKSArCisJCQkJCShSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmKTsKKworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmNsb2NrID0gUkJJT1MxNih0bXAgKyA5KSAqIDEwOwogCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmZsYWdzID0gMDsKKwkJCQkvKiBzZXQgY3J0YyB2YWx1ZXMgKi8KKwkJCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJmx2ZHMtPm5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKKwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTExNzgsNyArMTE3Nyw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0gZWxzZSBpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfTU9CSUxJVFkpIHsKIAkJCS8qIExWRFMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0xDRF9HUElPX01BU0spOwpAQCAtMTE5MCw3ICsxMTkwLDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCiAJCQkvKiBWR0EgLSBwcmltYXJ5IGRhYyAqLwogCQkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKQEAgLTEyMDIsNyArMTIwMyw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBEVkktSSAtIHR2IGRhYywgaW50IHRtZHMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fRFZJX0REQyk7CkBAIC0xMjIwLDcgKzEyMjIsOCBAQAogCQkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JKTsKIAogCQkJLyogVkdBIC0gcHJpbWFyeSBkYWMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CkBAIC0xMjMyLDcgKzEyMzUsOCBAQAogCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQl9CiAKIAkJaWYgKHJkZXYtPmZhbWlseSAhPSBDSElQX1IxMDAgJiYgcmRldi0+ZmFtaWx5ICE9IENISVBfUjIwMCkgewpAQCAtMTI0NSw3ICsxMjQ5LDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1RfSUJPT0s6CkBAIC0xMjU5LDcgKzEyNjQsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAkJLyogVkdBIC0gVFYgREFDICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTI2OCw3ICsxMjc0LDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMjc3LDcgKzEyODQsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX0VYVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIGV4dGVybmFsIHRtZHMpXG4iLApAQCAtMTI5MCw3ICsxMjk4LDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIERWSS1JIC0gcHJpbWFyeSBkYWMsIGV4dCB0bWRzICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTMwMywxMCArMTMxMiwxMiBAQAogCQkJCQkJCQlBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CisJCS8qIFhYWCBzb21lIGFyZSBTTCAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUIHwKIAkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzE1LDcgKzEzMjYsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX0lOVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIGludGVybmFsIHRtZHMpXG4iLApAQCAtMTMyOCw3ICsxMzQwLDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIERWSS1JIC0gcHJpbWFyeSBkYWMsIGludCB0bWRzICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTM0NCw3ICsxMzU3LDggQEAKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzUzLDcgKzEzNjcsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX1ZHQToKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKHBvd2VyYm9vayB2Z2EpXG4iLApAQCAtMTM2Niw3ICsxMzgxLDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIFZHQSAtIHByaW1hcnkgZGFjICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTM3NSw3ICsxMzkxLDggQEAKIAkJCQkJCQkJMSksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzg0LDcgKzE0MDEsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfTUlOSV9FWFRFUk5BTDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKG1pbmkgZXh0ZXJuYWwgdG1kcylcbiIsCkBAIC0xNDAxLDEwICsxNDE5LDEyIEBACiAJCQkJCQkJCUFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKKwkJLyogWFhYIGFyZSBhbnkgREw/ICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgfAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQxMyw3ICsxNDMzLDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX01JTklfSU5URVJOQUw6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChtaW5pIGludGVybmFsIHRtZHMpXG4iLApAQCAtMTQzMyw3ICsxNDU0LDggQEAKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNDQyLDcgKzE0NjQsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfSU1BQ19HNV9JU0lHSFQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChpbWFjIGc1IGlzaWdodClcbiIsCkBAIC0xNDU1LDcgKzE0NzgsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRCk7CiAJCS8qIFZHQSAtIHR2IGRhYyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX0RWSV9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTE0NjQsNyArMTQ4OCw4IEBACiAJCQkJCQkJCTIpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQ3Myw3ICsxNDk4LDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX0VNQUM6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChlbWFjKVxuIiwKQEAgLTE0ODYsNyArMTUxMiw4IEBACiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBWR0EgLSB0diBkYWMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19DUlQyX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTQ5NSw3ICsxNTIyLDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNTA0LDcgKzE1MzIsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgdGFibGU6ICVkIChpbnZhbGlkKVxuIiwKQEAgLTE1ODEsMTEgKzE2MTAsNjMgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgcmFkZW9uX2FwcGx5X2xlZ2FjeV90dl9xdWlya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBBY2VyIDUxMDIgaGFzIG5vbi1leGlzdGVudCBUViBwb3J0ICovCisJaWYgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4NTk3NSAmJgorCSAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDI1ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAwOWYpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEhQIGRjNTc1MCBoYXMgbm9uLWV4aXN0ZW50IFRWIHBvcnQgKi8KKwlpZiAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg1OTc0ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwM2MgJiYKKwkgICAgZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MjgwYSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBjb21iaW9zX2NoZWNrX2RsX2R2aShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaXNfZHZpX2QpCit7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGV4dF90bWRzX2luZm87CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCWlmIChpc19kdmlfZCkKKwkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCQllbHNlCisJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwl9CisJZXh0X3RtZHNfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfRVhUX1RNRFNfSU5GT19UQUJMRSk7CisJaWYgKGV4dF90bWRzX2luZm8pIHsKKwkJdWludDhfdCByZXYgPSBSQklPUzgoZXh0X3RtZHNfaW5mbyk7CisJCXVpbnQ4X3QgZmxhZ3MgPSBSQklPUzgoZXh0X3RtZHNfaW5mbyArIDQgKyA1KTsKKwkJaWYgKHJldiA+PSAzKSB7CisJCQlpZiAoaXNfZHZpX2QpCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSTsKKwkJfSBlbHNlIHsKKwkJCWlmIChmbGFncyAmIDEpIHsKKwkJCQlpZiAoaXNfZHZpX2QpCisJCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJCQllbHNlCisJCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaXNfZHZpX2QpCisJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCWVsc2UKKwkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0k7Cit9CisKIGJvb2wgcmFkZW9uX2dldF9sZWdhY3lfY29ubmVjdG9yX2luZm9fZnJvbV9iaW9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGNvbm5faW5mbywgZW50cnksIGRldmljZXM7Ci0JdWludDE2X3QgdG1wOworCXVpbnQxNl90IHRtcCwgY29ubmVjdG9yX29iamVjdF9pZDsKIAllbnVtIHJhZGVvbl9jb21iaW9zX2RkYyBkZGNfdHlwZTsKIAllbnVtIHJhZGVvbl9jb21iaW9zX2Nvbm5lY3RvciBjb25uZWN0b3I7CiAJaW50IGkgPSAwOwpAQCAtMTYyOCw4ICsxNzA5LDkgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcmFkZW9uX2FwcGx5X2xlZ2FjeV9xdWlya3MoZGV2LCBpLCAmY29ubmVjdG9yLAotCQkJCQkJICAgJmRkY19pMmMpOworCQkJaWYgKCFyYWRlb25fYXBwbHlfbGVnYWN5X3F1aXJrcyhkZXYsIGksICZjb25uZWN0b3IsCisJCQkJCQkgICAgICAgJmRkY19pMmMpKQorCQkJCWNvbnRpbnVlOwogCiAJCQlzd2l0Y2ggKGNvbm5lY3RvcikgewogCQkJY2FzZSBDT05ORUNUT1JfUFJPUFJJRVRBUllfTEVHQUNZOgpAQCAtMTY0NCw3ICsxNzI2LDggQEAKIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCBpLCBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfQ1JUX0xFR0FDWToKIAkJCQlpZiAodG1wICYgMHgxKSB7CkBAIC0xNjY5LDcgKzE3NTIsOCBAQAogCQkJCQkJCSAgICBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ09OTkVDVE9SX0RWSV9JX0xFR0FDWToKIAkJCQlkZXZpY2VzID0gMDsKQEAgLTE2OTgsNiArMTc4Miw3IEBACiAJCQkJCQkJCSAgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCwKIAkJCQkJCQkJICAgMCksCiAJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUKTsKKwkJCQkJY29ubmVjdG9yX29iamVjdF9pZCA9IGNvbWJpb3NfY2hlY2tfZGxfZHZpKGRldiwgMCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJZGV2aWNlcyB8PSBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQ7CiAJCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTcwNiwxOSArMTc5MSwyNCBAQAogCQkJCQkJCQkgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCiAJCQkJCQkJCSAgIDApLAogCQkJCQkJCQkgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCk7CisJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOwogCQkJCX0KIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LAogCQkJCQkJCSAgICBpLAogCQkJCQkJCSAgICBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfRFZJX0RfTEVHQUNZOgotCQkJCWlmICgodG1wID4+IDQpICYgMHgxKQorCQkJCWlmICgodG1wID4+IDQpICYgMHgxKSB7CiAJCQkJCWRldmljZXMgPSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQ7Ci0JCQkJZWxzZQorCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29tYmlvc19jaGVja19kbF9kdmkoZGV2LCAxKTsKKwkJCQl9IGVsc2UgewogCQkJCQlkZXZpY2VzID0gQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUOworCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwkJCQl9CiAJCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKIAkJCQkJCQkgIChkZXYsIGRldmljZXMsIDApLApAQCAtMTcyNiw3ICsxODE2LDggQEAKIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCBpLCBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfQ1RWX0xFR0FDWToKIAkJCWNhc2UgQ09OTkVDVE9SX1NUVl9MRUdBQ1k6CkBAIC0xNzQwLDcgKzE4MzEsOCBAQAogCQkJCQkJCSAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJCQkgICAgbGVnYWN5X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkJICAgIFtjb25uZWN0b3JdLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCURSTV9FUlJPUigiVW5rbm93biBjb25uZWN0b3IgdHlwZTogJWRcbiIsCkBAIC0xNzcyLDEwICsxODY0LDI5IEBACiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUIHwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQl9IGVsc2UgewotCQkJRFJNX0RFQlVHKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQl1aW50MTZfdCBjcnRfaW5mbyA9CisJCQkJY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19DUlRfSU5GT19UQUJMRSk7CisJCQlEUk1fREVCVUcoIkZvdW5kIENSVCB0YWJsZSwgYXNzdW1pbmcgVkdBIGNvbm5lY3RvclxuIik7CisJCQlpZiAoY3J0X2luZm8pIHsKKwkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCisJCQkJCQkJCQkJQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAorCQkJCQkJCQkJCTEpLAorCQkJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKKwkJCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOworCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKKwkJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKKwkJCX0gZWxzZSB7CisJCQkJRFJNX0RFQlVHKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQogCQl9CiAJfQogCkBAIC0xODcwLDcgKzE5ODEsOCBAQAogCQkJCQkJICAgIDUsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCQl9CiAJfQogCkBAIC0xODgwLDE2ICsxOTkyLDE5IEBACiAJCSAgICBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX1RWX0lORk9fVEFCTEUpOwogCQlpZiAodHZfaW5mbykgewogCQkJaWYgKFJCSU9TOCh0dl9pbmZvICsgNikgPT0gJ1QnKSB7Ci0JCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCi0JCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKLQkJCQkJCQkgIChkZXYsCi0JCQkJCQkJICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCi0JCQkJCQkJICAgMiksCi0JCQkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7Ci0JCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgNiwKLQkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCi0JCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQlpZiAocmFkZW9uX2FwcGx5X2xlZ2FjeV90dl9xdWlya3MoZGV2KSkgeworCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKKwkJCQkJCQkJICAoZGV2LAorCQkJCQkJCQkgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKKwkJCQkJCQkJICAgMiksCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOworCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCA2LAorCQkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCisJCQkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAorCQkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IGFmMWQ1NTEuLmZjZTRjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2VkaWQuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF0b20uaCIKQEAgLTE3NywyNSArMTc4LDEyIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBOVUxMOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCi0JaWYgKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICE9IDAgJiYKLQkgICAgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgIT0gMCAmJgotCSAgICBuYXRpdmVfbW9kZS0+ZG90Y2xvY2sgIT0gMCkgewotCQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7Ci0KLQkJbW9kZS0+aGRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJbW9kZS0+dmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQotCQltb2RlLT5odG90YWwgPSBtb2RlLT5oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCW1vZGUtPmNsb2NrID0gbmF0aXZlX21vZGUtPmRvdGNsb2NrOwotCQltb2RlLT5mbGFncyA9IDA7Ci0KKwlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ICE9IDAgJiYKKwkgICAgbmF0aXZlX21vZGUtPnZkaXNwbGF5ICE9IDAgJiYKKwkgICAgbmF0aXZlX21vZGUtPmNsb2NrICE9IDApIHsKKwkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG5hdGl2ZV9tb2RlKTsKIAkJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEIHwgRFJNX01PREVfVFlQRV9EUklWRVI7CiAJCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwogCkBAIC0yMDksNyArMTk3LDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAJaW50IGk7CiAJc3RydWN0IG1vZGVfc2l6ZSB7CiAJCWludCB3OwpAQCAtMjM1LDE3ICsyMjMsMjIgQEAKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IDE3OyBpKyspIHsKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSB7CisJCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPiAxMDI0IHx8CisJCQkgICAgY29tbW9uX21vZGVzW2ldLmggPiA3NjgpCisJCQkJY29udGludWU7CisJCX0KIAkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53ID4gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgfHwKLQkJCSAgICBjb21tb25fbW9kZXNbaV0uaCA+IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzIHx8Ci0JCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICYmCi0JCQkgICAgIGNvbW1vbl9tb2Rlc1tpXS5oID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSkKKwkJCWlmIChjb21tb25fbW9kZXNbaV0udyA+IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSB8fAorCQkJICAgIGNvbW1vbl9tb2Rlc1tpXS5oID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5IHx8CisJCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAmJgorCQkJICAgICBjb21tb25fbW9kZXNbaV0uaCA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChjb21tb25fbW9kZXNbaV0udyA8IDMyMCB8fCBjb21tb25fbW9kZXNbaV0uaCA8IDIwMCkKIAkJCWNvbnRpbnVlOwogCi0JCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBjb21tb25fbW9kZXNbaV0udywgY29tbW9uX21vZGVzW2ldLmgsIDYwLCBmYWxzZSwgZmFsc2UpOworCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgY29tbW9uX21vZGVzW2ldLncsIGNvbW1vbl9tb2Rlc1tpXS5oLCA2MCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKIAl9CiB9CkBAIC0zNDMsMjggKzMzNiwyMyBAQAogCQkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9CXRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCiAJLyogVHJ5IHRvIGdldCBuYXRpdmUgbW9kZSBkZXRhaWxzIGZyb20gRURJRCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCWlmICghbmF0aXZlX21vZGUtPmNsb2NrKSB7CiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0LCAqbW9kZTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7Ci0JCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgJiYKLQkJCSAgICBtb2RlLT52ZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgewotCQkJCW5hdGl2ZV9tb2RlLT5oYmxhbmsgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+aG92ZXJwbHVzID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGggPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKLQkJCQluYXRpdmVfbW9kZS0+dmJsYW5rID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXk7Ci0JCQkJbmF0aXZlX21vZGUtPnZvdmVycGx1cyA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7Ci0JCQkJbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7Ci0JCQkJbmF0aXZlX21vZGUtPmRvdGNsb2NrID0gbW9kZS0+Y2xvY2s7CisJCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICYmCisJCQkgICAgbW9kZS0+dmRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSB7CisJCQkJKm5hdGl2ZV9tb2RlID0gKm1vZGU7CisJCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKG5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKIAkJCQlEUk1fSU5GTygiRGV0ZXJtaW5lZCBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMgZnJvbSBFRElEXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KLQlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCWlmICghbmF0aXZlX21vZGUtPmNsb2NrKSB7CiAJCURSTV9JTkZPKCJObyBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMsIGRpc2FibGluZyBSTVhcbiIpOwogCQlyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPSBSTVhfT0ZGOwogCX0KQEAgLTQwOSwxMyArMzk3LDY0IEBACiBzdGF0aWMgaW50IHJhZGVvbl9sdmRzX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisKKwlpZiAoKG1vZGUtPmhkaXNwbGF5IDwgMzIwKSB8fCAobW9kZS0+dmRpc3BsYXkgPCAyNDApKQorCQlyZXR1cm4gTU9ERV9QQU5FTDsKKworCWlmIChlbmNvZGVyKSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKworCQkvKiBBVklWTyBoYXJkd2FyZSBzdXBwb3J0cyBkb3duc2NhbGluZyBtb2RlcyBsYXJnZXIgdGhhbiB0aGUgcGFuZWwKKwkJICogdG8gdGhlIHBhbmVsIHNpemUsIGJ1dCBJJ20gbm90IHN1cmUgdGhpcyBpcyBkZXNpcmFibGUuCisJCSAqLworCQlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gbmF0aXZlX21vZGUtPmhkaXNwbGF5KSB8fAorCQkgICAgKG1vZGUtPnZkaXNwbGF5ID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCisJCS8qIGlmIHNjYWxpbmcgaXMgZGlzYWJsZWQsIGJsb2NrIG5vbi1uYXRpdmUgbW9kZXMgKi8KKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9PSBSTVhfT0ZGKSB7CisJCQlpZiAoKG1vZGUtPmhkaXNwbGF5ICE9IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkgfHwKKwkJCSAgICAobW9kZS0+dmRpc3BsYXkgIT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKKwkJCQlyZXR1cm4gTU9ERV9QQU5FTDsKKwkJfQorCX0KKwogCXJldHVybiBNT0RFX09LOwogfQogCiBzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByYWRlb25fbHZkc19kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCWlmIChlbmNvZGVyKSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKworCQkvKiBjaGVjayBpZiBwYW5lbCBpcyB2YWxpZCAqLworCQlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ID49IDMyMCAmJiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPj0gMjQwKQorCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKKwl9CisKKwkvKiBjaGVjayBmb3IgZWRpZCBhcyB3ZWxsICovCisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykgeworCQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCQkgICAgICAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CisJCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0KIAkvKiBjaGVjayBhY3BpIGxpZCBzdGF0dXMgPz8/ICovCisKIAlyYWRlb25fY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3MoY29ubmVjdG9yLCByZXQpOwogCXJldHVybiByZXQ7CiB9CkBAIC00MjYsNiArNDY1LDggQEAKIAogCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQlyYWRlb25faTJjX2Rlc3Ryb3kocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyk7CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KTsKIAlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwpAQCAtNDk1LDYgKzUzNiw4IEBACiBzdGF0aWMgaW50IHJhZGVvbl92Z2FfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCisJLyogWFhYIHZlcmlmeSBhZ2FpbnN0IG1heCBEQUMgb3V0cHV0IGZyZXF1ZW5jeSAqLwogCXJldHVybiBNT0RFX09LOwogfQogCkBAIC01MTMsOSArNTU2LDMyIEBACiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwogCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKLQlpZiAoZHJldCkKLQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JZWxzZSB7CisJaWYgKGRyZXQpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCX0KKwkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKKworCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCURSTV9FUlJPUigiRERDIHJlc3BvbmRlZCBidXQgbm90IEVESUQgZm91bmQgZm9yICVzXG4iLAorCQkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJfSBlbHNlIHsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gISEocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKTsKKworCQkJLyogc29tZSBvZW1zIGhhdmUgYm9hcmRzIHdpdGggc2VwYXJhdGUgZGlnaXRhbCBhbmQgYW5hbG9nIGNvbm5lY3RvcnMKKwkJCSAqIHdpdGggYSBzaGFyZWQgZGRjIGxpbmUgKG9mdGVuIHZnYSArIGhkbWkpCisJCQkgKi8KKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCAmJiByYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjKSB7CisJCQkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCQl9IGVsc2UKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0gZWxzZSB7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpIHsKIAkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKIAkJCXJldCA9IGVuY29kZXJfZnVuY3MtPmRldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOwpAQCAtNTU5LDcgKzYyNSw3IEBACiAJCXJhZGVvbl9hZGRfY29tbW9uX21vZGVzKGVuY29kZXIsIGNvbm5lY3Rvcik7CiAJZWxzZSB7CiAJCS8qIG9ubHkgODAweDYwMCBpcyBzdXBwb3J0ZWQgcmlnaHQgbm93IG9uIHByZS1hdml2byBjaGlwcyAqLwotCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UpOworCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAkJdHZfbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCB0dl9tb2RlKTsKIAl9CkBAIC01NjksNiArNjM1LDggQEAKIHN0YXRpYyBpbnQgcmFkZW9uX3R2X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKKwlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gMTAyNCkgfHwgKG1vZGUtPnZkaXNwbGF5ID4gNzY4KSkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfUkFOR0U7CiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKQEAgLTY0Myw2ICs3MTEsMTAgQEAKIAlkcmV0ID0gcmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yKTsKIAlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CiAJaWYgKGRyZXQpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCX0KIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CiAJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKQEAgLTY1MywxMCArNzI1LDE1IEBACiAJCX0gZWxzZSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9ICEhKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCk7CiAKLQkJCS8qIGlmIHRoaXMgaXNuJ3QgYSBkaWdpdGFsIG1vbml0b3IKLQkJCSAgIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBhbnkKLQkJCSAgIFRWIGNvbmZsaWN0cyAqLwotCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCQkvKiBzb21lIG9lbXMgaGF2ZSBib2FyZHMgd2l0aCBzZXBhcmF0ZSBkaWdpdGFsIGFuZCBhbmFsb2cgY29ubmVjdG9ycworCQkJICogd2l0aCBhIHNoYXJlZCBkZGMgbGluZSAob2Z0ZW4gdmdhICsgaGRtaSkKKwkJCSAqLworCQkJaWYgKCghcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpICYmIHJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMpIHsKKwkJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gTlVMTDsKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJCX0gZWxzZQorCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCQl9CiAJfQogCkBAIC03NDMsOSArODIwLDM2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9kdmlfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT04pCisJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gZmFsc2U7CisJaWYgKGNvbm5lY3Rvci0+Zm9yY2UgPT0gRFJNX0ZPUkNFX09OX0RJR0lUQUwpCisJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gdHJ1ZTsKK30KKworc3RhdGljIGludCByYWRlb25fZHZpX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCisJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCisKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgJiYgKG1vZGUtPmNsb2NrID4gMTY1MDAwKSkgeworCQlpZiAoKHJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0kpIHx8CisJCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRCkgfHwKKwkJICAgIChyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0IpKQorCQkJcmV0dXJuIE1PREVfT0s7CisJCWVsc2UKKwkJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJfQorCXJldHVybiBNT0RFX09LOworfQorCiBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewogCS5nZXRfbW9kZXMgPSByYWRlb25fZHZpX2dldF9tb2RlcywKLQkubW9kZV92YWxpZCA9IHJhZGVvbl92Z2FfbW9kZV92YWxpZCwKKwkubW9kZV92YWxpZCA9IHJhZGVvbl9kdmlfbW9kZV92YWxpZCwKIAkuYmVzdF9lbmNvZGVyID0gcmFkZW9uX2R2aV9lbmNvZGVyLAogfTsKIApAQCAtNzU1LDYgKzg1OSw3IEBACiAJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCiAJLnNldF9wcm9wZXJ0eSA9IHJhZGVvbl9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAogCS5kZXN0cm95ID0gcmFkZW9uX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5mb3JjZSA9IHJhZGVvbl9kdmlfZm9yY2UsCiB9OwogCiB2b2lkCkBAIC03NjQsMTMgKzg2OSwxNiBAQAogCQkJICBpbnQgY29ubmVjdG9yX3R5cGUsCiAJCQkgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCiAJCQkgIGJvb2wgbGlua2IsCi0JCQkgIHVpbnQzMl90IGlncF9sYW5lX2luZm8pCisJCQkgIHVpbnQzMl90IGlncF9sYW5lX2luZm8sCisJCQkgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKnJhZGVvbl9kaWdfY29ubmVjdG9yOwogCXVpbnQzMl90IHN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxOb25lOworCWJvb2wgc2hhcmVkX2RkYyA9IGZhbHNlOworCWludCByZXQ7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwogCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikKQEAgLTc4Myw2ICs4OTEsMTMgQEAKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgfD0gc3VwcG9ydGVkX2RldmljZTsKIAkJCXJldHVybjsKIAkJfQorCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyAmJiBpMmNfYnVzLT52YWxpZCkgeworCQkJaWYgKG1lbWNtcCgmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+cmVjLCBpMmNfYnVzLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYykpID09IDApIHsKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjID0gdHJ1ZTsKKwkJCQlzaGFyZWRfZGRjID0gdHJ1ZTsKKwkJCX0KKwkJfQogCX0KIAogCXJhZGVvbl9jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwpAQCAtNzkzLDI3ICs5MDgsMzUgQEAKIAogCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCA9IGNvbm5lY3Rvcl9pZDsKIAlyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzID0gc3VwcG9ydGVkX2RldmljZTsKKwlyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjID0gc2hhcmVkX2RkYzsKKwlyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID0gY29ubmVjdG9yX29iamVjdF9pZDsKIAlzd2l0Y2ggKGNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiVkdBIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUE6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEVkkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKQEAgLTgyNyw3ICs5NTAsOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEVkkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKQEAgLTgzNyw2ICs5NjIsNyBAQAogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOworCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKQEAgLTg1MCw3ICs5NzYsOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJIRE1JIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCkBAIC04NjksNyArOTk3LDkgQEAKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmlncF9sYW5lX2luZm8gPSBpZ3BfbGFuZV9pbmZvOwogCQlyYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdiA9IHJhZGVvbl9kaWdfY29ubmVjdG9yOwogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFAiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKQEAgLTg4MiwxMSArMTAxMiwxNCBAQAogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU46CiAJCWlmIChyYWRlb25fdHYgPT0gMSkgewogCQkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZmFpbGVkOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKKwkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkJICAgICAgMSk7CiAJCX0KLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCi0JCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKLQkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcpLCBHRlBfS0VSTkVMKTsKQEAgLTg5Niw3ICsxMDI5LDkgQEAKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmlncF9sYW5lX2luZm8gPSBpZ3BfbGFuZV9pbmZvOwogCQlyYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdiA9IHJhZGVvbl9kaWdfY29ubmVjdG9yOwogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiTFZEUyIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQpAQCAtOTI2LDEyICsxMDYxLDE0IEBACiAJCQkgICAgdWludDMyX3QgY29ubmVjdG9yX2lkLAogCQkJICAgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCiAJCQkgICAgaW50IGNvbm5lY3Rvcl90eXBlLAotCQkJICAgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMpCisJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKKwkJCSAgICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwogCXVpbnQzMl90IHN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxOb25lOworCWludCByZXQ7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwogCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikKQEAgLTk1NCwyNyArMTA5MSwzNCBAQAogCiAJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX2lkID0gY29ubmVjdG9yX2lkOwogCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgPSBzdXBwb3J0ZWRfZGV2aWNlOworCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCXN3aXRjaCAoY29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJWR0EiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkRWSSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwpAQCAtOTgyLDExICsxMTI2LDE0IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFZJIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCQkgICAgICAxKTsKQEAgLTk5OCw3ICsxMTQ1LDEwIEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKIAkJaWYgKHJhZGVvbl90diA9PSAxKSB7CiAJCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCQkgICAgICAxKTsKQEAgLTEwMDYsNyArMTE1Niw5IEBACiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJMVkRTIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwppbmRleCAxMmY1OTkwLi41YWIyY2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKQEAgLTE0MiwxNSArMTQyLDMxIEBACiAJCX0KIAogCQlwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ID0gdXNlcl9jaHVuay5sZW5ndGhfZHc7Ci0JCWNkYXRhID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpdXNlcl9jaHVuay5jaHVua19kYXRhOworCQlwLT5jaHVua3NbaV0udXNlcl9wdHIgPSAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2NodW5rLmNodW5rX2RhdGE7CiAKLQkJc2l6ZSA9IHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiBzaXplb2YodWludDMyX3QpOwotCQlwLT5jaHVua3NbaV0ua2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+Y2h1bmtzW2ldLmtkYXRhLCBjZGF0YSwgc2l6ZSkpIHsKLQkJCXJldHVybiAtRUZBVUxUOworCQljZGF0YSA9ICh1aW50MzJfdCAqKSh1bnNpZ25lZCBsb25nKXVzZXJfY2h1bmsuY2h1bmtfZGF0YTsKKwkJaWYgKHAtPmNodW5rc1tpXS5jaHVua19pZCAhPSBSQURFT05fQ0hVTktfSURfSUIpIHsKKwkJCXNpemUgPSBwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ICogc2l6ZW9mKHVpbnQzMl90KTsKKwkJCXAtPmNodW5rc1tpXS5rZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+Y2h1bmtzW2ldLmtkYXRhLAorCQkJCQkgICAgICAgcC0+Y2h1bmtzW2ldLnVzZXJfcHRyLCBzaXplKSkgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgeworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlWzBdID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlWzFdID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKHAtPmNodW5rc1tpXS5rcGFnZVswXSA9PSBOVUxMIHx8IHAtPmNodW5rc1tpXS5rcGFnZVsxXSA9PSBOVUxMKSB7CisJCQkJa2ZyZWUocC0+Y2h1bmtzW2ldLmtwYWdlWzBdKTsKKwkJCQlrZnJlZShwLT5jaHVua3NbaV0ua3BhZ2VbMV0pOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJcC0+Y2h1bmtzW2ldLmtwYWdlX2lkeFswXSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlX2lkeFsxXSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmxhc3RfY29waWVkX3BhZ2UgPSAtMTsKKwkJCXAtPmNodW5rc1tpXS5sYXN0X3BhZ2VfaW5kZXggPSAoKHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiA0KSAtIDEpIC8gUEFHRV9TSVpFOwogCQl9CiAJfQogCWlmIChwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XS5sZW5ndGhfZHcgPiAoMTYgKiAxMDI0KSkgewpAQCAtMTkwLDYgKzIwNiw4IEBACiAJa2ZyZWUocGFyc2VyLT5yZWxvY3NfcHRyKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5uY2h1bmtzOyBpKyspIHsKIAkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua2RhdGEpOworCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rcGFnZVswXSk7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtwYWdlWzFdKTsKIAl9CiAJa2ZyZWUocGFyc2VyLT5jaHVua3MpOwogCWtmcmVlKHBhcnNlci0+Y2h1bmtzX2FycmF5KTsKQEAgLTIzOCw4ICsyNTYsMTQgQEAKIAkgKiB1bmNhY2hlZCkuICovCiAJaWJfY2h1bmsgPSAmcGFyc2VyLmNodW5rc1twYXJzZXIuY2h1bmtfaWJfaWR4XTsKIAlwYXJzZXIuaWItPmxlbmd0aF9kdyA9IGliX2NodW5rLT5sZW5ndGhfZHc7Ci0JbWVtY3B5KCh2b2lkICopcGFyc2VyLmliLT5wdHIsIGliX2NodW5rLT5rZGF0YSwgaWJfY2h1bmstPmxlbmd0aF9kdyo0KTsKIAlyID0gcmFkZW9uX2NzX3BhcnNlKCZwYXJzZXIpOworCWlmIChyIHx8IHBhcnNlci5wYXJzZXJfZXJyb3IpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOworCQlyYWRlb25fY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CisJCW11dGV4X3VubG9jaygmcmRldi0+Y3NfbXV0ZXgpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoJnBhcnNlcik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOwogCQlyYWRlb25fY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CkBAIC0yNTQsMyArMjc4LDY0IEBACiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5jc19tdXRleCk7CiAJcmV0dXJuIHI7CiB9CisKK2ludCByYWRlb25fY3NfZmluaXNoX3BhZ2VzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKworCWZvciAoaSA9IGliYy0+bGFzdF9jb3BpZWRfcGFnZSArIDE7IGkgPD0gaWJjLT5sYXN0X3BhZ2VfaW5kZXg7IGkrKykgeworCQlpZiAoaSA9PSBpYmMtPmxhc3RfcGFnZV9pbmRleCkgeworCQkJc2l6ZSA9IChpYmMtPmxlbmd0aF9kdyAqIDQpICUgUEFHRV9TSVpFOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gUEFHRV9TSVpFOworCQl9CisJCQorCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHAtPmliLT5wdHIgKyAoaSAqIChQQUdFX1NJWkUvNCkpLAorCQkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKGkgKiBQQUdFX1NJWkUpLAorCQkJCSAgICAgICBzaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJhZGVvbl9jc191cGRhdGVfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIGludCBwZ19pZHgpCit7CisJaW50IG5ld19wYWdlOworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKworCWZvciAoaSA9IGliYy0+bGFzdF9jb3BpZWRfcGFnZSArIDE7IGkgPCBwZ19pZHg7IGkrKykgeworCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHAtPmliLT5wdHIgKyAoaSAqIChQQUdFX1NJWkUvNCkpLAorCQkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKGkgKiBQQUdFX1NJWkUpLAorCQkJCSAgICAgICBQQUdFX1NJWkUpKSB7CisJCQlwLT5wYXJzZXJfZXJyb3IgPSAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwluZXdfcGFnZSA9IGliYy0+a3BhZ2VfaWR4WzBdIDwgaWJjLT5rcGFnZV9pZHhbMV0gPyAwIDogMTsKKworCWlmIChwZ19pZHggPT0gaWJjLT5sYXN0X3BhZ2VfaW5kZXgpIHsKKwkJc2l6ZSA9IChpYmMtPmxlbmd0aF9kdyAqIDQpICUgUEFHRV9TSVpFOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gUEFHRV9TSVpFOworCX0KKworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoaWJjLT5rcGFnZVtuZXdfcGFnZV0sCisJCQkgICAgICAgaWJjLT51c2VyX3B0ciArIChwZ19pZHggKiBQQUdFX1NJWkUpLAorCQkJICAgICAgIHNpemUpKSB7CisJCXAtPnBhcnNlcl9lcnJvciA9IC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKworCS8qIGNvcHkgdG8gSUIgaGVyZSAqLworCW1lbWNweSgodm9pZCAqKShwLT5pYi0+cHRyKyhwZ19pZHgqKFBBR0VfU0laRS80KSkpLCBpYmMtPmtwYWdlW25ld19wYWdlXSwgc2l6ZSk7CisKKwlpYmMtPmxhc3RfY29waWVkX3BhZ2UgPSBwZ19pZHg7CisJaWJjLT5rcGFnZV9pZHhbbmV3X3BhZ2VdID0gcGdfaWR4OworCisJcmV0dXJuIG5ld19wYWdlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwppbmRleCBiMTNjNzllLi4yODc3MmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwpAQCAtMTA5LDkgKzEwOSwxNSBAQAogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKKwkJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkKKwkJCQlXUkVHMzIoUjcwMF9EMkNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCQllbHNlCisJCQkJV1JFRzMyKFI3MDBfRDFDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOworCQl9CiAJCVdSRUczMihBVklWT19EMUNVUl9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGdwdV9hZGRyKTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQlyYWRlb25fY3J0Yy0+bGVnYWN5X2N1cnNvcl9vZmZzZXQgPSBncHVfYWRkciAtIHJhZGVvbl9jcnRjLT5sZWdhY3lfZGlzcGxheV9iYXNlX2FkZHI7CiAJCS8qIG9mZnNldCBpcyBmcm9tIERJU1AoMilfQkFTRV9BRERSRVNTICovCiAJCVdSRUczMihSQURFT05fQ1VSX09GRlNFVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgcmFkZW9uX2NydGMtPmxlZ2FjeV9jdXJzb3Jfb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggZGFmNWRiNy4uZTNmOWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTMyMiwxMCArMzIyLDYgQEAKIAljYXNlIENISVBfUlYzODA6CiAJCXJkZXYtPmFzaWMgPSAmcjMwMF9hc2ljOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0OwotCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pOwotCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKIAkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CiAJCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKIAkJfQpAQCAtNDQ4LDIwICs0NDQsMjQgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gYXRvbV9jYXJkX2luZm8gPSB7Ci0JLmRldiA9IE5VTEwsCi0JLnJlZ19yZWFkID0gY2FpbF9yZWdfcmVhZCwKLQkucmVnX3dyaXRlID0gY2FpbF9yZWdfd3JpdGUsCi0JLm1jX3JlYWQgPSBjYWlsX21jX3JlYWQsCi0JLm1jX3dyaXRlID0gY2FpbF9tY193cml0ZSwKLQkucGxsX3JlYWQgPSBjYWlsX3BsbF9yZWFkLAotCS5wbGxfd3JpdGUgPSBjYWlsX3BsbF93cml0ZSwKLX07Ci0KIGludCByYWRlb25fYXRvbWJpb3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlhdG9tX2NhcmRfaW5mby5kZXYgPSByZGV2LT5kZGV2OwotCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQgPSBhdG9tX3BhcnNlKCZhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CisJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm8gPQorCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FyZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWF0b21fY2FyZF9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NhcmRfaW5mbyA9IGF0b21fY2FyZF9pbmZvOworCWF0b21fY2FyZF9pbmZvLT5kZXYgPSByZGV2LT5kZGV2OworCWF0b21fY2FyZF9pbmZvLT5yZWdfcmVhZCA9IGNhaWxfcmVnX3JlYWQ7CisJYXRvbV9jYXJkX2luZm8tPnJlZ193cml0ZSA9IGNhaWxfcmVnX3dyaXRlOworCWF0b21fY2FyZF9pbmZvLT5tY19yZWFkID0gY2FpbF9tY19yZWFkOworCWF0b21fY2FyZF9pbmZvLT5tY193cml0ZSA9IGNhaWxfbWNfd3JpdGU7CisJYXRvbV9jYXJkX2luZm8tPnBsbF9yZWFkID0gY2FpbF9wbGxfcmVhZDsKKwlhdG9tX2NhcmRfaW5mby0+cGxsX3dyaXRlID0gY2FpbF9wbGxfd3JpdGU7CisKKwlyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0ID0gYXRvbV9wYXJzZShhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CiAJcmFkZW9uX2F0b21faW5pdGlhbGl6ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2LT5kZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ2OSw2ICs0NjksNyBAQAogdm9pZCByYWRlb25fYXRvbWJpb3NfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlrZnJlZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwlrZnJlZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jYXJkX2luZm8pOwogfQogCiBpbnQgcmFkZW9uX2NvbWJpb3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTQ4NSw3ICs0ODYsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCByYWRlb25fdmdhX3NldF9kZWNvZGUodm9pZCAqY29va2llLCBib29sIHN0YXRlKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY29va2llOwotCiAJcmFkZW9uX3ZnYV9zZXRfc3RhdGUocmRldiwgc3RhdGUpOwogCWlmIChzdGF0ZSkKIAkJcmV0dXJuIFZHQV9SU1JDX0xFR0FDWV9JTyB8IFZHQV9SU1JDX0xFR0FDWV9NRU0gfApAQCAtNDkzLDYgKzQ5MywyOSBAQAogCWVsc2UKIAkJcmV0dXJuIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07CiB9CisKK3ZvaWQgcmFkZW9uX2FncF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CisJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0lFIG1vZGVcbiIpOworCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKKwl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1IHx8CisJCQlyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjM4MCB8fAorCQkJcmRldi0+ZmFtaWx5ID09IENISVBfUlY0MTAgfHwKKwkJCXJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjMpIHsKKwkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSUUgbW9kZVxuIik7CisJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOworCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOworCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKKwl9IGVsc2UgeworCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJIG1vZGVcbiIpOworCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOworCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKKwkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlOworCX0KK30KKwogLyoKICAqIFJhZGVvbiBkZXZpY2UuCiAgKi8KQEAgLTUzMSwyOSArNTU0LDcgQEAKIAl9CiAKIAlpZiAocmFkZW9uX2FncG1vZGUgPT0gLTEpIHsKLQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSB8fAotCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUlYzODAgfHwKLQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwIHx8Ci0JCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIzKSB7Ci0JCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKLQkJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOwotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0OwotCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pOwotCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKLQkJfSBlbHNlIHsKLQkJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0kgbW9kZVxuIik7Ci0JCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOwotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnIxMDBfcGNpX2dhcnRfaW5pdDsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2Zpbmk7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2Rpc2FibGU7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZTsKLQkJfQorCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CiAJfQogCiAJLyogc2V0IERNQSBtYXNrICsgbmVlZF9kbWEzMiBmbGFncy4KQEAgLTU4NSwxMTEgKzU4NiwyNiBAQAogCURSTV9JTkZPKCJyZWdpc3RlciBtbWlvIGJhc2U6IDB4JTA4WFxuIiwgKHVpbnQzMl90KXJkZXYtPnJtbWlvX2Jhc2UpOwogCURSTV9JTkZPKCJyZWdpc3RlciBtbWlvIHNpemU6ICV1XG4iLCAodW5zaWduZWQpcmRldi0+cm1taW9fc2l6ZSk7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gZmFsc2U7Ci0JciA9IHJhZGVvbl9pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQogCS8qIGlmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiBkaXNhYmxlIHRoZSByYWRlb24gVkdBIHJlc291cmNlcyAqLwotCXIgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIHJkZXYsIE5VTEwsIHJhZGVvbl92Z2Ffc2V0X2RlY29kZSk7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIC1FSU5WQUw7CisJLyogdGhpcyB3aWxsIGZhaWwgZm9yIGNhcmRzIHRoYXQgYXJlbid0IFZHQSBjbGFzcyBkZXZpY2VzLCBqdXN0CisJICogaWdub3JlIGl0ICovCisJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCByZGV2LCBOVUxMLCByYWRlb25fdmdhX3NldF9kZWNvZGUpOworCisJciA9IHJhZGVvbl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1AgJiYgIXJkZXYtPmFjY2VsX3dvcmtpbmcpIHsKKwkJLyogQWNjZWxlcmF0aW9uIG5vdCB3b3JraW5nIG9uIEFHUCBjYXJkIHRyeSBhZ2FpbgorCQkgKiB3aXRoIGZhbGxiYWNrIHRvIFBDSSBvciBQQ0lFIEdBUlQKKwkJICovCisJCXJhZGVvbl9ncHVfcmVzZXQocmRldik7CisJCXJhZGVvbl9maW5pKHJkZXYpOworCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCXIgPSByYWRlb25faW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKIAl9Ci0KLQlpZiAoIXJkZXYtPm5ld19pbml0X3BhdGgpIHsKLQkJLyogU2V0dXAgZXJyYXRhIGZsYWdzICovCi0JCXJhZGVvbl9lcnJhdGEocmRldik7Ci0JCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KLQkJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKLQkJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwotCQlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOwotCi0JCS8qIEJJT1MqLwotCQlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgewotCQkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwotCQkJaWYgKHIpIHsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXIgPSByYWRlb25fY29tYmlvc19pbml0KHJkZXYpOwotCQkJaWYgKHIpIHsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJfQotCQkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCi0JCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7Ci0JCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCQl9Ci0JCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCi0JCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKLQkJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOwotCQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCQkJfSBlbHNlIHsKLQkJCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7Ci0JCQl9Ci0JCX0KLQkJLyogR2V0IGNsb2NrICYgdnJhbSBpbmZvcm1hdGlvbiAqLwotCQlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7Ci0JCXJhZGVvbl92cmFtX2luZm8ocmRldik7Ci0JCS8qIEluaXRpYWxpemUgY2xvY2tzICovCi0JCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCi0JCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JCXIgPSByYWRlb25fbWNfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JCS8qIEZlbmNlIGRyaXZlciAqLwotCQlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQkvKiBNZW1vcnkgbWFuYWdlciAqLwotCQlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJciA9IHJhZGVvbl9ncHVfZ2FydF9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiByOwotCQkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQotCQkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KLQkJciA9IHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQkJCXIgPSByYWRlb25fZ2VtX2luaXQocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogMU0gcmluZyBidWZmZXIgKi8KLQkJciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQkJciA9IHJhZGVvbl93Yl9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7Ci0JCXIgPSByYWRlb25faWJfcG9vbF9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiAwOwotCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0JCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOwotCX0KLQlEUk1fSU5GTygicmFkZW9uOiBrZXJuZWwgbW9kZXNldHRpbmcgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLlxuIik7CiAJaWYgKHJhZGVvbl90ZXN0aW5nKSB7CiAJCXJhZGVvbl90ZXN0X21vdmVzKHJkZXYpOwogCX0KQEAgLTcwMywzMiArNjE5LDggQEAKIHsKIAlEUk1fSU5GTygicmFkZW9uOiBmaW5pc2hpbmcgZGV2aWNlLlxuIik7CiAJcmRldi0+c2h1dGRvd24gPSB0cnVlOwotCS8qIE9yZGVyIG1hdHRlciBzbyBiZWNhcmVmdWxsIGlmIHlvdSByZWFycmFuZ2UgYW55dGhpbmdzICovCi0JaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7Ci0JCXJhZGVvbl9pYl9wb29sX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9jcF9maW5pKHJkZXYpOwotCQlyYWRlb25fd2JfZmluaShyZGV2KTsKLQkJcmFkZW9uX2dwdV9nYXJ0X2ZpbmkocmRldik7Ci0JCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKLQkJcmFkZW9uX21jX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCi0JCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKLSNlbmRpZgotCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwotCQl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9jbG9ja3NfZmluaShyZGV2KTsKLQkJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCQlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKLQkJfSBlbHNlIHsKLQkJCXJhZGVvbl9jb21iaW9zX2ZpbmkocmRldik7Ci0JCX0KLQkJa2ZyZWUocmRldi0+Ymlvcyk7Ci0JCXJkZXYtPmJpb3MgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9maW5pKHJkZXYpOwotCX0KKwlyYWRlb25fZmluaShyZGV2KTsKKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwogCWlvdW5tYXAocmRldi0+cm1taW8pOwogCXJkZXYtPnJtbWlvID0gTlVMTDsKIH0KQEAgLTc2OCwxNCArNjYwLDcgQEAKIAogCXJhZGVvbl9zYXZlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCi0JaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7Ci0JCXJhZGVvbl9jcF9kaXNhYmxlKHJkZXYpOwotCQlyYWRlb25fZ2FydF9kaXNhYmxlKHJkZXYpOwotCQlyZGV2LT5pcnEuc3dfaW50ID0gZmFsc2U7Ci0JCXJhZGVvbl9pcnFfc2V0KHJkZXYpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9zdXNwZW5kKHJkZXYpOwotCX0KKwlyYWRlb25fc3VzcGVuZChyZGV2KTsKIAkvKiBldmljdCByZW1haW5pbmcgdnJhbSBtZW1vcnkgKi8KIAlyYWRlb25fb2JqZWN0X2V2aWN0X3ZyYW0ocmRldik7CiAKQEAgLTc5NCw3ICs2NzksNiBAQAogaW50IHJhZGVvbl9yZXN1bWVfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCByOwogCiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDApOwpAQCAtODA0LDQzICs2ODgsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCXBjaV9zZXRfbWFzdGVyKGRldi0+cGRldik7Ci0JLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLwotCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgewotCQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQkJfQotCQkvKiBwb3N0IGNhcmQgKi8KLQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7Ci0JCX0KLQkJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KLQkJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJCXJldHVybiByOwotCQl9Ci0JCS8qIEVuYWJsZSBJUlEgKi8KLQkJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7Ci0JCXJhZGVvbl9pcnFfc2V0KHJkZXYpOwotCQkvKiBJbml0aWFsaXplIEdQVSBNZW1vcnkgQ29udHJvbGxlciAqLwotCQlyID0gcmFkZW9uX21jX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlyID0gcmFkZW9uX2dhcnRfZW5hYmxlKHJkZXYpOwotCQlpZiAocikgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIHJkZXYtPmNwLnJpbmdfc2l6ZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJhZGVvbl9yZXN1bWUocmRldik7Ci0JfQotb3V0OgorCXJhZGVvbl9yZXN1bWUocmRldik7CiAJcmFkZW9uX3Jlc3RvcmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CiAJZmJfc2V0X3N1c3BlbmQocmRldi0+ZmJkZXZfaW5mbywgMCk7CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IDVkODE0MWIuLmM4NWRmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTEwNiw1MSArMTA2LDQ0IEBACiAJCWxlZ2FjeV9jcnRjX2xvYWRfbHV0KGNydGMpOwogfQogCi0vKiogU2V0cyB0aGUgY29sb3IgcmFtcHMgb24gYmVoYWxmIG9mIFJhbmRSICovCisvKiogU2V0cyB0aGUgY29sb3IgcmFtcHMgb24gYmVoYWxmIG9mIGZiY29uICovCiB2b2lkIHJhZGVvbl9jcnRjX2ZiX2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKIAkJCSAgICAgIHUxNiBibHVlLCBpbnQgcmVnbm8pCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCi0JaWYgKHJlZ25vID09IDApCi0JCURSTV9ERUJVRygiZ2FtbWEgc2V0ICVkXG4iLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CiAJcmFkZW9uX2NydGMtPmx1dF9yW3JlZ25vXSA9IHJlZCA+PiA2OwogCXJhZGVvbl9jcnRjLT5sdXRfZ1tyZWdub10gPSBncmVlbiA+PiA2OwogCXJhZGVvbl9jcnRjLT5sdXRfYltyZWdub10gPSBibHVlID4+IDY7CiB9CiAKKy8qKiBHZXRzIHRoZSBjb2xvciByYW1wcyBvbiBiZWhhbGYgb2YgZmJjb24gKi8KK3ZvaWQgcmFkZW9uX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkgICAgICB1MTYgKmJsdWUsIGludCByZWdubykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CisKKwkqcmVkID0gcmFkZW9uX2NydGMtPmx1dF9yW3JlZ25vXSA8PCA2OworCSpncmVlbiA9IHJhZGVvbl9jcnRjLT5sdXRfZ1tyZWdub10gPDwgNjsKKwkqYmx1ZSA9IHJhZGVvbl9jcnRjLT5sdXRfYltyZWdub10gPDwgNjsKK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJICB1MTYgKmJsdWUsIHVpbnQzMl90IHNpemUpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwotCWludCBpLCBqOworCWludCBpOwogCiAJaWYgKHNpemUgIT0gMjU2KSB7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGNydGMtPmZiID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KIAotCWlmIChjcnRjLT5mYi0+ZGVwdGggPT0gMTYpIHsKLQkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJCWlmIChpIDw9IDMxKSB7Ci0JCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgewotCQkJCQlyYWRlb25fY3J0Yy0+bHV0X3JbaSAqIDggKyBqXSA9IHJlZFtpXSA+PiA2OwotCQkJCQlyYWRlb25fY3J0Yy0+bHV0X2JbaSAqIDggKyBqXSA9IGJsdWVbaV0gPj4gNjsKLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQkJCXJhZGVvbl9jcnRjLT5sdXRfZ1tpICogNCArIGpdID0gZ3JlZW5baV0gPj4gNjsKLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJcmFkZW9uX2NydGMtPmx1dF9yW2ldID0gcmVkW2ldID4+IDY7Ci0JCQlyYWRlb25fY3J0Yy0+bHV0X2dbaV0gPSBncmVlbltpXSA+PiA2OwotCQkJcmFkZW9uX2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2OwotCQl9CisJLyogdXNlcnNwYWNlIHBhbGV0dGVzIGFyZSBhbHdheXMgY29ycmVjdCBhcyBpcyAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlyYWRlb25fY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gNjsKKwkJcmFkZW9uX2NydGMtPmx1dF9nW2ldID0gZ3JlZW5baV0gPj4gNjsKKwkJcmFkZW9uX2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2OwogCX0KLQogCXJhZGVvbl9jcnRjX2xvYWRfbHV0KGNydGMpOwogfQogCkBAIC0zNDEsMjcgKzMzNCwxOSBAQAogCiBpbnQgcmFkZW9uX2RkY19nZXRfbW9kZXMoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpCiB7Ci0Jc3RydWN0IGVkaWQgKmVkaWQ7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCXJldHVybiAtMTsKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwotCQllZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOwotCX0gZWxzZQotCQllZGlkID0gcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZDsKKwl9CiAKLQlpZiAoZWRpZCkgewotCQkvKiB1cGRhdGUgZGlnaXRhbCBiaXRzIGhlcmUgKi8KLQkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKLQkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gMTsKLQkJZWxzZQotCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSAwOwotCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIGVkaWQpOwotCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIGVkaWQpOwotCQlrZnJlZShlZGlkKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIE5VTEwpOwpAQCAtNzI0LDcgKzcwOSwxMSBAQAogCWlmIChyZXQpIHsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JLyogYWxsb2NhdGUgY3J0Y3MgLSBUT0RPIHNpbmdsZSBjcnRjICovCisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCW51bV9jcnRjID0gMTsKKworCS8qIGFsbG9jYXRlIGNydGNzICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jcnRjOyBpKyspIHsKIAkJcmFkZW9uX2NydGNfaW5pdChyZGV2LT5kZGV2LCBpKTsKIAl9CkBAIC03NjQsNyArNzUzLDcgQEAKIAkJCXJhZGVvbl9jcnRjLT5ybXhfdHlwZSA9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZTsKIAkJCW1lbWNweSgmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlLAogCQkJCSZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGUsCi0JCQkJc2l6ZW9mKHN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUpKTsKKwkJCQlzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpKTsKIAkJCWZpcnN0ID0gZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSkgewpAQCAtNzgyLDEwICs3NzEsMTAgQEAKIAlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IFJNWF9PRkYpIHsKIAkJZml4ZWQyMF8xMiBhLCBiOwogCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoY3J0Yy0+bW9kZS52ZGlzcGxheSk7Ci0JCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyk7CisJCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUuaGRpc3BsYXkpOwogCQlyYWRlb25fY3J0Yy0+dnNjLmZ1bGwgPSByZml4ZWRfZGl2KGEsIGIpOwogCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoY3J0Yy0+bW9kZS5oZGlzcGxheSk7Ci0JCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyk7CisJCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCQlyYWRlb25fY3J0Yy0+aHNjLmZ1bGwgPSByZml4ZWRfZGl2KGEsIGIpOwogCX0gZWxzZSB7CiAJCXJhZGVvbl9jcnRjLT52c2MuZnVsbCA9IHJmaXhlZF9jb25zdCgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggNTBmY2U0OS4uN2Y1MGZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTYyLDkgKzYyLDYgQEAKIGludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpcnFyZXR1cm5fdCByYWRlb25fZHJpdmVyX2lycV9oYW5kbGVyX2ttcyhEUk1fSVJRX0FSR1MpOwotaW50IHJhZGVvbl9tYXN0ZXJfY3JlYXRlX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKLXZvaWQgcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwogaW50IHJhZGVvbl9kbWFfaW9jdGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IHJhZGVvbl9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpAQCAtMjYwLDggKzI1Nyw2IEBACiAJLmdldF92YmxhbmtfY291bnRlciA9IHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXJfa21zLAogCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92Ymxhbmtfa21zLAogCS5kaXNhYmxlX3ZibGFuayA9IHJhZGVvbl9kaXNhYmxlX3ZibGFua19rbXMsCi0JLm1hc3Rlcl9jcmVhdGUgPSByYWRlb25fbWFzdGVyX2NyZWF0ZV9rbXMsCi0JLm1hc3Rlcl9kZXN0cm95ID0gcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcywKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAkuZGVidWdmc19pbml0ID0gcmFkZW9uX2RlYnVnZnNfaW5pdCwKIAkuZGVidWdmc19jbGVhbnVwID0gcmFkZW9uX2RlYnVnZnNfY2xlYW51cCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDYyMTY0NjcuLmQ0MmJjNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMzEsNiArMzEsMTAgQEAKIAogZXh0ZXJuIGludCBhdG9tX2RlYnVnOwogCisvKiBldmlsIGJ1dCBpbmNsdWRpbmcgYXRvbWJpb3MuaCBpcyBtdWNoIHdvcnNlICovCitib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworCiB1aW50MzJfdAogcmFkZW9uX2dldF9lbmNvZGVyX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsIHVpbnQ4X3QgZGFjKQogewpAQCAtMTY3LDQ5ICsxNzEsMTcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAKLQlpZiAobW9kZS0+aGRpc3BsYXkgPCBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyB8fAotCSAgICBtb2RlLT52ZGlzcGxheSA8IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSB7Ci0JCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQkJCWFkanVzdGVkX21vZGUtPmh0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCQlhZGp1c3RlZF9tb2RlLT52dG90YWwgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQkJLyogdXBkYXRlIGNydGMgdmFsdWVzICovCi0JCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7Ci0JCQkvKiBhZGp1c3QgY3J0YyB2YWx1ZXMgKi8KLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQl9IGVsc2UgewotCQkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCQkvKiB1cGRhdGUgY3J0YyB2YWx1ZXMgKi8KLQkJCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKLQkJCS8qIGFkanVzdCBjcnRjIHZhbHVlcyAqLwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7CisJaWYgKG1vZGUtPmhkaXNwbGF5IDwgbmF0aXZlX21vZGUtPmhkaXNwbGF5IHx8CisJICAgIG1vZGUtPnZkaXNwbGF5IDwgbmF0aXZlX21vZGUtPnZkaXNwbGF5KSB7CisJCWludCBtb2RlX2lkID0gYWRqdXN0ZWRfbW9kZS0+YmFzZS5pZDsKKwkJKmFkanVzdGVkX21vZGUgPSAqbmF0aXZlX21vZGU7CisJCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKKwkJCWFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CiAJCX0KLQkJYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgPSBuYXRpdmVfbW9kZS0+ZmxhZ3M7Ci0JCWFkanVzdGVkX21vZGUtPmNsb2NrID0gbmF0aXZlX21vZGUtPmRvdGNsb2NrOworCQlhZGp1c3RlZF9tb2RlLT5iYXNlLmlkID0gbW9kZV9pZDsKIAl9CiB9CiAKQEAgLTIxOSw3ICsxOTEsMTEgQEAKIAkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSAhPSBSTVhfT0ZGKQpAQCAtMjMwLDYgKzIwNiwxOCBAQAogCSAgICAmJiAobW9kZS0+Y3J0Y192c3luY19zdGFydCA8IChtb2RlLT5jcnRjX3ZkaXNwbGF5ICsgMikpKQogCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIDI7CiAKKwlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCWlmICh0dl9kYWMpIHsKKwkJCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCQkJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCisJCQkJcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgMCwgYWRqdXN0ZWRfbW9kZSk7CisJCQllbHNlCisJCQkJcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgMSwgYWRqdXN0ZWRfbW9kZSk7CisJCX0KKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDYxLDcgKzQ0OSw3IEBACiAJCWNhc2UgMToKIAkJCWFyZ3MudjEudWNNaXNjID0gMDsKIAkJCWFyZ3MudjEudWNBY3Rpb24gPSBhY3Rpb247Ci0JCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCQlhcmdzLnYxLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfSERNSV9UWVBFOwogCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CkBAIC00ODYsNyArNDc0LDcgQEAKIAkJCQlpZiAoZGlnLT5jb2hlcmVudF9tb2RlKQogCQkJCQlhcmdzLnYyLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfQ09IRVJFTlQ7CiAJCQl9Ci0JCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCQlhcmdzLnYyLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfSERNSV9UWVBFOwogCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlhcmdzLnYyLnVjVHJ1bmNhdGUgPSAwOwpAQCAtNTQ0LDcgKzUzMiw3IEBACiAJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQjogLyogSERNSS1CIGlzIGJhc2ljYWxseSBETC1EVkk7IGFuYWxvZyB3b3JrcyBmaW5lICovCi0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZSBpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNTU0LDcgKzU0Miw3IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKIAlkZWZhdWx0OgotCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0hETUk7CiAJCWVsc2UKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC01NjYsNyArNTU0LDcgQEAKIAkJLyppZiAocmFkZW9uX291dHB1dC0+TW9uVHlwZSA9PSBNVF9EUCkKIAkJICByZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFA7CiAJCSAgZWxzZSovCi0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTczNCwxNCArNzIyLDE3IEBACiAJYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwgJmNyZXYpOwogCiAJYXJncy52MS51Y0FjdGlvbiA9IGFjdGlvbjsKLQorCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgeworCQlhcmdzLnYxLnVzSW5pdEluZm8gPSByYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkOworCX0gZWxzZSB7CisJCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApCisJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAyKSAvIDEwKTsKKwkJZWxzZQorCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CisJfQogCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApIHsKLQkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAqIDEwICogMikgLyAxMDApOwotCQkJYXJncy52Mi5hY0NvbmZpZy5mRHVhbExpbmtDb25uZWN0b3IgPSAxOwotCQl9IGVsc2UgewotCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNigocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrICogMTAgKiA0KSAvIDEwMCk7Ci0JCX0KKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDIpIC8gMTApOwogCQlpZiAoZGlnLT5kaWdfYmxvY2spCiAJCQlhcmdzLnYyLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CiAKQEAgLTc2Niw3ICs3NTcsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMOwotCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2spIC8gMTApOwogCiAJCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKIAkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CkBAIC04NzQsMTYgKzg2NCw5IEBACiAJRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IDA7CiAJYm9vbCBpc19kaWcgPSBmYWxzZTsKLQlpbnQgZGV2aWNlczsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAotCS8qIG9uIERQTVMgb2ZmIHdlIGhhdmUgbm8gaWRlYSBpZiBhY3RpdmUgZGV2aWNlIGlzIG1lYW5pbmdmdWwgKi8KLQlpZiAobW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OICYmICFyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSkKLQkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzOwotCWVsc2UKLQkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlOwotCiAJRFJNX0RFQlVHKCJlbmNvZGVyIGRwbXMgJWQgdG8gbW9kZSAlZCwgZGV2aWNlcyAlMDh4LCBhY3RpdmVfZGV2aWNlcyAlMDh4XG4iLAogCQkgIHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkLCBtb2RlLCByYWRlb25fZW5jb2Rlci0+ZGV2aWNlcywKIAkJICByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSk7CkBAIC05MTQsMTggKzg5NywxOCBAQAogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToKLQkJaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCisJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgVFYxT3V0cHV0Q29udHJvbCk7Ci0JCWVsc2UgaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBDVjFPdXRwdXRDb250cm9sKTsKIAkJZWxzZQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBEQUMxT3V0cHV0Q29udHJvbCk7CiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMjoKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMyOgotCQlpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKLQkJZWxzZSBpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIENWMU91dHB1dENvbnRyb2wpOwogCQllbHNlCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERBQzJPdXRwdXRDb250cm9sKTsKQEAgLTExMDQsOCArMTA4NywxMSBAQAogCX0KIAogCS8qIHNldCBzY2FsZXIgY2xlYXJzIHRoaXMgb24gc29tZSBjaGlwcyAqLwotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKLQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOworCWlmICghKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpCisJCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkJICAgICAgIEFWSVZPX0QxTU9ERV9JTlRFUkxFQVZFX0VOKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTUzLDYgKzExMzksNyBAQAogCiAJCS8qIHNldHVwIGFuZCBlbmFibGUgdGhlIGVuY29kZXIgYW5kIHRyYW5zbWl0dGVyICovCiAJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKKwkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQpOwogCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVApOwogCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFKTsKIAkJYnJlYWs7CkBAIC0xMjY4LDggKzEyNTUsNiBAQAogewogCXJhZGVvbl9hdG9tX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9hdG9tX2VuY29kZXJfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0KLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2F0b21fZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTM0NSw2ICsxMzMwLDcgQEAKIHZvaWQKIHJhZGVvbl9hZGRfYXRvbV9lbmNvZGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGVuY29kZXJfaWQsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UpCiB7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyOwogCkBAIC0xMzY0LDcgKzEzNTAsMTAgQEAKIAkJcmV0dXJuOwogCiAJZW5jb2RlciA9ICZyYWRlb25fZW5jb2Rlci0+YmFzZTsKLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgxOworCWVsc2UKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CiAJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKIAogCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwppbmRleCA5NDRlNGZhLi5iMzhjNGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCiB9OwogCiAvKioKQEAgLTEyMywxMSArMTI0LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyByYWRlb25fZmJfaGVscGVyX2Z1bmNzID0gewogCS5nYW1tYV9zZXQgPSByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQsCisJLmdhbW1hX2dldCA9IHJhZGVvbl9jcnRjX2ZiX2dhbW1hX2dldCwKIH07CiAKIGludCByYWRlb25mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgIHVpbnQzMl90IGZiX3dpZHRoLCB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCSAgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLCB1aW50MzJfdCBzdXJmYWNlX2hlaWdodCwKKwkJICAgIHVpbnQzMl90IHN1cmZhY2VfZGVwdGgsIHVpbnQzMl90IHN1cmZhY2VfYnBwLAogCQkgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTQ1LDEzICsxNDgsMTkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlib29sIGZiX3RpbGVkID0gZmFsc2U7IC8qIHVzZWZ1bCBmb3IgdGVzdGluZyAqLwogCXUzMiB0aWxpbmdfZmxhZ3MgPSAwOworCWludCBjcnRjX2NvdW50OwogCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwotCW1vZGVfY21kLmJwcCA9IDMyOworCisJLyogYXZpdm8gY2FuJ3Qgc2Nhbm91dCByZWFsIDI0YnBwICovCisJaWYgKChzdXJmYWNlX2JwcCA9PSAyNCkgJiYgQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJc3VyZmFjZV9icHAgPSAzMjsKKworCW1vZGVfY21kLmJwcCA9IHN1cmZhY2VfYnBwOwogCS8qIG5lZWQgdG8gYWxpZ24gcGl0Y2ggd2l0aCBjcnRjIGxpbWl0cyAqLwogCW1vZGVfY21kLnBpdGNoID0gcmFkZW9uX2FsaWduX3BpdGNoKHJkZXYsIG1vZGVfY21kLndpZHRoLCBtb2RlX2NtZC5icHAsIGZiX3RpbGVkKSAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KTsKLQltb2RlX2NtZC5kZXB0aCA9IDI0OworCW1vZGVfY21kLmRlcHRoID0gc3VyZmFjZV9kZXB0aDsKIAogCXNpemUgPSBtb2RlX2NtZC5waXRjaCAqIG1vZGVfY21kLmhlaWdodDsKIAlhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwpAQCAtMjE2LDcgKzIyNSwxMSBAQAogCXJmYmRldiA9IGluZm8tPnBhcjsKIAlyZmJkZXYtPmhlbHBlci5mdW5jcyA9ICZyYWRlb25fZmJfaGVscGVyX2Z1bmNzOwogCXJmYmRldi0+aGVscGVyLmRldiA9IGRldjsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCgmcmZiZGV2LT5oZWxwZXIsIDIsCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCQljcnRjX2NvdW50ID0gMTsKKwllbHNlCisJCWNydGNfY291bnQgPSAyOworCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KCZyZmJkZXYtPmhlbHBlciwgY3J0Y19jb3VudCwKIAkJCQkJICAgIFJBREVPTkZCX0NPTk5fTElNSVQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucmVmOwpAQCAtMjMzLDcgKzI0Niw3IEBACiAKIAlzdHJjcHkoaW5mby0+Zml4LmlkLCAicmFkZW9uZHJtZmIiKTsKIAotCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoKTsKKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCwgZmItPmRlcHRoKTsKIAogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CiAJaW5mby0+ZmJvcHMgPSAmcmFkZW9uZmJfb3BzOwpAQCAtMjkwLDEzICszMDMsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY2hhciAqbW9kZV9vcHRpb247CitpbnQgcmFkZW9uX3BhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucykKK3sKKwljaGFyICp0aGlzX29wdDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybiAwOworCisJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0OworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IHJhZGVvbmZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsICZyYWRlb25mYl9jcmVhdGUpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGRldiwgMzIsICZyYWRlb25mYl9jcmVhdGUpOwogfQotRVhQT1JUX1NZTUJPTChyYWRlb25mYl9wcm9iZSk7CiAKIGludCByYWRlb25mYl9yZW1vdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKaW5kZXggYTkzMWFmMC4uYTY4ZDc1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwpAQCAtMTQwLDE1ICsxNDAsMTUgQEAKIAkJV0FSTigxLCAidHJ5aW5nIHRvIHVuYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQl0ID0gb2Zmc2V0IC8gNDA5NjsKLQlwID0gdCAvIChQQUdFX1NJWkUgLyA0MDk2KTsKKwl0ID0gb2Zmc2V0IC8gUkFERU9OX0dQVV9QQUdFX1NJWkU7CisJcCA9IHQgLyAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKIAkJaWYgKHJkZXYtPmdhcnQucGFnZXNbcF0pIHsKIAkJCXBjaV91bm1hcF9wYWdlKHJkZXYtPnBkZXYsIHJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJcmRldi0+Z2FydC5wYWdlc1twXSA9IE5VTEw7CiAJCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSAwOwotCQkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyA0MDk2KTsgaisrLCB0KyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgewogCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIDApOwogCQkJfQogCQl9CkBAIC0xNjksOCArMTY5LDggQEAKIAkJRFJNX0VSUk9SKCJ0cnlpbmcgdG8gYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXQgPSBvZmZzZXQgLyA0MDk2OwotCXAgPSB0IC8gKFBBR0VfU0laRSAvIDQwOTYpOworCXQgPSBvZmZzZXQgLyBSQURFT05fR1BVX1BBR0VfU0laRTsKKwlwID0gdCAvIChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKywgcCsrKSB7CiAJCS8qIHdlIG5lZWQgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgKi8KQEAgLTE4NSw5ICsxODUsOSBAQAogCQl9CiAJCXJkZXYtPmdhcnQucGFnZXNbcF0gPSBwYWdlbGlzdFtpXTsKIAkJcGFnZV9iYXNlID0gcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdOwotCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIDQwOTYpOyBqKyssIHQrKykgeworCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKIAkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIHBhZ2VfYmFzZSk7Ci0JCQlwYWdlX2Jhc2UgKz0gNDA5NjsKKwkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAkJfQogCX0KIAltYigpOwpAQCAtMjAwLDE0ICsyMDAsMTQgQEAKIAlpZiAocmRldi0+Z2FydC5wYWdlcykgewogCQlyZXR1cm4gMDsKIAl9Ci0JLyogV2UgbmVlZCBQQUdFX1NJWkUgPj0gNDA5NiAqLwotCWlmIChQQUdFX1NJWkUgPCA0MDk2KSB7CisJLyogV2UgbmVlZCBQQUdFX1NJWkUgPj0gUkFERU9OX0dQVV9QQUdFX1NJWkUgKi8KKwlpZiAoUEFHRV9TSVpFIDwgUkFERU9OX0dQVV9QQUdFX1NJWkUpIHsKIAkJRFJNX0VSUk9SKCJQYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIEdQVSBwYWdlIHNpemUhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIENvbXB1dGUgdGFibGUgc2l6ZSAqLwogCXJkZXYtPmdhcnQubnVtX2NwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gUEFHRV9TSVpFOwotCXJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gNDA5NjsKKwlyZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgPSByZGV2LT5tYy5ndHRfc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFOwogCURSTV9JTkZPKCJHQVJUOiBudW0gY3B1IHBhZ2VzICV1LCBudW0gZ3B1IHBhZ2VzICV1XG4iLAogCQkgcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzLCByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMpOwogCS8qIEFsbG9jYXRlIHBhZ2VzIHRhYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKaW5kZXggMTg0MTE0NS4uYTBmZTYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwpAQCAtODMsMTEgKzgzLDIyIEBACiBpbnQgcmFkZW9uX2lycV9rbXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgciA9IDA7CisJaW50IG51bV9jcnRjID0gMjsKIAotCXIgPSBkcm1fdmJsYW5rX2luaXQocmRldi0+ZGRldiwgMik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCQludW1fY3J0YyA9IDE7CisKKwlyID0gZHJtX3ZibGFua19pbml0KHJkZXYtPmRkZXYsIG51bV9jcnRjKTsKIAlpZiAocikgewogCQlyZXR1cm4gcjsKIAl9CisJLyogZW5hYmxlIG1zaSAqLworCXJkZXYtPm1zaV9lbmFibGVkID0gMDsKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzODApIHsKKwkJaW50IHJldCA9IHBjaV9lbmFibGVfbXNpKHJkZXYtPnBkZXYpOworCQlpZiAoIXJldCkKKwkJCXJkZXYtPm1zaV9lbmFibGVkID0gMTsKKwl9CiAJZHJtX2lycV9pbnN0YWxsKHJkZXYtPmRkZXYpOwogCXJkZXYtPmlycS5pbnN0YWxsZWQgPSB0cnVlOwogCURSTV9JTkZPKCJyYWRlb246IGlycSBpbml0aWFsaXplZC5cbiIpOwpAQCAtOTksNSArMTEwLDcgQEAKIAlpZiAocmRldi0+aXJxLmluc3RhbGxlZCkgewogCQlyZGV2LT5pcnEuaW5zdGFsbGVkID0gZmFsc2U7CiAJCWRybV9pcnFfdW5pbnN0YWxsKHJkZXYtPmRkZXYpOworCQlpZiAocmRldi0+bXNpX2VuYWJsZWQpCisJCQlwY2lfZGlzYWJsZV9tc2kocmRldi0+cGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCA3MDliZDg5Li5iYTEyODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtMjAxLDU1ICsyMDEsNiBAQAogCiAKIC8qCi0gKiBGb3IgbXVsdGlwbGUgbWFzdGVyIChsaWtlIG11bHRpcGxlIFgpLgotICovCi1zdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSB7Ci0JZHJtX2xvY2FsX21hcF90ICpzYXJlYTsKLQlkcm1fcmFkZW9uX3NhcmVhX3QgKnNhcmVhX3ByaXY7Ci19OwotCi1pbnQgcmFkZW9uX21hc3Rlcl9jcmVhdGVfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCi17Ci0Jc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2OwotCXVuc2lnbmVkIGxvbmcgc2FyZWFwYWdlOwotCWludCByZXQ7Ci0KLQltYXN0ZXJfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCptYXN0ZXJfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmIChtYXN0ZXJfcHJpdiA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQkvKiBwcmVidWlsZCB0aGUgU0FSRUEgKi8KLQlzYXJlYXBhZ2UgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBTQVJFQV9NQVgsIFBBR0VfU0laRSk7Ci0JcmV0ID0gZHJtX2FkZG1hcChkZXYsIDAsIHNhcmVhcGFnZSwgX0RSTV9TSE0sCi0JCQkgX0RSTV9DT05UQUlOU19MT0NLLAotCQkJICZtYXN0ZXJfcHJpdi0+c2FyZWEpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJTQVJFQSBzZXR1cCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYS0+aGFuZGxlICsgc2l6ZW9mKHN0cnVjdCBkcm1fc2FyZWEpOwotCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID0gMDsKLQltYXN0ZXItPmRyaXZlcl9wcml2ID0gbWFzdGVyX3ByaXY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCi17Ci0Jc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gbWFzdGVyLT5kcml2ZXJfcHJpdjsKLQotCWlmIChtYXN0ZXJfcHJpdiA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKG1hc3Rlcl9wcml2LT5zYXJlYSkgewotCQlkcm1fcm1tYXBfbG9ja2VkKGRldiwgbWFzdGVyX3ByaXYtPnNhcmVhKTsKLQl9Ci0Ja2ZyZWUobWFzdGVyX3ByaXYpOwotCW1hc3Rlci0+ZHJpdmVyX3ByaXYgPSBOVUxMOwotfQotCi0KLS8qCiAgKiBJT0NUTC4KICAqLwogaW50IHJhZGVvbl9kbWFfaW9jdGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCAyYjk5N2ExLi44ZDBiN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl1MzIgZnBfaG9yel9zdHJldGNoLCBmcF92ZXJ0X3N0cmV0Y2gsIGZwX2hvcnpfdmVydF9hY3RpdmU7CiAJdTMyIGZwX2hfc3luY19zdHJ0X3dpZCwgZnBfY3J0Y19oX3RvdGFsX2Rpc3A7CiAJdTMyIGZwX3Zfc3luY19zdHJ0X3dpZCwgZnBfY3J0Y192X3RvdGFsX2Rpc3A7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGU7CiAKIAlmcF92ZXJ0X3N0cmV0Y2ggPSBSUkVHMzIoUkFERU9OX0ZQX1ZFUlRfU1RSRVRDSCkgJgogCQkoUkFERU9OX1ZFUlRfU1RSRVRDSF9SRVNFUlZFRCB8CkBAIC05NSwxOSArOTUsMTkgQEAKIAogCWZwX2hvcnpfdmVydF9hY3RpdmUgPSAwOwogCi0JaWYgKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzID09IDAgfHwKLQkgICAgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgPT0gMCkgeworCWlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgPT0gMCB8fAorCSAgICBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPT0gMCkgewogCQloc2NhbGUgPSBmYWxzZTsKIAkJdnNjYWxlID0gZmFsc2U7CiAJfSBlbHNlIHsKLQkJaWYgKHhyZXMgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcykKLQkJCXhyZXMgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJaWYgKHlyZXMgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykKLQkJCXlyZXMgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKKwkJaWYgKHhyZXMgPiBuYXRpdmVfbW9kZS0+aGRpc3BsYXkpCisJCQl4cmVzID0gbmF0aXZlX21vZGUtPmhkaXNwbGF5OworCQlpZiAoeXJlcyA+IG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkKKwkJCXlyZXMgPSBuYXRpdmVfbW9kZS0+dmRpc3BsYXk7CiAKLQkJaWYgKHhyZXMgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMpCisJCWlmICh4cmVzID09IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkKIAkJCWhzY2FsZSA9IGZhbHNlOwotCQlpZiAoeXJlcyA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykKKwkJaWYgKHlyZXMgPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KQogCQkJdnNjYWxlID0gZmFsc2U7CiAJfQogCkBAIC0xMTksMTEgKzExOSwxMSBAQAogCQllbHNlIHsKIAkJCWluYyA9IChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9BVVRPX1JBVElPX0lOQykgPyAxIDogMDsKIAkJCXNjYWxlID0gKCh4cmVzICsgaW5jKSAqIFJBREVPTl9IT1JaX1NUUkVUQ0hfUkFUSU9fTUFYKQotCQkJCS8gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyAxOworCQkJCS8gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICsgMTsKIAkJCWZwX2hvcnpfc3RyZXRjaCB8PSAoKChzY2FsZSkgJiBSQURFT05fSE9SWl9TVFJFVENIX1JBVElPX01BU0spIHwKIAkJCQkJUkFERU9OX0hPUlpfU1RSRVRDSF9CTEVORCB8CiAJCQkJCVJBREVPTl9IT1JaX1NUUkVUQ0hfRU5BQkxFIHwKLQkJCQkJKChuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcy84LTEpIDw8IDE2KSk7CisJCQkJCSgobmF0aXZlX21vZGUtPmhkaXNwbGF5LzgtMSkgPDwgMTYpKTsKIAkJfQogCiAJCWlmICghdnNjYWxlKQpAQCAtMTMxLDExICsxMzEsMTEgQEAKIAkJZWxzZSB7CiAJCQlpbmMgPSAoZnBfdmVydF9zdHJldGNoICYgUkFERU9OX1ZFUlRfQVVUT19SQVRJT19JTkMpID8gMSA6IDA7CiAJCQlzY2FsZSA9ICgoeXJlcyArIGluYykgKiBSQURFT05fVkVSVF9TVFJFVENIX1JBVElPX01BWCkKLQkJCQkvIG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgMTsKKwkJCQkvIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSArIDE7CiAJCQlmcF92ZXJ0X3N0cmV0Y2ggfD0gKCgoc2NhbGUpICYgUkFERU9OX1ZFUlRfU1RSRVRDSF9SQVRJT19NQVNLKSB8CiAJCQkJCVJBREVPTl9WRVJUX1NUUkVUQ0hfRU5BQkxFIHwKIAkJCQkJUkFERU9OX1ZFUlRfU1RSRVRDSF9CTEVORCB8Ci0JCQkJCSgobmF0aXZlX21vZGUtPnBhbmVsX3lyZXMtMSkgPDwgMTIpKTsKKwkJCQkJKChuYXRpdmVfbW9kZS0+dmRpc3BsYXktMSkgPDwgMTIpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJNWF9DRU5URVI6CkBAIC0xNzUsOCArMTc1LDggQEAKIAkJCQkJCT8gUkFERU9OX0NSVENfVl9TWU5DX1BPTAogCQkJCQkJOiAwKSkpOwogCi0JCWZwX2hvcnpfdmVydF9hY3RpdmUgPSAoKChuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgJiAweGZmZikgfAotCQkJCSgoKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzIC8gOCkgJiAweDFmZikgPDwgMTYpKTsKKwkJZnBfaG9yel92ZXJ0X2FjdGl2ZSA9ICgoKG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkgJiAweGZmZikgfAorCQkJCSgoKG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAvIDgpICYgMHgxZmYpIDw8IDE2KSk7CiAJCWJyZWFrOwogCWNhc2UgUk1YX09GRjoKIAlkZWZhdWx0OgpAQCAtNTMyLDYgKzUzMiwxMCBAQAogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIob2xkX2ZiKTsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2ZiLT5vYmopOwogCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY0LDYgKzY2OCw5IEBACiAKIAkJV1JFRzMyKFJBREVPTl9ESVNQMl9NRVJHRV9DTlRMLCBkaXNwMl9tZXJnZV9jbnRsKTsKIAkJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwgY3J0YzJfZ2VuX2NudGwpOworCisJCVdSRUczMihSQURFT05fRlBfSDJfU1lOQ19TVFJUX1dJRCwgY3J0Y19oX3N5bmNfc3RydF93aWQpOworCQlXUkVHMzIoUkFERU9OX0ZQX1YyX1NZTkNfU1RSVF9XSUQsIGNydGNfdl9zeW5jX3N0cnRfd2lkKTsKIAl9IGVsc2UgewogCQl1aW50MzJfdCBjcnRjX2dlbl9jbnRsOwogCQl1aW50MzJfdCBjcnRjX2V4dF9jbnRsOwpAQCAtMTAxNSwxNCArMTAyMiwxMSBAQAogCQkJCSBpbnQgeCwgaW50IHksIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBUT0RPIFRWICovCiAJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAlyYWRlb25fc2V0X2NydGNfdGltaW5nKGNydGMsIGFkanVzdGVkX21vZGUpOwogCXJhZGVvbl9zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwotCXJhZGVvbl9iYW5kd2lkdGhfdXBkYXRlKHJkZXYpOwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7CiAJCXJhZGVvbl9sZWdhY3lfcm14X21vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUpOwogCX0gZWxzZSB7CkBAIC0xMDUzLDYgKzEwNTcsNyBAQAogCS5tb2RlX3NldF9iYXNlID0gcmFkZW9uX2NydGNfc2V0X2Jhc2UsCiAJLnByZXBhcmUgPSByYWRlb25fY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSByYWRlb25fY3J0Y19jb21taXQsCisJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggYjE1NDdmNy4uMDAzODIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTEwNyw4ICsxMDcsNiBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV9sdmRzX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCi0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfbHZkc19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTkyLDYgKzE5MCw4IEBACiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCWlmIChyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgIT0gUk1YX09GRikKQEAgLTIxOCw3ICsyMTgsOCBAQAogCQkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtMjcyLDcgKzI3Myw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC00NjgsNyArNDY4LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdG1kc19pbnRfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTU0Myw2ICs1NDIsMTQgQEAKIAogICAgIGZwX2dlbl9jbnRsICY9IH4oUkFERU9OX0ZQX0ZQT04gfCBSQURFT05fRlBfVE1EU19FTik7CiAKKyAgICBmcF9nZW5fY250bCAmPSB+KFJBREVPTl9GUF9STVhfSFZTWU5DX0NPTlRST0xfRU4gfAorCQkgICAgIFJBREVPTl9GUF9ERlBfU1lOQ19TRUwgfAorCQkgICAgIFJBREVPTl9GUF9DUlRfU1lOQ19TRUwgfAorCQkgICAgIFJBREVPTl9GUF9DUlRDX0xPQ0tfOERPVCB8CisJCSAgICAgUkFERU9OX0ZQX1VTRV9TSEFET1dfRU4gfAorCQkgICAgIFJBREVPTl9GUF9DUlRDX1VTRV9TSEFET1dfVkVORCB8CisJCSAgICAgUkFERU9OX0ZQX0NSVF9TWU5DX0FMVCk7CisKICAgICBpZiAoMSkgLyogIEZJWE1FIHJnYkJpdHMgPT0gOCAqLwogCSAgICBmcF9nZW5fY250bCB8PSBSQURFT05fRlBfUEFORUxfRk9STUFUOyAgLyogMjQgYml0IGZvcm1hdCAqLwogICAgIGVsc2UKQEAgLTU1Niw3ICs1NjMsNyBAQAogCQkgICAgZWxzZQogCQkJICAgIGZwX2dlbl9jbnRsIHw9IFIyMDBfRlBfU09VUkNFX1NFTF9DUlRDMTsKIAkgICAgfSBlbHNlCi0JCSAgICBmcF9nZW5fY250bCB8PSBSQURFT05fRlBfU0VMX0NSVEMxOworCQkgICAgZnBfZ2VuX2NudGwgJj0gflJBREVPTl9GUF9TRUxfQ1JUQzI7CiAgICAgfSBlbHNlIHsKIAkgICAgaWYgKEFTSUNfSVNfUjMwMChyZGV2KSB8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB7CiAJCSAgICBmcF9nZW5fY250bCAmPSB+UjIwMF9GUF9TT1VSQ0VfU0VMX01BU0s7CkBAIC01OTMsNyArNjAwLDggQEAKIAkJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtNjM2LDcgKzY0NCw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3RtZHNfZXh0X2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3RtZHNfZXh0X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC03MzUsNyArNzQyLDggQEAKIAkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0KKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJcmV0dXJuIHRydWU7CkBAIC04MzksNyArODQ3LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdHZfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3R2X2RhY19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtODgxLDcgKzg4OCw3IEBACiAJCQkJCVI0MjBfVFZfREFDX0RBQ0FESl9NQVNLIHwKIAkJCQkJUjQyMF9UVl9EQUNfUkRBQ1BEIHwKIAkJCQkJUjQyMF9UVl9EQUNfR0RBQ1BEIHwKLQkJCQkJUjQyMF9UVl9EQUNfR0RBQ1BEIHwKKwkJCQkJUjQyMF9UVl9EQUNfQkRBQ1BEIHwKIAkJCQkJUjQyMF9UVl9EQUNfVFZFTkFCTEUpOwogCQl9IGVsc2UgewogCQkJdHZfZGFjX2NudGwgJj0gfihSQURFT05fVFZfREFDX1NURF9NQVNLIHwKQEAgLTg4OSw3ICs4OTYsNyBAQAogCQkJCQlSQURFT05fVFZfREFDX0RBQ0FESl9NQVNLIHwKIAkJCQkJUkFERU9OX1RWX0RBQ19SREFDUEQgfAogCQkJCQlSQURFT05fVFZfREFDX0dEQUNQRCB8Ci0JCQkJCVJBREVPTl9UVl9EQUNfR0RBQ1BEKTsKKwkJCQkJUkFERU9OX1RWX0RBQ19CREFDUEQpOwogCQl9CiAKIAkJLyogIEZJWE1FIFRWICovCkBAIC0xMzE4LDcgKzEzMjUsMTAgQEAKIAkJcmV0dXJuOwogCiAJZW5jb2RlciA9ICZyYWRlb25fZW5jb2Rlci0+YmFzZTsKLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgxOworCWVsc2UKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CiAJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKIAogCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggNTcwYTU4Ny4uYWNlNzI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMTcyLDYgKzE3Miw3IEBACiAKIHN0cnVjdCByYWRlb25fbW9kZV9pbmZvIHsKIAlzdHJ1Y3QgYXRvbV9jb250ZXh0ICphdG9tX2NvbnRleHQ7CisJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm87CiAJZW51bSByYWRlb25fY29ubmVjdG9yX3RhYmxlIGNvbm5lY3Rvcl90YWJsZTsKIAlib29sIG1vZGVfY29uZmlnX2luaXRpYWxpemVkOwogCXN0cnVjdCByYWRlb25fY3J0YyAqY3J0Y3NbMl07CkBAIC0xODYsMTcgKzE4Nyw2IEBACiAKIH07CiAKLXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgewotCS8qIHByZWZlcnJlZCBtb2RlICovCi0JdWludDMyX3QgcGFuZWxfeHJlcywgcGFuZWxfeXJlczsKLQl1aW50MzJfdCBob3ZlcnBsdXMsIGhzeW5jX3dpZHRoOwotCXVpbnQzMl90IGhibGFuazsKLQl1aW50MzJfdCB2b3ZlcnBsdXMsIHZzeW5jX3dpZHRoOwotCXVpbnQzMl90IHZibGFuazsKLQl1aW50MzJfdCBkb3RjbG9jazsKLQl1aW50MzJfdCBmbGFnczsKLX07Ci0KICNkZWZpbmUgTUFYX0hfQ09ERV9USU1JTkdfTEVOIDMyCiAjZGVmaW5lIE1BWF9WX0NPREVfVElNSU5HX0xFTiAzMgogCkBAIC0yMjgsNyArMjE4LDcgQEAKIAllbnVtIHJhZGVvbl9ybXhfdHlwZSBybXhfdHlwZTsKIAlmaXhlZDIwXzEyIHZzYzsKIAlmaXhlZDIwXzEyIGhzYzsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjIHsKQEAgLTI0OCw3ICsyMzgsNyBAQAogCWJvb2wgICAgIHVzZV9iaW9zX2RpdmlkZXJzOwogCXVpbnQzMl90IGx2ZHNfZ2VuX2NudGw7CiAJLyogcGFuZWwgbW9kZSAqLwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjIHsKQEAgLTI3MSw2ICsyNjEsMTYgQEAKIAlzdHJ1Y3QgcmFkZW9uX3RtZHNfcGxsIHRtZHNfcGxsWzRdOwogfTsKIAorLyogc3ByZWFkIHNwZWN0cnVtICovCitzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgeworCXVpbnQxNl90IHBlcmNlbnRhZ2U7CisJdWludDhfdCB0eXBlOworCXVpbnQ4X3Qgc3RlcDsKKwl1aW50OF90IGRlbGF5OworCXVpbnQ4X3QgcmFuZ2U7CisJdWludDhfdCByZWZkaXY7Cit9OworCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgewogCS8qIGF0b20gZGlnICovCiAJYm9vbCBjb2hlcmVudF9tb2RlOwpAQCAtMjc4LDggKzI3OCw5IEBACiAJLyogYXRvbSBsdmRzICovCiAJdWludDMyX3QgbHZkc19taXNjOwogCXVpbnQxNl90IHBhbmVsX3B3cl9kZWxheTsKKwlzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgKnNzOwogCS8qIHBhbmVsIG1vZGUgKi8KLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjIHsKQEAgLTI5NCw3ICsyOTUsNyBAQAogCXVpbnQzMl90IGZsYWdzOwogCXVpbnQzMl90IHBpeGVsX2Nsb2NrOwogCWVudW0gcmFkZW9uX3JteF90eXBlIHJteF90eXBlOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiAJdm9pZCAqZW5jX3ByaXY7CiB9OwogCkBAIC0zMDgsMTIgKzMwOSwxNSBAQAogCXVpbnQzMl90IGNvbm5lY3Rvcl9pZDsKIAl1aW50MzJfdCBkZXZpY2VzOwogCXN0cnVjdCByYWRlb25faTJjX2NoYW4gKmRkY19idXM7CisJLyogc29tZSBzeXN0ZW1zIGhhdmUgYSBhbiBoZG1pIGFuZCB2Z2EgcG9ydCB3aXRoIGEgc2hhcmVkIGRkYyBsaW5lICovCisJYm9vbCBzaGFyZWRfZGRjOwogCWJvb2wgdXNlX2RpZ2l0YWw7CiAJLyogd2UgbmVlZCB0byBtaW5kIHRoZSBFRElEIGJldHdlZW4gZGV0ZWN0CiAJICAgYW5kIGdldCBtb2RlcyBkdWUgdG8gYW5hbG9nL2RpZ2l0YWwvdHZlbmNvZGVyICovCiAJc3RydWN0IGVkaWQgKmVkaWQ7CiAJdm9pZCAqY29uX3ByaXY7CiAJYm9vbCBkYWNfbG9hZF9kZXRlY3Q7CisJdWludDE2X3QgY29ubmVjdG9yX29iamVjdF9pZDsKIH07CiAKIHN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgewpAQCAtNDA3LDYgKzQxMSw4IEBACiByYWRlb25fY29tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgYm9vbCBvbik7CiBleHRlcm4gdm9pZCByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkJICAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAorCQkJCSAgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pOwogc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqcmFkZW9uX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCwKIAkJCQkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwppbmRleCA3M2FmNDYzLi4xZjA1NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwpAQCAtNDAwLDExICs0MDAsOSBAQAogaW50IHJhZGVvbl9vYmplY3RfbGlzdF9yZXNlcnZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCAqbG9iajsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCWludCByOwogCi0JbGlzdF9mb3JfZWFjaChpLCBoZWFkKSB7Ci0JCWxvYmogPSBsaXN0X2VudHJ5KGksIHN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgaGVhZCwgbGlzdCl7CiAJCWlmICghbG9iai0+cm9iai0+cGluX2NvdW50KSB7CiAJCQlyID0gcmFkZW9uX29iamVjdF9yZXNlcnZlKGxvYmotPnJvYmosIHRydWUpOwogCQkJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKQEAgLTQyMCwxMyArNDE4LDEwIEBACiB2b2lkIHJhZGVvbl9vYmplY3RfbGlzdF91bnJlc2VydmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0ICpsb2JqOwotCXN0cnVjdCBsaXN0X2hlYWQgKmk7CiAKLQlsaXN0X2Zvcl9lYWNoKGksIGhlYWQpIHsKLQkJbG9iaiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CiAJCWlmICghbG9iai0+cm9iai0+cGluX2NvdW50KSB7CiAJCQlyYWRlb25fb2JqZWN0X3VucmVzZXJ2ZShsb2JqLT5yb2JqKTsKLQkJfSBlbHNlIHsKIAkJfQogCX0KIH0KQEAgLTQzNiw3ICs0MzEsNiBAQAogCXN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QgKmxvYmo7CiAJc3RydWN0IHJhZGVvbl9vYmplY3QgKnJvYmo7CiAJc3RydWN0IHJhZGVvbl9mZW5jZSAqb2xkX2ZlbmNlID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCWludCByOwogCiAJciA9IHJhZGVvbl9vYmplY3RfbGlzdF9yZXNlcnZlKGhlYWQpOwpAQCAtNDQ0LDggKzQzOCw3IEBACiAJCXJhZGVvbl9vYmplY3RfbGlzdF91bnJlc2VydmUoaGVhZCk7CiAJCXJldHVybiByOwogCX0KLQlsaXN0X2Zvcl9lYWNoKGksIGhlYWQpIHsKLQkJbG9iaiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CiAJCXJvYmogPSBsb2JqLT5yb2JqOwogCQlpZiAoIXJvYmotPnBpbl9jb3VudCkgewogCQkJaWYgKGxvYmotPndkb21haW4pIHsKQEAgLTQ4MiwxMCArNDc1LDggQEAKIHsKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0ICpsb2JqOwogCXN0cnVjdCByYWRlb25fZmVuY2UgKm9sZF9mZW5jZSA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaTsKIAotCWxpc3RfZm9yX2VhY2goaSwgaGVhZCkgewotCQlsb2JqID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKIAkJb2xkX2ZlbmNlID0gKHN0cnVjdCByYWRlb25fZmVuY2UgKilsb2JqLT5yb2JqLT50b2JqLnN5bmNfb2JqOwogCQlsb2JqLT5yb2JqLT50b2JqLnN5bmNfb2JqID0gTlVMTDsKIAkJaWYgKG9sZF9mZW5jZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxNDZjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IFJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKworaW50IHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCitpbnQgcmFkZW9uX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQocmRldikpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBDUCAhXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlYnVnZnMgaW5mbworICovCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKK3N0YXRpYyBpbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICJlbmdpbmUgY2xvY2s6ICV1MCBIelxuIiwgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikpOworCXNlcV9wcmludGYobSwgIm1lbW9yeSBjbG9jazogJXUwIEh6XG4iLCByYWRlb25fZ2V0X21lbW9yeV9jbG9jayhyZGV2KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHJhZGVvbl9wbV9pbmZvX2xpc3RbXSA9IHsKKwl7InJhZGVvbl9wbV9pbmZvIiwgcmFkZW9uX2RlYnVnZnNfcG1faW5mbywgMCwgTlVMTH0sCit9OworI2VuZGlmCisKK2ludCByYWRlb25fZGVidWdmc19wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcmFkZW9uX3BtX2luZm9fbGlzdCwgQVJSQVlfU0laRShyYWRlb25fcG1faW5mb19saXN0KSk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCmluZGV4IDIxZGE4NzEuLjI5YWI3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCkBAIC0yOTAsNiArMjkwLDggQEAKICNkZWZpbmUgUkFERU9OX0JVU19DTlRMICAgICAgICAgICAgICAgICAgICAgMHgwMDMwCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX01BU1RFUl9ESVMgICAgICAgICAoMSA8PCA2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19CSU9TX0RJU19ST00gICAgICAgKDEgPDwgMTIpCisjCWRlZmluZSBSUzYwMF9CVVNfTUFTVEVSX0RJUwkgICAgICgxIDw8IDE0KQorIwlkZWZpbmUgUlM2MDBfTVNJX1JFQVJNCQkgICAgICgxIDw8IDIwKSAvKiByczYwMC9yczY5MC9yczc0MCAqLwogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19SRF9ESVNDQVJEX0VOICAgICAgKDEgPDwgMjQpCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1JEX0FCT1JUX0VOICAgICAgICAoMSA8PCAyNSkKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfTVNUUl9ESVNDT05ORUNUX0VOICgxIDw8IDI4KQpAQCAtMjk3LDYgKzI5OSw5IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1JFQURfQlVSU1QgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgUkFERU9OX0JVU19DTlRMMSAgICAgICAgICAgICAgICAgICAgMHgwMDM0CiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1dBSVRfT05fTE9DS19FTiAgICAoMSA8PCA0KQorLyogcnYzNzAvcnYzODAsIHJ2NDEwLCByNDIzL3I0MzAvcjQ4MCwgcjV4eCAqLworI2RlZmluZSBSQURFT05fTVNJX1JFQVJNX0VOCQkgICAgMHgwMTYwCisjCWRlZmluZSBSVjM3MF9NU0lfUkVBUk1fRU4JICAgICAoMSA8PCAwKQogCiAvKiAjZGVmaW5lIFJBREVPTl9QQ0lFX0lOREVYICAgICAgICAgICAgICAgICAgIDB4MDAzMCAqLwogLyogI2RlZmluZSBSQURFT05fUENJRV9EQVRBICAgICAgICAgICAgICAgICAgICAweDAwMzQgKi8KQEAgLTMzMTEsNiArMzMxNiw3IEBACiAjZGVmaW5lIFJBREVPTl9BSUNfQ05UTCAgICAgICAgICAgICAgICAgICAgIDB4MDFkMAogIyAgICAgICBkZWZpbmUgUkFERU9OX1BDSUdBUlRfVFJBTlNMQVRFX0VOICAgICAoMSA8PCAwKQogIyAgICAgICBkZWZpbmUgUkFERU9OX0RJU19PVVRfT0ZfUENJX0dBUlRfQUNDRVNTICAgICAoMSA8PCAxKQorIwlkZWZpbmUgUlM0MDBfTVNJX1JFQVJNCSAgICAgICAgICAgICAgICAoMSA8PCAzKSAvKiByczQwMC9yczQ4MCAqLwogI2RlZmluZSBSQURFT05fQUlDX0xPX0FERFIgICAgICAgICAgICAgICAgICAweDAxZGMKICNkZWZpbmUgUkFERU9OX0FJQ19QVF9CQVNFCQkweDAxZDgKICNkZWZpbmUgUkFERU9OX0FJQ19ISV9BRERSCQkweDAxZTAKQEAgLTMzMzMsNiArMzMzOSw3IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUX01BWF9EV09SRFMgICAgICAgICAgKDEgPDwgMTIpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMF9SRUdfTUFTSyAgICAgICAgICAgMHgwMDAwMDdmZgogIyAgICAgICBkZWZpbmUgUjMwMF9DUF9QQUNLRVQwX1JFR19NQVNLICAgICAgICAgICAgIDB4MDAwMDFmZmYKKyMgICAgICAgZGVmaW5lIFI2MDBfQ1BfUEFDS0VUMF9SRUdfTUFTSyAgICAgICAgICAgICAweDAwMDBmZmZmCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMV9SRUcwX01BU0sgICAgICAgICAgMHgwMDAwMDdmZgogIyAgICAgICBkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVDFfUkVHMV9NQVNLICAgICAgICAgIDB4MDAzZmY4MDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCmluZGV4IDAzYzMzY2YuLmY4YTQ2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkvKiBOdW1iZXIgb2YgdGVzdHMgPQogCSAqIChUb3RhbCBHVFQgLSBJQiBwb29sIC0gd3JpdGViYWNrIHBhZ2UgLSByaW5nIGJ1ZmZlcikgLyB0ZXN0IHNpemUKIAkgKi8KLQluID0gKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gNDA5NiAtCisJbiA9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCAtIFJBREVPTl9HUFVfUEFHRV9TSVpFIC0KIAkgICAgIHJkZXYtPmNwLnJpbmdfc2l6ZSkgLyBzaXplOwogCiAJZ3R0X29iaiA9IGt6YWxsb2MobiAqIHNpemVvZigqZ3R0X29iaiksIEdGUF9LRVJORUwpOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CiAKLQkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIGd0dF9hZGRyLCB2cmFtX2FkZHIsIHNpemUgLyA0MDk2LCBmZW5jZSk7CisJCXIgPSByYWRlb25fY29weShyZGV2LCBndHRfYWRkciwgdnJhbV9hZGRyLCBzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsIGZlbmNlKTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigiRmFpbGVkIEdUVC0+VlJBTSBjb3B5ICVkXG4iLCBpKTsKIAkJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCX0KIAotCQlyID0gcmFkZW9uX2NvcHkocmRldiwgdnJhbV9hZGRyLCBndHRfYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIHZyYW1fYWRkciwgZ3R0X2FkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgVlJBTS0+R1RUIGNvcHkgJWRcbiIsIGkpOwogCQkJZ290byBvdXRfY2xlYW51cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKaW5kZXggYWNkODg5Yy4uMTM4MWUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKQEAgLTI5NSw2ICsyOTUsMTIgQEAKIAlpZiAodW5saWtlbHkocikpIHsKIAkJcmV0dXJuIHI7CiAJfQorCisJciA9IHR0bV90dF9zZXRfcGxhY2VtZW50X2NhY2hpbmcoYm8tPnR0bSwgdG1wX21lbS5wbGFjZW1lbnQpOworCWlmICh1bmxpa2VseShyKSkgeworCQlnb3RvIG91dF9jbGVhbnVwOworCX0KKwogCXIgPSB0dG1fdHRfYmluZChiby0+dHRtLCAmdG1wX21lbSk7CiAJaWYgKHVubGlrZWx5KHIpKSB7CiAJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC01MzAsNyArNTM2LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByYWRlb25fdHRtX3ZtX29wczsKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnR0bV92bV9vcHMgPSBOVUxMOworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdHRtX3ZtX29wcyA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgcmFkZW9uX3R0bV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CkBAIC02ODksOSArNjk1LDYgQEAKIAogI2RlZmluZSBSQURFT05fREVCVUdGU19NRU1fVFlQRVMgMgogCi1zdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX21lbV90eXBlc19saXN0W1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU107Ci1zdGF0aWMgY2hhciByYWRlb25fbWVtX3R5cGVzX25hbWVzW1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU11bMzJdOwotCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiBzdGF0aWMgaW50IHJhZGVvbl9tbV9kdW1wX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKQEAgLTcxMSw5ICs3MTQsMTEgQEAKIAogc3RhdGljIGludCByYWRlb25fdHRtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX21lbV90eXBlc19saXN0W1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU107CisJc3RhdGljIGNoYXIgcmFkZW9uX21lbV90eXBlc19uYW1lc1tSQURFT05fREVCVUdGU19NRU1fVFlQRVNdWzMyXTsKIAl1bnNpZ25lZCBpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJZm9yIChpID0gMDsgaSA8IFJBREVPTl9ERUJVR0ZTX01FTV9UWVBFUzsgaSsrKSB7CiAJCWlmIChpID09IDApCiAJCQlzcHJpbnRmKHJhZGVvbl9tZW1fdHlwZXNfbmFtZXNbaV0sICJyYWRlb25fdnJhbV9tbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczEwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnMxMDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhOTEzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnMxMDBkLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SUzEwMERfSF9fCisjZGVmaW5lIF9fUlMxMDBEX0hfXworCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAxNUNfTkJfVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNUMKKyNkZWZpbmUgICBTXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNUNfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTVDX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IGEzZmJkYWQuLmNhMDM3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTI3LDI3ICsyNywxMiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxkcm0vZHJtUC5oPgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyczQwMGQuaCIKIAotLyogcnM0MDAscnM0ODAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvIDogcnM0MDAscnM0ODAgKi8KK3N0YXRpYyBpbnQgcnM0MDBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0byA6Ci0gKiByczQwMCxyczQ4MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcnM0MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLQotLyoKLSAqIEdBUlQgZnVuY3Rpb25zLgotICovCiB2b2lkIHJzNDAwX2dhcnRfYWRqdXN0X3NpemUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJLyogQ2hlY2sgZ2FydCBzaXplICovCkBAIC0yMzgsNjEgKzIyMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotLyoKLSAqIE1DIGZ1bmN0aW9ucy4KLSAqLwotaW50IHJzNDAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3QgdG1wOwotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXJzNDAwX2dwdV9pbml0KHJkZXYpOwotCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uICs9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiAmPSB+KHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQlyMTAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSQURFT05fTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMihSQURFT05fTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0JdG1wID0gUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCkgfCBSQURFT05fSFBfTElOX1JEX0NBQ0hFX0RJUzsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXAgfCBSQURFT05fSERQX1NPRlRfUkVTRVQgfCBSQURFT05fSERQX1JFQURfQlVGRkVSX0lOVkFMSURBVEUpOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotCVdSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwsIHRtcCk7Ci0JKHZvaWQpUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczQwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHJzNDAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogdm9pZCByczQwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM0MDAgPyAqLwpAQCAtMzA1LDEwICsyMzUsNiBAQAogCX0KIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlyczQwMF9nYXJ0X2FkanVzdF9zaXplKHJkZXYpOwpAQCAtMzE5LDEwICsyNDUsNiBAQAogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOwogfQogCi0KLS8qCi0gKiBJbmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKLSAqLwogdWludDMyX3QgcnM0MDBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKQogewogCXVpbnQzMl90IHI7CkBAIC0zNDAsMTAgKzI2Miw2IEBACiAJV1JFRzMyKFJTNDgwX05CX01DX0lOREVYLCAweGZmKTsKIH0KIAotCi0vKgotICogRGVidWdmcyBpbmZvCi0gKi8KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcnM0MDBfZGVidWdmc19nYXJ0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNDE5LDcgKzMzNyw3IEBACiB9OwogI2VuZGlmCiAKLWludCByczQwMF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgaW50IHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAlyZXR1cm4gcmFkZW9uX2RlYnVnZnNfYWRkX2ZpbGVzKHJkZXYsIHJzNDAwX2dhcnRfaW5mb19saXN0LCAxKTsKQEAgLTQyNywzICszNDUsMTkwIEBACiAJcmV0dXJuIDA7CiAjZW5kaWYKIH0KKworc3RhdGljIGludCByczQwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXUzMiB0bXA7CisKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJdG1wID0gR18wMDAxNUNfTUNfRkJfU1RBUlQoUlJFRzMyKFJfMDAwMTVDX05CX1RPTSkpOworCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSBHXzAwMDE1Q19NQ19GQl9TVEFSVCh0bXApIDw8IDE2OworCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKKwlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByczQwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByMTAwX21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcjEwMF9tY19zdG9wKHJkZXYsICZzYXZlKTsKKworCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwlXUkVHMzIoUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04sCisJCVNfMDAwMTQ4X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisKKwlyMTAwX21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM0MDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNDAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyczQwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCXIgPSByczQwMF9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXIxMDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlyMzAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogc2V0dXAgTUMgYmVmb3JlIGNhbGxpbmcgcG9zdCB0YWJsZXMgKi8KKwlyczQwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByczQwMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnM0MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXIxMDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM0MDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM0MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHJzNDAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBjb21iaW9zIGZvciBSUzQwMC9SUzQ4MCBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCisJcnM0MDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHJzNDAwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByczQwMF9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIzMDBfc2V0X3JlZ19zYWZlKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByczQwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJzNDAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJzNDAwX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGJhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwZC5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTNDAwRF9IX18KKyNkZWZpbmUgX19SUzQwMERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0OAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxNUNfTkJfVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNUMKKyNkZWZpbmUgICBTXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNUNfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTVDX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCAwZTc5MWUyNi4uNWYxMTdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtMjUsMjggKzI1LDI1IEBACiAgKiAgICAgICAgICBBbGV4IERldWNoZXIKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLworLyogUlM2MDAgLyBSYWRlb24gWDEyNTAvWDEyNzAgaW50ZWdyYXRlZCBHUFUKKyAqCisgKiBUaGlzIGZpbGUgZ2F0aGVyIGZ1bmN0aW9uIHNwZWNpZmljIHRvIFJTNjAwIHdoaWNoIGlzIHRoZSBJR1Agb2YKKyAqIHRoZSBYMTI1MC9YMTI3MCBmYW1pbHkgc3VwcG9ydGluZyBpbnRlbCBDUFUgKHdoaWxlIFJTNjkwL1JTNzQwCisgKiBpcyB0aGUgWDEyNTAvWDEyNzAgc3VwcG9ydGluZyBBTUQgQ1BVKS4gVGhlIGRpc3BsYXkgZW5naW5lIGFyZQorICogdGhlIGF2aXZvIG9uZSwgYmlvcyBpcyBhbiBhdG9tYmlvcywgM0QgYmxvY2sgYXJlIHRoZSBvbmUgb2YgdGhlCisgKiBSNFhYIGZhbWlseS4gVGhlIEdBUlQgaXMgZGlmZmVyZW50IGZyb20gdGhlIFJTNDAwIG9uZSBhbmQgaXMgdmVyeQorICogY2xvc2UgdG8gdGhlIG9uZSBvZiB0aGUgUjYwMCBmYW1pbHkgKFI2MDAgbGlrZWx5IGJlaW5nIGFuIGV2b2x1dGlvbgorICogb2YgdGhlIFJTNjAwIEdBUlQgYmxvY2spLgorICovCiAjaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAicnM2MDBkLmgiCiAKICNpbmNsdWRlICJyczYwMF9yZWdfc2FmZS5oIgogCi0vKiByczYwMCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG8gOgotICogcnM2MDAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCiB2b2lkIHJzNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZGlzYWJsZV92Z2Eoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCiAKIC8qCiAgKiBHQVJULgpAQCAtNTUsMTggKzUyLDE4IEBACiB7CiAJdWludDMyX3QgdG1wOwogCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQl0bXAgJj0gfihSUzYwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTIHwgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRSk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMLCB0bXApOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJdG1wICY9IENfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgJiBDXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgdG1wKTsKIAotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCk7Ci0JdG1wIHw9IFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwgdG1wKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOworCXRtcCB8PSBTXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTKDEpICYgU18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSgxKTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsIHRtcCk7CiAKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwpOwotCXRtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIHRtcCk7Ci0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOworCXRtcCAmPSBDXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTICYgQ18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsIHRtcCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMKTsKIH0KIAogaW50IHJzNjAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTg4LDcgKzg1LDcgQEAKIAogaW50IHJzNjAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKKwl1MzIgdG1wOwogCWludCByLCBpOwogCiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKQEAgLTk4LDQ2ICs5NSw1MCBAQAogCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogRW5hYmxlIGJ1cyBtYXN0ZXIgKi8KKwl0bXAgPSBSUkVHMzIoUl8wMDAwNENfQlVTX0NOVEwpICYgQ18wMDAwNENfQlVTX01BU1RFUl9ESVM7CisJV1JFRzMyKFJfMDAwMDRDX0JVU19DTlRMLCB0bXApOwogCS8qIEZJWE1FOiBzZXR1cCBkZWZhdWx0IHBhZ2UgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsCi0JCSAoUlM2MDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoNikgfAotCQkgIFJTNjAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDYpKSk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLAorCQkgKFNfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKDYpIHwKKwkJICBTXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg2KSkpOwogCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7Ci0JCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ0xJRU5UMF9DTlRMICsgaSwKLQkJCSAoUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgfAotCQkJICBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKLQkJCSAgUlM2MDBfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19ERUZBVUxUX1BBR0UgfAotCQkJICBSUzYwMF9FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSgzKSB8Ci0JCQkgIFJTNjAwX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKLQkJCSAgUlM2MDBfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoMykpKTsKKwkJV1JFRzMyX01DKFJfMDAwMTZDX01DX1BUMF9DTElFTlQwX0NOVEwgKyBpLAorCQkJU18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoMSkgfAorCQkJU18wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX01BU0soCisJCQkJVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUykgfAorCQkJU18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUygKKwkJCQlWXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfREVGQVVMVF9QQUdFKSB8CisJCQlTXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSgxKSB8CisJCQlTXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORygxKSB8CisJCQlTXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSgxKSk7CiAJfQogCiAJLyogU3lzdGVtIGNvbnRleHQgbWFwIHRvIEdBUlQgc3BhY2UgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCB0bXApOworCVdSRUczMl9NQyhSXzAwMDExMl9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQpOworCVdSRUczMl9NQyhSXzAwMDExNF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCk7CiAKIAkvKiBlbmFibGUgZmlyc3QgY29udGV4dCAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9TVEFSVF9BRERSLCByZGV2LT5tYy5ndHRfbG9jYXRpb24pOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsIHRtcCk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMLAotCQkgKFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFIHwgUlM2MDBfUEFHRV9UQUJMRV9UWVBFX0ZMQVQpKTsKKwlXUkVHMzJfTUMoUl8wMDAxM0NfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfU1RBUlRfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0KTsKKwlXUkVHMzJfTUMoUl8wMDAxNENfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsIHJkZXYtPm1jLmd0dF9lbmQpOworCVdSRUczMl9NQyhSXzAwMDEwMl9NQ19QVDBfQ09OVEVYVDBfQ05UTCwKKwkJCVNfMDAwMTAyX0VOQUJMRV9QQUdFX1RBQkxFKDEpIHwKKwkJCVNfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoVl8wMDAxMDJfUEFHRV9UQUJMRV9GTEFUKSk7CiAJLyogZGlzYWJsZSBhbGwgb3RoZXIgY29udGV4dHMgKi8KIAlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Ci0JCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfQ05UTCArIGksIDApOworCQlXUkVHMzJfTUMoUl8wMDAxMDJfTUNfUFQwX0NPTlRFWFQwX0NOVEwgKyBpLCAwKTsKIAl9CiAKIAkvKiBzZXR1cCB0aGUgcGFnZSB0YWJsZSAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9CQVNFX0FERFIsCi0JCSByZGV2LT5nYXJ0LnRhYmxlX2FkZHIpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfREVGQVVMVF9SRUFEX0FERFIsIDApOworCVdSRUczMl9NQyhSXzAwMDEyQ19NQ19QVDBfQ09OVEVYVDBfRkxBVF9CQVNFX0FERFIsCisJCQlyZGV2LT5nYXJ0LnRhYmxlX2FkZHIpOworCVdSRUczMl9NQyhSXzAwMDExQ19NQ19QVDBfQ09OVEVYVDBfREVGQVVMVF9SRUFEX0FERFIsIDApOwogCiAJLyogZW5hYmxlIHBhZ2UgdGFibGVzICovCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsICh0bXAgfCBSUzYwMF9FTkFCTEVfUFQpKTsKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfQ05UTDEpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSwgKHRtcCB8IFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUykpOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLCAodG1wIHwgU18wMDAxMDBfRU5BQkxFX1BUKDEpKSk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMDA5X01DX0NOVEwxKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEsICh0bXAgfCBTXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMoMSkpKTsKIAlyczYwMF9nYXJ0X3RsYl9mbHVzaChyZGV2KTsKIAlyZGV2LT5nYXJ0LnJlYWR5ID0gdHJ1ZTsKIAlyZXR1cm4gMDsKQEAgLTE0OCwxMCArMTQ5LDkgQEAKIAl1aW50MzJfdCB0bXA7CiAKIAkvKiBGSVhNRTogZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIDApOwotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSk7Ci0JdG1wICY9IH5SUzYwMF9FTkFCTEVfUEFHRV9UQUJMRVM7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0NOVEwxLCB0bXApOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgMCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMDA5X01DX0NOVEwxKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEsIHRtcCAmIENfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyk7CiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKSB7CiAJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKIAkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CkBAIC0xODUsMTMyICsxODUsNjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKgotICogTUMuCi0gKi8KLXZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVuc2lnbmVkIHRtcDsKLQotCWlmIChyMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IEdVSSBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwotCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMVZHQV9DT05UUk9MLCB0bXAgJiB+QVZJVk9fRFZHQV9DT05UUk9MX01PREVfRU5BQkxFKTsKLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCk7Ci0JV1JFRzMyKEFWSVZPX0QyVkdBX0NPTlRST0wsIHRtcCAmIH5BVklWT19EVkdBX0NPTlRST0xfTU9ERV9FTkFCTEUpOwotCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QxQ1JUQ19DT05UUk9MKTsKLQlXUkVHMzIoQVZJVk9fRDFDUlRDX0NPTlRST0wsIHRtcCAmIH5BVklWT19DUlRDX0VOKTsKLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDJDUlRDX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCwgdG1wICYgfkFWSVZPX0NSVENfRU4pOwotCi0JLyogbWFrZSBzdXJlIGFsbCBwcmV2aW91cyB3cml0ZSBnb3QgdGhyb3VnaCAqLwotCXRtcCA9IFJSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCk7Ci0KLQltZGVsYXkoMSk7Ci19Ci0KLWludCByczYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyczYwMF9ncHVfaW5pdChyZGV2KTsKLQlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQkvKiBFbmFibGUgYnVzIG1hc3RlciAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJTNjAwX0JVU19NQVNURVJfRElTOwotCVdSRUczMihSQURFT05fQlVTX0NOVEwsIHRtcCk7Ci0JLyogRklYTUU6IFdoYXQgZG9lcyBBR1AgbWVhbnMgZm9yIHN1Y2ggY2hpcHNldCA/ICovCi0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JLyogRklYTUU6IGFyZSB0aGlzIEFHUCByZWcgaW4gaW5kaXJlY3QgTUMgcmFuZ2UgPyAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19BR1BfQkFTRSwgMCk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9CQVNFXzIsIDApOwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSUzYwMF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUlM2MDBfTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19GQl9MT0NBVElPTiwgdG1wKTsKLQlXUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczYwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBJbnRlcnJ1cHRzCi0gKi8KIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcCA9IDA7CiAJdWludDMyX3QgbW9kZV9pbnQgPSAwOwogCiAJaWYgKHJkZXYtPmlycS5zd19pbnQpIHsKLQkJdG1wIHw9IFJBREVPTl9TV19JTlRfRU5BQkxFOworCQl0bXAgfD0gU18wMDAwNDBfU1dfSU5UX0VOKDEpOwogCX0KIAlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgewotCQltb2RlX2ludCB8PSBBVklWT19EMU1PREVfSU5UX01BU0s7CisJCW1vZGVfaW50IHw9IFNfMDA2NTQwX0QxTU9ERV9WQkxBTktfSU5UX01BU0soMSk7CiAJfQogCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzFdKSB7Ci0JCW1vZGVfaW50IHw9IEFWSVZPX0QyTU9ERV9JTlRfTUFTSzsKKwkJbW9kZV9pbnQgfD0gU18wMDY1NDBfRDJNT0RFX1ZCTEFOS19JTlRfTUFTSygxKTsKIAl9Ci0JV1JFRzMyKFJBREVPTl9HRU5fSU5UX0NOVEwsIHRtcCk7Ci0JV1JFRzMyKEFWSVZPX0R4TU9ERV9JTlRfTUFTSywgbW9kZV9pbnQpOworCVdSRUczMihSXzAwMDA0MF9HRU5fSU5UX0NOVEwsIHRtcCk7CisJV1JFRzMyKFJfMDA2NTQwX0R4TU9ERV9JTlRfTUFTSywgbW9kZV9pbnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJzNjAwX2lycV9hY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiAqcjUwMF9kaXNwX2ludCkKIHsKLQl1aW50MzJfdCBpcnFzID0gUlJFRzMyKFJBREVPTl9HRU5fSU5UX1NUQVRVUyk7Ci0JdWludDMyX3QgaXJxX21hc2sgPSBSQURFT05fU1dfSU5UX1RFU1Q7CisJdWludDMyX3QgaXJxcyA9IFJSRUczMihSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUyk7CisJdWludDMyX3QgaXJxX21hc2sgPSB+Q18wMDAwNDRfU1dfSU5UOwogCi0JaWYgKGlycXMgJiBBVklWT19ESVNQTEFZX0lOVF9TVEFUVVMpIHsKLQkJKnI1MDBfZGlzcF9pbnQgPSBSUkVHMzIoQVZJVk9fRElTUF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJaWYgKCpyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDFfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9WQkxBTktfU1RBVFVTLCBBVklWT19WQkxBTktfQUNLKTsKKwlpZiAoR18wMDAwNDRfRElTUExBWV9JTlRfU1RBVChpcnFzKSkgeworCQkqcjUwMF9kaXNwX2ludCA9IFJSRUczMihSXzAwN0VEQ19ESVNQX0lOVEVSUlVQVF9TVEFUVVMpOworCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCgqcjUwMF9kaXNwX2ludCkpIHsKKwkJCVdSRUczMihSXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVRVUywKKwkJCQlTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSygxKSk7CiAJCX0KLQkJaWYgKCpyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDJfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJV1JFRzMyKEFWSVZPX0QyTU9ERV9WQkxBTktfU1RBVFVTLCBBVklWT19WQkxBTktfQUNLKTsKKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQoKnI1MDBfZGlzcF9pbnQpKSB7CisJCQlXUkVHMzIoUl8wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUVVMsCisJCQkJU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soMSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJKnI1MDBfZGlzcF9pbnQgPSAwOwogCX0KIAogCWlmIChpcnFzKSB7Ci0JCVdSRUczMihSQURFT05fR0VOX0lOVF9TVEFUVVMsIGlycXMpOworCQlXUkVHMzIoUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMsIGlycXMpOwogCX0KIAlyZXR1cm4gaXJxcyAmIGlycV9tYXNrOwogfQogCit2b2lkIHJzNjAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwlXUkVHMzIoUl8wMDAwNDBfR0VOX0lOVF9DTlRMLCAwKTsKKwlXUkVHMzIoUl8wMDY1NDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKKwkvKiBXYWl0IGFuZCBhY2tub3dsZWRnZSBpcnEgKi8KKwltZGVsYXkoMSk7CisJcnM2MDBfaXJxX2FjayhyZGV2LCAmdG1wKTsKK30KKwogaW50IHJzNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHN0YXR1czsKKwl1aW50MzJfdCBzdGF0dXMsIG1zaV9yZWFybTsKIAl1aW50MzJfdCByNTAwX2Rpc3BfaW50OwogCiAJc3RhdHVzID0gcnM2MDBfaXJxX2FjayhyZGV2LCAmcjUwMF9kaXNwX2ludCk7CkBAIC0zMTksODUgKzI1MSw2NSBAQAogCX0KIAl3aGlsZSAoc3RhdHVzIHx8IHI1MDBfZGlzcF9pbnQpIHsKIAkJLyogU1cgaW50ZXJydXB0ICovCi0JCWlmIChzdGF0dXMgJiBSQURFT05fU1dfSU5UX1RFU1QpIHsKKwkJaWYgKEdfMDAwMDQwX1NXX0lOVF9FTihzdGF0dXMpKQogCQkJcmFkZW9uX2ZlbmNlX3Byb2Nlc3MocmRldik7Ci0JCX0KIAkJLyogVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyAqLwotCQlpZiAocjUwMF9kaXNwX2ludCAmIEFWSVZPX0QxX1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJaWYgKEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpCiAJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKLQkJfQotCQlpZiAocjUwMF9kaXNwX2ludCAmIEFWSVZPX0QyX1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpCiAJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKLQkJfQogCQlzdGF0dXMgPSByczYwMF9pcnFfYWNrKHJkZXYsICZyNTAwX2Rpc3BfaW50KTsKIAl9CisJaWYgKHJkZXYtPm1zaV9lbmFibGVkKSB7CisJCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJCWNhc2UgQ0hJUF9SUzYwMDoKKwkJY2FzZSBDSElQX1JTNjkwOgorCQljYXNlIENISVBfUlM3NDA6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX0JVU19DTlRMKSAmIH5SUzYwMF9NU0lfUkVBUk07CisJCQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9CVVNfQ05UTCwgbXNpX3JlYXJtIHwgUlM2MDBfTVNJX1JFQVJNKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4pICYgflJWMzcwX01TSV9SRUFSTV9FTjsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSB8IFJWMzcwX01TSV9SRUFSTV9FTik7CisJCQlicmVhazsKKwkJfQorCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHUzMiByczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKQogewogCWlmIChjcnRjID09IDApCi0JCXJldHVybiBSUkVHMzIoQVZJVk9fRDFDUlRDX0ZSQU1FX0NPVU5UKTsKKwkJcmV0dXJuIFJSRUczMihSXzAwNjBBNF9EMUNSVENfU1RBVFVTX0ZSQU1FX0NPVU5UKTsKIAllbHNlCi0JCXJldHVybiBSUkVHMzIoQVZJVk9fRDJDUlRDX0ZSQU1FX0NPVU5UKTsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1bnNpZ25lZCB0bXA7Ci0KLQlXUkVHMzIoMHgzMzAsIDApOwotCVdSRUczMigweDMzOCwgMCk7Ci0JdG1wID0gUlJFRzMyKDB4MzAwKTsKLQl0bXAgJj0gfigzIDw8IDE2KTsKLQlXUkVHMzIoMHgzMDAsIHRtcCk7Ci0JV1JFRzMyKDB4MzA4LCAoMSA8PCA4KSk7Ci0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlXUkVHMzIoMHg1OTQsIDApOworCQlyZXR1cm4gUlJFRzMyKFJfMDA2OEE0X0QyQ1JUQ19TVEFUVVNfRlJBTUVfQ09VTlQpOwogfQogCiBpbnQgcnM2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwotCXVpbnQzMl90IHRtcDsKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewotCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfU1RBVFVTKTsKLQkJaWYgKHRtcCAmIFJTNjAwX01DX1NUQVRVU19JRExFKSB7CisJCWlmIChHXzAwMDAwMF9NQ19JRExFKFJSRUczMl9NQyhSXzAwMDAwMF9NQ19TVEFUVVMpKSkKIAkJCXJldHVybiAwOwotCQl9Ci0JCURSTV9VREVMQVkoMSk7CisJCXVkZWxheSgxKTsKIAl9CiAJcmV0dXJuIC0xOwogfQogCi12b2lkIHJzNjAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogdm9pZCByczYwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM2MDAgPyAqLwogCXIxMDBfaGRwX3Jlc2V0KHJkZXYpOwotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOwogCS8qIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3QgPyAqLwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9CisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyczYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNjAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogdG8gZG8gb3IgaXMgdGhlc2UgdmFsdWVzIHNhbmUgPyAqLwpAQCAtNDEwLDMxICszMjIsMjA4IEBACiAJLyogRklYTUU6IGltcGxlbWVudCwgc2hvdWxkIHRoaXMgYmUgbGlrZSByczY5MCA/ICovCiB9CiAKLQotLyoKLSAqIEluZGlyZWN0IHJlZ2lzdGVycyBhY2Nlc3NvcgotICovCiB1aW50MzJfdCByczYwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpCiB7Ci0JdWludDMyX3QgcjsKLQotCVdSRUczMihSUzYwMF9NQ19JTkRFWCwKLQkgICAgICAgKChyZWcgJiBSUzYwMF9NQ19BRERSX01BU0spIHwgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMCkpOwotCXIgPSBSUkVHMzIoUlM2MDBfTUNfREFUQSk7Ci0JcmV0dXJuIHI7CisJV1JFRzMyKFJfMDAwMDcwX01DX0lORF9JTkRFWCwgU18wMDAwNzBfTUNfSU5EX0FERFIocmVnKSB8CisJCVNfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoMSkpOworCXJldHVybiBSUkVHMzIoUl8wMDAwNzRfTUNfSU5EX0RBVEEpOwogfQogCiB2b2lkIHJzNjAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdikKIHsKLQlXUkVHMzIoUlM2MDBfTUNfSU5ERVgsCi0JCVJTNjAwX01DX0lORF9XUl9FTiB8IFJTNjAwX01DX0lORF9DSVRGX0FSQjAgfAotCQkoKHJlZykgJiBSUzYwMF9NQ19BRERSX01BU0spKTsKLQlXUkVHMzIoUlM2MDBfTUNfREFUQSwgdik7CisJV1JFRzMyKFJfMDAwMDcwX01DX0lORF9JTkRFWCwgU18wMDAwNzBfTUNfSU5EX0FERFIocmVnKSB8CisJCVNfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoMSkgfCBTXzAwMDA3MF9NQ19JTkRfV1JfRU4oMSkpOworCVdSRUczMihSXzAwMDA3NF9NQ19JTkRfREFUQSwgdik7Cit9CisKK3ZvaWQgcnM2MDBfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOworfQorCit2b2lkIHJzNjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHJzNjAwX3JlZ19zYWZlX2JtOworCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHJzNjAwX3JlZ19zYWZlX2JtKTsKK30KKworc3RhdGljIHZvaWQgcnM2MDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlydjUxNV9tY19zdG9wKHJkZXYsICZzYXZlKTsKKworCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBNQyBpZGxlIHRpbWVvdXQgYmVmb3JlIHVwZGF0aW5nIE1DLlxuIik7CisKKwkvKiBGSVhNRTogV2hhdCBkb2VzIEFHUCBtZWFucyBmb3Igc3VjaCBjaGlwc2V0ID8gKi8KKwlXUkVHMzJfTUMoUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OLCAweDBGRkZGRkZGKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDZfQUdQX0JBU0UsIDApOworCVdSRUczMl9NQyhSXzAwMDAwN19BR1BfQkFTRV8yLCAwKTsKKwkvKiBQcm9ncmFtIE1DICovCisJV1JFRzMyX01DKFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDRfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDRfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKworCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM2MDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNjAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcnM2MDBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlyID0gcnM2MDBfZ2FydF9lbmFibGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyczYwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByczYwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHJzNjAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByczYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcnM2MDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM2MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM2MDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM2MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKIH0KIAogaW50IHJzNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSByczYwMF9yZWdfc2FmZV9ibTsKLQlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyczYwMF9yZWdfc2FmZV9ibSk7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBCSU9TICovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJTNjAwIEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJzNjAwX3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJzNjAwX2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJzNjAwX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByczYwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJzNjAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJzNjAwX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzA4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwZC5oCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTNjAwRF9IX18KKyNkZWZpbmUgX19SUzYwMERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDA0MF9HRU5fSU5UX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MAorI2RlZmluZSAgIFNfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDBfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgwX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMF9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9DUlRDMl9WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDA0MF9DUlRDMl9WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9DUlRDMl9WU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAwNDBfU05BUFNIT1QyKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAwNDBfU05BUFNIT1QyKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfU05BUFNIT1QyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDAwMDQwX0NSVEMyX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVEMyX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVEMyX1ZCTEFOSyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDA0MF9GUDJfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwNDBfRlAyX0RFVEVDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0ZQMl9ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WU1lOQ19ESUZGX09WRVJfTElNSVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwNDBfVlNZTkNfRElGRl9PVkVSX0xJTUlUKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVCAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDFfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgxX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMV9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDJfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgyX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMl9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgzX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIM19JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9JMkNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDBfSTJDX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0kyQ19JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HVUlfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDBfR1VJX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dVSV9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WSVBIX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNDBfVklQSF9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZJUEhfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9TV19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDBfU1dfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1NXX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HRVlTRVJWSUxMRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDBfR0VZU0VSVklMTEUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dFWVNFUlZJTExFICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9IRENQX0FVVEhPUklaRURfSU5UKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwNDBfSERDUF9BVVRIT1JJWkVEX0lOVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0hEQ1BfQVVUSE9SSVpFRF9JTlQgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9EVklfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwNDBfRFZJX0kyQ19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RWSV9JMkNfSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HVUlETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDBfR1VJRE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dVSURNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WSURETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDBfVklERE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZJRERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDQKKyNkZWZpbmUgICBTXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwNDRfVkdBX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwNDRfVkdBX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfVkdBX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDBfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgwX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDFfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgxX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMV9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDJfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgyX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMl9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgzX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIM19JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9NQ19QUk9CRV9GQVVMVF9TVEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwNDRfTUNfUFJPQkVfRkFVTFRfU1RBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X01DX1BST0JFX0ZBVUxUX1NUQVQgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDRfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0kyQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TQ1JBVENIX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwNDRfU0NSQVRDSF9JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NDUkFUQ0hfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlfSURMRV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDRfR1VJX0lETEVfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSV9JRExFX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9BVElfT1ZFUkRSSVZFX0lOVF9TVEFUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwNDRfQVRJX09WRVJEUklWRV9JTlRfU1RBVCh4KSAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0FUSV9PVkVSRFJJVkVfSU5UX1NUQVQgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9NQ19QUk9URUNUSU9OX0ZBVUxUX1NUQVQoeCkgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwNDRfTUNfUFJPVEVDVElPTl9GQVVMVF9TVEFUKHgpICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X01DX1BST1RFQ1RJT05fRkFVTFRfU1RBVCAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9SQkJNX1JFQURfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwNDRfUkJCTV9SRUFEX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1JCQk1fUkVBRF9JTlRfU1RBVCAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9DQl9DT05URVhUX1NXSVRDSF9TVEFUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwNDRfQ0JfQ09OVEVYVF9TV0lUQ0hfU1RBVCh4KSAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NCX0NPTlRFWFRfU1dJVENIX1NUQVQgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSVBIX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNDRfVklQSF9JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJUEhfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9JRENUX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDRfSURDVF9JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0lEQ1RfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDRfR1VJRE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSURNQV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSURETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDRfVklERE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJRERNQV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNENfQlVTX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNEMKKyNkZWZpbmUgICBTXzAwMDA0Q19CVVNfTUFTVEVSX0RJUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNENfQlVTX01BU1RFUl9ESVMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDRDX0JVU19NQVNURVJfRElTICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0Q19CVVNfTVNJX1JFQVJNKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwNENfQlVTX01TSV9SRUFSTSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDRDX0JVU19NU0lfUkVBUk0gICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgUl8wMDAwNzBfTUNfSU5EX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzAKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA3MF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzAoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18wICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzEoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18xICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMih4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzIoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18yICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzMoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18zICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0FJQ19SQlMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9BSUNfUkJTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQUlDX1JCUyAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIwICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9DSVRGX0FSQjEoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIxICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfV1JfRU4gICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1JEX0lOVih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9SRF9JTlYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfUkRfSU5WICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDAwMDc0X01DX0lORF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDc0CisjZGVmaW5lICAgU18wMDAwNzRfTUNfSU5EX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDc0X01DX0lORF9EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDA3NF9NQ19JTkRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDYwQTRfRDFDUlRDX1NUQVRVU19GUkFNRV9DT1VOVCAgICAgICAgICAgMHgwMDYwQTQKKyNkZWZpbmUgICBTXzAwNjBBNF9EMUNSVENfRlJBTUVfQ09VTlQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MEE0X0QxQ1JUQ19GUkFNRV9DT1VOVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkYpCisjZGVmaW5lICAgQ18wMDYwQTRfRDFDUlRDX0ZSQU1FX0NPVU5UICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBSXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVRVUyAgICAgICAgICAgICAgICAweDAwNjUzNAorI2RlZmluZSAgIFNfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDY1MzRfRDFNT0RFX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVQgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDY1MzRfRDFNT0RFX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX0lOVEVSUlVQVCAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lIFJfMDA2NTQwX0R4TU9ERV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA2NTQwCisjZGVmaW5lICAgU18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyh4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDY1NDBfRDJNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDA2NTQwX0QyTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkxJTkVfSU5UX01BU0sgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDY1NDBfRDFNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDA2NTQwX0QxTU9ERV9WQkxBTktfQ1BfU0VMKHgpICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMU1PREVfVkJMQU5LX0NQX1NFTCAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDY1NDBfRDJNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDA2NTQwX0QyTU9ERV9WQkxBTktfQ1BfU0VMKHgpICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkJMQU5LX0NQX1NFTCAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDA2OEE0X0QyQ1JUQ19TVEFUVVNfRlJBTUVfQ09VTlQgICAgICAgICAgIDB4MDA2OEE0CisjZGVmaW5lICAgU18wMDY4QTRfRDJDUlRDX0ZSQU1FX0NPVU5UKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjhBNF9EMkNSVENfRlJBTUVfQ09VTlQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGKQorI2RlZmluZSAgIENfMDA2OEE0X0QyQ1JUQ19GUkFNRV9DT1VOVCAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgUl8wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUVVMgICAgICAgICAgICAgICAgMHgwMDZEMzQKKyNkZWZpbmUgICBTXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0sgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2RDM0X0QyTU9ERV9WQkxBTktfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDA2RDM0X0QyTU9ERV9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19JTlRFUlJVUFQgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSBSXzAwN0VEQ19ESVNQX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwN0VEQworI2RlZmluZSAgIFNfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUICAgICAgICAgICAgICAweEZGRkZGRkRGCisKKworLyogTUMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMDAwX01DX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwCisjZGVmaW5lICAgU18wMDAwMDBfTUNfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDBfTUNfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMDBfTUNfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSBSXzAwMDAwNF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA0X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA0X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA0X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwNV9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNV9NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNV9NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDA2X0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2CisjZGVmaW5lICAgU18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA2X0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNl9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMDA3X0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3CisjZGVmaW5lICAgU18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwMDdfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorI2RlZmluZSBSXzAwMDAwOV9NQ19DTlRMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOQorI2RlZmluZSAgIFNfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMDlfRU5BQkxFX1BBR0VfVEFCTEVTICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorLyogRklYTUUgZG9uJ3Qga25vdyB0aGUgdmFyaW91cyBmaWVsZCBzaXplIG5lZWQgZmVlZGJhY2sgZnJvbSBBTUQgKi8KKyNkZWZpbmUgUl8wMDAxMDBfTUNfUFQwX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAKKyNkZWZpbmUgICBTXzAwMDEwMF9FTkFCTEVfUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEwMF9FTkFCTEVfUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9FTkFCTEVfUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAxMDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDEwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSAgICAgICAgICAgICAweEZGRkM3RkZGCisjZGVmaW5lICAgU18wMDAxMDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMTAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSAgICAgICAgICAgICAweEZGMUZGRkZGCisjZGVmaW5lICAgU18wMDAxMDBfSU5WQUxJREFURV9BTExfTDFfVExCUyh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMoeCkgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwMTAwX0lOVkFMSURBVEVfTDJfQ0FDSEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lIFJfMDAwMTAyX01DX1BUMF9DT05URVhUMF9DTlRMICAgICAgICAgICAgICAgIDB4MDAwMTAyCisjZGVmaW5lICAgU18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEggICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjkKKyNkZWZpbmUgICBWXzAwMDEwMl9QQUdFX1RBQkxFX0ZMQVQgICAgICAgICAgICAgICAgICAgICAwCisvKiBSNjAwIGRvY3VtZW50YXRpb24gc3VnZ2VzdCB0aGF0IHRoaXMgc2hvdWxkIGJlIGEgbnVtYmVyIG9mIHBhZ2VzICovCisjZGVmaW5lIFJfMDAwMTEyX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAgIDB4MDAwMTEyCisjZGVmaW5lIFJfMDAwMTE0X01DX1BUMF9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSICAgIDB4MDAwMTE0CisjZGVmaW5lIFJfMDAwMTFDX01DX1BUMF9DT05URVhUMF9ERUZBVUxUX1JFQURfQUREUiAgIDB4MDAwMTFDCisjZGVmaW5lIFJfMDAwMTJDX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiAgICAgIDB4MDAwMTJDCisjZGVmaW5lIFJfMDAwMTNDX01DX1BUMF9DT05URVhUMF9GTEFUX1NUQVJUX0FERFIgICAgIDB4MDAwMTNDCisjZGVmaW5lIFJfMDAwMTRDX01DX1BUMF9DT05URVhUMF9GTEFUX0VORF9BRERSICAgICAgIDB4MDAwMTRDCisjZGVmaW5lIFJfMDAwMTZDX01DX1BUMF9DTElFTlQwX0NOVEwgICAgICAgICAgICAgICAgIDB4MDAwMTZDCisjZGVmaW5lICAgU18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyh4KSAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyh4KSAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAweEZGRkZGQ0ZGCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgMAorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgIDEKKyNkZWZpbmUgICBWXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAyCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgMworI2RlZmluZSAgIFNfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1MoeCkgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTKHgpICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUyAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9QQVNTVEhST1VHSCAgMAorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9ERUZBVUxUX1BBR0UgMQorI2RlZmluZSAgIFNfMDAwMTZDX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKHgpICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSh4KSAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAxNkNfRUZGRUNUSVZFX0wxX0NBQ0hFX1NJWkUgICAgICAgICAgICAgMHhGRkZGQzdGRgorI2RlZmluZSAgIFNfMDAwMTZDX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HKHgpICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORyh4KSAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMTZDX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSh4KSAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAxNkNfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUgICAgICAgICAgICAgMHhGRkZDN0ZGRgorI2RlZmluZSAgIFNfMDAwMTZDX0lOVkFMSURBVEVfTDFfVExCKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDE2Q19JTlZBTElEQVRFX0wxX1RMQih4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfSU5WQUxJREFURV9MMV9UTEIgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCAwZjU4NWNhLi4yNzU0NzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC0yNiwxMDYgKzI2LDI5IEBACiAgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCiAgKi8KICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotI2luY2x1ZGUgInJzNjkwci5oIgogI2luY2x1ZGUgImF0b20uaCIKLSNpbmNsdWRlICJhdG9tLWJpdHMuaCIKKyNpbmNsdWRlICJyczY5MGQuaCIKIAotLyogcnM2OTAscnM3NDAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMzAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM0MDBfZ2FydF9hZGp1c3Rfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2Rpc2FibGVfdmdhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0byA6Ci0gKiByczY5MCxyczc0MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcnM2OTBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0KLS8qCi0gKiBNQyBmdW5jdGlvbnMuCi0gKi8KLWludCByczY5MF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyczY5MF9ncHVfaW5pdChyZGV2KTsKLQlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiArPSAocmRldi0+bWMuZ3R0X3NpemUgLSAxKTsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gJj0gfihyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHJzNjkwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUlM2OTBfTUNfRkJfVE9QLCB0bXAgPj4gMTYpOwotCXRtcCB8PSBSRUdfU0VUKFJTNjkwX01DX0ZCX1NUQVJULCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlXUkVHMzJfTUMoUlM2OTBfTUNDRkdfRkJfTE9DQVRJT04sIHRtcCk7Ci0JLyogRklYTUU6IERvZXMgdGhpcyByZWcgZXhpc3Qgb24gUlM0ODAsUlM3NDAgPyAqLwotCVdSRUczMigweDMxMCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7Ci0JV1JFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTiwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcnM2OTBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKIAl1aW50MzJfdCB0bXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKIAkJLyogcmVhZCBNQ19TVEFUVVMgKi8KLQkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DX1NUQVRVUyk7Ci0JCWlmICh0bXAgJiBSUzY5MF9NQ19TVEFUVVNfSURMRSkgeworCQl0bXAgPSBSUkVHMzJfTUMoUl8wMDAwOTBfTUNfU1lTVEVNX1NUQVRVUyk7CisJCWlmIChHXzAwMDA5MF9NQ19TWVNURU1fSURMRSh0bXApKQogCQkJcmV0dXJuIDA7Ci0JCX0KLQkJRFJNX1VERUxBWSgxKTsKKwkJdWRlbGF5KDEpOwogCX0KIAlyZXR1cm4gLTE7CiB9CiAKLXZvaWQgcnM2OTBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCi12b2lkIHJzNjkwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcnM2OTBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJLyogRklYTUU6IEhEUCBzYW1lIHBsYWNlIG9uIHJzNjkwID8gKi8KIAlyMTAwX2hkcF9yZXNldChyZGV2KTsKLQlyczYwMF9kaXNhYmxlX3ZnYShyZGV2KTsKIAkvKiBGSVhNRTogaXMgdGhpcyBjb3JyZWN0ID8gKi8KIAlyNDIwX3BpcGVzX2luaXQocmRldik7CiAJaWYgKHJzNjkwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKQEAgLTEzNCwxMCArNTcsNiBAQAogCX0KIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNjkwX3BtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgSW50ZWdyYXRlZFN5c3RlbUluZm8pOwpAQCAtMjUxLDM5ICsxNzAsMzkgQEAKIAkvKgogCSAqIExpbmUgQnVmZmVyIFNldHVwCiAJICogVGhlcmUgaXMgYSBzaW5nbGUgbGluZSBidWZmZXIgc2hhcmVkIGJ5IGJvdGggZGlzcGxheSBjb250cm9sbGVycy4KLQkgKiBEQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgaG93IHRoYXQgbGluZSBidWZmZXIgaXMgc2hhcmVkIGJldHdlZW4KKwkgKiBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgaG93IHRoYXQgbGluZSBidWZmZXIgaXMgc2hhcmVkIGJldHdlZW4KIAkgKiB0aGUgZGlzcGxheSBjb250cm9sbGVycy4gIFRoZSBwYXJpdGlvbmluZyBjYW4gZWl0aGVyIGJlIGRvbmUKIAkgKiBtYW51YWxseSBvciB2aWEgb25lIG9mIGZvdXIgcHJlc2V0IGFsbG9jYXRpb25zIHNwZWNpZmllZCBpbiBiaXRzIDE6MDoKIAkgKiAgMCAtIGxpbmUgYnVmZmVyIGlzIGRpdmlkZWQgaW4gaGFsZiBhbmQgc2hhcmVkIGJldHdlZW4gY3J0YwogCSAqICAxIC0gRDEgZ2V0cyAzLzQgb2YgdGhlIGxpbmUgYnVmZmVyLCBEMiBnZXRzIDEvNAogCSAqICAyIC0gRDEgZ2V0cyB0aGUgd2hvbGUgYnVmZmVyCiAJICogIDMgLSBEMSBnZXRzIDEvNCBvZiB0aGUgbGluZSBidWZmZXIsIEQyIGdldHMgMy80Ci0JICogU2V0dGluZyBiaXQgMiBvZiBEQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgc3dpdGNoZXMgdG8gbWFudWFsCisJICogU2V0dGluZyBiaXQgMiBvZiBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgc3dpdGNoZXMgdG8gbWFudWFsCiAJICogYWxsb2NhdGlvbiBtb2RlLiBJbiBtYW51YWwgYWxsb2NhdGlvbiBtb2RlLCBEMSBhbHdheXMgc3RhcnRzIGF0IDAsCiAJICogRDEgZW5kLzIgaXMgc3BlY2lmaWVkIGluIGJpdHMgMTQ6NDsgRDIgYWxsb2NhdGlvbiBmb2xsb3dzIEQxLgogCSAqLwotCXRtcCA9IFJSRUczMihEQ19MQl9NRU1PUllfU1BMSVQpICYgfkRDX0xCX01FTU9SWV9TUExJVF9NQVNLOwotCXRtcCAmPSB+RENfTEJfTUVNT1JZX1NQTElUX1NISUZUX01PREU7CisJdG1wID0gUlJFRzMyKFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCkgJiBDXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQ7CisJdG1wICY9IH5DXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERTsKIAkvKiBhdXRvICovCiAJaWYgKG1vZGUxICYmIG1vZGUyKSB7CiAJCWlmIChtb2RlMS0+aGRpc3BsYXkgPiBtb2RlMi0+aGRpc3BsYXkpIHsKIAkJCWlmIChtb2RlMS0+aGRpc3BsYXkgPiAyNTYwKQotCQkJCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFfM1FfRDJfMVE7CisJCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV8zUV9EMl8xUTsKIAkJCWVsc2UKLQkJCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CisJCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOwogCQl9IGVsc2UgaWYgKG1vZGUyLT5oZGlzcGxheSA+IG1vZGUxLT5oZGlzcGxheSkgewogCQkJaWYgKG1vZGUyLT5oZGlzcGxheSA+IDI1NjApCi0JCQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMV8xUV9EMl8zUTsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROwogCQkJZWxzZQotCQkJCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRjsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CiAJCX0gZWxzZQotCQkJdG1wIHw9IEFWSVZPX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOworCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOwogCX0gZWxzZSBpZiAobW9kZTEpIHsKLQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMV9PTkxZOworCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxX09OTFk7CiAJfSBlbHNlIGlmIChtb2RlMikgewotCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROworCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROwogCX0KLQlXUkVHMzIoRENfTEJfTUVNT1JZX1NQTElULCB0bXApOworCVdSRUczMihSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQsIHRtcCk7CiB9CiAKIHN0cnVjdCByczY5MF93YXRlcm1hcmsgewpAQCAtNDg4LDI4ICs0MDcsMjggQEAKIAkgKiBvcHRpb24uCiAJICovCiAJaWYgKHJkZXYtPmRpc3BfcHJpb3JpdHkgPT0gMikgewotCQl0bXAgPSBSUkVHMzJfTUMoTUNfSU5JVF9NSVNDX0xBVF9USU1FUik7Ci0JCXRtcCAmPSB+TUNfRElTUDFSX0lOSVRfTEFUX01BU0s7Ci0JCXRtcCAmPSB+TUNfRElTUDBSX0lOSVRfTEFUX01BU0s7Ci0JCWlmIChtb2RlMSkKLQkJCXRtcCB8PSAoMSA8PCBNQ19ESVNQMVJfSU5JVF9MQVRfU0hJRlQpOworCQl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDRfTUNfSU5JVF9NSVNDX0xBVF9USU1FUik7CisJCXRtcCAmPSBDXzAwMDEwNF9NQ19ESVNQMFJfSU5JVF9MQVQ7CisJCXRtcCAmPSBDXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQ7CiAJCWlmIChtb2RlMCkKLQkJCXRtcCB8PSAoMSA8PCBNQ19ESVNQMFJfSU5JVF9MQVRfU0hJRlQpOwotCQlXUkVHMzJfTUMoTUNfSU5JVF9NSVNDX0xBVF9USU1FUiwgdG1wKTsKKwkJCXRtcCB8PSBTXzAwMDEwNF9NQ19ESVNQMFJfSU5JVF9MQVQoMSk7CisJCWlmIChtb2RlMSkKKwkJCXRtcCB8PSBTXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQoMSk7CisJCVdSRUczMl9NQyhSXzAwMDEwNF9NQ19JTklUX01JU0NfTEFUX1RJTUVSLCB0bXApOwogCX0KIAlyczY5MF9saW5lX2J1ZmZlcl9hZGp1c3QocmRldiwgbW9kZTAsIG1vZGUxKTsKIAogCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTApIHx8IChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MCkpCi0JCVdSRUczMihEQ1BfQ09OVFJPTCwgMCk7CisJCVdSRUczMihSXzAwNkM5Q19EQ1BfQ09OVFJPTCwgMCk7CiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSkKLQkJV1JFRzMyKERDUF9DT05UUk9MLCAyKTsKKwkJV1JFRzMyKFJfMDA2QzlDX0RDUF9DT05UUk9MLCAyKTsKIAogCXJzNjkwX2NydGNfYmFuZHdpZHRoX2NvbXB1dGUocmRldiwgcmRldi0+bW9kZV9pbmZvLmNydGNzWzBdLCAmd20wKTsKIAlyczY5MF9jcnRjX2JhbmR3aWR0aF9jb21wdXRlKHJkZXYsIHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXSwgJndtMSk7CiAKIAl0bXAgPSAod20wLmxiX3JlcXVlc3RfZmlmb19kZXB0aCAtIDEpOwogCXRtcCB8PSAod20xLmxiX3JlcXVlc3RfZmlmb19kZXB0aCAtIDEpIDw8IDE2OwotCVdSRUczMihMQl9NQVhfUkVRX09VVFNUQU5ESU5HLCB0bXApOworCVdSRUczMihSXzAwNkQ1OF9MQl9NQVhfUkVRX09VVFNUQU5ESU5HLCB0bXApOwogCiAJaWYgKG1vZGUwICYmIG1vZGUxKSB7CiAJCWlmIChyZml4ZWRfdHJ1bmMod20wLmRicHApID4gNjQpCkBAIC01NjIsMTAgKzQ4MSwxMCBAQAogCQkJcHJpb3JpdHlfbWFyazEyLmZ1bGwgPSAwOwogCQlpZiAod20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGwgPiBwcmlvcml0eV9tYXJrMTIuZnVsbCkKIAkJCXByaW9yaXR5X21hcmsxMi5mdWxsID0gd20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGw7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKKwkJV1JFRzMyKFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOworCQlXUkVHMzIoUl8wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7CisJCVdSRUczMihSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKKwkJV1JFRzMyKFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOwogCX0gZWxzZSBpZiAobW9kZTApIHsKIAkJaWYgKHJmaXhlZF90cnVuYyh3bTAuZGJwcCkgPiA2NCkKIAkJCWEuZnVsbCA9IHJmaXhlZF9tdWwod20wLmRicHAsIHdtMC5udW1fbGluZV9wYWlyKTsKQEAgLTU5MiwxMCArNTExLDEyIEBACiAJCQlwcmlvcml0eV9tYXJrMDIuZnVsbCA9IDA7CiAJCWlmICh3bTAucHJpb3JpdHlfbWFya19tYXguZnVsbCA+IHByaW9yaXR5X21hcmswMi5mdWxsKQogCQkJcHJpb3JpdHlfbWFyazAyLmZ1bGwgPSB3bTAucHJpb3JpdHlfbWFya19tYXguZnVsbDsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQV9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9CX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOworCQlXUkVHMzIoUl8wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7CisJCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKKwkJV1JFRzMyKFJfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0NOVCwKKwkJCVNfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX09GRigxKSk7CisJCVdSRUczMihSXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9DTlQsCisJCQlTXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9PRkYoMSkpOwogCX0gZWxzZSB7CiAJCWlmIChyZml4ZWRfdHJ1bmMod20xLmRicHApID4gNjQpCiAJCQlhLmZ1bGwgPSByZml4ZWRfbXVsKHdtMS5kYnBwLCB3bTEubnVtX2xpbmVfcGFpcik7CkBAIC02MjIsMzAgKzU0MywyMDUgQEAKIAkJCXByaW9yaXR5X21hcmsxMi5mdWxsID0gMDsKIAkJaWYgKHdtMS5wcmlvcml0eV9tYXJrX21heC5mdWxsID4gcHJpb3JpdHlfbWFyazEyLmZ1bGwpCiAJCQlwcmlvcml0eV9tYXJrMTIuZnVsbCA9IHdtMS5wcmlvcml0eV9tYXJrX21heC5mdWxsOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCBNT0RFX1BSSU9SSVRZX09GRik7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQl9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CisJCVdSRUczMihSXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9DTlQsCisJCQlTXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9PRkYoMSkpOworCQlXUkVHMzIoUl8wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQ05ULAorCQkJU18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfT0ZGKDEpKTsKKwkJV1JFRzMyKFJfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOworCQlXUkVHMzIoUl8wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CiAJfQogfQogCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJzNjkwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwogCi0JV1JFRzMyKFJTNjkwX01DX0lOREVYLCAocmVnICYgUlM2OTBfTUNfSU5ERVhfTUFTSykpOwotCXIgPSBSUkVHMzIoUlM2OTBfTUNfREFUQSk7Ci0JV1JFRzMyKFJTNjkwX01DX0lOREVYLCBSUzY5MF9NQ19JTkRFWF9NQVNLKTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIFNfMDAwMDc4X01DX0lORF9BRERSKHJlZykpOworCXIgPSBSUkVHMzIoUl8wMDAwN0NfTUNfREFUQSk7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCB+Q18wMDAwNzhfTUNfSU5EX0FERFIpOwogCXJldHVybiByOwogfQogCiB2b2lkIHJzNjkwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdikKIHsKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsCi0JICAgICAgIFJTNjkwX01DX0lOREVYX1dSX0VOIHwgKChyZWcpICYgUlM2OTBfTUNfSU5ERVhfTUFTSykpOwotCVdSRUczMihSUzY5MF9NQ19EQVRBLCB2KTsKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0FDSyk7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCBTXzAwMDA3OF9NQ19JTkRfQUREUihyZWcpIHwKKwkJU18wMDAwNzhfTUNfSU5EX1dSX0VOKDEpKTsKKwlXUkVHMzIoUl8wMDAwN0NfTUNfREFUQSwgdik7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCAweDdGKTsKK30KKwordm9pZCByczY5MF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyczY5MF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMTAwX01DQ0ZHX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAxMDBfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAxMDBfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKworCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM2OTBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNjkwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcnM2OTBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlyID0gcnM0MDBfZ2FydF9lbmFibGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyczYwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByczY5MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHJzNjkwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByczY5MF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcnM2MDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNjkwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM2OTBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM0MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHJzNjkwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0gZWxzZSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiRXhwZWN0aW5nIGF0b21iaW9zIGZvciBSVjUxNSBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCX0KKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKKwkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KKwlyczY5MF92cmFtX2luZm8ocmRldik7CisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KKwlyID0gcjQyMF9tY19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9kZWJ1Z2ZzKHJkZXYpOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByczQwMF9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJzNjAwX3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcnM2OTBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyczY5MF9zdXNwZW5kKHJkZXYpOworCQlyMTAwX2NwX2ZpbmkocmRldik7CisJCXIxMDBfd2JfZmluaShyZGV2KTsKKwkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlyczQwMF9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQzMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MGQuaApAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SUzY5MERfSF9fCisjZGVmaW5lIF9fUlM2OTBEX0hfXworCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAwNzhfTUNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzgKKyNkZWZpbmUgICBTXzAwMDA3OF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDc4X01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxRkYpCisjZGVmaW5lICAgQ18wMDAwNzhfTUNfSU5EX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkUwMAorI2RlZmluZSAgIFNfMDAwMDc4X01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDc4X01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDc4X01DX0lORF9XUl9FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgUl8wMDAwN0NfTUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN0MKKyNkZWZpbmUgICBTXzAwMDA3Q19NQ19EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwN0NfTUNfREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDdDX01DX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAwRjhfQ09ORklHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjgKKyNkZWZpbmUgICBTXzAwMDBGOF9DT05GSUdfTUVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMzQKKyNkZWZpbmUgICBTXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDEzNF9IRFBfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgICAgICAgICAgICAgICAgICAweDAwNjUyMAorI2RlZmluZSAgIFNfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgzKQorI2RlZmluZSAgIENfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkMKKyNkZWZpbmUgICBTXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSh4KSAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEYgICAgMAorI2RlZmluZSAgIFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV8zUV9EMl8xUSAgICAgIDEKKyNkZWZpbmUgICBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWSAgICAgICAgICAyCisjZGVmaW5lICAgVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNRICAgICAgMworI2RlZmluZSAgIFNfMDA2NTIwX0RDX0xCX0RJU1AxX0VORF9BRFIoeCkgICAgICAgICAgICAgICgoKHgpICYgMHg3RkYpIDw8IDQpCisjZGVmaW5lICAgR18wMDY1MjBfRENfTEJfRElTUDFfRU5EX0FEUih4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDdGRikKKyNkZWZpbmUgICBDXzAwNjUyMF9EQ19MQl9ESVNQMV9FTkRfQURSICAgICAgICAgICAgICAgICAweEZGRkY4MDBGCisjZGVmaW5lIFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCAgICAgICAgICAgICAgIDB4MDA2NTQ4CisjZGVmaW5lICAgU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSh4KSAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSh4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSAgIFNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX09GRih4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9PRkYoeCkgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfT0ZGICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0soeCkgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQgICAgICAgICAgICAgICAweDAwNjU0QworI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IoeCkgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9PRkYoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX09GRiAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04oeCkgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTiAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0sgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDZDOUNfRENQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDZDOUMKKyNkZWZpbmUgUl8wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQ05UICAgICAgICAgICAgICAgMHgwMDZENDgKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX09GRih4KSAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9PRkYgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0FMV0FZU19PTih4KSAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9BTFdBWVNfT04gICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0soeCkgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCAgICAgICAgICAgICAgIDB4MDA2RDRDCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQiAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX09GRih4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9PRkYoeCkgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfT0ZGICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTih4KSAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04oeCkgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0soeCkgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNkQ1OF9MQl9NQVhfUkVRX09VVFNUQU5ESU5HICAgICAgICAgICAgICAweDAwNkQ1OAorI2RlZmluZSAgIFNfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcoeCkgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcoeCkgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcgICAgICAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUgICBTXzAwNkQ1OF9MQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HKHgpICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMDZENThfTEJfRDJfTUFYX1JFUV9PVVRTVEFORElORyh4KSAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDA2RDU4X0xCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkcgICAgICAgICAgIDB4RkZGMEZGRkYKKworCisjZGVmaW5lIFJfMDAwMDkwX01DX1NZU1RFTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDkwCisjZGVmaW5lICAgU18wMDAwOTBfTUNfU1lTVEVNX0lETEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwOTBfTUNfU1lTVEVNX0lETEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwOTBfTUNfU1lTVEVNX0lETEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDAwOTBfTUNfU0VMRUNUX1BNKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwOTBfTUNfU0VMRUNUX1BNKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwOTBfTUNfU0VMRUNUX1BNICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDkwX1JFU0VSVkVENCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDkwX1JFU0VSVkVENCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMDkwX1JFU0VSVkVENCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGMEYKKyNkZWZpbmUgICBTXzAwMDA5MF9SRVNFUlZFRDgoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDA5MF9SRVNFUlZFRDgoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDA5MF9SRVNFUlZFRDggICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGMEZGCisjZGVmaW5lICAgU18wMDAwOTBfUkVTRVJWRUQxMih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDkwX1JFU0VSVkVEMTIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDA5MF9SRVNFUlZFRDEyICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0lOSVRfRVhFQ1VURUQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9JTklUX0VYRUNVVEVEKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfSU5JVF9FWEVDVVRFRCAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX1NFUV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9TRVFfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfU0VRX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0FSQl9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9BUkJfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfQVJCX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfUkVTRVJWRUQyMCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRikgPDwgMjApCisjZGVmaW5lICAgR18wMDAwOTBfUkVTRVJWRUQyMCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGRkYpCisjZGVmaW5lICAgQ18wMDAwOTBfUkVTRVJWRUQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGRkZGRgorI2RlZmluZSBSXzAwMDEwMF9NQ0NGR19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAweDAwMDEwMAorI2RlZmluZSAgIFNfMDAwMTAwX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTAwX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTAwX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDEwMF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxMDBfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTAwX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxMDRfTUNfSU5JVF9NSVNDX0xBVF9USU1FUiAgICAgICAgICAgICAgMHgwMDAxMDQKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lICAgU18wMDAxMDRfTUNfVkZfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfVkZfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfVkZfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRElTUDFSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19GSVhFRF9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRklYRURfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0ZJWEVEX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgIDB4RkZGMEZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19FMlJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjApCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRTJSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0UyUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgICAgIDB4RkYwRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9TQU1FX1BBR0VfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjQpCisjZGVmaW5lICAgR18wMDAxMDRfU0FNRV9QQUdFX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X1NBTUVfUEFHRV9QUklPICAgICAgICAgICAgICAgICAgICAgIDB4RjBGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19HTE9CV19JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjgpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfR0xPQldfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0dMT0JXX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwci5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBkOWZhYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgotICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBEYXZlIEFpcmxpZQotICogICAgICAgICAgQWxleCBEZXVjaGVyCi0gKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCi0gKi8KLSNpZm5kZWYgUlM2OTBSX0gKLSNkZWZpbmUgUlM2OTBSX0gKLQotLyogUlM2OTAvUlM3NDAgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1DX0lOREVYCQkJMHgwMDc4Ci0jCWRlZmluZSBNQ19JTkRFWF9NQVNLCQkJMHgxRkYKLSMJZGVmaW5lIE1DX0lOREVYX1dSX0VOCQkJKDEgPDwgOSkKLSMJZGVmaW5lIE1DX0lOREVYX1dSX0FDSwkJCTB4N0YKLSNkZWZpbmUgTUNfREFUQQkJCQkweDAwN0MKLSNkZWZpbmUgSERQX0ZCX0xPQ0FUSU9OCQkJMHgwMTM0Ci0jZGVmaW5lIERDX0xCX01FTU9SWV9TUExJVAkJMHg2NTIwCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfTUFTSwkJCTB4MDAwMDAwMDMKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9TSElGVAkJMAotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEYJMAotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxXzNRX0QyXzFRCQkxCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWQkJMgotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNRCQkzCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfU0hJRlRfTU9ERQkJKDEgPDwgMikKLSNkZWZpbmUJCURDX0xCX0RJU1AxX0VORF9BRFJfU0hJRlQJCTQKLSNkZWZpbmUJCURDX0xCX0RJU1AxX0VORF9BRFJfTUFTSwkJMHgwMDAwN0ZGMAotI2RlZmluZSBEMU1PREVfUFJJT1JJVFlfQV9DTlQJCTB4NjU0OAotI2RlZmluZQkJTU9ERV9QUklPUklUWV9NQVJLX01BU0sJCQkweDAwMDA3RkZGCi0jZGVmaW5lCQlNT0RFX1BSSU9SSVRZX09GRgkJCSgxIDw8IDE2KQotI2RlZmluZQkJTU9ERV9QUklPUklUWV9BTFdBWVNfT04JCQkoMSA8PCAyMCkKLSNkZWZpbmUJCU1PREVfUFJJT1JJVFlfRk9SQ0VfTUFTSwkJKDEgPDwgMjQpCi0jZGVmaW5lIEQxTU9ERV9QUklPUklUWV9CX0NOVAkJMHg2NTRDCi0jZGVmaW5lIExCX01BWF9SRVFfT1VUU1RBTkRJTkcJCTB4NkQ1OAotI2RlZmluZQkJTEJfRDFfTUFYX1JFUV9PVVRTVEFORElOR19NQVNLCQkweDAwMDAwMDBGCi0jZGVmaW5lCQlMQl9EMV9NQVhfUkVRX09VVFNUQU5ESU5HX1NISUZUCQkwCi0jZGVmaW5lCQlMQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HX01BU0sJCTB4MDAwRjAwMDAKLSNkZWZpbmUJCUxCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkdfU0hJRlQJCTE2Ci0jZGVmaW5lIERDUF9DT05UUk9MCQkJMHg2QzlDCi0jZGVmaW5lIEQyTU9ERV9QUklPUklUWV9BX0NOVAkJMHg2RDQ4Ci0jZGVmaW5lIEQyTU9ERV9QUklPUklUWV9CX0NOVAkJMHg2RDRDCi0KLS8qIE1DIGluZGlyZWN0IHJlZ2lzdGVycyAqLwotI2RlZmluZSBNQ19TVEFUVVNfSURMRQkJCQkoMSA8PCAwKQotI2RlZmluZSBNQ19NSVNDX0NOVEwJCQkweDE4Ci0jZGVmaW5lCQlESVNBQkxFX0dUVwkJCSgxIDw8IDEpCi0jZGVmaW5lCQlHQVJUX0lOREVYX1JFR19FTgkJKDEgPDwgMTIpCi0jZGVmaW5lCQlCTE9DS19HRlhfRDNfRU4JCQkoMSA8PCAxNCkKLSNkZWZpbmUgR0FSVF9GRUFUVVJFX0lECQkJMHgyQgotI2RlZmluZQkJSEFOR19FTgkJCQkoMSA8PCAxMSkKLSNkZWZpbmUJCVRMQl9FTkFCTEUJCQkoMSA8PCAxOCkKLSNkZWZpbmUJCVAyUF9FTkFCTEUJCQkoMSA8PCAxOSkKLSNkZWZpbmUJCUdUV19MQUNfRU4JCQkoMSA8PCAyNSkKLSNkZWZpbmUJCUxFVkVMMl9HQVJUCQkJKDAgPDwgMzApCi0jZGVmaW5lCQlMRVZFTDFfR0FSVAkJCSgxIDw8IDMwKQotI2RlZmluZQkJUERDX0VOCQkJCSgxIDw8IDMxKQotI2RlZmluZSBHQVJUX0JBU0UJCQkweDJDCi0jZGVmaW5lIEdBUlRfQ0FDSEVfQ05UUkwJCTB4MkUKLSMJZGVmaW5lIEdBUlRfQ0FDSEVfSU5WQUxJREFURQkJKDEgPDwgMCkKLSNkZWZpbmUgTUNfU1RBVFVTCQkJMHg5MAotI2RlZmluZSBNQ0NGR19GQl9MT0NBVElPTgkJMHgxMDAKLSNkZWZpbmUJCU1DX0ZCX1NUQVJUX01BU0sJCTB4MDAwMEZGRkYKLSNkZWZpbmUJCU1DX0ZCX1NUQVJUX1NISUZUCQkwCi0jZGVmaW5lCQlNQ19GQl9UT1BfTUFTSwkJCTB4RkZGRjAwMDAKLSNkZWZpbmUJCU1DX0ZCX1RPUF9TSElGVAkJCTE2Ci0jZGVmaW5lIE1DQ0ZHX0FHUF9MT0NBVElPTgkJMHgxMDEKLSNkZWZpbmUJCU1DX0FHUF9TVEFSVF9NQVNLCQkweDAwMDBGRkZGCi0jZGVmaW5lCQlNQ19BR1BfU1RBUlRfU0hJRlQJCTAKLSNkZWZpbmUJCU1DX0FHUF9UT1BfTUFTSwkJCTB4RkZGRjAwMDAKLSNkZWZpbmUJCU1DX0FHUF9UT1BfU0hJRlQJCTE2Ci0jZGVmaW5lIE1DQ0ZHX0FHUF9CQVNFCQkJMHgxMDIKLSNkZWZpbmUgTUNDRkdfQUdQX0JBU0VfMgkJMHgxMDMKLSNkZWZpbmUgTUNfSU5JVF9NSVNDX0xBVF9USU1FUgkJMHgxMDQKLSNkZWZpbmUJCU1DX0RJU1AwUl9JTklUX0xBVF9TSElGVAk4Ci0jZGVmaW5lCQlNQ19ESVNQMFJfSU5JVF9MQVRfTUFTSwkJMHgwMDAwMEYwMAotI2RlZmluZQkJTUNfRElTUDFSX0lOSVRfTEFUX1NISUZUCTEyCi0jZGVmaW5lCQlNQ19ESVNQMVJfSU5JVF9MQVRfTUFTSwkJMHgwMDAwRjAwMAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjM5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjAwZC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlYyMDBEX0hfXworI2RlZmluZSBfX1JWMjAwRF9IX18KKworI2RlZmluZSBSXzAwMDE1Q19BR1BfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE1QworI2RlZmluZSAgIFNfMDAwMTVDX0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTVDX0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTVDX0FHUF9CQVNFX0FERFJfMiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjUwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjI1MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWE3MGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjI1MGQuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SVjI1MERfSF9fCisjZGVmaW5lIF9fUlYyNTBEX0hfXworCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTF9NNiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RETSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RWX1NDTEsgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVQlBJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX09WMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MzUwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjM1MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzVjNWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjM1MGQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JWMzUwRF9IX18KKyNkZWZpbmUgX19SVjM1MERfSF9fCisKKy8qIFJWMzUwLCBSVjM4MCByZWdpc3RlcnMgKi8KKy8qICNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQgKi8KKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZBUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggZmQ3OTk3NC4uNzkzNWY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtMjksMzcgKzI5LDE3IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJ2NTE1ZC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotCisjaW5jbHVkZSAiYXRvbS5oIgogI2luY2x1ZGUgInJ2NTE1X3JlZ19zYWZlLmgiCi0vKiBydjUxNSBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiBydjUxNQotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHJ2NTE1ICovCiBpbnQgcnY1MTVfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X2RlYnVnZnNfZ2FfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnY1MTVfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0KLS8qCi0gKiBNQwotICovCi1pbnQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcnY1MTVfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1aW50MzJfdCB0bXA7Ci0JaW50IHI7Ci0KIAlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7CiAJfQpAQCAtNjksNjcgKzQ5LDggQEAKIAlpZiAocnY1MTVfZGVidWdmc19nYV9pbmZvX2luaXQocmRldikpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBwaXBlcyAhXG4iKTsKIAl9Ci0KLQlydjUxNV9ncHVfaW5pdChyZGV2KTsKLQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBEaXNhYmxpbmcgQUdQXG4iKTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKLQkJfQotCX0KLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnY1MTVfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCXRtcCA9IFJFR19TRVQoTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDEzNCwgdG1wKTsKLQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKE1DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChNQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyX01DKE1DX0ZCX0xPQ0FUSU9OLCB0bXApOwotCVdSRUczMihIRFBfRkJfTE9DQVRJT04sIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDMxMCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoTUNfQUdQX1RPUCwgdG1wID4+IDE2KTsKLQkJdG1wIHw9IFJFR19TRVQoTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMTYpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlKTsKLQkJV1JFRzMyX01DKE1DX0FHUF9CQVNFXzIsIDApOwotCX0gZWxzZSB7Ci0JCVdSRUczMl9NQyhNQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0UsIDApOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfQotCXJldHVybiAwOwogfQogCi12b2lkIHJ2NTE1X21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KIHZvaWQgcnY1MTVfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKQEAgLTE5OCwxMSArMTE5LDYgQEAKIAlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwogfQogCi12b2lkIHJ2NTE1X2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogaW50IHJ2NTE1X21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTIxOSw2ICsxMzUsMTQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3ZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwKKwkJUlJFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCkgJiBDXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKTsKK30KKwogdm9pZCBydjUxNV9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBwaXBlX3NlbGVjdF9jdXJyZW50LCBnYl9waXBlX3NlbGVjdCwgdG1wOwpAQCAtMjMxLDcgKzE1NSw3IEBACiAJCSAgICAgICAicmVzZXRpbmcgR1BVLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIAogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKIAlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwpAQCAtMzM1LDEwICsyNTksNiBAQAogCXJldHVybiAwOwogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8KLSAqLwogc3RhdGljIHZvaWQgcnY1MTVfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0bXA7CkBAIC0zNzQsMTAgKzI5NCw2IEBACiAJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKIH0KIAotCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJ2NTE1X21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwpAQCAtMzk1LDkgKzMxMSw2IEBACiAJV1JFRzMyKE1DX0lORF9JTkRFWCwgMCk7CiB9CiAKLS8qCi0gKiBEZWJ1Z2ZzIGluZm8KLSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCBydjUxNV9kZWJ1Z2ZzX3BpcGVzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNDU5LDEzICszNzIsMjU5IEBACiAjZW5kaWYKIH0KIAotLyoKLSAqIEFzaWMgaW5pdGlhbGl6YXRpb24KLSAqLwotaW50IHJ2NTE1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NTE1X21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKQoreworCXNhdmUtPmQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCk7CisJc2F2ZS0+ZDJ2Z2FfY29udHJvbCA9IFJSRUczMihSXzAwMDMzOF9EMlZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMDBfVkdBX1JFTkRFUl9DT05UUk9MKTsKKwlzYXZlLT52Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMjhfVkdBX0hEUF9DT05UUk9MKTsKKwlzYXZlLT5kMWNydGNfY29udHJvbCA9IFJSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCk7CisJc2F2ZS0+ZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wpOworCisJLyogU3RvcCBhbGwgdmlkZW8gKi8KKwlXUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2MDgwX0QxQ1JUQ19DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wsIDApOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworfQorCit2b2lkIHJ2NTE1X21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJ2NTE1X21jX3NhdmUgKnNhdmUpCit7CisJV1JFRzMyKFJfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKFJfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCisJV1JFRzMyKFJfMDAwMzI4X1ZHQV9IRFBfQ09OVFJPTCwgc2F2ZS0+dmdhX2hkcF9jb250cm9sKTsKKwltZGVsYXkoMSk7CisJLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCwgc2F2ZS0+ZDFjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjg4MF9EMkNSVENfQ09OVFJPTCwgc2F2ZS0+ZDJjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCBzYXZlLT5kMXZnYV9jb250cm9sKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgc2F2ZS0+ZDJ2Z2FfY29udHJvbCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgc2F2ZS0+dmdhX3JlbmRlcl9jb250cm9sKTsKK30KKwordm9pZCBydjUxNV9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChydjUxNV9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KKwlXUkVHMzIoUl8wMDAwRjhfQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMDAxX01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDFfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDFfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMl9NQyhSXzAwMDAwMl9NQ19BR1BfTE9DQVRJT04sCisJCQlTXzAwMDAwMl9NQ19BR1BfU1RBUlQocmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwMl9NQ19BR1BfVE9QKHJkZXYtPm1jLmd0dF9lbmQgPj4gMTYpKTsKKwkJV1JFRzMyX01DKFJfMDAwMDAzX01DX0FHUF9CQVNFLCBsb3dlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLAorCQkJU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHVwcGVyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKSk7CisJfSBlbHNlIHsKKwkJV1JFRzMyX01DKFJfMDAwMDAyX01DX0FHUF9MT0NBVElPTiwgMHhGRkZGRkZGRik7CisJCVdSRUczMl9NQyhSXzAwMDAwM19NQ19BR1BfQkFTRSwgMCk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLCAwKTsKKwl9CisKKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIDEpOworCS8qIFdlIG5lZWQgdG8gZm9yY2Ugb24gc29tZSBvZiB0aGUgYmxvY2sgKi8KKwlXUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMKSB8IFNfMDAwMDBGX0NQX0ZPUkNFT04oMSkpOworCVdSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwsCisJCVJSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwpIHwgU18wMDAwMTFfRTJfRk9SQ0VPTigxKSk7CisJV1JFRzMyX1BMTChSXzAwMDAxM19JRENUX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwpIHwgU18wMDAwMTNfSURDVF9GT1JDRU9OKDEpKTsKK30KKworc3RhdGljIGludCBydjUxNV9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnY1MTVfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlydjUxNV9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcnM2MDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJLyogUmVzdW1lIGNsb2NrIGFmdGVyIHBvc3RpbmcgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiBydjUxNV9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnY1MTVfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXJzNjAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSBydjUxNV9yZWdfc2FmZV9ibTsKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShydjUxNV9yZWdfc2FmZV9ibSk7Cit9CisKK3ZvaWQgcnY1MTVfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlydjUxNV9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKyAgICBydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJ2NTE1X3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHJ2NTE1X3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcnY1MTVfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTVkLmgKaW5kZXggYTY1ZTE3ZS4uZmMyMTZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ZC5oCkBAIC0yMTYsNSArMjE2LDM4OCBAQAogI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9PTkVfUkVHX1dSKGgpICgoKGgpID4+IDE1KSAmIDEpCiAjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCiAKLSNlbmRpZgorLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4CisjZGVmaW5lICAgU18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDMwMF9WR0FfUkVOREVSX0NPTlRST0wgICAgICAgICAgICAgICAgICAweDAwMDMwMAorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9CTElOS19SQVRFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfQkxJTktfUkFURSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MUYpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0JMSU5LX1JBVEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFMAorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9CTElOS19NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwMzAwX1ZHQV9CTElOS19NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMzAwX1ZHQV9CTElOS19NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGOUYKKyNkZWZpbmUgICBTXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCh4KSAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUoeCkgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUoeCkgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9WU1RBVFVTX0NOVEwoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX1ZTVEFUVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgMHhGRkZDRkZGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9MT0NLXzhET1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfTE9DS184RE9UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0xPQ0tfOERPVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQVJFR19MSU5FQ01QX0NPTVBBVElCSUxJVFlfU0VMKHgpICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FSRUdfTElORUNNUF9DT01QQVRJQklMSVRZX1NFTCh4KSAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBUkVHX0xJTkVDTVBfQ09NUEFUSUJJTElUWV9TRUwgICAgMHhGREZGRkZGRgorI2RlZmluZSBSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAweDAwMDMxMAorI2RlZmluZSAgIFNfMDAwMzEwX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTKHgpICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUyh4KSAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAzMTBfVkdBX01FTU9SWV9CQVNFX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDMyOF9WR0FfSERQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDAwMDMyOAorI2RlZmluZSAgIFNfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4oeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4oeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4gICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUoeCkgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDAzMjhfVkdBX1NPRlRfUkVTRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9TT0ZUX1JFU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMjhfVkdBX1RFU1RfUkVTRVRfQ09OVFJPTCh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9URVNUX1JFU0VUX0NPTlRST0woeCkgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfVEVTVF9SRVNFVF9DT05UUk9MICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDAwMzMwX0QxVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzMwCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVCh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QoeCkgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9PVkVSU0NBTl9USU1JTkdfU0VMRUNUICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfT1ZFUlNDQU5fQ09MT1JfRU4oeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX09WRVJTQ0FOX0NPTE9SX0VOKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9PVkVSU0NBTl9DT0xPUl9FTiAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfUk9UQVRFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX1JPVEFURSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweEZDRkZGRkZGCisjZGVmaW5lIFJfMDAwMzM4X0QyVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzM4CisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVCh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QoeCkgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9PVkVSU0NBTl9USU1JTkdfU0VMRUNUICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfT1ZFUlNDQU5fQ09MT1JfRU4oeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX09WRVJTQ0FOX0NPTE9SX0VOKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9PVkVSU0NBTl9DT0xPUl9FTiAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfUk9UQVRFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX1JPVEFURSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweEZDRkZGRkZGCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCQk1fSElCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQkJNX0hJQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkJCTV9ISUJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1NLSURfQ0ZCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9TS0lEX0NGQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfU0tJRF9DRkJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9WRl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfVkZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX1ZGX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweDAwNjA4MAorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwoeCkgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCh4KSAgICAgICAgKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lICAgR18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCh4KSAgICAgICAgKCgoeCkgPj4gOCkgJiAweDMpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCAgICAgICAgICAgMHhGRkZGRkNGRgorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19DVVJSRU5UX01BU1RFUl9FTl9TVEFURSh4KSAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfQ1VSUkVOVF9NQVNURVJfRU5fU1RBVEUoeCkgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0NVUlJFTlRfTUFTVEVSX0VOX1NUQVRFICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFKHgpICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfRElTUF9SRUFEX1JFUVVFU1RfRElTQUJMRSh4KSAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0RJU1BfUkVBRF9SRVFVRVNUX0RJU0FCTEUgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAweDAwNjBFOAorI2RlZmluZSAgIFNfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgUl8wMDYxMTBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICAgICAgMHgwMDYxMTAKKyNkZWZpbmUgICBTXzAwNjExMF9EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MoeCkgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYxMTBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKHgpICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDYxMThfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgICAgMHgwMDYxMTgKKyNkZWZpbmUgICBTXzAwNjExOF9EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyh4KSAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYxMThfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MoeCkgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHgwMDY4ODAKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwoeCkgICAgICAgICgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSAgIEdfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwoeCkgICAgICAgICgoKHgpID4+IDgpICYgMHgzKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwgICAgICAgICAgIDB4RkZGRkZDRkYKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfQ1VSUkVOVF9NQVNURVJfRU5fU1RBVEUoeCkgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX0NVUlJFTlRfTUFTVEVSX0VOX1NUQVRFKHgpICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19DVVJSRU5UX01BU1RFUl9FTl9TVEFURSAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfRElTUF9SRUFEX1JFUVVFU1RfRElTQUJMRSh4KSAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX0RJU1BfUkVBRF9SRVFVRVNUX0RJU0FCTEUoeCkgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDY4RThfRDJDUlRDX1VQREFURV9MT0NLICAgICAgICAgICAgICAgICAgMHgwMDY4RTgKKyNkZWZpbmUgICBTXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0soeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0soeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIFJfMDA2OTEwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgIDB4MDA2OTEwCisjZGVmaW5lICAgU18wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKHgpICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OTEwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyh4KSAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjkxMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDA2OTE4X0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgIDB4MDA2OTE4CisjZGVmaW5lICAgU18wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MoeCkgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OTE4X0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKHgpICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjkxOF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAweDAwMDAwMDAwCiAKKworI2RlZmluZSBSXzAwMDAwMV9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMQorI2RlZmluZSAgIFNfMDAwMDAxX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDAxX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDAxX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwMV9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDFfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDAxX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDJfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIKKyNkZWZpbmUgICBTXzAwMDAwMl9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwMl9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwMl9NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDJfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDAyX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwMl9NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDAzX01DX0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzCisjZGVmaW5lICAgU18wMDAwMDNfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDAzX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDAwM19BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMDA0X01DX0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwMDRfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorCisKKyNkZWZpbmUgUl8wMDAwMEZfQ1BfRFlOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9GT1JDRU9OICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwMEZfQ1BfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX1BST0dfREVMQVlfVkFMVUUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9QUk9HX0RFTEFZX1ZBTFVFICAgICAgICAgICAgICAgICAweEZGRkZGMDBGCisjZGVmaW5lICAgU18wMDAwMEZfQ1BfTE9XRVJfUE9XRVJfSURMRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0xPV0VSX1BPV0VSX0lETEUgICAgICAgICAgICAgICAgIDB4RkZGMDBGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTE9XRVJfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0xPV0VSX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTk9STUFMX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX05PUk1BTF9QT1dFUl9JR05PUkUgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9TUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMEZfU1BBUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMDBGX1NQQVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYzRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9OT1JNQUxfUE9XRVJfQlVTWSh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMEZfQ1BfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBSXzAwMDAxMV9FMl9EWU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMQorI2RlZmluZSAgIFNfMDAwMDExX0UyX0ZPUkNFT04oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX0ZPUkNFT04oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDExX0UyX0ZPUkNFT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwMDExX0UyX1BST0dfU0hVVE9GRih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX1BST0dfU0hVVE9GRih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDExX0UyX1BST0dfU0hVVE9GRiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9QUk9HX0RFTEFZX1ZBTFVFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDExX0UyX1BST0dfREVMQVlfVkFMVUUgICAgICAgICAgICAgICAgIDB4RkZGRkYwMEYKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX0xPV0VSX1BPV0VSX0lETEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTE9XRVJfUE9XRVJfSURMRSAgICAgICAgICAgICAgICAgMHhGRkYwMEZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX0xPV0VSX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTE9XRVJfUE9XRVJfSUdOT1JFICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX05PUk1BTF9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTk9STUFMX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX1NQQVJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAxMV9TUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAwMTFfU1BBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjNGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfTk9STUFMX1BPV0VSX0JVU1koeCkgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAxMV9FMl9OT1JNQUxfUE9XRVJfQlVTWSAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9GT1JDRU9OICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX1BST0dfREVMQVlfVkFMVUUoeCkgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9QUk9HX0RFTEFZX1ZBTFVFICAgICAgICAgICAgICAgMHhGRkZGRjAwRgorI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfTE9XRVJfUE9XRVJfSURMRSh4KSAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0xPV0VSX1BPV0VSX0lETEUgICAgICAgICAgICAgICAweEZGRjAwRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTE9XRVJfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0xPV0VSX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX05PUk1BTF9QT1dFUl9JR05PUkUgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfU1BBUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDEzX1NQQVJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDAxM19TUEFSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGM0ZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9OT1JNQUxfUE9XRVJfQlVTWSh4KSAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKaW5kZXggYjU3NGM3My4uYjBlZmQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJydjc3MGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKICNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCiAKICNkZWZpbmUgUjcwMF9QRlBfVUNPREVfU0laRSA4NDgKICNkZWZpbmUgUjcwMF9QTTRfVUNPREVfU0laRSAxMzYwCkBAIC03NSw3ICs3NSw3IEBACiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOwogCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCByZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIsIHJkZXYtPmdhcnQudGFibGVfYWRkciA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwsIEVOQUJMRV9DT05URVhUIHwgUEFHRV9UQUJMRV9ERVBUSCgwKSB8CiAJCQkJUkFOR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCk7CkBAIC0xMjYsMTcgKzEyNiwzNiBAQAogfQogCiAKLS8qCi0gKiBNQwotICovCi1zdGF0aWMgdm9pZCBydjc3MF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NzcwX2FncF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7Ci0JdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOwotCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7Ci0JdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7Ci0JdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7Ci0JdTY0IG9sZF92cmFtX3N0YXJ0OworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUKDApIHwgQ0FDSEVfVVBEQVRFX01PREUoMikpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRU5BQkxFX0wxX1RMQiB8IEVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgfAorCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIzX0NOVEwsIHRtcCk7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKK30KKworc3RhdGljIHZvaWQgcnY3NzBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOwogCXUzMiB0bXA7CiAJaW50IGksIGo7CiAKQEAgLTE1MCw1MyArMTY5LDQyIEBACiAJfQogCVdSRUczMihIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKTsKIAotCWQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoRDFWR0FfQ09OVFJPTCk7Ci0JZDJ2Z2FfY29udHJvbCA9IFJSRUczMihEMlZHQV9DT05UUk9MKTsKLQl2Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKLQl2Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKLQlkMWNydGNfY29udHJvbCA9IFJSRUczMihEMUNSVENfQ09OVFJPTCk7Ci0JZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDJDUlRDX0NPTlRST0wpOwotCW9sZF92cmFtX3N0YXJ0ID0gKHU2NCkoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7Ci0JbmV3X2QxZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMWdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfcHJpbWFyeSA9IFJSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDJncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQotCS8qIFN0b3AgYWxsIHZpZGVvICovCi0JV1JFRzMyKEQxVkdBX0NPTlRST0wsIDApOwotCVdSRUczMihEMlZHQV9DT05UUk9MLCAwKTsKLQlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIDApOwotCVdSRUczMihEMkNSVENfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0KLQltZGVsYXkoMSk7CisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CiAJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBmb3IgTUMgaWRsZSB0aW1lZG91dCAhXG4iKTsKIAl9Ci0KIAkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSovCiAJV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgVkdBX01FTU9SWV9ESVNBQkxFKTsKLQogCS8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCi0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDEyKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWlmIChyZGV2LT5tYy52cmFtX3N0YXJ0IDwgcmRldi0+bWMuZ3R0X3N0YXJ0KSB7CisJCQkvKiBWUkFNIGJlZm9yZSBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFZSQU0gYWZ0ZXIgQUdQICovCisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX2VuZCA+PiAxMik7CisJCX0KKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCX0KIAlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7Ci0JdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKIAl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CiAJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7CiAJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKIAlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpIHwgMHgzRkYpOwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxNik7CiAJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKIAl9IGVsc2UgewpAQCAtMjA0LDM0ICsyMTIsMTMgQEAKIAkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIDB4MEZGRkZGRkYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgMHgwRkZGRkZGRik7CiAJfQotCVdSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfcHJpbWFyeSk7Ci0JV1JFRzMyKEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3NlY29uZGFyeSk7Ci0JV1JFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoVkdBX01FTU9SWV9CQVNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwotCi0JLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCi0JV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgdmdhX2hkcF9jb250cm9sKTsKLQotCW1kZWxheSgxKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIFJlc3RvcmUgdmlkZW8gc3RhdGUgKi8KLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIGQxY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDJDUlRDX0NPTlRST0wsIGQyY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgZDF2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIGQydmdhX2NvbnRyb2wpOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXJfY29udHJvbCk7Ci0KKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQogCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIH0KIAogCkBAIC01NDIsMTEgKzUyOSwxMSBAQAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygxKTsKIAllbHNlCi0JCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19TSElGVCkgPj4gTk9PRkJBTktfTUFTSyk7CisJCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19NQVNLKSA+PiBOT09GQkFOS19TSElGVCk7CiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEdST1VQX1NJWkUoMCk7CiAKLQlpZiAoKChtY19hcmJfcmFtY2ZnICYgTk9PRlJPV1NfTUFTSykgJiBOT09GUk9XU19TSElGVCkgPiAzKSB7CisJaWYgKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUKSA+IDMpIHsKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKDMpOwogCQlnYl90aWxpbmdfY29uZmlnIHw9IFNBTVBMRV9TUExJVCgzKTsKIAl9IGVsc2UgewpAQCAtNTkyLDE0ICs1NzksMTQgQEAKIAogCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCiAJV1JFRzMyKENQX1FVRVVFX1RIUkVTSE9MRFMsIChST1FfSUIxX1NUQVJUKDB4MTYpIHwKLQkJCQkJCVJPUV9JQjJfU1RBUlQoMHgyYikpKTsKKwkJCQkgICAgIFJPUV9JQjJfU1RBUlQoMHgyYikpKTsKIAogCVdSRUczMihDUF9NRVFfVEhSRVNIT0xEUywgU1RRX1NQTElUKDB4MzApKTsKIAogCVdSRUczMihUQV9DTlRMX0FVWCwgKERJU0FCTEVfQ1VCRV9BTklTTyB8Ci0JCQkJCVNZTkNfR1JBRElFTlQgfAotCQkJCQlTWU5DX1dBTEtFUiB8Ci0JCQkJCVNZTkNfQUxJR05FUikpOworCQkJICAgICBTWU5DX0dSQURJRU5UIHwKKwkJCSAgICAgU1lOQ19XQUxLRVIgfAorCQkJICAgICBTWU5DX0FMSUdORVIpKTsKIAogCXN4X2RlYnVnXzEgPSBSUkVHMzIoU1hfREVCVUdfMSk7CiAJc3hfZGVidWdfMSB8PSBFTkFCTEVfTkVXX1NNWF9BRERSRVNTOwpAQCAtNjExLDkgKzU5OCw5IEBACiAJV1JFRzMyKFNNWF9EQ19DVEwwLCBzbXhfZGNfY3RsMCk7CiAKIAlXUkVHMzIoU01YX0VWRU5UX0NUTCwgKEVTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkJCSAgR1NfRkxVU0hfQ1RMKDQpIHwKLQkJCQkJICBBQ0tfRkxVU0hfQ1RMKDMpIHwKLQkJCQkJICBTWU5DX0ZMVVNIX0NUTCkpOworCQkJICAgICAgIEdTX0ZMVVNIX0NUTCg0KSB8CisJCQkgICAgICAgQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkgICAgICAgU1lOQ19GTFVTSF9DVEwpKTsKIAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJV1JFRzMyKERCX0RFQlVHMywgREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7CkBAIC02MjQsMTIgKzYxMSwxMiBAQAogCX0KIAogCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKLQkJCQkJCSAgIFBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAotCQkJCQkJICAgU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKKwkJCQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC8gNCkgLSAxKSB8CisJCQkJCVNNWF9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CiAKIAlXUkVHMzIoUEFfU0NfRklGT19TSVpFLCAoU0NfUFJJTV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX3ByaW1fZmlmb19zaXplKSB8Ci0JCQkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKLQkJCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSkpKTsKKwkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKKwkJCQkgU0NfRUFSTFlaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CiAKIAlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKIApAQCAtNzg3LDIwICs3NzQsNDkgQEAKIHsKIAlmaXhlZDIwXzEyIGE7CiAJdTMyIHRtcDsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CiAJaW50IHI7CiAKIAkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KLQkvKiBGSVhNRTogRG9uJ3Qga25vdyBob3cgdG8gZGV0ZXJtaW5lIHZyYW0gd2lkdGgsIG5lZWQgdG8gY2hlY2sKLQkgKiB2cmFtX3dpZHRoIHVzYWdlCi0JICovCi0JcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CisJdG1wID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOworCWlmICh0bXAgJiBDSEFOU0laRV9PVkVSUklERSkgeworCQljaGFuc2l6ZSA9IDE2OworCX0gZWxzZSBpZiAodG1wICYgQ0hBTlNJWkVfTUFTSykgeworCQljaGFuc2l6ZSA9IDY0OworCX0gZWxzZSB7CisJCWNoYW5zaXplID0gMzI7CisJfQorCXRtcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKKwl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCisJaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCkBAIC04MzMsOSArODQ5LDkgQEAKIAkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CiAJfQogCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwogCXJkZXYtPm1jLmd0dF9zdGFydCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKLQlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemU7CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KIAkgKiBkZWZhdWx0IHNldHVwCiAJICovCkBAIC04NTQsMTEgKzg3MCwxNCBAQAogewogCWludCByOwogCi0JcmFkZW9uX2dwdV9yZXNldChyZGV2KTsKLQlydjc3MF9tY19yZXN1bWUocmRldik7Ci0JciA9IHJ2NzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCXJ2NzcwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlydjc3MF9hZ3BfZW5hYmxlKHJkZXYpOworCX0gZWxzZSB7CisJCXIgPSBydjc3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KIAlydjc3MF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTg3Nyw5ICs4OTYsOCBAQAogCXIgPSByNjAwX2NwX3Jlc3VtZShyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7Ci0JciA9IHI2MDBfd2JfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogd3JpdGUgYmFjayBidWZmZXIgYXJlIG5vdCB2aXRhbCBzbyBkb24ndCB3b3JyeSBhYm91dCBmYWlsdXJlICovCisJcjYwMF93Yl9lbmFibGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4NywxNSArOTA1LDEyIEBACiB7CiAJaW50IHI7CiAKLQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCX0KKwkvKiBEbyBub3QgcmVzZXQgR1BVIGJlZm9yZSBwb3N0aW5nLCBvbiBydjc3MCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC05MDgsNyArOTIzLDcgQEAKIAkJcmV0dXJuIHI7CiAJfQogCi0JciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOworCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtOTIyLDggKzkzNyw4IEBACiAJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwogCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7CisJcjYwMF93Yl9kaXNhYmxlKHJkZXYpOwogCXJ2NzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCiAJLyogdW5waW4gc2hhZGVycyBibyAqLwogICAgICAgICByYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyZXR1cm4gMDsKQEAgLTkzOSw3ICs5NTQsNiBAQAogewogCWludCByOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IHRydWU7CiAJciA9IHJhZGVvbl9kdW1teV9wYWdlX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtOTUzLDggKzk2NywxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIE11c3QgYmUgYW4gQVRPTUJJT1MgKi8KLQlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykKKwlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUjYwMCBHUFVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTk2NywyNCArOTgzLDIwIEBACiAJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHJ2NzcwX21jX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTAxMywxMiArMTAyNSwxMCBAQAogCiAJciA9IHJ2NzcwX3N0YXJ0dXAocmRldik7CiAJaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCQlydjc3MF9zdXNwZW5kKHJkZXYpOworCQlyNjAwX3diX2ZpbmkocmRldik7CisJCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJCXJ2NzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJfQogCWlmIChyZGV2LT5hY2NlbF93b3JraW5nKSB7CkBAIC0xMDI3LDcgKzEwMzcsNyBAQAogCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIElCIHBvb2wgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCQl9Ci0JCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwkJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwpAQCAtMTA0MiwyMCArMTA1MiwxNSBAQAogCiAJcjYwMF9ibGl0X2ZpbmkocmRldik7CiAJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwlyNjAwX3diX2ZpbmkocmRldik7CiAJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKLQl9CisJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CiAJa2ZyZWUocmRldi0+Ymlvcyk7CiAJcmRldi0+YmlvcyA9IE5VTEw7CiAJcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IDRiOWMzZDYuLmExMzY3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMTI5LDYgKzEyOSwxMCBAQAogI2RlZmluZSBIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMCQkJMHg1NEEwCiAjZGVmaW5lCUhEUF9USUxJTkdfQ09ORklHCQkJCTB4MkYzQwogCisjZGVmaW5lIE1DX1NIQVJFRF9DSE1BUAkJCQkJCTB4MjAwNAorI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCisjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisKICNkZWZpbmUJTUNfQVJCX1JBTUNGRwkJCQkJMHgyNzYwCiAjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAogI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMwpAQCAtMTQyLDYgKzE0Niw3IEBACiAjZGVmaW5lCQlDSEFOU0laRV9NQVNLCQkJCQkweDAwMDAwMTAwCiAjZGVmaW5lCQlCVVJTVExFTkdUSF9TSElGVAkJCQk5CiAjZGVmaW5lCQlCVVJTVExFTkdUSF9NQVNLCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJCUNIQU5TSVpFX09WRVJSSURFCQkJCSgxIDw8IDExKQogI2RlZmluZQlNQ19WTV9BR1BfVE9QCQkJCQkweDIwMjgKICNkZWZpbmUJTUNfVk1fQUdQX0JPVAkJCQkJMHgyMDJDCiAjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIwMzAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib192bS5jCmluZGV4IDMzZGU3NjMuLjFjMDQwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CiAJLmZhdWx0ID0gdHRtX2JvX3ZtX2ZhdWx0LAogCS5vcGVuID0gdHRtX2JvX3ZtX29wZW4sCiAJLmNsb3NlID0gdHRtX2JvX3ZtX2Nsb3NlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCmluZGV4IDU0MTc0NGQuLmIxNzAwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCkBAIC04Miw4ICs4Miw4IEBACiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJKytpdGVtLT5yZWZjb3VudDsKIAl9CisJKytpdGVtLT5yZWZjb3VudDsKIAlyZWYtPm9iamVjdCA9IGl0ZW0tPm9iamVjdDsKIAlvYmplY3QgPSBpdGVtLT5vYmplY3Q7CiAJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCBhNTVlZTFhLi43YmNiODlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTI3OSw2ICsyNzksNyBAQAogCiAJcmV0dXJuIHR0bV90dF9zZXRfY2FjaGluZyh0dG0sIHN0YXRlKTsKIH0KK0VYUE9SVF9TWU1CT0wodHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyk7CiAKIHN0YXRpYyB2b2lkIHR0bV90dF9mcmVlX2FsbG9jZWRfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggYmUzNGQzMi4uN2QwNWM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogICogQHR5cGU6IEhJRCByZXBvcnQgdHlwZSAoSElEXypfUkVQT1JUKQogICogQGRhdGE6IHJlcG9ydCBjb250ZW50cwogICogQHNpemU6IHNpemUgb2YgZGF0YSBwYXJhbWV0ZXIKLSAqIEBpbnRlcnJ1cHQ6IGNhbGxlZCBmcm9tIGF0b21pYz8KKyAqIEBpbnRlcnJ1cHQ6IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW50ZXJydXB0IGFuZCBjb250cm9sIHRyYW5zZmVycwogICoKICAqIFRoaXMgaXMgZGF0YSBlbnRyeSBmb3IgbG93ZXIgbGF5ZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwppbmRleCBiMDVmNjAyLi5jNDBhZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10d2luaGFuLmMKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAJLmlucHV0X21hcHBpbmcgPSB0d2luaGFuX2lucHV0X21hcHBpbmcsCiB9OwogCi1zdGF0aWMgaW50IHR3aW5oYW5faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdHdpbmhhbl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnR3aW5oYW5fZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgdHdpbmhhbl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdHdpbmhhbl9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZ0d2luaGFuX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDBjNjYzOWUuLmNkZDEzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2hpZHJhdy5oPgpAQCAtNDcsMTAgKzQ4LDkgQEAKIAljaGFyICpyZXBvcnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKKwltdXRleF9sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwogCXdoaWxlIChyZXQgPT0gMCkgewotCi0JCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOwotCiAJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKIAkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oaWRyYXctPndhaXQsICZ3YWl0KTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNjg1NzU2MC4uNzAwZTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNjc1LDcgKzY3NSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1MzQwogCXRyaXN0YXRlICJTM0MyNFhYL1MzQzY0WFggSW5idWlsdCBBREMiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIG9uLWJvYXJkIEFEQ3Mgb2YKIAkgIHRoZSBTYW1zdW5nIFMzQzI0WFggb3IgUzNDNjRYWCBzZXJpZXMgb2YgU29DCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCmluZGV4IGQzOTg3N2EuLmI1YTk1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCkBAIC0zNTAsOCArMzUwLDcgQEAKIAogCWNhc2UgRkFVTFQ6CiAJCS8qIE5vdGUgLSBvbmx5IGZvciByZW1vdGUxIGFuZCByZW1vdGUyICovCi0JCW91dCA9IGRhdGEtPmFsYXJtcyAmIChzYXR0ci0+aW5kZXggPyAweDgwMDAgOiAweDQwMDApOwotCQlvdXQgPSBvdXQgPyAwIDogMTsKKwkJb3V0ID0gISEoZGF0YS0+YWxhcm1zICYgKHNhdHRyLT5pbmRleCA/IDB4ODAwMCA6IDB4NDAwMCkpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04NjMsNyArODYyLDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20xX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMCk7CkBAIC04NzUsNyArODc0LDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20yX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMSk7CkBAIC04ODcsNyArODg2LDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMik7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20zX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMik7CkBAIC05NDcsMTkgKzk0NiwxOSBAQAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCkBAIC0xMTUyLDcgKzExNTEsNyBAQAogCX0KIAogCS8qIExpbWl0cyBhbmQgc2V0dGluZ3MsIHNob3VsZCBuZXZlciBjaGFuZ2UgdXBkYXRlIGV2ZXJ5IDYwIHNlY29uZHMgKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5saW1pdHNfdXBkYXRlZCArIEhaICogMikgfHwKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5saW1pdHNfdXBkYXRlZCArIEhaICogNjApIHx8CiAJICAgICFkYXRhLT52YWxpZCkgewogCQlkYXRhLT5jb25maWc1ID0gYWR0NzQ3NV9yZWFkKFJFR19DT05GSUc1KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKaW5kZXggZmU0ZmEyOS4uNWEzZWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCkBAIC0zNSwxOCArMzUsMjIgQEAKICNkZWZpbmUgTUVUSE9EX09MRF9FTlVNX0ZBTgkiRlNJRiIKIAogI2RlZmluZSBBVEtfTVVYX0hXTU9OCQkweDAwMDAwMDA2VUxMCisjZGVmaW5lIEFUS19NVVhfTUdNVAkJMHgwMDAwMDAxMVVMTAogCiAjZGVmaW5lIEFUS19DTEFTU19NQVNLCQkweGZmMDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19GUkVRX0NUTAkweDAzMDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19GQU5fQ1RMCTB4MDQwMDAwMDBVTEwKICNkZWZpbmUgQVRLX0NMQVNTX0hXTU9OCQkweDA2MDAwMDAwVUxMCisjZGVmaW5lIEFUS19DTEFTU19NR01UCQkweDExMDAwMDAwVUxMCiAKICNkZWZpbmUgQVRLX1RZUEVfTUFTSwkJMHgwMGZmMDAwMFVMTAogI2RlZmluZSBIV01PTl9UWVBFX1ZPTFQJCTB4MDAwMjAwMDBVTEwKICNkZWZpbmUgSFdNT05fVFlQRV9URU1QCQkweDAwMDMwMDAwVUxMCiAjZGVmaW5lIEhXTU9OX1RZUEVfRkFOCQkweDAwMDQwMDAwVUxMCiAKLSNkZWZpbmUgSFdNT05fU0VOU09SX0lEX01BU0sJMHgwMDAwZmZmZlVMTAorI2RlZmluZSBBVEtfRUxFTUVOVF9JRF9NQVNLCTB4MDAwMGZmZmZVTEwKKworI2RlZmluZSBBVEtfRUNfSUQJCTB4MTEwNjAwMDRVTEwKIAogZW51bSBhdGtfcGFja19tZW1iZXIgewogCUhXTU9OX1BBQ0tfRkxBR1MsCkBAIC04OSw2ICs5Myw5IEBACiAJLyogbmV3IGludGVmYWNlICovCiAJYWNwaV9oYW5kbGUgZW51bWVyYXRlX2hhbmRsZTsKIAlhY3BpX2hhbmRsZSByZWFkX2hhbmRsZTsKKwlhY3BpX2hhbmRsZSB3cml0ZV9oYW5kbGU7CisKKwlib29sIGRpc2FibGVfZWM7CiAKIAlpbnQgdm9sdGFnZV9jb3VudDsKIAlpbnQgdGVtcGVyYXR1cmVfY291bnQ7CkBAIC0xMjksOSArMTM2LDIyIEBACiAJY2hhciBjb25zdCAqYWNwaV9uYW1lOwogfTsKIAotc3RydWN0IGF0a19hY3BpX2J1ZmZlcl91NjQgewotCXVuaW9uIGFjcGlfb2JqZWN0IGJ1ZjsKLQl1NjQgdmFsdWU7CisvKiBSZXR1cm4gYnVmZmVyIGZvcm1hdDoKKyAqIFswLTNdICJ2YWx1ZSIgaXMgdmFsaWQgZmxhZworICogWzQtN10gdmFsdWUKKyAqIFs4LSBdIHVua25vd24gc3R1ZmYgb24gbmV3ZXIgbW9ib3MKKyAqLworc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgeworCXUzMiBmbGFnczsKKwl1MzIgdmFsdWU7CisJdTggZGF0YVtdOworfTsKKworLyogSW5wdXQgYnVmZmVyIHVzZWQgZm9yIEdJVE0gYW5kIFNJVE0gbWV0aG9kcyAqLworc3RydWN0IGF0a19hY3BpX2lucHV0X2J1ZiB7CisJdTMyIGlkOworCXUzMiBwYXJhbTE7CisJdTMyIHBhcmFtMjsKIH07CiAKIHN0YXRpYyBpbnQgYXRrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CkBAIC00MzksNTIgKzQ1OSwxNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuaW9uIGFjcGlfb2JqZWN0ICphdGtfZ2dycChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsIHUxNiBtdXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZjsKKwlhY3BpX3N0YXR1cyByZXQ7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOworCXVuaW9uIGFjcGlfb2JqZWN0IGlkOworCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOworCisJaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWlkLmludGVnZXIudmFsdWUgPSBtdXg7CisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZpZDsKKworCWJ1Zi5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKKwlyZXQgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkYXRhLT5lbnVtZXJhdGVfaGFuZGxlLCBOVUxMLCAmcGFyYW1zLCAmYnVmKTsKKwlpZiAocmV0ICE9IEFFX09LKSB7CisJCWRldl9lcnIoZGV2LCAiR0dSUFslI3hdIEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgbXV4LAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihyZXQpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCXBhY2sgPSBidWYucG9pbnRlcjsKKwlpZiAocGFjay0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQkvKiBFeGVjdXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGJ1dCB0aGUgaWQgd2FzIG5vdCBmb3VuZCAqLworCQlBQ1BJX0ZSRUUocGFjayk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCX0KKworCWlmIChwYWNrLT5wYWNrYWdlLmNvdW50IDwgMSkgeworCQlkZXZfZXJyKGRldiwgIkdHUlBbJSN4XSBwYWNrYWdlIGlzIHRvbyBzbWFsbFxuIiwgbXV4KTsKKwkJQUNQSV9GUkVFKHBhY2spOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIHBhY2s7Cit9CisKK3N0YXRpYyB1bmlvbiBhY3BpX29iamVjdCAqYXRrX2dpdG0oc3RydWN0IGF0a19kYXRhICpkYXRhLCB1NjQgaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGF0a19hY3BpX2lucHV0X2J1ZiBidWY7CisJdW5pb24gYWNwaV9vYmplY3QgdG1wOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJYnVmLmlkID0gaWQ7CisJYnVmLnBhcmFtMSA9IDA7CisJYnVmLnBhcmFtMiA9IDA7CisKKwl0bXAudHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJdG1wLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopJmJ1ZjsKKwl0bXAuYnVmZmVyLmxlbmd0aCA9IHNpemVvZihidWYpOworCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICh2b2lkICopJnRtcDsKKworCXJldC5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5yZWFkX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKKwkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOworCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwkJZGV2X3dhcm4oZGV2LCAiR0lUTVslI2xseF0gQUNQSSBleGNlcHRpb246ICVzXG4iLCBpZCwKKwkJCQlhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlvYmogPSByZXQucG9pbnRlcjsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChvYmotPmJ1ZmZlci5sZW5ndGggPCA4KSB7CisJCWRldl93YXJuKGRldiwgIlVuZXhwZWN0ZWQgQVNCRiBsZW5ndGg6ICV1XG4iLAorCQkJCW9iai0+YnVmZmVyLmxlbmd0aCk7CisJCUFDUElfRlJFRShvYmopOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIHVuaW9uIGFjcGlfb2JqZWN0ICphdGtfc2l0bShzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsCisJCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7CisJdW5pb24gYWNwaV9vYmplY3QgdG1wOworCXN0cnVjdCBhY3BpX2J1ZmZlciByZXQ7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwl0bXAudHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJdG1wLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopYnVmOworCXRtcC5idWZmZXIubGVuZ3RoID0gc2l6ZW9mKCpidWYpOworCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZ0bXA7CisKKwlyZXQubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+d3JpdGVfaGFuZGxlLCBOVUxMLCAmcGFyYW1zLAorCQkJJnJldCwgQUNQSV9UWVBFX0JVRkZFUik7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCQlkZXZfd2FybihkZXYsICJTSVRNWyUjeF0gQUNQSSBleGNlcHRpb246ICVzXG4iLCBidWYtPmlkLAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCW9iaiA9IHJldC5wb2ludGVyOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKG9iai0+YnVmZmVyLmxlbmd0aCA8IDgpIHsKKwkJZGV2X3dhcm4oZGV2LCAiVW5leHBlY3RlZCBBU0JGIGxlbmd0aDogJXVcbiIsCisJCQkJb2JqLT5idWZmZXIubGVuZ3RoKTsKKwkJQUNQSV9GUkVFKG9iaik7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlyZXR1cm4gb2JqOworfQorCiBzdGF0aWMgaW50IGF0a19yZWFkX3ZhbHVlX25ldyhzdHJ1Y3QgYXRrX3NlbnNvcl9kYXRhICpzZW5zb3IsIHU2NCAqdmFsdWUpCiB7CiAJc3RydWN0IGF0a19kYXRhICpkYXRhID0gc2Vuc29yLT5kYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OwotCXVuaW9uIGFjcGlfb2JqZWN0IGlkOwotCXN0cnVjdCBhdGtfYWNwaV9idWZmZXJfdTY0IHRtcDsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqYnVmOworCWludCBlcnIgPSAwOwogCi0JaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWlkLmludGVnZXIudmFsdWUgPSBzZW5zb3ItPmlkOworCW9iaiA9IGF0a19naXRtKGRhdGEsIHNlbnNvci0+aWQpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIAotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaWQ7Ci0KLQl0bXAuYnVmLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCXRtcC5idWYuYnVmZmVyLnBvaW50ZXIgPSAodTggKikmdG1wLnZhbHVlOwotCXRtcC5idWYuYnVmZmVyLmxlbmd0aCA9IHNpemVvZih1NjQpOwotCXJldC5sZW5ndGggPSBzaXplb2YodG1wKTsKLQlyZXQucG9pbnRlciA9ICZ0bXA7Ci0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5yZWFkX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKLQkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOwotCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKLQkJZGV2X3dhcm4oZGV2LCAiJXM6IEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgX19mdW5jX18sCi0JCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBSZXR1cm4gYnVmZmVyIGZvcm1hdDoKLQkgKiBbMC0zXSAidmFsdWUiIGlzIHZhbGlkIGZsYWcKLQkgKiBbNC03XSB2YWx1ZQotCSAqLwotCWlmICghKHRtcC52YWx1ZSAmIDB4ZmZmZmZmZmYpKSB7CisJYnVmID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoYnVmLT5mbGFncyA9PSAwKSB7CiAJCS8qIFRoZSByZWFkaW5nIGlzIG5vdCB2YWxpZCwgcG9zc2libGUgY2F1c2VzOgogCQkgKiAtIHNlbnNvciBmYWlsdXJlCiAJCSAqIC0gZW51bWVyYXRpb24gd2FzIEZVQkFSIChhbmQgd2UgZGlkbid0IG5vdGljZSkKIAkJICovCi0JCWRldl9pbmZvKGRldiwgIkZhaWx1cmU6ICUjbGx4XG4iLCB0bXAudmFsdWUpOwotCQlyZXR1cm4gLUVJTzsKKwkJZGV2X3dhcm4oZGV2LCAiUmVhZCBmYWlsZWQsIHNlbnNvciA9ICUjbGx4XG4iLCBzZW5zb3ItPmlkKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CiAJfQogCi0JKnZhbHVlID0gKHRtcC52YWx1ZSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgPj4gMzI7Ci0KLQlyZXR1cm4gMDsKKwkqdmFsdWUgPSBidWYtPnZhbHVlOworb3V0OgorCUFDUElfRlJFRShvYmopOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgYXRrX3JlYWRfdmFsdWUoc3RydWN0IGF0a19zZW5zb3JfZGF0YSAqc2Vuc29yLCB1NjQgKnZhbHVlKQpAQCAtNzEzLDQyICs4MjgsMTQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdGtfZWNfcHJlc2VudChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJdW5pb24gYWNwaV9vYmplY3QgKnBhY2s7CisJdW5pb24gYWNwaV9vYmplY3QgKmVjOworCWludCByZXQ7CisJaW50IGk7CisKKwlwYWNrID0gYXRrX2dncnAoZGF0YSwgQVRLX01VWF9NR01UKTsKKwlpZiAoSVNfRVJSKHBhY2spKSB7CisJCWlmIChQVFJfRVJSKHBhY2spID09IC1FTk9FTlQpIHsKKwkJCS8qIFRoZSBNR01UIGNsYXNzIGRvZXMgbm90IGV4aXN0cyAtIHRoYXQncyBvayAqLworCQkJZGV2X2RiZyhkZXYsICJDbGFzcyAlI2xseCBub3QgZm91bmRcbiIsIEFUS19NVVhfTUdNVCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gUFRSX0VSUihwYWNrKTsKKwl9CisKKwkvKiBTZWFyY2ggdGhlIEVDICovCisJZWMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOworCQl1bmlvbiBhY3BpX29iamVjdCAqaWQ7CisKKwkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkKKwkJCWNvbnRpbnVlOworCisJCWlkID0gJm9iai0+cGFja2FnZS5lbGVtZW50c1swXTsKKwkJaWYgKGlkLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKQorCQkJY29udGludWU7CisKKwkJaWYgKGlkLT5pbnRlZ2VyLnZhbHVlID09IEFUS19FQ19JRCkgeworCQkJZWMgPSBvYmo7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldCA9IChlYyAhPSBOVUxMKTsKKwlpZiAoIXJldCkKKwkJLyogVGhlIHN5c3RlbSBoYXMgbm8gRUMgKi8KKwkJZGV2X2RiZyhkZXYsICJFQyBub3QgZm91bmRcbiIpOworCisJQUNQSV9GUkVFKHBhY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXRrX2VjX2VuYWJsZWQoc3RydWN0IGF0a19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgKmJ1ZjsKKwlpbnQgZXJyOworCisJb2JqID0gYXRrX2dpdG0oZGF0YSwgQVRLX0VDX0lEKTsKKwlpZiAoSVNfRVJSKG9iaikpIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcXVlcnkgRUMgc3RhdHVzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKwl9CisJYnVmID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKworCWlmIChidWYtPmZsYWdzID09IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcXVlcnkgRUMgc3RhdHVzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQllcnIgPSAoYnVmLT52YWx1ZSAhPSAwKTsKKwkJZGV2X2RiZyhkZXYsICJFQyBpcyAlc2FibGVkXG4iLAorCQkJCWVyciA/ICJlbiIgOiAiZGlzIik7CisJfQorCisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhdGtfZWNfY3RsKHN0cnVjdCBhdGtfZGF0YSAqZGF0YSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgc2l0bTsKKwlzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqZWNfcmV0OworCWludCBlcnIgPSAwOworCisJc2l0bS5pZCA9IEFUS19FQ19JRDsKKwlzaXRtLnBhcmFtMSA9IGVuYWJsZTsKKwlzaXRtLnBhcmFtMiA9IDA7CisKKwlvYmogPSBhdGtfc2l0bShkYXRhLCAmc2l0bSk7CisJaWYgKElTX0VSUihvYmopKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvICVzYWJsZSB0aGUgRUNcbiIsCisJCQkJZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKwl9CisJZWNfcmV0ID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoZWNfcmV0LT5mbGFncyA9PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvICVzYWJsZSB0aGUgRUNcbiIsCisJCQkJZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICJFQyAlc2FibGVkXG4iLAorCQkJCWVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisJfQorCisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBhdGtfZW51bWVyYXRlX25ld19od21vbihzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZjsKLQlhY3BpX3N0YXR1cyByZXQ7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOwotCXVuaW9uIGFjcGlfb2JqZWN0IGlkOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOwogCWludCBlcnI7CiAJaW50IGk7CiAKKwllcnIgPSBhdGtfZWNfcHJlc2VudChkYXRhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAoZXJyKSB7CisJCWVyciA9IGF0a19lY19lbmFibGVkKGRhdGEpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCS8qIElmIHRoZSBFQyB3YXMgZGlzYWJsZWQgd2Ugd2lsbCBkaXNhYmxlIGl0IGFnYWluIG9uIHVubG9hZCAqLworCQlkYXRhLT5kaXNhYmxlX2VjID0gZXJyOworCisJCWVyciA9IGF0a19lY19jdGwoZGF0YSwgMSk7CisJCWlmIChlcnIpIHsKKwkJCWRhdGEtPmRpc2FibGVfZWMgPSBmYWxzZTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAlkZXZfZGJnKGRldiwgIkVudW1lcmF0aW5nIGh3bW9uIHNlbnNvcnNcbiIpOwogCi0JaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWlkLmludGVnZXIudmFsdWUgPSBBVEtfTVVYX0hXTU9OOwotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaWQ7Ci0KLQlidWYubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7Ci0JcmV0ID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKLQkJCSZidWYsIEFDUElfVFlQRV9QQUNLQUdFKTsKLQlpZiAocmV0ICE9IEFFX09LKSB7Ci0JCWRldl93YXJuKGRldiwgTUVUSE9EX0VOVU1FUkFURSAiOiBBQ1BJIGV4Y2VwdGlvbjogJXNcbiIsCi0JCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHJldCkpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBSZXN1bHQgbXVzdCBiZSBhIHBhY2thZ2UgKi8KLQlwYWNrID0gYnVmLnBvaW50ZXI7Ci0KLQlpZiAocGFjay0+cGFja2FnZS5jb3VudCA8IDEpIHsKLQkJZGV2X2RiZyhkZXYsICIlczogaHdtb24gcGFja2FnZSBpcyB0b28gc21hbGw6ICVkXG4iLCBfX2Z1bmNfXywKLQkJCQlwYWNrLT5wYWNrYWdlLmNvdW50KTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQorCXBhY2sgPSBhdGtfZ2dycChkYXRhLCBBVEtfTVVYX0hXTU9OKTsKKwlpZiAoSVNfRVJSKHBhY2spKQorCQlyZXR1cm4gUFRSX0VSUihwYWNrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKIAkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOwpAQCAtNzU4LDggKzk3MSw3IEBACiAKIAllcnIgPSBkYXRhLT52b2x0YWdlX2NvdW50ICsgZGF0YS0+dGVtcGVyYXR1cmVfY291bnQgKyBkYXRhLT5mYW5fY291bnQ7CiAKLW91dDoKLQlBQ1BJX0ZSRUUoYnVmLnBvaW50ZXIpOworCUFDUElfRlJFRShwYWNrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04OTUsNiArMTEwNywxNSBAQAogCX0KIAlkYXRhLT5yZWFkX2hhbmRsZSA9IHJldDsKIAorCS8qIERlLW11bHRpcGxleGVyICh3cml0ZSkgKi8KKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGF0YS0+YXRrX2hhbmRsZSwgTUVUSE9EX1dSSVRFLCAmcmV0KTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCWRldl9kYmcoZGV2LCAibWV0aG9kICIgTUVUSE9EX1JFQUQgIiBub3QgZm91bmQ6ICVzXG4iLAorCQkJCSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkYXRhLT53cml0ZV9oYW5kbGUgPSByZXQ7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE1LDYgKzExMzYsNyBAQAogCWRhdGEtPmFjcGlfZGV2ID0gZGV2aWNlOwogCWRhdGEtPmF0a19oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKIAlJTklUX0xJU1RfSEVBRCgmZGF0YS0+c2Vuc29yX2xpc3QpOworCWRhdGEtPmRpc2FibGVfZWMgPSBmYWxzZTsKIAogCWJ1Zi5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKIAlyZXQgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5hdGtfaGFuZGxlLCBCT0FSRF9JRCwgTlVMTCwKQEAgLTk3Myw2ICsxMTk1LDggQEAKIGNsZWFudXA6CiAJYXRrX2ZyZWVfc2Vuc29ycyhkYXRhKTsKIG91dDoKKwlpZiAoZGF0YS0+ZGlzYWJsZV9lYykKKwkJYXRrX2VjX2N0bChkYXRhLCAwKTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTg4LDYgKzEyMTIsMTEgQEAKIAlhdGtfZnJlZV9zZW5zb3JzKGRhdGEpOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAKKwlpZiAoZGF0YS0+ZGlzYWJsZV9lYykgeworCQlpZiAoYXRrX2VjX2N0bChkYXRhLCAwKSkKKwkJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiRmFpbGVkIHRvIGRpc2FibGUgRUNcbiIpOworCX0KKwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCmluZGV4IDJjMmNiMWUuLjI3ZDYyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAogCS8qIFNhbXBsZSByZWdpc3RlciBjb250ZW50cyBldmVyeSAxIHNlYyAqLwogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlICsgSFopIHx8ICFkYXRhLT52YWxpZCkgewotCQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CisJCWlmIChkYXRhLT50eXBlID09IGRtZTE3MzcpIHsKIAkJCWRhdGEtPnZpZCA9IGRtZTE3MzdfcmVhZChkYXRhLCBETUUxNzM3X1JFR19WSUQpICYKIAkJCQkweDNmOwogCQl9CkBAIC0xNjIxLDkgKzE2MjEsNiBAQAogCSZzZW5zb3JfZGV2X2F0dHJfem9uZTFfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl96b25lMl9hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3pvbmUzX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAotCS8qIE1pc2MgKi8KLQkmZGV2X2F0dHJfdnJtLmF0dHIsCi0JJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMTYzMSw2ICsxNjI4LDE4IEBACiAJLmF0dHJzID0gZG1lMTczN19taXNjX2F0dHIsCiB9OwogCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdCBob2xkcyBWSUQtcmVsYXRlZCBhdHRyaWJ1dGVzLiBUaGVpciBjcmVhdGlvbgorICAgZGVwZW5kcyBvbiB0aGUgY2hpcCB0eXBlIHdoaWNoIGlzIGRldGVybWluZWQgZHVyaW5nIG1vZHVsZSBsb2FkLiAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRtZTE3MzdfdmlkX2F0dHJbXSA9IHsKKwkmZGV2X2F0dHJfdnJtLmF0dHIsCisJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZG1lMTczN192aWRfZ3JvdXAgPSB7CisJLmF0dHJzID0gZG1lMTczN192aWRfYXR0ciwKK307CisKIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0cyBob2xkIHRoZSBQV00gYXR0cmlidXRlcywgc29tZSBvZiB3aGljaCBhcmUgb3B0aW9uYWwuCiAgKiBUaGVpciBjcmVhdGlvbiBkZXBlbmRzIG9uIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gd2hpY2ggaXMgZGV0ZXJtaW5lZCBkdXJpbmcKICAqIG1vZHVsZSBsb2FkLiAqLwpAQCAtMTkwMiw2ICsxOTExLDkgQEAKIAlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19taXNjX2dyb3VwKTsKIAl9CisJaWYgKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgeworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfdmlkX2dyb3VwKTsKKwl9CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfZ3JvdXApOwogCkBAIC0xOTMzLDYgKzE5NDUsMTMgQEAKIAkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKKwkvKiBDcmVhdGUgVklELXJlbGF0ZWQgc3lzZnMgYXR0cmlidXRlcyAqLworCWlmICgoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSAmJgorCSAgICAoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgJmRtZTE3MzdfdmlkX2dyb3VwKSkpIHsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKIAkvKiBDcmVhdGUgZmFuIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KIAlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRtZTE3MzdfZmFuX2dyb3VwKTsgaXgrKykgewogCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGl4KSkgewpAQCAtMjEyNyw3ICsyMTQ2LDcgQEAKIAlkYXRhLT5wd21fYWN6WzJdID0gNDsJLyogcHdtMyAtPiB6b25lMyAqLwogCiAJLyogU2V0IFZSTSAqLwotCWlmIChkYXRhLT50eXBlICE9IHNjaDUwMjcpIHsKKwlpZiAoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSB7CiAJCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCmluZGV4IGVhOTU1ZWQuLmRhMWIxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKKysrIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwpAQCAtODE5LDcgKzgxOSw3IEBACiBzdGF0aWMgc3NpemVfdCB3YXRjaGRvZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewotCXNpemVfdCByZXQ7CisJaW50IHJldDsKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoY291bnQpIHsKQEAgLTkxNSw3ICs5MTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdhdGNoZG9nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3YXRjaGRvZ19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLm9wZW4gPSB3YXRjaGRvZ19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jIGIvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCmluZGV4IDY2Nzk4NTQuLmJlNDc1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYworKysgYi9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKQEAgLTE5NywxMSArMTk3LDEzIEBACiAJQVhJU19ETUlfTUFUQ0goIkhQMjEzMyIsICJIUCAyMTMzIiwgeHlfcm90YXRlZF9sZWZ0KSwKIAlBWElTX0RNSV9NQVRDSCgiSFAyMTQwIiwgIkhQIDIxNDAiLCB4eV9zd2FwX2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTN4IiwgIkhQIENvbXBhcSA2NTMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKLQlBWElTX0RNSV9NQVRDSCgiTkM2NzN4IiwgIkhQIENvbXBhcSA2NzMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2NzMwYiIsICJIUCBDb21wYXEgNjczMGIiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2NzMwcyIsICJIUCBDb21wYXEgNjczMHMiLCB4eV9zd2FwKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTF4eCIsICJIUCBDb21wYXEgNjUxIiwgeHlfcm90YXRlZF9yaWdodCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjcxMHgiLCAiSFAgQ29tcGFxIDY3MTAiLCB4eV9zd2FwX3l6X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NzE1eCIsICJIUCBDb21wYXEgNjcxNSIsIHlfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY5M3h4IiwgIkhQIEVsaXRlQm9vayA2OTMiLCB4eV9yb3RhdGVkX3JpZ2h0KSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2OTN4eCIsICJIUCBFbGl0ZUJvb2sgODUzIiwgeHlfc3dhcCksCiAJLyogSW50ZWwtYmFzZWQgSFAgUGF2aWxpb24gZHY1ICovCiAJQVhJU19ETUlfTUFUQ0gyKCJIUERWNV9JIiwKIAkJCVBST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NSIsCkBAIC0yMTQsNiArMjE2LDcgQEAKIAkJCXlfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJEVjciLCAiSFAgUGF2aWxpb24gZHY3IiwgeF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIkhQODcxMCIsICJIUCBDb21wYXEgODcxMCIsIHlfaW52ZXJ0ZWQpLAorCUFYSVNfRE1JX01BVENIKCJIRFgxOCIsICJIUCBIRFggMTgiLCB4X2ludmVydGVkKSwKIAl7IE5VTEwsIH0KIC8qIExhcHRvcCBtb2RlbHMgd2l0aG91dCBheGlzIGluZm8gKHlldCk6CiAgKiAiTkM2OTEwIiAiSFAgQ29tcGFxIDY5MTAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IGZmZWIyYTEuLmEzNzQ5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC0xMDI4LDEyICsxMDI4LDExIEBACiAJCWNoaXBfdHlwZSwgKmFkZHJlc3MsIHNpb19kYXRhLT5yZXZpc2lvbik7CiAKIAkvKiBSZWFkIEdQSU8gY29uZmlnIGFuZCBWSUQgdmFsdWUgZnJvbSBMRE4gNyAoR1BJTykgKi8KLQlpZiAoY2hpcF90eXBlICE9IElUODcwNUZfREVWSUQpIHsKKwlpZiAoc2lvX2RhdGEtPnR5cGUgIT0gaXQ4NykgewogCQlpbnQgcmVnOwogCiAJCXN1cGVyaW9fc2VsZWN0KEdQSU8pOwotCQlpZiAoKGNoaXBfdHlwZSA9PSBpdDg3MTgpIHx8Ci0JCSAgICAoY2hpcF90eXBlID09IGl0ODcyMCkpCisJCWlmIChzaW9fZGF0YS0+dHlwZSA9PSBpdDg3MTggfHwgc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NzIwKQogCQkJc2lvX2RhdGEtPnZpZF92YWx1ZSA9IHN1cGVyaW9faW5iKElUODdfU0lPX1ZJRF9SRUcpOwogCiAJCXJlZyA9IHN1cGVyaW9faW5iKElUODdfU0lPX1BJTlgyX1JFRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCmluZGV4IGVjZDczOTUuLjgyYjE2ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCkBAIC04Myw3ICs4Myw4IEBACiAJc3RydWN0IGxpczNsdjAyZCAqbGlzMyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwogCWxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKCk7CiAJbGlzM2x2MDJkX3Bvd2Vyb2ZmKGxpczMpOwotCXJldHVybiAwOworCisJcmV0dXJuIGxpczNsdjAyZF9yZW1vdmVfZnMoJmxpczNfZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sdGM0MjE1LmMgYi9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYwppbmRleCA2YzlhMDQxLi4wMGQ5NzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYworKysgYi9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYwpAQCAtMjAsMTEgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGx0YzQyMTUpOwotCiAvKiBIZXJlIGFyZSBuYW1lcyBvZiB0aGUgY2hpcCdzIHJlZ2lzdGVycyAoYS5rLmEuIGNvbW1hbmRzKSAqLwogZW51bSBsdGM0MjE1X2NtZCB7CiAJTFRDNDIxNV9DT05UUk9MCQkJPSAweDAwLCAvKiBydyAqLwpAQCAtMjQ2LDkgKzI0MSwxMyBAQAogc3RhdGljIGludCBsdGM0MjE1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKIAlzdHJ1Y3QgbHRjNDIxNV9kYXRhICpkYXRhOwogCWludCByZXQ7CiAKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0yOTQsNTYgKzI5MywyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGx0YzQyMTVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChraW5kIDwgMCkgewkJLyogcHJvYmVkIGRldGVjdGlvbiAtIGNoZWNrIHRoZSBjaGlwIHR5cGUgKi8KLQkJczMyIHY7CQkvKiA4IGJpdHMgZnJvbSB0aGUgY2hpcCwgb3IgLUVSUk5PICovCi0KLQkJLyoKLQkJICogUmVnaXN0ZXIgMHgwMSBiaXQgYjcgaXMgcmVzZXJ2ZWQsIGV4cGVjdCAwCi0JCSAqIFJlZ2lzdGVyIDB4MDMgYml0IGI2IGFuZCBiNyBhcmUgcmVzZXJ2ZWQsIGV4cGVjdCAwCi0JCSAqLwotCQl2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTFRDNDIxNV9BTEVSVCk7Ci0JCWlmICh2IDwgMCB8fCAodiAmICgxIDw8IDcpKSAhPSAwKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyMTVfRkFVTFQpOwotCQlpZiAodiA8IDAgfHwgKHYgJiAoKDEgPDwgNikgfCAoMSA8PCA3KSkpICE9IDApCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jc3RybGNweShpbmZvLT50eXBlLCAibHRjNDIxNSIsIEkyQ19OQU1FX1NJWkUpOwotCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJsdGM0MjE1ICVzIGF0IGFkZHJlc3MgMHglMDJ4XG4iLAotCQkJa2luZCA8IDAgPyAicHJvYmVkIiA6ICJmb3JjZWQiLAotCQkJY2xpZW50LT5hZGRyKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbHRjNDIxNV9pZFtdID0gewotCXsgImx0YzQyMTUiLCBsdGM0MjE1IH0sCisJeyAibHRjNDIxNSIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHRjNDIxNV9pZCk7CiAKIC8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdGM0MjE1X2RyaXZlciA9IHsKLQkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImx0YzQyMTUiLAogCX0sCiAJLnByb2JlCQk9IGx0YzQyMTVfcHJvYmUsCiAJLnJlbW92ZQkJPSBsdGM0MjE1X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBsdGM0MjE1X2lkLAotCS5kZXRlY3QJCT0gbHRjNDIxNV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBsdGM0MjE1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jIGIvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKaW5kZXggZTM4OTY0My4uNjVjMjMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKKysrIGIvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKQEAgLTIyLDE1ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogCi0vKiBWYWxpZCBhZGRyZXNzZXMgYXJlIDB4MjAgLSAweDNmCi0gKgotICogRm9yIG5vdywgd2UgZG8gbm90IHByb2JlLCBzaW5jZSBzb21lIG9mIHRoZXNlIGFkZHJlc3NlcwotICogYXJlIGtub3duIHRvIGJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobHRjNDI0NSk7Ci0KIC8qIEhlcmUgYXJlIG5hbWVzIG9mIHRoZSBjaGlwJ3MgcmVnaXN0ZXJzIChhLmsuYS4gY29tbWFuZHMpICovCiBlbnVtIGx0YzQyNDVfY21kIHsKIAlMVEM0MjQ1X1NUQVRVUwkJCT0gMHgwMCwgLyogcmVhZG9ubHkgKi8KQEAgLTM2OSw5ICszNjAsMTMgQEAKIHN0YXRpYyBpbnQgbHRjNDI0NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CiAJc3RydWN0IGx0YzQyNDVfZGF0YSAqZGF0YTsKIAlpbnQgcmV0OwogCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtNDE4LDEzNiArNDEzLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIENoZWNrIHRoYXQgc29tZSBiaXRzIGluIGEgY29udHJvbCByZWdpc3RlciBhcHBlYXIgYXQgYWxsIHBvc3NpYmxlCi0gKiBsb2NhdGlvbnMgd2l0aG91dCBjaGFuZ2luZyB2YWx1ZQotICoKLSAqIEBjbGllbnQ6IHRoZSBpMmMgY2xpZW50IHRvIHVzZQotICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHJlYWQKLSAqIEBiaXRzOiB0aGUgYml0cyB0byBjaGVjayAoMHhmZiBjaGVja3MgYWxsIGJpdHMsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMgY2hlY2tzIG9ubHkgdGhlIGxhc3QgdHdvIGJpdHMpCi0gKgotICogcmV0dXJuIC1FUlJOTyBpZiB0aGUgcmVnaXN0ZXIgcmVhZCBmYWlsZWQKLSAqIHJldHVybiAtRU5PREVWIGlmIHRoZSByZWdpc3RlciB2YWx1ZSBkb2Vzbid0IHN0YXkgY29uc3RhbnQgYXQgYWxsCi0gKiBwb3NzaWJsZSBhZGRyZXNzZXMKLSAqCi0gKiByZXR1cm4gMCBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgaW50IGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXRzKQotewotCWludCBpOwotCXMzMiB2LCB2b2ZmMSwgdm9mZjI7Ci0KLQkvKiBSZWFkIHJlZ2lzdGVyIGFuZCBjaGVjayBmb3IgZXJyb3IgKi8KLQl2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLQlpZiAodiA8IDApCi0JCXJldHVybiB2OwotCi0JdiAmPSBiaXRzOwotCi0JZm9yIChpID0gMHgwMDsgaSA8IDB4ZmY7IGkgKz0gMHgyMCkgewotCi0JCXZvZmYxID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICsgaSk7Ci0JCWlmICh2b2ZmMSA8IDApCi0JCQlyZXR1cm4gdm9mZjE7Ci0KLQkJdm9mZjIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcgKyBpICsgMHgwOCk7Ci0JCWlmICh2b2ZmMiA8IDApCi0JCQlyZXR1cm4gdm9mZjI7Ci0KLQkJdm9mZjEgJj0gYml0czsKLQkJdm9mZjIgJj0gYml0czsKLQotCQlpZiAodiAhPSB2b2ZmMSB8fCB2ICE9IHZvZmYyKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbHRjNDI0NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgaW50IGtpbmQsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7Ci0KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKGtpbmQgPCAwKSB7CQkvKiBwcm9iZWQgZGV0ZWN0aW9uIC0gY2hlY2sgdGhlIGNoaXAgdHlwZSAqLwotCQlzMzIgdjsJCS8qIDggYml0cyBmcm9tIHRoZSBjaGlwLCBvciAtRVJSTk8gKi8KLQotCQkvKiBDaGlwIHJlZ2lzdGVycyAweDAwLTB4MDcgYXJlIGNvbnRyb2wgcmVnaXN0ZXJzCi0JCSAqIENoaXAgcmVnaXN0ZXJzIDB4MTAtMHgxZiBhcmUgZGF0YSByZWdpc3RlcnMKLQkJICoKLQkJICogQWRkcmVzcyBiaXRzIGI3LWI1IGFyZSBpZ25vcmVkLiBUaGlzIG1ha2VzIHRoZSBjaGlwICJyZXBlYXQiCi0JCSAqIGluIHN0ZXBzIG9mIDB4MjAuIEFueSBjb250cm9sIHJlZ2lzdGVycyBzaG91bGQgYXBwZWFyIHdpdGgKLQkJICogdGhlIHNhbWUgdmFsdWVzIGFjcm9zcyBhbGwgZHVwbGljYXRlZCBhZGRyZXNzZXMuCi0JCSAqCi0JCSAqIFJlZ2lzdGVyIDB4MDIgYml0IGIyIGlzIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKiBSZWdpc3RlciAweDA3IGJpdHMgYjcgdG8gYjQgYXJlIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKgotCQkgKiBSZWdpc3RlcnMgMHgwMSwgMHgwMiBhcmUgY29udHJvbCByZWdpc3RlcnMgYW5kIHNob3VsZCBub3QKLQkJICogY2hhbmdlIG9uIHRoZWlyIG93bi4KLQkJICoKLQkJICogUmVnaXN0ZXIgMHgwNiBiaXRzIGI2IGFuZCBiNyBhcmUgY29udHJvbCBiaXRzLCBhbmQgc2hvdWxkCi0JCSAqIG5vdCBjaGFuZ2Ugb24gdGhlaXIgb3duLgotCQkgKgotCQkgKiBSZWdpc3RlciAweDA3IGJpdHMgYjMgdG8gYjAgYXJlIGNvbnRyb2wgYml0cywgYW5kIHNob3VsZAotCQkgKiBub3QgY2hhbmdlIG9uIHRoZWlyIG93bi4KLQkJICovCi0KLQkJLyogcmVhZCByZWdpc3RlciAweDAyIHJlc2VydmVkIGJpdCwgZXhwZWN0IDAgKi8KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyNDVfQ09OVFJPTCk7Ci0JCWlmICh2IDwgMCB8fCAodiAmIDB4MDQpICE9IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkvKiByZWFkIHJlZ2lzdGVyIDB4MDcgcmVzZXJ2ZWQgYml0cywgZXhwZWN0IDAgKi8KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyNDVfQURDQURSKTsKLQkJaWYgKHYgPCAwIHx8ICh2ICYgMHhmMCkgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgdGhlIGFsZXJ0IHJlZ2lzdGVyIGFwcGVhcnMgYXQgYWxsIGxvY2F0aW9ucyAqLwotCQlpZiAobHRjNDI0NV9jaGVja19jb250cm9sX3JlZyhjbGllbnQsIExUQzQyNDVfQUxFUlQsIDB4ZmYpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCB0aGUgY29udHJvbCByZWdpc3RlciBhcHBlYXJzIGF0IGFsbCBsb2NhdGlvbnMgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0NPTlRST0wsIDB4ZmYpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCByZWdpc3RlciAweDA2IGJpdHMgYjYgYW5kIGI3IHN0YXkgY29uc3RhbnQgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0dQSU8sIDB4YzApKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCByZWdpc3RlciAweDA3IGJpdHMgYjMtYjAgc3RheSBjb25zdGFudCAqLwotCQlpZiAobHRjNDI0NV9jaGVja19jb250cm9sX3JlZyhjbGllbnQsIExUQzQyNDVfQURDQURSLCAweDBmKSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImx0YzQyNDUiLCBJMkNfTkFNRV9TSVpFKTsKLQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAibHRjNDI0NSAlcyBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKLQkJCWtpbmQgPCAwID8gInByb2JlZCIgOiAiZm9yY2VkIiwKLQkJCWNsaWVudC0+YWRkcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGx0YzQyNDVfaWRbXSA9IHsKLQl7ICJsdGM0MjQ1IiwgbHRjNDI0NSB9LAorCXsgImx0YzQyNDUiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGx0YzQyNDVfaWQpOwogCiAvKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjNDI0NV9kcml2ZXIgPSB7Ci0JLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsdGM0MjQ1IiwKIAl9LAogCS5wcm9iZQkJPSBsdGM0MjQ1X3Byb2JlLAogCS5yZW1vdmUJCT0gbHRjNDI0NV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbHRjNDI0NV9pZCwKLQkuZGV0ZWN0CQk9IGx0YzQyNDVfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbHRjNDI0NV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jIGIvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYwppbmRleCAzYTUyNGYyLi43MTgzNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKQEAgLTMyMywxNCArMzIzLDIxIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRhdGEtPmluKTsgaSsrKSB7Ci0JCWlmICghcGRhdGEtPmluW2ldKQorCQlzdHJ1Y3QgczNjMjR4eF9hZGNfaHdtb25faW5jZmcgKmNmZyA9IHBkYXRhLT5pbltpXTsKKworCQlpZiAoIWNmZykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChwZGF0YS0+aW5baV0tPm11bHQgPj0gMHgxMDAwMCkKKwkJaWYgKGNmZy0+bXVsdCA+PSAweDEwMDAwKQogCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAogCQkJCSAiY2hhbm5lbCAlZCBtdWx0aXBsaWVyIHRvbyBsYXJnZVxuIiwKIAkJCQkgaSk7CiAKKwkJaWYgKGNmZy0+ZGl2aWRlciA9PSAwKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgImNoYW5uZWwgJWQgZGl2aWRlciB6ZXJvXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJcmV0ID0gczNjX2h3bW9uX2NyZWF0ZV9hdHRyKCZkZXYtPmRldiwgcGRhdGEtPmluW2ldLAogCQkJCQkgICAgJmh3bW9uLT5hdHRyc1tpXSwgaSk7CiAJCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc2h0MTUuYyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwppbmRleCAzMDNjMDI2Li5lYmUzOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMKKysrIGIvZHJpdmVycy9od21vbi9zaHQxNS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC02MjIsNyArNjIzLDEyIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2h0X2RyaXZlcnNbXSA9IHsKKy8qCisgKiBzaHRfZHJpdmVycyBzaW11bHRhbmVvdXNseSByZWZlcnMgdG8gX19kZXZpbml0IGFuZCBfX2RldmV4aXQgZnVuY3Rpb24KKyAqIHdoaWNoIGNhdXNlcyBzcHVyaW91cyBzZWN0aW9uIG1pc21hdGNoIHdhcm5pbmcuIFNvIHVzZSBfX3JlZmRhdGEgdG8KKyAqIGdldCByaWQgZnJvbSB0aGlzLgorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBfX3JlZmRhdGEgc2h0X2RyaXZlcnNbXSA9IHsKIAl7CiAJCS5kcml2ZXIgPSB7CiAJCQkubmFtZSA9ICJzaHQxMCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDZiZWRkMmYuLmU4ZmU3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkgICAgQVRJIFNCNjAwCiAJICAgIEFUSSBTQjcwMAogCSAgICBBVEkgU0I4MDAKLQkgICAgQU1EIFNCOTAwCisJICAgIEFNRCBIdWRzb24tMgogCSAgICBTZXJ2ZXJ3b3JrcyBPU0I0CiAJICAgIFNlcnZlcndvcmtzIENTQjUKIAkgICAgU2VydmVyd29ya3MgQ1NCNgpAQCAtNDc3LDggKzQ3Nyw4IEBACiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtcG54LgogCiBjb25maWcgSTJDX1BYQQotCXRyaXN0YXRlICJJbnRlbCBQWEEyWFggSTJDIGFkYXB0ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQVJDSF9QWEEKKwl0cmlzdGF0ZSAiSW50ZWwgUFhBMlhYIEkyQyBhZGFwdGVyIgorCWRlcGVuZHMgb24gQVJDSF9QWEEgfHwgQVJDSF9NTVAKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBkZXZpY2VzIGluIHRoZSBQWEEgSTJDIGJ1cywgc2F5IHllcyB0byB0aGlzIG9wdGlvbi4KIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCmluZGV4IGY3ZDZmZTkuLjhmMGI5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJZXJyb3IgPSBhY3BpX2NoZWNrX3JlZ2lvbihhbWQ3NTZfaW9wb3J0LCBTTUJfSU9TSVpFLAogCQkJCSAgYW1kNzU2X2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGFtZDc1Nl9pb3BvcnQsIFNNQl9JT1NJWkUsIGFtZDc1Nl9kcml2ZXIubmFtZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiU01CIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKaW5kZXggYTdjNTk5MC4uNWI0YWQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKQEAgLTM3Niw4ICszNzYsMTAgQEAKIAlzbWJ1cy0+c2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKTsKIAogCWVycm9yID0gYWNwaV9jaGVja19yZXNvdXJjZV9jb25mbGljdCgmZGV2LT5yZXNvdXJjZVswXSk7Ci0JaWYgKGVycm9yKQorCWlmIChlcnJvcikgeworCQllcnJvciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X2tmcmVlOworCX0KIAogCWlmICghcmVxdWVzdF9yZWdpb24oc21idXMtPmJhc2UsIHNtYnVzLT5zaXplLCBhbWQ4MTExX2RyaXZlci5uYW1lKSkgewogCQllcnJvciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggOWQyYzVhZC4uNTVlZGNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTczMiw4ICs3MzIsMTAgQEAKIAl9CiAKIAllcnIgPSBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KCZkZXYtPnJlc291cmNlW1NNQkJBUl0pOwotCWlmIChlcnIpCisJaWYgKGVycikgeworCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CisJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9uKGRldiwgU01CQkFSLCBpODAxX2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwppbmRleCA0YWZiYTNlLi5lMzY1NGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKQEAgLTEyMCwxOSArMTIwLDI2IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJcXVldWU7CiAJdW5zaWduZWQgbG9uZwkJaTJjc3I7CiAJdW5zaWduZWQgaW50IAkJZGlzYWJsZV9kZWxheTsKKwlpbnQJCQlzdG9wcGVkOworCXVuc2lnbmVkIGludAkJaWZkcjsgLyogSU1YX0kyQ19JRkRSICovCiB9OwogCiAvKiogRnVuY3Rpb25zIGZvciBJTVggSTJDIGFkYXB0ZXIgZHJpdmVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBpMmNfaW14X2J1c19idXN5KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKK3N0YXRpYyBpbnQgaTJjX2lteF9idXNfYnVzeShzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgsIGludCBmb3JfYnVzeSkKIHsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcyA9IGppZmZpZXM7CisJdW5zaWduZWQgaW50IHRlbXA7CiAKIAlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKIAotCS8qIHdhaXQgZm9yIGJ1cyBub3QgYnVzeSAqLwotCXdoaWxlIChyZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKSAmIEkyU1JfSUJCKSB7CisJd2hpbGUgKDEpIHsKKwkJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOworCQlpZiAoZm9yX2J1c3kgJiYgKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKKwkJaWYgKCFmb3JfYnVzeSAmJiAhKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBJMkMgSW50ZXJydXB0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTE3OSw0MSArMTg2LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGkyY19pbXhfc3RhcnQoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQorc3RhdGljIGludCBpMmNfaW14X3N0YXJ0KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKIHsKIAl1bnNpZ25lZCBpbnQgdGVtcCA9IDA7CisJaW50IHJlc3VsdDsKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCisJY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOworCXdyaXRlYihpMmNfaW14LT5pZmRyLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JRkRSKTsKIAkvKiBFbmFibGUgSTJDIGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJTUik7CiAJd3JpdGViKEkyQ1JfSUVOLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKworCS8qIFdhaXQgY29udHJvbGxlciB0byBiZSBzdGFibGUgKi8KKwl1ZGVsYXkoNTApOworCiAJLyogU3RhcnQgSTJDIHRyYW5zYWN0aW9uICovCiAJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwogCXRlbXAgfD0gSTJDUl9NU1RBOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXN1bHQgPSBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJaTJjX2lteC0+c3RvcHBlZCA9IDA7CisKIAl0ZW1wIHw9IEkyQ1JfSUlFTiB8IEkyQ1JfTVRYIHwgSTJDUl9UWEFLOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBpMmNfaW14X3N0b3Aoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQogewogCXVuc2lnbmVkIGludCB0ZW1wID0gMDsKIAotCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCi0JZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1bmNfXyk7Ci0JdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXRlbXAgJj0gfkkyQ1JfTVNUQTsKLQl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JLyogc2V0dXAgY2hpcCByZWdpc3RlcnMgdG8gZGVmYXVsdHMgKi8KLQl3cml0ZWIoSTJDUl9JRU4sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXdyaXRlYigwLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKTsKLQkvKgotCSAqIFRoaXMgZGVsYXkgY2F1c2VkIGJ5IGFuIGkuTVhMIGhhcmR3YXJlIGJ1Zy4KLQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KLQkgKi8KLQl1ZGVsYXkoaTJjX2lteC0+ZGlzYWJsZV9kZWxheSk7CisJaWYgKCFpMmNfaW14LT5zdG9wcGVkKSB7CisJCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCisJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOworCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCXRlbXAgJj0gfihJMkNSX01TVEEgfCBJMkNSX01UWCk7CisJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJaTJjX2lteC0+c3RvcHBlZCA9IDE7CisJfQorCWlmIChjcHVfaXNfbXgxKCkpIHsKKwkJLyoKKwkJICogVGhpcyBkZWxheSBjYXVzZWQgYnkgYW4gaS5NWEwgaGFyZHdhcmUgYnVnLgorCQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KKwkJICovCisJCXVkZWxheShpMmNfaW14LT5kaXNhYmxlX2RlbGF5KTsKKwl9CisKKwlpZiAoIWkyY19pbXgtPnN0b3BwZWQpCisJCWkyY19pbXhfYnVzX2J1c3koaTJjX2lteCwgMCk7CisKIAkvKiBEaXNhYmxlIEkyQyBjb250cm9sbGVyICovCiAJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpMmNfaW14X3NldF9jbGsoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LApAQCAtMjMzLDggKzI2MSw4IEBACiAJZWxzZQogCQlmb3IgKGkgPSAwOyBpMmNfY2xrX2RpdltpXVswXSA8IGRpdjsgaSsrKTsKIAotCS8qIFdyaXRlIGRpdmlkZXIgdmFsdWUgdG8gcmVnaXN0ZXIgKi8KLQl3cml0ZWIoaTJjX2Nsa19kaXZbaV1bMV0sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0lGRFIpOworCS8qIFN0b3JlIGRpdmlkZXIgdmFsdWUgKi8KKwlpMmNfaW14LT5pZmRyID0gaTJjX2Nsa19kaXZbaV1bMV07CiAKIAkvKgogCSAqIFRoZXJlIGR1bW15IGRlbGF5IGlzIGNhbGN1bGF0ZWQuCkBAIC0zNDEsMTEgKzM2OSwxNSBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDEpKSB7CisJCQkvKiBJdCBtdXN0IGdlbmVyYXRlIFNUT1AgYmVmb3JlIHJlYWQgSTJEUiB0byBwcmV2ZW50CisJCQkgICBjb250cm9sbGVyIGZyb20gZ2VuZXJhdGluZyBhbm90aGVyIGNsb2NrIGN5Y2xlICovCiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBjbGVhciBNU1RBXG4iLCBfX2Z1bmNfXyk7CiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JCQl0ZW1wICY9IH5JMkNSX01TVEE7CisJCQl0ZW1wICY9IH4oSTJDUl9NU1RBIHwgSTJDUl9NVFgpOwogCQkJd3JpdGViKHRlbXAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCQkJaTJjX2lteF9idXNfYnVzeShpMmNfaW14LCAwKTsKKwkJCWkyY19pbXgtPnN0b3BwZWQgPSAxOwogCQl9IGVsc2UgaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDIpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBzZXQgVFhBS1xuIiwgX19mdW5jX18pOwpAQCAtMzcwLDE0ICs0MDIsMTEgQEAKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCi0JLyogQ2hlY2sgaWYgaTJjIGJ1cyBpcyBub3QgYnVzeSAqLwotCXJlc3VsdCA9IGkyY19pbXhfYnVzX2J1c3koaTJjX2lteCk7CisJLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCisJcmVzdWx0ID0gaTJjX2lteF9zdGFydChpMmNfaW14KTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWwwOwogCi0JLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCi0JaTJjX2lteF9zdGFydChpMmNfaW14KTsKLQogCS8qIHJlYWQvd3JpdGUgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlpZiAoaSkgewpAQCAtMzg2LDYgKzQxNSw5IEBACiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CiAJCQl0ZW1wIHw9IEkyQ1JfUlNUQTsKIAkJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJCXJlc3VsdCA9ICBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIGZhaWwwOwogCQl9CiAJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LAogCQkJIjwlcz4gdHJhbnNmZXIgbWVzc2FnZTogJWRcbiIsIF9fZnVuY19fLCBpKTsKQEAgLTUwMCw3ICs1MzIsNiBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgSTJDIGNsb2NrXG4iKTsKIAkJZ290byBmYWlsMzsKIAl9Ci0JY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOwogCiAJLyogUmVxdWVzdCBJUlEgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShpMmNfaW14LT5pcnEsIGkyY19pbXhfaXNyLCAwLCBwZGV2LT5uYW1lLCBpMmNfaW14KTsKQEAgLTU0OSw3ICs1ODAsNiBAQAogZmFpbDU6CiAJZnJlZV9pcnEoaTJjX2lteC0+aXJxLCBpMmNfaW14KTsKIGZhaWw0OgotCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiAJY2xrX3B1dChpMmNfaW14LT5jbGspOwogZmFpbDM6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGkyY19pbXgtPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CkBAIC01ODYsOCArNjE2LDYgQEAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmV4aXQpCiAJCXBkYXRhLT5leGl0KCZwZGV2LT5kZXYpOwogCi0JLyogRGlzYWJsZSBJMkMgY2xvY2sgKi8KLQljbGtfZGlzYWJsZShpMmNfaW14LT5jbGspOwogCWNsa19wdXQoaTJjX2lteC0+Y2xrKTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihpMmNfaW14LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGkyY19pbXgtPnJlcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwppbmRleCA5ZjZiOGUwLi5kYmE2ZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoYWNwaV9jaGVja19yZWdpb24oc2NoX3NtYmEsIFNNQklPU0laRSwgc2NoX2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzY2hfc21iYSwgU01CSU9TSVpFLCBzY2hfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLAogCQkJc2NoX3NtYmEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggZDMyNWU4Ni4uZjYyNzAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0zNjUsOSArMzY1LDYgQEAKIAl1bnNpZ25lZCB0aW1lb3V0ID0gaTJjLT5hZGFwLnRpbWVvdXQ7CiAJdTMyIGZsYWdzID0gcmVzdGFydCA/IENDUl9SU1RBIDogMDsKIAotCS8qIFN0YXJ0IHdpdGggTUVOICovCi0JaWYgKCFyZXN0YXJ0KQotCQl3cml0ZWNjcihpMmMsIENDUl9NRU4pOwogCS8qIFN0YXJ0IGFzIG1hc3RlciAqLwogCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYIHwgZmxhZ3MpOwogCS8qIFdyaXRlIHRhcmdldCBieXRlICovCkBAIC0zOTYsOSArMzkzLDYgQEAKIAlpbnQgaSwgcmVzdWx0OwogCXUzMiBmbGFncyA9IHJlc3RhcnQgPyBDQ1JfUlNUQSA6IDA7CiAKLQkvKiBTdGFydCB3aXRoIE1FTiAqLwotCWlmICghcmVzdGFydCkKLQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUVOKTsKIAkvKiBTd2l0Y2ggdG8gcmVhZCAtIHJlc3RhcnQgKi8KIAl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCB8IGZsYWdzKTsKIAkvKiBXcml0ZSB0YXJnZXQgYWRkcmVzcyBieXRlIC0gdGhpcyB0aW1lIHdpdGggdGhlIHJlYWQgZmxhZyBzZXQgKi8KQEAgLTQyNSw5ICs0MTksOSBAQAogCQkvKiBHZW5lcmF0ZSB0eGFjayBvbiBuZXh0IHRvIGxhc3QgYnl0ZSAqLwogCQlpZiAoaSA9PSBsZW5ndGggLSAyKQogCQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNUQSB8IENDUl9UWEFLKTsKLQkJLyogR2VuZXJhdGUgc3RvcCBvbiBsYXN0IGJ5dGUgKi8KKwkJLyogRG8gbm90IGdlbmVyYXRlIHN0b3Agb24gbGFzdCBieXRlICovCiAJCWlmIChpID09IGxlbmd0aCAtIDEpCi0JCQl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9UWEFLKTsKKwkJCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYKTsKIAkJZGF0YVtpXSA9IHJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfRFIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCmluZGV4IGE3ODJjN2EuLjFlMjQ1ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKQEAgLTIyLDcgKzIyLDcgQEAKIAlJbnRlbCBQSUlYNCwgNDQwTVgKIAlTZXJ2ZXJ3b3JrcyBPU0I0LCBDU0I1LCBDU0I2LCBIVC0xMDAwLCBIVC0xMTAwCiAJQVRJIElYUDIwMCwgSVhQMzAwLCBJWFA0MDAsIFNCNjAwLCBTQjcwMCwgU0I4MDAKLQlBTUQgU0I5MDAKKwlBTUQgSHVkc29uLTIKIAlTTVNDIFZpY3Rvcnk2NgogCiAgICBOb3RlOiB3ZSBhc3N1bWUgdGhlcmUgY2FuIG9ubHkgYmUgb25lIGRldmljZSwgd2l0aCBvbmUgU01CdXMgaW50ZXJmYWNlLgpAQCAtMTY5LDcgKzE2OSw3IEBACiAJfQogCiAJaWYgKGFjcGlfY2hlY2tfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKQotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24ocGlpeDRfc21iYSwgU01CSU9TSVpFLCBwaWl4NF9kcml2ZXIubmFtZSkpIHsKIAkJZGV2X2VycigmUElJWDRfZGV2LT5kZXYsICJTTUJ1cyByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCkBAIC0yMzMsOSArMjMzLDkgQEAKIAl1bnNpZ25lZCBzaG9ydCBzbWJhX2lkeCA9IDB4Y2Q2OwogCXU4IHNtYmFfZW5fbG8sIHNtYmFfZW5faGksIGkyY2NmZywgaTJjY2ZnX29mZnNldCA9IDB4MTAsIHNtYl9lbiA9IDB4MmM7CiAKLQkvKiBTQjgwMCBTTUJ1cyBkb2VzIG5vdCBzdXBwb3J0IGZvcmNpbmcgYWRkcmVzcyAqLworCS8qIFNCODAwIGFuZCBsYXRlciBTTUJ1cyBkb2VzIG5vdCBzdXBwb3J0IGZvcmNpbmcgYWRkcmVzcyAqLwogCWlmIChmb3JjZSB8fCBmb3JjZV9hZGRyKSB7Ci0JCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU0I4MDAgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCAiCisJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgZG9lcyBub3Qgc3VwcG9ydCAiCiAJCQkiZm9yY2luZyBhZGRyZXNzIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI2MCw3ICsyNjAsNyBAQAogCiAJcGlpeDRfc21iYSA9ICgoc21iYV9lbl9oaSA8PCA4KSB8IHNtYmFfZW5fbG8pICYgMHhmZmUwOwogCWlmIChhY3BpX2NoZWNrX3JlZ2lvbihwaWl4NF9zbWJhLCBTTUJJT1NJWkUsIHBpaXg0X2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLApAQCAtNDgwLDcgKzQ4MCw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFAzMDBfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9TQlgwMF9TTUJVUykgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKIAkJICAgICBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCmluZGV4IDI3NmEwNDYuLmI0YTU1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCkBAIC0zNjksOSArMzY5LDggQEAKIAkJZ290byBlcnI7CiAKIAlzbnByaW50ZihzbWJ1c19jbWktPmFkYXB0ZXIubmFtZSwgc2l6ZW9mKHNtYnVzX2NtaS0+YWRhcHRlci5uYW1lKSwKLQkJIlNNQnVzIENNSSBhZGFwdGVyICVzICglcykiLAotCQlhY3BpX2RldmljZV9uYW1lKGRldmljZSksCi0JCWFjcGlfZGV2aWNlX3VpZChkZXZpY2UpKTsKKwkJIlNNQnVzIENNSSBhZGFwdGVyICVzIiwKKwkJYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpKTsKIAlzbWJ1c19jbWktPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKIAlzbWJ1c19jbWktPmFkYXB0ZXIuYWxnbyA9ICZhY3BpX3NtYnVzX2NtaV9hbGdvcml0aG07CiAJc21idXNfY21pLT5hZGFwdGVyLmFsZ29fZGF0YSA9IHNtYnVzX2NtaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDgyOTU4ODUuLjE2NDk5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAKIAlyZXR2YWwgPSBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KCZkZXYtPnJlc291cmNlW1NJUzk2eF9CQVJdKTsKIAlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIEV2ZXJ5dGhpbmcgaXMgaGFwcHksIGxldCdzIGdyYWIgdGhlIG1lbW9yeSBhbmQgc2V0IHRoaW5ncyB1cC4gKi8KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHNpczk2eF9zbWJ1c19iYXNlLCBTTUJfSU9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggNTRkODEwYS4uZTRiMTU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIGZvdW5kOgogCWVycm9yID0gYWNwaV9jaGVja19yZWdpb24odnQ1OTZfc21iYSwgOCwgdnQ1OTZfZHJpdmVyLm5hbWUpOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24odnQ1OTZfc21iYSwgOCwgdnQ1OTZfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNNQnVzIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKaW5kZXggNjM5NmMzYS4uODM3MzIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFKSwgMCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFKSwgMSB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFKSwgMCB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUpLCAwIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFKSwgMCB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCA2ODBlNTk3Li5jYTBjNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzc5LDcgKzM3OSw4IEBACiAJCS5lbmFibGViaXRzCT0ge3sweDAwLDB4MDAsMHgwMH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkucG9ydF9vcHMJPSAmY21kNjR4X3BvcnRfb3BzLAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19DTEVBUl9TSU1QTEVYIHwKLQkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCwKKwkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCB8CisJCQkJICBJREVfSEZMQUdfU0VSSUFMSVpFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNSwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gMHgwMCwgLyogbm8gdWRtYSAqLwpAQCAtMzg5LDcgKzM5MCw4IEBACiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY21kNjR4LAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MSwweDA0LDB4MDR9LCB7MHg1MSwweDA4LDB4MDh9fSwKIAkJLnBvcnRfb3BzCT0gJmNtZDY0OF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIIHwKKwkJCQkgIElERV9IRkxBR19TRVJJQUxJWkUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU81LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDYzYzUzZDYuLjRkNzZiYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xMDQ2LDE1ICsxMDQ2LDYgQEAKIAkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5pbml0X2RldikKIAkJCXBvcnRfb3BzLT5pbml0X2Rldihkcml2ZSk7CiAJfQotCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCS8qCi0JCSAqIGRlZmF1bHQgdG8gUElPIE1vZGUgMCBiZWZvcmUgd2UgZmlndXJlIG91dAotCQkgKiB0aGUgbW9zdCBzdWl0ZWQgbW9kZSBmb3IgdGhlIGF0dGFjaGVkIGRldmljZQotCQkgKi8KLQkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5zZXRfcGlvX21vZGUpCi0JCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCAwKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqaHdpZiwgdW5zaWduZWQgaW50IHBvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCAyOGQwOWE1Li4wMTdjMDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTI3MywxNCArMjczLDggQEAKIAogc3RhdGljIHZvaWQgcHJvY19pZGVfc2V0dGluZ3Nfd2Fybih2b2lkKQogewotCXN0YXRpYyBpbnQgd2FybmVkOwotCi0JaWYgKHdhcm5lZCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogL3Byb2MvaWRlL2hkPy9zZXR0aW5ncyBpbnRlcmZhY2UgaXMgIgorCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiV2FybmluZzogL3Byb2MvaWRlL2hkPy9zZXR0aW5ncyBpbnRlcmZhY2UgaXMgIgogCQkJICAgICJvYnNvbGV0ZSwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uIVxuIik7Ci0Jd2FybmVkID0gMTsKIH0KIAogc3RhdGljIGludCBpZGVfc2V0dGluZ3NfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwppbmRleCBhZmNhMjJiLi4zYjg4ZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwMgkJTGlvbmVsIEJvdXRvbiA8TGlvbmVsLkJvdXRvbkBpbmV0Ni5mcj4sIE1haW50YWluZXIKICAqIENvcHlyaWdodCAoQykgMjAwMwkJVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KLSAqIENvcHlyaWdodCAoQykgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoKQEAgLTI4MSwxMSArMjgxLDEzIEBACiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NGIsICZyZWc0YmgpOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJcndfcHJlZmV0Y2ggPSAweDExIDw8IGRyaXZlLT5kbjsKKwlyd19wcmVmZXRjaCA9IHJlZzRiaCAmIH4oMHgxMSA8PCBkcml2ZS0+ZG4pOwogCi0JaWYgKChyZWc0YmggJiAoMHgxMSA8PCBkcml2ZS0+ZG4pKSAhPSByd19wcmVmZXRjaCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgcmVnNGJofHJ3X3ByZWZldGNoKTsKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlyd19wcmVmZXRjaCB8PSAweDExIDw8IGRyaXZlLT5kbjsKKworCWlmIChyZWc0YmggIT0gcndfcHJlZmV0Y2gpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGIsIHJ3X3ByZWZldGNoKTsKIH0KIAogc3RhdGljIHZvaWQgc2lzX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMgYi9kcml2ZXJzL2llZWUxMzk0L2RtYS5jCmluZGV4IDFhYmE4YzEuLjhlN2UzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZG1hX3JlZ2lvbl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRtYV9yZWdpb25fdm1fb3BzID0gewogCS5mYXVsdCA9IGRtYV9yZWdpb25fcGFnZWZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwppbmRleCAwYmMzZDc4Li44YWE1NmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwppbmRleCBkMjg3YmE3Li45NDkwNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCmluZGV4IDk2YTI5NTkuLjdjNTQ0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCisrKyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCkBAIC0yNjAsMTUgKzI2MCwxMiBAQAogc3RhdGljIG5ldGRldl90eF90IGllZWU4MDIxNTRfZmFrZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc2tiLT5paWYgPSBkZXYtPmlmaW5kZXg7Ci0Jc2tiLT5kZXYgPSBkZXY7CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCiAJLyogRklYTUU6IGRvIGhhcmR3YXJlIHdvcmsgaGVyZSAuLi4gKi8KIAorCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggNWJlMWJkNC4uYmQwNzgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAKIAkJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KQogCQkJaWYgKGlwdjZfY2hrX2FkZHIoJmluaXRfbmV0LAotCQkJCQkgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkciktPnNpbjZfYWRkciwKKwkJCQkJICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGRzdF9pbiktPnNpbjZfYWRkciwKIAkJCQkJICBkZXYsIDEpKQogCQkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKaW5kZXggNTVkMDkzYS4uMGY4OTkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC0zNjIsNyArMzYzLDkgQEAKIAkJICogSW4gZWl0aGVyIGNhc2UsIG11c3QgdGVsbCB0aGUgcHJvdmlkZXIgdG8gcmVqZWN0LgogCQkgKi8KIAkJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9ERVNUUk9ZSU5HOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWNtX2lkLT5kZXZpY2UtPml3Y20tPnJlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgSVdfQ01fU1RBVEVfQ09OTl9TRU5UOgogCWNhc2UgSVdfQ01fU1RBVEVfREVTVFJPWUlORzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCmluZGV4IDU3YTNjNmYuLjRlMGYyODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwpAQCAtMzcsNyArMzcsOCBAQAogZW51bSBybXBwX3N0YXRlIHsKIAlSTVBQX1NUQVRFX0FDVElWRSwKIAlSTVBQX1NUQVRFX1RJTUVPVVQsCi0JUk1QUF9TVEFURV9DT01QTEVURQorCVJNUFBfU1RBVEVfQ09NUExFVEUsCisJUk1QUF9TVEFURV9DQU5DRUxJTkcKIH07CiAKIHN0cnVjdCBtYWRfcm1wcF9yZWN2IHsKQEAgLTg3LDE4ICs4OCwyMiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFnZW50LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShybXBwX3JlY3YsICZhZ2VudC0+cm1wcF9saXN0LCBsaXN0KSB7CisJCWlmIChybXBwX3JlY3YtPnN0YXRlICE9IFJNUFBfU1RBVEVfQ09NUExFVEUpCisJCQlpYl9mcmVlX3JlY3ZfbWFkKHJtcHBfcmVjdi0+cm1wcF93Yyk7CisJCXJtcHBfcmVjdi0+c3RhdGUgPSBSTVBQX1NUQVRFX0NBTkNFTElORzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWdlbnQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocm1wcF9yZWN2LCAmYWdlbnQtPnJtcHBfbGlzdCwgbGlzdCkgewogCQljYW5jZWxfZGVsYXllZF93b3JrKCZybXBwX3JlY3YtPnRpbWVvdXRfd29yayk7CiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJtcHBfcmVjdi0+Y2xlYW51cF93b3JrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWdlbnQtPmxvY2ssIGZsYWdzKTsKIAogCWZsdXNoX3dvcmtxdWV1ZShhZ2VudC0+cXBfaW5mby0+cG9ydF9wcml2LT53cSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm1wcF9yZWN2LCB0ZW1wX3JtcHBfcmVjdiwKIAkJCQkgJmFnZW50LT5ybXBwX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJnJtcHBfcmVjdi0+bGlzdCk7Ci0JCWlmIChybXBwX3JlY3YtPnN0YXRlICE9IFJNUFBfU1RBVEVfQ09NUExFVEUpCi0JCQlpYl9mcmVlX3JlY3ZfbWFkKHJtcHBfcmVjdi0+cm1wcF93Yyk7CiAJCWRlc3Ryb3lfcm1wcF9yZWN2KHJtcHBfcmVjdik7CiAJfQogfQpAQCAtMjYwLDYgKzI2NSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcm1wcF9yZWN2LT5hZ2VudC0+bG9jaywgZmxhZ3MpOworCWlmIChybXBwX3JlY3YtPnN0YXRlID09IFJNUFBfU1RBVEVfQ0FOQ0VMSU5HKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJtcHBfcmVjdi0+YWdlbnQtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KIAlsaXN0X2RlbCgmcm1wcF9yZWN2LT5saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybXBwX3JlY3YtPmFnZW50LT5sb2NrLCBmbGFncyk7CiAJZGVzdHJveV9ybXBwX3JlY3Yocm1wcF9yZWN2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKaW5kZXggNTFiZDk2Ni4uZjUwNGM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKaW5kZXggNDM0NmEyNC4uYmI5NmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwppbmRleCA4YzQ2ZjIyLi43ZGUwMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCmluZGV4IGQzZmZmOWUuLmFlYzBmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKaW5kZXggNjg5NTUyMy4uZWQ3MTc1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgpAQCAtMTE5OSwxMSArMTIwMCwxNCBAQAogCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0RPV047CiAJZWxzZSB7CiAJCWluZXRkZXYgPSBpbl9kZXZfZ2V0KG5ldGRldik7Ci0JCWlmIChpbmV0ZGV2LT5pZmFfbGlzdCkKLQkJCXByb3BzLT5zdGF0ZSA9IElCX1BPUlRfQUNUSVZFOwotCQllbHNlCisJCWlmIChpbmV0ZGV2KSB7CisJCQlpZiAoaW5ldGRldi0+aWZhX2xpc3QpCisJCQkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9BQ1RJVkU7CisJCQllbHNlCisJCQkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9JTklUOworCQkJaW5fZGV2X3B1dChpbmV0ZGV2KTsKKwkJfSBlbHNlCiAJCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0lOSVQ7Ci0JCWluX2Rldl9wdXQoaW5ldGRldik7CiAJfQogCiAJcHJvcHMtPnBvcnRfY2FwX2ZsYWdzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCmluZGV4IDZlODY1MzQuLjFjZWNmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwpAQCAtMjksNiArMjksNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIml3Y2hfcHJvdmlkZXIuaCIKICNpbmNsdWRlICJpd2NoLmgiCiAjaW5jbHVkZSAiaXdjaF9jbS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdXZlcmJzLmMKaW5kZXggM2NiNjg4ZC4uZjE1NjVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jCkBAIC05NSw3ICs5NSw3IEBACiAJCSAgICAgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICpjb3VudCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2bV9vcHMgPSB7CiAJLm9wZW4gPQllaGNhX21tX29wZW4sCiAJLmNsb3NlID0gZWhjYV9tbV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggMDRlODhiNi4uMDEzZDEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwpAQCAtMzEsNiArMzEsNyBAQAogICogU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKaW5kZXggMzhhMjg3MC4uNDBkYmU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKQEAgLTExNTEsNyArMTE1MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaXBhdGhfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlwYXRoX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdCA9IGlwYXRoX2ZpbGVfdm1hX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTcyMjAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMKaW5kZXggYjJhOWQ0Yy4uYTgwNTQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTcyMjAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNzIyMC5jCkBAIC0zNyw2ICszNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYwppbmRleCA2YzIxYjRiLi5jMGEwM2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbW1hcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21tYXAuYwppbmRleCBmYTgzMGUyLi5iMjg4NjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbW1hcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tbWFwLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAlrcmVmX3B1dCgmaXAtPnJlZiwgaXBhdGhfcmVsZWFzZV9tbWFwX2luZm8pOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlwYXRoX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaXBhdGhfdm1fb3BzID0gewogCS5vcGVuID0gICAgIGlwYXRoX3ZtYV9vcGVuLAogCS5jbG9zZSA9ICAgIGlwYXRoX3ZtYV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jCmluZGV4IDNhNWE4OWIuLmNiMmQzZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jCkBAIC0zMiw2ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwppbmRleCAyMjk2ODMyLi4xZjk1YmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCkBAIC0zMSw2ICszMSw3IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKaW5kZXggNjA3NmNiNi4uNzQyMDcxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKQEAgLTMxLDYgKzMxLDcgQEAKICAqIFNPRlRXQVJFLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPHJkbWEvaWJfc21pLmg+CiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKaW5kZXggODU1OTExZS4uODI4NzhlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCmluZGV4IDdiZmY0YjkuLmJlNzhmNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYwppbmRleCBkNzNlMzIyLi42OTIzZTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYwpAQCAtMzIsNiArMzIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKaW5kZXggMDU2YjJhNC4uMGFhMDExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKQEAgLTY4LDExICs2OCwxNiBAQAogCXNwaW5fdW5sb2NrX2lycSgmY2F0YXNfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXBkZXYsICZ0bGlzdCwgY2F0YXNfZXJyLmxpc3QpIHsKKwkJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXYtPnBkZXY7CiAJCXJldCA9IF9fbXRoY2FfcmVzdGFydF9vbmUoZGV2LT5wZGV2KTsKKwkJLyogJ2Rldicgbm93IGlzIG5vdCB2YWxpZCAqLwogCQlpZiAocmV0KQotCQkJbXRoY2FfZXJyKGRldiwgIlJlc2V0IGZhaWxlZCAoJWQpXG4iLCByZXQpOwotCQllbHNlCi0JCQltdGhjYV9kYmcoZGV2LCAiUmVzZXQgc3VjY2VlZGVkXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAibXRoY2EgJXM6IFJlc2V0IGZhaWxlZCAoJWQpXG4iLAorCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCByZXQpOworCQllbHNlIHsKKwkJCXN0cnVjdCBtdGhjYV9kZXYgKmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJCQltdGhjYV9kYmcoZCwgIlJlc2V0IHN1Y2NlZWRlZFxuIik7CisJCX0KIAl9CiAKIAltdXRleF91bmxvY2soJm10aGNhX2RldmljZV9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCmluZGV4IDUzOGU0MDkuLmU1OTNhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCkBAIC0xNTY2LDcgKzE1NjYsNiBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gbmVzX25ldGRldl9jaGFuZ2VfbXR1LAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgCT0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCmluZGV4IDI1ODc0ZmMuLjg3NjNjMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwpAQCAtMzYyLDEyICszNjIsMTkgQEAKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwb2liX2Rldl9wcml2LAogCQkJCQkJICAgY2Fycmllcl9vbl90YXNrKTsKKwlzdHJ1Y3QgaWJfcG9ydF9hdHRyIGF0dHI7CiAKIAkvKgogCSAqIFRha2UgcnRubF9sb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoIGlwb2liX3N0b3AoKSBhbmQKIAkgKiB0dXJuaW5nIHRoZSBjYXJyaWVyIGJhY2sgb24gd2hpbGUgYSBkZXZpY2UgaXMgYmVpbmcKIAkgKiByZW1vdmVkLgogCSAqLworCWlmIChpYl9xdWVyeV9wb3J0KHByaXYtPmNhLCBwcml2LT5wb3J0LCAmYXR0cikgfHwKKwkgICAgYXR0ci5zdGF0ZSAhPSBJQl9QT1JUX0FDVElWRSkgeworCQlpcG9pYl9kYmcocHJpdiwgIktlZXBpbmcgY2FycmllciBvZmYgdW50aWwgSUIgcG9ydCBpcyBhY3RpdmVcbiIpOworCQlyZXR1cm47CisJfQorCiAJcnRubF9sb2NrKCk7CiAJbmV0aWZfY2Fycmllcl9vbihwcml2LT5kZXYpOwogCXJ0bmxfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwppbmRleCAwYmE2ZWM4Li5hZGQ5MTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCSAqIGJlY2F1c2Ugd2UgcHJlYWxsb2NhdGUgc28gbWFueSByZXNvdXJjZXMKIAkgKi8KIAljbHNfc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmlzY3NpX2lzZXJfdHJhbnNwb3J0LCBzaG9zdCwKLQkJCQkJICBJU0NTSV9ERUZfWE1JVF9DTURTX01BWCwKKwkJCQkJICBJU0NTSV9ERUZfWE1JVF9DTURTX01BWCwgMCwKIAkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX2lzZXJfdGFzayksCiAJCQkJCSAgaW5pdGlhbF9jbWRzbiwgMCk7CiAJaWYgKCFjbHNfc2Vzc2lvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCAxMTQ4MTQwLi5kZWU2NzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIEVWREVWX0JVRkZFUl9TSVpFCTY0CiAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMgYi9kcml2ZXJzL2lucHV0L2ZmLWNvcmUuYwppbmRleCA3MmM2M2U1Li4zOGRmODFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2ZmLWNvcmUuYworKysgYi9kcml2ZXJzL2lucHV0L2ZmLWNvcmUuYwpAQCAtMzM3LDE2ICszMzcsMTYgQEAKIAlkZXYtPmZmID0gZmY7CiAJZGV2LT5mbHVzaCA9IGZsdXNoX2VmZmVjdHM7CiAJZGV2LT5ldmVudCA9IGlucHV0X2ZmX2V2ZW50OwotCXNldF9iaXQoRVZfRkYsIGRldi0+ZXZiaXQpOworCV9fc2V0X2JpdChFVl9GRiwgZGV2LT5ldmJpdCk7CiAKIAkvKiBDb3B5ICJ0cnVlIiBiaXRzIGludG8gZmYgZGV2aWNlIGJpdG1hcCAqLwogCWZvciAoaSA9IDA7IGkgPD0gRkZfTUFYOyBpKyspCiAJCWlmICh0ZXN0X2JpdChpLCBkZXYtPmZmYml0KSkKLQkJCXNldF9iaXQoaSwgZmYtPmZmYml0KTsKKwkJCV9fc2V0X2JpdChpLCBmZi0+ZmZiaXQpOwogCiAJLyogd2UgY2FuIGVtdWxhdGUgUlVNQkxFIHdpdGggcGVyaW9kaWMgZWZmZWN0cyAqLwogCWlmICh0ZXN0X2JpdChGRl9QRVJJT0RJQywgZmYtPmZmYml0KSkKLQkJc2V0X2JpdChGRl9SVU1CTEUsIGRldi0+ZmZiaXQpOworCQlfX3NldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzYyLDEyICszNjIsMTQgQEAKICAqLwogdm9pZCBpbnB1dF9mZl9kZXN0cm95KHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKLQljbGVhcl9iaXQoRVZfRkYsIGRldi0+ZXZiaXQpOwotCWlmIChkZXYtPmZmKSB7Ci0JCWlmIChkZXYtPmZmLT5kZXN0cm95KQotCQkJZGV2LT5mZi0+ZGVzdHJveShkZXYtPmZmKTsKLQkJa2ZyZWUoZGV2LT5mZi0+cHJpdmF0ZSk7Ci0JCWtmcmVlKGRldi0+ZmYpOworCXN0cnVjdCBmZl9kZXZpY2UgKmZmID0gZGV2LT5mZjsKKworCV9fY2xlYXJfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KTsKKwlpZiAoZmYpIHsKKwkJaWYgKGZmLT5kZXN0cm95KQorCQkJZmYtPmRlc3Ryb3koZmYpOworCQlrZnJlZShmZi0+cHJpdmF0ZSk7CisJCWtmcmVlKGZmKTsKIAkJZGV2LT5mZiA9IE5VTEw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMgYi9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYwppbmRleCAyZDE0MTVlLi5iNDgzYjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYworKysgYi9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYwpAQCAtNjEsNyArNjEsNiBAQAogCXN0cnVjdCBtbF9lZmZlY3Rfc3RhdGUgc3RhdGVzW0ZGX01FTUxFU1NfRUZGRUNUU107CiAJaW50IGdhaW47CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0Jc3BpbmxvY2tfdCB0aW1lcl9sb2NrOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAogCWludCAoKnBsYXlfZWZmZWN0KShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0zNjgsMzggKzM2NywzOCBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IChzdHJ1Y3QgaW5wdXRfZGV2ICopdGltZXJfZGF0YTsKIAlzdHJ1Y3QgbWxfZGV2aWNlICptbCA9IGRldi0+ZmYtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRlYnVnKCJ0aW1lcjogdXBkYXRpbmcgZWZmZWN0cyIpOwogCi0Jc3Bpbl9sb2NrKCZtbC0+dGltZXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCW1sX3BsYXlfZWZmZWN0cyhtbCk7Ci0Jc3Bpbl91bmxvY2soJm1sLT50aW1lcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIH0KIAorLyoKKyAqIFNldHMgcmVxdWVzdGVkIGdhaW4gZm9yIEZGIGVmZmVjdHMuIENhbGxlZCB3aXRoIGRldi0+ZXZlbnRfbG9jayBoZWxkLgorICovCiBzdGF0aWMgdm9pZCBtbF9mZl9zZXRfZ2FpbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHUxNiBnYWluKQogewogCXN0cnVjdCBtbF9kZXZpY2UgKm1sID0gZGV2LT5mZi0+cHJpdmF0ZTsKIAlpbnQgaTsKIAotCXNwaW5fbG9ja19iaCgmbWwtPnRpbWVyX2xvY2spOwotCiAJbWwtPmdhaW4gPSBnYWluOwogCiAJZm9yIChpID0gMDsgaSA8IEZGX01FTUxFU1NfRUZGRUNUUzsgaSsrKQogCQlfX2NsZWFyX2JpdChGRl9FRkZFQ1RfUExBWUlORywgJm1sLT5zdGF0ZXNbaV0uZmxhZ3MpOwogCiAJbWxfcGxheV9lZmZlY3RzKG1sKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZtbC0+dGltZXJfbG9jayk7CiB9CiAKKy8qCisgKiBTdGFydC9zdG9wIHNwZWNpZmllZCBGRiBlZmZlY3QuIENhbGxlZCB3aXRoIGRldi0+ZXZlbnRfbG9jayBoZWxkLgorICovCiBzdGF0aWMgaW50IG1sX2ZmX3BsYXliYWNrKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGVmZmVjdF9pZCwgaW50IHZhbHVlKQogewogCXN0cnVjdCBtbF9kZXZpY2UgKm1sID0gZGV2LT5mZi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbWxfZWZmZWN0X3N0YXRlICpzdGF0ZSA9ICZtbC0+c3RhdGVzW2VmZmVjdF9pZF07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtbC0+dGltZXJfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHZhbHVlID4gMCkgewogCQlkZWJ1ZygiaW5pdGlhdGVkIHBsYXkiKTsKQEAgLTQyNSw4ICs0MjQsNiBAQAogCQltbF9wbGF5X2VmZmVjdHMobWwpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1sLT50aW1lcl9sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM2LDcgKzQzMyw3IEBACiAJc3RydWN0IG1sX2RldmljZSAqbWwgPSBkZXYtPmZmLT5wcml2YXRlOwogCXN0cnVjdCBtbF9lZmZlY3Rfc3RhdGUgKnN0YXRlID0gJm1sLT5zdGF0ZXNbZWZmZWN0LT5pZF07CiAKLQlzcGluX2xvY2tfYmgoJm1sLT50aW1lcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZkZXYtPmV2ZW50X2xvY2spOwogCiAJaWYgKHRlc3RfYml0KEZGX0VGRkVDVF9TVEFSVEVELCAmc3RhdGUtPmZsYWdzKSkgewogCQlfX2NsZWFyX2JpdChGRl9FRkZFQ1RfUExBWUlORywgJnN0YXRlLT5mbGFncyk7CkBAIC00NDgsNyArNDQ1LDcgQEAKIAkJbWxfc2NoZWR1bGVfdGltZXIobWwpOwogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZtbC0+dGltZXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPmV2ZW50X2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODIsNyArNDc5LDYgQEAKIAltbC0+cHJpdmF0ZSA9IGRhdGE7CiAJbWwtPnBsYXlfZWZmZWN0ID0gcGxheV9lZmZlY3Q7CiAJbWwtPmdhaW4gPSAweGZmZmY7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1sLT50aW1lcl9sb2NrKTsKIAlzZXR1cF90aW1lcigmbWwtPnRpbWVyLCBtbF9lZmZlY3RfdGltZXIsICh1bnNpZ25lZCBsb25nKWRldik7CiAKIAlzZXRfYml0KEZGX0dBSU4sIGRldi0+ZmZiaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IGU4MjhhYWIuLjIyNjZlY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtNzgxLDEwICs3ODIsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAordW5pb24gaW5wdXRfc2VxX3N0YXRlIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBzaG9ydCBwb3M7CisJCWJvb2wgbXV0ZXhfYWNxdWlyZWQ7CisJfTsKKwl2b2lkICpwOworfTsKKwogc3RhdGljIHZvaWQgKmlucHV0X2RldmljZXNfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCkpCi0JCXJldHVybiBOVUxMOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKKwlpbnQgZXJyb3I7CisKKwkvKiBXZSBuZWVkIHRvIGZpdCBpbnRvIHNlcS0+cHJpdmF0ZSBwb2ludGVyICovCisJQlVJTERfQlVHX09OKHNpemVvZih1bmlvbiBpbnB1dF9zZXFfc3RhdGUpICE9IHNpemVvZihzZXEtPnByaXZhdGUpKTsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCk7CisJaWYgKGVycm9yKSB7CisJCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IGZhbHNlOworCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJfQorCisJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gdHJ1ZTsKIAogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmaW5wdXRfZGV2X2xpc3QsICpwb3MpOwogfQpAQCAtNzk0LDkgKzgxNCwxMiBAQAogCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpbnB1dF9kZXZfbGlzdCwgcG9zKTsKIH0KIAotc3RhdGljIHZvaWQgaW5wdXRfZGV2aWNlc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3N0YXRpYyB2b2lkIGlucHV0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKKworCWlmIChzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQpCisJCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBjb25zdCBjaGFyICpuYW1lLApAQCAtODYwLDcgKzg4Myw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlucHV0X2RldmljZXNfc2VxX29wcyA9IHsKIAkuc3RhcnQJPSBpbnB1dF9kZXZpY2VzX3NlcV9zdGFydCwKIAkubmV4dAk9IGlucHV0X2RldmljZXNfc2VxX25leHQsCi0JLnN0b3AJPSBpbnB1dF9kZXZpY2VzX3NlcV9zdG9wLAorCS5zdG9wCT0gaW5wdXRfc2VxX3N0b3AsCiAJLnNob3cJPSBpbnB1dF9kZXZpY2VzX3NlcV9zaG93LAogfTsKIApAQCAtODgwLDQwICs5MDMsNDkgQEAKIAogc3RhdGljIHZvaWQgKmlucHV0X2hhbmRsZXJzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpKQotCQlyZXR1cm4gTlVMTDsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisJaW50IGVycm9yOwogCi0Jc2VxLT5wcml2YXRlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykqcG9zOworCS8qIFdlIG5lZWQgdG8gZml0IGludG8gc2VxLT5wcml2YXRlIHBvaW50ZXIgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSkgIT0gc2l6ZW9mKHNlcS0+cHJpdmF0ZSkpOworCisJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KTsKKwlpZiAoZXJyb3IpIHsKKwkJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gZmFsc2U7CisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwl9CisKKwlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSB0cnVlOworCXN0YXRlLT5wb3MgPSAqcG9zOworCiAJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZpbnB1dF9oYW5kbGVyX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqaW5wdXRfaGFuZGxlcnNfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXNlcS0+cHJpdmF0ZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKCpwb3MgKyAxKTsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfaGFuZGxlcl9saXN0LCBwb3MpOwotfQorCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKIAotc3RhdGljIHZvaWQgaW5wdXRfaGFuZGxlcnNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbXV0ZXhfdW5sb2NrKCZpbnB1dF9tdXRleCk7CisJc3RhdGUtPnBvcyA9ICpwb3MgKyAxOworCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpbnB1dF9oYW5kbGVyX2xpc3QsIHBvcyk7CiB9CiAKIHN0YXRpYyBpbnQgaW5wdXRfaGFuZGxlcnNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIgPSBjb250YWluZXJfb2Yodiwgc3RydWN0IGlucHV0X2hhbmRsZXIsIG5vZGUpOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKIAotCXNlcV9wcmludGYoc2VxLCAiTjogTnVtYmVyPSVsZCBOYW1lPSVzIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcpc2VxLT5wcml2YXRlLCBoYW5kbGVyLT5uYW1lKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk46IE51bWJlcj0ldSBOYW1lPSVzIiwgc3RhdGUtPnBvcywgaGFuZGxlci0+bmFtZSk7CiAJaWYgKGhhbmRsZXItPmZvcHMpCiAJCXNlcV9wcmludGYoc2VxLCAiIE1pbm9yPSVkIiwgaGFuZGxlci0+bWlub3IpOwogCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CiAKIAlyZXR1cm4gMDsKIH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbnB1dF9oYW5kbGVyc19zZXFfb3BzID0gewogCS5zdGFydAk9IGlucHV0X2hhbmRsZXJzX3NlcV9zdGFydCwKIAkubmV4dAk9IGlucHV0X2hhbmRsZXJzX3NlcV9uZXh0LAotCS5zdG9wCT0gaW5wdXRfaGFuZGxlcnNfc2VxX3N0b3AsCisJLnN0b3AJPSBpbnB1dF9zZXFfc3RvcCwKIAkuc2hvdwk9IGlucHV0X2hhbmRsZXJzX3NlcV9zaG93LAogfTsKIApAQCAtMTI2MCwxOSArMTI5MiwyNyBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIElOUFVUX0RPX1RPR0dMRShkZXYsIHR5cGUsIGJpdHMsIG9uKQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJaW50IGk7CQkJCQkJXAotCQlpZiAoIXRlc3RfYml0KEVWXyMjdHlwZSwgZGV2LT5ldmJpdCkpCQlcCi0JCQlicmVhazsJCQkJCVwKLQkJZm9yIChpID0gMDsgaSA8IHR5cGUjI19NQVg7IGkrKykgewkJXAotCQkJaWYgKCF0ZXN0X2JpdChpLCBkZXYtPmJpdHMjI2JpdCkgfHwJXAotCQkJICAgICF0ZXN0X2JpdChpLCBkZXYtPmJpdHMpKQkJXAotCQkJCWNvbnRpbnVlOwkJCVwKLQkJCWRldi0+ZXZlbnQoZGV2LCBFVl8jI3R5cGUsIGksIG9uKTsJXAotCQl9CQkJCQkJXAorI2RlZmluZSBJTlBVVF9ET19UT0dHTEUoZGV2LCB0eXBlLCBiaXRzLCBvbikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaW50IGk7CQkJCQkJCVwKKwkJYm9vbCBhY3RpdmU7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlpZiAoIXRlc3RfYml0KEVWXyMjdHlwZSwgZGV2LT5ldmJpdCkpCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlmb3IgKGkgPSAwOyBpIDwgdHlwZSMjX01BWDsgaSsrKSB7CQkJXAorCQkJaWYgKCF0ZXN0X2JpdChpLCBkZXYtPmJpdHMjI2JpdCkpCQlcCisJCQkJY29udGludWU7CQkJCVwKKwkJCQkJCQkJCVwKKwkJCWFjdGl2ZSA9IHRlc3RfYml0KGksIGRldi0+Yml0cyk7CQlcCisJCQlpZiAoIWFjdGl2ZSAmJiAhb24pCQkJCVwKKwkJCQljb250aW51ZTsJCQkJXAorCQkJCQkJCQkJXAorCQkJZGV2LT5ldmVudChkZXYsIEVWXyMjdHlwZSwgaSwgb24gPyBhY3RpdmUgOiAwKTsJXAorCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBpbnB1dF9kZXZfcmVzZXQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBib29sIGFjdGl2YXRlKQogewogCWlmICghZGV2LT5ldmVudCkKQEAgLTEyODcsNyArMTMyNyw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGlucHV0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSB0b19pbnB1dF9kZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDkwMWIyNTIuLmIxYmQ2ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggMjM4OGNmNS4uNzllM2VkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTE0Myw2ICsxNDMsNyBAQAogCXsgMHgxMmFiLCAweDg4MDksICJYYm94IEREUiBkYW5jZXBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MTQzMCwgMHg0NzQ4LCAiUmVkT2N0YW5lIEd1aXRhciBIZXJvIFgtcGxvcmVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgxNDMwLCAweDg4ODgsICJUWDY1MDArIERhbmNlIFBhZCAoZmlyc3QgZ2VuZXJhdGlvbikiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCisJeyAweDE0NmIsIDB4MDYwMSwgIkJpZ0JlbiBJbnRlcmFjdGl2ZSBYQk9YIDM2MCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgwNDVlLCAweDAyOGUsICJNaWNyb3NvZnQgWC1Cb3ggMzYwIHBhZCIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4MWJhZCwgMHgwMDAzLCAiSGFybW9uaXggUm9jayBCYW5kIERydW1raXQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweGZmZmYsIDB4ZmZmZiwgIkNoaW5lc2UtbWFkZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCkBAIC0yMDksNiArMjEwLDcgQEAKIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MDczOCksCQkvKiBNYWQgQ2F0eiBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MGU2ZiksCQkvKiAweDBlNmYgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDE0MzApLAkJLyogUmVkT2N0YW5lIFgtQm94IDM2MCBjb250cm9sbGVycyAqLworCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxNDZiKSwJCS8qIEJpZ0JlbiBJbnRlcmFjdGl2ZSBDb250cm9sbGVycyAqLwogCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxYmFkKSwJCS8qIFJvY2sgQmFuZCBEcnVtcyAqLwogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCA0NzA5ZTE1Li4yOGU2MTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC0yMzMsNiArMjMzLDcgQEAKICAqLwogc3RhdGljIHZvaWQgKCphdGtiZF9wbGF0Zm9ybV9maXh1cCkoc3RydWN0IGF0a2JkICosIGNvbnN0IHZvaWQgKmRhdGEpOwogc3RhdGljIHZvaWQgKmF0a2JkX3BsYXRmb3JtX2ZpeHVwX2RhdGE7CitzdGF0aWMgdW5zaWduZWQgaW50ICgqYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXApKHN0cnVjdCBhdGtiZCAqLCB1bnNpZ25lZCBpbnQpOwogCiBzdGF0aWMgc3NpemVfdCBhdGtiZF9hdHRyX3Nob3dfaGVscGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLAogCQkJCXNzaXplX3QgKCpoYW5kbGVyKShzdHJ1Y3QgYXRrYmQgKiwgY2hhciAqKSk7CkBAIC0zOTMsNiArMzk0LDkgQEAKIAogCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfUkFXLCBjb2RlKTsKIAorCWlmIChhdGtiZF9wbGF0Zm9ybV9zY2FuY29kZV9maXh1cCkKKwkJY29kZSA9IGF0a2JkX3BsYXRmb3JtX3NjYW5jb2RlX2ZpeHVwKGF0a2JkLCBjb2RlKTsKKwogCWlmIChhdGtiZC0+dHJhbnNsYXRlZCkgewogCiAJCWlmIChhdGtiZC0+ZW11bCB8fCBhdGtiZF9uZWVkX3hsYXRlKGF0a2JkLT54bF9iaXQsIGNvZGUpKSB7CkBAIC01NzQsMTEgKzU3OCwyMiBAQAogCiAJbXV0ZXhfbG9jaygmYXRrYmQtPmV2ZW50X211dGV4KTsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRLQkRfTEVEX0VWRU5UX0JJVCwgJmF0a2JkLT5ldmVudF9tYXNrKSkKLQkJYXRrYmRfc2V0X2xlZHMoYXRrYmQpOworCWlmICghYXRrYmQtPmVuYWJsZWQpIHsKKwkJLyoKKwkJICogU2VyaW8gcG9ydHMgYXJlIHJlc3VtZWQgYXN5bmNocm9ub3VzbHkgc28gd2hpbGUgZHJpdmVyIGNvcmUKKwkJICogdGhpbmtzIHRoYXQgZGV2aWNlIGlzIGFscmVhZHkgZnVsbHkgb3BlcmF0aW9uYWwgaW4gcmVhbGl0eQorCQkgKiBpdCBtYXkgbm90IGJlIHJlYWR5IHlldC4gSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8ga2VlcAorCQkgKiByZXNjaGVkdWxpbmcgdGlsbCByZWNvbm5lY3QgY29tcGxldGVzLgorCQkgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhdGtiZC0+ZXZlbnRfd29yaywKKwkJCQkJbXNlY3NfdG9famlmZmllcygxMDApKTsKKwl9IGVsc2UgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX0xFRF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCisJCQlhdGtiZF9zZXRfbGVkcyhhdGtiZCk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX1JFUF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCi0JCWF0a2JkX3NldF9yZXBlYXRfcmF0ZShhdGtiZCk7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRLQkRfUkVQX0VWRU5UX0JJVCwgJmF0a2JkLT5ldmVudF9tYXNrKSkKKwkJCWF0a2JkX3NldF9yZXBlYXRfcmF0ZShhdGtiZCk7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZhdGtiZC0+ZXZlbnRfbXV0ZXgpOwogfQpAQCAtNzcwLDYgKzc4NSwzMCBAQAogCXJldHVybiAzOwogfQogCitzdGF0aWMgaW50IGF0a2JkX3Jlc2V0X3N0YXRlKHN0cnVjdCBhdGtiZCAqYXRrYmQpCit7CisgICAgICAgIHN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZhdGtiZC0+cHMyZGV2OworCXVuc2lnbmVkIGNoYXIgcGFyYW1bMV07CisKKy8qCisgKiBTZXQgdGhlIExFRHMgdG8gYSBwcmVkZWZpbmVkIHN0YXRlIChhbGwgb2ZmKS4KKyAqLworCisJcGFyYW1bMF0gPSAwOworCWlmIChwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBBVEtCRF9DTURfU0VUTEVEUykpCisJCXJldHVybiAtMTsKKworLyoKKyAqIFNldCBhdXRvcmVwZWF0IHRvIGZhc3Rlc3QgcG9zc2libGUuCisgKi8KKworCXBhcmFtWzBdID0gMDsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgQVRLQkRfQ01EX1NFVFJFUCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGF0a2JkX2FjdGl2YXRlKHN0cnVjdCBhdGtiZCAqYXRrYmQpCiB7CiAJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJmF0a2JkLT5wczJkZXY7CkBAIC04NTIsMjkgKzg5MSw2IEBACiB9OwogCiAvKgotICogSW52ZW50ZWMgc3lzdGVtIHdpdGggYnJva2VuIGtleSByZWxlYXNlIG9uIHZvbHVtZSBrZXlzCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfaW52ZW50ZWNfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewotCTB4YWUsIDB4YjAsIC0xVQotfTsKLQotLyoKLSAqIFBlcmZvcm0gZml4dXAgZm9yIEhQIFBhdmlsaW9uIFpWNjEwMCBsYXB0b3AgdGhhdCBkb2Vzbid0IGdlbmVyYXRlIHJlbGVhc2UKLSAqIGZvciBpdHMgdm9sdW1lIGJ1dHRvbnMKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9ocF96djYxMDBfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewotCTB4YWUsIDB4YjAsIC0xVQotfTsKLQotLyoKLSAqIFBlcmZvcm0gZml4dXAgZm9yIEhQIChDb21wYXEpIFByZXNhcmlvIFI0MDAwIFI0MTAwIFI0MjAwIHRoYXQgZG9uJ3QgZ2VuZXJhdGUKLSAqIHJlbGVhc2UgZm9yIHRoZWlyIHZvbHVtZSBidXR0b25zCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewotCTB4YWUsIDB4YjAsIC0xVQotfTsKLQotLyoKICAqIFNhbXN1bmcgTkMxMCxOQzIwIHdpdGggRm4rRj8ga2V5IHJlbGVhc2Ugbm90IHdvcmtpbmcKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9zYW1zdW5nX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKQEAgLTg4MiwxNCArODk4LDYgQEAKIH07CiAKIC8qCi0gKiBUaGUgdm9sdW1lIHVwIGFuZCB2b2x1bWUgZG93biBzcGVjaWFsIGtleXMgb24gYSBGdWppdHN1IEFtaWxvIFBBIDE1MTAgbGFwdG9wCi0gKiBkbyBub3QgZ2VuZXJhdGUgcmVsZWFzZSBldmVudHMgc28gd2UgaGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfYW1pbG9fcGExNTEwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGIwLCAweGFlLCAtMVUKLX07Ci0KLS8qCiAgKiBBbWlsbyBQaSAzNTI1IGtleSByZWxlYXNlIGZvciBGbitWb2x1bWUga2V5cyBub3Qgd29ya2luZwogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2FtaWxvX3BpMzUyNV9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CkBAIC05MTEsNiArOTE5LDMwIEBACiB9OwogCiAvKgorICogTWFueSBub3RlYm9va3MgZG9uJ3Qgc2VuZCBrZXkgcmVsZWFzZSBldmVudCBmb3Igdm9sdW1lIHVwL2Rvd24KKyAqIGtleXMsIHdpdGgga2V5IGxpc3QgYmVsb3cgY29tbW9uIGFtb25nIHRoZW0KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0geworCTB4YWUsIDB4YjAsIC0xVQorfTsKKworLyoKKyAqIE9RTyAwMSsgbXVsdGltZWRpYSBrZXlzICg2NC0tNjYpIGdlbmVyYXRlIGUwIDZ4IHVwb24gcmVsZWFzZSB3aGVyZWFzCisgKiB0aGV5IHNob3VsZCBiZSBnZW5lcmF0aW5nIGU0LWU2ICgweDgwIHwgY29kZSkuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfb3FvXzAxcGx1c19zY2FuY29kZV9maXh1cChzdHJ1Y3QgYXRrYmQgKmF0a2JkLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBjb2RlKQoreworCWlmIChhdGtiZC0+dHJhbnNsYXRlZCAmJiBhdGtiZC0+ZW11bCA9PSAxICYmCisJICAgIChjb2RlID09IDB4NjQgfHwgY29kZSA9PSAweDY1IHx8IGNvZGUgPT0gMHg2NikpIHsKKwkJYXRrYmQtPmVtdWwgPSAwOworCQljb2RlIHw9IDB4ODA7CisJfQorCisJcmV0dXJuIGNvZGU7Cit9CisKKy8qCiAgKiBhdGtiZF9zZXRfa2V5Y29kZV90YWJsZSgpIGluaXRpYWxpemVzIGtleWJvYXJkJ3Mga2V5Y29kZSB0YWJsZQogICogYWNjb3JkaW5nIHRvIHRoZSBzZWxlY3RlZCBzY2FuY29kZSBzZXQKICAqLwpAQCAtMTA4Nyw2ICsxMTE5LDcgQEAKIAkJfQogCiAJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBhdGtiZF9zZXQsIGF0a2JkX2V4dHJhKTsKKwkJYXRrYmRfcmVzZXRfc3RhdGUoYXRrYmQpOwogCQlhdGtiZF9hY3RpdmF0ZShhdGtiZCk7CiAKIAl9IGVsc2UgewpAQCAtMTE0MSw2ICsxMTc0LDE4IEBACiAJCQlyZXR1cm4gLTE7CiAKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOworCisJCS8qCisJCSAqIFJlc3RvcmUgTEVEIHN0YXRlIGFuZCByZXBlYXQgcmF0ZS4gV2hpbGUgaW5wdXQgY29yZQorCQkgKiB3aWxsIGRvIHRoaXMgZm9yIHVzIGF0IHJlc3VtZSB0aW1lIHJlY29ubmVjdCBtYXkgaGFwcGVuCisJCSAqIGJlY2F1c2UgdXNlciByZXF1ZXN0ZWQgaXQgdmlhIHN5c2ZzIG9yIHNpbXBseSBiZWNhdXNlCisJCSAqIGtleWJvYXJkIHdhcyB1bnBsdWdnZWQgYW5kIHBsdWdnZWQgaW4gYWdhaW4gc28gd2UgbmVlZAorCQkgKiB0byBkbyBpdCBvdXJzZWx2ZXMgaGVyZS4KKwkJICovCisJCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKKwkJaWYgKCFhdGtiZC0+c29mdHJlcGVhdCkKKwkJCWF0a2JkX3NldF9yZXBlYXRfcmF0ZShhdGtiZCk7CisKIAl9CiAKIAlhdGtiZF9lbmFibGUoYXRrYmQpOwpAQCAtMTI2Nyw2ICsxMzEyLDcgQEAKIAogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIGF0a2JkLT5zZXQsIHZhbHVlKTsKKwkJYXRrYmRfcmVzZXRfc3RhdGUoYXRrYmQpOwogCQlhdGtiZF9hY3RpdmF0ZShhdGtiZCk7CiAJCWF0a2JkX3NldF9rZXljb2RlX3RhYmxlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2RldmljZV9hdHRycyhhdGtiZCk7CkBAIC0xMzg4LDYgKzE0MzQsNyBAQAogCiAJCWF0a2JkLT5kZXYgPSBuZXdfZGV2OwogCQlhdGtiZC0+c2V0ID0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgdmFsdWUsIGF0a2JkLT5leHRyYSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfa2V5Y29kZV90YWJsZShhdGtiZCk7CiAJCWF0a2JkX3NldF9kZXZpY2VfYXR0cnMoYXRrYmQpOwpAQCAtMTUxMyw2ICsxNTYwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IGF0a2JkX3NldHVwX3NjYW5jb2RlX2ZpeHVwKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlhdGtiZF9wbGF0Zm9ybV9zY2FuY29kZV9maXh1cCA9IGlkLT5kcml2ZXJfZGF0YTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgYXRrYmRfZG1pX3F1aXJrX3RhYmxlW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS5pZGVudCA9ICJEZWxsIExhcHRvcCIsCkBAIC0xNTQ4LDcgKzE2MDIsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQYXZpbGlvbiBaVjYxMDAiKSwKIAkJfSwKIAkJLmNhbGxiYWNrID0gYXRrYmRfc2V0dXBfZm9yY2VkX3JlbGVhc2UsCi0JCS5kcml2ZXJfZGF0YSA9IGF0a2JkX2hwX3p2NjEwMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkhQIFByZXNhcmlvIFI0MDAwIiwKQEAgLTE1NTcsNyArMTYxMSw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlByZXNhcmlvIFI0MDAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF9yNDAwMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkhQIFByZXNhcmlvIFI0MTAwIiwKQEAgLTE1NjYsNyArMTYyMCw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlByZXNhcmlvIFI0MTAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF9yNDAwMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkhQIFByZXNhcmlvIFI0MjAwIiwKQEAgLTE1NzUsNyArMTYyOSw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlByZXNhcmlvIFI0MjAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF9yNDAwMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkludmVudGVjIFN5bXBob255IiwKQEAgLTE1ODQsNyArMTYzOCw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlNZTVBIT05ZIDYuMC83LjAiKSwKIAkJfSwKIAkJLmNhbGxiYWNrID0gYXRrYmRfc2V0dXBfZm9yY2VkX3JlbGVhc2UsCi0JCS5kcml2ZXJfZGF0YSA9IGF0a2JkX2ludmVudGVjX2ZvcmNlZF9yZWxlYXNlX2tleXMsCisJCS5kcml2ZXJfZGF0YSA9IGF0a2JkX3ZvbHVtZV9mb3JjZWRfcmVsZWFzZV9rZXlzLAogCX0sCiAJewogCQkuaWRlbnQgPSAiU2Ftc3VuZyBOQzEwIiwKQEAgLTE2MjAsNyArMTY3NCw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFBhIDE1MTAiKSwKIAkJfSwKIAkJLmNhbGxiYWNrID0gYXRrYmRfc2V0dXBfZm9yY2VkX3JlbGVhc2UsCi0JCS5kcml2ZXJfZGF0YSA9IGF0a2JkX2FtaWxvX3BhMTUxMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkZ1aml0c3UgQW1pbG8gUGkgMzUyNSIsCkBAIC0xNjQ5LDYgKzE3MDMsMTUgQEAKIAkJLmNhbGxiYWNrID0gYXRrYmRfc2V0dXBfZm9yY2VkX3JlbGVhc2UsCiAJCS5kcml2ZXJfZGF0YSA9IGF0a2RiX3NvbHRlY2hfdGExMl9mb3JjZWRfcmVsZWFzZV9rZXlzLAogCX0sCisJeworCQkuaWRlbnQgPSAiT1FPIE1vZGVsIDAxKyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiT1FPIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlpFUFRPIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX3NjYW5jb2RlX2ZpeHVwLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9vcW9fMDFwbHVzX3NjYW5jb2RlX2ZpeHVwLAorCX0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwppbmRleCBhODhhZmYzLi43N2QxMzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCQl9CiAKIAkJZXJyb3IgPSByZXF1ZXN0X2lycShpcnEsIGdwaW9fa2V5c19pc3IsCisJCQkJICAgIElSUUZfU0hBUkVEIHwKIAkJCQkgICAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJCSAgICBidXR0b24tPmRlc2MgPyBidXR0b24tPmRlc2MgOiAiZ3Bpb19rZXlzIiwKIAkJCQkgICAgYmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKaW5kZXggZTlkNjM5ZS4uNWY3MjQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2lmZGVmIENPTkZJR19IUDMwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKaW5kZXggNDcyYjU2Ni4uYTk5YTA0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCkBAIC0yNyw2ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCmluZGV4IDAyZjRmOGYuLmE5YmIyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCkBAIC0yMjcsNiArMjI3LDcgQEAKIAlkZXBlbmRzIG9uIFg4NiAmJiBQTlAKIAlzZWxlY3QgTkVXX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUworCXNlbGVjdCBMRURTX1RSSUdHRVJTCiAJc2VsZWN0IEJJVFJFVkVSU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSVIgcmVtb3RlIGZ1bmN0aW9uYWxpdHkgZm91bmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCmluZGV4IDIxNmE1NTkuLmVhODIxYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKIC8qIFJlYWQgdGhlIGk4MDQyIGZhc3QgaGFuZHNoYWtlIHRpbWVyICovCiBzdGF0aWMgaW5saW5lIGludCBocF9zZGNfcnRjX3JlYWRfZmhzKHN0cnVjdCB0aW1ldmFsICpyZXMpIHsKLQl1aW50NjRfdCByYXc7CisJaW50NjRfdCByYXc7CiAJdW5zaWduZWQgaW50IHRlbm1zOwogCiAJcmF3ID0gaHBfc2RjX3J0Y19yZWFkX2k4MDQydGltZXIoSFBfU0RDX0NNRF9MT0FEX0ZIUywgMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCmluZGV4IGM4MDZmYmYuLjNiOWY1ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCkBAIC0xMDYsOCArMTA2LDggQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAlpbnQgZXJyOwogCi0JaWYgKCFwZGF0YSB8fCAhcGRhdGEtPnN0ZXBzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgcGxhdGZvcm0gZGF0YVxuIik7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYwppbmRleCBjNGY0MjMxLi5iMDY0NDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3NwYXJjc3Brci5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGJiY19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiYmNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogewogCXN0cnVjdCBzcGFyY3Nwa3Jfc3RhdGUgKnN0YXRlID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBzdGF0ZS0+aW5wdXRfZGV2OwpAQCAtMzA4LDcgKzMwOCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBncm92ZXJfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQorc3RhdGljIGludCBfX2RldmV4aXQgZ3JvdmVyX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKIAlzdHJ1Y3Qgc3BhcmNzcGtyX3N0YXRlICpzdGF0ZSA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CiAJc3RydWN0IGdyb3Zlcl9iZWVwX2luZm8gKmluZm8gPSAmc3RhdGUtPnUuZ3JvdmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCmluZGV4IGM1YTQ5YWJhLi5kM2Y1NzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKgkJLSBmaXJzdCBwdWJsaWMgdmVyc2lvbgogICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAxMWZkMDM4Li5hOTMyMTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC05MzYsNiArOTM2LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiTWVkaW9uIE1EIDQyMjAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNZWRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiV0lNIDIwMzAiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2ZzX2FtaWxvX3Byb192MjAwMAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKIAkJLmlkZW50ID0gIk1lZGlvbiBNRCA5NjUwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUVESU9OUEMiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwppbmRleCA1ZTYzMDg2Li44MjgxMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCkBAIC0xMDcsOCArMTA3LDcgQEAKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNGLTcyIiksCiAJCX0sCi0JCS5jYWxsYmFjayA9IGxpZmVib29rX3NldF9zZXJpb19waHlzLAotCQkuZHJpdmVyX2RhdGEgPSAiaXNhMDA2MC9zZXJpbzMiLAorCQkuY2FsbGJhY2sgPSBsaWZlYm9va19zZXRfNmJ5dGVfcHJvdG8sCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IGRlNzQ1ZDcuLmFiNWRjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQkJUFMyUFBfV0hFRUwgfCBQUzJQUF9TSURFX0JUTiB8IFBTMlBQX1RBU0tfQlROIHwKIAkJCQlQUzJQUF9FWFRSQV9CVE4gfCBQUzJQUF9OQVZfQlROIHwgUFMyUFBfSFdIRUVMIH0sCiAJCXsgNzIsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCTAgfSwJCQkvKiBULUNIMTE6IFRyYWNrTWFuIE1hcmJsZSAqLwotCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCisJCXsgNzMsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1NJREVfQlROIH0sCS8qIFRyYWNrTWFuIEZYICovCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA2OTBhZWQ5Li4wN2M1Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogc3RhdGljIGludCBwc21vdXNlX2V4dGVuc2lvbnMoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X3Byb3RvLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewotCWJvb2wgc3luYXB0aWNzX2hhcmR3YXJlID0gdHJ1ZTsKKwlib29sIHN5bmFwdGljc19oYXJkd2FyZSA9IGZhbHNlOwogCiAvKgogICogV2UgYWx3YXlzIGNoZWNrIGZvciBsaWZlYm9vayBiZWNhdXNlIGl0IGRvZXMgbm90IGRpc3R1cmIgbW91c2UKQEAgLTE2NzMsNyArMTY3Myw3IEBACiB7CiAJaW50IHR5cGUgPSAqKCh1bnNpZ25lZCBpbnQgKilrcC0+YXJnKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwc21vdXNlX3Byb3RvY29sX2J5X3R5cGUodHlwZSktPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzIiwgcHNtb3VzZV9wcm90b2NvbF9ieV90eXBlKHR5cGUpLT5uYW1lKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcHNtb3VzZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBiNjZmZjFhLi5mNGE2MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY1Miw2ICs2NTIsMTYgQEAKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUE9SVEVHRSBNMzAwIiksCiAJCX0sCisKKwl9LAorCXsKKwkJLmlkZW50ID0gIlRvc2hpYmEgUG9ydGVnZSBNMzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJUT1NISUJBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBvcnRhYmxlIFBDIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIlZlcnNpb24gMS4wIiksCisJCX0sCisKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCA5NjZiODg2Li5hMTNkODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIE1PVVNFREVWX01JTk9SUwkJMzIKICNkZWZpbmUgTU9VU0VERVZfTUlYCQkzMQogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKaW5kZXggYzRiM2ZiZC4uYWE1MzNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIGNvbmZpZyBTRVJJTwogCXRyaXN0YXRlICJTZXJpYWwgSS9PIHN1cHBvcnQiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFllcyBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgdGhhdCB1c2VzIHNlcmlhbCBJL08gdG8KIAkgIGNvbW11bmljYXRlIHdpdGggdGhlIHN5c3RlbS4gVGhpcyBpbmNsdWRlcyB0aGUKIAkgIAkJKiBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSAqCkBAIC0yMiw3ICsyMiw3IEBACiAJdHJpc3RhdGUgImk4MDQyIFBDIEtleWJvYXJkIGNvbnRyb2xsZXIiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uICFQQVJJU0MgJiYgKCFBUk0gfHwgQVJDSF9TSEFSSyB8fCBGT09UQlJJREdFX0hPU1QpICYmICFNNjhLICYmICFCTEFDS0ZJTgotCS0tLWhlbHAtLS0KKwloZWxwCiAJICBpODA0MiBpcyB0aGUgY2hpcCBvdmVyIHdoaWNoIHRoZSBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMgogCSAgbW91c2UgYXJlIGNvbm5lY3RlZCB0byB0aGUgY29tcHV0ZXIuIElmIHlvdSB1c2UgdGhlc2UgZGV2aWNlcywKIAkgIHlvdSdsbCBuZWVkIHRvIHNheSBZIGhlcmUuCkBAIC0zNSw3ICszNSw3IEBACiBjb25maWcgU0VSSU9fU0VSUE9SVAogCXRyaXN0YXRlICJTZXJpYWwgcG9ydCBsaW5lIGRpc2NpcGxpbmUiCiAJZGVmYXVsdCB5Ci0JLS0taGVscC0tLQorCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHBsYW4gdG8gdXNlIGFuIGlucHV0IGRldmljZSAobW91c2UsIGpveXN0aWNrLAogCSAgdGFibGV0LCA2ZG9mKSB0aGF0IGNvbW11bmljYXRlcyBvdmVyIHRoZSBSUzIzMiBzZXJpYWwgKENPTSkgcG9ydC4KIApAQCAtNDksNyArNDksNyBAQAogY29uZmlnIFNFUklPX0NUODJDNzEwCiAJdHJpc3RhdGUgImN0ODJjNzEwIEF1eCBwb3J0IGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBYODYKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRleGFzIEluc3RydW1lbnRzIFRyYXZlbE1hdGUgbm90ZWJvb2sKIAkgIGVxdWlwcGVkIHdpdGggdGhlIGN0ODJjNzEwIGNoaXAgYW5kIHdhbnQgdG8gdXNlIGEgbW91c2UgY29ubmVjdGVkCiAJICB0byB0aGUgIlF1aWNrUG9ydCIuCkBAIC02Niw3ICs2Niw3IEBACiBjb25maWcgU0VSSU9fUEFSS0JECiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQga2V5Ym9hcmQgYWRhcHRlciIKIAlkZXBlbmRzIG9uIFBBUlBPUlQKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYnVpbHQgYSBzaW1wbGUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyIHRvIGF0dGFjaAogCSAgYW4gYWRkaXRpb25hbCBBVCBrZXlib2FyZCwgWFQga2V5Ym9hcmQgb3IgUFMvMiBtb3VzZS4KIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJdHJpc3RhdGUgIkhQIFN5c3RlbSBEZXZpY2UgQ29udHJvbGxlciBpODA0MiBTdXBwb3J0IgogCWRlcGVuZHMgb24gKEdTQyB8fCBIUDMwMCkgJiYgU0VSSU8KIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgIlN5c3RlbSBEZXZpY2UKIAkgIENvbnRyb2xsZXIiLCBhbiBpODA0MiBjYXJyeWluZyBtaWNyb2NvZGUgdG8gbWFuYWdlIGEKIAkgIGZldyBtaXNjZWxsYW5lb3VzIGRldmljZXMgb24gc29tZSBIZXdsZXR0IFBhY2thcmQgc3lzdGVtcy4KQEAgLTE2OCw2ICsxNjgsNyBAQAogCiBjb25maWcgU0VSSU9fTElCUFMyCiAJdHJpc3RhdGUgIlBTLzIgZHJpdmVyIGxpYnJhcnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBTRVJJT19JODA0MiB8fCBTRVJJT19JODA0Mj1uCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGEgZHJpdmVyIGZvciBkZXZpY2UgY29ubmVjdGVkCiAJICB0byBhIFBTLzIgcG9ydCwgc3VjaCBhcyBQUy8yIG1vdXNlIG9yIHN0YW5kYXJkIEFUIGtleWJvYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYTM5YmM0ZS4uYTUzNzkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0zMjcsNiArMzI3LDE3IEBACiAJCX0sCiAJfSwKIAl7CisJCS8qCisJCSAqIFJlc2V0IGFuZCBHRVQgSUQgY29tbWFuZHMgaXNzdWVkIHZpYSBLQkQgcG9ydCBhcmUKKwkJICogc29tZXRpbWVzIGJlaW5nIGRlbGl2ZXJlZCB0byBBVVgzLgorCQkgKi8KKwkJLmlkZW50ID0gIlNvbnkgVmFpbyBGWi0yNDBFIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1GWjI0MEUiKSwKKwkJfSwKKwl9LAorCXsKIAkJLmlkZW50ID0gIkFtb2kgTTYzNi9BNzM3IiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBbW9pIEVsZWN0cm9uaWNzIENPLixMVEQuIiksCkBAIC02NjEsNyArNjcyLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX3BucF9pbml0KHZvaWQpCiB7CiAJY2hhciBrYmRfaXJxX3N0cls0XSA9IHsgMCB9LCBhdXhfaXJxX3N0cls0XSA9IHsgMCB9OwotCWludCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKKwlib29sIHBucF9kYXRhX2J1c3RlZCA9IGZhbHNlOwogCWludCBlcnI7CiAKICNpZmRlZiBDT05GSUdfWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggYmM1NmU1Mi4uMWRmMDJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtNjA5LDYgKzYwOSw4IEBACiAJc3RyID0gaTgwNDJfcmVhZF9zdGF0dXMoKTsKIAlpZiAoc3RyICYgSTgwNDJfU1RSX09CRikgewogCQlkYXRhID0gaTgwNDJfcmVhZF9kYXRhKCk7CisJCWRiZygiJTAyeCA8LSBpODA0MiAoYXV4X3Rlc3RfaXJxLCAlcykiLAorCQkJZGF0YSwgc3RyICYgSTgwNDJfU1RSX0FVWERBVEEgPyAiYXV4IiA6ICJrYmQiKTsKIAkJaWYgKGk4MDQyX2lycV9iZWluZ190ZXN0ZWQgJiYKIAkJICAgIGRhdGEgPT0gMHhhNSAmJiAoc3RyICYgSTgwNDJfU1RSX0FVWERBVEEpKQogCQkJY29tcGxldGUoJmk4MDQyX2F1eF9pcnFfZGVsaXZlcmVkKTsKQEAgLTc1MCw2ICs3NTIsNyBAQAogICogQVVYIElSUSB3YXMgbmV2ZXIgZGVsaXZlcmVkIHNvIHdlIG5lZWQgdG8gZmx1c2ggdGhlIGNvbnRyb2xsZXIgdG8KICAqIGdldCByaWQgb2YgdGhlIGJ5dGUgd2UgcHV0IHRoZXJlOyBvdGhlcndpc2Uga2V5Ym9hcmQgbWF5IG5vdCB3b3JrLgogICovCisJCWRiZygiICAgICAtLSBpODA0MiAoYXV4IGlycSB0ZXN0IHRpbWVvdXQpIik7CiAJCWk4MDQyX2ZsdXNoKCk7CiAJCXJldHZhbCA9IC0xOwogCX0KQEAgLTgzMywxNyArODM2LDMyIEBACiBzdGF0aWMgaW50IGk4MDQyX2NvbnRyb2xsZXJfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG4gPSAwOworCXVuc2lnbmVkIGNoYXIgY3RyWzJdOwogCiAvKgotICogU2F2ZSB0aGUgQ1RSIGZvciByZXN0b3JhbCBvbiB1bmxvYWQgLyByZWJvb3QuCisgKiBTYXZlIHRoZSBDVFIgZm9yIHJlc3RvcmUgb24gdW5sb2FkIC8gcmVib290LgogICovCiAKLQlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1JDVFIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaTgwNDIuYzogQ2FuJ3QgcmVhZCBDVFIgd2hpbGUgaW5pdGlhbGl6aW5nIGk4MDQyLlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlkbyB7CisJCWlmIChuID49IDEwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiaTgwNDIuYzogVW5hYmxlIHRvIGdldCBzdGFibGUgQ1RSIHJlYWQuXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAKLQlpODA0Ml9pbml0aWFsX2N0ciA9IGk4MDQyX2N0cjsKKwkJaWYgKG4gIT0gMCkKKwkJCXVkZWxheSg1MCk7CisKKwkJaWYgKGk4MDQyX2NvbW1hbmQoJmN0cltuKysgJSAyXSwgSTgwNDJfQ01EX0NUTF9SQ1RSKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImk4MDQyLmM6IENhbid0IHJlYWQgQ1RSIHdoaWxlIGluaXRpYWxpemluZyBpODA0Mi5cbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCX0gd2hpbGUgKG4gPCAyIHx8IGN0clswXSAhPSBjdHJbMV0pOworCisJaTgwNDJfaW5pdGlhbF9jdHIgPSBpODA0Ml9jdHIgPSBjdHJbMF07CiAKIC8qCiAgKiBEaXNhYmxlIHRoZSBrZXlib2FyZCBpbnRlcmZhY2UgYW5kIGludGVycnVwdC4KQEAgLTg5Miw2ICs5MTAsMTIgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCisvKgorICogRmx1c2ggd2hhdGV2ZXIgYWNjdW11bGF0ZWQgd2hpbGUgd2Ugd2VyZSBkaXNhYmxpbmcga2V5Ym9hcmQgcG9ydC4KKyAqLworCisJaTgwNDJfZmx1c2goKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05MTEsNyArOTM1LDcgQEAKIAlpODA0Ml9jdHIgfD0gSTgwNDJfQ1RSX0tCRERJUyB8IEk4MDQyX0NUUl9BVVhESVM7CiAJaTgwNDJfY3RyICY9IH4oSTgwNDJfQ1RSX0tCRElOVCB8IEk4MDQyX0NUUl9BVVhJTlQpOwogCi0JaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2luaXRpYWxfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQorCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImk4MDQyLmM6IENhbid0IHdyaXRlIENUUiB3aGlsZSByZXNldHRpbmcuXG4iKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCmluZGV4IDc2OWJhNjUuLmYzODc2YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKaW5kZXggYjAzMDA5Yi4uMjdmZGFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCkBAIC05LDYgKzksNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCmluZGV4IGI5Njk0YjYuLjZkMzQ1MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCmluZGV4IGYwNjMzMmMuLmMyMWU2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAJCWtmcmVlKHRzKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGFkNzg3OV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKQEAgLTczMiw3ICs3MzIsNyBAQAogCQlrZnJlZSh0cyk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZDc4NzlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYwppbmRleCA1N2QyNjM2Li5kYzUwNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYwppbmRleCA4YjI1NmE2Li4zNjk3YzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYworKysgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuaWYuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgImlzZG5fZGl2ZXJ0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMKaW5kZXggZDMwY2U1Yi4uODVhOGZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYwpAQCAtMTAsNiArMTAsNyBAQAogICoKICAqLwogIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2RubDEuaCIKICNpbmNsdWRlICJpc2FjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMKaW5kZXggNWM0NmE3MS4uOGQyMmY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImhmY18yYmRzMC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKaW5kZXggZDExMGE3Ny4uMTA5MTQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiaGZjX3BjaS5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKIHN0YXRpYyBjb25zdCBjaGFyICpoZmNwY2lfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjQ4LjIuNCAkIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKaW5kZXggOGY5ZjQ5MS4uOTBiMzVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKaW5kZXggODk5MWQyYy4uOGJjYWUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlICJoeXNkbl9kZWZzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMKaW5kZXggOGM2NmJjYi4uMTIzYzFkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2Rydi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jIGIvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCmluZGV4IGUwNzVlOGQuLjMwZjBmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYworKysgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3NjL2luaXQuYyBiL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKaW5kZXggZGQwYWNkMC4uNWEwNzc0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3NjL2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaW5jbHVkZXMuaCIKICNpbmNsdWRlICJoYXJkd2FyZS5oIgogI2luY2x1ZGUgImNhcmQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggN2M4ZTcxMi4uZTRmNTk5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTE1MCw5ICsxNTAsOSBAQAogCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgTi5TLiBMUDM5NDQgKEZ1biBMaWdodCkgSTJDIGNoaXAiCiAJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIEkyQwogCWhlbHAKLSAgICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIExFRHMgY29ubmVjdGVkIHRvIHRoZSBOYXRpb25hbAotICAgIFNlbWljb25kdWN0b3IgTFAzOTQ0IExpZ2h0aW5nIE1hbmFnZW1lbnQgVW5pdCAoTE1VKSBhbHNvIGtub3duIGFzCi0gICAgRnVuIExpZ2h0IENoaXAuCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIExFRHMgY29ubmVjdGVkIHRvIHRoZSBOYXRpb25hbAorCSAgU2VtaWNvbmR1Y3RvciBMUDM5NDQgTGlnaHRpbmcgTWFuYWdlbWVudCBVbml0IChMTVUpIGFsc28ga25vd24gYXMKKwkgIEZ1biBMaWdodCBDaGlwLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsZWRzLWxwMzk0NC4KQEAgLTE5NSw2ICsxOTUsMTMgQEAKIAkgIExFRCBkcml2ZXIgY2hpcHMgYWNjZXNzZWQgdmlhIHRoZSBJMkMgYnVzLiAgU3VwcG9ydGVkCiAJICBkZXZpY2VzIGluY2x1ZGUgUENBOTU1MCwgUENBOTU1MSwgUENBOTU1MiwgYW5kIFBDQTk1NTMuCiAKK2NvbmZpZyBMRURTX1dNODMxWF9TVEFUVVMKKwl0cmlzdGF0ZSAiTEVEIHN1cHBvcnQgZm9yIHN0YXR1cyBMRURzIG9uIFdNODMxeCBQTUlDcyIKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEX1dNODMxWAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHN0YXR1cyBMRURzIG9mIHRoZSBXTTgzMXgKKyAgICAgICAgICBzZXJpZXMgb2YgUE1JQ3MuCisKIGNvbmZpZyBMRURTX1dNODM1MAogCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgV004MzUwIEF1ZGlvUGx1cyBQTUlDIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBNRkRfV004MzUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKaW5kZXggZThjZGNmNy4uNDZkNzI3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogb2JqLSQoQ09ORklHX0xFRFNfRlNHKQkJCSs9IGxlZHMtZnNnLm8KIG9iai0kKENPTkZJR19MRURTX1BDQTk1NVgpCQkrPSBsZWRzLXBjYTk1NXgubwogb2JqLSQoQ09ORklHX0xFRFNfREE5MDNYKQkJKz0gbGVkcy1kYTkwM3gubworb2JqLSQoQ09ORklHX0xFRFNfV004MzFYX1NUQVRVUykJKz0gbGVkcy13bTgzMXgtc3RhdHVzLm8KIG9iai0kKENPTkZJR19MRURTX1dNODM1MCkJCSs9IGxlZHMtd204MzUwLm8KIG9iai0kKENPTkZJR19MRURTX1BXTSkJCQkrPSBsZWRzLXB3bS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNsZXZvLW1haWwuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNsZXZvLW1haWwuYwppbmRleCBmMjI0MmRiLi5hNDk4MTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY2xldm8tbWFpbC5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkuZmxhZ3MJCQk9IExFRF9DT1JFX1NVU1BFTkRSRVNVTUUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBjbGV2b19tYWlsX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgY2xldm9fbWFpbF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlyZXR1cm4gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZjbGV2b19tYWlsX2xlZCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYwppbmRleCAwNTlhYTI5Li44ODE2ODA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgcXViZV9mcm9udF9sZWQgPSB7Ci0JLm5hbWUJCQk9ICJxdWJlLWZyb250IiwKKwkubmFtZQkJCT0gInF1YmU6OmZyb250IiwKIAkuYnJpZ2h0bmVzcwkJPSBMRURfRlVMTCwKIAkuYnJpZ2h0bmVzc19zZXQJCT0gcXViZV9mcm9udF9sZWRfc2V0LAogCS5kZWZhdWx0X3RyaWdnZXIJPSAiaWRlLWRpc2siLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jCmluZGV4IDVmMWNlODEuLmRlZmMyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgcmFxX3dlYl9sZWQgPSB7Ci0JLm5hbWUJCT0gInJhcS13ZWIiLAorCS5uYW1lCQk9ICJyYXE6OndlYiIsCiAJLmJyaWdodG5lc3Nfc2V0CT0gcmFxX3dlYl9sZWRfc2V0LAogfTsKIApAQCAtNzAsNyArNzAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiByYXFfcG93ZXJfb2ZmX2xlZCA9IHsKLQkubmFtZQkJCT0gInJhcS1wb3dlci1vZmYiLAorCS5uYW1lCQkJPSAicmFxOjpwb3dlci1vZmYiLAogCS5icmlnaHRuZXNzX3NldAkJPSByYXFfcG93ZXJfb2ZmX2xlZF9zZXQsCiAJLmRlZmF1bHRfdHJpZ2dlcgk9ICJwb3dlci1vZmYiLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYwppbmRleCA2YjA2NjM4Li5lNTIyNWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtZ3Bpby5jCkBAIC03OCw5ICs3OCwxMSBAQAogewogCWludCByZXQsIHN0YXRlOwogCisJbGVkX2RhdC0+Z3BpbyA9IC0xOworCiAJLyogc2tpcCBsZWRzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSAqLwogCWlmICghZ3Bpb19pc192YWxpZCh0ZW1wbGF0ZS0+Z3BpbykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU2tpcHBpbmcgdW5hdmlsYWJsZSBMRUQgZ3BpbyAlZCAoJXMpXG4iLCAKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU2tpcHBpbmcgdW5hdmFpbGFibGUgTEVEIGdwaW8gJWQgKCVzKVxuIiwKIAkJCQl0ZW1wbGF0ZS0+Z3BpbywgdGVtcGxhdGUtPm5hbWUpOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKaW5kZXggZGJhODkyMS4uYWRjNTYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYwpAQCAtMTksOSArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMtcGNhOTUzMi5oPgogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAvKjB4NjAsKi8gSTJDX0NMSUVOVF9FTkR9OwotSTJDX0NMSUVOVF9JTlNNT0RfMShwY2E5NTMyKTsKLQogI2RlZmluZSBQQ0E5NTMyX1JFR19QU0MoaSkgKDB4MisoaSkqMikKICNkZWZpbmUgUENBOTUzMl9SRUdfUFdNKGkpICgweDMrKGkpKjIpCiAjZGVmaW5lIFBDQTk1MzJfUkVHX0xTMCAgMHg2CkBAIC0zNCw3ICszMSw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgcGNhOTUzMl9sZWQgbGVkc1sxNl07CiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwotCXN0cnVjdCBpbnB1dF9kZXYgICAgKmlkZXY7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAl1OCBwd21bMl07CiAJdTggcHNjWzJdOwpAQCAtNTMsOSArNTAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcGNhOTUzMl9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgICA9ICJwY2E5NTMyIiwKKwkJLm5hbWUgPSAicGNhOTUzMiIsCiAJfSwKLQkucHJvYmUgID0gcGNhOTUzMl9wcm9iZSwKKwkucHJvYmUgPSBwY2E5NTMyX3Byb2JlLAogCS5yZW1vdmUgPSBwY2E5NTMyX3JlbW92ZSwKIAkuaWRfdGFibGUgPSBwY2E5NTMyX2lkLAogfTsKQEAgLTE0OSw3ICsxNDYsNyBAQAogCiAJaWYgKCpkZWxheV9vbiA9PSAwICYmICpkZWxheV9vZmYgPT0gMCkgewogCS8qIGxlZCBzdWJzeXN0ZW0gYXNrIHVzIGZvciBhIGJsaW5rIHJhdGUgKi8KLQkJKmRlbGF5X29uICA9IDEwMDA7CisJCSpkZWxheV9vbiA9IDEwMDA7CiAJCSpkZWxheV9vZmYgPSAxMDAwOwogCX0KIAlpZiAoKmRlbGF5X29uICE9ICpkZWxheV9vZmYgfHwgKmRlbGF5X29uID4gMTY5MCB8fCAqZGVsYXlfb24gPCA2KQpAQCAtMjI3LDcgKzIyNCw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBQQ0E5NTMyX1RZUEVfTEVEOgogCQkJbGVkLT5zdGF0ZSA9IHBsZWQtPnN0YXRlOwotCQkJbGVkLT5uYW1lID0gIHBsZWQtPm5hbWU7CisJCQlsZWQtPm5hbWUgPSBwbGVkLT5uYW1lOwogCQkJbGVkLT5sZGV2Lm5hbWUgPSBsZWQtPm5hbWU7CiAJCQlsZWQtPmxkZXYuYnJpZ2h0bmVzcyA9IExFRF9PRkY7CiAJCQlsZWQtPmxkZXYuYnJpZ2h0bmVzc19zZXQgPSBwY2E5NTMyX3NldF9icmlnaHRuZXNzOwpAQCAtMjU0LDcgKzI1MSw3IEBACiAJCQlkYXRhLT5pZGV2LT5uYW1lID0gcGxlZC0+bmFtZTsKIAkJCWRhdGEtPmlkZXYtPnBoeXMgPSAiaTJjL3BjYTk1MzIiOwogCQkJZGF0YS0+aWRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCQkJZGF0YS0+aWRldi0+aWQudmVuZG9yICA9IDB4MDAxZjsKKwkJCWRhdGEtPmlkZXYtPmlkLnZlbmRvciA9IDB4MDAxZjsKIAkJCWRhdGEtPmlkZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CiAJCQlkYXRhLT5pZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCQkJZGF0YS0+aWRldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9TTkQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtd204MzF4LXN0YXR1cy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtd204MzF4LXN0YXR1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODZkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy13bTgzMXgtc3RhdHVzLmMKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBMRUQgZHJpdmVyIGZvciBXTTgzMXggc3RhdHVzIExFRHMKKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvcGRhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L3N0YXR1cy5oPgorCisKK3N0cnVjdCB3bTgzMXhfc3RhdHVzIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7CisJc3RydWN0IHdtODMxeCAqd204MzF4OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBtdXRleCBtdXRleDsKKworCXNwaW5sb2NrX3QgdmFsdWVfbG9jazsKKwlpbnQgcmVnOyAgICAgLyogQ29udHJvbCByZWdpc3RlciAqLworCWludCByZWdfdmFsOyAvKiBDb250cm9sIHJlZ2lzdGVyIHZhbHVlICovCisKKwlpbnQgYmxpbms7CisJaW50IGJsaW5rX3RpbWU7CisJaW50IGJsaW5rX2N5YzsKKwlpbnQgc3JjOworCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzczsKK307CisKKyNkZWZpbmUgdG9fd204MzF4X3N0YXR1cyhsZWRfY2RldikgXAorCWNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IHdtODMxeF9zdGF0dXMsIGNkZXYpCisKK3N0YXRpYyB2b2lkIHdtODMxeF9zdGF0dXNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmxlZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd204MzF4X3N0YXR1cywKKwkJCQkJCSB3b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmbGVkLT5tdXRleCk7CisKKwlsZWQtPnJlZ192YWwgJj0gfihXTTgzMVhfTEVEX1NSQ19NQVNLIHwgV004MzFYX0xFRF9NT0RFX01BU0sgfAorCQkJICBXTTgzMVhfTEVEX0RVVFlfQ1lDX01BU0sgfCBXTTgzMVhfTEVEX0RVUl9NQVNLKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsZWQtPnZhbHVlX2xvY2ssIGZsYWdzKTsKKworCWxlZC0+cmVnX3ZhbCB8PSBsZWQtPnNyYyA8PCBXTTgzMVhfTEVEX1NSQ19TSElGVDsKKwlpZiAobGVkLT5ibGluaykgeworCQlsZWQtPnJlZ192YWwgfD0gMiA8PCBXTTgzMVhfTEVEX01PREVfU0hJRlQ7CisJCWxlZC0+cmVnX3ZhbCB8PSBsZWQtPmJsaW5rX3RpbWUgPDwgV004MzFYX0xFRF9EVVJfU0hJRlQ7CisJCWxlZC0+cmVnX3ZhbCB8PSBsZWQtPmJsaW5rX2N5YzsKKwl9IGVsc2UgeworCQlpZiAobGVkLT5icmlnaHRuZXNzICE9IExFRF9PRkYpCisJCQlsZWQtPnJlZ192YWwgfD0gMSA8PCBXTTgzMVhfTEVEX01PREVfU0hJRlQ7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7CisKKwl3bTgzMXhfcmVnX3dyaXRlKGxlZC0+d204MzF4LCBsZWQtPnJlZywgbGVkLT5yZWdfdmFsKTsKKworCW11dGV4X3VubG9jaygmbGVkLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODMxeF9zdGF0dXNfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqbGVkID0gdG9fd204MzF4X3N0YXR1cyhsZWRfY2Rldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsZWQtPnZhbHVlX2xvY2ssIGZsYWdzKTsKKwlsZWQtPmJyaWdodG5lc3MgPSB2YWx1ZTsKKwlpZiAodmFsdWUgPT0gTEVEX09GRikKKwkJbGVkLT5ibGluayA9IDA7CisJc2NoZWR1bGVfd29yaygmbGVkLT53b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZWQtPnZhbHVlX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCB3bTgzMXhfc3RhdHVzX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCQkgICB1bnNpZ25lZCBsb25nICpkZWxheV9vbiwKKwkJCQkgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCit7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmxlZCA9IHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwkvKiBQaWNrIHNvbWUgZGVmYXVsdHMgaWYgd2UndmUgbm90IGJlZW4gZ2l2ZW4gdGltZXMgKi8KKwlpZiAoKmRlbGF5X29uID09IDAgJiYgKmRlbGF5X29mZiA9PSAwKSB7CisJCSpkZWxheV9vbiA9IDI1MDsKKwkJKmRlbGF5X29mZiA9IDI1MDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7CisKKwkvKiBXZSBvbmx5IGhhdmUgYSBsaW1pdGVkIHNlbGVjdGlvbiBvZiBzZXR0aW5ncywgc2VlIGlmIHdlIGNhbgorCSAqIHN1cHBvcnQgdGhlIGNvbmZpZ3VyYXRpb24gd2UncmUgYmVpbmcgZ2l2ZW4gKi8KKwlzd2l0Y2ggKCpkZWxheV9vbikgeworCWNhc2UgMTAwMDoKKwkJbGVkLT5ibGlua190aW1lID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyNTA6CisJCWxlZC0+YmxpbmtfdGltZSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTI1OgorCQlsZWQtPmJsaW5rX3RpbWUgPSAyOworCQlicmVhazsKKwljYXNlIDYyOgorCWNhc2UgNjM6CisJCS8qIEFjdHVhbGx5IDYyLjVtcyAqLworCQlsZWQtPmJsaW5rX3RpbWUgPSAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0ID09IDApIHsKKwkJc3dpdGNoICgqZGVsYXlfb2ZmIC8gKmRlbGF5X29uKSB7CisJCWNhc2UgMToKKwkJCWxlZC0+YmxpbmtfY3ljID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlsZWQtPmJsaW5rX2N5YyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJbGVkLT5ibGlua19jeWMgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCWxlZC0+YmxpbmtfY3ljID0gMzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJldCA9PSAwKQorCQlsZWQtPmJsaW5rID0gMTsKKwllbHNlCisJCWxlZC0+YmxpbmsgPSAwOworCisJLyogQWx3YXlzIHVwZGF0ZTsgaWYgd2UgZmFpbCB0dXJuIG9mZiBibGlua2luZyBzaW5jZSB3ZSBleHBlY3QKKwkgKiBhIHNvZnR3YXJlIGZhbGxiYWNrLiAqLworCXNjaGVkdWxlX3dvcmsoJmxlZC0+d29yayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZWQtPnZhbHVlX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpsZWRfc3JjX3RleHRzW10gPSB7CisJIm90cCIsCisJInBvd2VyIiwKKwkiY2hhcmdlciIsCisJInNvZnQiLAorfTsKKworc3RhdGljIHNzaXplX3Qgd204MzF4X3N0YXR1c19zcmNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KTsKKwlpbnQgaTsKKwlzc2l6ZV90IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZsZWQtPm11dGV4KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxlZF9zcmNfdGV4dHMpOyBpKyspCisJCWlmIChpID09IGxlZC0+c3JjKQorCQkJcmV0ICs9IHNwcmludGYoJmJ1ZltyZXRdLCAiWyVzXSAiLCBsZWRfc3JjX3RleHRzW2ldKTsKKwkJZWxzZQorCQkJcmV0ICs9IHNwcmludGYoJmJ1ZltyZXRdLCAiJXMgIiwgbGVkX3NyY190ZXh0c1tpXSk7CisKKwltdXRleF91bmxvY2soJmxlZC0+bXV0ZXgpOworCisJcmV0ICs9IHNwcmludGYoJmJ1ZltyZXRdLCAiXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdtODMxeF9zdGF0dXNfc3JjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqbGVkID0gdG9fd204MzF4X3N0YXR1cyhsZWRfY2Rldik7CisJY2hhciBuYW1lWzIwXTsKKwlpbnQgaTsKKwlzaXplX3QgbGVuOworCisJbmFtZVtzaXplb2YobmFtZSkgLSAxXSA9ICdcMCc7CisJc3RybmNweShuYW1lLCBidWYsIHNpemVvZihuYW1lKSAtIDEpOworCWxlbiA9IHN0cmxlbihuYW1lKTsKKworCWlmIChsZW4gJiYgbmFtZVtsZW4gLSAxXSA9PSAnXG4nKQorCQluYW1lW2xlbiAtIDFdID0gJ1wwJzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxlZF9zcmNfdGV4dHMpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgbGVkX3NyY190ZXh0c1tpXSkpIHsKKwkJCW11dGV4X2xvY2soJmxlZC0+bXV0ZXgpOworCisJCQlsZWQtPnNyYyA9IGk7CisJCQlzY2hlZHVsZV93b3JrKCZsZWQtPndvcmspOworCisJCQltdXRleF91bmxvY2soJmxlZC0+bXV0ZXgpOworCQl9CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzcmMsIDA2NDQsIHdtODMxeF9zdGF0dXNfc3JjX3Nob3csIHdtODMxeF9zdGF0dXNfc3JjX3N0b3JlKTsKKworc3RhdGljIGludCB3bTgzMXhfc3RhdHVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXhfcGRhdGEgKmNoaXBfcGRhdGE7CisJc3RydWN0IHdtODMxeF9zdGF0dXNfcGRhdGEgcGRhdGE7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmRydmRhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlkID0gcGRldi0+aWQgJSBBUlJBWV9TSVpFKGNoaXBfcGRhdGEtPnN0YXR1cyk7CisJaW50IHJldDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSS9PIHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTgzMXhfc3RhdHVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcnZkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZHJ2ZGF0YSk7CisKKwlkcnZkYXRhLT53bTgzMXggPSB3bTgzMXg7CisJZHJ2ZGF0YS0+cmVnID0gcmVzLT5zdGFydDsKKworCWlmICh3bTgzMXgtPmRldi0+cGxhdGZvcm1fZGF0YSkKKwkJY2hpcF9wZGF0YSA9IHdtODMxeC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCWVsc2UKKwkJY2hpcF9wZGF0YSA9IE5VTEw7CisKKwltZW1zZXQoJnBkYXRhLCAwLCBzaXplb2YocGRhdGEpKTsKKwlpZiAoY2hpcF9wZGF0YSAmJiBjaGlwX3BkYXRhLT5zdGF0dXNbaWRdKQorCQltZW1jcHkoJnBkYXRhLCBjaGlwX3BkYXRhLT5zdGF0dXNbaWRdLCBzaXplb2YocGRhdGEpKTsKKwllbHNlCisJCXBkYXRhLm5hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKKworCW11dGV4X2luaXQoJmRydmRhdGEtPm11dGV4KTsKKwlJTklUX1dPUksoJmRydmRhdGEtPndvcmssIHdtODMxeF9zdGF0dXNfd29yayk7CisJc3Bpbl9sb2NrX2luaXQoJmRydmRhdGEtPnZhbHVlX2xvY2spOworCisJLyogV2UgY2FjaGUgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYW5kIHJlYWQgc3RhcnR1cCB2YWx1ZXMKKwkgKiBmcm9tIGl0LiAqLworCWRydmRhdGEtPnJlZ192YWwgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBkcnZkYXRhLT5yZWcpOworCisJaWYgKGRydmRhdGEtPnJlZ192YWwgJiBXTTgzMVhfTEVEX01PREVfTUFTSykKKwkJZHJ2ZGF0YS0+YnJpZ2h0bmVzcyA9IExFRF9GVUxMOworCWVsc2UKKwkJZHJ2ZGF0YS0+YnJpZ2h0bmVzcyA9IExFRF9PRkY7CisKKwkvKiBTZXQgYSBkZWZhdWx0IHNvdXJjZSBpZiBjb25maWd1cmVkLCBvdGhlcndpc2UgbGVhdmUgdGhlCisJICogY3VycmVudCBoYXJkd2FyZSBzZXR0aW5nLgorCSAqLworCWlmIChwZGF0YS5kZWZhdWx0X3NyYyA9PSBXTTgzMVhfU1RBVFVTX1BSRVNFUlZFKSB7CisJCWRydmRhdGEtPnNyYyA9IGRydmRhdGEtPnJlZ192YWw7CisJCWRydmRhdGEtPnNyYyAmPSBXTTgzMVhfTEVEX1NSQ19NQVNLOworCQlkcnZkYXRhLT5zcmMgPj49IFdNODMxWF9MRURfU1JDX1NISUZUOworCX0gZWxzZSB7CisJCWRydmRhdGEtPnNyYyA9IHBkYXRhLmRlZmF1bHRfc3JjIC0gMTsKKwl9CisKKwlkcnZkYXRhLT5jZGV2Lm5hbWUgPSBwZGF0YS5uYW1lOworCWRydmRhdGEtPmNkZXYuZGVmYXVsdF90cmlnZ2VyID0gcGRhdGEuZGVmYXVsdF90cmlnZ2VyOworCWRydmRhdGEtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSB3bTgzMXhfc3RhdHVzX3NldDsKKwlkcnZkYXRhLT5jZGV2LmJsaW5rX3NldCA9IHdtODMxeF9zdGF0dXNfYmxpbmtfc2V0OworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdtODMxeC0+ZGV2LCAmZHJ2ZGF0YS0+Y2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIExFRDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2xlZDsKKwl9CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZHJ2ZGF0YS0+Y2Rldi5kZXYsICZkZXZfYXR0cl9zcmMpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIk5vIHNvdXJjZSBjb250cm9sIGZvciBMRUQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIDA7CisKK2Vycl9sZWQ6CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmRydmRhdGEtPmNkZXYpOworCWtmcmVlKGRydmRhdGEpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X3N0YXR1c19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqZHJ2ZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKGRydmRhdGEtPmNkZXYuZGV2LCAmZGV2X2F0dHJfc3JjKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmZHJ2ZGF0YS0+Y2Rldik7CisJa2ZyZWUoZHJ2ZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204MzF4X3N0YXR1c19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAid204MzF4LXN0YXR1cyIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorCS5wcm9iZSA9IHdtODMxeF9zdGF0dXNfcHJvYmUsCisJLnJlbW92ZSA9IHdtODMxeF9zdGF0dXNfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgd204MzF4X3N0YXR1c19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204MzF4X3N0YXR1c19kcml2ZXIpOworfQorbW9kdWxlX2luaXQod204MzF4X3N0YXR1c19pbml0KTsKKworc3RhdGljIHZvaWQgd204MzF4X3N0YXR1c19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODMxeF9zdGF0dXNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODMxeF9zdGF0dXNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTgzMXggc3RhdHVzIExFRCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204MzF4LXN0YXR1cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHRyaWctZ3Bpby5jIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctZ3Bpby5jCmluZGV4IDFiYzVkYjQuLmY1OTEzMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWdwaW8uYworKysgYi9kcml2ZXJzL2xlZHMvbGVkdHJpZy1ncGlvLmMKQEAgLTQ0LDIyICs0NCwyMiBAQAogCQkJc3RydWN0IGdwaW9fdHJpZ19kYXRhLCB3b3JrKTsKIAlpbnQgdG1wOwogCi0gICAgICAgaWYgKCFncGlvX2RhdGEtPmdwaW8pCi0JICAgICAgIHJldHVybjsKKwlpZiAoIWdwaW9fZGF0YS0+Z3BpbykKKwkJcmV0dXJuOwogCi0gICAgICAgdG1wID0gZ3Bpb19nZXRfdmFsdWUoZ3Bpb19kYXRhLT5ncGlvKTsKLSAgICAgICBpZiAoZ3Bpb19kYXRhLT5pbnZlcnRlZCkKLQkgICAgICAgdG1wID0gIXRtcDsKKwl0bXAgPSBncGlvX2dldF92YWx1ZShncGlvX2RhdGEtPmdwaW8pOworCWlmIChncGlvX2RhdGEtPmludmVydGVkKQorCQl0bXAgPSAhdG1wOwogCi0gICAgICAgaWYgKHRtcCkgewotICAgICAgICAgICAgICAgaWYgKGdwaW9fZGF0YS0+ZGVzaXJlZF9icmlnaHRuZXNzKQotICAgICAgICAgICAgICAgICAgICAgICBsZWRfc2V0X2JyaWdodG5lc3MoZ3Bpb19kYXRhLT5sZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGlvX2RhdGEtPmRlc2lyZWRfYnJpZ2h0bmVzcyk7Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgIGxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwgTEVEX0ZVTEwpOwotICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICBsZWRfc2V0X2JyaWdodG5lc3MoZ3Bpb19kYXRhLT5sZWQsIExFRF9PRkYpOwotICAgICAgIH0KKwlpZiAodG1wKSB7CisJCWlmIChncGlvX2RhdGEtPmRlc2lyZWRfYnJpZ2h0bmVzcykKKwkJCWxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwKKwkJCQkJICAgZ3Bpb19kYXRhLT5kZXNpcmVkX2JyaWdodG5lc3MpOworCQllbHNlCisJCQlsZWRfc2V0X2JyaWdodG5lc3MoZ3Bpb19kYXRhLT5sZWQsIExFRF9GVUxMKTsKKwl9IGVsc2UgeworCQlsZWRfc2V0X2JyaWdodG5lc3MoZ3Bpb19kYXRhLT5sZWQsIExFRF9PRkYpOworCX0KIH0KIAogc3RhdGljIHNzaXplX3QgZ3Bpb190cmlnX2JyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jIGIvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYwppbmRleCAxODY0ODE4Li5kYWFmODY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jCisrKyBiL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJsZy5oIgogCiAvKiBBbGxvdyBHdWVzdHMgdG8gdXNlIGEgbm9uLTEyOCAoaWUuIG5vbi1MaW51eCkgc3lzY2FsbCB0cmFwLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYyBiL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKaW5kZXggYjRkM2Y3Yy4uYmQxNjMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYworKysgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCkBAIC01MDgsNyArNTA4LDcgQEAKICAqIHVzZXM6IHJlYWRpbmcgYW5kIHdyaXRpbmcgYSBjaGFyYWN0ZXIgZGV2aWNlIGNhbGxlZCAvZGV2L2xndWVzdC4gIEFsbCB0aGUKICAqIHdvcmsgaGFwcGVucyBpbiB0aGUgcmVhZCgpLCB3cml0ZSgpIGFuZCBjbG9zZSgpIHJvdXRpbmVzOgogICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsZ3Vlc3RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxndWVzdF9mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9IGNsb3NlLAogCS53cml0ZQkgPSB3cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCBmZGUzNzdjLi41NTZmMGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC0xMjQsNiArMTI0LDggQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRoZXJtb3N0YXRfZHJpdmVyOworCiBzdGF0aWMgaW50CiBhdHRhY2hfdGhlcm1vc3RhdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC0xNDgsNyArMTUwLDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZjbGllbnQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJnRoZXJtb3N0YXRfZHJpdmVyLmNsaWVudHMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggYTAyODU5OC4uZWEzMmM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtMjg2LDYgKzI4Niw4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0aGVybV9wbTcyX2RyaXZlcjsKKwogLyoKICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGkyY19jbGllbnQgc3RydWN0dXJlIGFuZAogICogYXR0YWNoIGl0IHRvIG9uZSBvZiB1MyBhZGFwdGVycwpAQCAtMzE4LDcgKzMyMCw3IEBACiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KIAkgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpMmMtY29yZSBob2xkcyB0aGUgY29yZV9sb2NrIG11dGV4IGZvciB1cy4KIAkgKi8KLQlsaXN0X2FkZF90YWlsKCZjbHQtPmRldGVjdGVkLCAmY2x0LT5kcml2ZXItPmNsaWVudHMpOworCWxpc3RfYWRkX3RhaWwoJmNsdC0+ZGV0ZWN0ZWQsICZ0aGVybV9wbTcyX2RyaXZlci5jbGllbnRzKTsKIAlyZXR1cm4gY2x0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYwppbmRleCA1NWFkOTU2Li5kMjQyOTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMKQEAgLTcyLDcgKzcyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgcG11X2xlZCA9IHsKLQkubmFtZSA9ICJwbXUtZnJvbnQtbGVkIiwKKwkubmFtZSA9ICJwbXUtbGVkOjpmcm9udCIsCiAjaWZkZWYgQ09ORklHX0FEQl9QTVVfTEVEX0lERQogCS5kZWZhdWx0X3RyaWdnZXIgPSAiaWRlLWRpc2siLAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggYjQwZmI5Yi4uNmYzMDhhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtNDA1LDcgKzQwNSwxMSBAQAogCQlwcmludGsoS0VSTl9FUlIgInZpYS1wbXU6IGNhbid0IG1hcCBpbnRlcnJ1cHRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgdmlhX3BtdV9pbnRlcnJ1cHQsIDAsICJWSUEtUE1VIiwgKHZvaWQgKikwKSkgeworCS8qIFdlIHNldCBJUlFGX1RJTUVSIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkCisJICogYmV0d2VlbiB0aGUgMiBwYXNzZXMgb2YgZHJpdmVyIHN1c3BlbmQsIHdlIGNvbnRyb2wgb3VyIG93biBkaXNhYmxpbmcKKwkgKiBmb3IgdGhhdCBvbmUKKwkgKi8KKwlpZiAocmVxdWVzdF9pcnEoaXJxLCB2aWFfcG11X2ludGVycnVwdCwgSVJRRl9USU1FUiwgIlZJQS1QTVUiLCAodm9pZCAqKTApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidmlhLXBtdTogY2FuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsIGlycSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTQxOSw3ICs0MjMsNyBAQAogCQkJZ3Bpb19pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChncGlvX25vZGUsIDApOwogCiAJCWlmIChncGlvX2lycSAhPSBOT19JUlEpIHsKLQkJCWlmIChyZXF1ZXN0X2lycShncGlvX2lycSwgZ3BpbzFfaW50ZXJydXB0LCAwLAorCQkJaWYgKHJlcXVlc3RfaXJxKGdwaW9faXJxLCBncGlvMV9pbnRlcnJ1cHQsIElSUUZfVElNRVIsCiAJCQkJCSJHUElPMSBBREIiLCAodm9pZCAqKTApKQogCQkJCXByaW50ayhLRVJOX0VSUiAicG11OiBjYW4ndCBnZXQgaXJxICVkIgogCQkJCSAgICAgICAiIChHUElPMSlcbiIsIGdwaW9faXJxKTsKQEAgLTkyNSw4ICs5MjksNyBAQAogCiAjaWZkZWYgQ09ORklHX0FEQgogLyogU2VuZCBhbiBBREIgY29tbWFuZCAqLwotc3RhdGljIGludAotcG11X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpCitzdGF0aWMgaW50IHBtdV9zZW5kX3JlcXVlc3Qoc3RydWN0IGFkYl9yZXF1ZXN0ICpyZXEsIGludCBzeW5jKQogewogCWludCBpLCByZXQ7CiAKQEAgLTEwMDUsMTYgKzEwMDgsMTEgQEAKIH0KIAogLyogRW5hYmxlL2Rpc2FibGUgYXV0b3BvbGxpbmcgKi8KLXN0YXRpYyBpbnQKLXBtdV9hZGJfYXV0b3BvbGwoaW50IGRldnMpCitzdGF0aWMgaW50IF9fcG11X2FkYl9hdXRvcG9sbChpbnQgZGV2cykKIHsKIAlzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwogCi0JaWYgKCh2aWFzID09IE5VTEwpIHx8ICghcG11X2Z1bGx5X2luaXRlZCkgfHwgIXBtdV9oYXNfYWRiKQotCQlyZXR1cm4gLUVOWElPOwotCiAJaWYgKGRldnMpIHsKLQkJYWRiX2Rldl9tYXAgPSBkZXZzOwogCQlwbXVfcmVxdWVzdCgmcmVxLCBOVUxMLCA1LCBQTVVfQURCX0NNRCwgMCwgMHg4NiwKIAkJCSAgICBhZGJfZGV2X21hcCA+PiA4LCBhZGJfZGV2X21hcCk7CiAJCXBtdV9hZGJfZmxhZ3MgPSAyOwpAQCAtMTAyNyw5ICsxMDI1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcG11X2FkYl9hdXRvcG9sbChpbnQgZGV2cykKK3sKKwlpZiAoKHZpYXMgPT0gTlVMTCkgfHwgKCFwbXVfZnVsbHlfaW5pdGVkKSB8fCAhcG11X2hhc19hZGIpCisJCXJldHVybiAtRU5YSU87CisKKwlhZGJfZGV2X21hcCA9IGRldnM7CisJcmV0dXJuIF9fcG11X2FkYl9hdXRvcG9sbChkZXZzKTsKK30KKwogLyogUmVzZXQgdGhlIEFEQiBidXMgKi8KLXN0YXRpYyBpbnQKLXBtdV9hZGJfcmVzZXRfYnVzKHZvaWQpCitzdGF0aWMgaW50IHBtdV9hZGJfcmVzZXRfYnVzKHZvaWQpCiB7CiAJc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKIAlpbnQgc2F2ZV9hdXRvcG9sbCA9IGFkYl9kZXZfbWFwOwpAQCAtMTAzOCwxMyArMTA0NCwxMyBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJLyogYW55b25lIGdvdCBhIGJldHRlciBpZGVhPz8gKi8KLQlwbXVfYWRiX2F1dG9wb2xsKDApOworCV9fcG11X2FkYl9hdXRvcG9sbCgwKTsKIAotCXJlcS5uYnl0ZXMgPSA1OworCXJlcS5uYnl0ZXMgPSA0OwogCXJlcS5kb25lID0gTlVMTDsKIAlyZXEuZGF0YVswXSA9IFBNVV9BREJfQ01EOwotCXJlcS5kYXRhWzFdID0gMDsKLQlyZXEuZGF0YVsyXSA9IEFEQl9CVVNSRVNFVDsKKwlyZXEuZGF0YVsxXSA9IEFEQl9CVVNSRVNFVDsKKwlyZXEuZGF0YVsyXSA9IDA7CiAJcmVxLmRhdGFbM10gPSAwOwogCXJlcS5kYXRhWzRdID0gMDsKIAlyZXEucmVwbHlfbGVuID0gMDsKQEAgLTEwNTYsNyArMTA2Miw3IEBACiAJcG11X3dhaXRfY29tcGxldGUoJnJlcSk7CiAKIAlpZiAoc2F2ZV9hdXRvcG9sbCAhPSAwKQotCQlwbXVfYWRiX2F1dG9wb2xsKHNhdmVfYXV0b3BvbGwpOworCQlfX3BtdV9hZGJfYXV0b3BvbGwoc2F2ZV9hdXRvcG9sbCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCmluZGV4IDUyOTg4NmMuLmVkNjQyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYwpAQCAtMTE1LDYgKzExNSw4IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2ZfbG03NV9kcml2ZXI7CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqd2ZfbG03NV9jcmVhdGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgIHU4IGFkZHIsIGludCBkczE3NzUsCiAJCQkJCSAgICAgY29uc3QgY2hhciAqbG9jKQpAQCAtMTU3LDcgKzE1OSw3IEBACiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KIAkgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpMmMtY29yZSBob2xkcyB0aGUgY29yZV9sb2NrIG11dGV4IGZvciB1cy4KIAkgKi8KLQlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmY2xpZW50LT5kcml2ZXItPmNsaWVudHMpOworCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZ3Zl9sbTc1X2RyaXZlci5jbGllbnRzKTsKIAlyZXR1cm4gY2xpZW50OwogIGZhaWw6CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYwppbmRleCBlMmE1NWVjLi5hNjdiMzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKQEAgLTg4LDYgKzg4LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3Zl9tYXg2NjkwX2RyaXZlcjsKKwogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICp3Zl9tYXg2NjkwX2NyZWF0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCSAgICB1OCBhZGRyLCBjb25zdCBjaGFyICpsb2MpCiB7CkBAIC0xMTksNyArMTIxLDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZjbGllbnQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJndmX21heDY2OTBfZHJpdmVyLmNsaWVudHMpOwogCXJldHVybiBjbGllbnQ7CiAKICBmYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCmluZGV4IDVkYTcyOWUuLmUyMDMzMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKQEAgLTE5NCw2ICsxOTQsOCBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3Zl9zYXRfZHJpdmVyOworCiBzdGF0aWMgdm9pZCB3Zl9zYXRfY3JlYXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGRldmljZV9ub2RlICpkZXYpCiB7CiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CkBAIC0yMjIsNyArMjI0LDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZjbGllbnQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJndmX3NhdF9kcml2ZXIuY2xpZW50cyk7CiB9CiAKIHN0YXRpYyBpbnQgd2Zfc2F0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL01ha2VmaWxlIGIvZHJpdmVycy9tZC9NYWtlZmlsZQppbmRleCAxZGM0MTg1Li5lMzU1ZTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWQvTWFrZWZpbGUKQEAgLTQ2LDcgKzQ2LDcgQEAKIG9iai0kKENPTkZJR19ETV9aRVJPKQkJKz0gZG0temVyby5vCiAKIHF1aWV0X2NtZF91bnJvbGwgPSBVTlJPTEwgICRACi0gICAgICBjbWRfdW5yb2xsID0gJChQRVJMKSAkKHNyY3RyZWUpLyQoc3JjKS91bnJvbGwucGwgJChVTlJPTEwpIFwKKyAgICAgIGNtZF91bnJvbGwgPSAkKEFXSykgLWYkKHNyY3RyZWUpLyQoc3JjKS91bnJvbGwuYXdrIC12Tj0kKFVOUk9MTCkgXAogICAgICAgICAgICAgICAgICAgIDwgJDwgPiAkQCB8fCAoIHJtIC1mICRAICYmIGV4aXQgMSApCiAKIGlmZXEgKCQoQ09ORklHX0FMVElWRUMpLHkpCkBAIC01OSw1NiArNTksNTYgQEAKIAogdGFyZ2V0cyArPSByYWlkNmludDEuYwogJChvYmopL3JhaWQ2aW50MS5jOiAgIFVOUk9MTCA6PSAxCi0kKG9iaikvcmFpZDZpbnQxLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDEuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQyLmMKICQob2JqKS9yYWlkNmludDIuYzogICBVTlJPTEwgOj0gMgotJChvYmopL3JhaWQ2aW50Mi5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQyLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50NC5jCiAkKG9iaikvcmFpZDZpbnQ0LmM6ICAgVU5ST0xMIDo9IDQKLSQob2JqKS9yYWlkNmludDQuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50NC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDguYwogJChvYmopL3JhaWQ2aW50OC5jOiAgIFVOUk9MTCA6PSA4Ci0kKG9iaikvcmFpZDZpbnQ4LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDguYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQxNi5jCiAkKG9iaikvcmFpZDZpbnQxNi5jOiAgVU5ST0xMIDo9IDE2Ci0kKG9iaikvcmFpZDZpbnQxNi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDE2LmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQzMi5jCiAkKG9iaikvcmFpZDZpbnQzMi5jOiAgVU5ST0xMIDo9IDMyCi0kKG9iaikvcmFpZDZpbnQzMi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDMyLmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIENGTEFHU19yYWlkNmFsdGl2ZWMxLm8gKz0gJChhbHRpdmVjX2ZsYWdzKQogdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWMxLmMKICQob2JqKS9yYWlkNmFsdGl2ZWMxLmM6ICAgVU5ST0xMIDo9IDEKLSQob2JqKS9yYWlkNmFsdGl2ZWMxLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIENGTEFHU19yYWlkNmFsdGl2ZWMyLm8gKz0gJChhbHRpdmVjX2ZsYWdzKQogdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWMyLmMKICQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgVU5ST0xMIDo9IDIKLSQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZhbHRpdmVjMi5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIENGTEFHU19yYWlkNmFsdGl2ZWM0Lm8gKz0gJChhbHRpdmVjX2ZsYWdzKQogdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWM0LmMKICQob2JqKS9yYWlkNmFsdGl2ZWM0LmM6ICAgVU5ST0xMIDo9IDQKLSQob2JqKS9yYWlkNmFsdGl2ZWM0LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZhbHRpdmVjNC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIENGTEFHU19yYWlkNmFsdGl2ZWM4Lm8gKz0gJChhbHRpdmVjX2ZsYWdzKQogdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWM4LmMKICQob2JqKS9yYWlkNmFsdGl2ZWM4LmM6ICAgVU5ST0xMIDo9IDgKLSQob2JqKS9yYWlkNmFsdGl2ZWM4LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHF1aWV0X2NtZF9ta3RhYmxlID0gVEFCTEUgICAkQApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuYyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKaW5kZXggNjk4NmIwMC4uNjBlMmIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuYworKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC0xNjI0LDEwICsxNjI0LDExIEBACiAJYml0bWFwLT5vZmZzZXQgPSBtZGRldi0+Yml0bWFwX29mZnNldDsKIAlpZiAoZmlsZSkgewogCQlnZXRfZmlsZShmaWxlKTsKLQkJZG9fc3luY19tYXBwaW5nX3JhbmdlKGZpbGUtPmZfbWFwcGluZywgMCwgTExPTkdfTUFYLAotCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSB8Ci0JCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dSSVRFIHwKLQkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUik7CisJCS8qIEFzIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGlzIGZpbGUgd2lsbCB1c2UgYm1hcCwKKwkJICogYW5kIGJ5cGFzcyB0aGUgcGFnZSBjYWNoZSwgd2UgbXVzdCBzeW5jIHRoZSBmaWxlCisJCSAqIGZpcnN0LgorCQkgKi8KKwkJdmZzX2ZzeW5jKGZpbGUsIGZpbGUtPmZfZGVudHJ5LCAxKTsKIAl9CiAJLyogcmVhZCBzdXBlcmJsb2NrIGZyb20gYml0bWFwIGZpbGUgKHRoaXMgc2V0cyBiaXRtYXAtPmNodW5rc2l6ZSkgKi8KIAllcnIgPSBiaXRtYXBfcmVhZF9zYihiaXRtYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKaW5kZXggNTU2YWNmZi4uN2RiZTY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYworKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCkBAIC0xMzgsMTYgKzEzOCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIpOwogCi0vKgotICogUm91bmQgYSBudW1iZXIgdXAgdG8gdGhlIG5lYXJlc3QgJ3NpemUnIGJvdW5kYXJ5LiAgc2l6ZSBtdXN0Ci0gKiBiZSBhIHBvd2VyIG9mIDIuCi0gKi8KLXN0YXRpYyB1bG9uZyByb3VuZF91cCh1bG9uZyBuLCB1bG9uZyBzaXplKQotewotCXNpemUtLTsKLQlyZXR1cm4gKG4gKyBzaXplKSAmIH5zaXplOwotfQotCiBzdGF0aWMgaW50IHNldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAogCQkJICBjb25zdCBjaGFyICpjaHVua19zaXplX2FyZywgY2hhciAqKmVycm9yKQogewpAQCAtMTU1LDcgKzE0NSw4IEBACiAJY2hhciAqdmFsdWU7CiAKIAljaHVua19zaXplX3Vsb25nID0gc2ltcGxlX3N0cnRvdWwoY2h1bmtfc2l6ZV9hcmcsICZ2YWx1ZSwgMTApOwotCWlmICgqY2h1bmtfc2l6ZV9hcmcgPT0gJ1wwJyB8fCAqdmFsdWUgIT0gJ1wwJykgeworCWlmICgqY2h1bmtfc2l6ZV9hcmcgPT0gJ1wwJyB8fCAqdmFsdWUgIT0gJ1wwJyB8fAorCSAgICBjaHVua19zaXplX3Vsb25nID4gVUlOVF9NQVgpIHsKIAkJKmVycm9yID0gIkludmFsaWQgY2h1bmsgc2l6ZSI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE2NSw0MCArMTU2LDM1IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogQ2h1bmsgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIHBhZ2Ugc2l6ZS4gIFNpbGVudGx5Ci0JICogcm91bmQgdXAgaWYgaXQncyBub3QuCi0JICovCi0JY2h1bmtfc2l6ZV91bG9uZyA9IHJvdW5kX3VwKGNodW5rX3NpemVfdWxvbmcsIFBBR0VfU0laRSA+PiA5KTsKLQotCXJldHVybiBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RvcmUsIGNodW5rX3NpemVfdWxvbmcsCisJcmV0dXJuIGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdG9yZSwKKwkJCQkJCSAodW5zaWduZWQpIGNodW5rX3NpemVfdWxvbmcsCiAJCQkJCQkgZXJyb3IpOwogfQogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZV91bG9uZywKKwkJCQkgICAgICB1bnNpZ25lZCBjaHVua19zaXplLAogCQkJCSAgICAgIGNoYXIgKiplcnJvcikKIHsKIAkvKiBDaGVjayBjaHVua19zaXplIGlzIGEgcG93ZXIgb2YgMiAqLwotCWlmICghaXNfcG93ZXJfb2ZfMihjaHVua19zaXplX3Vsb25nKSkgeworCWlmICghaXNfcG93ZXJfb2ZfMihjaHVua19zaXplKSkgewogCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiAyIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogVmFsaWRhdGUgdGhlIGNodW5rIHNpemUgYWdhaW5zdCB0aGUgZGV2aWNlIGJsb2NrIHNpemUgKi8KLQlpZiAoY2h1bmtfc2l6ZV91bG9uZyAlIChiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdG9yZS0+Y293LT5iZGV2KSA+PiA5KSkgeworCWlmIChjaHVua19zaXplICUgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHN0b3JlLT5jb3ctPmJkZXYpID4+IDkpKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIG11bHRpcGxlIG9mIGRldmljZSBibG9ja3NpemUiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY2h1bmtfc2l6ZV91bG9uZyA+IElOVF9NQVggPj4gU0VDVE9SX1NISUZUKSB7CisJaWYgKGNodW5rX3NpemUgPiBJTlRfTUFYID4+IFNFQ1RPUl9TSElGVCkgewogCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyB0b28gaGlnaCI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN0b3JlLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZV91bG9uZzsKLQlzdG9yZS0+Y2h1bmtfbWFzayA9IGNodW5rX3NpemVfdWxvbmcgLSAxOwotCXN0b3JlLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplX3Vsb25nKSAtIDE7CisJc3RvcmUtPmNodW5rX3NpemUgPSBjaHVua19zaXplOworCXN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZSAtIDE7CisJc3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemUpIC0gMTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUxLDcgKzIzNyw3IEBACiAKIAlyID0gc2V0X2NodW5rX3NpemUodG1wX3N0b3JlLCBhcmd2WzJdLCAmdGktPmVycm9yKTsKIAlpZiAocikKLQkJZ290byBiYWRfY293OworCQlnb3RvIGJhZF9jdHI7CiAKIAlyID0gdHlwZS0+Y3RyKHRtcF9zdG9yZSwgMCwgTlVMTCk7CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmggYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCmluZGV4IDgxMmM3MTguLjhhMjIzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKKysrIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaApAQCAtMTAxLDkgKzEwMSw5IEBACiAJc3RydWN0IGRtX2RldiAqY293OwogCiAJLyogU2l6ZSBvZiBkYXRhIGJsb2NrcyBzYXZlZCAtIG11c3QgYmUgYSBwb3dlciBvZiAyICovCi0JY2h1bmtfdCBjaHVua19zaXplOwotCWNodW5rX3QgY2h1bmtfbWFzazsKLQljaHVua190IGNodW5rX3NoaWZ0OworCXVuc2lnbmVkIGNodW5rX3NpemU7CisJdW5zaWduZWQgY2h1bmtfbWFzazsKKwl1bnNpZ25lZCBjaHVua19zaGlmdDsKIAogCXZvaWQgKmNvbnRleHQ7CiB9OwpAQCAtMTY5LDcgKzE2OSw3IEBACiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpOwogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZV91bG9uZywKKwkJCQkgICAgICB1bnNpZ25lZCBjaHVua19zaXplLAogCQkJCSAgICAgIGNoYXIgKiplcnJvcik7CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfY3JlYXRlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jIGIvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYwppbmRleCA2NTJiZDMzLi43YWMyYzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCX0KIAogCS8qIFRoZSBwdHIgdmFsdWUgaXMgc3VmZmljaWVudCBmb3IgbG9jYWwgdW5pcXVlIGlkICovCi0JbGMtPmx1aWQgPSAodWludDY0X3QpbGM7CisJbGMtPmx1aWQgPSAodW5zaWduZWQgbG9uZylsYzsKIAogCWxjLT50aSA9IHRpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwppbmRleCBkNWIyZTA4Li4wYzc0NjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKQEAgLTI4NCwxMiArMjg0LDEzIEBACiB7CiAJaW50IHI7CiAJc3RydWN0IGRpc2tfaGVhZGVyICpkaDsKLQljaHVua190IGNodW5rX3NpemU7CisJdW5zaWduZWQgY2h1bmtfc2l6ZTsKIAlpbnQgY2h1bmtfc2l6ZV9zdXBwbGllZCA9IDE7CiAJY2hhciAqY2h1bmtfZXJyOwogCiAJLyoKLQkgKiBVc2UgZGVmYXVsdCBjaHVuayBzaXplIChvciBoYXJkc2VjdF9zaXplLCBpZiBsYXJnZXIpIGlmIG5vbmUgc3VwcGxpZWQKKwkgKiBVc2UgZGVmYXVsdCBjaHVuayBzaXplIChvciBsb2dpY2FsX2Jsb2NrX3NpemUsIGlmIGxhcmdlcikKKwkgKiBpZiBub25lIHN1cHBsaWVkCiAJICovCiAJaWYgKCFwcy0+c3RvcmUtPmNodW5rX3NpemUpIHsKIAkJcHMtPnN0b3JlLT5jaHVua19zaXplID0gbWF4KERNX0NIVU5LX1NJWkVfREVGQVVMVF9TRUNUT1JTLApAQCAtMzM0LDEwICszMzUsOSBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChjaHVua19zaXplX3N1cHBsaWVkKQotCQlETVdBUk4oImNodW5rIHNpemUgJWxsdSBpbiBkZXZpY2UgbWV0YWRhdGEgb3ZlcnJpZGVzICIKLQkJICAgICAgICJ0YWJsZSBjaHVuayBzaXplIG9mICVsbHUuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2h1bmtfc2l6ZSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcHMtPnN0b3JlLT5jaHVua19zaXplKTsKKwkJRE1XQVJOKCJjaHVuayBzaXplICV1IGluIGRldmljZSBtZXRhZGF0YSBvdmVycmlkZXMgIgorCQkgICAgICAgInRhYmxlIGNodW5rIHNpemUgb2YgJXUuIiwKKwkJICAgICAgIGNodW5rX3NpemUsIHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CiAKIAkvKiBXZSBoYWQgYSBib2d1cyBjaHVua19zaXplLiBGaXggc3R1ZmYgdXAuICovCiAJZnJlZV9hcmVhKHBzKTsKQEAgLTM0NSw4ICszNDUsOCBAQAogCXIgPSBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUocHMtPnN0b3JlLCBjaHVua19zaXplLAogCQkJCQkgICAgICAmY2h1bmtfZXJyKTsKIAlpZiAocikgewotCQlETUVSUigiaW52YWxpZCBvbi1kaXNrIGNodW5rIHNpemUgJWxsdTogJXMuIiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaHVua19zaXplLCBjaHVua19lcnIpOworCQlETUVSUigiaW52YWxpZCBvbi1kaXNrIGNodW5rIHNpemUgJXU6ICVzLiIsCisJCSAgICAgIGNodW5rX3NpemUsIGNodW5rX2Vycik7CiAJCXJldHVybiByOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmMgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwppbmRleCA1N2YxYmY3Li4zYTNiYTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtMjk2LDYgKzI5Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmVnaXN0ZXJfc25hcHNob3Qoc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwKQogeworCXN0cnVjdCBkbV9zbmFwc2hvdCAqbDsKIAlzdHJ1Y3Qgb3JpZ2luICpvLCAqbmV3X287CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHNuYXAtPm9yaWdpbi0+YmRldjsKIApAQCAtMzE5LDcgKzMyMCwxMSBAQAogCQlfX2luc2VydF9vcmlnaW4obyk7CiAJfQogCi0JbGlzdF9hZGRfdGFpbCgmc25hcC0+bGlzdCwgJm8tPnNuYXBzaG90cyk7CisJLyogU29ydCB0aGUgbGlzdCBhY2NvcmRpbmcgdG8gY2h1bmsgc2l6ZSwgbGFyZ2VzdC1maXJzdCBzbWFsbGVzdC1sYXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsLCAmby0+c25hcHNob3RzLCBsaXN0KQorCQlpZiAobC0+c3RvcmUtPmNodW5rX3NpemUgPCBzbmFwLT5zdG9yZS0+Y2h1bmtfc2l6ZSkKKwkJCWJyZWFrOworCWxpc3RfYWRkX3RhaWwoJnNuYXAtPmxpc3QsICZsLT5saXN0KTsKIAogCXVwX3dyaXRlKCZfb3JpZ2luc19sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTY2OCw2ICs2NzMsMTEgQEAKIAliaW9fbGlzdF9pbml0KCZzLT5xdWV1ZWRfYmlvcyk7CiAJSU5JVF9XT1JLKCZzLT5xdWV1ZWRfYmlvc193b3JrLCBmbHVzaF9xdWV1ZWRfYmlvcyk7CiAKKwlpZiAoIXMtPnN0b3JlLT5jaHVua19zaXplKSB7CisJCXRpLT5lcnJvciA9ICJDaHVuayBzaXplIG5vdCBzZXQiOworCQlnb3RvIGJhZF9sb2FkX2FuZF9yZWdpc3RlcjsKKwl9CisKIAkvKiBBZGQgc25hcHNob3QgdG8gdGhlIGxpc3Qgb2Ygc25hcHNob3RzIGZvciB0aGlzIG9yaWdpbiAqLwogCS8qIEV4Y2VwdGlvbnMgYXJlbid0IHRyaWdnZXJlZCB0aWxsIHNuYXBzaG90X3Jlc3VtZSgpIGlzIGNhbGxlZCAqLwogCWlmIChyZWdpc3Rlcl9zbmFwc2hvdChzKSkgewpAQCAtOTUxLDcgKzk2MSw3IEBACiAKIAlzcmMuYmRldiA9IGJkZXY7CiAJc3JjLnNlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLT5zdG9yZSwgcGUtPmUub2xkX2NodW5rKTsKLQlzcmMuY291bnQgPSBtaW4ocy0+c3RvcmUtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CisJc3JjLmNvdW50ID0gbWluKChzZWN0b3JfdClzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwgZGV2X3NpemUgLSBzcmMuc2VjdG9yKTsKIAogCWRlc3QuYmRldiA9IHMtPnN0b3JlLT5jb3ctPmJkZXY7CiAJZGVzdC5zZWN0b3IgPSBjaHVua190b19zZWN0b3Iocy0+c3RvcmUsIHBlLT5lLm5ld19jaHVuayk7CkBAIC0xMTQyLDYgKzExNTIsOCBAQAogCXVuc2lnbmVkIHN6ID0gMDsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXAgPSB0aS0+cHJpdmF0ZTsKIAorCWRvd25fd3JpdGUoJnNuYXAtPmxvY2spOworCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTVEFUVVNUWVBFX0lORk86CiAJCWlmICghc25hcC0+dmFsaWQpCkBAIC0xMTczLDYgKzExODUsOCBAQAogCQlicmVhazsKIAl9CiAKKwl1cF93cml0ZSgmc25hcC0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM4OCw3ICsxNDAyLDcgQEAKIAlzdHJ1Y3QgZG1fZGV2ICpkZXYgPSB0aS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7CiAJc3RydWN0IG9yaWdpbiAqbzsKLQljaHVua190IGNodW5rX3NpemUgPSAwOworCXVuc2lnbmVkIGNodW5rX3NpemUgPSAwOwogCiAJZG93bl9yZWFkKCZfb3JpZ2luc19sb2NrKTsKIAlvID0gX19sb29rdXBfb3JpZ2luKGRldi0+YmRldik7CkBAIC0xNDY1LDcgKzE0NzksNyBAQAogCXIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7CiAJaWYgKHIpIHsKIAkJRE1FUlIoInNuYXBzaG90IHRhcmdldCByZWdpc3RlciBmYWlsZWQgJWQiLCByKTsKLQkJcmV0dXJuIHI7CisJCWdvdG8gYmFkX3JlZ2lzdGVyX3NuYXBzaG90X3RhcmdldDsKIAl9CiAKIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZvcmlnaW5fdGFyZ2V0KTsKQEAgLTE1MjIsNiArMTUzNiw5IEBACiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJm9yaWdpbl90YXJnZXQpOwogYmFkMToKIAlkbV91bnJlZ2lzdGVyX3RhcmdldCgmc25hcHNob3RfdGFyZ2V0KTsKKworYmFkX3JlZ2lzdGVyX3NuYXBzaG90X3RhcmdldDoKKwlkbV9leGNlcHRpb25fc3RvcmVfZXhpdCgpOwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggMzc2ZjFhYi4uNzI0ZWZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtNDcsNiArNDcsNyBAQAogCWF0b21pY190IGlvX2NvdW50OwogCXN0cnVjdCBiaW8gKmJpbzsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CisJc3BpbmxvY2tfdCBlbmRpb19sb2NrOwogfTsKIAogLyoKQEAgLTU3OCw4ICs1NzksMTIgQEAKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBpby0+bWQ7CiAKIAkvKiBQdXNoLWJhY2sgc3VwZXJzZWRlcyBhbnkgSS9PIGVycm9ycyAqLwotCWlmIChlcnJvciAmJiAhKGlvLT5lcnJvciA+IDAgJiYgX19ub2ZsdXNoX3N1c3BlbmRpbmcobWQpKSkKLQkJaW8tPmVycm9yID0gZXJyb3I7CisJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW8tPmVuZGlvX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCEoaW8tPmVycm9yID4gMCAmJiBfX25vZmx1c2hfc3VzcGVuZGluZyhtZCkpKQorCQkJaW8tPmVycm9yID0gZXJyb3I7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvLT5lbmRpb19sb2NrLCBmbGFncyk7CisJfQogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlvLT5pb19jb3VudCkpIHsKIAkJaWYgKGlvLT5lcnJvciA9PSBETV9FTkRJT19SRVFVRVVFKSB7CkBAIC0xMjI2LDYgKzEyMzEsNyBAQAogCWF0b21pY19zZXQoJmNpLmlvLT5pb19jb3VudCwgMSk7CiAJY2kuaW8tPmJpbyA9IGJpbzsKIAljaS5pby0+bWQgPSBtZDsKKwlzcGluX2xvY2tfaW5pdCgmY2kuaW8tPmVuZGlvX2xvY2spOwogCWNpLnNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwogCWNpLnNlY3Rvcl9jb3VudCA9IGJpb19zZWN0b3JzKGJpbyk7CiAJaWYgKHVubGlrZWx5KGJpb19lbXB0eV9iYXJyaWVyKGJpbykpKQpAQCAtMTgyMiw2ICsxODI4LDcgQEAKIGJhZF9iZGV2OgogCWRlc3Ryb3lfd29ya3F1ZXVlKG1kLT53cSk7CiBiYWRfdGhyZWFkOgorCWRlbF9nZW5kaXNrKG1kLT5kaXNrKTsKIAlwdXRfZGlzayhtZC0+ZGlzayk7CiBiYWRfZGlzazoKIAlibGtfY2xlYW51cF9xdWV1ZShtZC0+cXVldWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDI2YmE0MmEuLmIxODJmODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTk0NCw2ICs5NDQsMTQgQEAKIAkJCSAgICBkZXNjLT5yYWlkX2Rpc2sgPCBtZGRldi0+cmFpZF9kaXNrcyAqLykgewogCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJcmRldi0+cmFpZF9kaXNrID0gZGVzYy0+cmFpZF9kaXNrOworCQl9IGVsc2UgaWYgKGRlc2MtPnN0YXRlICYgKDE8PE1EX0RJU0tfQUNUSVZFKSkgeworCQkJLyogYWN0aXZlIGJ1dCBub3QgaW4gc3luYyBpbXBsaWVzIHJlY292ZXJ5IHVwIHRvCisJCQkgKiByZXNoYXBlIHBvc2l0aW9uLiAgV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoZXJlCisJCQkgKiB0aGF0IGlzLCBzbyBzZXQgdG8gemVybyBmb3Igbm93ICovCisJCQlpZiAobWRkZXYtPm1pbm9yX3ZlcnNpb24gPj0gOTEpIHsKKwkJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSAwOworCQkJCXJkZXYtPnJhaWRfZGlzayA9IGRlc2MtPnJhaWRfZGlzazsKKwkJCX0KIAkJfQogCQlpZiAoZGVzYy0+c3RhdGUgJiAoMTw8TURfRElTS19XUklURU1PU1RMWSkpCiAJCQlzZXRfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOwpAQCAtMTAzMiw4ICsxMDQwLDE5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2MiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJbWRwX2Rpc2tfdCAqZDsKIAkJaW50IGRlc2NfbnI7Ci0JCWlmIChyZGV2Mi0+cmFpZF9kaXNrID49IDAgJiYgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYyLT5mbGFncykKLQkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpKQorCQlpbnQgaXNfYWN0aXZlID0gdGVzdF9iaXQoSW5fc3luYywgJnJkZXYyLT5mbGFncyk7CisKKwkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPj0gMCAmJgorCQkgICAgc2ItPm1pbm9yX3ZlcnNpb24gPj0gOTEpCisJCQkvKiB3ZSBoYXZlIG5vd2hlcmUgdG8gc3RvcmUgdGhlIHJlY292ZXJ5X29mZnNldCwKKwkJCSAqIGJ1dCBpZiBpdCBpcyBub3QgYmVsb3cgdGhlIHJlc2hhcGVfcG9zaXRpb24sCisJCQkgKiB3ZSBjYW4gcGlnZ3ktYmFjayBvbiB0aGF0LgorCQkJICovCisJCQlpc19hY3RpdmUgPSAxOworCQlpZiAocmRldjItPnJhaWRfZGlzayA8IDAgfHwKKwkJICAgIHRlc3RfYml0KEZhdWx0eSwgJnJkZXYyLT5mbGFncykpCisJCQlpc19hY3RpdmUgPSAwOworCQlpZiAoaXNfYWN0aXZlKQogCQkJZGVzY19uciA9IHJkZXYyLT5yYWlkX2Rpc2s7CiAJCWVsc2UKIAkJCWRlc2NfbnIgPSBuZXh0X3NwYXJlKys7CkBAIC0xMDQzLDE2ICsxMDYyLDE2IEBACiAJCWQtPm51bWJlciA9IHJkZXYyLT5kZXNjX25yOwogCQlkLT5tYWpvciA9IE1BSk9SKHJkZXYyLT5iZGV2LT5iZF9kZXYpOwogCQlkLT5taW5vciA9IE1JTk9SKHJkZXYyLT5iZGV2LT5iZF9kZXYpOwotCQlpZiAocmRldjItPnJhaWRfZGlzayA+PSAwICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpCi0JCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKKwkJaWYgKGlzX2FjdGl2ZSkKIAkJCWQtPnJhaWRfZGlzayA9IHJkZXYyLT5yYWlkX2Rpc2s7CiAJCWVsc2UKIAkJCWQtPnJhaWRfZGlzayA9IHJkZXYyLT5kZXNjX25yOyAvKiBjb21wYXRpYmlsaXR5ICovCiAJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpKQogCQkJZC0+c3RhdGUgPSAoMTw8TURfRElTS19GQVVMVFkpOwotCQllbHNlIGlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKSkgeworCQllbHNlIGlmIChpc19hY3RpdmUpIHsKIAkJCWQtPnN0YXRlID0gKDE8PE1EX0RJU0tfQUNUSVZFKTsKLQkJCWQtPnN0YXRlIHw9ICgxPDxNRF9ESVNLX1NZTkMpOworCQkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpKQorCQkJCWQtPnN0YXRlIHw9ICgxPDxNRF9ESVNLX1NZTkMpOwogCQkJYWN0aXZlKys7CiAJCQl3b3JraW5nKys7CiAJCX0gZWxzZSB7CkBAIC0xMzgyLDggKzE0MDEsNiBAQAogCiAJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCiAJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCWlmIChtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID4gcmRldi0+cmVjb3Zlcnlfb2Zmc2V0KQotCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZDsKIAkJaWYgKHJkZXYtPnJlY292ZXJ5X29mZnNldCA+IDApIHsKIAkJCXNiLT5mZWF0dXJlX21hcCB8PQogCQkJCWNwdV90b19sZTMyKE1EX0ZFQVRVUkVfUkVDT1ZFUllfT0ZGU0VUKTsKQEAgLTE5MTcsNiArMTkzNCwxNCBAQAogCSAqLwogCW1ka19yZGV2X3QgKnJkZXY7CiAKKwkvKiBGaXJzdCBtYWtlIHN1cmUgaW5kaXZpZHVhbCByZWNvdmVyeV9vZmZzZXRzIGFyZSBjb3JyZWN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgeworCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKKwkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpICYmCisJCSAgICBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID4gcmRldi0+cmVjb3Zlcnlfb2Zmc2V0KQorCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQ7CisKKwl9CQogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJaWYgKHJkZXYtPnNiX2V2ZW50cyA9PSBtZGRldi0+ZXZlbnRzIHx8CiAJCSAgICAobm9zcGFyZXMgJiYKQEAgLTI2MzEsNyArMjY1Niw3IEBACiAJCQlyZGV2LT5kZXNjX25yID0gaSsrOwogCQkJcmRldi0+cmFpZF9kaXNrID0gcmRldi0+ZGVzY19ucjsKIAkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gbWRkZXYtPnJhaWRfZGlza3MpIHsKKwkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gKG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWluKDAsIG1kZGV2LT5kZWx0YV9kaXNrcykpKSB7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKIAkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQl9CkBAIC02NTA0LDggKzY1MjksOSBAQAogIHNraXA6CiAJbWRkZXYtPmN1cnJfcmVzeW5jID0gMDsKIAltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gMDsKLQltZGRldi0+cmVzeW5jX21pbiA9IDA7Ci0JbWRkZXYtPnJlc3luY19tYXggPSBNYXhTZWN0b3I7CisJaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJLyogV2UgY29tcGxldGVkIHNvIG1heCBzZXR0aW5nIGNhbiBiZSBmb3Jnb3R0ZW4uICovCisJCW1kZGV2LT5yZXN5bmNfbWF4ID0gTWF4U2VjdG9yOwogCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2NvbXBsZXRlZCIpOwogCXdha2VfdXAoJnJlc3luY193YWl0KTsKIAlzZXRfYml0KE1EX1JFQ09WRVJZX0RPTkUsICZtZGRldi0+cmVjb3ZlcnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGQxYjliZDUuLmEwNTM0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogCS8qIGFsbG9jYXRlIGEgcjFiaW8gd2l0aCByb29tIGZvciByYWlkX2Rpc2tzIGVudHJpZXMgaW4gdGhlIGJpb3MgYXJyYXkgKi8KIAlyMV9iaW8gPSBremFsbG9jKHNpemUsIGdmcF9mbGFncyk7Ci0JaWYgKCFyMV9iaW8pCisJaWYgKCFyMV9iaW8gJiYgcGktPm1kZGV2KQogCQl1bnBsdWdfc2xhdmVzKHBpLT5tZGRldik7CiAKIAlyZXR1cm4gcjFfYmlvOwpAQCAtMTY4Myw2ICsxNjgzLDcgQEAKIAkJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwogCQkJfQogCQl9CisJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlpZiAodW5wbHVnKQogCQl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKQEAgLTE5NzgsMTMgKzE5NzksMTQgQEAKIAljb25mLT5wb29saW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpjb25mLT5wb29saW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghY29uZi0+cG9vbGluZm8pCiAJCWdvdG8gb3V0X25vX21lbTsKLQljb25mLT5wb29saW5mby0+bWRkZXYgPSBtZGRldjsKKwljb25mLT5wb29saW5mby0+bWRkZXYgPSBOVUxMOwogCWNvbmYtPnBvb2xpbmZvLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CiAJY29uZi0+cjFiaW9fcG9vbCA9IG1lbXBvb2xfY3JlYXRlKE5SX1JBSUQxX0JJT1MsIHIxYmlvX3Bvb2xfYWxsb2MsCiAJCQkJCSAgcjFiaW9fcG9vbF9mcmVlLAogCQkJCQkgIGNvbmYtPnBvb2xpbmZvKTsKIAlpZiAoIWNvbmYtPnIxYmlvX3Bvb2wpCiAJCWdvdG8gb3V0X25vX21lbTsKKwljb25mLT5wb29saW5mby0+bWRkZXYgPSBtZGRldjsKIAogCXNwaW5fbG9ja19pbml0KCZjb25mLT5kZXZpY2VfbG9jayk7CiAJbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggNTFjNGM1Yy4uYzJjYjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYworKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC02OCw3ICs2OCw3IEBACiAKIAkvKiBhbGxvY2F0ZSBhIHIxMGJpbyB3aXRoIHJvb20gZm9yIHJhaWRfZGlza3MgZW50cmllcyBpbiB0aGUgYmlvcyBhcnJheSAqLwogCXIxMF9iaW8gPSBremFsbG9jKHNpemUsIGdmcF9mbGFncyk7Ci0JaWYgKCFyMTBfYmlvKQorCWlmICghcjEwX2JpbyAmJiBjb25mLT5tZGRldikKIAkJdW5wbHVnX3NsYXZlcyhjb25mLT5tZGRldik7CiAKIAlyZXR1cm4gcjEwX2JpbzsKQEAgLTE2MzIsNiArMTYzMiw3IEBACiAJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIAkJCX0KIAkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJaWYgKHVucGx1ZykKIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7CkBAIC0yMDk1LDcgKzIwOTYsNiBAQAogCWlmICghY29uZi0+dG1wcGFnZSkKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCi0JY29uZi0+bWRkZXYgPSBtZGRldjsKIAljb25mLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CiAJY29uZi0+bmVhcl9jb3BpZXMgPSBuYzsKIAljb25mLT5mYXJfY29waWVzID0gZmM7CkBAIC0yMTMyLDYgKzIxMzIsNyBAQAogCQlnb3RvIG91dF9mcmVlX2NvbmY7CiAJfQogCisJY29uZi0+bWRkZXYgPSBtZGRldjsKIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IDk0ODI5ODAuLmQyOTIxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTE1NiwxMyArMTU2LDE2IEBACiBzdGF0aWMgaW50IHJhaWQ2X2lkeF90b19zbG90KGludCBpZHgsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsCiAJCQkgICAgIGludCAqY291bnQsIGludCBzeW5kcm9tZV9kaXNrcykKIHsKLQlpbnQgc2xvdDsKKwlpbnQgc2xvdCA9ICpjb3VudDsKIAorCWlmIChzaC0+ZGRmX2xheW91dCkKKwkJKCpjb3VudCkrKzsKIAlpZiAoaWR4ID09IHNoLT5wZF9pZHgpCiAJCXJldHVybiBzeW5kcm9tZV9kaXNrczsKIAlpZiAoaWR4ID09IHNoLT5xZF9pZHgpCiAJCXJldHVybiBzeW5kcm9tZV9kaXNrcyArIDE7Ci0Jc2xvdCA9ICgqY291bnQpKys7CisJaWYgKCFzaC0+ZGRmX2xheW91dCkKKwkJKCpjb3VudCkrKzsKIAlyZXR1cm4gc2xvdDsKIH0KIApAQCAtNzE3LDcgKzcyMCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJc3Jjc1tpXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQlzcmNzW2ldID0gTlVMTDsKIAogCWNvdW50ID0gMDsKIAlpID0gZDBfaWR4OwpAQCAtNzI3LDkgKzczMCw4IEBACiAJCXNyY3Nbc2xvdF0gPSBzaC0+ZGV2W2ldLnBhZ2U7CiAJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOwogCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKLQlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOwogCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBzeW5kcm9tZV9kaXNrczsKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCkBAIC04MTQsNyArODE2LDcgQEAKIAkgKiBzbG90IG51bWJlciBjb252ZXJzaW9uIGZvciAnZmFpbGEnIGFuZCAnZmFpbGInCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGRpc2tzIDsgaSsrKQotCQlibG9ja3NbaV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJYmxvY2tzW2ldID0gTlVMTDsKIAljb3VudCA9IDA7CiAJaSA9IGQwX2lkeDsKIAlkbyB7CkBAIC04MjgsNyArODMwLDYgQEAKIAkJCWZhaWxiID0gc2xvdDsKIAkJaSA9IHJhaWQ2X25leHRfZGlzayhpLCBkaXNrcyk7CiAJfSB3aGlsZSAoaSAhPSBkMF9pZHgpOwotCUJVR19PTihjb3VudCAhPSBzeW5kcm9tZV9kaXNrcyk7CiAKIAlCVUdfT04oZmFpbGEgPT0gZmFpbGIpOwogCWlmIChmYWlsYiA8IGZhaWxhKQpAQCAtODQ1LDcgKzg0Niw3IEBACiAJCQlpbml0X2FzeW5jX3N1Ym1pdCgmc3VibWl0LCBBU1lOQ19UWF9GRU5DRSwgTlVMTCwKIAkJCQkJICBvcHNfY29tcGxldGVfY29tcHV0ZSwgc2gsCiAJCQkJCSAgdG9fYWRkcl9jb252KHNoLCBwZXJjcHUpKTsKLQkJCXJldHVybiBhc3luY19nZW5fc3luZHJvbWUoYmxvY2tzLCAwLCBjb3VudCsyLAorCQkJcmV0dXJuIGFzeW5jX2dlbl9zeW5kcm9tZShibG9ja3MsIDAsIHN5bmRyb21lX2Rpc2tzKzIsCiAJCQkJCQkgIFNUUklQRV9TSVpFLCAmc3VibWl0KTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBwYWdlICpkZXN0OwpAQCAtMTEzOSw3ICsxMTQwLDcgQEAKIAkJCSAgICZzaC0+b3BzLnplcm9fc3VtX3Jlc3VsdCwgcGVyY3B1LT5zcGFyZV9wYWdlLCAmc3VibWl0KTsKIH0KIAotc3RhdGljIHZvaWQgcmFpZF9ydW5fb3BzKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QpCitzdGF0aWMgdm9pZCBfX3JhaWRfcnVuX29wcyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCB1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0KQogewogCWludCBvdmVybGFwX2NsZWFyID0gMCwgaSwgZGlza3MgPSBzaC0+ZGlza3M7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCA9IE5VTEw7CkBAIC0xMjA0LDIyICsxMjA1LDU1IEBACiAJcHV0X2NwdSgpOwogfQogCisjaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2CitzdGF0aWMgdm9pZCBhc3luY19ydW5fb3BzKHZvaWQgKnBhcmFtLCBhc3luY19jb29raWVfdCBjb29raWUpCit7CisJc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IHBhcmFtOworCXVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QgPSBzaC0+b3BzLnJlcXVlc3Q7CisKKwljbGVhcl9iaXRfdW5sb2NrKFNUUklQRV9PUFNfUkVRX1BFTkRJTkcsICZzaC0+c3RhdGUpOworCXdha2VfdXAoJnNoLT5vcHMud2FpdF9mb3Jfb3BzKTsKKworCV9fcmFpZF9ydW5fb3BzKHNoLCBvcHNfcmVxdWVzdCk7CisJcmVsZWFzZV9zdHJpcGUoc2gpOworfQorCitzdGF0aWMgdm9pZCByYWlkX3J1bl9vcHMoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgdW5zaWduZWQgbG9uZyBvcHNfcmVxdWVzdCkKK3sKKwkvKiBzaW5jZSBoYW5kbGVfc3RyaXBlIGNhbiBiZSBjYWxsZWQgb3V0c2lkZSBvZiByYWlkNWQgY29udGV4dAorCSAqIHdlIG5lZWQgdG8gZW5zdXJlIHNoLT5vcHMucmVxdWVzdCBpcyBkZS1zdGFnZWQgYmVmb3JlIGFub3RoZXIKKwkgKiByZXF1ZXN0IGFycml2ZXMKKwkgKi8KKwl3YWl0X2V2ZW50KHNoLT5vcHMud2FpdF9mb3Jfb3BzLAorCQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFNUUklQRV9PUFNfUkVRX1BFTkRJTkcsICZzaC0+c3RhdGUpKTsKKwlzaC0+b3BzLnJlcXVlc3QgPSBvcHNfcmVxdWVzdDsKKworCWF0b21pY19pbmMoJnNoLT5jb3VudCk7CisJYXN5bmNfc2NoZWR1bGUoYXN5bmNfcnVuX29wcywgc2gpOworfQorI2Vsc2UKKyNkZWZpbmUgcmFpZF9ydW5fb3BzIF9fcmFpZF9ydW5fb3BzCisjZW5kaWYKKwogc3RhdGljIGludCBncm93X29uZV9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mKQogewogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CisJaW50IGRpc2tzID0gbWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwogCXNoID0ga21lbV9jYWNoZV9hbGxvYyhjb25mLT5zbGFiX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNoKQogCQlyZXR1cm4gMDsKLQltZW1zZXQoc2gsIDAsIHNpemVvZigqc2gpICsgKGNvbmYtPnJhaWRfZGlza3MtMSkqc2l6ZW9mKHN0cnVjdCByNWRldikpOworCW1lbXNldChzaCwgMCwgc2l6ZW9mKCpzaCkgKyAoZGlza3MtMSkqc2l6ZW9mKHN0cnVjdCByNWRldikpOwogCXNoLT5yYWlkX2NvbmYgPSBjb25mOwogCXNwaW5fbG9ja19pbml0KCZzaC0+bG9jayk7CisJI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NgorCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNoLT5vcHMud2FpdF9mb3Jfb3BzKTsKKwkjZW5kaWYKIAotCWlmIChncm93X2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpKSB7Ci0JCXNocmlua19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKTsKKwlpZiAoZ3Jvd19idWZmZXJzKHNoLCBkaXNrcykpIHsKKwkJc2hyaW5rX2J1ZmZlcnMoc2gsIGRpc2tzKTsKIAkJa21lbV9jYWNoZV9mcmVlKGNvbmYtPnNsYWJfY2FjaGUsIHNoKTsKIAkJcmV0dXJuIDA7CiAJfQotCXNoLT5kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7CiAJLyogd2UganVzdCBjcmVhdGVkIGFuIGFjdGl2ZSBzdHJpcGUgc28uLi4gKi8KIAlhdG9taWNfc2V0KCZzaC0+Y291bnQsIDEpOwogCWF0b21pY19pbmMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsKQEAgLTEyMzEsNyArMTI2NSw3IEBACiBzdGF0aWMgaW50IGdyb3dfc3RyaXBlcyhyYWlkNV9jb25mX3QgKmNvbmYsIGludCBudW0pCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnNjOwotCWludCBkZXZzID0gY29uZi0+cmFpZF9kaXNrczsKKwlpbnQgZGV2cyA9IG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKIAogCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVswXSwKIAkJInJhaWQlZC0lcyIsIGNvbmYtPmxldmVsLCBtZG5hbWUoY29uZi0+bWRkZXYpKTsKQEAgLTEzMjksNiArMTM2Myw5IEBACiAKIAkJbnNoLT5yYWlkX2NvbmYgPSBjb25mOwogCQlzcGluX2xvY2tfaW5pdCgmbnNoLT5sb2NrKTsKKwkJI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NgorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuc2gtPm9wcy53YWl0X2Zvcl9vcHMpOworCQkjZW5kaWYKIAogCQlsaXN0X2FkZCgmbnNoLT5scnUsICZuZXdzdHJpcGVzKTsKIAl9CkBAIC0xODk5LDEwICsxOTM2LDE1IEBACiAJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX05fQ09OVElOVUU6CisJCQkvKiBMaWtlIGxlZnRfc3ltbWV0cmljLCBidXQgUCBpcyBiZWZvcmUgUSAqLwogCQkJaWYgKHNoLT5wZF9pZHggPT0gMCkKIAkJCQlpLS07CS8qIFAgRCBEIEQgUSAqLwotCQkJZWxzZSBpZiAoaSA+IHNoLT5wZF9pZHgpCi0JCQkJaSAtPSAyOyAvKiBEIEQgUSBQIEQgKi8KKwkJCWVsc2UgeworCQkJCS8qIEQgRCBRIFAgRCAqLworCQkJCWlmIChpIDwgc2gtPnBkX2lkeCkKKwkJCQkJaSArPSByYWlkX2Rpc2tzOworCQkJCWkgLT0gKHNoLT5wZF9pZHggKyAxKTsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUNfNjoKIAkJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182OgpAQCAtMjg5Niw3ICsyOTM4LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGJvb2wgaGFuZGxlX3N0cmlwZTUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGU1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3MsIGk7CkBAIC0zMTY3LDExICszMjA5LDkgQEAKIAlvcHNfcnVuX2lvKHNoLCAmcyk7CiAKIAlyZXR1cm5faW8ocmV0dXJuX2JpKTsKLQotCXJldHVybiBibG9ja2VkX3JkZXYgPT0gTlVMTDsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxlX3N0cmlwZTYoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGU2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3M7CkBAIC0zNDU1LDE3ICszNDk1LDE0IEBACiAJb3BzX3J1bl9pbyhzaCwgJnMpOwogCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7Ci0KLQlyZXR1cm4gYmxvY2tlZF9yZGV2ID09IE5VTEw7CiB9CiAKLS8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaXBlIHdhcyBoYW5kbGVkICovCi1zdGF0aWMgYm9vbCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJaWYgKHNoLT5yYWlkX2NvbmYtPmxldmVsID09IDYpCi0JCXJldHVybiBoYW5kbGVfc3RyaXBlNihzaCk7CisJCWhhbmRsZV9zdHJpcGU2KHNoKTsKIAllbHNlCi0JCXJldHVybiBoYW5kbGVfc3RyaXBlNShzaCk7CisJCWhhbmRsZV9zdHJpcGU1KHNoKTsKIH0KIAogc3RhdGljIHZvaWQgcmFpZDVfYWN0aXZhdGVfZGVsYXllZChyYWlkNV9jb25mX3QgKmNvbmYpCkBAIC0zNTAzLDkgKzM1NDAsMTAgQEAKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlpbnQgaTsKKwlpbnQgZGV2cyA9IG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGRldnM7IGkrKykgewogCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOwogCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJfcXVldWUgPSBiZGV2X2dldF9xdWV1ZShyZGV2LT5iZGV2KTsKQEAgLTQwMTEsNiArNDA0OSw4IEBACiAJCQlzZWN0b3JfbnIgPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOwogCQlzZWN0b3JfZGl2KHNlY3Rvcl9uciwgbmV3X2RhdGFfZGlza3MpOwogCQlpZiAoc2VjdG9yX25yKSB7CisJCQltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gc2VjdG9yX25yOworCQkJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfY29tcGxldGVkIik7CiAJCQkqc2tpcHBlZCA9IDE7CiAJCQlyZXR1cm4gc2VjdG9yX25yOwogCQl9CkBAIC00Mjc3LDkgKzQzMTcsNyBAQAogCWNsZWFyX2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKTsKIAlzcGluX3VubG9jaygmc2gtPmxvY2spOwogCi0JLyogd2FpdCBmb3IgYW55IGJsb2NrZWQgZGV2aWNlIHRvIGJlIGhhbmRsZWQgKi8KLQl3aGlsZSAodW5saWtlbHkoIWhhbmRsZV9zdHJpcGUoc2gpKSkKLQkJOworCWhhbmRsZV9zdHJpcGUoc2gpOwogCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIAogCXJldHVybiBTVFJJUEVfU0VDVE9SUzsKQEAgLTQzNDksMzcgKzQzODcsNiBAQAogCXJldHVybiBoYW5kbGVkOwogfQogCi0jaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2Ci1zdGF0aWMgdm9pZCBfX3Byb2Nlc3Nfc3RyaXBlKHZvaWQgKnBhcmFtLCBhc3luY19jb29raWVfdCBjb29raWUpCi17Ci0Jc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IHBhcmFtOwotCi0JaGFuZGxlX3N0cmlwZShzaCk7Ci0JcmVsZWFzZV9zdHJpcGUoc2gpOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JYXN5bmNfc2NoZWR1bGVfZG9tYWluKF9fcHJvY2Vzc19zdHJpcGUsIHNoLCBkb21haW4pOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jaHJvbml6ZV9zdHJpcGVfcHJvY2Vzc2luZyhzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JYXN5bmNfc3luY2hyb25pemVfZnVsbF9kb21haW4oZG9tYWluKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JaGFuZGxlX3N0cmlwZShzaCk7Ci0JcmVsZWFzZV9zdHJpcGUoc2gpOwotCWNvbmRfcmVzY2hlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jaHJvbml6ZV9zdHJpcGVfcHJvY2Vzc2luZyhzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci19Ci0jZW5kaWYKLQogCiAvKgogICogVGhpcyBpcyBvdXIgcmFpZDUga2VybmVsIHRocmVhZC4KQEAgLTQzOTMsNyArNDQwMCw2IEBACiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlpbnQgaGFuZGxlZDsKLQlMSVNUX0hFQUQocmFpZF9kb21haW4pOwogCiAJcHJfZGVidWcoIisrKyByYWlkNWQgYWN0aXZlXG4iKTsKIApAQCAtNDQzMCw3ICs0NDM2LDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCQogCQloYW5kbGVkKys7Ci0JCXByb2Nlc3Nfc3RyaXBlKHNoLCAmcmFpZF9kb21haW4pOworCQloYW5kbGVfc3RyaXBlKHNoKTsKKwkJcmVsZWFzZV9zdHJpcGUoc2gpOworCQljb25kX3Jlc2NoZWQoKTsKIAogCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJfQpAQCAtNDQzOCw3ICs0NDQ2LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCi0Jc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3NpbmcoJnJhaWRfZG9tYWluKTsKIAlhc3luY190eF9pc3N1ZV9wZW5kaW5nX2FsbCgpOwogCXVucGx1Z19zbGF2ZXMobWRkZXYpOwogCkBAIC00NTU4LDEzICs0NTY1LDkgQEAKIAogCWlmICghc2VjdG9ycykKIAkJc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKLQlpZiAoIXJhaWRfZGlza3MpIHsKKwlpZiAoIXJhaWRfZGlza3MpCiAJCS8qIHNpemUgaXMgZGVmaW5lZCBieSB0aGUgc21hbGxlc3Qgb2YgcHJldmlvdXMgYW5kIG5ldyBzaXplICovCi0JCWlmIChjb25mLT5yYWlkX2Rpc2tzIDwgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKLQkJCXJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQllbHNlCi0JCQlyYWlkX2Rpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKLQl9CisJCXJhaWRfZGlza3MgPSBtaW4oY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlzZWN0b3JzICY9IH4oKHNlY3Rvcl90KW1kZGV2LT5jaHVua19zZWN0b3JzIC0gMSk7CiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+bmV3X2NodW5rX3NlY3RvcnMgLSAxKTsKQEAgLTQ2NjUsNyArNDY2OCw3IEBACiAJCQl9CiAJCQlwZXJfY3B1X3B0cihjb25mLT5wZXJjcHUsIGNwdSktPnNwYXJlX3BhZ2UgPSBzcGFyZV9wYWdlOwogCQl9Ci0JCXNjcmliYmxlID0ga21hbGxvYyhzY3JpYmJsZV9sZW4oY29uZi0+cmFpZF9kaXNrcyksIEdGUF9LRVJORUwpOworCQlzY3JpYmJsZSA9IGttYWxsb2MoY29uZi0+c2NyaWJibGVfbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzY3JpYmJsZSkgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWJyZWFrOwpAQCAtNDY4Niw3ICs0Njg5LDcgQEAKIHN0YXRpYyByYWlkNV9jb25mX3QgKnNldHVwX2NvbmYobWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mOwotCWludCByYWlkX2Rpc2ssIG1lbW9yeTsKKwlpbnQgcmFpZF9kaXNrLCBtZW1vcnksIG1heF9kaXNrczsKIAltZGtfcmRldl90ICpyZGV2OwogCXN0cnVjdCBkaXNrX2luZm8gKmRpc2s7CiAKQEAgLTQ3MjIsMjggKzQ3MjUsNiBAQAogCWNvbmYgPSBremFsbG9jKHNpemVvZihyYWlkNV9jb25mX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29uZiA9PSBOVUxMKQogCQlnb3RvIGFib3J0OwotCi0JY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCWNvbmYtPnNjcmliYmxlX2xlbiA9IHNjcmliYmxlX2xlbihjb25mLT5yYWlkX2Rpc2tzKTsKLQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQotCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7Ci0JZWxzZQotCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7Ci0KLQljb25mLT5kaXNrcyA9IGt6YWxsb2MoY29uZi0+cmFpZF9kaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICghY29uZi0+ZGlza3MpCi0JCWdvdG8gYWJvcnQ7Ci0KLQljb25mLT5tZGRldiA9IG1kZGV2OwotCi0JaWYgKChjb25mLT5zdHJpcGVfaGFzaHRibCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLQkJZ290byBhYm9ydDsKLQotCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKLQlpZiAocmFpZDVfYWxsb2NfcGVyY3B1KGNvbmYpICE9IDApCi0JCWdvdG8gYWJvcnQ7Ci0KIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZm9yX3N0cmlwZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7CkBAIC00NzU3LDExICs0NzM4LDMzIEBACiAJYXRvbWljX3NldCgmY29uZi0+YWN0aXZlX2FsaWduZWRfcmVhZHMsIDApOwogCWNvbmYtPmJ5cGFzc190aHJlc2hvbGQgPSBCWVBBU1NfVEhSRVNIT0xEOwogCisJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IpCisJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwllbHNlCisJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWx0YV9kaXNrczsKKwltYXhfZGlza3MgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CisJY29uZi0+c2NyaWJibGVfbGVuID0gc2NyaWJibGVfbGVuKG1heF9kaXNrcyk7CisKKwljb25mLT5kaXNrcyA9IGt6YWxsb2MobWF4X2Rpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrX2luZm8pLAorCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25mLT5kaXNrcykKKwkJZ290byBhYm9ydDsKKworCWNvbmYtPm1kZGV2ID0gbWRkZXY7CisKKwlpZiAoKGNvbmYtPnN0cmlwZV9oYXNodGJsID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlnb3RvIGFib3J0OworCisJY29uZi0+bGV2ZWwgPSBtZGRldi0+bmV3X2xldmVsOworCWlmIChyYWlkNV9hbGxvY19wZXJjcHUoY29uZikgIT0gMCkKKwkJZ290byBhYm9ydDsKKwogCXByX2RlYnVnKCJyYWlkNTogcnVuKCVzKSBjYWxsZWQuXG4iLCBtZG5hbWUobWRkZXYpKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrOwotCQlpZiAocmFpZF9kaXNrID49IGNvbmYtPnJhaWRfZGlza3MKKwkJaWYgKHJhaWRfZGlzayA+PSBtYXhfZGlza3MKIAkJICAgIHx8IHJhaWRfZGlzayA8IDApCiAJCQljb250aW51ZTsKIAkJZGlzayA9IGNvbmYtPmRpc2tzICsgcmFpZF9kaXNrOwpAQCAtNDc5Myw3ICs0Nzk2LDcgQEAKIAl9CiAKIAltZW1vcnkgPSBjb25mLT5tYXhfbnJfc3RyaXBlcyAqIChzaXplb2Yoc3RydWN0IHN0cmlwZV9oZWFkKSArCi0JCSBjb25mLT5yYWlkX2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0OworCQkgbWF4X2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0OwogCWlmIChncm93X3N0cmlwZXMoY29uZiwgY29uZi0+bWF4X25yX3N0cmlwZXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJInJhaWQ1OiBjb3VsZG4ndCBhbGxvY2F0ZSAlZGtCIGZvciBidWZmZXJzXG4iLCBtZW1vcnkpOwpAQCAtNDgyMCwxMSArNDgyMyw0MCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAorCitzdGF0aWMgaW50IG9ubHlfcGFyaXR5KGludCByYWlkX2Rpc2ssIGludCBhbGdvLCBpbnQgcmFpZF9kaXNrcywgaW50IG1heF9kZWdyYWRlZCkKK3sKKwlzd2l0Y2ggKGFsZ28pIHsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfMDoKKwkJaWYgKHJhaWRfZGlzayA8IG1heF9kZWdyYWRlZCkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKKwkJaWYgKHJhaWRfZGlzayA+PSByYWlkX2Rpc2tzIC0gbWF4X2RlZ3JhZGVkKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wXzY6CisJCWlmIChyYWlkX2Rpc2sgPT0gMCB8fCAKKwkJICAgIHJhaWRfZGlzayA9PSByYWlkX2Rpc2tzIC0gMSkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUNfNjoKKwljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDXzY6CisJY2FzZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUNfNjoKKwljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUNfNjoKKwkJaWYgKHJhaWRfZGlzayA9PSByYWlkX2Rpc2tzIC0gMSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mOwogCWludCB3b3JraW5nX2Rpc2tzID0gMCwgY2h1bmtfc2l6ZTsKKwlpbnQgZGlydHlfcGFyaXR5X2Rpc2tzID0gMDsKIAltZGtfcmRldl90ICpyZGV2OworCXNlY3Rvcl90IHJlc2hhcGVfb2Zmc2V0ID0gMDsKIAogCWlmIChtZGRldi0+cmVjb3ZlcnlfY3AgIT0gTWF4U2VjdG9yKQogCQlwcmludGsoS0VSTl9OT1RJQ0UgInJhaWQ1OiAlcyBpcyBub3QgY2xlYW4iCkBAIC00ODU4LDYgKzQ4OTAsNyBAQAogCQkJICAgICAgICJvbiBhIHN0cmlwZSBib3VuZGFyeVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQlyZXNoYXBlX29mZnNldCA9IGhlcmVfbmV3ICogbWRkZXYtPm5ld19jaHVua19zZWN0b3JzOwogCQkvKiBoZXJlX25ldyBpcyB0aGUgc3RyaXBlIHdlIHdpbGwgd3JpdGUgdG8gKi8KIAkJaGVyZV9vbGQgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKIAkJc2VjdG9yX2RpdihoZXJlX29sZCwgbWRkZXYtPmNodW5rX3NlY3RvcnMgKgpAQCAtNDkxMywxMiArNDk0Niw1NCBAQAogCS8qCiAJICogMCBmb3IgYSBmdWxseSBmdW5jdGlvbmFsIGFycmF5LCAxIG9yIDIgZm9yIGEgZGVncmFkZWQgYXJyYXkuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCi0JCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKKwkJaWYgKHJkZXYtPnJhaWRfZGlzayA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQl3b3JraW5nX2Rpc2tzKys7CisJCS8qIFRoaXMgZGlzYyBpcyBub3QgZnVsbHkgaW4tc3luYy4gIEhvd2V2ZXIgaWYgaXQKKwkJICoganVzdCBzdG9yZWQgcGFyaXR5IChiZXlvbmQgdGhlIHJlY292ZXJ5X29mZnNldCksCisJCSAqIHdoZW4gd2UgZG9uJ3QgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgdGhlCisJCSAqIGFycmF5IGJlaW5nIGRpcnR5LgorCQkgKiBXaGVuIHJlc2hhcGUgZ29lcyAnYmFja3dhcmRzJywgd2UgbmV2ZXIgaGF2ZQorCQkgKiBwYXJ0aWFsbHkgY29tcGxldGVkIGRldmljZXMsIHNvIHdlIG9ubHkgbmVlZAorCQkgKiB0byB3b3JyeSBhYm91dCByZXNoYXBlIGdvaW5nIGZvcndhcmRzLgorCQkgKi8KKwkJLyogSGFjayBiZWNhdXNlIHYwLjkxIGRvZXNuJ3Qgc3RvcmUgcmVjb3Zlcnlfb2Zmc2V0IHByb3Blcmx5LiAqLworCQlpZiAobWRkZXYtPm1ham9yX3ZlcnNpb24gPT0gMCAmJgorCQkgICAgbWRkZXYtPm1pbm9yX3ZlcnNpb24gPiA5MCkKKwkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IHJlc2hhcGVfb2Zmc2V0OworCQkJCisJCXByaW50aygiJWQ6IHc9JWQgcGE9JWQgcHI9JWQgbT0lZCBhPSVkIHI9JWQgb3AxPSVkIG9wMj0lZFxuIiwKKwkJICAgICAgIHJkZXYtPnJhaWRfZGlzaywgd29ya2luZ19kaXNrcywgY29uZi0+cHJldl9hbGdvLAorCQkgICAgICAgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcywgY29uZi0+bWF4X2RlZ3JhZGVkLAorCQkgICAgICAgY29uZi0+YWxnb3JpdGhtLCBjb25mLT5yYWlkX2Rpc2tzLCAKKwkJICAgICAgIG9ubHlfcGFyaXR5KHJkZXYtPnJhaWRfZGlzaywKKwkJCQkgICBjb25mLT5wcmV2X2FsZ28sCisJCQkJICAgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcywKKwkJCQkgICBjb25mLT5tYXhfZGVncmFkZWQpLAorCQkgICAgICAgb25seV9wYXJpdHkocmRldi0+cmFpZF9kaXNrLAorCQkJCSAgIGNvbmYtPmFsZ29yaXRobSwKKwkJCQkgICBjb25mLT5yYWlkX2Rpc2tzLAorCQkJCSAgIGNvbmYtPm1heF9kZWdyYWRlZCkpOworCQlpZiAocmRldi0+cmVjb3Zlcnlfb2Zmc2V0IDwgcmVzaGFwZV9vZmZzZXQpIHsKKwkJCS8qIFdlIG5lZWQgdG8gY2hlY2sgb2xkIGFuZCBuZXcgbGF5b3V0ICovCisJCQlpZiAoIW9ubHlfcGFyaXR5KHJkZXYtPnJhaWRfZGlzaywKKwkJCQkJIGNvbmYtPmFsZ29yaXRobSwKKwkJCQkJIGNvbmYtPnJhaWRfZGlza3MsCisJCQkJCSBjb25mLT5tYXhfZGVncmFkZWQpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICghb25seV9wYXJpdHkocmRldi0+cmFpZF9kaXNrLAorCQkJCSBjb25mLT5wcmV2X2FsZ28sCisJCQkJIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MsCisJCQkJIGNvbmYtPm1heF9kZWdyYWRlZCkpCisJCQljb250aW51ZTsKKwkJZGlydHlfcGFyaXR5X2Rpc2tzKys7CisJfQogCi0JbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIHdvcmtpbmdfZGlza3M7CisJbWRkZXYtPmRlZ3JhZGVkID0gKG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQorCQkJICAgLSB3b3JraW5nX2Rpc2tzKTsKIAogCWlmIChtZGRldi0+ZGVncmFkZWQgPiBjb25mLT5tYXhfZGVncmFkZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogbm90IGVub3VnaCBvcGVyYXRpb25hbCBkZXZpY2VzIGZvciAlcyIKQEAgLTQ5MzEsNyArNTAwNiw3IEBACiAJbWRkZXYtPmRldl9zZWN0b3JzICY9IH4obWRkZXYtPmNodW5rX3NlY3RvcnMgLSAxKTsKIAltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCi0JaWYgKG1kZGV2LT5kZWdyYWRlZCA+IDAgJiYKKwlpZiAobWRkZXYtPmRlZ3JhZGVkID4gZGlydHlfcGFyaXR5X2Rpc2tzICYmCiAJICAgIG1kZGV2LT5yZWNvdmVyeV9jcCAhPSBNYXhTZWN0b3IpIHsKIAkJaWYgKG1kZGV2LT5va19zdGFydF9kZWdyYWRlZCkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTUzNTcsOSArNTQzMiwxMSBAQAogCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CiAJCQkJY2hhciBubVsyMF07Ci0JCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKKwkJCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQkJCWVsc2UKKwkJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKIAkJCQlhZGRlZF9kZXZpY2VzKys7Ci0JCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKIAkJCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CiAJCQkJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZtZGRldi0+a29iaiwKIAkJCQkJCSAgICAgICZyZGV2LT5rb2JqLCBubSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmggYi9kcml2ZXJzL21kL3JhaWQ1LmgKaW5kZXggMjM5MGUwZS4uZGQ3MDgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5oCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuaApAQCAtMjE0LDEyICsyMTQsMjAgQEAKIAlpbnQJCQlkaXNrczsJCS8qIGRpc2tzIGluIHN0cmlwZSAqLwogCWVudW0gY2hlY2tfc3RhdGVzCWNoZWNrX3N0YXRlOwogCWVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIHJlY29uc3RydWN0X3N0YXRlOwotCS8qIHN0cmlwZV9vcGVyYXRpb25zCisJLyoqCisJICogc3RydWN0IHN0cmlwZV9vcGVyYXRpb25zCiAJICogQHRhcmdldCAtIFNUUklQRV9PUF9DT01QVVRFX0JMSyB0YXJnZXQKKwkgKiBAdGFyZ2V0MiAtIDJuZCBjb21wdXRlIHRhcmdldCBpbiB0aGUgcmFpZDYgY2FzZQorCSAqIEB6ZXJvX3N1bV9yZXN1bHQgLSBQIGFuZCBRIHZlcmlmaWNhdGlvbiBmbGFncworCSAqIEByZXF1ZXN0IC0gYXN5bmMgc2VydmljZSByZXF1ZXN0IGZsYWdzIGZvciByYWlkX3J1bl9vcHMKIAkgKi8KIAlzdHJ1Y3Qgc3RyaXBlX29wZXJhdGlvbnMgewogCQlpbnQgCQkgICAgIHRhcmdldCwgdGFyZ2V0MjsKIAkJZW51bSBzdW1fY2hlY2tfZmxhZ3MgemVyb19zdW1fcmVzdWx0OworCQkjaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2CisJCXVuc2lnbmVkIGxvbmcJICAgICByZXF1ZXN0OworCQl3YWl0X3F1ZXVlX2hlYWRfdCAgICB3YWl0X2Zvcl9vcHM7CisJCSNlbmRpZgogCX0gb3BzOwogCXN0cnVjdCByNWRldiB7CiAJCXN0cnVjdCBiaW8JcmVxOwpAQCAtMjk0LDYgKzMwMiw4IEBACiAjZGVmaW5lCVNUUklQRV9GVUxMX1dSSVRFCTEzIC8qIGFsbCBibG9ja3MgYXJlIHNldCB0byBiZSBvdmVyd3JpdHRlbiAqLwogI2RlZmluZQlTVFJJUEVfQklPRklMTF9SVU4JMTQKICNkZWZpbmUJU1RSSVBFX0NPTVBVVEVfUlVOCTE1CisjZGVmaW5lCVNUUklQRV9PUFNfUkVRX1BFTkRJTkcJMTYKKwogLyoKICAqIE9wZXJhdGlvbiByZXF1ZXN0IGZsYWdzCiAgKi8KQEAgLTQ3OCw3ICs0ODgsNyBAQAogewogCXJldHVybiAobGF5b3V0ID49IDAgJiYgbGF5b3V0IDw9IDUpCiAJCXx8Ci0JCShsYXlvdXQgPT0gOCB8fCBsYXlvdXQgPT0gMTApCisJCShsYXlvdXQgPj0gOCAmJiBsYXlvdXQgPD0gMTApCiAJCXx8CiAJCShsYXlvdXQgPj0gMTYgJiYgbGF5b3V0IDw9IDIwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjIGIvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKaW5kZXggNjk5ZGZlZS4uMjY1NGQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiAkIy13YXkgdW5yb2xsZWQgcG9ydGFibGUgaW50ZWdlciBtYXRoIFJBSUQtNiBpbnN0cnVjdGlvbiBzZXQKICAqCi0gKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwucGwKKyAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5hd2sKICAqCiAgKiA8YmVuaD4gaHBhOiBpbiBwcm9jZXNzLAogICogeW91IGNhbiBqdXN0ICJzdGVhbCIgdGhlIHZlYyB1bml0IHdpdGggZW5hYmxlX2tlcm5lbF9hbHRpdmVjKCkgKGJ1dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmludC51YyBiL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKaW5kZXggZjliZjljYi4uZDFlMjc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNmludC51YworKysgYi9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogJCMtd2F5IHVucm9sbGVkIHBvcnRhYmxlIGludGVnZXIgbWF0aCBSQUlELTYgaW5zdHJ1Y3Rpb24gc2V0CiAgKgotICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLnBsCisgKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwuYXdrCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKaW5kZXggNThmZmRmNC4uMjg3NGNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiBPUFRGTEFHUyA9IC1PMgkJCSMgQWRqdXN0IGFzIGRlc2lyZWQKIENGTEFHUwkgPSAtSS4uIC1JIC4uLy4uLy4uL2luY2x1ZGUgLWcgJChPUFRGTEFHUykKIExECSA9IGxkCi1QRVJMCSA9IHBlcmwKK0FXSwkgPSBhd2sKIEFSCSA9IGFyCiBSQU5MSUIJID0gcmFubGliCiAKQEAgLTM1LDM1ICszNSwzNSBAQAogcmFpZDZ0ZXN0OiB0ZXN0LmMgcmFpZDYuYQogCSQoQ0MpICQoQ0ZMQUdTKSAtbyByYWlkNnRlc3QgJF4KIAotcmFpZDZhbHRpdmVjMS5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMSA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWMxLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTEgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmFsdGl2ZWMyLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAyIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzIuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MiA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2YWx0aXZlYzQuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDQgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjNC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj00IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZhbHRpdmVjOC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgOCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWM4LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTggPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmludDEuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMSA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50MS5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTEgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50Mi5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAyIDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MiA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQ0LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDQgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDQuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj00IDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDguYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgOCA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50OC5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTggPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50MTYuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMTYgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDE2LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MTYgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50MzIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMzIgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDMyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MzIgPCByYWlkNmludC51YyA+ICRACiAKIHJhaWQ2dGFibGVzLmM6IG1rdGFibGVzCiAJLi9ta3RhYmxlcyA+IHJhaWQ2dGFibGVzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvdW5yb2xsLmF3ayBiL2RyaXZlcnMvbWQvdW5yb2xsLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFhMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC91bnJvbGwuYXdrCkBAIC0wLDAgKzEsMjAgQEAKKworIyBUaGlzIGZpbHRlciByZXF1aXJlcyBvbmUgY29tbWFuZCBsaW5lIG9wdGlvbiBvZiBmb3JtIC12Tj1uCisjIHdoZXJlIG4gbXVzdCBiZSBhIGRlY2ltYWwgbnVtYmVyLgorIworIyBSZXBlYXQgZWFjaCBpbnB1dCBsaW5lIGNvbnRhaW5pbmcgJCQgbiB0aW1lcywgcmVwbGFjaW5nICQkIHdpdGggMC4uLm4tMS4KKyMgUmVwbGFjZSBlYWNoICQjIHdpdGggbiwgYW5kIGVhY2ggJCogd2l0aCBhIHNpbmdsZSAkLgorCitCRUdJTiB7CisJbiA9IE4gKyAwCit9Cit7CisJaWYgKC9cJFwkLykgeyByZXAgPSBuIH0gZWxzZSB7IHJlcCA9IDEgfQorCWZvciAoaSA9IDA7IGkgPCByZXA7ICsraSkgeworCQl0bXAgPSAkMAorCQlnc3ViKC9cJFwkLywgaSwgdG1wKQorCQlnc3ViKC9cJFwjLywgbiwgdG1wKQorCQlnc3ViKC9cJFwqLywgIiQiLCB0bXApCisJCXByaW50IHRtcAorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvdW5yb2xsLnBsIGIvZHJpdmVycy9tZC91bnJvbGwucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhY2M3MTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZC91bnJvbGwucGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLSMKLSMgVGFrZSBhIHBpZWNlIG9mIEMgY29kZSBhbmQgZm9yIGVhY2ggbGluZSB3aGljaCBjb250YWlucyB0aGUgc2VxdWVuY2UgJCQKLSMgcmVwZWF0IG4gdGltZXMgd2l0aCAkIHJlcGxhY2VkIGJ5IDAuLi5uLTE7IHRoZSBzZXF1ZW5jZSAkIyBpcyByZXBsYWNlZAotIyBieSB0aGUgdW5yb2xsaW5nIGZhY3RvciwgYW5kICQqIHdpdGggYSBzaW5nbGUgJAotIwotCi0oJG4pID0gQEFSR1Y7Ci0kbiArPSAwOwotCi13aGlsZSAoIGRlZmluZWQoJGxpbmUgPSA8U1RESU4+KSApIHsKLSAgICBpZiAoICRsaW5lID1+IC9cJFwkLyApIHsKLQkkcmVwID0gJG47Ci0gICAgfSBlbHNlIHsKLQkkcmVwID0gMTsKLSAgICB9Ci0gICAgZm9yICggJGkgPSAwIDsgJGkgPCAkcmVwIDsgJGkrKyApIHsKLQkkdG1wID0gJGxpbmU7Ci0JJHRtcCA9fiBzL1wkXCQvJGkvZzsKLQkkdG1wID1+IHMvXCRcIy8kbi9nOwotCSR0bXAgPX4gcy9cJFwqL1wkL2c7Ci0JcHJpbnQgJHRtcDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCmluZGV4IDY0NTk1MTEuLjNhNTBjZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCkBAIC02MTYsMTMgKzYxNiwxMyBAQAogCQljYXNlIFJGMjoKIAkJCW1hcFtpXS5yZl9hMSA9IChwcm9nX2NhbFtSRjJdIC0gcHJvZ190YWJbUkYyXSAtCiAJCQkJCXByb2dfY2FsW1JGMV0gKyBwcm9nX3RhYltSRjFdKSAvCi0JCQkJKChyZl9mcmVxW1JGMl0gLSByZl9mcmVxW1JGMV0pIC8gMTAwMCk7CisJCQkJKHMzMikoKHJmX2ZyZXFbUkYyXSAtIHJmX2ZyZXFbUkYxXSkgLyAxMDAwKTsKIAkJCW1hcFtpXS5yZjIgICA9IHJmX2ZyZXFbUkYyXSAvIDEwMDA7CiAJCQlicmVhazsKIAkJY2FzZSBSRjM6CiAJCQltYXBbaV0ucmZfYTIgPSAocHJvZ19jYWxbUkYzXSAtIHByb2dfdGFiW1JGM10gLQogCQkJCQlwcm9nX2NhbFtSRjJdICsgcHJvZ190YWJbUkYyXSkgLwotCQkJCSgocmZfZnJlcVtSRjNdIC0gcmZfZnJlcVtSRjJdKSAvIDEwMDApOworCQkJCShzMzIpKChyZl9mcmVxW1JGM10gLSByZl9mcmVxW1JGMl0pIC8gMTAwMCk7CiAJCQltYXBbaV0ucmZfYjIgPSBwcm9nX2NhbFtSRjJdIC0gcHJvZ190YWJbUkYyXTsKIAkJCW1hcFtpXS5yZjMgICA9IHJmX2ZyZXFbUkYzXSAvIDEwMDA7CiAJCQlicmVhazsKQEAgLTEwMDAsMTIgKzEwMDAsMTIgQEAKIAlzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcF9pdGVtICptYXA7CiAJY2hhciAqbW9kZTsKIAlpbnQgcmV0OwotCXUzMiBmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKiA2MjUwMDsKKwl1MzIgZnJlcSA9IHBhcmFtcy0+ZnJlcXVlbmN5ICogMTI1ICoKKwkJKChwYXJhbXMtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykgPyAxIDogMTAwMCkgLyAyOwogCiAJcHJpdi0+bW9kZSA9IFREQTE4MjcxX0FOQUxPRzsKIAogCWlmIChwYXJhbXMtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykgewotCQlmcmVxID0gZnJlcSAvIDEwMDA7CiAJCW1hcCA9ICZzdGRfbWFwLT5mbV9yYWRpbzsKIAkJbW9kZSA9ICJmbSI7CiAJfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX01OKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCmluZGV4IDM3NTBmZjQuLmMzNzc5MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTEyMDMsNyArMTIwNCw3IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9kdnJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9kdnJfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkucmVhZCA9IGR2Yl9kdnJfcmVhZCwKIAkud3JpdGUgPSBkdmJfZHZyX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYwppbmRleCBlZWY2ZDM2Li45MWM1MzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYwpAQCAtMjEsNiArMjEsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggOGM5YWUwYS4uMDI0MWE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKICNpbmNsdWRlICJkdmJfbmV0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggOTc0NGIwNi4uMGU0Yjk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtNzUsNyArNzUsNyBAQAogCXNlbGVjdCBEVkJfRElCMzAwME1DIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TNUgxNDExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MR0RUMzMwNSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MAorCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIyNjYgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKaW5kZXggMDczN2M2My4uM2RmMjA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpbnQgaSA9IDA7CiAJc3RydWN0IHJlcV90IHJlcTsKIAlpbnQgcmV0ID0gMDsKLQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKCZyZXEpKTsKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOwogCiAJaWYgKG51bSA+IDIpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggMGIyODEyYS4uNmJkODk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC0xOTI1LDcgKzE5MjUsNyBAQAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJCXsgICAiTGVhZHRlayBXaW5mYXN0IERUViBEb25nbGUgKFNUSzc3MDBQIGJhc2VkKSIsCi0JCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbOF0gfSwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs4XSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM0XSB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJCXsgICAiQVZlck1lZGlhIEFWZXJUViBEVkItVCBFeHByZXNzIiwKQEAgLTIwNjQsNyArMjA2NCw3IEBACiAJCQl9LAogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gMTIsCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMTEsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJEaUJjb20gU1RLNzA3MFAgcmVmZXJlbmNlIGRlc2lnbiIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMTVdLCBOVUxMIH0sCkBAIC0yMDk4LDExICsyMDk4LDYgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszMF0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCi0JCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgVCBVU0IgWFhTLyBUMyIsCi0JCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzNdLAotCQkJCQkmZGliMDcwMF91c2JfaWRfdGFibGVbNTJdLCBOVUxMIH0sCi0JCQkJeyBOVUxMIH0sCi0JCQl9LAogCQkJeyAgICJFbGdhdG8gRXllVFYgRFRUIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0OV0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKQEAgLTIzNDMsOCArMjMzOCwxMCBAQAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzU5XSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKLQkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBUIFVTQiBYWFMgKEhEKSIsCi0JCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzRdLCAmZGliMDcwMF91c2JfaWRfdGFibGVbNjBdIH0sCisJCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgVCBVU0IgWFhTIChIRCkvIFQzIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszM10sCisJCQkJCSZkaWIwNzAwX3VzYl9pZF90YWJsZVs1Ml0sCisJCQkJCSZkaWIwNzAwX3VzYl9pZF90YWJsZVs2MF0sIE5VTEx9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IGQxYjY3ZmUuLjQ4NWQwNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtMTA1MCwyOCArMTA1MCwyOCBAQAogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX1BNVDsgLyogY2EgdGFnICovCiAJYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCS8qIGMtPm9wZXJhbmRbN10gPSBYWFhwcm9ncmFtX2luZm9fbGVuZ3RoICsgMTc7ICovIC8qIGxlbmd0aCAqLwotCWMtPm9wZXJhbmRbOF0gPSBsaXN0X21hbmFnZW1lbnQ7Ci0JYy0+b3BlcmFuZFs5XSA9IDB4MDE7IC8qIHBtdF9jbWQ9T0tfZGVzY3JhbWJsZSAqLworCS8qIFVzZSB0aHJlZSBieXRlcyBmb3IgbGVuZ3RoIGZpZWxkIGluIGNhc2UgbGVuZ3RoID4gMTI3ICovCisJYy0+b3BlcmFuZFsxMF0gPSBsaXN0X21hbmFnZW1lbnQ7CisJYy0+b3BlcmFuZFsxMV0gPSAweDAxOyAvKiBwbXRfY21kPU9LX2Rlc2NyYW1ibGUgKi8KIAogCS8qIFRTIHByb2dyYW0gbWFwIHRhYmxlICovCiAKLQljLT5vcGVyYW5kWzEwXSA9IDB4MDI7IC8qIFRhYmxlIGlkPTIgKi8KLQljLT5vcGVyYW5kWzExXSA9IDB4ODA7IC8qIFNlY3Rpb24gc3ludGF4ICsgbGVuZ3RoICovCi0JLyogYy0+b3BlcmFuZFsxMl0gPSBYWFhwcm9ncmFtX2luZm9fbGVuZ3RoICsgMTI7ICovCi0JYy0+b3BlcmFuZFsxM10gPSBtc2dbMV07IC8qIFByb2dyYW0gbnVtYmVyICovCi0JYy0+b3BlcmFuZFsxNF0gPSBtc2dbMl07Ci0JYy0+b3BlcmFuZFsxNV0gPSAweDAxOyAvKiBWZXJzaW9uIG51bWJlcj0wICsgY3VycmVudC9uZXh0PTEgKi8KLQljLT5vcGVyYW5kWzE2XSA9IDB4MDA7IC8qIFNlY3Rpb24gbnVtYmVyPTAgKi8KLQljLT5vcGVyYW5kWzE3XSA9IDB4MDA7IC8qIExhc3Qgc2VjdGlvbiBudW1iZXI9MCAqLwotCWMtPm9wZXJhbmRbMThdID0gMHgxZjsgLyogUENSX1BJRD0xRkZGICovCi0JYy0+b3BlcmFuZFsxOV0gPSAweGZmOwotCWMtPm9wZXJhbmRbMjBdID0gKHByb2dyYW1faW5mb19sZW5ndGggPj4gOCk7IC8qIFByb2dyYW0gaW5mbyBsZW5ndGggKi8KLQljLT5vcGVyYW5kWzIxXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoICYgMHhmZik7CisJYy0+b3BlcmFuZFsxMl0gPSAweDAyOyAvKiBUYWJsZSBpZD0yICovCisJYy0+b3BlcmFuZFsxM10gPSAweDgwOyAvKiBTZWN0aW9uIHN5bnRheCArIGxlbmd0aCAqLworCS8qIGMtPm9wZXJhbmRbMTRdID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDEyOyAqLworCWMtPm9wZXJhbmRbMTVdID0gbXNnWzFdOyAvKiBQcm9ncmFtIG51bWJlciAqLworCWMtPm9wZXJhbmRbMTZdID0gbXNnWzJdOworCWMtPm9wZXJhbmRbMTddID0gMHgwMTsgLyogVmVyc2lvbiBudW1iZXI9MCArIGN1cnJlbnQvbmV4dD0xICovCisJYy0+b3BlcmFuZFsxOF0gPSAweDAwOyAvKiBTZWN0aW9uIG51bWJlcj0wICovCisJYy0+b3BlcmFuZFsxOV0gPSAweDAwOyAvKiBMYXN0IHNlY3Rpb24gbnVtYmVyPTAgKi8KKwljLT5vcGVyYW5kWzIwXSA9IDB4MWY7IC8qIFBDUl9QSUQ9MUZGRiAqLworCWMtPm9wZXJhbmRbMjFdID0gMHhmZjsKKwljLT5vcGVyYW5kWzIyXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoID4+IDgpOyAvKiBQcm9ncmFtIGluZm8gbGVuZ3RoICovCisJYy0+b3BlcmFuZFsyM10gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCAmIDB4ZmYpOwogCiAJLyogQ0EgZGVzY3JpcHRvcnMgYXQgcHJvZ3JhbW1lIGxldmVsICovCiAJcmVhZF9wb3MgPSA2OwotCXdyaXRlX3BvcyA9IDIyOworCXdyaXRlX3BvcyA9IDI0OwogCWlmIChwcm9ncmFtX2luZm9fbGVuZ3RoID4gMCkgewogCQlwbXRfY21kX2lkID0gbXNnW3JlYWRfcG9zKytdOwogCQlpZiAocG10X2NtZF9pZCAhPSAxICYmIHBtdF9jbWRfaWQgIT0gNCkKQEAgLTExMTMsOCArMTExMywxMCBAQAogCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKIAljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7CiAKLQljLT5vcGVyYW5kWzddID0gd3JpdGVfcG9zIC0gODsKLQljLT5vcGVyYW5kWzEyXSA9IHdyaXRlX3BvcyAtIDEzOworCWMtPm9wZXJhbmRbN10gPSAweDgyOworCWMtPm9wZXJhbmRbOF0gPSAod3JpdGVfcG9zIC0gMTApID4+IDg7CisJYy0+b3BlcmFuZFs5XSA9ICh3cml0ZV9wb3MgLSAxMCkgJiAweGZmOworCWMtPm9wZXJhbmRbMTRdID0gd3JpdGVfcG9zIC0gMTU7CiAKIAljcmMzMl9jc3VtID0gY3JjMzJfYmUoMCwgJmMtPm9wZXJhbmRbMTBdLCBjLT5vcGVyYW5kWzEyXSAtIDEpOwogCWMtPm9wZXJhbmRbd3JpdGVfcG9zIC0gNF0gPSAoY3JjMzJfY3N1bSA+PiAyNCkgJiAweGZmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jCmluZGV4IGVlYjgwZDAuLjg1M2UwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWNpLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXJldHVybiBQT0xMSU47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZkdHZfY2FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZkdHZfY2FfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLAogCS5vcGVuCQk9IGR2Yl9nZW5lcmljX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMKaW5kZXggN2JhNDM2My4uZTQ5Y2RjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZmUuYwpAQCAtMTQxLDE4ICsxNDEsMTIgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLSNkZWZpbmUgQUNDRVBURUQgMHg5Ci0KIHN0YXRpYyBpbnQgZmR0dl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZmUtPnNlY19wcml2OwogCi0JLyogRklYTUU6IGF2Y190dW5lcl9kc2QgbmV2ZXIgcmV0dXJucyBBQ0NFUFRFRC4gQ2hlY2sgc3RhdHVzPyAqLwotCWlmIChhdmNfdHVuZXJfZHNkKGZkdHYsIHBhcmFtcykgIT0gQUNDRVBURUQpCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UKLQkJcmV0dXJuIDA7IC8qIG5vdCBzdXJlIG9mIHRoaXMuLi4gKi8KKwlyZXR1cm4gYXZjX3R1bmVyX2RzZChmZHR2LCBwYXJhbXMpOwogfQogCiBzdGF0aWMgaW50IGZkdHZfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKaW5kZXggOGEyZTFlNy4uZWVjOWU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCkBAIC01MSw2ICs1MSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfRElCMDA3MF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKTsKIGV4dGVybiB1MTYgZGliMDA3MF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CitleHRlcm4gdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG9wZW4pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMDA3MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZGliMDA3MF9jb25maWcgKmNmZykKIHsKQEAgLTYzLDcgKzY0LDExIEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggb3BlbikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKK30KICNlbmRpZgotZXh0ZXJuIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBvcGVuKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCmluZGV4IDU1ZWY2ZWUuLjA3ODFmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCkBAIC0xMzc1LDYgKzEzNzUsMTEgQEAKIAlpZiAoZGliNzAwMHBfaWRlbnRpZnkoc3QpICE9IDApCiAJCWdvdG8gZXJyb3I7CiAKKwkvKiBGSVhNRTogbWFrZSBzdXJlIHRoZSBkZXYucGFyZW50IGZpZWxkIGlzIGluaXRpYWxpemVkLCBvciBlbHNlCisJcmVxdWVzdF9maXJtd2FyZSgpIHdpbGwgaGl0IGFuIE9PUFMgKHRoaXMgc2hvdWxkIGJlIG1vdmVkIHNvbWV3aGVyZQorCW1vcmUgY29tbW9uKSAqLworCXN0LT5pMmNfbWFzdGVyLmdhdGVkX3R1bmVyX2kyY19hZGFwLmRldi5wYXJlbnQgPSBpMmNfYWRhcC0+ZGV2LnBhcmVudDsKKwogCWRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKCZzdC0+aTJjX21hc3RlciwgRElCNzAwMFAsIHN0LT5pMmNfYWRhcCwgc3QtPmkyY19hZGRyKTsKIAogCWRpYjcwMDBwX2RlbW9kX3Jlc2V0KHN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYwppbmRleCA4MWU2MjNhLi4xZmQ4MzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJkdmJkZXYuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKaW5kZXggY2I4YTM1OC4uOGY4OGE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKQEAgLTUyOSw2ICs1MjksMTIgQEAKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OSUNFIH0sCiAJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMzAxKSwKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19WRU5JQ0UgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweGI5MDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHhiOTEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YzAwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKaW5kZXggOGIxNDQwMS4uNDgyZDBmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBWNEwyIEFQSSBkZWZzCQkqLwogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCA5MzlkMWU1Li5hNjcyNDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC0xMjk5LDcgKzEyOTksNyBAQAogCiAJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tub3JtXTsKIAotCWlmICghbWVtY21wKCZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAsICZ0dm5vcm0tPmNyb3BjYXAsCisJaWYgKG1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLCAmdHZub3JtLT5jcm9wY2FwLAogCQkgICAgc2l6ZW9mICh0dm5vcm0tPmNyb3BjYXApKSkgewogCQlidHR2X2Nyb3BfcmVzZXQoJmJ0di0+Y3JvcFswXSwgbm9ybSk7CiAJCWJ0di0+Y3JvcFsxXSA9IGJ0di0+Y3JvcFswXTsgLyogY3VycmVudCA9IGRlZmF1bHQgKi8KQEAgLTM4MDAsMTEgKzM4MDAsMzQgQEAKIAkJaWYgKCFWNEwyX0ZJRUxEX0hBU19CT1RIKGl0ZW0tPnZiLmZpZWxkKSAmJgogCQkgICAgKGl0ZW0tPnZiLnF1ZXVlLm5leHQgIT0gJmJ0di0+Y2FwdHVyZSkpIHsKIAkJCWl0ZW0gPSBsaXN0X2VudHJ5KGl0ZW0tPnZiLnF1ZXVlLm5leHQsIHN0cnVjdCBidHR2X2J1ZmZlciwgdmIucXVldWUpOworCQkJLyogTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPiAtIE9ubHkgY2hlY2sKKwkJCSAqIGFuZCBzZXQgdXAgdGhlIGJvdHRvbSBmaWVsZCBpbiB0aGUgbG9naWMKKwkJCSAqIGJlbG93LiAgRG9uJ3QgZXZlciBkbyB0aGUgdG9wIGZpZWxkLiAgVGhpcworCQkJICogb2YgY291cnNlIG1lYW5zIHRoYXQgaWYgd2Ugc2V0IHVwIHRoZQorCQkJICogYm90dG9tIGZpZWxkIGluIHRoZSBhYm92ZSBjb2RlIHRoYXQgd2UnbGwKKwkJCSAqIGFjdHVhbGx5IHNraXAgYSBmaWVsZC4gIEJ1dCB0aGF0J3MgT0suCisJCQkgKiBIYXZpbmcgcHJvY2Vzc2VkIG9ubHkgYSBzaW5nbGUgYnVmZmVyIHRoaXMKKwkJCSAqIHRpbWUsIHRoZW4gdGhlIG5leHQgdGltZSBhcm91bmQgdGhlIGZpcnN0CisJCQkgKiBhdmFpbGFibGUgYnVmZmVyIHNob3VsZCBiZSBmb3IgYSB0b3AgZmllbGQuCisJCQkgKiBUaGF0IHdpbGwgdGhlbiBjYXVzZSB1cyBoZXJlIHRvIHNldCB1cCBhCisJCQkgKiB0b3AgdGhlbiBhIGJvdHRvbSBmaWVsZCBpbiB0aGUgbm9ybWFsIHdheS4KKwkJCSAqIFRoZSBhbHRlcm5hdGl2ZSB0byB0aGlzIHVuZGVyc3RhbmRpbmcgaXMKKwkJCSAqIHRoYXQgd2Ugc2V0IHVwIHRoZSBzZWNvbmQgYXZhaWxhYmxlIGJ1ZmZlcgorCQkJICogYXMgYSB0b3AgZmllbGQsIGJ1dCB0aGF0J3Mgb3V0IG9mIG9yZGVyCisJCQkgKiBzaW5jZSB0aGlzIGRyaXZlciBhbHdheXMgcHJvY2Vzc2VzIHRoZSB0b3AKKwkJCSAqIGZpZWxkIGZpcnN0IC0gdGhlIGVmZmVjdCB3aWxsIGJlIHRoZSB0d28KKwkJCSAqIGJ1ZmZlcnMgYmVpbmcgcmV0dXJuZWQgaW4gdGhlIHdyb25nIG9yZGVyLAorCQkJICogd2l0aCB0aGUgc2Vjb25kIGJ1ZmZlciBhbHNvIGJlaW5nIGRlbGF5ZWQKKwkJCSAqIGJ5IG9uZSBmaWVsZCB0aW1lIChvd2luZyB0byB0aGUgZmlmbyBuYXR1cmUKKwkJCSAqIG9mIHZpZGVvYnVmKS4gIFdvcnNlIHN0aWxsLCB3ZSdsbCBiZSBzdHVjaworCQkJICogZG9pbmcgZmllbGRzIG91dCBvZiBvcmRlciBub3cgZXZlcnkgdGltZQorCQkJICogdW50aWwgc29tZXRoaW5nIGVsc2UgY2F1c2VzIGEgZmllbGQgdG8gYmUKKwkJCSAqIGRyb3BwZWQuICBCeSBlZmZlY3RpdmVseSBmb3JjaW5nIGEgZmllbGQgdG8KKwkJCSAqIGRyb3AgdGhpcyB3YXkgdGhlbiB3ZSBhbHdheXMgZ2V0IGJhY2sgaW50bworCQkJICogc3luYyB3aXRoaW4gYSBzaW5nbGUgZnJhbWUgdGltZS4gIChPdXQgb2YKKwkJCSAqIG9yZGVyIGZpZWxkcyBjYW4gc2NyZXcgdXAgZGVpbnRlcmxhY2luZworCQkJICogYWxnb3JpdGhtcy4pICovCiAJCQlpZiAoIVY0TDJfRklFTERfSEFTX0JPVEgoaXRlbS0+dmIuZmllbGQpKSB7Ci0JCQkJaWYgKE5VTEwgPT0gc2V0LT50b3AgJiYKLQkJCQkgICAgVjRMMl9GSUVMRF9UT1AgPT0gaXRlbS0+dmIuZmllbGQpIHsKLQkJCQkJc2V0LT50b3AgPSBpdGVtOwotCQkJCX0KIAkJCQlpZiAoTlVMTCA9PSBzZXQtPmJvdHRvbSAmJgogCQkJCSAgICBWNEwyX0ZJRUxEX0JPVFRPTSA9PSBpdGVtLT52Yi5maWVsZCkgewogCQkJCQlzZXQtPmJvdHRvbSA9IGl0ZW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA2NTdjNDgxLi4xMDIzMGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTEzMjUsNyArMTMyNSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZzYnVmLT5jYW0tPnNfbXV0ZXgpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNhZmVfdjRsX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgY2FmZV92NGxfdm1fb3BzID0gewogCS5vcGVuID0gY2FmZV92NGxfdm1fb3BlbiwKIAkuY2xvc2UgPSBjYWZlX3Y0bF92bV9jbG9zZQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKaW5kZXggNDNhYjBhZC4uMjM3NzMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IDdiZDhhNzAuLmFjOTQ3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCkBAIC0zODMsNiArMzgzLDExIEBACiAKIHN0YXRpYyBpbnQgc25kX2VtMjh4eF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogeworCXN0cnVjdCBlbTI4eHggKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWRldi0+YWRldi5od3B0cl9kb25lX2NhcHR1cmUgPSAwOworCWRldi0+YWRldi5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKaW5kZXggNzQwOTJmNC4uODg5ODdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKQEAgLTE0OTYsNyArMTQ5Niw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBldDYxeDI1MV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGV0NjF4MjUxX3ZtX29wcyA9IHsKIAkub3BlbiA9IGV0NjF4MjUxX3ZtX29wZW4sCiAJLmNsb3NlID0gZXQ2MXgyNTFfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGNmNjU0MGQuLjIzZDNmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJZnJhbWUtPnY0bDJfYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX01BUFBFRDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnc3BjYV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdzcGNhX3ZtX29wcyA9IHsKIAkub3BlbgkJPSBnc3BjYV92bV9vcGVuLAogCS5jbG9zZQkJPSBnc3BjYV92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwppbmRleCA1OTQwMGU4Li5hMjdhZmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKQEAgLTM1LDEyICszNSwyNSBAQAogICAgIGNvbnN0CiAJc3RydWN0IGRtaV9zeXN0ZW1faWQgczVrNGFhX3ZmbGlwX2RtaV90YWJsZVtdID0gewogCXsKKwkJLmlkZW50ID0gIkJSVU5FSU5JVCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQlJVTkVOSVQiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQlJVTkVOSVQiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVSU0lPTiwgIjAwMDMwRDAwMDAwMDAwMDEiKQorCQl9CisJfSwgewogCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFhhIDI1MjgiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBYYSAyNTI4IikKIAkJfQogCX0sIHsKKwkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYaSAyNTI4IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGkgMjUyOCIpCisJCX0KKwl9LCB7CiAJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gWGkgMjU1MCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCkBAIC01Nyw2ICs3MCwxMyBAQAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJHWDcwMCIpLAorCQkJRE1JX01BVENIKERNSV9CSU9TX0RBVEUsICIxMi8wMi8yMDA4IikKKwkJfQorCX0sIHsKKwkJLmlkZW50ID0gIk1TSSBHWDcwMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm8tU3RhciBJbnRlcm5hdGlvbmFsIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkdYNzAwIiksCiAJCQlETUlfTUFUQ0goRE1JX0JJT1NfREFURSwgIjA3LzI2LzIwMDciKQogCQl9CiAJfSwgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCmluZGV4IDE0MGM4ZjMuLmY4MzI4YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCQlkYXRhWzNdID0gMHgyYzsJCQkgICAvKiByZWcgMiwgSCBzaXplLzggKi8KIAkJZGF0YVs0XSA9IDB4NDg7CQkJICAgLyogcmVnIDMsIFYgc2l6ZS80ICovCiAJCWRhdGFbNl0gPSAweDA2OwkJCSAgIC8qIHJlZyA1LCBIIHN0YXJ0ICAqLwotCQlkYXRhWzhdID0gMHgwNiArIHNkLT5zZW5zb3JfdHlwZTsgIC8qIHJlZyA3LCBWIHN0YXJ0ICAqLworCQlkYXRhWzhdID0gMHgwNiAtIHNkLT5zZW5zb3JfdHlwZTsgIC8qIHJlZyA3LCBWIHN0YXJ0ICAqLwogCQlicmVhazsKIAl9CiAJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDExKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCAyZjZlMTM1Li5hNWMxOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC0yOTE5LDcgKzI5MTksNyBAQAogCS8qIEEgZmFsc2UgcG9zaXRpdmUgaGVyZSBpcyBsaWtlbHksIHVudGlsIE9WVCBnaXZlcyBtZQogCSAqIHRoZSBkZWZpbml0aXZlIFNPRi9FT0YgZm9ybWF0ICovCiAJaWYgKCghKGRhdGFbMF0gfCBkYXRhWzFdIHwgZGF0YVsyXSB8IGRhdGFbM10gfCBkYXRhWzVdKSkgJiYgZGF0YVs2XSkgewotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOwogCQlzZC0+cGFja2V0X25yID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwppbmRleCA2NTQ4OWQ2Li5iZmFlNjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKQEAgLTM5NCw3ICszOTQsOCBAQAogCQkJUERFQlVHKERfUEFDSywgIkVuZCBvZiBmcmFtZSBkZXRlY3RlZCIpOwogCiAJCQkvKiBDb21wbGV0ZSB0aGUgbGFzdCBmcmFtZSAoaWYgYW55KSAqLwotCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKKwkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCQlmcmFtZSwgZGF0YSwgMCk7CiAKIAkJCWlmIChjaHVua19sZW4pCiAJCQkJUERFQlVHKERfRVJSLCAiQ2h1bmsgbGVuZ3RoIGlzICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKaW5kZXggZDA3NjViZS4uMDFlMWVlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKQEAgLTI4LDYgKzI4LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KQEAgLTE1ODksNyArMTU5MCw3IEBACiAJbWV5ZS52bWFfdXNlX2NvdW50W2lkeF0tLTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtZXllX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbWV5ZV92bV9vcHMgPSB7CiAJLm9wZW4JCT0gbWV5ZV92bV9vcGVuLAogCS5jbG9zZQkJPSBtZXllX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggNjk1MmU5Ni4uNTFiNjgzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgpAQCAtMTQzMiw3ICsxNDMzLDkgQEAKIAkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKIAogCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjYW1fZm10LT5mb3VyY2M7Ci0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCBmKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsICZjYW1fZik7CisJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisJKnBpeCA9IGNhbV9mLmZtdC5waXg7CiAKIAlpY2QtPnNlbnNlID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCmluZGV4IDllMzI2MmMuLjJjMGJiMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKQEAgLTU5OCwxMSArNTk4LDYgQEAKIAlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwKIAkJCSBzdHJ1Y3QgczIyNTVfYnVmZmVyLCB2Yi5xdWV1ZSk7CiAKLQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJmJ1Zi0+dmIuZG9uZSkpIHsKLQkJLyogbm8gb25lIGFjdGl2ZSAqLwotCQlyYyA9IC0xOwotCQlnb3RvIHVubG9jazsKLQl9CiAJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwogCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7CiAJZHByaW50aygxMDAsICJbJXAvJWRdIHdha2V1cFxuIiwgYnVmLCBidWYtPnZiLmkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggNzExNDViZi4uMDkwMTMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0zNDI4LDYgKzM0MjgsNyBAQAogCQkudHVuZXJfY29uZmlnICAgPSAzLAogCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkudHNfdHlwZQk9IFNBQTcxMzRfTVBFR19UU19TRVJJQUwsCisJCS50c19mb3JjZV92YWwgICA9IDEsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDgwMDEwMCwgLyogR1BJTyAyMSBpcyBhbiBJTlBVVCAqLwogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKaW5kZXggM2ZhNjUyMi4uMDM0ODhiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCkBAIC0yNjIsMTEgKzI2MiwxMyBAQAogCXN3aXRjaCAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfdHlwZSkgewogCWNhc2UgU0FBNzEzNF9NUEVHX1RTX1BBUkFMTEVMOgogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHg0MCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyB8CisJCQkoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfZm9yY2VfdmFsIDw8IDQpKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X01QRUdfVFNfU0VSSUFMOgogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHhkOCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg2Yyk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg2YyB8CisJCQkoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfZm9yY2VfdmFsIDw8IDQpKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMX1NFUklBTCwgMHhiYyk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAyKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA2ZWUzZTliLi5mODY5N2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTM2MCw2ICszNjAsNyBAQAogCWVudW0gc2FhNzEzNF9tcGVnX3R5cGUgIG1wZWc7CiAJZW51bSBzYWE3MTM0X21wZWdfdHNfdHlwZSB0c190eXBlOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHZpZF9wb3J0X29wdHM7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgdHNfZm9yY2VfdmFsOjE7CiB9OwogCiAjZGVmaW5lIGNhcmRfaGFzX3JhZGlvKGRldikgICAoTlVMTCAhPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yYWRpby5uYW1lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwppbmRleCBjNDU5NjZlLi45YzFkM2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKIAkvKiBQcmVwYXJlIHNvbWUgYmFzaWMgY29tbWFuZC9yZXNwb25zZSBzdHJ1Y3R1cmVzICovCiAJbWVtc2V0KCZjb21tYW5kX3QsIDAsIHNpemVvZihjb21tYW5kX3QpKTsKLQltZW1zZXQoJnJlc3BvbnNlX3QsIDAsIHNpemVvZigmcmVzcG9uc2VfdCkpOworCW1lbXNldCgmcmVzcG9uc2VfdCwgMCwgc2l6ZW9mKHJlc3BvbnNlX3QpKTsKIAlwY29tbWFuZF90ID0gJmNvbW1hbmRfdDsKIAlwcmVzcG9uc2VfdCA9ICZyZXNwb25zZV90OwogCWNvbW1hbmRfdC5pZCA9IGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDVhYjdjNWEuLjJmNzhiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogCQkgIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKLQljbGtfZW5hYmxlKHBjZGV2LT5jbGspOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaWNpLT52NGwyX2Rldi5kZXYpOwogCiAJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgMSA8PCAxNik7IC8qIHJlc2V0ICovCiAJd2hpbGUgKGNldV9yZWFkKHBjZGV2LCBDU1RTUikgJiAxKQpAQCAtNDM4LDcgKzQzOCw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CiAKLQljbGtfZGlzYWJsZShwY2Rldi0+Y2xrKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGljaS0+djRsMl9kZXYuZGV2KTsKIAogCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwKIAkJICJTdXBlckggTW9iaWxlIENFVSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCkBAIC0xMTczLDggKzExNzMsOCBAQAogCXdpZHRoX2luID0gc2NhbGVfdXAoY2FtLT5jZXVfcmVjdC53aWR0aCwgKnNjYWxlX2gpOwogCWhlaWdodF9pbiA9IHNjYWxlX3VwKGNhbS0+Y2V1X3JlY3QuaGVpZ2h0LCAqc2NhbGVfdik7CiAKLQkqc2NhbGVfaCA9IGNhbGNfZ2VuZXJpY19zY2FsZShjYW0tPmNldV9yZWN0LndpZHRoLCBpY2QtPnVzZXJfd2lkdGgpOwotCSpzY2FsZV92ID0gY2FsY19nZW5lcmljX3NjYWxlKGNhbS0+Y2V1X3JlY3QuaGVpZ2h0LCBpY2QtPnVzZXJfaGVpZ2h0KTsKKwkqc2NhbGVfaCA9IGNhbGNfZ2VuZXJpY19zY2FsZSh3aWR0aF9pbiwgaWNkLT51c2VyX3dpZHRoKTsKKwkqc2NhbGVfdiA9IGNhbGNfZ2VuZXJpY19zY2FsZShoZWlnaHRfaW4sIGljZC0+dXNlcl9oZWlnaHQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKaW5kZXggOWQ4NGM5NC4uNGE3NzExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMjA3Nyw3ICsyMDc3LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuOWMxMDJfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbjljMTAyX3ZtX29wcyA9IHsKIAkub3BlbiA9IHNuOWMxMDJfdm1fb3BlbiwKIAkuY2xvc2UgPSBzbjljMTAyX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKaW5kZXggNTlhYTdhMy4uMzZlNjE3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0xMTYwLDEzICsxMTYwLDE1IEBACiAJCWlmIChpY2QtPmlmYWNlID09IGljaS0+bnIpIHsKIAkJCS8qIFRoZSBidXMtPnJlbW92ZSB3aWxsIGJlIGNhbGxlZCAqLwogCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmljZC0+ZGV2KTsKLQkJCS8qIE5vdCBiZWZvcmUgZGV2aWNlX3VucmVnaXN0ZXIoKSwgLnJlbW92ZQotCQkJICogbmVlZHMgcGFyZW50IHRvIGNhbGwgaWNpLT5vcHMtPnJlbW92ZSgpICovCi0JCQlpY2QtPmRldi5wYXJlbnQgPSBOVUxMOwotCi0JCQkvKiBJZiB0aGUgaG9zdCBtb2R1bGUgaXMgbG9hZGVkIGFnYWluLCBkZXZpY2VfcmVnaXN0ZXIoKQotCQkJICogd291bGQgY29tcGxhaW4gImFscmVhZHkgaW5pdGlhbGlzZWQiICovCi0JCQltZW1zZXQoJmljZC0+ZGV2LmtvYmosIDAsIHNpemVvZihpY2QtPmRldi5rb2JqKSk7CisJCQkvKgorCQkJICogTm90IGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpLCAucmVtb3ZlCisJCQkgKiBuZWVkcyBwYXJlbnQgdG8gY2FsbCBpY2ktPm9wcy0+cmVtb3ZlKCkuCisJCQkgKiBJZiB0aGUgaG9zdCBtb2R1bGUgaXMgbG9hZGVkIGFnYWluLCBkZXZpY2VfcmVnaXN0ZXIoKQorCQkJICogd291bGQgY29tcGxhaW4gImFscmVhZHkgaW5pdGlhbGlzZWQsIiBzaW5jZSAyLjYuMzIKKwkJCSAqIHRoaXMgaXMgYWxzbyBuZWVkZWQgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvZiB0aGUKKwkJCSAqIGRldmljZSBwcml2YXRlIGRhdGEuCisJCQkgKi8KKwkJCW1lbXNldCgmaWNkLT5kZXYsIDAsIHNpemVvZihpY2QtPmRldikpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IDBiOTk2ZWEuLjZiNDE4NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC03OTAsNyArNzkwLDcgQEAKIAlpZiAoc2J1Zi0+bWFwY291bnQgPT0gMCkKIAkJc2J1Zi0+djRsYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX01BUFBFRDsKIH0KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3RrX3Y0bF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHN0a192NGxfdm1fb3BzID0gewogCS5vcGVuID0gc3RrX3Y0bF92bV9vcGVuLAogCS5jbG9zZSA9IHN0a192NGxfdm1fY2xvc2UKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwppbmRleCBjMzIyNWE1Li4xYjg5NzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogCV9fczMyIHZhbHVlLCBfX3U4ICpkYXRhKQogewogCWRhdGFbMF0gPSB2YWx1ZSA9PSAwID8gMCA6ICh2YWx1ZSA+IDApID8gMSA6IDB4ZmY7Ci0JZGF0YVsyXSA9IG1pbihhYnModmFsdWUpLCAweGZmKTsKKwlkYXRhWzJdID0gbWluKChpbnQpYWJzKHZhbHVlKSwgMHhmZik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyB1dmNfY3RybF9tYXBwaW5nc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKaW5kZXggOWU3MzUxNS4uYTJiZGQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCkBAIC0xMDY5LDcgKzEwNjksNyBAQAogCWJ1ZmZlci0+dm1hX3VzZV9jb3VudC0tOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHV2Y192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHV2Y192bV9vcHMgPSB7CiAJLm9wZW4JCT0gdXZjX3ZtX29wZW4sCiAJLmNsb3NlCQk9IHV2Y192bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCmluZGV4IGY5NjBlOGUuLmE2ZTQxZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCkBAIC05MCw3ICs5MCw4IEBACiAJCWN0cmwtPmR3TWF4VmlkZW9GcmFtZVNpemUgPQogCQkJZnJhbWUtPmR3TWF4VmlkZW9GcmFtZUJ1ZmZlclNpemU7CiAKLQlpZiAoc3RyZWFtLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19GSVhfQkFORFdJRFRIICYmCisJaWYgKCEoZm9ybWF0LT5mbGFncyAmIFVWQ19GTVRfRkxBR19DT01QUkVTU0VEKSAmJgorCSAgICBzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEggJiYKIAkgICAgc3RyZWFtLT5pbnRmLT5udW1fYWx0c2V0dGluZyA+IDEpIHsKIAkJdTMyIGludGVydmFsOwogCQl1MzIgYmFuZHdpZHRoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYwppbmRleCBmMWNjZjk4Li44ZTkzYzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwppbmRleCBkMDljZTgzLi42MzVmZmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0gewogCS5vcGVuICAgICA9IHZpZGVvYnVmX3ZtX29wZW4sCiAJLmNsb3NlICAgID0gdmlkZW9idWZfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKaW5kZXggYThkZDIyYS4uMDMyZWJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTM5NCw3ICszOTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9CiB7CiAJLm9wZW4gICAgID0gdmlkZW9idWZfdm1fb3BlbiwKIAkuY2xvc2UgICAgPSB2aWRlb2J1Zl92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKaW5kZXggMzBhZTMwZi4uMzVmMzkwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPQogewogCS5vcGVuICAgICA9IHZpZGVvYnVmX3ZtX29wZW4sCiAJLmNsb3NlICAgID0gdmlkZW9idWZfdm1fY2xvc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCmluZGV4IGNkNmEzNDQuLmIwMzRhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCkBAIC0zODU3LDcgKzM4NTcsNyBAQAogCWRwcmludGsoInZpbm9fdm1fY2xvc2UoKTogY291bnQgPSAlZFxuIiwgZmItPm1hcF9jb3VudCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdmlub192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpbm9fdm1fb3BzID0gewogCS5vcGVuCT0gdmlub192bV9vcGVuLAogCS5jbG9zZQk9IHZpbm9fdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKaW5kZXggYjNjNjQzNi4uMzEyYTcxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCkBAIC05MzUsNyArOTM1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpjMDMwMV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpjMDMwMV92bV9vcHMgPSB7CiAJLm9wZW4gPSB6YzAzMDFfdm1fb3BlbiwKIAkuY2xvc2UgPSB6YzAzMDFfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggYmNkZWZiMS4uNDcxMzdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC0zMTcyLDcgKzMxNzIsNyBAQAogCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpvcmFuX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgem9yYW5fdm1fb3BzID0gewogCS5vcGVuID0gem9yYW5fdm1fb3BlbiwKIAkuY2xvc2UgPSB6b3Jhbl92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYwppbmRleCBiYzJlYzIxLi4zNGYzZjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjZGVmaW5lIG15X1ZFUlNJT04JTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCiAjZGVmaW5lIE1ZTkFNCQkibXB0bGFuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKaW5kZXggNTQ0N2RhMS4uNjEzNDgxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCkBAIC01Nyw4ICs1Nyw2IEBACiAgKiBUaGUgQUIzMTAwIGlzIHVzdWFsbHkgYXNzaWduZWQgYWRkcmVzcyAweDQ4ICg3LWJpdCkKICAqIFRoZSBjaGlwIGlzIGRlZmluZWQgaW4gdGhlIHBsYXRmb3JtIGkyY19ib2FyZF9kYXRhIHNlY3Rpb24uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIEkyQ19DTElFTlRfRU5EIH07Ci1JMkNfQ0xJRU5UX0lOU01PRF8xKGFiMzEwMCk7CiAKIHU4IGFiMzEwMF9nZXRfY2hpcF90eXBlKHN0cnVjdCBhYjMxMDAgKmFiMzEwMCkKIHsKQEAgLTk2Niw3ICs5NjQsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWIzMTAwX2lkW10gPSB7Ci0JeyAiYWIzMTAwIiwgYWIzMTAwIH0sCisJeyAiYWIzMTAwIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhYjMxMDBfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwppbmRleCBlNDI0Y2Y2Li5hMWM0N2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpAQCAtNDgwLDcgKzQ4MCw2IEBACiBhZGRfY2hpbGRyZW4oc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSAqcGRhdGEsIHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMpCiB7CiAJc3RydWN0IGRldmljZQkqY2hpbGQ7Ci0Jc3RydWN0IGRldmljZQkqdXNiX3RyYW5zY2VpdmVyID0gTlVMTDsKIAogCWlmICh0d2xfaGFzX2JjaSgpICYmIHBkYXRhLT5iY2kgJiYgIShmZWF0dXJlcyAmIFRQU19TVUJTRVQpKSB7CiAJCWNoaWxkID0gYWRkX2NoaWxkKDMsICJ0d2w0MDMwX2JjaSIsCkBAIC01MzIsMTYgKzUzMSw2MSBAQAogCX0KIAogCWlmICh0d2xfaGFzX3VzYigpICYmIHBkYXRhLT51c2IpIHsKKworCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY1ID0geworCQkJLnN1cHBseSA9CSJ1c2IxdjUiLAorCQl9OworCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY4ID0geworCQkJLnN1cHBseSA9CSJ1c2IxdjgiLAorCQl9OworCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiM3YxID0geworCQkJLnN1cHBseSA9CSJ1c2IzdjEiLAorCQl9OworCisJLyogRmlyc3QgYWRkIHRoZSByZWd1bGF0b3JzIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBieSB0cmFuc2NlaXZlciAqLworCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSkgeworCQkJLyogdGhpcyBpcyBhIHRlbXBsYXRlIHRoYXQgZ2V0cyBjb3BpZWQgKi8KKwkJCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHVzYl9maXhlZCA9IHsKKwkJCQkuY29uc3RyYWludHMudmFsaWRfbW9kZXNfbWFzayA9CisJCQkJCVJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCQkJLmNvbnN0cmFpbnRzLnZhbGlkX29wc19tYXNrID0KKwkJCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCQl9OworCisJCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjUsCisJCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiMXY1LCAxKTsKKwkJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY4LAorCQkJCQkJICAgICAgJnVzYl9maXhlZCwgJnVzYjF2OCwgMSk7CisJCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjNWMSwKKwkJCQkJCSAgICAgICZ1c2JfZml4ZWQsICZ1c2IzdjEsIDEpOworCQkJaWYgKElTX0VSUihjaGlsZCkpCisJCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCX0KKwogCQljaGlsZCA9IGFkZF9jaGlsZCgwLCAidHdsNDAzMF91c2IiLAogCQkJCXBkYXRhLT51c2IsIHNpemVvZigqcGRhdGEtPnVzYiksCiAJCQkJdHJ1ZSwKIAkJCQkvKiBpcnEwID0gVVNCX1BSRVMsIGlycTEgPSBVU0IgKi8KIAkJCQlwZGF0YS0+aXJxX2Jhc2UgKyA4ICsgMiwgcGRhdGEtPmlycV9iYXNlICsgNCk7CisKIAkJaWYgKElTX0VSUihjaGlsZCkpCiAJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CiAKIAkJLyogd2UgbmVlZCB0byBjb25uZWN0IHJlZ3VsYXRvcnMgdG8gdGhpcyB0cmFuc2NlaXZlciAqLwotCQl1c2JfdHJhbnNjZWl2ZXIgPSBjaGlsZDsKKwkJaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgY2hpbGQpIHsKKwkJCXVzYjF2NS5kZXYgPSBjaGlsZDsKKwkJCXVzYjF2OC5kZXYgPSBjaGlsZDsKKwkJCXVzYjN2MS5kZXYgPSBjaGlsZDsKKwkJfQogCX0KIAogCWlmICh0d2xfaGFzX3dhdGNoZG9nKCkpIHsKQEAgLTU4MCw0NyArNjI0LDYgQEAKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKIAl9CiAKLQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiB1c2JfdHJhbnNjZWl2ZXIpIHsKLQkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjF2NSA9IHsKLQkJCS5zdXBwbHkgPQkidXNiMXY1IiwKLQkJfTsKLQkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjF2OCA9IHsKLQkJCS5zdXBwbHkgPQkidXNiMXY4IiwKLQkJfTsKLQkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjN2MSA9IHsKLQkJCS5zdXBwbHkgPQkidXNiM3YxIiwKLQkJfTsKLQotCQkvKiB0aGlzIGlzIGEgdGVtcGxhdGUgdGhhdCBnZXRzIGNvcGllZCAqLwotCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB1c2JfZml4ZWQgPSB7Ci0JCQkuY29uc3RyYWludHMudmFsaWRfbW9kZXNfbWFzayA9Ci0JCQkJICBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCQkuY29uc3RyYWludHMudmFsaWRfb3BzX21hc2sgPQotCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQkJfTsKLQotCQl1c2IxdjUuZGV2ID0gdXNiX3RyYW5zY2VpdmVyOwotCQl1c2IxdjguZGV2ID0gdXNiX3RyYW5zY2VpdmVyOwotCQl1c2IzdjEuZGV2ID0gdXNiX3RyYW5zY2VpdmVyOwotCi0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWNSwgJnVzYl9maXhlZCwKLQkJCQkmdXNiMXY1LCAxKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY4LCAmdXNiX2ZpeGVkLAotCQkJCSZ1c2IxdjgsIDEpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IzVjEsICZ1c2JfZml4ZWQsCi0JCQkJJnVzYjN2MSwgMSk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCX0KLQogCS8qIG1heWJlIGFkZCBMRE9zIHRoYXQgYXJlIG9taXR0ZWQgb24gY29zdC1yZWR1Y2VkIHBhcnRzICovCiAJaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgIShmZWF0dXJlcyAmIFRQU19TVUJTRVQpKSB7CiAJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WUExMMiwgcGRhdGEtPnZwbGwyKTsKQEAgLTc5Miw3ICs3OTUsNyBAQAogCQkJdHdsLT5jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKIAkJCQkJdHdsLT5hZGRyZXNzKTsKIAkJCWlmICghdHdsLT5jbGllbnQpIHsKLQkJCQlkZXZfZXJyKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJCQkiY2FuJ3QgYXR0YWNoIGNsaWVudCAlZFxuIiwgaSk7CiAJCQkJc3RhdHVzID0gLUVOT01FTTsKIAkJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCmluZGV4IDJhZmMwODAuLmZhMjk0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdWNiMTQwMC5oPgogCiB1bnNpZ25lZCBpbnQgdWNiMTQwMF9hZGNfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHUxNiBhZGNfY2hhbm5lbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKaW5kZXggZmVhOTA4NS4uNjBjMzk4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzF4LWlycS5jIGIvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCmluZGV4IGQzMDE1ZGYuLmFjMDU2ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYworKysgYi9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKQEAgLTUwNyw2ICs1MDcsOCBAQAogewogCWludCBpLCByZXQ7CiAKKwltdXRleF9pbml0KCZ3bTgzMXgtPmlycV9sb2NrKTsKKwogCWlmICghaXJxKSB7CiAJCWRldl93YXJuKHdtODMxeC0+ZGV2LAogCQkJICJObyBpbnRlcnJ1cHQgc3BlY2lmaWVkIC0gZnVuY3Rpb25hbGl0eSBsaW1pdGVkXG4iKTsKQEAgLTUyMSw3ICs1MjMsNiBAQAogCX0KIAogCXdtODMxeC0+aXJxID0gaXJxOwotCW11dGV4X2luaXQoJndtODMxeC0+aXJxX2xvY2spOwogCUlOSVRfV09SSygmd204MzF4LT5pcnFfd29yaywgd204MzF4X2lycV93b3JrZXIpOwogCiAJLyogTWFzayB0aGUgaW5kaXZpZHVhbCBpbnRlcnJ1cHQgc291cmNlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VlcHJvbS9tYXg2ODc1LmMgYi9kcml2ZXJzL21pc2MvZWVwcm9tL21heDY4NzUuYwppbmRleCAzYzBjNThlLi41YTZiMmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZWVwcm9tL21heDY4NzUuYworKysgYi9kcml2ZXJzL21pc2MvZWVwcm9tL21heDY4NzUuYwpAQCAtMzMsMTIgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0vKiBEbyBub3Qgc2NhbiAtIHRoZSBNQVg2ODc1IGFjY2VzcyBtZXRob2Qgd2lsbCB3cml0ZSB0byBzb21lIEVFUFJPTSBjaGlwcyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobWF4Njg3NSk7Ci0KIC8qIFRoZSBNQVg2ODc1IGNhbiBvbmx5IHJlYWQvd3JpdGUgMTYgYnl0ZXMgYXQgYSB0aW1lICovCiAjZGVmaW5lIFNMSUNFX1NJWkUJCQkxNgogI2RlZmluZSBTTElDRV9CSVRTCQkJNApAQCAtMTQ2LDMxICsxNDAsMjEgQEAKIAkucmVhZCA9IG1heDY4NzVfcmVhZCwKIH07CiAKLS8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBtYXg2ODc1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQorc3RhdGljIGludCBtYXg2ODc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlzdHJ1Y3QgbWF4Njg3NV9kYXRhICpkYXRhOworCWludCBlcnI7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQQogCQkJCSAgICAgfCBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIE9ubHkgY2hlY2sgZXZlbiBhZGRyZXNzZXMgKi8KKwkvKiBPbmx5IGJpbmQgdG8gZXZlbiBhZGRyZXNzZXMgKi8KIAlpZiAoY2xpZW50LT5hZGRyICYgMSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzdHJsY3B5KGluZm8tPnR5cGUsICJtYXg2ODc1IiwgSTJDX05BTUVfU0laRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtYXg2ODc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBtYXg2ODc1X2RhdGEgKmRhdGE7Ci0JaW50IGVycjsKLQogCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWF4Njg3NV9kYXRhKSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjIyLDkgKzIwNiw2IEBACiAJLnByb2JlCQk9IG1heDY4NzVfcHJvYmUsCiAJLnJlbW92ZQkJPSBtYXg2ODc1X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBtYXg2ODc1X2lkLAotCi0JLmRldGVjdAkJPSBtYXg2ODc1X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1heDY4NzVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hwaWxvLmMgYi9kcml2ZXJzL21pc2MvaHBpbG8uYwppbmRleCAxYWQyN2M2Li5hOTJhM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaHBpbG8uYworKysgYi9kcml2ZXJzL21pc2MvaHBpbG8uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9jb21tYW5kLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYwppbmRleCAyNzZkM2ZiLi5lMjAzMTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYwpAQCAtMjIsNiArMjIsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpYm1hc20uaCIKICNpbmNsdWRlICJsb3dsZXZlbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2V2ZW50LmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2V2ZW50LmMKaW5kZXggNjhhMGE1Yi4uNTcyZDQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9ldmVudC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYwpAQCAtMjIsNiArMjIsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpYm1hc20uaCIKICNpbmNsdWRlICJsb3dsZXZlbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMKaW5kZXggYmVjOWUyYy4uMmRlNDg3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9yX2hlYXJ0YmVhdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcl9oZWFydGJlYXQuYwpAQCAtMjAsNiArMjAsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpYm1hc20uaCIKICNpbmNsdWRlICJkb3RfY29tbWFuZC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvcGhhbnRvbS5jIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwppbmRleCBmYTU3YjY3Li4wNGMyNzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCisrKyBiL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcGhhbnRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTI3MSw3ICsyNzIsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaGFudG9tX2ZpbGVfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGhhbnRvbV9maWxlX29wcyA9IHsKIAkub3BlbiA9IHBoYW50b21fb3BlbiwKIAkucmVsZWFzZSA9IHBoYW50b21fcmVsZWFzZSwKIAkudW5sb2NrZWRfaW9jdGwgPSBwaGFudG9tX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IGFlZDYwOTguLjQxYzhmZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTUzLDcgKzUzLDYgQEAKIC8qIEd1YXJhbnRlZWQgdXNlciBhdmFpbGFibGUgcmVzb3VyY2VzIG9uIGVhY2ggbm9kZSAqLwogc3RhdGljIGludCBtYXhfdXNlcl9jYnJzLCBtYXhfdXNlcl9kc3JfYnl0ZXM7CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdydV9mb3BzOwogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGdydV9taXNjZGV2OwogCiAKQEAgLTQyNiw3ICs0MjUsNyBAQAogCWdydV9wcm9jX2V4aXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3J1X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncnVfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnVubG9ja2VkX2lvY3RsCT0gZ3J1X2ZpbGVfdW5sb2NrZWRfaW9jdGwsCiAJLm1tYXAJCT0gZ3J1X2ZpbGVfbW1hcCwKQEAgLTQzOCw3ICs0MzcsNyBAQAogCS5mb3BzCQk9ICZncnVfZm9wcywKIH07CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBncnVfdm1fb3BzID0geworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdydV92bV9vcHMgPSB7CiAJLmNsb3NlCQk9IGdydV92bWFfY2xvc2UsCiAJLmZhdWx0CQk9IGdydV9mYXVsdCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVwcm9jZnMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCmluZGV4IGNjZDQ0MDguLjNmMjM3NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCkBAIC0xNjEsMTQgKzE2MSwxNSBAQAogc3RhdGljIHNzaXplX3Qgb3B0aW9uc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWNoYXIgYnVmWzgwXTsKKwljaGFyIGJ1ZlsyMF07CiAKLQlpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBzaXplb2YoYnVmKSAtIDEpIDwgMCkKKwlpZiAoY291bnQgPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JYnVmW2NvdW50IC0gMV0gPSAnXDAnOwotCWlmICghc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCi0JCWdydV9vcHRpb25zID0gdmFsOworCWJ1Zltjb3VudF0gPSAnXDAnOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZncnVfb3B0aW9ucykpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaAppbmRleCAzNGFiM2Q0Li40Njk5MGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaApAQCAtNjI0LDcgKzYyNCw3IEBACiAgKi8KIHN0cnVjdCBncnVfdW5sb2FkX2NvbnRleHRfcmVxOwogCi1leHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdydV92bV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdydV92bV9vcHM7CiBleHRlcm4gc3RydWN0IGRldmljZSAqZ3J1ZGV2OwogCiBleHRlcm4gc3RydWN0IGdydV92bWFfZGF0YSAqZ3J1X2FsbG9jX3ZtYV9kYXRhKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwppbmRleCA2MTBkYmQxLi45NmQxMGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1tY19kYmdfZXh0X2NzZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW1jX2RiZ19leHRfY3NkX2ZvcHMgPSB7CiAJLm9wZW4JCT0gbW1jX2V4dF9jc2Rfb3BlbiwKIAkucmVhZAkJPSBtbWNfZXh0X2NzZF9yZWFkLAogCS5yZWxlYXNlCT0gbW1jX2V4dF9jc2RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwppbmRleCA2NjM2MzU0Li5mODVkY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCkBAIC0yOSw2ICsyOSw4IEBACiAJdW5zaWduZWQgaSwgbnJfc3RyaW5nczsKIAljaGFyICoqYnVmZmVyLCAqc3RyaW5nOwogCisJLyogRmluZCBhbGwgbnVsbC10ZXJtaW5hdGVkIChpbmNsdWRpbmcgemVybyBsZW5ndGgpIHN0cmluZ3MgaW4KKwkgICB0aGUgVFBMTFYxX0lORk8gZmllbGQuIFRyYWlsaW5nIGdhcmJhZ2UgaXMgaWdub3JlZC4gKi8KIAlidWYgKz0gMjsKIAlzaXplIC09IDI7CiAKQEAgLTM5LDExICs0MSw4IEBACiAJCWlmIChidWZbaV0gPT0gMCkKIAkJCW5yX3N0cmluZ3MrKzsKIAl9Ci0KLQlpZiAobnJfc3RyaW5ncyA8IDQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0RJTzogaWdub3JpbmcgYnJva2VuIENJU1RQTF9WRVJTXzFcbiIpOworCWlmIChucl9zdHJpbmdzID09IDApCiAJCXJldHVybiAwOwotCX0KIAogCXNpemUgPSBpOwogCkBAIC05OCw2ICs5NywyMiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzcGVlZF91bml0WzhdID0KIAl7IDEwMDAwLCAxMDAwMDAsIDEwMDAwMDAsIDEwMDAwMDAwLCAwLCAwLCAwLCAwIH07CiAKKy8qIEZVTkNFIHR1cGxlcyB3aXRoIHRoZXNlIHR5cGVzIGdldCBwYXNzZWQgdG8gU0RJTyBkcml2ZXJzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmdW5jZV90eXBlX3doaXRlbGlzdFtdID0geworCTQgLyogQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEIHVzZWQgaW4gQnJvYWRjb20gY2FyZHMgKi8KK307CisKK3N0YXRpYyBpbnQgY2lzdHBsX2Z1bmNlX3doaXRlbGlzdGVkKHVuc2lnbmVkIGNoYXIgdHlwZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZ1bmNlX3R5cGVfd2hpdGVsaXN0KTsgaSsrKSB7CisJCWlmIChmdW5jZV90eXBlX3doaXRlbGlzdFtpXSA9PSB0eXBlKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGNpc3RwbF9mdW5jZV9jb21tb24oc3RydWN0IG1tY19jYXJkICpjYXJkLAogCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgc2l6ZSkKIHsKQEAgLTEyMCw2ICsxMzUsMTAgQEAKIAl1bnNpZ25lZCB2c247CiAJdW5zaWduZWQgbWluX3NpemU7CiAKKwkvKiBsZXQgU0RJTyBkcml2ZXJzIHRha2UgY2FyZSBvZiB3aGl0ZWxpc3RlZCBGVU5DRSB0dXBsZXMgKi8KKwlpZiAoY2lzdHBsX2Z1bmNlX3doaXRlbGlzdGVkKGJ1ZlswXSkpCisJCXJldHVybiAtRUlMU0VROworCiAJdnNuID0gZnVuYy0+Y2FyZC0+Y2Njci5zZGlvX3ZzbjsKIAltaW5fc2l6ZSA9ICh2c24gPT0gU0RJT19TRElPX1JFVl8xXzAwKSA/IDI4IDogNDI7CiAKQEAgLTE1NCwxMyArMTczLDEyIEBACiAJZWxzZQogCQlyZXQgPSBjaXN0cGxfZnVuY2VfY29tbW9uKGNhcmQsIGJ1Ziwgc2l6ZSk7CiAKLQlpZiAocmV0KSB7CisJaWYgKHJldCAmJiByZXQgIT0gLUVJTFNFUSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgQ0lTVFBMX0ZVTkNFIHNpemUgJXUgIgogCQkgICAgICAgInR5cGUgJXVcbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgc2l6ZSwgYnVmWzBdKTsKLQkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiB0eXBlZGVmIGludCAodHBsX3BhcnNlX3QpKHN0cnVjdCBtbWNfY2FyZCAqLCBzdHJ1Y3Qgc2Rpb19mdW5jICosCkBAIC0yNTMsOCArMjcxLDMzIEBACiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNpc190cGxfbGlzdCk7IGkrKykKIAkJCWlmIChjaXNfdHBsX2xpc3RbaV0uY29kZSA9PSB0cGxfY29kZSkKIAkJCQlicmVhazsKLQkJaWYgKGkgPj0gQVJSQVlfU0laRShjaXNfdHBsX2xpc3QpKSB7Ci0JCQkvKiB0aGlzIHR1cGxlIGlzIHVua25vd24gdG8gdGhlIGNvcmUgKi8KKwkJaWYgKGkgPCBBUlJBWV9TSVpFKGNpc190cGxfbGlzdCkpIHsKKwkJCWNvbnN0IHN0cnVjdCBjaXNfdHBsICp0cGwgPSBjaXNfdHBsX2xpc3QgKyBpOworCQkJaWYgKHRwbF9saW5rIDwgdHBsLT5taW5fc2l6ZSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IGJhZCBDSVMgdHVwbGUgMHglMDJ4IgorCQkJCSAgICAgICAiIChsZW5ndGggPSAldSwgZXhwZWN0ZWQgPj0gJXUpXG4iLAorCQkJCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCisJCQkJICAgICAgIHRwbF9jb2RlLCB0cGxfbGluaywgdHBsLT5taW5fc2l6ZSk7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCX0gZWxzZSBpZiAodHBsLT5wYXJzZSkgeworCQkJCXJldCA9IHRwbC0+cGFyc2UoY2FyZCwgZnVuYywKKwkJCQkJCSB0aGlzLT5kYXRhLCB0cGxfbGluayk7CisJCQl9CisJCQkvKgorCQkJICogV2UgZG9uJ3QgbmVlZCB0aGUgdHVwbGUgYW55bW9yZSBpZiBpdCB3YXMKKwkJCSAqIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYnkgdGhlIFNESU8gY29yZSBvciBpZiBpdCBpcworCQkJICogbm90IGdvaW5nIHRvIGJlIHBhcnNlZCBieSBTRElPIGRyaXZlcnMuCisJCQkgKi8KKwkJCWlmICghcmV0IHx8IHJldCAhPSAtRUlMU0VRKQorCQkJCWtmcmVlKHRoaXMpOworCQl9IGVsc2UgeworCQkJLyogdW5rbm93biB0dXBsZSAqLworCQkJcmV0ID0gLUVJTFNFUTsKKwkJfQorCisJCWlmIChyZXQgPT0gLUVJTFNFUSkgeworCQkJLyogdGhpcyB0dXBsZSBpcyB1bmtub3duIHRvIHRoZSBjb3JlIG9yIHdoaXRlbGlzdGVkICovCiAJCQl0aGlzLT5uZXh0ID0gTlVMTDsKIAkJCXRoaXMtPmNvZGUgPSB0cGxfY29kZTsKIAkJCXRoaXMtPnNpemUgPSB0cGxfbGluazsKQEAgLTI2MywxOSArMzA2LDggQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkgICAgICAgIiVzOiBxdWV1aW5nIENJUyB0dXBsZSAweCUwMnggbGVuZ3RoICV1XG4iLAogCQkJICAgICAgIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgdHBsX2NvZGUsIHRwbF9saW5rKTsKLQkJfSBlbHNlIHsKLQkJCWNvbnN0IHN0cnVjdCBjaXNfdHBsICp0cGwgPSBjaXNfdHBsX2xpc3QgKyBpOwotCQkJaWYgKHRwbF9saW5rIDwgdHBsLT5taW5fc2l6ZSkgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiJXM6IGJhZCBDSVMgdHVwbGUgMHglMDJ4IChsZW5ndGggPSAldSwgZXhwZWN0ZWQgPj0gJXUpXG4iLAotCQkJCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCi0JCQkJICAgICAgIHRwbF9jb2RlLCB0cGxfbGluaywgdHBsLT5taW5fc2l6ZSk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCX0gZWxzZSBpZiAodHBsLT5wYXJzZSkgewotCQkJCXJldCA9IHRwbC0+cGFyc2UoY2FyZCwgZnVuYywKLQkJCQkJCSB0aGlzLT5kYXRhLCB0cGxfbGluayk7Ci0JCQl9Ci0JCQlrZnJlZSh0aGlzKTsKKwkJCS8qIGtlZXAgb24gYW5hbHl6aW5nIHR1cGxlcyAqLworCQkJcmV0ID0gMDsKIAkJfQogCiAJCXB0ciArPSB0cGxfbGluazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCA3Y2IwNTdmLi40MzJhZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC0yNzYsNiArMjc2LDQ3IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBNTUNfUzNDX0hXX1NESU9fSVJRCisgICAgICAgYm9vbCAiSGFyZHdhcmUgc3VwcG9ydCBmb3IgU0RJTyBJUlEiCisgICAgICAgZGVwZW5kcyBvbiBNTUNfUzNDCisgICAgICAgaGVscAorICAgICAgICAgRW5hYmxlIHRoZSBoYXJkd2FyZSBzdXBwb3J0IGZvciBTRElPIGludGVycnVwdHMgaW5zdGVhZCBvZiB1c2luZworCSB0aGUgZ2VuZXJpYyBwb2xsaW5nIGNvZGUuCisKK2Nob2ljZQorCXByb21wdCAiU2Ftc3VuZyBTM0MgU0QvTU1DIHRyYW5zZmVyIGNvZGUiCisJZGVwZW5kcyBvbiBNTUNfUzNDCisKK2NvbmZpZyBNTUNfUzNDX1BJTworCWJvb2wgIlVzZSBQSU8gdHJhbnNmZXJzIG9ubHkiCisJaGVscAorCSAgVXNlIFBJTyB0byB0cmFuc2ZlciBkYXRhIGJldHdlZW4gbWVtb3J5IGFuZCB0aGUgaGFyZHdhcmUuCisKKwkgIFBJTyBpcyBzbG93ZXIgdGhhbiBETUEgYXMgaXQgcmVxdWlyZXMgQ1BVIGluc3RydWN0aW9ucyB0bworCSAgbW92ZSB0aGUgZGF0YS4gVGhpcyBoYXMgYmVlbiB0aGUgdHJhZGl0aW9uYWwgZGVmYXVsdCBmb3IKKwkgIHRoZSBTM0MgTUNJIGRyaXZlci4KKworY29uZmlnIE1NQ19TM0NfRE1BCisJYm9vbCAiVXNlIERNQSB0cmFuc2ZlcnMgb25seSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFVzZSBETUEgdG8gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIG1lbW9yeSBhbmQgdGhlIGhhcmRhcmUuCisKKwkgIEN1cnJlbnRseSwgdGhlIERNQSBzdXBwb3J0IGluIHRoaXMgZHJpdmVyIHNlZW1zIHRvIG5vdCBiZQorCSAgd29ya2luZyBwcm9wZXJseSBhbmQgbmVlZHMgdG8gYmUgZGVidWdnZWQgYmVmb3JlIHRoaXMKKwkgIG9wdGlvbiBpcyB1c2VmdWwuCisKK2NvbmZpZyBNTUNfUzNDX1BJT0RNQQorCWJvb2wgIlN1cHBvcnQgZm9yIGJvdGggUElPIGFuZCBETUEgKEVYUEVSSU1FTlRBTCkiCisJaGVscAorCSAgQ29tcGlsZSBib3RoIHRoZSBQSU8gYW5kIERNQSB0cmFuc2ZlciByb3V0aW5lcyBpbnRvIHRoZQorCSAgZHJpdmVyIGFuZCBsZXQgdGhlIHBsYXRmb3JtIHNlbGVjdCBhdCBydW4tdGltZSB3aGljaCBvbmUKKwkgIGlzIGJlc3QuCisKKwkgIFNlZSBub3RlcyBmb3IgdGhlIERNQSBvcHRpb24uCisKK2VuZGNob2ljZQorCiBjb25maWcgTU1DX1NEUklDT0hfQ1MKIAl0cmlzdGF0ZSAiTU1DL1NEIGRyaXZlciBmb3IgUmljb2ggQmF5MUNvbnRyb2xsZXJzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFBDSSAmJiBQQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYwppbmRleCBlNTU2ZDQyLi42MzkyNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCkBAIC03Miw3ICs3Miw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfbWNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDg3NDFkMGYuLjcwNWE1ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0yMiwxMiArMjIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAKICNpbmNsdWRlICJtbWNpLmgiCiAKQEAgLTM4LDYgKzM5LDM2IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm1heCA9IDUxNTYzMzsKIAorLyoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBob3N0LT5sb2NrIGhlbGQKKyAqLworc3RhdGljIHZvaWQgbW1jaV9zZXRfY2xrcmVnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBkZXNpcmVkKQoreworCXUzMiBjbGsgPSAwOworCisJaWYgKGRlc2lyZWQpIHsKKwkJaWYgKGRlc2lyZWQgPj0gaG9zdC0+bWNsaykgeworCQkJY2xrID0gTUNJX0NMS19CWVBBU1M7CisJCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsazsKKwkJfSBlbHNlIHsKKwkJCWNsayA9IGhvc3QtPm1jbGsgLyAoMiAqIGRlc2lyZWQpIC0gMTsKKwkJCWlmIChjbGsgPj0gMjU2KQorCQkJCWNsayA9IDI1NTsKKwkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrIC8gKDIgKiAoY2xrICsgMSkpOworCQl9CisJCWlmIChob3N0LT5od19kZXNpZ25lciA9PSAweDgwKQorCQkJY2xrIHw9IE1DSV9GQ0VOOyAvKiBCdWcgZml4IGluIFNUIElQIGJsb2NrICovCisJCWNsayB8PSBNQ0lfQ0xLX0VOQUJMRTsKKwkJLyogVGhpcyBoYXNuJ3QgcHJvdmVuIHRvIGJlIHdvcnRod2hpbGUgKi8KKwkJLyogY2xrIHw9IE1DSV9DTEtfUFdSU0FWRTsgKi8KKwl9CisKKwlpZiAoaG9zdC0+bW1jLT5pb3MuYnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKKwkJY2xrIHw9IE1DSV9XSURFX0JVUzsKKworCXdyaXRlbChjbGssIGhvc3QtPmJhc2UgKyBNTUNJQ0xPQ0spOworfQorCiBzdGF0aWMgdm9pZAogbW1jaV9yZXF1ZXN0X2VuZChzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKIHsKQEAgLTQxOSwzMCArNDUwLDMxIEBACiBzdGF0aWMgdm9pZCBtbWNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCiB7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0JdTMyIGNsayA9IDAsIHB3ciA9IDA7Ci0KLQlpZiAoaW9zLT5jbG9jaykgewotCQlpZiAoaW9zLT5jbG9jayA+PSBob3N0LT5tY2xrKSB7Ci0JCQljbGsgPSBNQ0lfQ0xLX0JZUEFTUzsKLQkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrOwotCQl9IGVsc2UgewotCQkJY2xrID0gaG9zdC0+bWNsayAvICgyICogaW9zLT5jbG9jaykgLSAxOwotCQkJaWYgKGNsayA+PSAyNTYpCi0JCQkJY2xrID0gMjU1OwotCQkJaG9zdC0+Y2NsayA9IGhvc3QtPm1jbGsgLyAoMiAqIChjbGsgKyAxKSk7Ci0JCX0KLQkJaWYgKGhvc3QtPmh3X2Rlc2lnbmVyID09IEFNQkFfVkVORE9SX1NUKQotCQkJY2xrIHw9IE1DSV9GQ0VOOyAvKiBCdWcgZml4IGluIFNUIElQIGJsb2NrICovCi0JCWNsayB8PSBNQ0lfQ0xLX0VOQUJMRTsKLQl9Ci0KLQlpZiAoaG9zdC0+cGxhdC0+dHJhbnNsYXRlX3ZkZCkKLQkJcHdyIHw9IGhvc3QtPnBsYXQtPnRyYW5zbGF0ZV92ZGQobW1jX2RldihtbWMpLCBpb3MtPnZkZCk7CisJdTMyIHB3ciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJY2FzZSBNTUNfUE9XRVJfT0ZGOgorCQlpZihob3N0LT52Y2MgJiYKKwkJICAgcmVndWxhdG9yX2lzX2VuYWJsZWQoaG9zdC0+dmNjKSkKKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKGhvc3QtPnZjYyk7CiAJCWJyZWFrOwogCWNhc2UgTU1DX1BPV0VSX1VQOgorI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKKwkJaWYgKGhvc3QtPnZjYykKKwkJCS8qIFRoaXMgaW1wbGljaXRseSBlbmFibGVzIHRoZSByZWd1bGF0b3IgKi8KKwkJCW1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT52Y2MsIGlvcy0+dmRkKTsKKyNlbmRpZgorCQkvKgorCQkgKiBUaGUgdHJhbnNsYXRlX3ZkZCBmdW5jdGlvbiBpcyBub3QgdXNlZCBpZiB5b3UgaGF2ZQorCQkgKiBhbiBleHRlcm5hbCByZWd1bGF0b3IsIG9yIHlvdXIgZGVzaWduIGlzIHJlYWxseSB3ZWlyZC4KKwkJICogVXNpbmcgaXQgd291bGQgbWVhbiBzZW5kaW5nIGluIHBvd2VyIGNvbnRyb2wgQk9USCB1c2luZworCQkgKiBhIHJlZ3VsYXRvciBBTkQgdGhlIDQgTU1DSVBXUiBiaXRzLiBJZiB3ZSBkb24ndCBoYXZlCisJCSAqIGEgcmVndWxhdG9yLCB3ZSBtaWdodCBoYXZlIHNvbWUgb3RoZXIgcGxhdGZvcm0gc3BlY2lmaWMKKwkJICogcG93ZXIgY29udHJvbCBiZWhpbmQgdGhpcyB0cmFuc2xhdGUgZnVuY3Rpb24uCisJCSAqLworCQlpZiAoIWhvc3QtPnZjYyAmJiBob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKQorCQkJcHdyIHw9IGhvc3QtPnBsYXQtPnRyYW5zbGF0ZV92ZGQobW1jX2RldihtbWMpLCBpb3MtPnZkZCk7CiAJCS8qIFRoZSBTVCB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgdGhpcywgZmFsbCB0aHJvdWdoIHRvIFBPV0VSX09OICovCiAJCWlmIChob3N0LT5od19kZXNpZ25lciAhPSBBTUJBX1ZFTkRPUl9TVCkgewogCQkJcHdyIHw9IE1DSV9QV1JfVVA7CkBAIC00NjUsMTIgKzQ5NywxNiBAQAogCQl9CiAJfQogCi0Jd3JpdGVsKGNsaywgaG9zdC0+YmFzZSArIE1NQ0lDTE9DSyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCW1tY2lfc2V0X2Nsa3JlZyhob3N0LCBpb3MtPmNsb2NrKTsKIAogCWlmIChob3N0LT5wd3IgIT0gcHdyKSB7CiAJCWhvc3QtPnB3ciA9IHB3cjsKIAkJd3JpdGVsKHB3ciwgaG9zdC0+YmFzZSArIE1NQ0lQT1dFUik7CiAJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IG1tY2lfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQpAQCAtNTE3LDcgKzU1Myw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1tY2lfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCBhbWJhX2lkICppZCkKIHsKLQlzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7CiAJaW50IHJldDsKQEAgLTU4Myw3ICs2MTksMzAgQEAKIAltbWMtPm9wcyA9ICZtbWNpX29wczsKIAltbWMtPmZfbWluID0gKGhvc3QtPm1jbGsgKyA1MTEpIC8gNTEyOwogCW1tYy0+Zl9tYXggPSBtaW4oaG9zdC0+bWNsaywgZm1heCk7Ci0JbW1jLT5vY3JfYXZhaWwgPSBwbGF0LT5vY3JfbWFzazsKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisJLyogSWYgd2UncmUgdXNpbmcgdGhlIHJlZ3VsYXRvciBmcmFtZXdvcmssIHRyeSB0byBmZXRjaCBhIHJlZ3VsYXRvciAqLworCWhvc3QtPnZjYyA9IHJlZ3VsYXRvcl9nZXQoJmRldi0+ZGV2LCAidm1tYyIpOworCWlmIChJU19FUlIoaG9zdC0+dmNjKSkKKwkJaG9zdC0+dmNjID0gTlVMTDsKKwllbHNlIHsKKwkJaW50IG1hc2sgPSBtbWNfcmVndWxhdG9yX2dldF9vY3JtYXNrKGhvc3QtPnZjYyk7CisKKwkJaWYgKG1hc2sgPCAwKQorCQkJZGV2X2VycigmZGV2LT5kZXYsICJlcnJvciBnZXR0aW5nIE9DUiBtYXNrICglZClcbiIsCisJCQkJbWFzayk7CisJCWVsc2UgeworCQkJaG9zdC0+bW1jLT5vY3JfYXZhaWwgPSAodTMyKSBtYXNrOworCQkJaWYgKHBsYXQtPm9jcl9tYXNrKQorCQkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkgIlByb3ZpZGVkIG9jcl9tYXNrL3NldHBvd2VyIHdpbGwgbm90IGJlIHVzZWQgIgorCQkJCSAiKHVzaW5nIHJlZ3VsYXRvciBpbnN0ZWFkKVxuIik7CisJCX0KKwl9CisjZW5kaWYKKwkvKiBGYWxsIGJhY2sgdG8gcGxhdGZvcm0gZGF0YSBpZiBubyByZWd1bGF0b3IgaXMgZm91bmQgKi8KKwlpZiAoaG9zdC0+dmNjID09IE5VTEwpCisJCW1tYy0+b2NyX2F2YWlsID0gcGxhdC0+b2NyX21hc2s7CisJbW1jLT5jYXBzID0gcGxhdC0+Y2FwYWJpbGl0aWVzOwogCiAJLyoKIAkgKiBXZSBjYW4gZG8gU0dJTwpAQCAtNjE5LDcgKzY3OCw2IEBACiAJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzEpOwogCXdyaXRlbCgweGZmZiwgaG9zdC0+YmFzZSArIE1NQ0lDTEVBUik7CiAKLSNpZmRlZiBDT05GSUdfR1BJT0xJQgogCWlmIChncGlvX2lzX3ZhbGlkKHBsYXQtPmdwaW9fY2QpKSB7CiAJCXJldCA9IGdwaW9fcmVxdWVzdChwbGF0LT5ncGlvX2NkLCBEUklWRVJfTkFNRSAiIChjZCkiKTsKIAkJaWYgKHJldCA9PSAwKQpAQCAtNjM4LDcgKzY5Niw2IEBACiAJCWVsc2UgaWYgKHJldCAhPSAtRU5PU1lTKQogCQkJZ290byBlcnJfZ3Bpb193cDsKIAl9Ci0jZW5kaWYKIAogCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxWzBdLCBtbWNpX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FICIgKGNtZCkiLCBob3N0KTsKIAlpZiAocmV0KQpAQCAtNzIwLDYgKzc3NywxMCBAQAogCQljbGtfZGlzYWJsZShob3N0LT5jbGspOwogCQljbGtfcHV0KGhvc3QtPmNsayk7CiAKKwkJaWYgKHJlZ3VsYXRvcl9pc19lbmFibGVkKGhvc3QtPnZjYykpCisJCQlyZWd1bGF0b3JfZGlzYWJsZShob3N0LT52Y2MpOworCQlyZWd1bGF0b3JfcHV0KGhvc3QtPnZjYyk7CisKIAkJbW1jX2ZyZWVfaG9zdChtbWMpOwogCiAJCWFtYmFfcmVsZWFzZV9yZWdpb25zKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCmluZGV4IDgzOWYyNjQuLjFjZWI5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCkBAIC0xNjEsNyArMTYxLDcgQEAKIAl1bnNpZ25lZCBpbnQJCW1jbGs7CiAJdW5zaWduZWQgaW50CQljY2xrOwogCXUzMgkJCXB3cjsKLQlzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CisJc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAqcGxhdDsKIAogCXU4CQkJaHdfZGVzaWduZXI7CiAJdTgJCQlod19yZXZpc2lvbjo0OwpAQCAtMTc1LDYgKzE3NSw3IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZ19wdHI7CiAJdW5zaWduZWQgaW50CQlzZ19vZmY7CiAJdW5zaWduZWQgaW50CQlzaXplOworCXN0cnVjdCByZWd1bGF0b3IJKnZjYzsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWNpX2luaXRfc2coc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwppbmRleCBlN2EzMzFkLi5iOGZkN2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwpAQCAtMTUyOSw2ICsxNTI5LDcgQEAKIAkJaG9zdC0+cGRhdGEtPmNsZWFudXAoJnBkZXYtPmRldik7CiAKIAltbWNfb21hcF9mY2xrX2VuYWJsZShob3N0LCAwKTsKKwlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7CiAJY2xrX3B1dChob3N0LT5pY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggNDQ4N2NjMC4uMGFlY2FhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTIwMTMsNyArMjAxMyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX2luaXQodm9pZCkKIHsKIAkvKiBSZWdpc3RlciB0aGUgTU1DIGRyaXZlciAqLwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfaHNtbWNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZvbWFwX2hzbW1jX2RyaXZlciwgb21hcF9oc21tY19wcm9iZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2hzbW1jX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IGU1NWFjNzkuLmIwMGQ2NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIApAQCAtOTYsMTAgKzk3LDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBweGFtY2lfc2V0X3Bvd2VyKHN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZkZCkKIHsKKwlpbnQgb247CisKICNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAJaWYgKGhvc3QtPnZjYykKIAkJbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgdmRkKTsKICNlbmRpZgorCWlmICghaG9zdC0+dmNjICYmIGhvc3QtPnBkYXRhICYmCisJICAgIGdwaW9faXNfdmFsaWQoaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXIpKSB7CisJCW9uID0gKCgxIDw8IHZkZCkgJiBob3N0LT5wZGF0YS0+b2NyX21hc2spOworCQlncGlvX3NldF92YWx1ZShob3N0LT5wZGF0YS0+Z3Bpb19wb3dlciwKKwkJCSAgICAgICAhIW9uIF4gaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXJfaW52ZXJ0KTsKKwl9CiAJaWYgKCFob3N0LT52Y2MgJiYgaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPnNldHBvd2VyKQogCQlob3N0LT5wZGF0YS0+c2V0cG93ZXIobW1jX2Rldihob3N0LT5tbWMpLCB2ZGQpOwogfQpAQCAtNDIxLDYgKzQzMCwxMiBAQAogewogCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKKwlpZiAoaG9zdC0+cGRhdGEgJiYgZ3Bpb19pc192YWxpZChob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvKSkgeworCQlpZiAoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9yb19pbnZlcnQpCisJCQlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm8pOworCQllbHNlCisJCQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9ybyk7CisJfQogCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+Z2V0X3JvKQogCQlyZXR1cm4gISFob3N0LT5wZGF0YS0+Z2V0X3JvKG1tY19kZXYobW1jKSk7CiAJLyoKQEAgLTUzNCw3ICs1NDksNyBAQAogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwogCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlICpyLCAqZG1hcngsICpkbWF0eDsKLQlpbnQgcmV0LCBpcnE7CisJaW50IHJldCwgaXJxLCBncGlvX2NkID0gLTEsIGdwaW9fcm8gPSAtMSwgZ3Bpb19wb3dlciA9IC0xOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKQEAgLTY2MSwxMyArNjc2LDYzIEBACiAJfQogCWhvc3QtPmRtYV9kcmNtcnR4ID0gZG1hdHgtPnN0YXJ0OwogCisJaWYgKGhvc3QtPnBkYXRhKSB7CisJCWdwaW9fY2QgPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX2RldGVjdDsKKwkJZ3Bpb19ybyA9IGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm87CisJCWdwaW9fcG93ZXIgPSBob3N0LT5wZGF0YS0+Z3Bpb19wb3dlcjsKKwl9CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fcG93ZXIsICJtbWMgY2FyZCBwb3dlciIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgcmVxdWVzdGluZyBncGlvX3Bvd2VyICVkXG4iLCBncGlvX3Bvd2VyKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvX3Bvd2VyLAorCQkJCSAgICAgIGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyX2ludmVydCk7CisJfQorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcm8pKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvX3JvLCAibW1jIGNhcmQgcmVhZCBvbmx5Iik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCByZXF1ZXN0aW5nIGdwaW9fcm8gJWRcbiIsIGdwaW9fcm8pOworCQkJZ290byBlcnJfZ3Bpb19ybzsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3JvKTsKKwl9CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19jZCkpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fY2QsICJtbWMgY2FyZCBkZXRlY3QiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHJlcXVlc3RpbmcgZ3Bpb19jZCAlZFxuIiwgZ3Bpb19jZCk7CisJCQlnb3RvIGVycl9ncGlvX2NkOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fY2QpOworCisJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9fY2QpLCBweGFtY2lfZGV0ZWN0X2lycSwKKwkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQkgICJtbWMgY2FyZCBkZXRlY3QiLCBtbWMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIpOworCQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisJCX0KKwl9CisKIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmluaXQpCiAJCWhvc3QtPnBkYXRhLT5pbml0KCZwZGV2LT5kZXYsIHB4YW1jaV9kZXRlY3RfaXJxLCBtbWMpOwogCisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikgJiYgaG9zdC0+cGRhdGEtPnNldHBvd2VyKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZ3Bpb19wb3dlciBhbmQgc2V0cG93ZXIoKSBib3RoIGRlZmluZWRcbiIpOworCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcm8pICYmIGhvc3QtPnBkYXRhLT5nZXRfcm8pCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJncGlvX3JvIGFuZCBnZXRfcm8oKSBib3RoIGRlZmluZWRcbiIpOworCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKIAlyZXR1cm4gMDsKIAorZXJyX3JlcXVlc3RfaXJxOgorCWdwaW9fZnJlZShncGlvX2NkKTsKK2Vycl9ncGlvX2NkOgorCWdwaW9fZnJlZShncGlvX3JvKTsKK2Vycl9ncGlvX3JvOgorCWdwaW9fZnJlZShncGlvX3Bvd2VyKTsKICBvdXQ6CiAJaWYgKGhvc3QpIHsKIAkJaWYgKGhvc3QtPmRtYSA+PSAwKQpAQCAtNjg4LDEyICs3NTMsMjYgQEAKIHN0YXRpYyBpbnQgcHhhbWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGdwaW9fY2QgPSAtMSwgZ3Bpb19ybyA9IC0xLCBncGlvX3Bvd2VyID0gLTE7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChtbWMpIHsKIAkJc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAorCQlpZiAoaG9zdC0+cGRhdGEpIHsKKwkJCWdwaW9fY2QgPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX2RldGVjdDsKKwkJCWdwaW9fcm8gPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvOworCQkJZ3Bpb19wb3dlciA9IGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyOworCQl9CisJCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fY2QpKSB7CisJCQlmcmVlX2lycShncGlvX3RvX2lycShncGlvX2NkKSwgbW1jKTsKKwkJCWdwaW9fZnJlZShncGlvX2NkKTsKKwkJfQorCQlpZiAoZ3Bpb19pc192YWxpZChncGlvX3JvKSkKKwkJCWdwaW9fZnJlZShncGlvX3JvKTsKKwkJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikpCisJCQlncGlvX2ZyZWUoZ3Bpb19wb3dlcik7CiAJCWlmIChob3N0LT52Y2MpCiAJCQlyZWd1bGF0b3JfcHV0KGhvc3QtPnZjYyk7CiAKQEAgLTcyNSwyMCArODA0LDIwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YW1jaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChtbWMpCi0JCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7CisJCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBQTVNHX1NVU1BFTkQpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNzQ2LDE5ICs4MjUsMjIgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jZWxzZQotI2RlZmluZSBweGFtY2lfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHB4YW1jaV9yZXN1bWUJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcHhhbWNpX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YW1jaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhbWNpX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhbWNpX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhbWNpX3Byb2JlLAogCS5yZW1vdmUJCT0gcHhhbWNpX3JlbW92ZSwKLQkuc3VzcGVuZAk9IHB4YW1jaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhbWNpX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGFtY2lfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCmluZGV4IDhjMDhjZDcuLjk5Yjc0YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtNTgsOCArNjAsNiBAQAogCQlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsIGFyZ3MpOyAgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUkVTU0laRShyZXNzb3VyY2UpICgoKHJlc3NvdXJjZSktPmVuZCAtIChyZXNzb3VyY2UpLT5zdGFydCkrMSkKLQogc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjbWNpX2RtYV9jbGllbnQgPSB7CiAJLm5hbWUJCT0gInMzYy1tY2kiLAogfTsKQEAgLTE2NCw2ICsxNjQsNDAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19NTUNfREVCVUcgKi8KIAorLyoqCisgKiBzM2NtY2lfaG9zdF91c2VkbWEgLSByZXR1cm4gd2hldGhlciB0aGUgaG9zdCBpcyB1c2luZyBkbWEgb3IgcGlvCisgKiBAaG9zdDogVGhlIGhvc3Qgc3RhdGUKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaG9zdCBpcyB1c2luZyBETUEgdG8gdHJhbnNmZXIgZGF0YSwgZWxzZSBmYWxzZQorICogdG8gdXNlIFBJTyBtb2RlLiBXaWxsIHJldHVybiBzdGF0aWMgZGF0YSBkZXBlbmRpbmcgb24gdGhlIGRyaXZlcgorICogY29uZmlndXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sIHMzY21jaV9ob3N0X3VzZWRtYShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPCisJcmV0dXJuIGZhbHNlOworI2VsaWYgZGVmaW5lZChDT05GSUdfTU1DX1MzQ19ETUEpCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBob3N0LT5kb2RtYTsKKyNlbmRpZgorfQorCisvKioKKyAqIHMzY21jaV9ob3N0X2NhbnBpbyAtIHJldHVybiB0cnVlIGlmIGhvc3QgaGFzIHBpbyBjb2RlIGF2YWlsYWJsZQorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBkcml2ZXIgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCB0aGUgUElPIHN1cHBvcnQgY29kZQorICogYXZhaWxhYmxlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgczNjbWNpX2hvc3RfY2FucGlvKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW5saW5lIHUzMiBlbmFibGVfaW1hc2soc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LCB1MzIgaW1hc2spCiB7CiAJdTMyIG5ld21hc2s7CkBAIC0xOTAsNyArMjI0LDMzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9pbWFzayhzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCiB7Ci0Jd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKwl1MzIgbWFzayA9IHJlYWRsKGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKworCS8qIHByZXNlcnZlIHRoZSBTRElPIElSUSBtYXNrIHN0YXRlICovCisJbWFzayAmPSBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUTsKKwl3cml0ZWwobWFzaywgaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworfQorCisvKioKKyAqIHMzY21jaV9jaGVja19zZGlvX2lycSAtIHRlc3Qgd2hldGhlciB0aGUgU0RJTyBJUlEgaXMgYmVpbmcgc2lnbmFsbGVkCisgKiBAaG9zdDogVGhlIGhvc3QgdG8gY2hlY2suCisgKgorICogVGVzdCB0byBzZWUgaWYgdGhlIFNESU8gaW50ZXJydXB0IGlzIGJlaW5nIHNpZ25hbGxlZCBpbiBjYXNlIHRoZQorICogY29udHJvbGxlciBoYXMgZmFpbGVkIHRvIHJlLWRldGVjdCBhIGNhcmQgaW50ZXJydXB0LiBSZWFkIEdQRTggYW5kCisgKiBzZWUgaWYgaXQgaXMgbG93IGFuZCBpZiBzbywgc2lnbmFsIGEgU0RJTyBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkgY2FsbGVkIGlmIGEgcmVxdWVzdCBpcyBmaW5pc2hlZCAod2UgYXNzdW1lIHRoYXQgdGhlCisgKiBidXMgaXMgbm93IGlkbGUpIGFuZCB3aGVuIHRoZSBTRElPIElSUSBpcyBlbmFibGVkIGluIGNhc2UgdGhlIElSUSBpcworICogYWxyZWFkeSBiZWluZyBpbmRpY2F0ZWQuCisqLworc3RhdGljIHZvaWQgczNjbWNpX2NoZWNrX3NkaW9faXJxKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKKwlpZiAoaG9zdC0+c2Rpb19pcnFlbikgeworCQlpZiAoZ3Bpb19nZXRfdmFsdWUoUzNDMjQxMF9HUEUoOCkpID09IDApIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2lnbmFsbGluZyBpcnFcbiIsIF9fZnVuY19fKTsKKwkJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2RhdGFfYnVmZmVyKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwKQEAgLTIzOCw2ICsyOTgsNjQgQEAKIAlyZXR1cm4gNjMgLSBmaWZvc3RhdDsKIH0KIAorLyoqCisgKiBzM2NtY2lfZW5hYmxlX2lycSAtIGVuYWJsZSBJUlEsIGFmdGVyIGhhdmluZyBkaXNhYmxlZCBpdC4KKyAqIEBob3N0OiBUaGUgZGV2aWNlIHN0YXRlLgorICogQG1vcmU6IFRydWUgaWYgbW9yZSBJUlFzIGFyZSBleHBlY3RlZCBmcm9tIHRyYW5zZmVyLgorICoKKyAqIEVuYWJsZSB0aGUgbWFpbiBJUlEgaWYgbmVlZGVkIGFmdGVyIGl0IGhhcyBiZWVuIGRpc2FibGVkLgorICoKKyAqIFRoZSBJUlEgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlczoKKyAqCS0gZGlzYWJsZWQgZHVyaW5nIElETEUKKyAqCS0gZGlzYWJsZWQgd2hpbHN0IHByb2Nlc3NpbmcgZGF0YQorICoJLSBlbmFibGVkIGR1cmluZyB0cmFuc2ZlcgorICoJLSBlbmFibGVkIHdoaWxzdCBhd2FpdGluZyBTRElPIGludGVycnVwdCBkZXRlY3Rpb24KKyAqLworc3RhdGljIHZvaWQgczNjbWNpX2VuYWJsZV9pcnEoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LCBib29sIG1vcmUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGVuYWJsZSA9IGZhbHNlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaG9zdC0+aXJxX2VuYWJsZWQgPSBtb3JlOworCWhvc3QtPmlycV9kaXNhYmxlZCA9IGZhbHNlOworCisJZW5hYmxlID0gbW9yZSB8IGhvc3QtPnNkaW9faXJxZW47CisKKwlpZiAoaG9zdC0+aXJxX3N0YXRlICE9IGVuYWJsZSkgeworCQlob3N0LT5pcnFfc3RhdGUgPSBlbmFibGU7CisKKwkJaWYgKGVuYWJsZSkKKwkJCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qKgorICoKKyAqLworc3RhdGljIHZvaWQgczNjbWNpX2Rpc2FibGVfaXJxKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgYm9vbCB0cmFuc2ZlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLy9wcmludGsoS0VSTl9ERUJVRyAiJXM6IHRyYW5zZmVyICVkXG4iLCBfX2Z1bmNfXywgdHJhbnNmZXIpOworCisJaG9zdC0+aXJxX2Rpc2FibGVkID0gdHJhbnNmZXI7CisKKwlpZiAodHJhbnNmZXIgJiYgaG9zdC0+aXJxX3N0YXRlKSB7CisJCWhvc3QtPmlycV9zdGF0ZSA9IGZhbHNlOworCQlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgZG9fcGlvX3JlYWQoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQogewogCWludCByZXM7CkBAIC0zNzQsOCArNDkyLDcgQEAKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSAoc3RydWN0IHMzY21jaV9ob3N0ICopIGRhdGE7CiAKLQotCWRpc2FibGVfaXJxKGhvc3QtPmlycSk7CisJczNjbWNpX2Rpc2FibGVfaXJxKGhvc3QsIHRydWUpOwogCiAJaWYgKGhvc3QtPnBpb19hY3RpdmUgPT0gWEZFUl9XUklURSkKIAkJZG9fcGlvX3dyaXRlKGhvc3QpOwpAQCAtMzk1LDkgKzUxMiwxMCBAQAogCQkJCWhvc3QtPm1ycS0+ZGF0YS0+ZXJyb3IgPSAtRUlOVkFMOwogCQl9CiAKKwkJczNjbWNpX2VuYWJsZV9pcnEoaG9zdCwgZmFsc2UpOwogCQlmaW5hbGl6ZV9yZXF1ZXN0KGhvc3QpOwogCX0gZWxzZQotCQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJCXMzY21jaV9lbmFibGVfaXJxKGhvc3QsIHRydWUpOwogfQogCiAvKgpAQCAtNDMyLDE3ICs1NTAsMjcgQEAKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CiAJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CiAJdTMyIG1jaV9jc3RhLCBtY2lfZHN0YSwgbWNpX2ZzdGEsIG1jaV9kY250LCBtY2lfaW1zazsKLQl1MzIgbWNpX2NjbGVhciwgbWNpX2RjbGVhcjsKKwl1MzIgbWNpX2NjbGVhciA9IDAsIG1jaV9kY2xlYXI7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAKKwltY2lfZHN0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESURTVEEpOworCW1jaV9pbXNrID0gcmVhZGwoaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworCisJaWYgKG1jaV9kc3RhICYgUzNDMjQxMF9TRElEU1RBX1NESU9JUlFERVRFQ1QpIHsKKwkJaWYgKG1jaV9pbXNrICYgUzNDMjQxMF9TRElJTVNLX1NESU9JUlEpIHsKKwkJCW1jaV9kY2xlYXIgPSBTM0MyNDEwX1NESURTVEFfU0RJT0lSUURFVEVDVDsKKwkJCXdyaXRlbChtY2lfZGNsZWFyLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEU1RBKTsKKworCQkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0LT5tbWMpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJfQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmNvbXBsZXRlX2xvY2ssIGlmbGFncyk7CiAKIAltY2lfY3N0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNNRFNUQVQpOwotCW1jaV9kc3RhID0gcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRFNUQSk7CiAJbWNpX2RjbnQgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEQ05UKTsKIAltY2lfZnN0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwotCW1jaV9pbXNrID0gcmVhZGwoaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOwotCW1jaV9jY2xlYXIgPSAwOwogCW1jaV9kY2xlYXIgPSAwOwogCiAJaWYgKChob3N0LT5jb21wbGV0ZV93aGF0ID09IENPTVBMRVRJT05fTk9ORSkgfHwKQEAgLTQ2Niw3ICs1OTQsNyBAQAogCQlnb3RvIGlycV9vdXQ7CiAJfQogCi0JaWYgKCFob3N0LT5kb2RtYSkgeworCWlmICghczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKSB7CiAJCWlmICgoaG9zdC0+cGlvX2FjdGl2ZSA9PSBYRkVSX1dSSVRFKSAmJgogCQkgICAgKG1jaV9mc3RhICYgUzNDMjQxMF9TRElGU1RBX1RGREVUKSkgewogCkBAIC02NzMsNiArODAxLDcgQEAKIAlkYmcoaG9zdCwgZGJnX2RtYSwgIkRNQSBGSU5JU0hFRCBTaXplOiVpIERTVEE6JTA4eCBEQ05UOiUwOHhcbiIsCiAJCXNpemUsIG1jaV9kc3RhLCBtY2lfZGNudCk7CiAKKwlob3N0LT5kbWFfY29tcGxldGUgPSAxOwogCWhvc3QtPmNvbXBsZXRlX3doYXQgPSBDT01QTEVUSU9OX0ZJTkFMSVpFOwogCiBvdXQ6CkBAIC02ODMsOSArODEyLDkgQEAKIGZhaWxfcmVxdWVzdDoKIAlob3N0LT5tcnEtPmRhdGEtPmVycm9yID0gLUVJTlZBTDsKIAlob3N0LT5jb21wbGV0ZV93aGF0ID0gQ09NUExFVElPTl9GSU5BTElaRTsKLQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOwotCWdvdG8gb3V0OworCWNsZWFyX2ltYXNrKGhvc3QpOwogCisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplX3JlcXVlc3Qoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQpAQCAtNzAyLDggKzgzMSw5IEBACiAKIAlpZiAoY21kLT5kYXRhICYmIChjbWQtPmVycm9yID09IDApICYmCiAJICAgIChjbWQtPmRhdGEtPmVycm9yID09IDApKSB7Ci0JCWlmIChob3N0LT5kb2RtYSAmJiAoIWhvc3QtPmRtYV9jb21wbGV0ZSkpIHsKLQkJCWRiZyhob3N0LCBkYmdfZG1hLCAiRE1BIE1pc3NpbmchXG4iKTsKKwkJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSAmJiAoIWhvc3QtPmRtYV9jb21wbGV0ZSkpIHsKKwkJCWRiZyhob3N0LCBkYmdfZG1hLCAiRE1BIE1pc3NpbmcgKCVkKSFcbiIsCisJCQkgICAgaG9zdC0+ZG1hX2NvbXBsZXRlKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTcyOCw3ICs4NTgsNyBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDTURBUkcpOwogCXdyaXRlbChTM0MyNDEwX1NESURDT05fU1RPUCwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRENPTik7CiAJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNNRENPTik7Ci0Jd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKwljbGVhcl9pbWFzayhob3N0KTsKIAogCWlmIChjbWQtPmRhdGEgJiYgY21kLT5lcnJvcikKIAkJY21kLT5kYXRhLT5lcnJvciA9IGNtZC0+ZXJyb3I7CkBAIC03NTQsNyArODg0LDcgQEAKIAkvKiBJZiB3ZSBoYWQgYW4gZXJyb3Igd2hpbGUgdHJhbnNmZXJpbmcgZGF0YSB3ZSBmbHVzaCB0aGUKIAkgKiBETUEgY2hhbm5lbCBhbmQgdGhlIGZpZm8gdG8gY2xlYXIgb3V0IGFueSBnYXJiYWdlLiAqLwogCWlmIChtcnEtPmRhdGEtPmVycm9yICE9IDApIHsKLQkJaWYgKGhvc3QtPmRvZG1hKQorCQlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQogCQkJczNjMjQxMF9kbWFfY3RybChob3N0LT5kbWEsIFMzQzI0MTBfRE1BT1BfRkxVU0gpOwogCiAJCWlmIChob3N0LT5pczI0NDApIHsKQEAgLTc3Niw2ICs5MDYsOCBAQAogcmVxdWVzdF9kb25lOgogCWhvc3QtPmNvbXBsZXRlX3doYXQgPSBDT01QTEVUSU9OX05PTkU7CiAJaG9zdC0+bXJxID0gTlVMTDsKKworCXMzY21jaV9jaGVja19zZGlvX2lycShob3N0KTsKIAltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKIH0KIApAQCAtODcyLDcgKzEwMDQsNyBAQAogCiAJZGNvbiAgPSBkYXRhLT5ibG9ja3MgJiBTM0MyNDEwX1NESURDT05fQkxLTlVNX01BU0s7CiAKLQlpZiAoaG9zdC0+ZG9kbWEpCisJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkKIAkJZGNvbiB8PSBTM0MyNDEwX1NESURDT05fRE1BRU47CiAKIAlpZiAoaG9zdC0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKQEAgLTk1MCw3ICsxMDgyLDcgQEAKIHN0YXRpYyBpbnQgczNjbWNpX3ByZXBhcmVfZG1hKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCWludCBkbWFfbGVuLCBpOwotCWludCBydyA9IChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSA/IDEgOiAwOworCWludCBydyA9IGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEU7CiAKIAlCVUdfT04oKGRhdGEtPmZsYWdzICYgQk9USF9ESVIpID09IEJPVEhfRElSKTsKIApAQCAtOTU4LDcgKzEwOTAsNyBAQAogCXMzYzI0MTBfZG1hX2N0cmwoaG9zdC0+ZG1hLCBTM0MyNDEwX0RNQU9QX0ZMVVNIKTsKIAogCWRtYV9sZW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwKLQkJCSAgICAgKHJ3KSA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQkJICAgICBydyA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOwogCiAJaWYgKGRtYV9sZW4gPT0gMCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC05NjksMTEgKzExMDEsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hX2xlbjsgaSsrKSB7CiAJCWludCByZXM7CiAKLQkJZGJnKGhvc3QsIGRiZ19kbWEsICJlbnF1ZXVlICVpOiV1QCV1XG4iLCBpLAotCQkJc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKSwKLQkJCXNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKSk7CisJCWRiZyhob3N0LCBkYmdfZG1hLCAiZW5xdWV1ZSAlaTogJTA4eEAldVxuIiwgaSwKKwkJICAgIHNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1tpXSksCisJCSAgICBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSkpOwogCi0JCXJlcyA9IHMzYzI0MTBfZG1hX2VucXVldWUoaG9zdC0+ZG1hLCAodm9pZCAqKSBob3N0LAorCQlyZXMgPSBzM2MyNDEwX2RtYV9lbnF1ZXVlKGhvc3QtPmRtYSwgaG9zdCwKIAkJCQkJICBzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pLAogCQkJCQkgIHNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKSk7CiAKQEAgLTEwMTgsNyArMTE1MCw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlpZiAoaG9zdC0+ZG9kbWEpCisJCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCiAJCQlyZXMgPSBzM2NtY2lfcHJlcGFyZV9kbWEoaG9zdCwgY21kLT5kYXRhKTsKIAkJZWxzZQogCQkJcmVzID0gczNjbWNpX3ByZXBhcmVfcGlvKGhvc3QsIGNtZC0+ZGF0YSk7CkBAIC0xMDM3LDcgKzExNjksNyBAQAogCXMzY21jaV9zZW5kX2NvbW1hbmQoaG9zdCwgY21kKTsKIAogCS8qIEVuYWJsZSBJbnRlcnJ1cHQgKi8KLQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJczNjbWNpX2VuYWJsZV9pcnEoaG9zdCwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgczNjbWNpX2NhcmRfcHJlc2VudChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKQEAgLTEwNDksNyArMTE4MSw3IEBACiAJaWYgKHBkYXRhLT5ncGlvX2RldGVjdCA9PSAwKQogCQlyZXR1cm4gLUVOT1NZUzsKIAotCXJldCA9IHMzYzI0MTBfZ3Bpb19nZXRwaW4ocGRhdGEtPmdwaW9fZGV0ZWN0KSA/IDAgOiAxOworCXJldCA9IGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5ncGlvX2RldGVjdCkgPyAwIDogMTsKIAlyZXR1cm4gcmV0IF4gcGRhdGEtPmRldGVjdF9pbnZlcnQ7CiB9CiAKQEAgLTExMDQsMTIgKzEyMzYsMTIgQEAKIAlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewogCWNhc2UgTU1DX1BPV0VSX09OOgogCWNhc2UgTU1DX1BPV0VSX1VQOgotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNSwgUzNDMjQxMF9HUEU1X1NEQ0xLKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTYsIFMzQzI0MTBfR1BFNl9TRENNRCk7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU3LCBTM0MyNDEwX0dQRTdfU0REQVQwKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTgsIFMzQzI0MTBfR1BFOF9TRERBVDEpOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFOSwgUzNDMjQxMF9HUEU5X1NEREFUMik7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUxMCwgUzNDMjQxMF9HUEUxMF9TRERBVDMpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDUpLCBTM0MyNDEwX0dQRTVfU0RDTEspOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDYpLCBTM0MyNDEwX0dQRTZfU0RDTUQpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDcpLCBTM0MyNDEwX0dQRTdfU0REQVQwKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRSg4KSwgUzNDMjQxMF9HUEU4X1NEREFUMSk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUoOSksIFMzQzI0MTBfR1BFOV9TRERBVDIpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDEwKSwgUzNDMjQxMF9HUEUxMF9TRERBVDMpOwogCiAJCWlmIChob3N0LT5wZGF0YS0+c2V0X3Bvd2VyKQogCQkJaG9zdC0+cGRhdGEtPnNldF9wb3dlcihpb3MtPnBvd2VyX21vZGUsIGlvcy0+dmRkKTsKQEAgLTExMjEsOCArMTI1Myw3IEBACiAKIAljYXNlIE1NQ19QT1dFUl9PRkY6CiAJZGVmYXVsdDoKLQkJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRTUsIDApOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNSwgUzNDMjQxMF9HUElPX09VVFBVVCk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0MyNDEwX0dQRSg1KSwgMCk7CiAKIAkJaWYgKGhvc3QtPmlzMjQ0MCkKIAkJCW1jaV9jb24gfD0gUzNDMjQ0MF9TRElDT05fU0RSRVNFVDsKQEAgLTExNjgsNyArMTI5OSw3IEBACiAJc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhICpwZGF0YSA9IGhvc3QtPnBkYXRhOwogCWludCByZXQ7CiAKLQlpZiAocGRhdGEtPmdwaW9fd3Byb3RlY3QgPT0gMCkKKwlpZiAocGRhdGEtPm5vX3dwcm90ZWN0KQogCQlyZXR1cm4gMDsKIAogCXJldCA9IHMzYzI0MTBfZ3Bpb19nZXRwaW4ocGRhdGEtPmdwaW9fd3Byb3RlY3QpOwpAQCAtMTE3OSwxMSArMTMxMCw1MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHMzY21jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBjb247CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljb24gPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDT04pOworCWhvc3QtPnNkaW9faXJxZW4gPSBlbmFibGU7CisKKwlpZiAoZW5hYmxlID09IGhvc3QtPnNkaW9faXJxZW4pCisJCWdvdG8gc2FtZV9zdGF0ZTsKKworCWlmIChlbmFibGUpIHsKKwkJY29uIHw9IFMzQzI0MTBfU0RJQ09OX1NESU9JUlE7CisJCWVuYWJsZV9pbWFzayhob3N0LCBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUSk7CisKKwkJaWYgKCFob3N0LT5pcnFfc3RhdGUgJiYgIWhvc3QtPmlycV9kaXNhYmxlZCkgeworCQkJaG9zdC0+aXJxX3N0YXRlID0gdHJ1ZTsKKwkJCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwkJfQorCX0gZWxzZSB7CisJCWRpc2FibGVfaW1hc2soaG9zdCwgUzNDMjQxMF9TRElJTVNLX1NESU9JUlEpOworCQljb24gJj0gflMzQzI0MTBfU0RJQ09OX1NESU9JUlE7CisKKwkJaWYgKCFob3N0LT5pcnFfZW5hYmxlZCAmJiBob3N0LT5pcnFfc3RhdGUpIHsKKwkJCWRpc2FibGVfaXJxX25vc3luYyhob3N0LT5pcnEpOworCQkJaG9zdC0+aXJxX3N0YXRlID0gZmFsc2U7CisJCX0KKwl9CisKKwl3cml0ZWwoY29uLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDT04pOworCisgc2FtZV9zdGF0ZToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlzM2NtY2lfY2hlY2tfc2Rpb19pcnEoaG9zdCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIHMzY21jaV9vcHMgPSB7CiAJLnJlcXVlc3QJPSBzM2NtY2lfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IHMzY21jaV9zZXRfaW9zLAogCS5nZXRfcm8JCT0gczNjbWNpX2dldF9ybywKIAkuZ2V0X2NkCQk9IHMzY21jaV9jYXJkX3ByZXNlbnQsCisJLmVuYWJsZV9zZGlvX2lycSA9IHMzY21jaV9lbmFibGVfc2Rpb19pcnEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIHMzY21jaV9kZWZfcGRhdGEgPSB7CkBAIC0xMjQ2LDExICsxNDE4LDE0MCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXMyNDQwKQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBpbnQgczNjbWNpX3N0YXRlX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gc2VxLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihzZXEsICJSZWdpc3RlciBiYXNlID0gMHglMDh4XG4iLCAodTMyKWhvc3QtPmJhc2UpOworCXNlcV9wcmludGYoc2VxLCAiQ2xvY2sgcmF0ZSA9ICVsZFxuIiwgaG9zdC0+Y2xrX3JhdGUpOworCXNlcV9wcmludGYoc2VxLCAiUHJlc2NhbGUgPSAlZFxuIiwgaG9zdC0+cHJlc2NhbGVyKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlzMjQ0MCA9ICVkXG4iLCBob3N0LT5pczI0NDApOworCXNlcV9wcmludGYoc2VxLCAiSVJRID0gJWRcbiIsIGhvc3QtPmlycSk7CisJc2VxX3ByaW50ZihzZXEsICJJUlEgZW5hYmxlZCA9ICVkXG4iLCBob3N0LT5pcnFfZW5hYmxlZCk7CisJc2VxX3ByaW50ZihzZXEsICJJUlEgZGlzYWJsZWQgPSAlZFxuIiwgaG9zdC0+aXJxX2Rpc2FibGVkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIklSUSBzdGF0ZSA9ICVkXG4iLCBob3N0LT5pcnFfc3RhdGUpOworCXNlcV9wcmludGYoc2VxLCAiQ0QgSVJRID0gJWRcbiIsIGhvc3QtPmlycV9jZCk7CisJc2VxX3ByaW50ZihzZXEsICJEbyBETUEgPSAlZFxuIiwgczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlNESUlNU0sgYXQgJWRcbiIsIGhvc3QtPnNkaWltc2spOworCXNlcV9wcmludGYoc2VxLCAiU0RJREFUQSBhdCAlZFxuIiwgaG9zdC0+c2RpZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NtY2lfc3RhdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgczNjbWNpX3N0YXRlX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzM2NtY2lfZm9wc19zdGF0ZSA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gczNjbWNpX3N0YXRlX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKyNkZWZpbmUgREJHX1JFRyhfcikgeyAuYWRkciA9IFMzQzI0MTBfU0RJIyNfciwgLm5hbWUgPSAjX3IgfQorCitzdHJ1Y3QgczNjbWNpX3JlZyB7CisJdW5zaWduZWQgc2hvcnQJYWRkcjsKKwl1bnNpZ25lZCBjaGFyCSpuYW1lOworfSBkZWJ1Z19yZWdzW10gPSB7CisJREJHX1JFRyhDT04pLAorCURCR19SRUcoUFJFKSwKKwlEQkdfUkVHKENNREFSRyksCisJREJHX1JFRyhDTURDT04pLAorCURCR19SRUcoQ01EU1RBVCksCisJREJHX1JFRyhSU1AwKSwKKwlEQkdfUkVHKFJTUDEpLAorCURCR19SRUcoUlNQMiksCisJREJHX1JFRyhSU1AzKSwKKwlEQkdfUkVHKFRJTUVSKSwKKwlEQkdfUkVHKEJTSVpFKSwKKwlEQkdfUkVHKERDT04pLAorCURCR19SRUcoRENOVCksCisJREJHX1JFRyhEU1RBKSwKKwlEQkdfUkVHKEZTVEEpLAorCXt9Cit9OworCitzdGF0aWMgaW50IHMzY21jaV9yZWdzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBzM2NtY2lfcmVnICpycHRyID0gZGVidWdfcmVnczsKKworCWZvciAoOyBycHRyLT5uYW1lOyBycHRyKyspCisJCXNlcV9wcmludGYoc2VxLCAiU0RJJXNcdD0weCUwOHhcbiIsIHJwdHItPm5hbWUsCisJCQkgICByZWFkbChob3N0LT5iYXNlICsgcnB0ci0+YWRkcikpOworCisJc2VxX3ByaW50ZihzZXEsICJTRElJTVNLXHQ9MHglMDh4XG4iLCByZWFkbChob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zaykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjbWNpX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgczNjbWNpX3JlZ3Nfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHMzY21jaV9mb3BzX3JlZ3MgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHMzY21jaV9yZWdzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIHMzY21jaV9kZWJ1Z2ZzX2F0dGFjaChzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmhvc3QtPnBkZXYtPmRldjsKKworCWhvc3QtPmRlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoZGV2KSwgTlVMTCk7CisJaWYgKElTX0VSUihob3N0LT5kZWJ1Z19yb290KSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyByb290XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWhvc3QtPmRlYnVnX3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGUiLCAwNDQ0LAorCQkJCQkJaG9zdC0+ZGVidWdfcm9vdCwgaG9zdCwKKwkJCQkJCSZzM2NtY2lfZm9wc19zdGF0ZSk7CisKKwlpZiAoSVNfRVJSKGhvc3QtPmRlYnVnX3N0YXRlKSkKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRlYnVnIHN0YXRlIGZpbGVcbiIpOworCisJaG9zdC0+ZGVidWdfcmVncyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ3MiLCAwNDQ0LAorCQkJCQkgICAgICAgaG9zdC0+ZGVidWdfcm9vdCwgaG9zdCwKKwkJCQkJICAgICAgICZzM2NtY2lfZm9wc19yZWdzKTsKKworCWlmIChJU19FUlIoaG9zdC0+ZGVidWdfcmVncykpCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1ZyByZWdzIGZpbGVcbiIpOworfQorCitzdGF0aWMgdm9pZCBzM2NtY2lfZGVidWdmc19yZW1vdmUoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCWRlYnVnZnNfcmVtb3ZlKGhvc3QtPmRlYnVnX3JlZ3MpOworCWRlYnVnZnNfcmVtb3ZlKGhvc3QtPmRlYnVnX3N0YXRlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShob3N0LT5kZWJ1Z19yb290KTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfZGVidWdmc19hdHRhY2goc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfZGVidWdmc19yZW1vdmUoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0CSptbWM7CiAJaW50IHJldDsKKwlpbnQgaXMyNDQwOworCWludCBpOworCisJaXMyNDQwID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KS0+ZHJpdmVyX2RhdGE7CiAKIAltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IHMzY21jaV9ob3N0KSwgJnBkZXYtPmRldik7CiAJaWYgKCFtbWMpIHsKQEAgLTEyNTgsNiArMTU1OSwxOCBAQAogCQlnb3RvIHByb2JlX291dDsKIAl9CiAKKwlmb3IgKGkgPSBTM0MyNDEwX0dQRSg1KTsgaSA8PSBTM0MyNDEwX0dQRSgxMCk7IGkrKykgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoaSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGdwaW8gJWRcbiIsIGkpOworCisJCQlmb3IgKGktLTsgaSA+PSBTM0MyNDEwX0dQRSg1KTsgaS0tKQorCQkJCWdwaW9fZnJlZShpKTsKKworCQkJZ290byBwcm9iZV9mcmVlX2hvc3Q7CisJCX0KKwl9CisKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlob3N0LT5tbWMgCT0gbW1jOwogCWhvc3QtPnBkZXYJPSBwZGV2OwpAQCAtMTI4MiwxMSArMTU5NSwxMiBAQAogCQlob3N0LT5jbGtfZGl2CT0gMjsKIAl9CiAKLQlob3N0LT5kb2RtYQkJPSAwOwogCWhvc3QtPmNvbXBsZXRlX3doYXQgCT0gQ09NUExFVElPTl9OT05FOwogCWhvc3QtPnBpb19hY3RpdmUgCT0gWEZFUl9OT05FOwogCi0JaG9zdC0+ZG1hCQk9IFMzQ01DSV9ETUE7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPRE1BCisJaG9zdC0+ZG9kbWEJCT0gaG9zdC0+cGRhdGEtPmRtYTsKKyNlbmRpZgogCiAJaG9zdC0+bWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIWhvc3QtPm1lbSkgewpAQCAtMTI5NCwxOSArMTYwOCwxOSBAQAogCQkJImZhaWxlZCB0byBnZXQgaW8gbWVtb3J5IHJlZ2lvbiByZXNvdWNlLlxuIik7CiAKIAkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBwcm9iZV9mcmVlX2hvc3Q7CisJCWdvdG8gcHJvYmVfZnJlZV9ncGlvOwogCX0KIAogCWhvc3QtPm1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihob3N0LT5tZW0tPnN0YXJ0LAotCQkJCSAgICAgICBSRVNTSVpFKGhvc3QtPm1lbSksIHBkZXYtPm5hbWUpOworCQkJCSAgICAgICByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSksIHBkZXYtPm5hbWUpOwogCiAJaWYgKCFob3N0LT5tZW0pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaW8gbWVtb3J5IHJlZ2lvbi5cbiIpOwogCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIHByb2JlX2ZyZWVfaG9zdDsKKwkJZ290byBwcm9iZV9mcmVlX2dwaW87CiAJfQogCi0JaG9zdC0+YmFzZSA9IGlvcmVtYXAoaG9zdC0+bWVtLT5zdGFydCwgUkVTU0laRShob3N0LT5tZW0pKTsKKwlob3N0LT5iYXNlID0gaW9yZW1hcChob3N0LT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSkpOwogCWlmICghaG9zdC0+YmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCgpIGlvIG1lbW9yeSByZWdpb24uXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzMzEsMzEgKzE2NDUsNjAgQEAKIAkgKiBlbnN1cmUgd2UgZG9uJ3QgbG9jayB0aGUgc3lzdGVtIHdpdGggdW4tc2VydmljZWFibGUgcmVxdWVzdHMuICovCiAKIAlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCWhvc3QtPmlycV9zdGF0ZSA9IGZhbHNlOwogCi0JaG9zdC0+aXJxX2NkID0gczNjMjQxMF9ncGlvX2dldGlycShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOwotCi0JaWYgKGhvc3QtPmlycV9jZCA+PSAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnFfY2QsIHMzY21jaV9pcnFfY2QsCi0JCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCURSSVZFUl9OQU1FLCBob3N0KSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGNhcmQgZGV0ZWN0IGlycS5cbiIpOwotCQkJcmV0ID0gLUVOT0VOVDsKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub19kZXRlY3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCwgInMzY21jaSBkZXRlY3QiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBkZXRlY3QgZ3Bpb1xuIik7CiAJCQlnb3RvIHByb2JlX2ZyZWVfaXJxOwogCQl9Ci0JfSBlbHNlIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImhvc3QgZGV0ZWN0IGhhcyBubyBpcnEgYXZhaWxhYmxlXG4iKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3Bpbihob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QsCi0JCQkJICAgIFMzQzI0MTBfR1BJT19JTlBVVCk7CisKKwkJaG9zdC0+aXJxX2NkID0gczNjMjQxMF9ncGlvX2dldGlycShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCisJCWlmIChob3N0LT5pcnFfY2QgPj0gMCkgeworCQkJaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycV9jZCwgczNjbWNpX2lycV9jZCwKKwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8CisJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQlEUklWRVJfTkFNRSwgaG9zdCkpIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJjYW4ndCBnZXQgY2FyZCBkZXRlY3QgaXJxLlxuIik7CisJCQkJcmV0ID0gLUVOT0VOVDsKKwkJCQlnb3RvIHByb2JlX2ZyZWVfZ3Bpb19jZDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJICJob3N0IGRldGVjdCBoYXMgbm8gaXJxIGF2YWlsYWJsZVxuIik7CisJCQlncGlvX2RpcmVjdGlvbl9pbnB1dChob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCQl9CisJfSBlbHNlCisJCWhvc3QtPmlycV9jZCA9IC0xOworCisJaWYgKCFob3N0LT5wZGF0YS0+bm9fd3Byb3RlY3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0LCAiczNjbWNpIHdwIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgd3JpdGVwcm90ZWN0XG4iKTsKKwkJCWdvdG8gcHJvYmVfZnJlZV9pcnFfY2Q7CisJCX0KKworCQlncGlvX2RpcmVjdGlvbl9pbnB1dChob3N0LT5wZGF0YS0+Z3Bpb193cHJvdGVjdCk7CiAJfQogCi0JaWYgKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0KQotCQlzM2MyNDEwX2dwaW9fY2ZncGluKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0LAotCQkJCSAgICBTM0MyNDEwX0dQSU9fSU5QVVQpOworCS8qIGRlcGVuZGluZyBvbiB0aGUgZG1hIHN0YXRlLCBnZXQgYSBkbWEgY2hhbm5lbCB0byB1c2UuICovCiAKLQlpZiAoczNjMjQxMF9kbWFfcmVxdWVzdChTM0NNQ0lfRE1BLCAmczNjbWNpX2RtYV9jbGllbnQsIE5VTEwpIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IERNQSBjaGFubmVsLlxuIik7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBwcm9iZV9mcmVlX2lycV9jZDsKKwlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKSB7CisJCWhvc3QtPmRtYSA9IHMzYzI0MTBfZG1hX3JlcXVlc3QoRE1BQ0hfU0RJLCAmczNjbWNpX2RtYV9jbGllbnQsCisJCQkJCQlob3N0KTsKKwkJaWYgKGhvc3QtPmRtYSA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgRE1BIGNoYW5uZWwuXG4iKTsKKwkJCWlmICghczNjbWNpX2hvc3RfY2FucGlvKCkpIHsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJZ290byBwcm9iZV9mcmVlX2dwaW9fd3A7CisJCQl9IGVsc2UgeworCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWxsaW5nIGJhY2sgdG8gUElPLlxuIik7CisJCQkJaG9zdC0+ZG9kbWEgPSAwOworCQkJfQorCQl9CiAJfQogCiAJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2RpIik7CkBAIC0xMzYzLDcgKzE3MDYsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZmluZCBjbG9jayBzb3VyY2UuXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwogCQlob3N0LT5jbGsgPSBOVUxMOwotCQlnb3RvIHByb2JlX2ZyZWVfaG9zdDsKKwkJZ290byBwcm9iZV9mcmVlX2RtYTsKIAl9CiAKIAlyZXQgPSBjbGtfZW5hYmxlKGhvc3QtPmNsayk7CkBAIC0xMzc2LDcgKzE3MTksMTEgQEAKIAogCW1tYy0+b3BzIAk9ICZzM2NtY2lfb3BzOwogCW1tYy0+b2NyX2F2YWlsCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfSFdfU0RJT19JUlEKKwltbWMtPmNhcHMJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQX1NESU9fSVJROworI2Vsc2UKIAltbWMtPmNhcHMJPSBNTUNfQ0FQXzRfQklUX0RBVEE7CisjZW5kaWYKIAltbWMtPmZfbWluIAk9IGhvc3QtPmNsa19yYXRlIC8gKGhvc3QtPmNsa19kaXYgKiAyNTYpOwogCW1tYy0+Zl9tYXggCT0gaG9zdC0+Y2xrX3JhdGUgLyBob3N0LT5jbGtfZGl2OwogCkBAIC0xNDA4LDggKzE3NTUsMTIgQEAKIAkJZ290byBmcmVlX2NwdWZyZXE7CiAJfQogCisJczNjbWNpX2RlYnVnZnNfYXR0YWNoKGhvc3QpOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGlhbGlzYXRpb24gZG9uZS5cbiIpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyAtIHVzaW5nICVzLCAlcyBTRElPIElSUVxuIiwgbW1jX2hvc3RuYW1lKG1tYyksCisJCSBzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkgPyAiZG1hIiA6ICJwaW8iLAorCQkgbW1jLT5jYXBzICYgTU1DX0NBUF9TRElPX0lSUSA/ICJodyIgOiAic3ciKTsKIAogCXJldHVybiAwOwogCkBAIC0xNDIyLDYgKzE3NzMsMTggQEAKICBjbGtfZnJlZToKIAljbGtfcHV0KGhvc3QtPmNsayk7CiAKKyBwcm9iZV9mcmVlX2RtYToKKwlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQorCQlzM2MyNDEwX2RtYV9mcmVlKGhvc3QtPmRtYSwgJnMzY21jaV9kbWFfY2xpZW50KTsKKworIHByb2JlX2ZyZWVfZ3Bpb193cDoKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub193cHJvdGVjdCkKKwkJZ3Bpb19mcmVlKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0KTsKKworIHByb2JlX2ZyZWVfZ3Bpb19jZDoKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub19kZXRlY3QpCisJCWdwaW9fZnJlZShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCiAgcHJvYmVfZnJlZV9pcnFfY2Q6CiAJaWYgKGhvc3QtPmlycV9jZCA+PSAwKQogCQlmcmVlX2lycShob3N0LT5pcnFfY2QsIGhvc3QpOwpAQCAtMTQzMywxMCArMTc5NiwxNSBAQAogCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAKICBwcm9iZV9mcmVlX21lbV9yZWdpb246Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIFJFU1NJWkUoaG9zdC0+bWVtKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaG9zdC0+bWVtKSk7CisKKyBwcm9iZV9mcmVlX2dwaW86CisJZm9yIChpID0gUzNDMjQxMF9HUEUoNSk7IGkgPD0gUzNDMjQxMF9HUEUoMTApOyBpKyspCisJCWdwaW9fZnJlZShpKTsKIAogIHByb2JlX2ZyZWVfaG9zdDoKIAltbWNfZnJlZV9ob3N0KG1tYyk7CisKICBwcm9iZV9vdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0NDksNiArMTgxNyw3IEBACiAJaWYgKGhvc3QtPmlycV9jZCA+PSAwKQogCQlmcmVlX2lycShob3N0LT5pcnFfY2QsIGhvc3QpOwogCisJczNjbWNpX2RlYnVnZnNfcmVtb3ZlKGhvc3QpOwogCXMzY21jaV9jcHVmcmVxX2RlcmVnaXN0ZXIoaG9zdCk7CiAJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKQEAgLTE0NTgsMTA0ICsxODI3LDEwMiBAQAogewogCXN0cnVjdCBtbWNfaG9zdAkJKm1tYyAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QJKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSAqcGQgPSBob3N0LT5wZGF0YTsKKwlpbnQgaTsKIAogCXMzY21jaV9zaHV0ZG93bihwZGV2KTsKIAogCWNsa19wdXQoaG9zdC0+Y2xrKTsKIAogCXRhc2tsZXRfZGlzYWJsZSgmaG9zdC0+cGlvX3Rhc2tsZXQpOwotCXMzYzI0MTBfZG1hX2ZyZWUoUzNDTUNJX0RNQSwgJnMzY21jaV9kbWFfY2xpZW50KTsKKworCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCisJCXMzYzI0MTBfZG1hX2ZyZWUoaG9zdC0+ZG1hLCAmczNjbWNpX2RtYV9jbGllbnQpOwogCiAJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKIAorCWlmICghcGQtPm5vX3dwcm90ZWN0KQorCQlncGlvX2ZyZWUocGQtPmdwaW9fd3Byb3RlY3QpOworCisJaWYgKCFwZC0+bm9fZGV0ZWN0KQorCQlncGlvX2ZyZWUocGQtPmdwaW9fZGV0ZWN0KTsKKworCWZvciAoaSA9IFMzQzI0MTBfR1BFKDUpOyBpIDw9IFMzQzI0MTBfR1BFKDEwKTsgaSsrKQorCQlncGlvX2ZyZWUoaSk7CisKKwogCWlvdW5tYXAoaG9zdC0+YmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIFJFU1NJWkUoaG9zdC0+bWVtKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaG9zdC0+bWVtKSk7CiAKIAltbWNfZnJlZV9ob3N0KG1tYyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV8yNDEwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gczNjbWNpX3Byb2JlKGRldiwgMCk7Ci19CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzM2NtY2lfZHJpdmVyX2lkc1tdID0geworCXsKKwkJLm5hbWUJPSAiczNjMjQxMC1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAwLAorCX0sIHsKKwkJLm5hbWUJPSAiczNjMjQxMi1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAxLAorCX0sIHsKKwkJLm5hbWUJPSAiczNjMjQ0MC1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAxLAorCX0sCisJeyB9Cit9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQxMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDEpOwotfQorTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgczNjbWNpX2RyaXZlcl9pZHMpOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQ0MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDEpOwotfQogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgczNjbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzY21jaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJc3RydWN0IHBtX21lc3NhZ2UgZXZlbnQgPSB7IFBNX0VWRU5UX1NVU1BFTkQgfTsKIAotCXJldHVybiAgbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKKwlyZXR1cm4gbW1jX3N1c3BlbmRfaG9zdChtbWMsIGV2ZW50KTsKIH0KIAotc3RhdGljIGludCBzM2NtY2lfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjbWNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOwogCiAJcmV0dXJuIG1tY19yZXN1bWVfaG9zdChtbWMpOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgczNjbWNpX3BtID0geworCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAorfTsKKworI2RlZmluZSBzM2NtY2lfcG1fb3BzICZzM2NtY2lfcG0KICNlbHNlIC8qIENPTkZJR19QTSAqLwotI2RlZmluZSBzM2NtY2lfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHMzY21jaV9yZXN1bWUgTlVMTAorI2RlZmluZSBzM2NtY2lfcG1fb3BzIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NtY2lfMjQxMF9kcml2ZXIgPSB7Ci0JLmRyaXZlci5uYW1lCT0gInMzYzI0MTAtc2RpIiwKLQkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQk9IHMzY21jaV8yNDEwX3Byb2JlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJzM2Mtc2RpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IHMzY21jaV9wbV9vcHMsCisJfSwKKwkuaWRfdGFibGUJPSBzM2NtY2lfZHJpdmVyX2lkcywKKwkucHJvYmUJCT0gczNjbWNpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjbWNpX3JlbW92ZSksCiAJLnNodXRkb3duCT0gczNjbWNpX3NodXRkb3duLAotCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpXzI0MTJfZHJpdmVyID0gewotCS5kcml2ZXIubmFtZQk9ICJzM2MyNDEyLXNkaSIsCi0JLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJPSBzM2NtY2lfMjQxMl9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHMzY21jaV9yZW1vdmUpLAotCS5zaHV0ZG93bgk9IHMzY21jaV9zaHV0ZG93biwKLQkuc3VzcGVuZAk9IHMzY21jaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjbWNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY21jaV8yNDQwX2RyaXZlciA9IHsKLQkuZHJpdmVyLm5hbWUJPSAiczNjMjQ0MC1zZGkiLAotCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gczNjbWNpXzI0NDBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NtY2lfcmVtb3ZlKSwKLQkuc2h1dGRvd24JPSBzM2NtY2lfc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBzM2NtY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzY21jaV9yZXN1bWUsCi19OwotCi0KIHN0YXRpYyBpbnQgX19pbml0IHMzY21jaV9pbml0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NtY2lfMjQxMF9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpXzI0MTJfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY21jaV8yNDQwX2RyaXZlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2NtY2lfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQxMF9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQxMl9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQ0MF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoczNjbWNpX2luaXQpOwpAQCAtMTU2NCw2ICsxOTMxLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTM0MgTU1DL1NEIENhcmQgSW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0FVVEhPUigiVGhvbWFzIEtsZWZmZWwgPHRrQG1haW50ZWNoLmRlPiwgQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPiIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEwLXNkaSIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEyLXNkaSIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDQwLXNkaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKaW5kZXggY2ExYmEzZC4uYzc2YjUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCkBAIC04LDkgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotLyogRklYTUU6IERNQSBSZXNvdXJjZSBtYW5hZ2VtZW50ID8hICovCi0jZGVmaW5lIFMzQ01DSV9ETUEgMAotCiBlbnVtIHMzY21jaV93YWl0Zm9yIHsKIAlDT01QTEVUSU9OX05PTkUsCiAJQ09NUExFVElPTl9GSU5BTElaRSwKQEAgLTQyLDYgKzM5LDExIEBACiAJaW50CQkJZG9kbWE7CiAJaW50CQkJZG1hdG9nbzsKIAorCWJvb2wJCQlpcnFfZGlzYWJsZWQ7CisJYm9vbAkJCWlycV9lbmFibGVkOworCWJvb2wJCQlpcnFfc3RhdGU7CisJaW50CQkJc2Rpb19pcnFlbjsKKwogCXN0cnVjdCBtbWNfcmVxdWVzdAkqbXJxOwogCWludAkJCWNtZF9pc19zdG9wOwogCkBAIC02OCw2ICs3MCwxMiBAQAogCXVuc2lnbmVkIGludAkJY2NudCwgZGNudDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcGlvX3Rhc2tsZXQ7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdfc3RhdGU7CisJc3RydWN0IGRlbnRyeQkJKmRlYnVnX3JlZ3M7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCXN0cnVjdCBub3RpZmllcl9ibG9jawlmcmVxX3RyYW5zaXRpb247CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCmluZGV4IDM3OWMzMTYuLjRjMTkyNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMKaW5kZXggYzJiYWYzMy4uMGExMTcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NzdDI1bC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggODQxZTA4NS4uMTRiZTA3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtNDg2LDYgKzQ4Niw3IEBACiAKIGNvbmZpZyBNVERfR1BJT19BRERSCiAJdHJpc3RhdGUgIkdQSU8tYXNzaXN0ZWQgRmxhc2ggQ2hpcCBTdXBwb3J0IgorCWRlcGVuZHMgb24gR0VORVJJQ19HUElPIHx8IEdQSU9MSUIKIAlkZXBlbmRzIG9uIE1URF9DT01QTEVYX01BUFBJTkdTCiAJc2VsZWN0IE1URF9QQVJUSVRJT05TCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKaW5kZXggMWQ1Y2Y4Ni4uYWUyZjZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCkBAIC01OCw0ICs1OCw2IEBACiBvYmotJChDT05GSUdfTVREX09NQVBfTk9SKQkrPSBvbWFwX25vci5vCiBvYmotJChDT05GSUdfTVREX0lOVEVMX1ZSX05PUikJKz0gaW50ZWxfdnJfbm9yLm8KIG9iai0kKENPTkZJR19NVERfQkZJTl9BU1lOQykJKz0gYmZpbi1hc3luYy1mbGFzaC5vCitvYmotJChDT05GSUdfTVREX1JCVFg0OTM5KQkrPSByYnR4NDkzOS1mbGFzaC5vCitvYmotJChDT05GSUdfTVREX1ZNVSkJCSs9IHZtdS1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0dQSU9fQUREUikJKz0gZ3Bpby1hZGRyLWZsYXNoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZ3Bpby1hZGRyLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jCmluZGV4IDQ0ZWY5YTQuLjFhZDVjYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZ3Bpby1hZGRyLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYwpAQCAtMTMsNyArMTMsOSBAQAogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgpAQCAtMjMsOSArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCiAjZGVmaW5lIHByX2RldmluaXQoZm10LCBhcmdzLi4uKSAoeyBzdGF0aWMgY29uc3QgX19kZXZpbml0Y29uc3QgY2hhciBfX2ZtdFtdID0gZm10OyBwcmludGsoX19mbXQsICMjIGFyZ3MpOyB9KQogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJncGlvLWFkZHItZmxhc2giCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYwppbmRleCBmZGI5N2YzLi5kN2E0NzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKQEAgLTIwOSw4ICsyMDksOCBAQAogCX0KIAlzdWJkZXYtPm10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCXByaW50ayhLRVJOX0lORk8gIlNBMTEwMCBmbGFzaDogQ0ZJIGRldmljZSBhdCAweCUwOGx4LCAlZE1pQiwgIgotCQkiJWQtYml0XG4iLCBwaHlzLCBzdWJkZXYtPm10ZC0+c2l6ZSA+PiAyMCwKKwlwcmludGsoS0VSTl9JTkZPICJTQTExMDAgZmxhc2g6IENGSSBkZXZpY2UgYXQgMHglMDhseCwgJXVNaUIsICVkLWJpdFxuIiwKKwkJcGh5cywgKHVuc2lnbmVkKShzdWJkZXYtPm10ZC0+c2l6ZSA+PiAyMCksCiAJCXN1YmRldi0+bWFwLmJhbmt3aWR0aCAqIDgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwppbmRleCAwYWNiZjRmLi44Y2ExN2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKQEAgLTMyLDE0ICszMiw2IEBACiAJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOwogfTsKIAotc3RhdGljIGludCBibGt0cmFuc19kaXNjYXJkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkJICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpCi17Ci0JcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0xJTlVYX0JMT0NLOwotCXJlcS0+Y21kWzBdID0gUkVRX0xCX09QX0RJU0NBUkQ7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZG9fYmxrdHJhbnNfcmVxdWVzdChzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyAqdHIsCiAJCQkgICAgICAgc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQpAQCAtNTIsMTAgKzQ0LDYgQEAKIAogCWJ1ZiA9IHJlcS0+YnVmZmVyOwogCi0JaWYgKHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfTElOVVhfQkxPQ0sgJiYKLQkgICAgcmVxLT5jbWRbMF0gPT0gUkVRX0xCX09QX0RJU0NBUkQpCi0JCXJldHVybiB0ci0+ZGlzY2FyZChkZXYsIGJsb2NrLCBuc2VjdCk7Ci0KIAlpZiAoIWJsa19mc19yZXF1ZXN0KHJlcSkpCiAJCXJldHVybiAtRUlPOwogCkBAIC02Myw2ICs1MSw5IEBACiAJICAgIGdldF9jYXBhY2l0eShyZXEtPnJxX2Rpc2spKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmIChibGtfZGlzY2FyZF9ycShyZXEpKQorCQlyZXR1cm4gdHItPmRpc2NhcmQoZGV2LCBibG9jaywgbnNlY3QpOworCiAJc3dpdGNoKHJxX2RhdGFfZGlyKHJlcSkpIHsKIAljYXNlIFJFQUQ6CiAJCWZvciAoOyBuc2VjdCA+IDA7IG5zZWN0LS0sIGJsb2NrKyssIGJ1ZiArPSB0ci0+Ymxrc2l6ZSkKQEAgLTM4MCw4ICszNzEsOCBAQAogCXRyLT5ibGtjb3JlX3ByaXYtPnJxLT5xdWV1ZWRhdGEgPSB0cjsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHRyLT5ibGtjb3JlX3ByaXYtPnJxLCB0ci0+Ymxrc2l6ZSk7CiAJaWYgKHRyLT5kaXNjYXJkKQotCQlibGtfcXVldWVfc2V0X2Rpc2NhcmQodHItPmJsa2NvcmVfcHJpdi0+cnEsCi0JCQkJICAgICAgYmxrdHJhbnNfZGlzY2FyZF9yZXF1ZXN0KTsKKwkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19ESVNDQVJELAorCQkJCQl0ci0+YmxrY29yZV9wcml2LT5ycSk7CiAKIAl0ci0+Ymxrc2hpZnQgPSBmZnModHItPmJsa3NpemUpIC0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggMjIxMTM4Ni4uMjk1N2NjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC03NjEsNiArNzYxLDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBOb3QgZm9yIHN5bmRyb21lIGNhbGN1bGF0aW5nIGVjYyBjb250cm9sbGVycywgd2hpY2ggdXNlIGEgc3BlY2lhbCBvb2IgbGF5b3V0CiAgKi8KQEAgLTc3Nyw2ICs3NzgsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIFdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nIGV2ZW4gd2hlbiBPT0IgaXNuJ3QgdXNlZC4KICAqLwpAQCAtODE4LDYgKzgyMCw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKi8KIHN0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2Vfc3dlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCiAJCQkJdWludDhfdCAqYnVmLCBpbnQgcGFnZSkKQEAgLTkzOSw2ICs5NDIsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIE5vdCBmb3Igc3luZHJvbWUgY2FsY3VsYXRpbmcgZWNjIGNvbnRyb2xsZXJzIHdoaWNoIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQKICAqLwpAQCAtOTgzLDYgKzk4Nyw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogSGFyZHdhcmUgRUNDIGZvciBsYXJnZSBwYWdlIGNoaXBzLCByZXF1aXJlIE9PQiB0byBiZSByZWFkIGZpcnN0LgogICogRm9yIHRoaXMgRUNDIG1vZGUsIHRoZSB3cml0ZV9wYWdlIG1ldGhvZCBpcyByZS11c2VkIGZyb20gRUNDX0hXLgpAQCAtMTAzMSw2ICsxMDM2LDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBUaGUgaHcgZ2VuZXJhdG9yIGNhbGN1bGF0ZXMgdGhlIGVycm9yIHN5bmRyb21lIGF1dG9tYXRpY2FsbHkuIFRoZXJlZm9yCiAgKiB3ZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKaW5kZXggZTFmN2QwYS4uMTRjZWMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgInViaS5oIgogCiAvKiBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgJ210ZD0nIHBhcmFtZXRlciAqLwpAQCAtMTI1Nyw3ICsxMjU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlc3VsdDsKIAogCXJlc3VsdCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZHAsIDApOwotCWlmIChzdHIgPT0gZW5kcCB8fCByZXN1bHQgPCAwKSB7CisJaWYgKHN0ciA9PSBlbmRwIHx8IHJlc3VsdCA+PSBJTlRfTUFYKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVUJJIGVycm9yOiBpbmNvcnJlY3QgYnl0ZXMgY291bnQ6IFwiJXNcIlxuIiwKIAkJICAgICAgIHN0cik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uYyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKaW5kZXggZTcxNjFhZC4uOTBhZjYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uYworKysgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCkBAIC03OTQsMTYgKzc5NCwxNSBAQAogCQkgKiBudW1iZXIuCiAJCSAqLwogCQlpbWFnZV9zZXEgPSBiZTMyX3RvX2NwdShlY2gtPmltYWdlX3NlcSk7Ci0JCWlmICghc2ktPmltYWdlX3NlcV9zZXQpIHsKKwkJaWYgKCF1YmktPmltYWdlX3NlcSAmJiBpbWFnZV9zZXEpCiAJCQl1YmktPmltYWdlX3NlcSA9IGltYWdlX3NlcTsKLQkJCXNpLT5pbWFnZV9zZXFfc2V0ID0gMTsKLQkJfSBlbHNlIGlmICh1YmktPmltYWdlX3NlcSAmJiB1YmktPmltYWdlX3NlcSAhPSBpbWFnZV9zZXEpIHsKKwkJaWYgKHViaS0+aW1hZ2Vfc2VxICYmIGltYWdlX3NlcSAmJgorCQkgICAgdWJpLT5pbWFnZV9zZXEgIT0gaW1hZ2Vfc2VxKSB7CiAJCQl1YmlfZXJyKCJiYWQgaW1hZ2Ugc2VxdWVuY2UgbnVtYmVyICVkIGluIFBFQiAlZCwgIgogCQkJCSJleHBlY3RlZCAlZCIsIGltYWdlX3NlcSwgcG51bSwgdWJpLT5pbWFnZV9zZXEpOwogCQkJdWJpX2RiZ19kdW1wX2VjX2hkcihlY2gpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQogCX0KIAogCS8qIE9LLCB3ZSd2ZSBkb25lIHdpdGggdGhlIEVDIGhlYWRlciwgbGV0J3MgbG9vayBhdCB0aGUgVklEIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uaCBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKaW5kZXggYmFiMzE2OS4uZmYxNzlhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uaAorKysgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCkBAIC0xMDMsNyArMTAzLDYgQEAKICAqIEBlY19zdW06IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYwogICogQGVjX2NvdW50OiBhIHRlbXBvcmFyeSB2YXJpYWJsZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgQG1lYW5fZWMKICAqIEBjb3JyX2NvdW50OiBjb3VudCBvZiBjb3JydXB0ZWQgUEVCcwotICogQGltYWdlX3NlcV9zZXQ6IGluZGljYXRlcyBAdWJpLT5pbWFnZV9zZXEgaXMga25vd24KICAqCiAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSByZXN1bHQgb2Ygc2Nhbm5pbmcgYW5kIG1heSBiZSB1c2VkIGJ5IG90aGVyCiAgKiBVQkkgc3ViLXN5c3RlbXMgdG8gYnVpbGQgZmluYWwgVUJJIGRhdGEgc3RydWN0dXJlcywgZnVydGhlciBlcnJvci1yZWNvdmVyeQpAQCAtMTI3LDcgKzEyNiw2IEBACiAJdWludDY0X3QgZWNfc3VtOwogCWludCBlY19jb3VudDsKIAlpbnQgY29ycl9jb3VudDsKLQlpbnQgaW1hZ2Vfc2VxX3NldDsKIH07CiAKIHN0cnVjdCB1YmlfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggZTE5Y2E0Yi4uYjJmNzFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC05NzUsNyArOTc1LDcgQEAKIAogY29uZmlnIEVUSE9DCiAJdHJpc3RhdGUgIk9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBIQVNfSU9NRU0KKwlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBIQVNfSU9NRU0gJiYgSEFTX0RNQQogCXNlbGVjdCBNSUkKIAlzZWxlY3QgUEhZTElCCiAJc2VsZWN0IENSQzMyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggY2U2ZjFhYy4uM2Y0YjQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtMTA4OCw3ICsxMDg4LDE0IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldikpICE9IDApIHsKKwlkZXYtPmJhc2VfYWRkciA9IGJhc2U7CisJZGV2LT5pcnEgPSBpcnE7CisJZGV2LT5uZXRkZXZfb3BzID0gJmF1MTAwMF9uZXRkZXZfb3BzOworCVNFVF9FVEhUT09MX09QUyhkZXYsICZhdTEwMDBfZXRodG9vbF9vcHMpOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVEhfVFhfVElNRU9VVDsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChlcnIgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgZXJyb3IgJWRcbiIsCiAJCQkJRFJWX05BTUUsIGVycik7CiAJCWZyZWVfbmV0ZGV2KGRldik7CkBAIC0xMjA5LDEyICsxMjE2LDYgQEAKIAkJYXVwLT50eF9kYl9pbnVzZVtpXSA9IHBEQjsKIAl9CiAKLQlkZXYtPmJhc2VfYWRkciA9IGJhc2U7Ci0JZGV2LT5pcnEgPSBpcnE7Ci0JZGV2LT5uZXRkZXZfb3BzID0gJmF1MTAwMF9uZXRkZXZfb3BzOwotCVNFVF9FVEhUT09MX09QUyhkZXYsICZhdTEwMDBfZXRodG9vbF9vcHMpOwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVEhfVFhfVElNRU9VVDsKLQogCS8qCiAJICogVGhlIGJvb3QgY29kZSB1c2VzIHRoZSBldGhlcm5ldCBjb250cm9sbGVyLCBzbyByZXNldCBpdCB0byBzdGFydAogCSAqIGZyZXNoLiAgYXUxMDAwX2luaXQoKSBleHBlY3RzIHRoYXQgdGhlIGRldmljZSBpcyBpbiByZXNldCBzdGF0ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKaW5kZXggZmY0NDlkZS4uODc2MmEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKaW5kZXggMTVjMDE5NS4uYTI0YmUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKKysrIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKQEAgLTc2OCwxMCArNzY4LDI0IEBACiAKIAllMTAwX3NldF9tZGlvX3JlZyhkZXYsIG5wLT5taWlfaWYucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBkYXRhKTsKIAotCS8qIFJlbmVnb3RpYXRlIHdpdGggbGluayBwYXJ0bmVyICovCisJZGF0YSA9IGUxMDBfZ2V0X21kaW9fcmVnKGRldiwgbnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTUNSKTsKIAlpZiAoYXV0b25lZ19ub3JtYWwpIHsKLQkgIGRhdGEgPSBlMTAwX2dldF9tZGlvX3JlZyhkZXYsIG5wLT5taWlfaWYucGh5X2lkLCBNSUlfQk1DUik7Ci0JZGF0YSB8PSBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQ7CisJCS8qIFJlbmVnb3RpYXRlIHdpdGggbGluayBwYXJ0bmVyICovCisJCWRhdGEgfD0gQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUOworCX0gZWxzZSB7CisJCS8qIERvbid0IG5lZ290aWF0ZSBzcGVlZCBvciBkdXBsZXggKi8KKwkJZGF0YSAmPSB+KEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisKKwkJLyogU2V0IHNwZWVkIGFuZCBkdXBsZXggc3RhdGljICovCisJCWlmIChjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAxMCkKKwkJCWRhdGEgJj0gfkJNQ1JfU1BFRUQxMDA7CisJCWVsc2UKKwkJCWRhdGEgfD0gQk1DUl9TUEVFRDEwMDsKKworCQlpZiAoY3VycmVudF9kdXBsZXggIT0gZnVsbCkKKwkJCWRhdGEgJj0gfkJNQ1JfRlVMTERQTFg7CisJCWVsc2UKKwkJCWRhdGEgfD0gQk1DUl9GVUxMRFBMWDsKIAl9CiAJZTEwMF9zZXRfbWRpb19yZWcoZGV2LCBucC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNQ1IsIGRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCBkYjYzODAzLi5lMzQ3ODMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtMTY0LDE2ICsxNjQsMTQgQEAKICMgZGVmaW5lIEVNQUNfTUJQX01DQVNUQ0hBTihjaCkJCSgoY2gpICYgMHg3KQogCiAvKiBFTUFDIG1hY19jb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9UWFBUWVBFCQkoMHgyMDApCi0jZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9UWFBBQ0VFTgkoMHg0MCkKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX01JSUVOCQkoMHgyMCkKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0dJR0FCSVRFTgkoMHg4MCkKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0dJR0FCSVRFTl9TSElGVCAoNykKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0ZVTExEVVBMRVhFTgkoMHgxKQorI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfVFhQVFlQRQkJQklUKDkpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9UWFBBQ0VFTglCSVQoNikKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0dNSUlFTgkJQklUKDUpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9HSUdBQklURU4JQklUKDcpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9GVUxMRFVQTEVYRU4JQklUKDApCiAjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9STUlJU1BFRURfTUFTSwlCSVQoMTUpCiAKIC8qIEdJR0FCSVQgTU9ERSByZWxhdGVkIGJpdHMgKi8KLSNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HTUlJRU4JQklUKDUpCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHCUJJVCg3KQogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJR0ZPUkNFCUJJVCgxNykKIApAQCAtMTkyLDEwICsxOTAsMTAgQEAKICNkZWZpbmUgRU1BQ19SWF9CVUZGRVJfT0ZGU0VUX01BU0sJKDB4RkZGRikKIAogLyogTUFDX0lOX1ZFQ1RPUiAoMHgxODApIHJlZ2lzdGVyIGJpdCBmaWVsZHMgKi8KLSNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9IT1NUX0lOVAkgICAgICAoMHgyMDAwMCkKLSNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9TVEFUUEVORF9JTlQJICAgICAgKDB4MTAwMDApCi0jZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfUlhfSU5UX1ZFQwkgICAgICAoMHgwMTAwKQotI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1RYX0lOVF9WRUMJICAgICAgKDB4MDEpCisjZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfSE9TVF9JTlQJQklUKDE3KQorI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1NUQVRQRU5EX0lOVAlCSVQoMTYpCisjZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfUlhfSU5UX1ZFQwlCSVQoOCkKKyNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9UWF9JTlRfVkVDCUJJVCgwKQogCiAvKiogTk9URTo6IEZvciBETTY0NnggdGhlIElOX1ZFQ1RPUiBoYXMgY2hhbmdlZCAqLwogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNfSU5fVkVDVE9SX1JYX0lOVF9WRUMJQklUKEVNQUNfREVGX1JYX0NIKQpAQCAtMjAzLDcgKzIwMSw2IEBACiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ19JTl9WRUNUT1JfSE9TVF9JTlQJQklUKDI2KQogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNfSU5fVkVDVE9SX1NUQVRQRU5EX0lOVAlCSVQoMjcpCiAKLQogLyogQ1BQSSBiaXQgcG9zaXRpb25zICovCiAjZGVmaW5lIEVNQUNfQ1BQSV9TT1BfQklUCQlCSVQoMzEpCiAjZGVmaW5lIEVNQUNfQ1BQSV9FT1BfQklUCQlCSVQoMzApCkBAIC03NTAsOCArNzQ3LDcgQEAKIAogCWlmIChwcml2LT5zcGVlZCA9PSBTUEVFRF8xMDAwICYmIChwcml2LT52ZXJzaW9uID09IEVNQUNfVkVSU0lPTl8yKSkgewogCQltYWNfY29udHJvbCA9IGVtYWNfcmVhZChFTUFDX01BQ0NPTlRST0wpOwotCQltYWNfY29udHJvbCB8PSAoRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HTUlJRU4gfAotCQkJCUVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHIHwKKwkJbWFjX2NvbnRyb2wgfD0gKEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHIHwKIAkJCQlFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJR0ZPUkNFKTsKIAl9IGVsc2UgewogCQkvKiBDbGVhciB0aGUgR0lHIGJpdCBhbmQgR0lHRk9SQ0UgYml0ICovCkBAIC0yMTA4LDcgKzIxMDQsNyBAQAogCiAJLyogRW5hYmxlIE1JSSAqLwogCXZhbCA9IGVtYWNfcmVhZChFTUFDX01BQ0NPTlRST0wpOwotCXZhbCB8PSAoRU1BQ19NQUNDT05UUk9MX01JSUVOKTsKKwl2YWwgfD0gKEVNQUNfTUFDQ09OVFJPTF9HTUlJRU4pOwogCWVtYWNfd3JpdGUoRU1BQ19NQUNDT05UUk9MLCB2YWwpOwogCiAJLyogRW5hYmxlIE5BUEkgYW5kIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IDk2ODZjMWYuLjdhM2JkYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtMjM3LDYgKzIzNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggZDE5YjA4NC4uM2MyOWEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTUxLDYgKzE1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAppbmRleCAxODlkZmEyLi4zZTE4N2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaApAQCAtMTQxLDYgKzE0MSw4IEBACiAjZGVmaW5lIEhWX1ROQ1JTX1VQUEVSCQlQSFlfUkVHKDc3OCwgMjkpIC8qIFRyYW5zbWl0IHdpdGggbm8gQ1JTICovCiAjZGVmaW5lIEhWX1ROQ1JTX0xPV0VSCQlQSFlfUkVHKDc3OCwgMzApCiAKKyNkZWZpbmUgRTEwMDBfRkNSVFZfUENIICAgICAweDA1RjQwIC8qIFBDSCBGbG93IENvbnRyb2wgUmVmcmVzaCBUaW1lciBWYWx1ZSAqLworCiAvKiBCTSBQSFkgQ29wcGVyIFNwZWNpZmljIFN0YXR1cyAqLwogI2RlZmluZSBCTV9DU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMTcKICNkZWZpbmUgQk1fQ1NfU1RBVFVTX0xJTktfVVAgICAgICAgICAgICAgIDB4MDQwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKaW5kZXggMWJmNGQyYS4uZTgyNjM4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCkBAIC0zMjcsMTAgKzMyNywxOCBAQAogCiAJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBody0+ZmMucmVxdWVzdGVkX21vZGU7CiAKLQkJcmV0dmFsID0gKChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgPwotCQkJICBody0+bWFjLm9wcy5zZXR1cF9saW5rKGh3KSA6IGUxMDAwZV9mb3JjZV9tYWNfZmMoaHcpKTsKKwkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB7CisJCQlyZXR2YWwgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rKGh3KTsKKwkJCS8qIGltcGxpY2l0IGdvdG8gb3V0ICovCisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSBlMTAwMGVfZm9yY2VfbWFjX2ZjKGh3KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBvdXQ7CisJCQllMTAwMGVfc2V0X2ZjX3dhdGVybWFya3MoaHcpOworCQl9CiAJfQogCitvdXQ6CiAJY2xlYXJfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwppbmRleCA1MWRkYjA0Li5lZmYzZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKQEAgLTExMTgsNyArMTExOCw4IEBACiAJCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX0xQTFU7CiAJfQogCS8qIFJlc3RhcnQgYXV0by1uZWcgdG8gYWN0aXZhdGUgdGhlIGJpdHMgKi8KLQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX1JFU1RBUlRfQU47CisJaWYgKCFlMTAwMF9jaGVja19yZXNldF9ibG9jayhodykpCisJCW9lbV9yZWcgfD0gSFZfT0VNX0JJVFNfUkVTVEFSVF9BTjsKIAlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZ19sb2NrZWQoaHcsIEhWX09FTV9CSVRTLCBvZW1fcmVnKTsKIAogb3V0OgpAQCAtMzU1OCw2ICszNTU5LDcgQEAKIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX0ZMQVNICiAJCQkJICB8IEZMQUdfSEFTX0pVTUJPX0ZSQU1FUworCQkJCSAgfCBGTEFHX0RJU0FCTEVfRkNfUEFVU0VfVElNRSAvKiBlcnJhdGEgKi8KIAkJCQkgIHwgRkxBR19BUE1FX0lOX1dVQywKIAkucGJhCQkJPSAyNiwKIAkubWF4X2h3X2ZyYW1lX3NpemUJPSA0MDk2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDA2ODdjNmEuLmZhZDhmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTI3NjksMjUgKzI3NjksMzggQEAKIAkvKgogCSAqIGZsb3cgY29udHJvbCBzZXR0aW5ncwogCSAqCi0JICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IHR3byBmdWxsIGZyYW1lCisJICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IG9uZSBmdWxsIGZyYW1lCiAJICogKG9yIHRoZSBzaXplIHVzZWQgZm9yIGVhcmx5IHJlY2VpdmUpIGFib3ZlIGl0IGluIHRoZSBSeCBGSUZPLgogCSAqIFNldCBpdCB0byB0aGUgbG93ZXIgb2Y6CiAJICogLSA5MCUgb2YgdGhlIFJ4IEZJRk8gc2l6ZSwgYW5kCiAJICogLSB0aGUgZnVsbCBSeCBGSUZPIHNpemUgbWludXMgdGhlIGVhcmx5IHJlY2VpdmUgc2l6ZSAoZm9yIHBhcnRzCiAJICogICB3aXRoIEVSVCBzdXBwb3J0IGFzc3VtaW5nIEVSVCBzZXQgdG8gRTEwMDBfRVJUXzIwNDgpLCBvcgotCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIHR3byBmdWxsIGZyYW1lcworCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIG9uZSBmdWxsIGZyYW1lCiAJICovCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkgJiYKLQkgICAgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKLQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkgICgocGJhIDw8IDEwKSAtIChFMTAwMF9FUlRfMjA0OCA8PCAzKSkpOwotCWVsc2UKLQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkgICgocGJhIDw8IDEwKSAtICgyICogYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKSk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJLyoKKwkJICogV29ya2Fyb3VuZCBQQ0ggTE9NIGFkYXB0ZXIgaGFuZ3Mgd2l0aCBjZXJ0YWluIG5ldHdvcmsKKwkJICogbG9hZHMuICBJZiBoYW5ncyBwZXJzaXN0LCB0cnkgZGlzYWJsaW5nIFR4IGZsb3cgY29udHJvbC4KKwkJICovCisJCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQkJZmMtPmhpZ2hfd2F0ZXIgPSAweDM1MDA7CisJCQlmYy0+bG93X3dhdGVyICA9IDB4MTUwMDsKKwkJfSBlbHNlIHsKKwkJCWZjLT5oaWdoX3dhdGVyID0gMHg1MDAwOworCQkJZmMtPmxvd193YXRlciAgPSAweDMwMDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfRVJUKSAmJgorCQkgICAgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKKwkJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJCSAgKChwYmEgPDwgMTApIC0gKEUxMDAwX0VSVF8yMDQ4IDw8IDMpKSk7CisJCWVsc2UKKwkJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJCSAgKChwYmEgPDwgMTApIC0gYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKTsKIAotCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgRTEwMDBfRkNSVEhfUlRIOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KLQlmYy0+bG93X3dhdGVyID0gKGZjLT5oaWdoX3dhdGVyIC0gKDIgKiBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkpOwotCWZjLT5sb3dfd2F0ZXIgJj0gRTEwMDBfRkNSVExfUlRMOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwkJZmMtPmhpZ2hfd2F0ZXIgPSBod20gJiBFMTAwMF9GQ1JUSF9SVEg7IC8qIDgtYnl0ZSBncmFudWxhcml0eSAqLworCQlmYy0+bG93X3dhdGVyID0gZmMtPmhpZ2hfd2F0ZXIgLSA4OworCX0KIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfRElTQUJMRV9GQ19QQVVTRV9USU1FKQogCQlmYy0+cGF1c2VfdGltZSA9IDB4RkZGRjsKQEAgLTI4MTMsNiArMjgyNiwxMCBAQAogCWlmIChtYWMtPm9wcy5pbml0X2h3KGh3KSkKIAkJZV9lcnIoIkhhcmR3YXJlIEVycm9yXG4iKTsKIAorCS8qIGFkZGl0aW9uYWwgcGFydCBvZiB0aGUgZmxvdy1jb250cm9sIHdvcmthcm91bmQgYWJvdmUgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikKKwkJZXczMihGQ1JUVl9QQ0gsIDB4MTAwMCk7CisKIAllMTAwMF91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7CiAKIAkvKiBFbmFibGUgaC93IHRvIHJlY29nbml6ZSBhbiA4MDIuMVEgVkxBTiBFdGhlcm5ldCBwYWNrZXQgKi8KQEAgLTM2MTAsNyArMzYyNyw3IEBACiAJCQljYXNlIFNQRUVEXzEwMDoKIAkJCQl0eGIyYiA9IDA7CiAJCQkJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0JCQkJLyogbWF5YmUgYWRkIHNvbWUgdGltZW91dCBmYWN0b3IgPyAqLworCQkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTA7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTQyODgsOCArNDMwNSwxMCBAQAogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCW1zbGVlcCgxKTsKLQkvKiBlMTAwMGVfZG93biBoYXMgYSBkZXBlbmRlbmN5IG9uIG1heF9mcmFtZV9zaXplICovCisJLyogZTEwMDBlX2Rvd24gLT4gZTEwMDBlX3Jlc2V0IGRlcGVuZGVudCBvbiBtYXhfZnJhbWVfc2l6ZSAmIG10dSAqLwogCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbWF4X2ZyYW1lOworCWVfaW5mbygiY2hhbmdpbmcgTVRVIGZyb20gJWQgdG8gJWRcbiIsIG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMDBlX2Rvd24oYWRhcHRlcik7CiAKQEAgLTQzMTksOSArNDMzOCw2IEBACiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFVEhfRlJBTUVfTEVOICsgVkxBTl9ITEVOCiAJCQkJCSArIEVUSF9GQ1NfTEVOOwogCi0JZV9pbmZvKCJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwgbmV0ZGV2LT5tdHUsIG5ld19tdHUpOwotCW5ldGRldi0+bXR1ID0gbmV3X210dTsKLQogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWUxMDAwZV91cChhZGFwdGVyKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKaW5kZXggMDMxNzViMy4uODVmOTU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwpAQCAtNzEsNyArNzEsNiBAQAogI2RlZmluZSBJODI1NzdfQ0ZHX0FTU0VSVF9DUlNfT05fVFggICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIEk4MjU3N19DRkdfRU5BQkxFX0RPV05TSElGVCAgICAgICAoMyA8PCAxMCkgLyogYXV0byBkb3duc2hpZnQgMTAwLzEwICovCiAjZGVmaW5lIEk4MjU3N19DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBJODI1NzdfQ1RSTF9ET1dOU0hJRlRfTUFTSyAgICAgICAgKDcgPDwgMTApCiAKIC8qIDgyNTc3IHNwZWNpZmljIFBIWSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSTgyNTc3X1BIWV9DVFJMXzIgICAgICAgICAgICAxOApAQCAtNjYwLDE1ICs2NTksNiBAQAogCXBoeV9kYXRhIHw9IEk4MjU3N19DRkdfRU5BQkxFX0RPV05TSElGVDsKIAogCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJODI1NzdfQ0ZHX1JFRywgcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQotCS8qIFNldCBudW1iZXIgb2YgbGluayBhdHRlbXB0cyBiZWZvcmUgZG93bnNoaWZ0ICovCi0JcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywgSTgyNTc3X0NUUkxfUkVHLCAmcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQlwaHlfZGF0YSAmPSB+STgyNTc3X0NUUkxfRE9XTlNISUZUX01BU0s7Ci0JcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIEk4MjU3N19DVFJMX1JFRywgcGh5X2RhdGEpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0yNjU4LDE5ICsyNjQ4LDE4IEBACiAJCXBhZ2UgPSAwOwogCiAJaWYgKHJlZyA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKLQkJaWYgKChody0+cGh5LnR5cGUgIT0gZTEwMDBfcGh5XzgyNTc4KSB8fAotCQkgICAgKChyZWcgIT0gSTgyNTc4X0FERFJfUkVHKSAmJgotCQkgICAgIChyZWcgIT0gSTgyNTc4X0FERFJfUkVHICsgMSkpKSB7Ci0JCQl1MzIgcGh5X2FkZHIgPSBody0+cGh5LmFkZHI7CisJCXUzMiBwaHlfYWRkciA9IGh3LT5waHkuYWRkcjsKIAotCQkJaHctPnBoeS5hZGRyID0gMTsKKwkJaHctPnBoeS5hZGRyID0gMTsKIAotCQkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCi0JCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7Ci0JCQlody0+cGh5LmFkZHIgPSBwaHlfYWRkcjsKLQkJfQorCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCisJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCisJCQkJCSAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKKwkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7CisKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKIAl9CiAKIAlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLApAQCAtMjY3OCw3ICsyNjY3LDcgQEAKIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKLQkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOworCQlyZXRfdmFsIHw9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwogCiAJaWYgKCFsb2NrZWQpCiAJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKQEAgLTI3ODQsMTkgKzI3NzMsMTggQEAKIAl9CiAKIAlpZiAocmVnID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewotCQlpZiAoKGh3LT5waHkudHlwZSAhPSBlMTAwMF9waHlfODI1NzgpIHx8Ci0JCSAgICAoKHJlZyAhPSBJODI1NzhfQUREUl9SRUcpICYmCi0JCSAgICAgKHJlZyAhPSBJODI1NzhfQUREUl9SRUcgKyAxKSkpIHsKLQkJCXUzMiBwaHlfYWRkciA9IGh3LT5waHkuYWRkcjsKKwkJdTMyIHBoeV9hZGRyID0gaHctPnBoeS5hZGRyOwogCi0JCQlody0+cGh5LmFkZHIgPSAxOworCQlody0+cGh5LmFkZHIgPSAxOwogCi0JCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KLQkJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKLQkJCWh3LT5waHkuYWRkciA9IHBoeV9hZGRyOwotCQl9CisJCS8qIFBhZ2UgaXMgc2hpZnRlZCBsZWZ0LCBQSFkgZXhwZWN0cyAocGFnZSB4IDMyKSAqLworCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKKwkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKKwkJCQkJICAgICAocGFnZSA8PCBJR1BfUEFHRV9TSElGVCkpOworCQlody0+cGh5LmFkZHIgPSBwaHlfYWRkcjsKKworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLApAQCAtMjgwNSw3ICsyNzkzLDcgQEAKIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKLQkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOworCQlyZXRfdmFsIHw9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwogCiAJaWYgKCFsb2NrZWQpCiAJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VxbC5jIGIvZHJpdmVycy9uZXQvZXFsLmMKaW5kZXggZDRkOWEzZS4uZjViOTZjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VxbC5jCisrKyBiL2RyaXZlcnMvbmV0L2VxbC5jCkBAIC0xMTEsNiArMTExLDcgQEAKICAqIFNvcnJ5LCBJIGhhZCB0byByZXdyaXRlIG1vc3Qgb2YgdGhpcyBmb3IgMi41LnggLURhdmVNCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhvYy5jIGIvZHJpdmVycy9uZXQvZXRob2MuYwppbmRleCA1OTA0NzNhLi5mN2Q5YWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9ldGhvYy5oPgogCiBzdGF0aWMgaW50IGJ1ZmZlcl9zaXplID0gMHg4MDAwOyAvKiAzMiBLQnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V3cmszLmMgYi9kcml2ZXJzL25ldC9ld3JrMy5jCmluZGV4IGIyYTVlYzguLmRkNGJhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V3cmszLmMKKysrIGIvZHJpdmVycy9uZXQvZXdyazMuYwpAQCAtMTQ1LDYgKzE0NSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDczZmU5NzcuLjMxMTY2MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwppbmRleCAxZDUwNjRhLi5mNzUxOWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIC8qIFRpbWUgaW4gamlmZmllcyBiZWZvcmUgY29uY2x1ZGluZyB0aGUgdHJhbnNtaXR0ZXIgaXMgaHVuZy4gKi8KICNkZWZpbmUgVFhfVElNRU9VVCAgKDUqSFopCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKaW5kZXggN2JjYWY3Yy4uZTM0NGM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYwppbmRleCBhYTQ0ODhlLi5lZDYwZmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKQEAgLTcxLDYgKzcxLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfaGR4LmMKaW5kZXggODhjNTkzNS4uMTY4NmY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jCkBAIC02MSw2ICs2MSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwppbmRleCAwMDEzYzQwLi45MWM1NzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCkBAIC00Miw2ICs0Miw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggYTlhMWE5OS4uZGQ4NjY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC05OCw2ICs5OCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IGFhYjNkOTcuLmIyNDNlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgImlnYi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKaW5kZXggMmZjMzBiNC4uY2I5MGQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwpAQCAtNjYsNyArNjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCmluZGV4IGY0ZDEzZmMuLmI1NGQzYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwpAQCAtMTE4LDcgKzExOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKaW5kZXggNWY5ZDczMy4uOGQ3MTNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCkBAIC04Miw3ICs4Miw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwppbmRleCBiM2QzMGJjLi5jMGUwYmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKaW5kZXggMTQ0NWU1OC4uODRkYjE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcm1vZC5oPgpAQCAtMTYzLDYgKzE2NCwyMiBAQAogfQogCiAvKgorICogU2V0IHRoZSBJckRBIGNvbW11bmljYXRpb25zIG1vZGUuCisgKi8KK3N0YXRpYyB2b2lkIHB4YV9pcmRhX3NldF9tb2RlKHN0cnVjdCBweGFfaXJkYSAqc2ksIGludCBtb2RlKQoreworCWlmIChzaS0+cGRhdGEtPnRyYW5zY2VpdmVyX21vZGUpCisJCXNpLT5wZGF0YS0+dHJhbnNjZWl2ZXJfbW9kZShzaS0+ZGV2LCBtb2RlKTsKKwllbHNlIHsKKwkJaWYgKGdwaW9faXNfdmFsaWQoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bikpCisJCQlncGlvX3NldF92YWx1ZShzaS0+cGRhdGEtPmdwaW9fcHdkb3duLAorCQkJCQkhKG1vZGUgJiBJUl9PRkYpIF4KKwkJCQkJIXNpLT5wZGF0YS0+Z3Bpb19wd2Rvd25faW52ZXJ0ZWQpOworCQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShzaS0+ZGV2LCBtb2RlKTsKKwl9Cit9CisKKy8qCiAgKiBTZXQgdGhlIElyREEgY29tbXVuaWNhdGlvbnMgc3BlZWQuCiAgKi8KIHN0YXRpYyBpbnQgcHhhX2lyZGFfc2V0X3NwZWVkKHN0cnVjdCBweGFfaXJkYSAqc2ksIGludCBzcGVlZCkKQEAgLTE4OCw3ICsyMDUsNyBAQAogCQkJcHhhX2lyZGFfZGlzYWJsZV9jbGsoc2kpOwogCiAJCQkvKiBzZXQgYm9hcmQgdHJhbnNjZWl2ZXIgdG8gU0lSIG1vZGUgKi8KLQkJCXNpLT5wZGF0YS0+dHJhbnNjZWl2ZXJfbW9kZShzaS0+ZGV2LCBJUl9TSVJNT0RFKTsKKwkJCXB4YV9pcmRhX3NldF9tb2RlKHNpLCBJUl9TSVJNT0RFKTsKIAogCQkJLyogZW5hYmxlIHRoZSBTVFVBUlQgY2xvY2sgKi8KIAkJCXB4YV9pcmRhX2VuYWJsZV9zaXJjbGsoc2kpOwpAQCAtMjIyLDcgKzIzOSw3IEBACiAJCUlDQ1IwID0gMDsKIAogCQkvKiBzZXQgYm9hcmQgdHJhbnNjZWl2ZXIgdG8gRklSIG1vZGUgKi8KLQkJc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIElSX0ZJUk1PREUpOworCQlweGFfaXJkYV9zZXRfbW9kZShzaSwgSVJfRklSTU9ERSk7CiAKIAkJLyogZW5hYmxlIHRoZSBGSUNQIGNsb2NrICovCiAJCXB4YV9pcmRhX2VuYWJsZV9maXJjbGsoc2kpOwpAQCAtNjQxLDcgKzY1OCw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogcG93ZXIgb2ZmIGJvYXJkIHRyYW5zY2VpdmVyICovCi0Jc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIElSX09GRik7CisJcHhhX2lyZGFfc2V0X21vZGUoc2ksIElSX09GRik7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAicHhhX2lyOiBpcmRhIHNodXRkb3duXG4iKTsKIH0KQEAgLTg0OSwxMCArODY2LDI2IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfbWVtXzU7CiAKLQlpZiAoc2ktPnBkYXRhLT5zdGFydHVwKQorCWlmIChncGlvX2lzX3ZhbGlkKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdChzaS0+cGRhdGEtPmdwaW9fcHdkb3duLCAiSXJEQSBzd2l0Y2giKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3N0YXJ0dXA7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChzaS0+cGRhdGEtPmdwaW9fcHdkb3duLAorCQkJCQkhc2ktPnBkYXRhLT5ncGlvX3B3ZG93bl9pbnZlcnRlZCk7CisJCWlmIChlcnIpIHsKKwkJCWdwaW9fZnJlZShzaS0+cGRhdGEtPmdwaW9fcHdkb3duKTsKKwkJCWdvdG8gZXJyX3N0YXJ0dXA7CisJCX0KKwl9CisKKwlpZiAoc2ktPnBkYXRhLT5zdGFydHVwKSB7CiAJCWVyciA9IHNpLT5wZGF0YS0+c3RhcnR1cChzaS0+ZGV2KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9zdGFydHVwOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfc3RhcnR1cDsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChzaS0+cGRhdGEtPmdwaW9fcHdkb3duKSAmJiBzaS0+cGRhdGEtPnN0YXJ0dXApCisJCWRldl93YXJuKHNpLT5kZXYsICJncGlvX3B3ZG93biBhbmQgc3RhcnR1cCgpIGJvdGggZGVmaW5lZCFcbiIpOwogCiAJZGV2LT5uZXRkZXZfb3BzID0gJnB4YV9pcmRhX25ldGRldl9vcHM7CiAKQEAgLTkwMyw2ICs5MzYsOCBAQAogCWlmIChkZXYpIHsKIAkJc3RydWN0IHB4YV9pcmRhICpzaSA9IG5ldGRldl9wcml2KGRldik7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWlmIChncGlvX2lzX3ZhbGlkKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pKQorCQkJZ3Bpb19mcmVlKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pOwogCQlpZiAoc2ktPnBkYXRhLT5zaHV0ZG93bikKIAkJCXNpLT5wZGF0YS0+c2h1dGRvd24oc2ktPmRldik7CiAJCWtmcmVlKHNpLT50eF9idWZmLmhlYWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS90b2ltMzIzMi1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdG9pbTMyMzItc2lyLmMKaW5kZXggZmNmMjg3Yi4uOTllMWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS90b2ltMzIzMi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3RvaW0zMjMyLXNpci5jCkBAIC0xMjAsNiArMTIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggYTUwMzZmNy4uYTQ1NjU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMjQwLDExICsyNDAsMTEgQEAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV90eF9pc19wYXVzZWQoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nKQogewotCWludCB0YzsKIAl1MzIgdHhvZmYgPSBJWEdCRV9URkNTX1RYT0ZGOwogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKKwkJaW50IHRjOwogCQlpbnQgcmVnX2lkeCA9IHR4X3JpbmctPnJlZ19pZHg7CiAJCWludCBkY2JfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMgYi9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKaW5kZXggMGJlMTRkNy4uYzE0NjMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYwpAQCAtNTY4LDYgKzU2OCwxNiBAQAogCQlpb3dyaXRlMTYoKndwdHIrKywga3MtPmh3X2FkZHIpOwogfQogCitzdGF0aWMgdm9pZCBrc19kaXNhYmxlX2ludChzdHJ1Y3Qga3NfbmV0ICprcykKK3sKKwlrc193cnJlZzE2KGtzLCBLU19JRVIsIDB4MDAwMCk7Cit9ICAvKiBrc19kaXNhYmxlX2ludCAqLworCitzdGF0aWMgdm9pZCBrc19lbmFibGVfaW50KHN0cnVjdCBrc19uZXQgKmtzKQoreworCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwga3MtPnJjX2llcik7Cit9ICAvKiBrc19lbmFibGVfaW50ICovCisKIC8qKgogICoga3NfdHhfZmlmb19zcGFjZSAtIHJldHVybiB0aGUgYXZhaWxhYmxlIGhhcmR3YXJlIGJ1ZmZlciBzaXplLgogICogQGtzOiBUaGUgY2hpcCBpbmZvcm1hdGlvbgpAQCAtNjgxLDYgKzY5MSw0NyBAQAogfQogCiAKK3ZvaWQga3NfZW5hYmxlX3FtdShzdHJ1Y3Qga3NfbmV0ICprcykKK3sKKwl1MTYgdzsKKworCXcgPSBrc19yZHJlZzE2KGtzLCBLU19UWENSKTsKKwkvKiBFbmFibGVzIFFNVSBUcmFuc21pdCAoVFhDUikuICovCisJa3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyB8IFRYQ1JfVFhFKTsKKworCS8qCisJICogUlggRnJhbWUgQ291bnQgVGhyZXNob2xkIEVuYWJsZSBhbmQgQXV0by1EZXF1ZXVlIFJYUSBGcmFtZQorCSAqIEVuYWJsZQorCSAqLworCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYUUNSKTsKKwlrc193cnJlZzE2KGtzLCBLU19SWFFDUiwgdyB8IFJYUUNSX1JYRkNURSk7CisKKwkvKiBFbmFibGVzIFFNVSBSZWNlaXZlIChSWENSMSkuICovCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYQ1IxKTsKKwlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgdyB8IFJYQ1IxX1JYRSk7CisJa3MtPmVuYWJsZWQgPSB0cnVlOworfSAgLyoga3NfZW5hYmxlX3FtdSAqLworCitzdGF0aWMgdm9pZCBrc19kaXNhYmxlX3FtdShzdHJ1Y3Qga3NfbmV0ICprcykKK3sKKwl1MTYJdzsKKworCXcgPSBrc19yZHJlZzE2KGtzLCBLU19UWENSKTsKKworCS8qIERpc2FibGVzIFFNVSBUcmFuc21pdCAoVFhDUikuICovCisJdyAgJj0gflRYQ1JfVFhFOworCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIHcpOworCisJLyogRGlzYWJsZXMgUU1VIFJlY2VpdmUgKFJYQ1IxKS4gKi8KKwl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhDUjEpOworCXcgJj0gflJYQ1IxX1JYRSA7CisJa3Nfd3JyZWcxNihrcywgS1NfUlhDUjEsIHcpOworCisJa3MtPmVuYWJsZWQgPSBmYWxzZTsKKworfSAgLyoga3NfZGlzYWJsZV9xbXUgKi8KKwogLyoqCiAgKiBrc19yZWFkX3FtdSAtIHJlYWQgMSBwa3QgZGF0YSBmcm9tIHRoZSBRTVUuCiAgKiBAa3M6IFRoZSBjaGlwIGluZm9ybWF0aW9uCkBAIC03NTIsNyArODAzLDcgQEAKIAkJCShmcmFtZV9oZHItPmxlbiA8IFJYX0JVRl9TSVpFKSAmJiBmcmFtZV9oZHItPmxlbikpIHsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJCQkvKiByZWFkIGRhdGEgYmxvY2sgaW5jbHVkaW5nIENSQyA0IGJ5dGVzICovCi0JCQlrc19yZWFkX3FtdShrcywgKHUxNiAqKXNrYi0+ZGF0YSwgZnJhbWVfaGRyLT5sZW4gKyA0KTsKKwkJCWtzX3JlYWRfcW11KGtzLCAodTE2ICopc2tiLT5kYXRhLCBmcmFtZV9oZHItPmxlbik7CiAJCQlza2JfcHV0KHNrYiwgZnJhbWVfaGRyLT5sZW4pOwogCQkJc2tiLT5kZXYgPSBuZXRkZXY7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwpAQCAtODYxLDcgKzkxMiw3IEBACiAJCWtzX2RiZyhrcywgIiVzIC0gZW50cnlcbiIsIF9fZnVuY19fKTsKIAogCS8qIHJlc2V0IHRoZSBIVyAqLwotCWVyciA9IHJlcXVlc3RfaXJxKGtzLT5pcnEsIGtzX2lycSwgS1NfSU5UX0ZMQUdTLCBEUlZfTkFNRSwga3MpOworCWVyciA9IHJlcXVlc3RfaXJxKGtzLT5pcnEsIGtzX2lycSwgS1NfSU5UX0ZMQUdTLCBEUlZfTkFNRSwgbmV0ZGV2KTsKIAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkOiAlZFxuIiwKQEAgLTg2OSw2ICs5MjAsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiB3YWtlIHVwIHBvd2VybW9kZSB0byBub3JtYWwgbW9kZSAqLworCWtzX3NldF9wb3dlcm1vZGUoa3MsIFBNRUNSX1BNX05PUk1BTCk7CisJbWRlbGF5KDEpOwkvKiB3YWl0IGZvciBub3JtYWwgbW9kZSB0byB0YWtlIGVmZmVjdCAqLworCisJa3Nfd3JyZWcxNihrcywgS1NfSVNSLCAweGZmZmYpOworCWtzX2VuYWJsZV9pbnQoa3MpOworCWtzX2VuYWJsZV9xbXUoa3MpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGtzLT5uZXRkZXYpOworCiAJaWYgKG5ldGlmX21zZ19pZnVwKGtzKSkKIAkJa3NfZGJnKGtzLCAibmV0d29yayBkZXZpY2UgJXMgdXBcbiIsIG5ldGRldi0+bmFtZSk7CiAKQEAgLTg5MiwxOSArOTUyLDE0IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKLQlrZnJlZShrcy0+ZnJhbWVfaGVhZF9pbmZvKTsKLQogCW11dGV4X2xvY2soJmtzLT5sb2NrKTsKIAogCS8qIHR1cm4gb2ZmIHRoZSBJUlFzIGFuZCBhY2sgYW55IG91dHN0YW5kaW5nICovCiAJa3Nfd3JyZWcxNihrcywgS1NfSUVSLCAweDAwMDApOwogCWtzX3dycmVnMTYoa3MsIEtTX0lTUiwgMHhmZmZmKTsKIAotCS8qIHNodXRkb3duIFJYIHByb2Nlc3MgKi8KLQlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgMHgwMDAwKTsKLQotCS8qIHNodXRkb3duIFRYIHByb2Nlc3MgKi8KLQlrc193cnJlZzE2KGtzLCBLU19UWENSLCAweDAwMDApOworCS8qIHNodXRkb3duIFJYL1RYIFFNVSAqLworCWtzX2Rpc2FibGVfcW11KGtzKTsKIAogCS8qIHNldCBwb3dlcm1vZGUgdG8gc29mdCBwb3dlciBkb3duIHRvIHNhdmUgcG93ZXIgKi8KIAlrc19zZXRfcG93ZXJtb2RlKGtzLCBQTUVDUl9QTV9TT0ZURE9XTik7CkBAIC05MjksMTcgKzk4NCw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGtzX3dyaXRlX3FtdShzdHJ1Y3Qga3NfbmV0ICprcywgdTggKnBkYXRhLCB1MTYgbGVuKQogewotCXVuc2lnbmVkIGZpZCA9IGtzLT5maWQ7Ci0KLQlmaWQgPSBrcy0+ZmlkOwotCWtzLT5maWQgPSAoa3MtPmZpZCArIDEpICYgVFhGUl9UWEZJRF9NQVNLOwotCi0JLyogcmVkdWNlIHRoZSB0eCBpbnRlcnJ1cHQgb2NjdXJyYW5jZXMuICovCi0JaWYgKCFmaWQpCi0JCWZpZCB8PSBUWEZSX1RYSUM7ICAgICAgIC8qIGlycSBvbiBjb21wbGV0aW9uICovCi0KIAkvKiBzdGFydCBoZWFkZXIgYXQgdHhiWzBdIHRvIGFsaWduIHR4dyBlbnRyaWVzICovCi0Ja3MtPnR4aC50eHdbMF0gPSBjcHVfdG9fbGUxNihmaWQpOworCWtzLT50eGgudHh3WzBdID0gMDsKIAlrcy0+dHhoLnR4d1sxXSA9IGNwdV90b19sZTE2KGxlbik7CiAKIAkvKiAxLiBzZXQgc3Vkby1ETUEgbW9kZSAqLwpAQCAtOTU3LDE2ICsxMDAzLDYgQEAKIAkJOwogfQogCi1zdGF0aWMgdm9pZCBrc19kaXNhYmxlX2ludChzdHJ1Y3Qga3NfbmV0ICprcykKLXsKLQlrc193cnJlZzE2KGtzLCBLU19JRVIsIDB4MDAwMCk7Ci19ICAvKiBrc19kaXNhYmxlX2ludCAqLwotCi1zdGF0aWMgdm9pZCBrc19lbmFibGVfaW50KHN0cnVjdCBrc19uZXQgKmtzKQotewotCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwga3MtPnJjX2llcik7Ci19ICAvKiBrc19lbmFibGVfaW50ICovCi0KIC8qKgogICoga3Nfc3RhcnRfeG1pdCAtIHRyYW5zbWl0IHBhY2tldAogICogQHNrYgkJOiBUaGUgYnVmZmVyIHRvIHRyYW5zbWl0CkBAIC0xNDEwLDI1ICsxNDQ2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBrc19kaXNhYmxlKHN0cnVjdCBrc19uZXQgKmtzKQotewotCXUxNgl3OwotCi0JdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1RYQ1IpOwotCi0JLyogRGlzYWJsZXMgUU1VIFRyYW5zbWl0IChUWENSKS4gKi8KLQl3ICAmPSB+VFhDUl9UWEU7Ci0Ja3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyk7Ci0KLQkvKiBEaXNhYmxlcyBRTVUgUmVjZWl2ZSAoUlhDUjEpLiAqLwotCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWENSMSk7Ci0JdyAmPSB+UlhDUjFfUlhFIDsKLQlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgdyk7Ci0KLQlrcy0+ZW5hYmxlZCA9IGZhbHNlOwotCi19ICAvKiBrc19kaXNhYmxlICovCi0KIHN0YXRpYyB2b2lkIGtzX3NldHVwKHN0cnVjdCBrc19uZXQgKmtzKQogewogCXUxNgl3OwpAQCAtMTQ2Myw3ICsxNDgwLDcgQEAKIAl3ID0gVFhDUl9UWEZDRSB8IFRYQ1JfVFhQRSB8IFRYQ1JfVFhDUkMgfCBUWENSX1RDR0lQOwogCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIHcpOwogCi0JdyA9IFJYQ1IxX1JYRkNFIHwgUlhDUjFfUlhCRSB8IFJYQ1IxX1JYVUU7CisJdyA9IFJYQ1IxX1JYRkNFIHwgUlhDUjFfUlhCRSB8IFJYQ1IxX1JYVUUgfCBSWENSMV9SWE1FIHwgUlhDUjFfUlhJUEZDQzsKIAogCWlmIChrcy0+cHJvbWlzY3VvdXMpICAgICAgICAgLyogYlByb21pc2N1b3VzICovCiAJCXcgfD0gKFJYQ1IxX1JYQUUgfCBSWENSMV9SWElOVkYpOwpAQCAtMTQ4NiwyOCArMTUwMyw2IEBACiAJa3MtPnJjX2llciA9IChJUlFfTENJIHwgSVJRX1RYSSB8IElSUV9SWEkpOwogfSAgLyoga3Nfc2V0dXBfaW50ICovCiAKLXZvaWQga3NfZW5hYmxlKHN0cnVjdCBrc19uZXQgKmtzKQotewotCXUxNiB3OwotCi0JdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1RYQ1IpOwotCS8qIEVuYWJsZXMgUU1VIFRyYW5zbWl0IChUWENSKS4gKi8KLQlrc193cnJlZzE2KGtzLCBLU19UWENSLCB3IHwgVFhDUl9UWEUpOwotCi0JLyoKLQkgKiBSWCBGcmFtZSBDb3VudCBUaHJlc2hvbGQgRW5hYmxlIGFuZCBBdXRvLURlcXVldWUgUlhRIEZyYW1lCi0JICogRW5hYmxlCi0JICovCi0KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhRQ1IpOwotCWtzX3dycmVnMTYoa3MsIEtTX1JYUUNSLCB3IHwgUlhRQ1JfUlhGQ1RFKTsKLQotCS8qIEVuYWJsZXMgUU1VIFJlY2VpdmUgKFJYQ1IxKS4gKi8KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhDUjEpOwotCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCB3IHwgUlhDUjFfUlhFKTsKLQlrcy0+ZW5hYmxlZCA9IHRydWU7Ci19ICAvKiBrc19lbmFibGUgKi8KLQogc3RhdGljIGludCBrc19od19pbml0KHN0cnVjdCBrc19uZXQgKmtzKQogewogI2RlZmluZQlNSEVBREVSX1NJWkUJKHNpemVvZihzdHJ1Y3QgdHlwZV9mcmFtZV9oZWFkKSAqIE1BWF9SRUNWX0ZSQU1FUykKQEAgLTE2MTIsMTEgKzE2MDcsOSBAQAogCiAJa3Nfc29mdF9yZXNldChrcywgR1JSX0dTUik7CiAJa3NfaHdfaW5pdChrcyk7Ci0Ja3NfZGlzYWJsZShrcyk7CisJa3NfZGlzYWJsZV9xbXUoa3MpOwogCWtzX3NldHVwKGtzKTsKIAlrc19zZXR1cF9pbnQoa3MpOwotCWtzX2VuYWJsZV9pbnQoa3MpOwotCWtzX2VuYWJsZShrcyk7CiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGtzLT5tYWNfYWRkciwgNik7CiAKIAlkYXRhID0ga3NfcmRyZWcxNihrcywgS1NfT0JDUik7CkBAIC0xNjU4LDYgKzE2NTEsNyBAQAogCXN0cnVjdCBrc19uZXQgKmtzID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAorCWtmcmVlKGtzLT5mcmFtZV9oZWFkX2luZm8pOwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaW91bm1hcChrcy0+aHdfYWRkcik7CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZncuYyBiL2RyaXZlcnMvbmV0L21seDQvZncuYwppbmRleCBjZWUxOTljLi4zYzE2NjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5jCkBAIC0zMyw2ICszMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIAogI2luY2x1ZGUgImZ3LmgiCiAjaW5jbHVkZSAiaWNtLmgiCkBAIC02OTgsNiArNjk5LDcgQEAKICNkZWZpbmUgSU5JVF9IQ0FfSU5fU0laRQkJIDB4MjAwCiAjZGVmaW5lIElOSVRfSENBX1ZFUlNJT05fT0ZGU0VUCQkgMHgwMDAKICNkZWZpbmUJIElOSVRfSENBX1ZFUlNJT04JCSAyCisjZGVmaW5lIElOSVRfSENBX0NBQ0hFTElORV9TWl9PRkZTRVQJIDB4MGUKICNkZWZpbmUgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUCQkgMHgwMTQKICNkZWZpbmUgSU5JVF9IQ0FfUVBDX09GRlNFVAkJIDB4MDIwCiAjZGVmaW5lCSBJTklUX0hDQV9RUENfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9RUENfT0ZGU0VUICsgMHgxMCkKQEAgLTczNSw2ICs3MzcsOSBAQAogCiAJKigodTggKikgbWFpbGJveC0+YnVmICsgSU5JVF9IQ0FfVkVSU0lPTl9PRkZTRVQpID0gSU5JVF9IQ0FfVkVSU0lPTjsKIAorCSooKHU4ICopIG1haWxib3gtPmJ1ZiArIElOSVRfSENBX0NBQ0hFTElORV9TWl9PRkZTRVQpID0KKwkJKGlsb2cyKGNhY2hlX2xpbmVfc2l6ZSgpKSAtIDQpIDw8IDU7CisKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAkqKGluYm94ICsgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUIC8gNCkgJj0gfmNwdV90b19iZTMyKDEgPDwgMSk7CiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKaW5kZXggM2RkNDgxZS4uMjkxYTUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTEyODIsNiArMTI4Miw4IEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzcyKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCAxMEdpZ0UgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NWEpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UK0dlbjIgMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzY0KSB9LCAvKiBNVDI2NDY4IENvbm5lY3RYIEVOIDEwR2lnRSBQQ0llIGdlbjIqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc0NikgfSwgLyogTVQyNjQzOCBDb25uZWN0WCBFTiA0MEdpZ0UgUENJZSBnZW4yIDVHVC9zICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzZlKSB9LCAvKiBNVDI2NDc4IENvbm5lY3RYMiA0MEdpZ0UgUENJZSBnZW4yICovCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCA3Mzg0ZjU5Li5lMTIzN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTExNjMsNiArMTE2Myw4IEBACiAJdTMyIGludF92ZWNfYml0OwogCXUzMiBoZWFydGJpdDsKIAorCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlcl9zdGF0cyBzdGF0czsKIAogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0IHJlY3ZfY3R4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAppbmRleCAxYzQ2ZGE2Li4xN2JiMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaApAQCAtNTQ1LDYgKzU0NSw4IEBACiAjZGVmaW5lCU5FVFhFTl9OSVVfVEVTVF9NVVhfQ1RMCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDk0KQogI2RlZmluZQlORVRYRU5fTklVX1hHX1BBVVNFX0NUTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA5OCkKICNkZWZpbmUJTkVUWEVOX05JVV9YR19QQVVTRV9MRVZFTAkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMGRjKQorI2RlZmluZQlORVRYRU5fTklVX0ZSQU1FX0NPVU5UX1NFTEVDVAkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMGFjKQorI2RlZmluZQlORVRYRU5fTklVX0ZSQU1FX0NPVU5UCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMGIwKQogI2RlZmluZQlORVRYRU5fTklVX1hHX1NFTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDEyOCkKICNkZWZpbmUgTkVUWEVOX05JVV9HQl9QQVVTRV9DVEwJCShORVRYRU5fQ1JCX05JVSArIDB4MDAzMGMpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCmluZGV4IDMxODVhOTguLjUyYTM3OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwpAQCAtMzgzLDI0ICszODMsNTEgQEAKIAogaW50IG5ldHhlbl9wMl9uaWNfc2V0X3Byb21pc2Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgbW9kZSkKIHsKLQlfX3UzMiByZWc7CisJdTMyIG1hY19jZmc7CisJdTMyIGNudCA9IDA7CisJX191MzIgcmVnID0gMHgwMjAwOwogCXUzMiBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKKwl1MTYgYm9hcmRfdHlwZSA9IGFkYXB0ZXItPmFody5ib2FyZF90eXBlOwogCiAJaWYgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWcgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpKTsKLQlpZiAobW9kZSA9PSBORVRYRU5fTklVX1BST01JU0NfTU9ERSkKLQkJcmVnID0gKHJlZyB8IDB4MjAwMFVMKTsKLQllbHNlCi0JCXJlZyA9IChyZWcgJiB+MHgyMDAwVUwpOworCW1hY19jZmcgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzAgKyAoMHgxMDAwMCAqIHBvcnQpKTsKKwltYWNfY2ZnICY9IH4weDQ7CisJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18wICsgKDB4MTAwMDAgKiBwb3J0KSwgbWFjX2NmZyk7CiAKLQlpZiAobW9kZSA9PSBORVRYRU5fTklVX0FMTE1VTFRJX01PREUpCi0JCXJlZyA9IChyZWcgfCAweDEwMDBVTCk7Ci0JZWxzZQotCQlyZWcgPSAocmVnICYgfjB4MTAwMFVMKTsKKwlpZiAoKGJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWikgfHwKKwkJCShib2FyZF90eXBlID09IE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVopKQorCQlyZWcgPSAoMHgyMCA8PCBwb3J0KTsKIAotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCksIHJlZyk7CisJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfRlJBTUVfQ09VTlRfU0VMRUNULCByZWcpOworCisJbWRlbGF5KDEwKTsKKworCXdoaWxlIChOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9GUkFNRV9DT1VOVCkgJiYgKytjbnQgPCAyMCkKKwkJbWRlbGF5KDEwKTsKKworCWlmIChjbnQgPCAyMCkgeworCisJCXJlZyA9IE5YUkQzMihhZGFwdGVyLAorCQkJTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpKTsKKworCQlpZiAobW9kZSA9PSBORVRYRU5fTklVX1BST01JU0NfTU9ERSkKKwkJCXJlZyA9IChyZWcgfCAweDIwMDBVTCk7CisJCWVsc2UKKwkJCXJlZyA9IChyZWcgJiB+MHgyMDAwVUwpOworCisJCWlmIChtb2RlID09IE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERSkKKwkJCXJlZyA9IChyZWcgfCAweDEwMDBVTCk7CisJCWVsc2UKKwkJCXJlZyA9IChyZWcgJiB+MHgxMDAwVUwpOworCisJCU5YV1IzMihhZGFwdGVyLAorCQkJTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpLCByZWcpOworCX0KKworCW1hY19jZmcgfD0gMHg0OworCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMCArICgweDEwMDAwICogcG9ydCksIG1hY19jZmcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MzYsNyArNDYzLDcgQEAKIHsKIAl1MzIJdmFsID0gMDsKIAl1MTYgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0JdTggKmFkZHIgPSBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyOworCXU4ICphZGRyID0gYWRhcHRlci0+bWFjX2FkZHI7CiAKIAlpZiAoYWRhcHRlci0+bWNfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CkBAIC00NjUsNyArNDkyLDcgQEAKIHsKIAl1MzIJdmFsID0gMDsKIAl1MTYgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0JdTggKmFkZHIgPSBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyOworCXU4ICphZGRyID0gYWRhcHRlci0+bWFjX2FkZHI7CiAKIAlpZiAoIWFkYXB0ZXItPm1jX2VuYWJsZWQpCiAJCXJldHVybiAwOwpAQCAtNjYwLDcgKzY4Nyw3IEBACiAKIAlsaXN0X3NwbGljZV90YWlsX2luaXQoJmFkYXB0ZXItPm1hY19saXN0LCAmZGVsX2xpc3QpOwogCi0JbnhfcDNfbmljX2FkZF9tYWMoYWRhcHRlciwgbmV0ZGV2LT5kZXZfYWRkciwgJmRlbF9saXN0KTsKKwlueF9wM19uaWNfYWRkX21hYyhhZGFwdGVyLCBhZGFwdGVyLT5tYWNfYWRkciwgJmRlbF9saXN0KTsKIAlueF9wM19uaWNfYWRkX21hYyhhZGFwdGVyLCBiY2FzdF9hZGRyLCAmZGVsX2xpc3QpOwogCiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IGU0MGI5MTQuLjhhMDkwNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTU0NCw2ICs1NDQsOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG9mZiA9PSAoUk9NVVNCX0dMQiArIDB4MWMpKSAvKiBNUyBjbG9jayAqLwogCQkJCWNvbnRpbnVlOworCQkJaWYgKChvZmYgJiAweDBmZjAwMDAwKSA9PSBORVRYRU5fQ1JCX0REUl9ORVQpCisJCQkJY29udGludWU7CiAJCQlpZiAob2ZmID09IChORVRYRU5fQ1JCX1BFR19ORVRfMSArIDB4MTgpKQogCQkJCWJ1ZltpXS5kYXRhID0gMHgxMDIwOwogCQkJLyogc2tpcCB0aGUgZnVuY3Rpb24gZW5hYmxlIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggMGI0YTU2YS4uM2JmNzhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtNDM3LDYgKzQzNyw3IEBACiAJCW5ldGRldi0+ZGV2X2FkZHJbaV0gPSAqKHAgKyA1IC0gaSk7CiAKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShhZGFwdGVyLT5tYWNfYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAkvKiBzZXQgc3RhdGlvbiBhZGRyZXNzICovCiAKQEAgLTQ1OSw2ICs0NjAsNyBAQAogCQluZXR4ZW5fbmFwaV9kaXNhYmxlKGFkYXB0ZXIpOwogCX0KIAorCW1lbWNweShhZGFwdGVyLT5tYWNfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIGFkZHItPnNhX2RhdGEpOwogCkBAIC05NTYsNyArOTU4LDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCi0JCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIG5ldGRldi0+ZGV2X2FkZHIpOworCQlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBhZGFwdGVyLT5tYWNfYWRkcik7CiAKIAlhZGFwdGVyLT5zZXRfbXVsdGkobmV0ZGV2KTsKIAlhZGFwdGVyLT5zZXRfbXR1KGFkYXB0ZXIsIG5ldGRldi0+bXR1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBjNTk0ZTE5Li41N2ZkNDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC0xMTEsNiArMTExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY25ldDMyLmMgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKaW5kZXggNmQyOGIxOC4uYzFiM2YwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2IxMDAwLmMgYi9kcml2ZXJzL25ldC9zYjEwMDAuYwppbmRleCBlZTM2NmM1Li5jOWM3MGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEwMDAuYworKysgYi9kcml2ZXJzL25ldC9zYjEwMDAuYwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYyBiL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKaW5kZXggY2VlMDBhZC4uNDllYjkxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAllZnhfb3dvcmRfdCByZWc7CiAKIAkvKiBHUElPIDMgYW5kIHRoZSBHUElPIHJlZ2lzdGVyIGFyZSBzaGFyZWQgd2l0aCBJMkMsIHNvIGJsb2NrIHRoYXQgKi8KLQltdXRleF9sb2NrKCZlZngtPmkyY19hZGFwLmJ1c19sb2NrKTsKKwlpMmNfbG9ja19hZGFwdGVyKCZlZngtPmkyY19hZGFwKTsKIAogCS8qIFB1bGwgUlNUX04gKEdQSU8gMikgbG93IHRoZW4gbGV0IGl0IHVwIGFnYWluLCBzZXR0aW5nIHRoZQogCSAqIEZMQVNIX0NGR18xIHN0cmFwIChHUElPIDMpIGFwcHJvcHJpYXRlbHkuICBPbmx5IGNoYW5nZSB0aGUKQEAgLTIwNCw3ICsyMDQsNyBAQAogCWZhbGNvbl93cml0ZShlZngsICZyZWcsIEdQSU9fQ1RMX1JFR19LRVIpOwogCW1zbGVlcCgxKTsKIAotCW11dGV4X3VubG9jaygmZWZ4LT5pMmNfYWRhcC5idXNfbG9jayk7CisJaTJjX3VubG9ja19hZGFwdGVyKCZlZngtPmkyY19hZGFwKTsKIAogCXNzbGVlcCgxKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggOTc5NDlkMC4uYzA3MmY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggMzhhNTA4Yi4uYjI3MTU2ZWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKQEAgLTczLDYgKzczLDcgQEAKIAogLyogSW5jbHVkZSBmaWxlcyAqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggMDFmNjgxMS4uOGY1NDE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCBlMTdjNTM1Li5mZTNjZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYwppbmRleCBjMmYxNGRjLi45NTQyOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtNDE2LDEzICs0MTYsOCBAQAogCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcnhzaXplID0gcHJpdi0+ZG1hX3J4X3NpemU7CiAJdW5zaWduZWQgaW50IGJmc2l6ZSA9IHByaXYtPmRtYV9idWZfc3o7Ci0JaW50IGJ1ZmYyX25lZWRlZCA9IDA7Ci0JaW50IGRpc19pYyA9IDA7CisJaW50IGJ1ZmYyX25lZWRlZCA9IDAsIGRpc19pYyA9IDA7CiAKLSNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCi0JLyogVXNpbmcgVGltZXJzIGRpc2FibGUgaW50ZXJydXB0cyBvbiBjb21wbGV0aW9uIGZvciB0aGUgcmVjZXB0aW9uICovCi0JZGlzX2ljID0gMTsKLSNlbmRpZgogCS8qIFNldCB0aGUgQnVmZmVyIHNpemUgYWNjb3JkaW5nIHRvIHRoZSBNVFU7CiAJICogaW5kZWVkLCBpbiBjYXNlIG9mIGp1bWJvIHdlIG5lZWQgdG8gYnVtcC11cCB0aGUgYnVmZmVyIHNpemVzLgogCSAqLwpAQCAtNDM3LDYgKzQzMiwxMSBAQAogCWVsc2UKIAkJYmZzaXplID0gRE1BX0JVRkZFUl9TSVpFOwogCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCS8qIERpc2FibGUgaW50ZXJydXB0cyBvbiBjb21wbGV0aW9uIGZvciB0aGUgcmVjZXB0aW9uIGlmIHRpbWVyIGlzIG9uICovCisJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKKwkJZGlzX2ljID0gMTsKKyNlbmRpZgogCS8qIElmIHRoZSBNVFUgZXhjZWVkcyA4ayBzbyB1c2UgdGhlIHNlY29uZCBidWZmZXIgaW4gdGhlIGNoYWluICovCiAJaWYgKGJmc2l6ZSA+PSBCVUZfU0laRV84S2lCKQogCQlidWZmMl9uZWVkZWQgPSAxOwpAQCAtODA5LDIwICs4MDksMjIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19lbmFibGVfaXJxKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLSNpZm5kZWYgQ09ORklHX1NUTU1BQ19USU1FUgotCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKLSNlbHNlCi0JcHJpdi0+dG0tPnRpbWVyX3N0YXJ0KHRtcmF0ZSk7CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOworCWVsc2UKICNlbmRpZgorCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19kaXNhYmxlX2lycShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0jaWZuZGVmIENPTkZJR19TVE1NQUNfVElNRVIKLQl3cml0ZWwoMCwgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOwotI2Vsc2UKLQlwcml2LT50bS0+dGltZXJfc3RvcCgpOworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQlwcml2LT50bS0+dGltZXJfc3RvcCgpOworCWVsc2UKICNlbmRpZgorCXdyaXRlbCgwLCBwcml2LT5kZXYtPmJhc2VfYWRkciArIERNQV9JTlRSX0VOQSk7CiB9CiAKIHN0YXRpYyBpbnQgc3RtbWFjX2hhc193b3JrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKQEAgLTEwMzEsMjIgKzEwMzMsMjMgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCi0JcHJpdi0+dG0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3RpbWVyICopLCBHRlBfS0VSTkVMKTsKKwlwcml2LT50bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdG1tYWNfdGltZXIgKiksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseShwcml2LT50bSA9PSBOVUxMKSkgewogCQlwcl9lcnIoIiVzOiBFUlJPUjogdGltZXIgbWVtb3J5IGFsbG9jIGZhaWxlZCBcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXByaXYtPnRtLT5mcmVxID0gdG1yYXRlOwogCi0JLyogVGVzdCBpZiB0aGUgSFcgdGltZXIgY2FuIGJlIGFjdHVhbGx5IHVzZWQuCi0JICogSW4gY2FzZSBvZiBmYWlsdXJlIGNvbnRpbnVlIHdpdGggbm8gdGltZXIuICovCisJLyogVGVzdCBpZiB0aGUgZXh0ZXJuYWwgdGltZXIgY2FuIGJlIGFjdHVhbGx5IHVzZWQuCisJICogSW4gY2FzZSBvZiBmYWlsdXJlIGNvbnRpbnVlIHdpdGhvdXQgdGltZXIuICovCiAJaWYgKHVubGlrZWx5KChzdG1tYWNfb3Blbl9leHRfdGltZXIoZGV2LCBwcml2LT50bSkpIDwgMCkpIHsKLQkJcHJfd2FybmluZygic3RtbWFjZXRoOiBjYW5ub3QgYXR0YWNoIHRoZSBIVyB0aW1lclxuIik7CisJCXByX3dhcm5pbmcoInN0bW1hY2V0aDogY2Fubm90IGF0dGFjaCB0aGUgZXh0ZXJuYWwgdGltZXIuXG4iKTsKIAkJdG1yYXRlID0gMDsKIAkJcHJpdi0+dG0tPmZyZXEgPSAwOwogCQlwcml2LT50bS0+dGltZXJfc3RhcnQgPSBzdG1tYWNfbm9fdGltZXJfc3RhcnRlZDsKIAkJcHJpdi0+dG0tPnRpbWVyX3N0b3AgPSBzdG1tYWNfbm9fdGltZXJfc3RvcHBlZDsKLQl9CisJfSBlbHNlCisJCXByaXYtPnRtLT5lbmFibGUgPSAxOwogI2VuZGlmCiAKIAkvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFRYL1JYIGRlc2NyaXB0b3JzIGNoYWlucy4gKi8KQEAgLTEzMjIsOSArMTMyNSwxMSBAQAogCiAJLyogSW50ZXJydXB0IG9uIGNvbXBsZXRpdGlvbiBvbmx5IGZvciB0aGUgbGF0ZXN0IHNlZ21lbnQgKi8KIAlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbG9zZV90eF9kZXNjKGRlc2MpOworCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgotCS8qIENsZWFuIElDIHdoaWxlIHVzaW5nIHRpbWVycyAqLwotCXByaXYtPm1hY190eXBlLT5vcHMtPmNsZWFyX3R4X2ljKGRlc2MpOworCS8qIENsZWFuIElDIHdoaWxlIHVzaW5nIHRpbWVyICovCisJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y2xlYXJfdHhfaWMoZGVzYyk7CiAjZW5kaWYKIAkvKiBUbyBhdm9pZCByYWlzZSBjb25kaXRpb24gKi8KIAlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfdHhfb3duZXIoZmlyc3QpOwpAQCAtMjAyOCw3ICsyMDMzLDggQEAKIAogI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKIAkJcHJpdi0+dG0tPnRpbWVyX3N0b3AoKTsKLQkJZGlzX2ljID0gMTsKKwkJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKKwkJCWRpc19pYyA9IDE7CiAjZW5kaWYKIAkJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jCmluZGV4IGI4MzhjNjUuLjY3OWY2MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAogCXN0bW1hY19ydGMgPSBydGNfY2xhc3Nfb3BlbihDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKTsKIAlpZiAoc3RtbWFjX3J0YyA9PSBOVUxMKSB7Ci0JCXByX2Vycm9yKCJvcGVuIHJ0YyBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJvcGVuIHJ0YyBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03MSw3ICs3MSw3IEBACiAKIAkvKiBQZXJpb2RpYyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgKi8KIAlpZiAoKHJ0Y19pcnFfc2V0X2ZyZXEoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrLCB0bS0+ZnJlcSkgPCAwKSkgewotCQlwcl9lcnJvcigic2V0IHBlcmlvZGljIGZhaWxlZFxuIik7CisJCXByX2Vycigic2V0IHBlcmlvZGljIGZhaWxlZFxuIik7CiAJCXJ0Y19pcnFfdW5yZWdpc3RlcihzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2spOwogCQlydGNfY2xhc3NfY2xvc2Uoc3RtbWFjX3J0Yyk7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaAppbmRleCBmNzk1Y2FlLi42ODYzNTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmgKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oCkBAIC0yNiw2ICsyNiw3IEBACiAJdm9pZCAoKnRpbWVyX3N0YXJ0KSAodW5zaWduZWQgaW50IG5ld19mcmVxKTsKIAl2b2lkICgqdGltZXJfc3RvcCkgKHZvaWQpOwogCXVuc2lnbmVkIGludCBmcmVxOworCXVuc2lnbmVkIGludCBlbmFibGU7CiB9OwogCiAvKiBPcGVuIHRoZSBIVyB0aW1lciBkZXZpY2UgYW5kIHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCAxOTI3YjNkLi42MTY0MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKaW5kZXggNmEzYzc1MS4uNzVmYTMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKQEAgLTEwOCw2ICsxMDgsNyBAQAogI2RlZmluZSBJQk1UUl9ERUJVR19NRVNTQUdFUyAwCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaWZkZWYgUENNQ0lBCQkvKiByZXF1aXJlZCBmb3IgaWJtdHJfY3MuYyB0byBidWlsZCAqLwogI3VuZGVmIE1PRFVMRQkJLyogeWVzLCByZWFsbHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCBkNmQzNDUyLi41OTIxZjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCmluZGV4IGZhNGU1ODEuLjQzYmMzZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYworKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogfQogCiAjZGVmaW5lIERVTVAoYnVmXywgbGVuXykJXAotCWRiZ19kdW1wKF9fTElORV9fLCBfX2Z1bmNfXywgYnVmXywgbGVuXykKKwlkYmdfZHVtcChfX0xJTkVfXywgX19mdW5jX18sICh1bnNpZ25lZCBjaGFyICopYnVmXywgbGVuXykKIAogI2RlZmluZSBEVU1QMShidWZfLCBsZW5fKQkJCVwKIAlkbyB7CQkJCQlcCkBAIC0xMzYzLDcgKzEzNjMsNyBAQAogCS8qIHJlc2V0IHRoZSBydHMgYW5kIGR0ciAqLwogCS8qIGRvIHRoZSBhY3R1YWwgY2xvc2UgKi8KIAlzZXJpYWwtPm9wZW5fY291bnQtLTsKLQlrcmVmX3B1dCgmc2VyaWFsLT5wYXJlbnQtPnJlZiwgaHNvX3NlcmlhbF9yZWZfZnJlZSk7CisKIAlpZiAoc2VyaWFsLT5vcGVuX2NvdW50IDw9IDApIHsKIAkJc2VyaWFsLT5vcGVuX2NvdW50ID0gMDsKIAkJc3Bpbl9sb2NrX2lycSgmc2VyaWFsLT5zZXJpYWxfbG9jayk7CkBAIC0xMzgzLDYgKzEzODMsOCBAQAogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5wYXJlbnQtPmludGVyZmFjZSk7CiAKIAltdXRleF91bmxvY2soJnNlcmlhbC0+cGFyZW50LT5tdXRleCk7CisKKwlrcmVmX3B1dCgmc2VyaWFsLT5wYXJlbnQtPnJlZiwgaHNvX3NlcmlhbF9yZWZfZnJlZSk7CiB9CiAKIC8qIGNsb3NlIHRoZSByZXF1ZXN0ZWQgc2VyaWFsIHBvcnQgKi8KQEAgLTE1MjcsNyArMTUyOSw3IEBACiAJCWRldl93YXJuKCZ1c2ItPmRldiwKIAkJCSAiaHNvIHJlY2VpdmVkIGludmFsaWQgc2VyaWFsIHN0YXRlIG5vdGlmaWNhdGlvblxuIik7CiAJCURVTVAoc2VyaWFsX3N0YXRlX25vdGlmaWNhdGlvbiwKLQkJICAgICBzaXplb2YoaHNvX3NlcmlhbF9zdGF0ZV9ub3RpZmF0aW9uKSkKKwkJICAgICBzaXplb2Yoc3RydWN0IGhzb19zZXJpYWxfc3RhdGVfbm90aWZpY2F0aW9uKSk7CiAJfSBlbHNlIHsKIAogCQlVQVJUX3N0YXRlX2JpdG1hcCA9IGxlMTZfdG9fY3B1KHNlcmlhbF9zdGF0ZV9ub3RpZmljYXRpb24tPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKaW5kZXggMGNhYTgwMC4uZjU2ZGVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC0zNjIsMTIgKzM2MiwxMiBAQAogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gaGFsdF9mYWlsX2FuZF9yZWxlYXNlOwogCQl9Ci0JCWRldi0+aGFyZF9tdHUgPSB0bXA7Ci0JCW5ldC0+bXR1ID0gZGV2LT5oYXJkX210dSAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwogCQlkZXZfd2FybigmaW50Zi0+ZGV2LAogCQkJICJkZXYgY2FuJ3QgdGFrZSAldSBieXRlIHBhY2tldHMgKG1heCAldSksICIKIAkJCSAiYWRqdXN0aW5nIE1UVSB0byAldVxuIiwKLQkJCSBkZXYtPmhhcmRfbXR1LCB0bXAsIG5ldC0+bXR1KTsKKwkJCSBkZXYtPmhhcmRfbXR1LCB0bXAsIHRtcCAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuKTsKKwkJZGV2LT5oYXJkX210dSA9IHRtcDsKKwkJbmV0LT5tdHUgPSBkZXYtPmhhcmRfbXR1IC0gbmV0LT5oYXJkX2hlYWRlcl9sZW47CiAJfQogCiAJLyogUkVWSVNJVDogIHBlcmlwaGVyYWwgImFsaWdubWVudCIgcmVxdWVzdCBpcyBpZ25vcmVkIC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IGFkZTViMzQuLjUyYWY1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTIxMCwzMiArMjEwLDI5IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZldGhfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGV2X3N0YXRzOwogCWludCBjcHU7Ci0Jc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzLCB0b3RhbCA9IHswfTsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWRldl9zdGF0cyA9ICZkZXYtPnN0YXRzOwogCi0JZGV2X3N0YXRzLT5yeF9wYWNrZXRzID0gMDsKLQlkZXZfc3RhdHMtPnR4X3BhY2tldHMgPSAwOwotCWRldl9zdGF0cy0+cnhfYnl0ZXMgPSAwOwotCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSAwOwotCWRldl9zdGF0cy0+dHhfZHJvcHBlZCA9IDA7Ci0JZGV2X3N0YXRzLT5yeF9kcm9wcGVkID0gMDsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdGF0cyA9IHBlcl9jcHVfcHRyKHByaXYtPnN0YXRzLCBjcHUpOwogCi0JCWRldl9zdGF0cy0+cnhfcGFja2V0cyArPSBzdGF0cy0+cnhfcGFja2V0czsKLQkJZGV2X3N0YXRzLT50eF9wYWNrZXRzICs9IHN0YXRzLT50eF9wYWNrZXRzOwotCQlkZXZfc3RhdHMtPnJ4X2J5dGVzICs9IHN0YXRzLT5yeF9ieXRlczsKLQkJZGV2X3N0YXRzLT50eF9ieXRlcyArPSBzdGF0cy0+dHhfYnl0ZXM7Ci0JCWRldl9zdGF0cy0+dHhfZHJvcHBlZCArPSBzdGF0cy0+dHhfZHJvcHBlZDsKLQkJZGV2X3N0YXRzLT5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOworCQl0b3RhbC5yeF9wYWNrZXRzICs9IHN0YXRzLT5yeF9wYWNrZXRzOworCQl0b3RhbC50eF9wYWNrZXRzICs9IHN0YXRzLT50eF9wYWNrZXRzOworCQl0b3RhbC5yeF9ieXRlcyAgICs9IHN0YXRzLT5yeF9ieXRlczsKKwkJdG90YWwudHhfYnl0ZXMgICArPSBzdGF0cy0+dHhfYnl0ZXM7CisJCXRvdGFsLnR4X2Ryb3BwZWQgKz0gc3RhdHMtPnR4X2Ryb3BwZWQ7CisJCXRvdGFsLnJ4X2Ryb3BwZWQgKz0gc3RhdHMtPnJ4X2Ryb3BwZWQ7CiAJfQorCWRldi0+c3RhdHMucnhfcGFja2V0cyA9IHRvdGFsLnJ4X3BhY2tldHM7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzID0gdG90YWwudHhfcGFja2V0czsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICAgPSB0b3RhbC5yeF9ieXRlczsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICAgPSB0b3RhbC50eF9ieXRlczsKKwlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQgPSB0b3RhbC50eF9kcm9wcGVkOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCA9IHRvdGFsLnJ4X2Ryb3BwZWQ7CiAKLQlyZXR1cm4gZGV2X3N0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogc3RhdGljIGludCB2ZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCBiYjhiNTJkLi5iOWUwMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vYzEwMS5jIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwppbmRleCA5NjkzYjBmLi4wYmQ4OThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vYzEwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IDY2MzYwYTIuLmUyYzMzYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtNzYsNiArNzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCmluZGV4IDI1NzNjMTguLmNkOGNiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCkBAIC04NCw2ICs4NCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyoga21hbGxvYygpLCBrZnJlZSgpICovCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KICNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCA4MWM4YWVjLi4wN2QwMGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtODEsNiArODEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwppbmRleCAzZTkwZWI4Li5iZWRhMzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKaW5kZXggODNkYTU5Ni4uNThjNjY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL24yLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCmluZGV4IGE1MmYyOWMuLmYxMzQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCmluZGV4IGRiYmYwZDEuLjliOTA0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJ4bWl0LmgiCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIAogc3RhdGljIHUxNiBnZW5lcmF0ZV9jb29raWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IDFkOTIyM2IuLjRiNjAxNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jCmluZGV4IDExMzE5ZWMuLmFhZjIyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAiYjQzbGVnYWN5LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCmluZGV4IDZmYTE0YTQuLjRkZmI0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCkBAIC0xLDYgKzEsNyBAQAogLyogSG9zdCBBUCBkcml2ZXIgSW5mbyBGcmFtZSBwcm9jZXNzaW5nIChwYXJ0IG9mIGhvc3RhcC5vIG1vZHVsZSkgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKICNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJob3N0YXBfYXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCAzZjJiZGE4Li45NDE5Y2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0xLDYgKzEsNyBAQAogLyogaW9jdGwoKSAobW9zdGx5IExpbnV4IFdpcmVsZXNzIEV4dGVuc2lvbnMpIHJvdXRpbmVzIGZvciBIb3N0IEFQIGRyaXZlciAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggMGQzMGE5ZS4uYTZjYTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpcHcyMjAwLmgiCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDIzMWM4MzMuLmYwNTliNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IGEyMmEwNTAuLjZmNzAzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDUyNGU3ZTQuLjZlNmY1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCA4NzdhZjQ0Li45MjFkYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKaW5kZXggNDg0ZDVjMS4uMmRjOTI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwppbmRleCA1MzJjOGQ2Li5hNjg1NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSAiaXdsLWRldi5oIiAvKiBGSVhNRTogcmVtb3ZlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCBjMTg5MDc1Li5mYjliY2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTI4LDYgKzI4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCiAjaW5jbHVkZSAiaXdsLWRldi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggODM3YTE5My4uZDAwYTgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKaW5kZXggYTU2YTJiMC4uZjNjNTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYwppbmRleCAyM2I1MmZhLi44NDE1OGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaXdtLmgiCiAjaW5jbHVkZSAiYnVzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYwppbmRleCBkNjY4ZTQ3Li4yMjJlYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9tYWluLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwppbmRleCA0MGRiY2JjLi43NzFhMzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwpAQCAtMzgsNiArMzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IDY4NTA5ODEuLjBhMzI0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImhvc3QuaCIKICNpbmNsdWRlICJob3N0Y21kLmgiCiAjaW5jbHVkZSAiZGVjbC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggNGMwMThmNy4uOGMzNzY2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwpAQCAtMyw2ICszLDcgQEAKICAgKi8KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJob3N0Y21kLmgiCiAjaW5jbHVkZSAicmFkaW90YXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCmluZGV4IDRjOTdjNmEuLmJjMDg0NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwpAQCAtMTksNiArMTksNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCBlMjZkN2IzLi4yNTA1YmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKaW5kZXggZjdjNjc3ZS4uNjlkMmY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA4OGNkNThlLi4xYzg4YzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMjg3OSw3ICsyODc5LDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19lc3NpZFszM107Ci0JaW50IGxlbiA9IGNvdW50OworCXVuc2lnbmVkIGludCBsZW4gPSBjb3VudDsKIAogCWlmIChsZW4gPiAzMikKIAkJbGVuID0gMzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCmluZGV4IDdiM2VlOGMuLjY4YmM5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX21kaW8uYyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCmluZGV4IGJhY2FhNTMuLjRiMjJiYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCisrKyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCkBAIC05Nyw2ICs5NywxMiBAQAogfQogRVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3JlZ2lzdGVyKTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIGZvciBvZl9waHlfZmluZF9kZXZpY2UgKi8KK3N0YXRpYyBpbnQgb2ZfcGh5X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGh5X25wKQoreworCXJldHVybiBkZXZfYXJjaGRhdGFfZ2V0X25vZGUoJmRldi0+YXJjaGRhdGEpID09IHBoeV9ucDsKK30KKwogLyoqCiAgKiBvZl9waHlfZmluZF9kZXZpY2UgLSBHaXZlIGEgUEhZIG5vZGUsIGZpbmQgdGhlIHBoeV9kZXZpY2UKICAqIEBwaHlfbnA6IFBvaW50ZXIgdG8gdGhlIHBoeSdzIGRldmljZSB0cmVlIG5vZGUKQEAgLTEwNiwxNSArMTEyLDEwIEBACiBzdHJ1Y3QgcGh5X2RldmljZSAqb2ZfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25wKQogewogCXN0cnVjdCBkZXZpY2UgKmQ7Ci0JaW50IG1hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGh5X25wKQotCXsKLQkJcmV0dXJuIGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSkgPT0gcGh5X25wOwotCX0KLQogCWlmICghcGh5X25wKQogCQlyZXR1cm4gTlVMTDsKIAotCWQgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIHBoeV9ucCwgbWF0Y2gpOworCWQgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIHBoeV9ucCwgb2ZfcGh5X21hdGNoKTsKIAlyZXR1cm4gZCA/IHRvX3BoeV9kZXZpY2UoZCkgOiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChvZl9waHlfZmluZF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKaW5kZXggMmI3YWUzNi4uNWRmNjBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCkBAIC0zNSwxMiArMzUsMjMgQEAKIC8qIGF0b21pY190IGJlY2F1c2Ugd2FpdF9ldmVudCBjaGVja3MgaXQgb3V0c2lkZSBvZiBidWZmZXJfbXV0ZXggKi8KIHN0YXRpYyBhdG9taWNfdCBidWZmZXJfcmVhZHkgPSBBVE9NSUNfSU5JVCgwKTsKIAotLyogQWRkIGFuIGVudHJ5IHRvIHRoZSBldmVudCBidWZmZXIuIFdoZW4gd2UKLSAqIGdldCBuZWFyIHRvIHRoZSBlbmQgd2Ugd2FrZSB1cCB0aGUgcHJvY2VzcwotICogc2xlZXBpbmcgb24gdGhlIHJlYWQoKSBvZiB0aGUgZmlsZS4KKy8qCisgKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV2ZW50IGJ1ZmZlci4gV2hlbiB3ZSBnZXQgbmVhciB0byB0aGUgZW5kIHdlCisgKiB3YWtlIHVwIHRoZSBwcm9jZXNzIHNsZWVwaW5nIG9uIHRoZSByZWFkKCkgb2YgdGhlIGZpbGUuIFRvIHByb3RlY3QKKyAqIHRoZSBldmVudF9idWZmZXIgdGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2hlbiBidWZmZXJfbXV0ZXgKKyAqIGlzIHNldC4KICAqLwogdm9pZCBhZGRfZXZlbnRfZW50cnkodW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSBhbGwgd29ya3F1ZXVlcyBvciBoYW5kbGVycyBhcmUKKwkgKiBjYW5jZWxlZCBvciBmbHVzaGVkIGJlZm9yZSB0aGUgZXZlbnQgYnVmZmVyIGlzIGZyZWVkLgorCSAqLworCWlmICghZXZlbnRfYnVmZmVyKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChidWZmZXJfcG9zID09IGJ1ZmZlcl9zaXplKSB7CiAJCWF0b21pY19pbmMoJm9wcm9maWxlX3N0YXRzLmV2ZW50X2xvc3Rfb3ZlcmZsb3cpOwogCQlyZXR1cm47CkBAIC02OSw3ICs4MCw2IEBACiAKIGludCBhbGxvY19ldmVudF9idWZmZXIodm9pZCkKIHsKLQlpbnQgZXJyID0gLUVOT01FTTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9wcm9maWxlZnNfbG9jaywgZmxhZ3MpOwpAQCAtODAsMjEgKzkwLDIyIEBACiAJaWYgKGJ1ZmZlcl93YXRlcnNoZWQgPj0gYnVmZmVyX3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJYnVmZmVyX3BvcyA9IDA7CiAJZXZlbnRfYnVmZmVyID0gdm1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBidWZmZXJfc2l6ZSk7CiAJaWYgKCFldmVudF9idWZmZXIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogCiB2b2lkIGZyZWVfZXZlbnRfYnVmZmVyKHZvaWQpCiB7CisJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAl2ZnJlZShldmVudF9idWZmZXIpOwotCisJYnVmZmVyX3BvcyA9IDA7CiAJZXZlbnRfYnVmZmVyID0gTlVMTDsKKwltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiB9CiAKIApAQCAtMTY3LDYgKzE3OCwxMiBAQAogCiAJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAorCS8qIE1heSBoYXBwZW4gaWYgdGhlIGJ1ZmZlciBpcyBmcmVlZCBkdXJpbmcgcGVuZGluZyByZWFkcy4gKi8KKwlpZiAoIWV2ZW50X2J1ZmZlcikgeworCQlyZXR2YWwgPSAtRUlOVFI7CisJCWdvdG8gb3V0OworCX0KKwogCWF0b21pY19zZXQoJmJ1ZmZlcl9yZWFkeSwgMCk7CiAKIAlyZXR2YWwgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IDE0YmJhYTEuLmU1ZjhmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTE3NSwxNSArMTc1LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWRyaGQgPSAoc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICopaGVhZGVyOwotCWlmICghZHJoZC0+YWRkcmVzcykgewotCQkvKiBQcm9tb3RlIGFuIGF0dGl0dWRlIG9mIHZpb2xlbmNlIHRvIGEgQklPUyBlbmdpbmVlciB0b2RheSAqLwotCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUFSIHJlcG9ydGVkIGF0IGFkZHJlc3MgemVybyFcbiIKLQkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAotCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKLQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAotCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJZG1hcnUgPSBremFsbG9jKHNpemVvZigqZG1hcnUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRtYXJ1KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTM1NCw2ICszNDUsNyBAQAogCXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgYWNwaV9kbWFyX3Jlc2VydmVkX21lbW9yeSAqcm1ycjsKIAlzdHJ1Y3QgYWNwaV9kbWFyX2F0c3IgKmF0c3I7CisJc3RydWN0IGFjcGlfZG1hcl9yaHNhICpyaHNhOwogCiAJc3dpdGNoIChoZWFkZXItPnR5cGUpIHsKIAljYXNlIEFDUElfRE1BUl9UWVBFX0hBUkRXQVJFX1VOSVQ6CkBAIC0zNzUsNiArMzY3LDEyIEBACiAJCWF0c3IgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3QgYWNwaV9kbWFyX2F0c3IsIGhlYWRlcik7CiAJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJBVFNSIGZsYWdzOiAlI3hcbiIsIGF0c3ItPmZsYWdzKTsKIAkJYnJlYWs7CisJY2FzZSBBQ1BJX0RNQVJfSEFSRFdBUkVfQUZGSU5JVFk6CisJCXJoc2EgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EsIGhlYWRlcik7CisJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJSSFNBIGJhc2U6ICUjMDE2THggcHJveGltaXR5IGRvbWFpbjogJSN4XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyaHNhLT5iYXNlX2FkZHJlc3MsCisJCSAgICAgICByaHNhLT5wcm94aW1pdHlfZG9tYWluKTsKKwkJYnJlYWs7CiAJfQogfQogCkBAIC00NTksOSArNDU3LDEzIEBACiAJCQlyZXQgPSBkbWFyX3BhcnNlX29uZV9hdHNyKGVudHJ5X2hlYWRlcik7CiAjZW5kaWYKIAkJCWJyZWFrOworCQljYXNlIEFDUElfRE1BUl9IQVJEV0FSRV9BRkZJTklUWToKKwkJCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggUkhTQSAoeWV0PykgKi8KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJCQkiVW5rbm93biBETUFSIHN0cnVjdHVyZSB0eXBlXG4iKTsKKwkJCQkiVW5rbm93biBETUFSIHN0cnVjdHVyZSB0eXBlICVkXG4iLAorCQkJCWVudHJ5X2hlYWRlci0+dHlwZSk7CiAJCQlyZXQgPSAwOyAvKiBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJCQlicmVhazsKIAkJfQpAQCAtNTgwLDEyICs1ODIsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IF9faW5pdCBjaGVja196ZXJvX2FkZHJlc3Modm9pZCkKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOworCXN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyICplbnRyeV9oZWFkZXI7CisJc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICpkcmhkOworCisJZG1hciA9IChzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICopZG1hcl90Ymw7CisJZW50cnlfaGVhZGVyID0gKHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyICopKGRtYXIgKyAxKTsKKworCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcpZW50cnlfaGVhZGVyKSA8CisJCQkoKCh1bnNpZ25lZCBsb25nKWRtYXIpICsgZG1hcl90YmwtPmxlbmd0aCkpIHsKKwkJLyogQXZvaWQgbG9vcGluZyBmb3JldmVyIG9uIGJhZCBBQ1BJIHRhYmxlcyAqLworCQlpZiAoZW50cnlfaGVhZGVyLT5sZW5ndGggPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCQkiSW52YWxpZCAwLWxlbmd0aCBzdHJ1Y3R1cmVcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoZW50cnlfaGVhZGVyLT50eXBlID09IEFDUElfRE1BUl9UWVBFX0hBUkRXQVJFX1VOSVQpIHsKKwkJCWRyaGQgPSAodm9pZCAqKWVudHJ5X2hlYWRlcjsKKwkJCWlmICghZHJoZC0+YWRkcmVzcykgeworCQkJCS8qIFByb21vdGUgYW4gYXR0aXR1ZGUgb2YgdmlvbGVuY2UgdG8gYSBCSU9TIGVuZ2luZWVyIHRvZGF5ICovCisJCQkJV0FSTigxLCAiWW91ciBCSU9TIGlzIGJyb2tlbjsgRE1BUiByZXBvcnRlZCBhdCBhZGRyZXNzIHplcm8hXG4iCisJCQkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAorCQkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSwKKwkJCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQllbnRyeV9oZWFkZXIgPSAoKHZvaWQgKillbnRyeV9oZWFkZXIgKyBlbnRyeV9oZWFkZXItPmxlbmd0aCk7CisJfQorCXJldHVybiAxOworfQorCiB2b2lkIF9faW5pdCBkZXRlY3RfaW50ZWxfaW9tbXUodm9pZCkKIHsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZG1hcl90YWJsZV9kZXRlY3QoKTsKLQorCWlmIChyZXQpCisJCXJldCA9IGNoZWNrX3plcm9fYWRkcmVzcygpOwogCXsKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCmluZGV4IGE5ZDkyNmIuLmU3YmU2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKQEAgLTQwNiw3ICs0MDYsNiBAQAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWluZm8tPmhhcmR3YXJlX2lkLnN0cmluZ1tzaXplb2YoaW5mby0+aGFyZHdhcmVfaWQubGVuZ3RoKSAtIDFdID0gJ1wwJzsKIAogCWlmIChpbmZvLT5jdXJyZW50X3N0YXR1cyAmJiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkgJiYKIAkJCSghc3RyY21wKGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZywgSUJNX0hBUkRXQVJFX0lEMSkgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCmluZGV4IDUzODM2MDAuLjljNmE5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIHJlYWQ/IGFuZCB3cml0ZT8gZnVuY3Rpb25zICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGRlbGF5cyAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogZm9yIHNpZ25hbF9wZW5kaW5nKCkgKi8KIAogI2RlZmluZSBNWV9OQU1FCSJjcHFwaHAiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IDg1NWRkN2MuLjE4NDBhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjZGVmaW5lIElTX0dGWF9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkKICNkZWZpbmUgSVNfSVNBX0RFVklDRShwZGV2KSAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfSVNBKQorI2RlZmluZSBJU19BWkFMSUEocGRldikgKChwZGV2KS0+dmVuZG9yID09IDB4ODA4NiAmJiAocGRldiktPmRldmljZSA9PSAweDNhM2UpCiAKICNkZWZpbmUgSU9BUElDX1JBTkdFX1NUQVJUCSgweGZlZTAwMDAwKQogI2RlZmluZSBJT0FQSUNfUkFOR0VfRU5ECSgweGZlZWZmZmZmKQpAQCAtOTQsNiArOTUsNyBAQAogLyogZ2xvYmFsIGlvbW11IGxpc3QsIHNldCBOVUxMIGZvciBpZ25vcmVkIERNQVIgdW5pdHMgKi8KIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfaW9tbXUgKipnX2lvbW11czsKIAorc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3R5bGVyc2J1cmdfaXNvY2godm9pZCk7CiBzdGF0aWMgaW50IHJ3YmZfcXVpcms7CiAKIC8qCkBAIC0xOTM0LDYgKzE5MzYsOSBAQAogfQogCiBzdGF0aWMgaW50IGlvbW11X2lkZW50aXR5X21hcHBpbmc7CisjZGVmaW5lIElERU5UTUFQX0FMTAkJMQorI2RlZmluZSBJREVOVE1BUF9HRlgJCTIKKyNkZWZpbmUgSURFTlRNQVBfQVpBTElBCQk0CiAKIHN0YXRpYyBpbnQgaW9tbXVfZG9tYWluX2lkZW50aXR5X21hcChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCwKQEAgLTIxNTEsOCArMjE1NiwxNCBAQAogCiBzdGF0aWMgaW50IGlvbW11X3Nob3VsZF9pZGVudGl0eV9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBzdGFydHVwKQogewotCWlmIChpb21tdV9pZGVudGl0eV9tYXBwaW5nID09IDIpCi0JCXJldHVybiBJU19HRlhfREVWSUNFKHBkZXYpOworCWlmICgoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyAmIElERU5UTUFQX0FaQUxJQSkgJiYgSVNfQVpBTElBKHBkZXYpKQorCQlyZXR1cm4gMTsKKworCWlmICgoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyAmIElERU5UTUFQX0dGWCkgJiYgSVNfR0ZYX0RFVklDRShwZGV2KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIShpb21tdV9pZGVudGl0eV9tYXBwaW5nICYgSURFTlRNQVBfQUxMKSkKKwkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gc3RhcnQgb2ZmIHdpdGggYWxsIGRldmljZXMgaW4gdGhlIDE6MSBkb21haW4sIGFuZApAQCAtMjMzMiwxMSArMjM0MywxNCBAQAogCX0KIAogCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCi0JCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAxOworCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nIHw9IElERU5UTUFQX0FMTDsKKwogI2lmZGVmIENPTkZJR19ETUFSX0JST0tFTl9HRlhfV0EKLQllbHNlCi0JCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAyOworCWlvbW11X2lkZW50aXR5X21hcHBpbmcgfD0gSURFTlRNQVBfR0ZYOwogI2VuZGlmCisKKwljaGVja190eWxlcnNidXJnX2lzb2NoKCk7CisKIAkvKgogCSAqIElmIHBhc3MgdGhyb3VnaCBpcyBub3Qgc2V0IG9yIG5vdCBlbmFibGVkLCBzZXR1cCBjb250ZXh0IGVudHJpZXMgZm9yCiAJICogaWRlbnRpdHkgbWFwcGluZ3MgZm9yIHJtcnIsIGdmeCwgYW5kIGlzYSBhbmQgbWF5IGZhbGwgYmFjayB0byBzdGF0aWMKQEAgLTI3NTMsNyArMjc2NywxNSBAQAogCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7Ci0JZmxhZ3MgJj0gfihHRlBfRE1BIHwgR0ZQX0RNQTMyKTsKKworCWlmICghaW9tbXVfbm9fbWFwcGluZyhod2RldikpCisJCWZsYWdzICY9IH4oR0ZQX0RNQSB8IEdGUF9ETUEzMik7CisJZWxzZSBpZiAoaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgZG1hX2dldF9yZXF1aXJlZF9tYXNrKGh3ZGV2KSkgeworCQlpZiAoaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgRE1BX0JJVF9NQVNLKDMyKSkKKwkJCWZsYWdzIHw9IEdGUF9ETUE7CisJCWVsc2UKKwkJCWZsYWdzIHw9IEdGUF9ETUEzMjsKKwl9CiAKIAl2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFncywgb3JkZXIpOwogCWlmICghdmFkZHIpCkBAIC0zMTkzLDYgKzMyMTUsMzMgQEAKIH0KICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIAorLyoKKyAqIEhlcmUgd2Ugb25seSByZXNwb25kIHRvIGFjdGlvbiBvZiB1bmJvdW5kIGRldmljZSBmcm9tIGRyaXZlci4KKyAqCisgKiBBZGRlZCBkZXZpY2UgaXMgbm90IGF0dGFjaGVkIHRvIGl0cyBETUFSIGRvbWFpbiBoZXJlIHlldC4gVGhhdCB3aWxsIGhhcHBlbgorICogd2hlbiBtYXBwaW5nIHRoZSBkZXZpY2UgdG8gaW92YS4KKyAqLworc3RhdGljIGludCBkZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CisKKwlkb21haW4gPSBmaW5kX2RvbWFpbihwZGV2KTsKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfVU5CT1VORF9EUklWRVIgJiYgIWlvbW11X3Bhc3NfdGhyb3VnaCkKKwkJZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8oZG9tYWluLCBwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRldmljZV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGRldmljZV9ub3RpZmllciwKK307CisKIGludCBfX2luaXQgaW50ZWxfaW9tbXVfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwpAQCAtMzI0NSw2ICszMjk0LDggQEAKIAogCXJlZ2lzdGVyX2lvbW11KCZpbnRlbF9pb21tdV9vcHMpOwogCisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwY2lfYnVzX3R5cGUsICZkZXZpY2VfbmIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2NzAsMyArMzcyMSw2MSBAQAogfQogCiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyYTQwLCBxdWlya19pb21tdV9yd2JmKTsKKworLyogT24gVHlsZXJzYnVyZyBjaGlwc2V0cywgc29tZSBCSU9TZXMgaGF2ZSBiZWVuIGtub3duIHRvIGVuYWJsZSB0aGUKKyAgIElTT0NIIERNQVIgdW5pdCBmb3IgdGhlIEF6YWxpYSBzb3VuZCBkZXZpY2UsIGJ1dCBub3QgZ2l2ZSBpdCBhbnkKKyAgIFRMQiBlbnRyaWVzLCB3aGljaCBjYXVzZXMgaXQgdG8gZGVhZGxvY2suIENoZWNrIGZvciB0aGF0LiAgV2UgZG8KKyAgIHRoaXMgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBpbml0X2RtYXJzKCksIGluc3RlYWQgb2YgaW4gYSBQQ0kKKyAgIHF1aXJrLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcHJpbnQgdGhlIG9ibm94aW91cyAiQklPUyBicm9rZW4iCisgICBtZXNzYWdlIGlmIFZULWQgaXMgYWN0dWFsbHkgZGlzYWJsZWQuCisqLworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3R5bGVyc2J1cmdfaXNvY2godm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1aW50MzJfdCB2dGlzb2NoY3RybDsKKworCS8qIElmIHRoZXJlJ3Mgbm8gQXphbGlhIGluIHRoZSBzeXN0ZW0gYW55d2F5LCBmb3JnZXQgaXQuICovCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2EzZSwgTlVMTCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm47CisJcGNpX2Rldl9wdXQocGRldik7CisKKwkvKiBTeXN0ZW0gTWFuYWdlbWVudCBSZWdpc3RlcnMuIE1pZ2h0IGJlIGhpZGRlbiwgaW4gd2hpY2ggY2FzZQorCSAgIHdlIGNhbid0IGRvIHRoZSBzYW5pdHkgY2hlY2suIEJ1dCB0aGF0J3MgT0ssIGJlY2F1c2UgdGhlCisJICAga25vd24tYnJva2VuIEJJT1NlcyBfZG9uJ3RfIGFjdHVhbGx5IGhpZGUgaXQsIHNvIGZhci4gKi8KKwlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzNDJlLCBOVUxMKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKworCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHgxODgsICZ2dGlzb2NoY3RybCkpIHsKKwkJcGNpX2Rldl9wdXQocGRldik7CisJCXJldHVybjsKKwl9CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKKworCS8qIElmIEF6YWxpYSBETUEgaXMgcm91dGVkIHRvIHRoZSBub24taXNvY2ggRE1BUiB1bml0LCBmaW5lLiAqLworCWlmICh2dGlzb2NoY3RybCAmIDEpCisJCXJldHVybjsKKworCS8qIERyb3AgYWxsIGJpdHMgb3RoZXIgdGhhbiB0aGUgbnVtYmVyIG9mIFRMQiBlbnRyaWVzICovCisJdnRpc29jaGN0cmwgJj0gMHgxYzsKKworCS8qIElmIHdlIGhhdmUgdGhlIHJlY29tbWVuZGVkIG51bWJlciBvZiBUTEIgZW50cmllcyAoMTYpLCBmaW5lLiAqLworCWlmICh2dGlzb2NoY3RybCA9PSAweDEwKQorCQlyZXR1cm47CisKKwkvKiBaZXJvIFRMQiBlbnRyaWVzPyBZb3UgZ2V0IHRvIHJpZGUgdGhlIHNob3J0IGJ1cyB0byBzY2hvb2wuICovCisJaWYgKCF2dGlzb2NoY3RybCkgeworCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUEgcm91dGVkIHRvIElTT0NIIERNQVIgdW5pdCBidXQgbm8gVExCIHNwYWNlLlxuIgorCQkgICAgICJCSU9TIHZlbmRvcjogJXM7IFZlcjogJXM7IFByb2R1Y3QgVmVyc2lvbjogJXNcbiIsCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVSU0lPTiksCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSk7CisJCWlvbW11X2lkZW50aXR5X21hcHBpbmcgfD0gSURFTlRNQVBfQVpBTElBOworCQlyZXR1cm47CisJfQorCQorCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQVI6IFJlY29tbWVuZGVkIFRMQiBlbnRyaWVzIGZvciBJU09DSCB1bml0IGlzIDE2OyB5b3VyIEJJT1Mgc2V0ICVkXG4iLAorCSAgICAgICB2dGlzb2NoY3RybCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDZlZGVjZmYuLjRlNGMyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC01MTMsNyArNTEzLDExIEBACiAJZWxzZSBpZiAoc3RhdGUgPT0gUENJX0QyIHx8IGRldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDIpCiAJCXVkZWxheShQQ0lfUE1fRDJfREVMQVkpOwogCi0JZGV2LT5jdXJyZW50X3N0YXRlID0gc3RhdGU7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmcG1jc3IpOworCWRldi0+Y3VycmVudF9zdGF0ZSA9IChwbWNzciAmIFBDSV9QTV9DVFJMX1NUQVRFX01BU0spOworCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgIT0gc3RhdGUgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlkZXZfaW5mbygmZGV2LT5kZXYsICJSZWZ1c2VkIHRvIGNoYW5nZSBwb3dlciBzdGF0ZSwgIgorCQkJImN1cnJlbnRseSBpbiBEJWRcbiIsIGRldi0+Y3VycmVudF9zdGF0ZSk7CiAKIAkvKiBBY2NvcmRpbmcgdG8gc2VjdGlvbiA1LjQuMSBvZiB0aGUgIlBDSSBCVVMgUE9XRVIgTUFOQUdFTUVOVAogCSAqIElOVEVSRkFDRSBTUEVDSUZJQ0FUSU9OLCBSRVYuIDEuMiIsIGEgZGV2aWNlIHRyYW5zaXRpb25pbmcKQEAgLTI1NDIsMTAgKzI1NDYsMTAgQEAKIAogLyoqCiAgKiBwY2lfc2V0X3ZnYV9zdGF0ZSAtIHNldCBWR0EgZGVjb2RlIHN0YXRlIG9uIGRldmljZSBhbmQgcGFyZW50cyBpZiByZXF1ZXN0ZWQKLSAqIEBkZXYgdGhlIFBDSSBkZXZpY2UKLSAqIEBkZWNvZGUgLSB0cnVlID0gZW5hYmxlIGRlY29kaW5nLCBmYWxzZSA9IGRpc2FibGUgZGVjb2RpbmcKLSAqIEBjb21tYW5kX2JpdHMgUENJX0NPTU1BTkRfSU8gYW5kL29yIFBDSV9DT01NQU5EX01FTU9SWQotICogQGNoYW5nZV9icmlkZ2UgLSB0cmF2ZXJzZSBhbmNlc3RvcnMgYW5kIGNoYW5nZSBicmlkZ2VzCisgKiBAZGV2OiB0aGUgUENJIGRldmljZQorICogQGRlY29kZTogdHJ1ZSA9IGVuYWJsZSBkZWNvZGluZywgZmFsc2UgPSBkaXNhYmxlIGRlY29kaW5nCisgKiBAY29tbWFuZF9iaXRzOiBQQ0lfQ09NTUFORF9JTyBhbmQvb3IgUENJX0NPTU1BTkRfTUVNT1JZCisgKiBAY2hhbmdlX2JyaWRnZTogdHJhdmVyc2UgYW5jZXN0b3JzIGFuZCBjaGFuZ2UgYnJpZGdlcwogICovCiBpbnQgcGNpX3NldF92Z2Ffc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBkZWNvZGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSkKQEAgLTI3MTksMTcgKzI3MjMsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfaW5pdCh2b2lkKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7Ci0JCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBkZXYpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoY2hhciAqc3RyKQogewogCXdoaWxlIChzdHIpIHsKQEAgLTI3NjcsOCArMjc2MCw2IEBACiB9CiBlYXJseV9wYXJhbSgicGNpIiwgcGNpX3NldHVwKTsKIAotZGV2aWNlX2luaXRjYWxsKHBjaV9pbml0KTsKLQogRVhQT1JUX1NZTUJPTChwY2lfcmVlbmFibGVfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9kZXZpY2VfaW8pOwogRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX2RldmljZV9tZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwppbmRleCAyY2U4ZjljLi40MGMzY2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CkBAIC01Miw3ICs1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyIGFlcmRyaXZlciA9IHsKIAkubmFtZQkJPSAiYWVyIiwKLQkucG9ydF90eXBlCT0gUENJRV9BTllfUE9SVCwKKwkucG9ydF90eXBlCT0gUENJRV9SQ19QT1JULAogCS5zZXJ2aWNlCT0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSLAogCiAJLnByb2JlCQk9IGFlcl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKaW5kZXggNzQ1NDAyZS4uNWI3MDU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKQEAgLTY1Niw4ICs2NTYsMTAgQEAKIAlmcmVlX2xpbmtfc3RhdGUobGluayk7CiAKIAkvKiBSZWNoZWNrIGxhdGVuY2llcyBhbmQgY29uZmlndXJlIHVwc3RyZWFtIGxpbmtzICovCi0JcGNpZV91cGRhdGVfYXNwbV9jYXBhYmxlKHJvb3QpOwotCXBjaWVfY29uZmlnX2FzcG1fcGF0aChwYXJlbnRfbGluayk7CisJaWYgKHBhcmVudF9saW5rKSB7CisJCXBjaWVfdXBkYXRlX2FzcG1fY2FwYWJsZShyb290KTsKKwkJcGNpZV9jb25maWdfYXNwbV9wYXRoKHBhcmVudF9saW5rKTsKKwl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhc3BtX2xvY2spOwogCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCA2ZGY1Yzk4Li5mNjM1ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC0zMCw3ICszMCw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIGdsb2JhbCBkYXRhICovCi1zdGF0aWMgY29uc3QgY2hhciBkZXZpY2VfbmFtZVtdID0gInBjaWVwb3J0LWRyaXZlciI7CiAKIHN0YXRpYyBpbnQgcGNpZV9wb3J0ZHJ2X3Jlc3RvcmVfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CkBAIC0yNjIsNyArMjYxLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2llX3BvcnRkcml2ZXIgPSB7Ci0JLm5hbWUJCT0gKGNoYXIgKilkZXZpY2VfbmFtZSwKKwkubmFtZQkJPSAicGNpZXBvcnQiLAogCS5pZF90YWJsZQk9ICZwb3J0X3BjaV9pZHNbMF0sCiAKIAkucHJvYmUJCT0gcGNpZV9wb3J0ZHJ2X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA2MDk5ZmFjLi4yNDVkMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtNjcwLDYgKzY3MCwyNSBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LAlxdWlya192dDgyMzVfYWNwaSk7CiAKKy8qCisgKiBUSSBYSU8yMDAwYSBQQ0llLVBDSSBCcmlkZ2UgZXJyb25lb3VzbHkgcmVwb3J0cyBpdCBzdXBwb3J0cyBmYXN0IGJhY2stdG8tYmFjazoKKyAqCURpc2FibGUgZmFzdCBiYWNrLXRvLWJhY2sgb24gdGhlIHNlY29uZGFyeSBidXMgc2VnbWVudAorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfeGlvMjAwMGEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1MTYgY29tbWFuZDsKKworCWRldl93YXJuKCZkZXYtPmRldiwgIlRJIFhJTzIwMDBhIHF1aXJrIGRldGVjdGVkOyAiCisJCSJzZWNvbmRhcnkgYnVzIGZhc3QgYmFjay10by1iYWNrIHRyYW5zZmVycyBkaXNhYmxlZFxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwZGV2LCAmZGV2LT5zdWJvcmRpbmF0ZS0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwkJaWYgKGNvbW1hbmQgJiBQQ0lfQ09NTUFORF9GQVNUX0JBQ0spCisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIGNvbW1hbmQgJiB+UENJX0NPTU1BTkRfRkFTVF9CQUNLKTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJX1hJTzIwMDBBLAorCQkJcXVpcmtfeGlvMjAwMGEpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDIAogCkBAIC05OTAsNyArMTAwOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19hbWRfaWRlX21vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JLyogc2V0IFNCWDAwIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCisJLyogc2V0IFNCWDAwL0h1ZHNvbi0yIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCiAJdTggdG1wOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX0RFVklDRSwgJnRtcCk7CkBAIC0xMDA5LDggKzEwMjgsOCBAQAogREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKLURFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiAKIC8qCiAgKglTZXJ2ZXJ3b3JrcyBDU0I1IElERSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IG5hdGl2ZSBtb2RlCkBAIC0yNTcyLDYgKzI1OTEsMTkgQEAKIAl9CiAJcGNpX2RvX2ZpeHVwcyhkZXYsIHN0YXJ0LCBlbmQpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBwY2lfYXBwbHlfZmluYWxfcXVpcmtzKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CisKKwl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKKwkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsX3N5bmMocGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyk7CiAjZWxzZQogdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCA3MDZmODJkLi5jNTQ1MjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtMjA1LDQzICsyMDUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZiAwCi1pbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZV9maXhlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pCi17Ci0Jc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlc25vOwotCXVuc2lnbmVkIGludCB0eXBlX21hc2s7Ci0JaW50IGksIHJldCA9IC1FQlVTWTsKLQotCXR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyID0gYnVzLT5yZXNvdXJjZVtpXTsKLQkJaWYgKCFyKQotCQkJY29udGludWU7Ci0KLQkJLyogdHlwZV9tYXNrIG11c3QgbWF0Y2ggKi8KLQkJaWYgKChyZXMtPmZsYWdzIF4gci0+ZmxhZ3MpICYgdHlwZV9tYXNrKQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZShyLCByZXMpOwotCi0JCWlmIChyZXQgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKLQkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7Ci0JfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7Ci0JCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXNubyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hc3NpZ25fcmVzb3VyY2VfZml4ZWQpOwotI2VuZGlmCi0KIC8qIFNvcnQgcmVzb3VyY2VzIGJ5IGFsaWdubWVudCAqLwogdm9pZCBwZGV2X3NvcnRfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZV9saXN0ICpoZWFkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKaW5kZXggZmJmOTY1Yi4uMTdmMzhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCkBAIC0xOTIsNiArMTkyLDEwIEBACiAJdHJpc3RhdGUgIkF1MXgwMCBwY21jaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgUENNQ0lBCiAKK2NvbmZpZyBQQ01DSUFfQkNNNjNYWAorCXRyaXN0YXRlICJiY202M3h4IHBjbWNpYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkNNNjNYWCAmJiBQQ01DSUEKKwogY29uZmlnIFBDTUNJQV9TQTExMDAKIAl0cmlzdGF0ZSAiU0ExMTAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9TQTExMDAgJiYgUENNQ0lBCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IDA0NzM5NGQuLmEwM2EzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCkBAIC0yNyw2ICsyNyw3IEBACiBvYmotJChDT05GSUdfTTMyUl9QQ0MpCQkJCSs9IG0zMnJfcGNjLm8KIG9iai0kKENPTkZJR19NMzJSX0NGQykJCQkJKz0gbTMycl9jZmMubwogb2JqLSQoQ09ORklHX1BDTUNJQV9BVTFYMDApCQkJKz0gYXUxeDAwX3NzLm8KK29iai0kKENPTkZJR19QQ01DSUFfQkNNNjNYWCkJCQkrPSBiY202M3h4X3BjbWNpYS5vCiBvYmotJChDT05GSUdfUENNQ0lBX1ZSQzQxNzEpCQkJKz0gdnJjNDE3MV9jYXJkLm8KIG9iai0kKENPTkZJR19QQ01DSUFfVlJDNDE3MykJCQkrPSB2cmM0MTczX2NhcmR1Lm8KIG9iai0kKENPTkZJR19PTUFQX0NGKQkJCQkrPSBvbWFwX2NmLm8KQEAgLTcxLDYgKzcyLDcgQEAKIHB4YTJ4eC1vYmotJChDT05GSUdfQVJDSF9WSVBFUikJCQkrPSBweGEyeHhfdmlwZXIubwogcHhhMnh4LW9iai0kKENPTkZJR19UUklaRVBTX1BDTUNJQSkJCSs9IHB4YTJ4eF90cml6ZXBzNC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkJKz0gcHhhMnh4X3BhbG10eC5vCitweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRDKQkJKz0gcHhhMnh4X3BhbG10Yy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTUxEKQkJKz0gcHhhMnh4X3BhbG1sZC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfRTc0MCkJCQkrPSBweGEyeHhfZTc0MC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfU1RBUkdBVEUyKQkJKz0gcHhhMnh4X3N0YXJnYXRlMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKaW5kZXggOWUxMTQwZi4uZTFkY2NlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJc3RydWN0IGF0OTFfY2Zfc29ja2V0CSpjZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBhdDkxX2NmX2RhdGEJKmJvYXJkID0gY2YtPmJvYXJkOwogCi0JcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBtZXNnKTsKKwlwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYpOwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgewogCQllbmFibGVfaXJxX3dha2UoYm9hcmQtPmRldF9waW4pOwogCQlpZiAoYm9hcmQtPmlycV9waW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwppbmRleCA5MDAxMzM0Li4wMjA4ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKQEAgLTUxNSw3ICs1MTUsNyBAQAogc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzg4YTNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYwpAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgorI2luY2x1ZGUgImJjbTYzeHhfcGNtY2lhLmgiCisKKyNkZWZpbmUgUEZYCSJiY202M3h4X3BjbWNpYTogIgorCisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKy8qIGlmIGNhcmRidXMgaXMgdXNlZCwgcGxhdGZvcm0gZGV2aWNlIG5lZWRzIHJlZmVyZW5jZSB0byBhY3R1YWwgcGNpCisgKiBkZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqYmNtNjN4eF9jYl9kZXY7CisjZW5kaWYKKworLyoKKyAqIHJlYWQvd3JpdGUgaGVscGVyIGZvciBwY21jaWEgcmVncworICovCitzdGF0aWMgaW5saW5lIHUzMiBwY21jaWFfcmVhZGwoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0LCB1MzIgb2ZmKQoreworCXJldHVybiBiY21fcmVhZGwoc2t0LT5iYXNlICsgb2ZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjbWNpYV93cml0ZWwoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSB1MzIgdmFsLCB1MzIgb2ZmKQoreworCWJjbV93cml0ZWwodmFsLCBza3QtPmJhc2UgKyBvZmYpOworfQorCisvKgorICogVGhpcyBjYWxsYmFjayBzaG91bGQgKHJlLSlpbml0aWFsaXNlIHRoZSBzb2NrZXQsIHR1cm4gb24gc3RhdHVzCisgKiBpbnRlcnJ1cHRzIGFuZCBQQ01DSUEgYnVzLCBhbmQgd2FpdCBmb3IgcG93ZXIgdG8gc3RhYmlsaXNlIHNvIHRoYXQKKyAqIHRoZSBjYXJkIHN0YXR1cyBzaWduYWxzIHJlcG9ydCBjb3JyZWN0bHkuCisgKgorICogSGFyZHdhcmUgY2Fubm90IGRvIHRoYXQuCisgKi8KK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc29ja19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrKQoreworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBjYWxsYmFjayBzaG91bGQgcmVtb3ZlIHBvd2VyIG9uIHRoZSBzb2NrZXQsIGRpc2FibGUgSVJRcyBmcm9tCisgKiB0aGUgY2FyZCwgdHVybiBvZmYgc3RhdHVzIGludGVycnVwdHMsIGFuZCBkaXNhYmxlIHRoZSBQQ01DSUEgYnVzLgorICoKKyAqIEhhcmR3YXJlIGNhbm5vdCBkbyB0aGF0LgorICovCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2spCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbXBsZW1lbnRzIHRoZSBzZXRfc29ja2V0KCkgb3BlcmF0aW9uIGZvciB0aGUgaW4ta2VybmVsIFBDTUNJQQorICogc2VydmljZSAoZm9ybWVybHkgU1NfU2V0U29ja2V0IGluIENhcmQgU2VydmljZXMpLiBXZSBtb3JlIG9yCisgKiBsZXNzIHB1bnQgYWxsIG9mIHRoaXMgd29yayBhbmQgbGV0IHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBkZXRhaWxzCisgKiBvZiBwb3dlciBjb25maWd1cmF0aW9uLCByZXNldCwgJmMuIFdlIGFsc28gcmVjb3JkIHRoZSB2YWx1ZSBvZgorICogYHN0YXRlJyBpbiBvcmRlciB0byByZWd1cmdpdGF0ZSBpdCB0byB0aGUgUENNQ0lBIGNvcmUgbGF0ZXIuCisgKi8KK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywKKwkJCQkgICAgIHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2t0LT5sb2NrLCBmbGFncyk7CisKKwkvKiBub3RlOiBoYXJkd2FyZSBjYW5ub3QgY29udHJvbCBzb2NrZXQgcG93ZXIsIHNvIHdlIHdpbGwKKwkgKiBhbHdheXMgcmVwb3J0IFNTX1BPV0VST04gKi8KKworCS8qIGFwcGx5IHNvY2tldCByZXNldCAqLworCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkKKwkJdmFsIHw9IFBDTUNJQV9DMV9SRVNFVF9NQVNLOworCWVsc2UKKwkJdmFsICY9IH5QQ01DSUFfQzFfUkVTRVRfTUFTSzsKKworCS8qIHJldmVyc2UgcmVzZXQgbG9naWMgZm9yIGNhcmRidXMgY2FyZCAqLworCWlmIChza3QtPmNhcmRfZGV0ZWN0ZWQgJiYgKHNrdC0+Y2FyZF90eXBlICYgQ0FSRF9DQVJEQlVTKSkKKwkJdmFsIF49IFBDTUNJQV9DMV9SRVNFVF9NQVNLOworCisJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MxX1JFRyk7CisKKwkvKiBrZWVwIHJlcXVlc3RlZCBzdGF0ZSBmb3IgZXZlbnQgcmVwb3J0aW5nICovCisJc2t0LT5yZXF1ZXN0ZWRfc3RhdGUgPSAqc3RhdGU7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza3QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogaWRlbnRpdHkgY2FyZHR5cGUgZnJvbSBWU1sxMl0gaW5wdXQsIENEWzEyXSBpbnB1dCB3aGlsZSBvbmx5IFZTMiBpcworICogZmxvYXRpbmcsIGFuZCBDRFsxMl0gaW5wdXQgd2hpbGUgb25seSBWUzEgaXMgZmxvYXRpbmcKKyAqLworZW51bSB7CisJSU5fVlMxID0gKDEgPDwgMCksCisJSU5fVlMyID0gKDEgPDwgMSksCisJSU5fQ0QxX1ZTMkggPSAoMSA8PCAyKSwKKwlJTl9DRDJfVlMySCA9ICgxIDw8IDMpLAorCUlOX0NEMV9WUzFIID0gKDEgPDwgNCksCisJSU5fQ0QyX1ZTMUggPSAoMSA8PCA1KSwKK307CisKK3N0YXRpYyBjb25zdCB1OCB2c2NkX3RvX2NhcmR0eXBlW10gPSB7CisKKwkvKiBWUzEgZmxvYXQsIFZTMiBmbG9hdCAqLworCVtJTl9WUzEgfCBJTl9WUzJdID0gKENBUkRfUENDQVJEIHwgQ0FSRF81ViksCisKKwkvKiBWUzEgZ3JvdW5kZWQsIFZTMiBmbG9hdCAqLworCVtJTl9WUzJdID0gKENBUkRfUENDQVJEIHwgQ0FSRF81ViB8IENBUkRfM1YpLAorCisJLyogVlMxIGdyb3VuZGVkLCBWUzIgZ3JvdW5kZWQgKi8KKwlbMF0gPSAoQ0FSRF9QQ0NBUkQgfCBDQVJEXzVWIHwgQ0FSRF8zViB8IENBUkRfWFYpLAorCisJLyogVlMxIHRpZWQgdG8gQ0QxLCBWUzIgZmxvYXQgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QxX1ZTMUhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YpLAorCisJLyogVlMxIGdyb3VuZGVkLCBWUzIgdGllZCB0byBDRDIgKi8KKwlbSU5fVlMyIHwgSU5fQ0QyX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YgfCBDQVJEX1hWKSwKKworCS8qIFZTMSB0aWVkIHRvIENEMiwgVlMyIGdyb3VuZGVkICovCisJW0lOX1ZTMSB8IElOX0NEMl9WUzFIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEXzNWIHwgQ0FSRF9YViB8IENBUkRfWVYpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgZ3JvdW5kZWQgKi8KKwlbSU5fVlMxXSA9IChDQVJEX1BDQ0FSRCB8IENBUkRfWFYpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgdGllZCB0byBDRDIgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QyX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgdGllZCB0byBDRDEgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QxX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfWFYgfCBDQVJEX1lWKSwKKworCS8qIFZTMSB0aWVkIHRvIENEMiwgVlMyIGZsb2F0ICovCisJW0lOX1ZTMSB8IElOX1ZTMiB8IElOX0NEMl9WUzFIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEX1lWKSwKKworCS8qIFZTMiBncm91bmRlZCwgVlMxIGlzIHRpZWQgdG8gQ0QxLCBDRDIgaXMgZ3JvdW5kZWQgKi8KKwlbSU5fVlMxIHwgSU5fQ0QxX1ZTMUhdID0gMCwgLyogaWdub3JlIGNhcmRiYXkgKi8KK307CisKKy8qCisgKiBwb2xsIGhhcmR3YXJlIHRvIGNoZWNrIGNhcmQgaW5zZXJ0aW9uIHN0YXR1cworICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9fZ2V0X3NvY2tldF9zdGF0dXMoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXVuc2lnbmVkIGludCBzdGF0OworCXUzMiB2YWw7CisKKwlzdGF0ID0gMDsKKworCS8qIGNoZWNrIENEIGZvciBjYXJkIHByZXNlbmNlICovCisJdmFsID0gcGNtY2lhX3JlYWRsKHNrdCwgUENNQ0lBX0MxX1JFRyk7CisKKwlpZiAoISh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spICYmICEodmFsICYgUENNQ0lBX0MxX0NEMl9NQVNLKSkKKwkJc3RhdCB8PSBTU19ERVRFQ1Q7CisKKwkvKiBpZiBuZXcgaW5zZXJ0aW9uLCBkZXRlY3QgY2FyZHR5cGUgKi8KKwlpZiAoKHN0YXQgJiBTU19ERVRFQ1QpICYmICFza3QtPmNhcmRfZGV0ZWN0ZWQpIHsKKwkJdW5zaWduZWQgaW50IHN0YXQgPSAwOworCisJCS8qIGZsb2F0IFZTMSwgZmxvYXQgVlMyICovCisJCXZhbCB8PSBQQ01DSUFfQzFfVlMxT0VfTUFTSzsKKwkJdmFsIHw9IFBDTUNJQV9DMV9WUzJPRV9NQVNLOworCQlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCQkvKiB3YWl0IGZvciBvdXRwdXQgdG8gc3RhYmlsaXplIGFuZCByZWFkIFZTWzEyXSAqLworCQl1ZGVsYXkoMTApOworCQl2YWwgPSBwY21jaWFfcmVhZGwoc2t0LCBQQ01DSUFfQzFfUkVHKTsKKwkJc3RhdCB8PSAodmFsICYgUENNQ0lBX0MxX1ZTMV9NQVNLKSA/IElOX1ZTMSA6IDA7CisJCXN0YXQgfD0gKHZhbCAmIFBDTUNJQV9DMV9WUzJfTUFTSykgPyBJTl9WUzIgOiAwOworCisJCS8qIGRyaXZlIFZTMSBsb3csIGZsb2F0IFZTMiAqLworCQl2YWwgJj0gflBDTUNJQV9DMV9WUzFPRV9NQVNLOworCQl2YWwgfD0gUENNQ0lBX0MxX1ZTMk9FX01BU0s7CisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJCS8qIHdhaXQgZm9yIG91dHB1dCB0byBzdGFiaWxpemUgYW5kIHJlYWQgQ0RbMTJdICovCisJCXVkZWxheSgxMCk7CisJCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spID8gSU5fQ0QxX1ZTMkggOiAwOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QyX01BU0spID8gSU5fQ0QyX1ZTMkggOiAwOworCisJCS8qIGZsb2F0IFZTMSwgZHJpdmUgVlMyIGxvdyAqLworCQl2YWwgfD0gUENNQ0lBX0MxX1ZTMU9FX01BU0s7CisJCXZhbCAmPSB+UENNQ0lBX0MxX1ZTMk9FX01BU0s7CisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJCS8qIHdhaXQgZm9yIG91dHB1dCB0byBzdGFiaWxpemUgYW5kIHJlYWQgQ0RbMTJdICovCisJCXVkZWxheSgxMCk7CisJCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spID8gSU5fQ0QxX1ZTMUggOiAwOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QyX01BU0spID8gSU5fQ0QyX1ZTMUggOiAwOworCisJCS8qIGd1ZXNzIGNhcmR0eXBlIGZyb20gYWxsIHRoaXMgKi8KKwkJc2t0LT5jYXJkX3R5cGUgPSB2c2NkX3RvX2NhcmR0eXBlW3N0YXRdOworCQlpZiAoIXNrdC0+Y2FyZF90eXBlKQorCQkJZGV2X2Vycigmc2t0LT5zb2NrZXQuZGV2LCAidW5zdXBwb3J0ZWQgY2FyZCB0eXBlXG4iKTsKKworCQkvKiBkcml2ZSBib3RoIFZTIHBpbiB0byAwIGFnYWluICovCisJCXZhbCAmPSB+KFBDTUNJQV9DMV9WUzFPRV9NQVNLIHwgUENNQ0lBX0MxX1ZTMk9FX01BU0spOworCisJCS8qIGVuYWJsZSBjb3JyZWN0IGxvZ2ljICovCisJCXZhbCAmPSB+KFBDTUNJQV9DMV9FTl9QQ01DSUFfTUFTSyB8IFBDTUNJQV9DMV9FTl9DQVJEQlVTX01BU0spOworCQlpZiAoc2t0LT5jYXJkX3R5cGUgJiBDQVJEX1BDQ0FSRCkKKwkJCXZhbCB8PSBQQ01DSUFfQzFfRU5fUENNQ0lBX01BU0s7CisJCWVsc2UKKwkJCXZhbCB8PSBQQ01DSUFfQzFfRU5fQ0FSREJVU19NQVNLOworCisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCX0KKwlza3QtPmNhcmRfZGV0ZWN0ZWQgPSAoc3RhdCAmIFNTX0RFVEVDVCkgPyAxIDogMDsKKworCS8qIHJlcG9ydCBjYXJkIHR5cGUvdm9sdGFnZSAqLworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfQ0FSREJVUykKKwkJc3RhdCB8PSBTU19DQVJEQlVTOworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfM1YpCisJCXN0YXQgfD0gU1NfM1ZDQVJEOworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfWFYpCisJCXN0YXQgfD0gU1NfWFZDQVJEOworCXN0YXQgfD0gU1NfUE9XRVJPTjsKKworCWlmIChncGlvX2dldF92YWx1ZShza3QtPnBkLT5yZWFkeV9ncGlvKSkKKwkJc3RhdCB8PSBTU19SRUFEWTsKKworCXJldHVybiBzdGF0OworfQorCisvKgorICogY29yZSByZXF1ZXN0IHRvIGdldCBjdXJyZW50IHNvY2tldCBzdGF0dXMKKyAqLworc3RhdGljIGludCBiY202M3h4X3BjbWNpYV9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpzdGF0dXMpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisKKwlzcGluX2xvY2tfYmgoJnNrdC0+bG9jayk7CisJKnN0YXR1cyA9IF9fZ2V0X3NvY2tldF9zdGF0dXMoc2t0KTsKKwlzcGluX3VubG9ja19iaCgmc2t0LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogc29ja2V0IHBvbGxpbmcgdGltZXIgY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQgYmNtNjN4eF9wY21jaWFfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXVuc2lnbmVkIGludCBzdGF0LCBldmVudHM7CisKKwlza3QgPSAoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqKWRhdGE7CisKKwlzcGluX2xvY2tfYmgoJnNrdC0+bG9jayk7CisKKwlzdGF0ID0gX19nZXRfc29ja2V0X3N0YXR1cyhza3QpOworCisJLyoga2VlcCBvbmx5IGNoYW5nZWQgYml0cywgYW5kIG1hc2sgd2l0aCByZXF1aXJlZCBvbmUgZnJvbSB0aGUKKwkgKiBjb3JlICovCisJZXZlbnRzID0gKHN0YXQgXiBza3QtPm9sZF9zdGF0dXMpICYgc2t0LT5yZXF1ZXN0ZWRfc3RhdGUuY3NjX21hc2s7CisJc2t0LT5vbGRfc3RhdHVzID0gc3RhdDsKKwlzcGluX3VubG9ja19iaCgmc2t0LT5sb2NrKTsKKworCWlmIChldmVudHMpCisJCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNrdC0+c29ja2V0LCBldmVudHMpOworCisJbW9kX3RpbWVyKCZza3QtPnRpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEJDTTYzWFhfUENNQ0lBX1BPTExfUkFURSkpOworfQorCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssCisJCQkJICAgICBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqbWFwKQoreworCS8qIHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGNhbGxlZCBieSBwY21jaWEgbGF5ZXIgaWYgc3RhdGljCisJICogbWFwcGluZyBpcyB1c2VkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc2V0X21lbV9tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssCisJCQkJICAgICAgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisJaWYgKG1hcC0+ZmxhZ3MgJiBNQVBfQVRUUklCKQorCQlyZXMgPSBza3QtPmF0dHJfcmVzOworCWVsc2UKKwkJcmVzID0gc2t0LT5jb21tb25fcmVzOworCisJbWFwLT5zdGF0aWNfc3RhcnQgPSByZXMtPnN0YXJ0ICsgbWFwLT5jYXJkX3N0YXJ0OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIGJjbTYzeHhfcGNtY2lhX29wZXJhdGlvbnMgPSB7CisJLmluaXQJCQk9IGJjbTYzeHhfcGNtY2lhX3NvY2tfaW5pdCwKKwkuc3VzcGVuZAkJPSBiY202M3h4X3BjbWNpYV9zdXNwZW5kLAorCS5nZXRfc3RhdHVzCQk9IGJjbTYzeHhfcGNtY2lhX2dldF9zdGF0dXMsCisJLnNldF9zb2NrZXQJCT0gYmNtNjN4eF9wY21jaWFfc2V0X3NvY2tldCwKKwkuc2V0X2lvX21hcAkJPSBiY202M3h4X3BjbWNpYV9zZXRfaW9fbWFwLAorCS5zZXRfbWVtX21hcAkJPSBiY202M3h4X3BjbWNpYV9zZXRfbWVtX21hcCwKK307CisKKy8qCisgKiByZWdpc3RlciBwY21jaWEgc29ja2V0IHRvIGNvcmUKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgYmNtNjN4eF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrOworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqaXJxX3JlczsKKwl1bnNpZ25lZCBpbnQgcmVnbWVtX3NpemUgPSAwLCBpb21lbV9zaXplID0gMDsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlza3QgPSBremFsbG9jKHNpemVvZigqc2t0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza3QpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pbml0KCZza3QtPmxvY2spOworCXNvY2sgPSAmc2t0LT5zb2NrZXQ7CisJc29jay0+ZHJpdmVyX2RhdGEgPSBza3Q7CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgcmVzb3VyY2VzIHdlIG5lZWQgKi8KKwlza3QtPmNvbW1vbl9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCXNrdC0+YXR0cl9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDIpOworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCXNrdC0+cGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXNrdC0+Y29tbW9uX3JlcyB8fCAhc2t0LT5hdHRyX3JlcyB8fCAhaXJxX3JlcyB8fCAhc2t0LT5wZCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiByZW1hcCBwY21jaWEgcmVnaXN0ZXJzICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWdtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZWdtZW1fc2l6ZSwgImJjbTYzeHhfcGNtY2lhIikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCXNrdC0+cmVnX3JlcyA9IHJlczsKKworCXNrdC0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVnbWVtX3NpemUpOworCWlmICghc2t0LT5iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlbWFwIGlvIHJlZ2lzdGVycyAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMyk7CisJaW9tZW1fc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlza3QtPmlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIGlvbWVtX3NpemUpOworCWlmICghc2t0LT5pb19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlc291cmNlcyBhcmUgc3RhdGljICovCisJc29jay0+cmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOworCXNvY2stPm9wcyA9ICZiY202M3h4X3BjbWNpYV9vcGVyYXRpb25zOworCXNvY2stPm93bmVyID0gVEhJU19NT0RVTEU7CisJc29jay0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJc29jay0+ZmVhdHVyZXMgPSBTU19DQVBfU1RBVElDX01BUCB8IFNTX0NBUF9QQ0NBUkQ7CisJc29jay0+aW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc2t0LT5pb19iYXNlOworCXNvY2stPnBjaV9pcnEgPSBpcnFfcmVzLT5zdGFydDsKKworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJc29jay0+Y2JfZGV2ID0gYmNtNjN4eF9jYl9kZXY7CisJaWYgKGJjbTYzeHhfY2JfZGV2KQorCQlzb2NrLT5mZWF0dXJlcyB8PSBTU19DQVBfQ0FSREJVUzsKKyNlbmRpZgorCisJLyogYXNzdW1lIGNvbW1vbiAmIGF0dHJpYnV0ZSBtZW1vcnkgaGF2ZSB0aGUgc2FtZSBzaXplICovCisJc29jay0+bWFwX3NpemUgPSByZXNvdXJjZV9zaXplKHNrdC0+Y29tbW9uX3Jlcyk7CisKKwkvKiBpbml0aWFsaXplIHBvbGxpbmcgdGltZXIgKi8KKwlzZXR1cF90aW1lcigmc2t0LT50aW1lciwgYmNtNjN4eF9wY21jaWFfcG9sbCwgKHVuc2lnbmVkIGxvbmcpc2t0KTsKKworCS8qIGluaXRpYWxpemUgIHBjbWNpYSAgY29udHJvbCByZWdpc3RlciwgIGRyaXZlICBWU1sxMl0gdG8gIDAsCisJICogbGVhdmUgQ0IgSURTRUwgdG8gdGhlIG9sZCAgdmFsdWUgc2luY2UgaXQgaXMgc2V0IGJ5IHRoZSBQQ0kKKwkgKiBsYXllciAqLworCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCXZhbCAmPSBQQ01DSUFfQzFfQ0JJRFNFTF9NQVNLOworCXZhbCB8PSBQQ01DSUFfQzFfRU5fUENNQ0lBX0dQSU9fTUFTSzsKKwlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCS8qCisJICogSGFyZHdhcmUgaGFzIG9ubHkgb25lIHNldCBvZiB0aW1pbmdzIHJlZ2lzdGVycywgbm90IG9uZSBmb3IKKwkgKiBlYWNoIG1lbW9yeSBhY2Nlc3MgdHlwZSwgc28gd2UgY29uZmlndXJlIHRoZW0gZm9yIHRoZQorCSAqIHNsb3dlc3Qgb25lOiBhdHRyaWJ1dGUgbWVtb3J5LgorCSAqLworCXZhbCA9IFBDTUNJQV9DMl9EQVRBMTZfTUFTSzsKKwl2YWwgfD0gMTAgPDwgUENNQ0lBX0MyX1JXQ09VTlRfU0hJRlQ7CisJdmFsIHw9IDYgPDwgUENNQ0lBX0MyX0lOQUNUSVZFX1NISUZUOworCXZhbCB8PSAzIDw8IFBDTUNJQV9DMl9TRVRVUF9TSElGVDsKKwl2YWwgfD0gMyA8PCBQQ01DSUFfQzJfSE9MRF9TSElGVDsKKwlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzJfUkVHKTsKKworCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc29jayk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkvKiBzdGFydCBwb2xsaW5nIHNvY2tldCAqLworCW1vZF90aW1lcigmc2t0LT50aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhCQ002M1hYX1BDTUNJQV9QT0xMX1JBVEUpKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNrdCk7CisJcmV0dXJuIDA7CisKK2VycjoKKwlpZiAoc2t0LT5pb19iYXNlKQorCQlpb3VubWFwKHNrdC0+aW9fYmFzZSk7CisJaWYgKHNrdC0+YmFzZSkKKwkJaW91bm1hcChza3QtPmJhc2UpOworCWlmIChza3QtPnJlZ19yZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihza3QtPnJlZ19yZXMtPnN0YXJ0LCByZWdtZW1fc2l6ZSk7CisJa2ZyZWUoc2t0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiY202M3h4X2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJc2t0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJZGVsX3RpbWVyX3N5bmMoJnNrdC0+dGltZXIpOworCWlvdW5tYXAoc2t0LT5iYXNlKTsKKwlpb3VubWFwKHNrdC0+aW9fYmFzZSk7CisJcmVzID0gc2t0LT5yZWdfcmVzOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWtmcmVlKHNrdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtNjN4eF9wY21jaWFfZHJpdmVyID0geworCS5wcm9iZQk9IGJjbTYzeHhfZHJ2X3BjbWNpYV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AoYmNtNjN4eF9kcnZfcGNtY2lhX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYmNtNjN4eF9wY21jaWEiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworc3RhdGljIGludCBfX2RldmluaXQgYmNtNjN4eF9jYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwkvKiBrZWVwIHBjaSBkZXZpY2UgKi8KKwliY202M3h4X2NiX2RldiA9IGRldjsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgYmNtNjN4eF9jYl9leGl0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RyaXZlcik7CisJYmNtNjN4eF9jYl9kZXYgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYmNtNjN4eF9jYl90YWJsZVtdID0geworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLAorCQkuZGV2aWNlCQk9IEJDTTYzNDhfQ1BVX0lELAorCQkuc3VidmVuZG9yCT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5jbGFzcwkJPSBQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMgPDwgOCwKKwkJLmNsYXNzX21hc2sJPSB+MCwKKwl9LAorCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQlJPQURDT00sCisJCS5kZXZpY2UJCT0gQkNNNjM1OF9DUFVfSUQsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmNsYXNzCQk9IFBDSV9DTEFTU19CUklER0VfQ0FSREJVUyA8PCA4LAorCQkuY2xhc3NfbWFzawk9IH4wLAorCX0sCisKKwl7IH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmNtNjN4eF9jYl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiY202M3h4X2NhcmRidXNfZHJpdmVyID0geworCS5uYW1lCQk9ICJiY202M3h4X2NhcmRidXMiLAorCS5pZF90YWJsZQk9IGJjbTYzeHhfY2JfdGFibGUsCisJLnByb2JlCQk9IGJjbTYzeHhfY2JfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChiY202M3h4X2NiX2V4aXQpLAorfTsKKyNlbmRpZgorCisvKgorICogaWYgY2FyZGJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQsIHJlZ2lzdGVyIG91ciBwbGF0Zm9ybSBkZXZpY2UgYWZ0ZXIKKyAqIG91ciBmYWtlIGNhcmRidXMgYnJpZGdlIGhhcyBiZWVuIHJlZ2lzdGVyZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgYmNtNjN4eF9wY21jaWFfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJjbTYzeHhfY2FyZGJ1c19kcml2ZXIpOworI2Vsc2UKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kcml2ZXIpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiY202M3h4X3BjbWNpYV9leGl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKwlyZXR1cm4gcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiY202M3h4X2NhcmRidXNfZHJpdmVyKTsKKyNlbHNlCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RyaXZlcik7CisjZW5kaWYKK30KKworbW9kdWxlX2luaXQoYmNtNjN4eF9wY21jaWFfaW5pdCk7Cittb2R1bGVfZXhpdChiY202M3h4X3BjbWNpYV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGludXggUENNQ0lBIENhcmQgU2VydmljZXM6IGJjbTYzeHggU29ja2V0IENvbnRyb2xsZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmggYi9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTU3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgQkNNNjNYWF9QQ01DSUFfSF8KKyNkZWZpbmUgQkNNNjNYWF9QQ01DSUFfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKyNpbmNsdWRlIDxiY202M3h4X2Rldl9wY21jaWEuaD4KKworLyogc29ja2V0IHBvbGxpbmcgcmF0ZSBpbiBtcyAqLworI2RlZmluZSBCQ002M1hYX1BDTUNJQV9QT0xMX1JBVEUJNTAwCisKK2VudW0geworCUNBUkRfQ0FSREJVUyA9ICgxIDw8IDApLAorCUNBUkRfUENDQVJEID0gKDEgPDwgMSksCisJQ0FSRF81ViA9ICgxIDw8IDIpLAorCUNBUkRfM1YgPSAoMSA8PCAzKSwKKwlDQVJEX1hWID0gKDEgPDwgNCksCisJQ0FSRF9ZViA9ICgxIDw8IDUpLAorfTsKKworc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCB7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQgc29ja2V0OworCisJLyogcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9wbGF0Zm9ybV9kYXRhICpwZDsKKworCS8qIGFsbCByZWdzIGFjY2VzcyBhcmUgcHJvdGVjdGVkIGJ5IHRoaXMgc3BpbmxvY2sgKi8KKwlzcGlubG9ja190IGxvY2s7CisKKwkvKiBwY21jaWEgcmVnaXN0ZXJzIHJlc291cmNlICovCisJc3RydWN0IHJlc291cmNlICpyZWdfcmVzOworCisJLyogYmFzZSByZW1hcHBlZCBhZGRyZXNzIG9mIHJlZ2lzdGVycyAqLworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCS8qIHdoZXRoZXIgYSBjYXJkIGlzIGRldGVjdGVkIGF0IHRoZSBtb21lbnQgKi8KKwlpbnQgY2FyZF9kZXRlY3RlZDsKKworCS8qIHR5cGUgb2YgZGV0ZWN0ZWQgY2FyZCAobWFzayBvZiBhYm92ZSBlbnVtKSAqLworCXU4IGNhcmRfdHlwZTsKKworCS8qIGtlZXAgbGFzdCBzb2NrZXQgc3RhdHVzIHRvIGltcGxlbWVudCBldmVudCByZXBvcnRpbmcgKi8KKwl1bnNpZ25lZCBpbnQgb2xkX3N0YXR1czsKKworCS8qIGJhY2t1cCBvZiByZXF1ZXN0ZWQgc29ja2V0IHN0YXRlICovCisJc29ja2V0X3N0YXRlX3QgcmVxdWVzdGVkX3N0YXRlOworCisJLyogdGltZXIgdXNlZCBmb3Igc29ja2V0IHN0YXR1cyBwb2xsaW5nICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisKKwkvKiBhdHRyaWJ1dGUvY29tbW9uIG1lbW9yeSByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKmF0dHJfcmVzOworCXN0cnVjdCByZXNvdXJjZSAqY29tbW9uX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlczsKKworCS8qIGJhc2UgYWRkcmVzcyBvZiBpbyBtZW1vcnkgKi8KKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7Cit9OworCisjZW5kaWYgLyogQkNNNjNYWF9QQ01DSUFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCmluZGV4IGI1OWQ0MTEuLjMwMGIzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAKIHN0YXRpYyBpbnQgYmZpbl9jZl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYsIG1lc2cpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGJmaW5fY2ZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDRhMTEwYjcuLjZjNGE0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC0xNDYzLDcgKzE0NjMsOSBAQAogCSAgICByZXR1cm4gLUVOT01FTTsKICAgICB9CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gY29kZTsKLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKKyAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKyAgICBpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpCisJICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwogICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sICZ0dXBsZSk7CiAgICAgaWYgKHJldCAhPSAwKQogCSAgICBnb3RvIGRvbmU7CkBAIC0xNDkwLDcgKzE0OTIsNyBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLWludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHVuc2lnbmVkIGludCAqaW5mbykKK2ludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmluZm8pCiB7CiAgICAgdHVwbGVfdCAqdHVwbGU7CiAgICAgY2lzcGFyc2VfdCAqcDsKQEAgLTE1MTUsMzAgKzE1MTcsMzAgQEAKICAgICBjb3VudCA9IHJlc2VydmVkID0gMDsKICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwogICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CisgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogICAgIGlmIChyZXQgIT0gMCkKIAlnb3RvIGRvbmU7CiAKICAgICAvKiBGaXJzdCB0dXBsZSBzaG91bGQgYmUgREVWSUNFOyB3ZSBzaG91bGQgcmVhbGx5IGhhdmUgZWl0aGVyIHRoYXQKICAgICAgICBvciBhIENGVEFCTEVfRU5UUlkgb2Ygc29tZSBzb3J0ICovCiAgICAgaWYgKCh0dXBsZS0+VHVwbGVDb2RlID09IENJU1RQTF9ERVZJQ0UpIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IDApKQogCWRldl9vaysrOwogCiAgICAgLyogQWxsIGNhcmRzIHNob3VsZCBoYXZlIGEgTUFORklEIHR1cGxlLCBhbmQvb3IgYSBWRVJTXzEgb3IgVkVSU18yCiAgICAgICAgdHVwbGUsIGZvciBjYXJkIGlkZW50aWZpY2F0aW9uLiAgQ2VydGFpbiBvbGQgRC1MaW5rIGFuZCBMaW5rc3lzCiAgICAgICAgY2FyZHMgaGF2ZSBvbmx5IGEgYnJva2VuIFZFUlNfMiB0dXBsZTsgaGVuY2UgdGhlIGJvZ3VzIHRlc3QuICovCi0gICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKKyAgICBpZiAoKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfTUFORklELCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzIsIHApICE9IC1FTk9TUEMpKQogCWlkZW50X29rKys7CiAKICAgICBpZiAoIWRldl9vayAmJiAhaWRlbnRfb2spCiAJZ290byBkb25lOwogCiAgICAgZm9yIChjb3VudCA9IDE7IGNvdW50IDwgTUFYX1RVUExFUzsgY291bnQrKykgewotCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOworCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogCWlmIChyZXQgIT0gMCkKIAkJYnJlYWs7CiAJaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jcy5jIGIvZHJpdmVycy9wY21jaWEvY3MuYwppbmRleCAwNjYwYWQxLi42OThkNzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKQEAgLTk4LDEwICs5OCwxMyBAQAogICogVGhlc2UgZnVuY3Rpb25zIGNoZWNrIGZvciB0aGUgYXBwcm9wcmlhdGUgc3RydWN0IHBjbWNpYV9zb2tldCBhcnJheXMsCiAgKiBhbmQgcGFzcyB0aGVtIHRvIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIHBjbWNpYV97c3VzcGVuZCxyZXN1bWV9X3NvY2tldAogICovCitzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CitzdGF0aWMgaW50IHNvY2tldF9sYXRlX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHN0YXRpYyBpbnQgc29ja2V0X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHN0YXRpYyBpbnQgc29ja2V0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKLWludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHZvaWQgcGNtY2lhX3NvY2tldF9kZXZfcnVuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGludCAoKmNiKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqKSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0OwogCkBAIC0xMTAsMjkgKzExMywzNCBAQAogCQlpZiAoc29ja2V0LT5kZXYucGFyZW50ICE9IGRldikKIAkJCWNvbnRpbnVlOwogCQltdXRleF9sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7Ci0JCXNvY2tldF9zdXNwZW5kKHNvY2tldCk7CisJCWNiKHNvY2tldCk7CiAJCW11dGV4X3VubG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCX0KIAl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOworfQogCitpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfcnVuKGRldiwgc29ja2V0X3N1c3BlbmQpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKTsKIAordm9pZCBwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9lYXJseV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUpOworCit2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwY21jaWFfc29ja2V0X2Rldl9ydW4oZGV2LCBzb2NrZXRfbGF0ZV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZSk7CisKIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQ7Ci0KLQlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzb2NrZXQsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7Ci0JCWlmIChzb2NrZXQtPmRldi5wYXJlbnQgIT0gZGV2KQotCQkJY29udGludWU7Ci0JCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQkJc29ja2V0X3Jlc3VtZShzb2NrZXQpOwotCQltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQl9Ci0JdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQorCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9yZXN1bWUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUpOwpAQCAtNTQ2LDI5ICs1NTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlc3VtZSBhIHNvY2tldC4gIElmIGEgY2FyZCBpcyBwcmVzZW50LCB2ZXJpZnkgaXRzIENJUyBhZ2FpbnN0Ci0gKiBvdXIgY2FjaGVkIGNvcHkuICBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSBjYXJkIGhhcyBiZWVuCi0gKiByZXBsYWNlZCwgYW5kIHdlIG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVycy4KLSAqLwotc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCitzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlpbnQgcmV0OwotCi0JaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPmluaXQoc2t0KTsKIAlza3QtPm9wcy0+c2V0X3NvY2tldChza3QsICZza3QtPnNvY2tldCk7CisJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkKKwkJc2t0LT5yZXN1bWVfc3RhdHVzID0gc29ja2V0X3NldHVwKHNrdCwgcmVzdW1lX2RlbGF5KTsKKwlyZXR1cm4gMDsKK30KIAorc3RhdGljIGludCBzb2NrZXRfbGF0ZV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKIAlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOwogCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOwogCX0KIAotCXJldCA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHNrdC0+cmVzdW1lX3N0YXR1cyA9PSAwKSB7CiAJCS8qCiAJCSAqIEZJWE1FOiBuZWVkIGEgYmV0dGVyIGNoZWNrIGhlcmUgZm9yIGNhcmRidXMgY2FyZHMuCiAJCSAqLwpAQCAtNTk2LDYgKzU5OSwyMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUmVzdW1lIGEgc29ja2V0LiAgSWYgYSBjYXJkIGlzIHByZXNlbnQsIHZlcmlmeSBpdHMgQ0lTIGFnYWluc3QKKyAqIG91ciBjYWNoZWQgY29weS4gIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgdGhlIGNhcmQgaGFzIGJlZW4KKyAqIHJlcGxhY2VkLCBhbmQgd2UgbmVlZCB0byB0ZWxsIHRoZSBkcml2ZXJzLgorICovCitzdGF0aWMgaW50IHNvY2tldF9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJc29ja2V0X2Vhcmx5X3Jlc3VtZShza3QpOworCXJldHVybiBzb2NrZXRfbGF0ZV9yZXN1bWUoc2t0KTsKK30KKwogc3RhdGljIHZvaWQgc29ja2V0X3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZza3QtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCmluZGV4IDc5NjE1ZTYuLjFmNDA5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaApAQCAtMTk3LDggKzE5Nyw3IEBACiAJCSAgICAgIGNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSk7CiBpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwotaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKLQkJCXVuc2lnbmVkIGludCAqY291bnQpOworaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqY291bnQpOwogCiAvKiByc3JjX21nci5jICovCiBpbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCA5ZjMwMGQzLi5mNWI3MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCWlmICghdmVyczEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKKwlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLAogCQkJICAgICAgIENJU1RQTF9NQU5GSUQsICZtYW5mX2lkKSkgewogCQlwX2Rldi0+bWFuZl9pZCA9IG1hbmZfaWQubWFuZjsKIAkJcF9kZXYtPmNhcmRfaWQgPSBtYW5mX2lkLmNhcmQ7CkBAIC01ODEsOSArNTgxLDkgQEAKIAkJa2ZyZWUoZGV2Z2VvKTsKIAl9CiAKLQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBDSVNUUExfVkVSU18xLAorCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsCiAJCQkgICAgICAgdmVyczEpKSB7Ci0JCWZvciAoaT0wOyBpIDwgdmVyczEtPm5zOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG1pbl90KHVuc2lnbmVkIGludCwgNCwgdmVyczEtPm5zKTsgaSsrKSB7CiAJCQljaGFyICp0bXA7CiAJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCkBAIC03MzMsNyArNzMzLDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiwgYnV0IGxhdGVyLi4uICovCiAJfQogCi0JcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBCSU5EX0ZOX0FMTCwgJm5vX2NoYWlucyk7CisJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmbm9fY2hhaW5zKTsKIAlpZiAocmV0IHx8ICFub19jaGFpbnMpIHsKIAkJZHNfZGV2X2RiZygwLCAmcy0+ZGV2LCAiaW52YWxpZCBDSVMgb3IgaW52YWxpZCByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKaW5kZXggNDY1NjFmYS4uYTA0ZjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgaTgyMDkyYWFfc29ja2V0X3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGk4MjA5MmFhX3NvY2tldF9yZXN1bWUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDQwZDQ5NTMuLmE0YWFjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMDUzLDggKzEwNTMsOCBAQAogICAgIHVfY2hhciBtYXAsIGlvY3RsOwogICAgIAogICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywgaW8tPnNwZWVkLAorCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogICAgIG1hcCA9IGlvLT5tYXA7CiAgICAgaWYgKChtYXAgPiAxKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKSB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8CiAJKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkgcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjQxLDcgKzEyNDEsNyBAQAogc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGk4MjM2NV9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCA2MmI0ZWNjLi43ZGZiZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTUzNyw4ICs1MzcsOSBAQAogCXVfY2hhciBtYXA7CiAKIAlkZWJ1ZygzLCAibTMycl9jZmM6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgICIlI2x4LSUjbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkJICAiJSNsbHgtJSNsbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCSAgaW8tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAltYXAgPSBpby0+bWFwOwogCiAJcmV0dXJuIDA7CkBAIC01NTQsOCArNTU1LDkgQEAKIAlwY2Nfc29ja2V0X3QgKnQgPSAmc29ja2V0W3NvY2tdOwogCiAJZGVidWcoMywgIm0zMnJfY2ZjOiBTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAiJSNseCwgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAotCQkgbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSAiJSNsbHgsICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKKwkJIG1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCSBtZW0tPmNhcmRfc3RhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2sKQEAgLTY5OSw3ICs3MDEsNyBAQAogc3RhdGljIGludCBjZmNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGNmY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwppbmRleCAxMjAzNGI0Li5jNjUyNGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKQEAgLTQ5Miw4ICs0OTIsOSBAQAogCXVfY2hhciBtYXA7CiAKIAlkZWJ1ZygzLCAibTMyci1wY2M6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgICIlI3gtJSN4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSAgIiUjbGx4LSUjbGx4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQkgIGlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAJbWFwID0gaW8tPm1hcDsKIAogCXJldHVybiAwOwpAQCAtNTE1LDggKzUxNiw5IEBACiAjZW5kaWYKIAogCWRlYnVnKDMsICJtMzJyLXBjYzogU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgIiUjbHgsICAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCi0JCSBtZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJICIlI2xseCwgICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKKwkJIG1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCSBtZW0tPmNhcmRfc3RhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2sKQEAgLTY3NSw3ICs2NzcsNyBAQAogc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHBjY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCBkMWFkMDk2Li40MDM1NTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTk3NSw4ICs5NzUsOSBAQAogI2RlZmluZSBNOFhYX0JBU0UgKFBDTUNJQV9JT19XSU5fQkFTRSArIGlvLT5zdGFydCkKIAogCWRwcmludGsoIlNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM0LjR4LSUjNC40eClcbiIsIGxzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCWlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSIlIzQuNGxseC0lIzQuNGxseClcbiIsIGxzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCWlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCiAJaWYgKChpby0+bWFwID49IFBDTUNJQV9JT19XSU5fTk8pIHx8IChpby0+c3RhcnQgPiAweGZmZmYpCiAJICAgIHx8IChpby0+c3RvcCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkKQEAgLTEwNTUsOCArMTA1Niw5IEBACiAJcGNtY29uZjh4eF90ICpwY21jaWEgPSBzLT5wY21jaWE7CiAKIAlkcHJpbnRrKCJTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSIlIzUuNWx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCi0JCW1lbS0+c3BlZWQsIG1lbS0+c3RhdGljX3N0YXJ0LCBtZW0tPmNhcmRfc3RhcnQpOworCQkiJSM1LjVsbHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKKwkJbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnN0YXRpY19zdGFydCwKKwkJbWVtLT5jYXJkX3N0YXJ0KTsKIAogCWlmICgobWVtLT5tYXAgPj0gUENNQ0lBX01FTV9XSU5fTk8pCiAvLyAgICAgICAgICB8fCAoKG1lbS0+cykgPj0gUENNQ0lBX01FTV9XSU5fU0laRSkKQEAgLTExMDcsOCArMTEwOSw5IEBACiAJfQogCiAJZHByaW50aygiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM1LjVseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAotCQltZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJIiUjNS41bGx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCisJCW1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCW1lbS0+Y2FyZF9zdGFydCk7CiAKIAkvKiBjb3B5IHRoZSBzdHJ1Y3QgYW5kIG1vZGlmeSB0aGUgY29weSAqLwogCkBAIC0xMjk2LDcgKzEyOTksNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBtOHh4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBtOHh4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCmluZGV4IGYzNzM2MzkuLjY4NTcwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCiBzdGF0aWMgaW50IG9tYXBfY2Zfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBtZXNnKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBvbWFwX2NmX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCAzMmM0NDA0Li4zMGNmNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtODgxLDcgKzg4MSw3IEBACiAJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAlwY21jaWFfdmFsaWRhdGVfbWVtKHMpOwogCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKLQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CisJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19TVVNQRU5EX0NBUkQ6CiAJcmV0ID0gcGNtY2lhX3N1c3BlbmRfY2FyZChzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKaW5kZXggOGJlZDFkYS4uNzBhMzM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKQEAgLTY0MSw2ICs2NDEsMTIgQEAKIAlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldikpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9tZW07CiAKKwlpZiAoIXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApKSB7CisJCXByaW50ayhLRVJOX0lORk8gInBkNjcyOTogcmVmdXNpbmcgdG8gbG9hZCB0aGUgZHJpdmVyICIKKwkJCQkgImFzIHRoZSBpb19iYXNlIGlzIDAuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOworCX0KKwogCXByaW50ayhLRVJOX0lORk8gInBkNjcyOTogQ2lycnVzIFBENjcyOSBQQ0kgdG8gUENNQ0lBIEJyaWRnZSAiCiAJCSJhdCAweCVsbHggb24gaXJxICVkXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApLCBkZXYtPmlycSk7CkBAIC03NTgsNyArNzY0LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcGQ2NzI5X3NvY2tldF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHBkNjcyOV9zb2NrZXRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCBjNDlhNzI2Li4wZTM1YWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTMwMCwyNSArMzAwLDI5IEBACiAJcmV0dXJuIHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUoJmRldi0+ZGV2KTsKIH0KIAotc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChkZXYpOwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKCZkZXYtPmRldik7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworCXB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhkZXYpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoZGV2KTsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzICBweGEyeHhfZHJ2X3BjbWNpYV9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X3BjbWNpYV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YTJ4eF9kcnZfcGNtY2lhX3Byb2JlLAogCS5yZW1vdmUJCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVtb3ZlLAotCS5zdXNwZW5kIAk9IHB4YTJ4eF9kcnZfcGNtY2lhX3N1c3BlbmQsCi0JLnJlc3VtZSAJPSBweGEyeHhfZHJ2X3BjbWNpYV9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTJ4eC1wY21jaWEiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJnB4YTJ4eF9kcnZfcGNtY2lhX3BtX29wcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODk5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXRjLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXRjLmMKKyAqCisgKiBEcml2ZXIgZm9yIFBhbG0gVHVuZ3N0ZW58QyBQQ01DSUEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBPc2Jvcm5lIDxhdG9AbWVzaHkub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG10Yy5oPgorI2luY2x1ZGUgInNvY19jb21tb24uaCIKKworc3RhdGljIGludCBwYWxtdGNfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxLCAiUENNQ0lBIFBXUjEiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjEsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIyLCAiUENNQ0lBIFBXUjIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAiUENNQ0lBIFBXUjMiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyNDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsICJQQ01DSUEgUlNUIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI0OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFksICJQQ01DSUEgUkRZIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI2OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSwgIlBDTUNJQSBQV1JSRFkiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjY7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BXUlJFQURZKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjc7CisKKwlza3QtPmlycSA9IElSUV9HUElPKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWSk7CisJcmV0dXJuIDA7CisKK2Vycjc6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSk7CitlcnI2OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworZXJyNToKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VUKTsKK2VycjQ6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMpOworZXJyMzoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMik7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9od19zaHV0ZG93bihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BXUlJFQURZKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VUKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMyk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxKTsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsCisJCQkJCXN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQoreworCXN0YXRlLT5kZXRlY3QgPSAxOyAvKiBhbHdheXMgaW5zZXJ0ZWQgKi8KKwlzdGF0ZS0+cmVhZHkgID0gISFncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworCXN0YXRlLT5idmQxICAgPSAxOworCXN0YXRlLT5idmQyICAgPSAxOworCXN0YXRlLT53cnByb3QgPSAwOworCXN0YXRlLT52c18zdiAgPSAxOworCXN0YXRlLT52c19YdiAgPSAwOworfQorCitzdGF0aWMgaW50IHBhbG10Y193aWZpX3Bvd2VyZG93bih2b2lkKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMiwgMCk7CisJbWRlbGF5KDQwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWxtdGNfd2lmaV9wb3dlcnVwKHZvaWQpCit7CisJaW50IHRpbWVvdXQgPSA1MDsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDEpOworCW1kZWxheSg1MCk7CisKKwkvKiBQb3dlciB1cCB0aGUgY2FyZCwgMS44ViBmaXJzdCwgYWZ0ZXIgYSB3aGlsZSAzLjNWICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSwgMSk7CisJbWRlbGF5KDEwMCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMiwgMSk7CisKKwkvKiBXYWl0IHRpbGwgdGhlIGNhcmQgaXMgcmVhZHkgKi8KKwl3aGlsZSAoIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSkgJiYKKwkJdGltZW91dCkgeworCQltZGVsYXkoMSk7CisJCXRpbWVvdXQtLTsKKwl9CisKKwkvKiBQb3dlciBkb3duIHRoZSBXaUZpIGluIGNhc2Ugb2YgZXJyb3IgKi8KKwlpZiAoIXRpbWVvdXQpIHsKKwkJcGFsbXRjX3dpZmlfcG93ZXJkb3duKCk7CisJCXJldHVybiAxOworCX0KKworCS8qIFJlc2V0IHRoZSBjYXJkICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VULCAxKTsKKwltZGVsYXkoMjApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCwgMCk7CisJbWRlbGF5KDI1KTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXRjX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCQljb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJaW50IHJldCA9IDE7CisKKwlpZiAoc3RhdGUtPlZjYyA9PSAwKQorCQlyZXQgPSBwYWxtdGNfd2lmaV9wb3dlcmRvd24oKTsKKwllbHNlIGlmIChzdGF0ZS0+VmNjID09IDMzKQorCQlyZXQgPSBwYWxtdGNfd2lmaV9wb3dlcnVwKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwYWxtdGNfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworfQorCitzdGF0aWMgdm9pZCBwYWxtdGNfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworfQorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgcGFsbXRjX3BjbWNpYV9vcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKworCS5maXJzdAkJCT0gMCwKKwkubnIJCQk9IDEsCisKKwkuaHdfaW5pdAkJPSBwYWxtdGNfcGNtY2lhX2h3X2luaXQsCisJLmh3X3NodXRkb3duCQk9IHBhbG10Y19wY21jaWFfaHdfc2h1dGRvd24sCisKKwkuc29ja2V0X3N0YXRlCQk9IHBhbG10Y19wY21jaWFfc29ja2V0X3N0YXRlLAorCS5jb25maWd1cmVfc29ja2V0CT0gcGFsbXRjX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAorCisJLnNvY2tldF9pbml0CQk9IHBhbG10Y19wY21jaWFfc29ja2V0X2luaXQsCisJLnNvY2tldF9zdXNwZW5kCQk9IHBhbG10Y19wY21jaWFfc29ja2V0X3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFsbXRjX3BjbWNpYV9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhbG10Y19wY21jaWFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfcGFsbXRjKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcGFsbXRjX3BjbWNpYV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInB4YTJ4eC1wY21jaWEiLCAtMSk7CisJaWYgKCFwYWxtdGNfcGNtY2lhX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGFsbXRjX3BjbWNpYV9kZXZpY2UsICZwYWxtdGNfcGNtY2lhX29wcywKKwkJCQkJc2l6ZW9mKHBhbG10Y19wY21jaWFfb3BzKSk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwYWxtdGNfcGNtY2lhX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBhbG10Y19wY21jaWFfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYWxtdGNfcGNtY2lhX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwYWxtdGNfcGNtY2lhX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHBhbG10Y19wY21jaWFfaW5pdCk7Cittb2R1bGVfZXhpdChwYWxtdGNfcGNtY2lhX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGV4IE9zYm9ybmUgPGF0b0BtZXNoeS5vcmc+LCIKKwkgICAgIiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgc3VwcG9ydCBmb3IgUGFsbSBUdW5nc3RlbnxDIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnB4YTJ4eC1wY21jaWEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCmluZGV4IDljYTIyYzcuLjcwMzlmM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwpAQCAtMjA2LDYgKzIwNiw3IEBACiAgICAgLyogRmlyc3QsIHdoYXQgZG9lcyBhIGZsb2F0aW5nIHBvcnQgbG9vayBsaWtlPyAqLwogICAgIGIgPSBremFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFiKSB7CisJICAgIHByaW50aygiXG4iKTsKIAkgICAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJnMtPmRldiwKIAkJICAgImRvX2lvX3Byb2JlOiB1bmFibGUgdG8ga21hbGxvYyAyNTYgYnl0ZXMiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NSw3ICsyNzYsNyBAQAogCXMtPmNpc19tZW0ucmVzID0gcmVzOwogCXMtPmNpc192aXJ0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzLT5tYXBfc2l6ZSk7CiAJaWYgKHMtPmNpc192aXJ0KSB7Ci0JCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsIGNvdW50KTsKKwkJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBjb3VudCk7CiAJCS8qIGludmFsaWRhdGUgbWFwcGluZyBhbmQgQ0lTIGNhY2hlICovCiAJCWlvdW5tYXAocy0+Y2lzX3ZpcnQpOwogCQlzLT5jaXNfdmlydCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYwppbmRleCBmNDI0MTQ2Li5hYzhhYTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9hc3NhYmV0LmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCS5zb2NrZXRfc3VzcGVuZAkJPSBhc3NhYmV0X3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKIH07CiAKLWludCBfX2luaXQgcGNtY2lhX2Fzc2FiZXRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGNtY2lhX2Fzc2FiZXRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCmluZGV4IGQ4ZGE1YWMuLjJkMGU5OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwpAQCAtODksNyArODksNyBAQAogc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9uZXBvbnNldC5jCmluZGV4IDRjNDFlODYuLjBjNzZkMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9uZXBvbnNldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9uZXBvbnNldC5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkuc29ja2V0X3N1c3BlbmQgCT0gc2ExMTExX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKIH07CiAKLWludCBfX2luaXQgcGNtY2lhX25lcG9uc2V0X2luaXQoc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2KQoraW50IHBjbWNpYV9uZXBvbnNldF9pbml0KHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldikKIHsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKaW5kZXggNDAxMDUyYS4uNGJlNGUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogc3RhdGljIGludCBwY21jaWFfc3VzcGVuZChzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBwY21jaWFfcmVzdW1lKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKaW5kZXggMTYzY2Y5OC4uZWY3ZTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwpAQCAtMzM2LDggKzMzNiw5IEBACiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QgPSB0b19zb2NfcGNtY2lhX3NvY2tldChzb2NrKTsKIAl1bnNpZ25lZCBzaG9ydCBzcGVlZCA9IG1hcC0+c3BlZWQ7CiAKLQlkZWJ1Zyhza3QsIDIsICJtYXAgJXUgIHNwZWVkICV1IHN0YXJ0IDB4JTA4eCBzdG9wIDB4JTA4eFxuIiwKLQkJbWFwLT5tYXAsIG1hcC0+c3BlZWQsIG1hcC0+c3RhcnQsIG1hcC0+c3RvcCk7CisJZGVidWcoc2t0LCAyLCAibWFwICV1ICBzcGVlZCAldSBzdGFydCAweCUwOGxseCBzdG9wIDB4JTA4bGx4XG4iLAorCQltYXAtPm1hcCwgbWFwLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+c3RvcCk7CiAJZGVidWcoc2t0LCAyLCAiZmxhZ3M6ICVzJXMlcyVzJXMlcyVzJXNcbiIsCiAJCShtYXAtPmZsYWdzPT0wKT8iPE5PTkU+IjoiIiwKIAkJKG1hcC0+ZmxhZ3MmTUFQX0FDVElWRSk/IkFDVElWRSAiOiIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCBmZjlhM2JiLi43OGQ1YWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAKIAkJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZjaGFpbnMpKQorCQlpZiAocGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmY2hhaW5zKSkKIAkJCXJldHVybiAtRUlPOwogCQlpZiAoIWNoYWlucykKIAkJCXJldHVybiAtRU5PREFUQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwppbmRleCA4ZWIwNDIzLi42OTE4ODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCkBAIC0zNjYsNyArMzY2LDcgQEAKIHN0YXRpYyBpbnQgdGNpY19kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgdGNpY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCkBAIC03MzIsOCArNzMyLDggQEAKICAgICB1X3Nob3J0IGJhc2UsIGxlbiwgaW9jdGw7CiAgICAgCiAgICAgZGVidWcoMSwgIlNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCSAgIiUjeC0lI3gpXG4iLCBwc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkgICIlI2xseC0lI2xseClcbiIsIHBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsIGlvLT5zcGVlZCwKKwkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKICAgICBpZiAoKGlvLT5tYXAgPiAxKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKSB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8CiAJKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkgcmV0dXJuIC1FSU5WQUw7CiAgICAgdGNpY19zZXR3KFRDSUNfQUREUisyLCBUQ0lDX0FEUjJfSU5EUkVHIHwgKHBzb2NrIDw8IFRDSUNfU1NfU0hGVCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMgYi9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYwppbmRleCBkNGFkNTBkLi5jOWZjYmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYworKysgYi9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYwpAQCAtNzA3LDcgKzcwNyw3IEBACiBzdGF0aWMgaW50IHZyYzQxNzFfY2FyZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHZyYzQxNzFfY2FyZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwppbmRleCBiNDU5ZTg3Li44YmU0Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwpAQCAtMTIyNSw2MCArMTIyNSw4MSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHllbnRhX2Rldl9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaW50IHJldDsKIAotCXJldCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0ID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChkZXYpOwogCi0JaWYgKHNvY2tldCkgewotCQlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+c2F2ZV9zdGF0ZSkKLQkJCXNvY2tldC0+dHlwZS0+c2F2ZV9zdGF0ZShzb2NrZXQpOworCWlmICghc29ja2V0KQorCQlyZXR1cm4gcmV0OwogCi0JCS8qIEZJWE1FOiBwY2lfc2F2ZV9zdGF0ZSBuZWVkcyB0byBoYXZlIGEgYmV0dGVyIGludGVyZmFjZSAqLwotCQlwY2lfc2F2ZV9zdGF0ZShkZXYpOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAxNio0LCAmc29ja2V0LT5zYXZlZF9zdGF0ZVswXSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDE3KjQsICZzb2NrZXQtPnNhdmVkX3N0YXRlWzFdKTsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJaWYgKHNvY2tldC0+dHlwZSAmJiBzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUpCisJCXNvY2tldC0+dHlwZS0+c2F2ZV9zdGF0ZShzb2NrZXQpOwogCi0JCS8qCi0JCSAqIFNvbWUgbGFwdG9wcyAoSUJNIFQyMikgZG8gbm90IGxpa2UgdXMgcHV0dGluZyB0aGUgQ2FyZGJ1cwotCQkgKiBicmlkZ2UgaW50byBEMy4gIEF0IGEgZ3Vlc3MsIHNvbWUgb3RoZXIgbGFwdG9wIHdpbGwKLQkJICogcHJvYmFibHkgcmVxdWlyZSB0aGlzLCBzbyBsZWF2ZSBpdCBjb21tZW50ZWQgb3V0IGZvciBub3cuCi0JCSAqLwotCQkvKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgMyk7ICovCi0JfQorCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAxNio0LCAmc29ja2V0LT5zYXZlZF9zdGF0ZVswXSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDE3KjQsICZzb2NrZXQtPnNhdmVkX3N0YXRlWzFdKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwkvKgorCSAqIFNvbWUgbGFwdG9wcyAoSUJNIFQyMikgZG8gbm90IGxpa2UgdXMgcHV0dGluZyB0aGUgQ2FyZGJ1cworCSAqIGJyaWRnZSBpbnRvIEQzLiAgQXQgYSBndWVzcywgc29tZSBvdGhlciBsYXB0b3Agd2lsbAorCSAqIHByb2JhYmx5IHJlcXVpcmUgdGhpcywgc28gbGVhdmUgaXQgY29tbWVudGVkIG91dCBmb3Igbm93LgorCSAqLworCS8qIHBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCAzKTsgKi8KIAogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIGludCB5ZW50YV9kZXZfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCB5ZW50YV9kZXZfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKIAotCWlmIChzb2NrZXQpIHsKLQkJaW50IHJjOworCWlmICghc29ja2V0KQorCQlyZXR1cm4gMDsKIAotCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgMCk7Ci0JCS8qIEZJWE1FOiBwY2lfcmVzdG9yZV9zdGF0ZSBuZWVkcyB0byBoYXZlIGEgYmV0dGVyIGludGVyZmFjZSAqLwotCQlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMTYqNCwgc29ja2V0LT5zYXZlZF9zdGF0ZVswXSk7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAxNyo0LCBzb2NrZXQtPnNhdmVkX3N0YXRlWzFdKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDE2KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMTcqNCwgc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7CiAKLQkJcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCQlwY2lfc2V0X21hc3RlcihkZXYpOworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0JCWlmIChzb2NrZXQtPnR5cGUgJiYgc29ja2V0LT50eXBlLT5yZXN0b3JlX3N0YXRlKQotCQkJc29ja2V0LT50eXBlLT5yZXN0b3JlX3N0YXRlKHNvY2tldCk7Ci0JfQorCWlmIChzb2NrZXQtPnR5cGUgJiYgc29ja2V0LT50eXBlLT5yZXN0b3JlX3N0YXRlKQorCQlzb2NrZXQtPnR5cGUtPnJlc3RvcmVfc3RhdGUoc29ja2V0KTsKIAotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKKwlwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoZGV2KTsKKwlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCB5ZW50YV9kZXZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgeWVudGFfcG1fb3BzID0geworCS5zdXNwZW5kX25vaXJxID0geWVudGFfZGV2X3N1c3BlbmRfbm9pcnEsCisJLnJlc3VtZV9ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCisJLnJlc3VtZSA9IHllbnRhX2Rldl9yZXN1bWUsCisJLmZyZWV6ZV9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAorCS50aGF3X25vaXJxID0geWVudGFfZGV2X3Jlc3VtZV9ub2lycSwKKwkudGhhdyA9IHllbnRhX2Rldl9yZXN1bWUsCisJLnBvd2Vyb2ZmX25vaXJxID0geWVudGFfZGV2X3N1c3BlbmRfbm9pcnEsCisJLnJlc3RvcmVfbm9pcnEgPSB5ZW50YV9kZXZfcmVzdW1lX25vaXJxLAorCS5yZXN0b3JlID0geWVudGFfZGV2X3Jlc3VtZSwKK307CisKKyNkZWZpbmUgWUVOVEFfUE1fT1BTCSgmeWVudGFfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgWUVOVEFfUE1fT1BTCU5VTEwKICNlbmRpZgogCiAjZGVmaW5lIENCX0lEKHZlbmQsZGV2LHR5cGUpCQkJCVwKQEAgLTEzNzYsMTAgKzEzOTcsNyBAQAogCS5pZF90YWJsZQk9IHllbnRhX3RhYmxlLAogCS5wcm9iZQkJPSB5ZW50YV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHllbnRhX2Nsb3NlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHllbnRhX2Rldl9zdXNwZW5kLAotCS5yZXN1bWUJCT0geWVudGFfZGV2X3Jlc3VtZSwKLSNlbmRpZgorCS5kcml2ZXIucG0JPSBZRU5UQV9QTV9PUFMsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKaW5kZXggZGEzYzA4Yi4uNDIyNmU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKQEAgLTM1MCwxMyArMzUwLDE0IEBACiAJLnNldF9ibG9jayA9IGVlZXBjX3Jma2lsbF9zZXQsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgZWVlcGNfZW5hYmxlX2NhbWVyYSh2b2lkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGVlZXBjX2VuYWJsZV9jYW1lcmEodm9pZCkKIHsKIAkvKgogCSAqIElmIHRoZSBmb2xsb3dpbmcgY2FsbCB0byBzZXRfYWNwaSgpIGZhaWxzLCBpdCdzIGJlY2F1c2UgdGhlcmUncyBubwogCSAqIGNhbWVyYSBzbyB3ZSBjYW4gaWdub3JlIHRoZSBlcnJvci4KIAkgKi8KLQlzZXRfYWNwaShDTV9BU0xfQ0FNRVJBLCAxKTsKKwlpZiAoZ2V0X2FjcGkoQ01fQVNMX0NBTUVSQSkgPT0gMCkKKwkJc2V0X2FjcGkoQ01fQVNMX0NBTUVSQSwgMSk7CiB9CiAKIC8qCkBAIC02MjQsNyArNjI1LDcgQEAKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBlZWVwY19iYWNrbGlnaHRfZGV2aWNlOwogCWlmIChiZCkgewogCQlpbnQgb2xkID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Ci0JCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gcmVhZF9icmlnaHRuZXNzKGJkKTsKKwkJYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZShiZCwgQkFDS0xJR0hUX1VQREFURV9IT1RLRVkpOwogCQlyZXR1cm4gb2xkOwogCX0KIAlyZXR1cm4gLTE7CkBAIC0xMTg5LDcgKzExOTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVlZXBjX2hvdGtfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgZWVlcGNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWludCByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwppbmRleCBmMzVhZWU1Li5iY2Q0YmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKQEAgLTk0NCw3ICs5NDQsNyBAQAogCXN0cnVjdCBmdWppdHN1X2hvdGtleV90ICpmdWppdHN1X2hvdGtleSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZ1aml0c3VfaG90a2V5LT5pbnB1dDsKIAotI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTUykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTU19NT0RVTEUpCiAJaWYgKGZ1aml0c3VfaG90a2V5LT5sb2dvbGFtcF9yZWdpc3RlcmVkKQogCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbG9nb2xhbXBfbGVkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggYWZkYmRhYS4uYTJhNzQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC0xMjExLDE1ICsxMjExLDYgQEAKIAkJfQogCX0KIAotCS8qIHRyeSB0byBfSU5JIHRoZSBkZXZpY2UgaWYgc3VjaCBtZXRob2QgZXhpc3RzIChBQ1BJIHNwZWMgMy4wLTYuNS4xCi0JICogc2hvdWxkIGJlIHJlc3BlY3RlZCBhcyB3ZSBhbHJlYWR5IGNoZWNrZWQgZm9yIHRoZSBkZXZpY2UgcHJlc2VuY2UgYWJvdmUgKi8KLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X25jX2FjcGlfaGFuZGxlLCBNRVRIT0RfTkFNRV9fSU5JLCAmaGFuZGxlKSkpIHsKLQkJZHByaW50aygiSW52b2tpbmcgX0lOSVxuIik7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9vYmplY3Qoc29ueV9uY19hY3BpX2hhbmRsZSwgTUVUSE9EX05BTUVfX0lOSSwKLQkJCQkJCU5VTEwsIE5VTEwpKSkKLQkJCWRwcmludGsoIl9JTkkgTWV0aG9kIGZhaWxlZFxuIik7Ci0JfQotCiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9uY19hY3BpX2hhbmRsZSwgIkVDT04iLAogCQkJCQkgJmhhbmRsZSkpKSB7CiAJCWlmIChhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJFQ09OIiwgMSwgTlVMTCkpCkBAIC0xMzk5LDI3ICsxMzkwLDIwIEBACiAJc3RydWN0IHNvbnlwaV9ldmVudAkqZXZlbnRzOwogfTsKIAotc3RydWN0IGRldmljZV9jdHJsIHsKLQlpbnQJCQkJbW9kZWw7Ci0JaW50CQkJCSgqaGFuZGxlX2lycSkoY29uc3QgdTgsIGNvbnN0IHU4KTsKLQl1MTYJCQkJZXZwb3J0X29mZnNldDsKLQl1OAkJCQloYXNfY2FtZXJhOwotCXU4CQkJCWhhc19ibHVldG9vdGg7Ci0JdTgJCQkJaGFzX3d3YW47Ci0Jc3RydWN0IHNvbnlwaV9ldmVudHR5cGVzCSpldmVudF90eXBlczsKLX07Ci0KIHN0cnVjdCBzb255X3BpY19kZXYgewotCXN0cnVjdCBkZXZpY2VfY3RybAkqY29udHJvbDsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UJKmFjcGlfZGV2OwotCXN0cnVjdCBzb255X3BpY19pcnEJKmN1cl9pcnE7Ci0Jc3RydWN0IHNvbnlfcGljX2lvcG9ydAkqY3VyX2lvcG9ydDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWludGVycnVwdHM7Ci0Jc3RydWN0IGxpc3RfaGVhZAlpb3BvcnRzOwotCXN0cnVjdCBtdXRleAkJbG9jazsKLQl1OAkJCWNhbWVyYV9wb3dlcjsKLQl1OAkJCWJsdWV0b290aF9wb3dlcjsKLQl1OAkJCXd3YW5fcG93ZXI7CisJc3RydWN0IGFjcGlfZGV2aWNlCQkqYWNwaV9kZXY7CisJc3RydWN0IHNvbnlfcGljX2lycQkJKmN1cl9pcnE7CisJc3RydWN0IHNvbnlfcGljX2lvcG9ydAkJKmN1cl9pb3BvcnQ7CisJc3RydWN0IGxpc3RfaGVhZAkJaW50ZXJydXB0czsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpb3BvcnRzOworCXN0cnVjdCBtdXRleAkJCWxvY2s7CisJc3RydWN0IHNvbnlwaV9ldmVudHR5cGVzCSpldmVudF90eXBlczsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqaGFuZGxlX2lycSkoY29uc3QgdTgsIGNvbnN0IHU4KTsKKwlpbnQJCQkJbW9kZWw7CisJdTE2CQkJCWV2cG9ydF9vZmZzZXQ7CisJdTgJCQkJY2FtZXJhX3Bvd2VyOworCXU4CQkJCWJsdWV0b290aF9wb3dlcjsKKwl1OAkJCQl3d2FuX3Bvd2VyOwogfTsKIAogc3RhdGljIHN0cnVjdCBzb255X3BpY19kZXYgc3BpY19kZXYgPSB7CkBAIC0xNDI3LDYgKzE0MTEsOCBAQAogCS5pb3BvcnRzCT0gTElTVF9IRUFEX0lOSVQoc3BpY19kZXYuaW9wb3J0cyksCiB9OwogCitzdGF0aWMgaW50IHNwaWNfZHJ2X3JlZ2lzdGVyZWQ7CisKIC8qIEV2ZW50IG1hc2tzICovCiAjZGVmaW5lIFNPTllQSV9KT0dHRVJfTUFTSwkJCTB4MDAwMDAwMDEKICNkZWZpbmUgU09OWVBJX0NBUFRVUkVfTUFTSwkJCTB4MDAwMDAwMDIKQEAgLTE3MjQsMjcgKzE3MTAsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9jdHJsIHNwaWNfdHlwZXNbXSA9IHsKLQl7Ci0JCS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTEsCi0JCS5oYW5kbGVfaXJxID0gTlVMTCwKLQkJLmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTFfT0ZGU0VULAotCQkuZXZlbnRfdHlwZXMgPSB0eXBlMV9ldmVudHMsCi0JfSwKLQl7Ci0JCS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTIsCi0JCS5oYW5kbGVfaXJxID0gTlVMTCwKLQkJLmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTJfT0ZGU0VULAotCQkuZXZlbnRfdHlwZXMgPSB0eXBlMl9ldmVudHMsCi0JfSwKLQl7Ci0JCS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTMsCi0JCS5oYW5kbGVfaXJxID0gdHlwZTNfaGFuZGxlX2lycSwKLQkJLmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTNfT0ZGU0VULAotCQkuZXZlbnRfdHlwZXMgPSB0eXBlM19ldmVudHMsCi0JfSwKLX07Ci0KIHN0YXRpYyB2b2lkIHNvbnlfcGljX2RldGVjdF9kZXZpY2VfdHlwZShzdHJ1Y3Qgc29ueV9waWNfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKQEAgLTE3NTIsNDggKzE3MTcsNjMgQEAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUFCXzMsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMF07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUxOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTFfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTFfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUyOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTJfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTJfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzEsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUzOworCQlkZXYtPmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTNfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTNfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzQsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUzOworCQlkZXYtPmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTNfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTNfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g5XzEsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUzOworCQlkZXYtPmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTNfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTNfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBkZWZhdWx0ICovCi0JZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMV07CisJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTI7CisJZGV2LT5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUyX09GRlNFVDsKKwlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTJfZXZlbnRzOwogCiBvdXQ6CiAJaWYgKHBjaWRldikKIAkJcGNpX2Rldl9wdXQocGNpZGV2KTsKIAogCXByaW50ayhLRVJOX0lORk8gRFJWX1BGWCAiZGV0ZWN0ZWQgVHlwZSVkIG1vZGVsXG4iLAotCQkJZGV2LT5jb250cm9sLT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUxID8gMSA6Ci0JCQlkZXYtPmNvbnRyb2wtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTIgPyAyIDogMyk7CisJCQlkZXYtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTEgPyAxIDoKKwkJCWRldi0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMiA/IDIgOiAzKTsKIH0KIAogLyogY2FtZXJhIHRlc3RzIGFuZCBwb3dlcm9uL3Bvd2Vyb2ZmICovCkBAIC0yNTY2LDcgKzI1NDYsNyBAQAogCWJ1ZmZlci5wb2ludGVyID0gcmVzb3VyY2U7CiAKIAkvKiBzZXR1cCBUeXBlIDEgcmVzb3VyY2VzICovCi0JaWYgKHNwaWNfZGV2LmNvbnRyb2wtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTEpIHsKKwlpZiAoc3BpY19kZXYubW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMSkgewogCiAJCS8qIHNldHVwIGlvIHJlc291cmNlcyAqLwogCQlyZXNvdXJjZS0+cmVzMS50eXBlID0gQUNQSV9SRVNPVVJDRV9UWVBFX0lPOwpAQCAtMjY0OSwyOSArMjYyOSwyOCBAQAogCQlkYXRhX21hc2sgPSBpbmJfcChkZXYtPmN1cl9pb3BvcnQtPmlvMi5taW5pbXVtKTsKIAllbHNlCiAJCWRhdGFfbWFzayA9IGluYl9wKGRldi0+Y3VyX2lvcG9ydC0+aW8xLm1pbmltdW0gKwotCQkJCWRldi0+Y29udHJvbC0+ZXZwb3J0X29mZnNldCk7CisJCQkJZGV2LT5ldnBvcnRfb2Zmc2V0KTsKIAogCWRwcmludGsoImV2ZW50IChbJS4yeF0gWyUuMnhdKSBhdCBwb3J0IDB4JS40eCgrMHglLjJ4KVxuIiwKIAkJCWV2LCBkYXRhX21hc2ssIGRldi0+Y3VyX2lvcG9ydC0+aW8xLm1pbmltdW0sCi0JCQlkZXYtPmNvbnRyb2wtPmV2cG9ydF9vZmZzZXQpOworCQkJZGV2LT5ldnBvcnRfb2Zmc2V0KTsKIAogCWlmIChldiA9PSAweDAwIHx8IGV2ID09IDB4ZmYpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCWZvciAoaSA9IDA7IGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0ubWFzazsgaSsrKSB7CisJZm9yIChpID0gMDsgZGV2LT5ldmVudF90eXBlc1tpXS5tYXNrOyBpKyspIHsKIAotCQlpZiAoKGRhdGFfbWFzayAmIGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0uZGF0YSkgIT0KLQkJICAgIGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0uZGF0YSkKKwkJaWYgKChkYXRhX21hc2sgJiBkZXYtPmV2ZW50X3R5cGVzW2ldLmRhdGEpICE9CisJCSAgICBkZXYtPmV2ZW50X3R5cGVzW2ldLmRhdGEpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIShtYXNrICYgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5tYXNrKSkKKwkJaWYgKCEobWFzayAmIGRldi0+ZXZlbnRfdHlwZXNbaV0ubWFzaykpCiAJCQljb250aW51ZTsKIAotCQlmb3IgKGogPSAwOyBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5ldmVudDsgaisrKSB7Ci0JCQlpZiAoZXYgPT0gZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5ldmVudHNbal0uZGF0YSkgeworCQlmb3IgKGogPSAwOyBkZXYtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5ldmVudDsgaisrKSB7CisJCQlpZiAoZXYgPT0gZGV2LT5ldmVudF90eXBlc1tpXS5ldmVudHNbal0uZGF0YSkgewogCQkJCWRldmljZV9ldmVudCA9Ci0JCQkJCWRldi0+Y29udHJvbC0+Ci0JCQkJCQlldmVudF90eXBlc1tpXS5ldmVudHNbal0uZXZlbnQ7CisJCQkJCWRldi0+ZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmV2ZW50OwogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CiAJCX0KQEAgLTI2NzksMTMgKzI2NTgsMTIgQEAKIAkvKiBTdGlsbCBub3QgYWJsZSB0byBkZWNvZGUgdGhlIGV2ZW50IHRyeSB0byBwYXNzCiAJICogaXQgb3ZlciB0byB0aGUgbWluaWRyaXZlcgogCSAqLwotCWlmIChkZXYtPmNvbnRyb2wtPmhhbmRsZV9pcnEgJiYKLQkJCWRldi0+Y29udHJvbC0+aGFuZGxlX2lycShkYXRhX21hc2ssIGV2KSA9PSAwKQorCWlmIChkZXYtPmhhbmRsZV9pcnEgJiYgZGV2LT5oYW5kbGVfaXJxKGRhdGFfbWFzaywgZXYpID09IDApCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAogCWRwcmludGsoInVua25vd24gZXZlbnQgKFslLjJ4XSBbJS4yeF0pIGF0IHBvcnQgMHglLjR4KCsweCUuMngpXG4iLAogCQkJZXYsIGRhdGFfbWFzaywgZGV2LT5jdXJfaW9wb3J0LT5pbzEubWluaW11bSwKLQkJCWRldi0+Y29udHJvbC0+ZXZwb3J0X29mZnNldCk7CisJCQlkZXYtPmV2cG9ydF9vZmZzZXQpOwogCXJldHVybiBJUlFfSEFORExFRDsKIAogZm91bmQ6CkBAIC0yODE2LDcgKzI3OTQsNyBAQAogCS8qIHJlcXVlc3QgSVJRICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGlycSwgJnNwaWNfZGV2LmludGVycnVwdHMsIGxpc3QpIHsKIAkJaWYgKCFyZXF1ZXN0X2lycShpcnEtPmlycS5pbnRlcnJ1cHRzWzBdLCBzb255X3BpY19pcnEsCi0JCQkJCUlSUUZfU0hBUkVELCAic29ueS1sYXB0b3AiLCAmc3BpY19kZXYpKSB7CisJCQkJCUlSUUZfRElTQUJMRUQsICJzb255LWxhcHRvcCIsICZzcGljX2RldikpIHsKIAkJCWRwcmludGsoIklSUTogJWQgLSB0cmlnZ2VyaW5nOiAlZCAtICIKIAkJCQkJInBvbGFyaXR5OiAlZCAtIHNocjogJWRcbiIsCiAJCQkJCWlycS0+aXJxLmludGVycnVwdHNbMF0sCkBAIC0yOTQ5LDYgKzI5MjcsNyBAQAogCQkJCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIFNQSUMgZHJpdmVyLiIpOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJc3BpY19kcnZfcmVnaXN0ZXJlZCA9IDE7CiAJfQogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZzb255X25jX2RyaXZlcik7CkBAIC0yOTYwLDcgKzI5MzksNyBAQAogCXJldHVybiAwOwogCiBvdXRfdW5yZWdpc3Rlcl9waWM6Ci0JaWYgKCFub19zcGljKQorCWlmIChzcGljX2Rydl9yZWdpc3RlcmVkKQogCQlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmc29ueV9waWNfZHJpdmVyKTsKIG91dDoKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjk2OSw3ICsyOTQ4LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzb255X2xhcHRvcF9leGl0KHZvaWQpCiB7CiAJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfbmNfZHJpdmVyKTsKLQlpZiAoIW5vX3NwaWMpCisJaWYgKHNwaWNfZHJ2X3JlZ2lzdGVyZWQpCiAJCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZzb255X3BpY19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZjc4ZDI3NS4uZDkzMTA4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKICNkZWZpbmUgVFBBQ1BJX1ZFUlNJT04gIjAuMjMiCi0jZGVmaW5lIFRQQUNQSV9TWVNGU19WRVJTSU9OIDB4MDIwNDAwCisjZGVmaW5lIFRQQUNQSV9TWVNGU19WRVJTSU9OIDB4MDIwNTAwCiAKIC8qCiAgKiAgQ2hhbmdlbG9nOgpAQCAtMTQ1LDYgKzE0NSw1MSBAQAogCVRQX0FDUElfV0dTVl9TVEFURV9VV0JQV1IJPSAweDAwMjAsIC8qIFVXQiByYWRpbyBlbmFibGVkICovCiB9OwogCisvKiBIS0VZIGV2ZW50cyAqLworZW51bSB0cGFjcGlfaGtleV9ldmVudF90IHsKKwkvKiBIb3RrZXktcmVsYXRlZCAqLworCVRQX0hLRVlfRVZfSE9US0VZX0JBU0UJCT0gMHgxMDAxLCAvKiBmaXJzdCBob3RrZXkgKEZOK0YxKSAqLworCVRQX0hLRVlfRVZfQlJHSFRfVVAJCT0gMHgxMDEwLCAvKiBCcmlnaHRuZXNzIHVwICovCisJVFBfSEtFWV9FVl9CUkdIVF9ET1dOCQk9IDB4MTAxMSwgLyogQnJpZ2h0bmVzcyBkb3duICovCisJVFBfSEtFWV9FVl9WT0xfVVAJCT0gMHgxMDE1LCAvKiBWb2x1bWUgdXAgb3IgdW5tdXRlICovCisJVFBfSEtFWV9FVl9WT0xfRE9XTgkJPSAweDEwMTYsIC8qIFZvbHVtZSBkb3duIG9yIHVubXV0ZSAqLworCVRQX0hLRVlfRVZfVk9MX01VVEUJCT0gMHgxMDE3LCAvKiBNaXhlciBvdXRwdXQgbXV0ZSAqLworCisJLyogUmVhc29ucyBmb3Igd2FraW5nIHVwIGZyb20gUzMvUzQgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzNfVU5ET0NLCT0gMHgyMzA0LCAvKiB1bmRvY2sgcmVxdWVzdGVkLCBTMyAqLworCVRQX0hLRVlfRVZfV0tVUF9TNF9VTkRPQ0sJPSAweDI0MDQsIC8qIHVuZG9jayByZXF1ZXN0ZWQsIFM0ICovCisJVFBfSEtFWV9FVl9XS1VQX1MzX0JBWUVKCT0gMHgyMzA1LCAvKiBiYXkgZWplY3Rpb24gcmVxLCBTMyAqLworCVRQX0hLRVlfRVZfV0tVUF9TNF9CQVlFSgk9IDB4MjQwNSwgLyogYmF5IGVqZWN0aW9uIHJlcSwgUzQgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzNfQkFUTE9XCT0gMHgyMzEzLCAvKiBiYXR0ZXJ5IGVtcHR5LCBTMyAqLworCVRQX0hLRVlfRVZfV0tVUF9TNF9CQVRMT1cJPSAweDI0MTMsIC8qIGJhdHRlcnkgZW1wdHksIFM0ICovCisKKwkvKiBBdXRvLXNsZWVwIGFmdGVyIGVqZWN0IHJlcXVlc3QgKi8KKwlUUF9IS0VZX0VWX0JBWUVKX0FDSwkJPSAweDMwMDMsIC8qIGJheSBlamVjdGlvbiBjb21wbGV0ZSAqLworCVRQX0hLRVlfRVZfVU5ET0NLX0FDSwkJPSAweDQwMDMsIC8qIHVuZG9jayBjb21wbGV0ZSAqLworCisJLyogTWlzYyBiYXkgZXZlbnRzICovCisJVFBfSEtFWV9FVl9PUFREUlZfRUoJCT0gMHgzMDA2LCAvKiBvcHQuIGRyaXZlIHRyYXkgZWplY3RlZCAqLworCisJLyogVXNlci1pbnRlcmZhY2UgZXZlbnRzICovCisJVFBfSEtFWV9FVl9MSURfQ0xPU0UJCT0gMHg1MDAxLCAvKiBsYXB0b3AgbGlkIGNsb3NlZCAqLworCVRQX0hLRVlfRVZfTElEX09QRU4JCT0gMHg1MDAyLCAvKiBsYXB0b3AgbGlkIG9wZW5lZCAqLworCVRQX0hLRVlfRVZfVEFCTEVUX1RBQkxFVAk9IDB4NTAwOSwgLyogdGFibGV0IHN3aXZlbCB1cCAqLworCVRQX0hLRVlfRVZfVEFCTEVUX05PVEVCT09LCT0gMHg1MDBhLCAvKiB0YWJsZXQgc3dpdmVsIGRvd24gKi8KKwlUUF9IS0VZX0VWX1BFTl9JTlNFUlRFRAkJPSAweDUwMGIsIC8qIHRhYmxldCBwZW4gaW5zZXJ0ZWQgKi8KKwlUUF9IS0VZX0VWX1BFTl9SRU1PVkVECQk9IDB4NTAwYywgLyogdGFibGV0IHBlbiByZW1vdmVkICovCisJVFBfSEtFWV9FVl9CUkdIVF9DSEFOR0VECT0gMHg1MDEwLCAvKiBiYWNrbGlnaHQgY29udHJvbCBldmVudCAqLworCisJLyogVGhlcm1hbCBldmVudHMgKi8KKwlUUF9IS0VZX0VWX0FMQVJNX0JBVF9IT1QJPSAweDYwMTEsIC8qIGJhdHRlcnkgdG9vIGhvdCAqLworCVRQX0hLRVlfRVZfQUxBUk1fQkFUX1hIT1QJPSAweDYwMTIsIC8qIGJhdHRlcnkgY3JpdGljYWxseSBob3QgKi8KKwlUUF9IS0VZX0VWX0FMQVJNX1NFTlNPUl9IT1QJPSAweDYwMjEsIC8qIHNlbnNvciB0b28gaG90ICovCisJVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfWEhPVAk9IDB4NjAyMiwgLyogc2Vuc29yIGNyaXRpY2FsbHkgaG90ICovCisJVFBfSEtFWV9FVl9USE1fVEFCTEVfQ0hBTkdFRAk9IDB4NjAzMCwgLyogdGhlcm1hbCB0YWJsZSBjaGFuZ2VkICovCisKKwkvKiBNaXNjICovCisJVFBfSEtFWV9FVl9SRktJTExfQ0hBTkdFRAk9IDB4NzAwMCwgLyogcmZraWxsIHN3aXRjaCBjaGFuZ2VkICovCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWFpbiBkcml2ZXIKICAqLwpAQCAtMTg0OCw2ICsxODkzLDI3IEBACiAgKiBIb3RrZXkgc3ViZHJpdmVyCiAgKi8KIAorLyoKKyAqIFRoaW5rUGFkIGZpcm13YXJlIGV2ZW50IG1vZGVsCisgKgorICogVGhlIFRoaW5rUGFkIGZpcm13YXJlIGhhcyB0d28gbWFpbiBldmVudCBpbnRlcmZhY2VzOiBub3JtYWwgQUNQSQorICogbm90aWZpY2F0aW9ucyAod2hpY2ggZm9sbG93IHRoZSBBQ1BJIHN0YW5kYXJkKSwgYW5kIGEgcHJpdmF0ZSBldmVudAorICogaW50ZXJmYWNlLgorICoKKyAqIFRoZSBwcml2YXRlIGV2ZW50IGludGVyZmFjZSBhbHNvIGlzc3VlcyBldmVudHMgZm9yIHRoZSBob3RrZXlzLiAgQXMKKyAqIHRoZSBkcml2ZXIgZ2FpbmVkIGZlYXR1cmVzLCB0aGUgZXZlbnQgaGFuZGxpbmcgY29kZSBlbmRlZCB1cCBiZWluZworICogYnVpbHQgYXJvdW5kIHRoZSBob3RrZXkgc3ViZHJpdmVyLiAgVGhpcyB3aWxsIG5lZWQgdG8gYmUgcmVmYWN0b3JlZAorICogdG8gYSBtb3JlIGZvcm1hbCBldmVudCBBUEkgZXZlbnR1YWxseS4KKyAqCisgKiBTb21lICJob3RrZXlzIiBhcmUgYWN0dWFsbHkgc3VwcG9zZWQgdG8gYmUgdXNlZCBhcyBldmVudCByZXBvcnRzLAorICogc3VjaCBhcyAiYnJpZ2h0bmVzcyBoYXMgY2hhbmdlZCIsICJ2b2x1bWUgaGFzIGNoYW5nZWQiLCBkZXBlbmRpbmcgb24KKyAqIHRoZSBUaGlua1BhZCBtb2RlbCBhbmQgaG93IHRoZSBmaXJtd2FyZSBpcyBvcGVyYXRpbmcuCisgKgorICogVW5saWtlIG90aGVyIGNsYXNzZXMsIGhvdGtleS1jbGFzcyBldmVudHMgaGF2ZSBtYXNrL3VubWFzayBjb250cm9sIG9uCisgKiBub24tYW5jaWVudCBmaXJtd2FyZS4gIEhvd2V2ZXIsIGhvdyBpdCBiZWhhdmVzIGNoYW5nZXMgYSBsb3Qgd2l0aCB0aGUKKyAqIGZpcm13YXJlIG1vZGVsIGFuZCB2ZXJzaW9uLgorICovCisKIGVudW0gewkvKiBob3Qga2V5IHNjYW4gY29kZXMgKGRlcml2ZWQgZnJvbSBBQ1BJIERTRFQpICovCiAJVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORjEJCT0gMCwKIAlUUF9BQ1BJX0hPVEtFWVNDQU5fRk5GMiwKQEAgLTE4NzUsNyArMTk0MSw3IEBACiAJVFBfQUNQSV9IT1RLRVlTQ0FOX1RISU5LUEFELAogfTsKIAotZW51bSB7CS8qIEtleXMgYXZhaWxhYmxlIHRocm91Z2ggTlZSQU0gcG9sbGluZyAqLworZW51bSB7CS8qIEtleXMvZXZlbnRzIGF2YWlsYWJsZSB0aHJvdWdoIE5WUkFNIHBvbGxpbmcgKi8KIAlUUEFDUElfSEtFWV9OVlJBTV9LTk9XTl9NQVNLID0gMHgwMGZiODhjMFUsCiAJVFBBQ1BJX0hLRVlfTlZSQU1fR09PRF9NQVNLICA9IDB4MDBmYjgwMDBVLAogfTsKQEAgLTE5MzAsOCArMTk5NiwxMSBAQAogc3RhdGljIHN0cnVjdCBtdXRleCBob3RrZXlfdGhyZWFkX211dGV4OwogCiAvKgotICogQWNxdWlyZSBtdXRleCB0byB3cml0ZSBwb2xsZXIgY29udHJvbCB2YXJpYWJsZXMuCi0gKiBJbmNyZW1lbnQgaG90a2V5X2NvbmZpZ19jaGFuZ2Ugd2hlbiBjaGFuZ2luZyB0aGVtLgorICogQWNxdWlyZSBtdXRleCB0byB3cml0ZSBwb2xsZXIgY29udHJvbCB2YXJpYWJsZXMgYXMgYW4KKyAqIGF0b21pYyBibG9jay4KKyAqCisgKiBJbmNyZW1lbnQgaG90a2V5X2NvbmZpZ19jaGFuZ2Ugd2hlbiBjaGFuZ2luZyB0aGVtIGlmIHlvdQorICogd2FudCB0aGUga3RocmVhZCB0byBmb3JnZXQgb2xkIHN0YXRlLgogICoKICAqIFNlZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUL0hPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECiAgKi8KQEAgLTE5NDIsNiArMjAxMSwxMSBAQAogICogaG90a2V5IHBvbGxlciBjb250cm9sIHZhcmlhYmxlcwogICoKICAqIE11c3QgYmUgYXRvbWljIG9yIHJlYWRlcnMgd2lsbCBhbHNvIG5lZWQgdG8gYWNxdWlyZSBtdXRleAorICoKKyAqIEhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQvSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKKyAqIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgY2hhbmdlcyBuZWVkIHRvIGJlIHRha2VuIGFzCisgKiBhIGJsb2NrLCBPUiB3aGVuIG9uZSBuZWVkcyB0byBmb3JjZSB0aGUga3RocmVhZCB0byBmb3JnZXQKKyAqIG9sZCBzdGF0ZS4KICAqLwogc3RhdGljIHUzMiBob3RrZXlfc291cmNlX21hc2s7CQkvKiBiaXQgbWFzayAwPUFDUEksMT1OVlJBTSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBob3RrZXlfcG9sbF9mcmVxID0gMTA7IC8qIEh6ICovCkBAIC0xOTcyLDEwICsyMDQ2LDEyIEBACiAKIHN0YXRpYyBpbnQgaG90a2V5X2F1dG9zbGVlcF9hY2s7CiAKLXN0YXRpYyB1MzIgaG90a2V5X29yaWdfbWFzazsKLXN0YXRpYyB1MzIgaG90a2V5X2FsbF9tYXNrOwotc3RhdGljIHUzMiBob3RrZXlfcmVzZXJ2ZWRfbWFzazsKLXN0YXRpYyB1MzIgaG90a2V5X21hc2s7CitzdGF0aWMgdTMyIGhvdGtleV9vcmlnX21hc2s7CQkvKiBldmVudHMgdGhlIEJJT1MgaGFkIGVuYWJsZWQgKi8KK3N0YXRpYyB1MzIgaG90a2V5X2FsbF9tYXNrOwkJLyogYWxsIGV2ZW50cyBzdXBwb3J0ZWQgaW4gZncgKi8KK3N0YXRpYyB1MzIgaG90a2V5X3Jlc2VydmVkX21hc2s7CS8qIGV2ZW50cyBiZXR0ZXIgbGVmdCBkaXNhYmxlZCAqLworc3RhdGljIHUzMiBob3RrZXlfZHJpdmVyX21hc2s7CQkvKiBldmVudHMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyB1MzIgaG90a2V5X3VzZXJfbWFzazsJCS8qIGV2ZW50cyB2aXNpYmxlIHRvIHVzZXJzcGFjZSAqLworc3RhdGljIHUzMiBob3RrZXlfYWNwaV9tYXNrOwkJLyogZXZlbnRzIGVuYWJsZWQgaW4gZmlybXdhcmUgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBob3RrZXlfcmVwb3J0X21vZGU7CiAKQEAgLTE5ODMsNiArMjA1OSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX3NldCAqaG90a2V5X2Rldl9hdHRyaWJ1dGVzOwogCitzdGF0aWMgdm9pZCB0cGFjcGlfZHJpdmVyX2V2ZW50KGNvbnN0IHVuc2lnbmVkIGludCBoa2V5X2V2ZW50KTsKK3N0YXRpYyB2b2lkIGhvdGtleV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKTsKKwogLyogSEtFWS5NSEtHKCkgcmV0dXJuIGJpdHMgKi8KICNkZWZpbmUgVFBfSE9US0VZX1RBQkxFVF9NQVNLICgxIDw8IDMpCiAKQEAgLTIwMTcsMjQgKzIwOTYsNTMgQEAKIH0KIAogLyoKKyAqIFJlYWRzIGN1cnJlbnQgZXZlbnQgbWFzayBmcm9tIGZpcm13YXJlLCBhbmQgdXBkYXRlcworICogaG90a2V5X2FjcGlfbWFzayBhY2NvcmRpbmdseS4gIEFsc28gcmVzZXRzIGFueSBiaXRzCisgKiBmcm9tIGhvdGtleV91c2VyX21hc2sgdGhhdCBhcmUgdW5hdmFpbGFibGUgdG8gYmUKKyAqIGRlbGl2ZXJlZCAoc2hhZG93IHJlcXVpcmVtZW50IG9mIHRoZSB1c2Vyc3BhY2UgQUJJKS4KKyAqCiAgKiBDYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQKICAqLwogc3RhdGljIGludCBob3RrZXlfbWFza19nZXQodm9pZCkKIHsKLQl1MzIgbSA9IDA7Ci0KIAlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKKwkJdTMyIG0gPSAwOworCiAJCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJm0sICJESEtOIiwgImQiKSkKIAkJCXJldHVybiAtRUlPOworCisJCWhvdGtleV9hY3BpX21hc2sgPSBtOworCX0gZWxzZSB7CisJCS8qIG5vIG1hc2sgc3VwcG9ydCBkb2Vzbid0IG1lYW4gbm8gZXZlbnQgc3VwcG9ydC4uLiAqLworCQlob3RrZXlfYWNwaV9tYXNrID0gaG90a2V5X2FsbF9tYXNrOwogCX0KLQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCi0JaG90a2V5X21hc2sgPSBtIHwgKGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrKTsKLQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorCisJLyogc3luYyB1c2Vyc3BhY2UtdmlzaWJsZSBtYXNrICovCisJaG90a2V5X3VzZXJfbWFzayAmPSAoaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9zb3VyY2VfbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBzdGF0aWMgaG90a2V5X21hc2tfd2Fybl9pbmNvbXBsZXRlX21hc2sodm9pZCkKK3sKKwkvKiBsb2cgb25seSB3aGF0IHRoZSB1c2VyIGNhbiBmaXguLi4gKi8KKwljb25zdCB1MzIgd2FudGVkbWFzayA9IGhvdGtleV9kcml2ZXJfbWFzayAmCisJCX4oaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9zb3VyY2VfbWFzaykgJgorCQkoaG90a2V5X2FsbF9tYXNrIHwgVFBBQ1BJX0hLRVlfTlZSQU1fS05PV05fTUFTSyk7CisKKwlpZiAod2FudGVkbWFzaykKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJCSJyZXF1aXJlZCBldmVudHMgMHglMDh4IG5vdCBlbmFibGVkIVxuIiwKKwkJCXdhbnRlZG1hc2spOworfQorCiAvKgorICogU2V0IHRoZSBmaXJtd2FyZSBtYXNrIHdoZW4gc3VwcG9ydGVkCisgKgorICogQWxzbyBjYWxscyBob3RrZXlfbWFza19nZXQgdG8gdXBkYXRlIGhvdGtleV9hY3BpX21hc2suCisgKgorICogTk9URTogZG9lcyBub3Qgc2V0IGJpdHMgaW4gaG90a2V5X3VzZXJfbWFzaywgYnV0IG1heSByZXNldCB0aGVtLgorICoKICAqIENhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZAogICovCiBzdGF0aWMgaW50IGhvdGtleV9tYXNrX3NldCh1MzIgbWFzaykKQEAgLTIwNDIsNjYgKzIxNTAsMTAwIEBACiAJaW50IGk7CiAJaW50IHJjID0gMDsKIAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlpZiAoIXRwX3dhcm5lZC5ob3RrZXlfbWFza19mZiAmJgotCQkgICAgKG1hc2sgPT0gMHhmZmZmIHx8IG1hc2sgPT0gMHhmZmZmZmYgfHwKLQkJICAgICBtYXNrID09IDB4ZmZmZmZmZmYpKSB7Ci0JCQl0cF93YXJuZWQuaG90a2V5X21hc2tfZmYgPSAxOwotCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCSAgICAgICAic2V0dGluZyB0aGUgaG90a2V5IG1hc2sgdG8gMHglMDh4IGlzIGxpa2VseSAiCi0JCQkgICAgICAgIm5vdCB0aGUgYmVzdCB3YXkgdG8gZ28gYWJvdXQgaXRcbiIsIG1hc2spOwotCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCSAgICAgICAicGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBkcml2ZXIgZGVmYXVsdHMsICIKLQkJCSAgICAgICAiYW5kIHJlZmVyIHRvIHVwLXRvLWRhdGUgdGhpbmtwYWQtYWNwaSAiCi0JCQkgICAgICAgImRvY3VtZW50YXRpb25cbiIpOwotCQl9CisJY29uc3QgdTMyIGZ3bWFzayA9IG1hc2sgJiB+aG90a2V5X3NvdXJjZV9tYXNrOwogCi0JCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKKwlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKIAkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJCXUzMiBtID0gMSA8PCBpOwotCQkJLyogZW5hYmxlIGluIGZpcm13YXJlIG1hc2sgb25seSBrZXlzIG5vdCBpbiBOVlJBTQotCQkJICogbW9kZSwgYnV0IGVuYWJsZSB0aGUga2V5IGluIHRoZSBjYWNoZWQgaG90a2V5X21hc2sKLQkJCSAqIHJlZ2FyZGxlc3Mgb2YgbW9kZSwgb3IgdGhlIGtleSB3aWxsIGVuZCB1cAotCQkJICogZGlzYWJsZWQgYnkgaG90a2V5X21hc2tfZ2V0KCkgKi8KIAkJCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwKIAkJCQkJTlVMTCwgIk1IS00iLCAidmRkIiwgaSArIDEsCi0JCQkJCSEhKChtYXNrICYgfmhvdGtleV9zb3VyY2VfbWFzaykgJiBtKSkpIHsKKwkJCQkJISEobWFzayAmICgxIDw8IGkpKSkpIHsKIAkJCQlyYyA9IC1FSU87CiAJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWhvdGtleV9tYXNrID0gKGhvdGtleV9tYXNrICYgfm0pIHwgKG1hc2sgJiBtKTsKIAkJCX0KIAkJfQotCQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAotCi0JCS8qIGhvdGtleV9tYXNrX2dldCBtdXN0IGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgYmVsb3cgKi8KLQkJaWYgKCFob3RrZXlfbWFza19nZXQoKSAmJiAhcmMgJiYKLQkJICAgIChob3RrZXlfbWFzayAmIH5ob3RrZXlfc291cmNlX21hc2spICE9Ci0JCSAgICAgKG1hc2sgJiB+aG90a2V5X3NvdXJjZV9tYXNrKSkgewotCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCSAgICAgICAicmVxdWVzdGVkIGhvdCBrZXkgbWFzayAweCUwOHgsIGJ1dCAiCi0JCQkgICAgICAgImZpcm13YXJlIGZvcmNlZCBpdCB0byAweCUwOHhcbiIsCi0JCQkgICAgICAgbWFzaywgaG90a2V5X21hc2spOwotCQl9Ci0JfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAotCQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCi0JCWhvdGtleV9tYXNrID0gbWFzayAmIGhvdGtleV9zb3VyY2VfbWFzazsKLQkJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKLQkJaG90a2V5X21hc2tfZ2V0KCk7Ci0JCWlmIChob3RrZXlfbWFzayAhPSBtYXNrKSB7Ci0JCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJICAgICAgICJyZXF1ZXN0ZWQgaG90IGtleSBtYXNrIDB4JTA4eCwgIgotCQkJICAgICAgICJmb3JjZWQgdG8gMHglMDh4IChOVlJBTSBwb2xsIG1hc2sgaXMgIgotCQkJICAgICAgICIweCUwOHgpOiBubyBmaXJtd2FyZSBtYXNrIHN1cHBvcnRcbiIsCi0JCQkgICAgICAgbWFzaywgaG90a2V5X21hc2ssIGhvdGtleV9zb3VyY2VfbWFzayk7Ci0JCX0KLSNlbHNlCi0JCWhvdGtleV9tYXNrX2dldCgpOwotCQlyYyA9IC1FTlhJTzsKLSNlbmRpZiAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTCAqLwogCX0KIAorCS8qCisJICogV2UgKm11c3QqIG1ha2UgYW4gaW5jb25kaXRpb25hbCBjYWxsIHRvIGhvdGtleV9tYXNrX2dldCB0bworCSAqIHJlZnJlc2ggaG90a2V5X2FjcGlfbWFzayBhbmQgdXBkYXRlIGhvdGtleV91c2VyX21hc2sKKwkgKgorCSAqIFRha2UgdGhlIG9wcG9ydHVuaXR5IHRvIGFsc28gbG9nIHdoZW4gd2UgY2Fubm90IF9lbmFibGVfCisJICogYSBnaXZlbiBldmVudC4KKwkgKi8KKwlpZiAoIWhvdGtleV9tYXNrX2dldCgpICYmICFyYyAmJiAoZndtYXNrICYgfmhvdGtleV9hY3BpX21hc2spKSB7CisJCXByaW50ayhUUEFDUElfTk9USUNFCisJCSAgICAgICAiYXNrZWQgZm9yIGhvdGtleSBtYXNrIDB4JTA4eCwgYnV0ICIKKwkJICAgICAgICJmaXJtd2FyZSBmb3JjZWQgaXQgdG8gMHglMDh4XG4iLAorCQkgICAgICAgZndtYXNrLCBob3RrZXlfYWNwaV9tYXNrKTsKKwl9CisKKwlob3RrZXlfbWFza193YXJuX2luY29tcGxldGVfbWFzaygpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogU2V0cyBob3RrZXlfdXNlcl9tYXNrIGFuZCB0cmllcyB0byBzZXQgdGhlIGZpcm13YXJlIG1hc2sKKyAqCisgKiBDYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQKKyAqLworc3RhdGljIGludCBob3RrZXlfdXNlcl9tYXNrX3NldChjb25zdCB1MzIgbWFzaykKK3sKKwlpbnQgcmM7CisKKwkvKiBHaXZlIHBlb3BsZSBhIGNoYW5jZSB0byBub3RpY2UgdGhleSBhcmUgZG9pbmcgc29tZXRoaW5nIHRoYXQKKwkgKiBpcyBib3VuZCB0byBnbyBib29tIG9uIHRoZWlyIHVzZXJzIHNvb25lciBvciBsYXRlciAqLworCWlmICghdHBfd2FybmVkLmhvdGtleV9tYXNrX2ZmICYmCisJICAgIChtYXNrID09IDB4ZmZmZiB8fCBtYXNrID09IDB4ZmZmZmZmIHx8CisJICAgICBtYXNrID09IDB4ZmZmZmZmZmYpKSB7CisJCXRwX3dhcm5lZC5ob3RrZXlfbWFza19mZiA9IDE7CisJCXByaW50ayhUUEFDUElfTk9USUNFCisJCSAgICAgICAic2V0dGluZyB0aGUgaG90a2V5IG1hc2sgdG8gMHglMDh4IGlzIGxpa2VseSAiCisJCSAgICAgICAibm90IHRoZSBiZXN0IHdheSB0byBnbyBhYm91dCBpdFxuIiwgbWFzayk7CisJCXByaW50ayhUUEFDUElfTk9USUNFCisJCSAgICAgICAicGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBkcml2ZXIgZGVmYXVsdHMsICIKKwkJICAgICAgICJhbmQgcmVmZXIgdG8gdXAtdG8tZGF0ZSB0aGlua3BhZC1hY3BpICIKKwkJICAgICAgICJkb2N1bWVudGF0aW9uXG4iKTsKKwl9CisKKwkvKiBUcnkgdG8gZW5hYmxlIHdoYXQgdGhlIHVzZXIgYXNrZWQgZm9yLCBwbHVzIHdoYXRldmVyIHdlIG5lZWQuCisJICogdGhpcyBzeW5jcyBldmVyeXRoaW5nIGJ1dCB3b24ndCBlbmFibGUgYml0cyBpbiBob3RrZXlfdXNlcl9tYXNrICovCisJcmMgPSBob3RrZXlfbWFza19zZXQoKG1hc2sgfCBob3RrZXlfZHJpdmVyX21hc2spICYgfmhvdGtleV9zb3VyY2VfbWFzayk7CisKKwkvKiBFbmFibGUgdGhlIGF2YWlsYWJsZSBiaXRzIGluIGhvdGtleV91c2VyX21hc2sgKi8KKwlob3RrZXlfdXNlcl9tYXNrID0gbWFzayAmIChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIFNldHMgdGhlIGRyaXZlciBob3RrZXkgbWFzay4KKyAqCisgKiBDYW4gYmUgY2FsbGVkIGV2ZW4gaWYgdGhlIGhvdGtleSBzdWJkcml2ZXIgaXMgaW5hY3RpdmUKKyAqLworc3RhdGljIGludCB0cGFjcGlfaG90a2V5X2RyaXZlcl9tYXNrX3NldChjb25zdCB1MzIgbWFzaykKK3sKKwlpbnQgcmM7CisKKwkvKiBEbyB0aGUgcmlnaHQgdGhpbmcgaWYgaG90a2V5X2luaXQgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQgKi8KKwlpZiAoIXRwX2ZlYXR1cmVzLmhvdGtleSkgeworCQlob3RrZXlfZHJpdmVyX21hc2sgPSBtYXNrOworCQlyZXR1cm4gMDsKKwl9CisKKwltdXRleF9sb2NrKCZob3RrZXlfbXV0ZXgpOworCisJSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAorCWhvdGtleV9kcml2ZXJfbWFzayA9IG1hc2s7CisjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKKwlob3RrZXlfc291cmNlX21hc2sgfD0gKG1hc2sgJiB+aG90a2V5X2FsbF9tYXNrKTsKKyNlbmRpZgorCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECisKKwlyYyA9IGhvdGtleV9tYXNrX3NldCgoaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9kcml2ZXJfbWFzaykgJgorCQkJCQkJCX5ob3RrZXlfc291cmNlX21hc2spOworCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKKwogCXJldHVybiByYzsKIH0KIApAQCAtMjEzNywxMSArMjI3OSwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdHBhY3BpX2lucHV0X3NlbmRfa2V5KHVuc2lnbmVkIGludCBzY2FuY29kZSkKKy8qIERvIE5PVCBjYWxsIHdpdGhvdXQgdmFsaWRhdGluZyBzY2FuY29kZSBmaXJzdCAqLworc3RhdGljIHZvaWQgdHBhY3BpX2lucHV0X3NlbmRfa2V5KGNvbnN0IHVuc2lnbmVkIGludCBzY2FuY29kZSkKIHsKLQl1bnNpZ25lZCBpbnQga2V5Y29kZTsKLQotCWtleWNvZGUgPSBob3RrZXlfa2V5Y29kZV9tYXBbc2NhbmNvZGVdOworCWNvbnN0IHVuc2lnbmVkIGludCBrZXljb2RlID0gaG90a2V5X2tleWNvZGVfbWFwW3NjYW5jb2RlXTsKIAogCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkgewogCQltdXRleF9sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7CkBAIC0yMTYyLDE5ICsyMzAzLDI4IEBACiAJfQogfQogCisvKiBEbyBOT1QgY2FsbCB3aXRob3V0IHZhbGlkYXRpbmcgc2NhbmNvZGUgZmlyc3QgKi8KK3N0YXRpYyB2b2lkIHRwYWNwaV9pbnB1dF9zZW5kX2tleV9tYXNrZWQoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQoreworCWhvdGtleV9kcml2ZXJfZXZlbnQoc2NhbmNvZGUpOworCWlmIChob3RrZXlfdXNlcl9tYXNrICYgKDEgPDwgc2NhbmNvZGUpKQorCQl0cGFjcGlfaW5wdXRfc2VuZF9rZXkoc2NhbmNvZGUpOworfQorCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKIHN0YXRpYyBzdHJ1Y3QgdHBfYWNwaV9kcnZfc3RydWN0IGlibV9ob3RrZXlfYWNwaWRyaXZlcjsKIAorLyogRG8gTk9UIGNhbGwgd2l0aG91dCB2YWxpZGF0aW5nIHNjYW5jb2RlIGZpcnN0ICovCiBzdGF0aWMgdm9pZCB0cGFjcGlfaG90a2V5X3NlbmRfa2V5KHVuc2lnbmVkIGludCBzY2FuY29kZSkKIHsKLQl0cGFjcGlfaW5wdXRfc2VuZF9rZXkoc2NhbmNvZGUpOworCXRwYWNwaV9pbnB1dF9zZW5kX2tleV9tYXNrZWQoc2NhbmNvZGUpOwogCWlmIChob3RrZXlfcmVwb3J0X21vZGUgPCAyKSB7CiAJCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoaWJtX2hvdGtleV9hY3BpZHJpdmVyLmRldmljZSwKLQkJCQkJCTB4ODAsIDB4MTAwMSArIHNjYW5jb2RlKTsKKwkJCQkweDgwLCBUUF9IS0VZX0VWX0hPVEtFWV9CQVNFICsgc2NhbmNvZGUpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgaG90a2V5X3JlYWRfbnZyYW0oc3RydWN0IHRwX252cmFtX3N0YXRlICpuLCB1MzIgbSkKK3N0YXRpYyB2b2lkIGhvdGtleV9yZWFkX252cmFtKHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqbiwgY29uc3QgdTMyIG0pCiB7CiAJdTggZDsKIApAQCAtMjIxMCwyMSArMjM2MCwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgaG90a2V5X2NvbXBhcmVfYW5kX2lzc3VlX2V2ZW50KHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqb2xkbiwKKwkJCQkJICAgc3RydWN0IHRwX252cmFtX3N0YXRlICpuZXduLAorCQkJCQkgICBjb25zdCB1MzIgZXZlbnRfbWFzaykKK3sKKwogI2RlZmluZSBUUEFDUElfQ09NUEFSRV9LRVkoX19zY2FuY29kZSwgX19tZW1iZXIpIFwKIAlkbyB7IFwKLQkJaWYgKChtYXNrICYgKDEgPDwgX19zY2FuY29kZSkpICYmIFwKKwkJaWYgKChldmVudF9tYXNrICYgKDEgPDwgX19zY2FuY29kZSkpICYmIFwKIAkJICAgIG9sZG4tPl9fbWVtYmVyICE9IG5ld24tPl9fbWVtYmVyKSBcCi0JCXRwYWNwaV9ob3RrZXlfc2VuZF9rZXkoX19zY2FuY29kZSk7IFwKKwkJCXRwYWNwaV9ob3RrZXlfc2VuZF9rZXkoX19zY2FuY29kZSk7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFRQQUNQSV9NQVlfU0VORF9LRVkoX19zY2FuY29kZSkgXAotCWRvIHsgaWYgKG1hc2sgJiAoMSA8PCBfX3NjYW5jb2RlKSkgXAotCQl0cGFjcGlfaG90a2V5X3NlbmRfa2V5KF9fc2NhbmNvZGUpOyB9IHdoaWxlICgwKQorCWRvIHsgXAorCQlpZiAoZXZlbnRfbWFzayAmICgxIDw8IF9fc2NhbmNvZGUpKSBcCisJCQl0cGFjcGlfaG90a2V5X3NlbmRfa2V5KF9fc2NhbmNvZGUpOyBcCisJfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgaG90a2V5X2NvbXBhcmVfYW5kX2lzc3VlX2V2ZW50KHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqb2xkbiwKLQkJCQkJICAgc3RydWN0IHRwX252cmFtX3N0YXRlICpuZXduLAotCQkJCQkgICB1MzIgbWFzaykKLXsKIAlUUEFDUElfQ09NUEFSRV9LRVkoVFBfQUNQSV9IT1RLRVlTQ0FOX1RISU5LUEFELCB0aGlua3BhZF90b2dnbGUpOwogCVRQQUNQSV9DT01QQVJFX0tFWShUUF9BQ1BJX0hPVEtFWVNDQU5fRk5TUEFDRSwgem9vbV90b2dnbGUpOwogCVRQQUNQSV9DT01QQVJFX0tFWShUUF9BQ1BJX0hPVEtFWVNDQU5fRk5GNywgZGlzcGxheV90b2dnbGUpOwpAQCAtMjI3MCwxNSArMjQyMywyMiBAQAogCQkJfQogCQl9CiAJfQotfQogCiAjdW5kZWYgVFBBQ1BJX0NPTVBBUkVfS0VZCiAjdW5kZWYgVFBBQ1BJX01BWV9TRU5EX0tFWQorfQogCisvKgorICogUG9sbGluZyBkcml2ZXIKKyAqCisgKiBXZSB0cmFjayBhbGwgZXZlbnRzIGluIGhvdGtleV9zb3VyY2VfbWFzayBhbGwgdGhlIHRpbWUsIHNpbmNlCisgKiBtb3N0IG9mIHRoZW0gYXJlIGVkZ2UtYmFzZWQuICBXZSBvbmx5IGlzc3VlIHRob3NlIHJlcXVlc3RlZCBieQorICogaG90a2V5X3VzZXJfbWFzayBvciBob3RrZXlfZHJpdmVyX21hc2ssIHRob3VnaC4KKyAqLwogc3RhdGljIGludCBob3RrZXlfa3RocmVhZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCB0cF9udnJhbV9zdGF0ZSBzWzJdOwotCXUzMiBtYXNrOworCXUzMiBwb2xsX21hc2ssIGV2ZW50X21hc2s7CiAJdW5zaWduZWQgaW50IHNpLCBzbzsKIAl1bnNpZ25lZCBsb25nIHQ7CiAJdW5zaWduZWQgaW50IGNoYW5nZV9kZXRlY3RvciwgbXVzdF9yZXNldDsKQEAgLTIyOTgsMTAgKzI0NTgsMTIgQEAKIAkvKiBJbml0aWFsIHN0YXRlIGZvciBjb21wYXJlcyAqLwogCW11dGV4X2xvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7CiAJY2hhbmdlX2RldGVjdG9yID0gaG90a2V5X2NvbmZpZ19jaGFuZ2U7Ci0JbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrOworCXBvbGxfbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzazsKKwlldmVudF9tYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYKKwkJCShob3RrZXlfZHJpdmVyX21hc2sgfCBob3RrZXlfdXNlcl9tYXNrKTsKIAlwb2xsX2ZyZXEgPSBob3RrZXlfcG9sbF9mcmVxOwogCW11dGV4X3VubG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKLQlob3RrZXlfcmVhZF9udnJhbSgmc1tzb10sIG1hc2spOworCWhvdGtleV9yZWFkX252cmFtKCZzW3NvXSwgcG9sbF9tYXNrKTsKIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCWlmICh0ID09IDApIHsKQEAgLTIzMjQsMTUgKzI0ODYsMTcgQEAKIAkJCXQgPSAwOwogCQkJY2hhbmdlX2RldGVjdG9yID0gaG90a2V5X2NvbmZpZ19jaGFuZ2U7CiAJCX0KLQkJbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrOworCQlwb2xsX21hc2sgPSBob3RrZXlfc291cmNlX21hc2s7CisJCWV2ZW50X21hc2sgPSBob3RrZXlfc291cmNlX21hc2sgJgorCQkJCShob3RrZXlfZHJpdmVyX21hc2sgfCBob3RrZXlfdXNlcl9tYXNrKTsKIAkJcG9sbF9mcmVxID0gaG90a2V5X3BvbGxfZnJlcTsKIAkJbXV0ZXhfdW5sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwogCi0JCWlmIChsaWtlbHkobWFzaykpIHsKLQkJCWhvdGtleV9yZWFkX252cmFtKCZzW3NpXSwgbWFzayk7CisJCWlmIChsaWtlbHkocG9sbF9tYXNrKSkgeworCQkJaG90a2V5X3JlYWRfbnZyYW0oJnNbc2ldLCBwb2xsX21hc2spOwogCQkJaWYgKGxpa2VseShzaSAhPSBzbykpIHsKIAkJCQlob3RrZXlfY29tcGFyZV9hbmRfaXNzdWVfZXZlbnQoJnNbc29dLCAmc1tzaV0sCi0JCQkJCQkJCW1hc2spOworCQkJCQkJCQlldmVudF9tYXNrKTsKIAkJCX0KIAkJfQogCkBAIC0yMzY0LDEwICsyNTI4LDEyIEBACiAvKiBjYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQgKi8KIHN0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwKGJvb2wgbWF5X3dhcm4pCiB7Ci0JdTMyIGhvdGtleXNfdG9fcG9sbCA9IGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrOworCWNvbnN0IHUzMiBwb2xsX2RyaXZlcl9tYXNrID0gaG90a2V5X2RyaXZlcl9tYXNrICYgaG90a2V5X3NvdXJjZV9tYXNrOworCWNvbnN0IHUzMiBwb2xsX3VzZXJfbWFzayA9IGhvdGtleV91c2VyX21hc2sgJiBob3RrZXlfc291cmNlX21hc2s7CiAKLQlpZiAoaG90a2V5c190b19wb2xsICE9IDAgJiYgaG90a2V5X3BvbGxfZnJlcSA+IDAgJiYKLQkgICAgKHRwYWNwaV9pbnB1dGRldi0+dXNlcnMgPiAwIHx8IGhvdGtleV9yZXBvcnRfbW9kZSA8IDIpKSB7CisJaWYgKGhvdGtleV9wb2xsX2ZyZXEgPiAwICYmCisJICAgIChwb2xsX2RyaXZlcl9tYXNrIHx8CisJICAgICAocG9sbF91c2VyX21hc2sgJiYgdHBhY3BpX2lucHV0ZGV2LT51c2VycyA+IDApKSkgewogCQlpZiAoIXRwYWNwaV9ob3RrZXlfdGFzaykgewogCQkJdHBhY3BpX2hvdGtleV90YXNrID0ga3RocmVhZF9ydW4oaG90a2V5X2t0aHJlYWQsCiAJCQkJCU5VTEwsIFRQQUNQSV9OVlJBTV9LVEhSRUFEX05BTUUpOwpAQCAtMjM4MCwxMiArMjU0NiwxMyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaG90a2V5X3BvbGxfc3RvcF9zeW5jKCk7Ci0JCWlmIChtYXlfd2FybiAmJiBob3RrZXlzX3RvX3BvbGwgIT0gMCAmJgorCQlpZiAobWF5X3dhcm4gJiYgKHBvbGxfZHJpdmVyX21hc2sgfHwgcG9sbF91c2VyX21hc2spICYmCiAJCSAgICBob3RrZXlfcG9sbF9mcmVxID09IDApIHsKIAkJCXByaW50ayhUUEFDUElfTk9USUNFCi0JCQkJImhvdCBrZXlzIDB4JTA4eCByZXF1aXJlIHBvbGxpbmcsICIKLQkJCQkid2hpY2ggaXMgY3VycmVudGx5IGRpc2FibGVkXG4iLAotCQkJCWhvdGtleXNfdG9fcG9sbCk7CisJCQkJImhvdCBrZXlzIDB4JTA4eCBhbmQvb3IgZXZlbnRzIDB4JTA4eCAiCisJCQkJInJlcXVpcmUgcG9sbGluZywgd2hpY2ggaXMgY3VycmVudGx5ICIKKwkJCQkiZGlzYWJsZWRcbiIsCisJCQkJcG9sbF91c2VyX21hc2ssIHBvbGxfZHJpdmVyX21hc2spOwogCQl9CiAJfQogfQpAQCAtMjQwMyw5ICsyNTcwLDcgQEAKIAlpZiAoIWZyZXEpCiAJCWhvdGtleV9wb2xsX3N0b3Bfc3luYygpOwogCi0JSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAogCWhvdGtleV9wb2xsX2ZyZXEgPSBmcmVxOwotCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECiB9CiAKICNlbHNlIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMICovCkBAIC0yNDQwLDcgKzI2MDUsOCBAQAogc3RhdGljIHZvaWQgaG90a2V5X2lucHV0ZGV2X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAkvKiBkaXNhYmxlIGhvdGtleSBwb2xsaW5nIHdoZW4gcG9zc2libGUgKi8KLQlpZiAodHBhY3BpX2xpZmVjeWNsZSA9PSBUUEFDUElfTElGRV9SVU5OSU5HKQorCWlmICh0cGFjcGlfbGlmZWN5Y2xlID09IFRQQUNQSV9MSUZFX1JVTk5JTkcgJiYKKwkgICAgIShob3RrZXlfc291cmNlX21hc2sgJiBob3RrZXlfZHJpdmVyX21hc2spKQogCQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGZhbHNlKTsKIH0KIApAQCAtMjQ4OCwxNSArMjY1NCw3IEBACiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmVzOwotCi0JaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JcmVzID0gaG90a2V5X21hc2tfZ2V0KCk7Ci0JbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwotCi0JcmV0dXJuIChyZXMpPwotCQlyZXMgOiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgaG90a2V5X21hc2spOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgaG90a2V5X3VzZXJfbWFzayk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhvdGtleV9tYXNrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTI1MTIsNyArMjY3MCw3IEBACiAJaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlyZXMgPSBob3RrZXlfbWFza19zZXQodCk7CisJcmVzID0gaG90a2V5X3VzZXJfbWFza19zZXQodCk7CiAKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAogCWhvdGtleV9wb2xsX3NldHVwKHRydWUpOwpAQCAtMjU5NCw2ICsyNzUyLDggQEAKIAkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHQ7CisJdTMyIHJfZXY7CisJaW50IHJjOwogCiAJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAweGZmZmZmZmZmVUwsICZ0KSB8fAogCQkoKHQgJiB+VFBBQ1BJX0hLRVlfTlZSQU1fS05PV05fTUFTSykgIT0gMCkpCkBAIC0yNjA2LDE0ICsyNzY2LDI4IEBACiAJaG90a2V5X3NvdXJjZV9tYXNrID0gdDsKIAlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAogCisJcmMgPSBob3RrZXlfbWFza19zZXQoKGhvdGtleV91c2VyX21hc2sgfCBob3RrZXlfZHJpdmVyX21hc2spICYKKwkJCX5ob3RrZXlfc291cmNlX21hc2spOwogCWhvdGtleV9wb2xsX3NldHVwKHRydWUpOwotCWhvdGtleV9tYXNrX3NldChob3RrZXlfbWFzayk7CisKKwkvKiBjaGVjayBpZiBldmVudHMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgZ290IGRpc2FibGVkICovCisJcl9ldiA9IGhvdGtleV9kcml2ZXJfbWFzayAmIH4oaG90a2V5X2FjcGlfbWFzayAmIGhvdGtleV9hbGxfbWFzaykKKwkJJiB+aG90a2V5X3NvdXJjZV9tYXNrICYgVFBBQ1BJX0hLRVlfTlZSQU1fS05PV05fTUFTSzsKIAogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIAorCWlmIChyYyA8IDApCisJCXByaW50ayhUUEFDUElfRVJSICJob3RrZXlfc291cmNlX21hc2s6IGZhaWxlZCB0byB1cGRhdGUgdGhlIgorCQkJImZpcm13YXJlIGV2ZW50IG1hc2shXG4iKTsKKworCWlmIChyX2V2KQorCQlwcmludGsoVFBBQ1BJX05PVElDRSAiaG90a2V5X3NvdXJjZV9tYXNrOiAiCisJCQkic29tZSBpbXBvcnRhbnQgZXZlbnRzIHdlcmUgZGlzYWJsZWQ6ICIKKwkJCSIweCUwNHhcbiIsIHJfZXYpOworCiAJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJob3RrZXlfc291cmNlX21hc2siLCAic2V0IHRvIDB4JTA4bHhcbiIsIHQpOwogCi0JcmV0dXJuIGNvdW50OworCXJldHVybiAocmMgPCAwKSA/IHJjIDogY291bnQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9ob3RrZXlfc291cmNlX21hc2sgPQpAQCAtMjczMSw5ICsyOTA1LDggQEAKIAogc3RhdGljIHZvaWQgaG90a2V5X3dha2V1cF9yZWFzb25fbm90aWZ5X2NoYW5nZSh2b2lkKQogewotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykKLQkJc3lzZnNfbm90aWZ5KCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosIE5VTEwsCi0JCQkgICAgICJ3YWtldXBfcmVhc29uIik7CisJc3lzZnNfbm90aWZ5KCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosIE5VTEwsCisJCSAgICAgIndha2V1cF9yZWFzb24iKTsKIH0KIAogLyogc3lzZnMgd2FrZXVwIGhvdHVucGx1Z19jb21wbGV0ZSAocG9sbGFibGUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNzUwLDkgKzI5MjMsOCBAQAogCiBzdGF0aWMgdm9pZCBob3RrZXlfd2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZV9ub3RpZnlfY2hhbmdlKHZvaWQpCiB7Ci0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKQotCQlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKLQkJCSAgICAgIndha2V1cF9ob3R1bnBsdWdfY29tcGxldGUiKTsKKwlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKKwkJICAgICAid2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZSIpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI3NjAsMjcgKzI5MzIsMTkgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpob3RrZXlfYXR0cmlidXRlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmRldl9hdHRyX2hvdGtleV9lbmFibGUuYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X2Jpb3NfZW5hYmxlZC5hdHRyLAorCSZkZXZfYXR0cl9ob3RrZXlfYmlvc19tYXNrLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9yZXBvcnRfbW9kZS5hdHRyLAotI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCisJJmRldl9hdHRyX2hvdGtleV93YWtldXBfcmVhc29uLmF0dHIsCisJJmRldl9hdHRyX2hvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9tYXNrLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9hbGxfbWFzay5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfcmVjb21tZW5kZWRfbWFzay5hdHRyLAorI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCiAJJmRldl9hdHRyX2hvdGtleV9zb3VyY2VfbWFzay5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfcG9sbF9mcmVxLmF0dHIsCiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpob3RrZXlfbWFza19hdHRyaWJ1dGVzW10gX19pbml0ZGF0YSA9IHsKLQkmZGV2X2F0dHJfaG90a2V5X2Jpb3NfbWFzay5hdHRyLAotI2lmbmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAotCSZkZXZfYXR0cl9ob3RrZXlfbWFzay5hdHRyLAotCSZkZXZfYXR0cl9ob3RrZXlfYWxsX21hc2suYXR0ciwKLQkmZGV2X2F0dHJfaG90a2V5X3JlY29tbWVuZGVkX21hc2suYXR0ciwKLSNlbmRpZgotCSZkZXZfYXR0cl9ob3RrZXlfd2FrZXVwX3JlYXNvbi5hdHRyLAotCSZkZXZfYXR0cl9ob3RrZXlfd2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZS5hdHRyLAotfTsKLQogLyoKICAqIFN5bmMgYm90aCB0aGUgaHcgYW5kIHN3IGJsb2NraW5nIHN0YXRlIG9mIGFsbCBzd2l0Y2hlcwogICovCkBAIC0yODQzLDE2ICszMDA3LDE2IEBACiAKIAlrZnJlZShob3RrZXlfa2V5Y29kZV9tYXApOwogCi0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleSkgewotCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCB8IFRQQUNQSV9EQkdfSEtFWSwKLQkJCSAgICJyZXN0b3Jpbmcgb3JpZ2luYWwgaG90IGtleSBtYXNrXG4iKTsKLQkJLyogbm8gc2hvcnQtY2lyY3VpdCBib29sZWFuIG9wZXJhdG9yIGJlbG93ISAqLwotCQlpZiAoKGhvdGtleV9tYXNrX3NldChob3RrZXlfb3JpZ19tYXNrKSB8Ci0JCSAgICAgaG90a2V5X3N0YXR1c19zZXQoZmFsc2UpKSAhPSAwKQotCQkJcHJpbnRrKFRQQUNQSV9FUlIKLQkJCSAgICAgICAiZmFpbGVkIHRvIHJlc3RvcmUgaG90IGtleSBtYXNrICIKLQkJCSAgICAgICAidG8gQklPUyBkZWZhdWx0c1xuIik7Ci0JfQorCWRiZ19wcmludGsoVFBBQ1BJX0RCR19FWElUIHwgVFBBQ1BJX0RCR19IS0VZLAorCQkgICAicmVzdG9yaW5nIG9yaWdpbmFsIEhLRVkgc3RhdHVzIGFuZCBtYXNrXG4iKTsKKwkvKiB5ZXMsIHRoZXJlIGlzIGEgYml0d2lzZSBvciBiZWxvdywgd2Ugd2FudCB0aGUKKwkgKiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGV2ZW4gaWYgb25lIG9mIHRoZW0gZmFpbCAqLworCWlmICgoKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrICYmCisJICAgICAgaG90a2V5X21hc2tfc2V0KGhvdGtleV9vcmlnX21hc2spKSB8CisJICAgICBob3RrZXlfc3RhdHVzX3NldChmYWxzZSkpICE9IDApCisJCXByaW50ayhUUEFDUElfRVJSCisJCSAgICAgICAiZmFpbGVkIHRvIHJlc3RvcmUgaG90IGtleSBtYXNrICIKKwkJICAgICAgICJ0byBCSU9TIGRlZmF1bHRzXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGhvdGtleV91bm1hcChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCkBAIC0yODY0LDYgKzMwMjgsMzUgQEAKIAl9CiB9CiAKKy8qCisgKiBIS0VZIHF1aXJrczoKKyAqICAgVFBBQ1BJX0hLX1FfSU5JTUFTSzoJU3VwcG9ydHMgRk4rRjMsRk4rRjQsRk4rRjEyCisgKi8KKworI2RlZmluZQlUUEFDUElfSEtfUV9JTklNQVNLCTB4MDAwMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwYWNwaV9xdWlyayB0cGFjcGlfaG90a2V5X3F0YWJsZVtdIF9faW5pdGNvbnN0ID0geworCVRQQUNQSV9RX0lCTSgnSScsICdIJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIDYwMEUgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnTicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiA2MDBFICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ0QnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogNzcwLCA3NzBFLCA3NzBFRCAqLworCVRQQUNQSV9RX0lCTSgnSScsICdXJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMG0gKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnVicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjBwICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJzAnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIxZSwgQTIyZSAqLworCVRQQUNQSV9RX0lCTSgnSycsICdVJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMWUgKi8KKwlUUEFDUElfUV9JQk0oJ0snLCAnWCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjFtLCBBMjJtICovCisJVFBBQ1BJX1FfSUJNKCdLJywgJ1knLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIxcCwgQTIycCAqLworCVRQQUNQSV9RX0lCTSgnMScsICdCJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMmUgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnMycsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjJtICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0UnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTMwL3AgKDApICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0MnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogUjMwICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0YnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogUjMxICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ1knLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogVDIwICovCisJVFBBQ1BJX1FfSUJNKCdLJywgJ1onLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogVDIxICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJzYnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogVDIyICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ1onLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogWDIwLCBYMjEgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnRCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBYMjIsIFgyMywgWDI0ICovCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBob3RrZXlfaW5pdChzdHJ1Y3QgaWJtX2luaXRfc3RydWN0ICppaWJtKQogewogCS8qIFJlcXVpcmVtZW50cyBmb3IgY2hhbmdpbmcgdGhlIGRlZmF1bHQga2V5bWFwczoKQEAgLTI5MDYsOSArMzA5OSw3IEBACiAJCUtFWV9VTktOT1dOLAkvKiAweDBEOiBGTitJTlNFUlQgKi8KIAkJS0VZX1VOS05PV04sCS8qIDB4MEU6IEZOK0RFTEVURSAqLwogCi0JCS8qIGJyaWdodG5lc3M6IGZpcm13YXJlIGFsd2F5cyByZWFjdHMgdG8gdGhlbSwgdW5sZXNzCi0JCSAqIFgub3JnIGRpZCBzb21lIHRyaWNrcyBpbiB0aGUgcmFkZW9uIEJJT1Mgc2NyYXRjaAotCQkgKiByZWdpc3RlcnMgb2YgKnNvbWUqIG1vZGVscyAqLworCQkvKiBicmlnaHRuZXNzOiBmaXJtd2FyZSBhbHdheXMgcmVhY3RzIHRvIHRoZW0gKi8KIAkJS0VZX1JFU0VSVkVELAkvKiAweDBGOiBGTitIT01FIChicmlnaHRuZXNzIHVwKSAqLwogCQlLRVlfUkVTRVJWRUQsCS8qIDB4MTA6IEZOK0VORCAoYnJpZ2h0bmVzcyBkb3duKSAqLwogCkBAIC0yOTgzLDYgKzMxNzQsOCBAQAogCWludCBzdGF0dXM7CiAJaW50IGhrZXl2OwogCisJdW5zaWduZWQgbG9uZyBxdWlya3M7CisKIAl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkiaW5pdGlhbGl6aW5nIGhvdGtleSBzdWJkcml2ZXJcbiIpOwogCkBAIC0zMDA4LDkgKzMyMDEsMTYgQEAKIAlpZiAoIXRwX2ZlYXR1cmVzLmhvdGtleSkKIAkJcmV0dXJuIDE7CiAKKwlxdWlya3MgPSB0cGFjcGlfY2hlY2tfcXVpcmtzKHRwYWNwaV9ob3RrZXlfcXRhYmxlLAorCQkJCSAgICAgQVJSQVlfU0laRSh0cGFjcGlfaG90a2V5X3F0YWJsZSkpOworCiAJdHBhY3BpX2Rpc2FibGVfYnJpZ2h0bmVzc19kZWxheSgpOwogCi0JaG90a2V5X2Rldl9hdHRyaWJ1dGVzID0gY3JlYXRlX2F0dHJfc2V0KDEzLCBOVUxMKTsKKwkvKiBNVVNUIGhhdmUgZW5vdWdoIHNwYWNlIGZvciBhbGwgYXR0cmlidXRlcyB0byBiZSBhZGRlZCB0bworCSAqIGhvdGtleV9kZXZfYXR0cmlidXRlcyAqLworCWhvdGtleV9kZXZfYXR0cmlidXRlcyA9IGNyZWF0ZV9hdHRyX3NldCgKKwkJCQkJQVJSQVlfU0laRShob3RrZXlfYXR0cmlidXRlcykgKyAyLAorCQkJCQlOVUxMKTsKIAlpZiAoIWhvdGtleV9kZXZfYXR0cmlidXRlcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzID0gYWRkX21hbnlfdG9fYXR0cl9zZXQoaG90a2V5X2Rldl9hdHRyaWJ1dGVzLApAQCAtMzAxOSw3ICszMjE5LDcgQEAKIAlpZiAocmVzKQogCQlnb3RvIGVycl9leGl0OwogCi0JLyogbWFzayBub3Qgc3VwcG9ydGVkIG9uIDU3MCwgNjAwZS94LCA3NzBlLCA3NzB4LCBBMjFlLCBBMnhtL3AsCisJLyogbWFzayBub3Qgc3VwcG9ydGVkIG9uIDYwMGUveCwgNzcwZSwgNzcweCwgQTIxZSwgQTJ4bS9wLAogCSAgIEEzMCwgUjMwLCBSMzEsIFQyMC0yMiwgWDIwLTIxLCBYMjItMjQuICBEZXRlY3RlZCBieSBjaGVja2luZwogCSAgIGZvciBIS0VZIGludGVyZmFjZSB2ZXJzaW9uIDB4MTAwICovCiAJaWYgKGFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZoa2V5diwgIk1IS1YiLCAicWQiKSkgewpAQCAtMzAzMywxMCArMzIzMywyMiBAQAogCQkJICogTUhLViAweDEwMCBpbiBBMzEsIFI0MCwgUjQwZSwKIAkJCSAqIFQ0eCwgWDMxLCBhbmQgbGF0ZXIKIAkJCSAqLwotCQkJdHBfZmVhdHVyZXMuaG90a2V5X21hc2sgPSAxOwogCQkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkJCSJmaXJtd2FyZSBIS0VZIGludGVyZmFjZSB2ZXJzaW9uOiAweCV4XG4iLAogCQkJCWhrZXl2KTsKKworCQkJLyogUGFyYW5vaWEgY2hlY2sgQU5EIGluaXQgaG90a2V5X2FsbF9tYXNrICovCisJCQlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZob3RrZXlfYWxsX21hc2ssCisJCQkJCSJNSEtBIiwgInFkIikpIHsKKwkJCQlwcmludGsoVFBBQ1BJX0VSUgorCQkJCSAgICAgICAibWlzc2luZyBNSEtBIGhhbmRsZXIsICIKKwkJCQkgICAgICAgInBsZWFzZSByZXBvcnQgdGhpcyB0byAlc1xuIiwKKwkJCQkgICAgICAgVFBBQ1BJX01BSUwpOworCQkJCS8qIEZhbGxiYWNrOiBwcmUtaW5pdCBmb3IgRk4rRjMsRjQsRjEyICovCisJCQkJaG90a2V5X2FsbF9tYXNrID0gMHgwODBjVTsKKwkJCX0gZWxzZSB7CisJCQkJdHBfZmVhdHVyZXMuaG90a2V5X21hc2sgPSAxOworCQkJfQogCQl9CiAJfQogCkBAIC0zMDQ0LDMyICszMjU2LDIzIEBACiAJCSJob3RrZXkgbWFza3MgYXJlICVzXG4iLAogCQlzdHJfc3VwcG9ydGVkKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSk7CiAKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKLQkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmaG90a2V5X2FsbF9tYXNrLAotCQkJCSJNSEtBIiwgInFkIikpIHsKLQkJCXByaW50ayhUUEFDUElfRVJSCi0JCQkgICAgICAgIm1pc3NpbmcgTUhLQSBoYW5kbGVyLCAiCi0JCQkgICAgICAgInBsZWFzZSByZXBvcnQgdGhpcyB0byAlc1xuIiwKLQkJCSAgICAgICBUUEFDUElfTUFJTCk7Ci0JCQkvKiBGTitGMTIsIEZOK0Y0LCBGTitGMyAqLwotCQkJaG90a2V5X2FsbF9tYXNrID0gMHgwODBjVTsKLQkJfQotCX0KKwkvKiBJbml0IGhvdGtleV9hbGxfbWFzayBpZiBub3QgaW5pdGlhbGl6ZWQgeWV0ICovCisJaWYgKCF0cF9mZWF0dXJlcy5ob3RrZXlfbWFzayAmJiAhaG90a2V5X2FsbF9tYXNrICYmCisJICAgIChxdWlya3MgJiBUUEFDUElfSEtfUV9JTklNQVNLKSkKKwkJaG90a2V5X2FsbF9tYXNrID0gMHgwODBjVTsgIC8qIEZOK0YxMiwgRk4rRjQsIEZOK0YzICovCiAKLQkvKiBob3RrZXlfc291cmNlX21hc2sgKm11c3QqIGJlIHplcm8gZm9yCi0JICogdGhlIGZpcnN0IGhvdGtleV9tYXNrX2dldCAqLworCS8qIEluaXQgaG90a2V5X2FjcGlfbWFzayBhbmQgaG90a2V5X29yaWdfbWFzayAqLwogCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgeworCQkvKiBob3RrZXlfc291cmNlX21hc2sgKm11c3QqIGJlIHplcm8gZm9yCisJCSAqIHRoZSBmaXJzdCBob3RrZXlfbWFza19nZXQgdG8gcmV0dXJuIGhvdGtleV9vcmlnX21hc2sgKi8KIAkJcmVzID0gaG90a2V5X21hc2tfZ2V0KCk7CiAJCWlmIChyZXMpCiAJCQlnb3RvIGVycl9leGl0OwogCi0JCWhvdGtleV9vcmlnX21hc2sgPSBob3RrZXlfbWFzazsKLQkJcmVzID0gYWRkX21hbnlfdG9fYXR0cl9zZXQoCi0JCQkJaG90a2V5X2Rldl9hdHRyaWJ1dGVzLAotCQkJCWhvdGtleV9tYXNrX2F0dHJpYnV0ZXMsCi0JCQkJQVJSQVlfU0laRShob3RrZXlfbWFza19hdHRyaWJ1dGVzKSk7Ci0JCWlmIChyZXMpCi0JCQlnb3RvIGVycl9leGl0OworCQlob3RrZXlfb3JpZ19tYXNrID0gaG90a2V5X2FjcGlfbWFzazsKKwl9IGVsc2UgeworCQlob3RrZXlfb3JpZ19tYXNrID0gaG90a2V5X2FsbF9tYXNrOworCQlob3RrZXlfYWNwaV9tYXNrID0gaG90a2V5X2FsbF9tYXNrOwogCX0KIAogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0RFQlVHRkFDSUxJVElFUwpAQCAtMzE4MywxNCArMzM4Niw5IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKLQkJaG90a2V5X3NvdXJjZV9tYXNrID0gVFBBQ1BJX0hLRVlfTlZSQU1fR09PRF9NQVNLCi0JCQkJCSYgfmhvdGtleV9hbGxfbWFzawotCQkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKLQl9IGVsc2UgewotCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKLQkJCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2s7Ci0JfQorCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSworCQkJCSYgfmhvdGtleV9hbGxfbWFzaworCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOwogCiAJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkgICAgImhvdGtleSBzb3VyY2UgbWFzayAweCUwOHgsIHBvbGxpbmcgZnJlcSAldVxuIiwKQEAgLTMyMDQsMTMgKzM0MDIsMTggQEAKIAkJaG90a2V5X2V4aXQoKTsKIAkJcmV0dXJuIHJlczsKIAl9Ci0JcmVzID0gaG90a2V5X21hc2tfc2V0KCgoaG90a2V5X2FsbF9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKQotCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrKQotCQkJCXwgaG90a2V5X29yaWdfbWFzayk7CisJcmVzID0gaG90a2V5X21hc2tfc2V0KCgoaG90a2V5X2FsbF9tYXNrICYgfmhvdGtleV9yZXNlcnZlZF9tYXNrKQorCQkJICAgICAgIHwgaG90a2V5X2RyaXZlcl9tYXNrKQorCQkJICAgICAgJiB+aG90a2V5X3NvdXJjZV9tYXNrKTsKIAlpZiAocmVzIDwgMCAmJiByZXMgIT0gLUVOWElPKSB7CiAJCWhvdGtleV9leGl0KCk7CiAJCXJldHVybiByZXM7CiAJfQorCWhvdGtleV91c2VyX21hc2sgPSAoaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9zb3VyY2VfbWFzaykKKwkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCisJCSJpbml0aWFsIG1hc2tzOiB1c2VyPTB4JTA4eCwgZnc9MHglMDh4LCBwb2xsPTB4JTA4eFxuIiwKKwkJaG90a2V5X3VzZXJfbWFzaywgaG90a2V5X2FjcGlfbWFzaywgaG90a2V5X3NvdXJjZV9tYXNrKTsKIAogCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkJImxlZ2FjeSBpYm0vaG90a2V5IGV2ZW50IHJlcG9ydGluZyBvdmVyIHByb2NmcyAlc1xuIiwKQEAgLTMyNDUsNyArMzQ0OCw3IEBACiAJaWYgKHNjYW5jb2RlID4gMCAmJiBzY2FuY29kZSA8IDB4MjEpIHsKIAkJc2NhbmNvZGUtLTsKIAkJaWYgKCEoaG90a2V5X3NvdXJjZV9tYXNrICYgKDEgPDwgc2NhbmNvZGUpKSkgewotCQkJdHBhY3BpX2lucHV0X3NlbmRfa2V5KHNjYW5jb2RlKTsKKwkJCXRwYWNwaV9pbnB1dF9zZW5kX2tleV9tYXNrZWQoc2NhbmNvZGUpOwogCQkJKnNlbmRfYWNwaV9ldiA9IGZhbHNlOwogCQl9IGVsc2UgewogCQkJKmlnbm9yZV9hY3BpX2V2ID0gdHJ1ZTsKQEAgLTMyNjQsMjAgKzM0NjcsMjAgQEAKIAkqaWdub3JlX2FjcGlfZXYgPSBmYWxzZTsKIAogCXN3aXRjaCAoaGtleSkgewotCWNhc2UgMHgyMzA0OiAvKiBzdXNwZW5kLCB1bmRvY2sgKi8KLQljYXNlIDB4MjQwNDogLyogaGliZXJuYXRpb24sIHVuZG9jayAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1MzX1VORE9DSzogLyogc3VzcGVuZCwgdW5kb2NrICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzRfVU5ET0NLOiAvKiBoaWJlcm5hdGlvbiwgdW5kb2NrICovCiAJCWhvdGtleV93YWtldXBfcmVhc29uID0gVFBfQUNQSV9XQUtFVVBfVU5ET0NLOwogCQkqaWdub3JlX2FjcGlfZXYgPSB0cnVlOwogCQlicmVhazsKIAotCWNhc2UgMHgyMzA1OiAvKiBzdXNwZW5kLCBiYXkgZWplY3QgKi8KLQljYXNlIDB4MjQwNTogLyogaGliZXJuYXRpb24sIGJheSBlamVjdCAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1MzX0JBWUVKOiAvKiBzdXNwZW5kLCBiYXkgZWplY3QgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TNF9CQVlFSjogLyogaGliZXJuYXRpb24sIGJheSBlamVjdCAqLwogCQlob3RrZXlfd2FrZXVwX3JlYXNvbiA9IFRQX0FDUElfV0FLRVVQX0JBWUVKOwogCQkqaWdub3JlX2FjcGlfZXYgPSB0cnVlOwogCQlicmVhazsKIAotCWNhc2UgMHgyMzEzOiAvKiBCYXR0ZXJ5IG9uIGNyaXRpY2FsIGxvdyBsZXZlbCAoUzMpICovCi0JY2FzZSAweDI0MTM6IC8qIEJhdHRlcnkgb24gY3JpdGljYWwgbG93IGxldmVsIChTNCkgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TM19CQVRMT1c6IC8qIEJhdHRlcnkgb24gY3JpdGljYWwgbG93IGxldmVsL1MzICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzRfQkFUTE9XOiAvKiBCYXR0ZXJ5IG9uIGNyaXRpY2FsIGxvdyBsZXZlbC9TNCAqLwogCQlwcmludGsoVFBBQ1BJX0FMRVJUCiAJCQkiRU1FUkdFTkNZIFdBS0VVUDogYmF0dGVyeSBhbG1vc3QgZW1wdHlcbiIpOwogCQkvKiBob3cgdG8gYXV0by1oZWFsOiAqLwpAQCAtMzMwNywyMSArMzUxMCwyMSBAQAogCSppZ25vcmVfYWNwaV9ldiA9IGZhbHNlOwogCiAJc3dpdGNoIChoa2V5KSB7Ci0JY2FzZSAweDUwMTA6IC8qIExlbm92byBuZXcgQklPUzogYnJpZ2h0bmVzcyBjaGFuZ2VkICovCi0JY2FzZSAweDUwMGI6IC8qIFg2MXQ6IHRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBiYXkgKi8KLQljYXNlIDB4NTAwYzogLyogWDYxdDogdGFibGV0IHBlbiByZW1vdmVkIGZyb20gYmF5ICovCisJY2FzZSBUUF9IS0VZX0VWX1BFTl9JTlNFUlRFRDogIC8qIFg2MXQ6IHRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBiYXkgKi8KKwljYXNlIFRQX0hLRVlfRVZfUEVOX1JFTU9WRUQ6ICAgLyogWDYxdDogdGFibGV0IHBlbiByZW1vdmVkIGZyb20gYmF5ICovCiAJCXJldHVybiB0cnVlOwogCi0JY2FzZSAweDUwMDk6IC8qIFg0MXQtWDYxdDogc3dpdmVsIHVwICh0YWJsZXQgbW9kZSkgKi8KLQljYXNlIDB4NTAwYTogLyogWDQxdC1YNjF0OiBzd2l2ZWwgZG93biAobm9ybWFsIG1vZGUpICovCisJY2FzZSBUUF9IS0VZX0VWX1RBQkxFVF9UQUJMRVQ6ICAgLyogWDQxdC1YNjF0OiB0YWJsZXQgbW9kZSAqLworCWNhc2UgVFBfSEtFWV9FVl9UQUJMRVRfTk9URUJPT0s6IC8qIFg0MXQtWDYxdDogbm9ybWFsIG1vZGUgKi8KIAkJdHBhY3BpX2lucHV0X3NlbmRfdGFibGV0c3coKTsKIAkJaG90a2V5X3RhYmxldF9tb2RlX25vdGlmeV9jaGFuZ2UoKTsKIAkJKnNlbmRfYWNwaV9ldiA9IGZhbHNlOwogCQlyZXR1cm4gdHJ1ZTsKIAotCWNhc2UgMHg1MDAxOgotCWNhc2UgMHg1MDAyOgotCQkvKiBMSUQgc3dpdGNoIGV2ZW50cy4gIERvIG5vdCBwcm9wYWdhdGUgKi8KKwljYXNlIFRQX0hLRVlfRVZfTElEX0NMT1NFOgkvKiBMaWQgY2xvc2VkICovCisJY2FzZSBUUF9IS0VZX0VWX0xJRF9PUEVOOgkvKiBMaWQgb3BlbmVkICovCisJY2FzZSBUUF9IS0VZX0VWX0JSR0hUX0NIQU5HRUQ6CS8qIGJyaWdodG5lc3MgY2hhbmdlZCAqLworCQkvKiBkbyBub3QgcHJvcGFnYXRlIHRoZXNlIGV2ZW50cyAqLwogCQkqaWdub3JlX2FjcGlfZXYgPSB0cnVlOwogCQlyZXR1cm4gdHJ1ZTsKIApAQCAtMzMzOSwzMCArMzU0MiwzMCBAQAogCSppZ25vcmVfYWNwaV9ldiA9IGZhbHNlOwogCiAJc3dpdGNoIChoa2V5KSB7Ci0JY2FzZSAweDYwMTE6CisJY2FzZSBUUF9IS0VZX0VWX0FMQVJNX0JBVF9IT1Q6CiAJCXByaW50ayhUUEFDUElfQ1JJVAogCQkJIlRIRVJNQUwgQUxBUk06IGJhdHRlcnkgaXMgdG9vIGhvdCFcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IHdhcm4gdXNlciB0aHJvdWdoIGd1aSAqLwogCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIDB4NjAxMjoKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fQkFUX1hIT1Q6CiAJCXByaW50ayhUUEFDUElfQUxFUlQKIAkJCSJUSEVSTUFMIEVNRVJHRU5DWTogYmF0dGVyeSBpcyBleHRyZW1lbHkgaG90IVxuIik7CiAJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogaW1tZWRpYXRlIHNsZWVwL2hpYmVybmF0ZSAqLwogCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIDB4NjAyMToKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX0hPVDoKIAkJcHJpbnRrKFRQQUNQSV9DUklUCiAJCQkiVEhFUk1BTCBBTEFSTTogIgogCQkJImEgc2Vuc29yIHJlcG9ydHMgc29tZXRoaW5nIGlzIHRvbyBob3QhXG4iKTsKIAkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiB3YXJuIHVzZXIgdGhyb3VnaCBndWksIHRoYXQgKi8KIAkJLyogc29tZSBpbnRlcm5hbCBjb21wb25lbnQgaXMgdG9vIGhvdCAqLwogCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIDB4NjAyMjoKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX1hIT1Q6CiAJCXByaW50ayhUUEFDUElfQUxFUlQKIAkJCSJUSEVSTUFMIEVNRVJHRU5DWTogIgogCQkJImEgc2Vuc29yIHJlcG9ydHMgc29tZXRoaW5nIGlzIGV4dHJlbWVseSBob3QhXG4iKTsKIAkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiBpbW1lZGlhdGUgc2xlZXAvaGliZXJuYXRlICovCiAJCXJldHVybiB0cnVlOwotCWNhc2UgMHg2MDMwOgorCWNhc2UgVFBfSEtFWV9FVl9USE1fVEFCTEVfQ0hBTkdFRDoKIAkJcHJpbnRrKFRQQUNQSV9JTkZPCiAJCQkiRUMgcmVwb3J0cyB0aGF0IFRoZXJtYWwgVGFibGUgaGFzIGNoYW5nZWRcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IGRvIG5vdGhpbmcsIHdlIGRvbid0IGhhdmUKQEAgLTM0MjAsNyArMzYyMyw3IEBACiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQkJLyogMHgzMDAwLTB4M0ZGRjogYmF5LXJlbGF0ZWQgd2FrZXVwcyAqLwotCQkJaWYgKGhrZXkgPT0gMHgzMDAzKSB7CisJCQlpZiAoaGtleSA9PSBUUF9IS0VZX0VWX0JBWUVKX0FDSykgewogCQkJCWhvdGtleV9hdXRvc2xlZXBfYWNrID0gMTsKIAkJCQlwcmludGsoVFBBQ1BJX0lORk8KIAkJCQkgICAgICAgImJheSBlamVjdGVkXG4iKTsKQEAgLTM0MzIsNyArMzYzNSw3IEBACiAJCQlicmVhazsKIAkJY2FzZSA0OgogCQkJLyogMHg0MDAwLTB4NEZGRjogZG9jay1yZWxhdGVkIHdha2V1cHMgKi8KLQkJCWlmIChoa2V5ID09IDB4NDAwMykgeworCQkJaWYgKGhrZXkgPT0gVFBfSEtFWV9FVl9VTkRPQ0tfQUNLKSB7CiAJCQkJaG90a2V5X2F1dG9zbGVlcF9hY2sgPSAxOwogCQkJCXByaW50ayhUUEFDUElfSU5GTwogCQkJCSAgICAgICAidW5kb2NrZWRcbiIpOwpAQCAtMzQ1NCw3ICszNjU3LDggQEAKIAkJCWJyZWFrOwogCQljYXNlIDc6CiAJCQkvKiAweDcwMDAtMHg3RkZGOiBtaXNjICovCi0JCQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X3dsc3cgJiYgaGtleSA9PSAweDcwMDApIHsKKwkJCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfd2xzdyAmJgorCQkJCQloa2V5ID09IFRQX0hLRVlfRVZfUkZLSUxMX0NIQU5HRUQpIHsKIAkJCQl0cGFjcGlfc2VuZF9yYWRpb3N3X3VwZGF0ZSgpOwogCQkJCXNlbmRfYWNwaV9ldiA9IDA7CiAJCQkJa25vd25fZXYgPSB0cnVlOwpAQCAtMzUwMCwxMCArMzcwNCwxMiBAQAogewogCXRwYWNwaV9kaXNhYmxlX2JyaWdodG5lc3NfZGVsYXkoKTsKIAotCWlmIChob3RrZXlfbWFza19nZXQoKSkKKwlpZiAoaG90a2V5X3N0YXR1c19zZXQodHJ1ZSkgPCAwIHx8CisJICAgIGhvdGtleV9tYXNrX3NldChob3RrZXlfYWNwaV9tYXNrKSA8IDApCiAJCXByaW50ayhUUEFDUElfRVJSCi0JCSAgICAgICAiZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIHJlYWQgaG90IGtleSBtYXNrICIKLQkJICAgICAgICJmcm9tIGZpcm13YXJlXG4iKTsKKwkJICAgICAgICJlcnJvciB3aGlsZSBhdHRlbXB0aW5nIHRvIHJlc2V0IHRoZSBldmVudCAiCisJCSAgICAgICAiZmlybXdhcmUgaW50ZXJmYWNlXG4iKTsKKwogCXRwYWNwaV9zZW5kX3JhZGlvc3dfdXBkYXRlKCk7CiAJaG90a2V5X3RhYmxldF9tb2RlX25vdGlmeV9jaGFuZ2UoKTsKIAlob3RrZXlfd2FrZXVwX3JlYXNvbl9ub3RpZnlfY2hhbmdlKCk7CkBAIC0zNTMyLDggKzM3MzgsOCBAQAogCQlyZXR1cm4gcmVzOwogCiAJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0JXNcbiIsIGVuYWJsZWQoc3RhdHVzLCAwKSk7Ci0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJtYXNrOlx0XHQweCUwOHhcbiIsIGhvdGtleV9tYXNrKTsKKwlpZiAoaG90a2V5X2FsbF9tYXNrKSB7CisJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJtYXNrOlx0XHQweCUwOHhcbiIsIGhvdGtleV91c2VyX21hc2spOwogCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLAogCQkJICAgICAgICJjb21tYW5kczpcdGVuYWJsZSwgZGlzYWJsZSwgcmVzZXQsIDxtYXNrPlxuIik7CiAJfSBlbHNlIHsKQEAgLTM1NzAsNyArMzc3Niw3IEBACiAJaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQltYXNrID0gaG90a2V5X21hc2s7CisJbWFzayA9IGhvdGtleV91c2VyX21hc2s7CiAKIAlyZXMgPSAwOwogCXdoaWxlICgoY21kID0gbmV4dF9jbWQoJmJ1ZikpKSB7CkBAIC0zNTkyLDEyICszNzk4LDExIEBACiAJCX0KIAl9CiAKLQlpZiAoIXJlcykKKwlpZiAoIXJlcykgewogCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBob3RrZXkiLAogCQkJInNldCBtYXNrIHRvIDB4JTA4eFxuIiwgbWFzayk7Ci0KLQlpZiAoIXJlcyAmJiBtYXNrICE9IGhvdGtleV9tYXNrKQotCQlyZXMgPSBob3RrZXlfbWFza19zZXQobWFzayk7CisJCXJlcyA9IGhvdGtleV91c2VyX21hc2tfc2V0KG1hc2spOworCX0KIAogZXJyZXhpdDoKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CkBAIC02MDEwLDggKzYyMTUsMTAgQEAKIAkJCQkJVFBBQ1BJX0JBQ0tMSUdIVF9ERVZfTkFNRSwgTlVMTCwgTlVMTCwKIAkJCQkJJmlibV9iYWNrbGlnaHRfZGF0YSk7CiAJaWYgKElTX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSkpIHsKKwkJaW50IHJjID0gUFRSX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSk7CisJCWlibV9iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKIAkJcHJpbnRrKFRQQUNQSV9FUlIgIkNvdWxkIG5vdCByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoaWJtX2JhY2tsaWdodF9kZXZpY2UpOworCQlyZXR1cm4gcmM7CiAJfQogCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfQlJHSFQsCiAJCQkiYnJpZ2h0bmVzcyBpcyBzdXBwb3J0ZWRcbiIpOwpAQCAtNzQ5OSw2ICs3NzA2LDIxIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qCisgKiBIS0VZIGV2ZW50IGNhbGxvdXQgZm9yIG90aGVyIHN1YmRyaXZlcnMgZ28gaGVyZQorICogKHllcywgaXQgaXMgdWdseSwgYnV0IGl0IGlzIHF1aWNrLCBzYWZlLCBhbmQgZ2V0cyB0aGUgam9iIGRvbmUKKyAqLworc3RhdGljIHZvaWQgdHBhY3BpX2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgaGtleV9ldmVudCkKK3sKK30KKworCisKK3N0YXRpYyB2b2lkIGhvdGtleV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQoreworCXRwYWNwaV9kcml2ZXJfZXZlbnQoVFBfSEtFWV9FVl9IT1RLRVlfQkFTRSArIHNjYW5jb2RlKTsKK30KKwogLyogc3lzZnMgbmFtZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgc3NpemVfdCB0aGlua3BhZF9hY3BpX3BkZXZfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMgYi9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYwppbmRleCBjMDdmZGI5Li44M2I4YjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYwpAQCAtMTUzLDYgKzE1Myw3IEBACiAJYWNwaV9oYW5kbGUgdGVtcCA9IE5VTEw7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBwbnBfZGV2ICpkZXY7CisJc3RydWN0IGFjcGlfaGFyZHdhcmVfaWQgKmlkOwogCiAJLyoKIAkgKiBJZiBhIFBuUGFjcGkgZGV2aWNlIGlzIG5vdCBwcmVzZW50ICwgdGhlIGRldmljZQpAQCAtMTkzLDE1ICsxOTQsMTIgQEAKIAlpZiAoZGV2LT5jYXBhYmlsaXRpZXMgJiBQTlBfQ09ORklHVVJBQkxFKQogCQlwbnBhY3BpX3BhcnNlX3Jlc291cmNlX29wdGlvbl9kYXRhKGRldik7CiAKLQlpZiAoZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcykgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgY2lkX2xpc3QtPmNvdW50OyBpKyspIHsKLQkJCWlmICghaXNwbnBpZGFjcGkoY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpKQotCQkJCWNvbnRpbnVlOwotCQkJcG5wX2FkZF9pZChkZXYsIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKTsKLQkJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoaWQsICZkZXZpY2UtPnBucC5pZHMsIGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAoaWQtPmlkLCBhY3BpX2RldmljZV9oaWQoZGV2aWNlKSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc3BucGlkYWNwaShpZC0+aWQpKQorCQkJY29udGludWU7CisJCXBucF9hZGRfaWQoZGV2LCBpZC0+aWQpOwogCX0KIAogCS8qIGNsZWFyIG91dCB0aGUgZGFtYWdlZCBmbGFncyAqLwpAQCAtMjMyLDkgKzIzMCw4IEBACiAJc3RydWN0IHBucF9kZXYgKnBucCA9IF9wbnA7CiAKIAkvKiB0cnVlIG1lYW5zIGl0IG1hdGNoZWQgKi8KLQlyZXR1cm4gYWNwaS0+ZmxhZ3MuaGFyZHdhcmVfaWQKLQkgICAgJiYgIWFjcGlfZ2V0X3BoeXNpY2FsX2RldmljZShhY3BpLT5oYW5kbGUpCi0JICAgICYmIGNvbXBhcmVfcG5wX2lkKHBucC0+aWQsIGFjcGktPnBucC5oYXJkd2FyZV9pZCk7CisJcmV0dXJuICFhY3BpX2dldF9waHlzaWNhbF9kZXZpY2UoYWNwaS0+aGFuZGxlKQorCSAgICAmJiBjb21wYXJlX3BucF9pZChwbnAtPmlkLCBhY3BpX2RldmljZV9oaWQoYWNwaSkpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BucF9maW5kX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGFjcGlfaGFuZGxlICogaGFuZGxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMva2FwaS5jIGIvZHJpdmVycy9wcHMva2FwaS5jCmluZGV4IDM1YTBiMTkuLjJkNDE0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL2thcGkuYworKysgYi9kcml2ZXJzL3Bwcy9rYXBpLmMKQEAgLTI3MSw2ICsyNzEsNyBAQAogewogCXN0cnVjdCBwcHNfZGV2aWNlICpwcHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY2FwdHVyZWQgPSAwOwogCiAJaWYgKChldmVudCAmIChQUFNfQ0FQVFVSRUFTU0VSVCB8IFBQU19DQVBUVVJFQ0xFQVIpKSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicHBzOiB1bmtub3duIGV2ZW50ICgleCkgZm9yIHNvdXJjZSAlZFxuIiwKQEAgLTI5Myw3ICsyOTQsOCBAQAogCiAJLyogQ2hlY2sgdGhlIGV2ZW50ICovCiAJcHBzLT5jdXJyZW50X21vZGUgPSBwcHMtPnBhcmFtcy5tb2RlOwotCWlmIChldmVudCAmIFBQU19DQVBUVVJFQVNTRVJUKSB7CisJaWYgKChldmVudCAmIFBQU19DQVBUVVJFQVNTRVJUKSAmCisJCQkocHBzLT5wYXJhbXMubW9kZSAmIFBQU19DQVBUVVJFQVNTRVJUKSkgewogCQkvKiBXZSBoYXZlIHRvIGFkZCBhbiBvZmZzZXQ/ICovCiAJCWlmIChwcHMtPnBhcmFtcy5tb2RlICYgUFBTX09GRlNFVEFTU0VSVCkKIAkJCXBwc19hZGRfb2Zmc2V0KHRzLCAmcHBzLT5wYXJhbXMuYXNzZXJ0X29mZl90dSk7CkBAIC0zMDMsOCArMzA1LDExIEBACiAJCXBwcy0+YXNzZXJ0X3NlcXVlbmNlKys7CiAJCXByX2RlYnVnKCJjYXB0dXJlIGFzc2VydCBzZXEgIyV1IGZvciBzb3VyY2UgJWRcbiIsCiAJCQlwcHMtPmFzc2VydF9zZXF1ZW5jZSwgc291cmNlKTsKKworCQljYXB0dXJlZCA9IH4wOwogCX0KLQlpZiAoZXZlbnQgJiBQUFNfQ0FQVFVSRUNMRUFSKSB7CisJaWYgKChldmVudCAmIFBQU19DQVBUVVJFQ0xFQVIpICYKKwkJCShwcHMtPnBhcmFtcy5tb2RlICYgUFBTX0NBUFRVUkVDTEVBUikpIHsKIAkJLyogV2UgaGF2ZSB0byBhZGQgYW4gb2Zmc2V0PyAqLwogCQlpZiAocHBzLT5wYXJhbXMubW9kZSAmIFBQU19PRkZTRVRDTEVBUikKIAkJCXBwc19hZGRfb2Zmc2V0KHRzLCAmcHBzLT5wYXJhbXMuY2xlYXJfb2ZmX3R1KTsKQEAgLTMxNCwxMiArMzE5LDE3IEBACiAJCXBwcy0+Y2xlYXJfc2VxdWVuY2UrKzsKIAkJcHJfZGVidWcoImNhcHR1cmUgY2xlYXIgc2VxICMldSBmb3Igc291cmNlICVkXG4iLAogCQkJcHBzLT5jbGVhcl9zZXF1ZW5jZSwgc291cmNlKTsKKworCQljYXB0dXJlZCA9IH4wOwogCX0KIAotCXBwcy0+Z28gPSB+MDsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBwcy0+cXVldWUpOworCS8qIFdha2UgdXAgaWlmIGNhcHR1cmVkIHNvbXRoaW5nICovCisJaWYgKGNhcHR1cmVkKSB7CisJCXBwcy0+Z28gPSB+MDsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcHMtPnF1ZXVlKTsKIAotCWtpbGxfZmFzeW5jKCZwcHMtPmFzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7CisJCWtpbGxfZmFzeW5jKCZwcHMtPmFzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7CisJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHBzLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL3Bwcy5jIGIvZHJpdmVycy9wcHMvcHBzLmMKaW5kZXggZmVhMTdlNy4uY2E1MTgzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvcHBzLmMKKysrIGIvZHJpdmVycy9wcHMvcHBzLmMKQEAgLTcxLDkgKzcxLDE0IEBACiAJY2FzZSBQUFNfR0VUUEFSQU1TOgogCQlwcl9kZWJ1ZygiUFBTX0dFVFBBUkFNUzogc291cmNlICVkXG4iLCBwcHMtPmlkKTsKIAotCQkvKiBSZXR1cm4gY3VycmVudCBwYXJhbWV0ZXJzICovCi0JCWVyciA9IGNvcHlfdG9fdXNlcih1YXJnLCAmcHBzLT5wYXJhbXMsCi0JCQkJCQlzaXplb2Yoc3RydWN0IHBwc19rcGFyYW1zKSk7CisJCXNwaW5fbG9ja19pcnEoJnBwcy0+bG9jayk7CisKKwkJLyogR2V0IHRoZSBjdXJyZW50IHBhcmFtZXRlcnMgKi8KKwkJcGFyYW1zID0gcHBzLT5wYXJhbXM7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcHMtPmxvY2spOworCisJCWVyciA9IGNvcHlfdG9fdXNlcih1YXJnLCAmcGFyYW1zLCBzaXplb2Yoc3RydWN0IHBwc19rcGFyYW1zKSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IDc0NGVhMWQuLmVmZTU2OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTEyODMsNyArMTI4Myw4IEBACiAJCXJldHVybiAtRUlPOwogCiAJLyogYXJlIHdlIHRoZSBsYXN0IHVzZXIgYW5kIHBlcm1pdHRlZCB0byBkaXNhYmxlID8gKi8KLQlpZiAocmRldi0+dXNlX2NvdW50ID09IDEgJiYgIXJkZXYtPmNvbnN0cmFpbnRzLT5hbHdheXNfb24pIHsKKwlpZiAocmRldi0+dXNlX2NvdW50ID09IDEgJiYKKwkgICAgKHJkZXYtPmNvbnN0cmFpbnRzICYmICFyZGV2LT5jb25zdHJhaW50cy0+YWx3YXlzX29uKSkgewogCiAJCS8qIHdlIGFyZSBsYXN0IHVzZXIgKi8KIAkJaWYgKF9yZWd1bGF0b3JfY2FuX2NoYW5nZV9zdGF0dXMocmRldikgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCmluZGV4IGY4YjI5NTcuLmY5ZjUxNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwpAQCAtMTk2LDExICsxOTYsMTAgQEAKIAlzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9kYXRhICpkcnZkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlyZWd1bGF0b3JfdW5yZWdpc3RlcihkcnZkYXRhLT5kZXYpOwotCWtmcmVlKGRydmRhdGEtPmRlc2MubmFtZSk7Ci0Ja2ZyZWUoZHJ2ZGF0YSk7Ci0KIAlpZiAoZ3Bpb19pc192YWxpZChkcnZkYXRhLT5ncGlvKSkKIAkJZ3Bpb19mcmVlKGRydmRhdGEtPmdwaW8pOworCWtmcmVlKGRydmRhdGEtPmRlc2MubmFtZSk7CisJa2ZyZWUoZHJ2ZGF0YSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYwppbmRleCBiYjYxYWVkLi45MDJkYjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCkBAIC0xNzUsMTggKzE3NSwxOCBAQAogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGxkby0+d204MzF4OwogCWludCBjdHJsX3JlZyA9IGxkby0+YmFzZSArIFdNODMxWF9MRE9fQ09OVFJPTDsKIAlpbnQgb25fcmVnID0gbGRvLT5iYXNlICsgV004MzFYX0xET19PTl9DT05UUk9MOwotCXVuc2lnbmVkIGludCByZXQ7CisJaW50IHJldDsKIAogCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIG9uX3JlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKCEocmV0ICYgV004MzFYX0xETzFfT05fTU9ERSkpCiAJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CiAKIAlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBjdHJsX3JlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKHJldCAmIFdNODMxWF9MRE8xX0xQX01PREUpCiAJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwppbmRleCA0Y2RiMzFhLi5hMGM4MTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwpAQCAtMTIsNiArMTIsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCiBpbnQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCmluZGV4IDdmZTFmYTIuLjAzZWE1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKQEAgLTU4LDcgKzU4LDE2IEBACiAJY2xrX2VuYWJsZShydGFwLT5jbGspOwogCS8qIEFjayBJUlEgKi8KIAl3cml0ZWwoMSwgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfSVJRX0VWRU5UKTsKKwkvKgorCSAqIERpc2FibGUgdGhlIGludGVycnVwdC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZQorCSAqIHRoZSBSVEMgbGl2ZXMgb24gYSBsb3dlci1jbG9ja2VkIGxpbmUgYW5kIHdpbGwKKwkgKiBub3QgcmVsZWFzZSB0aGUgSVJRIGxpbmUgdW50aWwgYWZ0ZXIgYSBmZXcgKHNsb3dlcikKKwkgKiBjbG9jayBjeWNsZXMuIFRoZSBpbnRlcnJ1cHQgd2lsbCBiZSByZS1lbmFibGVkIHdoZW4KKwkgKiBhIG5ldyBhbGFybSBpcyBzZXQgYW55d2F5LgorCSAqLworCXdyaXRlbCgwLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSyk7CiAJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKwogCS8qIFNldCBhbGFybSBmbGFnICovCiAJcnRjX3VwZGF0ZV9pcnEocnRhcC0+cnRjLCAxLCBSVENfQUYpOwogCkBAIC0xMjgsNiArMTM3LDggQEAKIAllbHNlCiAJCXdyaXRlbCgwLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSyk7CiAJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgY29oOTAxMzMxX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCA4YTExZGU5Li42MjIyN2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgInJ0Yy1jb3JlLmgiCiAKIHN0YXRpYyBkZXZfdCBydGNfZGV2dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKaW5kZXggZjRkZDg3ZS4uMzNhMTBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAlydGMtPnRtX2hvdXIgPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9IT1VSXSk7CiAJcnRjLT50bV93ZGF5ID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfV0tEQVldKTsKIAlydGMtPnRtX21kYXkgPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9EQVldKTsKLQlydGMtPnRtX21vbiA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX01PTlRIXSk7CisJcnRjLT50bV9tb24gPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9NT05USF0pIC0gMTsKIAlydGMtPnRtX3llYXIgPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9ZRUFSXSkgKyAxMDA7CiB9CiAKQEAgLTgxLDcgKzgxLDcgQEAKIAlwY2YtPnRpbWVbUENGNTA2MzNfVElfSE9VUl0gPSBiaW4yYmNkKHJ0Yy0+dG1faG91cik7CiAJcGNmLT50aW1lW1BDRjUwNjMzX1RJX1dLREFZXSA9IGJpbjJiY2QocnRjLT50bV93ZGF5KTsKIAlwY2YtPnRpbWVbUENGNTA2MzNfVElfREFZXSA9IGJpbjJiY2QocnRjLT50bV9tZGF5KTsKLQlwY2YtPnRpbWVbUENGNTA2MzNfVElfTU9OVEhdID0gYmluMmJjZChydGMtPnRtX21vbik7CisJcGNmLT50aW1lW1BDRjUwNjMzX1RJX01PTlRIXSA9IGJpbjJiY2QocnRjLT50bV9tb24gKyAxKTsKIAlwY2YtPnRpbWVbUENGNTA2MzNfVElfWUVBUl0gPSBiaW4yYmNkKHJ0Yy0+dG1feWVhciAlIDEwMCk7CiB9CiAKQEAgLTI0NSw4ICsyNDUsOSBAQAogCXJldCA9IHBjZjUwNjMzX3dyaXRlX2Jsb2NrKHJ0Yy0+cGNmLCBQQ0Y1MDYzM19SRUdfUlRDU0NBLAogCQkJCVBDRjUwNjMzX1RJX0VYVEVOVCwgJnBjZl90bS50aW1lWzBdKTsKIAotCWlmICghYWxhcm1fbWFza2VkKQorCWlmICghYWxhcm1fbWFza2VkIHx8IGFscm0tPmVuYWJsZWQpCiAJCXBjZjUwNjMzX2lycV91bm1hc2socnRjLT5wY2YsIFBDRjUwNjMzX0lSUV9BTEFSTSk7CisJcnRjLT5hbGFybV9lbmFibGVkID0gYWxybS0+ZW5hYmxlZDsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMKaW5kZXggYmI4Y2MwNS4uNzQ3Y2ExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXB4YS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1weGEuYwpAQCAtNDM4LDM0ICs0MzgsMzcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBweGFfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGFfcnRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFfcnRjICpweGFfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHB4YV9ydGMgKnB4YV9ydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKIAkJZW5hYmxlX2lycV93YWtlKHB4YV9ydGMtPmlycV9BbHJtKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGFfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBweGFfcnRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YV9ydGMgKnB4YV9ydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcHhhX3J0YyAqcHhhX3J0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQlkaXNhYmxlX2lycV93YWtlKHB4YV9ydGMtPmlycV9BbHJtKTsKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHB4YV9ydGNfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHB4YV9ydGNfcmVzdW1lCU5VTEwKKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YV9ydGNfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcHhhX3J0Y19zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhX3J0Y19yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YV9ydGNfZHJpdmVyID0gewogCS5yZW1vdmUJCT0gX19leGl0X3AocHhhX3J0Y19yZW1vdmUpLAotCS5zdXNwZW5kCT0gcHhhX3J0Y19zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhX3J0Y19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCQk9ICJweGEtcnRjIiwKKwkJLm5hbWUJPSAicHhhLXJ0YyIsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGFfcnRjX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKaW5kZXggMDIxYjI5Mi4uMjlmOThhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwpAQCAtMzkzLDMxICszOTMsMzQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzYTExMDBfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzYTExMDBfcnRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKIAkJZW5hYmxlX2lycV93YWtlKElSUV9SVENBbHJtKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYTExMDBfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBzYTExMDBfcnRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQlkaXNhYmxlX2lycV93YWtlKElSUV9SVENBbHJtKTsKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHNhMTEwMF9ydGNfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHNhMTEwMF9ydGNfcmVzdW1lCU5VTEwKKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNhMTEwMF9ydGNfcG1fb3BzID0geworCS5zdXNwZW5kCT0gc2ExMTAwX3J0Y19zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2ExMTAwX3J0Y19yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTEwMF9ydGNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMDBfcnRjX3Byb2JlLAogCS5yZW1vdmUJCT0gc2ExMTAwX3J0Y19yZW1vdmUsCi0JLnN1c3BlbmQJPSBzYTExMDBfcnRjX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzYTExMDBfcnRjX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJCT0gInNhMTEwMC1ydGMiLAorCQkubmFtZQk9ICJzYTExMDAtcnRjIiwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnNhMTEwMF9ydGNfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKaW5kZXggYWQxNjQwNS4uNDIzY2Q1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgdjMwMjBfbW1pb19yZWFkX2JpdChzdHJ1Y3QgdjMwMjAgKmNoaXApCiB7Ci0JcmV0dXJuIHJlYWRsKGNoaXAtPmlvYWRkcmVzcykgJiAoMSA8PCBjaGlwLT5sZWZ0c2hpZnQpOworCXJldHVybiAhIShyZWFkbChjaGlwLT5pb2FkZHJlc3MpICYgKDEgPDwgY2hpcC0+bGVmdHNoaWZ0KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdjMwMjBfY2hpcF9vcHMgdjMwMjBfbW1pb19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKaW5kZXggMmM4MzlkMC4uZmFkZGRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtMjA5LDE5ICsyMDksMTggQEAKIAogc3RhdGljIGludCB2cjQxeHhfcnRjX2lycV9zZXRfZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBmcmVxKQogewotCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdTY0IGNvdW50OwogCiAJaWYgKCFpc19wb3dlcl9vZl8yKGZyZXEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAljb3VudCA9IFJUQ19GUkVRVUVOQ1k7CiAJZG9fZGl2KGNvdW50LCBmcmVxKTsKIAotCXBlcmlvZGljX2NvdW50ID0gY291bnQ7Ci0KIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CiAKLQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgY291bnQpOwotCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCBjb3VudCA+PiAxNik7CisJcGVyaW9kaWNfY291bnQgPSBjb3VudDsKKwlydGMxX3dyaXRlKFJUQ0wxTFJFRywgcGVyaW9kaWNfY291bnQpOworCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCBwZXJpb2RpY19jb3VudCA+PiAxNik7CiAKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggZGFkMDQ0OS4uYWFjY2M4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0yNTA4LDggKzI1MDgsNiBAQAogCWRldmljZS0+c3RvcHBlZCAmPSB+REFTRF9VTlJFU1VNRURfUE07CiAKIAlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwotCWlmIChkZXZpY2UtPmJsb2NrKQotCQlkYXNkX3NjaGVkdWxlX2Jsb2NrX2JoKGRldmljZS0+YmxvY2spOwogCiAJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+cmVzdG9yZSkKIAkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnJlc3RvcmUoZGV2aWNlKTsKQEAgLTI1MjAsNiArMjUxOCw5IEBACiAJCSAqLwogCQlkZXZpY2UtPnN0b3BwZWQgfD0gREFTRF9VTlJFU1VNRURfUE07CiAKKwlpZiAoZGV2aWNlLT5ibG9jaykKKwkJZGFzZF9zY2hlZHVsZV9ibG9ja19iaChkZXZpY2UtPmJsb2NrKTsKKwogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogCXJldHVybiAwOwogfQpAQCAtMjUzMiw2ICsyNTMzLDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJc3RydWN0IGNjdzEgKmNjdzsKKwl1bnNpZ25lZCBsb25nICppZGF3OwogCiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QobWFnaWMsIDEgLyogUkRDICovLCByZGNfYnVmZmVyX3NpemUsIGRldmljZSk7CiAKQEAgLTI1NDUsOSArMjU0NywxNyBAQAogCiAJY2N3ID0gY3FyLT5jcGFkZHI7CiAJY2N3LT5jbWRfY29kZSA9IENDV19DTURfUkRDOwotCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpcmRjX2J1ZmZlcjsKLQljY3ctPmNvdW50ID0gcmRjX2J1ZmZlcl9zaXplOworCWlmIChpZGFsX2lzX25lZWRlZChyZGNfYnVmZmVyLCByZGNfYnVmZmVyX3NpemUpKSB7CisJCWlkYXcgPSAodW5zaWduZWQgbG9uZyAqKSAoY3FyLT5kYXRhKTsKKwkJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgaWRhdzsKKwkJY2N3LT5mbGFncyA9IENDV19GTEFHX0lEQTsKKwkJaWRhdyA9IGlkYWxfY3JlYXRlX3dvcmRzKGlkYXcsIHJkY19idWZmZXIsIHJkY19idWZmZXJfc2l6ZSk7CisJfSBlbHNlIHsKKwkJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgcmRjX2J1ZmZlcjsKKwkJY2N3LT5mbGFncyA9IDA7CisJfQogCisJY2N3LT5jb3VudCA9IHJkY19idWZmZXJfc2l6ZTsKIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwogCWNxci0+bWVtZGV2ID0gZGV2aWNlOwogCWNxci0+ZXhwaXJlcyA9IDEwKkhaOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGFiMzUyMTcuLjQxN2I5N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTIzMzgsNiArMjMzOCw4IEBACiAJLyogQ2FsY3VsYXRlIG51bWJlciBvZiBibG9ja3MvcmVjb3JkcyBwZXIgdHJhY2suICovCiAJYmxrc2l6ZSA9IGJsb2NrLT5icF9ibG9jazsKIAlibGtfcGVyX3RyayA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgYmxrc2l6ZSk7CisJaWYgKGJsa19wZXJfdHJrID09IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCS8qIENhbGN1bGF0ZSByZWNvcmQgaWQgb2YgZmlyc3QgYW5kIGxhc3QgYmxvY2suICovCiAJZmlyc3RfcmVjID0gZmlyc3RfdHJrID0gYmxrX3JxX3BvcyhyZXEpID4+IGJsb2NrLT5zMmJfc2hpZnQ7CiAJZmlyc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYoZmlyc3RfdHJrLCBibGtfcGVyX3Ryayk7CkBAIC0zMjExLDggKzMyMTMsMTAgQEAKIGludCBkYXNkX2Vja2RfcmVzdG9yZV9kZXZpY2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCBkYXNkX2Vja2RfY2hhcmFjdGVyaXN0aWNzIHRlbXBfcmRjX2RhdGE7CiAJaW50IGlzX2tub3duLCByYzsKIAlzdHJ1Y3QgZGFzZF91aWQgdGVtcF91aWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIApAQCAtMzIyNSw3ICszMjI5LDggQEAKIAlyYyA9IGRhc2RfZWNrZF9nZW5lcmF0ZV91aWQoZGV2aWNlLCAmcHJpdmF0ZS0+dWlkKTsKIAlkYXNkX2dldF91aWQoZGV2aWNlLT5jZGV2LCAmdGVtcF91aWQpOwogCWlmIChtZW1jbXAoJnByaXZhdGUtPnVpZCwgJnRlbXBfdWlkLCBzaXplb2Yoc3RydWN0IGRhc2RfdWlkKSkgIT0gMCkKLQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgVUlEIG9mIHRoZSBEQVNEIGhhcyBjaGFuZ2VkXG4iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgVUlEIG9mIHRoZSBEQVNEIGhhcyAiCisJCQkiY2hhbmdlZFxuIik7CiAJaWYgKHJjKQogCQlnb3RvIG91dF9lcnI7CiAJZGFzZF9zZXRfdWlkKGRldmljZS0+Y2RldiwgJnByaXZhdGUtPnVpZCk7CkBAIC0zMjQ1LDE1ICszMjUwLDE3IEBACiAJZGFzZF9lY2tkX3JlYWRfZmVhdHVyZXMoZGV2aWNlKTsKIAogCS8qIFJlYWQgRGV2aWNlIENoYXJhY3RlcmlzdGljcyAqLwotCW1lbXNldCgmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIHNpemVvZihwcml2YXRlLT5yZGNfZGF0YSkpOwogCXJjID0gZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKGRldmljZSwgREFTRF9FQ0tEX01BR0lDLAotCQkJCQkgJnByaXZhdGUtPnJkY19kYXRhLCA2NCk7CisJCQkJCSAmdGVtcF9yZGNfZGF0YSwgNjQpOwogCWlmIChyYykgewogCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCiAJCQkgICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgZmFpbGVkLCByYz0lZCBmb3IgIgogCQkJICAiZGV2aWNlOiAlcyIsIHJjLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZ290byBvdXRfZXJyOwogCX0KKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOworCW1lbWNweSgmcHJpdmF0ZS0+cmRjX2RhdGEsICZ0ZW1wX3JkY19kYXRhLCBzaXplb2YodGVtcF9yZGNfZGF0YSkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKIAogCS8qIGFkZCBkZXZpY2UgdG8gYWxpYXMgbWFuYWdlbWVudCAqLwogCWRhc2RfYWxpYXNfYWRkX2RldmljZShkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYwppbmRleCA4OWVjZTFjLi42NmUyMWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYwpAQCAtMzU3LDYgKzM1Nyw3IEBACiAJYXRvbWljX3NldCgmbW9ucHJpdi0+bXNnbGltX2NvdW50LCAwKTsKIAltb25wcml2LT53cml0ZV9pbmRleCAgPSAwOwogCW1vbnByaXYtPnJlYWRfaW5kZXggICA9IDA7CisJZGV2X3NldF9kcnZkYXRhKG1vbnJlYWRlcl9kZXZpY2UsIE5VTEwpOwogCiAJZm9yIChpID0gMDsgaSA8IE1PTl9NU0dMSU07IGkrKykKIAkJa2ZyZWUobW9ucHJpdi0+bXNnX2FycmF5W2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwppbmRleCBkNmEwMjJmLi42MmRkZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCkBAIC0xMzYxLDExICsxMzYxLDEzIEBACiAKIHZvaWQgcmF3MzI3MF9wbV91bmZyZWV6ZShzdHJ1Y3QgcmF3MzI3MF92aWV3ICp2aWV3KQogeworI2lmZGVmIENPTkZJR19UTjMyNzBfQ09OU09MRQogCXN0cnVjdCByYXczMjcwICpycDsKIAogCXJwID0gdmlldy0+ZGV2OwogCWlmIChycCAmJiB0ZXN0X2JpdChSQVczMjcwX0ZMQUdTX0ZST1pFTiwgJnJwLT5mbGFncykpCiAJCWNjd19kZXZpY2VfZm9yY2VfY29uc29sZSgpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2N3X2RldmljZV9pZCByYXczMjcwX2lkW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKaW5kZXggZGFhZWMxOC4uYjQ0NDYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYwpAQCAtMjYsNyArMjYsNiBAQAogc3RhdGljIGludCBzY2xwX2FzeW5jX3NlbmRfd2FpdChjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY2FsbGhvbWVfc3lzY3RsX2hlYWRlcjsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2NscF9hc3luY19sb2NrKTsKLXN0YXRpYyBjaGFyIG5vZGVuYW1lWzY0XTsKICNkZWZpbmUgU0NMUF9OT1JNQUxfV1JJVEUJMHgwMAogCiBzdHJ1Y3QgYXN5bmNfZXZidWYgewpAQCAtNTIsOSArNTEsMTAgQEAKIHN0YXRpYyBpbnQgY2FsbF9ob21lX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCiB7Ci0JCXN0cm5jYXQoZGF0YSwgbm9kZW5hbWUsIHN0cmxlbihub2RlbmFtZSkpOwotCQlzY2xwX2FzeW5jX3NlbmRfd2FpdChkYXRhKTsKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCXN0cm5jYXQoZGF0YSwgaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLAorCQlzaXplb2YoaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lKSk7CisJc2NscF9hc3luY19zZW5kX3dhaXQoZGF0YSk7CisJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNhbGxfaG9tZV9wYW5pY19uYiA9IHsKQEAgLTYyLDIxICs2MiwyMCBAQAogCS5wcmlvcml0eSA9IElOVF9NQVgsCiB9OwogCi1zdGF0aWMgaW50IHByb2NfaGFuZGxlcl9jYWxsaG9tZShjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgcHJvY19oYW5kbGVyX2NhbGxob21lKHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAogCQkJCSB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmNvdW50LAogCQkJCSBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGxlbiwgcmM7Ci0JY2hhciBidWZbMl07CisJY2hhciBidWZbM107CiAKLQlpZiAoISpjb3VudCB8ICgqcHBvcyAmJiAhd3JpdGUpKSB7CisJaWYgKCEqY291bnQgfHwgKCpwcG9zICYmICF3cml0ZSkpIHsKIAkJKmNvdW50ID0gMDsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghd3JpdGUpIHsKLQkJbGVuID0gIHNwcmludGYoYnVmLCAiJWRcbiIsIGNhbGxob21lX2VuYWJsZWQpOwotCQlidWZbbGVuXSA9ICdcMCc7CisJCWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZFxuIiwgY2FsbGhvbWVfZW5hYmxlZCk7CiAJCXJjID0gY29weV90b191c2VyKGJ1ZmZlciwgYnVmLCBzaXplb2YoYnVmKSk7CiAJCWlmIChyYyAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMDAsNyArOTksNyBAQAogCXsKIAkJLnByb2NuYW1lCT0gImNhbGxob21lIiwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2hhbmRsZXJfY2FsbGhvbWUsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2hhbmRsZXJfY2FsbGhvbWUsCiAJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKQEAgLTE3MSwzOSArMTcwLDI5IEBACiAJcmMgPSBzY2xwX3JlZ2lzdGVyKCZzY2xwX2FzeW5jX3JlZ2lzdGVyKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKLQljYWxsaG9tZV9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGtlcm5fZGlyX3RhYmxlKTsKLQlpZiAoIWNhbGxob21lX3N5c2N0bF9oZWFkZXIpIHsKLQkJcmMgPSAtRU5PTUVNOworCXJjID0gLUVPUE5PVFNVUFA7CisJaWYgKCEoc2NscF9hc3luY19yZWdpc3Rlci5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX0FTWU5DX01BU0spKQogCQlnb3RvIG91dF9zY2xwOwotCX0KLQlpZiAoIShzY2xwX2FzeW5jX3JlZ2lzdGVyLnNjbHBfcmVjZWl2ZV9tYXNrICYgRVZUWVBfQVNZTkNfTUFTSykpIHsKLQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXRfc2NscDsKLQl9CiAJcmMgPSAtRU5PTUVNOworCWNhbGxob21lX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoa2Vybl9kaXJfdGFibGUpOworCWlmICghY2FsbGhvbWVfc3lzY3RsX2hlYWRlcikKKwkJZ290byBvdXRfc2NscDsKIAlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNjbHBfcmVxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZXF1ZXN0KQotCQlnb3RvIG91dF9zeXM7CiAJc2NjYiA9IChzdHJ1Y3Qgc2NscF9hc3luY19zY2NiICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JaWYgKCFzY2NiKQorCWlmICghcmVxdWVzdCB8fCAhc2NjYikKIAkJZ290byBvdXRfbWVtOwotCXJjID0gIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKLQkJCQkJICAgICAmY2FsbF9ob21lX3BhbmljX25iKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X21lbTsKLQotCXN0cm5jcHkobm9kZW5hbWUsIGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwgNjQpOwotCXJldHVybiAwOwotCisJcmMgPSBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJCSAgICAmY2FsbF9ob21lX3BhbmljX25iKTsKKwlpZiAoIXJjKQorCQlnb3RvIG91dDsKIG91dF9tZW06CiAJa2ZyZWUocmVxdWVzdCk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBzY2NiKTsKLW91dF9zeXM6CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoY2FsbGhvbWVfc3lzY3RsX2hlYWRlcik7CiBvdXRfc2NscDoKIAlzY2xwX3VucmVnaXN0ZXIoJnNjbHBfYXN5bmNfcmVnaXN0ZXIpOworb3V0OgogCXJldHVybiByYzsKLQogfQogbW9kdWxlX2luaXQoc2NscF9hc3luY19pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYwppbmRleCA4NGMxOTFjLi4wNTkwOWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYwpAQCAtMjAsOSArMjAsMTIgQEAKIAogI2luY2x1ZGUgInNjbHAuaCIKIAorc3RhdGljIHZvaWQgKCpvbGRfbWFjaGluZV9yZXN0YXJ0KShjaGFyICopOworc3RhdGljIHZvaWQgKCpvbGRfbWFjaGluZV9oYWx0KSh2b2lkKTsKK3N0YXRpYyB2b2lkICgqb2xkX21hY2hpbmVfcG93ZXJfb2ZmKSh2b2lkKTsKKwogLyogU2h1dGRvd24gaGFuZGxlci4gU2lnbmFsIGNvbXBsZXRpb24gb2Ygc2h1dGRvd24gYnkgbG9hZGluZyBzcGVjaWFsIFBTVy4gKi8KLXN0YXRpYyB2b2lkCi1kb19tYWNoaW5lX3F1aWVzY2Uodm9pZCkKK3N0YXRpYyB2b2lkIGRvX21hY2hpbmVfcXVpZXNjZSh2b2lkKQogewogCXBzd190IHF1aWVzY2VfcHN3OwogCkBAIC0zMywyMyArMzYsNDggQEAKIH0KIAogLyogSGFuZGxlciBmb3IgcXVpZXNjZSBldmVudC4gU3RhcnQgc2h1dGRvd24gcHJvY2VkdXJlLiAqLwotc3RhdGljIHZvaWQKLXNjbHBfcXVpZXNjZV9oYW5kbGVyKHN0cnVjdCBldmJ1Zl9oZWFkZXIgKmV2YnVmKQorc3RhdGljIHZvaWQgc2NscF9xdWllc2NlX2hhbmRsZXIoc3RydWN0IGV2YnVmX2hlYWRlciAqZXZidWYpCiB7Ci0JX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkICopIGRvX21hY2hpbmVfcXVpZXNjZTsKLQlfbWFjaGluZV9oYWx0ID0gZG9fbWFjaGluZV9xdWllc2NlOwotCV9tYWNoaW5lX3Bvd2VyX29mZiA9IGRvX21hY2hpbmVfcXVpZXNjZTsKKwlpZiAoX21hY2hpbmVfcmVzdGFydCAhPSAodm9pZCAqKSBkb19tYWNoaW5lX3F1aWVzY2UpIHsKKwkJb2xkX21hY2hpbmVfcmVzdGFydCA9IF9tYWNoaW5lX3Jlc3RhcnQ7CisJCW9sZF9tYWNoaW5lX2hhbHQgPSBfbWFjaGluZV9oYWx0OworCQlvbGRfbWFjaGluZV9wb3dlcl9vZmYgPSBfbWFjaGluZV9wb3dlcl9vZmY7CisJCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCAqKSBkb19tYWNoaW5lX3F1aWVzY2U7CisJCV9tYWNoaW5lX2hhbHQgPSBkb19tYWNoaW5lX3F1aWVzY2U7CisJCV9tYWNoaW5lX3Bvd2VyX29mZiA9IGRvX21hY2hpbmVfcXVpZXNjZTsKKwl9CiAJY3RybF9hbHRfZGVsKCk7CiB9CiAKKy8qIFVuZG8gbWFjaGluZSByZXN0YXJ0L2hhbHQvcG93ZXJfb2ZmIG1vZGlmaWNhdGlvbiBvbiByZXN1bWUgKi8KK3N0YXRpYyB2b2lkIHNjbHBfcXVpZXNjZV9wbV9ldmVudChzdHJ1Y3Qgc2NscF9yZWdpc3RlciAqcmVnLAorCQkJCSAgZW51bSBzY2xwX3BtX2V2ZW50IHNjbHBfcG1fZXZlbnQpCit7CisJc3dpdGNoIChzY2xwX3BtX2V2ZW50KSB7CisJY2FzZSBTQ0xQX1BNX0VWRU5UX1JFU1RPUkU6CisJCWlmIChvbGRfbWFjaGluZV9yZXN0YXJ0KSB7CisJCQlfbWFjaGluZV9yZXN0YXJ0ID0gb2xkX21hY2hpbmVfcmVzdGFydDsKKwkJCV9tYWNoaW5lX2hhbHQgPSBvbGRfbWFjaGluZV9oYWx0OworCQkJX21hY2hpbmVfcG93ZXJfb2ZmID0gb2xkX21hY2hpbmVfcG93ZXJfb2ZmOworCQkJb2xkX21hY2hpbmVfcmVzdGFydCA9IE5VTEw7CisJCQlvbGRfbWFjaGluZV9oYWx0ID0gTlVMTDsKKwkJCW9sZF9tYWNoaW5lX3Bvd2VyX29mZiA9IE5VTEw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ0xQX1BNX0VWRU5UX0ZSRUVaRToKKwljYXNlIFNDTFBfUE1fRVZFTlRfVEhBVzoKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IHNjbHBfcmVnaXN0ZXIgc2NscF9xdWllc2NlX2V2ZW50ID0gewogCS5yZWNlaXZlX21hc2sgPSBFVlRZUF9TSUdRVUlFU0NFX01BU0ssCi0JLnJlY2VpdmVyX2ZuID0gc2NscF9xdWllc2NlX2hhbmRsZXIKKwkucmVjZWl2ZXJfZm4gPSBzY2xwX3F1aWVzY2VfaGFuZGxlciwKKwkucG1fZXZlbnRfZm4gPSBzY2xwX3F1aWVzY2VfcG1fZXZlbnQKIH07CiAKIC8qIEluaXRpYWxpemUgcXVpZXNjZSBkcml2ZXIuICovCi1zdGF0aWMgaW50IF9faW5pdAotc2NscF9xdWllc2NlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNjbHBfcXVpZXNjZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHNjbHBfcmVnaXN0ZXIoJnNjbHBfcXVpZXNjZV9ldmVudCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKaW5kZXggMTc4NzI0Zi4uYjlkMmEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwpAQCAtNzA1LDIxICs3MDUsNiBAQAogfQogX19pbml0Y2FsbChzY2xwX3Z0MjIwX3R0eV9pbml0KTsKIAotI2lmZGVmIENPTkZJR19TQ0xQX1ZUMjIwX0NPTlNPTEUKLQotc3RhdGljIHZvaWQKLXNjbHBfdnQyMjBfY29uX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQotewotCV9fc2NscF92dDIyMF93cml0ZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBidWYsIGNvdW50LCAxLCAxLCAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICoKLXNjbHBfdnQyMjBfY29uX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKLXsKLQkqaW5kZXggPSAwOwotCXJldHVybiBzY2xwX3Z0MjIwX2RyaXZlcjsKLX0KLQogc3RhdGljIHZvaWQgX19zY2xwX3Z0MjIwX2ZsdXNoX2J1ZmZlcih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NzYsNiArNzYxLDIxIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1NDTFBfVlQyMjBfQ09OU09MRQorCitzdGF0aWMgdm9pZAorc2NscF92dDIyMF9jb25fd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJX19zY2xwX3Z0MjIwX3dyaXRlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIGJ1ZiwgY291bnQsIDEsIDEsIDApOworfQorCitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKgorc2NscF92dDIyMF9jb25fZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQoreworCSppbmRleCA9IDA7CisJcmV0dXJuIHNjbHBfdnQyMjBfZHJpdmVyOworfQorCiBzdGF0aWMgaW50CiBzY2xwX3Z0MjIwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggNjRmNTdlZi4uMGMwNzA1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMTYyLDkgKzE2MiwxMCBAQAogCXNwaW5fbG9ja19pcnEoJmRldmljZS0+YmxrX2RhdGEucmVxdWVzdF9xdWV1ZV9sb2NrKTsKIAl3aGlsZSAoCiAJCSFibGtfcXVldWVfcGx1Z2dlZChxdWV1ZSkgJiYKLQkJKHJlcSA9IGJsa19mZXRjaF9yZXF1ZXN0KHF1ZXVlKSkgJiYKKwkJYmxrX3BlZWtfcmVxdWVzdChxdWV1ZSkgJiYKIAkJbnJfcXVldWVkIDwgVEFQRUJMT0NLX01JTl9SRVFVRVVFCiAJKSB7CisJCXJlcSA9IGJsa19mZXRjaF9yZXF1ZXN0KHF1ZXVlKTsKIAkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpIHsKIAkJCURCRl9FVkVOVCgxLCAiVEJMT0NLOiBSZWplY3Rpbmcgd3JpdGUgcmVxdWVzdFxuIik7CiAJCQlzcGluX3VubG9ja19pcnEoJmRldmljZS0+YmxrX2RhdGEucmVxdWVzdF9xdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCmluZGV4IDY1NjVmMDIuLjdlYWI5YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwpAQCAtMjY1LDEzICsyNjUsMTEgQEAKIHN0YXRpYyB2b2lkICoKIGNpb19pZ25vcmVfcHJvY19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgY2N3ZGV2X2l0ZXIgKml0ZXI7CisJc3RydWN0IGNjd2Rldl9pdGVyICppdGVyID0gcy0+cHJpdmF0ZTsKIAogCWlmICgqb2Zmc2V0ID49IChfX01BWF9TVUJDSEFOTkVMICsgMSkgKiAoX19NQVhfU1NJRCArIDEpKQogCQlyZXR1cm4gTlVMTDsKLQlpdGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNjd2Rldl9pdGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpdGVyKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwltZW1zZXQoaXRlciwgMCwgc2l6ZW9mKCppdGVyKSk7CiAJaXRlci0+c3NpZCA9ICpvZmZzZXQgLyAoX19NQVhfU1VCQ0hBTk5FTCArIDEpOwogCWl0ZXItPmRldm5vID0gKm9mZnNldCAlIChfX01BWF9TVUJDSEFOTkVMICsgMSk7CiAJcmV0dXJuIGl0ZXI7CkBAIC0yODAsOCArMjc4LDYgQEAKIHN0YXRpYyB2b2lkCiBjaW9faWdub3JlX3Byb2Nfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCkKIHsKLQlpZiAoIUlTX0VSUihpdCkpCi0JCWtmcmVlKGl0KTsKIH0KIAogc3RhdGljIHZvaWQgKgpAQCAtMzc4LDE0ICszNzQsMTUgQEAKIHN0YXRpYyBpbnQKIGNpb19pZ25vcmVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmY2lvX2lnbm9yZV9wcm9jX3NlcV9vcHMpOworCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZjaW9faWdub3JlX3Byb2Nfc2VxX29wcywKKwkJCQlzaXplb2Yoc3RydWN0IGNjd2Rldl9pdGVyKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpb19pZ25vcmVfcHJvY19mb3BzID0gewogCS5vcGVuICAgID0gY2lvX2lnbm9yZV9wcm9jX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIAkud3JpdGUgICA9IGNpb19pZ25vcmVfd3JpdGUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2NocC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwppbmRleCA0MDAwMjgzLi44YWI1MTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKQEAgLTM5Myw3ICszOTMsNiBAQAogCWNocC0+c3RhdGUgPSAxOwogCWNocC0+ZGV2LnBhcmVudCA9ICZjaGFubmVsX3N1YnN5c3RlbXNbY2hwaWQuY3NzaWRdLT5kZXZpY2U7CiAJY2hwLT5kZXYucmVsZWFzZSA9IGNocF9yZWxlYXNlOwotCWRldl9zZXRfbmFtZSgmY2hwLT5kZXYsICJjaHAleC4lMDJ4IiwgY2hwaWQuY3NzaWQsIGNocGlkLmlkKTsKIAogCS8qIE9idGFpbiBjaGFubmVsIHBhdGggZGVzY3JpcHRpb24gYW5kIGZpbGwgaXQgaW4uICovCiAJcmV0ID0gY2hzY19kZXRlcm1pbmVfYmFzZV9jaGFubmVsX3BhdGhfZGVzYyhjaHBpZCwgJmNocC0+ZGVzYyk7CkBAIC00MTEsNiArNDEwLDcgQEAKIAl9IGVsc2UgewogCQljaHAtPmNtZyA9IC0xOwogCX0KKwlkZXZfc2V0X25hbWUoJmNocC0+ZGV2LCAiY2hwJXguJTAyeCIsIGNocGlkLmNzc2lkLCBjaHBpZC5pZCk7CiAKIAkvKiBtYWtlIGl0IGtub3duIHRvIHRoZSBzeXN0ZW0gKi8KIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmNocC0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IGY3ODBiZGQuLjI0OTBiNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtMTI1MCw4ICsxMjUwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKIAotCWNkZXYgPSBzY2hfZ2V0X2NkZXYoc2NoKTsKLQlpZiAoY2RldikgeworCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkgewogCQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc2NoLT5kZXYua29iaiwKIAkJCQkJJmlvX3N1YmNoYW5uZWxfYXR0cl9ncm91cCk7CiAJCWlmIChyYykKQEAgLTEyNjAsMTMgKzEyNTksMTMgQEAKIAkJCQkgICAgICAiMC4leC4lMDR4IChyYz0lZClcbiIsCiAJCQkJICAgICAgc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGlkLnNjaF9ubywgcmMpOwogCQkvKgotCQkgKiBUaGlzIHN1YmNoYW5uZWwgYWxyZWFkeSBoYXMgYW4gYXNzb2NpYXRlZCBjY3dfZGV2aWNlLgorCQkgKiBUaGUgY29uc29sZSBzdWJjaGFubmVsIGFscmVhZHkgaGFzIGFuIGFzc29jaWF0ZWQgY2N3X2RldmljZS4KIAkJICogVGhyb3cgdGhlIGRlbGF5ZWQgdWV2ZW50IGZvciB0aGUgc3ViY2hhbm5lbCwgcmVnaXN0ZXIKLQkJICogdGhlIGNjd19kZXZpY2UgYW5kIGV4aXQuIFRoaXMgaGFwcGVucyBmb3IgYWxsIGVhcmx5Ci0JCSAqIGRldmljZXMsIGUuZy4gdGhlIGNvbnNvbGUuCisJCSAqIHRoZSBjY3dfZGV2aWNlIGFuZCBleGl0LgogCQkgKi8KIAkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAkJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKKwkJY2RldiA9IHNjaF9nZXRfY2RldihzY2gpOwogCQljZGV2LT5kZXYuZ3JvdXBzID0gY2N3ZGV2X2F0dHJfZ3JvdXBzOwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmY2Rldi0+ZGV2KTsKIAkJY2N3X2RldmljZV9yZWdpc3RlcihjZGV2KTsKQEAgLTE2MDksNyArMTYwOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRldmljZV9zZXRfZGlzY29ubmVjdGVkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQordm9pZCBjY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJaWYgKCFjZGV2KQogCQlyZXR1cm47CkBAIC0xNzA1LDcgKzE3MDQsNyBAQAogCQljY3dfZGV2aWNlX3RyaWdnZXJfcmVwcm9iZShjZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBESVNDOgotCQlkZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKKwkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IGVkMzlhMmMuLjI0NmM2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtMTI1LDYgKzEyNSw3IEBACiB2b2lkIGNjd19kZXZpY2VfdHJpZ2dlcl9yZXByb2JlKHN0cnVjdCBjY3dfZGV2aWNlICopOwogdm9pZCBjY3dfZGV2aWNlX2tpbGxfaW8oc3RydWN0IGNjd19kZXZpY2UgKik7CiBpbnQgY2N3X2RldmljZV9ub3RpZnkoc3RydWN0IGNjd19kZXZpY2UgKiwgaW50KTsKK3ZvaWQgY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKIHZvaWQgY2N3X2RldmljZV9zZXRfbm90b3BlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CiAKIC8qIHFkaW8gbmVlZHMgdGhpcy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggZTcyOGNlNC4uYjk2MTNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTM4NywxOSArMzg3LDM1IEBACiAKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IHN0YXRlOwogCi0JaWYgKHN0YXRlID09IERFVl9TVEFURV9CT1hFRCkgeworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIERFVl9TVEFURV9CT1hFRDoKIAkJQ0lPX01TR19FVkVOVCgwLCAiQm94ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAlMDR4XG4iLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCBzY2gtPnNjaGlkLnNjaF9ubyk7CiAJCWlmIChjZGV2LT5vbmxpbmUgJiYgIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkpCiAJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOwogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7Ci0JfQotCWlmIChzdGF0ZSA9PSBERVZfU1RBVEVfTk9UX09QRVIpIHsKKwkJYnJlYWs7CisJY2FzZSBERVZfU1RBVEVfTk9UX09QRVI6CiAJCUNJT19NU0dfRVZFTlQoMCwgIkRldmljZSAlMDR4IGdvbmUgb24gc3ViY2hhbm5lbCAlMDR4XG4iLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCBzY2gtPnNjaGlkLnNjaF9ubyk7CiAJCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQogCQkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKKwkJZWxzZQorCQkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CisJCWJyZWFrOworCWNhc2UgREVWX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKwkJQ0lPX01TR19FVkVOVCgwLCAiRGlzY29ubmVjdGVkIGRldmljZSAlMDR4IG9uIHN1YmNoYW5uZWwgIgorCQkJICAgICAgIiUwNHhcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywKKwkJCSAgICAgIHNjaC0+c2NoaWQuc2NoX25vKTsKKwkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fTk9fUEFUSCkpCisJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOworCQllbHNlCisJCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CisJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5KSB7CkBAIC02NzEsNiArNjg3LDEwIEBACiAJCWNjd19kZXZpY2VfZG9uZShjZGV2LCBERVZfU1RBVEVfTk9UX09QRVIpOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9CT1hFRCkgeworCQljY3dfZGV2aWNlX2RvbmUoY2RldiwgREVWX1NUQVRFX0JPWEVEKTsKKwkJcmV0dXJuIDA7CisJfQogCWlmIChjY3dfZGV2aWNlX2lzX29ycGhhbihjZGV2KSkgewogCQljY3dfZGV2aWNlX2RvbmUoY2RldiwgREVWX1NUQVRFX09GRkxJTkUpOwogCQlyZXR1cm4gMDsKQEAgLTczMCwxMSArNzUwLDEwIEBACiBzdGF0aWMgdm9pZCBjY3dfZGV2aWNlX2dlbmVyaWNfbm90b3BlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJCQkgICAgICAgZW51bSBkZXZfZXZlbnQgZGV2X2V2ZW50KQogewotCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7Ci0KLQljY3dfZGV2aWNlX3NldF9ub3RvcGVyKGNkZXYpOwotCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7Ci0JY3NzX3NjaGVkdWxlX2V2YWwoc2NoLT5zY2hpZCk7CisJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CisJZWxzZQorCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCmluZGV4IDFiNzhmNjMuLjc2NzY5OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJCSAgIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnZnNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnZnNfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JID0gcXN0YXRfc2VxX29wZW4sCiAJLnJlYWQJID0gc2VxX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYwppbmRleCBlZmY5NDM5Li45NjhlM2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgcWRpb19wZXJmX3Byb2Nfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFkaW9fcGVyZl9wcm9jX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxZGlvX3BlcmZfcHJvY19mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbgkgPSBxZGlvX3BlcmZfc2VxX29wZW4sCiAJLnJlYWQJID0gc2VxX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCmluZGV4IGMyMGQ0NzkuLjU2NzdiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCkBAIC0zNjEsNyArMzYxLDcgQEAKIAkJLlRvQ2FyZExlbjEJPSBzaXplb2YgKm1zZyAtIHNpemVvZihtc2ctPmhkciksCiAJCS5Gcm9tQ2FyZExlbjEJPSBzaXplb2YgKm1zZyAtIHNpemVvZihtc2ctPmhkciksCiAJfTsKLQlzdGF0aWMgc3RydWN0IENQUkJYIHN0YXRpY19jcHJieCA9IHsKKwlzdGF0aWMgc3RydWN0IENQUkJYIGxvY2FsX2NwcmJ4ID0gewogCQkuY3ByYl9sZW4JPSAweDAwZGMsCiAJCS5jcHJiX3Zlcl9pZAk9IDB4MDIsCiAJCS5mdW5jX2lkCT0gezB4NTQsIDB4MzJ9LApAQCAtMzcyLDcgKzM3Miw3IEBACiAKIAltc2ctPmhkciA9IHN0YXRpY190eXBlNl9oZHJYOwogCW1zZy0+aGRyLkZyb21DYXJkTGVuMiA9IHJhbmRvbV9udW1iZXJfbGVuZ3RoLAotCW1zZy0+Y3ByYnggPSBzdGF0aWNfY3ByYng7CisJbXNnLT5jcHJieCA9IGxvY2FsX2NwcmJ4OwogCW1zZy0+Y3ByYngucnBsX2RhdGFsID0gcmFuZG9tX251bWJlcl9sZW5ndGgsCiAJbXNnLT5jcHJieC5kb21haW4gPSBBUF9RSURfUVVFVUUoYXBfZGV2LT5xaWQpOwogCW1lbWNweShtc2ctPmZ1bmN0aW9uX2NvZGUsIG1zZy0+aGRyLmZ1bmN0aW9uX2NvZGUsIDB4MDIpOwpAQCAtNTYxLDcgKzU2MSw4IEBACiAJCWlmIChtc2ctPmNwcmJ4LmNwcmJfdmVyX2lkID09IDB4MDIpCiAJCQlyZXR1cm4gY29udmVydF90eXBlODZfaWNhKHpkZXYsIHJlcGx5LAogCQkJCQkJICBvdXRwdXRkYXRhLCBvdXRwdXRkYXRhbGVuZ3RoKTsKLQkJLyogbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93biByZXNwb25zZSAqLworCQkvKiBGYWxsIHRocm91Z2gsIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24KKwkJICogcmVzcG9uc2UgKi8KIAlkZWZhdWx0OiAvKiBVbmtub3duIHJlc3BvbnNlIHR5cGUsIHRoaXMgc2hvdWxkIE5FVkVSIEVWRVIgaGFwcGVuICovCiAJCXpkZXYtPm9ubGluZSA9IDA7CiAJCXJldHVybiAtRUFHQUlOOwkvKiByZXBlYXQgdGhlIHJlcXVlc3Qgb24gYSBkaWZmZXJlbnQgZGV2aWNlLiAqLwpAQCAtNTg3LDcgKzU4OCw4IEBACiAJCX0KIAkJaWYgKG1zZy0+Y3ByYnguY3ByYl92ZXJfaWQgPT0gMHgwMikKIAkJCXJldHVybiBjb252ZXJ0X3R5cGU4Nl94Y3JiKHpkZXYsIHJlcGx5LCB4Y1JCKTsKLQkJLyogbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93biByZXNwb25zZSAqLworCQkvKiBGYWxsIHRocm91Z2gsIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24KKwkJICogcmVzcG9uc2UgKi8KIAlkZWZhdWx0OiAvKiBVbmtub3duIHJlc3BvbnNlIHR5cGUsIHRoaXMgc2hvdWxkIE5FVkVSIEVWRVIgaGFwcGVuICovCiAJCXhjUkItPnN0YXR1cyA9IDB4MDAwODA0NERMOyAvKiBIRERfSW52YWxpZFBhcm0gKi8KIAkJemRldi0+b25saW5lID0gMDsKQEAgLTYxMCw3ICs2MTIsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChtc2ctPmNwcmJ4LmNwcmJfdmVyX2lkID09IDB4MDIpCiAJCQlyZXR1cm4gY29udmVydF90eXBlODZfcm5nKHpkZXYsIHJlcGx5LCBkYXRhKTsKLQkJLyogbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93biByZXNwb25zZSAqLworCQkvKiBGYWxsIHRocm91Z2gsIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24KKwkJICogcmVzcG9uc2UgKi8KIAlkZWZhdWx0OiAvKiBVbmtub3duIHJlc3BvbnNlIHR5cGUsIHRoaXMgc2hvdWxkIE5FVkVSIEVWRVIgaGFwcGVuICovCiAJCXpkZXYtPm9ubGluZSA9IDA7CiAJCXJldHVybiAtRUFHQUlOOwkvKiByZXBlYXQgdGhlIHJlcXVlc3Qgb24gYSBkaWZmZXJlbnQgZGV2aWNlLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IDEwMjAwMGQuLjMwMTIzNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTE1OCw3ICsxNTgsMTIgQEAKIAkJc21zZ19wYXRoLT5mbGFncyA9IDA7CiAJCXJjID0gaXVjdl9wYXRoX2Nvbm5lY3Qoc21zZ19wYXRoLCAmc21zZ19oYW5kbGVyLCAiKk1TRyAgICAiLAogCQkJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJpdWN2X3BhdGhfY29ubmVjdCByZXR1cm5lZCB3aXRoIHJjICVpXG4iLCByYyk7CisjaWZkZWYgQ09ORklHX1BNX0RFQlVHCisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJpdWN2X3BhdGhfY29ubmVjdCByZXR1cm5lZCB3aXRoIHJjICVpXG4iLCByYyk7CisjZW5kaWYKKwkJY3BjbWQoIlNFVCBTTVNHIElVQ1YiLCBOVUxMLCAwLCBOVUxMKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCAxYmU2YmY3Li4yODg5ZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTgwLDI4ICs4MCwzNSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgemZjcF9pbml0X2RldmljZV9jb25maWd1cmUoY2hhciAqYnVzaWQsIHU2NCB3d3BuLCB1NjQgbHVuKQogeworCXN0cnVjdCBjY3dfZGV2aWNlICpjY3dkZXY7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAKLQltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKLQlyZWFkX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCWFkYXB0ZXIgPSB6ZmNwX2dldF9hZGFwdGVyX2J5X2J1c2lkKGJ1c2lkKTsKLQlpZiAoYWRhcHRlcikKLQkJemZjcF9hZGFwdGVyX2dldChhZGFwdGVyKTsKLQlyZWFkX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CisJY2N3ZGV2ID0gZ2V0X2Njd2Rldl9ieV9idXNpZCgmemZjcF9jY3dfZHJpdmVyLCBidXNpZCk7CisJaWYgKCFjY3dkZXYpCisJCXJldHVybjsKIAorCWlmIChjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2N3ZGV2KSkKKwkJZ290byBvdXRfY2N3ZGV2OworCisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CisJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3ZGV2LT5kZXYpOwogCWlmICghYWRhcHRlcikKLQkJZ290byBvdXRfYWRhcHRlcjsKLQlwb3J0ID0gemZjcF9wb3J0X2VucXVldWUoYWRhcHRlciwgd3dwbiwgMCwgMCk7Ci0JaWYgKElTX0VSUihwb3J0KSkKKwkJZ290byBvdXRfdW5sb2NrOworCXpmY3BfYWRhcHRlcl9nZXQoYWRhcHRlcik7CisKKwlwb3J0ID0gemZjcF9nZXRfcG9ydF9ieV93d3BuKGFkYXB0ZXIsIHd3cG4pOworCWlmICghcG9ydCkKIAkJZ290byBvdXRfcG9ydDsKKworCXpmY3BfcG9ydF9nZXQocG9ydCk7CiAJdW5pdCA9IHpmY3BfdW5pdF9lbnF1ZXVlKHBvcnQsIGx1bik7CiAJaWYgKElTX0VSUih1bml0KSkKIAkJZ290byBvdXRfdW5pdDsKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwotCWNjd19kZXZpY2Vfc2V0X29ubGluZShhZGFwdGVyLT5jY3dfZGV2aWNlKTsKIAorCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIDAsICJhdWlkY18xIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOwogCkBAIC0xMTEsMjAgKzExOCwyMyBAQAogCXpmY3BfcG9ydF9wdXQocG9ydCk7CiBvdXRfcG9ydDoKIAl6ZmNwX2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwotb3V0X2FkYXB0ZXI6CitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CitvdXRfY2N3ZGV2OgorCXB1dF9kZXZpY2UoJmNjd2Rldi0+ZGV2KTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB6ZmNwX2luaXRfZGV2aWNlX3NldHVwKGNoYXIgKmRldnN0cikKIHsKIAljaGFyICp0b2tlbjsKLQljaGFyICpzdHI7CisJY2hhciAqc3RyLCAqc3RyX3NhdmVkOwogCWNoYXIgYnVzaWRbWkZDUF9CVVNfSURfU0laRV07CiAJdTY0IHd3cG4sIGx1bjsKIAogCS8qIGR1cGxpY2F0ZSBkZXZzdHIgYW5kIGtlZXAgdGhlIG9yaWdpbmFsIGZvciBzeXNmcyBwcmVzZW50YXRpb24qLwotCXN0ciA9IGttYWxsb2Moc3RybGVuKGRldnN0cikgKyAxLCBHRlBfS0VSTkVMKTsKKwlzdHJfc2F2ZWQgPSBrbWFsbG9jKHN0cmxlbihkZXZzdHIpICsgMSwgR0ZQX0tFUk5FTCk7CisJc3RyID0gc3RyX3NhdmVkOwogCWlmICghc3RyKQogCQlyZXR1cm47CiAKQEAgLTE0MywxMiArMTUzLDEyIEBACiAJaWYgKCF0b2tlbiB8fCBzdHJpY3Rfc3RydG91bGwodG9rZW4sIDAsICh1bnNpZ25lZCBsb25nIGxvbmcgKikgJmx1bikpCiAJCWdvdG8gZXJyX291dDsKIAotCWtmcmVlKHN0cik7CisJa2ZyZWUoc3RyX3NhdmVkKTsKIAl6ZmNwX2luaXRfZGV2aWNlX2NvbmZpZ3VyZShidXNpZCwgd3dwbiwgbHVuKTsKIAlyZXR1cm47CiAKLSBlcnJfb3V0OgotCWtmcmVlKHN0cik7CitlcnJfb3V0OgorCWtmcmVlKHN0cl9zYXZlZCk7CiAJcHJfZXJyKCIlcyBpcyBub3QgYSB2YWxpZCBTQ1NJIGRldmljZVxuIiwgZGV2c3RyKTsKIH0KIApAQCAtNTkzLDEwICs2MDMsOCBAQAogCWludCByZXR2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnN0YXRfd29yayk7CiAJemZjcF9mY193a2FfcG9ydHNfZm9yY2Vfb2ZmbGluZShhZGFwdGVyLT5ncyk7Ci0JemZjcF9hZGFwdGVyX3Njc2lfdW5yZWdpc3RlcihhZGFwdGVyKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldi5rb2JqLAogCQkJICAgJnpmY3Bfc3lzZnNfYWRhcHRlcl9hdHRycyk7CiAJZGV2X3NldF9kcnZkYXRhKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKaW5kZXggMGM5MGY4ZS4uZTA4MzM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCkBAIC0xMDIsNiArMTAyLDE0IEBACiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKIAlpZiAoIWFkYXB0ZXIpCiAJCWdvdG8gb3V0OworCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CisKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zY2FuX3dvcmspOworCisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CisKKwkvKiB0aGlzIGFsc28gcmVtb3ZlcyB0aGUgc2NzaSBkZXZpY2VzLCBzbyBjYWxsIGl0IGZpcnN0ICovCisJemZjcF9hZGFwdGVyX3Njc2lfdW5yZWdpc3RlcihhZGFwdGVyKTsKIAogCXdyaXRlX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwLCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpIHsKQEAgLTExNywxMSArMTI1LDggQEAKIAl3cml0ZV91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHAsICZwb3J0X3JlbW92ZV9saCwgbGlzdCkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5pdCwgdSwgJnVuaXRfcmVtb3ZlX2xoLCBsaXN0KSB7Ci0JCQlpZiAodW5pdC0+ZGV2aWNlKQotCQkJCXNjc2lfcmVtb3ZlX2RldmljZSh1bml0LT5kZXZpY2UpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5pdCwgdSwgJnVuaXRfcmVtb3ZlX2xoLCBsaXN0KQogCQkJemZjcF91bml0X2RlcXVldWUodW5pdCk7Ci0JCX0KIAkJemZjcF9wb3J0X2RlcXVldWUocG9ydCk7CiAJfQogCXdhaXRfZXZlbnQoYWRhcHRlci0+cmVtb3ZlX3dxLCBhdG9taWNfcmVhZCgmYWRhcHRlci0+cmVmY291bnQpID09IDApOwpAQCAtMTkyLDEzICsxOTcsOSBAQAogCiAJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKLQlpZiAoIWFkYXB0ZXIpCi0JCWdvdG8gb3V0OwotCiAJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2Nzb2ZmMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKLW91dDoKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUzLDEzICsyNTQsMTcgQEAKIAogCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNkZXYtPmRldik7CisJaWYgKCFhZGFwdGVyKQorCQlnb3RvIG91dDsKKwogCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc2h1dDEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCXpmY3BfZXJwX3RocmVhZF9raWxsKGFkYXB0ZXIpOworb3V0OgogCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2N3X2RyaXZlciB6ZmNwX2Njd19kcml2ZXIgPSB7CitzdHJ1Y3QgY2N3X2RyaXZlciB6ZmNwX2Njd19kcml2ZXIgPSB7CiAJLm93bmVyICAgICAgID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgICAgICAgID0gInpmY3AiLAogCS5pZHMgICAgICAgICA9IHpmY3BfY2N3X2RldmljZV9pZCwKQEAgLTI4NCwyMCArMjg5LDMgQEAKIHsKIAlyZXR1cm4gY2N3X2RyaXZlcl9yZWdpc3RlcigmemZjcF9jY3dfZHJpdmVyKTsKIH0KLQotLyoqCi0gKiB6ZmNwX2dldF9hZGFwdGVyX2J5X2J1c2lkIC0gZmluZCB6ZmNwX2FkYXB0ZXIgc3RydWN0Ci0gKiBAYnVzaWQ6IGJ1cyBpZCBzdHJpbmcgb2YgemZjcCBhZGFwdGVyIHRvIGZpbmQKLSAqLwotc3RydWN0IHpmY3BfYWRhcHRlciAqemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZChjaGFyICpidXNpZCkKLXsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2N3X2RldmljZTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKLQotCWNjd19kZXZpY2UgPSBnZXRfY2N3ZGV2X2J5X2J1c2lkKCZ6ZmNwX2Njd19kcml2ZXIsIGJ1c2lkKTsKLQlpZiAoY2N3X2RldmljZSkgewotCQlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOwotCQlwdXRfZGV2aWNlKCZjY3dfZGV2aWNlLT5kZXYpOwotCX0KLQlyZXR1cm4gYWRhcHRlcjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jZmRjLmMKaW5kZXggODMwNWM4Ny4uZWY2ODFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jZmRjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jZmRjLmMKQEAgLTg2LDggKzg2LDIzIEBACiBzdGF0aWMgc3RydWN0IHpmY3BfYWRhcHRlciAqemZjcF9jZmRjX2dldF9hZGFwdGVyKHUzMiBkZXZubykKIHsKIAljaGFyIGJ1c2lkWzldOworCXN0cnVjdCBjY3dfZGV2aWNlICpjY3dkZXY7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IE5VTEw7CisKIAlzbnByaW50ZihidXNpZCwgc2l6ZW9mKGJ1c2lkKSwgIjAuMC4lMDR4IiwgZGV2bm8pOwotCXJldHVybiB6ZmNwX2dldF9hZGFwdGVyX2J5X2J1c2lkKGJ1c2lkKTsKKwljY3dkZXYgPSBnZXRfY2N3ZGV2X2J5X2J1c2lkKCZ6ZmNwX2Njd19kcml2ZXIsIGJ1c2lkKTsKKwlpZiAoIWNjd2RldikKKwkJZ290byBvdXQ7CisKKwlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dkZXYtPmRldik7CisJaWYgKCFhZGFwdGVyKQorCQlnb3RvIG91dF9wdXQ7CisKKwl6ZmNwX2FkYXB0ZXJfZ2V0KGFkYXB0ZXIpOworb3V0X3B1dDoKKwlwdXRfZGV2aWNlKCZjY3dkZXYtPmRldik7CitvdXQ6CisJcmV0dXJuIGFkYXB0ZXI7CiB9CiAKIHN0YXRpYyBpbnQgemZjcF9jZmRjX3NldF9mc2Yoc3RydWN0IHpmY3BfZnNmX2NmZGMgKmZzZl9jZmRjLCBpbnQgY29tbWFuZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCmluZGV4IDczZDM2NmIuLmY3M2UyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwpAQCAtODU4LDEwICs4NTgsNyBAQAogCQlpZiAoZmNfaG9zdF9wb3J0X3R5cGUoYWRhcHRlci0+c2NzaV9ob3N0KSA9PSBGQ19QT1JUVFlQRV9QVFApCiAJCQlyZXR1cm4gemZjcF9lcnBfb3Blbl9wdHBfcG9ydChhY3QpOwogCQlpZiAoIXBvcnQtPmRfaWQpIHsKLQkJCXpmY3BfcG9ydF9nZXQocG9ydCk7Ci0JCQlpZiAoIXF1ZXVlX3dvcmsoYWRhcHRlci0+d29ya19xdWV1ZSwKLQkJCQkJJnBvcnQtPmdpZF9wbl93b3JrKSkKLQkJCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOworCQkJemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAocG9ydCk7CiAJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJfQogCQlyZXR1cm4gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX3BvcnQoYWN0KTsKQEAgLTg2OSwxMiArODY2LDExIEBACiAJY2FzZSBaRkNQX0VSUF9TVEVQX1BPUlRfT1BFTklORzoKIAkJLyogRF9JRCBtaWdodCBoYXZlIGNoYW5nZWQgZHVyaW5nIG9wZW4gKi8KIAkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pIHsKLQkJCWlmIChwb3J0LT5kX2lkKQotCQkJCXJldHVybiBaRkNQX0VSUF9TVUNDRUVERUQ7Ci0JCQllbHNlIHsKLQkJCQlhY3QtPnN0ZXAgPSBaRkNQX0VSUF9TVEVQX1BPUlRfQ0xPU0lORzsKLQkJCQlyZXR1cm4gWkZDUF9FUlBfQ09OVElOVUVTOworCQkJaWYgKCFwb3J0LT5kX2lkKSB7CisJCQkJemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAocG9ydCk7CisJCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CiAJCQl9CisJCQlyZXR1cm4gWkZDUF9FUlBfU1VDQ0VFREVEOwogCQl9CiAJCWlmIChwb3J0LT5kX2lkICYmICEocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fTk9FU0MpKSB7CiAJCQlwb3J0LT5kX2lkID0gMDsKQEAgLTg4OSwxOSArODg1LDIxIEBACiBzdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3koc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKKwlpbnQgcF9zdGF0dXMgPSBhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKTsKIAotCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykKKwlpZiAoKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDKSAmJgorCSAgICAhKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pKQogCQlnb3RvIGNsb3NlX2luaXRfZG9uZTsKIAogCXN3aXRjaCAoZXJwX2FjdGlvbi0+c3RlcCkgewogCWNhc2UgWkZDUF9FUlBfU1RFUF9VTklOSVRJQUxJWkVEOgogCQl6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X2NsZWFyc3RhdGkocG9ydCk7Ci0JCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQorCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKIAkJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X2Nsb3NlKGVycF9hY3Rpb24pOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfU1RFUF9QT1JUX0NMT1NJTkc6Ci0JCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQorCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKIAkJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCmluZGV4IDM2OTM1YmMuLmIzZjI4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaApAQCAtMjgsNyArMjgsNyBAQAogLyogemZjcF9jY3cuYyAqLwogZXh0ZXJuIGludCB6ZmNwX2Njd19yZWdpc3Rlcih2b2lkKTsKIGV4dGVybiBpbnQgemZjcF9jY3dfcHJpdl9zY2goc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiBzdHJ1Y3QgemZjcF9hZGFwdGVyICp6ZmNwX2dldF9hZGFwdGVyX2J5X2J1c2lkKGNoYXIgKik7CitleHRlcm4gc3RydWN0IGNjd19kcml2ZXIgemZjcF9jY3dfZHJpdmVyOwogCiAvKiB6ZmNwX2NmZGMuYyAqLwogZXh0ZXJuIHN0cnVjdCBtaXNjZGV2aWNlIHpmY3BfY2ZkY19taXNjOwpAQCAtOTYsNiArOTYsNyBAQAogZXh0ZXJuIHZvaWQgX3pmY3BfZmNfc2Nhbl9wb3J0c19sYXRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19wb3J0X2RpZF9sb29rdXAoc3RydWN0IHdvcmtfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAoc3RydWN0IHpmY3BfcG9ydCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUoc3RydWN0IHpmY3BfcG9ydCAqLCBzdHJ1Y3QgZnNmX3Bsb2dpICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY190ZXN0X2xpbmsoc3RydWN0IHpmY3BfcG9ydCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfbGlua190ZXN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCmluZGV4IDcyMmYyMmQuLmRmMjNiY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKQEAgLTM2MSw2ICszNjEsMTcgQEAKIH0KIAogLyoqCisgKiB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cCAtIHRyaWdnZXIgdGhlIGRfaWQgbG9va3VwIHVzaW5nIGEgR0lEX1BOIHJlcXVlc3QKKyAqIEBwb3J0OiBUaGUgemZjcF9wb3J0IHRvIGxvb2t1cCB0aGUgZF9pZCBmb3IuCisgKi8KK3ZvaWQgemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3sKKwl6ZmNwX3BvcnRfZ2V0KHBvcnQpOworCWlmICghcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLCAmcG9ydC0+Z2lkX3BuX3dvcmspKQorCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOworfQorCisvKioKICAqIHpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUgLSBldmFsdWF0ZSBQTE9HSSBwbGF5bG9hZAogICogQHBvcnQ6IHpmY3BfcG9ydCBzdHJ1Y3R1cmUKICAqIEBwbG9naTogcGxvZ2kgcGF5bG9hZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggZjA5Yzg2My4uNGU0MWJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC0xMDU4LDE0ICsxMDU4LDI4IEBACiAJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCiAJCQkJCVNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwKIAkJCQkJc2dfcmVzcCwgbWF4X3NiYWxzKTsKKwlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlc3BfYnVmX2xlbmd0aCA9IGJ5dGVzOwogCWlmIChieXRlcyA8PSAwKQogCQlyZXR1cm4gLUVJTzsKIAorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpmY3BfZnNmX3NldHVwX2N0X2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEsCisJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVxLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3Jlc3AsCisJCQkJIGludCBtYXhfc2JhbHMpCit7CisJaW50IHJldDsKKworCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2Vsc19zYmFscyhyZXEsIHNnX3JlcSwgc2dfcmVzcCwgbWF4X3NiYWxzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJLyogY29tbW9uIHNldHRpbmdzIGZvciBjdC9ncyBhbmQgZWxzIHJlcXVlc3RzICovCi0JcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5yZXNwX2J1Zl9sZW5ndGggPSBieXRlczsKIAlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnNlcnZpY2VfY2xhc3MgPSBGU0ZfQ0xBU1NfMzsKIAlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnRpbWVvdXQgPSAyICogUl9BX1RPVjsKLQl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsIDIgKiBSX0FfVE9WICsgMTApOworCXpmY3BfZnNmX3N0YXJ0X3RpbWVyKHJlcSwgKDIgKiBSX0FfVE9WICsgMTApICogSFopOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDk0LDggKzExMDgsOCBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2Vsc19zYmFscyhyZXEsIGN0LT5yZXEsIGN0LT5yZXNwLAotCQkJCQkgIEZTRl9NQVhfU0JBTFNfUEVSX1JFUSk7CisJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzKHJlcSwgY3QtPnJlcSwgY3QtPnJlc3AsCisJCQkJICAgIEZTRl9NQVhfU0JBTFNfUEVSX1JFUSk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWRfc2VuZDsKIApAQCAtMTE5Miw3ICsxMjA2LDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHNfc2JhbHMocmVxLCBlbHMtPnJlcSwgZWxzLT5yZXNwLCAyKTsKKwlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHMocmVxLCBlbHMtPnJlcSwgZWxzLT5yZXNwLCAyKTsKIAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkX3NlbmQ7CkBAIC0xNDYxLDkgKzE0NzUsMTYgQEAKIAkJcGxvZ2kgPSAoc3RydWN0IGZzZl9wbG9naSAqKSByZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LmVsczsKIAkJaWYgKHJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZWxzMV9sZW5ndGggPj0KIAkJICAgIEZTRl9QTE9HSV9NSU5fTEVOKSB7Ci0JCQlpZiAocGxvZ2ktPnNlcnZfcGFyYW0ud3dwbiAhPSBwb3J0LT53d3BuKQorCQkJaWYgKHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4gIT0gcG9ydC0+d3dwbikgewogCQkJCXBvcnQtPmRfaWQgPSAwOwotCQkJZWxzZSB7CisJCQkJZGV2X3dhcm4oJnBvcnQtPmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKKwkJCQkJICJBIHBvcnQgb3BlbmVkIHdpdGggV1dQTiAweCUwMTZMeCAiCisJCQkJCSAicmV0dXJuZWQgZGF0YSB0aGF0IGlkZW50aWZpZXMgaXQgYXMgIgorCQkJCQkgIldXUE4gMHglMDE2THhcbiIsCisJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBwb3J0LT53d3BuLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJICBwbG9naS0+c2Vydl9wYXJhbS53d3BuKTsKKwkJCX0gZWxzZSB7CiAJCQkJcG9ydC0+d3dubiA9IHBsb2dpLT5zZXJ2X3BhcmFtLnd3bm47CiAJCQkJemZjcF9mY19wbG9naV9ldmFsdWF0ZShwb3J0LCBwbG9naSk7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKaW5kZXggMDc5YThjZi4uZDMxMDAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwpAQCAtMjI0LDYgKzIyNCw3IEBACiAKIAl6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCAwLCAic3l1YXNfMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7CisJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIAl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogb3V0OgogCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDgyYmIzYjIuLmUxMWNjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0zNjYsNiArMzY2LDcgQEAKIAogc291cmNlICJkcml2ZXJzL3Njc2kvY3hnYjNpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvc2NzaS9ibngyaS9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL3Njc2kvYmUyaXNjc2kvS2NvbmZpZyIKIAogY29uZmlnIFNHSVdEOTNfU0NTSQogCXRyaXN0YXRlICJTR0kgV0Q5M0M5MyBTQ1NJIERyaXZlciIKQEAgLTE4MjcsNiArMTgyOCwxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGlic3JwLgogCitjb25maWcgU0NTSV9CRkFfRkMKKwl0cmlzdGF0ZSAiQnJvY2FkZSBCRkEgRmlicmUgQ2hhbm5lbCBTdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9GQ19BVFRSUworCWhlbHAKKwkgIFRoaXMgYmZhIGRyaXZlciBzdXBwb3J0cyBhbGwgQnJvY2FkZSBQQ0llIEZDL0ZDT0UgaG9zdCBhZGFwdGVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgYmZhLgorCiBlbmRpZiAjIFNDU0lfTE9XTEVWRUwKIAogc291cmNlICJkcml2ZXJzL3Njc2kvcGNtY2lhL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggNjFhOTRhZi4uM2FkNjFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtODYsNiArODYsNyBAQAogb2JqLSQoQ09ORklHX1NDU0lfUUxBX0ZDKQkrPSBxbGEyeHh4Lwogb2JqLSQoQ09ORklHX1NDU0lfUUxBX0lTQ1NJKQkrPSBxbGE0eHh4Lwogb2JqLSQoQ09ORklHX1NDU0lfTFBGQykJCSs9IGxwZmMvCitvYmotJChDT05GSUdfU0NTSV9CRkFfRkMpCSs9IGJmYS8KIG9iai0kKENPTkZJR19TQ1NJX1BBUzE2KQkrPSBwYXMxNi5vCiBvYmotJChDT05GSUdfU0NTSV9UMTI4KQkJKz0gdDEyOC5vCiBvYmotJChDT05GSUdfU0NTSV9ETVgzMTkxRCkJKz0gZG14MzE5MWQubwpAQCAtMTMwLDYgKzEzMSw3IEBACiBvYmotJChDT05GSUdfUFMzX1JPTSkJCSs9IHBzM3JvbS5vCiBvYmotJChDT05GSUdfU0NTSV9DWEdCM19JU0NTSSkJKz0gbGliaXNjc2kubyBsaWJpc2NzaV90Y3AubyBjeGdiM2kvCiBvYmotJChDT05GSUdfU0NTSV9CTlgyX0lTQ1NJKQkrPSBsaWJpc2NzaS5vIGJueDJpLworb2JqLSQoQ09ORklHX0JFMklTQ1NJKQkJKz0gbGliaXNjc2kubyBiZTJpc2NzaS8KIG9iai0kKENPTkZJR19TQ1NJX1BNQ1JBSUQpCSs9IHBtY3JhaWQubwogCiBvYmotJChDT05GSUdfQVJNKQkJKz0gYXJtLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTUyZmNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWcKQEAgLTAsMCArMSw4IEBACitjb25maWcgQkUySVNDU0kKKwl0cmlzdGF0ZSAiU2VydmVyRW5naW5lcycgMTBHYnBzIGlTQ1NJIC0gQmxhZGVFbmdpbmUgMiIKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJc2VsZWN0IFNDU0lfSVNDU0lfQVRUUlMKKworCWhlbHAKKwlUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBpU0NTSSBmdW5jdGlvbmFsaXR5IGZvciBTZXJ2ZXJFbmdpbmVzJworCTEwR2JwcyBTdG9yYWdlIGFkYXB0ZXIgLSBCbGFkZUVuZ2luZSAyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWY0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBpU0NTSSBkcml2ZXIgZm9yIFNlcnZlckVuZ2luZSdzIEJsYWRlRW5naW5lLgorIworIworCitvYmotJChDT05GSUdfQkUySVNDU0kpICs9IGJlMmlzY3NpLm8KKworYmUyaXNjc2kteSA6PSBiZV9pc2NzaS5vIGJlX21haW4ubyBiZV9tZ210Lm8gYmVfY21kcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjAyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaApAQCAtMCwwICsxLDE4MyBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKi8KKworI2lmbmRlZiBCRUlTQ1NJX0gKKyNkZWZpbmUgQkVJU0NTSV9ICisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisKKyNkZWZpbmUgRldfVkVSX0xFTiAzMgorCitzdHJ1Y3QgYmVfZG1hX21lbSB7CisJdm9pZCAqdmE7CisJZG1hX2FkZHJfdCBkbWE7CisJdTMyIHNpemU7Cit9OworCitzdHJ1Y3QgYmVfcXVldWVfaW5mbyB7CisJc3RydWN0IGJlX2RtYV9tZW0gZG1hX21lbTsKKwl1MTYgbGVuOworCXUxNiBlbnRyeV9zaXplOwkJLyogU2l6ZSBvZiBhbiBlbGVtZW50IGluIHRoZSBxdWV1ZSAqLworCXUxNiBpZDsKKwl1MTYgdGFpbCwgaGVhZDsKKwlib29sIGNyZWF0ZWQ7CisJYXRvbWljX3QgdXNlZDsJCS8qIE51bWJlciBvZiB2YWxpZCBlbGVtZW50cyBpbiB0aGUgcXVldWUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdTMyIE1PRFVMTyh1MTYgdmFsLCB1MTYgbGltaXQpCit7CisJV0FSTl9PTihsaW1pdCAmIChsaW1pdCAtIDEpKTsKKwlyZXR1cm4gdmFsICYgKGxpbWl0IC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmRleF9pbmModTE2ICppbmRleCwgdTE2IGxpbWl0KQoreworCSppbmRleCA9IE1PRFVMTygoKmluZGV4ICsgMSksIGxpbWl0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpxdWV1ZV9oZWFkX25vZGUoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyBxLT5oZWFkICogcS0+ZW50cnlfc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpxdWV1ZV90YWlsX25vZGUoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyBxLT50YWlsICogcS0+ZW50cnlfc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX2hlYWRfaW5jKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCWluZGV4X2luYygmcS0+aGVhZCwgcS0+bGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX3RhaWxfaW5jKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCWluZGV4X2luYygmcS0+dGFpbCwgcS0+bGVuKTsKK30KKworLypJU0NTSSAqLworCitzdHJ1Y3QgYmVfZXFfb2JqIHsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBxOworCWNoYXIgZGVzY1szMl07CisKKwkvKiBBZGFwdGl2ZSBpbnRlcnJ1cHQgY29hbGVzY2luZyAoQUlDKSBpbmZvICovCisJYm9vbCBlbmFibGVfYWljOworCXUxNiBtaW5fZXFkOwkJLyogaW4gdXNlY3MgKi8KKwl1MTYgbWF4X2VxZDsJCS8qIGluIHVzZWNzICovCisJdTE2IGN1cl9lcWQ7CQkvKiBpbiB1c2VjcyAqLworfTsKKworc3RydWN0IGJlX21jY19vYmogeworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcTsKK307CisKK3N0cnVjdCBiZV9jdHJsX2luZm8geworCXU4IF9faW9tZW0gKmNzcjsKKwl1OCBfX2lvbWVtICpkYjsJCS8qIERvb3IgQmVsbCAqLworCXU4IF9faW9tZW0gKnBjaWNmZzsJLyogUENJIGNvbmZpZyBzcGFjZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJLyogTWJveCB1c2VkIGZvciBjbWQgcmVxdWVzdC9yZXNwb25zZSAqLworCXNwaW5sb2NrX3QgbWJveF9sb2NrOwkvKiBGb3Igc2VyaWFsaXppbmcgbWJveCBjbWRzIHRvIEJFIGNhcmQgKi8KKwlzdHJ1Y3QgYmVfZG1hX21lbSBtYm94X21lbTsKKwkvKiBNYm94IG1lbSBpcyBhZGp1c3RlZCB0byBhbGlnbiB0byAxNiBieXRlcy4gVGhlIGFsbG9jYXRlZCBhZGRyCisJICogaXMgc3RvcmVkIGZvciBmcmVlaW5nIHB1cnBvc2UgKi8KKwlzdHJ1Y3QgYmVfZG1hX21lbSBtYm94X21lbV9hbGxvY2VkOworCisJLyogTUNDIFJpbmdzICovCisJc3RydWN0IGJlX21jY19vYmogbWNjX29iajsKKwlzcGlubG9ja190IG1jY19sb2NrOwkvKiBGb3Igc2VyaWFsaXppbmcgbWNjIGNtZHMgdG8gQkUgY2FyZCAqLworCXNwaW5sb2NrX3QgbWNjX2NxX2xvY2s7CisKKwkvKiBNQ0MgQXN5bmMgY2FsbGJhY2sgKi8KKwl2b2lkICgqYXN5bmNfY2IpICh2b2lkICphZGFwdGVyLCBib29sIGxpbmtfdXApOworCXZvaWQgKmFkYXB0ZXJfY3R4dDsKK307CisKKyNpbmNsdWRlICJiZV9jbWRzLmgiCisKKyNkZWZpbmUgUEFHRV9TSElGVF80SyAxMgorI2RlZmluZSBQQUdFX1NJWkVfNEsgKDEgPDwgUEFHRV9TSElGVF80SykKKworLyogUmV0dXJucyBudW1iZXIgb2YgcGFnZXMgc3Bhbm5lZCBieSB0aGUgZGF0YSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkciAqLworI2RlZmluZSBQQUdFU180S19TUEFOTkVEKF9hZGRyZXNzLCBzaXplKSAJCQkJXAorCQkoKHUzMikoKCgoc2l6ZV90KShfYWRkcmVzcykgJiAoUEFHRV9TSVpFXzRLIC0gMSkpICsgCVwKKwkJCShzaXplKSArIChQQUdFX1NJWkVfNEsgLSAxKSkgPj4gUEFHRV9TSElGVF80SykpCisKKy8qIEJ5dGUgb2Zmc2V0IGludG8gdGhlIHBhZ2UgY29ycmVzcG9uZGluZyB0byBnaXZlbiBhZGRyZXNzICovCisjZGVmaW5lIE9GRlNFVF9JTl9QQUdFKGFkZHIpCQkJCQkJXAorCQkoKHNpemVfdCkoYWRkcikgJiAoUEFHRV9TSVpFXzRLLTEpKQorCisvKiBSZXR1cm5zIGJpdCBvZmZzZXQgd2l0aGluIGEgRFdPUkQgb2YgYSBiaXRmaWVsZCAqLworI2RlZmluZSBBTUFQX0JJVF9PRkZTRVQoX3N0cnVjdCwgZmllbGQpICAJCQkJXAorCQkoKChzaXplX3QpJigoKF9zdHJ1Y3QgKikwKS0+ZmllbGQpKSUzMikKKworLyogUmV0dXJucyB0aGUgYml0IG1hc2sgb2YgdGhlIGZpZWxkIHRoYXQgaXMgTk9UIHNoaWZ0ZWQgaW50byBsb2NhdGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGFtYXBfbWFzayh1MzIgYml0c2l6ZSkKK3sKKwlyZXR1cm4gKGJpdHNpemUgPT0gMzIgPyAweEZGRkZGRkZGIDogKDEgPDwgYml0c2l6ZSkgLSAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFtYXBfc2V0KHZvaWQgKnB0ciwgdTMyIGR3X29mZnNldCwgdTMyIG1hc2ssCisJCQkJCXUzMiBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwl1MzIgKmR3ID0gKHUzMiAqKSBwdHIgKyBkd19vZmZzZXQ7CisJKmR3ICY9IH4obWFzayA8PCBvZmZzZXQpOworCSpkdyB8PSAobWFzayAmIHZhbHVlKSA8PCBvZmZzZXQ7Cit9CisKKyNkZWZpbmUgQU1BUF9TRVRfQklUUyhfc3RydWN0LCBmaWVsZCwgcHRyLCB2YWwpCQkJCVwKKwkJYW1hcF9zZXQocHRyLAkJCQkJCVwKKwkJCW9mZnNldG9mKF9zdHJ1Y3QsIGZpZWxkKS8zMiwJCQlcCisJCQlhbWFwX21hc2soc2l6ZW9mKCgoX3N0cnVjdCAqKTApLT5maWVsZCkpLAlcCisJCQlBTUFQX0JJVF9PRkZTRVQoX3N0cnVjdCwgZmllbGQpLAkJXAorCQkJdmFsKQorCitzdGF0aWMgaW5saW5lIHUzMiBhbWFwX2dldCh2b2lkICpwdHIsIHUzMiBkd19vZmZzZXQsIHUzMiBtYXNrLCB1MzIgb2Zmc2V0KQoreworCXUzMiAqZHcgPSBwdHI7CisJcmV0dXJuIG1hc2sgJiAoKihkdyArIGR3X29mZnNldCkgPj4gb2Zmc2V0KTsKK30KKworI2RlZmluZSBBTUFQX0dFVF9CSVRTKF9zdHJ1Y3QsIGZpZWxkLCBwdHIpCQkJCVwKKwkJYW1hcF9nZXQocHRyLAkJCQkJCVwKKwkJCW9mZnNldG9mKF9zdHJ1Y3QsIGZpZWxkKS8zMiwJCQlcCisJCQlhbWFwX21hc2soc2l6ZW9mKCgoX3N0cnVjdCAqKTApLT5maWVsZCkpLAlcCisJCQlBTUFQX0JJVF9PRkZTRVQoX3N0cnVjdCwgZmllbGQpKQorCisjZGVmaW5lIGJlX2R3c19jcHVfdG9fbGUod3JiLCBsZW4pIHN3YXBfZHdzKHdyYiwgbGVuKQorI2RlZmluZSBiZV9kd3NfbGVfdG9fY3B1KHdyYiwgbGVuKSBzd2FwX2R3cyh3cmIsIGxlbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2R3cyh2b2lkICp3cmIsIGludCBsZW4pCit7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTMyICpkdyA9IHdyYjsKKwlXQVJOX09OKGxlbiAlIDQpOworCWRvIHsKKwkJKmR3ID0gY3B1X3RvX2xlMzIoKmR3KTsKKwkJZHcrKzsKKwkJbGVuIC09IDQ7CisJfSB3aGlsZSAobGVuKTsKKyNlbmRpZiAvKiBfX0JJR19FTkRJQU4gKi8KK30KKworZXh0ZXJuIHZvaWQgYmVpc2NzaV9jcV9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2IHFpZCwgYm9vbCBhcm0sCisJCQkgICAgICB1MTYgbnVtX3BvcHBlZCk7CisKKyNlbmRpZiAvKiBCRUlTQ1NJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDA3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCkBAIC0wLDAgKzEsNTIzIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqLworCisjaW5jbHVkZSAiYmUuaCIKKyNpbmNsdWRlICJiZV9tZ210LmgiCisjaW5jbHVkZSAiYmVfbWFpbi5oIgorCitzdGF0aWMgaW5saW5lIGJvb2wgYmVfbWNjX2NvbXBsX2lzX25ldyhzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKK3sKKwlpZiAoY29tcGwtPmZsYWdzICE9IDApIHsKKwkJY29tcGwtPmZsYWdzID0gbGUzMl90b19jcHUoY29tcGwtPmZsYWdzKTsKKwkJV0FSTl9PTigoY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX1ZBTElEX01BU0spID09IDApOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmVfbWNjX2NvbXBsX3VzZShzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKK3sKKwljb21wbC0+ZmxhZ3MgPSAwOworfQorCitzdGF0aWMgaW50IGJlX21jY19jb21wbF9wcm9jZXNzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCit7CisJdTE2IGNvbXBsX3N0YXR1cywgZXh0ZF9zdGF0dXM7CisKKwliZV9kd3NfbGVfdG9fY3B1KGNvbXBsLCA0KTsKKworCWNvbXBsX3N0YXR1cyA9IChjb21wbC0+c3RhdHVzID4+IENRRV9TVEFUVVNfQ09NUExfU0hJRlQpICYKKwkJCQkJQ1FFX1NUQVRVU19DT01QTF9NQVNLOworCWlmIChjb21wbF9zdGF0dXMgIT0gTUNDX1NUQVRVU19TVUNDRVNTKSB7CisJCWV4dGRfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19FWFREX1NISUZUKSAmCisJCQkJCQlDUUVfU1RBVFVTX0VYVERfTUFTSzsKKwkJZGV2X2VycigmY3RybC0+cGRldi0+ZGV2LAorCQkJImVycm9yIGluIGNtZCBjb21wbGV0aW9uOiBzdGF0dXMoY29tcGwvZXh0ZCk9JWQvJWRcbiIsCisJCQljb21wbF9zdGF0dXMsIGV4dGRfc3RhdHVzKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX2xpbmtfc3RhdGVfZXZ0KHUzMiB0cmFpbGVyKQoreworCXJldHVybiAoKCh0cmFpbGVyID4+IEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9TSElGVCkgJgorCQlBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfTUFTSykgPT0gQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFKTsKK30KKwordm9pZCBiZWlzY3NpX2NxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLCBib29sIGFybSwKKwkJICAgICAgIHUxNiBudW1fcG9wcGVkKQoreworCXUzMiB2YWwgPSAwOworCXZhbCB8PSBxaWQgJiBEQl9DUV9SSU5HX0lEX01BU0s7CisJaWYgKGFybSkKKwkJdmFsIHw9IDEgPDwgREJfQ1FfUkVBUk1fU0hJRlQ7CisJdmFsIHw9IG51bV9wb3BwZWQgPDwgREJfQ1FfTlVNX1BPUFBFRF9TSElGVDsKKwlpb3dyaXRlMzIodmFsLCBjdHJsLT5kYiArIERCX0NRX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbnQgYmVfbWJveF9kYl9yZWFkeV93YWl0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCit7CisjZGVmaW5lIGxvbmdfZGVsYXkgMjAwMAorCXZvaWQgX19pb21lbSAqZGIgPSBjdHJsLT5kYiArIE1QVV9NQUlMQk9YX0RCX09GRlNFVDsKKwlpbnQgY250ID0gMCwgd2FpdCA9IDU7CS8qIGluIHVzZWNzICovCisJdTMyIHJlYWR5OworCisJZG8geworCQlyZWFkeSA9IGlvcmVhZDMyKGRiKSAmIE1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCQlpZiAocmVhZHkpCisJCQlicmVhazsKKworCQlpZiAoY250ID4gNjAwMDAwMCkgeworCQkJZGV2X2VycigmY3RybC0+cGRldi0+ZGV2LCAibWJveF9kYiBwb2xsIHRpbWVkIG91dFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoY250ID4gNTApIHsKKwkJCXdhaXQgPSBsb25nX2RlbGF5OworCQkJbWRlbGF5KGxvbmdfZGVsYXkgLyAxMDAwKTsKKwkJfSBlbHNlCisJCQl1ZGVsYXkod2FpdCk7CisJCWNudCArPSB3YWl0OworCX0gd2hpbGUgKHRydWUpOworCXJldHVybiAwOworfQorCitpbnQgYmVfbWJveF9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKwlpbnQgc3RhdHVzOworCXUzMiB2YWwgPSAwOworCXZvaWQgX19pb21lbSAqZGIgPSBjdHJsLT5kYiArIE1QVV9NQUlMQk9YX0RCX09GRlNFVDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW0gPSAmY3RybC0+bWJveF9tZW07CisJc3RydWN0IGJlX21jY19tYWlsYm94ICptYm94ID0gbWJveF9tZW0tPnZhOworCXN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsID0gJm1ib3gtPmNvbXBsOworCisJdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKKwl2YWwgfD0gTVBVX01BSUxCT1hfREJfSElfTUFTSzsKKwl2YWwgfD0gKHVwcGVyXzMyX2JpdHMobWJveF9tZW0tPmRtYSkgPj4gMikgPDwgMjsKKwlpb3dyaXRlMzIodmFsLCBkYik7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JlYWR5X3dhaXQoY3RybCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIiBiZV9tYm94X2RiX3JlYWR5X3dhaXQgZmFpbGVkIDFcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwl2YWwgPSAwOworCXZhbCAmPSB+TVBVX01BSUxCT1hfREJfUkRZX01BU0s7CisJdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9ISV9NQVNLOworCXZhbCB8PSAodTMyKSAobWJveF9tZW0tPmRtYSA+PiA0KSA8PCAyOworCWlvd3JpdGUzMih2YWwsIGRiKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChjdHJsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIGJlX21ib3hfZGJfcmVhZHlfd2FpdCBmYWlsZWQgMlxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCWlmIChiZV9tY2NfY29tcGxfaXNfbmV3KGNvbXBsKSkgeworCQlzdGF0dXMgPSBiZV9tY2NfY29tcGxfcHJvY2VzcyhjdHJsLCAmbWJveC0+Y29tcGwpOworCQliZV9tY2NfY29tcGxfdXNlKGNvbXBsKTsKKwkJaWYgKHN0YXR1cykgeworCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQWZ0ZXIgYmVfbWNjX2NvbXBsX3Byb2Nlc3MgXG4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZXJyKCZjdHJsLT5wZGV2LT5kZXYsICJpbnZhbGlkIG1haWxib3ggY29tcGxldGlvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYmVfd3JiX2hkcl9wcmVwYXJlKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIsIGludCBwYXlsb2FkX2xlbiwKKwkJCQlib29sIGVtYmVkZGVkLCB1OCBzZ2VfY250KQoreworCWlmIChlbWJlZGRlZCkKKwkJd3JiLT5lbWJlZGRlZCB8PSBNQ0NfV1JCX0VNQkVEREVEX01BU0s7CisJZWxzZQorCQl3cmItPmVtYmVkZGVkIHw9IChzZ2VfY250ICYgTUNDX1dSQl9TR0VfQ05UX01BU0spIDw8CisJCQkJCQlNQ0NfV1JCX1NHRV9DTlRfU0hJRlQ7CisJd3JiLT5wYXlsb2FkX2xlbmd0aCA9IHBheWxvYWRfbGVuOworCWJlX2R3c19jcHVfdG9fbGUod3JiLCA4KTsKK30KKwordm9pZCBiZV9jbWRfaGRyX3ByZXBhcmUoc3RydWN0IGJlX2NtZF9yZXFfaGRyICpyZXFfaGRyLAorCQkJdTggc3Vic3lzdGVtLCB1OCBvcGNvZGUsIGludCBjbWRfbGVuKQoreworCXJlcV9oZHItPm9wY29kZSA9IG9wY29kZTsKKwlyZXFfaGRyLT5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07CisJcmVxX2hkci0+cmVxdWVzdF9sZW5ndGggPSBjcHVfdG9fbGUzMihjbWRfbGVuIC0gc2l6ZW9mKCpyZXFfaGRyKSk7Cit9CisKK3N0YXRpYyB2b2lkIGJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUoc3RydWN0IHBoeXNfYWRkciAqcGFnZXMsIHUzMiBtYXhfcGFnZXMsCisJCQkJCQkJc3RydWN0IGJlX2RtYV9tZW0gKm1lbSkKK3sKKwlpbnQgaSwgYnVmX3BhZ2VzOworCXU2NCBkbWEgPSAodTY0KSBtZW0tPmRtYTsKKworCWJ1Zl9wYWdlcyA9IG1pbihQQUdFU180S19TUEFOTkVEKG1lbS0+dmEsIG1lbS0+c2l6ZSksIG1heF9wYWdlcyk7CisJZm9yIChpID0gMDsgaSA8IGJ1Zl9wYWdlczsgaSsrKSB7CisJCXBhZ2VzW2ldLmxvID0gY3B1X3RvX2xlMzIoZG1hICYgMHhGRkZGRkZGRik7CisJCXBhZ2VzW2ldLmhpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhkbWEpKTsKKwkJZG1hICs9IFBBR0VfU0laRV80SzsKKwl9Cit9CisKK3N0YXRpYyB1MzIgZXFfZGVsYXlfdG9fbXVsdCh1MzIgdXNlY19kZWxheSkKK3sKKyNkZWZpbmUgTUFYX0lOVFJfUkFURSA2NTEwNDIKKwljb25zdCB1MzIgcm91bmQgPSAxMDsKKwl1MzIgbXVsdGlwbGllcjsKKworCWlmICh1c2VjX2RlbGF5ID09IDApCisJCW11bHRpcGxpZXIgPSAwOworCWVsc2UgeworCQl1MzIgaW50ZXJydXB0X3JhdGUgPSAxMDAwMDAwIC8gdXNlY19kZWxheTsKKwkJaWYgKGludGVycnVwdF9yYXRlID09IDApCisJCQltdWx0aXBsaWVyID0gMTAyMzsKKwkJZWxzZSB7CisJCQltdWx0aXBsaWVyID0gKE1BWF9JTlRSX1JBVEUgLSBpbnRlcnJ1cHRfcmF0ZSkgKiByb3VuZDsKKwkJCW11bHRpcGxpZXIgLz0gaW50ZXJydXB0X3JhdGU7CisJCQltdWx0aXBsaWVyID0gKG11bHRpcGxpZXIgKyByb3VuZCAvIDIpIC8gcm91bmQ7CisJCQltdWx0aXBsaWVyID0gbWluKG11bHRpcGxpZXIsICh1MzIpIDEwMjMpOworCQl9CisJfQorCXJldHVybiBtdWx0aXBsaWVyOworfQorCitzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiX2Zyb21fbWJveChzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW0pCit7CisJcmV0dXJuICYoKHN0cnVjdCBiZV9tY2NfbWFpbGJveCAqKShtYm94X21lbS0+dmEpKS0+d3JiOworfQorCitpbnQgYmVpc2NzaV9jbWRfZXFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwgaW50IGVxX2RlbGF5KQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfZXFfY3JlYXRlICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2NtZF9yZXNwX2VxX2NyZWF0ZSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0gPSAmZXEtPmRtYV9tZW07CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQkJT1BDT0RFX0NPTU1PTl9FUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPm51bV9wYWdlcyA9IGNwdV90b19sZTE2KFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSkpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBmdW5jLCByZXEtPmNvbnRleHQsCisJCQkJCQlQQ0lfRlVOQyhjdHJsLT5wZGV2LT5kZXZmbikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgdmFsaWQsIHJlcS0+Y29udGV4dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBzaXplLCByZXEtPmNvbnRleHQsIDApOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgY291bnQsIHJlcS0+Y29udGV4dCwKKwkJCQkJX19pbG9nMl91MzIoZXEtPmxlbiAvIDI1NikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgZGVsYXltdWx0LCByZXEtPmNvbnRleHQsCisJCQkJCWVxX2RlbGF5X3RvX211bHQoZXFfZGVsYXkpKTsKKwliZV9kd3NfY3B1X3RvX2xlKHJlcS0+Y29udGV4dCwgc2l6ZW9mKHJlcS0+Y29udGV4dCkpOworCisJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQllcS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5lcV9pZCk7CisJCWVxLT5jcmVhdGVkID0gdHJ1ZTsKKwl9CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9md19pbml0aWFsaXplKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlpbnQgc3RhdHVzOworCXU4ICplbmRpYW5fY2hlY2s7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWVuZGlhbl9jaGVjayA9ICh1OCAqKSB3cmI7CisJKmVuZGlhbl9jaGVjaysrID0gMHhGRjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweDEyOworCSplbmRpYW5fY2hlY2srKyA9IDB4MzQ7CisJKmVuZGlhbl9jaGVjaysrID0gMHhGRjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweEZGOworCSplbmRpYW5fY2hlY2srKyA9IDB4NTY7CisJKmVuZGlhbl9jaGVjaysrID0gMHg3ODsKKwkqZW5kaWFuX2NoZWNrKysgPSAweEZGOworCWJlX2R3c19jcHVfdG9fbGUod3JiLCBzaXplb2YoKndyYikpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKHN0YXR1cykKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiYmVfY21kX2Z3X2luaXRpYWxpemUgRmFpbGVkIFxuIik7CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVpc2NzaV9jbWRfY3FfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLAorCQkJICBib29sIHNvbF9ldnRzLCBib29sIG5vX2RlbGF5LCBpbnQgY29hbGVzY2Vfd20pCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9jcV9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfY3FfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZjcS0+ZG1hX21lbTsKKwl2b2lkICpjdHh0ID0gJnJlcS0+Y29udGV4dDsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQlPUENPREVfQ09NTU9OX0NRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKworCWlmICghcV9tZW0tPnZhKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJ1bmluaXRpYWxpemVkIHFfbWVtLT52YVxuIik7CisKKwlyZXEtPm51bV9wYWdlcyA9IGNwdV90b19sZTE2KFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSkpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBjb2FsZXNjd20sIGN0eHQsIGNvYWxlc2NlX3dtKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIG5vZGVsYXksIGN0eHQsIG5vX2RlbGF5KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGNvdW50LCBjdHh0LAorCQkgICAgICBfX2lsb2cyX3UzMihjcS0+bGVuIC8gMjU2KSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCB2YWxpZCwgY3R4dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBzb2xldmVudCwgY3R4dCwgc29sX2V2dHMpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZXZlbnRhYmxlLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGVxaWQsIGN0eHQsIGVxLT5pZCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBhcm1lZCwgY3R4dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBmdW5jLCBjdHh0LAorCQkgICAgICBQQ0lfRlVOQyhjdHJsLT5wZGV2LT5kZXZmbikpOworCWJlX2R3c19jcHVfdG9fbGUoY3R4dCwgc2l6ZW9mKHJlcS0+Y29udGV4dCkpOworCisJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQljcS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jcV9pZCk7CisJCWNxLT5jcmVhdGVkID0gdHJ1ZTsKKwl9IGVsc2UKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiSW4gYmVfY21kX2NxX2NyZWF0ZSwgc3RhdHVzPW94JTA4eCBcbiIsCisJCQlzdGF0dXMpOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBiZV9lbmNvZGVkX3FfbGVuKGludCBxX2xlbikKK3sKKwl1MzIgbGVuX2VuY29kZWQgPSBmbHMocV9sZW4pOwkvKiBsb2cyKGxlbikgKyAxICovCisJaWYgKGxlbl9lbmNvZGVkID09IDE2KQorCQlsZW5fZW5jb2RlZCA9IDA7CisJcmV0dXJuIGxlbl9lbmNvZGVkOworfQoraW50IGJlaXNjc2lfY21kX3FfZGVzdHJveShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKKwkJCSAgaW50IHF1ZXVlX3R5cGUpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9xX2Rlc3Ryb3kgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwl1OCBzdWJzeXMgPSAwLCBvcGNvZGUgPSAwOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJc3dpdGNoIChxdWV1ZV90eXBlKSB7CisJY2FzZSBRVFlQRV9FUToKKwkJc3Vic3lzID0gQ01EX1NVQlNZU1RFTV9DT01NT047CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fRVFfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9DUToKKwkJc3Vic3lzID0gQ01EX1NVQlNZU1RFTV9DT01NT047CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fQ1FfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9XUkJROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0lTQ1NJOworCQlvcGNvZGUgPSBPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9EUERVUToKKwkJc3Vic3lzID0gQ01EX1NVQlNZU1RFTV9JU0NTSTsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9JU0NTSV9ERUZRX0RFU1RST1k7CisJCWJyZWFrOworCWNhc2UgUVRZUEVfU0dMOgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0lTQ1NJOworCQlvcGNvZGUgPSBPUENPREVfQ09NTU9OX0lTQ1NJX0NGR19SRU1PVkVfU0dMX1BBR0VTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJQlVHKCk7CisJCXJldHVybiAtMTsKKwl9CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgc3Vic3lzLCBvcGNvZGUsIHNpemVvZigqcmVxKSk7CisJaWYgKHF1ZXVlX3R5cGUgIT0gUVRZUEVfU0dMKQorCQlyZXEtPmlkID0gY3B1X3RvX2xlMTYocS0+aWQpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfbWFjX2FkZHIgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9OVFdLX0dFVF9OSUNfQ09ORklHLAorCQkJICAgc2l6ZW9mKCpyZXEpKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfbWFjX2FkZHIgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwkJbWVtY3B5KG1hY19hZGRyLCByZXNwLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCX0KKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwKKwkJCQkgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmRxLCBpbnQgbGVuZ3RoLAorCQkJCSAgICBpbnQgZW50cnlfc2l6ZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9kZWZxX2NyZWF0ZV9yZXEgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0gPSAmZHEtPmRtYV9tZW07CisJdm9pZCAqY3R4dCA9ICZyZXEtPmNvbnRleHQ7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfQ1JFQVRFLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5udW1fcGFnZXMgPSBQQUdFU180S19TUEFOTkVEKHFfbWVtLT52YSwgcV9tZW0tPnNpemUpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCwgcnhfcGRpZCwgY3R4dCwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCByeF9wZGlkX3ZhbGlkLCBjdHh0LAorCQkgICAgICAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIHBjaV9mdW5jX2lkLCBjdHh0LAorCQkgICAgICBQQ0lfRlVOQyhjdHJsLT5wZGV2LT5kZXZmbikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCwgcmluZ19zaXplLCBjdHh0LAorCQkgICAgICBiZV9lbmNvZGVkX3FfbGVuKGxlbmd0aCAvIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCwgZGVmYXVsdF9idWZmZXJfc2l6ZSwKKwkJICAgICAgY3R4dCwgZW50cnlfc2l6ZSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCBjcV9pZF9yZWN2LCBjdHh0LAorCQkgICAgICBjcS0+aWQpOworCisJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9kZWZxX2NyZWF0ZV9yZXNwICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCisJCWRxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmlkKTsKKwkJZHEtPmNyZWF0ZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfd3JicV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLAorCQkgICAgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKndyYnEpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfd3JicV9jcmVhdGVfcmVxICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX3dyYnFfY3JlYXRlX3Jlc3AgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCU9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CisJcmVxLT5udW1fcGFnZXMgPSBQQUdFU180S19TUEFOTkVEKHFfbWVtLT52YSwgcV9tZW0tPnNpemUpOworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpCisJCXdyYnEtPmlkID0gbGUxNl90b19jcHUocmVzcC0+Y2lkKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2lzY3NpX3Bvc3Rfc2dsX3BhZ2VzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLAorCQkJCXUzMiBwYWdlX29mZnNldCwgdTMyIG51bV9wYWdlcykKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9wb3N0X3NnbF9wYWdlc19yZXEgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBjdXJyX3BhZ2VzOworCXUzMiBpbnRlcm5hbF9wYWdlX29mZnNldCA9IDA7CisJdTMyIHRlbXBfbnVtX3BhZ2VzID0gbnVtX3BhZ2VzOworCisJaWYgKG51bV9wYWdlcyA9PSAweGZmKQorCQludW1fcGFnZXMgPSAxOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCWRvIHsKKwkJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwkJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKwkJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX0NGR19QT1NUX1NHTF9QQUdFUywKKwkJCQkgICBzaXplb2YoKnJlcSkpOworCQljdXJyX3BhZ2VzID0gQkVfTlVNQkVSX09GX0ZJRUxEKHN0cnVjdCBiZV9wb3N0X3NnbF9wYWdlc19yZXEsCisJCQkJCQlwYWdlcyk7CisJCXJlcS0+bnVtX3BhZ2VzID0gbWluKG51bV9wYWdlcywgY3Vycl9wYWdlcyk7CisJCXJlcS0+cGFnZV9vZmZzZXQgPSBwYWdlX29mZnNldDsKKwkJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCByZXEtPm51bV9wYWdlcywgcV9tZW0pOworCQlxX21lbS0+ZG1hID0gcV9tZW0tPmRtYSArIChyZXEtPm51bV9wYWdlcyAqIFBBR0VfU0laRSk7CisJCWludGVybmFsX3BhZ2Vfb2Zmc2V0ICs9IHJlcS0+bnVtX3BhZ2VzOworCQlwYWdlX29mZnNldCArPSByZXEtPm51bV9wYWdlczsKKwkJbnVtX3BhZ2VzIC09IHJlcS0+bnVtX3BhZ2VzOworCisJCWlmICh0ZW1wX251bV9wYWdlcyA9PSAweGZmKQorCQkJcmVxLT5udW1fcGFnZXMgPSB0ZW1wX251bV9wYWdlczsKKworCQlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwkJaWYgKHN0YXR1cykgeworCQkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJCSAiRlcgQ01EIHRvIG1hcCBpc2NzaSBmcmFncyBmYWlsZWQuXG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9IHdoaWxlIChudW1fcGFnZXMgPiAwKTsKK2Vycm9yOgorCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCWlmIChzdGF0dXMgIT0gMCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIE5VTEwsIFFUWVBFX1NHTCk7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMGQ2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCkBAIC0wLDAgKzEsODc3IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqLworCisjaWZuZGVmIEJFSVNDU0lfQ01EU19ICisjZGVmaW5lIEJFSVNDU0lfQ01EU19ICisKKy8qKgorICogVGhlIGRyaXZlciBzZW5kcyBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50cyBjb21tYW5kIHJlcXVlc3RzIHRvIHRoZQorICogZmlybXdhcmUgaW4gdGhlIEJFLiBUaGVzZSByZXF1ZXN0cyBhcmUgY29tbXVuaWNhdGVkIHRvIHRoZSBwcm9jZXNzb3IKKyAqIHVzaW5nIFdvcmsgUmVxdWVzdCBCbG9ja3MgKFdSQnMpIHN1Ym1pdHRlZCB0byB0aGUgTUNDLVdSQiByaW5nIG9yIHZpYSBvbmUKKyAqIFdSQiBpbnNpZGUgYSBNQUlMQk9YLgorICogVGhlIGNvbW1hbmRzIGFyZSBzZXJ2aWNlZCBieSB0aGUgQVJNIHByb2Nlc3NvciBpbiB0aGUgQmxhZGVFbmdpbmUncyBNUFUuCisgKi8KK3N0cnVjdCBiZV9zZ2UgeworCXUzMiBwYV9sbzsKKwl1MzIgcGFfaGk7CisJdTMyIGxlbjsKK307CisKKyNkZWZpbmUgTUNDX1dSQl9TR0VfQ05UX1NISUZUIDMJLyogYml0cyAzIC0gNyBvZiBkd29yZCAwICovCisjZGVmaW5lIE1DQ19XUkJfU0dFX0NOVF9NQVNLIDB4MUYJLyogYml0cyAzIC0gNyBvZiBkd29yZCAwICovCitzdHJ1Y3QgYmVfbWNjX3dyYiB7CisJdTMyIGVtYmVkZGVkOwkJLyogZHdvcmQgMCAqLworCXUzMiBwYXlsb2FkX2xlbmd0aDsJLyogZHdvcmQgMSAqLworCXUzMiB0YWcwOwkJLyogZHdvcmQgMiAqLworCXUzMiB0YWcxOwkJLyogZHdvcmQgMyAqLworCXUzMiByc3ZkOwkJLyogZHdvcmQgNCAqLworCXVuaW9uIHsKKwkJdTggZW1iZWRkZWRfcGF5bG9hZFsyMzZdOwkvKiB1c2VkIGJ5IGVtYmVkZGVkIGNtZHMgKi8KKwkJc3RydWN0IGJlX3NnZSBzZ2xbMTldOwkvKiB1c2VkIGJ5IG5vbi1lbWJlZGRlZCBjbWRzICovCisJfSBwYXlsb2FkOworfTsKKworI2RlZmluZSBDUUVfRkxBR1NfVkFMSURfTUFTSyAoMSA8PCAzMSkKKyNkZWZpbmUgQ1FFX0ZMQUdTX0FTWU5DX01BU0sgKDEgPDwgMzApCisKKy8qIENvbXBsZXRpb24gU3RhdHVzICovCisjZGVmaW5lIE1DQ19TVEFUVVNfU1VDQ0VTUyAweDAKKworI2RlZmluZSBDUUVfU1RBVFVTX0NPTVBMX01BU0sgMHhGRkZGCisjZGVmaW5lIENRRV9TVEFUVVNfQ09NUExfU0hJRlQgMAkvKiBiaXRzIDAgLSAxNSAqLworI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfTUFTSyAweEZGRkYKKyNkZWZpbmUgQ1FFX1NUQVRVU19FWFREX1NISUZUIDAJCS8qIGJpdHMgMCAtIDE1ICovCisKK3N0cnVjdCBiZV9tY2NfY29tcGwgeworCXUzMiBzdGF0dXM7CQkvKiBkd29yZCAwICovCisJdTMyIHRhZzA7CQkvKiBkd29yZCAxICovCisJdTMyIHRhZzE7CQkvKiBkd29yZCAyICovCisJdTMyIGZsYWdzOwkJLyogZHdvcmQgMyAqLworfTsKKworLyoqKioqKioqKiBNYWlsYm94IGRvb3IgYmVsbCAqKioqKioqKioqKioqLworLyoqCisgKiBVc2VkIGZvciBkcml2ZXIgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBGVy4KKyAqIFRoZSBzb2Z0d2FyZSBtdXN0IHdyaXRlIHRoaXMgcmVnaXN0ZXIgdHdpY2UgdG8gcG9zdCBhbnkgY29tbWFuZC4gRmlyc3QsCisgKiBpdCB3cml0ZXMgdGhlIHJlZ2lzdGVyIHdpdGggaGk9MSBhbmQgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIHBoeXNpY2FsIGFkZHJlc3MKKyAqIGZvciB0aGUgTUFJTEJPWCBzdHJ1Y3R1cmUuIFNvZnR3YXJlIG11c3QgcG9sbCB0aGUgcmVhZHkgYml0IHVudGlsIHRoaXMKKyAqIGlzIGFja25vd2xlZGdlZC4gVGhlbiwgc290d2FyZSB3cml0ZXMgdGhlIHJlZ2lzdGVyIHdpdGggaGk9MCB3aXRoIHRoZSBsb3dlcgorICogYml0cyBpbiB0aGUgYWRkcmVzcy4gSXQgbXVzdCBwb2xsIHRoZSByZWFkeSBiaXQgdW50aWwgdGhlIGNvbW1hbmQgaXMKKyAqIGNvbXBsZXRlLiBVcG9uIGNvbXBsZXRpb24sIHRoZSBNQUlMQk9YIHdpbGwgY29udGFpbiBhIHZhbGlkIGNvbXBsZXRpb24KKyAqIHF1ZXVlIGVudHJ5LgorICovCisjZGVmaW5lIE1QVV9NQUlMQk9YX0RCX09GRlNFVAkweDE2MAorI2RlZmluZSBNUFVfTUFJTEJPWF9EQl9SRFlfTUFTSwkweDEJLyogYml0IDAgKi8KKyNkZWZpbmUgTVBVX01BSUxCT1hfREJfSElfTUFTSwkweDIJLyogYml0IDEgKi8KKworLyoqKioqKioqKiogTVBVIHNlbXBob3JlICoqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTVBVX0VQX1NFTUFQSE9SRV9PRkZTRVQgMHhhYworI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9TVEFHRV9NQVNLIDB4MDAwMEZGRkYKKyNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX01BU0sgMHgxCisjZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX0VSUl9TSElGVCAzMQorCisvKioqKioqKioqKiBNQ0MgZG9vciBiZWxsICoqKioqKioqKioqKi8KKyNkZWZpbmUgREJfTUNDUV9PRkZTRVQgMHgxNDAKKyNkZWZpbmUgREJfTUNDUV9SSU5HX0lEX01BU0sgMHg3RkYJCS8qIGJpdHMgMCAtIDEwICovCisvKiBOdW1iZXIgb2YgZW50cmllcyBwb3N0ZWQgKi8KKyNkZWZpbmUgREJfTUNDUV9OVU1fUE9TVEVEX1NISUZUIDE2CQkvKiBiaXRzIDE2IC0gMjkgKi8KKworLyogTVBVIHNlbXBob3JlIFBPU1Qgc3RhZ2UgdmFsdWVzICovCisjZGVmaW5lIFBPU1RfU1RBR0VfQVJNRldfUkRZCQkweGMwMDAJLyogRlcgaXMgZG9uZSB3aXRoIFBPU1QgKi8KKworLyoqCisgKiBXaGVuIHRoZSBhc3luYyBiaXQgb2YgbWNjX2NvbXBsIGlzIHNldCwgdGhlIGxhc3QgNCBieXRlcyBvZgorICogbWNjX2NvbXBsIGlzIGludGVycHJldGVkIGFzIGZvbGxvd3M6CisgKi8KKyNkZWZpbmUgQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX1NISUZUCTgJLyogYml0cyA4IC0gMTUgKi8KKyNkZWZpbmUgQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX01BU0sJMHhGRgorI2RlZmluZSBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUJMHgxCitzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfdHJhaWxlciB7CisJdTMyIGNvZGU7Cit9OworCitlbnVtIHsKKwlBU1lOQ19FVkVOVF9MSU5LX0RPV04gPSAweDAsCisJQVNZTkNfRVZFTlRfTElOS19VUCA9IDB4MQorfTsKKworLyoqCisgKiBXaGVuIHRoZSBldmVudCBjb2RlIG9mIGFuIGFzeW5jIHRyYWlsZXIgaXMgbGluay1zdGF0ZSwgdGhlIG1jY19jb21wbAorICogbXVzdCBiZSBpbnRlcnByZXRlZCBhcyBmb2xsb3dzCisgKi8KK3N0cnVjdCBiZV9hc3luY19ldmVudF9saW5rX3N0YXRlIHsKKwl1OCBwaHlzaWNhbF9wb3J0OworCXU4IHBvcnRfbGlua19zdGF0dXM7CisJdTggcG9ydF9kdXBsZXg7CisJdTggcG9ydF9zcGVlZDsKKwl1OCBwb3J0X2ZhdWx0OworCXU4IHJzdmQwWzddOworCXN0cnVjdCBiZV9hc3luY19ldmVudF90cmFpbGVyIHRyYWlsZXI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfbWNjX21haWxib3ggeworCXN0cnVjdCBiZV9tY2Nfd3JiIHdyYjsKKwlzdHJ1Y3QgYmVfbWNjX2NvbXBsIGNvbXBsOworfTsKKworLyogVHlwZSBvZiBzdWJzeXN0ZW1zIHN1cHBvcnRlZCBieSBGVyAqLworI2RlZmluZSBDTURfU1VCU1lTVEVNX0NPTU1PTiAgICAweDEKKyNkZWZpbmUgQ01EX1NVQlNZU1RFTV9JU0NTSSAgICAgMHgyCisjZGVmaW5lIENNRF9TVUJTWVNURU1fRVRIICAgICAgIDB4MworI2RlZmluZSBDTURfU1VCU1lTVEVNX0lTQ1NJX0lOSSAweDYKKyNkZWZpbmUgQ01EX0NPTU1PTl9UQ1BfVVBMT0FEICAgMHgxCisKKy8qKgorICogTGlzdCBvZiBjb21tb24gb3Bjb2RlcyBzdWJzeXN0ZW0gIENNRF9TVUJTWVNURU1fQ09NTU9OCisgKiBUaGVzZSBvcGNvZGVzIGFyZSB1bmlxdWUgZm9yIGVhY2ggc3Vic3lzdGVtIGRlZmluZWQgYWJvdmUKKyAqLworI2RlZmluZSBPUENPREVfQ09NTU9OX0NRX0NSRUFURQkJCQkxMgorI2RlZmluZSBPUENPREVfQ09NTU9OX0VRX0NSRUFURQkJCQkxMworI2RlZmluZSBPUENPREVfQ09NTU9OX01DQ19DUkVBVEUgICAgICAgIAkJMjEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfQ05UTF9BVFRSSUJVVEVTICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfRldfVkVSU0lPTgkJCTM1CisjZGVmaW5lIE9QQ09ERV9DT01NT05fTU9ESUZZX0VRX0RFTEFZCQkJNDEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9GSVJNV0FSRV9DT05GSUcJCQk0MgorI2RlZmluZSBPUENPREVfQ09NTU9OX01DQ19ERVNUUk9ZICAgICAgICAJCTUzCisjZGVmaW5lIE9QQ09ERV9DT01NT05fQ1FfREVTVFJPWSAgICAgICAgCQk1NAorI2RlZmluZSBPUENPREVfQ09NTU9OX0VRX0RFU1RST1kgICAgICAgIAkJNTUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9RVUVSWV9GSVJNV0FSRV9DT05GSUcJCTU4CisjZGVmaW5lIE9QQ09ERV9DT01NT05fRlVOQ1RJT05fUkVTRVQJCQk2MQorCisvKioKKyAqIExJU1Qgb2Ygb3Bjb2RlcyB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiBJbml0aWF0b3IgYW5kIFRhcmdldAorICogdXNlZCBieSBDTURfU1VCU1lTVEVNX0lTQ1NJCisgKiBUaGVzZSBvcGNvZGVzIGFyZSB1bmlxdWUgZm9yIGVhY2ggc3Vic3lzdGVtIGRlZmluZWQgYWJvdmUKKyAqLworI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0NGR19QT1NUX1NHTF9QQUdFUwkJMgorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0NGR19SRU1PVkVfU0dMX1BBR0VTICAgICAgICAzCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfTlRXS19HRVRfTklDX0NPTkZJRwkJNworI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1NFVF9GUkFHTlVNX0JJVFNfRk9SX1NHTF9DUkEgNjEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9ERUZRX0NSRUFURSAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9ERUZRX0RFU1RST1kgCQk2NQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfQ1JFQVRFCQkJNjYKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9XUkJRX0RFU1RST1kgCQk2NworCitzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgeworCXU4IG9wY29kZTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBzdWJzeXN0ZW07CQkvKiBkd29yZCAwICovCisJdTggcG9ydF9udW1iZXI7CQkvKiBkd29yZCAwICovCisJdTggZG9tYWluOwkJLyogZHdvcmQgMCAqLworCXUzMiB0aW1lb3V0OwkJLyogZHdvcmQgMSAqLworCXUzMiByZXF1ZXN0X2xlbmd0aDsJLyogZHdvcmQgMiAqLworCXUzMiByc3ZkOwkJLyogZHdvcmQgMyAqLworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX2hkciB7CisJdTMyIGluZm87CQkvKiBkd29yZCAwICovCisJdTMyIHN0YXR1czsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgcmVzcG9uc2VfbGVuZ3RoOwkvKiBkd29yZCAyICovCisJdTMyIGFjdHVhbF9yZXNwX2xlbjsJLyogZHdvcmQgMyAqLworfTsKKworc3RydWN0IHBoeXNfYWRkciB7CisJdTMyIGxvOworCXUzMiBoaTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkUgQ29tbWFuZCBkZWZpbml0aW9ucyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGUgLSB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2VxX2NvbnRleHQgeworCXU4IGNpZHhbMTNdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQwWzNdOwkJLyogZHdvcmQgMCAqLworCXU4IGVwaWR4WzEzXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCB2YWxpZDsJCS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBzaXplOwkJLyogZHdvcmQgMCAqLworCXU4IHBpZHhbMTNdOwkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQyWzNdOwkJLyogZHdvcmQgMSAqLworCXU4IHBkWzEwXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBjb3VudFszXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBzb2xldmVudDsJCS8qIGR3b3JkIDEgKi8KKwl1OCBzdGFsbGVkOwkJLyogZHdvcmQgMSAqLworCXU4IGFybWVkOwkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQzWzRdOwkJLyogZHdvcmQgMiAqLworCXU4IGZ1bmNbOF07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDQ7CQkvKiBkd29yZCAyICovCisJdTggZGVsYXltdWx0WzEwXTsJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ1WzJdOwkJLyogZHdvcmQgMiAqLworCXU4IHBoYXNlWzJdOwkJLyogZHdvcmQgMiAqLworCXU4IG5vZGVsYXk7CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDZbNF07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDdbMzJdOwkJLyogZHdvcmQgMyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfZXFfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOwkvKiBkd1s0XSAqLworCXUxNiBudW1fcGFnZXM7CQkvKiBzd29yZCAqLworCXUxNiByc3ZkMDsJCS8qIHN3b3JkICovCisJdTggY29udGV4dFtzaXplb2Yoc3RydWN0IGFtYXBfZXFfY29udGV4dCkgLyA4XTsJLyogZHdbNF0gKi8KKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX2VxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciByZXNwX2hkcjsKKwl1MTYgZXFfaWQ7CQkvKiBzd29yZCAqLworCXUxNiByc3ZkMDsJCS8qIHN3b3JkICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWFjX2FkZHIgeworCXUxNiBzaXplX29mX3N0cnVjdDsKKwl1OCBhZGRyW0VUSF9BTEVOXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX21hY19xdWVyeSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCB0eXBlOworCXU4IHBlcm1hbmVudDsKKwl1MTYgaWZfaWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfbWFjX3F1ZXJ5IHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwlzdHJ1Y3QgbWFjX2FkZHIgbWFjOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqIENyZWF0ZSBDUSAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlIC0gdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0IHsKKwl1OCBjaWR4WzExXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMDsJCS8qIGR3b3JkIDAgKi8KKwl1OCBjb2FsZXNjd21bMl07CS8qIGR3b3JkIDAgKi8KKwl1OCBub2RlbGF5OwkJLyogZHdvcmQgMCAqLworCXU4IGVwaWR4WzExXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBjb3VudFsyXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCB2YWxpZDsJCS8qIGR3b3JkIDAgKi8KKwl1OCBzb2xldmVudDsJCS8qIGR3b3JkIDAgKi8KKwl1OCBldmVudGFibGU7CQkvKiBkd29yZCAwICovCisJdTggcGlkeFsxMV07CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDI7CQkvKiBkd29yZCAxICovCisJdTggcGRbMTBdOwkJLyogZHdvcmQgMSAqLworCXU4IGVxaWRbOF07CQkvKiBkd29yZCAxICovCisJdTggc3RhbGxlZDsJCS8qIGR3b3JkIDEgKi8KKwl1OCBhcm1lZDsJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkM1s0XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBmdW5jWzhdOwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ0WzIwXTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNVszMl07CQkvKiBkd29yZCAzICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9jcV9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1MTYgcnN2ZDA7CisJdTggY29udGV4dFtzaXplb2Yoc3RydWN0IGFtYXBfY3FfY29udGV4dCkgLyA4XTsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX2NxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTE2IGNxX2lkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBDcmVhdGUgTUNDUSAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlIC0gdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9tY2NfY29udGV4dCB7CisJdTggY29uX2luZGV4WzE0XTsKKwl1OCByc3ZkMFsyXTsKKwl1OCByaW5nX3NpemVbNF07CisJdTggZmV0Y2hfd3JiOworCXU4IGZldGNoX3IydDsKKwl1OCBjcV9pZFsxMF07CisJdTggcHJvZF9pbmRleFsxNF07CisJdTggZmlkWzhdOworCXU4IHBkaWRbOV07CisJdTggdmFsaWQ7CisJdTggcnN2ZDFbMzJdOworCXU4IHJzdmQyWzMyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX21jY19jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1MTYgcnN2ZDA7CisJdTggY29udGV4dFtzaXplb2Yoc3RydWN0IGFtYXBfbWNjX2NvbnRleHQpIC8gOF07CisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1s4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9tY2NfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MTYgaWQ7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIFEgRGVzdHJveSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVHlwZSBvZiBRdWV1ZSB0byBiZSBkZXN0cm95ZWQgKi8KK2VudW0geworCVFUWVBFX0VRID0gMSwKKwlRVFlQRV9DUSwKKwlRVFlQRV9NQ0NRLAorCVFUWVBFX1dSQlEsCisJUVRZUEVfRFBEVVEsCisJUVRZUEVfU0dMCit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV9xX2Rlc3Ryb3kgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGlkOworCXUxNiBieXBhc3NfZmx1c2g7CS8qIHZhbGlkIG9ubHkgZm9yIHJ4IHEgZGVzdHJveSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IG1hY2FkZHIgeworCXU4IGJ5dGVbRVRIX0FMRU5dOworfTsKKworc3RydWN0IGJlX2NtZF9yZXFfbWNhc3RfbWFjX2NvbmZpZyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX21hYzsKKwl1OCBwcm9taXNjdW91czsKKwl1OCBpbnRlcmZhY2VfaWQ7CisJc3RydWN0IG1hY2FkZHIgbWFjWzMyXTsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZW1iZWRkZWRfcGF5bG9hZChzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiKQoreworCXJldHVybiB3cmItPnBheWxvYWQuZW1iZWRkZWRfcGF5bG9hZDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmVfc2dlICpub25lbWJlZGRlZF9zZ2woc3RydWN0IGJlX21jY193cmIgKndyYikKK3sKKwlyZXR1cm4gJndyYi0+cGF5bG9hZC5zZ2xbMF07Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKiBNb2RpZnkgRVEgRGVsYXkgKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX21vZGlmeV9lcV9kZWxheSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbnVtX2VxOworCXN0cnVjdCB7CisJCXUzMiBlcV9pZDsKKwkJdTMyIHBoYXNlOworCQl1MzIgZGVsYXlfbXVsdGlwbGllcjsKKwl9IGRlbGF5WzhdOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIEdldCBNQUMgQUREUiAqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEVUSF9BTEVOCTYKKworCitzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfbWFjX2FkZHIgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIG5pY19wb3J0X2NvdW50OworCXUzMiBzcGVlZDsKKwl1MzIgbWF4X3NwZWVkOworCXUzMiBsaW5rX3N0YXRlOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKKwl1MTYgc2l6ZV9vZl9zdHJ1Y3R1cmU7CisJdTggbWFjX2FkZHJlc3NbRVRIX0FMRU5dOworCXUzMiByc3ZkWzIzXTsKK307CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9nZXRfbWFjX2FkZHIgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUzMiBuaWNfcG9ydF9jb3VudDsKKwl1MzIgc3BlZWQ7CisJdTMyIG1heF9zcGVlZDsKKwl1MzIgbGlua19zdGF0ZTsKKwl1MzIgbWF4X2ZyYW1lX3NpemU7CisJdTE2IHNpemVfb2Zfc3RydWN0dXJlOworCXU4IG1hY19hZGRyZXNzWzZdOworCXUzMiByc3ZkWzIzXTsKK307CisKK2ludCBiZWlzY3NpX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCBpbnQgZXFfZGVsYXkpOworCitpbnQgYmVpc2NzaV9jbWRfY3FfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLAorCQkJICBib29sIHNvbF9ldnRzLCBib29sIG5vX2RlbGF5LAorCQkJICBpbnQgbnVtX2NxZV9kbWFfY29hbGVzY2UpOworCitpbnQgYmVpc2NzaV9jbWRfcV9kZXN0cm95KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAorCQkJICBpbnQgdHlwZSk7CitpbnQgYmVfcG9sbF9tY2Moc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7Cit1bnNpZ25lZCBjaGFyIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOworaW50IGJlX2NtZF9nZXRfbWFjX2FkZHIoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTggKm1hY19hZGRyKTsKKworLypJU0NTSSBGdW5jdHVpb25zICovCitpbnQgYmVfY21kX2Z3X2luaXRpYWxpemUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CisKK3N0cnVjdCBiZV9tY2Nfd3JiICp3cmJfZnJvbV9tYm94KHN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSk7CisKK2ludCBiZV9tYm94X25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKKworaW50IGJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQkgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLAorCQkJCSAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZHEsIGludCBsZW5ndGgsCisJCQkJICAgIGludCBlbnRyeV9zaXplKTsKKworaW50IGJlX2NtZF9pc2NzaV9wb3N0X3NnbF9wYWdlcyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSwgdTMyIHBhZ2Vfb2Zmc2V0LAorCQkJCXUzMiBudW1fcGFnZXMpOworCitpbnQgYmVfY21kX3dyYnFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSwKKwkJICAgICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICp3cmJxKTsKKworc3RydWN0IGJlX2RlZmF1bHRfcGR1X2NvbnRleHQgeworCXUzMiBkd1s0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQgeworCXU4IGRidWZfY2luZGV4WzEzXTsJLyogZHdvcmQgMCAqLworCXU4IHJzdmQwWzNdOwkJLyogZHdvcmQgMCAqLworCXU4IHJpbmdfc2l6ZVs0XTsJLyogZHdvcmQgMCAqLworCXU4IHJpbmdfc3RhdGVbNF07CS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMVs4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBkYnVmX3BpbmRleFsxM107CS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkMjsJCS8qIGR3b3JkIDEgKi8KKwl1OCBwY2lfZnVuY19pZFs4XTsJLyogZHdvcmQgMSAqLworCXU4IHJ4X3BkaWRbOV07CQkvKiBkd29yZCAxICovCisJdTggcnhfcGRpZF92YWxpZDsJLyogZHdvcmQgMSAqLworCXU4IGRlZmF1bHRfYnVmZmVyX3NpemVbMTZdOwkvKiBkd29yZCAyICovCisJdTggY3FfaWRfcmVjdlsxMF07CS8qIGR3b3JkIDIgKi8KKwl1OCByeF9wZGlkX25vdF92YWxpZDsJLyogZHdvcmQgMiAqLworCXU4IHJzdmQzWzVdOwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ0WzMyXTsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9kZWZxX2NyZWF0ZV9yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1OCB1bHBfbnVtOworCXU4IHJzdmQwOworCXN0cnVjdCBiZV9kZWZhdWx0X3BkdV9jb250ZXh0IGNvbnRleHQ7CisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1s4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9kZWZxX2NyZWF0ZV9yZXNwIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgcnN2ZDA7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfcG9zdF9zZ2xfcGFnZXNfcmVxIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fcGFnZXM7CisJdTE2IHBhZ2Vfb2Zmc2V0OworCXUzMiByc3ZkMDsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzI2XTsKKwl1MzIgcnN2ZDE7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfd3JicV9jcmVhdGVfcmVxIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fcGFnZXM7CisJdTggdWxwX251bTsKKwl1OCByc3ZkMDsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX3dyYnFfY3JlYXRlX3Jlc3AgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgcmVzcF9oZHI7CisJdTE2IGNpZDsKKwl1MTYgcnN2ZDA7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFNPTF9DSURfTUFTSwkJMHgwMDAwRkZDMAorI2RlZmluZSBTT0xfQ09ERV9NQVNLCQkweDAwMDAwMDNGCisjZGVmaW5lIFNPTF9XUkJfSU5ERVhfTUFTSwkweDAwRkYwMDAwCisjZGVmaW5lIFNPTF9DTURfV05EX01BU0sJMHhGRjAwMDAwMAorI2RlZmluZSBTT0xfUkVTX0NOVF9NQVNLCTB4N0ZGRkZGRkYKKyNkZWZpbmUgU09MX0VYUF9DTURfU05fTUFTSwkweEZGRkZGRkZGCisjZGVmaW5lIFNPTF9IV19TVFNfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBTT0xfU1RTX01BU0sJCTB4MDAwMEZGMDAKKyNkZWZpbmUgU09MX1JFU1BfTUFTSwkJMHgwMEZGMDAwMAorI2RlZmluZSBTT0xfRkxBR1NfTUFTSwkJMHg3RjAwMDAwMAorI2RlZmluZSBTT0xfU19NQVNLCQkweDgwMDAwMDAwCisKK3N0cnVjdCBzb2xfY3FlIHsKKwl1MzIgZHdbNF07Cit9OworCitzdHJ1Y3QgYW1hcF9zb2xfY3FlIHsKKwl1OCBod19zdHNbOF07CQkvKiBkd29yZCAwICovCisJdTggaV9zdHNbOF07CQkvKiBkd29yZCAwICovCisJdTggaV9yZXNwWzhdOwkJLyogZHdvcmQgMCAqLworCXU4IGlfZmxhZ3NbN107CQkvKiBkd29yZCAwICovCisJdTggczsJCQkvKiBkd29yZCAwICovCisJdTggaV9leHBfY21kX3NuWzMyXTsJLyogZHdvcmQgMSAqLworCXU4IGNvZGVbNl07CQkvKiBkd29yZCAyICovCisJdTggY2lkWzEwXTsJCS8qIGR3b3JkIDIgKi8KKwl1OCB3cmJfaW5kZXhbOF07CS8qIGR3b3JkIDIgKi8KKwl1OCBpX2NtZF93bmRbOF07CS8qIGR3b3JkIDIgKi8KKwl1OCBpX3Jlc19jbnRbMzFdOwkvKiBkd29yZCAzICovCisJdTggdmFsaWQ7CQkvKiBkd29yZCAzICovCit9IF9fcGFja2VkOworCisKKy8qKgorICogUG9zdCBXUkIgUXVldWUgRG9vcmJlbGwgUmVnaXN0ZXIgdXNlZCBieSB0aGUgaG9zdCBTdG9yYWdlCisgKiBzdGFjayB0byBub3RpZnkgdGhlCisgKiBjb250cm9sbGVyIG9mIGEgcG9zdGVkIFdvcmsgUmVxdWVzdCBCbG9jaworICovCisjZGVmaW5lIERCX1dSQl9QT1NUX0NJRF9NQVNLCQkweDNGRgkvKiBiaXRzIDAgLSA5ICovCisjZGVmaW5lIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0sJMHhGRgkvKiBiaXRzIDAgLSA5ICovCisKKyNkZWZpbmUgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQJMTYKKyNkZWZpbmUgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUCTI0CisKK3N0cnVjdCBmcmFnbnVtX2JpdHNfZm9yX3NnbF9jcmFfaW4geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIG51bV9iaXRzOworfSBfX3BhY2tlZDsKKworc3RydWN0IGlzY3NpX2NsZWFudXBfcmVxIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBjaHV0ZTsKKwl1OCBoZHJfcmluZ19pZDsKKwl1OCBkYXRhX3JpbmdfaWQ7CisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBlcV9kZWxheSB7CisJdTMyIGVxX2lkOworCXUzMiBwaGFzZTsKKwl1MzIgZGVsYXlfbXVsdGlwbGllcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9lcV9kZWxheV9wYXJhbXNfaW4geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIG51bV9lcTsKKwlzdHJ1Y3QgZXFfZGVsYXkgZGVsYXlbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaXBfYWRkcmVzc19mb3JtYXQgeworCXUxNiBzaXplX29mX3N0cnVjdHVyZTsKKwl1OCByZXNlcnZlZDsKKwl1OCBpcF90eXBlOworCXU4IGlwX2FkZHJlc3NbMTZdOworCXUzMiByc3ZkMDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwlzdHJ1Y3QgaXBfYWRkcmVzc19mb3JtYXQgaXBfYWRkcmVzczsKKwl1MTYgdGNwX3BvcnQ7CisJdTE2IGNpZDsKKwl1MTYgY3FfaWQ7CisJdTE2IGRlZnFfaWQ7CisJc3RydWN0IHBoeXNfYWRkciBkYXRhb3V0X3RlbXBsYXRlX3BhOworCXUxNiBoZHJfcmluZ19pZDsKKwl1MTYgZGF0YV9yaW5nX2lkOworCXU4IGRvX29mZmxvYWQ7CisJdTggcnN2ZDBbM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0IHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MzIgY29ubmVjdGlvbl9oYW5kbGU7CisJdTE2IGNpZDsKKwl1MTYgcnN2ZDA7CisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgeworCXN0cnVjdCBNQ0NfV1JCICp3cmI7CisJaW50ICp1c2Vyc19maW5hbF9zdGF0dXM7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIERCX0RFRl9QRFVfUklOR19JRF9NQVNLCQkweDNGRgkvKiBiaXRzIDAgLSA5ICovCisjZGVmaW5lIERCX0RFRl9QRFVfQ1FQUk9DX01BU0sJCTB4M0ZGRgkvKiBiaXRzIDAgLSA5ICovCisjZGVmaW5lIERCX0RFRl9QRFVfUkVBUk1fU0hJRlQJCTE0CisjZGVmaW5lIERCX0RFRl9QRFVfRVZFTlRfU0hJRlQJCTE1CisjZGVmaW5lIERCX0RFRl9QRFVfQ1FQUk9DX1NISUZUCQkxNgorCitzdHJ1Y3QgZG1zZ19jcWUgeworCXUzMiBkd1s0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgaWQ7CisJdTE2IHVwbG9hZF90eXBlOworCXUzMiByZXNldF9zZXE7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgdGNwX3VwbG9hZF9wYXJhbXNfb3V0IHsKKwl1MzIgZHdbMzJdOworfSBfX3BhY2tlZDsKKwordW5pb24gdGNwX3VwbG9hZF9wYXJhbXMgeworCXN0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19pbiByZXF1ZXN0OworCXN0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19vdXQgcmVzcG9uc2U7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfdWxwX2Z3X2NmZyB7CisJdTMyIHVscF9tb2RlOworCXUzMiBldHhfYmFzZTsKKwl1MzIgZXR4X2NvdW50OworCXUzMiBzcV9iYXNlOworCXUzMiBzcV9jb3VudDsKKwl1MzIgcnFfYmFzZTsKKwl1MzIgcnFfY291bnQ7CisJdTMyIGRxX2Jhc2U7CisJdTMyIGRxX2NvdW50OworCXUzMiBscm9fYmFzZTsKKwl1MzIgbHJvX2NvdW50OworCXUzMiBpY2RfYmFzZTsKKwl1MzIgaWNkX2NvdW50OworfTsKKworc3RydWN0IGJlX2Z3X2NmZyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgYmVfY29uZmlnX251bWJlcjsKKwl1MzIgYXNpY19yZXZpc2lvbjsKKwl1MzIgcGh5c19wb3J0OworCXUzMiBmdW5jdGlvbl9tb2RlOworCXN0cnVjdCBiZV91bHBfZndfY2ZnIHVscFsyXTsKKwl1MzIgZnVuY3Rpb25fY2FwczsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQ01EX0lTQ1NJX0NPTU1BTkRfSU5WQUxJREFURSAgMQorI2RlZmluZSBJU0NTSV9PUENPREVfU0NTSV9EQVRBX09VVCAgICAgIDUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9UQ1BfQ09OTkVDVF9BTkRfT0ZGTE9BRCA3MAorI2RlZmluZSBPUENPREVfSVNDU0lfSU5JX0RSSVZFUl9PRkZMT0FEX1NFU1NJT04gNDEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NT0RJRllfRVFfREVMQVkJNDEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9DTEVBTlVQCTU5CisjZGVmaW5lCU9QQ09ERV9DT01NT05fVENQX1VQTE9BRAk1NgorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0VSUk9SX1JFQ09WRVJZX0lOVkFMSURBVEVfQ09NTUFORFMgMQorLyogLS0tIENNRF9JU0NTSV9JTlZBTElEQVRFX0NPTk5FQ1RJT05fVFlQRSAtLS0gKi8KKyNkZWZpbmUgQ01EX0lTQ1NJX0NPTk5FQ1RJT05fSU5WQUxJREFURSAxCisjZGVmaW5lIENNRF9JU0NTSV9DT05ORUNUSU9OX0lTU1VFX1RDUF9SU1QgMgorI2RlZmluZSBPUENPREVfSVNDU0lfSU5JX0RSSVZFUl9JTlZBTElEQVRFX0NPTk5FQ1RJT04gNDIKKworI2RlZmluZSBJTklfV1JfQ01ECQkJMQkvKiBJbml0aWF0b3Igd3JpdGUgY29tbWFuZCAqLworI2RlZmluZSBJTklfVE1GX0NNRAkJCTIJLyogSW5pdGlhdG9yIFRNRiBjb21tYW5kICovCisjZGVmaW5lIElOSV9OT1BPVVRfQ01ECQkJMwkvKiBJbml0aWF0b3I7IFNlbmQgYSBOT1AtT1VUICovCisjZGVmaW5lIElOSV9SRF9DTUQJCQk1CS8qIEluaXRpYXRvciByZXF1ZXN0aW5nIHRvIHNlbmQKKwkJCQkJCSAqIGEgcmVhZCBjb21tYW5kCisJCQkJCQkgKi8KKyNkZWZpbmUgVEdUX0NUWF9VUERUX0NNRAkJNwkvKiBUYXJnZXQgY29udGV4dCB1cGRhdGUgKi8KKyNkZWZpbmUgVEdUX1NUU19DTUQJCQk4CS8qIFRhcmdldCBSMlQgYW5kIG90aGVyIEJIUworCQkJCQkJICogd2hlcmUgb25seSB0aGUgc3RhdHVzIG51bWJlcgorCQkJCQkJICogbmVlZCB0byBiZSB1cGRhdGVkCisJCQkJCQkgKi8KKyNkZWZpbmUgVEdUX0RBVEFJTl9DTUQJCQk5CS8qIFRhcmdldCBEYXRhLUlucyBpbiByZXNwb25zZQorCQkJCQkJICogdG8gcmVhZCBjb21tYW5kCisJCQkJCQkgKi8KKyNkZWZpbmUgVEdUX1NPU19QRFUJCQkxMAkvKiBUYXJnZXQ6c3RhbmRhbG9uZSBzdGF0dXMKKwkJCQkJCSAqIHJlc3BvbnNlCisJCQkJCQkgKi8KKyNkZWZpbmUgVEdUX0RNX0NNRAkJCTExCS8qIEluZGljYXRlcyB0aGF0IHRoZSBiaHMKKwkJCQkJCSAqICBwcmVwYXJlZGJ5CisJCQkJCQkgKiBkcml2ZXIgc2hvdWxkIG5vdCBiZSB0b3VjaGVkCisJCQkJCQkgKi8KKy8qIC0tLSBDTURfQ0hVVEVfVFlQRSAtLS0gKi8KKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fQ0hVVEVfMAkJMQorI2RlZmluZSBDTURfQ09OTkVDVElPTl9DSFVURV8xCQkyCisjZGVmaW5lIENNRF9DT05ORUNUSU9OX0NIVVRFXzIJCTMKKworI2RlZmluZSBFUV9NQUpPUl9DT0RFX0NPTVBMRVRJT04JMAorCisjZGVmaW5lIENNRF9JU0NTSV9TRVNTSU9OX0RFTF9DRkdfRlJPTV9GTEFTSCAwCisjZGVmaW5lIENNRF9JU0NTSV9TRVNTSU9OX1NBVkVfQ0ZHX09OX0ZMQVNIIDEKKworLyogLS0tIENPTk5FQ1RJT05fVVBMT0FEX1BBUkFNUyAtLS0gKi8KKy8qIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHVwbG9hZCBkZXNpcmVkLiAgKi8KKyNkZWZpbmUgQ09OTkVDVElPTl9VUExPQURfR1JBQ0VGVUwgICAgICAxCS8qIEdyYWNlZnVsIHVwbG9hZCAgKi8KKyNkZWZpbmUgQ09OTkVDVElPTl9VUExPQURfQUJPUlRfUkVTRVQgICAyCS8qIEFib3J0aXZlIHVwbG9hZCB3aXRoCisJCQkJCQkgKiByZXNldAorCQkJCQkJICovCisjZGVmaW5lIENPTk5FQ1RJT05fVVBMT0FEX0FCT1JUCQkzCS8qIEFib3J0aXZlIHVwbG9hZCB3aXRob3V0CisJCQkJCQkgKiByZXNldAorCQkJCQkJICovCisjZGVmaW5lIENPTk5FQ1RJT05fVVBMT0FEX0FCT1JUX1dJVEhfU0VRIDQJLyogQWJvcnRpdmUgdXBsb2FkIHdpdGggcmVzZXQsCisJCQkJCQkgKiBzZXF1ZW5jZSBudW1iZXIgYnkgZHJpdmVyICAqLworCisvKiBSZXR1cm5zIGJ5dGUgc2l6ZSBvZiBnaXZlbiBmaWVsZCB3aXRoIGEgc3RydWN0dXJlLiAqLworCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGZpZWxkIGFycmF5LiAqLworI2RlZmluZSBCRV9OVU1CRVJfT0ZfRklFTEQoX3R5cGVfLCBfZmllbGRfKQlcCisJKEZJRUxEX1NJWkVPRihfdHlwZV8sIF9maWVsZF8pL3NpemVvZigoKChfdHlwZV8gKikwKS0+X2ZpZWxkX1swXSkpKVwKKworLyoqCisgKiBEaWZmZXJlbnQgdHlwZXMgb2YgaVNDU0kgY29tcGxldGlvbnMgdG8gaG9zdCBkcml2ZXIgZm9yIGJvdGggaW5pdGlhdG9yCisgKiBhbmQgdGFnZXQgbW9kZQorICogb2Ygb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFNPTF9DTURfQ09NUExFVEUJCTEJLyogU29saWNpdGVkIGNvbW1hbmQgY29tcGxldGVkCisJCQkJCQkgKiBub3JtYWxseQorCQkJCQkJICovCisjZGVmaW5lIFNPTF9DTURfS0lMTEVEX0RBVEFfRElHRVNUX0VSUiAgMgkvKiBTb2xpY2l0ZWQgY29tbWFuZCBnb3QKKwkJCQkJCSAqIGludmFsaWRhdGVkIGludGVybmFsbHkgZHVlCisJCQkJCQkgKiB0byBEYXRhIERpZ2VzdCBlcnJvcgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfUERVX1NJWkVfRVhDRUVEU19EU0wgMwkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseQorCQkJCQkJICogZHVlIHRvIGEgcmVjaWV2ZWQgUERVCisJCQkJCQkgKiBzaXplID4gRFNMCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9CVVJTVF9MRU5fTUlTTUFUQ0ggICA0CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0aSByZWNlaXZlZAorCQkJCQkJICogUERVIHNlcXVlbmNlIHNpemUgPgorCQkJCQkJICogRkJML01CTC4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0FIU19SQ1ZECQk1CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2lldmVkCisJCQkJCQkgKiBQRFUgSGRyIHRoYXQgaGFzCisJCQkJCQkgKiBBSFMgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9IRFJfRElHRVNUX0VSUgk2CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBIZHIgRGlnZXN0CisJCQkJCQkgKiBlcnJvcgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfVU5LTk9XTl9IRFIJCTcJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqICBpbnRlcm5hbGx5CisJCQkJCQkgKiBkdWUgdG8gYSBiYWQgb3Bjb2RlIGluIHRoZQorCQkJCQkJICogcGR1IGhkcgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfU1RBTEVfSVRUX1RUVF9SQ1ZECTgJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIElUVC9UVFQgdGhhdCBkb2VzIG5vdCBiZWxvbmcKKwkJCQkJCSAqIHRvIHRoaXMgQ29ubmVjdGlvbgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfSU5WQUxJRF9JVFRfVFRUX1JDVkQgOQkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gcmVjaWV2ZWQKKwkJCQkJCSAqIElUVC9UVFQgdmFsdWUgPiBNYXgKKwkJCQkJCSAqIFN1cHBvcnRlZCBJVFRzL1RUVHMKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX1JTVF9SQ1ZECQkxMAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYW4KKwkJCQkJCSAqIGluY29taW5nIFRDUCBSU1QKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX1RJTUVEX09VVAkJMTEJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHRpbWVvdXQgb24KKwkJCQkJCSAqIHRjcCBzZWdtZW50IDEyIHJldHJhbnNtaXQKKwkJCQkJCSAqIGF0dGVtcHRzIGZhaWxlZAorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfUlNUX1NFTlQJCTEyCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBUQ1AgUlNUCisJCQkJCQkgKiBzZW50IGJ5IHRoZSBUeCBzaWRlCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9GSU5fUkNWRAkJMTMJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGFuCisJCQkJCQkgKiBpbmNvbWluZyBUQ1AgRklOLgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfQkFEX1VOU09MX1BEVV9SQ1ZECTE0CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBiYWQKKwkJCQkJCSAqIHVuc29saWNpdGVkIFBEVSBVbnNvbGljaXRlZAorCQkJCQkJICogUERVcyBhcmUgUERVcyB3aXRoCisJCQkJCQkgKiBJVFQ9MHhmZmZmZmZmZgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfQkFEX1dSQl9JTkRFWF9FUlJPUgkxNQkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYmFkIFdSQgorCQkJCQkJICogaW5kZXguCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9PVkVSX1JVTl9SRVNJRFVBTAkxNgkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gcmVjaXZlZAorCQkJCQkJICogY29tbWFuZCBoYXMgcmVzaWR1YWwKKwkJCQkJCSAqIG92ZXIgcnVuIGJ5dGVzLgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfVU5ERVJfUlVOX1JFU0lEVUFMCTE3CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpdmVkCisJCQkJCQkgKiBjb21tYW5kIGhhcyByZXNpZHVhbCB1bmRlcgorCQkJCQkJICogcnVuIGJ5dGVzLgorCQkJCQkJICovCisjZGVmaW5lIENNRF9LSUxMRURfSU5WQUxJRF9TVEFUU05fUkNWRAkxOAkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogUERVIGhhcyBhbiBpbnZhbGlkIFN0YXR1c1NOCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0tJTExFRF9JTlZBTElEX1IyVF9SQ1ZECTE5CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2lldmVkCisJCQkJCQkgKiBhbiBSMlQgd2l0aCBzb21lIGludmFsaWQKKwkJCQkJCSAqIGZpZWxkcyBpbiBpdAorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX0xVTl9JTlZBTElECTIwCS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNlaXZlZAorCQkJCQkJICogUERVIGhhcyBhbiBpbnZhbGlkIExVTi4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9JQ0RfSU5WQUxJRAkyMQkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gdGhlCisJCQkJCQkgKiBjb3JyZXNwb25kaW5nIElDRCBub3QgaW4gYQorCQkJCQkJICogdmFsaWQgc3RhdGUKKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9JVFRfSU5WQUxJRAkyMgkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZCBkdWUKKwkJCQkJCSAqICB0byByZWNlaXZlZCBQRFUgaGFzIGFuCisJCQkJCQkgKiAgaW52YWxpZCBJVFQuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0NYTl9LSUxMRURfU0VRX09VVE9GT1JERVIJMjMJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQgZHVlCisJCQkJCQkgKiB0byByZWNlaXZlZCBzZXF1ZW5jZSBidWZmZXIKKwkJCQkJCSAqIG9mZnNldCBpcyBvdXQgb2Ygb3JkZXIuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0NYTl9LSUxMRURfSU5WQUxJRF9EQVRBU05fUkNWRCAyNAkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYQorCQkJCQkJICogcmVjaWV2ZWQgUERVIGhhcyBhbiBpbnZhbGlkCisJCQkJCQkgKiBEYXRhU04KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fSU5WQUxJREFURV9OT1RJRlkJCTI1CS8qIENvbm5lY3Rpb24gaW52YWxpZGF0aW9uCisJCQkJCQkgKiBjb21wbGV0aW9uIG5vdGlmeS4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fSU5WQUxJREFURV9JTkRFWF9OT1RJRlkJMjYJLyogQ29ubmVjdGlvbiBpbnZhbGlkYXRpb24KKwkJCQkJCSAqIGNvbXBsZXRpb24KKwkJCQkJCSAqIHdpdGggZGF0YSBQRFUgaW5kZXguCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0lOVkFMSURBVEVEX05PVElGWQkJMjcJLyogQ29tbWFuZCBpbnZhbGlkYXRpb24KKwkJCQkJCSAqIGNvbXBsZXRpb25ub3RpZmlmeS4KKwkJCQkJCSAqLworI2RlZmluZSBVTlNPTF9IRFJfTk9USUZZCQkyOAkvKiBVbnNvbGljaXRlZCBoZWFkZXIgbm90aWZ5LiovCisjZGVmaW5lIFVOU09MX0RBVEFfTk9USUZZCQkyOQkvKiBVbnNvbGljaXRlZCBkYXRhIG5vdGlmeS4qLworI2RlZmluZSBVTlNPTF9EQVRBX0RJR0VTVF9FUlJPUl9OT1RJRlkgCTMwCS8qIFVuc29saWNpdGVkIGRhdGEgZGlnZXN0CisJCQkJCQkgKiBlcnJvciBub3RpZnkuCisJCQkJCQkgKi8KKyNkZWZpbmUgRFJJVkVSTVNHX05PVElGWQkJMzEJLyogVENQIGFja25vd2xlZGdlIGJhc2VkCisJCQkJCQkgKiBub3RpZmljYXRpb24uCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9DTU5EX0RBVEFfTk9UX09OX1NBTUVfQ09OTiAzMiAvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICAqIGludGVybmFsbHkgZHVlIHRvIGNvbW1hbmQKKwkJCQkJCSAgKiBhbmQgZGF0YSBhcmUgbm90IG9uIHNhbWUKKwkJCQkJCSAgKiBjb25uZWN0aW9uLgorCQkJCQkJICAqLworI2RlZmluZSBTT0xfQ01EX0tJTExFRF9ESUZfRVJSCQkzMwkvKiBTb2xpY2l0ZWQgY29tbWFuZCBnb3QKKwkJCQkJCSAqICBpbnZhbGlkYXRlZCBpbnRlcm5hbGx5IGR1ZQorCQkJCQkJICogIHRvIERJRiBlcnJvcgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfU1lOX1JDVkQJCTM0CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBpbmNvbWluZworCQkJCQkJICogVENQIFNZTgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfSU1NX0RBVEFfUkNWRAkzNQkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYW4KKwkJCQkJCSAqIGluY29taW5nIFVuc29saWNpdGVkIFBEVQorCQkJCQkJICogdGhhdCBoYXMgaW1tZWRpYXRlIGRhdGEgb24KKwkJCQkJCSAqIHRoZSBjeG4KKwkJCQkJCSAqLworCit2b2lkIGJlX3dyYl9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiLCBpbnQgcGF5bG9hZF9sZW4sCisJCQlib29sIGVtYmVkZGVkLCB1OCBzZ2VfY250KTsKKwordm9pZCBiZV9jbWRfaGRyX3ByZXBhcmUoc3RydWN0IGJlX2NtZF9yZXFfaGRyICpyZXFfaGRyLAorCQkJdTggc3Vic3lzdGVtLCB1OCBvcGNvZGUsIGludCBjbWRfbGVuKTsKKworI2VuZGlmIC8qICFCRUlTQ1NJX0NNRFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQyNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKQEAgLTAsMCArMSw2MzggQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpbmNsdWRlIDxzY3NpL2xpYmlzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorCisjaW5jbHVkZSAiYmVfaXNjc2kuaCIKKworZXh0ZXJuIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQ7CisKKy8qKgorICogYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZSAtIGNyZWF0ZXMgYSBuZXcgaXNjc2kgc2Vzc2lvbgorICogQGNtZHNfbWF4OiBtYXggY29tbWFuZHMgc3VwcG9ydGVkCisgKiBAcWRlcHRoOiBtYXggcXVldWUgZGVwdGggc3VwcG9ydGVkCisgKiBAaW5pdGlhbF9jbWRzbjogaW5pdGlhbCBpc2NzaSBDTURTTgorICovCitzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmJlaXNjc2lfc2Vzc2lvbl9jcmVhdGUoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwKKwkJCQkJCSB1MTYgY21kc19tYXgsCisJCQkJCQkgdTE2IHFkZXB0aCwKKwkJCQkJCSB1MzIgaW5pdGlhbF9jbWRzbikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2VzczsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3M7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzazsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfc2Vzc2lvbl9jcmVhdGVcbiIpOworCisJaWYgKCFlcCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZWlzY3NpX3Nlc3Npb25fY3JlYXRlOiBpbnZhbGlkIGVwIFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CisJc2hvc3QgPSBwaGJhLT5zaG9zdDsKKwlpZiAoY21kc19tYXggPiBiZWlzY3NpX2VwLT5waGJhLT5wYXJhbXMud3Jic19wZXJfY3huKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgc2hvc3QsICJDYW5ub3QgaGFuZGxlICVkIGNtZHMuIgorCQkJICAgICAiTWF4IGNtZHMgcGVyIHNlc3Npb24gc3VwcG9ydGVkIGlzICVkLiBVc2luZyAlZC4gIgorCQkJICAgICAiXG4iLCBjbWRzX21heCwKKwkJCSAgICAgIGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4sCisJCQkgICAgICBiZWlzY3NpX2VwLT5waGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKwkJY21kc19tYXggPSBiZWlzY3NpX2VwLT5waGJhLT5wYXJhbXMud3Jic19wZXJfY3huOworCX0KKworCSBjbHNfc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0LAorCQkJCQkgICBzaG9zdCwgY21kc19tYXgsCisJCQkJCSAgIHNpemVvZigqYmVpc2NzaV9zZXNzKSwKKwkJCQkJICAgc2l6ZW9mKCppb190YXNrKSwKKwkJCQkJICAgaW5pdGlhbF9jbWRzbiwgSVNDU0lfTUFYX1RBUkdFVCk7CisJaWYgKCFjbHNfc2Vzc2lvbikKKwkJcmV0dXJuIE5VTEw7CisJc2VzcyA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOworCWJlaXNjc2lfc2VzcyA9IHNlc3MtPmRkX2RhdGE7CisJYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCA9ICBwY2lfcG9vbF9jcmVhdGUoImJlaXNjc2lfYmhzX3Bvb2wiLAorCQkJCQkJICAgcGhiYS0+cGNpZGV2LAorCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBiZV9jbWRfYmhzKSwKKwkJCQkJCSAgIDY0LCAwKTsKKwlpZiAoIWJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wpCisJCWdvdG8gZGVzdHJveV9zZXNzOworCisJcmV0dXJuIGNsc19zZXNzaW9uOworZGVzdHJveV9zZXNzOgorCWlzY3NpX3Nlc3Npb25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGJlaXNjc2lfc2Vzc2lvbl9kZXN0cm95IC0gZGVzdHJveXMgaXNjc2kgc2Vzc2lvbgorICogQGNsc19zZXNzaW9uOglwb2ludGVyIHRvIGlzY3NpIGNscyBzZXNzaW9uCisgKgorICogRGVzdHJveXMgaVNDU0kgc2Vzc2lvbiBpbnN0YW5jZSBhbmQgcmVsZWFzZXMKKyAqIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIGl0LgorICovCit2b2lkIGJlaXNjc2lfc2Vzc2lvbl9kZXN0cm95KHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24pCit7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3MgPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBzZXNzLT5kZF9kYXRhOworCisJcGNpX3Bvb2xfZGVzdHJveShiZWlzY3NpX3Nlc3MtPmJoc19wb29sKTsKKwlpc2NzaV9zZXNzaW9uX3RlYXJkb3duKGNsc19zZXNzaW9uKTsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nvbm5fY3JlYXRlIC0gY3JlYXRlIGFuIGluc3RhbmNlIG9mIGlzY3NpIGNvbm5lY3Rpb24KKyAqIEBjbHNfc2Vzc2lvbjogcHRyIHRvIGlzY3NpX2Nsc19zZXNzaW9uCisgKiBAY2lkOiBpc2NzaSBjaWQKKyAqLworc3RydWN0IGlzY3NpX2Nsc19jb25uICoKK2JlaXNjc2lfY29ubl9jcmVhdGUoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwgdTMyIGNpZCkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3M7CisJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX2NyZWF0ZSAsY2lkIgorCQkgImZyb20gaXNjc2kgbGF5ZXI9JWRcbiIsIGNpZCk7CisJc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KGNsc19zZXNzaW9uKTsKKwlwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKworCWNsc19jb25uID0gaXNjc2lfY29ubl9zZXR1cChjbHNfc2Vzc2lvbiwgc2l6ZW9mKCpiZWlzY3NpX2Nvbm4pLCBjaWQpOworCWlmICghY2xzX2Nvbm4pCisJCXJldHVybiBOVUxMOworCisJY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOworCWJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJYmVpc2NzaV9jb25uLT5lcCA9IE5VTEw7CisJYmVpc2NzaV9jb25uLT5waGJhID0gcGhiYTsKKwliZWlzY3NpX2Nvbm4tPmNvbm4gPSBjb25uOworCXNlc3MgPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKKwliZWlzY3NpX3Nlc3MgPSBzZXNzLT5kZF9kYXRhOworCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9zZXNzID0gYmVpc2NzaV9zZXNzOworCXJldHVybiBjbHNfY29ubjsKK30KKworLyoqCisgKiBiZWlzY3NpX2JpbmRjb25uX2NpZCAtIEJpbmQgdGhlIGJlaXNjc2lfY29ubiB3aXRoIHBoYmEgY29ubmVjdGlvbiB0YWJsZQorICogQGJlaXNjc2lfY29ubjogVGhlIHBvaW50ZXIgdG8gIGJlaXNjc2lfY29ubiBzdHJ1Y3R1cmUKKyAqIEBwaGJhOiBUaGUgcGhiYSBpbnN0YW5jZQorICogQGNpZDogVGhlIGNpZCB0byBmcmVlCisgKi8KK3N0YXRpYyBpbnQgYmVpc2NzaV9iaW5kY29ubl9jaWQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQl1bnNpZ25lZCBpbnQgY2lkKQoreworCWlmIChwaGJhLT5jb25uX3RhYmxlW2NpZF0pIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJDb25uZWN0aW9uIHRhYmxlIGFscmVhZHkgb2NjdXBpZWQuIERldGVjdGVkIGNsYXNoXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAicGhiYS0+Y29ubl90YWJsZVslZF09JXAoYmVpc2NzaV9jb25uKSBcbiIsCisJCQkgY2lkLCBiZWlzY3NpX2Nvbm4pOworCQlwaGJhLT5jb25uX3RhYmxlW2NpZF0gPSBiZWlzY3NpX2Nvbm47CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9iaW5kIC0gQmluZHMgaXNjc2kgc2Vzc2lvbi9jb25uZWN0aW9uIHdpdGggVENQIGNvbm5lY3Rpb24KKyAqIEBjbHNfc2Vzc2lvbjogcG9pbnRlciB0byBpc2NzaSBjbHMgc2Vzc2lvbgorICogQGNsc19jb25uOiBwb2ludGVyIHRvIGlzY3NpIGNscyBjb25uCisgKiBAdHJhbnNwb3J0X2ZkOiBFUCBoYW5kbGUoNjQgYml0KQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYmluZHMgdGhlIFRDUCBDb25uIHdpdGggaVNDU0kgQ29ubmVjdGlvbiBhbmQgU2Vzc2lvbi4KKyAqLworaW50IGJlaXNjc2lfY29ubl9iaW5kKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCisJCSAgICAgIHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCSAgICAgIHU2NCB0cmFuc3BvcnRfZmQsIGludCBpc19sZWFkaW5nKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9CisJCShzdHJ1Y3QgU2NzaV9Ib3N0ICopaXNjc2lfc2Vzc2lvbl90b19zaG9zdChjbHNfc2Vzc2lvbik7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gKHN0cnVjdCBiZWlzY3NpX2hiYSAqKWlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcDsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9iaW5kXG4iKTsKKwllcCA9IGlzY3NpX2xvb2t1cF9lbmRwb2ludCh0cmFuc3BvcnRfZmQpOworCWlmICghZXApCisJCXJldHVybiAtRUlOVkFMOworCisJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCisJaWYgKGlzY3NpX2Nvbm5fYmluZChjbHNfc2Vzc2lvbiwgY2xzX2Nvbm4sIGlzX2xlYWRpbmcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChiZWlzY3NpX2VwLT5waGJhICE9IHBoYmEpIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJiZWlzY3NpX2VwLT5oYmE9JXAgbm90IGVxdWFsIHRvIHBoYmE9JXAgXG4iLAorCQkJIGJlaXNjc2lfZXAtPnBoYmEsIHBoYmEpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgPSBiZWlzY3NpX2VwLT5lcF9jaWQ7CisJYmVpc2NzaV9jb25uLT5lcCA9IGJlaXNjc2lfZXA7CisJYmVpc2NzaV9lcC0+Y29ubiA9IGJlaXNjc2lfY29ubjsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJiZWlzY3NpX2Nvbm49JXAgY29ubj0lcCBlcF9jaWQ9JWQgXG4iLAorCQkgYmVpc2NzaV9jb25uLCBjb25uLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworCXJldHVybiBiZWlzY3NpX2JpbmRjb25uX2NpZChwaGJhLCBiZWlzY3NpX2Nvbm4sIGJlaXNjc2lfZXAtPmVwX2NpZCk7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX2dldF9wYXJhbSAtIGdldCB0aGUgaXNjc2kgcGFyYW1ldGVyCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gaXNjc2kgY2xzIGNvbm4KKyAqIEBwYXJhbTogcGFyYW1ldGVyIHR5cGUgaWRlbnRpZmllcgorICogQGJ1ZjogYnVmZmVyIHBvaW50ZXIKKyAqCisgKiByZXR1cm5zIGlzY3NpIHBhcmFtZXRlcgorICovCitpbnQgYmVpc2NzaV9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJICAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlpbnQgbGVuID0gMDsKKworCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOworCWlmICghYmVpc2NzaV9lcCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIkluIGJlaXNjc2lfY29ubl9nZXRfcGFyYW0gLCBubyBiZWlzY3NpX2VwXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIElTQ1NJX1BBUkFNX0NPTk5fUE9SVDoKKwkJbGVuID0gc3ByaW50ZihidWYsICIlaHVcbiIsIGJlaXNjc2lfZXAtPmRzdF90Y3Bwb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9DT05OX0FERFJFU1M6CisJCWlmIChiZWlzY3NpX2VwLT5pcF90eXBlID09IEJFMl9JUFY0KQorCQkJbGVuID0gc3ByaW50ZihidWYsICIlcEk0XG4iLCAmYmVpc2NzaV9lcC0+ZHN0X2FkZHIpOworCQllbHNlCisJCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTZcbiIsICZiZWlzY3NpX2VwLT5kc3Q2X2FkZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gaXNjc2lfY29ubl9nZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitpbnQgYmVpc2NzaV9zZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJICAgICAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCWludCByZXQ7CisKKwlyZXQgPSBpc2NzaV9zZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYsIGJ1Zmxlbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKgorCSAqIElmIHVzZXJzcGFjZSB0cmllZCB0byBzZXQgdGhlIHZhbHVlIHRvIGhpZ2hlciB0aGFuIHdlIGNhbgorCSAqIHN1cHBvcnQgb3ZlcnJpZGUgaGVyZS4KKwkgKi8KKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBJU0NTSV9QQVJBTV9GSVJTVF9CVVJTVDoKKwkJaWYgKHNlc3Npb24tPmZpcnN0X2J1cnN0ID4gODE5MikKKwkJCXNlc3Npb24tPmZpcnN0X2J1cnN0ID0gODE5MjsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9NQVhfUkVDVl9ETEVOR1RIOgorCQlpZiAoY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCA+IDY1NTM2KQorCQkJY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCA9IDY1NTM2OworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX01BWF9CVVJTVDoKKwkJaWYgKHNlc3Npb24tPmZpcnN0X2J1cnN0ID4gMjYyMTQ0KQorCQkJc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPSAyNjIxNDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0gLSBnZXQgdGhlIGlzY3NpIHBhcmFtZXRlcgorICogQHNob3N0OiBwb2ludGVyIHRvIHNjc2lfaG9zdCBzdHJ1Y3R1cmUKKyAqIEBwYXJhbTogcGFyYW1ldGVyIHR5cGUgaWRlbnRpZmllcgorICogQGJ1ZjogYnVmZmVyIHBvaW50ZXIKKyAqCisgKiByZXR1cm5zIGhvc3QgcGFyYW1ldGVyCisgKi8KK2ludCBiZWlzY3NpX2dldF9ob3N0X3BhcmFtKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkJICAgZW51bSBpc2NzaV9ob3N0X3BhcmFtIHBhcmFtLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gKHN0cnVjdCBiZWlzY3NpX2hiYSAqKWlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJaW50IGxlbiA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBJU0NTSV9IT1NUX1BBUkFNX0hXQUREUkVTUzoKKwkJYmVfY21kX2dldF9tYWNfYWRkcigmcGhiYS0+Y3RybCwgcGhiYS0+bWFjX2FkZHJlc3MpOworCQlsZW4gPSBzeXNmc19mb3JtYXRfbWFjKGJ1ZiwgcGhiYS0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGlzY3NpX2hvc3RfZ2V0X3BhcmFtKHNob3N0LCBwYXJhbSwgYnVmKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nvbm5fZ2V0X3N0YXRzIC0gZ2V0IHRoZSBpc2NzaSBzdGF0cworICogQGNsc19jb25uOiBwb2ludGVyIHRvIGlzY3NpIGNscyBjb25uCisgKiBAc3RhdHM6IHBvaW50ZXIgdG8gaXNjc2lfc3RhdHMgc3RydWN0dXJlCisgKgorICogcmV0dXJucyBpc2NzaSBzdGF0cworICovCit2b2lkIGJlaXNjc2lfY29ubl9nZXRfc3RhdHMoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJCSAgICBzdHJ1Y3QgaXNjc2lfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fZ2V0X3N0YXRzXG4iKTsKKwlzdGF0cy0+dHhkYXRhX29jdGV0cyA9IGNvbm4tPnR4ZGF0YV9vY3RldHM7CisJc3RhdHMtPnJ4ZGF0YV9vY3RldHMgPSBjb25uLT5yeGRhdGFfb2N0ZXRzOworCXN0YXRzLT5kYXRhb3V0X3BkdXMgPSBjb25uLT5kYXRhb3V0X3BkdXNfY250OworCXN0YXRzLT5zY3NpcnNwX3BkdXMgPSBjb25uLT5zY3NpcnNwX3BkdXNfY250OworCXN0YXRzLT5zY3NpY21kX3BkdXMgPSBjb25uLT5zY3NpY21kX3BkdXNfY250OworCXN0YXRzLT5kYXRhaW5fcGR1cyA9IGNvbm4tPmRhdGFpbl9wZHVzX2NudDsKKwlzdGF0cy0+dG1mcnNwX3BkdXMgPSBjb25uLT50bWZyc3BfcGR1c19jbnQ7CisJc3RhdHMtPnRtZmNtZF9wZHVzID0gY29ubi0+dG1mY21kX3BkdXNfY250OworCXN0YXRzLT5yMnRfcGR1cyA9IGNvbm4tPnIydF9wZHVzX2NudDsKKwlzdGF0cy0+ZGlnZXN0X2VyciA9IDA7CisJc3RhdHMtPnRpbWVvdXRfZXJyID0gMDsKKwlzdGF0cy0+Y3VzdG9tX2xlbmd0aCA9IDA7CisJc3RyY3B5KHN0YXRzLT5jdXN0b21bMF0uZGVzYywgImVoX2Fib3J0X2NudCIpOworCXN0YXRzLT5jdXN0b21bMF0udmFsdWUgPSBjb25uLT5laF9hYm9ydF9jbnQ7Cit9CisKKy8qKgorICogYmVpc2NzaV9zZXRfcGFyYW1zX2Zvcl9vZmZsZCAtIGdldCB0aGUgcGFyYW1ldGVycyBmb3Igb2ZmbG9hZAorICogQGJlaXNjc2lfY29ubjogcG9pbnRlciB0byBiZWlzY3NpX2Nvbm4KKyAqIEBwYXJhbXM6IHBvaW50ZXIgdG8gb2ZmbG9hZF9wYXJhbXMgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkICBiZWlzY3NpX3NldF9wYXJhbXNfZm9yX29mZmxkKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQkJICBzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgbWF4X2J1cnN0X2xlbmd0aCwKKwkJICAgICAgcGFyYW1zLCBzZXNzaW9uLT5tYXhfYnVyc3QpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgbWF4X3NlbmRfZGF0YV9zZWdtZW50X2xlbmd0aCwgcGFyYW1zLAorCQkgICAgICBjb25uLT5tYXhfeG1pdF9kbGVuZ3RoKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGZpcnN0X2J1cnN0X2xlbmd0aCwKKwkJICAgICAgcGFyYW1zLCBzZXNzaW9uLT5maXJzdF9idXJzdCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBlcmwsIHBhcmFtcywKKwkJICAgICAgc2Vzc2lvbi0+ZXJsKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGRkZSwgcGFyYW1zLAorCQkgICAgICBjb25uLT5kYXRhZGdzdF9lbik7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBoZGUsIHBhcmFtcywKKwkJICAgICAgY29ubi0+aGRyZGdzdF9lbik7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBpcjJ0LCBwYXJhbXMsCisJCSAgICAgIHNlc3Npb24tPmluaXRpYWxfcjJ0X2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGltZCwgcGFyYW1zLAorCQkgICAgICBzZXNzaW9uLT5pbW1fZGF0YV9lbik7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBleHBfc3RhdHNuLCBwYXJhbXMsCisJCSAgICAgIChjb25uLT5leHBfc3RhdHNuIC0gMSkpOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9zdGFydCAtIG9mZmxvYWQgb2Ygc2Vzc2lvbiB0byBjaGlwCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gYmVpc2NzaV9jb25uCisgKi8KK2ludCBiZWlzY3NpX2Nvbm5fc3RhcnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubikKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgcGFyYW1zOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbi0+Y2xzX3Nlc3Npb24pOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisKKwltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zKSk7CisJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CisJaWYgKCFiZWlzY3NpX2VwKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbiBiZWlzY3NpX2Nvbm5fc3RhcnQgLCBubyBiZWlzY3NpX2VwXG4iKTsKKworCWZyZWVfbWdtdF9zZ2xfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubi0+cGxvZ2luX3NnbF9oYW5kbGUpOworCWJlaXNjc2lfY29ubi0+bG9naW5faW5fcHJvZ3Jlc3MgPSAwOworCWJlaXNjc2lfc2V0X3BhcmFtc19mb3Jfb2ZmbGQoYmVpc2NzaV9jb25uLCAmcGFyYW1zKTsKKwliZWlzY3NpX29mZmxvYWRfY29ubmVjdGlvbihiZWlzY3NpX2Nvbm4sICZwYXJhbXMpOworCWlzY3NpX2Nvbm5fc3RhcnQoY2xzX2Nvbm4pOworCXJldHVybiAwOworfQorCisvKioKKyAqIGJlaXNjc2lfZ2V0X2NpZCAtIEFsbG9jYXRlIGEgY2lkCisgKiBAcGhiYTogVGhlIHBoYmEgaW5zdGFuY2UKKyAqLworc3RhdGljIGludCBiZWlzY3NpX2dldF9jaWQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIHNob3J0IGNpZCA9IDB4RkZGRjsKKworCWlmICghcGhiYS0+YXZsYmxfY2lkcykKKwkJcmV0dXJuIGNpZDsKKworCWNpZCA9IHBoYmEtPmNpZF9hcnJheVtwaGJhLT5jaWRfYWxsb2MrK107CisJaWYgKHBoYmEtPmNpZF9hbGxvYyA9PSBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCkKKwkJcGhiYS0+Y2lkX2FsbG9jID0gMDsKKwlwaGJhLT5hdmxibF9jaWRzLS07CisJcmV0dXJuIGNpZDsKK30KKworLyoqCisgKiBiZWlzY3NpX29wZW5fY29ubiAtIEFzayBGVyB0byBvcGVuIGEgVENQIGNvbm5lY3Rpb24KKyAqIEBlcDoJZW5kcG9pbnQgdG8gYmUgdXNlZAorICogQHNyY19hZGRyOiBUaGUgc291cmNlIElQIGFkZHJlc3MKKyAqIEBkc3RfYWRkcjogVGhlIERlc3RpbmF0aW9uICBJUCBhZGRyZXNzCisgKgorICogQXNrcyB0aGUgRlcgdG8gb3BlbiBhIFRDUCBjb25uZWN0aW9uCisgKi8KK3N0YXRpYyBpbnQgYmVpc2NzaV9vcGVuX2Nvbm4oc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwKKwkJCSAgICAgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwKKwkJCSAgICAgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwgaW50IG5vbl9ibG9ja2luZykKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CisJaW50IHJldCA9IC0xOworCisJYmVpc2NzaV9lcC0+ZXBfY2lkID0gYmVpc2NzaV9nZXRfY2lkKHBoYmEpOworCWlmIChiZWlzY3NpX2VwLT5lcF9jaWQgPT0gMHhGRkZGKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIk5vIGZyZWUgY2lkIGF2YWlsYWJsZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfb3Blbl9jb25uLCBlcF9jaWQ9JWQgIiwKKwkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJcGhiYS0+ZXBfYXJyYXlbYmVpc2NzaV9lcC0+ZXBfY2lkXSA9IGVwOworCWlmIChiZWlzY3NpX2VwLT5lcF9jaWQgPgorCSAgICAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsKSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJGYWlsZWQgaW4gYWxsb2NhdGUgaXNjc2kgY2lkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwliZWlzY3NpX2VwLT5jaWRfdmxkID0gMDsKKwlyZXR1cm4gbWdtdF9vcGVuX2Nvbm5lY3Rpb24ocGhiYSwgZHN0X2FkZHIsIGJlaXNjc2lfZXApOworfQorCisvKioKKyAqIGJlaXNjc2lfcHV0X2NpZCAtIEZyZWUgdGhlIGNpZAorICogQHBoYmE6IFRoZSBwaGJhIGZvciB3aGljaCB0aGUgY2lkIGlzIGJlaW5nIGZyZWVkCisgKiBAY2lkOiBUaGUgY2lkIHRvIGZyZWUKKyAqLworc3RhdGljIHZvaWQgYmVpc2NzaV9wdXRfY2lkKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgc2hvcnQgY2lkKQoreworCXBoYmEtPmF2bGJsX2NpZHMrKzsKKwlwaGJhLT5jaWRfYXJyYXlbcGhiYS0+Y2lkX2ZyZWUrK10gPSBjaWQ7CisJaWYgKHBoYmEtPmNpZF9mcmVlID09IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsKQorCQlwaGJhLT5jaWRfZnJlZSA9IDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9mcmVlX2VwIC0gZnJlZSBlbmRwb2ludAorICogQGVwOglwb2ludGVyIHRvIGlzY3NpIGVuZHBvaW50IHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBiZWlzY3NpX2ZyZWVfZXAoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CisKKwliZWlzY3NpX3B1dF9jaWQocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwliZWlzY3NpX2VwLT5waGJhID0gTlVMTDsKKwlpc2NzaV9kZXN0cm95X2VuZHBvaW50KGVwKTsKK30KKworLyoqCisgKiBiZWlzY3NpX2VwX2Nvbm5lY3QgLSBBc2sgY2hpcCB0byBjcmVhdGUgVENQIENvbm4KKyAqIEBzY3NpX2hvc3Q6IFBvaW50ZXIgdG8gc2NzaV9ob3N0IHN0cnVjdHVyZQorICogQGRzdF9hZGRyOiBUaGUgSVAgYWRkcmVzcyBvZiBUYXJnZXQKKyAqIEBub25fYmxvY2tpbmc6IGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZyBjYWxsCisgKgorICogVGhpcyByb3V0aW5lcyBmaXJzdCBhc2tzIGNoaXAgdG8gY3JlYXRlIGEgY29ubmVjdGlvbiBhbmQgdGhlbiBhbGxvY2F0ZXMgYW4gRVAKKyAqLworc3RydWN0IGlzY3NpX2VuZHBvaW50ICoKK2JlaXNjc2lfZXBfY29ubmVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKKwkJICAgaW50IG5vbl9ibG9ja2luZykKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcDsKKwlpbnQgcmV0OworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9lcF9jb25uZWN0IFxuIik7CisJaWYgKHNob3N0KQorCQlwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwllbHNlIHsKKwkJcmV0ID0gLUVOWElPOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJzaG9zdCBpcyBOVUxMIFxuIik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCWVwID0gaXNjc2lfY3JlYXRlX2VuZHBvaW50KHNpemVvZihzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCkpOworCWlmICghZXApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJYmVpc2NzaV9lcC0+cGhiYSA9IHBoYmE7CisKKwlpZiAoYmVpc2NzaV9vcGVuX2Nvbm4oZXAsIE5VTEwsIGRzdF9hZGRyLCBub25fYmxvY2tpbmcpKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBhbGxvY2F0ZSBpc2NzaSBjaWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfZXA7CisJfQorCisJcmV0dXJuIGVwOworCitmcmVlX2VwOgorCWJlaXNjc2lfZnJlZV9lcChlcCk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworLyoqCisgKiBiZWlzY3NpX2VwX3BvbGwgLSBQb2xsIHRvIHNlZSBpZiBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCisgKiBAZXA6CWVuZHBvaW50IHRvIGJlIHVzZWQKKyAqIEB0aW1lb3V0X21zOiB0aW1lb3V0IHNwZWNpZmllZCBpbiBtaWxsaXNlY3MKKyAqCisgKiBQb2xsIHRvIHNlZSBpZiBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2hlZAorICovCitpbnQgYmVpc2NzaV9lcF9wb2xsKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsIGludCB0aW1lb3V0X21zKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiAgYmVpc2NzaV9lcF9wb2xsXG4iKTsKKwlpZiAoYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9PSAxKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKioKKyAqIGJlaXNjc2lfY2xvc2VfY29ubiAtIFVwbG9hZCB0aGUgIGNvbm5lY3Rpb24KKyAqIEBlcDogVGhlIGlzY3NpIGVuZHBvaW50CisgKiBAZmxhZzogVGhlIHR5cGUgb2YgY29ubmVjdGlvbiBjbG9zdXJlCisgKi8KK3N0YXRpYyBpbnQgYmVpc2NzaV9jbG9zZV9jb25uKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsIGludCBmbGFnKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKworCWlmIChNR01UX1NUQVRVU19TVUNDRVNTICE9CisJICAgIG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkLAorCQlDT05ORUNUSU9OX1VQTE9BRF9HUkFDRUZVTCkpIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAidXBsb2FkIGZhaWxlZCBmb3IgY2lkIDB4JXgiLAorCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogYmVpc2NzaV9lcF9kaXNjb25uZWN0IC0gVGVhcnMgZG93biB0aGUgVENQIGNvbm5lY3Rpb24KKyAqIEBlcDoJZW5kcG9pbnQgdG8gYmUgdXNlZAorICoKKyAqIFRlYXJzIGRvd24gdGhlIFRDUCBjb25uZWN0aW9uCisgKi8KK3ZvaWQgYmVpc2NzaV9lcF9kaXNjb25uZWN0KHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlpbnQgZmxhZyA9IDA7CisKKwliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9lcF9kaXNjb25uZWN0XG4iKTsKKworCWlmIChiZWlzY3NpX2VwLT5jb25uKSB7CisJCWJlaXNjc2lfY29ubiA9IGJlaXNjc2lfZXAtPmNvbm47CisJCWlzY3NpX3N1c3BlbmRfcXVldWUoYmVpc2NzaV9jb25uLT5jb25uKTsKKwkJYmVpc2NzaV9jbG9zZV9jb25uKGVwLCBmbGFnKTsKKwl9CisKKwliZWlzY3NpX2ZyZWVfZXAoZXApOworfQorCisvKioKKyAqIGJlaXNjc2lfdW5iaW5kX2Nvbm5fdG9fY2lkIC0gVW5iaW5kIHRoZSBiZWlzY3NpX2Nvbm4gZnJvbSBwaGJhIGNvbm4gdGFibGUKKyAqIEBwaGJhOiBUaGUgcGhiYSBpbnN0YW5jZQorICogQGNpZDogVGhlIGNpZCB0byBmcmVlCisgKi8KK3N0YXRpYyBpbnQgYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjaWQpCit7CisJaWYgKHBoYmEtPmNvbm5fdGFibGVbY2lkXSkKKwkJcGhiYS0+Y29ubl90YWJsZVtjaWRdID0gTlVMTDsKKwllbHNlIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiQ29ubmVjdGlvbiB0YWJsZSBOb3Qgb2NjdXBpZWQuIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nvbm5fc3RvcCAtIEludmFsaWRhdGUgYW5kIHN0b3AgdGhlIGNvbm5lY3Rpb24KKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBnZXQgaXNjc2lfY29ubgorICogQGZsYWc6IFRoZSB0eXBlIG9mIGNvbm5lY3Rpb24gY2xvc3VyZQorICovCit2b2lkIGJlaXNjc2lfY29ubl9zdG9wKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sIGludCBmbGFnKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24tPmNsc19zZXNzaW9uKTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnID0gQ01EX0lTQ1NJX1NFU1NJT05fU0FWRV9DRkdfT05fRkxBU0g7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RvcFxuIik7CisJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CisJaWYgKCFiZWlzY3NpX2VwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdG9wICwgbm8gYmVpc2NzaV9lcFxuIik7CisJCXJldHVybjsKKwl9CisJc3RhdHVzID0gbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcCwKKwkJCQkJICAgIGJlaXNjc2lfZXAtPmVwX2NpZCwgMSwKKwkJCQkJICAgIHNhdmVjZmdfZmxhZyk7CisJaWYgKHN0YXR1cyAhPSBNR01UX1NUQVRVU19TVUNDRVNTKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAibWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24gRmFpbGVkIGZvciBjaWQ9JWQgXG4iLAorCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJfQorCWJlaXNjc2lfdW5iaW5kX2Nvbm5fdG9fY2lkKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJaXNjc2lfY29ubl9zdG9wKGNsc19jb25uLCBmbGFnKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyZmZjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpZm5kZWYgX0JFX0lTQ1NJXworI2RlZmluZSBfQkVfSVNDU0lfCisKKyNpbmNsdWRlICJiZV9tYWluLmgiCisjaW5jbHVkZSAiYmVfbWdtdC5oIgorCisjZGVmaW5lIEJFMl9JUFY0ICAweDEKKyNkZWZpbmUgQkUyX0lQVjYgIDB4MTAKKwordm9pZCBiZWlzY3NpX29mZmxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkJc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgKnBhcmFtcyk7CisKK3ZvaWQgYmVpc2NzaV9vZmZsb2FkX2lzY3NpKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sCisJCQkgICBzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkgICB1bnNpZ25lZCBpbnQgZndfaGFuZGxlKTsKKworc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpiZWlzY3NpX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsCisJCQkJCQkgdWludDE2X3QgY21kc19tYXgsCisJCQkJCQkgdWludDE2X3QgcWRlcHRoLAorCQkJCQkJIHVpbnQzMl90IGluaXRpYWxfY21kc24pOworCit2b2lkIGJlaXNjc2lfc2Vzc2lvbl9kZXN0cm95KHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24pOworCitzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmJlaXNjc2lfY29ubl9jcmVhdGUoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uCisJCQkJCSAgICpjbHNfc2Vzc2lvbiwgdWludDMyX3QgY2lkKTsKKworaW50IGJlaXNjc2lfY29ubl9iaW5kKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCisJCSAgICAgIHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCSAgICAgIHVpbnQ2NF90IHRyYW5zcG9ydF9mZCwgaW50IGlzX2xlYWRpbmcpOworCitpbnQgYmVpc2NzaV9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJICAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKKworaW50IGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCisJCQkgICBlbnVtIGlzY3NpX2hvc3RfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1Zik7CisKK2ludCBiZWlzY3NpX3NldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkgICAgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYsIGludCBidWZsZW4pOworCitpbnQgYmVpc2NzaV9jb25uX3N0YXJ0KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4pOworCit2b2lkIGJlaXNjc2lfY29ubl9zdG9wKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sIGludCBmbGFnKTsKKworc3RydWN0IGlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwX2Nvbm5lY3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCisJCQkJCSAgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKKwkJCQkJICBpbnQgbm9uX2Jsb2NraW5nKTsKKworaW50IGJlaXNjc2lfZXBfcG9sbChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLCBpbnQgdGltZW91dF9tcyk7CisKK3ZvaWQgYmVpc2NzaV9lcF9kaXNjb25uZWN0KHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXApOworCit2b2lkIGJlaXNjc2lfY29ubl9nZXRfc3RhdHMoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJCSAgICBzdHJ1Y3QgaXNjc2lfc3RhdHMgKnN0YXRzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjFhY2EzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwpAQCAtMCwwICsxLDMzOTAgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqICBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisKKyNpbmNsdWRlIDxzY3NpL2xpYmlzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgImJlX21haW4uaCIKKyNpbmNsdWRlICJiZV9pc2NzaS5oIgorI2luY2x1ZGUgImJlX21nbXQuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBiZV9pb3BvbGxfYnVkZ2V0ID0gMTA7CitzdGF0aWMgdW5zaWduZWQgaW50IGJlX21heF9waHlzX3NpemUgPSA2NDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW5hYmxlX21zaXg7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZWlzY3NpX3BjaV9pZF90YWJsZSk7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MgIiAiIEJVSUxEX1NUUik7CitNT0RVTEVfQVVUSE9SKCJTZXJ2ZXJFbmdpbmVzIENvcnBvcmF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfcGFyYW0oYmVfaW9wb2xsX2J1ZGdldCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShlbmFibGVfbXNpeCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShiZV9tYXhfcGh5c19zaXplLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoYmVfbWF4X3BoeXNfc2l6ZSwgIk1heGltdW0gU2l6ZSAoSW4gS2lsb2J5dGVzKSBvZiBwaHlzaWNhbGx5IgorCQkJCSAgICJjb250aWd1b3VzIG1lbW9yeSB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQuIgorCQkJCSAgICJSYW5nZSBpcyAxNiAtIDEyOCIpOworCitzdGF0aWMgaW50IGJlaXNjc2lfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA2NTUzNik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJlaXNjc2lfc2h0ID0geworCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJTZXJ2ZXJFbmdpbmVzIDEwR2JlIG9wZW4taXNjc2kgSW5pdGlhdG9yIERyaXZlciIsCisJLnByb2NfbmFtZSA9IERSVl9OQU1FLAorCS5xdWV1ZWNvbW1hbmQgPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIgPSBpc2NzaV9laF9hYm9ydCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5zbGF2ZV9jb25maWd1cmUgPSBiZWlzY3NpX3NsYXZlX2NvbmZpZ3VyZSwKKwkudGFyZ2V0X2FsbG9jID0gaXNjc2lfdGFyZ2V0X2FsbG9jLAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX2RldmljZV9yZXNldCwKKwkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCisJLnNnX3RhYmxlc2l6ZSA9IEJFSVNDU0lfU0dMSVNUX0VMRU1FTlRTLAorCS5jYW5fcXVldWUgPSBCRTJfSU9fREVQVEgsCisJLnRoaXNfaWQgPSAtMSwKKwkubWF4X3NlY3RvcnMgPSBCRUlTQ1NJX01BWF9TRUNUT1JTLAorCS5jbWRfcGVyX2x1biA9IEJFSVNDU0lfQ01EX1BFUl9MVU4sCisJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCit9Oworc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqYmVpc2NzaV9zY3NpX3RyYW5zcG9ydDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tIFBDSSBEcml2ZXIgb3BlcmF0aW9ucyBhbmQgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGJlaXNjc2lfcGNpX2lkX3RhYmxlKSA9IHsKKwl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBCRV9ERVZJQ0VfSUQxKSB9LAorCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDEpIH0sCisJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMikgfSwKKwl7IDAgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZWlzY3NpX3BjaV9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYmVpc2NzaV9oYmEgKmJlaXNjc2lfaGJhX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCisJc2hvc3QgPSBpc2NzaV9ob3N0X2FsbG9jKCZiZWlzY3NpX3NodCwgc2l6ZW9mKCpwaGJhKSwgMCk7CisJaWYgKCFzaG9zdCkgeworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImJlaXNjc2lfaGJhX2FsbG9jIC0iCisJCQkiaXNjc2lfaG9zdF9hbGxvYyBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNob3N0LT5kbWFfYm91bmRhcnkgPSBwY2lkZXYtPmRtYV9tYXNrOworCXNob3N0LT5tYXhfaWQgPSBCRTJfTUFYX1NFU1NJT05TOworCXNob3N0LT5tYXhfY2hhbm5lbCA9IDA7CisJc2hvc3QtPm1heF9jbWRfbGVuID0gQkVJU0NTSV9NQVhfQ01EX0xFTjsKKwlzaG9zdC0+bWF4X2x1biA9IEJFSVNDU0lfTlVNX01BWF9MVU47CisJc2hvc3QtPnRyYW5zcG9ydHQgPSBiZWlzY3NpX3Njc2lfdHJhbnNwb3J0OworCisJcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJbWVtc2V0KHBoYmEsIDAsIHNpemVvZigqcGhiYSkpOworCXBoYmEtPnNob3N0ID0gc2hvc3Q7CisJcGhiYS0+cGNpZGV2ID0gcGNpX2Rldl9nZXQocGNpZGV2KTsKKworCWlmIChpc2NzaV9ob3N0X2FkZChzaG9zdCwgJnBoYmEtPnBjaWRldi0+ZGV2KSkKKwkJZ290byBmcmVlX2RldmljZXM7CisJcmV0dXJuIHBoYmE7CisKK2ZyZWVfZGV2aWNlczoKKwlwY2lfZGV2X3B1dChwaGJhLT5wY2lkZXYpOworCWlzY3NpX2hvc3RfZnJlZShwaGJhLT5zaG9zdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfdW5tYXBfcGNpX2Z1bmN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlpZiAocGhiYS0+Y3NyX3ZhKSB7CisJCWlvdW5tYXAocGhiYS0+Y3NyX3ZhKTsKKwkJcGhiYS0+Y3NyX3ZhID0gTlVMTDsKKwl9CisJaWYgKHBoYmEtPmRiX3ZhKSB7CisJCWlvdW5tYXAocGhiYS0+ZGJfdmEpOworCQlwaGJhLT5kYl92YSA9IE5VTEw7CisJfQorCWlmIChwaGJhLT5wY2lfdmEpIHsKKwkJaW91bm1hcChwaGJhLT5wY2lfdmEpOworCQlwaGJhLT5wY2lfdmEgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBiZWlzY3NpX21hcF9wY2lfYmFycyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwl1OCBfX2lvbWVtICphZGRyOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKSwKKwkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMikpOworCWlmIChhZGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXBoYmEtPmN0cmwuY3NyID0gYWRkcjsKKwlwaGJhLT5jc3JfdmEgPSBhZGRyOworCXBoYmEtPmNzcl9wYS51LmE2NC5hZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDQpLCAxMjggKiAxMDI0KTsKKwlpZiAoYWRkciA9PSBOVUxMKQorCQlnb3RvIHBjaV9tYXBfZXJyOworCXBoYmEtPmN0cmwuZGIgPSBhZGRyOworCXBoYmEtPmRiX3ZhID0gYWRkcjsKKwlwaGJhLT5kYl9wYS51LmE2NC5hZGRyZXNzID0gIHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDQpOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAxKSwKKwkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMSkpOworCWlmIChhZGRyID09IE5VTEwpCisJCWdvdG8gcGNpX21hcF9lcnI7CisJcGhiYS0+Y3RybC5wY2ljZmcgPSBhZGRyOworCXBoYmEtPnBjaV92YSA9IGFkZHI7CisJcGhiYS0+cGNpX3BhLnUuYTY0LmFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAxKTsKKwlyZXR1cm4gMDsKKworcGNpX21hcF9lcnI6CisJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9lbmFibGVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaWRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImJlaXNjc2lfZW5hYmxlX3BjaSAtIGVuYWJsZSBkZXZpY2UgIgorCQkJImZhaWxlZC4gUmV0dXJuaW5nIC1FTk9ERVZcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soNjQpKSkgeworCQlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJDb3VsZCBub3Qgc2V0IFBDSSBETUEgTWFza1xuIik7CisJCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpZGV2KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVfY3RybF9pbml0KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbV9hbGxvYyA9ICZjdHJsLT5tYm94X21lbV9hbGxvY2VkOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbV9hbGlnbiA9ICZjdHJsLT5tYm94X21lbTsKKwlpbnQgc3RhdHVzID0gMDsKKworCWN0cmwtPnBkZXYgPSBwZGV2OworCXN0YXR1cyA9IGJlaXNjc2lfbWFwX3BjaV9iYXJzKHBoYmEsIHBkZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwltYm94X21lbV9hbGxvYy0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpICsgMTY7CisJbWJveF9tZW1fYWxsb2MtPnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKKwkJCQkJCSAgbWJveF9tZW1fYWxsb2MtPnNpemUsCisJCQkJCQkgICZtYm94X21lbV9hbGxvYy0+ZG1hKTsKKwlpZiAoIW1ib3hfbWVtX2FsbG9jLT52YSkgeworCQliZWlzY3NpX3VubWFwX3BjaV9mdW5jdGlvbihwaGJhKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwltYm94X21lbV9hbGlnbi0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpOworCW1ib3hfbWVtX2FsaWduLT52YSA9IFBUUl9BTElHTihtYm94X21lbV9hbGxvYy0+dmEsIDE2KTsKKwltYm94X21lbV9hbGlnbi0+ZG1hID0gUFRSX0FMSUdOKG1ib3hfbWVtX2FsbG9jLT5kbWEsIDE2KTsKKwltZW1zZXQobWJveF9tZW1fYWxpZ24tPnZhLCAwLCBzaXplb2Yoc3RydWN0IGJlX21jY19tYWlsYm94KSk7CisJc3Bpbl9sb2NrX2luaXQoJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9nZXRfcGFyYW1zKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsID0gQkUyX0lPX0RFUFRIOworCXBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsID0gQkUyX01BWF9TRVNTSU9OUzsKKwlwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsID0gQkUyX0FTWU5DUERVUzsKKwlwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCA9IEJFMl9NQVhfSUNEUyAvIDI7CisJcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvID0gQkUyX1NHRTsKKwlwaGJhLT5wYXJhbXMuZGVmcGR1X2hkcl9zeiA9IEJFMl9ERUZQRFVfSERSX1NaOworCXBoYmEtPnBhcmFtcy5kZWZwZHVfZGF0YV9zeiA9IEJFMl9ERUZQRFVfREFUQV9TWjsKKwlwaGJhLT5wYXJhbXMuZXFfdGltZXIgPSA2NDsKKwlwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPQorCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfQVNZTkNQRFVTKSAvCisJCQkJCQkJCTUxMikgKyAxKSAqIDUxMjsKKwlwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPSAocGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzIDwgMTAyNCkKKwkJCQk/IDEwMjQgOiBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM7CisJU0VfREVCVUcoREJHX0xWTF84LCAicGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzPSVkIFxuIiwKKwkJIHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyk7CisJcGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzID0KKwkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyBCRTJfTE9HT1VUUyArIEJFMl9UTUZTICsgQkUyX0FTWU5DUERVUykgLworCQkJCQkJCQk1MTIpICsgMSkgKiA1MTI7CisJU0VfREVCVUcoREJHX0xWTF84LAorCQkicGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzPSVkIEJFMl9DTURTX1BFUl9DWE49JWQiCisJCSJCRTJfTE9HT1VUUz0lZCBCRTJfVE1GUz0lZCBCRTJfQVNZTkNQRFVTPSVkIFxuIiwKKwkJcGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzLCBCRTJfQ01EU19QRVJfQ1hOLAorCQlCRTJfTE9HT1VUUywgQkUyX1RNRlMsIEJFMl9BU1lOQ1BEVVMpOworCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gPSAyNTY7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9yaW5nX2VxX2RiKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgIHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IGNscl9pbnRlcnJ1cHQsCisJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgcmVhcm0sIHVuc2lnbmVkIGNoYXIgZXZlbnQpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsIHw9IGlkICYgREJfRVFfUklOR19JRF9NQVNLOworCWlmIChyZWFybSkKKwkJdmFsIHw9IDEgPDwgREJfRVFfUkVBUk1fU0hJRlQ7CisJaWYgKGNscl9pbnRlcnJ1cHQpCisJCXZhbCB8PSAxIDw8IERCX0VRX0NMUl9TSElGVDsKKwlpZiAoZXZlbnQpCisJCXZhbCB8PSAxIDw8IERCX0VRX0VWTlRfU0hJRlQ7CisJdmFsIHw9IG51bV9wcm9jZXNzZWQgPDwgREJfRVFfTlVNX1BPUFBFRF9TSElGVDsKKwlpb3dyaXRlMzIodmFsLCBwaGJhLT5kYl92YSArIERCX0VRX09GRlNFVCk7Cit9CisKKy8qKgorICogYmVfaXNyIC0gVGhlIGlzciByb3V0aW5lIG9mIHRoZSBkcml2ZXIuCisgKiBAaXJxOiBOb3QgdXNlZAorICogQGRldl9pZDogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBiZV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCXN0cnVjdCBiZV9lcV9lbnRyeSAqZXFlID0gTlVMTDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGluZGV4OworCXVuc2lnbmVkIGludCBudW1fZXFfcHJvY2Vzc2VkOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmw7CisJaW50IGlzcjsKKworCXBoYmEgPSBkZXZfaWQ7CisJaWYgKCFlbmFibGVfbXNpeCkgeworCQljdHJsID0gJnBoYmEtPmN0cmw7OworCQlpc3IgPSBpb3JlYWQzMihjdHJsLT5jc3IgKyBDRVZfSVNSMF9PRkZTRVQgKworCQkJICAgICAgIChQQ0lfRlVOQyhjdHJsLT5wZGV2LT5kZXZmbikgKiBDRVZfSVNSX1NJWkUpKTsKKwkJaWYgKCFpc3IpCisJCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwljcSA9ICZwaHdpX2NvbnRleHQtPmJlX2NxOworCWluZGV4ID0gMDsKKwllcWUgPSBxdWV1ZV90YWlsX25vZGUoZXEpOworCWlmICghZXFlKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJlcWUgaXMgTlVMTFxuIik7CisKKwludW1fZXFfcHJvY2Vzc2VkID0gMDsKKwlpZiAoYmxrX2lvcG9sbF9lbmFibGVkKSB7CisJCXdoaWxlIChlcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCkgLyAzMl0KKwkJCQkJJiBFUUVfVkFMSURfTUFTSykgeworCQkJaWYgKCFibGtfaW9wb2xsX3NjaGVkX3ByZXAoJnBoYmEtPmlvcG9sbCkpCisJCQkJYmxrX2lvcG9sbF9zY2hlZCgmcGhiYS0+aW9wb2xsKTsKKworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQsIGVxZSwgMCk7CisJCQlxdWV1ZV90YWlsX2luYyhlcSk7CisJCQllcWUgPSBxdWV1ZV90YWlsX25vZGUoZXEpOworCQkJbnVtX2VxX3Byb2Nlc3NlZCsrOworCQkJU0VfREVCVUcoREJHX0xWTF84LCAiVmFsaWQgRVFFXG4iKTsKKwkJfQorCQlpZiAobnVtX2VxX3Byb2Nlc3NlZCkgeworCQkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAwLAludW1fZXFfcHJvY2Vzc2VkLCAwLCAxKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gSVJRX05PTkU7CisJfSBlbHNlIHsKKwkJd2hpbGUgKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkKSAvIDMyXQorCQkJCQkJJiBFUUVfVkFMSURfTUFTSykgeworCisJCQlpZiAoKChlcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2VxX2VudHJ5LAorCQkJICAgICByZXNvdXJjZV9pZCkgLyAzMl0gJgorCQkJICAgICBFUUVfUkVTSURfTUFTSykgPj4gMTYpICE9IGNxLT5pZCkgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQkJCXBoYmEtPnRvZG9fbWNjX2NxID0gMTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQkJfSBlbHNlIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJCQlwaGJhLT50b2RvX2NxID0gMTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQkJfQorCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQsIGVxZSwgMCk7CisJCQlxdWV1ZV90YWlsX2luYyhlcSk7CisJCQllcWUgPSBxdWV1ZV90YWlsX25vZGUoZXEpOworCQkJbnVtX2VxX3Byb2Nlc3NlZCsrOworCQl9CisJCWlmIChwaGJhLT50b2RvX2NxIHx8IHBoYmEtPnRvZG9fbWNjX2NxKQorCQkJcXVldWVfd29yayhwaGJhLT53cSwgJnBoYmEtPndvcmtfY3FzKTsKKworCQlpZiAobnVtX2VxX3Byb2Nlc3NlZCkgeworCQkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAwLCBudW1fZXFfcHJvY2Vzc2VkLCAxLCAxKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gSVJRX05PTkU7CisJfQorfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW5pdF9pcnFzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gcGhiYS0+cGNpZGV2OworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgYmVfaXNyLCBJUlFGX1NIQVJFRCwgImJlaXNjc2kiLCBwaGJhKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2luaXRfaXJxcy0iCisJCQkgICAgICJGYWlsZWQgdG8gcmVnaXN0ZXIgaXJxXFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBod2lfcmluZ19jcV9kYihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICB1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkLAorCQkJICAgdW5zaWduZWQgY2hhciByZWFybSwgdW5zaWduZWQgY2hhciBldmVudCkKK3sKKwl1MzIgdmFsID0gMDsKKwl2YWwgfD0gaWQgJiBEQl9DUV9SSU5HX0lEX01BU0s7CisJaWYgKHJlYXJtKQorCQl2YWwgfD0gMSA8PCBEQl9DUV9SRUFSTV9TSElGVDsKKwl2YWwgfD0gbnVtX3Byb2Nlc3NlZCA8PCBEQl9DUV9OVU1fUE9QUEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIHBoYmEtPmRiX3ZhICsgREJfQ1FfT0ZGU0VUKTsKK30KKworLyoKKyAqIGFzeW5jIHBkdXMgaW5jbHVkZQorICogYS4gdW5zb2xpY2l0ZWQgTk9QLUluICh0YXJnZXQgaW5pdGlhdGVkIE5PUC1JbikKKyAqIGIuIEFzeW5jIE1lc3NhZ2VzCisgKiBjLiBSZWplY3QgUERVCisgKiBkLiBMb2dpbiByZXNwb25zZQorICogVGhlc2UgaGVhZGVycyBhcnJpdmUgdW5wcm9jZXNzZWQgYnkgdGhlIEVQIGZpcm13YXJlIGFuZCBpU0NTSSBsYXllcgorICogcHJvY2VzcyB0aGVtCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2JlaXNjc2lfcHJvY2Vzc19hc3luY19wZHUoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgIHVuc2lnbmVkIHNob3J0IGNpZCwKKwkJCSAgc3RydWN0IHBkdV9iYXNlICpwcGR1LAorCQkJICB1bnNpZ25lZCBsb25nIHBkdV9sZW4sCisJCQkgIHZvaWQgKnBidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbikKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisKKwlzd2l0Y2ggKHBwZHUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3BkdV9iYXNlLCBvcGNvZGUpIC8gMzJdICYKKwkJCQkJCVBEVUJBU0VfT1BDT0RFX01BU0spIHsKKwljYXNlIElTQ1NJX09QX05PT1BfSU46CisJCXBidWZmZXIgPSBOVUxMOworCQlidWZfbGVuID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9BU1lOQ19FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9SRUpFQ1Q6CisJCVdBUk5fT04oIXBidWZmZXIpOworCQlXQVJOX09OKCEoYnVmX2xlbiA9PSA0OCkpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbiBJU0NTSV9PUF9SRUpFQ1RcbiIpOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX0xPR0lOX1JTUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJVbnJlY29nbml6ZWQgb3Bjb2RlIDB4JXggaW4gYXN5bmMgbXNnIFxuIiwKKwkJCSAgICAgKHBwZHUtPgorCQkJICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9wZHVfYmFzZSwgb3Bjb2RlKSAvIDMyXQorCQkJCQkJJiBQRFVCQVNFX09QQ09ERV9NQVNLKSk7CisJCXJldHVybiAxOworCX0KKworCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CisJX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKilwcGR1LCBwYnVmZmVyLCBidWZfbGVuKTsKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2dsX2hhbmRsZSAqYWxsb2NfaW9fc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlOworCisJaWYgKHBoYmEtPmlvX3NnbF9obmRsX2F2YmwpIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJJbiBhbGxvY19pb19zZ2xfaGFuZGxlLGlvX3NnbF9hbGxvY19pbmRleD0lZCBcbiIsCisJCQkgcGhiYS0+aW9fc2dsX2FsbG9jX2luZGV4KTsKKwkJcHNnbF9oYW5kbGUgPSBwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPgorCQkJCQkJaW9fc2dsX2FsbG9jX2luZGV4XTsKKwkJcGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXhdID0gTlVMTDsKKwkJcGhiYS0+aW9fc2dsX2huZGxfYXZibC0tOworCQlpZiAocGhiYS0+aW9fc2dsX2FsbG9jX2luZGV4ID09IChwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsIC0gMSkpCisJCQlwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXggPSAwOworCQllbHNlCisJCQlwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXgrKzsKKwl9IGVsc2UKKwkJcHNnbF9oYW5kbGUgPSBOVUxMOworCXJldHVybiBwc2dsX2hhbmRsZTsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfaW9fc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSkKK3sKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBmcmVlXyxpb19zZ2xfZnJlZV9pbmRleD0lZCBcbiIsCisJCSBwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCk7CisJaWYgKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXhdKSB7CisJCS8qCisJCSAqIHRoaXMgY2FuIGhhcHBlbiBpZiBjbGVhbl90YXNrIGlzIGNhbGxlZCBvbiBhIHRhc2sgdGhhdAorCQkgKiBmYWlsZWQgaW4geG1pdF90YXNrIG9yIGFsbG9jX3BkdS4KKwkJICovCisJCSBTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgIkRvdWJsZSBGcmVlIGluIElPIFNHTCBpb19zZ2xfZnJlZV9pbmRleD0lZCwiCisJCQkgInZhbHVlIHRoZXJlPSVwIFxuIiwgcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXgsCisJCQkgcGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfZnJlZV9pbmRleF0pOworCQlyZXR1cm47CisJfQorCXBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXhdID0gcHNnbF9oYW5kbGU7CisJcGhiYS0+aW9fc2dsX2huZGxfYXZibCsrOworCWlmIChwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCA9PSAocGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCAtIDEpKQorCQlwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCA9IDA7CisJZWxzZQorCQlwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCsrOworfQorCisvKioKKyAqIGFsbG9jX3dyYl9oYW5kbGUgLSBUbyBhbGxvY2F0ZSBhIHdyYiBoYW5kbGUKKyAqIEBwaGJhOiBUaGUgaGJhIHBvaW50ZXIKKyAqIEBjaWQ6IFRoZSBjaWQgdG8gdXNlIGZvciBhbGxvY2F0aW9uCisgKiBAaW5kZXg6IGluZGV4IGFsbG9jYXRpb24gYW5kIHdyYiBpbmRleAorICoKKyAqIFRoaXMgaGFwcGVucyB1bmRlciBzZXNzaW9uX2xvY2sgdW50aWwgc3VibWlzc2lvbiB0byBjaGlwCisgKi8KK3N0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCwKKwkJCQkgICAgaW50IGluZGV4KQoreworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2NpZF07CisJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VbaW5kZXhdOworCXB3cmJfaGFuZGxlLT53cmJfaW5kZXggPSBpbmRleDsKKwlwd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCA9IGluZGV4OworCXJldHVybiBwd3JiX2hhbmRsZTsKK30KKworLyoqCisgKiBmcmVlX3dyYl9oYW5kbGUgLSBUbyBmcmVlIHRoZSB3cmIgaGFuZGxlIGJhY2sgdG8gcG9vbAorICogQHBoYmE6IFRoZSBoYmEgcG9pbnRlcgorICogQHB3cmJfY29udGV4dDogVGhlIGNvbnRleHQgdG8gZnJlZSBmcm9tCisgKiBAcHdyYl9oYW5kbGU6IFRoZSB3cmJfaGFuZGxlIHRvIGZyZWUKKyAqCisgKiBUaGlzIGhhcHBlbnMgdW5kZXIgc2Vzc2lvbl9sb2NrIHVudGlsIHN1Ym1pc3Npb24gdG8gY2hpcAorICovCitzdGF0aWMgdm9pZAorZnJlZV93cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0LAorCQlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGUpCit7CisJU0VfREVCVUcoREJHX0xWTF84LAorCQkgIkZSRUUgV1JCOiBwd3JiX2hhbmRsZT0lcCBmcmVlX2luZGV4PSVkPTB4JXgiCisJCSAid3JiX2hhbmRsZXNfYXZhaWxhYmxlPSVkIFxuIiwKKwkJIHB3cmJfaGFuZGxlLCBwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXgsCisJCSBwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXgsIHB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBzZ2xfaGFuZGxlICphbGxvY19tZ210X3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZTsKKworCWlmIChwaGJhLT5laF9zZ2xfaG5kbF9hdmJsKSB7CisJCXBzZ2xfaGFuZGxlID0gcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVtwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXhdOworCQlwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9hbGxvY19pbmRleF0gPSBOVUxMOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJtZ210X3NnbF9hbGxvY19pbmRleD0lZD0weCV4IFxuIiwKKwkJCSBwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXgsIHBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCk7CisJCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwtLTsKKwkJaWYgKHBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCA9PQorCQkgICAgKHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC0gcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCAtCisJCSAgICAgMSkpCisJCQlwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXggPSAwOworCQllbHNlCisJCQlwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXgrKzsKKwl9IGVsc2UKKwkJcHNnbF9oYW5kbGUgPSBOVUxMOworCXJldHVybiBwc2dsX2hhbmRsZTsKK30KKwordm9pZAorZnJlZV9tZ210X3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUpCit7CisKKwlpZiAocGhiYS0+ZWhfc2dsX2huZGxfYmFzZVtwaGJhLT5laF9zZ2xfZnJlZV9pbmRleF0pIHsKKwkJLyoKKwkJICogdGhpcyBjYW4gaGFwcGVuIGlmIGNsZWFuX3Rhc2sgaXMgY2FsbGVkIG9uIGEgdGFzayB0aGF0CisJCSAqIGZhaWxlZCBpbiB4bWl0X3Rhc2sgb3IgYWxsb2NfcGR1LgorCQkgKi8KKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJEb3VibGUgRnJlZSBpbiBlaCBTR0wgLGVoX3NnbF9mcmVlX2luZGV4PSVkIFxuIiwKKwkJCSBwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCk7CisJCXJldHVybjsKKwl9CisJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVtwaGJhLT5laF9zZ2xfZnJlZV9pbmRleF0gPSBwc2dsX2hhbmRsZTsKKwlwaGJhLT5laF9zZ2xfaG5kbF9hdmJsKys7CisJaWYgKHBoYmEtPmVoX3NnbF9mcmVlX2luZGV4ID09CisJICAgIChwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCAtIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgLSAxKSkKKwkJcGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXggPSAwOworCWVsc2UKKwkJcGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXgrKzsKK30KKworc3RhdGljIHZvaWQKK2JlX2NvbXBsZXRlX2lvKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkgICAgICAgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHN0cnVjdCBzb2xfY3FlICpwc29sKQoreworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBiZV9zdGF0dXNfYmhzICpzdHNfYmhzID0KKwkJCQkoc3RydWN0IGJlX3N0YXR1c19iaHMgKilpb190YXNrLT5jbWRfYmhzOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXVuc2lnbmVkIGludCBzZW5zZV9sZW47CisJdW5zaWduZWQgY2hhciAqc2Vuc2U7CisJdTMyIHJlc2lkID0gMCwgZXhwX2NtZHNuLCBtYXhfY21kc247CisJdTggcnNwLCBzdGF0dXMsIGZsYWdzOworCisJZXhwX2NtZHNuID0gYmUzMl90b19jcHUocHNvbC0+CisJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2V4cF9jbWRfc24pIC8gMzJdCisJCQkmIFNPTF9FWFBfQ01EX1NOX01BU0spOworCW1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZXhwX2NtZF9zbikgLyAzMl0KKwkJCSYgU09MX0VYUF9DTURfU05fTUFTSykgKworCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2NtZF93bmQpCisJCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwlyc3AgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfcmVzcCkgLyAzMl0KKwkJCQkJCSYgU09MX1JFU1BfTUFTSykgPj4gMTYpOworCXN0YXR1cyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9zdHMpIC8gMzJdCisJCQkJCQkmIFNPTF9TVFNfTUFTSykgPj4gOCk7CisJZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCisJCQkJCSYgU09MX0ZMQUdTX01BU0spID4+IDI0KSB8IDB4ODA7CisKKwl0YXNrLT5zYy0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCBzdGF0dXM7CisJaWYgKHJzcCAhPSBJU0NTSV9TVEFUVVNfQ01EX0NPTVBMRVRFRCkgeworCQl0YXNrLT5zYy0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQlnb3RvIHVubWFwOworCX0KKworCS8qIGJpZGkgbm90IGluaXRpYWxseSBzdXBwb3J0ZWQgKi8KKwlpZiAoZmxhZ3MgJiAoSVNDU0lfRkxBR19DTURfVU5ERVJGTE9XIHwgSVNDU0lfRkxBR19DTURfT1ZFUkZMT1cpKSB7CisJCXJlc2lkID0gKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfcmVzX2NudCkgLworCQkJCTMyXSAmIFNPTF9SRVNfQ05UX01BU0spOworCisJCWlmICghc3RhdHVzICYmIChmbGFncyAmIElTQ1NJX0ZMQUdfQ01EX09WRVJGTE9XKSkKKwkJCXRhc2stPnNjLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisKKwkJaWYgKGZsYWdzICYgSVNDU0lfRkxBR19DTURfVU5ERVJGTE9XKSB7CisJCQlzY3NpX3NldF9yZXNpZCh0YXNrLT5zYywgcmVzaWQpOworCQkJaWYgKCFzdGF0dXMgJiYgKHNjc2lfYnVmZmxlbih0YXNrLT5zYykgLSByZXNpZCA8CisJCQkgICAgdGFzay0+c2MtPnVuZGVyZmxvdykpCisJCQkJdGFzay0+c2MtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgPT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKSB7CisJCXNlbnNlID0gc3RzX2Jocy0+c2Vuc2VfaW5mbyArIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisJCXNlbnNlX2xlbiA9CisJCSAgICBjcHVfdG9fYmUxNigodW5zaWduZWQgc2hvcnQpKHN0c19iaHMtPnNlbnNlX2luZm9bMF0pKTsKKwkJbWVtY3B5KHRhc2stPnNjLT5zZW5zZV9idWZmZXIsIHNlbnNlLAorCQkgICAgICAgbWluX3QodTE2LCBzZW5zZV9sZW4sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkpOworCX0KKwlpZiAoaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLmZsYWdzICYgSVNDU0lfRkxBR19DTURfUkVBRCkgeworCQlpZiAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvIDMyXQorCQkJCQkJCSYgU09MX1JFU19DTlRfTUFTSykKKwkJCSBjb25uLT5yeGRhdGFfb2N0ZXRzICs9IChwc29sLT4KKwkJCSAgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfcmVzX2NudCkgLyAzMl0KKwkJCQkJCQkmIFNPTF9SRVNfQ05UX01BU0spOworCX0KK3VubWFwOgorCXNjc2lfZG1hX3VubWFwKGlvX3Rhc2stPnNjc2lfY21uZCk7CisJaXNjc2lfY29tcGxldGVfc2NzaV90YXNrKHRhc2ssIGV4cF9jbWRzbiwgbWF4X2NtZHNuKTsKK30KKworc3RhdGljIHZvaWQKK2JlX2NvbXBsZXRlX2xvZ291dChzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgIHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaXNjc2lfbG9nb3V0X3JzcCAqaGRyOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCisJaGRyID0gKHN0cnVjdCBpc2NzaV9sb2dvdXRfcnNwICopdGFzay0+aGRyOworCWhkci0+dDJ3YWl0ID0gNTsKKwloZHItPnQycmV0YWluID0gMDsKKwloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQorCQkJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOworCWhkci0+cmVzcG9uc2UgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvCisJCQkJCTMyXSAmIFNPTF9SRVNQX01BU0spOworCWhkci0+ZXhwX2NtZHNuID0gY3B1X3RvX2JlMzIocHNvbC0+CisJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2V4cF9jbWRfc24pIC8gMzJdCisJCQkJCSYgU09MX0VYUF9DTURfU05fTUFTSyk7CisJaGRyLT5tYXhfY21kc24gPSBiZTMyX3RvX2NwdSgocHNvbC0+CisJCQkgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9leHBfY21kX3NuKSAvIDMyXQorCQkJCQkmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKKwkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQorCQkJCQkvIDMyXSAmIFNPTF9DTURfV05EX01BU0spID4+IDI0KSAtIDEpOworCWhkci0+aGxlbmd0aCA9IDA7CisKKwlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKWhkciwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZV9jb21wbGV0ZV90bWYoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGlzY3NpX3RtX3JzcCAqaGRyOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCisJaGRyID0gKHN0cnVjdCBpc2NzaV90bV9yc3AgKil0YXNrLT5oZHI7CisJaGRyLT5mbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KKwkJCQkJJiBTT0xfRkxBR1NfTUFTSykgPj4gMjQpIHwgMHg4MDsKKwloZHItPnJlc3BvbnNlID0gKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfcmVzcCkgLworCQkJCQkzMl0gJiBTT0xfUkVTUF9NQVNLKTsKKwloZHItPmV4cF9jbWRzbiA9IGNwdV90b19iZTMyKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsCisJCQkJICAgICBpX2V4cF9jbWRfc24pIC8gMzJdICYgU09MX0VYUF9DTURfU05fTUFTSyk7CisJaGRyLT5tYXhfY21kc24gPSBiZTMyX3RvX2NwdSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCWlfZXhwX2NtZF9zbikgLyAzMl0gJiBTT0xfRVhQX0NNRF9TTl9NQVNLKSArCisJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfY21kX3duZCkKKwkJCS8gMzJdICYgU09MX0NNRF9XTkRfTUFTSykgPj4gMjQpIC0gMSk7CisJX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKiloZHIsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZAoraHdpX2NvbXBsZXRlX2RydnJfbXNncyhzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgICAgICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzb2xfY3FlICpwc29sKQoreworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFsoKHBzb2wtPgorCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0gJgorCQkJCVNPTF9DSURfTUFTSykgPj4gNildOworCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CisJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgd3JiX2luZGV4KSAvCisJCQkJMzJdICYgU09MX1dSQl9JTkRFWF9NQVNLKSA+PiAxNildOworCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CisJZnJlZV93cmJfaGFuZGxlKHBoYmEsIHB3cmJfY29udGV4dCwgcHdyYl9oYW5kbGUpOworCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQKK2JlX2NvbXBsZXRlX25vcGluX3Jlc3Aoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkgICAgICAgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHN0cnVjdCBzb2xfY3FlICpwc29sKQoreworCXN0cnVjdCBpc2NzaV9ub3BpbiAqaGRyOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCisJaGRyID0gKHN0cnVjdCBpc2NzaV9ub3BpbiAqKXRhc2stPmhkcjsKKwloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQorCQkJJiBTT0xfRkxBR1NfTUFTSykgPj4gMjQpIHwgMHg4MDsKKwloZHItPmV4cF9jbWRzbiA9IGNwdV90b19iZTMyKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsCisJCQkJICAgICBpX2V4cF9jbWRfc24pIC8gMzJdICYgU09MX0VYUF9DTURfU05fTUFTSyk7CisJaGRyLT5tYXhfY21kc24gPSBiZTMyX3RvX2NwdSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCWlfZXhwX2NtZF9zbikgLyAzMl0gJiBTT0xfRVhQX0NNRF9TTl9NQVNLKSArCisJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfY21kX3duZCkKKwkJCS8gMzJdICYgU09MX0NNRF9XTkRfTUFTSykgPj4gMjQpIC0gMSk7CisJaGRyLT5vcGNvZGUgPSBJU0NTSV9PUF9OT09QX0lOOworCV9faXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIChzdHJ1Y3QgaXNjc2lfaGRyICopaGRyLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQgaHdpX2NvbXBsZXRlX2NtZChzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiID0gTlVMTDsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2s7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzazsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKworCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT4KKwkJd3JiX2NvbnRleHRbKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdCisJCSYgU09MX0NJRF9NQVNLKSA+PiA2KV07CisJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KKwkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB3cmJfaW5kZXgpIC8KKwkJCQkzMl0gJiBTT0xfV1JCX0lOREVYX01BU0spID4+IDE2KV07CisKKwl0YXNrID0gcHdyYl9oYW5kbGUtPnBpb19oYW5kbGU7CisJaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlwd3JiID0gcHdyYl9oYW5kbGUtPnB3cmI7CisJc3dpdGNoICgocHdyYi0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlKSAvIDMyXSAmCisJCSBXUkJfVFlQRV9NQVNLKSA+PiAyOCkgeworCWNhc2UgSFdIX1RZUEVfSU86CisJY2FzZSBIV0hfVFlQRV9JT19SRDoKKwkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PQorCQkgICAgSVNDU0lfT1BfTk9PUF9PVVQpIHsKKwkJCWJlX2NvbXBsZXRlX25vcGluX3Jlc3AoYmVpc2NzaV9jb25uLCB0YXNrLCBwc29sKTsKKwkJfSBlbHNlCisJCQliZV9jb21wbGV0ZV9pbyhiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQlicmVhazsKKworCWNhc2UgSFdIX1RZUEVfTE9HT1VUOgorCQliZV9jb21wbGV0ZV9sb2dvdXQoYmVpc2NzaV9jb25uLCB0YXNrLCBwc29sKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXSF9UWVBFX0xPR0lOOgorCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIlx0XHQgTm8gSFdIX1RZUEVfTE9HSU4gRXhwZWN0ZWQgaW4gaHdpX2NvbXBsZXRlX2NtZCIKKwkJCSAiLSBTb2xpY2l0ZWQgcGF0aCBcbiIpOworCQlicmVhazsKKworCWNhc2UgSFdIX1RZUEVfVE1GOgorCQliZV9jb21wbGV0ZV90bWYoYmVpc2NzaV9jb25uLCB0YXNrLCBwc29sKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXSF9UWVBFX05PUDoKKwkJYmVfY29tcGxldGVfbm9waW5fcmVzcChiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICJ3cmJfaW5kZXggMHgleCBDSUQgMHgleFxuIiwKKwkJCSAgICAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSkgLworCQkJCQkzMl0gJiBTT0xfV1JCX0lOREVYX01BU0spID4+IDE2KSwKKwkJCSAgICAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0KKwkJCQkJJiBTT0xfQ0lEX01BU0spID4+IDYpKTsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOworfQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqaHdpX2dldF9hc3luY19idXN5X2xpc3Qoc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dAorCQkJCQkgICpwYXN5bmNfY3R4LCB1bnNpZ25lZCBpbnQgaXNfaGVhZGVyLAorCQkJCQkgIHVuc2lnbmVkIGludCBob3N0X3dyaXRlX3B0cikKK3sKKwlpZiAoaXNfaGVhZGVyKQorCQlyZXR1cm4gJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2hvc3Rfd3JpdGVfcHRyXS4KKwkJICAgIGhlYWRlcl9idXN5X2xpc3Q7CisJZWxzZQorCQlyZXR1cm4gJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2hvc3Rfd3JpdGVfcHRyXS5kYXRhX2J1c3lfbGlzdDsKK30KKworc3RhdGljIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlICoKK2h3aV9nZXRfYXN5bmNfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJICAgICBzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgICAgc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eCwKKwkJICAgICBzdHJ1Y3QgaV90X2RwZHVfY3FlICpwZHBkdV9jcWUsIHVuc2lnbmVkIGludCAqcGNxX2luZGV4KQoreworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBwaHlzX2FkZHI7CisJc3RydWN0IGxpc3RfaGVhZCAqcGJ1c3lfbGlzdDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZSA9IE5VTEw7CisJaW50IGJ1ZmZlcl9sZW4gPSAwOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyX2luZGV4ID0gLTE7CisJdW5zaWduZWQgY2hhciBpc19oZWFkZXIgPSAwOworCisJcGh5c19hZGRyLnUuYTMyLmFkZHJlc3NfbG8gPQorCSAgICBwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwgZGJfYWRkcl9sbykgLyAzMl0gLQorCSAgICAoKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBkcGwpIC8gMzJdCisJCQkJCQkmIFBEVUNRRV9EUExfTUFTSykgPj4gMTYpOworCXBoeXNfYWRkci51LmEzMi5hZGRyZXNzX2hpID0KKwkgICAgcGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRiX2FkZHJfaGkpIC8gMzJdOworCisJcGh5c19hZGRyLnUuYTY0LmFkZHJlc3MgPQorCQkJKigodW5zaWduZWQgbG9uZyBsb25nICopKCZwaHlzX2FkZHIudS5hNjQuYWRkcmVzcykpOworCisJc3dpdGNoIChwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwgY29kZSkgLyAzMl0KKwkJCSYgUERVQ1FFX0NPREVfTUFTSykgeworCWNhc2UgVU5TT0xfSERSX05PVElGWToKKwkJaXNfaGVhZGVyID0gMTsKKworCQlwYnVzeV9saXN0ID0gaHdpX2dldF9hc3luY19idXN5X2xpc3QocGFzeW5jX2N0eCwgMSwKKwkJCShwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwKKwkJCWluZGV4KSAvIDMyXSAmIFBEVUNRRV9JTkRFWF9NQVNLKSk7CisKKwkJYnVmZmVyX2xlbiA9ICh1bnNpZ25lZCBpbnQpKHBoeXNfYWRkci51LmE2NC5hZGRyZXNzIC0KKwkJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIucGFfYmFzZS51LmE2NC5hZGRyZXNzKTsKKworCQlidWZmZXJfaW5kZXggPSBidWZmZXJfbGVuIC8KKwkJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuYnVmZmVyX3NpemU7CisKKwkJYnJlYWs7CisJY2FzZSBVTlNPTF9EQVRBX05PVElGWToKKwkJcGJ1c3lfbGlzdCA9IGh3aV9nZXRfYXN5bmNfYnVzeV9saXN0KHBhc3luY19jdHgsIDAsIChwZHBkdV9jcWUtPgorCQkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsCisJCQkJCWluZGV4KSAvIDMyXSAmIFBEVUNRRV9JTkRFWF9NQVNLKSk7CisJCWJ1ZmZlcl9sZW4gPSAodW5zaWduZWQgbG9uZykocGh5c19hZGRyLnUuYTY0LmFkZHJlc3MgLQorCQkJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLnBhX2Jhc2UudS4KKwkJCQkJYTY0LmFkZHJlc3MpOworCQlidWZmZXJfaW5kZXggPSBidWZmZXJfbGVuIC8gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5idWZmZXJfc2l6ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGJ1c3lfbGlzdCA9IE5VTEw7CisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJIlVuZXhwZWN0ZWQgY29kZT0lZCBcbiIsCisJCQkgcGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsCisJCQkJCWNvZGUpIC8gMzJdICYgUERVQ1FFX0NPREVfTUFTSyk7CisJCXJldHVybiBOVUxMOworCX0KKworCVdBUk5fT04oIShidWZmZXJfaW5kZXggPD0gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5udW1fZW50cmllcykpOworCVdBUk5fT04obGlzdF9lbXB0eShwYnVzeV9saXN0KSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXN5bmNfaGFuZGxlLCBwYnVzeV9saXN0LCBsaW5rKSB7CisJCVdBUk5fT04ocGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQpOworCQlpZiAocGFzeW5jX2hhbmRsZS0+aW5kZXggPT0gYnVmZmVyX2luZGV4KQorCQkJYnJlYWs7CisJfQorCisJV0FSTl9PTighcGFzeW5jX2hhbmRsZSk7CisKKwlwYXN5bmNfaGFuZGxlLT5jcmkgPSAodW5zaWduZWQgc2hvcnQpYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkOworCXBhc3luY19oYW5kbGUtPmlzX2hlYWRlciA9IGlzX2hlYWRlcjsKKwlwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuID0gKChwZHBkdV9jcWUtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBkcGwpIC8gMzJdCisJCQkmIFBEVUNRRV9EUExfTUFTSykgPj4gMTYpOworCisJKnBjcV9pbmRleCA9IChwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwKKwkJCWluZGV4KSAvIDMyXSAmIFBEVUNRRV9JTkRFWF9NQVNLKTsKKwlyZXR1cm4gcGFzeW5jX2hhbmRsZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraHdpX3VwZGF0ZV9hc3luY193cml0YWJsZXMoc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eCwKKwkJCSAgIHVuc2lnbmVkIGludCBpc19oZWFkZXIsIHVuc2lnbmVkIGludCBjcV9pbmRleCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwYnVzeV9saXN0OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlOworCXVuc2lnbmVkIGludCBudW1fZW50cmllcywgd3JpdGFibGVzID0gMDsKKwl1bnNpZ25lZCBpbnQgKnBlcF9yZWFkX3B0ciwgKnB3cml0YWJsZXM7CisKKworCWlmIChpc19oZWFkZXIpIHsKKwkJcGVwX3JlYWRfcHRyID0gJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5lcF9yZWFkX3B0cjsKKwkJcHdyaXRhYmxlcyA9ICZwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzOworCQludW1fZW50cmllcyA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5udW1fZW50cmllczsKKwl9IGVsc2UgeworCQlwZXBfcmVhZF9wdHIgPSAmcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5lcF9yZWFkX3B0cjsKKwkJcHdyaXRhYmxlcyA9ICZwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlczsKKwkJbnVtX2VudHJpZXMgPSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLm51bV9lbnRyaWVzOworCX0KKworCXdoaWxlICgoKnBlcF9yZWFkX3B0cikgIT0gY3FfaW5kZXgpIHsKKwkJKCpwZXBfcmVhZF9wdHIpKys7CisJCSpwZXBfcmVhZF9wdHIgPSAoKnBlcF9yZWFkX3B0cikgJSBudW1fZW50cmllczsKKworCQlwYnVzeV9saXN0ID0gaHdpX2dldF9hc3luY19idXN5X2xpc3QocGFzeW5jX2N0eCwgaXNfaGVhZGVyLAorCQkJCQkJICAgICAqcGVwX3JlYWRfcHRyKTsKKwkJaWYgKHdyaXRhYmxlcyA9PSAwKQorCQkJV0FSTl9PTihsaXN0X2VtcHR5KHBidXN5X2xpc3QpKTsKKworCQlpZiAoIWxpc3RfZW1wdHkocGJ1c3lfbGlzdCkpIHsKKwkJCXBhc3luY19oYW5kbGUgPSBsaXN0X2VudHJ5KHBidXN5X2xpc3QtPm5leHQsCisJCQkJCQkgICBzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSwKKwkJCQkJCSAgIGxpbmspOworCQkJV0FSTl9PTighcGFzeW5jX2hhbmRsZSk7CisJCQlwYXN5bmNfaGFuZGxlLT5jb25zdW1lZCA9IDE7CisJCX0KKworCQl3cml0YWJsZXMrKzsKKwl9CisKKwlpZiAoIXdyaXRhYmxlcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIkR1cGxpY2F0ZSBub3RpZmljYXRpb24gcmVjZWl2ZWQgLSBpbmRleCAweCV4ISFcbiIsCisJCQkgY3FfaW5kZXgpOworCQlXQVJOX09OKDEpOworCX0KKworCSpwd3JpdGFibGVzID0gKnB3cml0YWJsZXMgKyB3cml0YWJsZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHdpX2ZyZWVfYXN5bmNfbXNnKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNyaSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZSwgKnRtcF9oYW5kbGU7CisJc3RydWN0IGxpc3RfaGVhZCAqcGxpc3Q7CisJdW5zaWduZWQgaW50IGkgPSAwOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGFzeW5jX2N0eCA9IEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpX2N0cmxyKTsKKworCXBsaXN0ICA9ICZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUubGlzdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYXN5bmNfaGFuZGxlLCB0bXBfaGFuZGxlLCBwbGlzdCwgbGluaykgeworCQlsaXN0X2RlbCgmcGFzeW5jX2hhbmRsZS0+bGluayk7CisKKwkJaWYgKGkgPT0gMCkgeworCQkJbGlzdF9hZGRfdGFpbCgmcGFzeW5jX2hhbmRsZS0+bGluaywKKwkJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfbGlzdCk7CisJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9lbnRyaWVzKys7CisJCQlpKys7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGFuZGxlLT5saW5rLAorCQkJCSAgICAgICZwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfbGlzdCk7CisJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfZW50cmllcysrOworCQkJaSsrOworCQl9CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5saXN0KTsKKwlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuaGRyX3JlY2VpdmVkID0gMDsKKwlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuYnl0ZXNfcmVjZWl2ZWQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBoeXNfYWRkciAqCitod2lfZ2V0X3JpbmdfYWRkcmVzcyhzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4LAorCQkgICAgIHVuc2lnbmVkIGludCBpc19oZWFkZXIsIHVuc2lnbmVkIGludCBob3N0X3dyaXRlX3B0cikKK3sKKwlzdHJ1Y3QgcGh5c19hZGRyICpwYXN5bmNfc2dlID0gTlVMTDsKKworCWlmIChpc19oZWFkZXIpCisJCXBhc3luY19zZ2UgPSBwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIucmluZ19iYXNlOworCWVsc2UKKwkJcGFzeW5jX3NnZSA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEucmluZ19iYXNlOworCisJcmV0dXJuIHBhc3luY19zZ2UgKyBob3N0X3dyaXRlX3B0cjsKK30KKworc3RhdGljIHZvaWQgaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgdW5zaWduZWQgaW50IGlzX2hlYWRlcikKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwZnJlZV9saW5rLCAqcGJ1c3lfbGlzdDsKKwlzdHJ1Y3QgcGh5c19hZGRyICpwYXN5bmNfc2dlOworCXVuc2lnbmVkIGludCByaW5nX2lkLCBudW1fZW50cmllczsKKwl1bnNpZ25lZCBpbnQgaG9zdF93cml0ZV9udW07CisJdW5zaWduZWQgaW50IHdyaXRhYmxlczsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisJdTMyIGRvb3JiZWxsID0gMDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBhc3luY19jdHggPSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aV9jdHJscik7CisKKwlpZiAoaXNfaGVhZGVyKSB7CisJCW51bV9lbnRyaWVzID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLm51bV9lbnRyaWVzOworCQl3cml0YWJsZXMgPSBtaW4ocGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLndyaXRhYmxlcywKKwkJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9lbnRyaWVzKTsKKwkJcGZyZWVfbGluayA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2xpc3QubmV4dDsKKwkJaG9zdF93cml0ZV9udW0gPSBwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuaG9zdF93cml0ZV9wdHI7CisJCXJpbmdfaWQgPSBwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9oZHIuaWQ7CisJfSBlbHNlIHsKKwkJbnVtX2VudHJpZXMgPSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLm51bV9lbnRyaWVzOworCQl3cml0YWJsZXMgPSBtaW4ocGFzeW5jX2N0eC0+YXN5bmNfZGF0YS53cml0YWJsZXMsCisJCQkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5mcmVlX2VudHJpZXMpOworCQlwZnJlZV9saW5rID0gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5mcmVlX2xpc3QubmV4dDsKKwkJaG9zdF93cml0ZV9udW0gPSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLmhvc3Rfd3JpdGVfcHRyOworCQlyaW5nX2lkID0gcGh3aV9jdHJsci0+ZGVmYXVsdF9wZHVfZGF0YS5pZDsKKwl9CisKKwl3cml0YWJsZXMgPSAod3JpdGFibGVzIC8gOCkgKiA4OworCWlmICh3cml0YWJsZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IHdyaXRhYmxlczsgaSsrKSB7CisJCQlwYnVzeV9saXN0ID0KKwkJCSAgICBod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChwYXN5bmNfY3R4LCBpc19oZWFkZXIsCisJCQkJCQkgICAgaG9zdF93cml0ZV9udW0pOworCQkJcGFzeW5jX2hhbmRsZSA9CisJCQkgICAgbGlzdF9lbnRyeShwZnJlZV9saW5rLCBzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSwKKwkJCQkJCQkJbGluayk7CisJCQlXQVJOX09OKCFwYXN5bmNfaGFuZGxlKTsKKwkJCXBhc3luY19oYW5kbGUtPmNvbnN1bWVkID0gMDsKKworCQkJcGZyZWVfbGluayA9IHBmcmVlX2xpbmstPm5leHQ7CisKKwkJCXBhc3luY19zZ2UgPSBod2lfZ2V0X3JpbmdfYWRkcmVzcyhwYXN5bmNfY3R4LAorCQkJCQkJaXNfaGVhZGVyLCBob3N0X3dyaXRlX251bSk7CisKKwkJCXBhc3luY19zZ2UtPmhpID0gcGFzeW5jX2hhbmRsZS0+cGEudS5hMzIuYWRkcmVzc19sbzsKKwkJCXBhc3luY19zZ2UtPmxvID0gcGFzeW5jX2hhbmRsZS0+cGEudS5hMzIuYWRkcmVzc19oaTsKKworCQkJbGlzdF9tb3ZlKCZwYXN5bmNfaGFuZGxlLT5saW5rLCBwYnVzeV9saXN0KTsKKworCQkJaG9zdF93cml0ZV9udW0rKzsKKwkJCWhvc3Rfd3JpdGVfbnVtID0gaG9zdF93cml0ZV9udW0gJSBudW1fZW50cmllczsKKwkJfQorCisJCWlmIChpc19oZWFkZXIpIHsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5ob3N0X3dyaXRlX3B0ciA9CisJCQkJCQkJaG9zdF93cml0ZV9udW07CisJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9lbnRyaWVzIC09IHdyaXRhYmxlczsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci53cml0YWJsZXMgLT0gd3JpdGFibGVzOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmJ1c3lfZW50cmllcyArPSB3cml0YWJsZXM7CisJCX0gZWxzZSB7CisJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmhvc3Rfd3JpdGVfcHRyID0gaG9zdF93cml0ZV9udW07CisJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfZW50cmllcyAtPSB3cml0YWJsZXM7CisJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcyAtPSB3cml0YWJsZXM7CisJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmJ1c3lfZW50cmllcyArPSB3cml0YWJsZXM7CisJCX0KKworCQlkb29yYmVsbCB8PSByaW5nX2lkICYgREJfREVGX1BEVV9SSU5HX0lEX01BU0s7CisJCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9SRUFSTV9TSElGVDsKKwkJZG9vcmJlbGwgfD0gMCA8PCBEQl9ERUZfUERVX0VWRU5UX1NISUZUOworCQlkb29yYmVsbCB8PSAod3JpdGFibGVzICYgREJfREVGX1BEVV9DUVBST0NfTUFTSykKKwkJCQkJPDwgREJfREVGX1BEVV9DUVBST0NfU0hJRlQ7CisKKwkJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1JYVUxQMF9PRkZTRVQpOworCX0KK30KKworc3RhdGljIHZvaWQgaHdpX2ZsdXNoX2RlZmF1bHRfcGR1X2J1ZmZlcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJCSBzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkJCSBzdHJ1Y3QgaV90X2RwZHVfY3FlICpwZHBkdV9jcWUpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGUgPSBOVUxMOworCXVuc2lnbmVkIGludCBjcV9pbmRleCA9IC0xOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGFzeW5jX2N0eCA9IEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpX2N0cmxyKTsKKworCXBhc3luY19oYW5kbGUgPSBod2lfZ2V0X2FzeW5jX2hhbmRsZShwaGJhLCBiZWlzY3NpX2Nvbm4sIHBhc3luY19jdHgsCisJCQkJCSAgICAgcGRwZHVfY3FlLCAmY3FfaW5kZXgpOworCUJVR19PTihwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIgIT0gMCk7CisJaWYgKHBhc3luY19oYW5kbGUtPmNvbnN1bWVkID09IDApCisJCWh3aV91cGRhdGVfYXN5bmNfd3JpdGFibGVzKHBhc3luY19jdHgsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlciwKKwkJCQkJICAgY3FfaW5kZXgpOworCisJaHdpX2ZyZWVfYXN5bmNfbXNnKHBoYmEsIHBhc3luY19oYW5kbGUtPmNyaSk7CisJaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhwaGJhLCBwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citod2lfZndkX2FzeW5jX21zZyhzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgIHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHgsIHVuc2lnbmVkIHNob3J0IGNyaSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZTsKKwl2b2lkICpwaGRyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaGRyX2xlbiA9IDAsIGJ1Zl9sZW4gPSAwOworCXVuc2lnbmVkIGludCBzdGF0dXMsIGluZGV4ID0gMCwgb2Zmc2V0ID0gMDsKKwl2b2lkICpwZmlyc3RfYnVmZmVyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbnVtX2J1ZiA9IDA7CisKKwlwbGlzdCA9ICZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUubGlzdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFzeW5jX2hhbmRsZSwgcGxpc3QsIGxpbmspIHsKKwkJaWYgKGluZGV4ID09IDApIHsKKwkJCXBoZHIgPSBwYXN5bmNfaGFuZGxlLT5wYnVmZmVyOworCQkJaGRyX2xlbiA9IHBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW47CisJCX0gZWxzZSB7CisJCQlidWZfbGVuID0gcGFzeW5jX2hhbmRsZS0+YnVmZmVyX2xlbjsKKwkJCWlmICghbnVtX2J1ZikgeworCQkJCXBmaXJzdF9idWZmZXIgPSBwYXN5bmNfaGFuZGxlLT5wYnVmZmVyOworCQkJCW51bV9idWYrKzsKKwkJCX0KKwkJCW1lbWNweShwZmlyc3RfYnVmZmVyICsgb2Zmc2V0LAorCQkJICAgICAgIHBhc3luY19oYW5kbGUtPnBidWZmZXIsIGJ1Zl9sZW4pOworCQkJb2Zmc2V0ID0gYnVmX2xlbjsKKwkJfQorCQlpbmRleCsrOworCX0KKworCXN0YXR1cyA9IGJlaXNjc2lfcHJvY2Vzc19hc3luY19wZHUoYmVpc2NzaV9jb25uLCBwaGJhLAorCQkJCQkgICBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsCisJCQkJCSAgIHBoZHIsIGhkcl9sZW4sIHBmaXJzdF9idWZmZXIsCisJCQkJCSAgIGJ1Zl9sZW4pOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQlod2lfZnJlZV9hc3luY19tc2cocGhiYSwgY3JpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraHdpX2dhdGhlcl9hc3luY19wZHUoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJICAgICBzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZSkKK3sKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwl1bnNpZ25lZCBpbnQgYnl0ZXNfbmVlZGVkID0gMCwgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBjcmkgPSBwYXN5bmNfaGFuZGxlLT5jcmk7CisJc3RydWN0IHBkdV9iYXNlICpwcGR1OworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGFzeW5jX2N0eCA9IEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpX2N0cmxyKTsKKworCWxpc3RfZGVsKCZwYXN5bmNfaGFuZGxlLT5saW5rKTsKKwlpZiAocGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyKSB7CisJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5idXN5X2VudHJpZXMtLTsKKwkJaWYgKHBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfcmVjZWl2ZWQpIHsKKwkJCWh3aV9mcmVlX2FzeW5jX21zZyhwaGJhLCBjcmkpOworCQkJQlVHKCk7CisJCX0KKworCQlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuYnl0ZXNfcmVjZWl2ZWQgPSAwOworCQlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuaGRyX3JlY2VpdmVkID0gMTsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9sZW4gPQorCQkJCSh1bnNpZ25lZCBzaG9ydClwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuOworCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGFuZGxlLT5saW5rLAorCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5saXN0KTsKKworCQlwcGR1ID0gcGFzeW5jX2hhbmRsZS0+cGJ1ZmZlcjsKKwkJYnl0ZXNfbmVlZGVkID0gKCgoKHBwZHUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3BkdV9iYXNlLAorCQkJZGF0YV9sZW5faGkpIC8gMzJdICYgUERVQkFTRV9EQVRBTEVOSElfTUFTSykgPDwgOCkgJgorCQkJMHhGRkZGMDAwMCkgfCAoKGJlMTZfdG9fY3B1KChwcGR1LT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3BkdV9iYXNlLCBkYXRhX2xlbl9sbykgLyAzMl0KKwkJCSYgUERVQkFTRV9EQVRBTEVOTE9fTUFTSykgPj4gMTYpKSAmIDB4MDAwMEZGRkYpKTsKKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5ieXRlc19uZWVkZWQgPQorCQkJICAgIGJ5dGVzX25lZWRlZDsKKworCQkJaWYgKGJ5dGVzX25lZWRlZCA9PSAwKQorCQkJCXN0YXR1cyA9IGh3aV9md2RfYXN5bmNfbXNnKGJlaXNjc2lfY29ubiwgcGhiYSwKKwkJCQkJCQkgICBwYXN5bmNfY3R4LCBjcmkpOworCQl9CisJfSBlbHNlIHsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5idXN5X2VudHJpZXMtLTsKKwkJaWYgKHBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfcmVjZWl2ZWQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oYW5kbGUtPmxpbmssCisJCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS4KKwkJCQkgICAgICBsaXN0KTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS4KKwkJCQlieXRlc19yZWNlaXZlZCArPQorCQkJCSh1bnNpZ25lZCBzaG9ydClwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuOworCisJCQlpZiAocGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLgorCQkJICAgIGJ5dGVzX3JlY2VpdmVkID49CisJCQkgICAgcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLgorCQkJICAgIGJ5dGVzX25lZWRlZCkKKwkJCQlzdGF0dXMgPSBod2lfZndkX2FzeW5jX21zZyhiZWlzY3NpX2Nvbm4sIHBoYmEsCisJCQkJCQkJICAgcGFzeW5jX2N0eCwgY3JpKTsKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBod2lfcHJvY2Vzc19kZWZhdWx0X3BkdV9yaW5nKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBpX3RfZHBkdV9jcWUgKnBkcGR1X2NxZSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGNxX2luZGV4ID0gLTE7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCXBhc3luY19oYW5kbGUgPSBod2lfZ2V0X2FzeW5jX2hhbmRsZShwaGJhLCBiZWlzY3NpX2Nvbm4sIHBhc3luY19jdHgsCisJCQkJCSAgICAgcGRwZHVfY3FlLCAmY3FfaW5kZXgpOworCisJaWYgKHBhc3luY19oYW5kbGUtPmNvbnN1bWVkID09IDApCisJCWh3aV91cGRhdGVfYXN5bmNfd3JpdGFibGVzKHBhc3luY19jdHgsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlciwKKwkJCQkJICAgY3FfaW5kZXgpOworCWh3aV9nYXRoZXJfYXN5bmNfcGR1KGJlaXNjc2lfY29ubiwgcGhiYSwgcGFzeW5jX2hhbmRsZSk7CisJaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhwaGJhLCBwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGJlaXNjc2lfcHJvY2Vzc19jcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3E7CisJc3RydWN0IHNvbF9jcWUgKnNvbDsKKwlzdHJ1Y3QgZG1zZ19jcWUgKmRtc2c7CisJdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQgPSAwOworCXVuc2lnbmVkIGludCB0b3RfbnVtcCA9IDA7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJc29sID0gcXVldWVfdGFpbF9ub2RlKGNxKTsKKworCXdoaWxlIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHZhbGlkKSAvIDMyXSAmCisJICAgICAgIENRRV9WQUxJRF9NQVNLKSB7CisJCWJlX2R3c19sZV90b19jcHUoc29sLCBzaXplb2Yoc3RydWN0IHNvbF9jcWUpKTsKKworCQliZWlzY3NpX2Nvbm4gPSBwaGJhLT5jb25uX3RhYmxlWyh1MzIpIChzb2wtPgorCQkJCSBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdICYKKwkJCQkgU09MX0NJRF9NQVNLKSA+PiA2XTsKKworCQlpZiAoIWJlaXNjc2lfY29ubiB8fCAhYmVpc2NzaV9jb25uLT5lcCkgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkJICAgICAiQ29ubmVjdGlvbiB0YWJsZSBlbXB0eSBmb3IgY2lkID0gJWRcbiIsCisJCQkJICAgICAodTMyKShzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsCisJCQkJICAgICBjaWQpIC8gMzJdICYgU09MX0NJRF9NQVNLKSA+PiA2KTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKG51bV9wcm9jZXNzZWQgPj0gMzIpIHsKKwkJCWh3aV9yaW5nX2NxX2RiKHBoYmEsIHBod2lfY29udGV4dC0+YmVfY3EuaWQsCisJCQkJCW51bV9wcm9jZXNzZWQsIDAsIDApOworCQkJdG90X251bXAgKz0gbnVtX3Byb2Nlc3NlZDsKKwkJCW51bV9wcm9jZXNzZWQgPSAwOworCQl9CisKKwkJc3dpdGNoICgodTMyKSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KKwkJCTMyXSAmIENRRV9DT0RFX01BU0spIHsKKwkJY2FzZSBTT0xfQ01EX0NPTVBMRVRFOgorCQkJaHdpX2NvbXBsZXRlX2NtZChiZWlzY3NpX2Nvbm4sIHBoYmEsIHNvbCk7CisJCQlicmVhazsKKwkJY2FzZSBEUklWRVJNU0dfTk9USUZZOgorCQkJU0VfREVCVUcoREJHX0xWTF84LCAiUmVjZWl2ZWQgRFJJVkVSTVNHX05PVElGWSBcbiIpOworCQkJZG1zZyA9IChzdHJ1Y3QgZG1zZ19jcWUgKilzb2w7CisJCQlod2lfY29tcGxldGVfZHJ2cl9tc2dzKGJlaXNjc2lfY29ubiwgcGhiYSwgc29sKTsKKwkJCWJyZWFrOworCQljYXNlIFVOU09MX0hEUl9OT1RJRlk6CisJCWNhc2UgVU5TT0xfREFUQV9OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJSZWNlaXZlZCBVTlNPTF9IRFIvREFUQV9OT1RJRllcbiIpOworCQkJaHdpX3Byb2Nlc3NfZGVmYXVsdF9wZHVfcmluZyhiZWlzY3NpX2Nvbm4sIHBoYmEsCisJCQkJCSAgICAgKHN0cnVjdCBpX3RfZHBkdV9jcWUgKilzb2wpOworCQkJYnJlYWs7CisJCWNhc2UgQ1hOX0lOVkFMSURBVEVfSU5ERVhfTk9USUZZOgorCQljYXNlIENNRF9JTlZBTElEQVRFRF9OT1RJRlk6CisJCWNhc2UgQ1hOX0lOVkFMSURBVEVfTk9USUZZOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJCSAiSWdub3JpbmcgQ1EgRXJyb3Igbm90aWZpY2F0aW9uIGZvciBjbWQvY3huIgorCQkJCSAiaW52YWxpZGF0ZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBTT0xfQ01EX0tJTExFRF9EQVRBX0RJR0VTVF9FUlI6CisJCWNhc2UgQ01EX0tJTExFRF9JTlZBTElEX1NUQVRTTl9SQ1ZEOgorCQljYXNlIENNRF9LSUxMRURfSU5WQUxJRF9SMlRfUkNWRDoKKwkJY2FzZSBDTURfQ1hOX0tJTExFRF9MVU5fSU5WQUxJRDoKKwkJY2FzZSBDTURfQ1hOX0tJTExFRF9JQ0RfSU5WQUxJRDoKKwkJY2FzZSBDTURfQ1hOX0tJTExFRF9JVFRfSU5WQUxJRDoKKwkJY2FzZSBDTURfQ1hOX0tJTExFRF9TRVFfT1VUT0ZPUkRFUjoKKwkJY2FzZSBDTURfQ1hOX0tJTExFRF9JTlZBTElEX0RBVEFTTl9SQ1ZEOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJCSAiQ1EgRXJyb3Igbm90aWZpY2F0aW9uIGZvciBjbWQuLiAiCisJCQkJICJjb2RlICVkIGNpZCAweCV4XG4iLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KKwkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKKwkJCQkgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIFNPTF9DSURfTUFTSykpOworCQkJYnJlYWs7CisJCWNhc2UgVU5TT0xfREFUQV9ESUdFU1RfRVJST1JfTk9USUZZOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJCSAiRGlnZXN0IGVycm9yIG9uIGRlZiBwZHUgcmluZywgZHJvcHBpbmcuLlxuIik7CisJCQlod2lfZmx1c2hfZGVmYXVsdF9wZHVfYnVmZmVyKHBoYmEsIGJlaXNjc2lfY29ubiwKKwkJCQkJICAgICAoc3RydWN0IGlfdF9kcGR1X2NxZSAqKSBzb2wpOworCQkJYnJlYWs7CisJCWNhc2UgQ1hOX0tJTExFRF9QRFVfU0laRV9FWENFRURTX0RTTDoKKwkJY2FzZSBDWE5fS0lMTEVEX0JVUlNUX0xFTl9NSVNNQVRDSDoKKwkJY2FzZSBDWE5fS0lMTEVEX0FIU19SQ1ZEOgorCQljYXNlIENYTl9LSUxMRURfSERSX0RJR0VTVF9FUlI6CisJCWNhc2UgQ1hOX0tJTExFRF9VTktOT1dOX0hEUjoKKwkJY2FzZSBDWE5fS0lMTEVEX1NUQUxFX0lUVF9UVFRfUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX0lOVkFMSURfSVRUX1RUVF9SQ1ZEOgorCQljYXNlIENYTl9LSUxMRURfVElNRURfT1VUOgorCQljYXNlIENYTl9LSUxMRURfRklOX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9CQURfVU5TT0xfUERVX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9CQURfV1JCX0lOREVYX0VSUk9SOgorCQljYXNlIENYTl9LSUxMRURfT1ZFUl9SVU5fUkVTSURVQUw6CisJCWNhc2UgQ1hOX0tJTExFRF9VTkRFUl9SVU5fUkVTSURVQUw6CisJCWNhc2UgQ1hOX0tJTExFRF9DTU5EX0RBVEFfTk9UX09OX1NBTUVfQ09OTjoKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldHRpbmcgQ0lEICIKKwkJCQkgIjB4JXguLi5cbiIsCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spOworCQkJaXNjc2lfY29ubl9mYWlsdXJlKGJlaXNjc2lfY29ubi0+Y29ubiwKKwkJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJCWJyZWFrOworCQljYXNlIENYTl9LSUxMRURfUlNUX1NFTlQ6CisJCWNhc2UgQ1hOX0tJTExFRF9SU1RfUkNWRDoKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCByZWNlaXZlZC9zZW50ICIKKwkJCQkgIm9uIENJRCAweCV4Li4uXG4iLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KKwkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKKwkJCWlzY3NpX2Nvbm5fZmFpbHVyZShiZWlzY3NpX2Nvbm4tPmNvbm4sCisJCQkJCSAgIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yIEludmFsaWQgY29kZT0gJWQgIgorCQkJCSAicmVjZWl2ZWQgb24gQ0lEIDB4JXguLi5cbiIsCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spOworCQkJYnJlYWs7CisJCX0KKworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHZhbGlkLCBzb2wsIDApOworCQlxdWV1ZV90YWlsX2luYyhjcSk7CisJCXNvbCA9IHF1ZXVlX3RhaWxfbm9kZShjcSk7CisJCW51bV9wcm9jZXNzZWQrKzsKKwl9CisKKwlpZiAobnVtX3Byb2Nlc3NlZCA+IDApIHsKKwkJdG90X251bXAgKz0gbnVtX3Byb2Nlc3NlZDsKKwkJaHdpX3JpbmdfY3FfZGIocGhiYSwgcGh3aV9jb250ZXh0LT5iZV9jcS5pZCwgbnVtX3Byb2Nlc3NlZCwKKwkJCSAgICAgICAxLCAwKTsKKwl9CisJcmV0dXJuIHRvdF9udW1wOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2NxcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJlaXNjc2lfaGJhLCB3b3JrX2Nxcyk7CisKKwlpZiAocGhiYS0+dG9kb19tY2NfY3EpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCXBoYmEtPnRvZG9fbWNjX2NxID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiTUNDIEludGVycnVwdCBOb3QgZXhwZWN0ZWQgXG4iKTsKKwl9CisKKwlpZiAocGhiYS0+dG9kb19jcSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJcGhiYS0+dG9kb19jcSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCWJlaXNjc2lfcHJvY2Vzc19jcShwaGJhKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYmVfaW9wb2xsKHN0cnVjdCBibGtfaW9wb2xsICppb3AsIGludCBidWRnZXQpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCByZXQ7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCisJcGhiYSA9IGNvbnRhaW5lcl9vZihpb3AsIHN0cnVjdCBiZWlzY3NpX2hiYSwgaW9wb2xsKTsKKworCXJldCA9IGJlaXNjc2lfcHJvY2Vzc19jcShwaGJhKTsKKwlpZiAocmV0IDwgYnVkZ2V0KSB7CisJCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwkJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCisJCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCQlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJCWJsa19pb3BvbGxfY29tcGxldGUoaW9wKTsKKwkJaHdpX3JpbmdfZXFfZGIocGhiYSwgcGh3aV9jb250ZXh0LT5iZV9lcS5xLmlkLCAwLAorCQkJCQkJCTAsIDEsIDEpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAoraHdpX3dyaXRlX3NnbChzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCSAgICAgIHVuc2lnbmVkIGludCBudW1fc2csIHN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2spCit7CisJc3RydWN0IGlzY3NpX3NnZSAqcHNnbDsKKwl1bnNpZ25lZCBzaG9ydCBzZ19sZW4sIGluZGV4OworCXVuc2lnbmVkIGludCBzZ2VfbGVuID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmxfc2c7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBpc2NzaV9iaHNfYWRkcl9sbywgcHdyYiwKKwkJCQkgICAgICBpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19sbyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGlzY3NpX2Joc19hZGRyX2hpLCBwd3JiLAorCQkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKKworCWxfc2cgPSBzZzsKKwlmb3IgKGluZGV4ID0gMDsgKGluZGV4IDwgbnVtX3NnKSAmJiAoaW5kZXggPCAyKTsgaW5kZXgrKywgc2dfbmV4dChzZykpIHsKKwkJaWYgKGluZGV4ID09IDApIHsKKwkJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCQkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2FkZHJfbG8sIHB3cmIsCisJCQkJCQkJKGFkZHIgJiAweEZGRkZGRkZGKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9hZGRyX2hpLCBwd3JiLAorCQkJCQkJCShhZGRyID4+IDMyKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sZW4sIHB3cmIsCisJCQkJCQkJc2dfbGVuKTsKKwkJCXNnZV9sZW4gPSBzZ19sZW47CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAorCQkJCQkJCTEpOworCQl9IGVsc2UgeworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKKwkJCQkJCQkwKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX3IydF9vZmZzZXQsCisJCQkJCQkJcHdyYiwgc2dlX2xlbik7CisJCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwkJCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9hZGRyX2xvLCBwd3JiLAorCQkJCQkJCShhZGRyICYgMHhGRkZGRkZGRikpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfYWRkcl9oaSwgcHdyYiwKKwkJCQkJCQkoYWRkciA+PiAzMikpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfbGVuLCBwd3JiLAorCQkJCQkJCXNnX2xlbik7CisJCX0KKwl9CisJcHNnbCA9IChzdHJ1Y3QgaXNjc2lfc2dlICopaW9fdGFzay0+cHNnbF9oYW5kbGUtPnBmcmFnOworCW1lbXNldChwc2dsLCAwLCBzaXplb2YoKnBzZ2wpICogQkUyX1NHRSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCBpb190YXNrLT5iaHNfbGVuIC0gMik7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9oaSwgcHNnbCwKKwkJCWlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKKwkJCWlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2xvKTsKKworCWlmIChudW1fc2cgPT0gMikKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfbGFzdCwgcHdyYiwgMSk7CisJc2cgPSBsX3NnOworCXBzZ2wrKzsKKwlwc2dsKys7CisJb2Zmc2V0ID0gMDsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1fc2c7IGluZGV4KyssIHNnX25leHQoc2cpLCBwc2dsKyspIHsKKwkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisJCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLAorCQkJCQkJKGFkZHIgJiAweEZGRkZGRkZGKSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAorCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxlbiwgcHNnbCwgc2dfbGVuKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIHNnZV9vZmZzZXQsIHBzZ2wsIG9mZnNldCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMCk7CisJCW9mZnNldCArPSBzZ19sZW47CisJfQorCXBzZ2wtLTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGFzdF9zZ2UsIHBzZ2wsIDEpOworfQorCitzdGF0aWMgdm9pZCBod2lfd3JpdGVfYnVmZmVyKHN0cnVjdCBpc2NzaV93cmIgKnB3cmIsIHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBpc2NzaV9zZ2UgKnBzZ2w7CisJdW5zaWduZWQgbG9uZyBsb25nIGFkZHI7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gaW9fdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2Nvbm4tPnBoYmE7CisKKwlpb190YXNrLT5iaHNfbGVuID0gc2l6ZW9mKHN0cnVjdCBiZV9ub25pb19iaHMpIC0gMjsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgaXNjc2lfYmhzX2FkZHJfbG8sIHB3cmIsCisJCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBpc2NzaV9iaHNfYWRkcl9oaSwgcHdyYiwKKwkJCQlpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19oaSk7CisKKwlpZiAodGFzay0+ZGF0YSkgeworCQlpZiAodGFzay0+ZGF0YV9jb3VudCkgeworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMSk7CisJCQlhZGRyID0gKHU2NCkgcGNpX21hcF9zaW5nbGUocGhiYS0+cGNpZGV2LAorCQkJCQkJICAgIHRhc2stPmRhdGEsCisJCQkJCQkgICAgdGFzay0+ZGF0YV9jb3VudCwgMSk7CisJCX0gZWxzZSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAwKTsKKwkJCWFkZHIgPSAwOworCQl9CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2FkZHJfbG8sIHB3cmIsCisJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9oaSwgcHdyYiwKKwkJCQkJCShhZGRyID4+IDMyKSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xlbiwgcHdyYiwKKwkJCQkJCXRhc2stPmRhdGFfY291bnQpOworCisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsIDEpOworCX0gZWxzZSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDApOworCQlhZGRyID0gMDsKKwl9CisKKwlwc2dsID0gKHN0cnVjdCBpc2NzaV9zZ2UgKilpb190YXNrLT5wc2dsX2hhbmRsZS0+cGZyYWc7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCBpb190YXNrLT5iaHNfbGVuKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAorCQkgICAgICBpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19oaSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCisJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2xvKTsKKwlpZiAodGFzay0+ZGF0YSkgeworCQlwc2dsKys7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIHNnZV9vZmZzZXQsIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgcnN2ZDAsIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGFzdF9zZ2UsIHBzZ2wsIDApOworCisJCXBzZ2wrKzsKKwkJaWYgKHRhc2stPmRhdGEpIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLAorCQkJCQkJKGFkZHIgJiAweEZGRkZGRkZGKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9oaSwgcHNnbCwKKwkJCQkJCShhZGRyID4+IDMyKSk7CisJCX0KKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxlbiwgcHNnbCwgMHgxMDYpOworCX0KKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGFzdF9zZ2UsIHBzZ2wsIDEpOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX2ZpbmRfbWVtX3JlcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgaW50IG51bV9jcV9wYWdlcywgbnVtX2VxX3BhZ2VzLCBudW1fYXN5bmNfcGR1X2J1Zl9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9kYXRhX3BhZ2VzLCB3cmJfc3pfcGVyX2N4bjsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9idWZfc2dsX3BhZ2VzLCBudW1fYXN5bmNfcGR1X2RhdGFfc2dsX3BhZ2VzOworCisJbnVtX2NxX3BhZ2VzID0gUEFHRVNfUkVRVUlSRUQocGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzICogXAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSkpOworCW51bV9lcV9wYWdlcyA9IFBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyAqIFwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGJlX2VxX2VudHJ5KSk7CisJbnVtX2FzeW5jX3BkdV9idWZfcGFnZXMgPQorCQkJUEFHRVNfUkVRVUlSRUQocGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqIFwKKwkJCQkgICAgICAgcGhiYS0+cGFyYW1zLmRlZnBkdV9oZHJfc3opOworCW51bV9hc3luY19wZHVfYnVmX3NnbF9wYWdlcyA9CisJCQlQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogXAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkcikpOworCW51bV9hc3luY19wZHVfZGF0YV9wYWdlcyA9CisJCQlQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogXAorCQkJCSAgICAgICBwaGJhLT5wYXJhbXMuZGVmcGR1X2RhdGFfc3opOworCW51bV9hc3luY19wZHVfZGF0YV9zZ2xfcGFnZXMgPQorCQkJUEFHRVNfUkVRVUlSRUQocGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqIFwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpKTsKKworCXBoYmEtPnBhcmFtcy5od2lfd3Nfc3ogPSBzaXplb2Yoc3RydWN0IGh3aV9jb250cm9sbGVyKTsKKworCXBoYmEtPm1lbV9yZXFbSVNDU0lfTUVNX0dMT0JBTF9IRUFERVJdID0gMiAqCisJCQkJCQkgQkVfSVNDU0lfUERVX0hFQURFUl9TSVpFOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BREROX0NPTlRFWFRdID0KKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5KTsKKworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9DUV0gPSBudW1fY3FfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0VRXSA9IG51bV9lcV9wYWdlcyAqIFBBR0VfU0laRTsKKworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9XUkJdID0gc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpCisJICAgICogKHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pCisJICAgICogcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7CisJd3JiX3N6X3Blcl9jeG4gPSAgc2l6ZW9mKHN0cnVjdCB3cmJfaGFuZGxlKSAqCisJCQkJIChwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fV1JCSF0gPSByb3VuZHVwX3Bvd19vZl90d28oKHdyYl9zel9wZXJfY3huKSAqCisJCQkJcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpOworCisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX1NHTEhdID0gc2l6ZW9mKHN0cnVjdCBzZ2xfaGFuZGxlKSAqCisJCXBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9TR0VdID0gc2l6ZW9mKHN0cnVjdCBpc2NzaV9zZ2UpICoKKwkJcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvICogcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmw7CisKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfSEVBREVSX0JVRl0gPQorCQludW1fYXN5bmNfcGR1X2J1Zl9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfREFUQV9CVUZdID0KKwkJbnVtX2FzeW5jX3BkdV9kYXRhX3BhZ2VzICogUEFHRV9TSVpFOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19IRUFERVJfUklOR10gPQorCQludW1fYXN5bmNfcGR1X2J1Zl9zZ2xfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0RBVEFfUklOR10gPQorCQludW1fYXN5bmNfcGR1X2RhdGFfc2dsX3BhZ2VzICogUEFHRV9TSVpFOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19IRUFERVJfSEFORExFXSA9CisJCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKgorCQlzaXplb2Yoc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUpOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19EQVRBX0hBTkRMRV0gPQorCQlwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICoKKwkJc2l6ZW9mKHN0cnVjdCBhc3luY19wZHVfaGFuZGxlKTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfUERVX0NPTlRFWFRdID0KKwkJc2l6ZW9mKHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQpICsKKwkJKHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogc2l6ZW9mKHN0cnVjdCBod2lfYXN5bmNfZW50cnkpKTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2FsbG9jX21lbShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJZG1hX2FkZHJfdCBidXNfYWRkOworCXN0cnVjdCBtZW1fYXJyYXkgKm1lbV9hcnIsICptZW1fYXJyX29yaWc7CisJdW5zaWduZWQgaW50IGksIGosIGFsbG9jX3NpemUsIGN1cnJfYWxsb2Nfc2l6ZTsKKworCXBoYmEtPnBod2lfY3RybHIgPSBrbWFsbG9jKHBoYmEtPnBhcmFtcy5od2lfd3Nfc3osIEdGUF9LRVJORUwpOworCWlmICghcGhiYS0+cGh3aV9jdHJscikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwaGJhLT5pbml0X21lbSA9IGtjYWxsb2MoU0VfTUVNX01BWCwgc2l6ZW9mKCptZW1fZGVzY3IpLAorCQkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoYmEtPmluaXRfbWVtKSB7CisJCWtmcmVlKHBoYmEtPnBod2lfY3RybHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1fYXJyX29yaWcgPSBrbWFsbG9jKHNpemVvZigqbWVtX2Fycl9vcmlnKSAqIEJFSVNDU0lfTUFYX0ZSQUdTX0lOSVQsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZW1fYXJyX29yaWcpIHsKKwkJa2ZyZWUocGhiYS0+aW5pdF9tZW0pOworCQlrZnJlZShwaGJhLT5waHdpX2N0cmxyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJZm9yIChpID0gMDsgaSA8IFNFX01FTV9NQVg7IGkrKykgeworCQlqID0gMDsKKwkJbWVtX2FyciA9IG1lbV9hcnJfb3JpZzsKKwkJYWxsb2Nfc2l6ZSA9IHBoYmEtPm1lbV9yZXFbaV07CisJCW1lbXNldChtZW1fYXJyLCAwLCBzaXplb2Yoc3RydWN0IG1lbV9hcnJheSkgKgorCQkgICAgICAgQkVJU0NTSV9NQVhfRlJBR1NfSU5JVCk7CisJCWN1cnJfYWxsb2Nfc2l6ZSA9IG1pbihiZV9tYXhfcGh5c19zaXplICogMTAyNCwgYWxsb2Nfc2l6ZSk7CisJCWRvIHsKKwkJCW1lbV9hcnItPnZpcnR1YWxfYWRkcmVzcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KAorCQkJCQkJCXBoYmEtPnBjaWRldiwKKwkJCQkJCQljdXJyX2FsbG9jX3NpemUsCisJCQkJCQkJJmJ1c19hZGQpOworCQkJaWYgKCFtZW1fYXJyLT52aXJ0dWFsX2FkZHJlc3MpIHsKKwkJCQlpZiAoY3Vycl9hbGxvY19zaXplIDw9IEJFX01JTl9NRU1fU0laRSkKKwkJCQkJZ290byBmcmVlX21lbTsKKwkJCQlpZiAoY3Vycl9hbGxvY19zaXplIC0KKwkJCQkJcm91bmRkb3duX3Bvd19vZl90d28oY3Vycl9hbGxvY19zaXplKSkKKwkJCQkJY3Vycl9hbGxvY19zaXplID0gcm91bmRkb3duX3Bvd19vZl90d28KKwkJCQkJCQkgICAgIChjdXJyX2FsbG9jX3NpemUpOworCQkJCWVsc2UKKwkJCQkJY3Vycl9hbGxvY19zaXplID0gY3Vycl9hbGxvY19zaXplIC8gMjsKKwkJCX0gZWxzZSB7CisJCQkJbWVtX2Fyci0+YnVzX2FkZHJlc3MudS4KKwkJCQkgICAgYTY0LmFkZHJlc3MgPSAoX191NjQpIGJ1c19hZGQ7CisJCQkJbWVtX2Fyci0+c2l6ZSA9IGN1cnJfYWxsb2Nfc2l6ZTsKKwkJCQlhbGxvY19zaXplIC09IGN1cnJfYWxsb2Nfc2l6ZTsKKwkJCQljdXJyX2FsbG9jX3NpemUgPSBtaW4oYmVfbWF4X3BoeXNfc2l6ZSAqCisJCQkJCQkgICAgICAxMDI0LCBhbGxvY19zaXplKTsKKwkJCQlqKys7CisJCQkJbWVtX2FycisrOworCQkJfQorCQl9IHdoaWxlIChhbGxvY19zaXplKTsKKwkJbWVtX2Rlc2NyLT5udW1fZWxlbWVudHMgPSBqOworCQltZW1fZGVzY3ItPnNpemVfaW5fYnl0ZXMgPSBwaGJhLT5tZW1fcmVxW2ldOworCQltZW1fZGVzY3ItPm1lbV9hcnJheSA9IGttYWxsb2Moc2l6ZW9mKCptZW1fYXJyKSAqIGosCisJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtZW1fZGVzY3ItPm1lbV9hcnJheSkKKwkJCWdvdG8gZnJlZV9tZW07CisKKwkJbWVtY3B5KG1lbV9kZXNjci0+bWVtX2FycmF5LCBtZW1fYXJyX29yaWcsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG1lbV9hcnJheSkgKiBqKTsKKwkJbWVtX2Rlc2NyKys7CisJfQorCWtmcmVlKG1lbV9hcnJfb3JpZyk7CisJcmV0dXJuIDA7CitmcmVlX21lbToKKwltZW1fZGVzY3ItPm51bV9lbGVtZW50cyA9IGo7CisJd2hpbGUgKChpKSB8fCAoaikpIHsKKwkJZm9yIChqID0gbWVtX2Rlc2NyLT5udW1fZWxlbWVudHM7IGogPiAwOyBqLS0pIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+cGNpZGV2LAorCQkJCQkgICAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaiAtIDFdLnNpemUsCisJCQkJCSAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uCisJCQkJCSAgICB2aXJ0dWFsX2FkZHJlc3MsCisJCQkJCSAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uCisJCQkJCSAgICBidXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzKTsKKwkJfQorCQlpZiAoaSkgeworCQkJaS0tOworCQkJa2ZyZWUobWVtX2Rlc2NyLT5tZW1fYXJyYXkpOworCQkJbWVtX2Rlc2NyLS07CisJCX0KKwl9CisJa2ZyZWUobWVtX2Fycl9vcmlnKTsKKwlrZnJlZShwaGJhLT5pbml0X21lbSk7CisJa2ZyZWUocGhiYS0+cGh3aV9jdHJscik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9nZXRfbWVtb3J5KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwliZWlzY3NpX2ZpbmRfbWVtX3JlcShwaGJhKTsKKwlyZXR1cm4gYmVpc2NzaV9hbGxvY19tZW0ocGhiYSk7Cit9CisKK3N0YXRpYyB2b2lkIGlzY3NpX2luaXRfZ2xvYmFsX3RlbXBsYXRlcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IHBkdV9kYXRhX291dCAqcGRhdGFfb3V0OworCXN0cnVjdCBwZHVfbm9wX291dCAqcG5vcF9vdXQ7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSVNDU0lfTUVNX0dMT0JBTF9IRUFERVI7CisJcGRhdGFfb3V0ID0KKwkgICAgKHN0cnVjdCBwZHVfZGF0YV9vdXQgKiltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisJbWVtc2V0KHBkYXRhX291dCwgMCwgQkVfSVNDU0lfUERVX0hFQURFUl9TSVpFKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBvcGNvZGUsIHBkYXRhX291dCwKKwkJICAgICAgSUlPQ19TQ1NJX0RBVEEpOworCisJcG5vcF9vdXQgPQorCSAgICAoc3RydWN0IHBkdV9ub3Bfb3V0ICopKCh1bnNpZ25lZCBjaGFyICopbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0uCisJCQkJICAgdmlydHVhbF9hZGRyZXNzICsgQkVfSVNDU0lfUERVX0hFQURFUl9TSVpFKTsKKworCW1lbXNldChwbm9wX291dCwgMCwgQkVfSVNDU0lfUERVX0hFQURFUl9TSVpFKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9ub3Bfb3V0LCB0dHQsIHBub3Bfb3V0LCAweEZGRkZGRkZGKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9ub3Bfb3V0LCBmX2JpdCwgcG5vcF9vdXQsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X25vcF9vdXQsIGlfYml0LCBwbm9wX291dCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfaW5pdF93cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcl93cmJoLCAqbWVtX2Rlc2NyX3dyYjsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKKwlzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiOworCXVuc2lnbmVkIGludCBudW1fY3huX3dyYmg7CisJdW5zaWduZWQgaW50IG51bV9jeG5fd3JiLCBqLCBpZHgsIGluZGV4OworCisJbWVtX2Rlc2NyX3dyYmggPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3Jfd3JiaCArPSBIV0lfTUVNX1dSQkg7CisKKwltZW1fZGVzY3Jfd3JiID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyX3dyYiArPSBIV0lfTUVNX1dSQjsKKworCWlkeCA9IDA7CisJcHdyYl9oYW5kbGUgPSBtZW1fZGVzY3Jfd3JiaC0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCW51bV9jeG5fd3JiaCA9ICgobWVtX2Rlc2NyX3dyYmgtPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJCSgoc2l6ZW9mKHN0cnVjdCB3cmJfaGFuZGxlKSkgKgorCQkJIHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pKTsKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogMjsgaW5kZXggKz0gMikgeworCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaW5kZXhdOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJjaWQ9JWQgcHdyYl9jb250ZXh0PSVwIFxuIiwgaW5kZXgsCisJCQkJCQlwd3JiX2NvbnRleHQpOworCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2UgPQorCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3cmJfaGFuZGxlICopICoKKwkJCQkJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biwgR0ZQX0tFUk5FTCk7CisJCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZCA9CisJCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUgKikgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG51bV9jeG5fd3JiaCkgeworCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCA9IDA7CisJCQlwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSA9IDA7CisJCQlmb3IgKGogPSAwOyBqIDwgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsgaisrKSB7CisJCQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdID0gcHdyYl9oYW5kbGU7CisJCQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkW2pdID0KKwkJCQkJCQkJcHdyYl9oYW5kbGU7CisJCQkJcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUrKzsKKwkJCQlwd3JiX2hhbmRsZSsrOworCQkJfQorCQkJcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4ID0gMDsKKwkJCW51bV9jeG5fd3JiaC0tOworCQl9IGVsc2UgeworCQkJaWR4Kys7CisJCQlwd3JiX2hhbmRsZSA9CisJCQkgICAgbWVtX2Rlc2NyX3dyYmgtPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwkJCW51bV9jeG5fd3JiaCA9CisJCQkgICAgKChtZW1fZGVzY3Jfd3JiaC0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkJICAgICAoKHNpemVvZihzdHJ1Y3Qgd3JiX2hhbmRsZSkpICoKKwkJCSAgICAgIHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pKTsKKwkJCXB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXggPSAwOworCQkJZm9yIChqID0gMDsgaiA8IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47IGorKykgeworCQkJCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtqXSA9IHB3cmJfaGFuZGxlOworCQkJCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFtqXSA9CisJCQkJICAgIHB3cmJfaGFuZGxlOworCQkJCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlKys7CisJCQkJcHdyYl9oYW5kbGUrKzsKKwkJCX0KKwkJCXB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCA9IDA7CisJCQludW1fY3huX3dyYmgtLTsKKwkJfQorCX0KKwlpZHggPSAwOworCXB3cmIgPSBtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJbnVtX2N4bl93cmIgPQorCSAgICAoKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8gKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSkgKgorCSAgICAgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bik7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsgaW5kZXggKz0gMikgeworCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaW5kZXhdOworCQlpZiAobnVtX2N4bl93cmIpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKKwkJCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtqXTsKKwkJCQlwd3JiX2hhbmRsZS0+cHdyYiA9IHB3cmI7CisJCQkJcHdyYisrOworCQkJfQorCQkJbnVtX2N4bl93cmItLTsKKwkJfSBlbHNlIHsKKwkJCWlkeCsrOworCQkJcHdyYiA9IG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwkJCW51bV9jeG5fd3JiID0gKChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCQkJCShzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpICoKKwkJCQkJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bik7CisJCQlmb3IgKGogPSAwOyBqIDwgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsgaisrKSB7CisJCQkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2Vbal07CisJCQkJcHdyYl9oYW5kbGUtPnB3cmIgPSBwd3JiOworCQkJCXB3cmIrKzsKKwkJCX0KKwkJCW51bV9jeG5fd3JiLS07CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9pbml0X2FzeW5jX3BkdV9jdHgoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaGJhX3BhcmFtZXRlcnMgKnAgPSAmcGhiYS0+cGFyYW1zOworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oZWFkZXJfaCwgKnBhc3luY19kYXRhX2g7CisJdW5zaWduZWQgaW50IGluZGV4OworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX1BEVV9DT05URVhUOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jdHJsci0+cGh3aV9jdHh0LT5wYXN5bmNfY3R4ID0gKHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKikKKwkJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisJcGFzeW5jX2N0eCA9IHBod2lfY3RybHItPnBod2lfY3R4dC0+cGFzeW5jX2N0eDsKKwltZW1zZXQocGFzeW5jX2N0eCwgMCwgc2l6ZW9mKCpwYXN5bmNfY3R4KSk7CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIubnVtX2VudHJpZXMgPSBwLT5hc3luY3BkdXNfcGVyX2N0cmw7CisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmJ1ZmZlcl9zaXplID0gcC0+ZGVmcGR1X2hkcl9zejsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmJ1ZmZlcl9zaXplID0gcC0+ZGVmcGR1X2RhdGFfc3o7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5udW1fZW50cmllcyA9IHAtPmFzeW5jcGR1c19wZXJfY3RybDsKKworCW1lbV9kZXNjciA9IChzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKilwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGOworCWlmIChtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJod2lfaW5pdF9hc3luY19wZHVfY3R4IEhXSV9NRU1fQVNZTkNfSEVBREVSX0JVRiIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnZhX2Jhc2UgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0hFQURFUl9SSU5HOworCWlmIChtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJod2lfaW5pdF9hc3luY19wZHVfY3R4IEhXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkciCisJCQkgInZhPSVwIFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5yaW5nX2Jhc2UgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEU7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19IRUFERVJfSEFORExFIgorCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICJObyBWaXJ0dWFsIGFkZHJlc3MgXG4iKTsKKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5oYW5kbGVfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLndyaXRhYmxlcyA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2xpc3QpOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0RBVEFfQlVGOworCWlmIChtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJod2lfaW5pdF9hc3luY19wZHVfY3R4IEhXSV9NRU1fQVNZTkNfREFUQV9CVUYiCisJCQkgInZhPSVwIFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEudmFfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5wYV9iYXNlLnUuYTY0LmFkZHJlc3MgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKKworCW1lbV9kZXNjciA9IChzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKilwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19EQVRBX1JJTkc7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19EQVRBX1JJTkciCisJCQkgInZhPSVwIFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJObyBWaXJ0dWFsIGFkZHJlc3MgXG4iKTsKKworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEucmluZ19iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKworCW1lbV9kZXNjciA9IChzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKilwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19EQVRBX0hBTkRMRTsKKwlpZiAoIW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5oYW5kbGVfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS53cml0YWJsZXMgPSAwOworCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfbGlzdCk7CisKKwlwYXN5bmNfaGVhZGVyX2ggPQorCQkoc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKilwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuaGFuZGxlX2Jhc2U7CisJcGFzeW5jX2RhdGFfaCA9CisJCShzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqKXBhc3luY19jdHgtPmFzeW5jX2RhdGEuaGFuZGxlX2Jhc2U7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwLT5hc3luY3BkdXNfcGVyX2N0cmw7IGluZGV4KyspIHsKKwkJcGFzeW5jX2hlYWRlcl9oLT5jcmkgPSAtMTsKKwkJcGFzeW5jX2hlYWRlcl9oLT5pbmRleCA9IChjaGFyKWluZGV4OworCQlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2hlYWRlcl9oLT5saW5rKTsKKwkJcGFzeW5jX2hlYWRlcl9oLT5wYnVmZmVyID0KKwkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKQorCQkJKHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci52YV9iYXNlKSArCisJCQkocC0+ZGVmcGR1X2hkcl9zeiAqIGluZGV4KSk7CisKKwkJcGFzeW5jX2hlYWRlcl9oLT5wYS51LmE2NC5hZGRyZXNzID0KKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5wYV9iYXNlLnUuYTY0LmFkZHJlc3MgKworCQkJKHAtPmRlZnBkdV9oZHJfc3ogKiBpbmRleCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmcGFzeW5jX2hlYWRlcl9oLT5saW5rLAorCQkJCSZwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9saXN0KTsKKwkJcGFzeW5jX2hlYWRlcl9oKys7CisJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMrKzsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLndyaXRhYmxlcysrOworCisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtpbmRleF0ud2FpdF9xdWV1ZS5saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2luZGV4XS4KKwkJCSAgICAgICBoZWFkZXJfYnVzeV9saXN0KTsKKwkJcGFzeW5jX2RhdGFfaC0+Y3JpID0gLTE7CisJCXBhc3luY19kYXRhX2gtPmluZGV4ID0gKGNoYXIpaW5kZXg7CisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfZGF0YV9oLT5saW5rKTsKKwkJcGFzeW5jX2RhdGFfaC0+cGJ1ZmZlciA9CisJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykKKwkJCShwYXN5bmNfY3R4LT5hc3luY19kYXRhLnZhX2Jhc2UpICsKKwkJCShwLT5kZWZwZHVfZGF0YV9zeiAqIGluZGV4KSk7CisKKwkJcGFzeW5jX2RhdGFfaC0+cGEudS5hNjQuYWRkcmVzcyA9CisJCSAgICBwYXN5bmNfY3R4LT5hc3luY19kYXRhLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyArCisJCSAgICAocC0+ZGVmcGR1X2RhdGFfc3ogKiBpbmRleCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmcGFzeW5jX2RhdGFfaC0+bGluaywKKwkJCSAgICAgICZwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfbGlzdCk7CisJCXBhc3luY19kYXRhX2grKzsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5mcmVlX2VudHJpZXMrKzsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS53cml0YWJsZXMrKzsKKworCQlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaW5kZXhdLmRhdGFfYnVzeV9saXN0KTsKKwl9CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuaG9zdF93cml0ZV9wdHIgPSAwOworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5lcF9yZWFkX3B0ciA9IC0xOworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuaG9zdF93cml0ZV9wdHIgPSAwOworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZXBfcmVhZF9wdHIgPSAtMTsKK30KKworc3RhdGljIGludAorYmVfc2dsX2NyZWF0ZV9jb250aWd1b3VzKHZvaWQgKnZpcnR1YWxfYWRkcmVzcywKKwkJCSB1NjQgcGh5c2ljYWxfYWRkcmVzcywgdTMyIGxlbmd0aCwKKwkJCSBzdHJ1Y3QgYmVfZG1hX21lbSAqc2dsKQoreworCVdBUk5fT04oIXZpcnR1YWxfYWRkcmVzcyk7CisJV0FSTl9PTighcGh5c2ljYWxfYWRkcmVzcyk7CisJV0FSTl9PTighbGVuZ3RoID4gMCk7CisJV0FSTl9PTighc2dsKTsKKworCXNnbC0+dmEgPSB2aXJ0dWFsX2FkZHJlc3M7CisJc2dsLT5kbWEgPSBwaHlzaWNhbF9hZGRyZXNzOworCXNnbC0+c2l6ZSA9IGxlbmd0aDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiZV9zZ2xfZGVzdHJveV9jb250aWd1b3VzKHN0cnVjdCBiZV9kbWFfbWVtICpzZ2wpCit7CisJbWVtc2V0KHNnbCwgMCwgc2l6ZW9mKCpzZ2wpKTsKK30KKworc3RhdGljIHZvaWQKK2h3aV9idWlsZF9iZV9zZ2xfYXJyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJICAgICBzdHJ1Y3QgbWVtX2FycmF5ICpwbWVtLCBzdHJ1Y3QgYmVfZG1hX21lbSAqc2dsKQoreworCWlmIChzZ2wtPnZhKQorCQliZV9zZ2xfZGVzdHJveV9jb250aWd1b3VzKHNnbCk7CisKKwliZV9zZ2xfY3JlYXRlX2NvbnRpZ3VvdXMocG1lbS0+dmlydHVhbF9hZGRyZXNzLAorCQkJCSBwbWVtLT5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzLAorCQkJCSBwbWVtLT5zaXplLCBzZ2wpOworfQorCitzdGF0aWMgdm9pZAoraHdpX2J1aWxkX2JlX3NnbF9ieV9vZmZzZXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgc3RydWN0IG1lbV9hcnJheSAqcG1lbSwgc3RydWN0IGJlX2RtYV9tZW0gKnNnbCkKK3sKKwlpZiAoc2dsLT52YSkKKwkJYmVfc2dsX2Rlc3Ryb3lfY29udGlndW91cyhzZ2wpOworCisJYmVfc2dsX2NyZWF0ZV9jb250aWd1b3VzKCh1bnNpZ25lZCBjaGFyICopcG1lbS0+dmlydHVhbF9hZGRyZXNzLAorCQkJCSBwbWVtLT5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzLAorCQkJCSBwbWVtLT5zaXplLCBzZ2wpOworfQorCitzdGF0aWMgaW50IGJlX2ZpbGxfcXVldWUoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCisJCXUxNiBsZW4sIHUxNiBlbnRyeV9zaXplLCB2b2lkICp2YWRkcmVzcykKK3sKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtID0gJnEtPmRtYV9tZW07CisKKwltZW1zZXQocSwgMCwgc2l6ZW9mKCpxKSk7CisJcS0+bGVuID0gbGVuOworCXEtPmVudHJ5X3NpemUgPSBlbnRyeV9zaXplOworCW1lbS0+c2l6ZSA9IGxlbiAqIGVudHJ5X3NpemU7CisJbWVtLT52YSA9IHZhZGRyZXNzOworCWlmICghbWVtLT52YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KG1lbS0+dmEsIDAsIG1lbS0+c2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9jcmVhdGVfZXEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgICBzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgcmV0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXZvaWQgKmVxX3ZhZGRyZXNzOworCisJaWR4ID0gMDsKKwllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxLnE7CisJbWVtID0gJmVxLT5kbWFfbWVtOworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0VROworCWVxX3ZhZGRyZXNzID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisKKwlyZXQgPSBiZV9maWxsX3F1ZXVlKGVxLCBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBiZV9lcV9lbnRyeSksIGVxX3ZhZGRyZXNzKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgRVEgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltZW0tPmRtYSA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKKworCXJldCA9IGJlaXNjc2lfY21kX2VxX2NyZWF0ZSgmcGhiYS0+Y3RybCwgZXEsCisJCQkJICAgIHBod2lfY29udGV4dC0+YmVfZXEuY3VyX2VxZCk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9jbWRfZXFfY3JlYXRlIgorCQkJICAgICAiRmFpbGVkZm9yIEVRIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCVNFX0RFQlVHKERCR19MVkxfOCwgImVxIGlkIGlzICVkXG4iLCBwaHdpX2NvbnRleHQtPmJlX2VxLnEuaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfY3JlYXRlX2NxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgICAgc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0KQoreworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsICplcTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXZvaWQgKmNxX3ZhZGRyZXNzOworCisJaWR4ID0gMDsKKwljcSA9ICZwaHdpX2NvbnRleHQtPmJlX2NxOworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwltZW0gPSAmY3EtPmRtYV9tZW07CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQ1E7CisJY3FfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlyZXQgPSBiZV9maWxsX3F1ZXVlKGNxLCBwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCAvIDIsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSwgY3FfdmFkZHJlc3MpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2ZpbGxfcXVldWUgRmFpbGVkIGZvciBJU0NTSSBDUSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCXJldCA9IGJlaXNjc2lfY21kX2NxX2NyZWF0ZSgmcGhiYS0+Y3RybCwgY3EsIGVxLCBmYWxzZSwgZmFsc2UsIDApOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlaXNjc2lfY21kX2VxX2NyZWF0ZSBGYWlsZWQgZm9yIElTQ1NJIENRIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCVNFX0RFQlVHKERCR19MVkxfOCwgImlzY3NpIGNxIGlkIGlzICVkXG4iLCBwaHdpX2NvbnRleHQtPmJlX2NxLmlkKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJU0NTSSBDUSBDUkVBVEVEXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYmVpc2NzaV9jcmVhdGVfZGVmX2hkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCSAgICAgICBzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQsCisJCSAgICAgICBzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHIsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVmX3BkdV9yaW5nX3N6KQoreworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZHEsICpjcTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXZvaWQgKmRxX3ZhZGRyZXNzOworCisJaWR4ID0gMDsKKwlkcSA9ICZwaHdpX2NvbnRleHQtPmJlX2RlZl9oZHJxOworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJbWVtID0gJmRxLT5kbWFfbWVtOworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0hFQURFUl9SSU5HOworCWRxX3ZhZGRyZXNzID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJcmV0ID0gYmVfZmlsbF9xdWV1ZShkcSwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0uc2l6ZSAvCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSwgZHFfdmFkZHJlc3MpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2ZpbGxfcXVldWUgRmFpbGVkIGZvciBERUYgUERVIEhEUlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCXJldCA9IGJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUoJnBoYmEtPmN0cmwsIGNxLCBkcSwKKwkJCQkJICAgICAgZGVmX3BkdV9yaW5nX3N6LAorCQkJCQkgICAgICBwaGJhLT5wYXJhbXMuZGVmcGR1X2hkcl9zeik7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZSBGYWlsZWQgREVGSERSXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGh3aV9jdHJsci0+ZGVmYXVsdF9wZHVfaGRyLmlkID0gcGh3aV9jb250ZXh0LT5iZV9kZWZfaGRycS5pZDsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJpc2NzaSBkZWYgcGR1IGlkIGlzICVkXG4iLAorCQkgcGh3aV9jb250ZXh0LT5iZV9kZWZfaGRycS5pZCk7CisJaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhwaGJhLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYmVpc2NzaV9jcmVhdGVfZGVmX2RhdGEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0LAorCQkJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyLAorCQkJdW5zaWduZWQgaW50IGRlZl9wZHVfcmluZ19zeikKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCByZXQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmRhdGFxLCAqY3E7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1lbTsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwl2b2lkICpkcV92YWRkcmVzczsKKworCWlkeCA9IDA7CisJZGF0YXEgPSAmcGh3aV9jb250ZXh0LT5iZV9kZWZfZGF0YXE7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwltZW0gPSAmZGF0YXEtPmRtYV9tZW07CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfREFUQV9SSU5HOworCWRxX3ZhZGRyZXNzID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJcmV0ID0gYmVfZmlsbF9xdWV1ZShkYXRhcSwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0uc2l6ZSAvCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSwgZHFfdmFkZHJlc3MpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2ZpbGxfcXVldWUgRmFpbGVkIGZvciBERUYgUERVIERBVEFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwltZW0tPmRtYSA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKKwlyZXQgPSBiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlKCZwaGJhLT5jdHJsLCBjcSwgZGF0YXEsCisJCQkJCSAgICAgIGRlZl9wZHVfcmluZ19zeiwKKwkJCQkJICAgICAgcGhiYS0+cGFyYW1zLmRlZnBkdV9kYXRhX3N6KTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlIEZhaWxlZCIKKwkJCSAgICAgIiBmb3IgREVGIFBEVSBEQVRBXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGh3aV9jdHJsci0+ZGVmYXVsdF9wZHVfZGF0YS5pZCA9IHBod2lfY29udGV4dC0+YmVfZGVmX2RhdGFxLmlkOworCVNFX0RFQlVHKERCR19MVkxfOCwgImlzY3NpIGRlZiBkYXRhIGlkIGlzICVkXG4iLAorCQkgcGh3aV9jb250ZXh0LT5iZV9kZWZfZGF0YXEuaWQpOworCWh3aV9wb3N0X2FzeW5jX2J1ZmZlcnMocGhiYSwgMCk7CisJU0VfREVCVUcoREJHX0xWTF84LCAiREVGQVVMVCBQRFUgREFUQSBSSU5HIENSRUFURUQgXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYmVpc2NzaV9wb3N0X3BhZ2VzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwlzdHJ1Y3QgbWVtX2FycmF5ICpwbV9hcnI7CisJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0LCBpOworCXN0cnVjdCBiZV9kbWFfbWVtIHNnbDsKKwlpbnQgc3RhdHVzOworCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fU0dFOworCXBtX2FyciA9IG1lbV9kZXNjci0+bWVtX2FycmF5OworCisJcGFnZV9vZmZzZXQgPSAoc2l6ZW9mKHN0cnVjdCBpc2NzaV9zZ2UpICogcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvICoKKwkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2Rfc3RhcnQpIC8gUEFHRV9TSVpFOworCWZvciAoaSA9IDA7IGkgPCBtZW1fZGVzY3ItPm51bV9lbGVtZW50czsgaSsrKSB7CisJCWh3aV9idWlsZF9iZV9zZ2xfYXJyKHBoYmEsIHBtX2FyciwgJnNnbCk7CisJCXN0YXR1cyA9IGJlX2NtZF9pc2NzaV9wb3N0X3NnbF9wYWdlcygmcGhiYS0+Y3RybCwgJnNnbCwKKwkJCQkJCXBhZ2Vfb2Zmc2V0LAorCQkJCQkJKHBtX2Fyci0+c2l6ZSAvIFBBR0VfU0laRSkpOworCQlwYWdlX29mZnNldCArPSBwbV9hcnItPnNpemUgLyBQQUdFX1NJWkU7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJwb3N0IHNnbCBmYWlsZWQuXG4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJcG1fYXJyKys7CisJfQorCVNFX0RFQlVHKERCR19MVkxfOCwgIlBPU1RFRCBQQUdFUyBcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX2NyZWF0ZV93cmJfcmluZ3Moc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJIHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCwKKwkJCSBzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHIpCit7CisJdW5zaWduZWQgaW50IHdyYl9tZW1faW5kZXgsIG9mZnNldCwgc2l6ZSwgbnVtX3dyYl9yaW5nczsKKwl1NjQgcGFfYWRkcl9sbzsKKwl1bnNpZ25lZCBpbnQgaWR4LCBudW0sIGk7CisJc3RydWN0IG1lbV9hcnJheSAqcHdyYl9hcnI7CisJdm9pZCAqd3JiX3ZhZGRyOworCXN0cnVjdCBiZV9kbWFfbWVtIHNnbDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwlpbnQgc3RhdHVzOworCisJaWR4ID0gMDsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9XUkI7CisJcHdyYl9hcnIgPSBrbWFsbG9jKHNpemVvZigqcHdyYl9hcnIpICogcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwsCisJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXB3cmJfYXJyKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJNZW1vcnkgYWxsb2MgZmFpbGVkIGluIGNyZWF0ZSB3cmIgcmluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJd3JiX3ZhZGRyID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJcGFfYWRkcl9sbyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKKwludW1fd3JiX3JpbmdzID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5zaXplIC8KKwkJKHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gKiBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOworCisJZm9yIChudW0gPSAwOyBudW0gPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsgbnVtKyspIHsKKwkJaWYgKG51bV93cmJfcmluZ3MpIHsKKwkJCXB3cmJfYXJyW251bV0udmlydHVhbF9hZGRyZXNzID0gd3JiX3ZhZGRyOworCQkJcHdyYl9hcnJbbnVtXS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzCT0gcGFfYWRkcl9sbzsKKwkJCXB3cmJfYXJyW251bV0uc2l6ZSA9IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gKgorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpOworCQkJd3JiX3ZhZGRyICs9IHB3cmJfYXJyW251bV0uc2l6ZTsKKwkJCXBhX2FkZHJfbG8gKz0gcHdyYl9hcnJbbnVtXS5zaXplOworCQkJbnVtX3dyYl9yaW5ncy0tOworCQl9IGVsc2UgeworCQkJaWR4Kys7CisJCQl3cmJfdmFkZHIgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwkJCXBhX2FkZHJfbG8gPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLlwKKwkJCQkJYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKKwkJCW51bV93cmJfcmluZ3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnNpemUgLworCQkJCQkocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqCisJCQkJCXNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CisJCQlwd3JiX2FycltudW1dLnZpcnR1YWxfYWRkcmVzcyA9IHdyYl92YWRkcjsKKwkJCXB3cmJfYXJyW251bV0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzc1wKKwkJCQkJCT0gcGFfYWRkcl9sbzsKKwkJCXB3cmJfYXJyW251bV0uc2l6ZSA9IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gKgorCQkJCQkJIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKTsKKwkJCXdyYl92YWRkciArPSBwd3JiX2FycltudW1dLnNpemU7CisJCQlwYV9hZGRyX2xvICAgKz0gcHdyYl9hcnJbbnVtXS5zaXplOworCQkJbnVtX3dyYl9yaW5ncy0tOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsgaSsrKSB7CisJCXdyYl9tZW1faW5kZXggPSAwOworCQlvZmZzZXQgPSAwOworCQlzaXplID0gMDsKKworCQlod2lfYnVpbGRfYmVfc2dsX2J5X29mZnNldChwaGJhLCAmcHdyYl9hcnJbaV0sICZzZ2wpOworCQlzdGF0dXMgPSBiZV9jbWRfd3JicV9jcmVhdGUoJnBoYmEtPmN0cmwsICZzZ2wsCisJCQkJCSAgICAmcGh3aV9jb250ZXh0LT5iZV93cmJxW2ldKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJCSAgICAgIndyYnEgY3JlYXRlIGZhaWxlZC4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaV0uY2lkID0gcGh3aV9jb250ZXh0LT5iZV93cmJxW2ldLmlkOworCX0KKwlrZnJlZShwd3JiX2Fycik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfd3JiX2hhbmRsZXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIGludCBpbmRleDsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyOyBpbmRleCArPSAyKSB7CisJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CisJCWtmcmVlKHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZSk7CisJCWtmcmVlKHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBod2lfY2xlYW51cChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnE7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJaW50IGk7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJZm9yIChpID0gMDsgaSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpKyspIHsKKwkJcSA9ICZwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV07CisJCWlmIChxLT5jcmVhdGVkKQorCQkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX1dSQlEpOworCX0KKworCWZyZWVfd3JiX2hhbmRsZXMocGhiYSk7CisKKwlxID0gJnBod2lfY29udGV4dC0+YmVfZGVmX2hkcnE7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBxLCBRVFlQRV9EUERVUSk7CisKKwlxID0gJnBod2lfY29udGV4dC0+YmVfZGVmX2RhdGFxOworCWlmIChxLT5jcmVhdGVkKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfRFBEVVEpOworCisJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIE5VTEwsIFFUWVBFX1NHTCk7CisKKwlxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBxLCBRVFlQRV9DUSk7CisKKwlxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0VRKTsKK30KKworc3RhdGljIGludCBod2lfaW5pdF9wb3J0KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCXVuc2lnbmVkIGludCBkZWZfcGR1X3Jpbmdfc3o7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCWludCBzdGF0dXM7CisKKwlkZWZfcGR1X3Jpbmdfc3ogPQorCQlwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpOworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCXBod2lfY29udGV4dC0+YmVfZXEubWF4X2VxZCA9IDA7CisJcGh3aV9jb250ZXh0LT5iZV9lcS5taW5fZXFkID0gMDsKKwlwaHdpX2NvbnRleHQtPmJlX2VxLmN1cl9lcWQgPSA2NDsKKwlwaHdpX2NvbnRleHQtPmJlX2VxLmVuYWJsZV9haWMgPSBmYWxzZTsKKwliZV9jbWRfZndfaW5pdGlhbGl6ZSgmcGhiYS0+Y3RybCk7CisJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfZXEocGhiYSwgcGh3aV9jb250ZXh0KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgIkVRIG5vdCBjcmVhdGVkIFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gbWdtdF9jaGVja19zdXBwb3J0ZWRfZncoY3RybCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJVbnN1cHBvcnRlZCBmdyB2ZXJzaW9uIFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gbWdtdF9nZXRfZndfY29uZmlnKGN0cmwsIHBoYmEpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRXJyb3IgZ2V0dGluZyBmdyBjb25maWdcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IGJlaXNjc2lfY3JlYXRlX2NxKHBoYmEsIHBod2lfY29udGV4dCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJDUSBub3QgY3JlYXRlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfZGVmX2hkcihwaGJhLCBwaHdpX2NvbnRleHQsIHBod2lfY3RybHIsCisJCQkJCWRlZl9wZHVfcmluZ19zeik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJEZWZhdWx0IEhlYWRlciBub3QgY3JlYXRlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfZGVmX2RhdGEocGhiYSwgcGh3aV9jb250ZXh0LAorCQkJCQkgcGh3aV9jdHJsciwgZGVmX3BkdV9yaW5nX3N6KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkRlZmF1bHQgRGF0YSBub3QgY3JlYXRlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9wb3N0X3BhZ2VzKHBoYmEpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiUG9zdCBTR0wgUGFnZXMgRmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV93cmJfcmluZ3MocGhiYSwJcGh3aV9jb250ZXh0LCBwaHdpX2N0cmxyKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIldSQiBSaW5ncyBub3QgY3JlYXRlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJU0VfREVCVUcoREJHX0xWTF84LCAiaHdpX2luaXRfcG9ydCBzdWNjZXNzXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImh3aV9pbml0X3BvcnQgZmFpbGVkIik7CisJaHdpX2NsZWFudXAocGhiYSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKworc3RhdGljIGludCBod2lfaW5pdF9jb250cm9sbGVyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlpZiAoMSA9PSBwaGJhLT5pbml0X21lbVtIV0lfTUVNX0FERE5fQ09OVEVYVF0ubnVtX2VsZW1lbnRzKSB7CisJCXBod2lfY3RybHItPnBod2lfY3R4dCA9IChzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICopcGhiYS0+CisJCSAgICBpbml0X21lbVtIV0lfTUVNX0FERE5fQ09OVEVYVF0ubWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiIHBod2lfY3RybHItPnBod2lfY3R4dD0lcCBcbiIsCisJCQkgcGh3aV9jdHJsci0+cGh3aV9jdHh0KTsKKwl9IGVsc2UgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiSFdJX01FTV9BREROX0NPTlRFWFQgaXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50LiIKKwkJCSAgICAgIkZhaWxpbmcgdG8gbG9hZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlzY3NpX2luaXRfZ2xvYmFsX3RlbXBsYXRlcyhwaGJhKTsKKwliZWlzY3NpX2luaXRfd3JiX2hhbmRsZShwaGJhKTsKKwlod2lfaW5pdF9hc3luY19wZHVfY3R4KHBoYmEpOworCWlmIChod2lfaW5pdF9wb3J0KHBoYmEpICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImh3aV9pbml0X2NvbnRyb2xsZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX2ZyZWVfbWVtKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwlpbnQgaSwgajsKKworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCWkgPSAwOworCWogPSAwOworCWZvciAoaSA9IDA7IGkgPCBTRV9NRU1fTUFYOyBpKyspIHsKKwkJZm9yIChqID0gbWVtX2Rlc2NyLT5udW1fZWxlbWVudHM7IGogPiAwOyBqLS0pIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+cGNpZGV2LAorCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uc2l6ZSwKKwkJCSAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaiAtIDFdLnZpcnR1YWxfYWRkcmVzcywKKwkJCSAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaiAtIDFdLmJ1c19hZGRyZXNzLgorCQkJCXUuYTY0LmFkZHJlc3MpOworCQl9CisJCWtmcmVlKG1lbV9kZXNjci0+bWVtX2FycmF5KTsKKwkJbWVtX2Rlc2NyKys7CisJfQorCWtmcmVlKHBoYmEtPmluaXRfbWVtKTsKKwlrZnJlZShwaGJhLT5waHdpX2N0cmxyKTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2luaXRfY29udHJvbGxlcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlyZXQgPSBiZWlzY3NpX2dldF9tZW1vcnkocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlIC0iCisJCQkgICAgICJGYWlsZWQgaW4gYmVpc2NzaV9hbGxvY19tZW1vcnkgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBod2lfaW5pdF9jb250cm9sbGVyKHBoYmEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9pbml0OworCVNFX0RFQlVHKERCR19MVkxfOCwgIlJldHVybiBzdWNjZXNzIGZyb20gYmVpc2NzaV9pbml0X2NvbnRyb2xsZXIiKTsKKwlyZXR1cm4gMDsKKworZnJlZV9pbml0OgorCWJlaXNjc2lfZnJlZV9tZW0ocGhiYSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9pbml0X3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyX3NnbGgsICptZW1fZGVzY3Jfc2c7CisJc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlOworCXN0cnVjdCBpc2NzaV9zZ2UgKnBmcmFnOworCXVuc2lnbmVkIGludCBhcnJfaW5kZXgsIGksIGlkeDsKKworCXBoYmEtPmlvX3NnbF9obmRsX2F2YmwgPSAwOworCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwgPSAwOworCW1lbV9kZXNjcl9zZ2xoID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyX3NnbGggKz0gSFdJX01FTV9TR0xIOworCWlmICgxID09IG1lbV9kZXNjcl9zZ2xoLT5udW1fZWxlbWVudHMpIHsKKwkJcGhiYS0+aW9fc2dsX2huZGxfYmFzZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ2xfaGFuZGxlICopICoKKwkJCQkJCSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsLAorCQkJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIXBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpIHsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkJICAgICAiTWVtIEFsbG9jIEZhaWxlZC4gRmFpbGluZyB0byBsb2FkXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXBoYmEtPmVoX3NnbF9obmRsX2Jhc2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dsX2hhbmRsZSAqKSAqCisJCQkJCQkgKHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC0KKwkJCQkJCSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsKSwKKwkJCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKSB7CisJCQlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkJICAgICAiTWVtIEFsbG9jIEZhaWxlZC4gRmFpbGluZyB0byBsb2FkXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfSBlbHNlIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkhXSV9NRU1fU0dMSCBpcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQuIgorCQkJICAgICAiRmFpbGluZyB0byBsb2FkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYXJyX2luZGV4ID0gMDsKKwlpZHggPSAwOworCXdoaWxlIChpZHggPCBtZW1fZGVzY3Jfc2dsaC0+bnVtX2VsZW1lbnRzKSB7CisJCXBzZ2xfaGFuZGxlID0gbWVtX2Rlc2NyX3NnbGgtPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKworCQlmb3IgKGkgPSAwOyBpIDwgKG1lbV9kZXNjcl9zZ2xoLT5tZW1fYXJyYXlbaWR4XS5zaXplIC8KKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBzZ2xfaGFuZGxlKSk7IGkrKykgeworCQkJaWYgKGFycl9pbmRleCA8IHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwpIHsKKwkJCQlwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW2Fycl9pbmRleF0gPSBwc2dsX2hhbmRsZTsKKwkJCQlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsKys7CisJCQkJYXJyX2luZGV4Kys7CisJCQl9IGVsc2UgeworCQkJCXBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbYXJyX2luZGV4IC0KKwkJCQkJcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybF0gPQorCQkJCQkJCQlwc2dsX2hhbmRsZTsKKwkJCQlhcnJfaW5kZXgrKzsKKwkJCQlwaGJhLT5laF9zZ2xfaG5kbF9hdmJsKys7CisJCQl9CisJCQlwc2dsX2hhbmRsZSsrOworCQl9CisJCWlkeCsrOworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCSAicGhiYS0+aW9fc2dsX2huZGxfYXZibD0lZCIKKwkJICJwaGJhLT5laF9zZ2xfaG5kbF9hdmJsPSVkIFxuIiwKKwkJIHBoYmEtPmlvX3NnbF9obmRsX2F2YmwsCisJCSBwaGJhLT5laF9zZ2xfaG5kbF9hdmJsKTsKKwltZW1fZGVzY3Jfc2cgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3Jfc2cgKz0gSFdJX01FTV9TR0U7CisJU0VfREVCVUcoREJHX0xWTF84LCAiXG4gbWVtX2Rlc2NyX3NnLT5udW1fZWxlbWVudHM9JWQgXG4iLAorCQkgbWVtX2Rlc2NyX3NnLT5udW1fZWxlbWVudHMpOworCWFycl9pbmRleCA9IDA7CisJaWR4ID0gMDsKKwl3aGlsZSAoaWR4IDwgbWVtX2Rlc2NyX3NnLT5udW1fZWxlbWVudHMpIHsKKwkJcGZyYWcgPSBtZW1fZGVzY3Jfc2ctPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKworCQlmb3IgKGkgPSAwOworCQkgICAgIGkgPCAobWVtX2Rlc2NyX3NnLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCSAgICAgKHNpemVvZihzdHJ1Y3QgaXNjc2lfc2dlKSAqIHBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbyk7CisJCSAgICAgaSsrKSB7CisJCQlpZiAoYXJyX2luZGV4IDwgcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCkKKwkJCQlwc2dsX2hhbmRsZSA9IHBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbYXJyX2luZGV4XTsKKwkJCWVsc2UKKwkJCQlwc2dsX2hhbmRsZSA9IHBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbYXJyX2luZGV4IC0KKwkJCQkJCXBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmxdOworCQkJcHNnbF9oYW5kbGUtPnBmcmFnID0gcGZyYWc7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9oaSwgcGZyYWcsIDApOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBmcmFnLCAwKTsKKwkJCXBmcmFnICs9IHBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbzsKKwkJCXBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXggPQorCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgKyBhcnJfaW5kZXgrKzsKKwkJfQorCQlpZHgrKzsKKwl9CisJcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXggPSAwOworCXBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCA9IDA7CisJcGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXggPSAwOworCXBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGJhX3NldHVwX2NpZF90YmxzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlpbnQgaSwgbmV3X2NpZDsKKworCXBoYmEtPmNpZF9hcnJheSA9IGttYWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmICghcGhiYS0+Y2lkX2FycmF5KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluICIKKwkJCSAgICAgImhiYV9zZXR1cF9jaWRfdGJsc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwaGJhLT5lcF9hcnJheSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqKSAqCisJCQkJIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5lcF9hcnJheSkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiAiCisJCQkgICAgICJoYmFfc2V0dXBfY2lkX3RibHMgXG4iKTsKKwkJa2ZyZWUocGhiYS0+Y2lkX2FycmF5KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW5ld19jaWQgPSBwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX3N0YXJ0OworCWZvciAoaSA9IDA7IGkgPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsgaSsrKSB7CisJCXBoYmEtPmNpZF9hcnJheVtpXSA9IG5ld19jaWQ7CisJCW5ld19jaWQgKz0gMjsKKwl9CisJcGhiYS0+YXZsYmxfY2lkcyA9IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBod2lfZW5hYmxlX2ludHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcTsKKwl1OCBfX2lvbWVtICphZGRyOworCXUzMiByZWc7CisJdTMyIGVuYWJsZWQ7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisKKwllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxLnE7CisJYWRkciA9ICh1OCBfX2lvbWVtICopICgodTggX19pb21lbSAqKSBjdHJsLT5wY2ljZmcgKworCQkJUENJQ0ZHX01FTUJBUl9DVFJMX0lOVF9DVFJMX09GRlNFVCk7CisJcmVnID0gaW9yZWFkMzIoYWRkcik7CisJU0VfREVCVUcoREJHX0xWTF84LCAicmVnID14JTA4eCBcbiIsIHJlZyk7CisKKwllbmFibGVkID0gcmVnICYgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwlpZiAoIWVuYWJsZWQpIHsKKwkJcmVnIHw9IE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgInJlZyA9eCUwOHggYWRkcj0lcCBcbiIsIHJlZywgYWRkcik7CisJCWlvd3JpdGUzMihyZWcsIGFkZHIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJlcS0+aWQ9JWQgXG4iLCBlcS0+aWQpOworCisJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwgMCwgMSwgMSk7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiSW4gaHdpX2VuYWJsZV9pbnRyLCBOb3QgRW5hYmxlZCBcbiIpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBod2lfZGlzYWJsZV9pbnRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisKKwl1OCBfX2lvbWVtICphZGRyID0gY3RybC0+cGNpY2ZnICsgUENJQ0ZHX01FTUJBUl9DVFJMX0lOVF9DVFJMX09GRlNFVDsKKwl1MzIgcmVnID0gaW9yZWFkMzIoYWRkcik7CisKKwl1MzIgZW5hYmxlZCA9IHJlZyAmIE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CisJaWYgKGVuYWJsZWQpIHsKKwkJcmVnICY9IH5NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOworCQlpb3dyaXRlMzIocmVnLCBhZGRyKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJJbiBod2lfZGlzYWJsZV9pbnRyLCBBbHJlYWR5IERpc2FibGVkIFxuIik7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9pbml0X3BvcnQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWludCByZXQ7CisKKwlyZXQgPSBiZWlzY3NpX2luaXRfY29udHJvbGxlcihwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVpc2NzaV9kZXZfcHJvYmUgLSBGYWlsZWQgaW4iCisJCQkgICAgICJiZWlzY3NpX2luaXRfY29udHJvbGxlciBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBiZWlzY3NpX2luaXRfc2dsX2hhbmRsZShwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVpc2NzaV9kZXZfcHJvYmUgLSBGYWlsZWQgaW4iCisJCQkgICAgICJiZWlzY3NpX2luaXRfc2dsX2hhbmRsZSBcbiIpOworCQlnb3RvIGRvX2NsZWFudXBfY3RybHI7CisJfQorCisJaWYgKGhiYV9zZXR1cF9jaWRfdGJscyhwaGJhKSkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRmFpbGVkIGluIGhiYV9zZXR1cF9jaWRfdGJsc1xuIik7CisJCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOworCQlrZnJlZShwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKTsKKwkJZ290byBkb19jbGVhbnVwX2N0cmxyOworCX0KKworCXJldHVybiByZXQ7CisKK2RvX2NsZWFudXBfY3RybHI6CisJaHdpX2NsZWFudXAocGhiYSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaHdpX3B1cmdlX2VxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcTsKKwlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVxZSA9IE5VTEw7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisKKwl3aGlsZSAoZXFlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQpIC8gMzJdCisJCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkLCBlcWUsIDApOworCQlxdWV1ZV90YWlsX2luYyhlcSk7CisJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX2NsZWFuX3BvcnQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIGNoYXIgbWdtdF9zdGF0dXM7CisKKwltZ210X3N0YXR1cyA9IG1nbXRfZXBmd19jbGVhbnVwKHBoYmEsIENNRF9DT05ORUNUSU9OX0NIVVRFXzApOworCWlmIChtZ210X3N0YXR1cykKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJtZ210X2VwZndfY2xlYW51cCBGQUlMRUQgXG4iKTsKKwlod2lfY2xlYW51cChwaGJhKTsKKwlod2lfcHVyZ2VfZXEocGhiYSk7CisJa2ZyZWUocGhiYS0+aW9fc2dsX2huZGxfYmFzZSk7CisJa2ZyZWUocGhiYS0+ZWhfc2dsX2huZGxfYmFzZSk7CisJa2ZyZWUocGhiYS0+Y2lkX2FycmF5KTsKKwlrZnJlZShwaGJhLT5lcF9hcnJheSk7Cit9CisKK3ZvaWQKK2JlaXNjc2lfb2ZmbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCSAgIHN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBpc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiICpwd3JiID0gTlVMTDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2Nvbm4tPnBoYmE7CisJdTMyIGRvb3JiZWxsID0gMDsKKworCS8qCisJICogV2UgY2FuIGFsd2F5cyB1c2UgMCBoZXJlIGJlY2F1c2UgaXQgaXMgcmVzZXJ2ZWQgYnkgbGliaXNjc2kgZm9yCisJICogbG9naW4vc3RhcnR1cCByZWxhdGVkIHRhc2tzLgorCSAqLworCXB3cmJfaGFuZGxlID0gYWxsb2Nfd3JiX2hhbmRsZShwaGJhLCBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsIDApOworCXB3cmIgPSAoc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgKilwd3JiX2hhbmRsZS0+cHdyYjsKKwltZW1zZXQocHdyYiwgMCwgc2l6ZW9mKCpwd3JiKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkgICAgICBtYXhfYnVyc3RfbGVuZ3RoLCBwd3JiLCBwYXJhbXMtPmR3W29mZnNldG9mCisJCSAgICAgIChzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBtYXhfYnVyc3RfbGVuZ3RoKSAvIDMyXSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkgICAgICBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoLCBwd3JiLAorCQkgICAgICBwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGgpIC8gMzJdKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCSAgICAgIGZpcnN0X2J1cnN0X2xlbmd0aCwKKwkJICAgICAgcHdyYiwKKwkJICAgICAgcGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBmaXJzdF9idXJzdF9sZW5ndGgpIC8gMzJdKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgZXJsLCBwd3JiLAorCQkgICAgICAocGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBlcmwpIC8gMzJdICYgT0ZGTERfUEFSQU1TX0VSTCkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgZGRlLCBwd3JiLAorCQkgICAgICAocGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBkZGUpIC8gMzJdICYgT0ZGTERfUEFSQU1TX0RERSkgPj4gMik7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBoZGUsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGhkZSkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfSERFKSA+PiAzKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIGlyMnQsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGlyMnQpIC8gMzJdICYgT0ZGTERfUEFSQU1TX0lSMlQpID4+IDQpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgaW1kLCBwd3JiLAorCQkgICAgICAocGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICAgaW1kKSAvIDMyXSAmIE9GRkxEX1BBUkFNU19JTUQpID4+IDUpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgc3RhdF9zbiwKKwkJICAgICAgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgZXhwX3N0YXRzbikgLyAzMl0gKyAxKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCB0eXBlLCBwd3JiLAorCQkgICAgICAweDcpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgd3JiX2lkeCwKKwkJICAgICAgcHdyYiwgcHdyYl9oYW5kbGUtPndyYl9pbmRleCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBwdHIybmV4dHdyYiwKKwkJICAgICAgcHdyYiwgcHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXgpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKKwkJCXNlc3Npb25fc3RhdGUsIHB3cmIsIDApOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgY29tcGx0b25hY2ssCisJCSAgICAgIHB3cmIsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgbm90cHJlZGJscSwKKwkJICAgICAgcHdyYiwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBtb2RlLCBwd3JiLAorCQkgICAgICAwKTsKKworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBJU0NTSV9NRU1fR0xPQkFMX0hFQURFUjsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKKwkJCXBhZF9idWZmZXJfYWRkcl9oaSwgcHdyYiwKKwkJICAgICAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0uYnVzX2FkZHJlc3MudS5hMzIuYWRkcmVzc19oaSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkJcGFkX2J1ZmZlcl9hZGRyX2xvLCBwd3JiLAorCQkgICAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5idXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2xvKTsKKworCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiKSk7CisKKwlkb29yYmVsbCB8PSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKKwlkb29yYmVsbCB8PSAocHdyYl9oYW5kbGUtPndyYl9pbmRleCAmIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8CisJCQkJCURCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOworCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOworCisJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX3BhcnNlX3BkdShzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgaXR0X3QgaXR0LAorCQkJICAgICAgaW50ICppbmRleCwgaW50ICphZ2UpCit7CisJKmluZGV4ID0gYmUzMl90b19jcHUoaXR0KSA+PiAxNjsKKwlpZiAoYWdlKQorCQkqYWdlID0gY29ubi0+c2Vzc2lvbi0+YWdlOworfQorCisvKioKKyAqIGJlaXNjc2lfYWxsb2NfcGR1IC0gYWxsb2NhdGVzIHBkdSBhbmQgcmVsYXRlZCByZXNvdXJjZXMKKyAqIEB0YXNrOiBsaWJpc2NzaSB0YXNrCisgKiBAb3Bjb2RlOiBvcGNvZGUgb2YgcGR1IGZvciB0YXNrCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgc2Vzc2lvbiBsb2NrIGhlbGQuIEl0IHdpbGwgYWxsb2NhdGUKKyAqIHRoZSB3cmIgYW5kIHNnbCBpZiBuZWVkZWQgZm9yIHRoZSBjb21tYW5kLiBBbmQgaXQgd2lsbCBwcmVwCisgKiB0aGUgcGR1J3MgaXR0LiBiZWlzY3NpX3BhcnNlX3BkdSB3aWxsIGxhdGVyIHRyYW5zbGF0ZQorICogdGhlIHBkdSBpdHQgdG8gdGhlIGxpYmlzY3NpIHRhc2sgaXR0LgorICovCitzdGF0aWMgaW50IGJlaXNjc2lfYWxsb2NfcGR1KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCB1aW50OF90IG9wY29kZSkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2Nvbm4tPnBoYmE7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlpdHRfdCBpdHQ7CisJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzID0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX3Nlc3M7CisJZG1hX2FkZHJfdCBwYWRkcjsKKworCWlvX3Rhc2stPmNtZF9iaHMgPSBwY2lfcG9vbF9hbGxvYyhiZWlzY3NpX3Nlc3MtPmJoc19wb29sLAorCQkJCQkgIEdGUF9LRVJORUwsICZwYWRkcik7CisKKwlpZiAoIWlvX3Rhc2stPmNtZF9iaHMpCisJCXJldHVybiAtRU5PTUVNOworCisJaW9fdGFzay0+YmhzX3BhLnUuYTY0LmFkZHJlc3MgPSBwYWRkcjsKKwlpb190YXNrLT5wd3JiX2hhbmRsZSA9IGFsbG9jX3dyYl9oYW5kbGUocGhiYSwKKwkJCQkJCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwKKwkJCQkJCXRhc2stPml0dCk7CisJaW9fdGFzay0+cHdyYl9oYW5kbGUtPnBpb19oYW5kbGUgPSB0YXNrOworCWlvX3Rhc2stPmNvbm4gPSBiZWlzY3NpX2Nvbm47CisKKwl0YXNrLT5oZHIgPSAoc3RydWN0IGlzY3NpX2hkciAqKSZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHI7CisJdGFzay0+aGRyX21heCA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX2Jocyk7CisKKwlpZiAodGFzay0+c2MpIHsKKwkJc3Bpbl9sb2NrKCZwaGJhLT5pb19zZ2xfbG9jayk7CisJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0gYWxsb2NfaW9fc2dsX2hhbmRsZShwaGJhKTsKKwkJc3Bpbl91bmxvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwkJaWYgKCFpb190YXNrLT5wc2dsX2hhbmRsZSkKKwkJCWdvdG8gZnJlZV9obmRsczsKKworCX0gZWxzZSB7CisJCWlvX3Rhc2stPnNjc2lfY21uZCA9IE5VTEw7CisJCWlmICgodGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgPT0gSVNDU0lfT1BfTE9HSU4pIHsKKwkJCWlmICghYmVpc2NzaV9jb25uLT5sb2dpbl9pbl9wcm9ncmVzcykgeworCQkJCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSAoc3RydWN0IHNnbF9oYW5kbGUgKikKKwkJCQkJCWFsbG9jX21nbXRfc2dsX2hhbmRsZShwaGJhKTsKKwkJCQlzcGluX3VubG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJCQkJaWYgKCFpb190YXNrLT5wc2dsX2hhbmRsZSkKKwkJCQkJZ290byBmcmVlX2huZGxzOworCisJCQkJYmVpc2NzaV9jb25uLT5sb2dpbl9pbl9wcm9ncmVzcyA9IDE7CisJCQkJYmVpc2NzaV9jb25uLT5wbG9naW5fc2dsX2hhbmRsZSA9CisJCQkJCQkJaW9fdGFzay0+cHNnbF9oYW5kbGU7CisJCQl9IGVsc2UgeworCQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0KKwkJCQkJCWJlaXNjc2lfY29ubi0+cGxvZ2luX3NnbF9oYW5kbGU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBhbGxvY19tZ210X3NnbF9oYW5kbGUocGhiYSk7CisJCQlzcGluX3VubG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJCQlpZiAoIWlvX3Rhc2stPnBzZ2xfaGFuZGxlKQorCQkJCWdvdG8gZnJlZV9obmRsczsKKwkJfQorCX0KKwlpdHQgPSAoaXR0X3QpIGNwdV90b19iZTMyKCgodW5zaWduZWQgaW50KXRhc2stPml0dCA8PCAxNikgfAorCQkJKHVuc2lnbmVkIGludCkoaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCkpOworCWlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5pdHQgPSBpdHQ7CisJcmV0dXJuIDA7CisKK2ZyZWVfaG5kbHM6CisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2JlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZF07CisJZnJlZV93cmJfaGFuZGxlKHBoYmEsIHB3cmJfY29udGV4dCwgaW9fdGFzay0+cHdyYl9oYW5kbGUpOworCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gTlVMTDsKKwlwY2lfcG9vbF9mcmVlKGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wsIGlvX3Rhc2stPmNtZF9iaHMsCisJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmE2NC5hZGRyZXNzKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzEsICJBbGxvYyBvZiBTR0xfSUNEIEZhaWxlZCBcbiIpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX2NsZWFudXBfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2Nvbm4tPnBoYmE7CisJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzID0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX3Nlc3M7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWRdOworCWlmIChpb190YXNrLT5wd3JiX2hhbmRsZSkgeworCQlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CisJCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gTlVMTDsKKwl9CisKKwlpZiAoaW9fdGFzay0+Y21kX2JocykgeworCQlwY2lfcG9vbF9mcmVlKGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wsIGlvX3Rhc2stPmNtZF9iaHMsCisJCQkgICAgICBpb190YXNrLT5iaHNfcGEudS5hNjQuYWRkcmVzcyk7CisJfQorCisJaWYgKHRhc2stPnNjKSB7CisJCWlmIChpb190YXNrLT5wc2dsX2hhbmRsZSkgeworCQkJc3Bpbl9sb2NrKCZwaGJhLT5pb19zZ2xfbG9jayk7CisJCQlmcmVlX2lvX3NnbF9oYW5kbGUocGhiYSwgaW9fdGFzay0+cHNnbF9oYW5kbGUpOworCQkJc3Bpbl91bmxvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgodGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgPT0gSVNDU0lfT1BfTE9HSU4pCisJCQlyZXR1cm47CisJCWlmIChpb190YXNrLT5wc2dsX2hhbmRsZSkgeworCQkJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCWZyZWVfbWdtdF9zZ2xfaGFuZGxlKHBoYmEsIGlvX3Rhc2stPnBzZ2xfaGFuZGxlKTsKKwkJCXNwaW5fdW5sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0gTlVMTDsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBiZWlzY3NpX2lvdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgdW5zaWduZWQgaW50IG51bV9zZywgdW5zaWduZWQgaW50IHhmZXJsZW4sCisJCQkgIHVuc2lnbmVkIGludCB3cml0ZWRpcikKK3sKKworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwlzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgZG9vcmJlbGwgPSAwOworCisJcHdyYiA9IGlvX3Rhc2stPnB3cmJfaGFuZGxlLT5wd3JiOworCWlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5leHBfc3RhdHNuID0gMDsKKwlpb190YXNrLT5iaHNfbGVuID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfYmhzKTsKKworCWlmICh3cml0ZWRpcikgeworCQlTRV9ERUJVRyhEQkdfTFZMXzQsICIgV1JJVEUgQ29tbWFuZCBcdCIpOworCQltZW1zZXQoJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LCAwLCA0OCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBpdHQsCisJCQkgICAgICAmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsCisJCQkgICAgICAodW5zaWduZWQgaW50KWlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5pdHQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9kYXRhX291dCwgb3Bjb2RlLAorCQkJICAgICAgJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LAorCQkJICAgICAgSVNDU0lfT1BDT0RFX1NDU0lfREFUQV9PVVQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9kYXRhX291dCwgZmluYWxfYml0LAorCQkJICAgICAgJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LCAxKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIElOSV9XUl9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKKwl9IGVsc2UgeworCQlTRV9ERUJVRyhEQkdfTFZMXzQsICJSRUFEIENvbW1hbmQgXHQiKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIElOSV9SRF9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAwKTsKKwl9CisJbWVtY3B5KCZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdS4KKwkgICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBsdW4pIC8gMzJdLAorCSAgICAgICBpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIubHVuLCBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgbHVuLCBwd3JiLAorCQkgICAgICBjcHVfdG9fYmUxNigodW5zaWduZWQgc2hvcnQpaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLgorCQkJCSAgbHVuWzBdKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHIydF9leHBfZHRsLCBwd3JiLCB4ZmVybGVuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgd3JiX2lkeCwgcHdyYiwKKwkJICAgICAgaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGNtZHNuX2l0dCwgcHdyYiwKKwkJICAgICAgYmUzMl90b19jcHUodGFzay0+Y21kc24pKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dsX2ljZF9pZHgsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgpOworCisJaHdpX3dyaXRlX3NnbChwd3JiLCBzZywgbnVtX3NnLCBpb190YXNrKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBwdHIybmV4dHdyYiwgcHdyYiwKKwkJICAgICAgaW9fdGFzay0+cHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXgpOworCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKKworCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOworCWRvb3JiZWxsIHw9IChpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYKKwkJICAgICBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKSA8PCBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVDsKKwlkb29yYmVsbCB8PSAxIDw8IERCX0RFRl9QRFVfTlVNX1BPU1RFRF9TSElGVDsKKworCWlvd3JpdGUzMihkb29yYmVsbCwgcGhiYS0+ZGJfdmEgKyBEQl9UWFVMUDBfT0ZGU0VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZWlzY3NpX210YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmFib3J0ZWRfaW9fdGFzaywgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwlzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgZG9vcmJlbGwgPSAwOworCXN0cnVjdCBpc2NzaV90YXNrICphYm9ydGVkX3Rhc2s7CisKKwlwd3JiID0gaW9fdGFzay0+cHdyYl9oYW5kbGUtPnB3cmI7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGNtZHNuX2l0dCwgcHdyYiwKKwkJICAgICAgYmUzMl90b19jcHUodGFzay0+Y21kc24pKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgd3JiX2lkeCwgcHdyYiwKKwkJICAgICAgaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnbF9pY2RfaWR4LCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4KTsKKworCXN3aXRjaCAodGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgeworCWNhc2UgSVNDU0lfT1BfTE9HSU46CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLCBUR1RfRE1fQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLCAxKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9OT09QX09VVDoKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIElOSV9SRF9DTUQpOworCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX1RFWFQ6CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLCBJTklfV1JfQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMSk7CisJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfU0NTSV9UTUZVTkM6CisJCWFib3J0ZWRfdGFzayA9IGlzY3NpX2l0dF90b190YXNrKGNvbm4sCisJCQkJCSgoc3RydWN0IGlzY3NpX3RtICopdGFzay0+aGRyKS0+cnR0KTsKKwkJIGlmICghYWJvcnRlZF90YXNrKQorCQkJcmV0dXJuIDA7CisJCWFib3J0ZWRfaW9fdGFzayA9IGFib3J0ZWRfdGFzay0+ZGRfZGF0YTsKKwkJaWYgKCFhYm9ydGVkX2lvX3Rhc2stPnNjc2lfY21uZCkKKwkJCXJldHVybiAwOworCisJCW1nbXRfaW52YWxpZGF0ZV9pY2RzKHBoYmEsCisJCQkJICAgICBhYm9ydGVkX2lvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgsCisJCQkJICAgICBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1RNRl9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CisJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfTE9HT1VUOgorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJCUhXSF9UWVBFX0xPR09VVCk7CisJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAib3Bjb2RlID0lZCBOb3Qgc3VwcG9ydGVkIFxuIiwKKwkJCSB0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHIydF9leHBfZHRsLCBwd3JiLAorCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5kYXRhX2NvdW50KSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHB0cjJuZXh0d3JiLCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CisJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOworCisJZG9vcmJlbGwgfD0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7CisJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgorCQkgICAgIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOworCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOworCWlvd3JpdGUzMihkb29yYmVsbCwgcGhiYS0+ZGJfdmEgKyBEQl9UWFVMUDBfT0ZGU0VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZWlzY3NpX3Rhc2tfeG1pdChzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IHNjc2lfY21uZCAqc2MgPSB0YXNrLT5zYzsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IG51bV9zZzsKKwl1bnNpZ25lZCBpbnQgIHdyaXRlZGlyID0gMCwgeGZlcmxlbiA9IDA7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzQsICJcbiBjaWQ9JWQgSW4gYmVpc2NzaV90YXNrX3htaXQgdGFzaz0lcCBjb25uPSVwIFx0IgorCQkgImJlaXNjc2lfY29ubj0lcCBcbiIsIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwKKwkJIHRhc2ssIGNvbm4sIGJlaXNjc2lfY29ubik7CisJaWYgKCFzYykKKwkJcmV0dXJuIGJlaXNjc2lfbXRhc2sodGFzayk7CisKKwlpb190YXNrLT5zY3NpX2NtbmQgPSBzYzsKKwludW1fc2cgPSBzY3NpX2RtYV9tYXAoc2MpOworCWlmIChudW1fc2cgPCAwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIiBzY3NpX2RtYV9tYXAgRmFpbGVkXG4iKQorCQlyZXR1cm4gbnVtX3NnOworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzQsICJ4ZmVybGVuPTB4JTA4eCBzY21kPSVwIG51bV9zZz0lZCBzZXJudW09JWx1XG4iLAorCQkgIChzY3NpX2J1ZmZsZW4oc2MpKSwgc2MsIG51bV9zZywgc2MtPnNlcmlhbF9udW1iZXIpOworCXhmZXJsZW4gPSBzY3NpX2J1ZmZsZW4oc2MpOworCXNnID0gc2NzaV9zZ2xpc3Qoc2MpOworCWlmIChzYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgeworCQl3cml0ZWRpciA9IDE7CisJCVNFX0RFQlVHKERCR19MVkxfNCwgInRhc2stPmltbV9jb3VudD0weCUwOHggXG4iLAorCQkJIHRhc2stPmltbV9jb3VudCk7CisJfSBlbHNlCisJCXdyaXRlZGlyID0gMDsKKwlyZXR1cm4gYmVpc2NzaV9pb3Rhc2sodGFzaywgc2csIG51bV9zZywgeGZlcmxlbiwgd3JpdGVkaXIpOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IE5VTEw7CisKKwlwaGJhID0gKHN0cnVjdCBiZWlzY3NpX2hiYSAqKXBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOworCWlmICghcGhiYSkgeworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImJlaXNjc2lfcmVtb3ZlIGNhbGxlZCB3aXRoIG5vIHBoYmEgXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWh3aV9kaXNhYmxlX2ludHIocGhiYSk7CisJaWYgKHBoYmEtPnBjaWRldi0+aXJxKQorCQlmcmVlX2lycShwaGJhLT5wY2lkZXYtPmlycSwgcGhiYSk7CisJZGVzdHJveV93b3JrcXVldWUocGhiYS0+d3EpOworCWlmIChibGtfaW9wb2xsX2VuYWJsZWQpCisJCWJsa19pb3BvbGxfZGlzYWJsZSgmcGhiYS0+aW9wb2xsKTsKKworCWJlaXNjc2lfY2xlYW5fcG9ydChwaGJhKTsKKwliZWlzY3NpX2ZyZWVfbWVtKHBoYmEpOworCWJlaXNjc2lfdW5tYXBfcGNpX2Z1bmN0aW9uKHBoYmEpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+cGNpZGV2LAorCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5zaXplLAorCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC52YSwKKwkJCSAgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQuZG1hKTsKKwlpc2NzaV9ob3N0X3JlbW92ZShwaGJhLT5zaG9zdCk7CisJcGNpX2Rldl9wdXQocGhiYS0+cGNpZGV2KTsKKwlpc2NzaV9ob3N0X2ZyZWUocGhiYS0+c2hvc3QpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiZWlzY3NpX2Rldl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBOVUxMOworCWludCByZXQ7CisKKwlyZXQgPSBiZWlzY3NpX2VuYWJsZV9wY2kocGNpZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJICAgICAiRmFpbGVkIHRvIGVuYWJsZSBwY2kgZGV2aWNlIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGhiYSA9IGJlaXNjc2lfaGJhX2FsbG9jKHBjaWRldik7CisJaWYgKCFwaGJhKSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJIiBGYWlsZWQgaW4gYmVpc2NzaV9oYmFfYWxsb2MgXG4iKTsKKwkJZ290byBkaXNhYmxlX3BjaTsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBwaGJhKTsKKwlyZXQgPSBiZV9jdHJsX2luaXQocGhiYSwgcGNpZGV2KTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkJIkZhaWxlZCBpbiBiZV9jdHJsX2luaXRcbiIpOworCQlnb3RvIGhiYV9mcmVlOworCX0KKworCXNwaW5fbG9ja19pbml0KCZwaGJhLT5pb19zZ2xfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwaGJhLT5pc3JfbG9jayk7CisJYmVpc2NzaV9nZXRfcGFyYW1zKHBoYmEpOworCXJldCA9IGJlaXNjc2lfaW5pdF9wb3J0KHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkgICAgICJGYWlsZWQgaW4gYmVpc2NzaV9pbml0X3BvcnRcbiIpOworCQlnb3RvIGZyZWVfcG9ydDsKKwl9CisKKwlzbnByaW50ZihwaGJhLT53cV9uYW1lLCBzaXplb2YocGhiYS0+d3FfbmFtZSksICJiZWlzY3NpX3FfaXJxJXUiLAorCQkgcGhiYS0+c2hvc3QtPmhvc3Rfbm8pOworCXBoYmEtPndxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUocGhiYS0+d3FfbmFtZSk7CisJaWYgKCFwaGJhLT53cSkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgd29yayBxdWV1ZVxuIik7CisJCWdvdG8gZnJlZV90d3E7CisJfQorCisJSU5JVF9XT1JLKCZwaGJhLT53b3JrX2NxcywgYmVpc2NzaV9wcm9jZXNzX2FsbF9jcXMpOworCisJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkgeworCQlibGtfaW9wb2xsX2luaXQoJnBoYmEtPmlvcG9sbCwgYmVfaW9wb2xsX2J1ZGdldCwgYmVfaW9wb2xsKTsKKwkJYmxrX2lvcG9sbF9lbmFibGUoJnBoYmEtPmlvcG9sbCk7CisJfQorCisJcmV0ID0gYmVpc2NzaV9pbml0X2lycXMocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSAgICAgIkZhaWxlZCB0byBiZWlzY3NpX2luaXRfaXJxc1xuIik7CisJCWdvdG8gZnJlZV9ibGtlbmJsZDsKKwl9CisJcmV0ID0gaHdpX2VuYWJsZV9pbnRyKHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkgICAgICJGYWlsZWQgdG8gaHdpX2VuYWJsZV9pbnRyXG4iKTsKKwkJZ290byBmcmVlX2N0cmxyOworCX0KKworCVNFX0RFQlVHKERCR19MVkxfOCwgIlxuXG5cbiBTVUNDRVNTIC0gRFJJVkVSIExPQURFRCBcblxuXG4iKTsKKwlyZXR1cm4gMDsKKworZnJlZV9jdHJscjoKKwlpZiAocGhiYS0+cGNpZGV2LT5pcnEpCisJCWZyZWVfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBwaGJhKTsKK2ZyZWVfYmxrZW5ibGQ6CisJZGVzdHJveV93b3JrcXVldWUocGhiYS0+d3EpOworCWlmIChibGtfaW9wb2xsX2VuYWJsZWQpCisJCWJsa19pb3BvbGxfZGlzYWJsZSgmcGhiYS0+aW9wb2xsKTsKK2ZyZWVfdHdxOgorCWJlaXNjc2lfY2xlYW5fcG9ydChwaGJhKTsKKwliZWlzY3NpX2ZyZWVfbWVtKHBoYmEpOworZnJlZV9wb3J0OgorCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+cGNpZGV2LAorCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5zaXplLAorCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC52YSwKKwkJCSAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5kbWEpOworCWJlaXNjc2lfdW5tYXBfcGNpX2Z1bmN0aW9uKHBoYmEpOworaGJhX2ZyZWU6CisJaXNjc2lfaG9zdF9yZW1vdmUocGhiYS0+c2hvc3QpOworCXBjaV9kZXZfcHV0KHBoYmEtPnBjaWRldik7CisJaXNjc2lfaG9zdF9mcmVlKHBoYmEtPnNob3N0KTsKK2Rpc2FibGVfcGNpOgorCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBpc2NzaV90cmFuc3BvcnQgYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuY2FwcyA9IENBUF9SRUNPVkVSWV9MMCB8IENBUF9IRFJER1NUIHwKKwkJQ0FQX01VTFRJX1IyVCB8IENBUF9EQVRBREdTVCB8IENBUF9EQVRBX1BBVEhfT0ZGTE9BRCwKKwkucGFyYW1fbWFzayA9IElTQ1NJX01BWF9SRUNWX0RMRU5HVEggfAorCQlJU0NTSV9NQVhfWE1JVF9ETEVOR1RIIHwKKwkJSVNDU0lfSERSREdTVF9FTiB8CisJCUlTQ1NJX0RBVEFER1NUX0VOIHwKKwkJSVNDU0lfSU5JVElBTF9SMlRfRU4gfAorCQlJU0NTSV9NQVhfUjJUIHwKKwkJSVNDU0lfSU1NX0RBVEFfRU4gfAorCQlJU0NTSV9GSVJTVF9CVVJTVCB8CisJCUlTQ1NJX01BWF9CVVJTVCB8CisJCUlTQ1NJX1BEVV9JTk9SREVSX0VOIHwKKwkJSVNDU0lfREFUQVNFUV9JTk9SREVSX0VOIHwKKwkJSVNDU0lfRVJMIHwKKwkJSVNDU0lfQ09OTl9QT1JUIHwKKwkJSVNDU0lfQ09OTl9BRERSRVNTIHwKKwkJSVNDU0lfRVhQX1NUQVRTTiB8CisJCUlTQ1NJX1BFUlNJU1RFTlRfUE9SVCB8CisJCUlTQ1NJX1BFUlNJU1RFTlRfQUREUkVTUyB8CisJCUlTQ1NJX1RBUkdFVF9OQU1FIHwgSVNDU0lfVFBHVCB8CisJCUlTQ1NJX1VTRVJOQU1FIHwgSVNDU0lfUEFTU1dPUkQgfAorCQlJU0NTSV9VU0VSTkFNRV9JTiB8IElTQ1NJX1BBU1NXT1JEX0lOIHwKKwkJSVNDU0lfRkFTVF9BQk9SVCB8IElTQ1NJX0FCT1JUX1RNTyB8CisJCUlTQ1NJX0xVX1JFU0VUX1RNTyB8CisJCUlTQ1NJX1BJTkdfVE1PIHwgSVNDU0lfUkVDVl9UTU8gfAorCQlJU0NTSV9JRkFDRV9OQU1FIHwgSVNDU0lfSU5JVElBVE9SX05BTUUsCisJLmhvc3RfcGFyYW1fbWFzayA9IElTQ1NJX0hPU1RfSFdBRERSRVNTIHwgSVNDU0lfSE9TVF9JUEFERFJFU1MgfAorCQkJCUlTQ1NJX0hPU1RfSU5JVElBVE9SX05BTUUsCisJLmNyZWF0ZV9zZXNzaW9uID0gYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZSwKKwkuZGVzdHJveV9zZXNzaW9uID0gYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3ksCisJLmNyZWF0ZV9jb25uID0gYmVpc2NzaV9jb25uX2NyZWF0ZSwKKwkuYmluZF9jb25uID0gYmVpc2NzaV9jb25uX2JpbmQsCisJLmRlc3Ryb3lfY29ubiA9IGlzY3NpX2Nvbm5fdGVhcmRvd24sCisJLnNldF9wYXJhbSA9IGJlaXNjc2lfc2V0X3BhcmFtLAorCS5nZXRfY29ubl9wYXJhbSA9IGJlaXNjc2lfY29ubl9nZXRfcGFyYW0sCisJLmdldF9zZXNzaW9uX3BhcmFtID0gaXNjc2lfc2Vzc2lvbl9nZXRfcGFyYW0sCisJLmdldF9ob3N0X3BhcmFtID0gYmVpc2NzaV9nZXRfaG9zdF9wYXJhbSwKKwkuc3RhcnRfY29ubiA9IGJlaXNjc2lfY29ubl9zdGFydCwKKwkuc3RvcF9jb25uID0gYmVpc2NzaV9jb25uX3N0b3AsCisJLnNlbmRfcGR1ID0gaXNjc2lfY29ubl9zZW5kX3BkdSwKKwkueG1pdF90YXNrID0gYmVpc2NzaV90YXNrX3htaXQsCisJLmNsZWFudXBfdGFzayA9IGJlaXNjc2lfY2xlYW51cF90YXNrLAorCS5hbGxvY19wZHUgPSBiZWlzY3NpX2FsbG9jX3BkdSwKKwkucGFyc2VfcGR1X2l0dCA9IGJlaXNjc2lfcGFyc2VfcGR1LAorCS5nZXRfc3RhdHMgPSBiZWlzY3NpX2Nvbm5fZ2V0X3N0YXRzLAorCS5lcF9jb25uZWN0ID0gYmVpc2NzaV9lcF9jb25uZWN0LAorCS5lcF9wb2xsID0gYmVpc2NzaV9lcF9wb2xsLAorCS5lcF9kaXNjb25uZWN0ID0gYmVpc2NzaV9lcF9kaXNjb25uZWN0LAorCS5zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0ID0gaXNjc2lfc2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiZWlzY3NpX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkucHJvYmUgPSBiZWlzY3NpX2Rldl9wcm9iZSwKKwkucmVtb3ZlID0gYmVpc2NzaV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYmVpc2NzaV9wY2lfaWRfdGFibGUKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJlaXNjc2lfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJYmVpc2NzaV9zY3NpX3RyYW5zcG9ydCA9CisJCQlpc2NzaV9yZWdpc3Rlcl90cmFuc3BvcnQoJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0KTsKKwlpZiAoIWJlaXNjc2lfc2NzaV90cmFuc3BvcnQpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJiZWlzY3NpX21vZHVsZV9pbml0IC0gVW5hYmxlIHRvICByZWdpc3RlciBiZWlzY3NpIgorCQkJICJ0cmFuc3BvcnQuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9tb2R1bGVfaW5pdCwgdHQ9JXAgXG4iLAorCQkgJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0KTsKKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJlaXNjc2lfcGNpX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgImJlaXNjc2lfbW9kdWxlX2luaXQgLSBVbmFibGUgdG8gIHJlZ2lzdGVyIgorCQkJICJiZWlzY3NpIHBjaSBkcml2ZXIuXG4iKTsKKwkJZ290byB1bnJlZ2lzdGVyX2lzY3NpX3RyYW5zcG9ydDsKKwl9CisJcmV0dXJuIDA7CisKK3VucmVnaXN0ZXJfaXNjc2lfdHJhbnNwb3J0OgorCWlzY3NpX3VucmVnaXN0ZXJfdHJhbnNwb3J0KCZiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJlaXNjc2lfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJlaXNjc2lfcGNpX2RyaXZlcik7CisJaXNjc2lfdW5yZWdpc3Rlcl90cmFuc3BvcnQoJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0KTsKK30KKworbW9kdWxlX2luaXQoYmVpc2NzaV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChiZWlzY3NpX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzliNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCkBAIC0wLDAgKzEsODM3IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICoKKyAqLworCisjaWZuZGVmIF9CRUlTQ1NJX01BSU5fCisjZGVmaW5lIF9CRUlTQ1NJX01BSU5fCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvYmxrLWlvcG9sbC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9pc2NzaV9wcm90by5oPgorI2luY2x1ZGUgPHNjc2kvbGliaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CisKKyNpbmNsdWRlICJiZS5oIgorCisKKworI2RlZmluZSBEUlZfTkFNRQkJImJlMmlzY3NpIgorI2RlZmluZSBCVUlMRF9TVFIJCSIyLjAuNTI3LjAiCisKKyNkZWZpbmUgQkVfTkFNRQkJCSJTZXJ2ZXJFbmdpbmVzIEJsYWRlRW5naW5lMiIgXAorCQkJCSJMaW51eCBpU0NTSSBEcml2ZXIgdmVyc2lvbiIgQlVJTERfU1RSCisjZGVmaW5lIERSVl9ERVNDCQlCRV9OQU1FICIgIiAiRHJpdmVyIgorCisjZGVmaW5lIEJFX1ZFTkRPUl9JRCAJCTB4MTlBMgorI2RlZmluZSBCRV9ERVZJQ0VfSUQxCQkweDIxMgorI2RlZmluZSBPQ19ERVZJQ0VfSUQxCQkweDcwMgorI2RlZmluZSBPQ19ERVZJQ0VfSUQyCQkweDcwMworCisjZGVmaW5lIEJFMl9NQVhfU0VTU0lPTlMJNjQKKyNkZWZpbmUgQkUyX0NNRFNfUEVSX0NYTgkxMjgKKyNkZWZpbmUgQkUyX0xPR09VVFMJCUJFMl9NQVhfU0VTU0lPTlMKKyNkZWZpbmUgQkUyX1RNRlMJCTE2CisjZGVmaW5lIEJFMl9OT1BPVVRfUkVRCQkxNgorI2RlZmluZSBCRTJfQVNZTkNQRFVTCQlCRTJfTUFYX1NFU1NJT05TCisjZGVmaW5lIEJFMl9NQVhfSUNEUwkJMjA0OAorI2RlZmluZSBCRTJfU0dFCQkJMzIKKyNkZWZpbmUgQkUyX0RFRlBEVV9IRFJfU1oJNjQKKyNkZWZpbmUgQkUyX0RFRlBEVV9EQVRBX1NaCTgxOTIKKyNkZWZpbmUgQkUyX0lPX0RFUFRIIFwKKwkoQkUyX01BWF9JQ0RTIC8gMiAtIChCRTJfTE9HT1VUUyArIEJFMl9UTUZTICsgQkUyX05PUE9VVF9SRVEpKQorCisjZGVmaW5lIEJFSVNDU0lfU0dMSVNUX0VMRU1FTlRTCUJFMl9TR0UKKworI2RlZmluZSBCRUlTQ1NJX01BWF9DTU5EUwkxMDI0CS8qIE1heCBJTydzIHBlciBDdHJsciBzaHQtPmNhbl9xdWV1ZSAqLworI2RlZmluZSBCRUlTQ1NJX0NNRF9QRVJfTFVOCTEyOAkvKiBzY3NpX2hvc3QtPmNtZF9wZXJfbHVuICovCisjZGVmaW5lIEJFSVNDU0lfTUFYX1NFQ1RPUlMJMjA0OAkvKiBzY3NpX2hvc3QtPm1heF9zZWN0b3JzICovCisKKyNkZWZpbmUgQkVJU0NTSV9NQVhfQ01EX0xFTgkxNgkvKiBzY3NpX2hvc3QtPm1heF9jbWRfbGVuICovCisjZGVmaW5lIEJFSVNDU0lfTlVNX01BWF9MVU4JMjU2CS8qIHNjc2lfaG9zdC0+bWF4X2x1biAqLworI2RlZmluZSBCRUlTQ1NJX05VTV9ERVZJQ0VTX1NVUFBPUlRFRAkweDAxCisjZGVmaW5lIEJFSVNDU0lfTUFYX0ZSQUdTX0lOSVQJMTkyCisjZGVmaW5lIEJFX05VTV9NU0lYX0VOVFJJRVMgCTEKKyNkZWZpbmUgTVBVX0VQX1NFTUFQSE9SRSAJMHhhYworCisjZGVmaW5lIEJFX1NFTlNFX0lORk9fU0laRQkJMjU4CisjZGVmaW5lIEJFX0lTQ1NJX1BEVV9IRUFERVJfU0laRQk2NAorI2RlZmluZSBCRV9NSU5fTUVNX1NJWkUJCQkxNjM4NAorCisjZGVmaW5lIElJT0NfU0NTSV9EQVRBICAgICAgICAgICAgICAgICAgMHgwNQkvKiBXcml0ZSBPcGVyYXRpb24gKi8KKworI2RlZmluZSBEQkdfTFZMCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgREJHX0xWTF8xCQkJMHgwMDAwMDAwMQorI2RlZmluZSBEQkdfTFZMXzIJCQkweDAwMDAwMDAyCisjZGVmaW5lIERCR19MVkxfMwkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgREJHX0xWTF80CQkJMHgwMDAwMDAwOAorI2RlZmluZSBEQkdfTFZMXzUJCQkweDAwMDAwMDEwCisjZGVmaW5lIERCR19MVkxfNgkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgREJHX0xWTF83CQkJMHgwMDAwMDA0MAorI2RlZmluZSBEQkdfTFZMXzgJCQkweDAwMDAwMDgwCisKKyNkZWZpbmUgU0VfREVCVUcoZGVidWdfbWFzaywgZm10LCBhcmdzLi4uKQkJXAorZG8gewkJCQkJCQlcCisJaWYgKGRlYnVnX21hc2sgJiBEQkdfTFZMKSB7CQkJXAorCQlwcmludGsoS0VSTl9FUlIgIiglcygpOiVkKToiLCBfX2Z1bmNfXywgX19MSU5FX18pO1wKKwkJcHJpbnRrKGZtdCwgIyNhcmdzKTsJCQlcCisJfQkJCQkJCVwKK30gd2hpbGUgKDApOworCisvKioKKyAqIGhhcmR3YXJlIG5lZWRzIHRoZSBhc3luYyBQRFUgYnVmZmVycyB0byBiZSBwb3N0ZWQgaW4gbXVsdGlwbGVzIG9mIDgKKyAqIFNvIGhhdmUgYXRsZWFzdCA4IG9mIHRoZW0gYnkgZGVmYXVsdAorICovCisKKyNkZWZpbmUgSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2kpCShwaHdpLT5waHdpX2N0eHQtPnBhc3luY19jdHgpCisKKy8qKioqKioqKiogTWVtb3J5IEJBUiByZWdpc3RlciAqKioqKioqKioqKiovCisjZGVmaW5lIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQgCTB4ZmMKKy8qKgorICogSG9zdCBJbnRlcnJ1cHQgRW5hYmxlLCBpZiBzZXQgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBhbHRob3VnaCAiUENJIEludGVycnVwdAorICogRGlzYWJsZSIgbWF5IHN0aWxsIGdsb2JhbGx5IGJsb2NrIGludGVycnVwdHMgaW4gYWRkaXRpb24gdG8gaW5kaXZpZHVhbAorICogaW50ZXJydXB0IG1hc2tzOyBhIG1lY2hhbmlzbSBmb3IgdGhlIGRldmljZSBkcml2ZXIgdG8gYmxvY2sgYWxsIGludGVycnVwdHMKKyAqIGF0b21pY2FsbHkgd2l0aG91dCBoYXZpbmcgdG8gYXJiaXRyYXRlIGZvciB0aGUgUENJIEludGVycnVwdCBEaXNhYmxlIGJpdAorICogd2l0aCB0aGUgT1MuCisgKi8KKyNkZWZpbmUgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSwkoMSA8PCAyOSkJLyogYml0IDI5ICovCisKKy8qKioqKioqKiogSVNSMCBSZWdpc3RlciBvZmZzZXQgKioqKioqKioqKi8KKyNkZWZpbmUgQ0VWX0lTUjBfT0ZGU0VUIAkJCTB4QzE4CisjZGVmaW5lIENFVl9JU1JfU0laRQkJCQk0CisKKy8qKgorICogTWFjcm9zIGZvciByZWFkaW5nL3dyaXRpbmcgYSBwcm90ZWN0aW9uIGRvbWFpbiBvciBDU1IgcmVnaXN0ZXJzCisgKiBpbiBCbGFkZUVuZ2luZS4KKyAqLworCisjZGVmaW5lIERCX1RYVUxQMF9PRkZTRVQgMHg0MAorI2RlZmluZSBEQl9SWFVMUDBfT0ZGU0VUIDB4QTAKKy8qKioqKioqKiogRXZlbnQgUSBkb29yIGJlbGwgKioqKioqKioqKioqKi8KKyNkZWZpbmUgREJfRVFfT0ZGU0VUCQkJREJfQ1FfT0ZGU0VUCisjZGVmaW5lIERCX0VRX1JJTkdfSURfTUFTSwkJMHgxRkYJLyogYml0cyAwIC0gOCAqLworLyogQ2xlYXIgdGhlIGludGVycnVwdCBmb3IgdGhpcyBlcSAqLworI2RlZmluZSBEQl9FUV9DTFJfU0hJRlQJCQkoOSkJLyogYml0IDkgKi8KKy8qIE11c3QgYmUgMSAqLworI2RlZmluZSBEQl9FUV9FVk5UX1NISUZUCQkoMTApCS8qIGJpdCAxMCAqLworLyogTnVtYmVyIG9mIGV2ZW50IGVudHJpZXMgcHJvY2Vzc2VkICovCisjZGVmaW5lIERCX0VRX05VTV9QT1BQRURfU0hJRlQJCSgxNikJLyogYml0cyAxNiAtIDI4ICovCisvKiBSZWFybSBiaXQgKi8KKyNkZWZpbmUgREJfRVFfUkVBUk1fU0hJRlQJCSgyOSkJLyogYml0IDI5ICovCisKKy8qKioqKioqKiogQ29tcGwgUSBkb29yIGJlbGwgKioqKioqKioqKioqKi8KKyNkZWZpbmUgREJfQ1FfT0ZGU0VUIAkJCTB4MTIwCisjZGVmaW5lIERCX0NRX1JJTkdfSURfTUFTSwkJMHgzRkYJLyogYml0cyAwIC0gOSAqLworLyogTnVtYmVyIG9mIGV2ZW50IGVudHJpZXMgcHJvY2Vzc2VkICovCisjZGVmaW5lIERCX0NRX05VTV9QT1BQRURfU0hJRlQJCSgxNikgCS8qIGJpdHMgMTYgLSAyOCAqLworLyogUmVhcm0gYml0ICovCisjZGVmaW5lIERCX0NRX1JFQVJNX1NISUZUCQkoMjkpIAkvKiBiaXQgMjkgKi8KKworI2RlZmluZSBHRVRfSFdJX0NPTlRST0xMRVJfV1MocGMpCShwYy0+cGh3aV9jdHJscikKKyNkZWZpbmUgSFdJX0dFVF9ERUZfQlVGUV9JRChwYykgKCgoc3RydWN0IGh3aV9jb250cm9sbGVyICopXAorCQkoR0VUX0hXSV9DT05UUk9MTEVSX1dTKHBjKSkpLT5kZWZhdWx0X3BkdV9kYXRhLmlkKQorI2RlZmluZSBIV0lfR0VUX0RFRl9IRFJRX0lEKHBjKSAoKChzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKilcCisJCShHRVRfSFdJX0NPTlRST0xMRVJfV1MocGMpKSktPmRlZmF1bHRfcGR1X2hkci5pZCkKKworI2RlZmluZSBQQUdFU19SRVFVSVJFRCh4KSBcCisJKCh4IDwgUEFHRV9TSVpFKSA/IDEgOiAgKCh4ICsgUEFHRV9TSVpFIC0gMSkgLyBQQUdFX1NJWkUpKQorCitlbnVtIGJlX21lbV9lbnVtIHsKKwlIV0lfTUVNX0FERE5fQ09OVEVYVCwKKwlIV0lfTUVNX0NRLAorCUhXSV9NRU1fRVEsCisJSFdJX01FTV9XUkIsCisJSFdJX01FTV9XUkJILAorCUhXSV9NRU1fU0dMSCwJLyogNSAqLworCUhXSV9NRU1fU0dFLAorCUhXSV9NRU1fQVNZTkNfSEVBREVSX0JVRiwKKwlIV0lfTUVNX0FTWU5DX0RBVEFfQlVGLAorCUhXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkcsCisJSFdJX01FTV9BU1lOQ19EQVRBX1JJTkcsCS8qIDEwICovCisJSFdJX01FTV9BU1lOQ19IRUFERVJfSEFORExFLAorCUhXSV9NRU1fQVNZTkNfREFUQV9IQU5ETEUsCisJSFdJX01FTV9BU1lOQ19QRFVfQ09OVEVYVCwKKwlJU0NTSV9NRU1fR0xPQkFMX0hFQURFUiwKKwlTRV9NRU1fTUFYICAJLyogMTUgKi8KK307CisKK3N0cnVjdCBiZV9idXNfYWRkcmVzczMyIHsKKwl1bnNpZ25lZCBpbnQgYWRkcmVzc19sbzsKKwl1bnNpZ25lZCBpbnQgYWRkcmVzc19oaTsKK307CisKK3N0cnVjdCBiZV9idXNfYWRkcmVzczY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcmVzczsKK307CisKK3N0cnVjdCBiZV9idXNfYWRkcmVzcyB7CisJdW5pb24geworCQlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MzMiBhMzI7CisJCXN0cnVjdCBiZV9idXNfYWRkcmVzczY0IGE2NDsKKwl9IHU7Cit9OworCitzdHJ1Y3QgbWVtX2FycmF5IHsKKwlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgYnVzX2FkZHJlc3M7CS8qIEJ1cyBhZGRyZXNzIG9mIGxvY2F0aW9uICovCisJdm9pZCAqdmlydHVhbF9hZGRyZXNzOwkJLyogdmlydHVhbCBhZGRyZXNzIHRvIHRoZSBsb2NhdGlvbiAqLworCXVuc2lnbmVkIGludCBzaXplOwkJLyogU2l6ZSByZXF1aXJlZCBieSBtZW1vcnkgYmxvY2sgKi8KK307CisKK3N0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciB7CisJdW5zaWduZWQgaW50IGluZGV4OwkvKiBJbmRleCBvZiB0aGlzIG1lbW9yeSBwYXJhbWV0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CS8qIHR5cGUgaW5kaWNhdGVzIGNhY2hlZC9ub24tY2FjaGVkICovCisJdW5zaWduZWQgaW50IG51bV9lbGVtZW50czsJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMKKwkJCQkJICogZGVzY3JpcHRvcgorCQkJCQkgKi8KKwl1bnNpZ25lZCBpbnQgYWxpZ25tZW50X21hc2s7CS8qIEFsaWdubWVudCBtYXNrIGZvciB0aGlzIGJsb2NrICovCisJdW5zaWduZWQgaW50IHNpemVfaW5fYnl0ZXM7CS8qIFNpemUgcmVxdWlyZWQgYnkgbWVtb3J5IGJsb2NrICovCisJc3RydWN0IG1lbV9hcnJheSAqbWVtX2FycmF5OworfTsKKworc3RydWN0IHNnbF9oYW5kbGUgeworCXVuc2lnbmVkIGludCBzZ2xfaW5kZXg7CisJc3RydWN0IGlzY3NpX3NnZSAqcGZyYWc7Cit9OworCitzdHJ1Y3QgaGJhX3BhcmFtZXRlcnMgeworCXVuc2lnbmVkIGludCBpb3NfcGVyX2N0cmw7CisJdW5zaWduZWQgaW50IGN4bnNfcGVyX2N0cmw7CisJdW5zaWduZWQgaW50IGFzeW5jcGR1c19wZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgaWNkc19wZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgbnVtX3NnZV9wZXJfaW87CisJdW5zaWduZWQgaW50IGRlZnBkdV9oZHJfc3o7CisJdW5zaWduZWQgaW50IGRlZnBkdV9kYXRhX3N6OworCXVuc2lnbmVkIGludCBudW1fY3FfZW50cmllczsKKwl1bnNpZ25lZCBpbnQgbnVtX2VxX2VudHJpZXM7CisJdW5zaWduZWQgaW50IHdyYnNfcGVyX2N4bjsKKwl1bnNpZ25lZCBpbnQgY3Jhc2htb2RlOworCXVuc2lnbmVkIGludCBoYmFfbnVtOworCisJdW5zaWduZWQgaW50IG1nbXRfd3Nfc3o7CisJdW5zaWduZWQgaW50IGh3aV93c19zejsKKworCXVuc2lnbmVkIGludCBldG87CisJdW5zaWduZWQgaW50IGxkdG87CisKKwl1bnNpZ25lZCBpbnQgZGJnX2ZsYWdzOworCXVuc2lnbmVkIGludCBudW1fY3huOworCisJdW5zaWduZWQgaW50IGVxX3RpbWVyOworCS8qKgorCSAqIFRoZXNlIGFyZSBjYWxjdWxhdGVkIGZyb20gb3RoZXIgcGFyYW1zLiBUaGV5J3JlIGhlcmUKKwkgKiBmb3IgZGVidWcgcHVycG9zZXMKKwkgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX21jY19wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX21jY19jcV9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2NxX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fZXFfcGFnZXM7CisKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9idWZfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9hc3luY19wZHVfYnVmX3NnbF9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9idWZfY3FfcGFnZXM7CisKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9oZHJfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9hc3luY19wZHVfaGRyX3NnbF9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9oZHJfY3FfcGFnZXM7CisKKwl1bnNpZ25lZCBpbnQgbnVtX3NnZTsKK307CisKK3N0cnVjdCBiZWlzY3NpX2hiYSB7CisJc3RydWN0IGhiYV9wYXJhbWV0ZXJzIHBhcmFtczsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJdW5zaWduZWQgaW50IG1lbV9yZXFbU0VfTUVNX01BWF07CisJLyogUENJIEJBUiBtYXBwZWQgYWRkcmVzc2VzICovCisJdTggX19pb21lbSAqY3NyX3ZhOwkvKiBDU1IgKi8KKwl1OCBfX2lvbWVtICpkYl92YTsJLyogRG9vciAgQmVsbCAgKi8KKwl1OCBfX2lvbWVtICpwY2lfdmE7CS8qIFBDSSBDb25maWcgKi8KKwlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgY3NyX3BhOwkvKiBDU1IgKi8KKwlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgZGJfcGE7CS8qIENTUiAqLworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBwY2lfcGE7CS8qIENTUiAqLworCS8qIFBDSSByZXByZXNlbnRhdGlvbiBvZiBvdXIgSEJBICovCisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisJdW5zaWduZWQgc2hvcnQgYXNpY19yZXZpc2lvbjsKKwlzdHJ1Y3QgYmxrX2lvcG9sbAlpb3BvbGw7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICppbml0X21lbTsKKworCXVuc2lnbmVkIHNob3J0IGlvX3NnbF9hbGxvY19pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBpb19zZ2xfZnJlZV9pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBpb19zZ2xfaG5kbF9hdmJsOworCXN0cnVjdCBzZ2xfaGFuZGxlICoqaW9fc2dsX2huZGxfYmFzZTsKKworCXVuc2lnbmVkIHNob3J0IGVoX3NnbF9hbGxvY19pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBlaF9zZ2xfZnJlZV9pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBlaF9zZ2xfaG5kbF9hdmJsOworCXN0cnVjdCBzZ2xfaGFuZGxlICoqZWhfc2dsX2huZGxfYmFzZTsKKwlzcGlubG9ja190IGlvX3NnbF9sb2NrOworCXNwaW5sb2NrX3QgbWdtdF9zZ2xfbG9jazsKKwlzcGlubG9ja190IGlzcl9sb2NrOworCXVuc2lnbmVkIGludCBhZ2U7CisJdW5zaWduZWQgc2hvcnQgYXZsYmxfY2lkczsKKwl1bnNpZ25lZCBzaG9ydCBjaWRfYWxsb2M7CisJdW5zaWduZWQgc2hvcnQgY2lkX2ZyZWU7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqY29ubl90YWJsZVtCRTJfTUFYX1NFU1NJT05TICogMl07CisJc3RydWN0IGxpc3RfaGVhZCBoYmFfcXVldWU7CisJdW5zaWduZWQgc2hvcnQgKmNpZF9hcnJheTsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKiplcF9hcnJheTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgeworCQkvKioKKwkJICogZ3JvdXAgdG9nZXRoZXIgc2luY2UgdGhleSBhcmUgdXNlZCBtb3N0IGZyZXF1ZW50bHkKKwkJICogZm9yIGNpZCB0byBjcmkgY29udmVyc2lvbgorCQkgKi8KKwkJdW5zaWduZWQgaW50IGlzY3NpX2NpZF9zdGFydDsKKwkJdW5zaWduZWQgaW50IHBoeXNfcG9ydDsKKworCQl1bnNpZ25lZCBpbnQgaXNyX29mZnNldDsKKwkJdW5zaWduZWQgaW50IGlzY3NpX2ljZF9zdGFydDsKKwkJdW5zaWduZWQgaW50IGlzY3NpX2NpZF9jb3VudDsKKwkJdW5zaWduZWQgaW50IGlzY3NpX2ljZF9jb3VudDsKKwkJdW5zaWduZWQgaW50IHBjaV9mdW5jdGlvbjsKKworCQl1bnNpZ25lZCBzaG9ydCBjaWRfYWxsb2M7CisJCXVuc2lnbmVkIHNob3J0IGNpZF9mcmVlOworCQl1bnNpZ25lZCBzaG9ydCBhdmxibF9jaWRzOworCQlzcGlubG9ja190IGNpZF9sb2NrOworCX0gZndfY29uZmlnOworCisJdTggbWFjX2FkZHJlc3NbRVRIX0FMRU5dOworCXVuc2lnbmVkIHNob3J0IHRvZG9fY3E7CisJdW5zaWduZWQgc2hvcnQgdG9kb19tY2NfY3E7CisJY2hhciB3cV9uYW1lWzIwXTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CS8qIFRoZSBhY3R1YWsgd29yayBxdWV1ZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2NxczsJLyogVGhlIHdvcmsgYmVpbmcgcXVldWVkICovCisJc3RydWN0IGJlX2N0cmxfaW5mbyBjdHJsOworfTsKKworc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiB7CisJc3RydWN0IHBjaV9wb29sICpiaHNfcG9vbDsKK307CisKKy8qKgorICogc3RydWN0IGJlaXNjc2lfY29ubiAtIGlzY3NpIGNvbm5lY3Rpb24gc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZWlzY3NpX2Nvbm4geworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwl1MzIgZXhwX3N0YXRzbjsKKwl1MzIgYmVpc2NzaV9jb25uX2NpZDsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqZXA7CisJdW5zaWduZWQgc2hvcnQgbG9naW5faW5fcHJvZ3Jlc3M7CisJc3RydWN0IHNnbF9oYW5kbGUgKnBsb2dpbl9zZ2xfaGFuZGxlOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzczsKK307CisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgdGhlIGNoaXAgKi8KK3N0cnVjdCBwZHVfZGF0YV9vdXQgeworCXUzMiBkd1sxMl07Cit9OworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQgeworCXU4IG9wY29kZVs2XTsJCS8qIG9wY29kZSAqLworCXU4IHJzdmQwWzJdOwkJLyogc2hvdWxkIGJlIDAgKi8KKwl1OCByc3ZkMVs3XTsKKwl1OCBmaW5hbF9iaXQ7CQkvKiBGIGJpdCAqLworCXU4IHJzdmQyWzE2XTsKKwl1OCBhaHNfbGVuZ3RoWzhdOwkvKiBubyBBSFMgKi8KKwl1OCBkYXRhX2xlbl9oaVs4XTsKKwl1OCBkYXRhX2xlbl9sb1sxNl07CS8qIERhdGFTZWdtZW50TGVuZ3RoICovCisJdTggbHVuWzY0XTsKKwl1OCBpdHRbMzJdOwkJLyogSVRUOyBpbml0aWF0b3IgdGFzayB0YWcgKi8KKwl1OCB0dHRbMzJdOwkJLyogVFRUOyB2YWxpZCBmb3IgUjJUIG9yIDB4ZmZmZmZmZmYgKi8KKwl1OCByc3ZkM1szMl07CisJdTggZXhwX3N0YXRfc25bMzJdOworCXU4IHJzdmQ0WzMyXTsKKwl1OCBkYXRhX3NuWzMyXTsKKwl1OCBidWZmZXJfb2Zmc2V0WzMyXTsKKwl1OCByc3ZkNVszMl07Cit9OworCitzdHJ1Y3QgYmVfY21kX2JocyB7CisJc3RydWN0IGlzY3NpX2NtZCBpc2NzaV9oZHI7CisJdW5zaWduZWQgY2hhciBwYWQxWzE2XTsKKwlzdHJ1Y3QgcGR1X2RhdGFfb3V0IGlzY3NpX2RhdGFfcGR1OworCXVuc2lnbmVkIGNoYXIgcGFkMltCRV9TRU5TRV9JTkZPX1NJWkUgLQorCQkJc2l6ZW9mKHN0cnVjdCBwZHVfZGF0YV9vdXQpXTsKK307CisKK3N0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgeworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGU7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqY29ubjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQ7CisJdW5zaWduZWQgaW50IGNtZF9zbjsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdW5zaWduZWQgc2hvcnQgY2lkOworCXVuc2lnbmVkIHNob3J0IGhlYWRlcl9sZW47CisKKwlzdHJ1Y3QgYmVfY21kX2JocyAqY21kX2JoczsKKwlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgYmhzX3BhOworCXVuc2lnbmVkIHNob3J0IGJoc19sZW47Cit9OworCitzdHJ1Y3QgYmVfbm9uaW9fYmhzIHsKKwlzdHJ1Y3QgaXNjc2lfaGRyIGlzY3NpX2hkcjsKKwl1bnNpZ25lZCBjaGFyIHBhZDFbMTZdOworCXN0cnVjdCBwZHVfZGF0YV9vdXQgaXNjc2lfZGF0YV9wZHU7CisJdW5zaWduZWQgY2hhciBwYWQyW0JFX1NFTlNFX0lORk9fU0laRSAtCisJCQlzaXplb2Yoc3RydWN0IHBkdV9kYXRhX291dCldOworfTsKKworc3RydWN0IGJlX3N0YXR1c19iaHMgeworCXN0cnVjdCBpc2NzaV9jbWQgaXNjc2lfaGRyOworCXVuc2lnbmVkIGNoYXIgcGFkMVsxNl07CisJLyoqCisJICogVGhlIHBsdXMgMiBiZWxvdyBpcyB0byBob2xkIHRoZSBzZW5zZSBpbmZvIGxlbmd0aCB0aGF0IGdldHMKKwkgKiBETUEnZWQgYnkgUnhVTFAKKwkgKi8KKwl1bnNpZ25lZCBjaGFyIHNlbnNlX2luZm9bQkVfU0VOU0VfSU5GT19TSVpFXTsKK307CisKK3N0cnVjdCBpc2NzaV9zZ2UgeworCXUzMiBkd1s0XTsKK307CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfaXNjc2lfc2dlIHsKKwl1OCBhZGRyX2hpWzMyXTsKKwl1OCBhZGRyX2xvWzMyXTsKKwl1OCBzZ2Vfb2Zmc2V0WzIyXTsJLyogRFdPUkQgMiAqLworCXU4IHJzdmQwWzldOwkJLyogRFdPUkQgMiAqLworCXU4IGxhc3Rfc2dlOwkJLyogRFdPUkQgMiAqLworCXU4IGxlblsxN107CQkvKiBEV09SRCAzICovCisJdTggcnN2ZDFbMTVdOwkJLyogRFdPUkQgMyAqLworfTsKKworc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgeworCXUzMiBkd1s1XTsKK307CisKKyNkZWZpbmUgT0ZGTERfUEFSQU1TX0VSTAkweDAwMDAwMDAzCisjZGVmaW5lIE9GRkxEX1BBUkFNU19EREUJMHgwMDAwMDAwNAorI2RlZmluZSBPRkZMRF9QQVJBTVNfSERFCTB4MDAwMDAwMDgKKyNkZWZpbmUgT0ZGTERfUEFSQU1TX0lSMlQJMHgwMDAwMDAxMAorI2RlZmluZSBPRkZMRF9QQVJBTVNfSU1ECTB4MDAwMDAwMjAKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zIHsKKwl1OCBtYXhfYnVyc3RfbGVuZ3RoWzMyXTsKKwl1OCBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoWzMyXTsKKwl1OCBmaXJzdF9idXJzdF9sZW5ndGhbMzJdOworCXU4IGVybFsyXTsKKwl1OCBkZGVbMV07CisJdTggaGRlWzFdOworCXU4IGlyMnRbMV07CisJdTggaW1kWzFdOworCXU4IHBhZFsyNl07CisJdTggZXhwX3N0YXRzblszMl07Cit9OworCisvKiB2b2lkIGh3aV9jb21wbGV0ZV9kcnZyX21zZ3Moc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzb2xfY3FlICpwc29sKTsqLworCitzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBwYTsKKwl2b2lkICpwYnVmZmVyOworCXVuc2lnbmVkIGludCBjb25zdW1lZDsKKwl1bnNpZ25lZCBjaGFyIGluZGV4OworCXVuc2lnbmVkIGNoYXIgaXNfaGVhZGVyOworCXVuc2lnbmVkIHNob3J0IGNyaTsKKwl1bnNpZ25lZCBsb25nIGJ1ZmZlcl9sZW47Cit9OworCitzdHJ1Y3QgaHdpX2FzeW5jX2VudHJ5IHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIGhkcl9yZWNlaXZlZDsKKwkJdW5zaWduZWQgY2hhciBoZHJfbGVuOworCQl1bnNpZ25lZCBzaG9ydCBieXRlc19yZWNlaXZlZDsKKwkJdW5zaWduZWQgaW50IGJ5dGVzX25lZWRlZDsKKwkJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCX0gd2FpdF9xdWV1ZTsKKworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZGVyX2J1c3lfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRhdGFfYnVzeV9saXN0OworfTsKKworI2RlZmluZSBCRV9NSU5fQVNZTkNfRU5UUklFUyAxMjgKKworc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCB7CisJc3RydWN0IHsKKwkJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBhX2Jhc2U7CisJCXZvaWQgKnZhX2Jhc2U7CisJCXZvaWQgKnJpbmdfYmFzZTsKKwkJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKmhhbmRsZV9iYXNlOworCisJCXVuc2lnbmVkIGludCBob3N0X3dyaXRlX3B0cjsKKwkJdW5zaWduZWQgaW50IGVwX3JlYWRfcHRyOworCQl1bnNpZ25lZCBpbnQgd3JpdGFibGVzOworCisJCXVuc2lnbmVkIGludCBmcmVlX2VudHJpZXM7CisJCXVuc2lnbmVkIGludCBidXN5X2VudHJpZXM7CisJCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKKwkJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCisJCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OworCX0gYXN5bmNfaGVhZGVyOworCisJc3RydWN0IHsKKwkJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBhX2Jhc2U7CisJCXZvaWQgKnZhX2Jhc2U7CisJCXZvaWQgKnJpbmdfYmFzZTsKKwkJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKmhhbmRsZV9iYXNlOworCisJCXVuc2lnbmVkIGludCBob3N0X3dyaXRlX3B0cjsKKwkJdW5zaWduZWQgaW50IGVwX3JlYWRfcHRyOworCQl1bnNpZ25lZCBpbnQgd3JpdGFibGVzOworCisJCXVuc2lnbmVkIGludCBmcmVlX2VudHJpZXM7CisJCXVuc2lnbmVkIGludCBidXN5X2VudHJpZXM7CisJCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKKwkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJCXVuc2lnbmVkIGludCBudW1fZW50cmllczsKKwl9IGFzeW5jX2RhdGE7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgdmFyeWluZyBzaXplIGxpc3QhIERvIG5vdCBhZGQgYW55dGhpbmcKKwkgKiBhZnRlciB0aGlzIGVudHJ5ISEKKwkgKi8KKwlzdHJ1Y3QgaHdpX2FzeW5jX2VudHJ5IGFzeW5jX2VudHJ5W0JFX01JTl9BU1lOQ19FTlRSSUVTXTsKK307CisKKyNkZWZpbmUgUERVQ1FFX0NPREVfTUFTSwkweDAwMDAwMDNGCisjZGVmaW5lIFBEVUNRRV9EUExfTUFTSwkJMHhGRkZGMDAwMAorI2RlZmluZSBQRFVDUUVfSU5ERVhfTUFTSwkweDAwMDBGRkZGCisKK3N0cnVjdCBpX3RfZHBkdV9jcWUgeworCXUzMiBkd1s0XTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlIHsKKwl1OCBkYl9hZGRyX2hpWzMyXTsKKwl1OCBkYl9hZGRyX2xvWzMyXTsKKwl1OCBjb2RlWzZdOworCXU4IGNpZFsxMF07CisJdTggZHBsWzE2XTsKKwl1OCBpbmRleFsxNl07CisJdTggbnVtX2NvbnNbMTBdOworCXU4IHJzdmQwWzRdOworCXU4IGZpbmFsOworCXU4IHZhbGlkOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBDUUVfVkFMSURfTUFTSwkweDgwMDAwMDAwCisjZGVmaW5lIENRRV9DT0RFX01BU0sJMHgwMDAwMDAzRgorI2RlZmluZSBDUUVfQ0lEX01BU0sJMHgwMDAwRkZDMAorCisjZGVmaW5lIEVRRV9WQUxJRF9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIEVRRV9NQUpPUkNPREVfTUFTSwkweDAwMDAwMDBFCisjZGVmaW5lIEVRRV9SRVNJRF9NQVNLCQkweEZGRkYwMDAwCisKK3N0cnVjdCBiZV9lcV9lbnRyeSB7CisJdTMyIGR3WzFdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9lcV9lbnRyeSB7CisJdTggdmFsaWQ7CQkvKiBEV09SRCAwICovCisJdTggbWFqb3JfY29kZVszXTsJLyogRFdPUkQgMCAqLworCXU4IG1pbm9yX2NvZGVbMTJdOwkvKiBEV09SRCAwICovCisJdTggcmVzb3VyY2VfaWRbMTZdOwkvKiBEV09SRCAwICovCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjcV9kYiB7CisJdTMyIGR3WzFdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9jcV9kYiB7CisJdTggcWlkWzEwXTsKKwl1OCBldmVudFsxXTsKKwl1OCByc3ZkMFs1XTsKKwl1OCBudW1fcG9wcGVkWzEzXTsKKwl1OCByZWFybVsxXTsKKwl1OCByc3ZkMVsyXTsKK30gX19wYWNrZWQ7CisKK3ZvaWQgYmVpc2NzaV9wcm9jZXNzX2VxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7CisKKworc3RydWN0IGlzY3NpX3dyYiB7CisJdTMyIGR3WzE2XTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgV1JCX1RZUEVfTUFTSyAweEYwMDAwMDAwCisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfaXNjc2lfd3JiIHsKKwl1OCBsdW5bMTRdOwkJLyogRFdPUkQgMCAqLworCXU4IGx0OwkJCS8qIERXT1JEIDAgKi8KKwl1OCBpbnZsZDsJCS8qIERXT1JEIDAgKi8KKwl1OCB3cmJfaWR4WzhdOwkJLyogRFdPUkQgMCAqLworCXU4IGRzcDsJCQkvKiBEV09SRCAwICovCisJdTggZG1zZzsJCS8qIERXT1JEIDAgKi8KKwl1OCB1bmRyX3J1bjsJCS8qIERXT1JEIDAgKi8KKwl1OCBvdmVyX3J1bjsJCS8qIERXT1JEIDAgKi8KKwl1OCB0eXBlWzRdOwkJLyogRFdPUkQgMCAqLworCXU4IHB0cjJuZXh0d3JiWzhdOwkvKiBEV09SRCAxICovCisJdTggcjJ0X2V4cF9kdGxbMjRdOwkvKiBEV09SRCAxICovCisJdTggc2dsX2ljZF9pZHhbMTJdOwkvKiBEV09SRCAyICovCisJdTggcnN2ZDBbMjBdOwkJLyogRFdPUkQgMiAqLworCXU4IGV4cF9kYXRhX3NuWzMyXTsJLyogRFdPUkQgMyAqLworCXU4IGlzY3NpX2Joc19hZGRyX2hpWzMyXTsJLyogRFdPUkQgNCAqLworCXU4IGlzY3NpX2Joc19hZGRyX2xvWzMyXTsJLyogRFdPUkQgNSAqLworCXU4IGNtZHNuX2l0dFszMl07CS8qIERXT1JEIDYgKi8KKwl1OCBkaWZfcmVmX3RhZ1szMl07CS8qIERXT1JEIDcgKi8KKwl1OCBzZ2UwX2FkZHJfaGlbMzJdOwkvKiBEV09SRCA4ICovCisJdTggc2dlMF9hZGRyX2xvWzMyXTsJLyogRFdPUkQgOSAgKi8KKwl1OCBzZ2UwX29mZnNldFsyMl07CS8qIERXT1JEIDEwICovCisJdTggcGJzOwkJCS8qIERXT1JEIDEwICovCisJdTggZGlmX21vZGVbMl07CQkvKiBEV09SRCAxMCAqLworCXU4IHJzdmQxWzZdOwkJLyogRFdPUkQgMTAgKi8KKwl1OCBzZ2UwX2xhc3Q7CQkvKiBEV09SRCAxMCAqLworCXU4IHNnZTBfbGVuWzE3XTsJLyogRFdPUkQgMTEgKi8KKwl1OCBkaWZfbWV0YV90YWdbMTRdOwkvKiBEV09SRCAxMSAqLworCXU4IHNnZTBfaW5fZGRyOwkJLyogRFdPUkQgMTEgKi8KKwl1OCBzZ2UxX2FkZHJfaGlbMzJdOwkvKiBEV09SRCAxMiAqLworCXU4IHNnZTFfYWRkcl9sb1szMl07CS8qIERXT1JEIDEzICovCisJdTggc2dlMV9yMnRfb2Zmc2V0WzIyXTsJLyogRFdPUkQgMTQgKi8KKwl1OCByc3ZkMls5XTsJCS8qIERXT1JEIDE0ICovCisJdTggc2dlMV9sYXN0OwkJLyogRFdPUkQgMTQgKi8KKwl1OCBzZ2UxX2xlblsxN107CS8qIERXT1JEIDE1ICovCisJdTggcmVmX3NnbF9pY2RfaWR4WzEyXTsJLyogRFdPUkQgMTUgKi8KKwl1OCByc3ZkM1syXTsJCS8qIERXT1JEIDE1ICovCisJdTggc2dlMV9pbl9kZHI7CQkvKiBEV09SRCAxNSAqLworCit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQsCisJCQkJICAgIGludCBpbmRleCk7Cit2b2lkCitmcmVlX21nbXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSk7CisKK3N0cnVjdCBwZHVfbm9wX291dCB7CisJdTMyIGR3WzEyXTsKK307CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfcGR1X25vcF9vdXQgeworCXU4IG9wY29kZVs2XTsJCS8qIG9wY29kZSAweDAwICovCisJdTggaV9iaXQ7CQkvKiBJIEJpdCAqLworCXU4IHhfYml0OwkJLyogcmVzZXJ2ZWQ7IHNob3VsZCBiZSAwICovCisJdTggZnBfYml0X2ZpbGxlcjFbN107CisJdTggZl9iaXQ7CQkvKiBhbHdheXMgMSAqLworCXU4IHJlc2VydmVkMVsxNl07CisJdTggYWhzX2xlbmd0aFs4XTsJLyogbm8gQUhTICovCisJdTggZGF0YV9sZW5faGlbOF07CisJdTggZGF0YV9sZW5fbG9bMTZdOwkvKiBEYXRhU2VnbWVudExlbmd0aCAqLworCXU4IGx1bls2NF07CisJdTggaXR0WzMyXTsJCS8qIGluaXRpYXRvciBpZCBmb3IgcGluZyBvciAweGZmZmZmZmZmICovCisJdTggdHR0WzMyXTsJCS8qIHRhcmdldCBpZCBmb3IgcGluZyBvciAweGZmZmZmZmZmICovCisJdTggY21kX3NuWzMyXTsKKwl1OCBleHBfc3RhdF9zblszMl07CisJdTggcmVzZXJ2ZWQ1WzEyOF07Cit9OworCisjZGVmaW5lIFBEVUJBU0VfT1BDT0RFX01BU0sJMHgwMDAwMDAzRgorI2RlZmluZSBQRFVCQVNFX0RBVEFMRU5ISV9NQVNLCTB4MDAwMEZGMDAKKyNkZWZpbmUgUERVQkFTRV9EQVRBTEVOTE9fTUFTSwkweEZGRkYwMDAwCisKK3N0cnVjdCBwZHVfYmFzZSB7CisJdTMyIGR3WzE2XTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfcGR1X2Jhc2UgeworCXU4IG9wY29kZVs2XTsKKwl1OCBpX2JpdDsJCS8qIGltbWVkaWF0ZSBiaXQgKi8KKwl1OCB4X2JpdDsJCS8qIHJlc2VydmVkLCBhbHdheXMgMCAqLworCXU4IHJlc2VydmVkMVsyNF07CS8qIG9wY29kZS1zcGVjaWZpYyBmaWVsZHMgKi8KKwl1OCBhaHNfbGVuZ3RoWzhdOwkvKiBsZW5ndGggdW5pdHMgaXMgNCBieXRlIHdvcmRzICovCisJdTggZGF0YV9sZW5faGlbOF07CisJdTggZGF0YV9sZW5fbG9bMTZdOwkvKiBEYXRhc2VnbWVudExlbmd0aCAqLworCXU4IGx1bls2NF07CQkvKiBsdW4gb3Igb3Bjb2RlLXNwZWNpZmljIGZpZWxkcyAqLworCXU4IGl0dFszMl07CQkvKiBpbml0aWF0b3IgdGFzayB0YWcgKi8KKwl1OCByZXNlcnZlZDRbMjI0XTsKK307CisKK3N0cnVjdCBpc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiIHsKKwl1MzIgZHdbMTZdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiIHsKKwl1OCBsdW5bMTRdOwkJLyogRFdPUkQgMCAqLworCXU4IGx0OwkJCS8qIERXT1JEIDAgKi8KKwl1OCBpbnZsZDsJCS8qIERXT1JEIDAgKi8KKwl1OCB3cmJfaWR4WzhdOwkJLyogRFdPUkQgMCAqLworCXU4IGRzcDsJCQkvKiBEV09SRCAwICovCisJdTggZG1zZzsJCS8qIERXT1JEIDAgKi8KKwl1OCB1bmRyX3J1bjsJCS8qIERXT1JEIDAgKi8KKwl1OCBvdmVyX3J1bjsJCS8qIERXT1JEIDAgKi8KKwl1OCB0eXBlWzRdOwkJLyogRFdPUkQgMCAqLworCXU4IHB0cjJuZXh0d3JiWzhdOwkvKiBEV09SRCAxICovCisJdTggbWF4X2J1cnN0X2xlbmd0aFsxOV07CS8qIERXT1JEIDEgKi8KKwl1OCByc3ZkMFs1XTsJCS8qIERXT1JEIDEgKi8KKwl1OCByc3ZkMVsxNV07CQkvKiBEV09SRCAyICovCisJdTggbWF4X3NlbmRfZGF0YV9zZWdtZW50X2xlbmd0aFsxN107CS8qIERXT1JEIDIgKi8KKwl1OCBmaXJzdF9idXJzdF9sZW5ndGhbMTRdOwkvKiBEV09SRCAzICovCisJdTggcnN2ZDJbMl07CQkvKiBEV09SRCAzICovCisJdTggdHhfd3JiaW5kZXhfZHJ2X21zZ1s4XTsJLyogRFdPUkQgMyAqLworCXU4IHJzdmQzWzVdOwkJLyogRFdPUkQgMyAqLworCXU4IHNlc3Npb25fc3RhdGVbM107CS8qIERXT1JEIDMgKi8KKwl1OCByc3ZkNFsxNl07CQkvKiBEV09SRCA0ICovCisJdTggdHhfanVtYm87CQkvKiBEV09SRCA0ICovCisJdTggaGRlOwkJCS8qIERXT1JEIDQgKi8KKwl1OCBkZGU7CQkJLyogRFdPUkQgNCAqLworCXU4IGVybFsyXTsJCS8qIERXT1JEIDQgKi8KKwl1OCBkb21haW5faWRbNV07CQkvKiBEV09SRCA0ICovCisJdTggbW9kZTsJCS8qIERXT1JEIDQgKi8KKwl1OCBpbWQ7CQkJLyogRFdPUkQgNCAqLworCXU4IGlyMnQ7CQkvKiBEV09SRCA0ICovCisJdTggbm90cHJlZGJscVsyXTsJLyogRFdPUkQgNCAqLworCXU4IGNvbXBsdG9uYWNrOwkJLyogRFdPUkQgNCAqLworCXU4IHN0YXRfc25bMzJdOwkJLyogRFdPUkQgNSAqLworCXU4IHBhZF9idWZmZXJfYWRkcl9oaVszMl07CS8qIERXT1JEIDYgKi8KKwl1OCBwYWRfYnVmZmVyX2FkZHJfbG9bMzJdOwkvKiBEV09SRCA3ICovCisJdTggcGFkX2FkZHJfaGlbMzJdOwkvKiBEV09SRCA4ICovCisJdTggcGFkX2FkZHJfbG9bMzJdOwkvKiBEV09SRCA5ICovCisJdTggcnN2ZDVbMzJdOwkJLyogRFdPUkQgMTAgKi8KKwl1OCByc3ZkNlszMl07CQkvKiBEV09SRCAxMSAqLworCXU4IHJzdmQ3WzMyXTsJCS8qIERXT1JEIDEyICovCisJdTggcnN2ZDhbMzJdOwkJLyogRFdPUkQgMTMgKi8KKwl1OCByc3ZkOVszMl07CQkvKiBEV09SRCAxNCAqLworCXU4IHJzdmQxMFszMl07CQkvKiBEV09SRCAxNSAqLworCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfcmluZyB7CisJdTMyIHBhZ2VzOwkJLyogcXVldWUgc2l6ZSBpbiBwYWdlcyAqLworCXUzMiBpZDsJCQkvKiBxdWV1ZSBpZCBhc3NpZ25lZCBieSBiZWtsaWIgKi8KKwl1MzIgbnVtOwkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHF1ZXVlICovCisJdTMyIGNpZHg7CQkvKiBjb25zdW1lciBpbmRleCAqLworCXUzMiBwaWR4OwkJLyogcHJvZHVjZXIgaW5kZXggLS0gbm90IHVzZWQgYnkgbW9zdCByaW5ncyAqLworCXUzMiBpdGVtX3NpemU7CQkvKiBzaXplIGluIGJ5dGVzIG9mIG9uZSBvYmplY3QgKi8KKworCXZvaWQgKnZhOwkJLyogVGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgcmluZy4gIFRoaXMKKwkJCQkgKiBzaG91bGQgYmUgbGFzdCB0byBhbGxvdyAzMiAmIDY0IGJpdCBkZWJ1Z2dlcgorCQkJCSAqIGV4dGVuc2lvbnMgdG8gd29yay4KKwkJCQkgKi8KK307CisKK3N0cnVjdCBod2lfd3JiX2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgd3JiX2hhbmRsZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgd3JiX2hhbmRsZV9kcnZyX2xpc3Q7CisJc3RydWN0IHdyYl9oYW5kbGUgKipwd3JiX2hhbmRsZV9iYXNlOworCXN0cnVjdCB3cmJfaGFuZGxlICoqcHdyYl9oYW5kbGVfYmFzZXN0ZDsKKwlzdHJ1Y3QgaXNjc2lfd3JiICpwbGFzdF93cmI7CisJdW5zaWduZWQgc2hvcnQgYWxsb2NfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgZnJlZV9pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCB3cmJfaGFuZGxlc19hdmFpbGFibGU7CisJdW5zaWduZWQgc2hvcnQgY2lkOworfTsKKworc3RydWN0IGh3aV9jb250cm9sbGVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlvX3NnbF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgZWhfc2dsX2xpc3Q7CisJc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlX2Jhc2U7CisJdW5zaWduZWQgaW50IHdyYl9tZW1faW5kZXg7CisKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0IHdyYl9jb250ZXh0W0JFMl9NQVhfU0VTU0lPTlMgKiAyXTsKKwlzdHJ1Y3QgbWNjX3dyYiAqcG1jY193cmJfYmFzZTsKKwlzdHJ1Y3QgYmVfcmluZyBkZWZhdWx0X3BkdV9oZHI7CisJc3RydWN0IGJlX3JpbmcgZGVmYXVsdF9wZHVfZGF0YTsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2N0eHQ7CisJdW5zaWduZWQgc2hvcnQgY3FfZXJyb3JzW0NYTl9LSUxMRURfQ01ORF9EQVRBX05PVF9PTl9TQU1FX0NPTk5dOworfTsKKworZW51bSBod2hfdHlwZV9lbnVtIHsKKwlIV0hfVFlQRV9JTyA9IDEsCisJSFdIX1RZUEVfTE9HT1VUID0gMiwKKwlIV0hfVFlQRV9UTUYgPSAzLAorCUhXSF9UWVBFX05PUCA9IDQsCisJSFdIX1RZUEVfSU9fUkQgPSA1LAorCUhXSF9UWVBFX0xPR0lOID0gMTEsCisJSFdIX1RZUEVfSU5WQUxJRCA9IDB4RkZGRkZGRkYKK307CisKK3N0cnVjdCB3cmJfaGFuZGxlIHsKKwllbnVtIGh3aF90eXBlX2VudW0gdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCB3cmJfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgbnh0X3dyYl9pbmRleDsKKworCXN0cnVjdCBpc2NzaV90YXNrICpwaW9faGFuZGxlOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmI7Cit9OworCitzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5IHsKKwlzdHJ1Y3QgYmVfZXFfb2JqIGJlX2VxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX2NxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX21jY19jcTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBiZV9tY2M7CisKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBiZV9kZWZfaGRycTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBiZV9kZWZfZGF0YXE7CisKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBiZV93cmJxW0JFMl9NQVhfU0VTU0lPTlNdOworCXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKnBiZV9tY2NfY29udGV4dDsKKworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTY0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCkBAIC0wLDAgKzEsMzIxIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICoKKyAqLworCisjaW5jbHVkZSAiYmVfbWdtdC5oIgorI2luY2x1ZGUgImJlX2lzY3NpLmgiCisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9nZXRfZndfY29uZmlnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2Z3X2NmZyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQkgICBPUENPREVfQ09NTU9OX1FVRVJZX0ZJUk1XQVJFX0NPTkZJRywgc2l6ZW9mKCpyZXEpKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9md19jZmcgKnBmd19jZmc7CisJCXBmd19jZmcgPSByZXE7CisJCXBoYmEtPmZ3X2NvbmZpZy5waHlzX3BvcnQgPSBwZndfY2ZnLT5waHlzX3BvcnQ7CisJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2Rfc3RhcnQgPQorCQkJCQlwZndfY2ZnLT51bHBbMF0uaWNkX2Jhc2U7CisJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2RfY291bnQgPQorCQkJCQlwZndfY2ZnLT51bHBbMF0uaWNkX2NvdW50OworCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ID0KKwkJCQkJcGZ3X2NmZy0+dWxwWzBdLnNxX2Jhc2U7CisJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgPQorCQkJCQlwZndfY2ZnLT51bHBbMF0uc3FfY291bnQ7CisJfSBlbHNlIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJGYWlsZWQgaW4gbWdtdF9nZXRfZndfY29uZmlnIFxuIik7CisJfQorCisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordW5zaWduZWQgY2hhciBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQoreworCXN0cnVjdCBiZV9kbWFfbWVtIG5vbmVtYl9jbWQ7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMgKnJlcTsKKwlzdHJ1Y3QgYmVfc2dlICpzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKKwlpbnQgc3RhdHVzID0gMDsKKworCW5vbmVtYl9jbWQudmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChjdHJsLT5wZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMpLAorCQkJCSZub25lbWJfY21kLmRtYSk7CisJaWYgKG5vbmVtYl9jbWQudmEgPT0gTlVMTCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3IgorCQkJICJcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW5vbmVtYl9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMpOworCXJlcSA9IG5vbmVtYl9jbWQudmE7CisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQkgICBPUENPREVfQ09NTU9OX0dFVF9DTlRMX0FUVFJJQlVURVMsIHNpemVvZigqcmVxKSk7CisJc2dlLT5wYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMobm9uZW1iX2NtZC5kbWEpKTsKKwlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5kbWEgJiAweEZGRkZGRkZGKTsKKwlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuc2l6ZSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXNfcmVzcCAqcmVzcCA9IG5vbmVtYl9jbWQudmE7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIkZpcm13YXJlIHZlcnNpb24gb2YgQ01EOiAlc1xuIiwKKwkJCXJlc3AtPnBhcmFtcy5oYmFfYXR0cmlicy5mbGFzaHJvbV92ZXJzaW9uX3N0cmluZyk7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIkZpcm13YXJlIHZlcnNpb24gaXMgOiAlc1xuIiwKKwkJCXJlc3AtPnBhcmFtcy5oYmFfYXR0cmlicy5maXJtd2FyZV92ZXJzaW9uX3N0cmluZyk7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSJEZXZlbG9wZXIgQnVpbGQsIG5vdCBwZXJmb3JtaW5nIHZlcnNpb24gY2hlY2suLi5cbiIpOworCisJfSBlbHNlCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIiBGYWlsZWQgaW4gbWdtdF9jaGVja19zdXBwb3J0ZWRfZndcbiIpOworCWlmIChub25lbWJfY21kLnZhKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGN0cmwtPnBkZXYsIG5vbmVtYl9jbWQuc2l6ZSwKKwkJCQkgICAgbm9uZW1iX2NtZC52YSwgbm9uZW1iX2NtZC5kbWEpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordW5zaWduZWQgY2hhciBtZ210X2VwZndfY2xlYW51cChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIHNob3J0IGNodXRlKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBpc2NzaV9jbGVhbnVwX3JlcSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX0NMRUFOVVAsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPmNodXRlID0gY2h1dGU7CisJcmVxLT5oZHJfcmluZ19pZCA9IDA7CisJcmVxLT5kYXRhX3JpbmdfaWQgPSAwOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKHN0YXR1cykKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICIgbWdtdF9lcGZ3X2NsZWFudXAgLCBGQUlMRURcbiIpOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9pbnZhbGlkYXRlX2ljZHMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCSAgIHVuc2lnbmVkIGludCBpY2QsIHVuc2lnbmVkIGludCBjaWQpCit7CisJc3RydWN0IGJlX2RtYV9tZW0gbm9uZW1iX2NtZDsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfc2dlICpzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKKwlzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4gKnJlcTsKKwlpbnQgc3RhdHVzID0gMDsKKworCW5vbmVtYl9jbWQudmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChjdHJsLT5wZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4pLAorCQkJCSZub25lbWJfY21kLmRtYSk7CisJaWYgKG5vbmVtYl9jbWQudmEgPT0gTlVMTCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIgorCQkJICJtZ210X2ludmFsaWRhdGVfaWNkcyBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW5vbmVtYl9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4pOworCXJlcSA9IG5vbmVtYl9jbWQudmE7CisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJT1BDT0RFX0NPTU1PTl9JU0NTSV9FUlJPUl9SRUNPVkVSWV9JTlZBTElEQVRFX0NPTU1BTkRTLAorCQkJc2l6ZW9mKCpyZXEpKTsKKwlyZXEtPnJlZl9oYW5kbGUgPSAwOworCXJlcS0+Y2xlYW51cF90eXBlID0gQ01EX0lTQ1NJX0NPTU1BTkRfSU5WQUxJREFURTsKKwlyZXEtPmljZF9jb3VudCA9IDA7CisJcmVxLT50YWJsZVtyZXEtPmljZF9jb3VudF0uaWNkID0gaWNkOworCXJlcS0+dGFibGVbcmVxLT5pY2RfY291bnRdLmNpZCA9IGNpZDsKKwlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLmRtYSkpOworCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLmRtYSAmIDB4RkZGRkZGRkYpOworCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5zaXplKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmIChzdGF0dXMpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIklDRFMgSW52YWxpZGF0aW9uIEZhaWxlZFxuIik7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJaWYgKG5vbmVtYl9jbWQudmEpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3RybC0+cGRldiwgbm9uZW1iX2NtZC5zaXplLAorCQkJCSAgICBub25lbWJfY21kLnZhLCBub25lbWJfY21kLmRtYSk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJCSBzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IGNpZCwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IGlzc3VlX3Jlc2V0LAorCQkJCQkgdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luICpyZXEgPQorCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0lfSU5JLAorCQkJICAgT1BDT0RFX0lTQ1NJX0lOSV9EUklWRVJfSU5WQUxJREFURV9DT05ORUNUSU9OLAorCQkJICAgc2l6ZW9mKCpyZXEpKTsKKwlyZXEtPnNlc3Npb25faGFuZGxlID0gYmVpc2NzaV9lcC0+ZndfaGFuZGxlOworCXJlcS0+Y2lkID0gY2lkOworCWlmIChpc3N1ZV9yZXNldCkKKwkJcmVxLT5jbGVhbnVwX3R5cGUgPSBDTURfSVNDU0lfQ09OTkVDVElPTl9JU1NVRV9UQ1BfUlNUOworCWVsc2UKKwkJcmVxLT5jbGVhbnVwX3R5cGUgPSBDTURfSVNDU0lfQ09OTkVDVElPTl9JTlZBTElEQVRFOworCXJlcS0+c2F2ZV9jZmcgPSBzYXZlY2ZnX2ZsYWc7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKHN0YXR1cykKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiSW52YWxpZGF0aW9uIEZhaWxlZFxuIik7CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCXVuc2lnbmVkIHNob3J0IGNpZCwgdW5zaWduZWQgaW50IHVwbG9hZF9mbGFnKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19pbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9DT01NT05fVENQX1VQTE9BRCwKKwkJCSAgIE9QQ09ERV9DT01NT05fVENQX1VQTE9BRCwgc2l6ZW9mKCpyZXEpKTsKKwlyZXEtPmlkID0gKHVuc2lnbmVkIHNob3J0KWNpZDsKKwlyZXEtPnVwbG9hZF90eXBlID0gKHVuc2lnbmVkIGNoYXIpdXBsb2FkX2ZsYWc7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKHN0YXR1cykKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF91cGxvYWRfY29ubmVjdGlvbiBGYWlsZWRcbiIpOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBtZ210X29wZW5fY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKKwkJCSBzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCXN0cnVjdCBzb2NrYWRkcl9pbiAqZGFkZHJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopZHN0X2FkZHI7CisJc3RydWN0IHNvY2thZGRyX2luNiAqZGFkZHJfaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilkc3RfYWRkcjsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW4gKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwl1bnNpZ25lZCBzaG9ydCBkZWZfaGRyX2lkOworCXVuc2lnbmVkIHNob3J0IGRlZl9kYXRhX2lkOworCXN0cnVjdCBwaHlzX2FkZHIgdGVtcGxhdGVfYWRkcmVzcyA9IHsgMCwgMCB9OworCXN0cnVjdCBwaHlzX2FkZHIgKnB0ZW1wbGF0ZV9hZGRyZXNzOworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIHNob3J0IGNpZCA9IGJlaXNjc2lfZXAtPmVwX2NpZDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwlkZWZfaGRyX2lkID0gKHVuc2lnbmVkIHNob3J0KUhXSV9HRVRfREVGX0hEUlFfSUQocGhiYSk7CisJZGVmX2RhdGFfaWQgPSAodW5zaWduZWQgc2hvcnQpSFdJX0dFVF9ERUZfQlVGUV9JRChwaGJhKTsKKworCXB0ZW1wbGF0ZV9hZGRyZXNzID0gJnRlbXBsYXRlX2FkZHJlc3M7CisJSVNDU0lfR0VUX1BEVV9URU1QTEFURV9BRERSRVNTKHBoYmEsIHB0ZW1wbGF0ZV9hZGRyZXNzKTsKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfVENQX0NPTk5FQ1RfQU5EX09GRkxPQUQsCisJCQkgICBzaXplb2YoKnJlcSkpOworCWlmIChkc3RfYWRkci0+c2FfZmFtaWx5ID09IFBGX0lORVQpIHsKKwkJX19iZTMyIHNfYWRkciA9IGRhZGRyX2luLT5zaW5fYWRkci5zX2FkZHI7CisJCXJlcS0+aXBfYWRkcmVzcy5pcF90eXBlID0gQkUyX0lQVjQ7CisJCXJlcS0+aXBfYWRkcmVzcy5pcF9hZGRyZXNzWzBdID0gc19hZGRyICYgMHgwMDAwMDBmZjsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3NbMV0gPSAoc19hZGRyICYgMHgwMDAwZmYwMCkgPj4gODsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3NbMl0gPSAoc19hZGRyICYgMHgwMGZmMDAwMCkgPj4gMTY7CisJCXJlcS0+aXBfYWRkcmVzcy5pcF9hZGRyZXNzWzNdID0gKHNfYWRkciAmIDB4ZmYwMDAwMDApID4+IDI0OworCQlyZXEtPnRjcF9wb3J0ID0gbnRvaHMoZGFkZHJfaW4tPnNpbl9wb3J0KTsKKwkJYmVpc2NzaV9lcC0+ZHN0X2FkZHIgPSBkYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyOworCQliZWlzY3NpX2VwLT5kc3RfdGNwcG9ydCA9IG50b2hzKGRhZGRyX2luLT5zaW5fcG9ydCk7CisJCWJlaXNjc2lfZXAtPmlwX3R5cGUgPSBCRTJfSVBWNDsKKwl9IGVsc2UgaWYgKGRzdF9hZGRyLT5zYV9mYW1pbHkgPT0gUEZfSU5FVDYpIHsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX3R5cGUgPSBCRTJfSVBWNjsKKwkJbWVtY3B5KCZyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzcywKKwkJICAgICAgICZkYWRkcl9pbjYtPnNpbjZfYWRkci5pbjZfdS51Nl9hZGRyOCwgMTYpOworCQlyZXEtPnRjcF9wb3J0ID0gbnRvaHMoZGFkZHJfaW42LT5zaW42X3BvcnQpOworCQliZWlzY3NpX2VwLT5kc3RfdGNwcG9ydCA9IG50b2hzKGRhZGRyX2luNi0+c2luNl9wb3J0KTsKKwkJbWVtY3B5KCZiZWlzY3NpX2VwLT5kc3Q2X2FkZHIsCisJCSAgICAgICAmZGFkZHJfaW42LT5zaW42X2FkZHIuaW42X3UudTZfYWRkcjgsIDE2KTsKKwkJYmVpc2NzaV9lcC0+aXBfdHlwZSA9IEJFMl9JUFY2OworCX0gZWxzZXsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgInVua25vd24gYWRkciBmYW1pbHkgJWRcbiIsCisJCQkgICAgIGRzdF9hZGRyLT5zYV9mYW1pbHkpOworCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl9CisJcmVxLT5jaWQgPSBjaWQ7CisJcmVxLT5jcV9pZCA9IHBod2lfY29udGV4dC0+YmVfY3EuaWQ7CisJcmVxLT5kZWZxX2lkID0gZGVmX2hkcl9pZDsKKwlyZXEtPmhkcl9yaW5nX2lkID0gZGVmX2hkcl9pZDsKKwlyZXEtPmRhdGFfcmluZ19pZCA9IGRlZl9kYXRhX2lkOworCXJlcS0+ZG9fb2ZmbG9hZCA9IDE7CisJcmVxLT5kYXRhb3V0X3RlbXBsYXRlX3BhLmxvID0gcHRlbXBsYXRlX2FkZHJlc3MtPmxvOworCXJlcS0+ZGF0YW91dF90ZW1wbGF0ZV9wYS5oaSA9IHB0ZW1wbGF0ZV9hZGRyZXNzLT5oaTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOworCQlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0ICpwdGNwY25jdF9vdXQgPQorCQkJCQkJCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKKworCQllcCA9IHBoYmEtPmVwX2FycmF5W3B0Y3BjbmN0X291dC0+Y2lkXTsKKwkJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCQliZWlzY3NpX2VwLT5md19oYW5kbGUgPSAwOworCQliZWlzY3NpX2VwLT5jaWRfdmxkID0gMTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gU3VjY2Vzc1xuIik7CisJfSBlbHNlCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIEZhaWxlZFxuIik7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTgxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCkBAIC0wLDAgKzEsMjQ5IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICoKKyAqLworCisjaWZuZGVmIF9CRUlTQ1NJX01HTVRfCisjZGVmaW5lIF9CRUlTQ1NJX01HTVRfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlICJiZV9pc2NzaS5oIgorI2luY2x1ZGUgImJlX21haW4uaCIKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9tY2Nfc2dlIHsKKwl1OCBwYV9sb1szMl07CQkvKiBkd29yZCAwICovCisJdTggcGFfaGlbMzJdOwkJLyogZHdvcmQgMSAqLworCXU4IGxlbmd0aFszMl07CQkvKiBEV09SRCAyICovCit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY193cmJfcGF5bG9hZCB7CisJdW5pb24geworCQlzdHJ1Y3QgYW1hcF9tY2Nfc2dlIHNnbFsxOV07CisJCXU4IGVtYmVkZGVkWzU5ICogMzJdOwkvKiBEV09SRFMgNTcgdG8gMTE1ICovCisJfSB1OworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9tY2Nfd3JiIHsKKwl1OCBlbWJlZGRlZDsJCS8qIERXT1JEIDAgKi8KKwl1OCByc3ZkMFsyXTsJCS8qIERXT1JEIDAgKi8KKwl1OCBzZ2VfY291bnRbNV07CS8qIERXT1JEIDAgKi8KKwl1OCByc3ZkMVsxNl07CQkvKiBEV09SRCAwICovCisJdTggc3BlY2lhbFs4XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBwYXlsb2FkX2xlbmd0aFszMl07CisJdTggdGFnWzY0XTsJCS8qIERXT1JEIDIgKi8KKwl1OCByc3ZkMlszMl07CQkvKiBEV09SRCA0ICovCisJc3RydWN0IGFtYXBfbWNjX3dyYl9wYXlsb2FkIHBheWxvYWQ7Cit9OworCitzdHJ1Y3QgbWNjX3NnZSB7CisJdTMyIHBhX2xvOwkJLyogZHdvcmQgMCAqLworCXUzMiBwYV9oaTsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgbGVuZ3RoOwkJLyogRFdPUkQgMiAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IG1jY193cmJfcGF5bG9hZCB7CisJdW5pb24geworCQlzdHJ1Y3QgbWNjX3NnZSBzZ2xbMTldOworCQl1MzIgZW1iZWRkZWRbNTldOwkvKiBEV09SRFMgNTcgdG8gMTE1ICovCisJfSB1OworfSBfX3BhY2tlZDsKKworI2RlZmluZSBNQ0NfV1JCX0VNQkVEREVEX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCitzdHJ1Y3QgbWNjX3dyYiB7CisJdTMyIGR3WzBdOwkJLyogRFdPUkQgMCAqLworCXUzMiBwYXlsb2FkX2xlbmd0aDsKKwl1MzIgdGFnWzJdOwkJLyogRFdPUkQgMiAqLworCXUzMiByc3ZkMlsxXTsJCS8qIERXT1JEIDQgKi8KKwlzdHJ1Y3QgbWNjX3dyYl9wYXlsb2FkIHBheWxvYWQ7Cit9OworCit1bnNpZ25lZCBjaGFyIG1nbXRfZXBmd19jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgc2hvcnQgY2h1dGUpOworaW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKKwkJCSBzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCk7CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF91cGxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBjaWQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgdXBsb2FkX2ZsYWcpOwordW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfaWNkcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgdW5zaWduZWQgaW50IGljZCwgdW5zaWduZWQgaW50IGNpZCk7CisKK3N0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXVuc2lnbmVkIGludCBzZXNzaW9uX2hhbmRsZTsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7CisJdW5zaWduZWQgc2hvcnQgdW51c2VkOworCXVuc2lnbmVkIHNob3J0IGNsZWFudXBfdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBzYXZlX2NmZzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX291dCB7CisJdW5zaWduZWQgaW50IHNlc3Npb25faGFuZGxlOworCXVuc2lnbmVkIHNob3J0IGNpZDsKKwl1bnNpZ25lZCBzaG9ydCB1bnVzZWQ7Cit9IF9fcGFja2VkOworCit1bmlvbiBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zIHsKKwlzdHJ1Y3QgaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtc19pbiByZXF1ZXN0OworCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX291dCByZXNwb25zZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRfdGFibGUgeworCXVuc2lnbmVkIHNob3J0IGljZDsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdW5zaWduZWQgaW50IHJlZl9oYW5kbGU7CisJdW5zaWduZWQgaW50IGljZF9jb3VudDsKKwlzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kX3RhYmxlIHRhYmxlWzEyOF07CisJdW5zaWduZWQgc2hvcnQgY2xlYW51cF90eXBlOworCXVuc2lnbmVkIHNob3J0IHVudXNlZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19vdXQgeworCXVuc2lnbmVkIGludCByZWZfaGFuZGxlOworCXVuc2lnbmVkIGludCBpY2RfY291bnQ7CisJdW5zaWduZWQgaW50IGljZF9zdGF0dXNbMTI4XTsKK30gX19wYWNrZWQ7CisKK3VuaW9uIGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zIHsKKwlzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4gcmVxdWVzdDsKKwlzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfb3V0IHJlc3BvbnNlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1nbXRfaGJhX2F0dHJpYnV0ZXMgeworCXU4IGZsYXNocm9tX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBtYW51ZmFjdHVyZXJfbmFtZVszMl07CisJdTMyIHN1cHBvcnRlZF9tb2RlczsKKwl1OCBzZWVwcm9tX3ZlcnNpb25fbG87CisJdTggc2VlcHJvbV92ZXJzaW9uX2hpOworCXU4IHJzdmQwWzJdOworCXUzMiBmd19jbWRfZGF0YV9zdHJ1Y3RfdmVyc2lvbjsKKwl1MzIgZXBfZndfZGF0YV9zdHJ1Y3RfdmVyc2lvbjsKKwl1MzIgZnV0dXJlX3Jlc2VydmVkWzEyXTsKKwl1MzIgZGVmYXVsdF9leHRlbmRlZF90aW1lb3V0OworCXU4IGNvbnRyb2xsZXJfbW9kZWxfbnVtYmVyWzMyXTsKKwl1OCBjb250cm9sbGVyX2Rlc2NyaXB0aW9uWzY0XTsKKwl1OCBjb250cm9sbGVyX3NlcmlhbF9udW1iZXJbMzJdOworCXU4IGlwX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBmaXJtd2FyZV92ZXJzaW9uX3N0cmluZ1szMl07CisJdTggYmlvc192ZXJzaW9uX3N0cmluZ1szMl07CisJdTggcmVkYm9vdF92ZXJzaW9uX3N0cmluZ1szMl07CisJdTggZHJpdmVyX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBmd19vbl9mbGFzaF92ZXJzaW9uX3N0cmluZ1szMl07CisJdTMyIGZ1bmN0aW9uYWxpdGllc19zdXBwb3J0ZWQ7CisJdTE2IG1heF9jZGJsZW5ndGg7CisJdTggYXNpY19yZXZpc2lvbjsKKwl1OCBnZW5lcmF0aW9uYWxfZ3VpZFsxNl07CisJdTggaGJhX3BvcnRfY291bnQ7CisJdTE2IGRlZmF1bHRfbGlua19kb3duX3RpbWVvdXQ7CisJdTggaXNjc2lfdmVyX21pbl9tYXg7CisJdTggbXVsdGlmdW5jdGlvbl9kZXZpY2U7CisJdTggY2FjaGVfdmFsaWQ7CisJdTggaGJhX3N0YXR1czsKKwl1OCBtYXhfZG9tYWluc19zdXBwb3J0ZWQ7CisJdTggcGh5X3BvcnQ7CisJdTMyIGZpcm13YXJlX3Bvc3Rfc3RhdHVzOworCXUzMiBoYmFfbXR1WzhdOworCXUzMiBmdXR1cmVfdTMyWzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzIHsKKwlzdHJ1Y3QgbWdtdF9oYmFfYXR0cmlidXRlcyBoYmFfYXR0cmliczsKKwl1MTYgcGNpX3ZlbmRvcl9pZDsKKwl1MTYgcGNpX2RldmljZV9pZDsKKwl1MTYgcGNpX3N1Yl92ZW5kb3JfaWQ7CisJdTE2IHBjaV9zdWJfc3lzdGVtX2lkOworCXU4IHBjaV9idXNfbnVtYmVyOworCXU4IHBjaV9kZXZpY2VfbnVtYmVyOworCXU4IHBjaV9mdW5jdGlvbl9udW1iZXI7CisJdTggaW50ZXJmYWNlX3R5cGU7CisJdTY0IHVuaXF1ZV9pZGVudGlmaWVyOworCXU4IG5ldGZpbHRlcnM7CisJdTggcnN2ZDBbM107CisJdTggZnV0dXJlX3UzMls0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwlzdHJ1Y3QgbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMgcGFyYW1zOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzX3Jlc3AgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXN0cnVjdCBtZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyBwYXJhbXM7Cit9IF9fcGFja2VkOworCisvKiBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgKi8KKworI2RlZmluZSBHRVRfTUdNVF9DT05UUk9MTEVSX1dTKHBoYmEpICAgIChwaGJhLT5wbWdtdF93cykKKworLyogTUdNVCBDTUQgZmxhZ3MgKi8KKworI2RlZmluZSBNR01UX0NNREhfRlJFRSAgICAgICAgICAgICAgICAoMTw8MCkKKworLyogIC0tLSBNR01UX0VSUk9SX0NPREVTIC0tLSAqLworLyogIEVycm9yIENvZGVzIHJldHVybmVkIGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIENNRCByZXNwb25zZSBoZWFkZXIgKi8KKyNkZWZpbmUgTUdNVF9TVEFUVVNfU1VDQ0VTUyAwCS8qIFRoZSBDTUQgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzICovCisjZGVmaW5lIE1HTVRfU1RBVFVTX0ZBSUxFRCAxCS8qIEVycm9yIHN0YXR1cyBpbiB0aGUgU3RhdHVzIGZpZWxkIG9mICovCisJCQkJLyogdGhlIENNRF9SRVNQT05TRV9IRUFERVIgICovCisKKyNkZWZpbmUgSVNDU0lfR0VUX1BEVV9URU1QTEFURV9BRERSRVNTKHBjLCBwYSkge1wKKyAgICBwYS0+bG8gPSBwaGJhLT5pbml0X21lbVtJU0NTSV9NRU1fR0xPQkFMX0hFQURFUl0ubWVtX2FycmF5WzBdLlwKKwkJCQkJYnVzX2FkZHJlc3MudS5hMzIuYWRkcmVzc19sbzsgIFwKKyAgICBwYS0+aGkgPSBwaGJhLT5pbml0X21lbVtJU0NTSV9NRU1fR0xPQkFMX0hFQURFUl0ubWVtX2FycmF5WzBdLlwKKwkJCQkJYnVzX2FkZHJlc3MudS5hMzIuYWRkcmVzc19oaTsgIFwKK30KKworc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgeworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzICpzZXNzOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmNvbm47CisJdW5zaWduZWQgc2hvcnQgaXBfdHlwZTsKKwljaGFyIGRzdDZfYWRkcltJU0NTSV9BRERSRVNTX0JVRl9MRU5dOworCXVuc2lnbmVkIGxvbmcgZHN0X2FkZHI7CisJdW5zaWduZWQgc2hvcnQgZXBfY2lkOworCXVuc2lnbmVkIGludCBmd19oYW5kbGU7CisJdTE2IGRzdF90Y3Bwb3J0OworCXUxNiBjaWRfdmxkOworfTsKKwordW5zaWduZWQgY2hhciBtZ210X2dldF9md19jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQkgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKKwordW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJCSBzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IGNpZCwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IGlzc3VlX3Jlc2V0LAorCQkJCQkgdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9iZmEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2MDA5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvTWFrZWZpbGUKQEAgLTAsMCArMSwxNSBAQAorb2JqLSQoQ09ORklHX1NDU0lfQkZBX0ZDKSA6PSBiZmEubworCitiZmEteSA6PSBiZmFkLm8gYmZhZF9pbnRyLm8gYmZhZF9vcy5vIGJmYWRfaW0ubyBiZmFkX2F0dHIubyBiZmFkX2Z3aW1nLm8KKworYmZhLXkgKz0gYmZhX2NvcmUubyBiZmFfaW9jLm8gYmZhX2lvY2ZjLm8gYmZhX2ZjeHAubyBiZmFfbHBzLm8KK2JmYS15ICs9IGJmYV9od19jYi5vIGJmYV9od19jdC5vIGJmYV9pbnRyLm8gYmZhX3RpbWVyLm8gYmZhX3Jwb3J0Lm8gCitiZmEteSArPSBiZmFfZmNwb3J0Lm8gYmZhX3BvcnQubyBiZmFfdWYubyBiZmFfc2dwZy5vIGJmYV9tb2R1bGUubyBiZmFfaW9pbS5vCitiZmEteSArPSBiZmFfaXRuaW0ubyBiZmFfZmNwaW0ubyBiZmFfdHNraW0ubyBiZmFfbG9nLm8gYmZhX2xvZ19tb2R1bGUubworYmZhLXkgKz0gYmZhX2NzZGVidWcubyBiZmFfc20ubyBwbG9nLm8KKworYmZhLXkgKz0gZmNidWlsZC5vIGZhYnJpYy5vIGZjcGltLm8gdmZhcGkubyBmY3B0bS5vIGJmYV9mY3MubyBiZmFfZmNzX3BvcnQubyAKK2JmYS15ICs9IGJmYV9mY3NfdWYubyBiZmFfZmNzX2xwb3J0Lm8gZmFiLm8gZmRtaS5vIG1zLm8gbnMubyBzY24ubyBsb29wLm8KK2JmYS15ICs9IGxwb3J0X2FwaS5vIG4ybi5vIHJwb3J0Lm8gcnBvcnRfYXBpLm8gcnBvcnRfZnRycy5vIHZwb3J0Lm8KKworY2NmbGFncy15IDo9IC1JJChvYmopIC1JJChvYmopL2luY2x1ZGUgLUkkKG9iaikvaW5jbHVkZS9jbmEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NhbGxiYWNrX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NhbGxiYWNrX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTMyNjVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2FsbGJhY2tfcHJpdi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9DQUxMQkFDS19QUklWX0hfXworI2RlZmluZSBfX0JGQV9DQUxMQkFDS19QUklWX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKwordHlwZWRlZiB2b2lkICAgICgqYmZhX2NiX2NiZm5fdCkgKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKKworLyoqCisgKiBHZW5lcmljIEJGQSBjYWxsYmFjayBlbGVtZW50LgorICovCitzdHJ1Y3QgYmZhX2NiX3FlX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBxZTsKKwliZmFfY2JfY2Jmbl90ICBjYmZuOworCWJmYV9ib29sZWFuX3QgICBvbmNlOworCXUzMgkJcnN2ZDsKKwl2b2lkICAgICAgICAgICAqY2Jhcmc7Cit9OworCisjZGVmaW5lIGJmYV9jYl9xdWV1ZShfX2JmYSwgX19oY2JfcWUsIF9fY2JmbiwgX19jYmFyZykgZG8gewkJXAorCShfX2hjYl9xZSktPmNiZm4gID0gKF9fY2Jmbik7ICAgICAgXAorCShfX2hjYl9xZSktPmNiYXJnID0gKF9fY2JhcmcpOyAgICAgIFwKKwlsaXN0X2FkZF90YWlsKCYoX19oY2JfcWUpLT5xZSwgJihfX2JmYSktPmNvbXBfcSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfY2JfZGVxdWV1ZShfX2hjYl9xZSkJbGlzdF9kZWwoJihfX2hjYl9xZSktPnFlKQorCisjZGVmaW5lIGJmYV9jYl9xdWV1ZV9vbmNlKF9fYmZhLCBfX2hjYl9xZSwgX19jYmZuLCBfX2NiYXJnKSBkbyB7CVwKKwkoX19oY2JfcWUpLT5jYmZuICA9IChfX2NiZm4pOyAgICAgIFwKKwkoX19oY2JfcWUpLT5jYmFyZyA9IChfX2NiYXJnKTsgICAgICBcCisJaWYgKCEoX19oY2JfcWUpLT5vbmNlKSB7ICAgICAgXAorCQlsaXN0X2FkZF90YWlsKChfX2hjYl9xZSksICYoX19iZmEpLT5jb21wX3EpOyAgICAgIFwKKwkJKF9faGNiX3FlKS0+b25jZSA9IEJGQV9UUlVFOwkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfY2JfcXVldWVfZG9uZShfX2hjYl9xZSkgZG8gewkJCQlcCisJKF9faGNiX3FlKS0+b25jZSA9IEJGQV9GQUxTRTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0JGQV9DQUxMQkFDS19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2JfaW9pbV9tYWNyb3MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NiX2lvaW1fbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1MGM4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NiX2lvaW1fbWFjcm9zLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2NiX2lvaW1fbWFjcm9zLmggQkZBIElPSU0gZHJpdmVyIGludGVyZmFjZSBtYWNyb3MuCisgKi8KKworI2lmbmRlZiBfX0JGQV9IQ0JfSU9JTV9NQUNST1NfSF9fCisjZGVmaW5lIF9fQkZBX0hDQl9JT0lNX01BQ1JPU19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKy8qCisgKiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyAqCisgKiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+ICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPiAjaW5jbHVkZQorICogPHNjc2kvc2NzaV9kZXZpY2UuaD4gI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisgKi8KKyNpbmNsdWRlICJiZmFkX2ltX2NvbXBhdC5oIgorCisvKgorICogdGFzayBhdHRyaWJ1dGUgdmFsdWVzIGluIEZDUC0yIEZDUF9DTU5EIElVCisgKi8KKyNkZWZpbmUgU0lNUExFX1EgICAgMAorI2RlZmluZSBIRUFEX09GX1EgICAxCisjZGVmaW5lIE9SREVSRURfUSAgIDIKKyNkZWZpbmUgQUNBX1EgICAgICAgNAorI2RlZmluZSBVTlRBR0dFRCAgICA1CisKK3N0YXRpYyBpbmxpbmUgbHVuX3QKK2JmYWRfaW50X3RvX2x1bih1MzIgbHVubykKK3sKKwl1bmlvbiB7CisJCXUxNiAgICAgICAgc2NzaV9sdW5bNF07CisJCWx1bl90ICAgICAgICAgICBiZmFfbHVuOworCX0gbHVuOworCisJbHVuLmJmYV9sdW4gICAgID0gMDsKKwlsdW4uc2NzaV9sdW5bMF0gPSBiZmFfb3NfaHRvbnMobHVubyk7CisKKwlyZXR1cm4gKGx1bi5iZmFfbHVuKTsKK30KKworLyoqCisgKiBHZXQgTFVOIGZvciB0aGUgSS9PIHJlcXVlc3QKKyAqLworI2RlZmluZSBiZmFfY2JfaW9pbV9nZXRfbHVuKF9fZGlvKQlcCisJYmZhZF9pbnRfdG9fbHVuKCgoc3RydWN0IHNjc2lfY21uZCAqKV9fZGlvKS0+ZGV2aWNlLT5sdW4pCisKKy8qKgorICogR2V0IENEQiBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdTggKgorYmZhX2NiX2lvaW1fZ2V0X2NkYihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisKKwlyZXR1cm4gKCh1OCAqKSBjbW5kLT5jbW5kKTsKK30KKworLyoqCisgKiBHZXQgSS9PIGRpcmVjdGlvbiAocmVhZC93cml0ZSkgZm9yIHRoZSBJL08gcmVxdWVzdAorICovCitzdGF0aWMgaW5saW5lIGVudW0gZmNwX2lvZGlyCitiZmFfY2JfaW9pbV9nZXRfaW9kaXIoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYWRpcjsKKworCWRtYWRpciA9IGNtbmQtPnNjX2RhdGFfZGlyZWN0aW9uOworCWlmIChkbWFkaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJcmV0dXJuIEZDUF9JT0RJUl9XUklURTsKKwllbHNlIGlmIChkbWFkaXIgPT0gRE1BX0ZST01fREVWSUNFKQorCQlyZXR1cm4gRkNQX0lPRElSX1JFQUQ7CisJZWxzZQorCQlyZXR1cm4gRkNQX0lPRElSX05PTkU7Cit9CisKKy8qKgorICogR2V0IElPIHNpemUgaW4gYnl0ZXMgZm9yIHRoZSBJL08gcmVxdWVzdAorICovCitzdGF0aWMgaW5saW5lIHUzMgorYmZhX2NiX2lvaW1fZ2V0X3NpemUoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCisJcmV0dXJuIChzY3NpX2J1ZmZsZW4oY21uZCkpOworfQorCisvKioKKyAqIEdldCB0aW1lb3V0IGZvciB0aGUgSS9PIHJlcXVlc3QKKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X3RpbWVvdXQoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCS8qCisJICogVEJEOiBuZWVkIGEgdGltZW91dCBmb3Igc2NzaSBwYXNzdGhydQorCSAqLworCWlmIChjbW5kLT5kZXZpY2UtPmhvc3QgPT0gTlVMTCkKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHZXQgU0cgZWxlbWVudCBmb3IgdGhlIEkvTyByZXF1ZXN0IGdpdmVuIHRoZSBTRyBlbGVtZW50IGluZGV4CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5pb24gYmZpX2FkZHJfdQorYmZhX2NiX2lvaW1fZ2V0X3NnYWRkcihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywgaW50IHNnZWlkKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZTsKKwl1NjQgICAgICAgIGFkZHI7CisKKwlzZ2UgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopc2NzaV9zZ2xpc3QoY21uZCkgKyBzZ2VpZDsKKwlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2dlKTsKKworCXJldHVybiAoKih1bmlvbiBiZmlfYWRkcl91ICopICZhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIKK2JmYV9jYl9pb2ltX2dldF9zZ2xlbihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywgaW50IHNnZWlkKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZTsKKwl1MzIgICAgICAgIGxlbjsKKworCXNnZSA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzY3NpX3NnbGlzdChjbW5kKSArIHNnZWlkOworCWxlbiA9IHNnX2RtYV9sZW4oc2dlKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogR2V0IENvbW1hbmQgUmVmZXJlbmNlIE51bWJlciBmb3IgdGhlIEkvTyByZXF1ZXN0LiAwIGlmIG5vbmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTgKK2JmYV9jYl9pb2ltX2dldF9jcm4oc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogR2V0IFNBTS0zIHByaW9yaXR5IGZvciB0aGUgSS9PIHJlcXVlc3QuIDAgaXMgZGVmYXVsdC4KKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X3ByaW9yaXR5KHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIEdldCB0YXNrIGF0dHJpYnV0ZXMgZm9yIHRoZSBJL08gcmVxdWVzdC4gRGVmYXVsdCBpcyBGQ1BfVEFTS19BVFRSX1NJTVBMRSgwKS4KKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X3Rhc2thdHRyKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwl1OCAgICAgICAgIHRhc2tfYXR0ciA9IFVOVEFHR0VEOworCisJaWYgKGNtbmQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkgeworCQlzd2l0Y2ggKGNtbmQtPnRhZykgeworCQljYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgorCQkJdGFza19hdHRyID0gSEVBRF9PRl9ROworCQkJYnJlYWs7CisJCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6CisJCQl0YXNrX2F0dHIgPSBPUkRFUkVEX1E7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRhc2tfYXR0ciA9IFNJTVBMRV9ROworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdGFza19hdHRyOworfQorCisvKioKKyAqIEdldCBDREIgbGVuZ3RoIGluIGJ5dGVzIGZvciB0aGUgSS9PIHJlcXVlc3QuIERlZmF1bHQgaXMgRkNQX0NNTkRfQ0RCX0xFTigxNikuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTgKK2JmYV9jYl9pb2ltX2dldF9jZGJsZW4oc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCisJcmV0dXJuIChjbW5kLT5jbWRfbGVuKTsKK30KKworCisKKyNlbmRpZiAvKiBfX0JGQV9IQ0JfSU9JTV9NQUNST1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jZWUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTU5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jZWUuYwpAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19jZWUuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGNlZS9iZmFfY2VlLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9jZWUuaD4KKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGNuYS9iZmFfY25hX3RyY21vZC5oPgorCitCRkFfVFJDX0ZJTEUoQ05BLCBDRUUpOworCisjZGVmaW5lIGJmYV9pb2NfcG9ydGlkKF9faW9jKSAoKF9faW9jKS0+cG9ydF9pZCkKKyNkZWZpbmUgYmZhX2xwdWlkKF9fYXJnKSBiZmFfaW9jX3BvcnRpZCgmKF9fYXJnKS0+aW9jKQorCitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfbGxkcF9jZmcoc3RydWN0IGJmYV9jZWVfbGxkcF9jZmdfcyAqbGxkcF9jZmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9jZWVfZm9ybWF0X2RjYmN4X3N0YXRzKHN0cnVjdCBiZmFfY2VlX2RjYnhfc3RhdHNfcworCQkJCQkgICAqZGNiY3hfc3RhdHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9jZWVfZm9ybWF0X2xsZHBfc3RhdHMoc3RydWN0IGJmYV9jZWVfbGxkcF9zdGF0c19zCisJCQkJCSAgKmxsZHBfc3RhdHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9jZWVfZm9ybWF0X2NmZ19zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9jZmdfc3RhdHNfcyAqY2ZnX3N0YXRzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9jZWVfY2ZnKHZvaWQgKmJ1ZmZlcik7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfY2VlX3N0YXRzKHZvaWQgKmJ1ZmZlcik7CisKK3N0YXRpYyB2b2lkCitiZmFfY2VlX2Zvcm1hdF9jZWVfc3RhdHModm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBiZmFfY2VlX3N0YXRzX3MgKmNlZV9zdGF0cyA9IGJ1ZmZlcjsKKwliZmFfY2VlX2Zvcm1hdF9kY2JjeF9zdGF0cygmY2VlX3N0YXRzLT5kY2J4X3N0YXRzKTsKKwliZmFfY2VlX2Zvcm1hdF9sbGRwX3N0YXRzKCZjZWVfc3RhdHMtPmxsZHBfc3RhdHMpOworCWJmYV9jZWVfZm9ybWF0X2NmZ19zdGF0cygmY2VlX3N0YXRzLT5jZmdfc3RhdHMpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2NlZV9mb3JtYXRfY2VlX2NmZyh2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGJmYV9jZWVfYXR0cl9zICpjZWVfY2ZnID0gYnVmZmVyOworCWJmYV9jZWVfZm9ybWF0X2xsZHBfY2ZnKCZjZWVfY2ZnLT5sbGRwX3JlbW90ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfY2VlX2Zvcm1hdF9kY2JjeF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9kY2J4X3N0YXRzX3MgKmRjYmN4X3N0YXRzKQoreworCWRjYmN4X3N0YXRzLT5zdWJ0bHZzX3VucmVjb2duaXplZCA9CisJCWJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+c3VidGx2c191bnJlY29nbml6ZWQpOworCWRjYmN4X3N0YXRzLT5uZWdvdGlhdGlvbl9mYWlsZWQgPQorCQliZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPm5lZ290aWF0aW9uX2ZhaWxlZCk7CisJZGNiY3hfc3RhdHMtPnJlbW90ZV9jZmdfY2hhbmdlZCA9CisJCWJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+cmVtb3RlX2NmZ19jaGFuZ2VkKTsKKwlkY2JjeF9zdGF0cy0+dGx2c19yZWNlaXZlZCA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+dGx2c19yZWNlaXZlZCk7CisJZGNiY3hfc3RhdHMtPnRsdnNfaW52YWxpZCA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+dGx2c19pbnZhbGlkKTsKKwlkY2JjeF9zdGF0cy0+c2Vxbm8gPSBiZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPnNlcW5vKTsKKwlkY2JjeF9zdGF0cy0+YWNrbm8gPSBiZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPmFja25vKTsKKwlkY2JjeF9zdGF0cy0+cmVjdmRfc2Vxbm8gPSBiZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPnJlY3ZkX3NlcW5vKTsKKwlkY2JjeF9zdGF0cy0+cmVjdmRfYWNrbm8gPSBiZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPnJlY3ZkX2Fja25vKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2xsZHBfc3RhdHMoc3RydWN0IGJmYV9jZWVfbGxkcF9zdGF0c19zICpsbGRwX3N0YXRzKQoreworCWxsZHBfc3RhdHMtPmZyYW1lc190cmFuc21pdHRlZCA9CisJCWJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfdHJhbnNtaXR0ZWQpOworCWxsZHBfc3RhdHMtPmZyYW1lc19hZ2VkX291dCA9IGJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfYWdlZF9vdXQpOworCWxsZHBfc3RhdHMtPmZyYW1lc19kaXNjYXJkZWQgPQorCQliZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+ZnJhbWVzX2Rpc2NhcmRlZCk7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX2luX2Vycm9yID0gYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc19pbl9lcnJvcik7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX3JjdmQgPSBiZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+ZnJhbWVzX3JjdmQpOworCWxsZHBfc3RhdHMtPnRsdnNfZGlzY2FyZGVkID0gYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPnRsdnNfZGlzY2FyZGVkKTsKKwlsbGRwX3N0YXRzLT50bHZzX3VucmVjb2duaXplZCA9CisJCWJmYV9vc19udG9obChsbGRwX3N0YXRzLT50bHZzX3VucmVjb2duaXplZCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfY2VlX2Zvcm1hdF9jZmdfc3RhdHMoc3RydWN0IGJmYV9jZWVfY2ZnX3N0YXRzX3MgKmNmZ19zdGF0cykKK3sKKwljZmdfc3RhdHMtPmNlZV9zdGF0dXNfZG93biA9IGJmYV9vc19udG9obChjZmdfc3RhdHMtPmNlZV9zdGF0dXNfZG93bik7CisJY2ZnX3N0YXRzLT5jZWVfc3RhdHVzX3VwID0gYmZhX29zX250b2hsKGNmZ19zdGF0cy0+Y2VlX3N0YXR1c191cCk7CisJY2ZnX3N0YXRzLT5jZWVfaHdfY2ZnX2NoYW5nZWQgPQorCQliZmFfb3NfbnRvaGwoY2ZnX3N0YXRzLT5jZWVfaHdfY2ZnX2NoYW5nZWQpOworCWNmZ19zdGF0cy0+cmVjdmRfaW52YWxpZF9jZmcgPQorCQliZmFfb3NfbnRvaGwoY2ZnX3N0YXRzLT5yZWN2ZF9pbnZhbGlkX2NmZyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfY2VlX2Zvcm1hdF9sbGRwX2NmZyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX2NmZ19zICpsbGRwX2NmZykKK3sKKwlsbGRwX2NmZy0+dGltZV90b19pbnRlcnZhbCA9IGJmYV9vc19udG9ocyhsbGRwX2NmZy0+dGltZV90b19pbnRlcnZhbCk7CisJbGxkcF9jZmctPmVuYWJsZWRfc3lzdGVtX2NhcCA9CisJCWJmYV9vc19udG9ocyhsbGRwX2NmZy0+ZW5hYmxlZF9zeXN0ZW1fY2FwKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2F0dHJfbWVtaW5mbygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gdm9pZAorICoKKyAqIEByZXR1cm4gU2l6ZSBvZiBETUEgcmVnaW9uCisgKi8KK3N0YXRpYyAgICAgICAgICB1MzIKK2JmYV9jZWVfYXR0cl9tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MpLCBCRkFfRE1BX0FMSUdOX1NaKTsKK30KKworLyoqCisgKiBiZmFfY2VlX3N0YXRzX21lbWluZm8oKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIFNpemUgb2YgRE1BIHJlZ2lvbgorICovCitzdGF0aWMgICAgICAgICAgdTMyCitiZmFfY2VlX3N0YXRzX21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfY2VlX3N0YXRzX3MpLCBCRkFfRE1BX0FMSUdOX1NaKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9hdHRyX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gY2VlIC0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX2NlZV9nZXRfYXR0cl9pc3Ioc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCWNlZS0+Z2V0X2F0dHJfc3RhdHVzID0gc3RhdHVzOworCWJmYV90cmMoY2VlLCAwKTsKKwlpZiAoc3RhdHVzID09IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQkvKgorCQkgKiBUaGUgcmVxdWVzdGVkIGRhdGEgaGFzIGJlZW4gY29waWVkIHRvIHRoZSBETUEgYXJlYSwgKnByb2Nlc3MKKwkJICogaXQuCisJCSAqLworCQltZW1jcHkoY2VlLT5hdHRyLCBjZWUtPmF0dHJfZG1hLmt2YSwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MpKTsKKwkJYmZhX2NlZV9mb3JtYXRfY2VlX2NmZyhjZWUtPmF0dHIpOworCX0KKwljZWUtPmdldF9hdHRyX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJaWYgKGNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmZuKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4oY2VlLT5jYmZuLmdldF9hdHRyX2NiYXJnLCBzdGF0dXMpOworCX0KKwliZmFfdHJjKGNlZSwgMCk7Cit9CisKKy8qKgorICogYmZhX2NlZV9nZXRfYXR0cl9pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9jZWVfZ2V0X3N0YXRzX2lzcihzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJY2VlLT5nZXRfc3RhdHNfc3RhdHVzID0gc3RhdHVzOworCWJmYV90cmMoY2VlLCAwKTsKKwlpZiAoc3RhdHVzID09IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQkvKgorCQkgKiBUaGUgcmVxdWVzdGVkIGRhdGEgaGFzIGJlZW4gY29waWVkIHRvIHRoZSBETUEgYXJlYSwgcHJvY2VzcworCQkgKiBpdC4KKwkJICovCisJCW1lbWNweShjZWUtPnN0YXRzLCBjZWUtPnN0YXRzX2RtYS5rdmEsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGJmYV9jZWVfc3RhdHNfcykpOworCQliZmFfY2VlX2Zvcm1hdF9jZWVfc3RhdHMoY2VlLT5zdGF0cyk7CisJfQorCWNlZS0+Z2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJYmZhX3RyYyhjZWUsIDApOworCWlmIChjZWUtPmNiZm4uZ2V0X3N0YXRzX2NiZm4pIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQljZWUtPmNiZm4uZ2V0X3N0YXRzX2NiZm4oY2VlLT5jYmZuLmdldF9zdGF0c19jYmFyZywgc3RhdHVzKTsKKwl9CisJYmZhX3RyYyhjZWUsIDApOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X2F0dHJfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfY2VlX3Jlc2V0X3N0YXRzX2lzcihzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJY2VlLT5yZXNldF9zdGF0c19zdGF0dXMgPSBzdGF0dXM7CisJY2VlLT5yZXNldF9zdGF0c19wZW5kaW5nID0gQkZBX0ZBTFNFOworCWlmIChjZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbikKKwkJY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4oY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiYXJnLCBzdGF0dXMpOworfQorCisvKioKKyAqIGJmYV9jZWVfbWVtaW5mbygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gdm9pZAorICoKKyAqIEByZXR1cm4gU2l6ZSBvZiBETUEgcmVnaW9uCisgKi8KK3UzMgorYmZhX2NlZV9tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIChiZmFfY2VlX2F0dHJfbWVtaW5mbygpICsgYmZhX2NlZV9zdGF0c19tZW1pbmZvKCkpOworfQorCisvKioKKyAqIGJmYV9jZWVfbWVtX2NsYWltKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgQ0VFIG1vZHVsZSBwb2ludGVyCisgKiAJICAgICAgZG1hX2t2YSBLZXJuZWwgVmlydHVhbCBBZGRyZXNzIG9mIENFRSBETUEgTWVtb3J5CisgKiAJICAgICAgZG1hX3BhICBQaHlzaWNhbCBBZGRyZXNzIG9mIENFRSBETUEgTWVtb3J5CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9jZWVfbWVtX2NsYWltKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgdTggKmRtYV9rdmEsIHU2NCBkbWFfcGEpCit7CisJY2VlLT5hdHRyX2RtYS5rdmEgPSBkbWFfa3ZhOworCWNlZS0+YXR0cl9kbWEucGEgPSBkbWFfcGE7CisJY2VlLT5zdGF0c19kbWEua3ZhID0gZG1hX2t2YSArIGJmYV9jZWVfYXR0cl9tZW1pbmZvKCk7CisJY2VlLT5zdGF0c19kbWEucGEgPSBkbWFfcGEgKyBiZmFfY2VlX2F0dHJfbWVtaW5mbygpOworCWNlZS0+YXR0ciA9IChzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKilkbWFfa3ZhOworCWNlZS0+c3RhdHMgPQorCQkoc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqKShkbWFfa3ZhICsgYmZhX2NlZV9hdHRyX21lbWluZm8oKSk7Cit9CisKKy8qKgorICogYmZhX2NlZV9nZXRfYXR0cigpCisgKgorICogICBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBmL3cgdG8gZmV0Y2ggQ0VFIGF0dHJpYnV0ZXMuCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KKworYmZhX3N0YXR1c190CitiZmFfY2VlX2dldF9hdHRyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgc3RydWN0IGJmYV9jZWVfYXR0cl9zICphdHRyLAorCQkgYmZhX2NlZV9nZXRfYXR0cl9jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zICpjbWQ7CisKKwliZmFfYXNzZXJ0KChjZWUgIT0gTlVMTCkgJiYgKGNlZS0+aW9jICE9IE5VTEwpKTsKKwliZmFfdHJjKGNlZSwgMCk7CisJaWYgKCFiZmFfaW9jX2lzX29wZXJhdGlvbmFsKGNlZS0+aW9jKSkgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKwlpZiAoY2VlLT5nZXRfYXR0cl9wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisJY2VlLT5nZXRfYXR0cl9wZW5kaW5nID0gQkZBX1RSVUU7CisJY21kID0gKHN0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyAqKWNlZS0+Z2V0X2NmZ19tYi5tc2c7CisJY2VlLT5hdHRyID0gYXR0cjsKKwljZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbiA9IGNiZm47CisJY2VlLT5jYmZuLmdldF9hdHRyX2NiYXJnID0gY2Jhcmc7CisJYmZpX2gyaV9zZXQoY21kLT5taCwgQkZJX01DX0NFRSwgQkZJX0NFRV9IMklfR0VUX0NGR19SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChjZWUtPmlvYykpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY21kLT5kbWFfYWRkciwgY2VlLT5hdHRyX2RtYS5wYSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKGNlZS0+aW9jLCAmY2VlLT5nZXRfY2ZnX21iKTsKKwliZmFfdHJjKGNlZSwgMCk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9zdGF0cygpCisgKgorICogICBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBmL3cgdG8gZmV0Y2ggQ0VFIHN0YXRpc3RpY3MuCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KKworYmZhX3N0YXR1c190CitiZmFfY2VlX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIHN0cnVjdCBiZmFfY2VlX3N0YXRzX3MgKnN0YXRzLAorCQkgIGJmYV9jZWVfZ2V0X3N0YXRzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgKmNtZDsKKworCWJmYV9hc3NlcnQoKGNlZSAhPSBOVUxMKSAmJiAoY2VlLT5pb2MgIT0gTlVMTCkpOworCisJaWYgKCFiZmFfaW9jX2lzX29wZXJhdGlvbmFsKGNlZS0+aW9jKSkgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKwlpZiAoY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCWNlZS0+Z2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfVFJVRTsKKwljbWQgPSAoc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zICopY2VlLT5nZXRfc3RhdHNfbWIubXNnOworCWNlZS0+c3RhdHMgPSBzdGF0czsKKwljZWUtPmNiZm4uZ2V0X3N0YXRzX2NiZm4gPSBjYmZuOworCWNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JhcmcgPSBjYmFyZzsKKwliZmlfaDJpX3NldChjbWQtPm1oLCBCRklfTUNfQ0VFLCBCRklfQ0VFX0gySV9HRVRfU1RBVFNfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQoY2VlLT5pb2MpKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGNtZC0+ZG1hX2FkZHIsIGNlZS0+c3RhdHNfZG1hLnBhKTsKKwliZmFfaW9jX21ib3hfcXVldWUoY2VlLT5pb2MsICZjZWUtPmdldF9zdGF0c19tYik7CisJYmZhX3RyYyhjZWUsIDApOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX2NlZV9yZXNldF9zdGF0cygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCisKK2JmYV9zdGF0dXNfdAorYmZhX2NlZV9yZXNldF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIGJmYV9jZWVfcmVzZXRfc3RhdHNfY2Jmbl90IGNiZm4sCisJCSAgICB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX2NlZV9yZXNldF9zdGF0c19zICpjbWQ7CisKKwliZmFfYXNzZXJ0KChjZWUgIT0gTlVMTCkgJiYgKGNlZS0+aW9jICE9IE5VTEwpKTsKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoY2VlLT5pb2MpKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCWlmIChjZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPT0gQkZBX1RSVUUpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKwljZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfVFJVRTsKKwljbWQgPSAoc3RydWN0IGJmaV9jZWVfcmVzZXRfc3RhdHNfcyAqKWNlZS0+cmVzZXRfc3RhdHNfbWIubXNnOworCWNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmZuID0gY2JmbjsKKwljZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JhcmcgPSBjYmFyZzsKKwliZmlfaDJpX3NldChjbWQtPm1oLCBCRklfTUNfQ0VFLCBCRklfQ0VFX0gySV9SRVNFVF9TVEFUUywKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGNlZS0+aW9jKSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKGNlZS0+aW9jLCAmY2VlLT5yZXNldF9zdGF0c19tYik7CisJYmZhX3RyYyhjZWUsIDApOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9jZWVfaXNycygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworCit2b2lkCitiZmFfY2VlX2lzcih2b2lkICpjYmFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXVuaW9uIGJmaV9jZWVfaTJoX21zZ191ICptc2c7CisJc3RydWN0IGJmaV9jZWVfZ2V0X3JzcF9zICpnZXRfcnNwOworCXN0cnVjdCBiZmFfY2VlX3MgKmNlZSA9IChzdHJ1Y3QgYmZhX2NlZV9zICopY2Jhcmc7CisJbXNnID0gKHVuaW9uIGJmaV9jZWVfaTJoX21zZ191ICopbTsKKwlnZXRfcnNwID0gKHN0cnVjdCBiZmlfY2VlX2dldF9yc3BfcyAqKW07CisJYmZhX3RyYyhjZWUsIG1zZy0+bWgubXNnX2lkKTsKKwlzd2l0Y2ggKG1zZy0+bWgubXNnX2lkKSB7CisJY2FzZSBCRklfQ0VFX0kySF9HRVRfQ0ZHX1JTUDoKKwkJYmZhX3RyYyhjZWUsIGdldF9yc3AtPmNtZF9zdGF0dXMpOworCQliZmFfY2VlX2dldF9hdHRyX2lzcihjZWUsIGdldF9yc3AtPmNtZF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIEJGSV9DRUVfSTJIX0dFVF9TVEFUU19SU1A6CisJCWJmYV9jZWVfZ2V0X3N0YXRzX2lzcihjZWUsIGdldF9yc3AtPmNtZF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIEJGSV9DRUVfSTJIX1JFU0VUX1NUQVRTX1JTUDoKKwkJYmZhX2NlZV9yZXNldF9zdGF0c19pc3IoY2VlLCBnZXRfcnNwLT5jbWRfc3RhdHVzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogYmZhX2NlZV9oYmZhaWwoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiB2b2lkCisgKi8KKwordm9pZAorYmZhX2NlZV9oYmZhaWwodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfY2VlX3MgKmNlZTsKKwljZWUgPSAoc3RydWN0IGJmYV9jZWVfcyAqKWFyZzsKKworCWlmIChjZWUtPmdldF9hdHRyX3BlbmRpbmcgPT0gQkZBX1RSVUUpIHsKKwkJY2VlLT5nZXRfYXR0cl9zdGF0dXMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKwkJY2VlLT5nZXRfYXR0cl9wZW5kaW5nID0gQkZBX0ZBTFNFOworCQlpZiAoY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4pIHsKKwkJCWNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmZuKGNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmFyZywKKwkJCQkJCUJGQV9TVEFUVVNfRkFJTEVEKTsKKwkJfQorCX0KKwlpZiAoY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQljZWUtPmdldF9zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKwkJY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwkJaWYgKGNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbikgeworCQkJY2VlLT5jYmZuLmdldF9zdGF0c19jYmZuKGNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JhcmcsCisJCQkJCQkgQkZBX1NUQVRVU19GQUlMRUQpOworCQl9CisJfQorCWlmIChjZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPT0gQkZBX1RSVUUpIHsKKwkJY2VlLT5yZXNldF9zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKwkJY2VlLT5yZXNldF9zdGF0c19wZW5kaW5nID0gQkZBX0ZBTFNFOworCQlpZiAoY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4pIHsKKwkJCWNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmZuKGNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmFyZywKKwkJCQkJCSAgIEJGQV9TVEFUVVNfRkFJTEVEKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBiZmFfY2VlX2F0dGFjaCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gY2VlIC0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICBpb2MgLSBQb2ludGVyIHRvIHRoZSBpb2MgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgIGRldiAtIFBvaW50ZXIgdG8gdGhlIGRldmljZSBkcml2ZXIgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgIFRoZSBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIG1ib3ggSVNSIGZ1bmN0aW9ucyBoYXZlCisgKiAgICAgICAgICAgICAgICAgIHRoaXMgcG9pbnRlciBhcyBvbmUgb2YgdGhlIHBhcmFtZXRlcnMuCisgKiAgICAgICAgICAgIHRyY21vZCAtCisgKiAgICAgICAgICAgIGxvZ21vZCAtCisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9jZWVfYXR0YWNoKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpkZXYsCisJICAgICAgIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpCit7CisJYmZhX2Fzc2VydChjZWUgIT0gTlVMTCk7CisJY2VlLT5kZXYgPSBkZXY7CisJY2VlLT50cmNtb2QgPSB0cmNtb2Q7CisJY2VlLT5sb2dtb2QgPSBsb2dtb2Q7CisJY2VlLT5pb2MgPSBpb2M7CisKKwliZmFfaW9jX21ib3hfcmVnaXNyKGNlZS0+aW9jLCBCRklfTUNfQ0VFLCBiZmFfY2VlX2lzciwgY2VlKTsKKwliZmFfaW9jX2hiZmFpbF9pbml0KCZjZWUtPmhiZmFpbCwgYmZhX2NlZV9oYmZhaWwsIGNlZSk7CisJYmZhX2lvY19oYmZhaWxfcmVnaXN0ZXIoY2VlLT5pb2MsICZjZWUtPmhiZmFpbCk7CisJYmZhX3RyYyhjZWUsIDApOworfQorCisvKioKKyAqIGJmYV9jZWVfZGV0YWNoKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9jZWVfZGV0YWNoKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSkKK3sKKwkvKgorCSAqIEZvciBub3csIGp1c3QgY2hlY2sgaWYgdGhlcmUgaXMgc29tZSBpb2N0bCBwZW5kaW5nIGFuZCBtYXJrIHRoYXQgYXMKKwkgKiBmYWlsZWQ/CisJICovCisJLyogYmZhX2NlZV9oYmZhaWwoY2VlKTsgKi8KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGUyZDExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmYV9pb2NmYy5oPgorCisjZGVmaW5lIERFRl9DRkdfTlVNX0ZBQlJJQ1MgICAgICAgICAxCisjZGVmaW5lIERFRl9DRkdfTlVNX0xQT1JUUyAgICAgICAgICAyNTYKKyNkZWZpbmUgREVGX0NGR19OVU1fQ1FTICAgICAgICAgICAgIDQKKyNkZWZpbmUgREVGX0NGR19OVU1fSU9JTV9SRVFTICAgICAgIChCRkFfSU9JTV9NQVgpCisjZGVmaW5lIERFRl9DRkdfTlVNX1RTS0lNX1JFUVMgICAgICAxMjgKKyNkZWZpbmUgREVGX0NGR19OVU1fRkNYUF9SRVFTICAgICAgIDY0CisjZGVmaW5lIERFRl9DRkdfTlVNX1VGX0JVRlMgICAgICAgICA2NAorI2RlZmluZSBERUZfQ0ZHX05VTV9SUE9SVFMgICAgICAgICAgMTAyNAorI2RlZmluZSBERUZfQ0ZHX05VTV9JVE5JTVMgICAgICAgICAgKERFRl9DRkdfTlVNX1JQT1JUUykKKyNkZWZpbmUgREVGX0NGR19OVU1fVElOUyAgICAgICAgICAgIDI1NgorCisjZGVmaW5lIERFRl9DRkdfTlVNX1NHUEdTICAgICAgICAgICAyMDQ4CisjZGVmaW5lIERFRl9DRkdfTlVNX1JFUVFfRUxFTVMgICAgICAyNTYKKyNkZWZpbmUgREVGX0NGR19OVU1fUlNQUV9FTEVNUyAgICAgIDY0CisjZGVmaW5lIERFRl9DRkdfTlVNX1NCT09UX1RHVFMgICAgICAxNgorI2RlZmluZSBERUZfQ0ZHX05VTV9TQk9PVF9MVU5TICAgICAgMTYKKworLyoqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiBxdWVyeSB0aGUgbWVtb3J5IHJlcXVpcmVtZW50IG9mIHRoZSBCRkEgbGlicmFyeS4KKyAqIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBiZmFfYXR0YWNoKCkgdG8gZ2V0IHRoZQorICogbWVtb3J5IHJlcXVpcmVkIG9mIHRoZSBCRkEgbGF5ZXIgZm9yIGEgZ2l2ZW4gZHJpdmVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBjYWxsIHdpbGwgZmFpbCwgaWYgdGhlIGNhcCBpcyBvdXQgb2YgcmFuZ2UgY29tcGFyZWQgdG8gcHJlLWRlZmluZWQKKyAqIHZhbHVlcyB3aXRoaW4gdGhlIEJGQSBsaWJyYXJ5CisgKgorICogQHBhcmFtW2luXSBjZmcgLSAJcG9pbnRlciB0byBiZmFfaW9jX2NmZ190LiBEcml2ZXIgbGF5ZXIgc2hvdWxkIGluZGljYXRlCisgKiAJCQlpdHMgY29uZmlndXJhdGlvbiBpbiB0aGlzIHN0cnVjdHVyZS4KKyAqCQkJVGhlIGRlZmF1bHQgdmFsdWVzIGZvciBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zIGNhbiBiZQorICoJCQlmZXRjaGVkIHVzaW5nIGJmYV9jZmdfZ2V0X2RlZmF1bHQoKSBBUEkuCisgKgorICogCQkJSWYgY2FwJ3MgYm91bmRhcnkgY2hlY2sgZmFpbHMsIHRoZSBsaWJyYXJ5IHdpbGwgdXNlCisgKgkJCXRoZSBkZWZhdWx0IGJmYV9jYXBfdCB2YWx1ZXMgKGFuZCBsb2cgYSB3YXJuaW5nIG1zZykuCisgKgorICogQHBhcmFtW291dF0gbWVtaW5mbyAtIHBvaW50ZXIgdG8gYmZhX21lbWluZm9fdC4gVGhpcyBjb250ZW50CisgKiAJCQlpbmRpY2F0ZXMgdGhlIG1lbW9yeSB0eXBlIChzZWUgYmZhX21lbV90eXBlX3QpIGFuZAorICoJCQlhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkLgorICoKKyAqCQkJRHJpdmVyIHNob3VsZCBhbGxvY2F0ZSB0aGUgbWVtb3J5LCBwb3B1bGF0ZSB0aGUKKyAqCQkJc3RhcnRpbmcgYWRkcmVzcyBmb3IgZWFjaCBibG9jayBhbmQgcHJvdmlkZSB0aGUgc2FtZQorICoJCQlzdHJ1Y3R1cmUgYXMgaW5wdXQgcGFyYW1ldGVyIHRvIGJmYV9hdHRhY2goKSBjYWxsLgorICoKKyAqIEByZXR1cm4gdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6IEBub3RlCisgKi8KK3ZvaWQKK2JmYV9jZmdfZ2V0X21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbykKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwl1MzIgICAgICAgIGttX2xlbiA9IDAsIGRtX2xlbiA9IDA7CisKKwliZmFfYXNzZXJ0KChjZmcgIT0gTlVMTCkgJiYgKG1lbWluZm8gIT0gTlVMTCkpOworCisJYmZhX29zX21lbXNldCgodm9pZCAqKW1lbWluZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX21lbWluZm9fcykpOworCW1lbWluZm8tPm1lbWluZm9bQkZBX01FTV9UWVBFX0tWQSAtIDFdLm1lbV90eXBlID0KKwkJQkZBX01FTV9UWVBFX0tWQTsKKwltZW1pbmZvLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9ETUEgLSAxXS5tZW1fdHlwZSA9CisJCUJGQV9NRU1fVFlQRV9ETUE7CisKKwliZmFfaW9jZmNfbWVtaW5mbyhjZmcsICZrbV9sZW4sICZkbV9sZW4pOworCisJZm9yIChpID0gMDsgaGFsX21vZHNbaV07IGkrKykKKwkJaGFsX21vZHNbaV0tPm1lbWluZm8oY2ZnLCAma21fbGVuLCAmZG1fbGVuKTsKKworCisJbWVtaW5mby0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfS1ZBIC0gMV0ubWVtX2xlbiA9IGttX2xlbjsKKwltZW1pbmZvLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9ETUEgLSAxXS5tZW1fbGVuID0gZG1fbGVuOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRvIGF0dGFjaCB0aGUgZHJpdmVyIGluc3RhbmNlIHdpdGggdGhlIEJGQQorICogbGlicmFyeS4gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0cmlnZ2VyIGFueSBIVyBpbml0aWFsaXphdGlvbgorICogcHJvY2VzcyAod2hpY2ggd2lsbCBiZSBkb25lIGluIGJmYV9pbml0KCkgY2FsbCkKKyAqCisgKiBUaGlzIGNhbGwgd2lsbCBmYWlsLCBpZiB0aGUgY2FwIGlzIG91dCBvZiByYW5nZSBjb21wYXJlZCB0bworICogcHJlLWRlZmluZWQgdmFsdWVzIHdpdGhpbiB0aGUgQkZBIGxpYnJhcnkKKyAqCisgKiBAcGFyYW1bb3V0XQliZmEJUG9pbnRlciB0byBiZmFfdC4KKyAqIEBwYXJhbVtpbl0JYmZhZCAJT3BhcXVlIGhhbmRsZSBiYWNrIHRvIHRoZSBkcml2ZXIncyBJT0Mgc3RydWN0dXJlCisgKiBAcGFyYW1baW5dCWNmZwlQb2ludGVyIHRvIGJmYV9pb2NfY2ZnX3QuIFNob3VsZCBiZSBzYW1lIHN0cnVjdHVyZQorICogCQkJdGhhdCB3YXMgdXNlZCBpbiBiZmFfY2ZnX2dldF9tZW1pbmZvKCkuCisgKiBAcGFyYW1baW5dIAltZW1pbmZvIFBvaW50ZXIgdG8gYmZhX21lbWluZm9fdC4gVGhlIGRyaXZlciBzaG91bGQKKyAqIAkJCXVzZSB0aGUgYmZhX2NmZ19nZXRfbWVtaW5mbygpIGNhbGwgdG8KKyAqIAkJCWZpbmQgdGhlIG1lbW9yeSBibG9ja3MgcmVxdWlyZWQsIGFsbG9jYXRlIHRoZQorICogCQkJcmVxdWlyZWQgbWVtb3J5IGFuZCBwcm92aWRlIHRoZSBzdGFydGluZyBhZGRyZXNzZXMuCisgKiBAcGFyYW1baW5dIAlwY2lkZXYJcG9pbnRlciB0byBzdHJ1Y3QgYmZhX3BjaWRldl9zCisgKgorICogQHJldHVybgorICogdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqCisgKi8KK3ZvaWQKK2JmYV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkgICAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgKm1lbGVtOworCisJYmZhLT5mY3MgPSBCRkFfRkFMU0U7CisKKwliZmFfYXNzZXJ0KChjZmcgIT0gTlVMTCkgJiYgKG1lbWluZm8gIT0gTlVMTCkpOworCisJLyoqCisJICogaW5pdGlhbGl6ZSBhbGwgbWVtb3J5IHBvaW50ZXJzIGZvciBpdGVyYXRpdmUgYWxsb2NhdGlvbgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBCRkFfTUVNX1RZUEVfTUFYOyBpKyspIHsKKwkJbWVsZW0gPSBtZW1pbmZvLT5tZW1pbmZvICsgaTsKKwkJbWVsZW0tPmt2YV9jdXJwID0gbWVsZW0tPmt2YTsKKwkJbWVsZW0tPmRtYV9jdXJwID0gbWVsZW0tPmRtYTsKKwl9CisKKwliZmFfaW9jZmNfYXR0YWNoKGJmYSwgYmZhZCwgY2ZnLCBtZW1pbmZvLCBwY2lkZXYpOworCisJZm9yIChpID0gMDsgaGFsX21vZHNbaV07IGkrKykKKwkJaGFsX21vZHNbaV0tPmF0dGFjaChiZmEsIGJmYWQsIGNmZywgbWVtaW5mbywgcGNpZGV2KTsKKworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRlbGV0ZSBhIEJGQSBJT0MuIElPQyBzaG91bGQgYmUgc3RvcHBlZCAoYnkKKyAqIGNhbGxpbmcgYmZhX3N0b3AoKSkgYmVmb3JlIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAqCisgKiBAcGFyYW1baW5dIGJmYSAtIHBvaW50ZXIgdG8gYmZhX3QuCisgKgorICogQHJldHVybgorICogdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqLwordm9pZAorYmZhX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5kZXRhY2goYmZhKTsKKworCWJmYV9pb2NmY19kZXRhY2goYmZhKTsKK30KKworCit2b2lkCitiZmFfaW5pdF90cmMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpCit7CisJYmZhLT50cmNtb2QgPSB0cmNtb2Q7Cit9CisKKwordm9pZAorYmZhX2luaXRfbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKQoreworCWJmYS0+bG9nbSA9IGxvZ21vZDsKK30KKworCit2b2lkCitiZmFfaW5pdF9hZW4oc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfYWVuX3MgKmFlbikKK3sKKwliZmEtPmFlbiA9IGFlbjsKK30KKwordm9pZAorYmZhX2luaXRfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJYmZhLT5wbG9nID0gcGxvZzsKK30KKworLyoqCisgKiBJbml0aWFsaXplIElPQy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LCB3aGVuIHRoZSBJT0MgaW5pdGlhbGl6YXRpb24gaXMKKyAqIGNvbXBsZXRlZCwgdGhlIGJmYV9jYl9pbml0KCkgd2lsbCBiZSBjYWxsZWQuCisgKgorICogQHBhcmFtW2luXQliZmEJaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIEBub3RlCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgdGhlIGRyaXZlciBzaG91bGQgcmVnaXN0ZXIgdGhlIGludGVycnVwdCBzZXJ2aWNlCisgKiByb3V0aW5lKHMpIGFuZCBlbmFibGUgdGhlIGRldmljZSBpbnRlcnJ1cHRzLiBJZiB0aGlzIGlzIG5vdCBkb25lLAorICogYmZhX2NiX2luaXQoKSB3aWxsIG5ldmVyIGdldCBjYWxsZWQKKyAqLwordm9pZAorYmZhX2luaXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY2ZjX2luaXQoYmZhKTsKK30KKworLyoqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiBpbml0aWF0ZSB0aGUgSU9DIGNvbmZpZ3VyYXRpb24gc2V0dXAuIFRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LgorICoKKyAqIEBwYXJhbVtpbl0JYmZhCWluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaW9jZmNfc3RhcnQoYmZhKTsKK30KKworLyoqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiBxdWllc2UgdGhlIElPQy4gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpbW1lZGlhdGVseSwKKyAqIHdoZW4gdGhlIElPQyBpcyBhY3R1YWxseSBzdG9wcGVkLCB0aGUgYmZhX2NiX3N0b3AoKSB3aWxsIGJlIGNhbGxlZC4KKyAqCisgKiBAcGFyYW1baW5dIAliZmEgLSBwb2ludGVyIHRvIGJmYV90LgorICoKKyAqIEByZXR1cm4gTm9uZQorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKiBiZmFfY2Jfc3RvcCgpIGNvdWxkIGJlIGNhbGxlZCBiZWZvcmUgb3IgYWZ0ZXIgYmZhX3N0b3AoKSByZXR1cm5zLgorICoKKyAqIEBub3RlCisgKiBJbiBjYXNlIG9mIGFueSBmYWlsdXJlLCB3ZSBjb3VsZCBoYW5kbGUgaXQgYXV0b21hdGljYWxseSBieSBkb2luZyBhCisgKiByZXNldCBhbmQgdGhlbiBzdWNjZWVkIHRoZSBiZmFfc3RvcCgpIGNhbGwuCisgKi8KK3ZvaWQKK2JmYV9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NmY19zdG9wKGJmYSk7Cit9CisKK3ZvaWQKK2JmYV9jb21wX2RlcShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKQoreworCUlOSVRfTElTVF9IRUFEKGNvbXBfcSk7CisJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZiZmEtPmNvbXBfcSwgY29tcF9xKTsKK30KKwordm9pZAorYmZhX2NvbXBfcHJvY2VzcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKQoreworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWVuOworCXN0cnVjdCBiZmFfY2JfcWVfcyAgICpoY2JfcWU7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgY29tcF9xKSB7CisJCWhjYl9xZSA9IChzdHJ1Y3QgYmZhX2NiX3FlX3MgKikgcWU7CisJCWhjYl9xZS0+Y2JmbihoY2JfcWUtPmNiYXJnLCBCRkFfVFJVRSk7CisJfQorfQorCit2b2lkCitiZmFfY29tcF9mcmVlKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlOworCXN0cnVjdCBiZmFfY2JfcWVfcyAgICpoY2JfcWU7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoY29tcF9xKSkgeworCQliZmFfcV9kZXEoY29tcF9xLCAmcWUpOworCQloY2JfcWUgPSAoc3RydWN0IGJmYV9jYl9xZV9zICopIHFlOworCQloY2JfcWUtPmNiZm4oaGNiX3FlLT5jYmFyZywgQkZBX0ZBTFNFKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9hdHRhY2hfZmNzKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYS0+ZmNzID0gQkZBX1RSVUU7Cit9CisKKy8qKgorICogUGVyaW9kaWMgdGltZXIgaGVhcnQgYmVhdCBmcm9tIGRyaXZlcgorICovCit2b2lkCitiZmFfdGltZXJfdGljayhzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfdGltZXJfYmVhdCgmYmZhLT50aW1lcl9tb2QpOworfQorCisjaWZuZGVmIEJGQV9CSU9TX0JVSUxECisvKioKKyAqIFJldHVybiB0aGUgbGlzdCBvZiBQQ0kgdmVuZG9yL2RldmljZSBpZCBsaXN0cyBzdXBwb3J0ZWQgYnkgdGhpcworICogQkZBIGluc3RhbmNlLgorICovCit2b2lkCitiZmFfZ2V0X3BjaWlkcyhzdHJ1Y3QgYmZhX3BjaWlkX3MgKipwY2lpZHMsIGludCAqbnBjaWlkcykKK3sKKwlzdGF0aWMgc3RydWN0IGJmYV9wY2lpZF9zIF9fcGNpaWRzW10gPSB7CisJCXtCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLCBCRkFfUENJX0RFVklDRV9JRF9GQ184RzJQfSwKKwkJe0JGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsIEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMVB9LAorCQl7QkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwgQkZBX1BDSV9ERVZJQ0VfSURfQ1R9LAorCX07CisKKwkqbnBjaWlkcyA9IHNpemVvZihfX3BjaWlkcykgLyBzaXplb2YoX19wY2lpZHNbMF0pOworCSpwY2lpZHMgPSBfX3BjaWlkczsKK30KKworLyoqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiBxdWVyeSB0aGUgZGVmYXVsdCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zIHZhbHVlIChjb21waWxlZAorICogaW50byBCRkEgbGF5ZXIpLiBUaGUgT1MgZHJpdmVyIGNhbiB0aGVuIHR1cm4gYmFjayBhbmQgb3ZlcndyaXRlIGVudHJpZXMgdGhhdAorICogaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIuCisgKgorICogQHBhcmFtW2luXSBjZmcgLSBwb2ludGVyIHRvIGJmYV9pb2NfY2ZnX3QKKyAqCisgKiBAcmV0dXJuCisgKgl2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqIAlub3RlCisgKi8KK3ZvaWQKK2JmYV9jZmdfZ2V0X2RlZmF1bHQoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnKQoreworCWNmZy0+ZndjZmcubnVtX2ZhYnJpY3MgPSBERUZfQ0ZHX05VTV9GQUJSSUNTOworCWNmZy0+ZndjZmcubnVtX2xwb3J0cyA9IERFRl9DRkdfTlVNX0xQT1JUUzsKKwljZmctPmZ3Y2ZnLm51bV9ycG9ydHMgPSBERUZfQ0ZHX05VTV9SUE9SVFM7CisJY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzID0gREVGX0NGR19OVU1fSU9JTV9SRVFTOworCWNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMgPSBERUZfQ0ZHX05VTV9UU0tJTV9SRVFTOworCWNmZy0+ZndjZmcubnVtX2ZjeHBfcmVxcyA9IERFRl9DRkdfTlVNX0ZDWFBfUkVRUzsKKwljZmctPmZ3Y2ZnLm51bV91Zl9idWZzID0gREVGX0NGR19OVU1fVUZfQlVGUzsKKwljZmctPmZ3Y2ZnLm51bV9jcXMgPSBERUZfQ0ZHX05VTV9DUVM7CisKKwljZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyA9IERFRl9DRkdfTlVNX1JFUVFfRUxFTVM7CisJY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXMgPSBERUZfQ0ZHX05VTV9SU1BRX0VMRU1TOworCWNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyA9IERFRl9DRkdfTlVNX1NHUEdTOworCWNmZy0+ZHJ2Y2ZnLm51bV9zYm9vdF90Z3RzID0gREVGX0NGR19OVU1fU0JPT1RfVEdUUzsKKwljZmctPmRydmNmZy5udW1fc2Jvb3RfbHVucyA9IERFRl9DRkdfTlVNX1NCT09UX0xVTlM7CisJY2ZnLT5kcnZjZmcucGF0aF90b3YgPSBCRkFfRkNQSU1fUEFUSFRPVl9ERUY7CisJY2ZnLT5kcnZjZmcuaW9jX3JlY292ZXIgPSBCRkFfRkFMU0U7CisJY2ZnLT5kcnZjZmcuZGVsYXlfY29tcCA9IEJGQV9GQUxTRTsKKworfQorCit2b2lkCitiZmFfY2ZnX2dldF9taW4oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnKQoreworCWJmYV9jZmdfZ2V0X2RlZmF1bHQoY2ZnKTsKKwljZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgICA9IEJGQV9JT0lNX01JTjsKKwljZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzICA9IEJGQV9UU0tJTV9NSU47CisJY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzICAgPSBCRkFfRkNYUF9NSU47CisJY2ZnLT5md2NmZy5udW1fdWZfYnVmcyAgICAgPSBCRkFfVUZfTUlOOworCWNmZy0+ZndjZmcubnVtX3Jwb3J0cyAgICAgID0gQkZBX1JQT1JUX01JTjsKKworCWNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyAgICAgID0gQkZBX1NHUEdfTUlOOworCWNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zID0gQkZBX1JFUVFfTkVMRU1TX01JTjsKKwljZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyA9IEJGQV9SU1BRX05FTEVNU19NSU47CisJY2ZnLT5kcnZjZmcubWluX2NmZyAgICAgICAgPSBCRkFfVFJVRTsKK30KKwordm9pZAorYmZhX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgKmlvY19hdHRyKQoreworCWJmYV9pb2NfZ2V0X2F0dHIoJmJmYS0+aW9jLCBpb2NfYXR0cik7Cit9CisKKy8qKgorICogUmV0cmlldmUgZmlybXdhcmUgdHJhY2UgaW5mb3JtYXRpb24gb24gSU9DIGZhaWx1cmUuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2RlYnVnX2Z3c2F2ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pCit7CisJcmV0dXJuIGJmYV9pb2NfZGVidWdfZndzYXZlKCZiZmEtPmlvYywgdHJjZGF0YSwgdHJjbGVuKTsKK30KKworLyoqCisgKiAJCUZldGNoIGZpcm13YXJlIHRyYWNlIGRhdGEuCisgKgorICogQHBhcmFtW2luXQkJYmZhCQkJQkZBIGluc3RhbmNlCisgKiBAcGFyYW1bb3V0XQkJdHJjZGF0YQkJRmlybXdhcmUgdHJhY2UgYnVmZmVyCisgKiBAcGFyYW1baW4sb3V0XQl0cmNsZW4JCUZpcm13YXJlIHRyYWNlIGJ1ZmZlciBsZW4KKyAqCisgKiBAcmV0dmFsIEJGQV9TVEFUVVNfT0sJCQlGaXJtd2FyZSB0cmFjZSBpcyBmZXRjaGVkLgorICogQHJldHZhbCBCRkFfU1RBVFVTX0lOUFJPR1JFU1MJRmlybXdhcmUgdHJhY2UgZmV0Y2ggaXMgaW4gcHJvZ3Jlc3MuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2RlYnVnX2Z3dHJjKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbikKK3sKKwlyZXR1cm4gYmZhX2lvY19kZWJ1Z19md3RyYygmYmZhLT5pb2MsIHRyY2RhdGEsIHRyY2xlbik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NzZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NzZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjcxZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY3NkZWJ1Zy5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2hhbC5oPgorCisvKioKKyAqICBjc19kZWJ1Z19hcGkKKyAqLworCisKK3ZvaWQKK2JmYV9wYW5pYyhpbnQgbGluZSwgY2hhciAqZmlsZSwgY2hhciAqcGFuaWNzdHIpCit7CisJYmZhX2xvZyhOVUxMLCBCRkFfTE9HX0hBTF9BU1NFUlQsIGZpbGUsIGxpbmUsIHBhbmljc3RyKTsKKwliZmFfb3NfcGFuaWMoKTsKK30KKwordm9pZAorYmZhX3NtX3BhbmljKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtLCBpbnQgbGluZSwgY2hhciAqZmlsZSwgaW50IGV2ZW50KQoreworCWJmYV9sb2cobG9nbSwgQkZBX0xPR19IQUxfU01fQVNTRVJULCBmaWxlLCBsaW5lLCBldmVudCk7CisJYmZhX29zX3BhbmljKCk7Cit9CisKK2ludAorYmZhX3FfaXNfb25fcV9mdW5jKHN0cnVjdCBsaXN0X2hlYWQgKnEsIHN0cnVjdCBsaXN0X2hlYWQgKnFlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICp0cWU7CisKKwl0cWUgPSBiZmFfcV9uZXh0KHEpOworCXdoaWxlICh0cWUgIT0gcSkgeworCQlpZiAodHFlID09IHFlKQorCQkJcmV0dXJuICgxKTsKKwkJdHFlID0gYmZhX3FfbmV4dCh0cWUpOworCQlpZiAodHFlID09IE5VTEwpCisJCQlicmVhazsKKwl9CisJcmV0dXJuICgwKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDFiYWJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIEZDUElNKTsKK0JGQV9NT0RVTEUoZmNwaW0pOworCisvKioKKyAqICBoYWxfZmNwaW1fbW9kIEJGQSBGQ1AgSW5pdGlhdG9yIE1vZGUgbW9kdWxlCisgKi8KKworLyoqCisgKiAJCUNvbXB1dGUgYW5kIHJldHVybiBtZW1vcnkgbmVlZGVkIGJ5IEZDUChpbSkgbW9kdWxlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJYmZhX2l0bmltX21lbWluZm8oY2ZnLCBrbV9sZW4sIGRtX2xlbik7CisKKwkvKioKKwkgKiBJTyBtZW1vcnkKKwkgKi8KKwlpZiAoY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzIDwgQkZBX0lPSU1fTUlOKQorCQljZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPSBCRkFfSU9JTV9NSU47CisJZWxzZSBpZiAoY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzID4gQkZBX0lPSU1fTUFYKQorCQljZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPSBCRkFfSU9JTV9NQVg7CisKKwkqa21fbGVuICs9IGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyAqCisJICAoc2l6ZW9mKHN0cnVjdCBiZmFfaW9pbV9zKSArIHNpemVvZihzdHJ1Y3QgYmZhX2lvaW1fc3BfcykpOworCisJKmRtX2xlbiArPSBjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgKiBCRklfSU9JTV9TTlNMRU47CisKKwkvKioKKwkgKiB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCBtZW1vcnkKKwkgKi8KKwlpZiAoY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA8IEJGQV9UU0tJTV9NSU4pCisJCWNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMgPSBCRkFfVFNLSU1fTUlOOworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyAqIHNpemVvZihzdHJ1Y3QgYmZhX3Rza2ltX3MpOworfQorCisKK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1fYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBjZmctPmRydmNmZy5wYXRoX3Rvdik7CisJYmZhX3RyYyhiZmEsIGNmZy0+ZndjZmcubnVtX3Jwb3J0cyk7CisJYmZhX3RyYyhiZmEsIGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyk7CisJYmZhX3RyYyhiZmEsIGNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMpOworCisJZmNwaW0tPmJmYSAgICAgICAgICAgID0gYmZhOworCWZjcGltLT5udW1faXRuaW1zICAgICA9IGNmZy0+ZndjZmcubnVtX3Jwb3J0czsKKwlmY3BpbS0+bnVtX2lvaW1fcmVxcyAgPSBjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXM7CisJZmNwaW0tPm51bV90c2tpbV9yZXFzID0gY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxczsKKwlmY3BpbS0+cGF0aF90b3YgICAgICAgPSBjZmctPmRydmNmZy5wYXRoX3RvdjsKKwlmY3BpbS0+ZGVsYXlfY29tcAkgID0gY2ZnLT5kcnZjZmcuZGVsYXlfY29tcDsKKworCWJmYV9pdG5pbV9hdHRhY2goZmNwaW0sIG1lbWluZm8pOworCWJmYV90c2tpbV9hdHRhY2goZmNwaW0sIG1lbWluZm8pOworCWJmYV9pb2ltX2F0dGFjaChmY3BpbSwgbWVtaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1faW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1fZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJYmZhX2lvaW1fZGV0YWNoKGZjcGltKTsKKwliZmFfdHNraW1fZGV0YWNoKGZjcGltKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZjcGltLT5pdG5pbV9xKSB7CisJCWl0bmltID0gKHN0cnVjdCBiZmFfaXRuaW1fcyAqKSBxZTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGUoaXRuaW0pOworCX0KK30KKwordm9pZAorYmZhX2ZjcGltX3BhdGhfdG92X3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHBhdGhfdG92KQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJZmNwaW0tPnBhdGhfdG92ID0gcGF0aF90b3YgKiAxMDAwOworCWlmIChmY3BpbS0+cGF0aF90b3YgPiBCRkFfRkNQSU1fUEFUSFRPVl9NQVgpCisJCWZjcGltLT5wYXRoX3RvdiA9IEJGQV9GQ1BJTV9QQVRIVE9WX01BWDsKK30KKwordTE2CitiZmFfZmNwaW1fcGF0aF90b3ZfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJcmV0dXJuIChmY3BpbS0+cGF0aF90b3YgLyAxMDAwKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNwaW1fZ2V0X21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3MgKm1vZHN0YXRzKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJKm1vZHN0YXRzID0gZmNwaW0tPnN0YXRzOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2ZjcGltX2Nscl9tb2RzdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKworCW1lbXNldCgmZmNwaW0tPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3BpbV9zdGF0c19zKSk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX2ZjcGltX3FkZXB0aF9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBxX2RlcHRoKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJYmZhX2Fzc2VydChxX2RlcHRoIDw9IEJGQV9JT0NGQ19RREVQVEhfTUFYKTsKKworCWZjcGltLT5xX2RlcHRoID0gcV9kZXB0aDsKK30KKwordTE2CitiZmFfZmNwaW1fcWRlcHRoX2dldChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKworCXJldHVybiAoZmNwaW0tPnFfZGVwdGgpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTMyMDZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW1fcHJpdi5oCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNQSU1fUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfRkNQSU1fUFJJVl9IX18KKworI2luY2x1ZGUgPGJmYV9mY3BpbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfZmNwaW0uaD4KKyNpbmNsdWRlIDxjcy9iZmFfd2MuaD4KKyNpbmNsdWRlICJiZmFfc2dwZ19wcml2LmgiCisKKyNkZWZpbmUgQkZBX0lUTklNX01JTiAgIDMyCisjZGVmaW5lIEJGQV9JVE5JTV9NQVggICAxMDI0CisKKyNkZWZpbmUgQkZBX0lPSU1fTUlOICAgIDgKKyNkZWZpbmUgQkZBX0lPSU1fTUFYICAgIDIwMDAKKworI2RlZmluZSBCRkFfVFNLSU1fTUlOICAgNAorI2RlZmluZSBCRkFfVFNLSU1fTUFYICAgNTEyCisjZGVmaW5lIEJGQV9GQ1BJTV9QQVRIVE9WX0RFRgkoMzAgKiAxMDAwKQkvKiBpbiBtaWxsaXNlY3MgKi8KKyNkZWZpbmUgQkZBX0ZDUElNX1BBVEhUT1ZfTUFYCSg5MCAqIDEwMDApCS8qIGluIG1pbGxpc2VjcyAqLworCisjZGVmaW5lIGJmYV9mY3BpbV9zdGF0cyhfX2ZjcGltLCBfX3N0YXRzKSAgIFwKKyAgICAoX19mY3BpbSktPnN0YXRzLl9fc3RhdHMgKysKKworc3RydWN0IGJmYV9mY3BpbV9tb2RfcyB7CisJc3RydWN0IGJmYV9zIAkqYmZhOworCXN0cnVjdCBiZmFfaXRuaW1fcyAJKml0bmltX2FycjsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAJKmlvaW1fYXJyOworCXN0cnVjdCBiZmFfaW9pbV9zcF9zICppb2ltX3NwX2FycjsKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgCSp0c2tpbV9hcnI7CisJc3RydWN0IGJmYV9kbWFfcwlzbnNiYXNlOworCWludAkJCW51bV9pdG5pbXM7CisJaW50CQkJbnVtX2lvaW1fcmVxczsKKwlpbnQJCQludW1fdHNraW1fcmVxczsKKwl1MzIJCXBhdGhfdG92OworCXUxNgkJcV9kZXB0aDsKKwl1MTYJCXJzdmQ7CisJc3RydWN0IGxpc3RfaGVhZCAJaXRuaW1fcTsgICAgICAgIC8qICBxdWV1ZSBvZiBhY3RpdmUgaXRuaW0gICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlpb2ltX2ZyZWVfcTsgICAgLyogIGZyZWUgSU8gcmVzb3VyY2VzICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgCWlvaW1fcmVzZnJlZV9xOyAvKiAgSU9zIHdhaXRpbmcgZm9yIGYvdyAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAJaW9pbV9jb21wX3E7ICAgIC8qICBJTyBnbG9iYWwgY29tcCBRICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAl0c2tpbV9mcmVlX3E7CisJdTMyCWlvc19hY3RpdmU7CS8qICBjdXJyZW50IGFjdGl2ZSBJT3MJICAgICAgKi8KKwl1MzIJZGVsYXlfY29tcDsKKwlzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3Mgc3RhdHM7Cit9OworCitzdHJ1Y3QgYmZhX2lvaW1fczsKK3N0cnVjdCBiZmFfdHNraW1fczsKKworLyoqCisgKiBCRkEgSU8gKGluaXRpYXRvciBtb2RlKQorICovCitzdHJ1Y3QgYmZhX2lvaW1fcyB7CisJc3RydWN0IGxpc3RfaGVhZCBxZTsJCS8qICBxdWV1ZSBlbGVtZW10ICAgICAgICAgICAgKi8KKwliZmFfc21fdAkJc207IAkvKiAgQkZBIGlvaW0gc3RhdGUgbWFjaGluZSAgICovCisJc3RydWN0IGJmYV9zIAkgICAgICAgICpiZmE7CS8qICBCRkEgbW9kdWxlICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zCSpmY3BpbTsJLyogIHBhcmVudCBmY3BpbSBtb2R1bGUgICAgICAqLworCXN0cnVjdCBiZmFfaXRuaW1fcyAJKml0bmltOwkvKiAgaS10LW4gbmV4dXMgZm9yIHRoaXMgSU8gICovCisJc3RydWN0IGJmYWRfaW9pbV9zIAkqZGlvOwkvKiAgZHJpdmVyIElPIGhhbmRsZSAgICAgICAgICovCisJdTE2CWlvdGFnOwkJLyogIEZXSSBJTyB0YWcgICAgICAgICAgICAgICAqLworCXUxNglhYm9ydF90YWc7CS8qICB1bnFpdWUgYWJvcnQgcmVxdWVzdCB0YWcgKi8KKwl1MTYJbnNnZXM7CQkvKiAgbnVtYmVyIG9mIFNHIGVsZW1lbnRzICAgICovCisJdTE2CW5zZ3BnczsJCS8qICBudW1iZXIgb2YgU0cgcGFnZXMgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3NncGdfcyAqc2dwZzsJLyogIGZpcnN0IFNHIHBhZ2UgICAgICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgc2dwZ19xOwkJLyogIGFsbG9jYXRlZCBTRyBwYWdlcyAgICAgICAqLworCXN0cnVjdCBiZmFfY2JfcWVfcyBoY2JfcWU7CS8qICBiZmEgY2FsbGJhY2sgcWVsZW0gICAgICAgKi8KKwliZmFfY2JfY2Jmbl90IGlvX2NiZm47CQkvKiAgSU8gY29tcGxldGlvbiBoYW5kbGVyICAgICovCisJc3RydWN0IGJmYV9pb2ltX3NwX3MgKmlvc3A7CS8qICBzbG93LXBhdGggSU8gaGFuZGxpbmcgICAgKi8KK307CisKK3N0cnVjdCBiZmFfaW9pbV9zcF9zIHsKKwlzdHJ1Y3QgYmZpX21zZ19zIAljb21wX3JzcG1zZzsJLyogIElPIGNvbXAgZi93IHJlc3BvbnNlICAgICAqLworCXU4CQkJKnNuc2luZm87CS8qICBzZW5zZSBpbmZvIGZvciB0aGlzIElPICAgKi8KKwlzdHJ1Y3QgYmZhX3NncGdfd3FlX3Mgc2dwZ193cWU7CS8qICB3YWl0cSBlbGVtIGZvciBzZ3BnICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zIHJlcXFfd2FpdDsJLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCWJmYV9ib29sZWFuX3QJCWFib3J0X2V4cGxpY2l0OwkvKiAgYWJvcnRlZCBieSBPUyAgICAgICAgICAgICovCisJc3RydWN0IGJmYV90c2tpbV9zCSp0c2tpbTsJCS8qICBSZWxldmFudCBUTSBjbWQgICAgICAgICAgKi8KK307CisKKy8qKgorICogQkZBIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIChpbml0aWF0b3IgbW9kZSkKKyAqLworc3RydWN0IGJmYV90c2tpbV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgIHFlOworCWJmYV9zbV90CQlzbTsKKwlzdHJ1Y3QgYmZhX3MgICAgICAgICAgICAqYmZhOyAgICAgICAgLyogIEJGQSBtb2R1bGUgICovCisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAgKmZjcGltOyAgICAgIC8qICBwYXJlbnQgZmNwaW0gbW9kdWxlICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX3MgICAgICAqaXRuaW07ICAgICAgLyogIGktdC1uIG5leHVzIGZvciB0aGlzIElPICAqLworCXN0cnVjdCBiZmFkX3Rza2ltX3MgICAgICAgICAqZHRzazsgICAvKiAgZHJpdmVyIHRhc2sgbWdtdCBjbW5kICAgICovCisJYmZhX2Jvb2xlYW5fdCAgICAgICAgbm90aWZ5OyAgICAgICAgIC8qICBub3RpZnkgaXRuaW0gb24gVE0gY29tcCAgKi8KKwlsdW5fdCAgICAgICAgICAgICAgICBsdW47ICAgICAgICAgICAgLyogIGx1biBpZiBhcHBsaWNhYmxlICAgICAgICAqLworCWVudW0gZmNwX3RtX2NtbmQgICAgICAgIHRtX2NtbmQ7ICAgICAvKiAgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgICovCisJdTE2ICAgICAgICAgICAgIHRza190YWc7ICAgICAgICAvKiAgRldJIElPIHRhZyAgICAgICAgICAgICAgICovCisJdTggICAgICAgICAgICAgIHRzZWNzOyAgICAgICAgICAvKiAgdGltZW91dCBpbiBzZWNvbmRzICAgICAgICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcyAgcmVxcV93YWl0OyAgIC8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBpb19xOyAgICAvKiAgcXVldWUgb2YgYWZmZWN0ZWQgSU9zICAgICovCisJc3RydWN0IGJmYV93Y19zICAgICAgICAgICAgIHdjOyAgICAgIC8qICB3YWl0aW5nIGNvdW50ZXIgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MJaGNiX3FlOyAgICAgIC8qICBiZmEgY2FsbGJhY2sgcWVsZW0gICAgICAgKi8KKwllbnVtIGJmaV90c2tpbV9zdGF0dXMgICB0c2tfc3RhdHVzOyAgLyogIFRNIHN0YXR1cyAgICAgICAgICAgICAgICAqLworfTsKKworLyoqCisgKiBCRkEgaS10LW4gKGluaXRpYXRvciBtb2RlKQorICovCitzdHJ1Y3QgYmZhX2l0bmltX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgcWU7CQkvKiAgcXVldWUgZWxlbWVudCAgICAgICAgICAgICAgICovCisJYmZhX3NtX3QJICBzbTsJCS8qICBpLXQtbiBpbSBCRkEgc3RhdGUgbWFjaGluZSAgKi8KKwlzdHJ1Y3QgYmZhX3MgICAgICAqYmZhOwkJLyogIGJmYSBpbnN0YW5jZSAgICAgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQ7CS8qICBiZmEgcnBvcnQgICAgICAgICAgICAgICAgICAgKi8KKwl2b2lkICAgICAgICAgICAqZGl0bjsJCS8qICBkcml2ZXIgaS10LW4gc3RydWN0dXJlICAgICAgKi8KKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgIG1oZHI7CS8qICBwcmUtYnVpbHQgbWhkciAgICAgICAgICAgICAgKi8KKwl1OCAgICAgICAgIG1zZ19ubzsJCS8qICBpdG5pbS9ycG9ydCBmaXJtd2FyZSBoYW5kbGUgKi8KKwl1OCAgICAgICAgIHJlcXE7CQkvKiAgQ1EgZm9yIHJlcXVlc3RzICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV9jYl9xZV9zICAgIGhjYl9xZTsJLyogIGJmYSBjYWxsYmFjayBxZWxlbSAgICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19xOwkvKiAgcXVldWUgb2YgcGVuZGluZyBJTyByZXF1ZXN0cyovCisJc3RydWN0IGxpc3RfaGVhZCBpb19xOwkJLyogIHF1ZXVlIG9mIGFjdGl2ZSBJTyByZXF1ZXN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgaW9fY2xlYW51cF9xOwkvKiAgSU8gYmVpbmcgY2xlYW5lZCB1cCAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCB0c2tfcTsJCS8qICBxdWV1ZSBvZiBhY3RpdmUgVE0gY29tbWFuZHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICBkZWxheV9jb21wX3E7LyogIHF1ZXVlIG9mIGZhaWxlZCBpbmZsaWdodCBjbWRzICovCisJYmZhX2Jvb2xlYW5fdCAgIHNlcV9yZWM7CS8qICBTUUVSIHN1cHBvcnRlZCAgICAgICAgICAgICAgKi8KKwliZmFfYm9vbGVhbl90ICAgaXNfb25saW5lOwkvKiAgaXRuaW0gaXMgT05MSU5FIGZvciBJTyAgICAgICovCisJYmZhX2Jvb2xlYW5fdCAgIGlvdG92X2FjdGl2ZTsJLyogIElPIFRPViB0aW1lciBpcyBhY3RpdmUJICovCisJc3RydWN0IGJmYV93Y19zICAgICAgICB3YzsJLyogIHdhaXRpbmcgY291bnRlciAgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsJLyogIHBlbmRpbmcgSU8gVE9WCQkgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zIHJlcXFfd2FpdDsgLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltOwkvKiAgZmNwaW0gbW9kdWxlICAgICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9oYWxfc3RhdHNfcwlzdGF0czsKK307CisKKyNkZWZpbmUgYmZhX2l0bmltX2lzX29ubGluZShfaXRuaW0pIChfaXRuaW0pLT5pc19vbmxpbmUKKyNkZWZpbmUgQkZBX0ZDUElNX01PRChfaGFsKSAoJihfaGFsKS0+bW9kdWxlcy5mY3BpbV9tb2QpCisjZGVmaW5lIEJGQV9JT0lNX0ZST01fVEFHKF9mY3BpbSwgX2lvdGFnKQlcCisJKCZmY3BpbS0+aW9pbV9hcnJbX2lvdGFnXSkKKyNkZWZpbmUgQkZBX1RTS0lNX0ZST01fVEFHKF9mY3BpbSwgX3RtdGFnKSAgICAgICAgICAgICAgICAgIFwKKyAgICAoJmZjcGltLT50c2tpbV9hcnJbX3RtdGFnICYgKGZjcGltLT5udW1fdHNraW1fcmVxcyAtIDEpXSkKKworLyoKKyAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwKKwkJCQkgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaW9pbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaW9pbV9nb29kX2NvbXBfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJCQlzdHJ1Y3QgYmZpX21zZ19zICptc2cpOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2NsZWFudXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2NsZWFudXBfdG0oc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX3RvdihzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLAorCQkJCSAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9pb2RvbmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX3Rza2ltX2lvY2Rpc2FibGUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX3Rza2ltX2NsZWFudXAoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1fbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQkJCSAgICAgIHUzMiAqZG1fbGVuKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLAorCQkJCSAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9pb2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX3Rza2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitiZmFfYm9vbGVhbl90ICAgYmZhX2l0bmltX2hvbGRfaW8oc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1BJTV9QUklWX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjQzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BvcnQuYwpAQCAtMCwwICsxLDE2NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3Bwb3J0Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW4uaD4KKyNpbmNsdWRlIDxjcy9iZmFfcGxvZy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3BvcnQuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgUFBPUlQpOworQkZBX01PRFVMRShwcG9ydCk7CisKKyNkZWZpbmUgYmZhX3Bwb3J0X2NhbGxiYWNrKF9fcHBvcnQsIF9fZXZlbnQpIGRvIHsJCQlcCisJaWYgKChfX3Bwb3J0KS0+YmZhLT5mY3MpIHsgICAgICBcCisJCShfX3Bwb3J0KS0+ZXZlbnRfY2JmbigoX19wcG9ydCktPmV2ZW50X2NiYXJnLCAoX19ldmVudCkpOyAgICAgIFwKKwl9IGVsc2UgewkJCQkJCQlcCisJCShfX3Bwb3J0KS0+aGNiX2V2ZW50ID0gKF9fZXZlbnQpOyAgICAgIFwKKwkJYmZhX2NiX3F1ZXVlKChfX3Bwb3J0KS0+YmZhLCAmKF9fcHBvcnQpLT5oY2JfcWUsCVwKKwkJX19iZmFfY2JfcG9ydF9ldmVudCwgKF9fcHBvcnQpKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIFRoZSBwb3J0IGlzIGNvbnNpZGVyZWQgZGlzYWJsZWQgaWYgY29ycmVzcG9uZGluZyBwaHlzaWNhbCBwb3J0IG9yIElPQyBhcmUKKyAqIGRpc2FibGVkIGV4cGxpY2l0bHkKKyAqLworI2RlZmluZSBCRkFfUE9SVF9JU19ESVNBQkxFRChiZmEpIFwKKwkoKGJmYV9wcG9ydF9pc19kaXNhYmxlZChiZmEpID09IEJGQV9UUlVFKSB8fCBcCisJKGJmYV9pb2NfaXNfZGlzYWJsZWQoJmJmYS0+aW9jKSA9PSBCRkFfVFJVRSkpCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfcHBvcnRfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0KTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9wcG9ydF9zZW5kX2Rpc2FibGUoc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfdXBkYXRlX2xpbmtpbmZvKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc2V0X3d3bnMoc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBfX2JmYV9jYl9wb3J0X2V2ZW50KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBfX2JmYV9jYl9wb3J0X3N0YXRzKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBfX2JmYV9jYl9wb3J0X3N0YXRzX2Nscih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3BvcnRfc3RhdHNfdGltZW91dCh2b2lkICpjYmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3BvcnRfc3RhdHNfY2xyX3RpbWVvdXQodm9pZCAqY2JhcmcpOworCisvKioKKyAqICBiZmFfcHBvcnRfcHJpdmF0ZQorICovCisKKy8qKgorICogQkZBIHBvcnQgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgeworCUJGQV9QUE9SVF9TTV9TVEFSVCA9IDEsCS8qICBzdGFydCBwb3J0IHN0YXRlIG1hY2hpbmUgKi8KKwlCRkFfUFBPUlRfU01fU1RPUCA9IDIsCS8qICBzdG9wIHBvcnQgc3RhdGUgbWFjaGluZSAqLworCUJGQV9QUE9SVF9TTV9FTkFCTEUgPSAzLAkvKiAgZW5hYmxlIHBvcnQgKi8KKwlCRkFfUFBPUlRfU01fRElTQUJMRSA9IDQsCS8qICBkaXNhYmxlIHBvcnQgc3RhdGUgbWFjaGluZSAqLworCUJGQV9QUE9SVF9TTV9GV1JTUCA9IDUsCS8qICBmaXJtd2FyZSBlbmFibGUvZGlzYWJsZSByc3AgKi8KKwlCRkFfUFBPUlRfU01fTElOS1VQID0gNiwJLyogIGZpcm13YXJlIGxpbmt1cCBldmVudCAqLworCUJGQV9QUE9SVF9TTV9MSU5LRE9XTiA9IDcsCS8qICBmaXJtd2FyZSBsaW5rdXAgZG93biAqLworCUJGQV9QUE9SVF9TTV9RUkVTVU1FID0gOCwJLyogIENRIHNwYWNlIGF2YWlsYWJsZSAqLworCUJGQV9QUE9SVF9TTV9IV0ZBSUwgPSA5LAkvKiAgSU9DIGgvdyBmYWlsdXJlICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJCSAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9saW5rZG93bihzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fbGlua3VwKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZGlzYWJsaW5nX3F3YWl0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJCSAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9kaXNhYmxlZChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fc3RvcHBlZChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9pb2Nkb3duKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2lvY2ZhaWwoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGVfcyBoYWxfcHBvcnRfc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV91bmluaXQpLCBCRkFfUFBPUlRfU1RfVU5JTklUfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCksIEJGQV9QUE9SVF9TVF9FTkFCTElOR19RV0FJVH0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fZW5hYmxpbmcpLCBCRkFfUFBPUlRfU1RfRU5BQkxJTkd9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2xpbmtkb3duKSwgQkZBX1BQT1JUX1NUX0xJTktET1dOfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9saW5rdXApLCBCRkFfUFBPUlRfU1RfTElOS1VQfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpLAorCSBCRkFfUFBPUlRfU1RfRElTQUJMSU5HX1FXQUlUfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9kaXNhYmxpbmcpLCBCRkFfUFBPUlRfU1RfRElTQUJMSU5HfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9kaXNhYmxlZCksIEJGQV9QUE9SVF9TVF9ESVNBQkxFRH0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fc3RvcHBlZCksIEJGQV9QUE9SVF9TVF9TVE9QUEVEfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9pb2Nkb3duKSwgQkZBX1BQT1JUX1NUX0lPQ0RPV059LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2lvY2ZhaWwpLCBCRkFfUFBPUlRfU1RfSU9DRE9XTn0sCit9OworCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X2Flbl9wb3N0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3BvcnRfYWVuX2V2ZW50IGV2ZW50KQoreworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBwcG9ydC0+YmZhLT5sb2dtOworCXd3bl90ICAgICAgICAgICBwd3duID0gcHBvcnQtPnB3d247CisJY2hhciAgICAgICAgICAgIHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyBpb2NfYXR0cjsKKworCXd3bjJzdHIocHd3bl9wdHIsIHB3d24pOworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QT1JUX0FFTl9PTkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfT05MSU5FLCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX09GRkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfT0ZGTElORSwgcHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9QT1JUX0FFTl9FTkFCTEU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfRU5BQkxFLCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX0RJU0FCTEU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfRElTQUJMRSwgcHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9QT1JUX0RJU0NPTk5FQ1QsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fUU9TX05FRzoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9RT1NfTkVHLCBwd3duX3B0cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWJmYV9pb2NfZ2V0X2F0dHIoJnBwb3J0LT5iZmEtPmlvYywgJmlvY19hdHRyKTsKKwlhZW5fZGF0YS5wb3J0LmlvY190eXBlID0gaW9jX2F0dHIuaW9jX3R5cGU7CisJYWVuX2RhdGEucG9ydC5wd3duID0gcHd3bjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCS8qKgorCQkgKiBTdGFydCBldmVudCBhZnRlciBJT0MgaXMgY29uZmlndXJlZCBhbmQgQkZBIGlzIHN0YXJ0ZWQuCisJCSAqLworCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogUG9ydCBpcyBwZXJzaXN0ZW50bHkgY29uZmlndXJlZCB0byBiZSBpbiBlbmFibGVkIHN0YXRlLiBEbworCQkgKiBub3QgY2hhbmdlIHN0YXRlLiBQb3J0IGVuYWJsaW5nIGlzIGRvbmUgd2hlbiBTVEFSVCBldmVudCBpcworCQkgKiByZWNlaXZlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJLyoqCisJCSAqIElmIGEgcG9ydCBpcyBwZXJzaXN0ZW50bHkgY29uZmlndXJlZCB0byBiZSBkaXNhYmxlZCwgdGhlCisJCSAqIGZpcnN0IGV2ZW50IHdpbGwgYSBwb3J0IGRpc2FibGUgcmVxdWVzdC4KKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCSAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQliZmFfcHBvcnRfc2VuZF9lbmFibGUocHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX1NUT1A6CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBlbmFibGUgaXMgaW4gcHJvZ3Jlc3MuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0RJU0FCTEU6CisJCS8qKgorCQkgKiBKdXN0IHNlbmQgZGlzYWJsZSByZXF1ZXN0IHRvIGZpcm13YXJlIHdoZW4gcm9vbSBiZWNvbWVzCisJCSAqIGF2YWlsYWJsZSBpbiByZXF1ZXN0IHF1ZXVlLgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcHBvcnQtPnJlcXFfd2FpdCk7CisJCWJmYV9wbG9nX3N0cihwcG9ydC0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwKKwkJCSAgICAgQkZBX1BMX0VJRF9QT1JUX0RJU0FCTEUsIDAsICJQb3J0IERpc2FibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZXZlbnRzIHdoZW4gZG9pbmcgYmFjay10by1iYWNrCisJCSAqIGVuYWJsZS9kaXNhYmxlcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2Rvd24pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX0ZXUlNQOgorCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fbGlua2Rvd24pOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktVUDoKKwkJYmZhX3Bwb3J0X3VwZGF0ZV9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9saW5rdXApOworCisJCWJmYV9hc3NlcnQocHBvcnQtPmV2ZW50X2NiZm4pOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LVVApOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgYmVpbmcgZW5hYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2Rpc2FibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpOworCisJCWJmYV9wbG9nX3N0cihwcG9ydC0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwKKwkJCSAgICAgQkZBX1BMX0VJRF9QT1JUX0RJU0FCTEUsIDAsICJQb3J0IERpc2FibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2Rvd24pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2xpbmtkb3duKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktVUDoKKwkJYmZhX3Bwb3J0X3VwZGF0ZV9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9saW5rdXApOworCQliZmFfYXNzZXJ0KHBwb3J0LT5ldmVudF9jYmZuKTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfU1RfQ0hBTkdFLCAwLCAiUG9ydCBMaW5rdXAiKTsKKwkJYmZhX3Bwb3J0X2NhbGxiYWNrKHBwb3J0LCBCRkFfUFBPUlRfTElOS1VQKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT05MSU5FKTsKKwkJLyoqCisJCSAqIElmIFFvUyBpcyBlbmFibGVkIGFuZCBpdCBpcyBub3Qgb25saW5lLAorCQkgKiBTZW5kIGEgc2VwYXJhdGUgZXZlbnQuCisJCSAqLworCQlpZiAoKHBwb3J0LT5jZmcucW9zX2VuYWJsZWQpCisJCSAgICAmJiAoYmZhX29zX250b2hsKHBwb3J0LT5xb3NfYXR0ci5zdGF0ZSkgIT0gQkZBX1FPU19PTkxJTkUpKQorCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fUU9TX05FRyk7CisKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LRE9XTjoKKwkJLyoqCisJCSAqIFBvc3NpYmxlIHRvIGdldCBsaW5rIGRvd24gZXZlbnQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgZW5hYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2Rpc2FibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpOworCisJCWJmYV9wbG9nX3N0cihwcG9ydC0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwKKwkJCSAgICAgQkZBX1BMX0VJRF9QT1JUX0RJU0FCTEUsIDAsICJQb3J0IERpc2FibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2Rvd24pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2xpbmt1cChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGVuYWJsZWQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0RJU0FCTEU6CisJCWlmIChiZmFfcHBvcnRfc2VuZF9kaXNhYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nX3F3YWl0KTsKKworCQliZmFfcHBvcnRfcmVzZXRfbGlua2luZm8ocHBvcnQpOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LRE9XTik7CisJCWJmYV9wbG9nX3N0cihwcG9ydC0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwKKwkJCSAgICAgQkZBX1BMX0VJRF9QT1JUX0RJU0FCTEUsIDAsICJQb3J0IERpc2FibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0FCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fbGlua2Rvd24pOworCQliZmFfcHBvcnRfcmVzZXRfbGlua2luZm8ocHBvcnQpOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LRE9XTik7CisJCWJmYV9wbG9nX3N0cihwcG9ydC0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwKKwkJCSAgICAgQkZBX1BMX0VJRF9QT1JUX1NUX0NIQU5HRSwgMCwgIlBvcnQgTGlua2Rvd24iKTsKKwkJaWYgKEJGQV9QT1JUX0lTX0RJU0FCTEVEKHBwb3J0LT5iZmEpKSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1QpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQliZmFfcHBvcnRfcmVzZXRfbGlua2luZm8ocHBvcnQpOworCQlpZiAoQkZBX1BPUlRfSVNfRElTQUJMRUQocHBvcnQtPmJmYSkpIHsKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX09GRkxJTkUpOworCQl9IGVsc2UgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQ09OTkVDVCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2Nkb3duKTsKKwkJYmZhX3Bwb3J0X3Jlc2V0X2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3Bwb3J0X2NhbGxiYWNrKHBwb3J0LCBCRkFfUFBPUlRfTElOS0RPV04pOworCQlpZiAoQkZBX1BPUlRfSVNfRElTQUJMRUQocHBvcnQtPmJmYSkpIHsKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX09GRkxJTkUpOworCQl9IGVsc2UgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQ09OTkVDVCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCSAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyk7CisJCWJmYV9wcG9ydF9zZW5kX2Rpc2FibGUocHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX1NUT1A6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcHBvcnQtPnJlcXFfd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgYmVpbmcgZGlzYWJsZWQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktVUDoKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LRE9XTjoKKwkJLyoqCisJCSAqIFBvc3NpYmxlIHRvIGdldCBsaW5rIGV2ZW50cyB3aGVuIGRvaW5nIGJhY2stdG8tYmFjaworCQkgKiBlbmFibGUvZGlzYWJsZXMuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2ZhaWwpOworCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9kaXNhYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fRldSU1A6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgYmVpbmcgZGlzYWJsZWQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCisJCWJmYV9wbG9nX3N0cihwcG9ydC0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwKKwkJCSAgICAgQkZBX1BMX0VJRF9QT1JUX0VOQUJMRSwgMCwgIlBvcnQgRW5hYmxlIik7CisJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0VOQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktVUDoKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LRE9XTjoKKwkJLyoqCisJCSAqIFBvc3NpYmxlIHRvIGdldCBsaW5rIGV2ZW50cyB3aGVuIGRvaW5nIGJhY2stdG8tYmFjaworCQkgKiBlbmFibGUvZGlzYWJsZXMuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2ZhaWwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1NUQVJUOgorCQkvKioKKwkJICogSWdub3JlIHN0YXJ0IGV2ZW50IGZvciBhIHBvcnQgdGhhdCBpcyBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCisJCWJmYV9wbG9nX3N0cihwcG9ydC0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwKKwkJCSAgICAgQkZBX1BMX0VJRF9QT1JUX0VOQUJMRSwgMCwgIlBvcnQgRW5hYmxlIik7CisJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0VOQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgZGlzYWJsZWQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2ZhaWwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX3N0b3BwZWQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCWlmIChiZmFfcHBvcnRfc2VuZF9lbmFibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKioKKwkJICogSWdub3JlIGFsbCBvdGhlciBldmVudHMuCisJCSAqLworCQk7CisJfQorfQorCisvKioKKyAqIFBvcnQgaXMgZW5hYmxlZC4gSU9DIGlzIGRvd24vZmFpbGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2lvY2Rvd24oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCWlmIChiZmFfcHBvcnRfc2VuZF9lbmFibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKioKKwkJICogSWdub3JlIGFsbCBldmVudHMuCisJCSAqLworCQk7CisJfQorfQorCisvKioKKyAqIFBvcnQgaXMgZGlzYWJsZWQuIElPQyBpcyBkb3duL2ZhaWxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9pb2NmYWlsKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1NUQVJUOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2Rvd24pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qKgorCQkgKiBJZ25vcmUgYWxsIGV2ZW50cy4KKwkJICovCisJCTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfcHBvcnRfcHJpdmF0ZQorICovCisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9wb3J0X2V2ZW50KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJcHBvcnQtPmV2ZW50X2NiZm4ocHBvcnQtPmV2ZW50X2NiYXJnLCBwcG9ydC0+aGNiX2V2ZW50KTsKK30KKworI2RlZmluZSBQUE9SVF9TVEFUU19ETUFfU1ogKEJGQV9ST1VORFVQKHNpemVvZih1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSksIFwKKwkJCQkJCQlCRkFfQ0FDSEVMSU5FX1NaKSkKKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpuZG1fbGVuLAorCQkgIHUzMiAqZG1fbGVuKQoreworCSpkbV9sZW4gKz0gUFBPUlRfU1RBVFNfRE1BX1NaOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gY2Jhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfUFBPUlRfU01fUVJFU1VNRSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfbWVtX2NsYWltKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvKQoreworCXU4ICAgICAgICAqZG1fa3ZhOworCXU2NCAgICAgICAgZG1fcGE7CisKKwlkbV9rdmEgPSBiZmFfbWVtaW5mb19kbWFfdmlydChtZW1pbmZvKTsKKwlkbV9wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1lbWluZm8pOworCisJcHBvcnQtPnN0YXRzX2t2YSA9IGRtX2t2YTsKKwlwcG9ydC0+c3RhdHNfcGEgPSBkbV9wYTsKKwlwcG9ydC0+c3RhdHMgPSAodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKilkbV9rdmE7CisKKwlkbV9rdmEgKz0gUFBPUlRfU1RBVFNfRE1BX1NaOworCWRtX3BhICs9IFBQT1JUX1NUQVRTX0RNQV9TWjsKKworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1lbWluZm8pID0gZG1fa3ZhOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1lbWluZm8pID0gZG1fcGE7Cit9CisKKy8qKgorICogTWVtb3J5IGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9wcG9ydF9jZmdfcyAqcG9ydF9jZmcgPSAmcHBvcnQtPmNmZzsKKworCWJmYV9vc19tZW1zZXQocHBvcnQsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bwb3J0X3MpKTsKKwlwcG9ydC0+YmZhID0gYmZhOworCisJYmZhX3Bwb3J0X21lbV9jbGFpbShwcG9ydCwgbWVtaW5mbyk7CisKKwliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fdW5pbml0KTsKKworCS8qKgorCSAqIGluaXRpYWxpemUgYW5kIHNldCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KKwkgKi8KKwlwb3J0X2NmZy0+dG9wb2xvZ3kgPSBCRkFfUFBPUlRfVE9QT0xPR1lfUDJQOworCXBvcnRfY2ZnLT5zcGVlZCA9IEJGQV9QUE9SVF9TUEVFRF9BVVRPOworCXBvcnRfY2ZnLT50cnVua2VkID0gQkZBX0ZBTFNFOworCXBvcnRfY2ZnLT5tYXhmcnNpemUgPSAwOworCisJcG9ydF9jZmctPnRybF9kZWZfc3BlZWQgPSBCRkFfUFBPUlRfU1BFRURfMUdCUFM7CisKKwliZmFfcmVxcV93aW5pdCgmcHBvcnQtPnJlcXFfd2FpdCwgYmZhX3Bwb3J0X3FyZXN1bWUsIHBwb3J0KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHBvcnQgYXR0cmlidXRlcyBmcm9tIElPQyBoYXJkd2FyZSBkYXRhLgorCSAqLworCWJmYV9wcG9ydF9zZXRfd3ducyhwcG9ydCk7CisJaWYgKHBwb3J0LT5jZmcubWF4ZnJzaXplID09IDApCisJCXBwb3J0LT5jZmcubWF4ZnJzaXplID0gYmZhX2lvY19tYXhmcnNpemUoJmJmYS0+aW9jKTsKKwlwcG9ydC0+Y2ZnLnJ4X2JiY3JlZGl0ID0gYmZhX2lvY19yeF9iYmNyZWRpdCgmYmZhLT5pb2MpOworCXBwb3J0LT5zcGVlZF9zdXAgPSBiZmFfaW9jX3NwZWVkX3N1cCgmYmZhLT5pb2MpOworCisJYmZhX2Fzc2VydChwcG9ydC0+Y2ZnLm1heGZyc2l6ZSk7CisJYmZhX2Fzc2VydChwcG9ydC0+Y2ZnLnJ4X2JiY3JlZGl0KTsKKwliZmFfYXNzZXJ0KHBwb3J0LT5zcGVlZF9zdXApOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiBJT0MgaXMgcmVhZHkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9TVEFSVCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJlZm9yZSBJT0MgaXMgc3RvcHBlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KEJGQV9QT1JUX01PRChiZmEpLCBCRkFfUFBPUlRfU01fU1RPUCk7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gSU9DIGZhaWx1cmUgaXMgZGV0ZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX0hXRkFJTCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfdXBkYXRlX2xpbmtpbmZvKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQpCit7CisJc3RydWN0IGJmaV9wcG9ydF9ldmVudF9zICpwZXZlbnQgPSBwcG9ydC0+ZXZlbnRfYXJnLmkyaG1zZy5ldmVudDsKKworCXBwb3J0LT5zcGVlZCA9IHBldmVudC0+bGlua19zdGF0ZS5zcGVlZDsKKwlwcG9ydC0+dG9wb2xvZ3kgPSBwZXZlbnQtPmxpbmtfc3RhdGUudG9wb2xvZ3k7CisKKwlpZiAocHBvcnQtPnRvcG9sb2d5ID09IEJGQV9QUE9SVF9UT1BPTE9HWV9MT09QKQorCQlwcG9ydC0+bXlhbHBhID0gcGV2ZW50LT5saW5rX3N0YXRlLnRsLmxvb3BfaW5mby5teWFscGE7CisKKwkvKgorCSAqIFFvUyBEZXRhaWxzCisJICovCisJYmZhX29zX2Fzc2lnbihwcG9ydC0+cW9zX2F0dHIsIHBldmVudC0+bGlua19zdGF0ZS5xb3NfYXR0cik7CisJYmZhX29zX2Fzc2lnbihwcG9ydC0+cW9zX3ZjX2F0dHIsIHBldmVudC0+bGlua19zdGF0ZS5xb3NfdmNfYXR0cik7CisKKwliZmFfdHJjKHBwb3J0LT5iZmEsIHBwb3J0LT5zcGVlZCk7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBwcG9ydC0+dG9wb2xvZ3kpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3Jlc2V0X2xpbmtpbmZvKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQpCit7CisJcHBvcnQtPnNwZWVkID0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV047CisJcHBvcnQtPnRvcG9sb2d5ID0gQkZBX1BQT1JUX1RPUE9MT0dZX05PTkU7Cit9CisKKy8qKgorICogU2VuZCBwb3J0IGVuYWJsZSBtZXNzYWdlIHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2VuYWJsZV9yZXFfcyAqbTsKKworCS8qKgorCSAqIEluY3JlbWVudCBtZXNzYWdlIHRhZyBiZWZvcmUgcXVldWUgY2hlY2ssIHNvIHRoYXQgcmVzcG9uc2VzIHRvIG9sZAorCSAqIHJlcXVlc3RzIGFyZSBkaXNjYXJkZWQuCisJICovCisJcG9ydC0+bXNndGFnKys7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9FTkFCTEVfUkVRLAorCQkgICAgYmZhX2xwdWlkKHBvcnQtPmJmYSkpOworCW0tPm53d24gPSBwb3J0LT5ud3duOworCW0tPnB3d24gPSBwb3J0LT5wd3duOworCW0tPnBvcnRfY2ZnID0gcG9ydC0+Y2ZnOworCW0tPm1zZ3RhZyA9IHBvcnQtPm1zZ3RhZzsKKwltLT5wb3J0X2NmZy5tYXhmcnNpemUgPSBiZmFfb3NfaHRvbnMocG9ydC0+Y2ZnLm1heGZyc2l6ZSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChtLT5zdGF0c19kbWFfYWRkciwgcG9ydC0+c3RhdHNfcGEpOworCWJmYV90cmMocG9ydC0+YmZhLCBtLT5zdGF0c19kbWFfYWRkci5hMzIuYWRkcl9sbyk7CisJYmZhX3RyYyhwb3J0LT5iZmEsIG0tPnN0YXRzX2RtYV9hZGRyLmEzMi5hZGRyX2hpKTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiBTZW5kIHBvcnQgZGlzYWJsZSBtZXNzYWdlIHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpCit7CisJYmZpX3Bwb3J0X2Rpc2FibGVfcmVxX3QgKm07CisKKwkvKioKKwkgKiBJbmNyZW1lbnQgbWVzc2FnZSB0YWcgYmVmb3JlIHF1ZXVlIGNoZWNrLCBzbyB0aGF0IHJlc3BvbnNlcyB0byBvbGQKKwkgKiByZXF1ZXN0cyBhcmUgZGlzY2FyZGVkLgorCSAqLworCXBvcnQtPm1zZ3RhZysrOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JULCAmcG9ydC0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0ZDX1BPUlQsIEJGSV9QUE9SVF9IMklfRElTQUJMRV9SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJbS0+bXNndGFnID0gcG9ydC0+bXNndGFnOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc2V0X3d3bnMoc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0KQoreworCXBvcnQtPnB3d24gPSBiZmFfaW9jX2dldF9wd3duKCZwb3J0LT5iZmEtPmlvYyk7CisJcG9ydC0+bnd3biA9IGJmYV9pb2NfZ2V0X253d24oJnBvcnQtPmJmYS0+aW9jKTsKKworCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+bnd3bik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zZW5kX3R4Y3JlZGl0KHZvaWQgKnBvcnRfY2JhcmcpCit7CisKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBwb3J0X2NiYXJnOworCXN0cnVjdCBiZmlfcHBvcnRfc2V0X3N2Y19wYXJhbXNfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3RyYyhwb3J0LT5iZmEsIHBvcnQtPmNmZy50eF9iYmNyZWRpdCk7CisJCXJldHVybjsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0ZDX1BPUlQsIEJGSV9QUE9SVF9IMklfU0VUX1NWQ19QQVJBTVNfUkVRLAorCQkgICAgYmZhX2xwdWlkKHBvcnQtPmJmYSkpOworCW0tPnR4X2JiY3JlZGl0ID0gYmZhX29zX2h0b25zKCh1MTYpIHBvcnQtPmNmZy50eF9iYmNyZWRpdCk7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKK30KKworCisKKy8qKgorICogIGJmYV9wcG9ydF9wdWJsaWMKKyAqLworCisvKioKKyAqIEZpcm13YXJlIG1lc3NhZ2UgaGFuZGxlci4KKyAqLwordm9pZAorYmZhX3Bwb3J0X2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKwl1bmlvbiBiZmlfcHBvcnRfaTJoX21zZ191IGkyaG1zZzsKKworCWkyaG1zZy5tc2cgPSBtc2c7CisJcHBvcnQtPmV2ZW50X2FyZy5pMmhtc2cgPSBpMmhtc2c7CisKKwlzd2l0Y2ggKG1zZy0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9QUE9SVF9JMkhfRU5BQkxFX1JTUDoKKwkJaWYgKHBwb3J0LT5tc2d0YWcgPT0gaTJobXNnLmVuYWJsZV9yc3AtPm1zZ3RhZykKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHBwb3J0LCBCRkFfUFBPUlRfU01fRldSU1ApOworCQlicmVhazsKKworCWNhc2UgQkZJX1BQT1JUX0kySF9ESVNBQkxFX1JTUDoKKwkJaWYgKHBwb3J0LT5tc2d0YWcgPT0gaTJobXNnLmVuYWJsZV9yc3AtPm1zZ3RhZykKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHBwb3J0LCBCRkFfUFBPUlRfU01fRldSU1ApOworCQlicmVhazsKKworCWNhc2UgQkZJX1BQT1JUX0kySF9FVkVOVDoKKwkJc3dpdGNoIChpMmhtc2cuZXZlbnQtPmxpbmtfc3RhdGUubGlua3N0YXRlKSB7CisJCWNhc2UgQkZBX1BQT1JUX0xJTktVUDoKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHBwb3J0LCBCRkFfUFBPUlRfU01fTElOS1VQKTsKKwkJCWJyZWFrOworCQljYXNlIEJGQV9QUE9SVF9MSU5LRE9XTjoKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHBwb3J0LCBCRkFfUFBPUlRfU01fTElOS0RPV04pOworCQkJYnJlYWs7CisJCWNhc2UgQkZBX1BQT1JUX1RSVU5LX0xJTktET1dOOgorCQkJLyoqIHRvZG86IGV2ZW50IG5vdGlmaWNhdGlvbiAqLworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGSV9QUE9SVF9JMkhfR0VUX1NUQVRTX1JTUDoKKwljYXNlIEJGSV9QUE9SVF9JMkhfR0VUX1FPU19TVEFUU19SU1A6CisJCS8qCisJCSAqIGNoZWNrIGZvciB0aW1lciBwb3AgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHJzcAorCQkgKi8KKwkJaWYgKHBwb3J0LT5zdGF0c19idXN5ID09IEJGQV9GQUxTRQorCQkgICAgfHwgcHBvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCWJyZWFrOworCisJCWJmYV90aW1lcl9zdG9wKCZwcG9ydC0+dGltZXIpOworCQlwcG9ydC0+c3RhdHNfc3RhdHVzID0gaTJobXNnLmdldHN0YXRzX3JzcC0+c3RhdHVzOworCQliZmFfY2JfcXVldWUocHBvcnQtPmJmYSwgJnBwb3J0LT5oY2JfcWUsIF9fYmZhX2NiX3BvcnRfc3RhdHMsCisJCQkgICAgIHBwb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBCRklfUFBPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUDoKKwljYXNlIEJGSV9QUE9SVF9JMkhfQ0xFQVJfUU9TX1NUQVRTX1JTUDoKKwkJLyoKKwkJICogY2hlY2sgZm9yIHRpbWVyIHBvcCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcnNwCisJCSAqLworCQlpZiAocHBvcnQtPnN0YXRzX2J1c3kgPT0gQkZBX0ZBTFNFCisJCSAgICB8fCBwcG9ydC0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfRVRJTUVSKQorCQkJYnJlYWs7CisKKwkJYmZhX3RpbWVyX3N0b3AoJnBwb3J0LT50aW1lcik7CisJCXBwb3J0LT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCQliZmFfY2JfcXVldWUocHBvcnQtPmJmYSwgJnBwb3J0LT5oY2JfcWUsCisJCQkgICAgIF9fYmZhX2NiX3BvcnRfc3RhdHNfY2xyLCBwcG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfcHBvcnRfYXBpCisgKi8KKworLyoqCisgKiBSZWdpc3RlcmVkIGNhbGxiYWNrIGZvciBwb3J0IGV2ZW50cy4KKyAqLwordm9pZAorYmZhX3Bwb3J0X2V2ZW50X3JlZ2lzdGVyKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJIHZvaWQgKCpjYmZuKSAodm9pZCAqY2JhcmcsIGJmYV9wcG9ydF9ldmVudF90IGV2ZW50KSwKKwkJCSB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlwcG9ydC0+ZXZlbnRfY2JmbiA9IGNiZm47CisJcHBvcnQtPmV2ZW50X2NiYXJnID0gY2Jhcmc7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocHBvcnQtPmRpYWdfYnVzeSkKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0RJQUdfQlVTWSk7CisJZWxzZSBpZiAoYmZhX3NtX2NtcF9zdGF0ZQorCQkgKEJGQV9QT1JUX01PRChiZmEpLCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nX3F3YWl0KSkKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0RFVkJVU1kpOworCisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9FTkFCTEUpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KEJGQV9QT1JUX01PRChiZmEpLCBCRkFfUFBPUlRfU01fRElTQUJMRSk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogQ29uZmlndXJlIHBvcnQgc3BlZWQuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ19zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSwgZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHNwZWVkKTsKKworCWlmICgoc3BlZWQgIT0gQkZBX1BQT1JUX1NQRUVEX0FVVE8pICYmIChzcGVlZCA+IHBwb3J0LT5zcGVlZF9zdXApKSB7CisJCWJmYV90cmMoYmZhLCBwcG9ydC0+c3BlZWRfc3VwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVU5TVVBQX1NQRUVEOworCX0KKworCXBwb3J0LT5jZmcuc3BlZWQgPSBzcGVlZDsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogR2V0IGN1cnJlbnQgc3BlZWQuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NwZWVkCitiZmFfcHBvcnRfZ2V0X3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPnNwZWVkOworfQorCisvKioKKyAqIENvbmZpZ3VyZSBwb3J0IHRvcG9sb2d5LgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jZmdfdG9wb2xvZ3koc3RydWN0IGJmYV9zICpiZmEsIGVudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IHRvcG9sb2d5KQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCB0b3BvbG9neSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudG9wb2xvZ3kpOworCisJc3dpdGNoICh0b3BvbG9neSkgeworCWNhc2UgQkZBX1BQT1JUX1RPUE9MT0dZX1AyUDoKKwljYXNlIEJGQV9QUE9SVF9UT1BPTE9HWV9MT09QOgorCWNhc2UgQkZBX1BQT1JUX1RPUE9MT0dZX0FVVE86CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRUlOVkFMOworCX0KKworCXBwb3J0LT5jZmcudG9wb2xvZ3kgPSB0b3BvbG9neTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCisvKioKKyAqIEdldCBjdXJyZW50IHRvcG9sb2d5LgorICovCitlbnVtIGJmYV9wcG9ydF90b3BvbG9neQorYmZhX3Bwb3J0X2dldF90b3BvbG9neShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT50b3BvbG9neTsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX2hhcmRhbHBhKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBhbHBhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBhbHBhKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5jZmdfaGFyZGFscGEpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLmhhcmRhbHBhKTsKKworCXBwb3J0LT5jZmcuY2ZnX2hhcmRhbHBhID0gQkZBX1RSVUU7CisJcHBvcnQtPmNmZy5oYXJkYWxwYSA9IGFscGE7CisKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jbHJfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcuY2ZnX2hhcmRhbHBhKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5oYXJkYWxwYSk7CisKKwlwcG9ydC0+Y2ZnLmNmZ19oYXJkYWxwYSA9IEJGQV9GQUxTRTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfZ2V0X2hhcmRhbHBhKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCAqYWxwYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCSphbHBhID0gcG9ydC0+Y2ZnLmhhcmRhbHBhOworCXJldHVybiBwb3J0LT5jZmcuY2ZnX2hhcmRhbHBhOworfQorCit1OAorYmZhX3Bwb3J0X2dldF9teWFscGEoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gcG9ydC0+bXlhbHBhOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jZmdfbWF4ZnJzaXplKHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgbWF4ZnJzaXplKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBtYXhmcnNpemUpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLm1heGZyc2l6ZSk7CisKKwkvKgorCSAqIHdpdGggaW4gcmFuZ2UKKwkgKi8KKwlpZiAoKG1heGZyc2l6ZSA+IEZDX01BWF9QRFVTWikgfHwgKG1heGZyc2l6ZSA8IEZDX01JTl9QRFVTWikpCisJCXJldHVybiAoQkZBX1NUQVRVU19JTlZMRF9ERlNaKTsKKworCS8qCisJICogcG93ZXIgb2YgMiwgaWYgbm90IHRoZSBtYXggZnJhbWUgc2l6ZSBvZiAyMTEyCisJICovCisJaWYgKChtYXhmcnNpemUgIT0gRkNfTUFYX1BEVVNaKSAmJiAobWF4ZnJzaXplICYgKG1heGZyc2l6ZSAtIDEpKSkKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0lOVkxEX0RGU1opOworCisJcHBvcnQtPmNmZy5tYXhmcnNpemUgPSBtYXhmcnNpemU7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKwordTE2CitiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5jZmcubWF4ZnJzaXplOworfQorCit1MzIKK2JmYV9wcG9ydF9teXBpZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5teXBpZDsKK30KKwordTgKK2JmYV9wcG9ydF9nZXRfcnhfYmJjcmVkaXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gcG9ydC0+Y2ZnLnJ4X2JiY3JlZGl0OworfQorCit2b2lkCitiZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgdHhfYmJjcmVkaXQpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlwb3J0LT5jZmcudHhfYmJjcmVkaXQgPSAodTgpIHR4X2JiY3JlZGl0OworCWJmYV9wb3J0X3NlbmRfdHhjcmVkaXQocG9ydCk7Cit9CisKKy8qKgorICogR2V0IHBvcnQgYXR0cmlidXRlcy4KKyAqLworCit3d25fdAorYmZhX3Bwb3J0X2dldF93d24oc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgbm9kZSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisJaWYgKG5vZGUpCisJCXJldHVybiBwcG9ydC0+bnd3bjsKKwllbHNlCisJCXJldHVybiBwcG9ydC0+cHd3bjsKK30KKwordm9pZAorYmZhX3Bwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyAqYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfb3NfbWVtc2V0KGF0dHIsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcykpOworCisJYXR0ci0+bnd3biA9IHBwb3J0LT5ud3duOworCWF0dHItPnB3d24gPSBwcG9ydC0+cHd3bjsKKworCWJmYV9vc19tZW1jcHkoJmF0dHItPnBwb3J0X2NmZywgJnBwb3J0LT5jZmcsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zKSk7CisJLyoKKwkgKiBzcGVlZCBhdHRyaWJ1dGVzCisJICovCisJYXR0ci0+cHBvcnRfY2ZnLnNwZWVkID0gcHBvcnQtPmNmZy5zcGVlZDsKKwlhdHRyLT5zcGVlZF9zdXBwb3J0ZWQgPSBwcG9ydC0+c3BlZWRfc3VwOworCWF0dHItPnNwZWVkID0gcHBvcnQtPnNwZWVkOworCWF0dHItPmNvc19zdXBwb3J0ZWQgPSBGQ19DTEFTU18zOworCisJLyoKKwkgKiB0b3BvbG9neSBhdHRyaWJ1dGVzCisJICovCisJYXR0ci0+cHBvcnRfY2ZnLnRvcG9sb2d5ID0gcHBvcnQtPmNmZy50b3BvbG9neTsKKwlhdHRyLT50b3BvbG9neSA9IHBwb3J0LT50b3BvbG9neTsKKworCS8qCisJICogYmVhY29uIGF0dHJpYnV0ZXMKKwkgKi8KKwlhdHRyLT5iZWFjb24gPSBwcG9ydC0+YmVhY29uOworCWF0dHItPmxpbmtfZTJlX2JlYWNvbiA9IHBwb3J0LT5saW5rX2UyZV9iZWFjb247CisJYXR0ci0+cGxvZ19lbmFibGVkID0gYmZhX3Bsb2dfZ2V0X3NldHRpbmcocHBvcnQtPmJmYS0+cGxvZyk7CisKKwlhdHRyLT5wcG9ydF9jZmcucGF0aF90b3YgPSBiZmFfZmNwaW1fcGF0aF90b3ZfZ2V0KGJmYSk7CisJYXR0ci0+cHBvcnRfY2ZnLnFfZGVwdGggPSBiZmFfZmNwaW1fcWRlcHRoX2dldChiZmEpOworCWF0dHItPnBvcnRfc3RhdGUgPSBiZmFfc21fdG9fc3RhdGUoaGFsX3Bwb3J0X3NtX3RhYmxlLCBwcG9ydC0+c20pOworCWlmIChiZmFfaW9jX2lzX2Rpc2FibGVkKCZwcG9ydC0+YmZhLT5pb2MpKQorCQlhdHRyLT5wb3J0X3N0YXRlID0gQkZBX1BQT1JUX1NUX0lPQ0RJUzsKKwllbHNlIGlmIChiZmFfaW9jX2Z3X21pc21hdGNoKCZwcG9ydC0+YmZhLT5pb2MpKQorCQlhdHRyLT5wb3J0X3N0YXRlID0gQkZBX1BQT1JUX1NUX0ZXTUlTTUFUQ0g7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c19xdWVyeSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisJYmZpX3Bwb3J0X2dldF9zdGF0c19yZXFfdCAqbXNnOworCisJbXNnID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCisJaWYgKCFtc2cpIHsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfVFJVRTsKKwkJYmZhX3JlcXFfd2luaXQoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCwgYmZhX3BvcnRfc3RhdHNfcXVlcnksCisJCQkgICAgICAgcG9ydCk7CisJCWJmYV9yZXFxX3dhaXQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JULCAmcG9ydC0+c3RhdHNfcmVxcV93YWl0KTsKKwkJcmV0dXJuOworCX0KKwlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9GQUxTRTsKKworCWJmYV9vc19tZW1zZXQobXNnLCAwLCBzaXplb2YoYmZpX3Bwb3J0X2dldF9zdGF0c19yZXFfdCkpOworCWJmaV9oMmlfc2V0KG1zZy0+bWgsIEJGSV9NQ19GQ19QT1JULCBCRklfUFBPUlRfSDJJX0dFVF9TVEFUU19SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfc3RhdHNfY2xlYXIodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcHBvcnRfcyAqKWNiYXJnOworCWJmaV9wcG9ydF9jbGVhcl9zdGF0c19yZXFfdCAqbXNnOworCisJbXNnID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCisJaWYgKCFtc2cpIHsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfVFJVRTsKKwkJYmZhX3JlcXFfd2luaXQoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCwgYmZhX3BvcnRfc3RhdHNfY2xlYXIsCisJCQkgICAgICAgcG9ydCk7CisJCWJmYV9yZXFxX3dhaXQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JULCAmcG9ydC0+c3RhdHNfcmVxcV93YWl0KTsKKwkJcmV0dXJuOworCX0KKwlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9GQUxTRTsKKworCWJmYV9vc19tZW1zZXQobXNnLCAwLCBzaXplb2YoYmZpX3Bwb3J0X2NsZWFyX3N0YXRzX3JlcV90KSk7CisJYmZpX2gyaV9zZXQobXNnLT5taCwgQkZJX01DX0ZDX1BPUlQsIEJGSV9QUE9SVF9IMklfQ0xFQVJfU1RBVFNfUkVRLAorCQkgICAgYmZhX2xwdWlkKHBvcnQtPmJmYSkpOworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9xb3Nfc3RhdHNfY2xlYXIodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcHBvcnRfcyAqKWNiYXJnOworCWJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcmVxX3QgKm1zZzsKKworCW1zZyA9IGJmYV9yZXFxX25leHQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKworCWlmICghbXNnKSB7CisJCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX1RSVUU7CisJCWJmYV9yZXFxX3dpbml0KCZwb3J0LT5zdGF0c19yZXFxX3dhaXQsIGJmYV9wb3J0X3Fvc19zdGF0c19jbGVhciwKKwkJCSAgICAgICBwb3J0KTsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlyZXR1cm47CisJfQorCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCisJYmZhX29zX21lbXNldChtc2csIDAsIHNpemVvZihiZmlfcHBvcnRfY2xlYXJfcW9zX3N0YXRzX3JlcV90KSk7CisJYmZpX2gyaV9zZXQobXNnLT5taCwgQkZJX01DX0ZDX1BPUlQsIEJGSV9QUE9SVF9IMklfQ0xFQVJfUU9TX1NUQVRTX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3N0YXRzX3N3YXAodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKmQsIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzKQoreworCXUzMiAgICAgICAqZGlwID0gKHUzMiAqKSBkOworCXUzMiAgICAgICAqc2lwID0gKHUzMiAqKSBzOworCWludCAgICAgICAgICAgICBpOworCisJLyoKKwkgKiBEbyA2NCBiaXQgZmllbGRzIHN3YXAgZmlyc3QKKwkgKi8KKwlmb3IgKGkgPSAwOworCSAgICAgaSA8CisJICAgICAoKHNpemVvZih1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSkgLQorCSAgICAgICBzaXplb2Yoc3RydWN0IGJmYV9xb3Nfc3RhdHNfcykpIC8gc2l6ZW9mKHUzMikpOyBpID0gaSArIDIpIHsKKyNpZmRlZiBfX0JJR0VORElBTgorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwoc2lwW2ldKTsKKwkJZGlwW2kgKyAxXSA9IGJmYV9vc19udG9obChzaXBbaSArIDFdKTsKKyNlbHNlCisJCWRpcFtpXSA9IGJmYV9vc19udG9obChzaXBbaSArIDFdKTsKKwkJZGlwW2kgKyAxXSA9IGJmYV9vc19udG9obChzaXBbaV0pOworI2VuZGlmCisJfQorCisJLyoKKwkgKiBOb3cgc3dhcCB0aGUgMzIgYml0IGZpZWxkcworCSAqLworCWZvciAoOyBpIDwgKHNpemVvZih1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSkgLyBzaXplb2YodTMyKSk7ICsraSkKKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHNpcFtpXSk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9wb3J0X3N0YXRzX2Nscih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkgeworCQlwb3J0LT5zdGF0c19jYmZuKHBvcnQtPnN0YXRzX2NiYXJnLCBwb3J0LT5zdGF0c19zdGF0dXMpOworCX0gZWxzZSB7CisJCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisJCXBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfc3RhdHNfY2xyX3RpbWVvdXQodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcHBvcnRfcyAqKWNiYXJnOworCisJYmZhX3RyYyhwb3J0LT5iZmEsIHBvcnQtPnN0YXRzX3FmdWxsKTsKKworCWlmIChwb3J0LT5zdGF0c19xZnVsbCkgeworCQliZmFfcmVxcV93Y2FuY2VsKCZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9GQUxTRTsKKwl9CisKKwlwb3J0LT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX0VUSU1FUjsKKwliZmFfY2JfcXVldWUocG9ydC0+YmZhLCAmcG9ydC0+aGNiX3FlLCBfX2JmYV9jYl9wb3J0X3N0YXRzX2NsciwgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9wb3J0X3N0YXRzKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKSB7CisJCWlmIChwb3J0LT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19PSykKKwkJCWJmYV9wcG9ydF9zdGF0c19zd2FwKHBvcnQtPnN0YXRzX3JldCwgcG9ydC0+c3RhdHMpOworCQlwb3J0LT5zdGF0c19jYmZuKHBvcnQtPnN0YXRzX2NiYXJnLCBwb3J0LT5zdGF0c19zdGF0dXMpOworCX0gZWxzZSB7CisJCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisJCXBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfc3RhdHNfdGltZW91dCh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisKKwliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+c3RhdHNfcWZ1bGwpOworCisJaWYgKHBvcnQtPnN0YXRzX3FmdWxsKSB7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCX0KKworCXBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOworCWJmYV9jYl9xdWV1ZShwb3J0LT5iZmEsICZwb3J0LT5oY2JfcWUsIF9fYmZhX2NiX3BvcnRfc3RhdHMsIHBvcnQpOworfQorCisjZGVmaW5lIEJGQV9QT1JUX1NUQVRTX1RPVgkxMDAwCisKKy8qKgorICogRmV0Y2ggcG9ydCBhdHRyaWJ1dGVzLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cywKKwkJICAgIGJmYV9jYl9wcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJaWYgKHBvcnQtPnN0YXRzX2J1c3kpIHsKKwkJYmZhX3RyYyhiZmEsIHBvcnQtPnN0YXRzX2J1c3kpOworCQlyZXR1cm4gKEJGQV9TVEFUVVNfREVWQlVTWSk7CisJfQorCisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCXBvcnQtPnN0YXRzX3JldCA9IHN0YXRzOworCXBvcnQtPnN0YXRzX2NiZm4gPSBjYmZuOworCXBvcnQtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisKKwliZmFfcG9ydF9zdGF0c19xdWVyeShwb3J0KTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZwb3J0LT50aW1lciwgYmZhX3BvcnRfc3RhdHNfdGltZW91dCwgcG9ydCwKKwkJCUJGQV9QT1JUX1NUQVRTX1RPVik7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJaWYgKHBvcnQtPnN0YXRzX2J1c3kpIHsKKwkJYmZhX3RyYyhiZmEsIHBvcnQtPnN0YXRzX2J1c3kpOworCQlyZXR1cm4gKEJGQV9TVEFUVVNfREVWQlVTWSk7CisJfQorCisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCXBvcnQtPnN0YXRzX2NiZm4gPSBjYmZuOworCXBvcnQtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisKKwliZmFfcG9ydF9zdGF0c19jbGVhcihwb3J0KTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZwb3J0LT50aW1lciwgYmZhX3BvcnRfc3RhdHNfY2xyX3RpbWVvdXQsIHBvcnQsCisJCQlCRkFfUE9SVF9TVEFUU19UT1YpOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X3RydW5rX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggYml0bWFwKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBiaXRtYXApOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLnRydW5rZWQpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLnRydW5rX3BvcnRzKTsKKworCWlmICghYml0bWFwIHx8IChiaXRtYXAgJiAoYml0bWFwIC0gMSkpKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisKKwlwcG9ydC0+Y2ZnLnRydW5rZWQgPSBCRkFfVFJVRTsKKwlwcG9ydC0+Y2ZnLnRydW5rX3BvcnRzID0gYml0bWFwOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9xb3NfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcW9zX2F0dHJfcyAqcW9zX2F0dHIpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcW9zX2F0dHItPnN0YXRlID0gYmZhX29zX250b2hsKHBwb3J0LT5xb3NfYXR0ci5zdGF0ZSk7CisJcW9zX2F0dHItPnRvdGFsX2JiX2NyID0gYmZhX29zX250b2hsKHBwb3J0LT5xb3NfYXR0ci50b3RhbF9iYl9jcik7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9xb3NfZ2V0X3ZjX2F0dHIoc3RydWN0IGJmYV9zICpiZmEsCisJCQkgIHN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyAqcW9zX3ZjX2F0dHIpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCXN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyAqYmZhX3ZjX2F0dHIgPSAmcHBvcnQtPnFvc192Y19hdHRyOworCXUzMiAgICAgICAgaSA9IDA7CisKKwlxb3NfdmNfYXR0ci0+dG90YWxfdmNfY291bnQgPSBiZmFfb3NfbnRvaHMoYmZhX3ZjX2F0dHItPnRvdGFsX3ZjX2NvdW50KTsKKwlxb3NfdmNfYXR0ci0+c2hhcmVkX2NyZWRpdCA9IGJmYV9vc19udG9ocyhiZmFfdmNfYXR0ci0+c2hhcmVkX2NyZWRpdCk7CisJcW9zX3ZjX2F0dHItPmVscF9vcG1vZGVfZmxhZ3MgPQorCQliZmFfb3NfbnRvaGwoYmZhX3ZjX2F0dHItPmVscF9vcG1vZGVfZmxhZ3MpOworCisJLyoKKwkgKiBJbmRpdmlkdWFsIFZDIGluZm8KKwkgKi8KKwl3aGlsZSAoaSA8IHFvc192Y19hdHRyLT50b3RhbF92Y19jb3VudCkgeworCQlxb3NfdmNfYXR0ci0+dmNfaW5mb1tpXS52Y19jcmVkaXQgPQorCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0udmNfY3JlZGl0OworCQlxb3NfdmNfYXR0ci0+dmNfaW5mb1tpXS5ib3Jyb3dfY3JlZGl0ID0KKwkJCWJmYV92Y19hdHRyLT52Y19pbmZvW2ldLmJvcnJvd19jcmVkaXQ7CisJCXFvc192Y19hdHRyLT52Y19pbmZvW2ldLnByaW9yaXR5ID0KKwkJCWJmYV92Y19hdHRyLT52Y19pbmZvW2ldLnByaW9yaXR5OworCQkrK2k7CisJfQorfQorCisvKioKKyAqIEZldGNoIFFvUyBTdGF0cy4KKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfZ2V0X3Fvc19zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkJYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJLyoKKwkgKiBRb1Mgc3RhdHMgaXMgZW1iZWRkZWQgaW4gcG9ydCBzdGF0cworCSAqLworCXJldHVybiAoYmZhX3Bwb3J0X2dldF9zdGF0cyhiZmEsIHN0YXRzLCBjYmZuLCBjYmFyZykpOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJaWYgKHBvcnQtPnN0YXRzX2J1c3kpIHsKKwkJYmZhX3RyYyhiZmEsIHBvcnQtPnN0YXRzX2J1c3kpOworCQlyZXR1cm4gKEJGQV9TVEFUVVNfREVWQlVTWSk7CisJfQorCisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCXBvcnQtPnN0YXRzX2NiZm4gPSBjYmZuOworCXBvcnQtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisKKwliZmFfcG9ydF9xb3Nfc3RhdHNfY2xlYXIocG9ydCk7CisKKwliZmFfdGltZXJfc3RhcnQoYmZhLCAmcG9ydC0+dGltZXIsIGJmYV9wb3J0X3N0YXRzX2Nscl90aW1lb3V0LCBwb3J0LAorCQkJQkZBX1BPUlRfU1RBVFNfVE9WKTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCisvKioKKyAqIEZldGNoIHBvcnQgYXR0cmlidXRlcy4KKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfdHJ1bmtfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfdHJ1bmtfcXVlcnkoc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqYml0bWFwKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJKmJpdG1hcCA9IHBvcnQtPmNmZy50cnVua19wb3J0czsKKwlyZXR1cm4gcG9ydC0+Y2ZnLnRydW5rZWQ7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiAoYmZhX3NtX3RvX3N0YXRlKGhhbF9wcG9ydF9zbV90YWJsZSwgcG9ydC0+c20pID09CisJCUJGQV9QUE9SVF9TVF9ESVNBQkxFRCk7CisKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X2lzX3JhdGVsaW0oc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCityZXR1cm4gKHBwb3J0LT5jZmcucmF0ZWxpbWl0ID8gQkZBX1RSVUUgOiBCRkFfRkFMU0UpOworCit9CisKK3ZvaWQKK2JmYV9wcG9ydF9jZmdfcW9zKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG9uX29mZikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgb25fb2ZmKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5xb3NfZW5hYmxlZCk7CisKKwlwcG9ydC0+Y2ZnLnFvc19lbmFibGVkID0gb25fb2ZmOworfQorCit2b2lkCitiZmFfcHBvcnRfY2ZnX3JhdGVsaW0oc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgb25fb2ZmKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBvbl9vZmYpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLnJhdGVsaW1pdCk7CisKKwlwcG9ydC0+Y2ZnLnJhdGVsaW1pdCA9IG9uX29mZjsKKwlpZiAocHBvcnQtPmNmZy50cmxfZGVmX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKQorCQlwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPSBCRkFfUFBPUlRfU1BFRURfMUdCUFM7Cit9CisKKy8qKgorICogQ29uZmlndXJlIGRlZmF1bHQgbWluaW11bSByYXRlbGltIHNwZWVkCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ19yYXRlbGltX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhLCBlbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgc3BlZWQpOworCisJLyoKKwkgKiBBdXRvIGFuZCBzcGVlZHMgZ3JlYXRlciB0aGFuIHRoZSBzdXBwb3J0ZWQgc3BlZWQsIGFyZSBpbnZhbGlkCisJICovCisJaWYgKChzcGVlZCA9PSBCRkFfUFBPUlRfU1BFRURfQVVUTykgfHwgKHNwZWVkID4gcHBvcnQtPnNwZWVkX3N1cCkpIHsKKwkJYmZhX3RyYyhiZmEsIHBwb3J0LT5zcGVlZF9zdXApOworCQlyZXR1cm4gQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQ7CisJfQorCisJcHBvcnQtPmNmZy50cmxfZGVmX3NwZWVkID0gc3BlZWQ7CisKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCisvKioKKyAqIEdldCBkZWZhdWx0IG1pbmltdW0gcmF0ZWxpbSBzcGVlZAorICovCitlbnVtIGJmYV9wcG9ydF9zcGVlZAorYmZhX3Bwb3J0X2dldF9yYXRlbGltX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQpOworCXJldHVybiAocHBvcnQtPmNmZy50cmxfZGVmX3NwZWVkKTsKKworfQorCit2b2lkCitiZmFfcHBvcnRfYnVzeShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBzdGF0dXMpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHN0YXR1cyk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5kaWFnX2J1c3kpOworCisJcHBvcnQtPmRpYWdfYnVzeSA9IHN0YXR1czsKK30KKwordm9pZAorYmZhX3Bwb3J0X2JlYWNvbihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBiZWFjb24sCisJCSBiZmFfYm9vbGVhbl90IGxpbmtfZTJlX2JlYWNvbikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgYmVhY29uKTsKKwliZmFfdHJjKGJmYSwgbGlua19lMmVfYmVhY29uKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmJlYWNvbik7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5saW5rX2UyZV9iZWFjb24pOworCisJcHBvcnQtPmJlYWNvbiA9IGJlYWNvbjsKKwlwcG9ydC0+bGlua19lMmVfYmVhY29uID0gbGlua19lMmVfYmVhY29uOworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfaXNfbGlua3VwKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiBiZmFfc21fY21wX3N0YXRlKEJGQV9QT1JUX01PRChiZmEpLCBiZmFfcHBvcnRfc21fbGlua3VwKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYjM5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYwpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzLmMgQkZBIEZDUyBtYWluCisgKi8KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSAiZmNzX3BvcnQuaCIKKyNpbmNsdWRlICJmY3NfdWYuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX2ZjcGltLmgiCisjaW5jbHVkZSAiZmNzX2ZjcHRtLmgiCisjaW5jbHVkZSAiZmNidWlsZC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2IuaD4KKworLyoqCisgKiBGQ1Mgc3ViLW1vZHVsZXMKKyAqLworc3RydWN0IGJmYV9mY3NfbW9kX3MgeworCXZvaWQgICAgICAgICAgICAoKm1vZGluaXQpIChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCXZvaWQgICAgICAgICAgICAoKm1vZGV4aXQpIChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworfTsKKworI2RlZmluZSBCRkFfRkNTX01PRFVMRShfbW9kKSB7IF9tb2QgIyMgX21vZGluaXQsIF9tb2QgIyMgX21vZGV4aXQgfQorCitzdGF0aWMgc3RydWN0IGJmYV9mY3NfbW9kX3MgZmNzX21vZHVsZXNbXSA9IHsKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX3Bwb3J0KSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX3VmKSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX2ZhYnJpYyksCisJQkZBX0ZDU19NT0RVTEUoYmZhX2Zjc192cG9ydCksCisJQkZBX0ZDU19NT0RVTEUoYmZhX2Zjc19ycG9ydCksCisJQkZBX0ZDU19NT0RVTEUoYmZhX2Zjc19mY3BpbSksCit9OworCisvKioKKyAqICBmY3NfYXBpIEJGQSBGQ1MgQVBJCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZXhpdF9jb21wKHZvaWQgKmZjc19jYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3MgPSBmY3NfY2Jhcmc7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IGZjcy0+YmZhZDsKKworCWNvbXBsZXRlKCZiZmFkLT5jb21wKTsKK30KKworCisKKy8qKgorICogIGZjc19hcGkgQkZBIEZDUyBBUEkKKyAqLworCisvKioKKyAqIAkJRkNTIGluc3RhbmNlIGluaXRpYWxpemF0aW9uLgorICoKKyAqIAlwYXJhbVtpbl0JCWZjcwkJRkNTIGluc3RhbmNlCisgKiAJcGFyYW1baW5dCQliZmEJCUJGQSBpbnN0YW5jZQorICogCXBhcmFtW2luXQkJYmZhZAkJQkZBIGRyaXZlciBpbnN0YW5jZQorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCWJmYV9ib29sZWFuX3QgbWluX2NmZykKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX2Zjc19tb2RfcyAgKm1vZDsKKworCWZjcy0+YmZhID0gYmZhOworCWZjcy0+YmZhZCA9IGJmYWQ7CisJZmNzLT5taW5fY2ZnID0gbWluX2NmZzsKKworCWJmYV9hdHRhY2hfZmNzKGJmYSk7CisJZmNidWlsZF9pbml0KCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGZjc19tb2R1bGVzKSAvIHNpemVvZihmY3NfbW9kdWxlc1swXSk7IGkrKykgeworCQltb2QgPSAmZmNzX21vZHVsZXNbaV07CisJCW1vZC0+bW9kaW5pdChmY3MpOworCX0KK30KKworLyoqCisgKiBTdGFydCBGQ1Mgb3BlcmF0aW9ucy4KKyAqLwordm9pZAorYmZhX2Zjc19zdGFydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19mYWJyaWNfbW9kc3RhcnQoZmNzKTsKK30KKworLyoqCisgKiAJCUZDUyBkcml2ZXIgZGV0YWlscyBpbml0aWFsaXphdGlvbi4KKyAqCisgKiAJcGFyYW1baW5dCQlmY3MJCUZDUyBpbnN0YW5jZQorICogCXBhcmFtW2luXQkJZHJpdmVyX2luZm8JRHJpdmVyIERldGFpbHMKKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc19kcml2ZXJfaW5mb19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvKQoreworCisJZmNzLT5kcml2ZXJfaW5mbyA9ICpkcml2ZXJfaW5mbzsKKworCWJmYV9mY3NfZmFicmljX3BzeW1iX2luaXQoJmZjcy0+ZmFicmljKTsKK30KKworLyoqCisgKiAJCUZDUyBpbnN0YW5jZSBjbGVhbnVwIGFuZCBleGl0LgorICoKKyAqIAlwYXJhbVtpbl0JCWZjcwkJCUZDUyBpbnN0YW5jZQorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJc3RydWN0IGJmYV9mY3NfbW9kX3MgICptb2Q7CisJaW50ICAgICAgICAgICAgIG5tb2RzLCBpOworCisJYmZhX3djX2luaXQoJmZjcy0+d2MsIGJmYV9mY3NfZXhpdF9jb21wLCBmY3MpOworCisJbm1vZHMgPSBzaXplb2YoZmNzX21vZHVsZXMpIC8gc2l6ZW9mKGZjc19tb2R1bGVzWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBubW9kczsgaSsrKSB7CisJCWJmYV93Y191cCgmZmNzLT53Yyk7CisKKwkJbW9kID0gJmZjc19tb2R1bGVzW2ldOworCQltb2QtPm1vZGV4aXQoZmNzKTsKKwl9CisKKwliZmFfd2Nfd2FpdCgmZmNzLT53Yyk7Cit9CisKKwordm9pZAorYmZhX2Zjc190cmNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpCit7CisJZmNzLT50cmNtb2QgPSB0cmNtb2Q7Cit9CisKKwordm9pZAorYmZhX2Zjc19sb2dfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpCit7CisJZmNzLT5sb2dtID0gbG9nbW9kOworfQorCisKK3ZvaWQKK2JmYV9mY3NfYWVuX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX2Flbl9zICphZW4pCit7CisJZmNzLT5hZW4gPSBhZW47Cit9CisKK3ZvaWQKK2JmYV9mY3NfbW9kZXhpdF9jb21wKHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfd2NfZG93bigmZmNzLT53Yyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc1ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMKQEAgLTAsMCArMSw5NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc19wb3J0LmMgQkZBIEZDUyBwb3J0CisgKi8KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfZmNzLmg+CisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Zwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2xwb3J0Lmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIFBPUlQpOworCisvKioKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfbHBvcnRfYWVuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2VuZF9sc19yanQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTggcmVhc29uX2NvZGUsCisJCQl1OCByZWFzb25fY29kZV9leHBsKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfb25saW5lX2FjdGlvbnMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfb2ZmbGluZV9hY3Rpb25zKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Vua25vd25faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF91bmtub3duX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF91bmtub3duX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZGVsZXRlZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9lY2hvKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfZWNob19zICplY2hvLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfcm5pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsIHUxNiBsZW4pOworc3RhdGljIHZvaWQgICAgIGJmYV9mc19wb3J0X2dldF9nZW5fdG9wb19kYXRhKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICpnZW5fdG9wb19kYXRhKTsKKworc3RhdGljIHN0cnVjdCB7CisJdm9pZCAgICAgICAgICAgICgqaW5pdCkgKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisJdm9pZCAgICAgICAgICAgICgqb25saW5lKSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKwl2b2lkICAgICAgICAgICAgKCpvZmZsaW5lKSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK30gX19wb3J0X2FjdGlvbltdID0geworCXsKKwliZmFfZmNzX3BvcnRfdW5rbm93bl9pbml0LCBiZmFfZmNzX3BvcnRfdW5rbm93bl9vbmxpbmUsCisJCQliZmFfZmNzX3BvcnRfdW5rbm93bl9vZmZsaW5lfSwgeworCWJmYV9mY3NfcG9ydF9mYWJfaW5pdCwgYmZhX2Zjc19wb3J0X2ZhYl9vbmxpbmUsCisJCQliZmFfZmNzX3BvcnRfZmFiX29mZmxpbmV9LCB7CisJYmZhX2Zjc19wb3J0X2xvb3BfaW5pdCwgYmZhX2Zjc19wb3J0X2xvb3Bfb25saW5lLAorCQkJYmZhX2Zjc19wb3J0X2xvb3Bfb2ZmbGluZX0sIHsKK2JmYV9mY3NfcG9ydF9uMm5faW5pdCwgYmZhX2Zjc19wb3J0X24ybl9vbmxpbmUsCisJCQliZmFfZmNzX3BvcnRfbjJuX29mZmxpbmV9LH07CisKKy8qKgorICogIGZjc19wb3J0X3NtIEZDUyBsb2dpY2FsIHBvcnQgc3RhdGUgbWFjaGluZQorICovCisKK2VudW0gYmZhX2Zjc19wb3J0X2V2ZW50IHsKKwlCRkFfRkNTX1BPUlRfU01fQ1JFQVRFID0gMSwKKwlCRkFfRkNTX1BPUlRfU01fT05MSU5FID0gMiwKKwlCRkFfRkNTX1BPUlRfU01fT0ZGTElORSA9IDMsCisJQkZBX0ZDU19QT1JUX1NNX0RFTEVURSA9IDQsCisJQkZBX0ZDU19QT1JUX1NNX0RFTFJQT1JUID0gNSwKK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkgICAgIGVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX0NSRUFURToKKwkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21faW5pdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc21faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIGVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fb25saW5lKTsKKwkJYmZhX2Zjc19wb3J0X29ubGluZV9hY3Rpb25zKHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZWQocG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3NfcG9ydF9vZmZsaW5lX2FjdGlvbnMocG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMRVRFOgorCisJCV9fcG9ydF9hY3Rpb25bcG9ydC0+ZmFicmljLT5mYWJfdHlwZV0ub2ZmbGluZShwb3J0KTsKKworCQlpZiAocG9ydC0+bnVtX3Jwb3J0cyA9PSAwKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCQkJYmZhX2Zjc19wb3J0X2RlbGV0ZWQocG9ydCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9kZWxldGluZyk7CisJCQlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQ6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQllbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fb25saW5lKTsKKwkJYmZhX2Zjc19wb3J0X29ubGluZV9hY3Rpb25zKHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX0RFTEVURToKKwkJaWYgKHBvcnQtPm51bV9ycG9ydHMgPT0gMCkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fdW5pbml0KTsKKwkJCWJmYV9mY3NfcG9ydF9kZWxldGVkKHBvcnQpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fZGVsZXRpbmcpOworCQkJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZwb3J0LT5ycG9ydF9xKSB7CisJCQkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQkJCWJmYV9mY3NfcnBvcnRfZGVsZXRlKHJwb3J0KTsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX0RFTFJQT1JUOgorCWNhc2UgQkZBX0ZDU19QT1JUX1NNX09GRkxJTkU6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJIGVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX0RFTFJQT1JUOgorCQlpZiAocG9ydC0+bnVtX3Jwb3J0cyA9PSAwKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCQkJYmZhX2Zjc19wb3J0X2RlbGV0ZWQocG9ydCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGZjc19wb3J0X3B2dAorICovCisKKy8qKgorICogU2VuZCBBRU4gbm90aWZpY2F0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkgICAgICBlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBvcnQtPmZjcy0+bG9nbTsKKwllbnVtIGJmYV9wb3J0X3JvbGUgcm9sZSA9IHBvcnQtPnBvcnRfY2ZnLnJvbGVzOworCXd3bl90ICAgICAgICAgICBscHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwljaGFyICAgICAgICAgICAgbHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICpyb2xlX3N0cltCRkFfUE9SVF9ST0xFX0ZDUF9NQVggLyAyICsgMV0gPQorCQl7ICJJbml0aWF0b3IiLCAiVGFyZ2V0IiwgIklQRkMiIH07CisKKwl3d24yc3RyKGxwd3duX3B0ciwgbHB3d24pOworCisJYmZhX2Fzc2VydChyb2xlIDw9IEJGQV9QT1JUX1JPTEVfRkNQX01BWCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBPUlRfQUVOX09OTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfT05MSU5FLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fT0ZGTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfT0ZGTElORSwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX05FVzoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfTkVXLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fREVMRVRFOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9ERUxFVEUsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9ESVNDT05ORUNUOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9ESVNDT05ORUNULCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlhZW5fZGF0YS5scG9ydC52Zl9pZCA9IHBvcnQtPmZhYnJpYy0+dmZfaWQ7CisJYWVuX2RhdGEubHBvcnQucm9sZXMgPSByb2xlOworCWFlbl9kYXRhLmxwb3J0LnBwd3duID0KKwkJYmZhX2Zjc19wb3J0X2dldF9wd3duKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKTsKKwlhZW5fZGF0YS5scG9ydC5scHd3biA9IGxwd3duOworfQorCisvKgorICogU2VuZCBhIExTIHJlamVjdAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3NlbmRfbHNfcmp0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCSB1OCByZWFzb25fY29kZSwgdTggcmVhc29uX2NvZGVfZXhwbCkKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQgPSBOVUxMOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19sc19yanRfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkLAorCQkJICAgICAgcmVhc29uX2NvZGUsIHJlYXNvbl9jb2RlX2V4cGwpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBiZmFfcnBvcnQsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLAorCQkgICAgICBGQ19NQVhfUERVU1osIDApOworfQorCisvKioKKyAqIFByb2Nlc3MgaW5jb21pbmcgcGxvZ2kgZnJvbSBhIHJlbW90ZSBwb3J0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKworCS8qCisJICogSWYgbWluIGNmZyBtb2RlIGlzIGVuYWJsZWQsIGRyb3AgYW55IGluY29taW5nIFBMT0dJcworCSAqLworCWlmIChfX2Zjc19taW5fY2ZnKHBvcnQtPmZjcykpIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZjX3Bsb2dpX3BhcnNlKHJ4X2ZjaHMpICE9IEZDX1BBUlNFX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwkJLyoKKwkJICogc2VuZCBhIExTIHJlamVjdAorCQkgKi8KKwkJYmZhX2Zjc19wb3J0X3NlbmRfbHNfcmp0KHBvcnQsIHJ4X2ZjaHMsCisJCQkJCSBGQ19MU19SSlRfUlNOX1BST1RPQ09MX0VSUk9SLAorCQkJCQkgRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX09QVElPTlMpOworCQlyZXR1cm47CisJfQorCisJLyoqCisqIERpcmVjdCBBdHRhY2ggUDJQIG1vZGUgOiB2ZXJpZnkgYWRkcmVzcyBhc3NpZ25lZCBieSB0aGUgci1wb3J0LgorCSAqLworCWlmICgoIWJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHBvcnQtPmZhYnJpYykpCisJICAgICYmCisJICAgIChtZW1jbXAKKwkgICAgICgodm9pZCAqKSZiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCksICh2b2lkICopJnBsb2dpLT5wb3J0X25hbWUsCisJICAgICAgc2l6ZW9mKHd3bl90KSkgPCAwKSkgeworCQlpZiAoQkZBX0ZDU19QSURfSVNfV0tBKHJ4X2ZjaHMtPmRfaWQpKSB7CisJCQkvKgorCQkJICogQWRkcmVzcyBhc3NpZ25lZCB0byB1cyBjYW5ub3QgYmUgYSBXS0EKKwkJCSAqLworCQkJYmZhX2Zjc19wb3J0X3NlbmRfbHNfcmp0KHBvcnQsIHJ4X2ZjaHMsCisJCQkJCUZDX0xTX1JKVF9SU05fUFJPVE9DT0xfRVJST1IsCisJCQkJCUZDX0xTX1JKVF9FWFBfSU5WQUxJRF9OUE9SVF9JRCk7CisJCQlyZXR1cm47CisJCX0KKwkJcG9ydC0+cGlkID0gcnhfZmNocy0+ZF9pZDsKKwl9CisKKwkvKioKKwkgKiBGaXJzdCwgY2hlY2sgaWYgd2Uga25vdyB0aGUgZGV2aWNlIGJ5IHB3d24uCisJICovCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocG9ydCwgcGxvZ2ktPnBvcnRfbmFtZSk7CisJaWYgKHJwb3J0KSB7CisJCS8qKgorCQkgKiBEaXJlY3QgQXR0YWNoIFAyUCBtb2RlOiBoYW5kbGUgYWRkcmVzcyBhc3NpZ25lZCBieSB0aGUgcnBvcnQuCisJCSAqLworCQlpZiAoKCFiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChwb3J0LT5mYWJyaWMpKQorCQkgICAgJiYKKwkJICAgIChtZW1jbXAKKwkJICAgICAoKHZvaWQgKikmYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpLAorCQkgICAgICAodm9pZCAqKSZwbG9naS0+cG9ydF9uYW1lLCBzaXplb2Yod3duX3QpKSA8IDApKSB7CisJCQlwb3J0LT5waWQgPSByeF9mY2hzLT5kX2lkOworCQkJcnBvcnQtPnBpZCA9IHJ4X2ZjaHMtPnNfaWQ7CisJCX0KKwkJYmZhX2Zjc19ycG9ydF9wbG9naShycG9ydCwgcnhfZmNocywgcGxvZ2kpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogTmV4dCwgbG9va3VwIHJwb3J0IGJ5IFBJRC4KKwkgKi8KKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIHJ4X2ZjaHMtPnNfaWQpOworCWlmICghcnBvcnQpIHsKKwkJLyoqCisJCSAqIEluYm91bmQgUExPR0kgZnJvbSBhIG5ldyBkZXZpY2UuCisJCSAqLworCQliZmFfZmNzX3Jwb3J0X3Bsb2dpX2NyZWF0ZShwb3J0LCByeF9mY2hzLCBwbG9naSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBScG9ydCBpcyBrbm93biBvbmx5IGJ5IFBJRC4KKwkgKi8KKwlpZiAocnBvcnQtPnB3d24pIHsKKwkJLyoqCisJCSAqIFRoaXMgaXMgYSBkaWZmZXJlbnQgZGV2aWNlIHdpdGggdGhlIHNhbWUgcGlkLiBPbGQgZGV2aWNlCisJCSAqIGRpc2FwcGVhcmVkLiBTZW5kIGltcGxpY2l0IExPR08gdG8gb2xkIGRldmljZS4KKwkJICovCisJCWJmYV9hc3NlcnQocnBvcnQtPnB3d24gIT0gcGxvZ2ktPnBvcnRfbmFtZSk7CisJCWJmYV9mY3NfcnBvcnRfbG9nb19pbXAocnBvcnQpOworCisJCS8qKgorCQkgKiBJbmJvdW5kIFBMT0dJIGZyb20gYSBuZXcgZGV2aWNlICh3aXRoIG9sZCBQSUQpLgorCQkgKi8KKwkJYmZhX2Zjc19ycG9ydF9wbG9naV9jcmVhdGUocG9ydCwgcnhfZmNocywgcGxvZ2kpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogUExPR0kgY3Jvc3NpbmcgZWFjaCBvdGhlci4KKwkgKi8KKwliZmFfYXNzZXJ0KHJwb3J0LT5wd3duID09IFdXTl9OVUxMKTsKKwliZmFfZmNzX3Jwb3J0X3Bsb2dpKHJwb3J0LCByeF9mY2hzLCBwbG9naSk7Cit9CisKKy8qCisgKiBQcm9jZXNzIGluY29taW5nIEVDSE8uCisgKiBTaW5jZSBpdCBkb2VzIG5vdCByZXF1aXJlIGEgbG9naW4sIGl0IGlzIHByb2Nlc3NlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2VjaG8oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2VjaG9fcyAqZWNobywgdTE2IHJ4X2xlbikKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQgPSBOVUxMOworCWludCAgICAgICAgICAgICBsZW4sIHB5bGRfbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfbGVuKTsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX2xzX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQpOworCisJLyoKKwkgKiBDb3B5IHRoZSBwYXlsb2FkIChpZiBhbnkpIGZyb20gdGhlIGVjaG8gZnJhbWUKKwkgKi8KKwlweWxkX2xlbiA9IHJ4X2xlbiAtIHNpemVvZihzdHJ1Y3QgZmNoc19zKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcHlsZF9sZW4pOworCisJaWYgKHB5bGRfbGVuID4gbGVuKQorCQltZW1jcHkoKCh1OCAqKSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApKSArCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGZjX2VjaG9fcyksIChlY2hvICsgMSksCisJCSAgICAgICAocHlsZF9sZW4gLSBzaXplb2Yoc3RydWN0IGZjX2VjaG9fcykpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgYmZhX3Jwb3J0LCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgcHlsZF9sZW4sICZmY2hzLCBOVUxMLCBOVUxMLAorCQkgICAgICBGQ19NQVhfUERVU1osIDApOworfQorCisvKgorICogUHJvY2VzcyBpbmNvbWluZyBSTklELgorICogU2luY2UgaXQgZG9lcyBub3QgcmVxdWlyZSBhIGxvZ2luLCBpdCBpcyBwcm9jZXNzZWQgaGVyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9ybmlkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19ybmlkX2NtZF9zICpybmlkLCB1MTYgcnhfbGVuKQoreworCXN0cnVjdCBmY19ybmlkX2NvbW1vbl9pZF9kYXRhX3MgY29tbW9uX2lkX2RhdGE7CisJc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MgZ2VuX3RvcG9fZGF0YTsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQgPSBOVUxMOworCXUxNiAgICAgICAgbGVuOworCXUzMiAgICAgICAgZGF0YV9mb3JtYXQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9sZW4pOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDaGVjayBOb2RlIEluZGVudGlmaWNhdGlvbiBEYXRhIEZvcm1hdAorCSAqIFdlIG9ubHkgc3VwcG9ydCBHZW5lcmFsIFRvcG9sb2d5IERpc2NvdmVyeSBGb3JtYXQuCisJICogRm9yIGFueSBvdGhlciByZXF1ZXN0ZWQgRGF0YSBGb3JtYXRzLCB3ZSByZXR1cm4gQ29tbW9uIE5vZGUgSWQgRGF0YQorCSAqIG9ubHksIGFzIHBlciBGQy1MUy4KKwkgKi8KKwliZmFfdHJjKHBvcnQtPmZjcywgcm5pZC0+bm9kZV9pZF9kYXRhX2Zvcm1hdCk7CisJaWYgKHJuaWQtPm5vZGVfaWRfZGF0YV9mb3JtYXQgPT0gUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfRElTQ09WRVJZKSB7CisJCWRhdGFfZm9ybWF0ID0gUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfRElTQ09WRVJZOworCQkvKgorCQkgKiBHZXQgR2VuZXJhbCB0b3BvbG9neSBkYXRhIGZvciB0aGlzIHBvcnQKKwkJICovCisJCWJmYV9mc19wb3J0X2dldF9nZW5fdG9wb19kYXRhKHBvcnQsICZnZW5fdG9wb19kYXRhKTsKKwl9IGVsc2UgeworCQlkYXRhX2Zvcm1hdCA9IFJOSURfTk9ERUlEX0RBVEFfRk9STUFUX0NPTU1PTjsKKwl9CisKKwkvKgorCSAqIENvcHkgdGhlIE5vZGUgSWQgSW5mbworCSAqLworCWNvbW1vbl9pZF9kYXRhLnBvcnRfbmFtZSA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwljb21tb25faWRfZGF0YS5ub2RlX25hbWUgPSBiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydCk7CisKKwlsZW4gPSBmY19ybmlkX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCQliZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkLAorCQkJCWRhdGFfZm9ybWF0LCAmY29tbW9uX2lkX2RhdGEsICZnZW5fdG9wb19kYXRhKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgYmZhX3Jwb3J0LCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwKKwkJICAgICAgRkNfTUFYX1BEVVNaLCAwKTsKKworCXJldHVybjsKK30KKworLyoKKyAqICBGaWxsIG91dCBHZW5lcmFsIFRvcG9scGd5IERpc2NvdmVyeSBEYXRhIGZvciBSTklEIEVMUy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mc19wb3J0X2dldF9nZW5fdG9wb19kYXRhKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICpnZW5fdG9wb19kYXRhKQoreworCisJYmZhX29zX21lbXNldChnZW5fdG9wb19kYXRhLCAwLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MpKTsKKworCWdlbl90b3BvX2RhdGEtPmFzc29fdHlwZSA9IGJmYV9vc19odG9ubChSTklEX0FTU09DSUFURURfVFlQRV9IT1NUKTsKKwlnZW5fdG9wb19kYXRhLT5waHlfcG9ydF9udW0gPSAwOwkvKiBAdG9kbyAqLworCWdlbl90b3BvX2RhdGEtPm51bV9hdHRhY2hlZF9ub2RlcyA9IGJmYV9vc19odG9ubCgxKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9vbmxpbmVfYWN0aW9ucyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+b3Blcl90eXBlKTsKKworCV9fcG9ydF9hY3Rpb25bcG9ydC0+ZmFicmljLT5mYWJfdHlwZV0uaW5pdChwb3J0KTsKKwlfX3BvcnRfYWN0aW9uW3BvcnQtPmZhYnJpYy0+ZmFiX3R5cGVdLm9ubGluZShwb3J0KTsKKworCWJmYV9mY3NfcG9ydF9hZW5fcG9zdChwb3J0LCBCRkFfTFBPUlRfQUVOX09OTElORSk7CisJYmZhX2ZjYl9wb3J0X29ubGluZShwb3J0LT5mY3MtPmJmYWQsIHBvcnQtPnBvcnRfY2ZnLnJvbGVzLAorCQkJcG9ydC0+ZmFicmljLT52Zl9kcnYsIChwb3J0LT52cG9ydCA9PSBOVUxMKSA/CisJCQlOVUxMIDogcG9ydC0+dnBvcnQtPnZwb3J0X2Rydik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfb2ZmbGluZV9hY3Rpb25zKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5mYWJyaWMtPm9wZXJfdHlwZSk7CisKKwlfX3BvcnRfYWN0aW9uW3BvcnQtPmZhYnJpYy0+ZmFiX3R5cGVdLm9mZmxpbmUocG9ydCk7CisKKwlpZiAoYmZhX2Zjc19mYWJyaWNfaXNfb25saW5lKHBvcnQtPmZhYnJpYykgPT0gQkZBX1RSVUUpIHsKKwkJYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHBvcnQsIEJGQV9MUE9SVF9BRU5fRElTQ09OTkVDVCk7CisJfSBlbHNlIHsKKwkJYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHBvcnQsIEJGQV9MUE9SVF9BRU5fT0ZGTElORSk7CisJfQorCWJmYV9mY2JfcG9ydF9vZmZsaW5lKHBvcnQtPmZjcy0+YmZhZCwgcG9ydC0+cG9ydF9jZmcucm9sZXMsCisJCQlwb3J0LT5mYWJyaWMtPnZmX2RydiwKKwkJCShwb3J0LT52cG9ydCA9PSBOVUxMKSA/IE5VTEwgOiBwb3J0LT52cG9ydC0+dnBvcnRfZHJ2KTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZShycG9ydCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Vua25vd25faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF91bmtub3duX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF91bmtub3duX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9hc3NlcnQoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZGVsZXRlZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHBvcnQsIEJGQV9MUE9SVF9BRU5fREVMRVRFKTsKKworCS8qCisJICogQmFzZSBwb3J0IHdpbGwgYmUgZGVsZXRlZCBieSB0aGUgT1MgZHJpdmVyCisJICovCisJaWYgKHBvcnQtPnZwb3J0KSB7CisJCWJmYV9mY2JfcG9ydF9kZWxldGUocG9ydC0+ZmNzLT5iZmFkLCBwb3J0LT5wb3J0X2NmZy5yb2xlcywKKwkJCXBvcnQtPmZhYnJpYy0+dmZfZHJ2LAorCQkJcG9ydC0+dnBvcnQgPyBwb3J0LT52cG9ydC0+dnBvcnRfZHJ2IDogTlVMTCk7CisJCWJmYV9mY3NfdnBvcnRfZGVsZXRlX2NvbXAocG9ydC0+dnBvcnQpOworCX0gZWxzZSB7CisJCWJmYV9mY3NfZmFicmljX3BvcnRfZGVsZXRlX2NvbXAocG9ydC0+ZmFicmljKTsKKwl9Cit9CisKKworCisvKioKKyAqICBmY3NfbHBvcnRfYXBpIEJGQSBGQ1MgcG9ydCBBUEkKKyAqLworLyoqCisgKiAgIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisKK30KKworLyoqCisgKiAgIE1vZHVsZSBjbGVhbnVwCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQorCisvKioKKyAqIAkJVW5zb2xpY2l0ZWQgZnJhbWUgcmVjZWl2ZSBoYW5kbGluZy4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpscG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pCit7CisJdTMyICAgICAgICBwaWQgPSBmY2hzLT5zX2lkOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gTlVMTDsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOworCisJYmZhX3N0YXRzKGxwb3J0LCB1Zl9yZWN2cyk7CisKKwlpZiAoIWJmYV9mY3NfcG9ydF9pc19vbmxpbmUobHBvcnQpKSB7CisJCWJmYV9zdGF0cyhscG9ydCwgdWZfcmVjdl9kcm9wcyk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBGaXJzdCwgaGFuZGxlIEVMU3MgdGhhdCBkb25vdCByZXF1aXJlIGEgbG9naW4uCisJICovCisJLyoKKwkgKiBIYW5kbGUgUExPR0kgZmlyc3QKKwkgKi8KKwlpZiAoKGZjaHMtPnR5cGUgPT0gRkNfVFlQRV9FTFMpICYmCisJCShlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfUExPR0kpKSB7CisJCWJmYV9mY3NfcG9ydF9wbG9naShscG9ydCwgZmNocywgKHN0cnVjdCBmY19sb2dpX3MgKikgZWxzX2NtZCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSBFQ0hPIHNlcGFyYXRlbHkuCisJICovCisJaWYgKChmY2hzLT50eXBlID09IEZDX1RZUEVfRUxTKSAmJiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0VDSE8pKSB7CisJCWJmYV9mY3NfcG9ydF9lY2hvKGxwb3J0LCBmY2hzLAorCQkJKHN0cnVjdCBmY19lY2hvX3MgKikgZWxzX2NtZCwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSGFuZGxlIFJOSUQgc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAoKGZjaHMtPnR5cGUgPT0gRkNfVFlQRV9FTFMpICYmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfUk5JRCkpIHsKKwkJYmZhX2Zjc19wb3J0X3JuaWQobHBvcnQsIGZjaHMsCisJCQkoc3RydWN0IGZjX3JuaWRfY21kX3MgKikgZWxzX2NtZCwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIGxvb2sgZm9yIGEgbWF0Y2hpbmcgcmVtb3RlIHBvcnQgSUQKKwkgKi8KKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKGxwb3J0LCBwaWQpOworCWlmIChycG9ydCkgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGZjaHMtPnNfaWQpOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGZjaHMtPmRfaWQpOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGZjaHMtPnR5cGUpOworCisJCWJmYV9mY3NfcnBvcnRfdWZfcmVjdihycG9ydCwgZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIE9ubHkgaGFuZGxlcyBFTFMgZnJhbWVzIGZvciBub3cuCisJICovCisJaWYgKGZjaHMtPnR5cGUgIT0gRkNfVFlQRV9FTFMpIHsKKwkJYmZhX3RyYyhscG9ydC0+ZmNzLCBmY2hzLT50eXBlKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV90cmMobHBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfUlNDTikgeworCQliZmFfZmNzX3BvcnRfc2NuX3Byb2Nlc3NfcnNjbihscG9ydCwgZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfTE9HTykgeworCQkvKioKKwkJICogQHRvZG8gSGFuZGxlIExPR08gZnJhbWVzIHJlY2VpdmVkLgorCQkgKi8KKwkJYmZhX3RyYyhscG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX1BSTEkpIHsKKwkJLyoqCisJCSAqIEB0b2RvIEhhbmRsZSBQUkxJIGZyYW1lcyByZWNlaXZlZC4KKwkJICovCisJCWJmYV90cmMobHBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogVW5oYW5kbGVkIEVMUyBmcmFtZXMuIFNlbmQgYSBMU19SSlQuCisJICovCisJYmZhX2Zjc19wb3J0X3NlbmRfbHNfcmp0KGxwb3J0LCBmY2hzLCBGQ19MU19SSlRfUlNOX0NNRF9OT1RfU1VQUCwKKwkJCQkgRkNfTFNfUkpUX0VYUF9OT19BRERMX0lORk8pOworCit9CisKKy8qKgorICogICBQSUQgYmFzZWQgTG9va3VwIGZvciBhIFItUG9ydCBpbiB0aGUgUG9ydCBSLVBvcnQgUXVldWUKKyAqLworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHUzMiBwaWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmIChycG9ydC0+cGlkID09IHBpZCkKKwkJCXJldHVybiBycG9ydDsKKwl9CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcGlkKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiAgIFBXV04gYmFzZWQgTG9va3VwIGZvciBhIFItUG9ydCBpbiB0aGUgUG9ydCBSLVBvcnQgUXVldWUKKyAqLworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCisJbGlzdF9mb3JfZWFjaChxZSwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAod3duX2lzX2VxdWFsKHJwb3J0LT5wd3duLCBwd3duKSkKKwkJCXJldHVybiBycG9ydDsKKwl9CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcHd3bik7CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoqCisgKiAgIE5XV04gYmFzZWQgTG9va3VwIGZvciBhIFItUG9ydCBpbiB0aGUgUG9ydCBSLVBvcnQgUXVldWUKKyAqLworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X253d24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBud3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCisJbGlzdF9mb3JfZWFjaChxZSwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAod3duX2lzX2VxdWFsKHJwb3J0LT5ud3duLCBud3duKSkKKwkJCXJldHVybiBycG9ydDsKKwl9CisKKwliZmFfdHJjKHBvcnQtPmZjcywgbnd3bik7CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgcnBvcnQgbW9kdWxlIHdoZW4gbmV3IHJwb3J0cyBhcmUgZGlzY292ZXJlZC4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2FkZF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgICBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlsaXN0X2FkZF90YWlsKCZycG9ydC0+cWUsICZwb3J0LT5ycG9ydF9xKTsKKwlwb3J0LT5udW1fcnBvcnRzKys7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IHJwb3J0IG1vZHVsZSB0byB3aGVuIHJwb3J0cyBhcmUgZGVsZXRlZC4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2RlbF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgICBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJnBvcnQtPnJwb3J0X3EsIHJwb3J0KSk7CisJbGlzdF9kZWwoJnJwb3J0LT5xZSk7CisJcG9ydC0+bnVtX3Jwb3J0cy0tOworCisJYmZhX3NtX3NlbmRfZXZlbnQocG9ydCwgQkZBX0ZDU19QT1JUX1NNX0RFTFJQT1JUKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgZmFicmljIGZvciBiYXNlIHBvcnQgd2hlbiBmYWJyaWMgbG9naW4gaXMgY29tcGxldGUuCisgKiBDYWxsZWQgYnkgdnBvcnQgZm9yIHZpcnR1YWwgcG9ydHMgd2hlbiBGRElTQyBpcyBjb21wbGV0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocG9ydCwgQkZBX0ZDU19QT1JUX1NNX09OTElORSk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGZhYnJpYyBmb3IgYmFzZSBwb3J0IHdoZW4gZmFicmljIGdvZXMgb2ZmbGluZS4KKyAqIENhbGxlZCBieSB2cG9ydCBmb3IgdmlydHVhbCBwb3J0cyB3aGVuIHZpcnR1YWwgcG9ydCBiZWNvbWVzIG9mZmxpbmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfRkNTX1BPUlRfU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGZhYnJpYyB0byBkZWxldGUgYmFzZSBscG9ydCBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgKgorICogQ2FsbGVkIGJ5IHZwb3J0IHRvIGRlbGV0ZSBscG9ydCBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMuIFNob3VsZCBjYWxsCisgKiBiZmFfZmNzX3Zwb3J0X2RlbGV0ZV9jb21wKCkgZm9yIHZwb3J0cyBvbiBjb21wbGV0aW9uLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfRkNTX1BPUlRfU01fREVMRVRFKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgZmFicmljIGluIHByaXZhdGUgbG9vcCB0b3BvbG9neSB0byBwcm9jZXNzIExJUCBldmVudC4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogUmV0dXJuIFRSVUUgaWYgcG9ydCBpcyBvbmxpbmUsIGVsc2UgcmV0dXJuIEZBTFNFCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9mY3NfcG9ydF9pc19vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXJldHVybiAoYmZhX3NtX2NtcF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fb25saW5lKSk7Cit9CisKKy8qKgorICogTG9naWNhbCBwb3J0IGluaXRpYWxpemF0aW9uIG9mIGJhc2Ugb3IgdmlydHVhbCBwb3J0LgorICogQ2FsbGVkIGJ5IGZhYnJpYyBmb3IgYmFzZSBwb3J0IG9yIGJ5IHZwb3J0IGZvciB2aXJ0dWFsIHBvcnRzLgorICovCit2b2lkCitiZmFfZmNzX2xwb3J0X2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpscG9ydCwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkgICB1MTYgdmZfaWQsIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcsCisJCSAgIHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWxwb3J0LT5mY3MgPSBmY3M7CisJbHBvcnQtPmZhYnJpYyA9IGJmYV9mY3NfdmZfbG9va3VwKGZjcywgdmZfaWQpOworCWJmYV9vc19hc3NpZ24obHBvcnQtPnBvcnRfY2ZnLCAqcG9ydF9jZmcpOworCWxwb3J0LT52cG9ydCA9IHZwb3J0OworCWxwb3J0LT5scF90YWcgPSAodnBvcnQpID8gYmZhX2xwc19nZXRfdGFnKHZwb3J0LT5scHMpIDoKKwkJCSBiZmFfbHBzX2dldF90YWcobHBvcnQtPmZhYnJpYy0+bHBzKTsKKworCUlOSVRfTElTVF9IRUFEKCZscG9ydC0+cnBvcnRfcSk7CisJbHBvcnQtPm51bV9ycG9ydHMgPSAwOworCisJbHBvcnQtPmJmYWRfcG9ydCA9CisJCWJmYV9mY2JfcG9ydF9uZXcoZmNzLT5iZmFkLCBscG9ydCwgbHBvcnQtPnBvcnRfY2ZnLnJvbGVzLAorCQkJCWxwb3J0LT5mYWJyaWMtPnZmX2RydiwKKwkJCQl2cG9ydCA/IHZwb3J0LT52cG9ydF9kcnYgOiBOVUxMKTsKKwliZmFfZmNzX3BvcnRfYWVuX3Bvc3QobHBvcnQsIEJGQV9MUE9SVF9BRU5fTkVXKTsKKworCWJmYV9zbV9zZXRfc3RhdGUobHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCWJmYV9zbV9zZW5kX2V2ZW50KGxwb3J0LCBCRkFfRkNTX1BPUlRfU01fQ1JFQVRFKTsKK30KKworCisKKy8qKgorICogIGZjc19scG9ydF9hcGkKKyAqLworCit2b2lkCitiZmFfZmNzX3BvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkgICAgICBzdHJ1Y3QgYmZhX3BvcnRfYXR0cl9zICpwb3J0X2F0dHIpCit7CisJaWYgKGJmYV9zbV9jbXBfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX29ubGluZSkpCisJCXBvcnRfYXR0ci0+cGlkID0gcG9ydC0+cGlkOworCWVsc2UKKwkJcG9ydF9hdHRyLT5waWQgPSAwOworCisJcG9ydF9hdHRyLT5wb3J0X2NmZyA9IHBvcnQtPnBvcnRfY2ZnOworCisJaWYgKHBvcnQtPmZhYnJpYykgeworCQlwb3J0X2F0dHItPnBvcnRfdHlwZSA9IGJmYV9mY3NfZmFicmljX3BvcnRfdHlwZShwb3J0LT5mYWJyaWMpOworCQlwb3J0X2F0dHItPmxvb3BiYWNrID0gYmZhX2Zjc19mYWJyaWNfaXNfbG9vcGJhY2socG9ydC0+ZmFicmljKTsKKwkJcG9ydF9hdHRyLT5mYWJyaWNfbmFtZSA9IGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX25hbWUocG9ydCk7CisJCW1lbWNweShwb3J0X2F0dHItPmZhYnJpY19pcF9hZGRyLAorCQkgICAgICAgYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfaXBhZGRyKHBvcnQpLAorCQkgICAgICAgQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaKTsKKworCQlpZiAocG9ydC0+dnBvcnQgIT0gTlVMTCkKKwkJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gQkZBX1BQT1JUX1RZUEVfVlBPUlQ7CisKKwl9IGVsc2UgeworCQlwb3J0X2F0dHItPnBvcnRfdHlwZSA9IEJGQV9QUE9SVF9UWVBFX1VOS05PV047CisJCXBvcnRfYXR0ci0+c3RhdGUgPSBCRkFfUE9SVF9VTklOSVQ7CisJfQorCit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0YjI0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19wb3J0LmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3Bwb3J0LmMgQkZBIEZDUyBQUE9SVCAoIHBoeXNpY2FsIHBvcnQpCisgKi8KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZhYnJpYy5oPgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX3BvcnQuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgUFBPUlQpOworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wcG9ydF9ldmVudF9oYW5kbGVyKHZvaWQgKmNiYXJnLCBiZmFfcHBvcnRfZXZlbnRfdCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgKmZjcyA9IGNiYXJnOworCisJYmZhX3RyYyhmY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9MSU5LVVA6CisJCWJmYV9mY3NfZmFicmljX2xpbmtfdXAoJmZjcy0+ZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9MSU5LRE9XTjoKKwkJYmZhX2Zjc19mYWJyaWNfbGlua19kb3duKCZmY3MtPmZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfVFJVTktfTElOS0RPV046CisJCWJmYV9hc3NlcnQoMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9mY3NfcHBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX3Bwb3J0X2V2ZW50X3JlZ2lzdGVyKGZjcy0+YmZhLCBiZmFfZmNzX3Bwb3J0X2V2ZW50X2hhbmRsZXIsCisJCQkJICAgICBmY3MpOworfQorCit2b2lkCitiZmFfZmNzX3Bwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZjcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfdWYuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc191Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDFkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfdWYuYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3VmLmMgQkZBIEZDUyBVRiAoIFVuc29saWNpdGVkIEZyYW1lcykKKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfZmFicmljLmg+CisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfdWYuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgVUYpOworCisvKioKKyAqIAkJQkZBIGNhbGxiYWNrIGZvciB1bnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsZXIuCisgKgorICogQHBhcmFtW2luXQkJY2JhcmcJCWNhbGxiYWNrIGFyZyBmb3IgcmVjZWl2ZSBoYW5kbGVyCisgKiBAcGFyYW1baW5dCQl1ZgkJdW5zb2xpY2l0ZWQgZnJhbWUgZGVzY3JpcHRvcgorICoKKyAqIEByZXR1cm4gTm9uZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc191Zl9yZWN2KHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAqZmNzID0gKHN0cnVjdCBiZmFfZmNzX3MgKikgY2Jhcmc7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICpmY2hzID0gYmZhX3VmX2dldF9mcm1idWYodWYpOworCXUxNiAgICAgICAgbGVuID0gYmZhX3VmX2dldF9mcm1sZW4odWYpOworCXN0cnVjdCBmY192ZnRfcyAgICAgICAqdmZ0OworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWM7CisKKwkvKioKKwkgKiBjaGVjayBmb3IgVkZUIGhlYWRlcgorCSAqLworCWlmIChmY2hzLT5yb3V0aW5nID09IEZDX1JUR19FWFRfSERSICYmCisJCWZjaHMtPmNhdF9pbmZvID09IEZDX0NBVF9WRlRfSERSKSB7CisJCWJmYV9zdGF0cyhmY3MsIHVmLnRhZ2dlZCk7CisJCXZmdCA9IGJmYV91Zl9nZXRfZnJtYnVmKHVmKTsKKwkJaWYgKGZjcy0+cG9ydF92ZmlkID09IHZmdC0+dmZfaWQpCisJCQlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJCWVsc2UKKwkJCWZhYnJpYyA9IGJmYV9mY3NfdmZfbG9va3VwKGZjcywgKHUxNikgdmZ0LT52Zl9pZCk7CisKKwkJLyoqCisJCSAqIGRyb3AgZnJhbWUgaWYgdmZpZCBpcyB1bmtub3duCisJCSAqLworCQlpZiAoIWZhYnJpYykgeworCQkJYmZhX2Fzc2VydCgwKTsKKwkJCWJmYV9zdGF0cyhmY3MsIHVmLnZmaWRfdW5rbm93bik7CisJCQliZmFfdWZfZnJlZSh1Zik7CisJCQlyZXR1cm47CisJCX0KKworCQkvKioKKwkJICogc2tpcCB2ZnQgaGVhZGVyCisJCSAqLworCQlmY2hzID0gKHN0cnVjdCBmY2hzX3MgKikgKHZmdCArIDEpOworCQlsZW4gLT0gc2l6ZW9mKHN0cnVjdCBmY192ZnRfcyk7CisKKwkJYmZhX3RyYyhmY3MsIHZmdC0+dmZfaWQpOworCX0gZWxzZSB7CisJCWJmYV9zdGF0cyhmY3MsIHVmLnVudGFnZ2VkKTsKKwkJZmFicmljID0gJmZjcy0+ZmFicmljOworCX0KKworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVswXSk7CisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzFdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbMl0pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVszXSk7CisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzRdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbNV0pOworCWJmYV90cmMoZmNzLCBsZW4pOworCisJYmZhX2Zjc19mYWJyaWNfdWZfcmVjdihmYWJyaWMsIGZjaHMsIGxlbik7CisJYmZhX3VmX2ZyZWUodWYpOworfQorCit2b2lkCitiZmFfZmNzX3VmX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV91Zl9yZWN2X3JlZ2lzdGVyKGZjcy0+YmZhLCBiZmFfZmNzX3VmX3JlY3YsIGZjcyk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdWZfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjeHAuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjeHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzU0YTBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cC5jCkBAIC0wLDAgKzEsNzgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3VmLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIEZDWFApOworQkZBX01PRFVMRShmY3hwKTsKKworLyoqCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgX19iZmFfZmN4cF9zZW5kX2NiZm4odm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIGhhbF9mY3hwX3J4X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yc3BfcyAqZmN4cF9yc3ApOworc3RhdGljIHZvaWQgICAgIGhhbF9mY3hwX3R4X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHUzMiByZXFsZW4sCisJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCBzdHJ1Y3QgZmNoc19zICpmY2hzKTsKK3N0YXRpYyB2b2lkCWJmYV9mY3hwX3FyZXN1bWUodm9pZCAqY2JhcmcpOworc3RhdGljIHZvaWQJYmZhX2ZjeHBfcXVldWUoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkgICAgICAgc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MgKnNlbmRfcmVxKTsKKworLyoqCisgKiAgZmN4cF9wdnQgQkZBIEZDWFAgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorY2xhaW1fZmN4cF9yZXFfcnNwX21lbShzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pKQoreworCXU4ICAgICAgICAqZG1fa3ZhID0gTlVMTDsKKwl1NjQgICAgICAgIGRtX3BhOworCXUzMiAgICAgICAgYnVmX3Bvb2xfc3o7CisKKwlkbV9rdmEgPSBiZmFfbWVtaW5mb19kbWFfdmlydChtaSk7CisJZG1fcGEgPSBiZmFfbWVtaW5mb19kbWFfcGh5cyhtaSk7CisKKwlidWZfcG9vbF9zeiA9IG1vZC0+cmVxX3BsZF9zeiAqIG1vZC0+bnVtX2ZjeHBzOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBmY3hwIHJlcSBwYXlsb2FkIGxpc3QKKwkgKi8KKwltb2QtPnJlcV9wbGRfbGlzdF9rdmEgPSBkbV9rdmE7CisJbW9kLT5yZXFfcGxkX2xpc3RfcGEgPSBkbV9wYTsKKwlkbV9rdmEgKz0gYnVmX3Bvb2xfc3o7CisJZG1fcGEgKz0gYnVmX3Bvb2xfc3o7CisJYmZhX29zX21lbXNldChtb2QtPnJlcV9wbGRfbGlzdF9rdmEsIDAsIGJ1Zl9wb29sX3N6KTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgZmN4cCByc3AgcGF5bG9hZCBsaXN0CisJICovCisJYnVmX3Bvb2xfc3ogPSBtb2QtPnJzcF9wbGRfc3ogKiBtb2QtPm51bV9mY3hwczsKKwltb2QtPnJzcF9wbGRfbGlzdF9rdmEgPSBkbV9rdmE7CisJbW9kLT5yc3BfcGxkX2xpc3RfcGEgPSBkbV9wYTsKKwlkbV9rdmEgKz0gYnVmX3Bvb2xfc3o7CisJZG1fcGEgKz0gYnVmX3Bvb2xfc3o7CisJYmZhX29zX21lbXNldChtb2QtPnJzcF9wbGRfbGlzdF9rdmEsIDAsIGJ1Zl9wb29sX3N6KTsKKworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKSA9IGRtX2t2YTsKKwliZmFfbWVtaW5mb19kbWFfcGh5cyhtaSkgPSBkbV9wYTsKK30KKworc3RhdGljIHZvaWQKK2NsYWltX2ZjeHBzX21lbShzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pKQoreworCXUxNiAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWZjeHAgPSAoc3RydWN0IGJmYV9mY3hwX3MgKikgYmZhX21lbWluZm9fa3ZhKG1pKTsKKwliZmFfb3NfbWVtc2V0KGZjeHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2ZjeHBfcykgKiBtb2QtPm51bV9mY3hwcyk7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5mY3hwX2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+ZmN4cF9hY3RpdmVfcSk7CisKKwltb2QtPmZjeHBfbGlzdCA9IGZjeHA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fZmN4cHM7IGkrKykgeworCQlmY3hwLT5mY3hwX21vZCA9IG1vZDsKKwkJZmN4cC0+ZmN4cF90YWcgPSBpOworCisJCWxpc3RfYWRkX3RhaWwoJmZjeHAtPnFlLCAmbW9kLT5mY3hwX2ZyZWVfcSk7CisJCWJmYV9yZXFxX3dpbml0KCZmY3hwLT5yZXFxX3dxZSwgYmZhX2ZjeHBfcXJlc3VtZSwgZmN4cCk7CisJCWZjeHAtPnJlcXFfd2FpdGluZyA9IEJGQV9GQUxTRTsKKworCQlmY3hwID0gZmN4cCArIDE7CisJfQorCisJYmZhX21lbWluZm9fa3ZhKG1pKSA9ICh2b2lkICopZmN4cDsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sCisJCXUzMiAqZG1fbGVuKQoreworCXUxNiAgICAgICAgbnVtX2ZjeHBfcmVxcyA9IGNmZy0+ZndjZmcubnVtX2ZjeHBfcmVxczsKKworCWlmIChudW1fZmN4cF9yZXFzID09IDApCisJCXJldHVybjsKKworCS8qCisJICogQWNjb3VudCBmb3IgcmVxL3JzcCBwYXlsb2FkCisJICovCisJKmRtX2xlbiArPSBCRkFfRkNYUF9NQVhfSUJVRl9TWiAqIG51bV9mY3hwX3JlcXM7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCSpkbV9sZW4gKz0gQkZBX0ZDWFBfTUFYX0lCVUZfU1ogKiBudW1fZmN4cF9yZXFzOworCWVsc2UKKwkJKmRtX2xlbiArPSBCRkFfRkNYUF9NQVhfTEJVRl9TWiAqIG51bV9mY3hwX3JlcXM7CisKKwkvKgorCSAqIEFjY291bnQgZm9yIGZjeHAgc3RydWN0cworCSAqLworCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZhX2ZjeHBfcykgKiBudW1fZmN4cF9yZXFzOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gQkZBX0ZDWFBfTU9EKGJmYSk7CisKKwliZmFfb3NfbWVtc2V0KG1vZCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmN4cF9tb2RfcykpOworCW1vZC0+YmZhID0gYmZhOworCW1vZC0+bnVtX2ZjeHBzID0gY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBGQ1hQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHBheWxvYWQgc2l6ZXMuCisJICovCisJbW9kLT5yZXFfcGxkX3N6ID0gbW9kLT5yc3BfcGxkX3N6ID0gQkZBX0ZDWFBfTUFYX0lCVUZfU1o7CisJaWYgKCFjZmctPmRydmNmZy5taW5fY2ZnKQorCQltb2QtPnJzcF9wbGRfc3ogPSBCRkFfRkNYUF9NQVhfTEJVRl9TWjsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPndhaXRfcSk7CisKKwljbGFpbV9mY3hwX3JlcV9yc3BfbWVtKG1vZCwgbWVtaW5mbyk7CisJY2xhaW1fZmN4cHNfbWVtKG1vZCwgbWVtaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJm1vZC0+ZmN4cF9hY3RpdmVfcSkgeworCQlmY3hwID0gKHN0cnVjdCBiZmFfZmN4cF9zICopIHFlOworCQlpZiAoZmN4cC0+Y2FsbGVyID09IE5VTEwpIHsKKwkJCWZjeHAtPnNlbmRfY2JmbihmY3hwLT5jYWxsZXIsIGZjeHAsIGZjeHAtPnNlbmRfY2JhcmcsCisJCQkJCUJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUsIDAsIDAsIE5VTEwpOworCQkJYmZhX2ZjeHBfZnJlZShmY3hwKTsKKwkJfSBlbHNlIHsKKwkJCWZjeHAtPnJzcF9zdGF0dXMgPSBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCQkJYmZhX2NiX3F1ZXVlKGJmYSwgJmZjeHAtPmhjYl9xZSwKKwkJCQkgICAgICBfX2JmYV9mY3hwX3NlbmRfY2JmbiwgZmN4cCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX2ZjeHBfcyAqCitiZmFfZmN4cF9nZXQoc3RydWN0IGJmYV9mY3hwX21vZF9zICpmbSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV9xX2RlcSgmZm0tPmZjeHBfZnJlZV9xLCAmZmN4cCk7CisKKwlpZiAoZmN4cCkKKwkJbGlzdF9hZGRfdGFpbCgmZmN4cC0+cWUsICZmbS0+ZmN4cF9hY3RpdmVfcSk7CisKKwlyZXR1cm4gKGZjeHApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfcHV0KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisJc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWU7CisKKwliZmFfcV9kZXEoJm1vZC0+d2FpdF9xLCAmd3FlKTsKKwlpZiAod3FlKSB7CisJCWJmYV90cmMobW9kLT5iZmEsIGZjeHAtPmZjeHBfdGFnKTsKKwkJd3FlLT5hbGxvY19jYmZuKHdxZS0+YWxsb2NfY2JhcmcsIGZjeHApOworCQlyZXR1cm47CisJfQorCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPmZjeHBfYWN0aXZlX3EsIGZjeHApKTsKKwlsaXN0X2RlbCgmZmN4cC0+cWUpOworCWxpc3RfYWRkX3RhaWwoJmZjeHAtPnFlLCAmbW9kLT5mY3hwX2ZyZWVfcSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9udWxsX2NvbXAodm9pZCAqYmZhZF9mY3hwLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCSAgICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCSAgICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwkvKipkaXNjYXJkZWQgZmN4cCBjb21wbGV0aW9uICovCit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9mY3hwX3NlbmRfY2Jmbih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKSB7CisJCWZjeHAtPnNlbmRfY2JmbihmY3hwLT5jYWxsZXIsIGZjeHAsIGZjeHAtPnNlbmRfY2JhcmcsCisJCQkJZmN4cC0+cnNwX3N0YXR1cywgZmN4cC0+cnNwX2xlbiwKKwkJCQlmY3hwLT5yZXNpZHVlX2xlbiwgJmZjeHAtPnJzcF9mY2hzKTsKKwl9IGVsc2UgeworCQliZmFfZmN4cF9mcmVlKGZjeHApOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbF9mY3hwX3NlbmRfY29tcChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgKmZjeHBfcnNwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcwkqbW9kID0gQkZBX0ZDWFBfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9mY3hwX3MgCSpmY3hwOworCXUxNgkJZmN4cF90YWcgPSBiZmFfb3NfbnRvaHMoZmN4cF9yc3AtPmZjeHBfdGFnKTsKKworCWJmYV90cmMoYmZhLCBmY3hwX3RhZyk7CisKKwlmY3hwX3JzcC0+cnNwX2xlbiA9IGJmYV9vc19udG9obChmY3hwX3JzcC0+cnNwX2xlbik7CisKKwkvKioKKwkgKiBAdG9kbyBmL3cgc2hvdWxkIG5vdCBzZXQgcmVzaWR1ZSB0byBub24tMCB3aGVuIGV2ZXJ5dGhpbmcKKwkgKiAgICAgICBpcyByZWNlaXZlZC4KKwkgKi8KKwlpZiAoZmN4cF9yc3AtPnJlcV9zdGF0dXMgPT0gQkZBX1NUQVRVU19PSykKKwkJZmN4cF9yc3AtPnJlc2lkdWVfbGVuID0gMDsKKwllbHNlCisJCWZjeHBfcnNwLT5yZXNpZHVlX2xlbiA9IGJmYV9vc19udG9obChmY3hwX3JzcC0+cmVzaWR1ZV9sZW4pOworCisJZmN4cCA9IEJGQV9GQ1hQX0ZST01fVEFHKG1vZCwgZmN4cF90YWcpOworCisJYmZhX2Fzc2VydChmY3hwLT5zZW5kX2NiZm4gIT0gTlVMTCk7CisKKwloYWxfZmN4cF9yeF9wbG9nKG1vZC0+YmZhLCBmY3hwLCBmY3hwX3JzcCk7CisKKwlpZiAoZmN4cC0+c2VuZF9jYmZuICE9IE5VTEwpIHsKKwkJaWYgKGZjeHAtPmNhbGxlciA9PSBOVUxMKSB7CisJCQliZmFfdHJjKG1vZC0+YmZhLCBmY3hwLT5mY3hwX3RhZyk7CisKKwkJCWZjeHAtPnNlbmRfY2JmbihmY3hwLT5jYWxsZXIsIGZjeHAsIGZjeHAtPnNlbmRfY2JhcmcsCisJCQkJCWZjeHBfcnNwLT5yZXFfc3RhdHVzLCBmY3hwX3JzcC0+cnNwX2xlbiwKKwkJCQkJZmN4cF9yc3AtPnJlc2lkdWVfbGVuLCAmZmN4cF9yc3AtPmZjaHMpOworCQkJLyoKKwkJCSAqIGZjeHAgYXV0b21hdGljYWxseSBmcmVlZCBvbiByZXR1cm4gZnJvbSB0aGUgY2FsbGJhY2sKKwkJCSAqLworCQkJYmZhX2ZjeHBfZnJlZShmY3hwKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV90cmMobW9kLT5iZmEsIGZjeHAtPmZjeHBfdGFnKTsKKwkJCWZjeHAtPnJzcF9zdGF0dXMgPSBmY3hwX3JzcC0+cmVxX3N0YXR1czsKKwkJCWZjeHAtPnJzcF9sZW4gPSBmY3hwX3JzcC0+cnNwX2xlbjsKKwkJCWZjeHAtPnJlc2lkdWVfbGVuID0gZmN4cF9yc3AtPnJlc2lkdWVfbGVuOworCQkJZmN4cC0+cnNwX2ZjaHMgPSBmY3hwX3JzcC0+ZmNoczsKKworCQkJYmZhX2NiX3F1ZXVlKGJmYSwgJmZjeHAtPmhjYl9xZSwKKwkJCQkgICAgICBfX2JmYV9mY3hwX3NlbmRfY2JmbiwgZmN4cCk7CisJCX0KKwl9IGVsc2UgeworCQliZmFfdHJjKGJmYSwgZmN4cF90YWcpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHN0cnVjdCBiZmlfc2dlX3MgKnNnZSwgdTMyIHJlcWxlbiwgdTY0IHJlcV9wYSkKK3sKKwl1bmlvbiBiZmlfYWRkcl91ICAgICAgc2dhX3plcm8gPSB7IHswfSB9OworCisJc2dlLT5zZ19sZW4gPSByZXFsZW47CisJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQV9MQVNUOworCWJmYV9kbWFfYWRkcl9zZXQoc2dlWzBdLnNnYSwgcmVxX3BhKTsKKwliZmFfc2dlX3RvX2JlKHNnZSk7CisJc2dlKys7CisKKwlzZ2UtPnNnYSA9IHNnYV96ZXJvOworCXNnZS0+c2dfbGVuID0gcmVxbGVuOworCXNnZS0+ZmxhZ3MgPSBCRklfU0dFX1BHRExFTjsKKwliZmFfc2dlX3RvX2JlKHNnZSk7Cit9CisKK3N0YXRpYyB2b2lkCitoYWxfZmN4cF90eF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgcmVxbGVuLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJIHN0cnVjdCBmY2hzX3MgKmZjaHMpCit7CisJLyoKKwkgKiBUT0RPOiBUWCBveF9pZAorCSAqLworCWlmIChyZXFsZW4gPiAwKSB7CisJCWlmIChmY3hwLT51c2VfaXJlcWJ1ZikgeworCQkJdTMyICAgICAgICBwbGRfdzAgPQorCQkJCSooKHUzMiAqKSBCRkFfRkNYUF9SRVFfUExEKGZjeHApKTsKKworCQkJYmZhX3Bsb2dfZmNoZHJfYW5kX3BsKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwKKwkJCQlCRkFfUExfRUlEX1RYLAorCQkJCXJlcWxlbiArIHNpemVvZihzdHJ1Y3QgZmNoc19zKSwgZmNocywgcGxkX3cwKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwKKwkJCQlCRkFfUExfRUlEX1RYLCByZXFsZW4gKyBzaXplb2Yoc3RydWN0IGZjaHNfcyksCisJCQkJZmNocyk7CisJCX0KKwl9IGVsc2UgeworCQliZmFfcGxvZ19mY2hkcihiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMX0ZDWFAsIEJGQV9QTF9FSURfVFgsCisJCQkgICAgICAgcmVxbGVuICsgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpLCBmY2hzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYWxfZmN4cF9yeF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJIHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zICpmY3hwX3JzcCkKK3sKKwlpZiAoZmN4cF9yc3AtPnJzcF9sZW4gPiAwKSB7CisJCWlmIChmY3hwLT51c2VfaXJzcGJ1ZikgeworCQkJdTMyICAgICAgICBwbGRfdzAgPQorCQkJCSooKHUzMiAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApKTsKKworCQkJYmZhX3Bsb2dfZmNoZHJfYW5kX3BsKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwKKwkJCQkJICAgICAgQkZBX1BMX0VJRF9SWCwKKwkJCQkJICAgICAgKHUxNikgZmN4cF9yc3AtPnJzcF9sZW4sCisJCQkJCSAgICAgICZmY3hwX3JzcC0+ZmNocywgcGxkX3cwKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwKKwkJCQkgICAgICAgQkZBX1BMX0VJRF9SWCwKKwkJCQkgICAgICAgKHUxNikgZmN4cF9yc3AtPnJzcF9sZW4sCisJCQkJICAgICAgICZmY3hwX3JzcC0+ZmNocyk7CisJCX0KKwl9IGVsc2UgeworCQliZmFfcGxvZ19mY2hkcihiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMX0ZDWFAsIEJGQV9QTF9FSURfUlgsCisJCQkgICAgICAgKHUxNikgZmN4cF9yc3AtPnJzcF9sZW4sICZmY3hwX3JzcC0+ZmNocyk7CisJfQorfQorCisvKioKKyAqIEhhbmRsZXIgdG8gcmVzdW1lIHNlbmRpbmcgZmN4cCB3aGVuIHNwYWNlIGluIGF2YWlsYWJsZSBpbiBjcGUgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9xcmVzdW1lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfZmN4cF9zCQkqZmN4cCA9IGNiYXJnOworCXN0cnVjdCBiZmFfcwkJCSpiZmEgPSBmY3hwLT5mY3hwX21vZC0+YmZhOworCXN0cnVjdCBiZmlfZmN4cF9zZW5kX3JlcV9zCSpzZW5kX3JlcTsKKworCWZjeHAtPnJlcXFfd2FpdGluZyA9IEJGQV9GQUxTRTsKKwlzZW5kX3JlcSA9IGJmYV9yZXFxX25leHQoYmZhLCBCRkFfUkVRUV9GQ1hQKTsKKwliZmFfZmN4cF9xdWV1ZShmY3hwLCBzZW5kX3JlcSk7Cit9CisKKy8qKgorICogUXVldWUgZmN4cCBzZW5kIHJlcXVlc3QgdG8gZm9pbXJ3YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfcXVldWUoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JlcV9zICpzZW5kX3JlcSkKK3sKKwlzdHJ1Y3QgYmZhX3MgICAgICAJCSpiZmEgPSBmY3hwLT5mY3hwX21vZC0+YmZhOworCXN0cnVjdCBiZmFfZmN4cF9yZXFfaW5mb19zCSpyZXFpID0gJmZjeHAtPnJlcV9pbmZvOworCXN0cnVjdCBiZmFfZmN4cF9yc3BfaW5mb19zCSpyc3BpID0gJmZjeHAtPnJzcF9pbmZvOworCXN0cnVjdCBiZmFfcnBvcnRfcwkJKnJwb3J0ID0gcmVxaS0+YmZhX3Jwb3J0OworCisJYmZpX2gyaV9zZXQoc2VuZF9yZXEtPm1oLCBCRklfTUNfRkNYUCwgQkZJX0ZDWFBfSDJJX1NFTkRfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCisJc2VuZF9yZXEtPmZjeHBfdGFnID0gYmZhX29zX2h0b25zKGZjeHAtPmZjeHBfdGFnKTsKKwlpZiAocnBvcnQpIHsKKwkJc2VuZF9yZXEtPnJwb3J0X2Z3X2huZGwgPSBycG9ydC0+ZndfaGFuZGxlOworCQlzZW5kX3JlcS0+bWF4X2ZybXN6ID0gYmZhX29zX2h0b25zKHJwb3J0LT5ycG9ydF9pbmZvLm1heF9mcm1zeik7CisJCWlmIChzZW5kX3JlcS0+bWF4X2ZybXN6ID09IDApCisJCQlzZW5kX3JlcS0+bWF4X2ZybXN6ID0gYmZhX29zX2h0b25zKEZDX01BWF9QRFVTWik7CisJfSBlbHNlIHsKKwkJc2VuZF9yZXEtPnJwb3J0X2Z3X2huZGwgPSAwOworCQlzZW5kX3JlcS0+bWF4X2ZybXN6ID0gYmZhX29zX2h0b25zKEZDX01BWF9QRFVTWik7CisJfQorCisJc2VuZF9yZXEtPnZmX2lkID0gYmZhX29zX2h0b25zKHJlcWktPnZmX2lkKTsKKwlzZW5kX3JlcS0+bHBfdGFnID0gcmVxaS0+bHBfdGFnOworCXNlbmRfcmVxLT5jbGFzcyA9IHJlcWktPmNsYXNzOworCXNlbmRfcmVxLT5yc3BfdGltZW91dCA9IHJzcGktPnJzcF90aW1lb3V0OworCXNlbmRfcmVxLT5jdHMgPSByZXFpLT5jdHM7CisJc2VuZF9yZXEtPmZjaHMgPSByZXFpLT5mY2hzOworCisJc2VuZF9yZXEtPnJlcV9sZW4gPSBiZmFfb3NfaHRvbmwocmVxaS0+cmVxX3RvdF9sZW4pOworCXNlbmRfcmVxLT5yc3BfbWF4bGVuID0gYmZhX29zX2h0b25sKHJzcGktPnJzcF9tYXhsZW4pOworCisJLyoKKwkgKiBzZXR1cCByZXEgc2dsZXMKKwkgKi8KKwlpZiAoZmN4cC0+dXNlX2lyZXFidWYgPT0gMSkgeworCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cmVxX3NnZSwgcmVxaS0+cmVxX3RvdF9sZW4sCisJCQkJCUJGQV9GQ1hQX1JFUV9QTERfUEEoZmN4cCkpOworCX0gZWxzZSB7CisJCWlmIChmY3hwLT5ucmVxX3NnbGVzID4gMCkgeworCQkJYmZhX2Fzc2VydChmY3hwLT5ucmVxX3NnbGVzID09IDEpOworCQkJaGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc2VuZF9yZXEtPnJlcV9zZ2UsCisJCQkJCQlyZXFpLT5yZXFfdG90X2xlbiwKKwkJCQkJCWZjeHAtPnJlcV9zZ2FfY2JmbihmY3hwLT5jYWxsZXIsCisJCQkJCQkJCSAgIDApKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9hc3NlcnQocmVxaS0+cmVxX3RvdF9sZW4gPT0gMCk7CisJCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cnNwX3NnZSwgMCwgMCk7CisJCX0KKwl9CisKKwkvKgorCSAqIHNldHVwIHJzcCBzZ2xlcworCSAqLworCWlmIChmY3hwLT51c2VfaXJzcGJ1ZiA9PSAxKSB7CisJCWJmYV9hc3NlcnQocnNwaS0+cnNwX21heGxlbiA8PSBCRkFfRkNYUF9NQVhfTEJVRl9TWik7CisKKwkJaGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc2VuZF9yZXEtPnJzcF9zZ2UsIHJzcGktPnJzcF9tYXhsZW4sCisJCQkJCUJGQV9GQ1hQX1JTUF9QTERfUEEoZmN4cCkpOworCisJfSBlbHNlIHsKKwkJaWYgKGZjeHAtPm5yc3Bfc2dsZXMgPiAwKSB7CisJCQliZmFfYXNzZXJ0KGZjeHAtPm5yc3Bfc2dsZXMgPT0gMSk7CisJCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cnNwX3NnZSwKKwkJCQkJCXJzcGktPnJzcF9tYXhsZW4sCisJCQkJCQlmY3hwLT5yc3Bfc2dhX2NiZm4oZmN4cC0+Y2FsbGVyLAorCQkJCQkJCQkgICAwKSk7CisJCX0gZWxzZSB7CisJCQliZmFfYXNzZXJ0KHJzcGktPnJzcF9tYXhsZW4gPT0gMCk7CisJCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cnNwX3NnZSwgMCwgMCk7CisJCX0KKwl9CisKKwloYWxfZmN4cF90eF9wbG9nKGJmYSwgcmVxaS0+cmVxX3RvdF9sZW4sIGZjeHAsICZyZXFpLT5mY2hzKTsKKworCWJmYV9yZXFxX3Byb2R1Y2UoYmZhLCBCRkFfUkVRUV9GQ1hQKTsKKworCWJmYV90cmMoYmZhLCBiZmFfcmVxcV9waShiZmEsIEJGQV9SRVFRX0ZDWFApKTsKKwliZmFfdHJjKGJmYSwgYmZhX3JlcXFfY2koYmZhLCBCRkFfUkVRUV9GQ1hQKSk7Cit9CisKKworLyoqCisgKiAgaGFsX2ZjeHBfYXBpIEJGQSBGQ1hQIEFQSQorICovCisKKy8qKgorICogQWxsb2NhdGUgYW4gRkNYUCBpbnN0YW5jZSB0byBzZW5kIGEgcmVzcG9uc2Ugb3IgdG8gc2VuZCBhIHJlcXVlc3QKKyAqIHRoYXQgaGFzIGEgcmVzcG9uc2UuIFJlcXVlc3QvcmVzcG9uc2UgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGJ5IGNhbGxlci4KKyAqCisgKiBAcGFyYW1baW5dCWJmYQkJQkZBIGJmYSBpbnN0YW5jZQorICogQHBhcmFtW2luXQlucmVxX3NnbGVzCU51bWJlciBvZiBTRyBlbGVtZW50cyByZXF1aXJlZCBmb3IgcmVxdWVzdAorICogCQkJCWJ1ZmZlci4gMCwgaWYgZmN4cCBpbnRlcm5hbCBidWZmZXJzIGFyZQl1c2VkLgorICogCQkJCVVzZSBiZmFfZmN4cF9nZXRfcmVxYnVmKCkgdG8gZ2V0IHRoZQorICogCQkJCWludGVybmFsIHJlcSBidWZmZXIuCisgKiBAcGFyYW1baW5dCXJlcV9zZ2xlcwlTRyBlbGVtZW50cyBkZXNjcmliaW5nIHJlcXVlc3QgYnVmZmVyLiBXaWxsIGJlCisgKiAJCQkJY29waWVkIGluIGJ5IEJGQSBhbmQgaGVuY2UgY2FuIGJlIGZyZWVkIG9uCisgKiAJCQkJcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbi4KKyAqIEBwYXJhbVtpbl0JZ2V0X3JlcV9zZ2EJZnVuY3Rpb24gcHRyIHRvIGJlIGNhbGxlZCB0byBnZXQgYSByZXF1ZXN0IFNHCisgKiAJCQkJQWRkcmVzcyAoZ2l2ZW4gdGhlIHNnZSBpbmRleCkuCisgKiBAcGFyYW1baW5dCWdldF9yZXFfc2dsZW4JZnVuY3Rpb24gcHRyIHRvIGJlIGNhbGxlZCB0byBnZXQgYSByZXF1ZXN0IFNHCisgKiAJCQkJbGVuIChnaXZlbiB0aGUgc2dlIGluZGV4KS4KKyAqIEBwYXJhbVtpbl0JZ2V0X3JzcF9zZ2EJZnVuY3Rpb24gcHRyIHRvIGJlIGNhbGxlZCB0byBnZXQgYSByZXNwb25zZSBTRworICogCQkJCUFkZHJlc3MgKGdpdmVuIHRoZSBzZ2UgaW5kZXgpLgorICogQHBhcmFtW2luXQlnZXRfcnNwX3NnbGVuCWZ1bmN0aW9uIHB0ciB0byBiZSBjYWxsZWQgdG8gZ2V0IGEgcmVzcG9uc2UgU0cKKyAqIAkJCQlsZW4gKGdpdmVuIHRoZSBzZ2UgaW5kZXgpLgorICoKKyAqIEByZXR1cm4gRkNYUCBpbnN0YW5jZS4gTlVMTCBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgYmZhX2ZjeHBfcyAqCitiZmFfZmN4cF9hbGxvYyh2b2lkICpjYWxsZXIsIHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnJlcV9zZ2xlcywKKwkJCWludCBucnNwX3NnbGVzLCBiZmFfZmN4cF9nZXRfc2dhZGRyX3QgcmVxX3NnYV9jYmZuLAorCQkJYmZhX2ZjeHBfZ2V0X3NnbGVuX3QgcmVxX3NnbGVuX2NiZm4sCisJCQliZmFfZmN4cF9nZXRfc2dhZGRyX3QgcnNwX3NnYV9jYmZuLAorCQkJYmZhX2ZjeHBfZ2V0X3NnbGVuX3QgcnNwX3NnbGVuX2NiZm4pCit7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAgPSBOVUxMOworCXUzMiAgICAgICAgbnJlcV9zZ3BnLCBucnNwX3NncGc7CisKKwliZmFfYXNzZXJ0KGJmYSAhPSBOVUxMKTsKKworCWZjeHAgPSBiZmFfZmN4cF9nZXQoQkZBX0ZDWFBfTU9EKGJmYSkpOworCWlmIChmY3hwID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwliZmFfdHJjKGJmYSwgZmN4cC0+ZmN4cF90YWcpOworCisJZmN4cC0+Y2FsbGVyID0gY2FsbGVyOworCisJaWYgKG5yZXFfc2dsZXMgPT0gMCkgeworCQlmY3hwLT51c2VfaXJlcWJ1ZiA9IDE7CisJfSBlbHNlIHsKKwkJYmZhX2Fzc2VydChyZXFfc2dhX2NiZm4gIT0gTlVMTCk7CisJCWJmYV9hc3NlcnQocmVxX3NnbGVuX2NiZm4gIT0gTlVMTCk7CisKKwkJZmN4cC0+dXNlX2lyZXFidWYgPSAwOworCQlmY3hwLT5yZXFfc2dhX2NiZm4gPSByZXFfc2dhX2NiZm47CisJCWZjeHAtPnJlcV9zZ2xlbl9jYmZuID0gcmVxX3NnbGVuX2NiZm47CisKKwkJZmN4cC0+bnJlcV9zZ2xlcyA9IG5yZXFfc2dsZXM7CisKKwkJLyoKKwkJICogYWxsb2MgcmVxdWlyZWQgc2dwZ3MKKwkJICovCisJCWlmIChucmVxX3NnbGVzID4gQkZJX1NHRV9JTkxJTkUpIHsKKwkJCW5yZXFfc2dwZyA9IEJGQV9TR1BHX05QQUdFKG5yZXFfc2dsZXMpOworCisJCQlpZiAoYmZhX3NncGdfbWFsbG9jCisJCQkgICAgKGJmYSwgJmZjeHAtPnJlcV9zZ3BnX3EsIG5yZXFfc2dwZykKKwkJCSAgICAhPSBCRkFfU1RBVFVTX09LKSB7CisJCQkJLyogYmZhX3NncGdfd2FpdChiZmEsICZmY3hwLT5yZXFfc2dwZ193cWUsCisJCQkJbnJlcV9zZ3BnKTsgKi8KKwkJCQkvKgorCQkJCSAqIFRPRE8KKwkJCQkgKi8KKwkJCX0KKwkJfQorCX0KKworCWlmIChucnNwX3NnbGVzID09IDApIHsKKwkJZmN4cC0+dXNlX2lyc3BidWYgPSAxOworCX0gZWxzZSB7CisJCWJmYV9hc3NlcnQocnNwX3NnYV9jYmZuICE9IE5VTEwpOworCQliZmFfYXNzZXJ0KHJzcF9zZ2xlbl9jYmZuICE9IE5VTEwpOworCisJCWZjeHAtPnVzZV9pcnNwYnVmID0gMDsKKwkJZmN4cC0+cnNwX3NnYV9jYmZuID0gcnNwX3NnYV9jYmZuOworCQlmY3hwLT5yc3Bfc2dsZW5fY2JmbiA9IHJzcF9zZ2xlbl9jYmZuOworCisJCWZjeHAtPm5yc3Bfc2dsZXMgPSBucnNwX3NnbGVzOworCQkvKgorCQkgKiBhbGxvYyByZXF1aXJlZCBzZ3BncworCQkgKi8KKwkJaWYgKG5yc3Bfc2dsZXMgPiBCRklfU0dFX0lOTElORSkgeworCQkJbnJzcF9zZ3BnID0gQkZBX1NHUEdfTlBBR0UobnJlcV9zZ2xlcyk7CisKKwkJCWlmIChiZmFfc2dwZ19tYWxsb2MKKwkJCSAgICAoYmZhLCAmZmN4cC0+cnNwX3NncGdfcSwgbnJzcF9zZ3BnKQorCQkJICAgICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJCQkvKiBiZmFfc2dwZ193YWl0KGJmYSwgJmZjeHAtPnJzcF9zZ3BnX3dxZSwKKwkJCQlucnNwX3NncGcpOyAqLworCQkJCS8qCisJCQkJICogVE9ETworCQkJCSAqLworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIChmY3hwKTsKK30KKworLyoqCisgKiBHZXQgdGhlIGludGVybmFsIHJlcXVlc3QgYnVmZmVyIHBvaW50ZXIKKyAqCisgKiBAcGFyYW1baW5dCWZjeHAJQkZBIGZjeHAgcG9pbnRlcgorICoKKyAqIEByZXR1cm4gCQlwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCByZXF1ZXN0IGJ1ZmZlcgorICovCit2b2lkICoKK2JmYV9mY3hwX2dldF9yZXFidWYoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKwl2b2lkCSpyZXFidWY7CisKKwliZmFfYXNzZXJ0KGZjeHAtPnVzZV9pcmVxYnVmID09IDEpOworCXJlcWJ1ZiA9ICgodTggKiltb2QtPnJlcV9wbGRfbGlzdF9rdmEpICsKKwkJCWZjeHAtPmZjeHBfdGFnICogbW9kLT5yZXFfcGxkX3N6OworCXJldHVybiByZXFidWY7Cit9CisKK3UzMgorYmZhX2ZjeHBfZ2V0X3JlcWJ1ZnN6KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisKKwlyZXR1cm4gbW9kLT5yZXFfcGxkX3N6OworfQorCisvKioKKyAqIEdldCB0aGUgaW50ZXJuYWwgcmVzcG9uc2UgYnVmZmVyIHBvaW50ZXIKKyAqCisgKiBAcGFyYW1baW5dCWZjeHAJQkZBIGZjeHAgcG9pbnRlcgorICoKKyAqIEByZXR1cm4JCXBvaW50ZXIgdG8gdGhlIGludGVybmFsIHJlcXVlc3QgYnVmZmVyCisgKi8KK3ZvaWQgKgorYmZhX2ZjeHBfZ2V0X3JzcGJ1ZihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IGZjeHAtPmZjeHBfbW9kOworCXZvaWQJKnJzcGJ1ZjsKKworCWJmYV9hc3NlcnQoZmN4cC0+dXNlX2lyc3BidWYgPT0gMSk7CisKKwlyc3BidWYgPSAoKHU4ICopbW9kLT5yc3BfcGxkX2xpc3Rfa3ZhKSArCisJCQlmY3hwLT5mY3hwX3RhZyAqIG1vZC0+cnNwX3BsZF9zejsKKwlyZXR1cm4gcnNwYnVmOworfQorCisvKioKKyAqIAkJRnJlZSB0aGUgQkZBIEZDWFAKKyAqCisgKiBAcGFyYW1baW5dCWZjeHAJCQlCRkEgZmN4cCBwb2ludGVyCisgKgorICogQHJldHVybiAJCXZvaWQKKyAqLwordm9pZAorYmZhX2ZjeHBfZnJlZShzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IGZjeHAtPmZjeHBfbW9kOworCisJYmZhX2Fzc2VydChmY3hwICE9IE5VTEwpOworCWJmYV90cmMobW9kLT5iZmEsIGZjeHAtPmZjeHBfdGFnKTsKKwliZmFfZmN4cF9wdXQoZmN4cCk7Cit9CisKKy8qKgorICogU2VuZCBhIEZDWFAgcmVxdWVzdAorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAlCRkEgZmN4cCBwb2ludGVyCisgKiBAcGFyYW1baW5dCXJwb3J0CUJGQSBycG9ydCBwb2ludGVyLiBDb3VsZCBiZSBsZWZ0IE5VTEwgZm9yIFdLQSBycG9ydHMKKyAqIEBwYXJhbVtpbl0JdmZfaWQJdmlydHVhbCBGYWJyaWMgSUQKKyAqIEBwYXJhbVtpbl0JbHBfdGFnICBscG9ydCB0YWcKKyAqIEBwYXJhbVtpbl0JY3RzCXVzZSBDb250aW5vdXMgc2VxdWVuY2UKKyAqIEBwYXJhbVtpbl0JY29zCWZjIENsYXNzIG9mIFNlcnZpY2UKKyAqIEBwYXJhbVtpbl0JcmVxbGVuCXJlcXVlc3QgbGVuZ3RoLCBkb2VzIG5vdCBpbmNsdWRlIEZDSFMgbGVuZ3RoCisgKiBAcGFyYW1baW5dCWZjaHMJZmMgSGVhZGVyIFBvaW50ZXIuIFRoZSBoZWFkZXIgY29udGVudCB3aWxsIGJlIGNvcGllZAorICoJCQlpbiBieSBCRkEuCisgKgorICogQHBhcmFtW2luXQljYmZuCWNhbGwgYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gcmVjZWl2aW5nCisgKiAJCQkJCQkJCXRoZSByZXNwb25zZQorICogQHBhcmFtW2luXQljYmFyZwlhcmcgZm9yIGNiZm4KKyAqIEBwYXJhbVtpbl0JcnNwX3RpbWVvdXQKKyAqCQkJcmVzcG9uc2UgdGltZW91dAorICoKKyAqIEByZXR1cm4JCWJmYV9zdGF0dXNfdAorICovCit2b2lkCitiZmFfZmN4cF9zZW5kKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCBzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LAorCQl1MTYgdmZfaWQsIHU4IGxwX3RhZywgYmZhX2Jvb2xlYW5fdCBjdHMsIGVudW0gZmNfY29zIGNvcywKKwkJdTMyIHJlcWxlbiwgc3RydWN0IGZjaHNfcyAqZmNocywgYmZhX2NiX2ZjeHBfc2VuZF90IGNiZm4sCisJCXZvaWQgKmNiYXJnLCB1MzIgcnNwX21heGxlbiwgdTggcnNwX3RpbWVvdXQpCit7CisJc3RydWN0IGJmYV9zCQkJKmJmYSAgPSBmY3hwLT5mY3hwX21vZC0+YmZhOworCXN0cnVjdCBiZmFfZmN4cF9yZXFfaW5mb19zCSpyZXFpID0gJmZjeHAtPnJlcV9pbmZvOworCXN0cnVjdCBiZmFfZmN4cF9yc3BfaW5mb19zCSpyc3BpID0gJmZjeHAtPnJzcF9pbmZvOworCXN0cnVjdCBiZmlfZmN4cF9zZW5kX3JlcV9zCSpzZW5kX3JlcTsKKworCWJmYV90cmMoYmZhLCBmY3hwLT5mY3hwX3RhZyk7CisKKwkvKioKKwkgKiBzZXR1cCByZXF1ZXN0L3Jlc3BvbnNlIGluZm8KKwkgKi8KKwlyZXFpLT5iZmFfcnBvcnQgPSBycG9ydDsKKwlyZXFpLT52Zl9pZCA9IHZmX2lkOworCXJlcWktPmxwX3RhZyA9IGxwX3RhZzsKKwlyZXFpLT5jbGFzcyA9IGNvczsKKwlyc3BpLT5yc3BfdGltZW91dCA9IHJzcF90aW1lb3V0OworCXJlcWktPmN0cyA9IGN0czsKKwlyZXFpLT5mY2hzID0gKmZjaHM7CisJcmVxaS0+cmVxX3RvdF9sZW4gPSByZXFsZW47CisJcnNwaS0+cnNwX21heGxlbiA9IHJzcF9tYXhsZW47CisJZmN4cC0+c2VuZF9jYmZuID0gY2JmbiA/IGNiZm4gOiBiZmFfZmN4cF9udWxsX2NvbXA7CisJZmN4cC0+c2VuZF9jYmFyZyA9IGNiYXJnOworCisJLyoqCisJICogSWYgbm8gcm9vbSBpbiBDUEUgcXVldWUsIHdhaXQgZm9yCisJICovCisJc2VuZF9yZXEgPSBiZmFfcmVxcV9uZXh0KGJmYSwgQkZBX1JFUVFfRkNYUCk7CisJaWYgKCFzZW5kX3JlcSkgeworCQliZmFfdHJjKGJmYSwgZmN4cC0+ZmN4cF90YWcpOworCQlmY3hwLT5yZXFxX3dhaXRpbmcgPSBCRkFfVFJVRTsKKwkJYmZhX3JlcXFfd2FpdChiZmEsIEJGQV9SRVFRX0ZDWFAsICZmY3hwLT5yZXFxX3dxZSk7CisJCXJldHVybjsKKwl9CisKKwliZmFfZmN4cF9xdWV1ZShmY3hwLCBzZW5kX3JlcSk7Cit9CisKKy8qKgorICogQWJvcnQgYSBCRkEgRkNYUAorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAlCRkEgZmN4cCBwb2ludGVyCisgKgorICogQHJldHVybiAJCXZvaWQKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmN4cF9hYm9ydChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwliZmFfYXNzZXJ0KDApOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK3ZvaWQKK2JmYV9mY3hwX2FsbG9jX3dhaXQoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmN4cF93cWVfcyAqd3FlLAorCQkJYmZhX2ZjeHBfYWxsb2NfY2Jmbl90IGFsbG9jX2NiZm4sIHZvaWQgKmFsbG9jX2NiYXJnKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gQkZBX0ZDWFBfTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJm1vZC0+ZmN4cF9mcmVlX3EpKTsKKworCXdxZS0+YWxsb2NfY2JmbiA9IGFsbG9jX2NiZm47CisJd3FlLT5hbGxvY19jYmFyZyA9IGFsbG9jX2NiYXJnOworCWxpc3RfYWRkX3RhaWwoJndxZS0+cWUsICZtb2QtPndhaXRfcSk7Cit9CisKK3ZvaWQKK2JmYV9mY3hwX3dhbGxvY19jYW5jZWwoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmN4cF93cWVfcyAqd3FlKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gQkZBX0ZDWFBfTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJm1vZC0+d2FpdF9xLCB3cWUpKTsKKwlsaXN0X2RlbCgmd3FlLT5xZSk7Cit9CisKK3ZvaWQKK2JmYV9mY3hwX2Rpc2NhcmQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJLyoqCisJICogSWYgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLCBjYW5jZWwgcmVxcSB3YWl0CisJICogYW5kIGZyZWUgZmN4cC4KKwkgKi8KKwlpZiAoZmN4cC0+cmVxcV93YWl0aW5nKSB7CisJCWZjeHAtPnJlcXFfd2FpdGluZyA9IEJGQV9GQUxTRTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmZmN4cC0+cmVxcV93cWUpOworCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQlyZXR1cm47CisJfQorCisJZmN4cC0+c2VuZF9jYmZuID0gYmZhX2ZjeHBfbnVsbF9jb21wOworfQorCisKKworLyoqCisgKiAgaGFsX2ZjeHBfcHVibGljIEJGQSBGQ1hQIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworCit2b2lkCitiZmFfZmN4cF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZykKK3sKKwlzd2l0Y2ggKG1zZy0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9GQ1hQX0kySF9TRU5EX1JTUDoKKwkJaGFsX2ZjeHBfc2VuZF9jb21wKGJmYSwgKHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zICopIG1zZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhiZmEsIG1zZy0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKwordTMyCitiZmFfZmN4cF9nZXRfbWF4cnNwKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gQkZBX0ZDWFBfTU9EKGJmYSk7CisKKwlyZXR1cm4gbW9kLT5yc3BfcGxkX3N6OworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjeHBfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkYTQ5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjeHBfcHJpdi5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNYUF9QUklWX0hfXworI2RlZmluZSBfX0JGQV9GQ1hQX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2ZjeHAuaD4KKworI2RlZmluZSBCRkFfRkNYUF9NSU4gICAgIAkoMSkKKyNkZWZpbmUgQkZBX0ZDWFBfTUFYX0lCVUZfU1oJKDIgKiAxMDI0ICsgMjU2KQorI2RlZmluZSBCRkFfRkNYUF9NQVhfTEJVRl9TWgkoNCAqIDEwMjQgKyAyNTYpCisKK3N0cnVjdCBiZmFfZmN4cF9tb2RfcyB7CisJc3RydWN0IGJmYV9zICAgICAgKmJmYTsJCS8qICBiYWNrcG9pbnRlciB0byBCRkEgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9saXN0OwkvKiAgYXJyYXkgb2YgRkNYUHMgKi8KKwl1MTYgICAgICAgIG51bV9mY3hwczsJLyogIG1heCBudW0gRkNYUCByZXF1ZXN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmN4cF9mcmVlX3E7CS8qICBmcmVlIEZDWFBzICovCisJc3RydWN0IGxpc3RfaGVhZCBmY3hwX2FjdGl2ZV9xOwkvKiAgYWN0aXZlIEZDWFBzICovCisJdm9pZAkqcmVxX3BsZF9saXN0X2t2YTsJLyogIGxpc3Qgb2YgRkNYUCByZXEgcGxkICovCisJdTY0IHJlcV9wbGRfbGlzdF9wYTsJLyogIGxpc3Qgb2YgRkNYUCByZXEgcGxkICovCisJdm9pZCAqcnNwX3BsZF9saXN0X2t2YTsJCS8qICBsaXN0IG9mIEZDWFAgcmVzcCBwbGQgKi8KKwl1NjQgcnNwX3BsZF9saXN0X3BhOwkvKiAgbGlzdCBvZiBGQ1hQIHJlc3AgcGxkICovCisJc3RydWN0IGxpc3RfaGVhZCAgd2FpdF9xOwkJLyogIHdhaXQgcXVldWUgZm9yIGZyZWUgZmN4cCAqLworCXUzMglyZXFfcGxkX3N6OworCXUzMglyc3BfcGxkX3N6OworfTsKKworI2RlZmluZSBCRkFfRkNYUF9NT0QoX19iZmEpCQkoJihfX2JmYSktPm1vZHVsZXMuZmN4cF9tb2QpCisjZGVmaW5lIEJGQV9GQ1hQX0ZST01fVEFHKF9fbW9kLCBfX3RhZykJKCYoX19tb2QpLT5mY3hwX2xpc3RbX190YWddKQorCit0eXBlZGVmIHZvaWQgICAgKCpmY3hwX3NlbmRfY2JfdCkgKHN0cnVjdCBiZmFfcyAqaW9jLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgICB2b2lkICpjYl9hcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSAgIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCSAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKworLyoqCisgKiBJbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGEgRkNYUCByZXF1ZXN0CisgKi8KK3N0cnVjdCBiZmFfZmN4cF9yZXFfaW5mb19zIHsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydDsJLyogIFBvaW50ZXIgdG8gdGhlIGJmYSBycG9ydCB0aGF0IHdhcworCQkJCQkgKnJldHVybmVkIGZyb20gYmZhX3Jwb3J0X2NyZWF0ZSgpLgorCQkJCQkgKlRoaXMgY291bGQgYmUgbGVmdCBOVUxMIGZvciBXS0Egb3IgZm9yCisJCQkJCSAqRkNYUCBpbnRlcmFjdGlvbnMgYmVmb3JlIHRoZSBycG9ydAorCQkJCQkgKm5leHVzIGlzIGVzdGFibGlzaGVkCisJCQkJCSAqLworCXN0cnVjdCBmY2hzX3MgICBmY2hzOwkvKiAgcmVxdWVzdCBGQyBoZWFkZXIgc3RydWN0dXJlICovCisJdTggY3RzOwkJLyogIGNvbnRpbm91cyBzZXF1ZW5jZSAqLworCXU4IGNsYXNzOwkJLyogIEZDIGNsYXNzIGZvciB0aGUgcmVxdWVzdC9yZXNwb25zZSAqLworCXUxNiBtYXhfZnJtc3o7CS8qICBtYXggc2VuZCBmcmFtZSBzaXplICovCisJdTE2IHZmX2lkOwkJLyogIHZzYW4gdGFnIGlmIGFwcGxpY2FibGUgKi8KKwl1OAlscF90YWc7CQkvKiAgbHBvcnQgdGFnICovCisJdTMyIHJlcV90b3RfbGVuOwkvKiAgcmVxdWVzdCBwYXlsb2FkIHRvdGFsIGxlbmd0aCAqLworfTsKKworc3RydWN0IGJmYV9mY3hwX3JzcF9pbmZvX3MgeworCXN0cnVjdCBmY2hzX3MgcnNwX2ZjaHM7CQkvKiAgUmVzcG9uc2UgZnJhbWUncyBGQyBoZWFkZXIgd2lsbAorCQkJCQkgKiBiZSAqc2VudCBiYWNrIGluIHRoaXMgZmllbGQgKi8KKwl1OCAgICAgICAgIHJzcF90aW1lb3V0OwkvKiAgdGltZW91dCBpbiBzZWNvbmRzLCAwLW5vIHJlc3BvbnNlCisJCQkJCSAqLworCXU4ICAgICAgICAgcnN2ZDJbM107CisJdTMyICAgICAgICByc3BfbWF4bGVuOwkvKiAgbWF4IHJlc3BvbnNlIGxlbmd0aCBleHBlY3RlZCAqLworfTsKKworc3RydWN0IGJmYV9mY3hwX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgCXFlOwkJLyogIGZjeHAgcXVldWUgZWxlbWVudCAqLworCWJmYV9zbV90ICAgICAgICBzbTsgICAgICAgICAgICAgLyogIHN0YXRlIG1hY2hpbmUgKi8KKwl2b2lkICAgICAgICAgICAJKmNhbGxlcjsJLyogIGRyaXZlciBvciBmY3MgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKmZjeHBfbW9kOworCQkJCQkvKiAgYmFjayBwb2ludGVyIHRvIGZjeHAgbW9kICovCisJdTE2ICAgICAgICBmY3hwX3RhZzsJLyogIGludGVybmFsIHRhZyAqLworCXN0cnVjdCBiZmFfZmN4cF9yZXFfaW5mb19zIHJlcV9pbmZvOworCQkJCQkvKiAgcmVxdWVzdCBpbmZvICovCisJc3RydWN0IGJmYV9mY3hwX3JzcF9pbmZvX3MgcnNwX2luZm87CisJCQkJCS8qICByZXNwb25zZSBpbmZvICovCisJdTggCXVzZV9pcmVxYnVmOwkvKiAgdXNlIGludGVybmFsIHJlcSBidWYgKi8KKwl1OCAgICAgICAgIHVzZV9pcnNwYnVmOwkvKiAgdXNlIGludGVybmFsIHJzcCBidWYgKi8KKwl1MzIgICAgICAgIG5yZXFfc2dsZXM7CS8qICBudW0gcmVxdWVzdCBTR0xFcyAqLworCXUzMiAgICAgICAgbnJzcF9zZ2xlczsJLyogIG51bSByZXNwb25zZSBTR0xFcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgcmVxX3NncGdfcTsJLyogIFNHIHBhZ2VzIGZvciByZXF1ZXN0IGJ1ZiAqLworCXN0cnVjdCBsaXN0X2hlYWQgcmVxX3NncGdfd3FlOwkvKiAgd2FpdCBxdWV1ZSBmb3IgcmVxIFNHIHBhZ2UgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJzcF9zZ3BnX3E7CS8qICBTRyBwYWdlcyBmb3IgcmVzcG9uc2UgYnVmICovCisJc3RydWN0IGxpc3RfaGVhZCByc3Bfc2dwZ193cWU7CS8qICB3YWl0IHF1ZXVlIGZvciByc3AgU0cgcGFnZSAqLworCisJYmZhX2ZjeHBfZ2V0X3NnYWRkcl90IHJlcV9zZ2FfY2JmbjsKKwkJCQkJLyogIFNHIGVsZW0gYWRkciB1c2VyIGZ1bmN0aW9uICovCisJYmZhX2ZjeHBfZ2V0X3NnbGVuX3QgcmVxX3NnbGVuX2NiZm47CisJCQkJCS8qICBTRyBlbGVtIGxlbiB1c2VyIGZ1bmN0aW9uICovCisJYmZhX2ZjeHBfZ2V0X3NnYWRkcl90IHJzcF9zZ2FfY2JmbjsKKwkJCQkJLyogIFNHIGVsZW0gYWRkciB1c2VyIGZ1bmN0aW9uICovCisJYmZhX2ZjeHBfZ2V0X3NnbGVuX3QgcnNwX3NnbGVuX2NiZm47CisJCQkJCS8qICBTRyBlbGVtIGxlbiB1c2VyIGZ1bmN0aW9uICovCisJYmZhX2NiX2ZjeHBfc2VuZF90IHNlbmRfY2JmbjsgICAvKiAgc2VuZCBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJdm9pZAkJKnNlbmRfY2Jhcmc7CS8qICBjYWxsYmFjayBhcmcgKi8KKwlzdHJ1Y3QgYmZhX3NnZV9zICAgcmVxX3NnZVtCRkFfRkNYUF9NQVhfU0dFU107CisJCQkJCS8qICByZXEgU0cgZWxlbXMgKi8KKwlzdHJ1Y3QgYmZhX3NnZV9zICAgcnNwX3NnZVtCRkFfRkNYUF9NQVhfU0dFU107CisJCQkJCS8qICByc3AgU0cgZWxlbXMgKi8KKwl1OCAgICAgICAgIHJzcF9zdGF0dXM7CS8qICBjb21wOiByc3Agc3RhdHVzICovCisJdTMyICAgICAgICByc3BfbGVuOwkvKiAgY29tcDogYWN0dWFsIHJlc3BvbnNlIGxlbiAqLworCXUzMiAgICAgICAgcmVzaWR1ZV9sZW47CS8qICBjb21wOiByZXNpZHVhbCByc3AgbGVuZ3RoICovCisJc3RydWN0IGZjaHNfcyAgICAgICAgICByc3BfZmNoczsJLyogIGNvbXA6IHJlc3BvbnNlIGZjaHMgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAgaGNiX3FlOwkvKiAgY29tcDogY2FsbGJhY2sgcWVsZW0gKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXJlcXFfd3FlOworCWJmYV9ib29sZWFuX3QJcmVxcV93YWl0aW5nOworfTsKKworI2RlZmluZSBCRkFfRkNYUF9SRVFfUExEKF9mY3hwKSAJKGJmYV9mY3hwX2dldF9yZXFidWYoX2ZjeHApKQorCisjZGVmaW5lIEJGQV9GQ1hQX1JTUF9GQ0hTKF9mY3hwKSAJKCYoKF9mY3hwKS0+cnNwX2luZm8uZmNocykpCisjZGVmaW5lIEJGQV9GQ1hQX1JTUF9QTEQoX2ZjeHApIAkoYmZhX2ZjeHBfZ2V0X3JzcGJ1ZihfZmN4cCkpCisKKyNkZWZpbmUgQkZBX0ZDWFBfUkVRX1BMRF9QQShfZmN4cCkJCQkJCVwKKwkoKF9mY3hwKS0+ZmN4cF9tb2QtPnJlcV9wbGRfbGlzdF9wYSArCQkJCVwKKwkJKChfZmN4cCktPmZjeHBfbW9kLT5yZXFfcGxkX3N6ICAqIChfZmN4cCktPmZjeHBfdGFnKSkKKworI2RlZmluZSBCRkFfRkNYUF9SU1BfUExEX1BBKF9mY3hwKSAJCQkJCVwKKwkoKF9mY3hwKS0+ZmN4cF9tb2QtPnJzcF9wbGRfbGlzdF9wYSArCQkJCVwKKwkJKChfZmN4cCktPmZjeHBfbW9kLT5yc3BfcGxkX3N6ICogKF9mY3hwKS0+ZmN4cF90YWcpKQorCit2b2lkCWJmYV9mY3hwX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKKyNlbmRpZiAvKiBfX0JGQV9GQ1hQX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9md2ltZ19wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9md2ltZ19wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjMTM1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRldJTUdfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfRldJTUdfUFJJVl9IX18KKworI2RlZmluZQlCRklfRkxBU0hfQ0hVTktfU1oJCTI1NgkvKiAgRmxhc2ggY2h1bmsgc2l6ZSAqLworI2RlZmluZQlCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMJKEJGSV9GTEFTSF9DSFVOS19TWi9zaXplb2YodTMyKSkKKworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2N0X2dldF9jaHVuayh1MzIgb2ZmKTsKK2V4dGVybiB1MzIgYmZpX2ltYWdlX2N0X3NpemU7CitleHRlcm4gdTMyICpiZmlfaW1hZ2VfY2JfZ2V0X2NodW5rKHUzMiBvZmYpOworZXh0ZXJuIHUzMiBiZmlfaW1hZ2VfY2Jfc2l6ZTsKK2V4dGVybiB1MzIgKmJmaV9pbWFnZV9jYjsKK2V4dGVybiB1MzIgKmJmaV9pbWFnZV9jdDsKKworI2VuZGlmIC8qIF9fQkZBX0ZXSU1HX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGUxNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY2IuYwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhX3ByaXYuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2NicmVnLmg+CisKK3ZvaWQKK2JmYV9od2NiX3JlZ2luaXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9pb2NmY19yZWdzX3MJKmJmYV9yZWdzID0gJmJmYS0+aW9jZmMuYmZhX3JlZ3M7CisJYmZhX29zX2FkZHJfdAkJa3ZhID0gYmZhX2lvY19iYXIwKCZiZmEtPmlvYyk7CisJaW50ICAgICAgICAgICAgIAlpLCBxLCBmbiA9IGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKTsKKworCWlmIChmbiA9PSAwKSB7CisJCWJmYV9yZWdzLT5pbnRyX3N0YXR1cyA9IChrdmEgKyBIT1NURk4wX0lOVF9TVEFUVVMpOworCQliZmFfcmVncy0+aW50cl9tYXNrICAgPSAoa3ZhICsgSE9TVEZOMF9JTlRfTVNLKTsKKwl9IGVsc2UgeworCQliZmFfcmVncy0+aW50cl9zdGF0dXMgPSAoa3ZhICsgSE9TVEZOMV9JTlRfU1RBVFVTKTsKKwkJYmZhX3JlZ3MtPmludHJfbWFzayAgID0gKGt2YSArIEhPU1RGTjFfSU5UX01TSyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEJGSV9JT0NfTUFYX0NRUzsgaSsrKSB7CisJCS8qCisJCSAqIENQRSByZWdpc3RlcnMKKwkJICovCisJCXEgPSBDUEVfUV9OVU0oZm4sIGkpOworCQliZmFfcmVncy0+Y3BlX3FfcGlbaV0gPSAoa3ZhICsgQ1BFX1FfUEkocSkpOworCQliZmFfcmVncy0+Y3BlX3FfY2lbaV0gPSAoa3ZhICsgQ1BFX1FfQ0kocSkpOworCQliZmFfcmVncy0+Y3BlX3FfZGVwdGhbaV0gPSAoa3ZhICsgQ1BFX1FfREVQVEgocSkpOworCisJCS8qCisJCSAqIFJNRSByZWdpc3RlcnMKKwkJICovCisJCXEgPSBDUEVfUV9OVU0oZm4sIGkpOworCQliZmFfcmVncy0+cm1lX3FfcGlbaV0gPSAoa3ZhICsgUk1FX1FfUEkocSkpOworCQliZmFfcmVncy0+cm1lX3FfY2lbaV0gPSAoa3ZhICsgUk1FX1FfQ0kocSkpOworCQliZmFfcmVncy0+cm1lX3FfZGVwdGhbaV0gPSAoa3ZhICsgUk1FX1FfREVQVEgocSkpOworCX0KK30KKwordm9pZAorYmZhX2h3Y2JfcnNwcV9hY2soc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2h3Y2JfcnNwcV9hY2tfbXNpeChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpCit7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzLAorCQlfX0hGTl9JTlRfUk1FX1EwIDw8IFJNRV9RX05VTShiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYyksIHJzcHEpKTsKK30KKwordm9pZAorYmZhX2h3Y2JfbXNpeF9nZXR2ZWNzKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKm1zaXhfdmVjc19ibWFwLAorCQkgdTMyICpudW1fdmVjcywgdTMyICptYXhfdmVjX2JpdCkKK3sKKyNkZWZpbmUgX19IRk5fTlVNSU5UUwkxMworCWlmIChiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYykgPT0gMCkgeworCQkqbXNpeF92ZWNzX2JtYXAgPSAoX19IRk5fSU5UX0NQRV9RMCB8IF9fSEZOX0lOVF9DUEVfUTEgfAorCQkJCSAgIF9fSEZOX0lOVF9DUEVfUTIgfCBfX0hGTl9JTlRfQ1BFX1EzIHwKKwkJCQkgICBfX0hGTl9JTlRfUk1FX1EwIHwgX19IRk5fSU5UX1JNRV9RMSB8CisJCQkJICAgX19IRk5fSU5UX1JNRV9RMiB8IF9fSEZOX0lOVF9STUVfUTMgfAorCQkJCSAgIF9fSEZOX0lOVF9NQk9YX0xQVTApOworCQkqbWF4X3ZlY19iaXQgPSBfX0hGTl9JTlRfTUJPWF9MUFUwOworCX0gZWxzZSB7CisJCSptc2l4X3ZlY3NfYm1hcCA9IChfX0hGTl9JTlRfQ1BFX1E0IHwgX19IRk5fSU5UX0NQRV9RNSB8CisJCQkJICAgX19IRk5fSU5UX0NQRV9RNiB8IF9fSEZOX0lOVF9DUEVfUTcgfAorCQkJCSAgIF9fSEZOX0lOVF9STUVfUTQgfCBfX0hGTl9JTlRfUk1FX1E1IHwKKwkJCQkgICBfX0hGTl9JTlRfUk1FX1E2IHwgX19IRk5fSU5UX1JNRV9RNyB8CisJCQkJICAgX19IRk5fSU5UX01CT1hfTFBVMSk7CisJCSptYXhfdmVjX2JpdCA9IF9fSEZOX0lOVF9NQk9YX0xQVTE7CisJfQorCisJKm1zaXhfdmVjc19ibWFwIHw9IChfX0hGTl9JTlRfRVJSX0VNQyB8IF9fSEZOX0lOVF9FUlJfTFBVMCB8CisJCQkgICAgX19IRk5fSU5UX0VSUl9MUFUxIHwgX19IRk5fSU5UX0VSUl9QU1MpOworCSpudW1fdmVjcyA9IF9fSEZOX05VTUlOVFM7Cit9CisKKy8qKgorICogTm8gc3BlY2lhbCBzZXR1cCByZXF1aXJlZCBmb3IgY3Jvc3Nib3cgLS0gdmVjdG9yIGFzc2lnbm1lbnRzIGFyZSBpbXBsaWNpdC4KKyAqLwordm9pZAorYmZhX2h3Y2JfbXNpeF9pbml0KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpCit7CisJaW50IGk7CisKKwliZmFfYXNzZXJ0KChudmVjcyA9PSAxKSB8fCAobnZlY3MgPT0gX19IRk5fTlVNSU5UUykpOworCisJYmZhLT5tc2l4Lm52ZWNzID0gbnZlY3M7CisJaWYgKG52ZWNzID09IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IEJGQV9NU0lYX0NCX01BWDsgaSsrKQorCQkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9hbGw7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSBCRkFfTVNJWF9DUEVfUTA7IGkgPD0gQkZBX01TSVhfQ1BFX1E3OyBpKyspCisJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfcmVxcTsKKworCWZvciAoaSA9IEJGQV9NU0lYX1JNRV9RMDsgaSA8PSBCRkFfTVNJWF9STUVfUTc7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yc3BxOworCisJZm9yICg7IGkgPCBCRkFfTVNJWF9DQl9NQVg7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9scHVfZXJyOworfQorCisvKioKKyAqIENyb3NzYm93IC0tIGR1bW15LCBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQKKyAqLwordm9pZAorYmZhX2h3Y2JfbXNpeF9pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCit2b2lkCitiZmFfaHdjYl9tc2l4X3VuaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworLyoqCisgKiBObyBzcGVjaWFsIGVuYWJsZS9kaXNhYmxlIC0tIHZlY3RvciBhc3NpZ25tZW50cyBhcmUgaW1wbGljaXQuCisgKi8KK3ZvaWQKK2JmYV9od2NiX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KQoreworCWJmYS0+aW9jZmMuaHdpZi5od19yc3BxX2FjayA9IGJmYV9od2NiX3JzcHFfYWNrX21zaXg7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhZTU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2N0LmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYV9wcml2Lmg+CisjaW5jbHVkZSA8YmZpL2JmaV9jdHJlZy5oPgorI2luY2x1ZGUgPGJmYV9pb2MuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgSU9DRkNfQ1QpOworCitzdGF0aWMgdTMyIF9fY3RfbXNpeF9lcnJfdmVjX3JlZ1tdID0geworCUhPU1RfTVNJWF9FUlJfSU5ERVhfRk4wLAorCUhPU1RfTVNJWF9FUlJfSU5ERVhfRk4xLAorCUhPU1RfTVNJWF9FUlJfSU5ERVhfRk4yLAorCUhPU1RfTVNJWF9FUlJfSU5ERVhfRk4zLAorfTsKKworc3RhdGljIHZvaWQKK2JmYV9od2N0X21zaXhfbHB1X2Vycl9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCwgaW50IHZlYykKK3sKKwlpbnQgZm4gPSBiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYyk7CisJYmZhX29zX2FkZHJfdCBrdmEgPSBiZmFfaW9jX2JhcjAoJmJmYS0+aW9jKTsKKworCWlmIChtc2l4KQorCQliZmFfcmVnX3dyaXRlKGt2YSArIF9fY3RfbXNpeF9lcnJfdmVjX3JlZ1tmbl0sIHZlYyk7CisJZWxzZQorCQliZmFfcmVnX3dyaXRlKGt2YSArIF9fY3RfbXNpeF9lcnJfdmVjX3JlZ1tmbl0sIDApOworfQorCisvKioKKyAqIER1bW15IGludGVycnVwdCBoYW5kbGVyIGZvciBoYW5kbGluZyBzcHVyaW91cyBpbnRlcnJ1cHQgZHVyaW5nIGNoaXAtcmVpbml0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2h3Y3RfbXNpeF9kdW1teShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYykKK3sKK30KKwordm9pZAorYmZhX2h3Y3RfcmVnaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcwkqYmZhX3JlZ3MgPSAmYmZhLT5pb2NmYy5iZmFfcmVnczsKKwliZmFfb3NfYWRkcl90CQlrdmEgPSBiZmFfaW9jX2JhcjAoJmJmYS0+aW9jKTsKKwlpbnQgICAgICAgICAgICAgCWksIHEsIGZuID0gYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpOworCisJaWYgKGZuID09IDApIHsKKwkJYmZhX3JlZ3MtPmludHJfc3RhdHVzID0gKGt2YSArIEhPU1RGTjBfSU5UX1NUQVRVUyk7CisJCWJmYV9yZWdzLT5pbnRyX21hc2sgICA9IChrdmEgKyBIT1NURk4wX0lOVF9NU0spOworCX0gZWxzZSB7CisJCWJmYV9yZWdzLT5pbnRyX3N0YXR1cyA9IChrdmEgKyBIT1NURk4xX0lOVF9TVEFUVVMpOworCQliZmFfcmVncy0+aW50cl9tYXNrICAgPSAoa3ZhICsgSE9TVEZOMV9JTlRfTVNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZJX0lPQ19NQVhfQ1FTOyBpKyspIHsKKwkJLyoKKwkJICogQ1BFIHJlZ2lzdGVycworCQkgKi8KKwkJcSA9IENQRV9RX05VTShmbiwgaSk7CisJCWJmYV9yZWdzLT5jcGVfcV9waVtpXSA9IChrdmEgKyBDUEVfUElfUFRSX1EocSA8PCA1KSk7CisJCWJmYV9yZWdzLT5jcGVfcV9jaVtpXSA9IChrdmEgKyBDUEVfQ0lfUFRSX1EocSA8PCA1KSk7CisJCWJmYV9yZWdzLT5jcGVfcV9kZXB0aFtpXSA9IChrdmEgKyBDUEVfREVQVEhfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2N0cmxbaV0gPSAoa3ZhICsgQ1BFX1FDVFJMX1EocSA8PCA1KSk7CisKKwkJLyoKKwkJICogUk1FIHJlZ2lzdGVycworCQkgKi8KKwkJcSA9IENQRV9RX05VTShmbiwgaSk7CisJCWJmYV9yZWdzLT5ybWVfcV9waVtpXSA9IChrdmEgKyBSTUVfUElfUFRSX1EocSA8PCA1KSk7CisJCWJmYV9yZWdzLT5ybWVfcV9jaVtpXSA9IChrdmEgKyBSTUVfQ0lfUFRSX1EocSA8PCA1KSk7CisJCWJmYV9yZWdzLT5ybWVfcV9kZXB0aFtpXSA9IChrdmEgKyBSTUVfREVQVEhfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2N0cmxbaV0gPSAoa3ZhICsgUk1FX1FDVFJMX1EocSA8PCA1KSk7CisJfQorfQorCit2b2lkCitiZmFfaHdjdF9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpCit7CisJdTMyCXIzMjsKKworCXIzMiA9IGJmYV9yZWdfcmVhZChiZmEtPmlvY2ZjLmJmYV9yZWdzLnJtZV9xX2N0cmxbcnNwcV0pOworCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5ybWVfcV9jdHJsW3JzcHFdLCByMzIpOworfQorCit2b2lkCitiZmFfaHdjdF9tc2l4X2dldHZlY3Moc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqbXNpeF92ZWNzX2JtYXAsCisJCSB1MzIgKm51bV92ZWNzLCB1MzIgKm1heF92ZWNfYml0KQoreworCSptc2l4X3ZlY3NfYm1hcCA9ICgxIDw8IEJGQV9NU0lYX0NUX01BWCkgLSAxOworCSptYXhfdmVjX2JpdCA9ICgxIDw8IChCRkFfTVNJWF9DVF9NQVggLSAxKSk7CisJKm51bV92ZWNzID0gQkZBX01TSVhfQ1RfTUFYOworfQorCisvKioKKyAqIFNldHVwIE1TSS1YIHZlY3RvciBmb3IgY2F0YXB1bHQKKyAqLwordm9pZAorYmZhX2h3Y3RfbXNpeF9pbml0KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpCit7CisJYmZhX2Fzc2VydCgobnZlY3MgPT0gMSkgfHwgKG52ZWNzID09IEJGQV9NU0lYX0NUX01BWCkpOworCWJmYV90cmMoYmZhLCBudmVjcyk7CisKKwliZmEtPm1zaXgubnZlY3MgPSBudmVjczsKKwliZmFfaHdjdF9tc2l4X3VuaW5zdGFsbChiZmEpOworfQorCit2b2lkCitiZmFfaHdjdF9tc2l4X2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50IGk7CisKKwlpZiAoYmZhLT5tc2l4Lm52ZWNzID09IDApCisJCXJldHVybjsKKworCWlmIChiZmEtPm1zaXgubnZlY3MgPT0gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQkZBX01TSVhfQ1RfTUFYOyBpKyspCisJCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X2FsbDsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IEJGQV9NU0lYX0NQRV9RMDsgaSA8PSBCRkFfTVNJWF9DUEVfUTM7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yZXFxOworCisJZm9yICg7IGkgPD0gQkZBX01TSVhfUk1FX1EzOyBpKyspCisJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfcnNwcTsKKworCWJmYV9hc3NlcnQoaSA9PSBCRkFfTVNJWF9MUFVfRVJSKTsKKwliZmEtPm1zaXguaGFuZGxlcltCRkFfTVNJWF9MUFVfRVJSXSA9IGJmYV9tc2l4X2xwdV9lcnI7Cit9CisKK3ZvaWQKK2JmYV9od2N0X21zaXhfdW5pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEJGQV9NU0lYX0NUX01BWDsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9od2N0X21zaXhfZHVtbXk7Cit9CisKKy8qKgorICogRW5hYmxlIE1TSS1YIHZlY3RvcnMKKyAqLwordm9pZAorYmZhX2h3Y3RfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpCit7CisJYmZhX3RyYyhiZmEsIDApOworCWJmYV9od2N0X21zaXhfbHB1X2Vycl9zZXQoYmZhLCBtc2l4LCBCRkFfTVNJWF9MUFVfRVJSKTsKKwliZmFfaW9jX2lzcl9tb2RlX3NldCgmYmZhLT5pb2MsIG1zaXgpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ludHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ludHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2ExMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50ci5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9jYnJlZy5oPgorI2luY2x1ZGUgPGJmYV9wb3J0X3ByaXYuaD4KKyNpbmNsdWRlIDxiZmFfaW50cl9wcml2Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIElOVFIpOworCitzdGF0aWMgdm9pZAorYmZhX21zaXhfZXJyaW50KHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgaW50cikKK3sKKwliZmFfaW9jX2Vycm9yX2lzcigmYmZhLT5pb2MpOworfQorCitzdGF0aWMgdm9pZAorYmZhX21zaXhfbHB1KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NfbWJveF9pc3IoJmJmYS0+aW9jKTsKK30KKwordm9pZAorYmZhX21zaXhfYWxsKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKQoreworCWJmYV9pbnR4KGJmYSk7Cit9CisKKy8qKgorICogIGhhbF9pbnRyX2FwaQorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW50eChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwl1MzIgICAgICAgIGludHIsIHFpbnRyOworCWludCAgICAgICAgICAgICBxdWV1ZTsKKworCWludHIgPSBiZmFfcmVnX3JlYWQoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cyk7CisJaWYgKCFpbnRyKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJLyoqCisJICogUk1FIGNvbXBsZXRpb24gcXVldWUgaW50ZXJydXB0CisJICovCisJcWludHIgPSBpbnRyICYgX19IRk5fSU5UX1JNRV9NQVNLOworCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cywgcWludHIpOworCisJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlIDwgQkZJX0lPQ19NQVhfQ1FTX0FTSUM7IHF1ZXVlICsrKSB7CisJCWlmIChpbnRyICYgKF9fSEZOX0lOVF9STUVfUTAgPDwgcXVldWUpKQorCQkJYmZhX21zaXhfcnNwcShiZmEsIHF1ZXVlICYgKEJGSV9JT0NfTUFYX0NRUyAtIDEpKTsKKwl9CisJaW50ciAmPSB+cWludHI7CisJaWYgKCFpbnRyKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwkvKioKKwkgKiBDUEUgY29tcGxldGlvbiBxdWV1ZSBpbnRlcnJ1cHQKKwkgKi8KKwlxaW50ciA9IGludHIgJiBfX0hGTl9JTlRfQ1BFX01BU0s7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzLCBxaW50cik7CisKKwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBCRklfSU9DX01BWF9DUVNfQVNJQzsgcXVldWUrKykgeworCQlpZiAoaW50ciAmIChfX0hGTl9JTlRfQ1BFX1EwIDw8IHF1ZXVlKSkKKwkJCWJmYV9tc2l4X3JlcXEoYmZhLCBxdWV1ZSAmIChCRklfSU9DX01BWF9DUVMgLSAxKSk7CisJfQorCWludHIgJj0gfnFpbnRyOworCWlmICghaW50cikKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJYmZhX21zaXhfbHB1X2VycihiZmEsIGludHIpOworCisJcmV0dXJuIEJGQV9UUlVFOworfQorCit2b2lkCitiZmFfaXNyX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwl1MzIgICAgICAgIGludHJfdW5tYXNrOworCWludCAgICAgICAgICAgICBwY2lfZnVuYyA9IGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKTsKKworCWJmYV90cmMoYmZhLCBwY2lfZnVuYyk7CisKKwliZmFfbXNpeF9pbnN0YWxsKGJmYSk7CisJaW50cl91bm1hc2sgPSAoX19IRk5fSU5UX0VSUl9FTUMgfCBfX0hGTl9JTlRfRVJSX0xQVTAgfAorCQkgICAgICAgX19IRk5fSU5UX0VSUl9MUFUxIHwgX19IRk5fSU5UX0VSUl9QU1MpOworCisJaWYgKHBjaV9mdW5jID09IDApCisJCWludHJfdW5tYXNrIHw9IChfX0hGTl9JTlRfQ1BFX1EwIHwgX19IRk5fSU5UX0NQRV9RMSB8CisJCQkJX19IRk5fSU5UX0NQRV9RMiB8IF9fSEZOX0lOVF9DUEVfUTMgfAorCQkJCV9fSEZOX0lOVF9STUVfUTAgfCBfX0hGTl9JTlRfUk1FX1ExIHwKKwkJCQlfX0hGTl9JTlRfUk1FX1EyIHwgX19IRk5fSU5UX1JNRV9RMyB8CisJCQkJX19IRk5fSU5UX01CT1hfTFBVMCk7CisJZWxzZQorCQlpbnRyX3VubWFzayB8PSAoX19IRk5fSU5UX0NQRV9RNCB8IF9fSEZOX0lOVF9DUEVfUTUgfAorCQkJCV9fSEZOX0lOVF9DUEVfUTYgfCBfX0hGTl9JTlRfQ1BFX1E3IHwKKwkJCQlfX0hGTl9JTlRfUk1FX1E0IHwgX19IRk5fSU5UX1JNRV9RNSB8CisJCQkJX19IRk5fSU5UX1JNRV9RNiB8IF9fSEZOX0lOVF9STUVfUTcgfAorCQkJCV9fSEZOX0lOVF9NQk9YX0xQVTEpOworCisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzLCBpbnRyX3VubWFzayk7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfbWFzaywgfmludHJfdW5tYXNrKTsKKwliZmFfaXNyX21vZGVfc2V0KGJmYSwgYmZhLT5tc2l4Lm52ZWNzICE9IDApOworfQorCit2b2lkCitiZmFfaXNyX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lzcl9tb2RlX3NldChiZmEsIEJGQV9GQUxTRSk7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfbWFzaywgLTFMKTsKKwliZmFfbXNpeF91bmluc3RhbGwoYmZhKTsKK30KKwordm9pZAorYmZhX21zaXhfcmVxcShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHFpZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIAkJKndhaXRxLCAqcWUsICpxZW47CisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcwkqd3FlOworCisJcWlkICY9IChCRklfSU9DX01BWF9DUVMgLSAxKTsKKworCXdhaXRxID0gYmZhX3JlcXEoYmZhLCBxaWQpOworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCB3YWl0cSkgeworCQkvKioKKwkJICogQ2FsbGJhY2sgb25seSBhcyBsb25nIGFzIHRoZXJlIGlzIHJvb20gaW4gcmVxdWVzdCBxdWV1ZQorCQkgKi8KKwkJaWYgKGJmYV9yZXFxX2Z1bGwoYmZhLCBxaWQpKQorCQkJYnJlYWs7CisKKwkJbGlzdF9kZWwocWUpOworCQl3cWUgPSAoc3RydWN0IGJmYV9yZXFxX3dhaXRfcyAqKSBxZTsKKwkJd3FlLT5xcmVzdW1lKHdxZS0+Y2JhcmcpOworCX0KK30KKwordm9pZAorYmZhX2lzcl91bmhhbmRsZWQoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2NsYXNzKTsKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCWJmYV90cmMoYmZhLCBtLT5taGRyLm10YWcuaTJodG9rKTsKKwliZmFfYXNzZXJ0KDApOworCWJmYV90cmNfc3RvcChiZmEtPnRyY21vZCk7Cit9CisKK3ZvaWQKK2JmYV9tc2l4X3JzcHEoc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BfcWlkKQoreworCXN0cnVjdCBiZmlfbXNnX3MgICAgICAqbTsKKwl1MzIgICAgICAgIHBpLCBjaTsKKworCWJmYV90cmNfZnAoYmZhLCByc3BfcWlkKTsKKworCXJzcF9xaWQgJj0gKEJGSV9JT0NfTUFYX0NRUyAtIDEpOworCisJYmZhLT5pb2NmYy5od2lmLmh3X3JzcHFfYWNrKGJmYSwgcnNwX3FpZCk7CisKKwljaSA9IGJmYV9yc3BxX2NpKGJmYSwgcnNwX3FpZCk7CisJcGkgPSBiZmFfcnNwcV9waShiZmEsIHJzcF9xaWQpOworCisJYmZhX3RyY19mcChiZmEsIGNpKTsKKwliZmFfdHJjX2ZwKGJmYSwgcGkpOworCisJaWYgKGJmYS0+cm1lX3Byb2Nlc3MpIHsKKwkJd2hpbGUgKGNpICE9IHBpKSB7CisJCQltID0gYmZhX3JzcHFfZWxlbShiZmEsIHJzcF9xaWQsIGNpKTsKKwkJCWJmYV9hc3NlcnRfZnAobS0+bWhkci5tc2dfY2xhc3MgPCBCRklfTUNfTUFYKTsKKworCQkJYmZhX2lzcnNbbS0+bWhkci5tc2dfY2xhc3NdIChiZmEsIG0pOworCisJCQlDUV9JTkNSKGNpLCBiZmEtPmlvY2ZjLmNmZy5kcnZjZmcubnVtX3JzcHFfZWxlbXMpOworCQl9CisJfQorCisJLyoqCisJICogdXBkYXRlIENJCisJICovCisJYmZhX3JzcHFfY2koYmZhLCByc3BfcWlkKSA9IHBpOworCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5ybWVfcV9jaVtyc3BfcWlkXSwgcGkpOworCWJmYV9vc19tbWlvd2IoKTsKK30KKwordm9pZAorYmZhX21zaXhfbHB1X2VycihzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYykKK3sKKwl1MzIgaW50cjsKKworCWludHIgPSBiZmFfcmVnX3JlYWQoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cyk7CisKKwlpZiAoaW50ciAmIChfX0hGTl9JTlRfTUJPWF9MUFUwIHwgX19IRk5fSU5UX01CT1hfTFBVMSkpCisJCWJmYV9tc2l4X2xwdShiZmEpOworCisJaWYgKGludHIgJiAoX19IRk5fSU5UX0VSUl9FTUMgfAorCQkgICAgX19IRk5fSU5UX0VSUl9MUFUwIHwgX19IRk5fSU5UX0VSUl9MUFUxIHwKKwkJICAgIF9fSEZOX0lOVF9FUlJfUFNTKSkKKwkJYmZhX21zaXhfZXJyaW50KGJmYSwgaW50cik7Cit9CisKK3ZvaWQKK2JmYV9pc3JfYmluZChlbnVtIGJmaV9tY2xhc3MgbWMsIGJmYV9pc3JfZnVuY190IGlzcl9mdW5jKQoreworCWJmYV9pc3JzW21jXSA9IGlzcl9mdW5jOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ludHJfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50cl9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNlNmU2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ludHJfcHJpdi5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfSU5UUl9QUklWX0hfXworI2RlZmluZSBfX0JGQV9JTlRSX1BSSVZfSF9fCisKKy8qKgorICogTWVzc2FnZSBoYW5kbGVyCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9pc3JfZnVuY190KSAoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pOwordm9pZCBiZmFfaXNyX3VuaGFuZGxlZChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSk7Cit2b2lkIGJmYV9pc3JfYmluZChlbnVtIGJmaV9tY2xhc3MgbWMsIGJmYV9pc3JfZnVuY190IGlzcl9mdW5jKTsKKworCisjZGVmaW5lIGJmYV9yZXFxX3BpKF9fYmZhLCBfX3JlcXEpCShfX2JmYSktPmlvY2ZjLnJlcV9jcV9waVtfX3JlcXFdCisjZGVmaW5lIGJmYV9yZXFxX2NpKF9fYmZhLCBfX3JlcXEpCQkJCQlcCisJKih1MzIgKikoKF9fYmZhKS0+aW9jZmMucmVxX2NxX3NoYWRvd19jaVtfX3JlcXFdLmt2YSkKKworI2RlZmluZSBiZmFfcmVxcV9mdWxsKF9fYmZhLCBfX3JlcXEpCQkJCVwKKwkoKChiZmFfcmVxcV9waShfX2JmYSwgX19yZXFxKSArIDEpICYJCQlcCisJICAoKF9fYmZhKS0+aW9jZmMuY2ZnLmRydmNmZy5udW1fcmVxcV9lbGVtcyAtIDEpKSA9PQlcCisJIGJmYV9yZXFxX2NpKF9fYmZhLCBfX3JlcXEpKQorCisjZGVmaW5lIGJmYV9yZXFxX25leHQoX19iZmEsIF9fcmVxcSkJCQkJXAorCShiZmFfcmVxcV9mdWxsKF9fYmZhLCBfX3JlcXEpID8gTlVMTCA6CQkJXAorCSAoKHZvaWQgKikoKHN0cnVjdCBiZmlfbXNnX3MgKikoKF9fYmZhKS0+aW9jZmMucmVxX2NxX2JhW19fcmVxcV0ua3ZhKSBcCisJCQkgICsgYmZhX3JlcXFfcGkoKF9fYmZhKSwgKF9fcmVxcSkpKSkpCisKKyNkZWZpbmUgYmZhX3JlcXFfcHJvZHVjZShfX2JmYSwgX19yZXFxKQlkbyB7CQkJCVwKKwkoX19iZmEpLT5pb2NmYy5yZXFfY3FfcGlbX19yZXFxXSsrOwkJCQlcCisJKF9fYmZhKS0+aW9jZmMucmVxX2NxX3BpW19fcmVxcV0gJj0JCQkJXAorCQkoKF9fYmZhKS0+aW9jZmMuY2ZnLmRydmNmZy5udW1fcmVxcV9lbGVtcyAtIDEpOyAgICAgIFwKKwliZmFfcmVnX3dyaXRlKChfX2JmYSktPmlvY2ZjLmJmYV9yZWdzLmNwZV9xX3BpW19fcmVxcV0sCQlcCisJCQkJKF9fYmZhKS0+aW9jZmMucmVxX2NxX3BpW19fcmVxcV0pOyAgICAgIFwKKwliZmFfb3NfbW1pb3diKCk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfcnNwcV9waShfX2JmYSwgX19yc3BxKQkJCQkJXAorCSoodTMyICopKChfX2JmYSktPmlvY2ZjLnJzcF9jcV9zaGFkb3dfcGlbX19yc3BxXS5rdmEpCisKKyNkZWZpbmUgYmZhX3JzcHFfY2koX19iZmEsIF9fcnNwcSkJKF9fYmZhKS0+aW9jZmMucnNwX2NxX2NpW19fcnNwcV0KKyNkZWZpbmUgYmZhX3JzcHFfZWxlbShfX2JmYSwgX19yc3BxLCBfX2NpKQkJCQlcCisJJigoc3RydWN0IGJmaV9tc2dfcyAqKSgoX19iZmEpLT5pb2NmYy5yc3BfY3FfYmFbX19yc3BxXS5rdmEpKVtfX2NpXQorCisjZGVmaW5lIENRX0lOQ1IoX19pbmRleCwgX19zaXplKQkJCQkJXAorCQkJKF9faW5kZXgpKys7IChfX2luZGV4KSAmPSAoKF9fc2l6ZSkgLSAxKQorCisvKioKKyAqIFF1ZXVlIGVsZW1lbnQgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLiBGSUZPIG9yZGVyIGlzCisgKiBtYWludGFpbmVkIHdoZW4gZnVsbGZpbGxpbmcgcmVxdWVzdHMuCisgKi8KK3N0cnVjdCBiZmFfcmVxcV93YWl0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQgCXFlOworCXZvaWQJCSgqcXJlc3VtZSkgKHZvaWQgKmNiYXJnKTsKKwl2b2lkCQkqY2Jhcmc7Cit9OworCisvKioKKyAqIENpcmN1bGFyIHF1ZXVlIHVzYWdlIGFzc2lnbm1lbnRzCisgKi8KK2VudW0geworCUJGQV9SRVFRX0lPQwk9IDAsCS8qICBhbGwgbG93LXByaW9yaXR5IElPQyBtc2dzCSovCisJQkZBX1JFUVFfRkNYUAk9IDAsCS8qICBhbGwgRkNYUCBtZXNzYWdlcwkJKi8KKwlCRkFfUkVRUV9MUFMJPSAwLAkvKiAgYWxsIGxwb3J0IHNlcnZpY2UgbXNncwkqLworCUJGQV9SRVFRX1BPUlQJPSAwLAkvKiAgYWxsIHBvcnQgbWVzc2FnZXMJCSovCisJQkZBX1JFUVFfRkxBU0gJPSAwLAkvKiAgZm9yIGZsYXNoIG1vZHVsZQkJKi8KKwlCRkFfUkVRUV9ESUFHCT0gMCwJLyogIGZvciBkaWFnIG1vZHVsZQkJKi8KKwlCRkFfUkVRUV9SUE9SVAk9IDAsCS8qICBhbGwgcG9ydCBtZXNzYWdlcwkJKi8KKwlCRkFfUkVRUV9TQk9PVAk9IDAsCS8qICBhbGwgc2FuIGJvb3QgbWVzc2FnZXMJKi8KKwlCRkFfUkVRUV9RT1NfTE8JPSAxLAkvKiAgYWxsIGxvdyBwcmlvcml0eSBJTwkqLworCUJGQV9SRVFRX1FPU19NRAk9IDIsCS8qICBhbGwgbWVkaXVtIHByaW9yaXR5IElPCSovCisJQkZBX1JFUVFfUU9TX0hJCT0gMywJLyogIGFsbCBoaWdoIHByaW9yaXR5IElPCSovCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV9yZXFxX3dpbml0KHN0cnVjdCBiZmFfcmVxcV93YWl0X3MgKndxZSwgdm9pZCAoKnFyZXN1bWUpICh2b2lkICpjYmFyZyksCisJCQl2b2lkICpjYmFyZykKK3sKKwl3cWUtPnFyZXN1bWUgPSBxcmVzdW1lOworCXdxZS0+Y2JhcmcgPSBjYmFyZzsKK30KKworI2RlZmluZSBiZmFfcmVxcShfX2JmYSwgX19yZXFxKQkmKF9fYmZhKS0+cmVxcV93YWl0cVtfX3JlcXFdCisKKy8qKgorICogc3RhdGljIGlubGluZSB2b2lkCisgKiBiZmFfcmVxcV93YWl0KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcmVxcSwgc3RydWN0IGJmYV9yZXFxX3dhaXRfcyAqd3FlKQorICovCisjZGVmaW5lIGJmYV9yZXFxX3dhaXQoX19iZmEsIF9fcmVxcSwgX193cWUpIGRvIHsJCQlcCisJCQkJCQkJCQlcCisJCXN0cnVjdCBsaXN0X2hlYWQgKndhaXRxID0gYmZhX3JlcXEoX19iZmEsIF9fcmVxcSk7ICAgICAgXAorCQkJCQkJCQkJXAorCQliZmFfYXNzZXJ0KCgoX19yZXFxKSA8IEJGSV9JT0NfTUFYX0NRUykpOyAgICAgIFwKKwkJYmZhX2Fzc2VydCgoX193cWUpLT5xcmVzdW1lICYmIChfX3dxZSktPmNiYXJnKTsgICAgICBcCisJCQkJCQkJCQlcCisJCWxpc3RfYWRkX3RhaWwoJihfX3dxZSktPnFlLCB3YWl0cSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfcmVxcV93Y2FuY2VsKF9fd3FlKQlsaXN0X2RlbCgmKF9fd3FlKS0+cWUpCisKKyNlbmRpZiAvKiBfX0JGQV9JTlRSX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OTM0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYwpAQCAtMCwwICsxLDIzODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxiZmFfZndpbWdfcHJpdi5oPgorI2luY2x1ZGUgPGJmYV90cmNtb2RfcHJpdi5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfaW9jLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9jdHJlZy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2lvYy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuLmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wY2kuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgSU9DKTsKKworLyoqCisgKiBJT0MgbG9jYWwgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBCRkFfSU9DX1RPVgkJMjAwMAkvKiBtc2VjcyAqLworI2RlZmluZSBCRkFfSU9DX0hCX1RPVgkJMTAwMAkvKiBtc2VjcyAqLworI2RlZmluZSBCRkFfSU9DX0hCX0ZBSUxfTUFYCTQKKyNkZWZpbmUgQkZBX0lPQ19IV0lOSVRfTUFYCTIKKyNkZWZpbmUgQkZBX0lPQ19GV0lNR19NSU5TWiAgICAgKDE2ICogMTAyNCkKKyNkZWZpbmUgQkZBX0lPQ19UT1ZfUkVDT1ZFUgkoQkZBX0lPQ19IQl9GQUlMX01BWCAqIEJGQV9JT0NfSEJfVE9WIFwKKwkJCQkrIEJGQV9JT0NfVE9WKQorCisjZGVmaW5lIGJmYV9pb2NfdGltZXJfc3RhcnQoX19pb2MpCQkJCQlcCisJYmZhX3RpbWVyX2JlZ2luKChfX2lvYyktPnRpbWVyX21vZCwgJihfX2lvYyktPmlvY190aW1lciwJXAorCQkJYmZhX2lvY190aW1lb3V0LCAoX19pb2MpLCBCRkFfSU9DX1RPVikKKyNkZWZpbmUgYmZhX2lvY190aW1lcl9zdG9wKF9faW9jKSAgIGJmYV90aW1lcl9zdG9wKCYoX19pb2MpLT5pb2NfdGltZXIpCisKKyNkZWZpbmUgQkZBX0RCR19GV1RSQ19FTlRTCShCRklfSU9DX1RSQ19FTlRTKQorI2RlZmluZSBCRkFfREJHX0ZXVFJDX0xFTgkJCQkJXAorCShCRkFfREJHX0ZXVFJDX0VOVFMgKiBzaXplb2Yoc3RydWN0IGJmYV90cmNfcykgKwlcCisJIChzaXplb2Yoc3RydWN0IGJmYV90cmNfbW9kX3MpIC0JCQlcCisJICBCRkFfVFJDX01BWCAqIHNpemVvZihzdHJ1Y3QgYmZhX3RyY19zKSkpCisjZGVmaW5lIEJGQV9EQkdfRldUUkNfT0ZGKF9mbikJKEJGSV9JT0NfVFJDX09GRiArIEJGQV9EQkdfRldUUkNfTEVOICogKF9mbikpCisjZGVmaW5lIGJmYV9pb2Nfc3RhdHMoX2lvYywgX3N0YXRzKQkoX2lvYyktPnN0YXRzLl9zdGF0cyArKworCisjZGVmaW5lIEJGQV9GTEFTSF9DSFVOS19OTyhvZmYpICAgICAgICAgKG9mZiAvIEJGSV9GTEFTSF9DSFVOS19TWl9XT1JEUykKKyNkZWZpbmUgQkZBX0ZMQVNIX09GRlNFVF9JTl9DSFVOSyhvZmYpICAob2ZmICUgQkZJX0ZMQVNIX0NIVU5LX1NaX1dPUkRTKQorI2RlZmluZSBCRkFfRkxBU0hfQ0hVTktfQUREUihjaHVua25vKSAgIChjaHVua25vICogQkZJX0ZMQVNIX0NIVU5LX1NaX1dPUkRTKQorYmZhX2Jvb2xlYW5fdCAgIGJmYV9hdXRvX3JlY292ZXIgPSBCRkFfRkFMU0U7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19hZW5fcG9zdChzdHJ1Y3QgYmZhX2lvY19zICpiZmEsCisJCQkJIGVudW0gYmZhX2lvY19hZW5fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaHdfc2VtX2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaHdfc2VtX3JlbGVhc2Uoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX3RpbWVvdXQodm9pZCAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX3NlbmRfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19zZW5kX2Rpc2FibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX3NlbmRfZ2V0YXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaGJfbW9uaXRvcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaGJfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfcmVzZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX21ib3hfcG9sbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfbWJveF9oYmZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX3JlY292ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9pb2NfZmlybXdhcmVfbG9jayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfZmlybXdhcmVfdW5sb2NrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19kaXNhYmxlX2NvbXAoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2xwdV9zdG9wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CisKKy8qKgorICogIGJmYV9pb2Nfc20KKyAqLworCisvKioKKyAqIElPQyBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGlvY19ldmVudCB7CisJSU9DX0VfRU5BQkxFID0gMSwJLyogIElPQyBlbmFibGUgcmVxdWVzdCAqLworCUlPQ19FX0RJU0FCTEUgPSAyLAkvKiAgSU9DIGRpc2FibGUgcmVxdWVzdCAqLworCUlPQ19FX1RJTUVPVVQgPSAzLAkvKiAgZi93IHJlc3BvbnNlIHRpbWVvdXQgKi8KKwlJT0NfRV9GV1JFQURZID0gNCwJLyogIGYvdyBpbml0aWFsaXphdGlvbiBkb25lICovCisJSU9DX0VfRldSU1BfR0VUQVRUUiA9IDUsCS8qICBJT0MgZ2V0IGF0dHJpYnV0ZSByZXNwb25zZSAqLworCUlPQ19FX0ZXUlNQX0VOQUJMRSA9IDYsCS8qICBlbmFibGUgZi93IHJlc3BvbnNlICovCisJSU9DX0VfRldSU1BfRElTQUJMRSA9IDcsCS8qICBkaXNhYmxlIGYvdyByZXNwb25zZSAqLworCUlPQ19FX0hCRkFJTCA9IDgsCS8qICBoZWFydGJlYXQgZmFpbHVyZSAqLworCUlPQ19FX0hXRVJST1IgPSA5LAkvKiAgaGFyZHdhcmUgZXJyb3IgaW50ZXJydXB0ICovCisJSU9DX0VfU0VNTE9DS0VEID0gMTAsCS8qICBoL3cgc2VtYXBob3JlIGlzIGxvY2tlZCAqLworCUlPQ19FX0RFVEFDSCA9IDExLAkvKiAgZHJpdmVyIGRldGFjaCBjbGVhbnVwICovCit9OworCitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgcmVzZXQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBmd2NoZWNrLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgbWlzbWF0Y2gsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBzZW13YWl0LCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgaHdpbml0LCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZW5hYmxpbmcsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBnZXRhdHRyLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgb3AsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBpbml0ZmFpbCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGhiZmFpbCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGRpc2FibGluZywgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGRpc2FibGVkLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgaW9jX3NtX3RhYmxlW10gPSB7CisJe0JGQV9TTShiZmFfaW9jX3NtX3Jlc2V0KSwgQkZBX0lPQ19SRVNFVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2Z3Y2hlY2spLCBCRkFfSU9DX0ZXTUlTTUFUQ0h9LAorCXtCRkFfU00oYmZhX2lvY19zbV9taXNtYXRjaCksIEJGQV9JT0NfRldNSVNNQVRDSH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX3NlbXdhaXQpLCBCRkFfSU9DX1NFTVdBSVR9LAorCXtCRkFfU00oYmZhX2lvY19zbV9od2luaXQpLCBCRkFfSU9DX0hXSU5JVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2VuYWJsaW5nKSwgQkZBX0lPQ19IV0lOSVR9LAorCXtCRkFfU00oYmZhX2lvY19zbV9nZXRhdHRyKSwgQkZBX0lPQ19HRVRBVFRSfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fb3ApLCBCRkFfSU9DX09QRVJBVElPTkFMfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21faW5pdGZhaWwpLCBCRkFfSU9DX0lOSVRGQUlMfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21faGJmYWlsKSwgQkZBX0lPQ19IQkZBSUx9LAorCXtCRkFfU00oYmZhX2lvY19zbV9kaXNhYmxpbmcpLCBCRkFfSU9DX0RJU0FCTElOR30sCisJe0JGQV9TTShiZmFfaW9jX3NtX2Rpc2FibGVkKSwgQkZBX0lPQ19ESVNBQkxFRH0sCit9OworCisvKioKKyAqIFJlc2V0IGVudHJ5IGFjdGlvbnMgLS0gaW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX3Jlc2V0X2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpb2MtPnJldHJ5X2NvdW50ID0gMDsKKwlpb2MtPmF1dG9fcmVjb3ZlciA9IGJmYV9hdXRvX3JlY292ZXI7Cit9CisKKy8qKgorICogQmVnaW5uaW5nIHN0YXRlLiBJT0MgaXMgaW4gcmVzZXQgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX3Jlc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0VOQUJMRToKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Z3Y2hlY2spOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY19kaXNhYmxlX2NvbXAoaW9jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RFVEFDSDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIFNlbWFwaG9yZSBzaG91bGQgYmUgYWNxdWlyZWQgZm9yIHZlcnNpb24gY2hlY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2Z3Y2hlY2tfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfaHdfc2VtX2dldChpb2MpOworfQorCisvKioKKyAqIEF3YWl0aW5nIGgvdyBzZW1hcGhvcmUgdG8gY29udGludWUgd2l0aCB2ZXJzaW9uIGNoZWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9md2NoZWNrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX1NFTUxPQ0tFRDoKKwkJaWYgKGJmYV9pb2NfZmlybXdhcmVfbG9jayhpb2MpKSB7CisJCQlpb2MtPnJldHJ5X2NvdW50ID0gMDsKKwkJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9od2luaXQpOworCQl9IGVsc2UgeworCQkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX21pc21hdGNoKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY19kaXNhYmxlX2NvbXAoaW9jKTsKKwkJLyoKKwkJICogZmFsbCB0aHJvdWdoCisJCSAqLworCisJY2FzZSBJT0NfRV9ERVRBQ0g6CisJCWJmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBOb3RpZnkgZW5hYmxlIGNvbXBsZXRpb24gY2FsbGJhY2sgYW5kIGdlbmVyYXRlIG1pc21hdGNoIEFFTi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fbWlzbWF0Y2hfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCS8qKgorCSAqIFByb3ZpZGUgZW5hYmxlIGNvbXBsZXRpb24gY2FsbGJhY2sgYW5kIEFFTiBub3RpZmljYXRpb24gb25seSBvbmNlLgorCSAqLworCWlmIChpb2MtPnJldHJ5X2NvdW50ID09IDApIHsKKwkJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9GV01JU01BVENIKTsKKwl9CisJaW9jLT5yZXRyeV9jb3VudCsrOworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKK30KKworLyoqCisgKiBBd2FpdGluZyBmaXJtd2FyZSB2ZXJzaW9uIG1hdGNoLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9taXNtYXRjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZndjaGVjayk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX0RFVEFDSDoKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogUmVxdWVzdCBmb3Igc2VtYXBob3JlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9zZW13YWl0X2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX2h3X3NlbV9nZXQoaW9jKTsKK30KKworLyoqCisgKiBBd2FpdGluZyBzZW1hcGhvcmUgZm9yIGgvdyBpbml0aWFsemF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9zZW13YWl0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX1NFTUxPQ0tFRDoKKwkJaW9jLT5yZXRyeV9jb3VudCA9IDA7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9od2luaXQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21faHdpbml0X2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CisJYmZhX2lvY19yZXNldChpb2MsIEJGQV9GQUxTRSk7Cit9CisKKy8qKgorICogSGFyZHdhcmUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIEludGVycnVwdHMgYXJlIGVuYWJsZWQuCisgKiBIb2xkaW5nIGhhcmR3YXJlIHNlbWFwaG9yZSBsb2NrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9od2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9lbmFibGluZyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9IV0VSUk9SOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogZmFsbCB0aHJvdWdoCisJCSAqLworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQlpb2MtPnJldHJ5X2NvdW50Kys7CisJCWlmIChpb2MtPnJldHJ5X2NvdW50IDwgQkZBX0lPQ19IV0lOSVRfTUFYKSB7CisJCQliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CisJCQliZmFfaW9jX3Jlc2V0KGlvYywgQkZBX1RSVUUpOworCQkJYnJlYWs7CisJCX0KKworCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9pbml0ZmFpbCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZW5hYmxpbmdfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwliZmFfaW9jX3NlbmRfZW5hYmxlKGlvYyk7Cit9CisKKy8qKgorICogSG9zdCBJT0MgZnVuY3Rpb24gaXMgYmVpbmcgZW5hYmxlZCwgYXdhaXRpbmcgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZS4KKyAqIFNlbWFwaG9yZSBpcyBhY3F1aXJlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZW5hYmxpbmcoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRldSU1BfRU5BQkxFOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZ2V0YXR0cik7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9IV0VSUk9SOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogZmFsbCB0aHJvdWdoCisJCSAqLworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQlpb2MtPnJldHJ5X2NvdW50Kys7CisJCWlmIChpb2MtPnJldHJ5X2NvdW50IDwgQkZBX0lPQ19IV0lOSVRfTUFYKSB7CisJCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUsCisJCQkJICAgICAgQkZJX0lPQ19VTklOSVQpOworCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2h3aW5pdCk7CisJCQlicmVhazsKKwkJfQorCisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2luaXRmYWlsKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQliZmFfaW9jX3NlbmRfZW5hYmxlKGlvYyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9nZXRhdHRyX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CisJYmZhX2lvY19zZW5kX2dldGF0dHIoaW9jKTsKK30KKworLyoqCisgKiBJT0MgY29uZmlndXJhdGlvbiBpbiBwcm9ncmVzcy4gVGltZXIgaXMgYWN0aXZlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9nZXRhdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0ZXUlNQX0dFVEFUVFI6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fb3ApOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfSFdFUlJPUjoKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCS8qCisJCSAqIGZhbGwgdGhyb3VnaAorCQkgKi8KKworCWNhc2UgSU9DX0VfVElNRU9VVDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2luaXRmYWlsKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fb3BfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfT0spOworCWJmYV9pb2NfaGJfbW9uaXRvcihpb2MpOworCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9vcChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9FTkFCTEU6CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2hiX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGluZyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9IV0VSUk9SOgorCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJLyoqCisJCSAqIEhhcmQgZXJyb3Igb3IgSU9DIHJlY292ZXJ5IGJ5IG90aGVyIGZ1bmN0aW9uLgorCQkgKiBUcmVhdCBpdCBzYW1lIGFzIGhlYXJ0YmVhdCBmYWlsdXJlLgorCQkgKi8KKwkJYmZhX2lvY19oYl9zdG9wKGlvYyk7CisJCS8qCisJCSAqICEhISBmYWxsIHRocm91Z2ggISEhCisJCSAqLworCisJY2FzZSBJT0NfRV9IQkZBSUw6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9oYmZhaWwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZGlzYWJsaW5nX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX2Flbl9wb3N0KGlvYywgQkZBX0lPQ19BRU5fRElTQUJMRSk7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworCWJmYV9pb2Nfc2VuZF9kaXNhYmxlKGlvYyk7Cit9CisKKy8qKgorICogSU9DIGlzIGJlaW5nIGRpc2FibGVkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2Rpc2FibGluZyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9IV0VSUk9SOgorCWNhc2UgSU9DX0VfRldSU1BfRElTQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCS8qCisJCSAqICEhISBmYWxsIHRocm91Z2ggISEhCisJCSAqLworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogSU9DIGRpc2FibGUgY29tcGxldGlvbiBlbnRyeS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZGlzYWJsZWRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfZGlzYWJsZV9jb21wKGlvYyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0VOQUJMRToKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3NlbXdhaXQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJaW9jLT5jYmZuLT5kaXNhYmxlX2NiZm4oaW9jLT5iZmEpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RFVEFDSDoKKwkJYmZhX2lvY19maXJtd2FyZV91bmxvY2soaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2luaXRmYWlsX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7Cit9CisKKy8qKgorICogSGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9pbml0ZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RFVEFDSDoKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9pb2NfZmlybXdhcmVfdW5sb2NrKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9oYmZhaWxfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqbm90aWZ5OworCisJLyoqCisJICogTWFyayBJT0MgYXMgZmFpbGVkIGluIGhhcmR3YXJlIGFuZCBzdG9wIGZpcm13YXJlLgorCSAqLworCWJmYV9pb2NfbHB1X3N0b3AoaW9jKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUsIEJGSV9JT0NfSEJGQUlMKTsKKworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmxsX2hhbHQsIF9fRldfSU5JVF9IQUxUX1ApOworCQkvKgorCQkgKiBXYWl0IGZvciBoYWx0IHRvIHRha2UgZWZmZWN0CisJCSAqLworCQliZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5sbF9oYWx0KTsKKwl9CisKKwkvKioKKwkgKiBOb3RpZnkgZHJpdmVyIGFuZCBjb21tb24gbW9kdWxlcyByZWdpc3RlcmVkIGZvciBub3RpZmljYXRpb24uCisJICovCisJaW9jLT5jYmZuLT5oYmZhaWxfY2Jmbihpb2MtPmJmYSk7CisJbGlzdF9mb3JfZWFjaChxZSwgJmlvYy0+aGJfbm90aWZ5X3EpIHsKKwkJbm90aWZ5ID0gKHN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqKXFlOworCQlub3RpZnktPmNiZm4obm90aWZ5LT5jYmFyZyk7CisJfQorCisJLyoqCisJICogRmx1c2ggYW55IHF1ZXVlZCB1cCBtYWlsYm94IHJlcXVlc3RzLgorCSAqLworCWJmYV9pb2NfbWJveF9oYmZhaWwoaW9jKTsKKwliZmFfaW9jX2Flbl9wb3N0KGlvYywgQkZBX0lPQ19BRU5fSEJGQUlMKTsKKworCS8qKgorCSAqIFRyaWdnZXIgYXV0by1yZWNvdmVyeSBhZnRlciBhIGRlbGF5LgorCSAqLworCWlmIChpb2MtPmF1dG9fcmVjb3ZlcikgeworCQliZmFfdGltZXJfYmVnaW4oaW9jLT50aW1lcl9tb2QsICZpb2MtPmlvY190aW1lciwKKwkJCQliZmFfaW9jX3RpbWVvdXQsIGlvYywgQkZBX0lPQ19UT1ZfUkVDT1ZFUik7CisJfQorfQorCisvKioKKyAqIElPQyBoZWFydGJlYXQgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21faGJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKworCWNhc2UgSU9DX0VfRU5BQkxFOgorCQlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWlmIChpb2MtPmF1dG9fcmVjb3ZlcikKKwkJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfVElNRU9VVDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3NlbXdhaXQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJLyoqCisJCSAqIFJlY292ZXJ5IGlzIGFscmVhZHkgaW5pdGlhdGVkIGJ5IG90aGVyIGZ1bmN0aW9uLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX2lvY19wdnQgQkZBIElPQyBwcml2YXRlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Rpc2FibGVfY29tcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnk7CisKKwlpb2MtPmNiZm4tPmRpc2FibGVfY2Jmbihpb2MtPmJmYSk7CisKKwkvKioKKwkgKiBOb3RpZnkgY29tbW9uIG1vZHVsZXMgcmVnaXN0ZXJlZCBmb3Igbm90aWZpY2F0aW9uLgorCSAqLworCWxpc3RfZm9yX2VhY2gocWUsICZpb2MtPmhiX25vdGlmeV9xKSB7CisJCW5vdGlmeSA9IChzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKilxZTsKKwkJbm90aWZ5LT5jYmZuKG5vdGlmeS0+Y2JhcmcpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc2VtX3RpbWVvdXQodm9pZCAqaW9jX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19zICppb2MgPSAoc3RydWN0IGJmYV9pb2NfcyAqKWlvY19hcmc7CisKKwliZmFfaW9jX2h3X3NlbV9nZXQoaW9jKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfdXNhZ2Vfc2VtX2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICByMzI7CisJaW50ICAgICAgICAgICAgIGNudCA9IDA7CisjZGVmaW5lIEJGQV9TRU1fU1BJTkNOVAkxMDAwCisKKwlkbyB7CisJCXIzMiA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY191c2FnZV9zZW1fcmVnKTsKKwkJY250Kys7CisJCWlmIChjbnQgPiBCRkFfU0VNX1NQSU5DTlQpCisJCQlicmVhazsKKwl9IHdoaWxlIChyMzIgIT0gMCk7CisJYmZhX2Fzc2VydChjbnQgPCBCRkFfU0VNX1NQSU5DTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY191c2FnZV9zZW1fcmVsZWFzZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY191c2FnZV9zZW1fcmVnLCAxKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaHdfc2VtX2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICByMzI7CisKKwkvKioKKwkgKiBGaXJzdCByZWFkIHRvIHRoZSBzZW1hcGhvcmUgcmVnaXN0ZXIgd2lsbCByZXR1cm4gMCwgc3Vic2VxdWVudCByZWFkcworCSAqIHdpbGwgcmV0dXJuIDEuIFNlbWFwaG9yZSBpcyByZWxlYXNlZCBieSB3cml0aW5nIDAgdG8gdGhlIHJlZ2lzdGVyCisJICovCisJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX3NlbV9yZWcpOworCWlmIChyMzIgPT0gMCkgeworCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9TRU1MT0NLRUQpOworCQlyZXR1cm47CisJfQorCisJYmZhX3RpbWVyX2JlZ2luKGlvYy0+dGltZXJfbW9kLCAmaW9jLT5zZW1fdGltZXIsIGJmYV9pb2Nfc2VtX3RpbWVvdXQsCisJCQlpb2MsIEJGQV9JT0NfVE9WKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaHdfc2VtX3JlbGVhc2Uoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZywgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfdGltZXJfc3RvcCgmaW9jLT5zZW1fdGltZXIpOworfQorCisvKioKKyAqIEluaXRpYWxpemUgTFBVIGxvY2FsIG1lbW9yeSAoYWthIHNlY29uZGFyeSBtZW1vcnkgLyBTUkFNKQorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19sbWVtX2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcHNzX2N0bDsKKwlpbnQgICAgICAgICAgICAgaTsKKyNkZWZpbmUgUFNTX0xNRU1fSU5JVF9USU1FICAxMDAwMAorCisJcHNzX2N0bCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnKTsKKwlwc3NfY3RsICY9IH5fX1BTU19MTUVNX1JFU0VUOworCXBzc19jdGwgfD0gX19QU1NfTE1FTV9JTklUX0VOOworCXBzc19jdGwgfD0gX19QU1NfSTJDX0NMS19ESVYoM1VMKTsgLyogaTJjIHdvcmthcm91bmQgMTIuNWtoeiBjbG9jayAqLworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZywgcHNzX2N0bCk7CisKKwkvKioKKwkgKiB3YWl0IGZvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gdG8gYmUgY29tcGxldGUKKwkgKi8KKwlpID0gMDsKKwlkbyB7CisJCXBzc19jdGwgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZyk7CisJCWkrKzsKKwl9IHdoaWxlICghKHBzc19jdGwgJiBfX1BTU19MTUVNX0lOSVRfRE9ORSkgJiYgKGkgPCBQU1NfTE1FTV9JTklUX1RJTUUpKTsKKworCS8qKgorCSAqIElmIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpcyBub3Qgc3VjY2Vzc2Z1bCwgSU9DIHRpbWVvdXQgd2lsbCBjYXRjaAorCSAqIHN1Y2ggZmFpbHVyZXMuCisJICovCisJYmZhX2Fzc2VydChwc3NfY3RsICYgX19QU1NfTE1FTV9JTklUX0RPTkUpOworCWJmYV90cmMoaW9jLCBwc3NfY3RsKTsKKworCXBzc19jdGwgJj0gfihfX1BTU19MTUVNX0lOSVRfRE9ORSB8IF9fUFNTX0xNRU1fSU5JVF9FTik7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnLCBwc3NfY3RsKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfbHB1X3N0YXJ0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHBzc19jdGw7CisKKwkvKioKKwkgKiBUYWtlIHByb2Nlc3NvciBvdXQgb2YgcmVzZXQuCisJICovCisJcHNzX2N0bCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnKTsKKwlwc3NfY3RsICY9IH5fX1BTU19MUFUwX1JFU0VUOworCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnLCBwc3NfY3RsKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfbHB1X3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcHNzX2N0bDsKKworCS8qKgorCSAqIFB1dCBwcm9jZXNzb3JzIGluIHJlc2V0LgorCSAqLworCXBzc19jdGwgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZyk7CisJcHNzX2N0bCB8PSAoX19QU1NfTFBVMF9SRVNFVCB8IF9fUFNTX0xQVTFfUkVTRVQpOworCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnLCBwc3NfY3RsKTsKK30KKworLyoqCisgKiBHZXQgZHJpdmVyIGFuZCBmaXJtd2FyZSB2ZXJzaW9ucy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfZnd2ZXJfZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKmZ3aGRyKQoreworCXUzMiAgICAgICAgcGdudW0sIHBnb2ZmOworCXUzMiAgICAgICAgbG9mZiA9IDA7CisJaW50ICAgICAgICAgICAgIGk7CisJdTMyICAgICAgICpmd3NpZyA9ICh1MzIgKikgZndoZHI7CisKKwlwZ251bSA9IGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIGxvZmYpOworCXBnb2ZmID0gYmZhX2lvY19zbWVtX3Bnb2ZmKGlvYywgbG9mZik7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sIHBnbnVtKTsKKworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zKSAvIHNpemVvZih1MzIpKTsKKwkgICAgIGkrKykgeworCQlmd3NpZ1tpXSA9IGJmYV9tZW1fcmVhZChpb2MtPmlvY19yZWdzLnNtZW1fcGFnZV9zdGFydCwgbG9mZik7CisJCWxvZmYgKz0gc2l6ZW9mKHUzMik7CisJfQorfQorCitzdGF0aWMgdTMyICoKK2JmYV9pb2NfZndpbWdfZ2V0X2NodW5rKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIG9mZikKK3sKKwlpZiAoaW9jLT5jdGRldikKKwkJcmV0dXJuIGJmaV9pbWFnZV9jdF9nZXRfY2h1bmsob2ZmKTsKKwlyZXR1cm4gYmZpX2ltYWdlX2NiX2dldF9jaHVuayhvZmYpOworfQorCitzdGF0aWMgICAgICAgICAgdTMyCitiZmFfaW9jX2Z3aW1nX2dldF9zaXplKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKK3JldHVybiAoaW9jLT5jdGRldikgPyBiZmlfaW1hZ2VfY3Rfc2l6ZSA6IGJmaV9pbWFnZV9jYl9zaXplOworfQorCisvKioKKyAqIFJldHVybnMgVFJVRSBpZiBzYW1lLgorICovCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19md3Zlcl9jbXAoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqZndoZHIpCit7CisJc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKmRydl9md2hkcjsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWRydl9md2hkciA9CisJCShzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqKWJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZJX0lPQ19NRDVTVU1fU1o7IGkrKykgeworCQlpZiAoZndoZHItPm1kNXN1bVtpXSAhPSBkcnZfZndoZHItPm1kNXN1bVtpXSkgeworCQkJYmZhX3RyYyhpb2MsIGkpOworCQkJYmZhX3RyYyhpb2MsIGZ3aGRyLT5tZDVzdW1baV0pOworCQkJYmZhX3RyYyhpb2MsIGRydl9md2hkci0+bWQ1c3VtW2ldKTsKKwkJCXJldHVybiBCRkFfRkFMU0U7CisJCX0KKwl9CisKKwliZmFfdHJjKGlvYywgZndoZHItPm1kNXN1bVswXSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIFJldHVybiB0cnVlIGlmIGN1cnJlbnQgcnVubmluZyB2ZXJzaW9uIGlzIHZhbGlkLiBGaXJtd2FyZSBzaWduYXR1cmUgYW5kCisgKiBleGVjdXRpb24gY29udGV4dCAoZHJpdmVyL2Jpb3MpIG11c3QgbWF0Y2guCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9jX2Z3dmVyX3ZhbGlkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyBmd2hkciwgKmRydl9md2hkcjsKKworCS8qKgorCSAqIElmIGJpb3MvZWZpIGJvb3QgKGZsYXNoIGJhc2VkKSAtLSByZXR1cm4gdHJ1ZQorCSAqLworCWlmIChiZmFfaW9jX2Z3aW1nX2dldF9zaXplKGlvYykgPCBCRkFfSU9DX0ZXSU1HX01JTlNaKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwliZmFfaW9jX2Z3dmVyX2dldChpb2MsICZmd2hkcik7CisJZHJ2X2Z3aGRyID0KKwkJKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICopYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoaW9jLCAwKTsKKworCWlmIChmd2hkci5zaWduYXR1cmUgIT0gZHJ2X2Z3aGRyLT5zaWduYXR1cmUpIHsKKwkJYmZhX3RyYyhpb2MsIGZ3aGRyLnNpZ25hdHVyZSk7CisJCWJmYV90cmMoaW9jLCBkcnZfZndoZHItPnNpZ25hdHVyZSk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJaWYgKGZ3aGRyLmV4ZWMgIT0gZHJ2X2Z3aGRyLT5leGVjKSB7CisJCWJmYV90cmMoaW9jLCBmd2hkci5leGVjKTsKKwkJYmZhX3RyYyhpb2MsIGRydl9md2hkci0+ZXhlYyk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJcmV0dXJuIGJmYV9pb2NfZnd2ZXJfY21wKGlvYywgJmZ3aGRyKTsKK30KKworLyoqCisgKiBSZXR1cm4gdHJ1ZSBpZiBmaXJtd2FyZSBvZiBjdXJyZW50IGRyaXZlciBtYXRjaGVzIHRoZSBydW5uaW5nIGZpcm13YXJlLgorICovCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19maXJtd2FyZV9sb2NrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwllbnVtIGJmaV9pb2Nfc3RhdGUgaW9jX2Z3c3RhdGU7CisJdTMyICAgICAgICB1c2VjbnQ7CisJc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgZndoZHI7CisKKwkvKioKKwkgKiBGaXJtd2FyZSBtYXRjaCBjaGVjayBpcyByZWxldmFudCBvbmx5IGZvciBDTkEuCisJICovCisJaWYgKCFpb2MtPmNuYSkKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJLyoqCisJICogSWYgYmlvcyBib290IChmbGFzaCBiYXNlZCkgLS0gZG8gbm90IGluY3JlbWVudCB1c2FnZSBjb3VudAorCSAqLworCWlmIChiZmFfaW9jX2Z3aW1nX2dldF9zaXplKGlvYykgPCBCRkFfSU9DX0ZXSU1HX01JTlNaKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwliZmFfaW9jX3VzYWdlX3NlbV9nZXQoaW9jKTsKKwl1c2VjbnQgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnKTsKKworCS8qKgorCSAqIElmIHVzYWdlIGNvdW50IGlzIDAsIGFsd2F5cyByZXR1cm4gVFJVRS4KKwkgKi8KKwlpZiAodXNlY250ID09IDApIHsKKwkJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcsIDEpOworCQliZmFfaW9jX3VzYWdlX3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV90cmMoaW9jLCB1c2VjbnQpOworCQlyZXR1cm4gQkZBX1RSVUU7CisJfQorCisJaW9jX2Z3c3RhdGUgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7CisJYmZhX3RyYyhpb2MsIGlvY19md3N0YXRlKTsKKworCS8qKgorCSAqIFVzZSBjb3VudCBjYW5ub3QgYmUgbm9uLXplcm8gYW5kIGNoaXAgaW4gdW5pbml0aWFsaXplZCBzdGF0ZS4KKwkgKi8KKwliZmFfYXNzZXJ0KGlvY19md3N0YXRlICE9IEJGSV9JT0NfVU5JTklUKTsKKworCS8qKgorCSAqIENoZWNrIGlmIGFub3RoZXIgZHJpdmVyIHdpdGggYSBkaWZmZXJlbnQgZmlybXdhcmUgaXMgYWN0aXZlCisJICovCisJYmZhX2lvY19md3Zlcl9nZXQoaW9jLCAmZndoZHIpOworCWlmICghYmZhX2lvY19md3Zlcl9jbXAoaW9jLCAmZndoZHIpKSB7CisJCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX3RyYyhpb2MsIHVzZWNudCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJLyoqCisJICogU2FtZSBmaXJtd2FyZSB2ZXJzaW9uLiBJbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudC4KKwkgKi8KKwl1c2VjbnQrKzsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZywgdXNlY250KTsKKwliZmFfaW9jX3VzYWdlX3NlbV9yZWxlYXNlKGlvYyk7CisJYmZhX3RyYyhpb2MsIHVzZWNudCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19maXJtd2FyZV91bmxvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgdXNlY250OworCisJLyoqCisJICogRmlybXdhcmUgbG9jayBpcyByZWxldmFudCBvbmx5IGZvciBDTkEuCisJICogSWYgYmlvcyBib290IChmbGFzaCBiYXNlZCkgLS0gZG8gbm90IGRlY3JlbWVudCB1c2FnZSBjb3VudAorCSAqLworCWlmICghaW9jLT5jbmEgfHwgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opKQorCQlyZXR1cm47CisKKwkvKioKKwkgKiBkZWNyZW1lbnQgdXNhZ2UgY291bnQKKwkgKi8KKwliZmFfaW9jX3VzYWdlX3NlbV9nZXQoaW9jKTsKKwl1c2VjbnQgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnKTsKKwliZmFfYXNzZXJ0KHVzZWNudCA+IDApOworCisJdXNlY250LS07CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcsIHVzZWNudCk7CisJYmZhX3RyYyhpb2MsIHVzZWNudCk7CisKKwliZmFfaW9jX3VzYWdlX3NlbV9yZWxlYXNlKGlvYyk7Cit9CisKKy8qKgorICogQ29uZGl0aW9uYWxseSBmbHVzaCBhbnkgcGVuZGluZyBtZXNzYWdlIGZyb20gZmlybXdhcmUgYXQgc3RhcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX21zZ2ZsdXNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHIzMjsKKworCXIzMiA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCk7CisJaWYgKHIzMikKKwkJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCwgMSk7Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaHdpbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBmb3JjZSkKK3sKKwllbnVtIGJmaV9pb2Nfc3RhdGUgaW9jX2Z3c3RhdGU7CisJYmZhX2Jvb2xlYW5fdCAgIGZ3dmFsaWQ7CisKKwlpb2NfZndzdGF0ZSA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKKworCWlmIChmb3JjZSkKKwkJaW9jX2Z3c3RhdGUgPSBCRklfSU9DX1VOSU5JVDsKKworCWJmYV90cmMoaW9jLCBpb2NfZndzdGF0ZSk7CisKKwkvKioKKwkgKiBjaGVjayBpZiBmaXJtd2FyZSBpcyB2YWxpZAorCSAqLworCWZ3dmFsaWQgPSAoaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19VTklOSVQpID8KKwkJCUJGQV9GQUxTRSA6IGJmYV9pb2NfZnd2ZXJfdmFsaWQoaW9jKTsKKworCWlmICghZnd2YWxpZCkgeworCQliZmFfaW9jX2Jvb3QoaW9jLCBCRklfQk9PVF9UWVBFX05PUk1BTCwgaW9jLT5wY2lkZXYuZGV2aWNlX2lkKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIElmIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGlzIGluIHByb2dyZXNzIChpbml0aWFsaXplZCBieSBvdGhlciBJT0MpLAorCSAqIGp1c3Qgd2FpdCBmb3IgYW4gaW5pdGlhbGl6YXRpb24gY29tcGxldGlvbiBpbnRlcnJ1cHQuCisJICovCisJaWYgKGlvY19md3N0YXRlID09IEJGSV9JT0NfSU5JVElORykgeworCQliZmFfdHJjKGlvYywgaW9jX2Z3c3RhdGUpOworCQlpb2MtPmNiZm4tPnJlc2V0X2NiZm4oaW9jLT5iZmEpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogSWYgSU9DIGZ1bmN0aW9uIGlzIGRpc2FibGVkIGFuZCBmaXJtd2FyZSB2ZXJzaW9uIGlzIHNhbWUsCisJICoganVzdCByZS1lbmFibGUgSU9DLgorCSAqLworCWlmIChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX0RJU0FCTEVEIHx8IGlvY19md3N0YXRlID09IEJGSV9JT0NfT1ApIHsKKwkJYmZhX3RyYyhpb2MsIGlvY19md3N0YXRlKTsKKworCQkvKioKKwkJICogV2hlbiB1c2luZyBNU0ktWCBhbnkgcGVuZGluZyBmaXJtd2FyZSByZWFkeSBldmVudCBzaG91bGQKKwkJICogYmUgZmx1c2hlZC4gT3RoZXJ3aXNlIE1TSS1YIGludGVycnVwdHMgYXJlIG5vdCBkZWxpdmVyZWQuCisJCSAqLworCQliZmFfaW9jX21zZ2ZsdXNoKGlvYyk7CisJCWlvYy0+Y2Jmbi0+cmVzZXRfY2Jmbihpb2MtPmJmYSk7CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0ZXUkVBRFkpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgaC93IGZvciBhbnkgb3RoZXIgc3RhdGVzLgorCSAqLworCWJmYV9pb2NfYm9vdChpb2MsIEJGSV9CT09UX1RZUEVfTk9STUFMLCBpb2MtPnBjaWRldi5kZXZpY2VfaWQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY190aW1lb3V0KHZvaWQgKmlvY19hcmcpCit7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jID0gKHN0cnVjdCBiZmFfaW9jX3MgKilpb2NfYXJnOworCisJYmZhX3RyYyhpb2MsIDApOworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX1RJTUVPVVQpOworfQorCit2b2lkCitiZmFfaW9jX21ib3hfc2VuZChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmlvY19tc2csIGludCBsZW4pCit7CisJdTMyICAgICAgICptc2dwID0gKHUzMiAqKSBpb2NfbXNnOworCXUzMiAgICAgICAgaTsKKworCWJmYV90cmMoaW9jLCBtc2dwWzBdKTsKKwliZmFfdHJjKGlvYywgbGVuKTsKKworCWJmYV9hc3NlcnQobGVuIDw9IEJGSV9JT0NfTVNHTEVOX01BWCk7CisKKwkvKgorCSAqIGZpcnN0IHdyaXRlIG1zZyB0byBtYWlsYm94IHJlZ2lzdGVycworCSAqLworCWZvciAoaSA9IDA7IGkgPCBsZW4gLyBzaXplb2YodTMyKTsgaSsrKQorCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3ggKyBpICogc2l6ZW9mKHUzMiksCisJCQkgICAgICBiZmFfb3Nfd3RvbGUobXNncFtpXSkpOworCisJZm9yICg7IGkgPCBCRklfSU9DX01TR0xFTl9NQVggLyBzaXplb2YodTMyKTsgaSsrKQorCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3ggKyBpICogc2l6ZW9mKHUzMiksIDApOworCisJLyoKKwkgKiB3cml0ZSAxIHRvIG1haWxib3ggQ01EIHRvIHRyaWdnZXIgTFBVIGV2ZW50CisJICovCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCwgMSk7CisJKHZvaWQpYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MgZW5hYmxlX3JlcTsKKworCWJmaV9oMmlfc2V0KGVuYWJsZV9yZXEubWgsIEJGSV9NQ19JT0MsIEJGSV9JT0NfSDJJX0VOQUJMRV9SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChpb2MpKTsKKwllbmFibGVfcmVxLmlvY19jbGFzcyA9IGlvYy0+aW9jX21jOworCWJmYV9pb2NfbWJveF9zZW5kKGlvYywgJmVuYWJsZV9yZXEsIHNpemVvZihzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyBkaXNhYmxlX3JlcTsKKworCWJmaV9oMmlfc2V0KGRpc2FibGVfcmVxLm1oLCBCRklfTUNfSU9DLCBCRklfSU9DX0gySV9ESVNBQkxFX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWJmYV9pb2NfbWJveF9zZW5kKGlvYywgJmRpc2FibGVfcmVxLCBzaXplb2Yoc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcykpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zZW5kX2dldGF0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2dldGF0dHJfcmVxX3MgYXR0cl9yZXE7CisKKwliZmlfaDJpX3NldChhdHRyX3JlcS5taCwgQkZJX01DX0lPQywgQkZJX0lPQ19IMklfR0VUQVRUUl9SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChpb2MpKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGF0dHJfcmVxLmF0dHJfYWRkciwgaW9jLT5hdHRyX2RtYS5wYSk7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCAmYXR0cl9yZXEsIHNpemVvZihhdHRyX3JlcSkpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19oYl9jaGVjayh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19zICppb2MgPSBjYmFyZzsKKwl1MzIgICAgICAgIGhiX2NvdW50OworCisJaGJfY291bnQgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5oZWFydGJlYXQpOworCWlmIChpb2MtPmhiX2NvdW50ID09IGhiX2NvdW50KSB7CisJCWlvYy0+aGJfZmFpbCsrOworCX0gZWxzZSB7CisJCWlvYy0+aGJfY291bnQgPSBoYl9jb3VudDsKKwkJaW9jLT5oYl9mYWlsID0gMDsKKwl9CisKKwlpZiAoaW9jLT5oYl9mYWlsID49IEJGQV9JT0NfSEJfRkFJTF9NQVgpIHsKKwkJYmZhX2xvZyhpb2MtPmxvZ20sIEJGQV9MT0dfSEFMX0hFQVJUQkVBVF9GQUlMVVJFLCBoYl9jb3VudCk7CisJCWlvYy0+aGJfZmFpbCA9IDA7CisJCWJmYV9pb2NfcmVjb3Zlcihpb2MpOworCQlyZXR1cm47CisJfQorCisJYmZhX2lvY19tYm94X3BvbGwoaW9jKTsKKwliZmFfdGltZXJfYmVnaW4oaW9jLT50aW1lcl9tb2QsICZpb2MtPmlvY190aW1lciwgYmZhX2lvY19oYl9jaGVjaywgaW9jLAorCQkJQkZBX0lPQ19IQl9UT1YpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19oYl9tb25pdG9yKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpb2MtPmhiX2ZhaWwgPSAwOworCWlvYy0+aGJfY291bnQgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5oZWFydGJlYXQpOworCWJmYV90aW1lcl9iZWdpbihpb2MtPnRpbWVyX21vZCwgJmlvYy0+aW9jX3RpbWVyLCBiZmFfaW9jX2hiX2NoZWNrLCBpb2MsCisJCQlCRkFfSU9DX0hCX1RPVik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2hiX3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV90aW1lcl9zdG9wKCZpb2MtPmlvY190aW1lcik7Cit9CisKKy8qKgorICogSG9zdCB0byBMUFUgbWFpbGJveCBtZXNzYWdlIGFkZHJlc3NlcworICovCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgICAgICAgIGhmbl9tYm94LCBscHVfbWJveCwgaGZuX3BnbjsKK30gaW9jcmVnX2ZucmVnW10gPSB7CisJeworCUhPU1RGTjBfTFBVX01CT1gwXzAsIExQVV9IT1NURk4wX01CT1gwXzAsIEhPU1RfUEFHRV9OVU1fRk4wfSwgeworCUhPU1RGTjFfTFBVX01CT1gwXzgsIExQVV9IT1NURk4xX01CT1gwXzgsIEhPU1RfUEFHRV9OVU1fRk4xfSwgeworCUhPU1RGTjJfTFBVX01CT1gwXzAsIExQVV9IT1NURk4yX01CT1gwXzAsIEhPU1RfUEFHRV9OVU1fRk4yfSwgeworCUhPU1RGTjNfTFBVX01CT1gwXzgsIExQVV9IT1NURk4zX01CT1gwXzgsIEhPU1RfUEFHRV9OVU1fRk4zfQorfTsKKworLyoqCisgKiBIb3N0IDwtPiBMUFUgbWFpbGJveCBjb21tYW5kL3N0YXR1cyByZWdpc3RlcnMgLSBwb3J0IDAKKyAqLworc3RhdGljIHN0cnVjdCB7CisJdTMyICAgICAgICBoZm4sIGxwdTsKK30gaW9jcmVnX21iY21kX3AwW10gPSB7CisJeworCUhPU1RGTjBfTFBVMF9NQk9YMF9DTURfU1RBVCwgTFBVMF9IT1NURk4wX01CT1gwX0NNRF9TVEFUfSwgeworCUhPU1RGTjFfTFBVMF9NQk9YMF9DTURfU1RBVCwgTFBVMF9IT1NURk4xX01CT1gwX0NNRF9TVEFUfSwgeworCUhPU1RGTjJfTFBVMF9NQk9YMF9DTURfU1RBVCwgTFBVMF9IT1NURk4yX01CT1gwX0NNRF9TVEFUfSwgeworCUhPU1RGTjNfTFBVMF9NQk9YMF9DTURfU1RBVCwgTFBVMF9IT1NURk4zX01CT1gwX0NNRF9TVEFUfQorfTsKKworLyoqCisgKiBIb3N0IDwtPiBMUFUgbWFpbGJveCBjb21tYW5kL3N0YXR1cyByZWdpc3RlcnMgLSBwb3J0IDEKKyAqLworc3RhdGljIHN0cnVjdCB7CisJdTMyICAgICAgICBoZm4sIGxwdTsKK30gaW9jcmVnX21iY21kX3AxW10gPSB7CisJeworCUhPU1RGTjBfTFBVMV9NQk9YMF9DTURfU1RBVCwgTFBVMV9IT1NURk4wX01CT1gwX0NNRF9TVEFUfSwgeworCUhPU1RGTjFfTFBVMV9NQk9YMF9DTURfU1RBVCwgTFBVMV9IT1NURk4xX01CT1gwX0NNRF9TVEFUfSwgeworCUhPU1RGTjJfTFBVMV9NQk9YMF9DTURfU1RBVCwgTFBVMV9IT1NURk4yX01CT1gwX0NNRF9TVEFUfSwgeworCUhPU1RGTjNfTFBVMV9NQk9YMF9DTURfU1RBVCwgTFBVMV9IT1NURk4zX01CT1gwX0NNRF9TVEFUfQorfTsKKworLyoqCisgKiBTaGFyZWQgSVJRIGhhbmRsaW5nIGluIElOVFggbW9kZQorICovCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgICAgICAgIGlzciwgbXNrOworfSBpb2NyZWdfc2hpcnFfbmV4dFtdID0geworCXsKKwlIT1NURk4xX0lOVF9TVEFUVVMsIEhPU1RGTjFfSU5UX01TS30sIHsKKwlIT1NURk4yX0lOVF9TVEFUVVMsIEhPU1RGTjJfSU5UX01TS30sIHsKKwlIT1NURk4zX0lOVF9TVEFUVVMsIEhPU1RGTjNfSU5UX01TS30sIHsKK0hPU1RGTjBfSU5UX1NUQVRVUywgSE9TVEZOMF9JTlRfTVNLfSx9OworCitzdGF0aWMgdm9pZAorYmZhX2lvY19yZWdfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX29zX2FkZHJfdCAgIHJiOworCWludCAgICAgICAgICAgICBwY2lmbiA9IGJmYV9pb2NfcGNpZm4oaW9jKTsKKworCXJiID0gYmZhX2lvY19iYXIwKGlvYyk7CisKKwlpb2MtPmlvY19yZWdzLmhmbl9tYm94ID0gcmIgKyBpb2NyZWdfZm5yZWdbcGNpZm5dLmhmbl9tYm94OworCWlvYy0+aW9jX3JlZ3MubHB1X21ib3ggPSByYiArIGlvY3JlZ19mbnJlZ1twY2lmbl0ubHB1X21ib3g7CisJaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuID0gcmIgKyBpb2NyZWdfZm5yZWdbcGNpZm5dLmhmbl9wZ247CisKKwlpZiAoaW9jLT5wb3J0X2lkID09IDApIHsKKwkJaW9jLT5pb2NfcmVncy5oZWFydGJlYXQgPSByYiArIEJGQV9JT0MwX0hCRUFUX1JFRzsKKwkJaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSA9IHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHOworCQlpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AwW3BjaWZuXS5oZm47CisJCWlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDBbcGNpZm5dLmxwdTsKKwkJaW9jLT5pb2NfcmVncy5sbF9oYWx0ID0gcmIgKyBGV19JTklUX0hBTFRfUDA7CisJfSBlbHNlIHsKKwkJaW9jLT5pb2NfcmVncy5oZWFydGJlYXQgPSAocmIgKyBCRkFfSU9DMV9IQkVBVF9SRUcpOworCQlpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlID0gKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKTsKKwkJaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQgPSByYiArIGlvY3JlZ19tYmNtZF9wMVtwY2lmbl0uaGZuOworCQlpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AxW3BjaWZuXS5scHU7CisJCWlvYy0+aW9jX3JlZ3MubGxfaGFsdCA9IHJiICsgRldfSU5JVF9IQUxUX1AxOworCX0KKworCS8qKgorCSAqIFNoYXJlZCBJUlEgaGFuZGxpbmcgaW4gSU5UWCBtb2RlCisJICovCisJaW9jLT5pb2NfcmVncy5zaGlycV9pc3JfbmV4dCA9IHJiICsgaW9jcmVnX3NoaXJxX25leHRbcGNpZm5dLmlzcjsKKwlpb2MtPmlvY19yZWdzLnNoaXJxX21za19uZXh0ID0gcmIgKyBpb2NyZWdfc2hpcnFfbmV4dFtwY2lmbl0ubXNrOworCisJLyoKKwkgKiBQU1MgY29udHJvbCByZWdpc3RlcnMKKwkgKi8KKwlpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnID0gKHJiICsgUFNTX0NUTF9SRUcpOworCWlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcgPSAocmIgKyBBUFBfUExMXzQyNV9DVExfUkVHKTsKKwlpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnID0gKHJiICsgQVBQX1BMTF8zMTJfQ1RMX1JFRyk7CisKKwkvKgorCSAqIElPQyBzZW1hcGhvcmUgcmVnaXN0ZXJzIGFuZCBzZXJpYWxpemF0aW9uCisJICovCisJaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyA9IChyYiArIEhPU1RfU0VNMF9SRUcpOworCWlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcgPSAocmIgKyBIT1NUX1NFTTFfUkVHKTsKKwlpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcgPSAocmIgKyBCRkFfRldfVVNFX0NPVU5UKTsKKworCS8qKgorCSAqIHNyYW0gbWVtb3J5IGFjY2VzcworCSAqLworCWlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0ID0gKHJiICsgUFNTX1NNRU1fUEFHRV9TVEFSVCk7CisJaW9jLT5pb2NfcmVncy5zbWVtX3BnMCA9IEJGSV9JT0NfU01FTV9QRzBfQ0I7CisJaWYgKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkKKwkJaW9jLT5pb2NfcmVncy5zbWVtX3BnMCA9IEJGSV9JT0NfU01FTV9QRzBfQ1Q7Cit9CisKKy8qKgorICogICAgICBJbml0aWF0ZSBhIGZ1bGwgZmlybXdhcmUgZG93bmxvYWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Rvd25sb2FkX2Z3KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGJvb3RfdHlwZSwKKwkJICAgIHUzMiBib290X3BhcmFtKQoreworCXUzMiAgICAgICAqZndpbWc7CisJdTMyICAgICAgICBwZ251bSwgcGdvZmY7CisJdTMyICAgICAgICBsb2ZmID0gMDsKKwl1MzIgICAgICAgIGNodW5rbm8gPSAwOworCXUzMiAgICAgICAgaTsKKworCS8qKgorCSAqIEluaXRpYWxpemUgTE1FTSBmaXJzdCBiZWZvcmUgY29kZSBkb3dubG9hZAorCSAqLworCWJmYV9pb2NfbG1lbV9pbml0KGlvYyk7CisKKwkvKioKKwkgKiBGbGFzaCBiYXNlZCBmaXJtd2FyZSBib290CisJICovCisJYmZhX3RyYyhpb2MsIGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSk7CisJaWYgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCisJCWJvb3RfdHlwZSA9IEJGSV9CT09UX1RZUEVfRkxBU0g7CisJZndpbWcgPSBiZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhpb2MsIGNodW5rbm8pOworCWZ3aW1nW0JGSV9CT09UX1RZUEVfT0ZGIC8gc2l6ZW9mKHUzMildID0gYmZhX29zX3N3YXAzMihib290X3R5cGUpOworCWZ3aW1nW0JGSV9CT09UX1BBUkFNX09GRiAvIHNpemVvZih1MzIpXSA9CisJCWJmYV9vc19zd2FwMzIoYm9vdF9wYXJhbSk7CisKKwlwZ251bSA9IGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIGxvZmYpOworCXBnb2ZmID0gYmZhX2lvY19zbWVtX3Bnb2ZmKGlvYywgbG9mZik7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCisJZm9yIChpID0gMDsgaSA8IGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKTsgaSsrKSB7CisKKwkJaWYgKEJGQV9GTEFTSF9DSFVOS19OTyhpKSAhPSBjaHVua25vKSB7CisJCQljaHVua25vID0gQkZBX0ZMQVNIX0NIVU5LX05PKGkpOworCQkJZndpbWcgPSBiZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhpb2MsCisJCQkJCUJGQV9GTEFTSF9DSFVOS19BRERSKGNodW5rbm8pKTsKKwkJfQorCisJCS8qKgorCQkgKiB3cml0ZSBzbWVtCisJCSAqLworCQliZmFfbWVtX3dyaXRlKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0LCBsb2ZmLAorCQkJICAgICAgZndpbWdbQkZBX0ZMQVNIX09GRlNFVF9JTl9DSFVOSyhpKV0pOworCisJCWxvZmYgKz0gc2l6ZW9mKHUzMik7CisKKwkJLyoqCisJCSAqIGhhbmRsZSBwYWdlIG9mZnNldCB3cmFwIGFyb3VuZAorCQkgKi8KKwkJbG9mZiA9IFBTU19TTUVNX1BHT0ZGKGxvZmYpOworCQlpZiAobG9mZiA9PSAwKSB7CisJCQlwZ251bSsrOworCQkJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sIHBnbnVtKTsKKwkJfQorCX0KKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLAorCQkgICAgICBiZmFfaW9jX3NtZW1fcGdudW0oaW9jLCAwKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3Jlc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBmb3JjZSkKK3sKKwliZmFfaW9jX2h3aW5pdChpb2MsIGZvcmNlKTsKK30KKworLyoqCisgKiBVcGRhdGUgQkZBIGNvbmZpZ3VyYXRpb24gZnJvbSBmaXJtd2FyZSBjb25maWd1cmF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19nZXRhdHRyX3JlcGx5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZpX2lvY19hdHRyX3MgKmF0dHIgPSBpb2MtPmF0dHI7CisKKwlhdHRyLT5hZGFwdGVyX3Byb3AgPSBiZmFfb3NfbnRvaGwoYXR0ci0+YWRhcHRlcl9wcm9wKTsKKwlhdHRyLT5tYXhmcnNpemUgPSBiZmFfb3NfbnRvaHMoYXR0ci0+bWF4ZnJzaXplKTsKKworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0ZXUlNQX0dFVEFUVFIpOworfQorCisvKioKKyAqIEF0dGFjaCB0aW1lIGluaXRpYWxpemF0aW9uIG9mIG1ib3ggbG9naWMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX21ib3hfYXR0YWNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zICptb2QgPSAmaW9jLT5tYm94X21vZDsKKwlpbnQgICAgICAgICAgICAgbWM7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5jbWRfcSk7CisJZm9yIChtYyA9IDA7IG1jIDwgQkZJX01DX01BWDsgbWMrKykgeworCQltb2QtPm1iaGRsclttY10uY2JmbiA9IE5VTEw7CisJCW1vZC0+bWJoZGxyW21jXS5jYmFyZyA9IGlvYy0+YmZhOworCX0KK30KKworLyoqCisgKiBNYm94IHBvbGwgdGltZXIgLS0gcmVzdGFydHMgYW55IHBlbmRpbmcgbWFpbGJveCByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbWJveF9wb2xsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zICptb2QgPSAmaW9jLT5tYm94X21vZDsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3MgKmNtZDsKKwl1MzIgICAgICAgIHN0YXQ7CisKKwkvKioKKwkgKiBJZiBubyBjb21tYW5kIHBlbmRpbmcsIGRvIG5vdGhpbmcKKwkgKi8KKwlpZiAobGlzdF9lbXB0eSgmbW9kLT5jbWRfcSkpCisJCXJldHVybjsKKworCS8qKgorCSAqIElmIHByZXZpb3VzIGNvbW1hbmQgaXMgbm90IHlldCBmZXRjaGVkIGJ5IGZpcm13YXJlLCBkbyBub3RoaW5nCisJICovCisJc3RhdCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCk7CisJaWYgKHN0YXQpCisJCXJldHVybjsKKworCS8qKgorCSAqIEVucXVldWUgY29tbWFuZCB0byBmaXJtd2FyZS4KKwkgKi8KKwliZmFfcV9kZXEoJm1vZC0+Y21kX3EsICZjbWQpOworCWJmYV9pb2NfbWJveF9zZW5kKGlvYywgY21kLT5tc2csIHNpemVvZihjbWQtPm1zZykpOworfQorCisvKioKKyAqIENsZWFudXAgYW55IHBlbmRpbmcgcmVxdWVzdHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX21ib3hfaGJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zICptb2QgPSAmaW9jLT5tYm94X21vZDsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3MgKmNtZDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmbW9kLT5jbWRfcSkpCisJCWJmYV9xX2RlcSgmbW9kLT5jbWRfcSwgJmNtZCk7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBJT0MgdG8gcG9ydCBtYXBwaW5nLgorICovCisKKyNkZWZpbmUgRk5DX1BFUlNfRk5fU0hJRlQoX19mbikJKChfX2ZuKSAqIDgpCitzdGF0aWMgdm9pZAorYmZhX2lvY19tYXBfcG9ydChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX29zX2FkZHJfdCAgIHJiID0gaW9jLT5wY2lkZXYucGNpX2Jhcl9rdmE7CisJdTMyICAgICAgICByMzI7CisKKwkvKioKKwkgKiBGb3IgY3Jvc3Nib3csIHBvcnQgaWQgaXMgc2FtZSBhcyBwY2kgZnVuY3Rpb24uCisJICovCisJaWYgKGlvYy0+cGNpZGV2LmRldmljZV9pZCAhPSBCRkFfUENJX0RFVklDRV9JRF9DVCkgeworCQlpb2MtPnBvcnRfaWQgPSBiZmFfaW9jX3BjaWZuKGlvYyk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBGb3IgY2F0YXB1bHQsIGJhc2UgcG9ydCBpZCBvbiBwZXJzb25hbGl0eSByZWdpc3RlciBhbmQgSU9DIHR5cGUKKwkgKi8KKwlyMzIgPSBiZmFfcmVnX3JlYWQocmIgKyBGTkNfUEVSU19SRUcpOworCXIzMiA+Pj0gRk5DX1BFUlNfRk5fU0hJRlQoYmZhX2lvY19wY2lmbihpb2MpKTsKKwlpb2MtPnBvcnRfaWQgPSAocjMyICYgX19GMF9QT1JUX01BUF9NSykgPj4gX19GMF9QT1JUX01BUF9TSDsKKworCWJmYV90cmMoaW9jLCBiZmFfaW9jX3BjaWZuKGlvYykpOworCWJmYV90cmMoaW9jLCBpb2MtPnBvcnRfaWQpOworfQorCisKKworLyoqCisgKiAgYmZhX2lvY19wdWJsaWMKKyAqLworCisvKioKKyogU2V0IGludGVycnVwdCBtb2RlIGZvciBhIGZ1bmN0aW9uOiBJTlRYIG9yIE1TSVgKKyAqLwordm9pZAorYmZhX2lvY19pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IG1zaXgpCit7CisJYmZhX29zX2FkZHJfdCAgIHJiID0gaW9jLT5wY2lkZXYucGNpX2Jhcl9rdmE7CisJdTMyICAgICAgICByMzIsIG1vZGU7CisKKwlyMzIgPSBiZmFfcmVnX3JlYWQocmIgKyBGTkNfUEVSU19SRUcpOworCWJmYV90cmMoaW9jLCByMzIpOworCisJbW9kZSA9IChyMzIgPj4gRk5DX1BFUlNfRk5fU0hJRlQoYmZhX2lvY19wY2lmbihpb2MpKSkgJgorCQlfX0YwX0lOVFhfU1RBVFVTOworCisJLyoqCisJICogSWYgYWxyZWFkeSBpbiBkZXNpcmVkIG1vZGUsIGRvIG5vdCBjaGFuZ2UgYW55dGhpbmcKKwkgKi8KKwlpZiAoIW1zaXggJiYgbW9kZSkKKwkJcmV0dXJuOworCisJaWYgKG1zaXgpCisJCW1vZGUgPSBfX0YwX0lOVFhfU1RBVFVTX01TSVg7CisJZWxzZQorCQltb2RlID0gX19GMF9JTlRYX1NUQVRVU19JTlRBOworCisJcjMyICY9IH4oX19GMF9JTlRYX1NUQVRVUyA8PCBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpKTsKKwlyMzIgfD0gKG1vZGUgPDwgRk5DX1BFUlNfRk5fU0hJRlQoYmZhX2lvY19wY2lmbihpb2MpKSk7CisJYmZhX3RyYyhpb2MsIHIzMik7CisKKwliZmFfcmVnX3dyaXRlKHJiICsgRk5DX1BFUlNfUkVHLCByMzIpOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NfcGxsX2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9vc19hZGRyX3QgICByYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCXUzMiAgICAgICAgcGxsX3NjbGssIHBsbF9mY2xrLCByMzI7CisKKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCXBsbF9zY2xrID0KKwkJCV9fQVBQX1BMTF8zMTJfRU5BQkxFIHwgX19BUFBfUExMXzMxMl9MUkVTRVROIHwKKwkJCV9fQVBQX1BMTF8zMTJfUlNFTDIwMDUwMCB8IF9fQVBQX1BMTF8zMTJfUDBfMSgwVSkgfAorCQkJX19BUFBfUExMXzMxMl9KSVRMTVQwXzEoM1UpIHwKKwkJCV9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xKDFVKTsKKwkJcGxsX2ZjbGsgPQorCQkJX19BUFBfUExMXzQyNV9FTkFCTEUgfCBfX0FQUF9QTExfNDI1X0xSRVNFVE4gfAorCQkJX19BUFBfUExMXzQyNV9SU0VMMjAwNTAwIHwgX19BUFBfUExMXzQyNV9QMF8xKDBVKSB8CisJCQlfX0FQUF9QTExfNDI1X0pJVExNVDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzQyNV9DTlRMTVQwXzEoMVUpOworCisJCS8qKgorCQkgKiAJRm9yIGNhdGFwdWx0LCBjaG9vc2Ugb3BlcmF0aW9uYWwgbW9kZSBGQy9GQ29FCisJCSAqLworCQlpZiAoaW9jLT5mY21vZGUpIHsKKwkJCWJmYV9yZWdfd3JpdGUoKHJiICsgT1BfTU9ERSksIDApOworCQkJYmZhX3JlZ193cml0ZSgocmIgKyBFVEhfTUFDX1NFUl9SRUcpLAorCQkJCSAgICAgIF9fQVBQX0VNU19DTUxDS1NFTCB8IF9fQVBQX0VNU19SRUZDS0JVRkVOMgorCQkJCSAgICAgIHwgX19BUFBfRU1TX0NIQU5ORUxfU0VMKTsKKwkJfSBlbHNlIHsKKwkJCWlvYy0+cGxsaW5pdCA9IEJGQV9UUlVFOworCQkJYmZhX3JlZ193cml0ZSgocmIgKyBPUF9NT0RFKSwgX19HTE9CQUxfRkNPRV9NT0RFKTsKKwkJCWJmYV9yZWdfd3JpdGUoKHJiICsgRVRIX01BQ19TRVJfUkVHKSwKKwkJCQkgICAgICBfX0FQUF9FTVNfUkVGQ0tCVUZFTjEpOworCQl9CisJfSBlbHNlIHsKKwkJcGxsX3NjbGsgPQorCQkJX19BUFBfUExMXzMxMl9FTkFCTEUgfCBfX0FQUF9QTExfMzEyX0xSRVNFVE4gfAorCQkJX19BUFBfUExMXzMxMl9QMF8xKDNVKSB8IF9fQVBQX1BMTF8zMTJfSklUTE1UMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfMzEyX0NOVExNVDBfMSgzVSk7CisJCXBsbF9mY2xrID0KKwkJCV9fQVBQX1BMTF80MjVfRU5BQkxFIHwgX19BUFBfUExMXzQyNV9MUkVTRVROIHwKKwkJCV9fQVBQX1BMTF80MjVfUlNFTDIwMDUwMCB8IF9fQVBQX1BMTF80MjVfUDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzQyNV9KSVRMTVQwXzEoM1UpIHwKKwkJCV9fQVBQX1BMTF80MjVfQ05UTE1UMF8xKDNVKTsKKwl9CisKKwliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRyksIEJGSV9JT0NfVU5JTklUKTsKKwliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRyksIEJGSV9JT0NfVU5JTklUKTsKKworCWJmYV9yZWdfd3JpdGUoKHJiICsgSE9TVEZOMF9JTlRfTVNLKSwgMHhmZmZmZmZmZlUpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgSE9TVEZOMV9JTlRfTVNLKSwgMHhmZmZmZmZmZlUpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgSE9TVEZOMF9JTlRfU1RBVFVTKSwgMHhmZmZmZmZmZlUpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgSE9TVEZOMV9JTlRfU1RBVFVTKSwgMHhmZmZmZmZmZlUpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgSE9TVEZOMF9JTlRfTVNLKSwgMHhmZmZmZmZmZlUpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgSE9TVEZOMV9JTlRfTVNLKSwgMHhmZmZmZmZmZlUpOworCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX3Nsb3dfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzMxMl9CWVBBU1MgfCBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzQyNV9MT0dJQ19TT0ZUX1JFU0VUKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcsCisJCSAgICAgIF9fQVBQX1BMTF80MjVfQllQQVNTIHwgX19BUFBfUExMXzQyNV9MT0dJQ19TT0ZUX1JFU0VUKTsKKwliZmFfb3NfdWRlbGF5KDIpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX3Nsb3dfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzMxMl9MT0dJQ19TT0ZUX1JFU0VUKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcsCisJCSAgICAgIF9fQVBQX1BMTF80MjVfTE9HSUNfU09GVF9SRVNFVCk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsCisJCSAgICAgIHBsbF9zY2xrIHwgX19BUFBfUExMXzMxMl9MT0dJQ19TT0ZUX1JFU0VUKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcsCisJCSAgICAgIHBsbF9mY2xrIHwgX19BUFBfUExMXzQyNV9MT0dJQ19TT0ZUX1JFU0VUKTsKKworCS8qKgorCSAqIFdhaXQgZm9yIFBMTHMgdG8gbG9jay4KKwkgKi8KKwliZmFfb3NfdWRlbGF5KDIwMDApOworCWJmYV9yZWdfd3JpdGUoKHJiICsgSE9TVEZOMF9JTlRfU1RBVFVTKSwgMHhmZmZmZmZmZlUpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgSE9TVEZOMV9JTlRfU1RBVFVTKSwgMHhmZmZmZmZmZlUpOworCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLCBwbGxfc2Nsayk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfZmFzdF9jdGxfcmVnLCBwbGxfZmNsayk7CisKKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgTUJJU1RfQ1RMX1JFRyksIF9fRURSQU1fQklTVFJfU1RBUlQpOworCQliZmFfb3NfdWRlbGF5KDEwMDApOworCQlyMzIgPSBiZmFfcmVnX3JlYWQoKHJiICsgTUJJU1RfU1RBVF9SRUcpKTsKKwkJYmZhX3RyYyhpb2MsIHIzMik7CisJfQorCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogSW50ZXJmYWNlIHVzZWQgYnkgZGlhZyBtb2R1bGUgdG8gZG8gZmlybXdhcmUgYm9vdCB3aXRoIG1lbW9yeSB0ZXN0CisgKiBhcyB0aGUgZW50cnkgdmVjdG9yLgorICovCit2b2lkCitiZmFfaW9jX2Jvb3Qoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgYm9vdF90eXBlLCB1MzIgYm9vdF9wYXJhbSkKK3sKKwliZmFfb3NfYWRkcl90ICAgcmI7CisKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2Jvb3RzKTsKKworCWlmIChiZmFfaW9jX3BsbF9pbml0KGlvYykgIT0gQkZBX1NUQVRVU19PSykKKwkJcmV0dXJuOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBJT0Mgc3RhdGUgb2YgYWxsIGZ1bmN0aW9ucyBvbiBhIGNoaXAgcmVzZXQuCisJICovCisJcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKwlpZiAoYm9vdF9wYXJhbSA9PSBCRklfQk9PVF9UWVBFX01FTVRFU1QpIHsKKwkJYmZhX3JlZ193cml0ZSgocmIgKyBCRkFfSU9DMF9TVEFURV9SRUcpLCBCRklfSU9DX01FTVRFU1QpOworCQliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRyksIEJGSV9JT0NfTUVNVEVTVCk7CisJfSBlbHNlIHsKKwkJYmZhX3JlZ193cml0ZSgocmIgKyBCRkFfSU9DMF9TVEFURV9SRUcpLCBCRklfSU9DX0lOSVRJTkcpOworCQliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRyksIEJGSV9JT0NfSU5JVElORyk7CisJfQorCisJYmZhX2lvY19kb3dubG9hZF9mdyhpb2MsIGJvb3RfdHlwZSwgYm9vdF9wYXJhbSk7CisKKwkvKioKKwkgKiBFbmFibGUgaW50ZXJydXB0cyBqdXN0IGJlZm9yZSBzdGFydGluZyBMUFUKKwkgKi8KKwlpb2MtPmNiZm4tPnJlc2V0X2NiZm4oaW9jLT5iZmEpOworCWJmYV9pb2NfbHB1X3N0YXJ0KGlvYyk7Cit9CisKKy8qKgorICogRW5hYmxlL2Rpc2FibGUgSU9DIGZhaWx1cmUgYXV0byByZWNvdmVyeS4KKyAqLwordm9pZAorYmZhX2lvY19hdXRvX3JlY292ZXIoYmZhX2Jvb2xlYW5fdCBhdXRvX3JlY292ZXIpCit7CisJYmZhX2F1dG9fcmVjb3ZlciA9IEJGQV9GQUxTRTsKK30KKworCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2lzX29wZXJhdGlvbmFsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlyZXR1cm4gYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX29wKTsKK30KKwordm9pZAorYmZhX2lvY19tc2dnZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICptYm1zZykKK3sKKwl1MzIgICAgICAgKm1zZ3AgPSBtYm1zZzsKKwl1MzIgICAgICAgIHIzMjsKKwlpbnQgICAgICAgICAgICAgaTsKKworCS8qKgorCSAqIHJlYWQgdGhlIE1CT1ggbXNnCisJICovCisJZm9yIChpID0gMDsgaSA8IChzaXplb2YodW5pb24gYmZpX2lvY19pMmhfbXNnX3UpIC8gc2l6ZW9mKHUzMikpOworCSAgICAgaSsrKSB7CisJCXIzMiA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmxwdV9tYm94ICsKKwkJCQkgICBpICogc2l6ZW9mKHUzMikpOworCQltc2dwW2ldID0gYmZhX29zX2h0b25sKHIzMik7CisJfQorCisJLyoqCisJICogdHVybiBvZmYgbWFpbGJveCBpbnRlcnJ1cHQgYnkgY2xlYXJpbmcgbWFpbGJveCBzdGF0dXMKKwkgKi8KKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kLCAxKTsKKwliZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQpOworfQorCit2b2lkCitiZmFfaW9jX2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbSkKK3sKKwl1bmlvbiBiZmlfaW9jX2kyaF9tc2dfdSAqbXNnOworCisJbXNnID0gKHVuaW9uIGJmaV9pb2NfaTJoX21zZ191ICopbTsKKworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfaXNycyk7CisKKwlzd2l0Y2ggKG1zZy0+bWgubXNnX2lkKSB7CisJY2FzZSBCRklfSU9DX0kySF9IQkVBVDoKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0NfSTJIX1JFQURZX0VWRU5UOgorCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JFQURZKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0NfSTJIX0VOQUJMRV9SRVBMWToKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSU1BfRU5BQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0NfSTJIX0RJU0FCTEVfUkVQTFk6CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0ZXUlNQX0RJU0FCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfR0VUQVRUUl9SRVBMWToKKwkJYmZhX2lvY19nZXRhdHRyX3JlcGx5KGlvYyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhpb2MsIG1zZy0+bWgubXNnX2lkKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogSU9DIGF0dGFjaCB0aW1lIGluaXRpYWxpemF0aW9uIGFuZCBzZXR1cC4KKyAqCisgKiBAcGFyYW1baW5dCWlvYwltZW1vcnkgZm9yIElPQworICogQHBhcmFtW2luXQliZmEJZHJpdmVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQHBhcmFtW2luXQl0cmNtb2QJa2VybmVsIHRyYWNlIG1vZHVsZQorICogQHBhcmFtW2luXQlhZW4Ja2VybmVsIGFlbiBldmVudCBtb2R1bGUKKyAqIEBwYXJhbVtpbl0JbG9nbQlrZXJuZWwgbG9nZ2luZyBtb2R1bGUKKyAqLwordm9pZAorYmZhX2lvY19hdHRhY2goc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpiZmEsIHN0cnVjdCBiZmFfaW9jX2NiZm5fcyAqY2JmbiwKKwkgICAgICAgc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqdGltZXJfbW9kLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCSAgICAgICBzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtKQoreworCWlvYy0+YmZhID0gYmZhOworCWlvYy0+Y2JmbiA9IGNiZm47CisJaW9jLT50aW1lcl9tb2QgPSB0aW1lcl9tb2Q7CisJaW9jLT50cmNtb2QgPSB0cmNtb2Q7CisJaW9jLT5hZW4gPSBhZW47CisJaW9jLT5sb2dtID0gbG9nbTsKKwlpb2MtPmZjbW9kZSA9IEJGQV9GQUxTRTsKKwlpb2MtPnBsbGluaXQgPSBCRkFfRkFMU0U7CisJaW9jLT5kYmdfZndzYXZlX29uY2UgPSBCRkFfVFJVRTsKKworCWJmYV9pb2NfbWJveF9hdHRhY2goaW9jKTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5oYl9ub3RpZnlfcSk7CisKKwliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworfQorCisvKioKKyAqIERyaXZlciBkZXRhY2ggdGltZSBJT0MgY2xlYW51cC4KKyAqLwordm9pZAorYmZhX2lvY19kZXRhY2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0RFVEFDSCk7Cit9CisKKy8qKgorICogU2V0dXAgSU9DIFBDSSBwcm9wZXJ0aWVzLgorICoKKyAqIEBwYXJhbVtpbl0JcGNpZGV2CVBDSSBkZXZpY2UgaW5mb3JtYXRpb24gZm9yIHRoaXMgSU9DCisgKi8KK3ZvaWQKK2JmYV9pb2NfcGNpX2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYsCisJCSBlbnVtIGJmaV9tY2xhc3MgbWMpCit7CisJaW9jLT5pb2NfbWMgPSBtYzsKKwlpb2MtPnBjaWRldiA9ICpwY2lkZXY7CisJaW9jLT5jdGRldiA9IChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpOworCWlvYy0+Y25hID0gaW9jLT5jdGRldiAmJiAhaW9jLT5mY21vZGU7CisKKwliZmFfaW9jX21hcF9wb3J0KGlvYyk7CisJYmZhX2lvY19yZWdfaW5pdChpb2MpOworfQorCisvKioKKyAqIEluaXRpYWxpemUgSU9DIGRtYSBtZW1vcnkKKyAqCisgKiBAcGFyYW1baW5dCWRtX2t2YQlrZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIElPQyBkbWEgbWVtb3J5CisgKiBAcGFyYW1baW5dCWRtX3BhCXBoeXNpY2FsIGFkZHJlc3Mgb2YgSU9DIGRtYSBtZW1vcnkKKyAqLwordm9pZAorYmZhX2lvY19tZW1fY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1OCAqZG1fa3ZhLCB1NjQgZG1fcGEpCit7CisJLyoqCisJICogZG1hIG1lbW9yeSBmb3IgZmlybXdhcmUgYXR0cmlidXRlCisJICovCisJaW9jLT5hdHRyX2RtYS5rdmEgPSBkbV9rdmE7CisJaW9jLT5hdHRyX2RtYS5wYSA9IGRtX3BhOworCWlvYy0+YXR0ciA9IChzdHJ1Y3QgYmZpX2lvY19hdHRyX3MgKilkbV9rdmE7Cit9CisKKy8qKgorICogUmV0dXJuIHNpemUgb2YgZG1hIG1lbW9yeSByZXF1aXJlZC4KKyAqLwordTMyCitiZmFfaW9jX21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2F0dHJfcyksIEJGQV9ETUFfQUxJR05fU1opOworfQorCit2b2lkCitiZmFfaW9jX2VuYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19lbmFibGVzKTsKKwlpb2MtPmRiZ19md3NhdmVfb25jZSA9IEJGQV9UUlVFOworCisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRU5BQkxFKTsKK30KKwordm9pZAorYmZhX2lvY19kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2Rpc2FibGVzKTsKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9ESVNBQkxFKTsKK30KKworLyoqCisgKiBSZXR1cm5zIG1lbW9yeSByZXF1aXJlZCBmb3Igc2F2aW5nIGZpcm13YXJlIHRyYWNlIGluIGNhc2Ugb2YgY3Jhc2guCisgKiBEcml2ZXIgbXVzdCBjYWxsIHRoaXMgaW50ZXJmYWNlIHRvIGFsbG9jYXRlIG1lbW9yeSByZXF1aXJlZCBmb3IKKyAqIGF1dG9tYXRpYyBzYXZpbmcgb2YgZmlybXdhcmUgdHJhY2UuIERyaXZlciBzaG91bGQgY2FsbAorICogYmZhX2lvY19kZWJ1Z19tZW1jbGFpbSgpIHJpZ2h0IGFmdGVyIGJmYV9pb2NfYXR0YWNoKCkgdG8gc2V0dXAgdGhpcworICogdHJhY2UgbWVtb3J5LgorICovCitpbnQKK2JmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2Jvb2xlYW5fdCBhdXRvX3JlY292ZXIpCit7CityZXR1cm4gKGF1dG9fcmVjb3ZlcikgPyBCRkFfREJHX0ZXVFJDX0xFTiA6IDA7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBtZW1vcnkgZm9yIHNhdmluZyBmaXJtd2FyZSB0cmFjZS4gRHJpdmVyIG11c3QgaW5pdGlhbGl6ZQorICogdHJhY2UgbWVtb3J5IGJlZm9yZSBjYWxsIGJmYV9pb2NfZW5hYmxlKCkuCisgKi8KK3ZvaWQKK2JmYV9pb2NfZGVidWdfbWVtY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpkYmdfZndzYXZlKQoreworCWJmYV9hc3NlcnQoaW9jLT5hdXRvX3JlY292ZXIpOworCWlvYy0+ZGJnX2Z3c2F2ZSA9IGRiZ19md3NhdmU7CisJaW9jLT5kYmdfZndzYXZlX2xlbiA9IGJmYV9pb2NfZGVidWdfdHJjc3ooaW9jLT5hdXRvX3JlY292ZXIpOworfQorCit1MzIKK2JmYV9pb2Nfc21lbV9wZ251bShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBmbWFkZHIpCit7CisJcmV0dXJuIFBTU19TTUVNX1BHTlVNKGlvYy0+aW9jX3JlZ3Muc21lbV9wZzAsIGZtYWRkcik7Cit9CisKK3UzMgorYmZhX2lvY19zbWVtX3Bnb2ZmKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGZtYWRkcikKK3sKKwlyZXR1cm4gUFNTX1NNRU1fUEdPRkYoZm1hZGRyKTsKK30KKworLyoqCisgKiBSZWdpc3RlciBtYWlsYm94IG1lc3NhZ2UgaGFuZGxlciBmdW5jdGlvbnMKKyAqCisgKiBAcGFyYW1baW5dCWlvYwkJSU9DIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCW1jZnVuY3MJCW1lc3NhZ2UgY2xhc3MgaGFuZGxlciBmdW5jdGlvbnMKKyAqLwordm9pZAorYmZhX2lvY19tYm94X3JlZ2lzdGVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2lvY19tYm94X21jZnVuY190ICptY2Z1bmNzKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCWludCAgICAgICAgICAgICBtYzsKKworCWZvciAobWMgPSAwOyBtYyA8IEJGSV9NQ19NQVg7IG1jKyspCisJCW1vZC0+bWJoZGxyW21jXS5jYmZuID0gbWNmdW5jc1ttY107Cit9CisKKy8qKgorICogUmVnaXN0ZXIgbWFpbGJveCBtZXNzYWdlIGhhbmRsZXIgZnVuY3Rpb24sIHRvIGJlIGNhbGxlZCBieSBjb21tb24gbW9kdWxlcworICovCit2b2lkCitiZmFfaW9jX21ib3hfcmVnaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBiZmlfbWNsYXNzIG1jLAorCQkgICAgYmZhX2lvY19tYm94X21jZnVuY190IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCisJbW9kLT5tYmhkbHJbbWNdLmNiZm4gPSBjYmZuOworCW1vZC0+bWJoZGxyW21jXS5jYmFyZyA9IGNiYXJnOworfQorCisvKioKKyAqIFF1ZXVlIGEgbWFpbGJveCBjb21tYW5kIHJlcXVlc3QgdG8gZmlybXdhcmUuIFdhaXRzIGlmIG1haWxib3ggaXMgYnVzeS4KKyAqIFJlc3BvbnNpYmlsaXR5IG9mIGNhbGxlciB0byBzZXJpYWxpemUKKyAqCisgKiBAcGFyYW1baW5dCWlvYwlJT0MgaW5zdGFuY2UKKyAqIEBwYXJhbVtpXQljbWQJTWFpbGJveCBjb21tYW5kCisgKi8KK3ZvaWQKK2JmYV9pb2NfbWJveF9xdWV1ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmFfbWJveF9jbWRfcyAqY21kKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCXUzMiAgICAgICAgc3RhdDsKKworCS8qKgorCSAqIElmIGEgcHJldmlvdXMgY29tbWFuZCBpcyBwZW5kaW5nLCBxdWV1ZSBuZXcgY29tbWFuZAorCSAqLworCWlmICghbGlzdF9lbXB0eSgmbW9kLT5jbWRfcSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmY21kLT5xZSwgJm1vZC0+Y21kX3EpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogSWYgbWFpbGJveCBpcyBidXN5LCBxdWV1ZSBjb21tYW5kIGZvciBwb2xsIHRpbWVyCisJICovCisJc3RhdCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCk7CisJaWYgKHN0YXQpIHsKKwkJbGlzdF9hZGRfdGFpbCgmY21kLT5xZSwgJm1vZC0+Y21kX3EpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogbWFpbGJveCBpcyBmcmVlIC0tIHF1ZXVlIGNvbW1hbmQgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfaW9jX21ib3hfc2VuZChpb2MsIGNtZC0+bXNnLCBzaXplb2YoY21kLT5tc2cpKTsKK30KKworLyoqCisgKiBIYW5kbGUgbWFpbGJveCBpbnRlcnJ1cHRzCisgKi8KK3ZvaWQKK2JmYV9pb2NfbWJveF9pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCXN0cnVjdCBiZmlfbWJtc2dfcyBtOworCWludCAgICAgICAgICAgICBtYzsKKworCWJmYV9pb2NfbXNnZ2V0KGlvYywgJm0pOworCisJLyoqCisJICogVHJlYXQgSU9DIG1lc3NhZ2UgY2xhc3MgYXMgc3BlY2lhbC4KKwkgKi8KKwltYyA9IG0ubWgubXNnX2NsYXNzOworCWlmIChtYyA9PSBCRklfTUNfSU9DKSB7CisJCWJmYV9pb2NfaXNyKGlvYywgJm0pOworCQlyZXR1cm47CisJfQorCisJaWYgKChtYyA+IEJGSV9NQ19NQVgpIHx8IChtb2QtPm1iaGRsclttY10uY2JmbiA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJbW9kLT5tYmhkbHJbbWNdLmNiZm4obW9kLT5tYmhkbHJbbWNdLmNiYXJnLCAmbSk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfZXJyb3JfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9IV0VSUk9SKTsKK30KKworI2lmbmRlZiBCRkFfQklPU19CVUlMRAorCisvKioKKyAqIHJldHVybiB0cnVlIGlmIElPQyBpcyBkaXNhYmxlZAorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlyZXR1cm4gKGJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxpbmcpCisJCXx8IGJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCkpOworfQorCisvKioKKyAqIHJldHVybiB0cnVlIGlmIElPQyBmaXJtd2FyZSBpcyBkaWZmZXJlbnQuCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfZndfbWlzbWF0Y2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiAoYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KQorCQl8fCBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZndjaGVjaykKKwkJfHwgYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX21pc21hdGNoKSk7Cit9CisKKyNkZWZpbmUgYmZhX2lvY19zdGF0ZV9kaXNhYmxlZChfX3NtKQkJXAorCSgoKF9fc20pID09IEJGSV9JT0NfVU5JTklUKSB8fAkJXAorCSAoKF9fc20pID09IEJGSV9JT0NfSU5JVElORykgfHwJCVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0hXSU5JVCkgfHwJCVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0RJU0FCTEVEKSB8fAlcCisJICgoX19zbSkgPT0gQkZJX0lPQ19IQkZBSUwpIHx8CQlcCisJICgoX19zbSkgPT0gQkZJX0lPQ19DRkdfRElTQUJMRUQpKQorCisvKioKKyAqIENoZWNrIGlmIGFkYXB0ZXIgaXMgZGlzYWJsZWQgLS0gYm90aCBJT0NzIHNob3VsZCBiZSBpbiBhIGRpc2FibGVkCisgKiBzdGF0ZS4KKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19hZGFwdGVyX2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIGlvY19zdGF0ZTsKKwliZmFfb3NfYWRkcl90ICAgcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKworCWlmICghYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCWlvY19zdGF0ZSA9IGJmYV9yZWdfcmVhZChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRyk7CisJaWYgKCFiZmFfaW9jX3N0YXRlX2Rpc2FibGVkKGlvY19zdGF0ZSkpCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwlpb2Nfc3RhdGUgPSBiZmFfcmVnX3JlYWQocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpOworCWlmICghYmZhX2lvY19zdGF0ZV9kaXNhYmxlZChpb2Nfc3RhdGUpKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIEFkZCB0byBJT0MgaGVhcnRiZWF0IGZhaWx1cmUgbm90aWZpY2F0aW9uIHF1ZXVlLiBUbyBiZSB1c2VkIGJ5IGNvbW1vbgorICogbW9kdWxlcyBzdWNoIGFzCisgKi8KK3ZvaWQKK2JmYV9pb2NfaGJmYWlsX3JlZ2lzdGVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKKwkJCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqbm90aWZ5KQoreworCWxpc3RfYWRkX3RhaWwoJm5vdGlmeS0+cWUsICZpb2MtPmhiX25vdGlmeV9xKTsKK30KKworI2RlZmluZSBCRkFfTUZHX05BTUUgIkJyb2NhZGUiCit2b2lkCitiZmFfaW9jX2dldF9hZGFwdGVyX2F0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCQkJIHN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpCit7CisJc3RydWN0IGJmaV9pb2NfYXR0cl9zICppb2NfYXR0cjsKKwljaGFyICAgICAgICAgICAgbW9kZWxbQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU5dOworCisJaW9jX2F0dHIgPSBpb2MtPmF0dHI7CisJYmZhX29zX21lbWNweSgodm9pZCAqKSZhZF9hdHRyLT5zZXJpYWxfbnVtLAorCQkgICAgICAodm9pZCAqKWlvY19hdHRyLT5icmNkX3NlcmlhbG51bSwKKwkJICAgICAgQkZBX0FEQVBURVJfU0VSSUFMX05VTV9MRU4pOworCisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+ZndfdmVyLCBpb2NfYXR0ci0+ZndfdmVyc2lvbiwgQkZBX1ZFUlNJT05fTEVOKTsKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5vcHRyb21fdmVyLCBpb2NfYXR0ci0+b3B0cm9tX3ZlcnNpb24sCisJCSAgICAgIEJGQV9WRVJTSU9OX0xFTik7CisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+bWFudWZhY3R1cmVyLCBCRkFfTUZHX05BTUUsCisJCSAgICAgIEJGQV9BREFQVEVSX01GR19OQU1FX0xFTik7CisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+dnBkLCAmaW9jX2F0dHItPnZwZCwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfbWZnX3ZwZF9zKSk7CisKKwlhZF9hdHRyLT5ucG9ydHMgPSBCRklfQURBUFRFUl9HRVRQKE5QT1JUUywgaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCk7CisJYWRfYXR0ci0+bWF4X3NwZWVkID0gQkZJX0FEQVBURVJfR0VUUChTUEVFRCwgaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCk7CisKKwkvKioKKwkgKiBtb2RlbCBuYW1lCisJICovCisJaWYgKEJGSV9BREFQVEVSX0dFVFAoU1BFRUQsIGlvY19hdHRyLT5hZGFwdGVyX3Byb3ApID09IDEwKSB7CisJCXN0cmNweShtb2RlbCwgIkJSLTEwPzAiKTsKKwkJbW9kZWxbNV0gPSAnMCcgKyBhZF9hdHRyLT5ucG9ydHM7CisJfSBlbHNlIHsKKwkJc3RyY3B5KG1vZGVsLCAiQnJvY2FkZS0/PzUiKTsKKwkJbW9kZWxbOF0gPQorCQkJJzAnICsgQkZJX0FEQVBURVJfR0VUUChTUEVFRCwgaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCk7CisJCW1vZGVsWzldID0gJzAnICsgYWRfYXR0ci0+bnBvcnRzOworCX0KKworCWlmIChCRklfQURBUFRFUl9JU19TUEVDSUFMKGlvY19hdHRyLT5hZGFwdGVyX3Byb3ApKQorCQlhZF9hdHRyLT5wcm90b3R5cGUgPSAxOworCWVsc2UKKwkJYWRfYXR0ci0+cHJvdG90eXBlID0gMDsKKworCWJmYV9vc19tZW1jcHkoJmFkX2F0dHItPm1vZGVsLCBtb2RlbCwgQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU4pOworCWJmYV9vc19tZW1jcHkoJmFkX2F0dHItPm1vZGVsX2Rlc2NyLCAmYWRfYXR0ci0+bW9kZWwsCisJCSAgICAgIEJGQV9BREFQVEVSX01PREVMX05BTUVfTEVOKTsKKworCWFkX2F0dHItPnB3d24gPSBiZmFfaW9jX2dldF9wd3duKGlvYyk7CisJYWRfYXR0ci0+bWFjID0gYmZhX2lvY19nZXRfbWFjKGlvYyk7CisKKwlhZF9hdHRyLT5wY2llX2dlbiA9IGlvY19hdHRyLT5wY2llX2dlbjsKKwlhZF9hdHRyLT5wY2llX2xhbmVzID0gaW9jX2F0dHItPnBjaWVfbGFuZXM7CisJYWRfYXR0ci0+cGNpZV9sYW5lc19vcmlnID0gaW9jX2F0dHItPnBjaWVfbGFuZXNfb3JpZzsKKwlhZF9hdHRyLT5hc2ljX3JldiA9IGlvY19hdHRyLT5hc2ljX3JldjsKKwlhZF9hdHRyLT5od192ZXJbMF0gPSAnUic7CisJYWRfYXR0ci0+aHdfdmVyWzFdID0gJ2UnOworCWFkX2F0dHItPmh3X3ZlclsyXSA9ICd2JzsKKwlhZF9hdHRyLT5od192ZXJbM10gPSAnLSc7CisJYWRfYXR0ci0+aHdfdmVyWzRdID0gaW9jX2F0dHItPmFzaWNfcmV2OworCWFkX2F0dHItPmh3X3Zlcls1XSA9ICdcMCc7CisKKwlhZF9hdHRyLT5jbmFfY2FwYWJsZSA9IGlvYy0+Y25hOworfQorCit2b2lkCitiZmFfaW9jX2dldF9hdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9pb2NfYXR0cl9zICppb2NfYXR0cikKK3sKKwliZmFfb3NfbWVtc2V0KCh2b2lkICopaW9jX2F0dHIsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2lvY19hdHRyX3MpKTsKKworCWlvY19hdHRyLT5zdGF0ZSA9IGJmYV9zbV90b19zdGF0ZShpb2Nfc21fdGFibGUsIGlvYy0+ZnNtKTsKKwlpb2NfYXR0ci0+cG9ydF9pZCA9IGlvYy0+cG9ydF9pZDsKKworCWlmICghaW9jLT5jdGRldikKKwkJaW9jX2F0dHItPmlvY190eXBlID0gQkZBX0lPQ19UWVBFX0ZDOworCWVsc2UgaWYgKGlvYy0+aW9jX21jID09IEJGSV9NQ19JT0NGQykKKwkJaW9jX2F0dHItPmlvY190eXBlID0gQkZBX0lPQ19UWVBFX0ZDb0U7CisJZWxzZSBpZiAoaW9jLT5pb2NfbWMgPT0gQkZJX01DX0xMKQorCQlpb2NfYXR0ci0+aW9jX3R5cGUgPSBCRkFfSU9DX1RZUEVfTEw7CisKKwliZmFfaW9jX2dldF9hZGFwdGVyX2F0dHIoaW9jLCAmaW9jX2F0dHItPmFkYXB0ZXJfYXR0cik7CisKKwlpb2NfYXR0ci0+cGNpX2F0dHIuZGV2aWNlX2lkID0gaW9jLT5wY2lkZXYuZGV2aWNlX2lkOworCWlvY19hdHRyLT5wY2lfYXR0ci5wY2lmbiA9IGlvYy0+cGNpZGV2LnBjaV9mdW5jOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3JldlswXSA9ICdSJzsKKwlpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXZbMV0gPSAnZSc7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzJdID0gJ3YnOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3JldlszXSA9ICctJzsKKwlpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXZbNF0gPSBpb2NfYXR0ci0+YWRhcHRlcl9hdHRyLmFzaWNfcmV2OworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3Jldls1XSA9ICdcMCc7Cit9CisKKy8qKgorICogIGhhbF93d25fcHVibGljCisgKi8KK3d3bl90CitiZmFfaW9jX2dldF9wd3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1bmlvbiB7CisJCXd3bl90ICAgICAgICAgICB3d247CisJCXU4ICAgICAgICAgYnl0ZVtzaXplb2Yod3duX3QpXTsKKwl9CisJdzsKKworCXcud3duID0gaW9jLT5hdHRyLT5tZmdfd3duOworCisJaWYgKGJmYV9pb2NfcG9ydGlkKGlvYykgPT0gMSkKKwkJdy5ieXRlWzddKys7CisKKwlyZXR1cm4gdy53d247Cit9CisKK3d3bl90CitiZmFfaW9jX2dldF9ud3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1bmlvbiB7CisJCXd3bl90ICAgICAgICAgICB3d247CisJCXU4ICAgICAgICAgYnl0ZVtzaXplb2Yod3duX3QpXTsKKwl9CisJdzsKKworCXcud3duID0gaW9jLT5hdHRyLT5tZmdfd3duOworCisJaWYgKGJmYV9pb2NfcG9ydGlkKGlvYykgPT0gMSkKKwkJdy5ieXRlWzddKys7CisKKwl3LmJ5dGVbMF0gPSAweDIwOworCisJcmV0dXJuIHcud3duOworfQorCit3d25fdAorYmZhX2lvY19nZXRfd3duX25hYTUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MTYgaW5zdCkKK3sKKwl1bmlvbiB7CisJCXd3bl90ICAgICAgICAgICB3d247CisJCXU4ICAgICAgICAgYnl0ZVtzaXplb2Yod3duX3QpXTsKKwl9CisJdyAgICAgICAgICAgICAgLCB3NTsKKworCWJmYV90cmMoaW9jLCBpbnN0KTsKKworCXcud3duID0gaW9jLT5hdHRyLT5tZmdfd3duOworCXc1LmJ5dGVbMF0gPSAweDUwIHwgdy5ieXRlWzJdID4+IDQ7CisJdzUuYnl0ZVsxXSA9IHcuYnl0ZVsyXSA8PCA0IHwgdy5ieXRlWzNdID4+IDQ7CisJdzUuYnl0ZVsyXSA9IHcuYnl0ZVszXSA8PCA0IHwgdy5ieXRlWzRdID4+IDQ7CisJdzUuYnl0ZVszXSA9IHcuYnl0ZVs0XSA8PCA0IHwgdy5ieXRlWzVdID4+IDQ7CisJdzUuYnl0ZVs0XSA9IHcuYnl0ZVs1XSA8PCA0IHwgdy5ieXRlWzZdID4+IDQ7CisJdzUuYnl0ZVs1XSA9IHcuYnl0ZVs2XSA8PCA0IHwgdy5ieXRlWzddID4+IDQ7CisJdzUuYnl0ZVs2XSA9IHcuYnl0ZVs3XSA8PCA0IHwgKGluc3QgJiAweDBmMDApID4+IDg7CisJdzUuYnl0ZVs3XSA9IChpbnN0ICYgMHhmZik7CisKKwlyZXR1cm4gdzUud3duOworfQorCit1NjQKK2JmYV9pb2NfZ2V0X2FkaWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiBpb2MtPmF0dHItPm1mZ193d247Cit9CisKK21hY190CitiZmFfaW9jX2dldF9tYWMoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCW1hY190ICAgICAgICAgICBtYWM7CisKKwltYWMgPSBpb2MtPmF0dHItPm1mZ19tYWM7CisJbWFjLm1hY1tNQUNfQUREUkxFTiAtIDFdICs9IGJmYV9pb2NfcGNpZm4oaW9jKTsKKworCXJldHVybiBtYWM7Cit9CisKK3ZvaWQKK2JmYV9pb2Nfc2V0X2ZjbW9kZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaW9jLT5mY21vZGUgPSBCRkFfVFJVRTsKKwlpb2MtPnBvcnRfaWQgPSBiZmFfaW9jX3BjaWZuKGlvYyk7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfZ2V0X2ZjbW9kZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIGlvYy0+ZmNtb2RlIHx8IChpb2MtPnBjaWRldi5kZXZpY2VfaWQgIT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpOworfQorCisvKioKKyAqIFJldHVybiB0cnVlIGlmIGludGVycnVwdCBzaG91bGQgYmUgY2xhaW1lZC4KKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19pbnR4X2NsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIGlzciwgbXNrOworCisJLyoqCisJICogQWx3YXlzIGNsYWltIGlmIG5vdCBjYXRhcHVsdC4KKwkgKi8KKwlpZiAoIWlvYy0+Y3RkZXYpCisJCXJldHVybiBCRkFfVFJVRTsKKworCS8qKgorCSAqIEZBTFNFIGlmIG5leHQgZGV2aWNlIGlzIGNsYWltaW5nIGludGVycnVwdC4KKwkgKiBUUlVFIGlmIG5leHQgZGV2aWNlIGlzIG5vdCBpbnRlcnJ1cHRpbmcgb3Igbm90IHByZXNlbnQuCisJICovCisJbXNrID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3Muc2hpcnFfbXNrX25leHQpOworCWlzciA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnNoaXJxX2lzcl9uZXh0KTsKKwlyZXR1cm4gIShpc3IgJiB+bXNrKTsKK30KKworLyoqCisgKiBTZW5kIEFFTiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfYWVuX3Bvc3Qoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmYV9pb2NfYWVuX2V2ZW50IGV2ZW50KQoreworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBpb2MtPmxvZ207CisJczMyICAgICAgICAgaW5zdF9udW0gPSAwOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyBpb2NfYXR0cjsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0NfQUVOX0hCR09PRDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fSU9DX0hCR09PRCwgaW5zdF9udW0pOworCQlicmVhazsKKwljYXNlIEJGQV9JT0NfQUVOX0hCRkFJTDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fSU9DX0hCRkFJTCwgaW5zdF9udW0pOworCQlicmVhazsKKwljYXNlIEJGQV9JT0NfQUVOX0VOQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fSU9DX0VOQUJMRSwgaW5zdF9udW0pOworCQlicmVhazsKKwljYXNlIEJGQV9JT0NfQUVOX0RJU0FCTEU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lPQ19ESVNBQkxFLCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fRldNSVNNQVRDSDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fSU9DX0ZXTUlTTUFUQ0gsIGluc3RfbnVtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbWVtc2V0KCZhZW5fZGF0YS5pb2MucHd3biwgMCwgc2l6ZW9mKGFlbl9kYXRhLmlvYy5wd3duKSk7CisJbWVtc2V0KCZhZW5fZGF0YS5pb2MubWFjLCAwLCBzaXplb2YoYWVuX2RhdGEuaW9jLm1hYykpOworCWJmYV9pb2NfZ2V0X2F0dHIoaW9jLCAmaW9jX2F0dHIpOworCXN3aXRjaCAoaW9jX2F0dHIuaW9jX3R5cGUpIHsKKwljYXNlIEJGQV9JT0NfVFlQRV9GQzoKKwkJYWVuX2RhdGEuaW9jLnB3d24gPSBiZmFfaW9jX2dldF9wd3duKGlvYyk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19UWVBFX0ZDb0U6CisJCWFlbl9kYXRhLmlvYy5wd3duID0gYmZhX2lvY19nZXRfcHd3bihpb2MpOworCQlhZW5fZGF0YS5pb2MubWFjID0gYmZhX2lvY19nZXRfbWFjKGlvYyk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19UWVBFX0xMOgorCQlhZW5fZGF0YS5pb2MubWFjID0gYmZhX2lvY19nZXRfbWFjKGlvYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoaW9jX2F0dHIuaW9jX3R5cGUgPT0gQkZBX0lPQ19UWVBFX0ZDKTsKKwkJYnJlYWs7CisJfQorCWFlbl9kYXRhLmlvYy5pb2NfdHlwZSA9IGlvY19hdHRyLmlvY190eXBlOworfQorCisvKioKKyAqIFJldHJpZXZlIHNhdmVkIGZpcm13YXJlIHRyYWNlIGZyb20gYSBwcmlvciBJT0MgZmFpbHVyZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfaW9jX2RlYnVnX2Z3c2F2ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKQoreworCWludCAgICAgICAgICAgICB0bGVuOworCisJaWYgKGlvYy0+ZGJnX2Z3c2F2ZV9sZW4gPT0gMCkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRU5PRlNBVkU7CisKKwl0bGVuID0gKnRyY2xlbjsKKwlpZiAodGxlbiA+IGlvYy0+ZGJnX2Z3c2F2ZV9sZW4pCisJCXRsZW4gPSBpb2MtPmRiZ19md3NhdmVfbGVuOworCisJYmZhX29zX21lbWNweSh0cmNkYXRhLCBpb2MtPmRiZ19md3NhdmUsIHRsZW4pOworCSp0cmNsZW4gPSB0bGVuOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIFJldHJpZXZlIHNhdmVkIGZpcm13YXJlIHRyYWNlIGZyb20gYSBwcmlvciBJT0MgZmFpbHVyZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfaW9jX2RlYnVnX2Z3dHJjKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pCit7CisJdTMyICAgICAgICBwZ251bTsKKwl1MzIgICAgICAgIGxvZmYgPSBCRkFfREJHX0ZXVFJDX09GRihiZmFfaW9jX3BvcnRpZChpb2MpKTsKKwlpbnQgICAgICAgICAgICAgaSwgdGxlbjsKKwl1MzIgICAgICAgKnRidWYgPSB0cmNkYXRhLCByMzI7CisKKwliZmFfdHJjKGlvYywgKnRyY2xlbik7CisKKwlwZ251bSA9IGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIGxvZmYpOworCWxvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCisJdGxlbiA9ICp0cmNsZW47CisJaWYgKHRsZW4gPiBCRkFfREJHX0ZXVFJDX0xFTikKKwkJdGxlbiA9IEJGQV9EQkdfRldUUkNfTEVOOworCXRsZW4gLz0gc2l6ZW9mKHUzMik7CisKKwliZmFfdHJjKGlvYywgdGxlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGxlbjsgaSsrKSB7CisJCXIzMiA9IGJmYV9tZW1fcmVhZChpb2MtPmlvY19yZWdzLnNtZW1fcGFnZV9zdGFydCwgbG9mZik7CisJCXRidWZbaV0gPSBiZmFfb3NfbnRvaGwocjMyKTsKKwkJbG9mZiArPSBzaXplb2YodTMyKTsKKworCQkvKioKKwkJICogaGFuZGxlIHBhZ2Ugb2Zmc2V0IHdyYXAgYXJvdW5kCisJCSAqLworCQlsb2ZmID0gUFNTX1NNRU1fUEdPRkYobG9mZik7CisJCWlmIChsb2ZmID09IDApIHsKKwkJCXBnbnVtKys7CisJCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCQl9CisJfQorCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLAorCQkgICAgICBiZmFfaW9jX3NtZW1fcGdudW0oaW9jLCAwKSk7CisJYmZhX3RyYyhpb2MsIHBnbnVtKTsKKworCSp0cmNsZW4gPSB0bGVuICogc2l6ZW9mKHUzMik7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogU2F2ZSBmaXJtd2FyZSB0cmFjZSBpZiBjb25maWd1cmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19kZWJ1Z19zYXZlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpbnQgICAgICAgICAgICAgdGxlbjsKKworCWlmIChpb2MtPmRiZ19md3NhdmVfbGVuKSB7CisJCXRsZW4gPSBpb2MtPmRiZ19md3NhdmVfbGVuOworCQliZmFfaW9jX2RlYnVnX2Z3dHJjKGlvYywgaW9jLT5kYmdfZndzYXZlLCAmdGxlbik7CisJfQorfQorCisvKioKKyAqIEZpcm13YXJlIGZhaWx1cmUgZGV0ZWN0ZWQuIFN0YXJ0IHJlY292ZXJ5IGFjdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3JlY292ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlmIChpb2MtPmRiZ19md3NhdmVfb25jZSkgeworCQlpb2MtPmRiZ19md3NhdmVfb25jZSA9IEJGQV9GQUxTRTsKKwkJYmZhX2lvY19kZWJ1Z19zYXZlKGlvYyk7CisJfQorCisJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19oYmZhaWxzKTsKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9IQkZBSUwpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19hZW5fcG9zdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gYmZhX2lvY19hZW5fZXZlbnQgZXZlbnQpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3JlY292ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9hc3NlcnQoMCk7Cit9CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfSU9DX0hfXworI2RlZmluZSBfX0JGQV9JT0NfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9pb2MuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2Jvb3QuaD4KKyNpbmNsdWRlIDxiZmFfdGltZXIuaD4KKworLyoqCisgKiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHJlcXVpcmVkIGJ5IElPQworICovCitzdHJ1Y3QgYmZhX3BjaWRldl9zIHsKKwlpbnQgICAgICAgICAgICAgcGNpX3Nsb3Q7CisJdTggICAgICAgICBwY2lfZnVuYzsKKwl1MTYJZGV2aWNlX2lkOworCWJmYV9vc19hZGRyX3QgICBwY2lfYmFyX2t2YTsKK307CisKKy8qKgorICogU3RydWN0dXJlIHVzZWQgdG8gcmVtZW1iZXIgdGhlIERNQS1hYmxlIG1lbW9yeSBibG9jaydzIEtWQSBhbmQgUGh5c2ljYWwKKyAqIEFkZHJlc3MKKyAqLworc3RydWN0IGJmYV9kbWFfcyB7CisJdm9pZAkJKmt2YTsJLyohIEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MJKi8KKwl1NjQJcGE7CS8qISBQaHlzaWNhbCBhZGRyZXNzCQkqLworfTsKKworI2RlZmluZSBCRkFfRE1BX0FMSUdOX1NaCTI1NgorI2RlZmluZSBCRkFfUk9VTkRVUChfbCwgX3MpCSgoKF9sKSArICgoX3MpIC0gMSkpICYgfigoX3MpIC0gMSkpCisKKworCisjZGVmaW5lIGJmYV9kbWFfYWRkcl9zZXQoZG1hX2FkZHIsIHBhKQlcCisJCV9fYmZhX2RtYV9hZGRyX3NldCgmZG1hX2FkZHIsICh1NjQpcGEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19iZmFfZG1hX2FkZHJfc2V0KHVuaW9uIGJmaV9hZGRyX3UgKmRtYV9hZGRyLCB1NjQgcGEpCit7CisJZG1hX2FkZHItPmEzMi5hZGRyX2xvID0gKHUzMikgcGE7CisJZG1hX2FkZHItPmEzMi5hZGRyX2hpID0gKHUzMikgKGJmYV9vc191MzIocGEpKTsKK30KKworCisjZGVmaW5lIGJmYV9kbWFfYmVfYWRkcl9zZXQoZG1hX2FkZHIsIHBhKQlcCisJCV9fYmZhX2RtYV9iZV9hZGRyX3NldCgmZG1hX2FkZHIsICh1NjQpcGEpCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYmZhX2RtYV9iZV9hZGRyX3NldCh1bmlvbiBiZmlfYWRkcl91ICpkbWFfYWRkciwgdTY0IHBhKQoreworCWRtYV9hZGRyLT5hMzIuYWRkcl9sbyA9ICh1MzIpIGJmYV9vc19odG9ubChwYSk7CisJZG1hX2FkZHItPmEzMi5hZGRyX2hpID0gKHUzMikgYmZhX29zX2h0b25sKGJmYV9vc191MzIocGEpKTsKK30KKworc3RydWN0IGJmYV9pb2NfcmVnc19zIHsKKwliZmFfb3NfYWRkcl90ICAgaGZuX21ib3hfY21kOworCWJmYV9vc19hZGRyX3QgICBoZm5fbWJveDsKKwliZmFfb3NfYWRkcl90ICAgbHB1X21ib3hfY21kOworCWJmYV9vc19hZGRyX3QgICBscHVfbWJveDsKKwliZmFfb3NfYWRkcl90ICAgcHNzX2N0bF9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGFwcF9wbGxfZmFzdF9jdGxfcmVnOworCWJmYV9vc19hZGRyX3QgICBhcHBfcGxsX3Nsb3dfY3RsX3JlZzsKKwliZmFfb3NfYWRkcl90ICAgaW9jX3NlbV9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGlvY191c2FnZV9zZW1fcmVnOworCWJmYV9vc19hZGRyX3QgICBpb2NfdXNhZ2VfcmVnOworCWJmYV9vc19hZGRyX3QgICBob3N0X3BhZ2VfbnVtX2ZuOworCWJmYV9vc19hZGRyX3QgICBoZWFydGJlYXQ7CisJYmZhX29zX2FkZHJfdCAgIGlvY19md3N0YXRlOworCWJmYV9vc19hZGRyX3QgICBsbF9oYWx0OworCWJmYV9vc19hZGRyX3QgICBzaGlycV9pc3JfbmV4dDsKKwliZmFfb3NfYWRkcl90ICAgc2hpcnFfbXNrX25leHQ7CisJYmZhX29zX2FkZHJfdCAgIHNtZW1fcGFnZV9zdGFydDsKKwl1MzIJc21lbV9wZzA7Cit9OworCisjZGVmaW5lIGJmYV9yZWdfcmVhZChfcmFkZHIpCWJmYV9vc19yZWdfcmVhZChfcmFkZHIpCisjZGVmaW5lIGJmYV9yZWdfd3JpdGUoX3JhZGRyLCBfdmFsKQliZmFfb3NfcmVnX3dyaXRlKF9yYWRkciwgX3ZhbCkKKyNkZWZpbmUgYmZhX21lbV9yZWFkKF9yYWRkciwgX29mZikJYmZhX29zX21lbV9yZWFkKF9yYWRkciwgX29mZikKKyNkZWZpbmUgYmZhX21lbV93cml0ZShfcmFkZHIsIF9vZmYsIF92YWwpCVwKKwkJCQkJYmZhX29zX21lbV93cml0ZShfcmFkZHIsIF9vZmYsIF92YWwpCisvKioKKyAqIElPQyBNYWlsYm94IHN0cnVjdHVyZXMKKyAqLworc3RydWN0IGJmYV9tYm94X2NtZF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxZTsKKwl1MzIJbXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworLyoqCisgKiBJT0MgbWFpbGJveCBtb2R1bGUKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2lvY19tYm94X21jZnVuY190KSh2b2lkICpjYmFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKTsKK3N0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJY21kX3E7CQkvKiAgcGVuZGluZyBtYm94IHF1ZXVlCSovCisJaW50CQlubWNsYXNzOwkvKiAgbnVtYmVyIG9mIGhhbmRsZXJzICovCisJc3RydWN0IHsKKwkJYmZhX2lvY19tYm94X21jZnVuY190CWNiZm47CS8qICBtZXNzYWdlIGhhbmRsZXJzCSovCisJCXZvaWQJCQkqY2Jhcmc7CisJfSBtYmhkbHJbQkZJX01DX01BWF07Cit9OworCisvKioKKyAqIElPQyBjYWxsYmFjayBmdW5jdGlvbiBpbnRlcmZhY2VzCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfZW5hYmxlX2NiZm5fdCkodm9pZCAqYmZhLCBlbnVtIGJmYV9zdGF0dXMgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfZGlzYWJsZV9jYmZuX3QpKHZvaWQgKmJmYSk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX2hiZmFpbF9jYmZuX3QpKHZvaWQgKmJmYSk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX3Jlc2V0X2NiZm5fdCkodm9pZCAqYmZhKTsKK3N0cnVjdCBiZmFfaW9jX2NiZm5fcyB7CisJYmZhX2lvY19lbmFibGVfY2Jmbl90CWVuYWJsZV9jYmZuOworCWJmYV9pb2NfZGlzYWJsZV9jYmZuX3QJZGlzYWJsZV9jYmZuOworCWJmYV9pb2NfaGJmYWlsX2NiZm5fdAloYmZhaWxfY2JmbjsKKwliZmFfaW9jX3Jlc2V0X2NiZm5fdAlyZXNldF9jYmZuOworfTsKKworLyoqCisgKiBIZWFydGJlYXQgZmFpbHVyZSBub3RpZmljYXRpb24gcXVldWUgZWxlbWVudC4KKyAqLworc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxZTsKKwliZmFfaW9jX2hiZmFpbF9jYmZuX3QJY2JmbjsKKwl2b2lkCQkJKmNiYXJnOworfTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgaGVhcnRiZWF0IGZhaWx1cmUgbm90aWZpY2F0aW9uIHN0cnVjdHVyZQorICovCisjZGVmaW5lIGJmYV9pb2NfaGJmYWlsX2luaXQoX19ub3RpZnksIF9fY2JmbiwgX19jYmFyZykgZG8gewlcCisJKF9fbm90aWZ5KS0+Y2JmbiA9IChfX2NiZm4pOyAgICAgIFwKKwkoX19ub3RpZnkpLT5jYmFyZyA9IChfX2NiYXJnKTsgICAgICBcCit9IHdoaWxlICgwKQorCitzdHJ1Y3QgYmZhX2lvY19zIHsKKwliZmFfZnNtX3QJCWZzbTsKKwlzdHJ1Y3QgYmZhX3MJCSpiZmE7CisJc3RydWN0IGJmYV9wY2lkZXZfcwlwY2lkZXY7CisJc3RydWN0IGJmYV90aW1lcl9tb2RfcyAJKnRpbWVyX21vZDsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCWlvY190aW1lcjsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXNlbV90aW1lcjsKKwl1MzIJCWhiX2NvdW50OworCXUzMgkJaGJfZmFpbDsKKwl1MzIJCXJldHJ5X2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJCWhiX25vdGlmeV9xOworCXZvaWQJCQkqZGJnX2Z3c2F2ZTsKKwlpbnQJCQlkYmdfZndzYXZlX2xlbjsKKwliZmFfYm9vbGVhbl90CQlkYmdfZndzYXZlX29uY2U7CisJZW51bSBiZmlfbWNsYXNzCQlpb2NfbWM7CisJc3RydWN0IGJmYV9pb2NfcmVnc19zIAlpb2NfcmVnczsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcwkqdHJjbW9kOworCXN0cnVjdCBiZmFfYWVuX3MJKmFlbjsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcwkqbG9nbTsKKwlzdHJ1Y3QgYmZhX2lvY19kcnZfc3RhdHNfcwlzdGF0czsKKwliZmFfYm9vbGVhbl90CQlhdXRvX3JlY292ZXI7CisJYmZhX2Jvb2xlYW5fdAkJZmNtb2RlOworCWJmYV9ib29sZWFuX3QJCWN0ZGV2OworCWJmYV9ib29sZWFuX3QJCWNuYTsKKwliZmFfYm9vbGVhbl90CQlwbGxpbml0OworCXU4CQkJcG9ydF9pZDsKKworCXN0cnVjdCBiZmFfZG1hX3MJYXR0cl9kbWE7CisJc3RydWN0IGJmaV9pb2NfYXR0cl9zCSphdHRyOworCXN0cnVjdCBiZmFfaW9jX2NiZm5fcwkqY2JmbjsKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zIG1ib3hfbW9kOworfTsKKworI2RlZmluZSBiZmFfaW9jX3BjaWZuKF9faW9jKQkJKF9faW9jKS0+cGNpZGV2LnBjaV9mdW5jCisjZGVmaW5lIGJmYV9pb2NfZGV2aWQoX19pb2MpCQkoX19pb2MpLT5wY2lkZXYuZGV2aWNlX2lkCisjZGVmaW5lIGJmYV9pb2NfYmFyMChfX2lvYykJCShfX2lvYyktPnBjaWRldi5wY2lfYmFyX2t2YQorI2RlZmluZSBiZmFfaW9jX3BvcnRpZChfX2lvYykJCSgoX19pb2MpLT5wb3J0X2lkKQorI2RlZmluZSBiZmFfaW9jX2ZldGNoX3N0YXRzKF9faW9jLCBfX3N0YXRzKSBcCisJCSgoX19zdGF0cyktPmRydl9zdGF0cykgPSAoX19pb2MpLT5zdGF0cworI2RlZmluZSBiZmFfaW9jX2Nscl9zdGF0cyhfX2lvYykJXAorCQliZmFfb3NfbWVtc2V0KCYoX19pb2MpLT5zdGF0cywgMCwgc2l6ZW9mKChfX2lvYyktPnN0YXRzKSkKKyNkZWZpbmUgYmZhX2lvY19tYXhmcnNpemUoX19pb2MpCShfX2lvYyktPmF0dHItPm1heGZyc2l6ZQorI2RlZmluZSBiZmFfaW9jX3J4X2JiY3JlZGl0KF9faW9jKQkoX19pb2MpLT5hdHRyLT5yeF9iYmNyZWRpdAorI2RlZmluZSBiZmFfaW9jX3NwZWVkX3N1cChfX2lvYykJXAorCUJGSV9BREFQVEVSX0dFVFAoU1BFRUQsIChfX2lvYyktPmF0dHItPmFkYXB0ZXJfcHJvcCkKKworLyoqCisgKiBJT0MgbWFpbGJveCBpbnRlcmZhY2UKKyAqLwordm9pZCBiZmFfaW9jX21ib3hfcXVldWUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX21ib3hfY21kX3MgKmNtZCk7Cit2b2lkIGJmYV9pb2NfbWJveF9yZWdpc3RlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCWJmYV9pb2NfbWJveF9tY2Z1bmNfdCAqbWNmdW5jcyk7Cit2b2lkIGJmYV9pb2NfbWJveF9pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19tYm94X3NlbmQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICppb2NfbXNnLCBpbnQgbGVuKTsKK3ZvaWQgYmZhX2lvY19tc2dnZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICptYm1zZyk7Cit2b2lkIGJmYV9pb2NfbWJveF9yZWdpc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmaV9tY2xhc3MgbWMsCisJCWJmYV9pb2NfbWJveF9tY2Z1bmNfdCBjYmZuLCB2b2lkICpjYmFyZyk7CisKKy8qKgorICogSU9DIGludGVyZmFjZXMKKyAqLwordm9pZCBiZmFfaW9jX2F0dGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmJmYSwKKwkJc3RydWN0IGJmYV9pb2NfY2Jmbl9zICpjYmZuLCBzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICp0aW1lcl9tb2QsCisJCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJCXN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20pOwordm9pZCBiZmFfaW9jX2RldGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX3BjaV9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2LAorCQllbnVtIGJmaV9tY2xhc3MgbWMpOwordTMyIGJmYV9pb2NfbWVtaW5mbyh2b2lkKTsKK3ZvaWQgYmZhX2lvY19tZW1fY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCAgdTggKmRtX2t2YSwgdTY0IGRtX3BhKTsKK3ZvaWQgYmZhX2lvY19lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfaW50eF9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworCit2b2lkIGJmYV9pb2NfYm9vdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBib290X3R5cGUsIHUzMiBib290X3BhcmFtKTsKK3ZvaWQgYmZhX2lvY19pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm1zZyk7Cit2b2lkIGJmYV9pb2NfZXJyb3JfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBpbnR4KTsKK2JmYV9zdGF0dXNfdCBiZmFfaW9jX3BsbF9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY19pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2Z3X21pc21hdGNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfYWRhcHRlcl9pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2NmZ19jb21wbGV0ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2dldF9hdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9pb2NfYXR0cl9zICppb2NfYXR0cik7Cit2b2lkIGJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpOworaW50IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2Jvb2xlYW5fdCBhdXRvX3JlY292ZXIpOwordm9pZCBiZmFfaW9jX2RlYnVnX21lbWNsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGJnX2Z3c2F2ZSk7CitiZmFfc3RhdHVzX3QgYmZhX2lvY19kZWJ1Z19md3NhdmUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLAorCQlpbnQgKnRyY2xlbik7CitiZmFfc3RhdHVzX3QgYmZhX2lvY19kZWJ1Z19md3RyYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKnRyY2RhdGEsCisJCQkJIGludCAqdHJjbGVuKTsKK3UzMiBiZmFfaW9jX3NtZW1fcGdudW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKTsKK3UzMiBiZmFfaW9jX3NtZW1fcGdvZmYoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKTsKK3ZvaWQgYmZhX2lvY19zZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfZ2V0X2ZjbW9kZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2hiZmFpbF9yZWdpc3RlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnkpOworCisvKgorICogYmZhIG1mZyB3d24gQVBJIGZ1bmN0aW9ucworICovCit3d25fdCBiZmFfaW9jX2dldF9wd3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit3d25fdCBiZmFfaW9jX2dldF9ud3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit3d25fdCBiZmFfaW9jX2dldF93d25fbmFhNShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUxNiBpbnN0KTsKK21hY190IGJmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordTY0IGJmYV9pb2NfZ2V0X2FkaWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKworI2VuZGlmIC8qIF9fQkZBX0lPQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzNTBiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmMKQEAgLTAsMCArMSw4NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmYV9wcml2Lmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9ib290Lmg+CisjaW5jbHVkZSA8YmZpL2JmaV9jYnJlZy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jZmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorI2luY2x1ZGUgImJmYV9jYWxsYmFja19wcml2LmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKworQkZBX1RSQ19GSUxFKEhBTCwgSU9DRkMpOworCisvKioKKyAqIElPQyBsb2NhbCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEJGQV9JT0NGQ19UT1YJCTUwMDAJLyogbXNlY3MgKi8KKworZW51bSB7CisJQkZBX0lPQ0ZDX0FDVF9OT05FCT0gMCwKKwlCRkFfSU9DRkNfQUNUX0lOSVQJPSAxLAorCUJGQV9JT0NGQ19BQ1RfU1RPUAk9IDIsCisJQkZBX0lPQ0ZDX0FDVF9ESVNBQkxFCT0gMywKK307CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfZW5hYmxlX2NiZm4odm9pZCAqYmZhX2FyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfZGlzYWJsZV9jYmZuKHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX2hiZmFpbF9jYmZuKHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3Jlc2V0X2NiZm4odm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfY2xlYXIodm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfc3dhcChzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKmQsCisJCQlzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKnMpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3N0YXRzX2Nscl9jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19jbHJfdGltZW91dCh2b2lkICpiZmFfYXJnKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c190aW1lb3V0KHZvaWQgKmJmYV9hcmcpOworCitzdGF0aWMgc3RydWN0IGJmYV9pb2NfY2Jmbl9zIGJmYV9pb2NmY19jYmZuOworCisvKioKKyAqICBiZmFfaW9jX3B2dCBCRkEgSU9DIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19jcXNfc3ooc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmRtX2xlbikKK3sKKwlpbnQgICAgICAgICAgICAgaSwgcGVyX3JlcXFfc3osIHBlcl9yc3BxX3N6OworCisJcGVyX3JlcXFfc3ogPSBCRkFfUk9VTkRVUCgoY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgKiBCRklfTE1TR19TWiksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisJcGVyX3JzcHFfc3ogPSBCRkFfUk9VTkRVUCgoY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXMgKiBCRklfTE1TR19TWiksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBDUSBzaXplCisJICovCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKSB7CisJCSpkbV9sZW4gPSAqZG1fbGVuICsgcGVyX3JlcXFfc3o7CisJCSpkbV9sZW4gPSAqZG1fbGVuICsgcGVyX3JzcHFfc3o7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgU2hhZG93IENJL1BJIHNpemUKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5md2NmZy5udW1fY3FzOyBpKyspCisJCSpkbV9sZW4gKz0gKDIgKiBCRkFfQ0FDSEVMSU5FX1NaKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19md19jZmdfc3ooc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmRtX2xlbikKK3sKKwkqZG1fbGVuICs9CisJCUJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisJKmRtX2xlbiArPQorCQlCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyksCisJCQkgICAgQkZBX0NBQ0hFTElORV9TWik7CisJKmRtX2xlbiArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSwgQkZBX0NBQ0hFTElORV9TWik7Cit9CisKKy8qKgorICogVXNlIHRoZSBNYWlsYm94IGludGVyZmFjZSB0byBzZW5kIEJGSV9JT0NGQ19IMklfQ0ZHX1JFUQorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3NlbmRfY2ZnKHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zICpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcyBjZmdfcmVxOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgKmNmZ19pbmZvID0gaW9jZmMtPmNmZ2luZm87CisJc3RydWN0IGJmYV9pb2NmY19jZmdfcyAgKmNmZyA9ICZpb2NmYy0+Y2ZnOworCWludCAgICAgICAgICAgICBpOworCisJYmZhX2Fzc2VydChjZmctPmZ3Y2ZnLm51bV9jcXMgPD0gQkZJX0lPQ19NQVhfQ1FTKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fY3FzKTsKKworCWlvY2ZjLT5jZmdkb25lID0gQkZBX0ZBTFNFOworCWJmYV9pb2NmY19yZXNldF9xdWV1ZXMoYmZhKTsKKworCS8qKgorCSAqIGluaXRpYWxpemUgSU9DIGNvbmZpZ3VyYXRpb24gaW5mbworCSAqLworCWNmZ19pbmZvLT5lbmRpYW5fc2lnID0gQkZJX0lPQ19FTkRJQU5fU0lHOworCWNmZ19pbmZvLT5udW1fY3FzID0gY2ZnLT5md2NmZy5udW1fY3FzOworCisJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfaW5mby0+Y2ZncnNwX2FkZHIsIGlvY2ZjLT5jZmdyc3BfZG1hLnBhKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5zdGF0c19hZGRyLCBpb2NmYy0+c3RhdHNfcGEpOworCisJLyoqCisJICogZG1hIG1hcCBSRVEgYW5kIFJTUCBjaXJjdWxhciBxdWV1ZXMgYW5kIHNoYWRvdyBwb2ludGVycworCSAqLworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykgeworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yZXFfY3FfYmFbaV0sCisJCQkJICAgICAgIGlvY2ZjLT5yZXFfY3FfYmFbaV0ucGEpOworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yZXFfc2hhZG93X2NpW2ldLAorCQkJCSAgICAgICBpb2NmYy0+cmVxX2NxX3NoYWRvd19jaVtpXS5wYSk7CisJCWNmZ19pbmZvLT5yZXFfY3FfZWxlbXNbaV0gPQorCQkJYmZhX29zX2h0b25zKGNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zKTsKKworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yc3BfY3FfYmFbaV0sCisJCQkJICAgICAgIGlvY2ZjLT5yc3BfY3FfYmFbaV0ucGEpOworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yc3Bfc2hhZG93X3BpW2ldLAorCQkJCSAgICAgICBpb2NmYy0+cnNwX2NxX3NoYWRvd19waVtpXS5wYSk7CisJCWNmZ19pbmZvLT5yc3BfY3FfZWxlbXNbaV0gPQorCQkJYmZhX29zX2h0b25zKGNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zKTsKKwl9CisKKwkvKioKKwkgKiBkbWEgbWFwIElPQyBjb25maWd1cmF0aW9uIGl0c2VsZgorCSAqLworCWJmaV9oMmlfc2V0KGNmZ19yZXEubWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9DRkdfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX3JlcS5pb2NfY2ZnX2RtYV9hZGRyLCBpb2NmYy0+Y2ZnX2luZm8ucGEpOworCisJYmZhX2lvY19tYm94X3NlbmQoJmJmYS0+aW9jLCAmY2ZnX3JlcSwKKwkJCXNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcykpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRfbWVtKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYmZhLT5iZmFkID0gYmZhZDsKKwlpb2NmYy0+YmZhID0gYmZhOworCWlvY2ZjLT5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX05PTkU7CisKKwliZmFfb3NfYXNzaWduKGlvY2ZjLT5jZmcsICpjZmcpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBjaGlwIHNwZWNpZmljIGhhbmRsZXJzLgorCSAqLworCWlmIChiZmFfaW9jX2RldmlkKCZiZmEtPmlvYykgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJaW9jZmMtPmh3aWYuaHdfcmVnaW5pdCA9IGJmYV9od2N0X3JlZ2luaXQ7CisJCWlvY2ZjLT5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y3RfcnNwcV9hY2s7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfaW5pdCA9IGJmYV9od2N0X21zaXhfaW5pdDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbnN0YWxsID0gYmZhX2h3Y3RfbXNpeF9pbnN0YWxsOworCQlpb2NmYy0+aHdpZi5od19tc2l4X3VuaW5zdGFsbCA9IGJmYV9od2N0X21zaXhfdW5pbnN0YWxsOworCQlpb2NmYy0+aHdpZi5od19pc3JfbW9kZV9zZXQgPSBiZmFfaHdjdF9pc3JfbW9kZV9zZXQ7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfZ2V0dmVjcyA9IGJmYV9od2N0X21zaXhfZ2V0dmVjczsKKwl9IGVsc2UgeworCQlpb2NmYy0+aHdpZi5od19yZWdpbml0ID0gYmZhX2h3Y2JfcmVnaW5pdDsKKwkJaW9jZmMtPmh3aWYuaHdfcnNwcV9hY2sgPSBiZmFfaHdjYl9yc3BxX2FjazsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbml0ID0gYmZhX2h3Y2JfbXNpeF9pbml0OworCQlpb2NmYy0+aHdpZi5od19tc2l4X2luc3RhbGwgPSBiZmFfaHdjYl9tc2l4X2luc3RhbGw7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfdW5pbnN0YWxsID0gYmZhX2h3Y2JfbXNpeF91bmluc3RhbGw7CisJCWlvY2ZjLT5od2lmLmh3X2lzcl9tb2RlX3NldCA9IGJmYV9od2NiX2lzcl9tb2RlX3NldDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9nZXR2ZWNzID0gYmZhX2h3Y2JfbXNpeF9nZXR2ZWNzOworCX0KKworCWlvY2ZjLT5od2lmLmh3X3JlZ2luaXQoYmZhKTsKKwliZmEtPm1zaXgubnZlY3MgPSAwOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX21lbV9jbGFpbShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbykKK3sKKwl1OCAgICAgICAgKmRtX2t2YTsKKwl1NjQgICAgICAgIGRtX3BhOworCWludCAgICAgICAgICAgICBpLCBwZXJfcmVxcV9zeiwgcGVyX3JzcHFfc3o7CisJc3RydWN0IGJmYV9pb2NmY19zICAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlpbnQJCWRiZ3N6OworCisJZG1fa3ZhID0gYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbyk7CisJZG1fcGEgPSBiZmFfbWVtaW5mb19kbWFfcGh5cyhtZW1pbmZvKTsKKworCS8qCisJICogRmlyc3QgYWxsb2NhdGUgZG1hIG1lbW9yeSBmb3IgSU9DLgorCSAqLworCWJmYV9pb2NfbWVtX2NsYWltKCZiZmEtPmlvYywgZG1fa3ZhLCBkbV9wYSk7CisJZG1fa3ZhICs9IGJmYV9pb2NfbWVtaW5mbygpOworCWRtX3BhICArPSBiZmFfaW9jX21lbWluZm8oKTsKKworCS8qCisJICogQ2xhaW0gRE1BLWFibGUgbWVtb3J5IGZvciB0aGUgcmVxdWVzdC9yZXNwb25zZSBxdWV1ZXMgYW5kIGZvciBzaGFkb3cKKwkgKiBjaS9waSByZWdpc3RlcnMKKwkgKi8KKwlwZXJfcmVxcV9zeiA9IEJGQV9ST1VORFVQKChjZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyAqIEJGSV9MTVNHX1NaKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKwlwZXJfcnNwcV9zeiA9IEJGQV9ST1VORFVQKChjZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyAqIEJGSV9MTVNHX1NaKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykgeworCQlpb2NmYy0+cmVxX2NxX2JhW2ldLmt2YSA9IGRtX2t2YTsKKwkJaW9jZmMtPnJlcV9jcV9iYVtpXS5wYSA9IGRtX3BhOworCQliZmFfb3NfbWVtc2V0KGRtX2t2YSwgMCwgcGVyX3JlcXFfc3opOworCQlkbV9rdmEgKz0gcGVyX3JlcXFfc3o7CisJCWRtX3BhICs9IHBlcl9yZXFxX3N6OworCisJCWlvY2ZjLT5yc3BfY3FfYmFbaV0ua3ZhID0gZG1fa3ZhOworCQlpb2NmYy0+cnNwX2NxX2JhW2ldLnBhID0gZG1fcGE7CisJCWJmYV9vc19tZW1zZXQoZG1fa3ZhLCAwLCBwZXJfcnNwcV9zeik7CisJCWRtX2t2YSArPSBwZXJfcnNwcV9zejsKKwkJZG1fcGEgKz0gcGVyX3JzcHFfc3o7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKSB7CisJCWlvY2ZjLT5yZXFfY3Ffc2hhZG93X2NpW2ldLmt2YSA9IGRtX2t2YTsKKwkJaW9jZmMtPnJlcV9jcV9zaGFkb3dfY2lbaV0ucGEgPSBkbV9wYTsKKwkJZG1fa3ZhICs9IEJGQV9DQUNIRUxJTkVfU1o7CisJCWRtX3BhICs9IEJGQV9DQUNIRUxJTkVfU1o7CisKKwkJaW9jZmMtPnJzcF9jcV9zaGFkb3dfcGlbaV0ua3ZhID0gZG1fa3ZhOworCQlpb2NmYy0+cnNwX2NxX3NoYWRvd19waVtpXS5wYSA9IGRtX3BhOworCQlkbV9rdmEgKz0gQkZBX0NBQ0hFTElORV9TWjsKKwkJZG1fcGEgKz0gQkZBX0NBQ0hFTElORV9TWjsKKwl9CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgdGhlIGNvbmZpZyBpbmZvIHBhZ2UKKwkgKi8KKwliZmEtPmlvY2ZjLmNmZ19pbmZvLmt2YSA9IGRtX2t2YTsKKwliZmEtPmlvY2ZjLmNmZ19pbmZvLnBhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5jZmdpbmZvID0gKHN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgKikgZG1fa3ZhOworCWRtX2t2YSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCWRtX3BhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgdGhlIGNvbmZpZyByZXNwb25zZQorCSAqLworCWJmYS0+aW9jZmMuY2ZncnNwX2RtYS5rdmEgPSBkbV9rdmE7CisJYmZhLT5pb2NmYy5jZmdyc3BfZG1hLnBhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5jZmdyc3AgPSAoc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyAqKSBkbV9rdmE7CisKKwlkbV9rdmEgKz0KKwkJQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MpLAorCQkJICAgIEJGQV9DQUNIRUxJTkVfU1opOworCWRtX3BhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zKSwKKwkJCSAgICAgQkZBX0NBQ0hFTElORV9TWik7CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgaW9jZmMgc3RhdHMKKwkgKi8KKwliZmEtPmlvY2ZjLnN0YXRzX2t2YSA9IGRtX2t2YTsKKwliZmEtPmlvY2ZjLnN0YXRzX3BhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5md19zdGF0cyA9IChzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKikgZG1fa3ZhOworCWRtX2t2YSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisJZG1fcGEgKz0gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfZndfc3RhdHNfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbykgPSBkbV9rdmE7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbykgPSBkbV9wYTsKKworCWRiZ3N6ID0gYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYXV0b19yZWNvdmVyKTsKKwlpZiAoZGJnc3ogPiAwKSB7CisJCWJmYV9pb2NfZGVidWdfbWVtY2xhaW0oJmJmYS0+aW9jLCBiZmFfbWVtaW5mb19rdmEobWVtaW5mbykpOworCQliZmFfbWVtaW5mb19rdmEobWVtaW5mbykgKz0gZGJnc3o7CisJfQorfQorCisvKioKKyAqIEJGQSBzdWJtb2R1bGVzIGluaXRpYWxpemF0aW9uIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRkb25lX3N1Ym1vZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5pbml0ZG9uZShiZmEpOworfQorCisvKioKKyAqIFN0YXJ0IEJGQSBzdWJtb2R1bGVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXJ0X3N1Ym1vZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYS0+cm1lX3Byb2Nlc3MgPSBCRkFfVFJVRTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5zdGFydChiZmEpOworfQorCisvKioKKyAqIERpc2FibGUgQkZBIHN1Ym1vZHVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZGlzYWJsZV9zdWJtb2Qoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+aW9jZGlzYWJsZShiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKGJmYS0+aW9jZmMuY2ZnZG9uZSkKKwkJCWJmYV9jYl9pbml0KGJmYS0+YmZhZCwgQkZBX1NUQVRVU19PSyk7CisJCWVsc2UKKwkJCWJmYV9jYl9pbml0KGJmYS0+YmZhZCwgQkZBX1NUQVRVU19GQUlMRUQpOworCX0gZWxzZQorCQliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfTk9ORTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdG9wX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGwpCit7CisJc3RydWN0IGJmYV9zICAqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gYmZhLT5iZmFkOworCisJaWYgKGNvbXBsKQorCQljb21wbGV0ZSgmYmZhZC0+Y29tcCk7CisKKwllbHNlCisJCWJmYS0+aW9jZmMuYWN0aW9uID0gQkZBX0lPQ0ZDX0FDVF9OT05FOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2Rpc2FibGVfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbCkKK3sKKwlzdHJ1Y3QgYmZhX3MgICpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBiZmEtPmJmYWQ7CisKKwlpZiAoY29tcGwpCisJCWNvbXBsZXRlKCZiZmFkLT5kaXNhYmxlX2NvbXApOworfQorCisvKioKKyAqIFVwZGF0ZSBCRkEgY29uZmlndXJhdGlvbiBmcm9tIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfY2ZncnNwKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkJKmlvY2ZjCSA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MJKmNmZ3JzcCAgPSBpb2NmYy0+Y2ZncnNwOworCXN0cnVjdCBiZmFfaW9jZmNfZndjZmdfcwkqZndjZmcgICA9ICZjZmdyc3AtPmZ3Y2ZnOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgCQkqY2ZnaW5mbyA9IGlvY2ZjLT5jZmdpbmZvOworCisJZndjZmctPm51bV9jcXMgICAgICAgID0gZndjZmctPm51bV9jcXM7CisJZndjZmctPm51bV9pb2ltX3JlcXMgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1faW9pbV9yZXFzKTsKKwlmd2NmZy0+bnVtX3Rza2ltX3JlcXMgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV90c2tpbV9yZXFzKTsKKwlmd2NmZy0+bnVtX2ZjeHBfcmVxcyAgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV9mY3hwX3JlcXMpOworCWZ3Y2ZnLT5udW1fdWZfYnVmcyAgICA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX3VmX2J1ZnMpOworCWZ3Y2ZnLT5udW1fcnBvcnRzICAgICA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX3Jwb3J0cyk7CisKKwljZmdpbmZvLT5pbnRyX2F0dHIuY29hbGVzY2UgPSBjZmdyc3AtPmludHJfYXR0ci5jb2FsZXNjZTsKKwljZmdpbmZvLT5pbnRyX2F0dHIuZGVsYXkgICAgPSBiZmFfb3NfbnRvaHMoY2ZncnNwLT5pbnRyX2F0dHIuZGVsYXkpOworCWNmZ2luZm8tPmludHJfYXR0ci5sYXRlbmN5ICA9IGJmYV9vc19udG9ocyhjZmdyc3AtPmludHJfYXR0ci5sYXRlbmN5KTsKKworCWlvY2ZjLT5jZmdkb25lID0gQkZBX1RSVUU7CisKKwkvKioKKwkgKiBDb25maWd1cmF0aW9uIGlzIGNvbXBsZXRlIC0gaW5pdGlhbGl6ZS9zdGFydCBzdWJtb2R1bGVzCisJICovCisJaWYgKGlvY2ZjLT5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9JTklUKQorCQliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPmluaXRfaGNiX3FlLCBiZmFfaW9jZmNfaW5pdF9jYiwgYmZhKTsKKwllbHNlCisJCWJmYV9pb2NmY19zdGFydF9zdWJtb2QoYmZhKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbGVhcih2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3Mgc3RhdHNfcmVxOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJmlvY2ZjLT5zdGF0c190aW1lciwKKwkJCSAgICBiZmFfaW9jZmNfc3RhdHNfY2xyX3RpbWVvdXQsIGJmYSwKKwkJCSAgICBCRkFfSU9DRkNfVE9WKTsKKworCWJmaV9oMmlfc2V0KHN0YXRzX3JlcS5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX0NMRUFSX1NUQVRTX1JFUSwKKwkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9pb2NfbWJveF9zZW5kKCZiZmEtPmlvYywgJnN0YXRzX3JlcSwKKwkJc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19zd2FwKHN0cnVjdCBiZmFfZndfc3RhdHNfcyAqZCwgc3RydWN0IGJmYV9md19zdGF0c19zICpzKQoreworCXUzMiAgICAgICAqZGlwID0gKHUzMiAqKSBkOworCXUzMiAgICAgICAqc2lwID0gKHUzMiAqKSBzOworCWludCAgICAgICAgICAgICBpOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSAvIHNpemVvZih1MzIpKTsgaSsrKQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwoc2lwW2ldKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbHJfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3MgKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGNvbXBsZXRlKSB7CisJCWJmYV9pb2NfY2xyX3N0YXRzKCZiZmEtPmlvYyk7CisJCWlvY2ZjLT5zdGF0c19jYmZuKGlvY2ZjLT5zdGF0c19jYmFyZywgaW9jZmMtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJaW9jZmMtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisJCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbHJfdGltZW91dCh2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYmZhX3RyYyhiZmEsIDApOworCisJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOworCWJmYV9jYl9xdWV1ZShiZmEsICZpb2NmYy0+c3RhdHNfaGNiX3FlLCBiZmFfaW9jZmNfc3RhdHNfY2xyX2NiLCBiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9zCQkqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKGlvY2ZjLT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQkJYmZhX29zX21lbXNldChpb2NmYy0+c3RhdHNfcmV0LCAwLAorCQkJCXNpemVvZigqaW9jZmMtPnN0YXRzX3JldCkpOworCQkJYmZhX2lvY2ZjX3N0YXRzX3N3YXAoJmlvY2ZjLT5zdGF0c19yZXQtPmZ3X3N0YXRzLAorCQkJCWlvY2ZjLT5md19zdGF0cyk7CisJCX0KKwkJaW9jZmMtPnN0YXRzX2NiZm4oaW9jZmMtPnN0YXRzX2NiYXJnLCBpb2NmYy0+c3RhdHNfc3RhdHVzKTsKKwl9IGVsc2UgeworCQlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX3RpbWVvdXQodm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJCSpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWJmYV90cmMoYmZhLCAwKTsKKworCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX0VUSU1FUjsKKwliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPnN0YXRzX2hjYl9xZSwgYmZhX2lvY2ZjX3N0YXRzX2NiLCBiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX3F1ZXJ5KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHN0YXRzX3JlcTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZpb2NmYy0+c3RhdHNfdGltZXIsCisJCQkgICAgYmZhX2lvY2ZjX3N0YXRzX3RpbWVvdXQsIGJmYSwgQkZBX0lPQ0ZDX1RPVik7CisKKwliZmlfaDJpX3NldChzdGF0c19yZXEubWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9HRVRfU1RBVFNfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9pb2NfbWJveF9zZW5kKCZiZmEtPmlvYywgJnN0YXRzX3JlcSwKKwkJc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3MpKTsKK30KKwordm9pZAorYmZhX2lvY2ZjX3Jlc2V0X3F1ZXVlcyhzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgcTsKKworCWZvciAocSA9IDA7IHEgPCBCRklfSU9DX01BWF9DUVM7IHErKykgeworCQliZmFfcmVxcV9jaShiZmEsIHEpID0gMDsKKwkJYmZhX3JlcXFfcGkoYmZhLCBxKSA9IDA7CisJCWJmYV9yc3BxX2NpKGJmYSwgcSkgPSAwOworCQliZmFfcnNwcV9waShiZmEsIHEpID0gMDsKKwl9Cit9CisKKy8qKgorICogSU9DIGVuYWJsZSByZXF1ZXN0IGlzIGNvbXBsZXRlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZW5hYmxlX2NiZm4odm9pZCAqYmZhX2FyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwlpZiAoc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX2lzcl9kaXNhYmxlKGJmYSk7CisJCWlmIChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0lOSVQpCisJCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5pbml0X2hjYl9xZSwKKwkJCQkgICAgIGJmYV9pb2NmY19pbml0X2NiLCBiZmEpOworCQlyZXR1cm47CisJfQorCisJYmZhX2lvY2ZjX2luaXRkb25lX3N1Ym1vZChiZmEpOworCWJmYV9pb2NmY19zZW5kX2NmZyhiZmEpOworfQorCisvKioKKyAqIElPQyBkaXNhYmxlIHJlcXVlc3QgaXMgY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19kaXNhYmxlX2NiZm4odm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwliZmFfaXNyX2Rpc2FibGUoYmZhKTsKKwliZmFfaW9jZmNfZGlzYWJsZV9zdWJtb2QoYmZhKTsKKworCWlmIChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX1NUT1ApCisJCWJmYV9jYl9xdWV1ZShiZmEsICZiZmEtPmlvY2ZjLnN0b3BfaGNiX3FlLCBiZmFfaW9jZmNfc3RvcF9jYiwKKwkJCSAgICAgYmZhKTsKKwllbHNlIHsKKwkJYmZhX2Fzc2VydChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0RJU0FCTEUpOworCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5kaXNfaGNiX3FlLCBiZmFfaW9jZmNfZGlzYWJsZV9jYiwKKwkJCSAgICAgYmZhKTsKKwl9Cit9CisKKy8qKgorICogTm90aWZ5IHN1Yi1tb2R1bGVzIG9mIGhhcmR3YXJlIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfaGJmYWlsX2NiZm4odm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwliZmEtPnJtZV9wcm9jZXNzID0gQkZBX0ZBTFNFOworCisJYmZhX2lzcl9kaXNhYmxlKGJmYSk7CisJYmZhX2lvY2ZjX2Rpc2FibGVfc3VibW9kKGJmYSk7CisKKwlpZiAoYmZhLT5pb2NmYy5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9JTklUKQorCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5pbml0X2hjYl9xZSwgYmZhX2lvY2ZjX2luaXRfY2IsCisJCQkgICAgIGJmYSk7Cit9CisKKy8qKgorICogQWN0aW9ucyBvbiBjaGlwLXJlc2V0IGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfcmVzZXRfY2Jmbih2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkqYmZhID0gYmZhX2FyZzsKKworCWJmYV9pb2NmY19yZXNldF9xdWV1ZXMoYmZhKTsKKwliZmFfaXNyX2VuYWJsZShiZmEpOworfQorCisKKworLyoqCisgKiAgYmZhX2lvY19wdWJsaWMKKyAqLworCisvKioKKyAqIFF1ZXJ5IElPQyBtZW1vcnkgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCXUzMiAqZG1fbGVuKQoreworCS8qIGRtYSBtZW1vcnkgZm9yIElPQyAqLworCSpkbV9sZW4gKz0gYmZhX2lvY19tZW1pbmZvKCk7CisKKwliZmFfaW9jZmNfZndfY2ZnX3N6KGNmZywgZG1fbGVuKTsKKwliZmFfaW9jZmNfY3FzX3N6KGNmZywgZG1fbGVuKTsKKwkqa21fbGVuICs9IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2F1dG9fcmVjb3Zlcik7Cit9CisKKy8qKgorICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCWludCAgICAgICAgICAgICBpOworCisJYmZhX2lvY2ZjX2NiZm4uZW5hYmxlX2NiZm4gPSBiZmFfaW9jZmNfZW5hYmxlX2NiZm47CisJYmZhX2lvY2ZjX2NiZm4uZGlzYWJsZV9jYmZuID0gYmZhX2lvY2ZjX2Rpc2FibGVfY2JmbjsKKwliZmFfaW9jZmNfY2Jmbi5oYmZhaWxfY2JmbiA9IGJmYV9pb2NmY19oYmZhaWxfY2JmbjsKKwliZmFfaW9jZmNfY2Jmbi5yZXNldF9jYmZuID0gYmZhX2lvY2ZjX3Jlc2V0X2NiZm47CisKKwliZmFfaW9jX2F0dGFjaCgmYmZhLT5pb2MsIGJmYSwgJmJmYV9pb2NmY19jYmZuLCAmYmZhLT50aW1lcl9tb2QsCisJCWJmYS0+dHJjbW9kLCBiZmEtPmFlbiwgYmZhLT5sb2dtKTsKKwliZmFfaW9jX3BjaV9pbml0KCZiZmEtPmlvYywgcGNpZGV2LCBCRklfTUNfSU9DRkMpOworCWJmYV9pb2NfbWJveF9yZWdpc3RlcigmYmZhLT5pb2MsIGJmYV9tYm94X2lzcnMpOworCisJLyoqCisJICogQ2hvb3NlIEZDIChzc2lkOiAweDFDKSB2L3MgRkNvRSAoc3NpZDogMHgxNCkgbW9kZS4KKwkgKi8KKwlpZiAoMCkKKwkJYmZhX2lvY19zZXRfZmNtb2RlKCZiZmEtPmlvYyk7CisKKwliZmFfaW9jZmNfaW5pdF9tZW0oYmZhLCBiZmFkLCBjZmcsIHBjaWRldik7CisJYmZhX2lvY2ZjX21lbV9jbGFpbShiZmEsIGNmZywgbWVtaW5mbyk7CisJYmZhX3RpbWVyX2luaXQoJmJmYS0+dGltZXJfbW9kKTsKKworCUlOSVRfTElTVF9IRUFEKCZiZmEtPmNvbXBfcSk7CisJZm9yIChpID0gMDsgaSA8IEJGSV9JT0NfTUFYX0NRUzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmYmZhLT5yZXFxX3dhaXRxW2ldKTsKK30KKworLyoqCisgKiBRdWVyeSBJT0MgbWVtb3J5IHJlcXVpcmVtZW50IGluZm9ybWF0aW9uLgorICovCit2b2lkCitiZmFfaW9jZmNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NfZGV0YWNoKCZiZmEtPmlvYyk7Cit9CisKKy8qKgorICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2luaXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX0lOSVQ7CisJYmZhX2lvY19lbmFibGUoJmJmYS0+aW9jKTsKKwliZmFfbXNpeF9pbnN0YWxsKGJmYSk7Cit9CisKKy8qKgorICogSU9DIHN0YXJ0IGNhbGxlZCBmcm9tIGJmYV9zdGFydCgpLiBDYWxsZWQgdG8gc3RhcnQgSU9DIG9wZXJhdGlvbnMKKyAqIGF0IGRyaXZlciBpbnN0YW50aWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLgorICovCit2b2lkCitiZmFfaW9jZmNfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaWYgKGJmYS0+aW9jZmMuY2ZnZG9uZSkKKwkJYmZhX2lvY2ZjX3N0YXJ0X3N1Ym1vZChiZmEpOworfQorCisvKioKKyAqIElPQyBzdG9wIGNhbGxlZCBmcm9tIGJmYV9zdG9wKCkuIENhbGxlZCBvbmx5IHdoZW4gZHJpdmVyIGlzIHVubG9hZGVkCisgKiBmb3IgdGhpcyBpbnN0YW5jZS4KKyAqLwordm9pZAorYmZhX2lvY2ZjX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX1NUT1A7CisKKwliZmEtPnJtZV9wcm9jZXNzID0gQkZBX0ZBTFNFOworCWJmYV9pb2NfZGlzYWJsZSgmYmZhLT5pb2MpOworfQorCit2b2lkCitiZmFfaW9jZmNfaXNyKHZvaWQgKmJmYWFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYWFyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJdW5pb24gYmZpX2lvY2ZjX2kyaF9tc2dfdQkqbXNnOworCisJbXNnID0gKHVuaW9uIGJmaV9pb2NmY19pMmhfbXNnX3UgKikgbTsKKwliZmFfdHJjKGJmYSwgbXNnLT5taC5tc2dfaWQpOworCisJc3dpdGNoIChtc2ctPm1oLm1zZ19pZCkgeworCWNhc2UgQkZJX0lPQ0ZDX0kySF9DRkdfUkVQTFk6CisJCWlvY2ZjLT5jZmdfcmVwbHkgPSAmbXNnLT5jZmdfcmVwbHk7CisJCWJmYV9pb2NmY19jZmdyc3AoYmZhKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0NGQ19JMkhfR0VUX1NUQVRTX1JTUDoKKwkJaWYgKGlvY2ZjLT5zdGF0c19idXN5ID09IEJGQV9GQUxTRQorCQkgICAgfHwgaW9jZmMtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCWJyZWFrOworCisJCWJmYV90aW1lcl9zdG9wKCZpb2NmYy0+c3RhdHNfdGltZXIpOworCQlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5zdGF0c19oY2JfcWUsIGJmYV9pb2NmY19zdGF0c19jYiwKKwkJCSAgICAgIGJmYSk7CisJCWJyZWFrOworCWNhc2UgQkZJX0lPQ0ZDX0kySF9DTEVBUl9TVEFUU19SU1A6CisJCS8qCisJCSAqIGNoZWNrIGZvciB0aW1lciBwb3AgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHJzcAorCQkgKi8KKwkJaWYgKGlvY2ZjLT5zdGF0c19idXN5ID09IEJGQV9GQUxTRQorCQkgICAgfHwgaW9jZmMtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCWJyZWFrOworCisJCWJmYV90aW1lcl9zdG9wKCZpb2NmYy0+c3RhdHNfdGltZXIpOworCQlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5zdGF0c19oY2JfcWUsCisJCQkgICAgICBiZmFfaW9jZmNfc3RhdHNfY2xyX2NiLCBiZmEpOworCQlicmVhazsKKwljYXNlIEJGSV9JT0NGQ19JMkhfVVBEQVRFUV9SU1A6CisJCWlvY2ZjLT51cGRhdGVxX2NiZm4oaW9jZmMtPnVwZGF0ZXFfY2JhcmcsIEJGQV9TVEFUVVNfT0spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworI2lmbmRlZiBCRkFfQklPU19CVUlMRAordm9pZAorYmZhX2FkYXB0ZXJfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpCit7CisJYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKCZiZmEtPmlvYywgYWRfYXR0cik7Cit9CisKK3U2NAorYmZhX2FkYXB0ZXJfZ2V0X2lkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiBiZmFfaW9jX2dldF9hZGlkKCZiZmEtPmlvYyk7Cit9CisKK3ZvaWQKK2JmYV9pb2NmY19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19hdHRyX3MgKmF0dHIpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYXR0ci0+aW50cl9hdHRyID0gaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0cjsKKwlhdHRyLT5jb25maWcJPSBpb2NmYy0+Y2ZnOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NmY19pc3JhdHRyX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyAqYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfc2V0X2ludHJfcmVxX3MgKm07CisKKwlpb2NmYy0+Y2ZnaW5mby0+aW50cl9hdHRyID0gKmF0dHI7CisJaWYgKCFiZmFfaW9jZmNfaXNfb3BlcmF0aW9uYWwoYmZhKSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CisKKwltID0gYmZhX3JlcXFfbmV4dChiZmEsIEJGQV9SRVFRX0lPQyk7CisJaWYgKCFtKQorCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9TRVRfSU5UUl9SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisJbS0+Y29hbGVzY2UgPSBhdHRyLT5jb2FsZXNjZTsKKwltLT5kZWxheSAgICA9IGJmYV9vc19odG9ucyhhdHRyLT5kZWxheSk7CisJbS0+bGF0ZW5jeSAgPSBiZmFfb3NfaHRvbnMoYXR0ci0+bGF0ZW5jeSk7CisKKwliZmFfdHJjKGJmYSwgYXR0ci0+ZGVsYXkpOworCWJmYV90cmMoYmZhLCBhdHRyLT5sYXRlbmN5KTsKKworCWJmYV9yZXFxX3Byb2R1Y2UoYmZhLCBCRkFfUkVRUV9JT0MpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfaW9jZmNfc2V0X3Nuc2Jhc2Uoc3RydWN0IGJmYV9zICpiZmEsIHU2NCBzbnNiYXNlX3BhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcyAgICAgICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaW9jZmMtPmNmZ2luZm8tPnNlbnNlX2J1Zl9sZW4gPSAoQkZJX0lPSU1fU05TTEVOIC0gMSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChpb2NmYy0+Y2ZnaW5mby0+aW9pbV9zbnNiYXNlLCBzbnNiYXNlX3BhKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfaW9jZmNfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY2ZjX3N0YXRzX3MgKnN0YXRzLAorCQkgICAgICBiZmFfY2JfaW9jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGlvY2ZjLT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBpb2NmYy0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWlvY2ZjLT5zdGF0c19yZXQgPSBzdGF0czsKKwlpb2NmYy0+c3RhdHNfY2JmbiA9IGNiZm47CisJaW9jZmMtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisKKwliZmFfaW9jZmNfc3RhdHNfcXVlcnkoYmZhKTsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2lvY2ZjX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfaW9jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGlvY2ZjLT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBpb2NmYy0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWlvY2ZjLT5zdGF0c19jYmZuID0gY2JmbjsKKwlpb2NmYy0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9pb2NmY19zdGF0c19jbGVhcihiZmEpOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogRW5hYmxlIElPQyBhZnRlciBpdCBpcyBkaXNhYmxlZC4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfcGxvZ19zdHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwgQkZBX1BMX0VJRF9NSVNDLCAwLAorCQkgICAgICJJT0MgRW5hYmxlIik7CisJYmZhX2lvY19lbmFibGUoJmJmYS0+aW9jKTsKK30KKwordm9pZAorYmZhX2lvY2ZjX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3Bsb2dfc3RyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsIEJGQV9QTF9FSURfTUlTQywgMCwKKwkJICAgICAiSU9DIERpc2FibGUiKTsKKwliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfRElTQUJMRTsKKworCWJmYS0+cm1lX3Byb2Nlc3MgPSBCRkFfRkFMU0U7CisJYmZhX2lvY19kaXNhYmxlKCZiZmEtPmlvYyk7Cit9CisKKworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY2ZjX2lzX29wZXJhdGlvbmFsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiBiZmFfaW9jX2lzX29wZXJhdGlvbmFsKCZiZmEtPmlvYykgJiYgYmZhLT5pb2NmYy5jZmdkb25lOworfQorCisvKioKKyAqIFJldHVybiBib290IHRhcmdldCBwb3J0IHd3bnMgLS0gcmVhZCBmcm9tIGJvb3QgaW5mb3JtYXRpb24gaW4gZmxhc2guCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19nZXRfYm9vdHd3bnMoc3RydWN0IGJmYV9zICpiZmEsIHU4ICpud3ducywgd3duX3QgKip3d25zKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkJKmlvY2ZjCSA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MJKmNmZ3JzcCAgPSBpb2NmYy0+Y2ZncnNwOworCisJKm53d25zID0gY2ZncnNwLT5ib290d3ducy5ud3duczsKKwkqd3ducyA9IGNmZ3JzcC0+Ym9vdHd3bnMud3duOworfQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQxNzdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuaApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0lPQ0ZDX0hfXworI2RlZmluZSBfX0JGQV9JT0NGQ19IX18KKworI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2lvY2ZjLmg+CisjaW5jbHVkZSA8YmZhX2NhbGxiYWNrX3ByaXYuaD4KKworI2RlZmluZSBCRkFfUkVRUV9ORUxFTVNfTUlOCSg0KQorI2RlZmluZSBCRkFfUlNQUV9ORUxFTVNfTUlOCSg0KQorCitzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcyB7CisJYmZhX29zX2FkZHJfdCAgIGludHJfc3RhdHVzOworCWJmYV9vc19hZGRyX3QgICBpbnRyX21hc2s7CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX3BpW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2NpW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2RlcHRoW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2N0cmxbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfZGVwdGhbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfY3RybFtCRklfSU9DX01BWF9DUVNdOworfTsKKworLyoqCisgKiBNU0lYIHZlY3RvciBoYW5kbGVycworICovCisjZGVmaW5lIEJGQV9NU0lYX01BWF9WRUNUT1JTCTIyCit0eXBlZGVmIHZvaWQgKCpiZmFfbXNpeF9oYW5kbGVyX3QpKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKK3N0cnVjdCBiZmFfbXNpeF9zIHsKKwlpbnQJbnZlY3M7CisJYmZhX21zaXhfaGFuZGxlcl90IGhhbmRsZXJbQkZBX01TSVhfTUFYX1ZFQ1RPUlNdOworfTsKKworLyoqCisgKiBDaGlwIHNwZWNpZmljIGludGVyZmFjZXMKKyAqLworc3RydWN0IGJmYV9od2lmX3MgeworCXZvaWQgKCpod19yZWdpbml0KShzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKmh3X3JzcHFfYWNrKShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOworCXZvaWQgKCpod19tc2l4X2luaXQpKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpOworCXZvaWQgKCpod19tc2l4X2luc3RhbGwpKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqaHdfbXNpeF91bmluc3RhbGwpKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqaHdfaXNyX21vZGVfc2V0KShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KTsKKwl2b2lkICgqaHdfbXNpeF9nZXR2ZWNzKShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICp2ZWNtYXAsCisJCQl1MzIgKm52ZWNzLCB1MzIgKm1heHZlYyk7Cit9OwordHlwZWRlZiB2b2lkICgqYmZhX2NiX2lvY2ZjX3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CisKK3N0cnVjdCBiZmFfaW9jZmNfcyB7CisJc3RydWN0IGJmYV9zIAkJKmJmYTsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zIAljZmc7CisJaW50CQkJYWN0aW9uOworCisJdTMyICAgICAgICAJcmVxX2NxX3BpW0JGSV9JT0NfTUFYX0NRU107CisJdTMyICAgICAgICAJcnNwX2NxX2NpW0JGSV9JT0NfTUFYX0NRU107CisKKwlzdHJ1Y3QgYmZhX2NiX3FlX3MJaW5pdF9oY2JfcWU7CisJc3RydWN0IGJmYV9jYl9xZV9zCXN0b3BfaGNiX3FlOworCXN0cnVjdCBiZmFfY2JfcWVfcwlkaXNfaGNiX3FlOworCXN0cnVjdCBiZmFfY2JfcWVfcwlzdGF0c19oY2JfcWU7CisJYmZhX2Jvb2xlYW5fdAkJY2ZnZG9uZTsKKworCXN0cnVjdCBiZmFfZG1hX3MJY2ZnX2luZm87CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcyAqY2ZnaW5mbzsKKwlzdHJ1Y3QgYmZhX2RtYV9zCWNmZ3JzcF9kbWE7CisJc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyAqY2ZncnNwOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcGx5X3MgKmNmZ19yZXBseTsKKworCXU4CQkJKnN0YXRzX2t2YTsKKwl1NjQJCXN0YXRzX3BhOworCXN0cnVjdCBiZmFfZndfc3RhdHNfcyAJKmZ3X3N0YXRzOworCXN0cnVjdCBiZmFfdGltZXJfcyAJc3RhdHNfdGltZXI7CS8qICB0aW1lciAqLworCXN0cnVjdCBiZmFfaW9jZmNfc3RhdHNfcyAqc3RhdHNfcmV0OwkvKiAgZHJpdmVyIHN0YXRzIGxvY2F0aW9uICovCisJYmZhX3N0YXR1c190CQlzdGF0c19zdGF0dXM7CS8qICBzdGF0cy9zdGF0c2NsciBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCXN0YXRzX2J1c3k7CS8qICBvdXRzdGFuZGluZyBzdGF0cyAqLworCWJmYV9jYl9pb2NfdAkJc3RhdHNfY2JmbjsJLyogIGRyaXZlciBjYWxsYmFjayBmdW5jdGlvbiAqLworCXZvaWQgICAgICAgICAgIAkJKnN0YXRzX2NiYXJnOwkvKiAgdXNlciBjYWxsYmFjayBhcmcgKi8KKworCXN0cnVjdCBiZmFfZG1hX3MgICAJcmVxX2NxX2JhW0JGSV9JT0NfTUFYX0NRU107CisJc3RydWN0IGJmYV9kbWFfcyAgIAlyZXFfY3Ffc2hhZG93X2NpW0JGSV9JT0NfTUFYX0NRU107CisJc3RydWN0IGJmYV9kbWFfcyAgIAlyc3BfY3FfYmFbQkZJX0lPQ19NQVhfQ1FTXTsKKwlzdHJ1Y3QgYmZhX2RtYV9zICAgCXJzcF9jcV9zaGFkb3dfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcwliZmFfcmVnczsJLyogIEJGQSBkZXZpY2UgcmVnaXN0ZXJzICovCisJc3RydWN0IGJmYV9od2lmX3MJaHdpZjsKKworCWJmYV9jYl9pb2NmY190CQl1cGRhdGVxX2NiZm47IC8qICBiaW9zIGNhbGxiYWNrIGZ1bmN0aW9uICovCisJdm9pZAkJCQkqdXBkYXRlcV9jYmFyZzsJLyogIGJpb3MgY2FsbGJhY2sgYXJnICovCit9OworCisjZGVmaW5lIGJmYV9scHVpZChfX2JmYSkJCWJmYV9pb2NfcG9ydGlkKCYoX19iZmEpLT5pb2MpCisjZGVmaW5lIGJmYV9tc2l4X2luaXQoX19iZmEsIF9fbnZlY3MpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfaW5pdChfX2JmYSwgX19udmVjcykKKyNkZWZpbmUgYmZhX21zaXhfaW5zdGFsbChfX2JmYSkJXAorCShfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF9pbnN0YWxsKF9fYmZhKQorI2RlZmluZSBiZmFfbXNpeF91bmluc3RhbGwoX19iZmEpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfdW5pbnN0YWxsKF9fYmZhKQorI2RlZmluZSBiZmFfaXNyX21vZGVfc2V0KF9fYmZhLCBfX21zaXgpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X2lzcl9tb2RlX3NldChfX2JmYSwgX19tc2l4KQorI2RlZmluZSBiZmFfbXNpeF9nZXR2ZWNzKF9fYmZhLCBfX3ZlY21hcCwgX19udmVjcywgX19tYXh2ZWMpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfZ2V0dmVjcyhfX2JmYSwgX192ZWNtYXAsIF9fbnZlY3MsIF9fbWF4dmVjKQorCisvKgorICogRkMgc3BlY2lmaWMgSU9DIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBiZmFfaW9jZmNfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbik7Cit2b2lkIGJmYV9pb2NmY19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCisJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7Cit2b2lkIGJmYV9pb2NmY19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX2lzcih2b2lkICpiZmEsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbXNnKTsKK3ZvaWQgYmZhX2lvY2ZjX3NldF9zbnNiYXNlKHN0cnVjdCBiZmFfcyAqYmZhLCB1NjQgc25zYmFzZV9wYSk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NmY19pc19vcGVyYXRpb25hbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19yZXNldF9xdWV1ZXMoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfdXBkYXRlcShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHJlcXFfYmEsIHUzMiByc3BxX2JhLAorCQkJdTMyIHJlcXFfc2NpLCB1MzIgcnNwcV9zcGksCisJCQliZmFfY2JfaW9jZmNfdCBjYmZuLCB2b2lkICpjYmFyZyk7CisKK3ZvaWQgYmZhX21zaXhfYWxsKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKK3ZvaWQgYmZhX21zaXhfcmVxcShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYyk7Cit2b2lkIGJmYV9tc2l4X3JzcHEoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpOwordm9pZCBiZmFfbXNpeF9scHVfZXJyKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKKwordm9pZCBiZmFfaHdjYl9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y2JfcnNwcV9hY2soc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF9pbml0KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpOwordm9pZCBiZmFfaHdjYl9tc2l4X2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjYl9tc2l4X3VuaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2NiX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF9nZXR2ZWNzKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnZlY21hcCwKKwkJCXUzMiAqbnZlY3MsIHUzMiAqbWF4dmVjKTsKK3ZvaWQgYmZhX2h3Y3RfcmVnaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2N0X3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSk7Cit2b2lkIGJmYV9od2N0X21zaXhfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG52ZWNzKTsKK3ZvaWQgYmZhX2h3Y3RfbXNpeF9pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y3RfbXNpeF91bmluc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCk7Cit2b2lkIGJmYV9od2N0X21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICp2ZWNtYXAsCisJCQl1MzIgKm52ZWNzLCB1MzIgKm1heHZlYyk7CisKK3ZvaWQgYmZhX2NvbV9tZW1pbmZvKGJmYV9ib29sZWFuX3QgbWluY2ZnLCB1MzIgKmRtX2xlbik7Cit2b2lkIGJmYV9jb21fYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWksCisJCWJmYV9ib29sZWFuX3QgbWluY2ZnKTsKK3ZvaWQgYmZhX2lvY2ZjX2dldF9ib290d3ducyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggKm53d25zLCB3d25fdCAqKnd3bnMpOworCisjZW5kaWYgLyogX19CRkFfSU9DRkNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjX3EuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjX3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDBhMTdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmNfcS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgImJmYV9pbnRyX3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEhBTCwgSU9DRkNfUSk7CisKK3ZvaWQKK2JmYV9pb2NmY191cGRhdGVxKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgcmVxcV9iYSwgdTMyIHJzcHFfYmEsCisJCQkJdTMyIHJlcXFfc2NpLCB1MzIgcnNwcV9zcGksIGJmYV9jYl9pb2NmY190IGNiZm4sCisJCQkJdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yZXFfcyB1cGRhdGVxX3JlcTsKKworCWlvY2ZjLT51cGRhdGVxX2NiZm4gPSBjYmZuOworCWlvY2ZjLT51cGRhdGVxX2NiYXJnID0gY2Jhcmc7CisKKwliZmlfaDJpX3NldCh1cGRhdGVxX3JlcS5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX1VQREFURVFfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCisJdXBkYXRlcV9yZXEucmVxcV9iYSA9IGJmYV9vc19odG9ubChyZXFxX2JhKTsKKwl1cGRhdGVxX3JlcS5yc3BxX2JhID0gYmZhX29zX2h0b25sKHJzcHFfYmEpOworCXVwZGF0ZXFfcmVxLnJlcXFfc2NpID0gYmZhX29zX2h0b25sKHJlcXFfc2NpKTsKKwl1cGRhdGVxX3JlcS5yc3BxX3NwaSA9IGJmYV9vc19odG9ubChyc3BxX3NwaSk7CisKKwliZmFfaW9jX21ib3hfc2VuZCgmYmZhLT5pb2MsICZ1cGRhdGVxX3JlcSwKKwkJCXNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcmVxX3MpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUyNTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9pbS5jCkBAIC0wLDAgKzEsMTMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX2NiX2lvaW1fbWFjcm9zLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIElPSU0pOworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NlbmRfaW9yZXEoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QJYmZhX2lvaW1fc2dlX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyB2b2lkCQliZmFfaW9pbV9zZ3BnX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIHZvaWQJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fY29tcCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fcGF0aHRvdih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CisKKy8qKgorICogIGJmYV9pb2ltX3NtCisgKi8KKworLyoqCisgKiBJTyBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9pb2ltX2V2ZW50IHsKKwlCRkFfSU9JTV9TTV9TVEFSVCA9IDEsCQkvKiAgaW8gc3RhcnQgcmVxdWVzdCBmcm9tIGhvc3QgKi8KKwlCRkFfSU9JTV9TTV9DT01QX0dPT0QgPSAyLAkvKiAgaW8gZ29vZCBjb21wLCByZXNvdXJjZSBmcmVlICovCisJQkZBX0lPSU1fU01fQ09NUCA9IDMsCQkvKiAgaW8gY29tcCwgcmVzb3VyY2UgaXMgZnJlZSAqLworCUJGQV9JT0lNX1NNX0NPTVBfVVRBRyA9IDQsCS8qICBpbyBjb21wLCByZXNvdXJjZSBpcyBmcmVlICovCisJQkZBX0lPSU1fU01fRE9ORSA9IDUsCQkvKiAgaW8gY29tcCwgcmVzb3VyY2Ugbm90IGZyZWUgKi8KKwlCRkFfSU9JTV9TTV9GUkVFID0gNiwJCS8qICBpbyByZXNvdXJjZSBpcyBmcmVlZCAqLworCUJGQV9JT0lNX1NNX0FCT1JUID0gNywJCS8qICBhYm9ydCByZXF1ZXN0IGZyb20gc2NzaSBzdGFjayAqLworCUJGQV9JT0lNX1NNX0FCT1JUX0NPTVAgPSA4LAkvKiAgYWJvcnQgZnJvbSBmL3cgKi8KKwlCRkFfSU9JTV9TTV9BQk9SVF9ET05FID0gOSwJLyogIGFib3J0IGNvbXBsZXRpb24gZnJvbSBmL3cgKi8KKwlCRkFfSU9JTV9TTV9RUkVTVU1FID0gMTAsCS8qICBDUSBzcGFjZSBhdmFpbGFibGUgdG8gcXVldWUgSU8gKi8KKwlCRkFfSU9JTV9TTV9TR0FMTE9DRUQgPSAxMSwJLyogIFNHIHBhZ2UgYWxsb2NhdGlvbiBzdWNjZXNzZnVsICovCisJQkZBX0lPSU1fU01fU1FSRVRSWSA9IDEyLAkvKiAgc2VxdWVuY2UgcmVjb3ZlcnkgcmV0cnkgKi8KKwlCRkFfSU9JTV9TTV9IQ0IJPSAxMywJCS8qICBiZmEgY2FsbGJhY2sgY29tcGxldGUgKi8KKwlCRkFfSU9JTV9TTV9DTEVBTlVQID0gMTQsCS8qICBJTyBjbGVhbnVwIGZyb20gaXRuaW0gKi8KKwlCRkFfSU9JTV9TTV9UTVNUQVJUID0gMTUsCS8qICBJTyBjbGVhbnVwIGZyb20gdHNraW0gKi8KKwlCRkFfSU9JTV9TTV9UTURPTkUgPSAxNiwJLyogIElPIGNsZWFudXAgZnJvbSB0c2tpbSAqLworCUJGQV9JT0lNX1NNX0hXRkFJTCA9IDE3LAkvKiAgSU9DIGgvdyBmYWlsdXJlIGV2ZW50ICovCisJQkZBX0lPSU1fU01fSU9UT1YgPSAxOCwJCS8qICBJVE4gb2ZmbGluZSBUT1YgICAgICAgKi8KK307CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIElPIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fc2dhbGxvYyhzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fYWN0aXZlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQllbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9hYm9ydF9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCSAgICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2hjYihzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21faGNiX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCSBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9yZXNmcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQllbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAJCUlPIGlzIG5vdCBzdGFydGVkICh1bmFsbG9jYXRlZCkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV91bmluaXQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fU1RBUlQ6CisJCWlmICghYmZhX2l0bmltX2lzX29ubGluZShpb2ltLT5pdG5pbSkpIHsKKwkJCWlmICghYmZhX2l0bmltX2hvbGRfaW8oaW9pbS0+aXRuaW0pKSB7CisJCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQkJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCQkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsCisJCQkJCSZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworCQkJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCisJCQkJCQlfX2JmYV9jYl9pb2ltX3BhdGh0b3YsIGlvaW0pOworCQkJfSBlbHNlIHsKKwkJCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLAorCQkJCQkmaW9pbS0+aXRuaW0tPnBlbmRpbmdfcSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSB7CisJCQlpZiAoIWJmYV9pb2ltX3NnZV9zZXR1cChpb2ltKSkgeworCQkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fc2dhbGxvYyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJaWYgKCFiZmFfaW9pbV9zZW5kX2lvcmVxKGlvaW0pKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3FmdWxsKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hY3RpdmUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSU9UT1Y6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwKKwkJCQlfX2JmYV9jYl9pb2ltX3BhdGh0b3YsIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCS8qKgorCQkgKiBJTyBpbiBwZW5kaW5nIHF1ZXVlIGNhbiBnZXQgYWJvcnQgcmVxdWVzdHMuIENvbXBsZXRlIGFib3J0CisJCSAqIHJlcXVlc3RzIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJmlvaW0tPml0bmltLT5wZW5kaW5nX3EsIGlvaW0pKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCQlpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUlPIGlzIHdhaXRpbmcgZm9yIFNHIHBhZ2VzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fc2dhbGxvYyhzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9TR0FMTE9DRUQ6CisJCWlmICghYmZhX2lvaW1fc2VuZF9pb3JlcShpb2ltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9xZnVsbCk7CisJCQlicmVhazsKKwkJfQorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9zZ3BnX3djYW5jZWwoaW9pbS0+YmZhLCAmaW9pbS0+aW9zcC0+c2dwZ193cWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9zZ3BnX3djYW5jZWwoaW9pbS0+YmZhLCAmaW9pbS0+aW9zcC0+c2dwZ193cWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3NncGdfd2NhbmNlbChpb2ltLT5iZmEsICZpb2ltLT5pb3NwLT5zZ3BnX3dxZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJTyBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9hY3RpdmUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCisJCQkgICAgICBfX2JmYV9jYl9pb2ltX2dvb2RfY29tcCwgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fY29tcCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fY29tcCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX1RSVUU7CisJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX2Fib3J0OworCisJCWlmIChiZmFfaW9pbV9zZW5kX2Fib3J0KGlvaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydCk7CisJCWVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydF9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+aXRuaW0tPnJlcXEsCisJCQkJCSAgJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX0ZBTFNFOworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9mYWlsZWQ7CisKKwkJaWYgKGJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXApOworCQllbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+aXRuaW0tPnJlcXEsCisJCQkJCSAgJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU8gaXMgYmVpbmcgYWJvcnRlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbiBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCWNhc2UgQkZBX0lPSU1fU01fQ09NUDoKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlRfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9VVEFHOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9hc3NlcnQoaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPT0gQkZBX1RSVUUpOworCQlpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9IEJGQV9GQUxTRTsKKworCQlpZiAoYmZhX2lvaW1fc2VuZF9hYm9ydChpb2ltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cCk7CisJCWVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKTsKKwkJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkJICAmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogSU8gaXMgYmVpbmcgY2xlYW5lZCB1cCAoaW1wbGljaXQgYWJvcnQpLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGZyb20KKyAqIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwljYXNlIEJGQV9JT0lNX1NNX0ZSRUU6CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJLyoqCisJCSAqIElPIGlzIGFscmVhZHkgYmVpbmcgYWJvcnRlZCBpbXBsaWNpdGx5CisJCSAqLworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9hYm9ydDsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVF9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfVVRBRzoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCS8qKgorCQkgKiBJTyBjYW4gYmUgaW4gY2xlYW51cCBzdGF0ZSBhbHJlYWR5IGR1ZSB0byBUTSBjb21tYW5kLiAybmQgY2xlYW51cAorCQkgKiByZXF1ZXN0IGNvbWVzIGZyb20gSVROIG9mZmxpbmUgZXZlbnQuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU8gaXMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSk7CisJCWJmYV9pb2ltX3NlbmRfaW9yZXEoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlBY3RpdmUgSU8gaXMgYmVpbmcgYWJvcnRlZCwgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fYWJvcnRfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydCk7CisJCWJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfYXNzZXJ0KGlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID09IEJGQV9UUlVFKTsKKwkJaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPSBCRkFfRkFMU0U7CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUFjdGl2ZSBJTyBpcyBiZWluZyBjbGVhbmVkIHVwLCB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cCk7CisJCWJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJLyoqCisJCSAqIElPIGlzIGFscmFlZHkgYmVpbmcgY2xlYW5lZCB1cCBpbXBsaWNpdGx5CisJCSAqLworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9hYm9ydDsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfR09PRDoKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPIGJmYSBjYWxsYmFjayBpcyBwZW5kaW5nLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21faGNiKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0hDQjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV91bmluaXQpOworCQliZmFfaW9pbV9mcmVlKGlvaW0pOworCQliZmFfY2JfaW9pbV9yZXNmcmVlKGlvaW0tPmJmYS0+YmZhZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJTyBiZmEgY2FsbGJhY2sgaXMgcGVuZGluZy4gSU8gcmVzb3VyY2UgY2Fubm90IGJlIGZyZWVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21faGNiX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fSENCOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3Jlc2ZyZWUpOworCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX3Jlc2ZyZWVfcSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPIGlzIGNvbXBsZXRlZCwgd2FpdGluZyByZXNvdXJjZSBmcmVlIGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9yZXNmcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0ZSRUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fdW5pbml0KTsKKwkJYmZhX2lvaW1fZnJlZShpb2ltKTsKKwkJYmZhX2NiX2lvaW1fcmVzZnJlZShpb2ltLT5iZmEtPmJmYWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaW9pbV9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9nb29kX2NvbXAoaW9pbS0+YmZhLT5iZmFkLCBpb2ltLT5kaW8pOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zCSppb2ltID0gY2Jhcmc7CisJc3RydWN0IGJmaV9pb2ltX3JzcF9zICptOworCXU4CQkqc25zaW5mbyA9IE5VTEw7CisJdTggICAgICAgICBzbnNfbGVuID0gMDsKKwlzMzIgICAgICAgICByZXNpZHVlID0gMDsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCW0gPSAoc3RydWN0IGJmaV9pb2ltX3JzcF9zICopICZpb2ltLT5pb3NwLT5jb21wX3JzcG1zZzsKKwlpZiAobS0+aW9fc3RhdHVzID09IEJGSV9JT0lNX1NUU19PSykgeworCQkvKioKKwkJICogc2V0dXAgc2Vuc2UgaW5mb3JtYXRpb24sIGlmIHByZXNlbnQKKwkJICovCisJCWlmIChtLT5zY3NpX3N0YXR1cyA9PSBTQ1NJX1NUQVRVU19DSEVDS19DT05ESVRJT04KKwkJCQkJJiYgbS0+c25zX2xlbikgeworCQkJc25zX2xlbiA9IG0tPnNuc19sZW47CisJCQlzbnNpbmZvID0gaW9pbS0+aW9zcC0+c25zaW5mbzsKKwkJfQorCisJCS8qKgorCQkgKiBzZXR1cCByZXNpZHVlIHZhbHVlIGNvcnJlY3RseSBmb3Igbm9ybWFsIGNvbXBsZXRpb25zCisJCSAqLworCQlpZiAobS0+cmVzaWRfZmxhZ3MgPT0gRkNQX1JFU0lEX1VOREVSKQorCQkJcmVzaWR1ZSA9IGJmYV9vc19udG9obChtLT5yZXNpZHVlKTsKKwkJaWYgKG0tPnJlc2lkX2ZsYWdzID09IEZDUF9SRVNJRF9PVkVSKSB7CisJCQlyZXNpZHVlID0gYmZhX29zX250b2hsKG0tPnJlc2lkdWUpOworCQkJcmVzaWR1ZSA9IC1yZXNpZHVlOworCQl9CisJfQorCisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgbS0+aW9fc3RhdHVzLAorCQkJICBtLT5zY3NpX3N0YXR1cywgc25zX2xlbiwgc25zaW5mbywgcmVzaWR1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgQkZJX0lPSU1fU1RTX0FCT1JURUQsCisJCQkgIDAsIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9wYXRodG92KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9kb25lKGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvLCBCRklfSU9JTV9TVFNfUEFUSFRPViwKKwkJCSAgMCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9hYm9ydChpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zZ3BnX2FsbG9jZWQodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWlvaW0tPm5zZ3BncyA9IEJGQV9TR1BHX05QQUdFKGlvaW0tPm5zZ2VzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmlvaW0tPmlvc3AtPnNncGdfd3FlLnNncGdfcSwgJmlvaW0tPnNncGdfcSk7CisJYmZhX2lvaW1fc2dwZ19zZXR1cChpb2ltKTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9TR0FMTE9DRUQpOworfQorCisvKioKKyAqIFNlbmQgSS9PIHJlcXVlc3QgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9pbV9zZW5kX2lvcmVxKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBpb2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZpX2lvaW1fcmVxX3MgKm07CisJc3RhdGljIHN0cnVjdCBmY3BfY21uZF9zIGNtbmRfejAgPSB7IDAgfTsKKwlzdHJ1Y3QgYmZpX3NnZV9zICAgICAgKnNnZTsKKwl1MzIgICAgICAgIHBnZGxlbiA9IDA7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCW0tPmlvX3RhZyA9IGJmYV9vc19odG9ucyhpb2ltLT5pb3RhZyk7CisJbS0+cnBvcnRfaGRsID0gaW9pbS0+aXRuaW0tPnJwb3J0LT5md19oYW5kbGU7CisJbS0+aW9fdGltZW91dCA9IGJmYV9jYl9pb2ltX2dldF90aW1lb3V0KGlvaW0tPmRpbyk7CisKKwkvKioKKwkgKiBidWlsZCBpbmxpbmUgSU8gU0cgZWxlbWVudCBoZXJlCisJICovCisJc2dlID0gJm0tPnNnZXNbMF07CisJaWYgKGlvaW0tPm5zZ2VzKSB7CisJCXNnZS0+c2dhID0gYmZhX2NiX2lvaW1fZ2V0X3NnYWRkcihpb2ltLT5kaW8sIDApOworCQlwZ2RsZW4gPSBiZmFfY2JfaW9pbV9nZXRfc2dsZW4oaW9pbS0+ZGlvLCAwKTsKKwkJc2dlLT5zZ19sZW4gPSBwZ2RsZW47CisJCXNnZS0+ZmxhZ3MgPSAoaW9pbS0+bnNnZXMgPiBCRklfU0dFX0lOTElORSkgPworCQkJCQlCRklfU0dFX0RBVEFfQ1BMIDogQkZJX1NHRV9EQVRBX0xBU1Q7CisJCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKwkJc2dlKys7CisJfQorCisJaWYgKGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpIHsKKwkJc2dlLT5zZ2EgPSBpb2ltLT5zZ3BnLT5zZ3BnX3BhOworCX0gZWxzZSB7CisJCXNnZS0+c2dhLmEzMi5hZGRyX2xvID0gMDsKKwkJc2dlLT5zZ2EuYTMyLmFkZHJfaGkgPSAwOworCX0KKwlzZ2UtPnNnX2xlbiA9IHBnZGxlbjsKKwlzZ2UtPmZsYWdzID0gQkZJX1NHRV9QR0RMRU47CisJYmZhX3NnZV90b19iZShzZ2UpOworCisJLyoqCisJICogc2V0IHVwIEkvTyBjb21tYW5kIHBhcmFtZXRlcnMKKwkgKi8KKwliZmFfb3NfYXNzaWduKG0tPmNtbmQsIGNtbmRfejApOworCW0tPmNtbmQubHVuID0gYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pOworCW0tPmNtbmQuaW9kaXIgPSBiZmFfY2JfaW9pbV9nZXRfaW9kaXIoaW9pbS0+ZGlvKTsKKwliZmFfb3NfYXNzaWduKG0tPmNtbmQuY2RiLAorCQkJKihzdHJ1Y3Qgc2NzaV9jZGJfcyAqKWJmYV9jYl9pb2ltX2dldF9jZGIoaW9pbS0+ZGlvKSk7CisJbS0+Y21uZC5mY3BfZGwgPSBiZmFfb3NfaHRvbmwoYmZhX2NiX2lvaW1fZ2V0X3NpemUoaW9pbS0+ZGlvKSk7CisKKwkvKioKKwkgKiBzZXQgdXAgSS9PIG1lc3NhZ2UgaGVhZGVyCisJICovCisJc3dpdGNoIChtLT5jbW5kLmlvZGlyKSB7CisJY2FzZSBGQ1BfSU9ESVJfUkVBRDoKKwkJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0lNX1JFQUQsIDAsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKwkJYmZhX3N0YXRzKGl0bmltLCBpbnB1dF9yZXFzKTsKKwkJYnJlYWs7CisJY2FzZSBGQ1BfSU9ESVJfV1JJVEU6CisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9XUklURSwgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCQliZmFfc3RhdHMoaXRuaW0sIG91dHB1dF9yZXFzKTsKKwkJYnJlYWs7CisJY2FzZSBGQ1BfSU9ESVJfUlc6CisJCWJmYV9zdGF0cyhpdG5pbSwgaW5wdXRfcmVxcyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgb3V0cHV0X3JlcXMpOworCWRlZmF1bHQ6CisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9JTywgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCX0KKwlpZiAoaXRuaW0tPnNlcV9yZWMgfHwKKwkgICAgKGJmYV9jYl9pb2ltX2dldF9zaXplKGlvaW0tPmRpbykgJiAoc2l6ZW9mKHUzMikgLSAxKSkpCisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9JTywgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCisjaWZkZWYgSU9JTV9BRFZBTkNFRAorCW0tPmNtbmQuY3JuID0gYmZhX2NiX2lvaW1fZ2V0X2Nybihpb2ltLT5kaW8pOworCW0tPmNtbmQucHJpb3JpdHkgPSBiZmFfY2JfaW9pbV9nZXRfcHJpb3JpdHkoaW9pbS0+ZGlvKTsKKwltLT5jbW5kLnRhc2thdHRyID0gYmZhX2NiX2lvaW1fZ2V0X3Rhc2thdHRyKGlvaW0tPmRpbyk7CisKKwkvKioKKwkgKiBIYW5kbGUgbGFyZ2UgQ0RCICg+MTYgYnl0ZXMpLgorCSAqLworCW0tPmNtbmQuYWRkbF9jZGJfbGVuID0gKGJmYV9jYl9pb2ltX2dldF9jZGJsZW4oaW9pbS0+ZGlvKSAtCisJCQkJCUZDUF9DTU5EX0NEQl9MRU4pIC8gc2l6ZW9mKHUzMik7CisJaWYgKG0tPmNtbmQuYWRkbF9jZGJfbGVuKSB7CisJCWJmYV9vc19tZW1jcHkoJm0tPmNtbmQuY2RiICsgMSwgKHN0cnVjdCBzY3NpX2NkYl9zICopCisJCQkJYmZhX2NiX2lvaW1fZ2V0X2NkYihpb2ltLT5kaW8pICsgMSwKKwkJCQltLT5jbW5kLmFkZGxfY2RiX2xlbiAqIHNpemVvZih1MzIpKTsKKwkJZmNwX2NtbmRfZmNwZGwoJm0tPmNtbmQpID0KKwkJCQliZmFfb3NfaHRvbmwoYmZhX2NiX2lvaW1fZ2V0X3NpemUoaW9pbS0+ZGlvKSk7CisJfQorI2VuZGlmCisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIFNldHVwIGFueSBhZGRpdGlvbmFsIFNHIHBhZ2VzIG5lZWRlZC5JbmxpbmUgU0cgZWxlbWVudCBpcyBzZXR1cAorICogYXQgcXVldWluZyB0aW1lLgorICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX2lvaW1fc2dlX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXUxNiAgICAgICAgbnNncGdzOworCisJYmZhX2Fzc2VydChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKTsKKworCS8qKgorCSAqIGFsbG9jYXRlIFNHIHBhZ2VzIG5lZWRlZAorCSAqLworCW5zZ3BncyA9IEJGQV9TR1BHX05QQUdFKGlvaW0tPm5zZ2VzKTsKKwlpZiAoIW5zZ3BncykKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJaWYgKGJmYV9zZ3BnX21hbGxvYyhpb2ltLT5iZmEsICZpb2ltLT5zZ3BnX3EsIG5zZ3BncykKKwkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfc2dwZ193YWl0KGlvaW0tPmJmYSwgJmlvaW0tPmlvc3AtPnNncGdfd3FlLCBuc2dwZ3MpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWlvaW0tPm5zZ3BncyA9IG5zZ3BnczsKKwliZmFfaW9pbV9zZ3BnX3NldHVwKGlvaW0pOworCisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc2dwZ19zZXR1cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlpbnQgICAgICAgICAgICAgc2dlaWQsIG5zZ2VzLCBpOworCXN0cnVjdCBiZmlfc2dlX3MgICAgICAqc2dlOworCXN0cnVjdCBiZmFfc2dwZ19zICpzZ3BnOworCXUzMiAgICAgICAgcGdjdW1zejsKKworCXNnZWlkID0gQkZJX1NHRV9JTkxJTkU7CisJaW9pbS0+c2dwZyA9IHNncGcgPSBiZmFfcV9maXJzdCgmaW9pbS0+c2dwZ19xKTsKKworCWRvIHsKKwkJc2dlID0gc2dwZy0+c2dwZy0+c2dlczsKKwkJbnNnZXMgPSBpb2ltLT5uc2dlcyAtIHNnZWlkOworCQlpZiAobnNnZXMgPiBCRklfU0dQR19EQVRBX1NHRVMpCisJCQluc2dlcyA9IEJGSV9TR1BHX0RBVEFfU0dFUzsKKworCQlwZ2N1bXN6ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG5zZ2VzOyBpKyssIHNnZSsrLCBzZ2VpZCsrKSB7CisJCQlzZ2UtPnNnYSA9IGJmYV9jYl9pb2ltX2dldF9zZ2FkZHIoaW9pbS0+ZGlvLCBzZ2VpZCk7CisJCQlzZ2UtPnNnX2xlbiA9IGJmYV9jYl9pb2ltX2dldF9zZ2xlbihpb2ltLT5kaW8sIHNnZWlkKTsKKwkJCXBnY3Vtc3ogKz0gc2dlLT5zZ19sZW47CisKKwkJCS8qKgorCQkJICogc2V0IGZsYWdzCisJCQkgKi8KKwkJCWlmIChpIDwgKG5zZ2VzIC0gMSkpCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQTsKKwkJCWVsc2UgaWYgKHNnZWlkIDwgKGlvaW0tPm5zZ2VzIC0gMSkpCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQV9DUEw7CisJCQllbHNlCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQV9MQVNUOworCQl9CisKKwkJc2dwZyA9IChzdHJ1Y3QgYmZhX3NncGdfcyAqKSBiZmFfcV9uZXh0KHNncGcpOworCisJCS8qKgorCQkgKiBzZXQgdGhlIGxpbmsgZWxlbWVudCBvZiBlYWNoIHBhZ2UKKwkJICovCisJCWlmIChzZ2VpZCA9PSBpb2ltLT5uc2dlcykgeworCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfUEdETEVOOworCQkJc2dlLT5zZ2EuYTMyLmFkZHJfbG8gPSAwOworCQkJc2dlLT5zZ2EuYTMyLmFkZHJfaGkgPSAwOworCQl9IGVsc2UgeworCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfTElOSzsKKwkJCXNnZS0+c2dhID0gc2dwZy0+c2dwZ19wYTsKKwkJfQorCQlzZ2UtPnNnX2xlbiA9IHBnY3Vtc3o7CisJfSB3aGlsZSAoc2dlaWQgPCBpb2ltLT5uc2dlcyk7Cit9CisKKy8qKgorICogU2VuZCBJL08gYWJvcnQgcmVxdWVzdCB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICAgICAgICAgICppdG5pbSA9IGlvaW0tPml0bmltOworCXN0cnVjdCBiZmlfaW9pbV9hYm9ydF9yZXFfcyAqbTsKKwllbnVtIGJmaV9pb2ltX2gyaSAgICAgICBtc2dvcDsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChpb2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlpZiAoIW0pCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwkvKioKKwkgKiBidWlsZCBpL28gcmVxdWVzdCBtZXNzYWdlIG5leHQKKwkgKi8KKwlpZiAoaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQpCisJCW1zZ29wID0gQkZJX0lPSU1fSDJJX0lPQUJPUlRfUkVROworCWVsc2UKKwkJbXNnb3AgPSBCRklfSU9JTV9IMklfSU9DTEVBTlVQX1JFUTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTSwgbXNnb3AsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKwltLT5pb190YWcgICAgPSBiZmFfb3NfaHRvbnMoaW9pbS0+aW90YWcpOworCW0tPmFib3J0X3RhZyA9ICsraW9pbS0+YWJvcnRfdGFnOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKGlvaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiBDYWxsIHRvIHJlc3VtZSBhbnkgSS9PIHJlcXVlc3RzIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWJmYV9mY3BpbV9zdGF0cyhpb2ltLT5mY3BpbSwgcXJlc3VtZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX1FSRVNVTUUpOworfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9ub3RpZnlfY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwkvKioKKwkgKiBNb3ZlIElPIGZyb20gaXRuaW0gcXVldWUgdG8gZmNwaW0gZ2xvYmFsIHF1ZXVlIHNpbmNlIGl0bmltIHdpbGwgYmUKKwkgKiBmcmVlZC4KKwkgKi8KKwlsaXN0X2RlbCgmaW9pbS0+cWUpOworCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKKworCWlmICghaW9pbS0+aW9zcC0+dHNraW0pIHsKKwkJaWYgKGlvaW0tPmZjcGltLT5kZWxheV9jb21wICYmIGlvaW0tPml0bmltLT5pb3Rvdl9hY3RpdmUpIHsKKwkJCWJmYV9jYl9kZXF1ZXVlKCZpb2ltLT5oY2JfcWUpOworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+aXRuaW0tPmRlbGF5X2NvbXBfcSk7CisJCX0KKwkJYmZhX2l0bmltX2lvZG9uZShpb2ltLT5pdG5pbSk7CisJfSBlbHNlCisJCWJmYV90c2tpbV9pb2RvbmUoaW9pbS0+aW9zcC0+dHNraW0pOworfQorCisvKioKKyAqIAkJICBvciBhZnRlciB0aGUgbGluayBjb21lcyBiYWNrLgorICovCit2b2lkCitiZmFfaW9pbV9kZWxheWVkX2NvbXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGJmYV9ib29sZWFuX3QgaW90b3YpCit7CisJLyoqCisJICogSWYgcGF0aCB0b3YgdGltZXIgZXhwaXJlZCwgZmFpbGJhY2sgd2l0aCBQQVRIVE9WIHN0YXR1cyAtIHRoZXNlCisJICogSU8gcmVxdWVzdHMgYXJlIG5vdCBub3JtYWxseSByZXRyaWVkIGJ5IElPIHN0YWNrLgorCSAqCisJICogT3RoZXJ3aXNlIGRldmljZSBjYW1lYmFjayBvbmxpbmUgYW5kIGZhaWwgaXQgd2l0aCBub3JtYWwgZmFpbGVkCisJICogc3RhdHVzIHNvIHRoYXQgSU8gc3RhY2sgcmV0cmllcyB0aGVzZSBmYWlsZWQgSU8gcmVxdWVzdHMuCisJICovCisJaWYgKGlvdG92KQorCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9wYXRodG92OworCWVsc2UKKwkJaW9pbS0+aW9fY2JmbiA9IF9fYmZhX2NiX2lvaW1fZmFpbGVkOworCisJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisKKyAgICAvKioKKyAgICAgKiBNb3ZlIElPIHRvIGZjcGltIGdsb2JhbCBxdWV1ZSBzaW5jZSBpdG5pbSB3aWxsIGJlCisgICAgICogZnJlZWQuCisgICAgICovCisgICAgbGlzdF9kZWwoJmlvaW0tPnFlKTsKKyAgICBsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7Cit9CisKKworCisvKioKKyAqICBiZmFfaW9pbV9mcmllbmQKKyAqLworCisvKioKKyAqIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KKyAqLwordm9pZAorYmZhX2lvaW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pCit7CisJc3RydWN0IGJmYV9pb2ltX3MJCSppb2ltOworCXN0cnVjdCBiZmFfaW9pbV9zcF9zCSppb3NwOworCXUxNgkJaTsKKwl1OAkJCSpzbnNpbmZvOworCXUzMgkJc25zYnVmc3o7CisKKwkvKioKKwkgKiBjbGFpbSBtZW1vcnkgZmlyc3QKKwkgKi8KKwlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIGJmYV9tZW1pbmZvX2t2YShtaW5mbyk7CisJZmNwaW0tPmlvaW1fYXJyID0gaW9pbTsKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIChpb2ltICsgZmNwaW0tPm51bV9pb2ltX3JlcXMpOworCisJaW9zcCA9IChzdHJ1Y3QgYmZhX2lvaW1fc3BfcyAqKSBiZmFfbWVtaW5mb19rdmEobWluZm8pOworCWZjcGltLT5pb2ltX3NwX2FyciA9IGlvc3A7CisJYmZhX21lbWluZm9fa3ZhKG1pbmZvKSA9ICh1OCAqKSAoaW9zcCArIGZjcGltLT5udW1faW9pbV9yZXFzKTsKKworCS8qKgorCSAqIENsYWltIERNQSBtZW1vcnkgZm9yIHBlciBJTyBzZW5zZSBkYXRhLgorCSAqLworCXNuc2J1ZnN6ID0gZmNwaW0tPm51bV9pb2ltX3JlcXMgKiBCRklfSU9JTV9TTlNMRU47CisJZmNwaW0tPnNuc2Jhc2UucGEgID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWluZm8pOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1pbmZvKSArPSBzbnNidWZzejsKKworCWZjcGltLT5zbnNiYXNlLmt2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pbmZvKTsKKwliZmFfbWVtaW5mb19kbWFfdmlydChtaW5mbykgKz0gc25zYnVmc3o7CisJc25zaW5mbyA9IGZjcGltLT5zbnNiYXNlLmt2YTsKKwliZmFfaW9jZmNfc2V0X3Nuc2Jhc2UoZmNwaW0tPmJmYSwgZmNwaW0tPnNuc2Jhc2UucGEpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBpb2ltIGZyZWUgcXVldWVzCisJICovCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX3Jlc2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX2NvbXBfcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmNwaW0tPm51bV9pb2ltX3JlcXM7CisJICAgICBpKyssIGlvaW0rKywgaW9zcCsrLCBzbnNpbmZvICs9IEJGSV9JT0lNX1NOU0xFTikgeworCQkvKgorCQkgKiBpbml0aWFsaXplIElPSU0KKwkJICovCisJCWJmYV9vc19tZW1zZXQoaW9pbSwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaW9pbV9zKSk7CisJCWlvaW0tPmlvdGFnICAgPSBpOworCQlpb2ltLT5iZmEgICAgID0gZmNwaW0tPmJmYTsKKwkJaW9pbS0+ZmNwaW0gICA9IGZjcGltOworCQlpb2ltLT5pb3NwICAgID0gaW9zcDsKKwkJaW9zcC0+c25zaW5mbyA9IHNuc2luZm87CisJCUlOSVRfTElTVF9IRUFEKCZpb2ltLT5zZ3BnX3EpOworCQliZmFfcmVxcV93aW5pdCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0LAorCQkJCSAgIGJmYV9pb2ltX3FyZXN1bWUsIGlvaW0pOworCQliZmFfc2dwZ193aW5pdCgmaW9pbS0+aW9zcC0+c2dwZ193cWUsCisJCQkJICAgYmZhX2lvaW1fc2dwZ19hbGxvY2VkLCBpb2ltKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV91bmluaXQpOworCisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmZmNwaW0tPmlvaW1fZnJlZV9xKTsKKwl9Cit9CisKKy8qKgorICogRHJpdmVyIGRldGFjaCB0aW1lIGNhbGwuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSkKK3sKK30KKwordm9pZAorYmZhX2lvaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqcnNwID0gKHN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqKSBtOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXUxNiAgICAgICAgaW90YWc7CisJZW51bSBiZmFfaW9pbV9ldmVudCBldnQgPSBCRkFfSU9JTV9TTV9DT01QOworCisJaW90YWcgPSBiZmFfb3NfbnRvaHMocnNwLT5pb190YWcpOworCisJaW9pbSA9IEJGQV9JT0lNX0ZST01fVEFHKGZjcGltLCBpb3RhZyk7CisJYmZhX2Fzc2VydChpb2ltLT5pb3RhZyA9PSBpb3RhZyk7CisKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCByc3AtPmlvX3N0YXR1cyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIHJzcC0+cmV1c2VfaW9fdGFnKTsKKworCWlmIChiZmFfc21fY21wX3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSkpCisJCWJmYV9vc19hc3NpZ24oaW9pbS0+aW9zcC0+Y29tcF9yc3Btc2csICptKTsKKworCXN3aXRjaCAocnNwLT5pb19zdGF0dXMpIHsKKwljYXNlIEJGSV9JT0lNX1NUU19PSzoKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbXBfb2spOworCQlpZiAocnNwLT5yZXVzZV9pb190YWcgPT0gMCkKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0RPTkU7CisJCWVsc2UKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfVElNRURPVVQ6CisJY2FzZSBCRklfSU9JTV9TVFNfQUJPUlRFRDoKKwkJcnNwLT5pb19zdGF0dXMgPSBCRklfSU9JTV9TVFNfQUJPUlRFRDsKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbXBfYWJvcnRlZCk7CisJCWlmIChyc3AtPnJldXNlX2lvX3RhZyA9PSAwKQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fRE9ORTsKKwkJZWxzZQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQ09NUDsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19QUk9UT19FUlI6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21fcHJvdG9fZXJyKTsKKwkJYmZhX2Fzc2VydChyc3AtPnJldXNlX2lvX3RhZyk7CisJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfU1FFUl9ORUVERUQ6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21fc3Flcl9uZWVkZWQpOworCQliZmFfYXNzZXJ0KHJzcC0+cmV1c2VfaW9fdGFnID09IDApOworCQlldnQgPSBCRkFfSU9JTV9TTV9TUVJFVFJZOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX1JFU19GUkVFOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX3Jlc19mcmVlKTsKKwkJZXZ0ID0gQkZBX0lPSU1fU01fRlJFRTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19IT1NUX0FCT1JURUQ6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21faG9zdGFicnRzKTsKKwkJaWYgKHJzcC0+YWJvcnRfdGFnICE9IGlvaW0tPmFib3J0X3RhZykgeworCQkJYmZhX3RyYyhpb2ltLT5iZmEsIHJzcC0+YWJvcnRfdGFnKTsKKwkJCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5hYm9ydF90YWcpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHJzcC0+cmV1c2VfaW9fdGFnKQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQUJPUlRfQ09NUDsKKwkJZWxzZQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQUJPUlRfRE9ORTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19VVEFHOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX3V0YWdzKTsKKwkJZXZ0ID0gQkZBX0lPSU1fU01fQ09NUF9VVEFHOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgZXZ0KTsKK30KKwordm9pZAorYmZhX2lvaW1fZ29vZF9jb21wX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKnJzcCA9IChzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKikgbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwl1MTYgICAgICAgIGlvdGFnOworCisJaW90YWcgPSBiZmFfb3NfbnRvaHMocnNwLT5pb190YWcpOworCisJaW9pbSA9IEJGQV9JT0lNX0ZST01fVEFHKGZjcGltLCBpb3RhZyk7CisJYmZhX2Fzc2VydChpb2ltLT5pb3RhZyA9PSBpb3RhZyk7CisKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0NPTVBfR09PRCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGl0bmltIHRvIGNsZWFuIHVwIElPIHdoaWxlIGdvaW5nIG9mZmxpbmUuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2NsZWFudXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfZmNwaW1fc3RhdHMoaW9pbS0+ZmNwaW0sIGlvX2NsZWFudXBzKTsKKworCWlvaW0tPmlvc3AtPnRza2ltID0gTlVMTDsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DTEVBTlVQKTsKK30KKwordm9pZAorYmZhX2lvaW1fY2xlYW51cF90bShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9mY3BpbV9zdGF0cyhpb2ltLT5mY3BpbSwgaW9fdG1hYm9ydHMpOworCisJaW9pbS0+aW9zcC0+dHNraW0gPSB0c2tpbTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DTEVBTlVQKTsKK30KKworLyoqCisgKiBJT0MgZmFpbHVyZSBoYW5kbGluZy4KKyAqLwordm9pZAorYmZhX2lvaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IV0ZBSUwpOworfQorCisvKioKKyAqIElPIG9mZmxpbmUgVE9WIHBvcHBlZC4gRmFpbCB0aGUgcGVuZGluZyBJTy4KKyAqLwordm9pZAorYmZhX2lvaW1fdG92KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0lPVE9WKTsKK30KKworCisKKy8qKgorICogIGJmYV9pb2ltX2FwaQorICovCisKKy8qKgorICogQWxsb2NhdGUgSU9JTSByZXNvdXJjZSBmb3IgaW5pdGlhdG9yIG1vZGUgSS9PIHJlcXVlc3QuCisgKi8KK3N0cnVjdCBiZmFfaW9pbV9zICoKK2JmYV9pb2ltX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgdTE2IG5zZ2VzKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCisJLyoqCisJICogYWxvY2F0ZSBJT0lNIHJlc291cmNlCisJICovCisJYmZhX3FfZGVxKCZmY3BpbS0+aW9pbV9mcmVlX3EsICZpb2ltKTsKKwlpZiAoIWlvaW0pIHsKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBub19pb3RhZ3MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpb2ltLT5kaW8gPSBkaW87CisJaW9pbS0+aXRuaW0gPSBpdG5pbTsKKwlpb2ltLT5uc2dlcyA9IG5zZ2VzOworCWlvaW0tPm5zZ3BncyA9IDA7CisKKwliZmFfc3RhdHMoZmNwaW0sIHRvdGFsX2lvcyk7CisJYmZhX3N0YXRzKGl0bmltLCBpb3MpOworCWZjcGltLT5pb3NfYWN0aXZlKys7CisKKwlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJml0bmltLT5pb19xKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCisJcmV0dXJuIGlvaW07Cit9CisKK3ZvaWQKK2JmYV9pb2ltX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBpb2ltLT5mY3BpbTsKKworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX2Fzc2VydF9mcChiZmFfc21fY21wX3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3VuaW5pdCkpOworCisJYmZhX2Fzc2VydF9mcChsaXN0X2VtcHR5KCZpb2ltLT5zZ3BnX3EpCisJCSAgIHx8IChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSk7CisKKwlpZiAoaW9pbS0+bnNncGdzID4gMCkKKwkJYmZhX3NncGdfbWZyZWUoaW9pbS0+YmZhLCAmaW9pbS0+c2dwZ19xLCBpb2ltLT5uc2dwZ3MpOworCisJYmZhX3N0YXRzKGlvaW0tPml0bmltLCBpb19jb21wcyk7CisJZmNwaW0tPmlvc19hY3RpdmUtLTsKKworCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZmY3BpbS0+aW9pbV9mcmVlX3EpOworfQorCit2b2lkCitiZmFfaW9pbV9zdGFydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiBEcml2ZXIgSS9PIGFib3J0IHJlcXVlc3QuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2Fib3J0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX2ZjcGltX3N0YXRzKGlvaW0tPmZjcGltLCBpb19hYm9ydHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0FCT1JUKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pdG5pbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaXRuaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVjNjFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaXRuaW0uYwpAQCAtMCwwICsxLDEwODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9mY3BpbS5oPgorI2luY2x1ZGUgImJmYV9mY3BpbV9wcml2LmgiCisKK0JGQV9UUkNfRklMRShIQUwsIElUTklNKTsKKworI2RlZmluZSBCRkFfSVROSU1fRlJPTV9UQUcoX2ZjcGltLCBfdGFnKQkJCQlcCisJKChfZmNwaW0pLT5pdG5pbV9hcnIgKyAoKF90YWcpICYgKChfZmNwaW0pLT5udW1faXRuaW1zIC0gMSkpKQorCisjZGVmaW5lIGJmYV9mY3BpbV9hZGRpdG4oX19pdG5pbSkJCQkJCVwKKwlsaXN0X2FkZF90YWlsKCYoX19pdG5pbSktPnFlLCAmKF9faXRuaW0pLT5mY3BpbS0+aXRuaW1fcSkKKyNkZWZpbmUgYmZhX2ZjcGltX2RlbGl0bihfX2l0bmltKQlkbyB7CQkJCVwKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJihfX2l0bmltKS0+ZmNwaW0tPml0bmltX3EsIF9faXRuaW0pKTsgICAgICBcCisJbGlzdF9kZWwoJihfX2l0bmltKS0+cWUpOyAgICAgIFwKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJihfX2l0bmltKS0+aW9fcSkpOyAgICAgIFwKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJihfX2l0bmltKS0+aW9fY2xlYW51cF9xKSk7ICAgICAgXAorCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmKF9faXRuaW0pLT5wZW5kaW5nX3EpKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9pdG5pbV9vbmxpbmVfY2IoX19pdG5pbSkgZG8gewkJCQlcCisJaWYgKChfX2l0bmltKS0+YmZhLT5mY3MpCQkJCQlcCisJCWJmYV9jYl9pdG5pbV9vbmxpbmUoKF9faXRuaW0pLT5kaXRuKTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19pdG5pbSktPmJmYSwgJihfX2l0bmltKS0+aGNiX3FlLAlcCisJCV9fYmZhX2NiX2l0bmltX29ubGluZSwgKF9faXRuaW0pKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfaXRuaW1fb2ZmbGluZV9jYihfX2l0bmltKSBkbyB7CQkJCVwKKwlpZiAoKF9faXRuaW0pLT5iZmEtPmZjcykJCQkJCVwKKwkJYmZhX2NiX2l0bmltX29mZmxpbmUoKF9faXRuaW0pLT5kaXRuKTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19pdG5pbSktPmJmYSwgJihfX2l0bmltKS0+aGNiX3FlLAlcCisJCV9fYmZhX2NiX2l0bmltX29mZmxpbmUsIChfX2l0bmltKSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX2l0bmltX3NsZXJfY2IoX19pdG5pbSkgZG8gewkJCQkJXAorCWlmICgoX19pdG5pbSktPmJmYS0+ZmNzKQkJCQkJXAorCQliZmFfY2JfaXRuaW1fc2xlcigoX19pdG5pbSktPmRpdG4pOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX2l0bmltKS0+YmZhLCAmKF9faXRuaW0pLT5oY2JfcWUsCVwKKwkJX19iZmFfY2JfaXRuaW1fc2xlciwgKF9faXRuaW0pKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fY2xlYW5wX2NvbXAodm9pZCAqaXRuaW1fY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX2l0bmltX29ubGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfaXRuaW1fb2ZmbGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfaXRuaW1fc2xlcih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3ZfY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3Yodm9pZCAqaXRuaW1fYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3Zfc3RhcnQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X3N0b3Aoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKKworLyoqCisgKiAgYmZhX2l0bmltX3NtIEJGQSBpdG5pbSBzdGF0ZSBtYWNoaW5lCisgKi8KKworCitlbnVtIGJmYV9pdG5pbV9ldmVudCB7CisJQkZBX0lUTklNX1NNX0NSRUFURSA9IDEsCS8qICBpdG5pbSBpcyBjcmVhdGVkICovCisJQkZBX0lUTklNX1NNX09OTElORSA9IDIsCS8qICBpdG5pbSBpcyBvbmxpbmUgKi8KKwlCRkFfSVROSU1fU01fT0ZGTElORSA9IDMsCS8qICBpdG5pbSBpcyBvZmZsaW5lICovCisJQkZBX0lUTklNX1NNX0ZXUlNQID0gNCwJCS8qICBmaXJtd2FyZSByZXNwb25zZSAqLworCUJGQV9JVE5JTV9TTV9ERUxFVEUgPSA1LAkvKiAgZGVsZXRpbmcgYW4gZXhpc3RpbmcgaXRuaW0gKi8KKwlCRkFfSVROSU1fU01fQ0xFQU5VUCA9IDYsCS8qICBJTyBjbGVhbnVwIGNvbXBsZXRpb24gKi8KKwlCRkFfSVROSU1fU01fU0xFUiA9IDcsCQkvKiAgc2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5ICovCisJQkZBX0lUTklNX1NNX0hXRkFJTCA9IDgsCS8qICBJT0MgaC93IGZhaWx1cmUgZXZlbnQgKi8KKwlCRkFfSVROSU1fU01fUVJFU1VNRSA9IDksCS8qICBxdWV1ZSBzcGFjZSBhdmFpbGFibGUgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fdW5pbml0KHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2NyZWF0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9pdG5pbV9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fc2xlcihzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCSAgICAgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9jbGVhbnVwX2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2NyZWF0ZV9xZnVsbChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fZndkZWxldGVfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2RlbGV0aW5nX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworCisvKioKKyAqIAkJQmVnaW5uaW5nL3VuYWxsb2NhdGVkIHN0YXRlIC0gbm8gZXZlbnRzIGV4cGVjdGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jcmVhdGVkKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9GQUxTRTsKKwkJYmZhX2ZjcGltX2FkZGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlCZWdpbm5pbmcgc3RhdGUsIG9ubHkgb25saW5lIGV2ZW50IGV4cGVjdGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fT05MSU5FOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVdhaXRpbmcgZm9yIGl0bmltIGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0ZXUlNQOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fb25saW5lKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9UUlVFOworCQliZmFfaXRuaW1faW90b3Zfb25saW5lKGl0bmltKTsKKwkJYmZhX2l0bmltX29ubGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRlX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpOworCQliZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCVdhaXRpbmcgZm9yIGl0bmltIGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLCBhIGRlbGV0ZSBpcyBwZW5kaW5nLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2RlbGV0ZV9wZW5kaW5nKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJT25saW5lIHN0YXRlIC0gbm9ybWFsIHBhcmtpbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1faW90b3Zfc3RhcnQoaXRuaW0pOworCQliZmFfaXRuaW1fY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1fY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fU0xFUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3NsZXIpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1faW90b3Zfc3RhcnQoaXRuaW0pOworCQliZmFfaXRuaW1fc2xlcl9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWl0bmltLT5pc19vbmxpbmUgPSBCRkFfRkFMU0U7CisJCWJmYV9pdG5pbV9pb3Rvdl9zdGFydChpdG5pbSk7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJU2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5IG5lZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fc2xlcihzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKTsKKwkJYmZhX2l0bmltX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKTsKKwkJYmZhX2l0bmltX2NsZWFudXAoaXRuaW0pOworCQliZmFfaXRuaW1faW90b3ZfZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlHb2luZyBvZmZsaW5lLiBXYWl0aW5nIGZvciBhY3RpdmUgSU8gY2xlYW51cC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fQ0xFQU5VUDoKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUpOworCQliZmFfaXRuaW1faW90b3ZfZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChpdG5pbSk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9TTEVSOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJRGVsZXRpbmcgaXRuaW0uIFdhaXRpbmcgZm9yIGFjdGl2ZSBJTyBjbGVhbnVwLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fQ0xFQU5VUDoKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZ19xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJwb3J0IG9mZmxpbmUuIEZpbXJ3YXJlIGl0bmltIGlzIGJlaW5nIGRlbGV0ZWQgLSBhd2FpdGluZyBmL3cgcmVzcG9uc2UuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZndkZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3ZGVsZXRlX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGUpOworCQliZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJT2ZmbGluZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoaXRuaW0pOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PTkxJTkU6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU9DIGgvdyBmYWlsZWQgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJICAgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoaXRuaW0pOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfaXRuaW1fb2ZmbGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fT05MSU5FOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJdG5pbSBpcyBkZWxldGVkLCB3YWl0aW5nIGZvciBmaXJtd2FyZSByZXNwb25zZSB0byBkZWxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZGVsZXRpbmcoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZyk7CisJCWJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaXRuaW1fcHJpdmF0ZQorICovCisKKy8qKgorICogCQlJbml0aWF0ZSBjbGVhbnVwIG9mIGFsbCBJT3Mgb24gYW4gSU9DIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT50c2tfcSkgeworCQl0c2tpbSA9IChzdHJ1Y3QgYmZhX3Rza2ltX3MgKikgcWU7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlKHRza2ltKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV9pb2ltX2lvY2Rpc2FibGUoaW9pbSk7CisJfQorCisJLyoqCisJICogRm9yIElPIHJlcXVlc3QgaW4gcGVuZGluZyBxdWV1ZSwgd2UgcHJldGVuZCBhbiBlYXJseSB0aW1lb3V0LgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPnBlbmRpbmdfcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfaW9pbV90b3YoaW9pbSk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+aW9fY2xlYW51cF9xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV9pb2ltX2lvY2Rpc2FibGUoaW9pbSk7CisJfQorfQorCisvKioKKyAqIAkJSU8gY2xlYW51cCBjb21wbGV0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fY2xlYW5wX2NvbXAodm9pZCAqaXRuaW1fY2JhcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGl0bmltX2NiYXJnOworCisJYmZhX3N0YXRzKGl0bmltLCBjbGVhbnVwX2NvbXBzKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX0NMRUFOVVApOworfQorCisvKioKKyAqIAkJSW5pdGlhdGUgY2xlYW51cCBvZiBhbGwgSU9zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAgKmlvaW07CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgKnFlLCAqcWVuOworCisJYmZhX3djX2luaXQoJml0bmltLT53YywgYmZhX2l0bmltX2NsZWFucF9jb21wLCBpdG5pbSk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisKKwkJLyoqCisJCSAqIE1vdmUgSU8gdG8gYSBjbGVhbnVwIHF1ZXVlIGZyb20gYWN0aXZlIHF1ZXVlIHNvIHRoYXQgYSBsYXRlcgorCQkgKiBUTSB3aWxsIG5vdCBwaWNrdXAgdGhpcyBJTy4KKwkJICovCisJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaXRuaW0tPmlvX2NsZWFudXBfcSk7CisKKwkJYmZhX3djX3VwKCZpdG5pbS0+d2MpOworCQliZmFfaW9pbV9jbGVhbnVwKGlvaW0pOworCX0KKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPnRza19xKSB7CisJCXRza2ltID0gKHN0cnVjdCBiZmFfdHNraW1fcyAqKSBxZTsKKwkJYmZhX3djX3VwKCZpdG5pbS0+d2MpOworCQliZmFfdHNraW1fY2xlYW51cCh0c2tpbSk7CisJfQorCisJYmZhX3djX3dhaXQoJml0bmltLT53Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pdG5pbV9vbmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfaXRuaW1fb25saW5lKGl0bmltLT5kaXRuKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2l0bmltX29mZmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfaXRuaW1fb2ZmbGluZShpdG5pbS0+ZGl0bik7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pdG5pbV9zbGVyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX2l0bmltX3NsZXIoaXRuaW0tPmRpdG4pOworfQorCisvKioKKyAqIENhbGwgdG8gcmVzdW1lIGFueSBJL08gcmVxdWVzdHMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9RUkVTVU1FKTsKK30KKworCisKKworLyoqCisgKiAgYmZhX2l0bmltX3B1YmxpYworICovCisKK3ZvaWQKK2JmYV9pdG5pbV9pb2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfd2NfZG93bigmaXRuaW0tPndjKTsKK30KKwordm9pZAorYmZhX2l0bmltX3Rza2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfd2NfZG93bigmaXRuaW0tPndjKTsKK30KKwordm9pZAorYmZhX2l0bmltX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJLyoqCisJICogSVROIG1lbW9yeQorCSAqLworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1fcnBvcnRzICogc2l6ZW9mKHN0cnVjdCBiZmFfaXRuaW1fcyk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbykKK3sKKwlzdHJ1Y3QgYmZhX3MgICAgICAqYmZhID0gZmNwaW0tPmJmYTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCWludCAgICAgICAgICAgICBpOworCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pdG5pbV9xKTsKKworCWl0bmltID0gKHN0cnVjdCBiZmFfaXRuaW1fcyAqKSBiZmFfbWVtaW5mb19rdmEobWluZm8pOworCWZjcGltLT5pdG5pbV9hcnIgPSBpdG5pbTsKKworCWZvciAoaSA9IDA7IGkgPCBmY3BpbS0+bnVtX2l0bmltczsgaSsrLCBpdG5pbSsrKSB7CisJCWJmYV9vc19tZW1zZXQoaXRuaW0sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2l0bmltX3MpKTsKKwkJaXRuaW0tPmJmYSA9IGJmYTsKKwkJaXRuaW0tPmZjcGltID0gZmNwaW07CisJCWl0bmltLT5yZXFxID0gQkZBX1JFUVFfUU9TX0xPOworCQlpdG5pbS0+cnBvcnQgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBpKTsKKwkJaXRuaW0tPmlvdG92X2FjdGl2ZSA9IEJGQV9GQUxTRTsKKwkJYmZhX3JlcXFfd2luaXQoJml0bmltLT5yZXFxX3dhaXQsIGJmYV9pdG5pbV9xcmVzdW1lLCBpdG5pbSk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT5pb19xKTsKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT5pb19jbGVhbnVwX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPnBlbmRpbmdfcSk7CisJCUlOSVRfTElTVF9IRUFEKCZpdG5pbS0+dHNrX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPmRlbGF5X2NvbXBfcSk7CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCX0KKworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgaXRuaW07Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3N0YXRzKGl0bmltLCBpb2NfZGlzYWJsZWQpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fSFdGQUlMKTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pdG5pbV9zZW5kX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcmVxX3MgKm07CisKKwlpdG5pbS0+bXNnX25vKys7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KGl0bmltLT5iZmEsIGl0bmltLT5yZXFxLCAmaXRuaW0tPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JVE5JTSwgQkZJX0lUTklNX0gySV9DUkVBVEVfUkVRLAorCQkJYmZhX2xwdWlkKGl0bmltLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBpdG5pbS0+cnBvcnQtPmZ3X2hhbmRsZTsKKwltLT5jbGFzcyA9IEZDX0NMQVNTXzM7CisJbS0+c2VxX3JlYyA9IGl0bmltLT5zZXFfcmVjOworCW0tPm1zZ19ubyA9IGl0bmltLT5tc2dfbm87CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KGl0bmltLT5iZmEsIGl0bmltLT5yZXFxLCAmaXRuaW0tPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JVE5JTSwgQkZJX0lUTklNX0gySV9ERUxFVEVfUkVRLAorCQkJYmZhX2xwdWlkKGl0bmltLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBpdG5pbS0+cnBvcnQtPmZ3X2hhbmRsZTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShpdG5pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIENsZWFudXAgYWxsIHBlbmRpbmcgZmFpbGVkIGluZmxpZ2h0IHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2RlbGF5ZWRfY29tcChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBiZmFfYm9vbGVhbl90IGlvdG92KQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+ZGVsYXlfY29tcF9xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKilxZTsKKwkJYmZhX2lvaW1fZGVsYXllZF9jb21wKGlvaW0sIGlvdG92KTsKKwl9Cit9CisKKy8qKgorICogU3RhcnQgYWxsIHBlbmRpbmcgSU8gcmVxdWVzdHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3Zfb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisKKwliZmFfaXRuaW1faW90b3Zfc3RvcChpdG5pbSk7CisKKwkvKioKKwkgKiBBYm9ydCBhbGwgaW5mbGlnaHQgSU8gcmVxdWVzdHMgaW4gdGhlIHF1ZXVlCisJICovCisJYmZhX2l0bmltX2RlbGF5ZWRfY29tcChpdG5pbSwgQkZBX0ZBTFNFKTsKKworCS8qKgorCSAqIFN0YXJ0IGFsbCBwZW5kaW5nIElPIHJlcXVlc3RzLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmaXRuaW0tPnBlbmRpbmdfcSkpIHsKKwkJYmZhX3FfZGVxKCZpdG5pbS0+cGVuZGluZ19xLCAmaW9pbSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaXRuaW0tPmlvX3EpOworCQliZmFfaW9pbV9zdGFydChpb2ltKTsKKwl9Cit9CisKKy8qKgorICogRmFpbCBhbGwgcGVuZGluZyBJTyByZXF1ZXN0cworICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKworCS8qKgorCSAqIEZhaWwgYWxsIGluZmxpZ2h0IElPIHJlcXVlc3RzIGluIHRoZSBxdWV1ZQorCSAqLworCWJmYV9pdG5pbV9kZWxheWVkX2NvbXAoaXRuaW0sIEJGQV9UUlVFKTsKKworCS8qKgorCSAqIEZhaWwgYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZpdG5pbS0+cGVuZGluZ19xKSkgeworCQliZmFfcV9kZXEoJml0bmltLT5wZW5kaW5nX3EsICZpb2ltKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworCQliZmFfaW9pbV90b3YoaW9pbSk7CisJfQorfQorCisvKioKKyAqIElPIFRPViB0aW1lciBjYWxsYmFjay4gRmFpbCBhbnkgcGVuZGluZyBJTyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb3Rvdih2b2lkICppdG5pbV9hcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGl0bmltX2FyZzsKKworCWl0bmltLT5pb3Rvdl9hY3RpdmUgPSBCRkFfRkFMU0U7CisKKwliZmFfY2JfaXRuaW1fdG92X2JlZ2luKGl0bmltLT5kaXRuKTsKKwliZmFfaXRuaW1faW90b3ZfY2xlYW51cChpdG5pbSk7CisJYmZhX2NiX2l0bmltX3RvdihpdG5pbS0+ZGl0bik7Cit9CisKKy8qKgorICogU3RhcnQgSU8gVE9WIHRpbWVyIGZvciBmYWlsaW5nIGJhY2sgcGVuZGluZyBJTyByZXF1ZXN0cyBpbiBvZmZsaW5lIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X3N0YXJ0KHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJaWYgKGl0bmltLT5mY3BpbS0+cGF0aF90b3YgPiAwKSB7CisKKwkJaXRuaW0tPmlvdG92X2FjdGl2ZSA9IEJGQV9UUlVFOworCQliZmFfYXNzZXJ0KGJmYV9pdG5pbV9ob2xkX2lvKGl0bmltKSk7CisJCWJmYV90aW1lcl9zdGFydChpdG5pbS0+YmZhLCAmaXRuaW0tPnRpbWVyLAorCQkJYmZhX2l0bmltX2lvdG92LCBpdG5pbSwgaXRuaW0tPmZjcGltLT5wYXRoX3Rvdik7CisJfQorfQorCisvKioKKyAqIFN0b3AgSU8gVE9WIHRpbWVyLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X3N0b3Aoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlpZiAoaXRuaW0tPmlvdG92X2FjdGl2ZSkgeworCQlpdG5pbS0+aW90b3ZfYWN0aXZlID0gQkZBX0ZBTFNFOworCQliZmFfdGltZXJfc3RvcCgmaXRuaW0tPnRpbWVyKTsKKwl9Cit9CisKKy8qKgorICogU3RvcCBJTyBUT1YgdGltZXIuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3ZfZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisgICAgYmZhX2Jvb2xlYW5fdCBwYXRodG92X2FjdGl2ZSA9IEJGQV9GQUxTRTsKKworICAgIGlmIChpdG5pbS0+aW90b3ZfYWN0aXZlKQorCQlwYXRodG92X2FjdGl2ZSA9IEJGQV9UUlVFOworCisJYmZhX2l0bmltX2lvdG92X3N0b3AoaXRuaW0pOworCWlmIChwYXRodG92X2FjdGl2ZSkKKwkJYmZhX2NiX2l0bmltX3Rvdl9iZWdpbihpdG5pbS0+ZGl0bik7CisJYmZhX2l0bmltX2lvdG92X2NsZWFudXAoaXRuaW0pOworCWlmIChwYXRodG92X2FjdGl2ZSkKKwkJYmZhX2NiX2l0bmltX3RvdihpdG5pbS0+ZGl0bik7Cit9CisKKworCisvKioKKyAqICBiZmFfaXRuaW1fcHVibGljCisgKi8KKworLyoqCisgKiAJCUl0bmltIGludGVycnVwdCBwcm9jZXNzaW5nLgorICovCit2b2lkCitiZmFfaXRuaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXVuaW9uIGJmaV9pdG5pbV9pMmhfbXNnX3UgbXNnOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW07CisKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCisJbXNnLm1zZyA9IG07CisKKwlzd2l0Y2ggKG0tPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfSVROSU1fSTJIX0NSRUFURV9SU1A6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLmNyZWF0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQliZmFfYXNzZXJ0KG1zZy5jcmVhdGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgY3JlYXRlX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSVROSU1fSTJIX0RFTEVURV9SU1A6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLmRlbGV0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQliZmFfYXNzZXJ0KG1zZy5kZWxldGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgZGVsZXRlX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSVROSU1fSTJIX1NMRVJfRVZFTlQ6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLnNsZXJfZXZlbnQtPmJmYV9oYW5kbGUpOworCQliZmFfc3RhdHMoaXRuaW0sIHNsZXJfZXZlbnRzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9TTEVSKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9pdG5pbV9hcGkKKyAqLworCitzdHJ1Y3QgYmZhX2l0bmltX3MgKgorYmZhX2l0bmltX2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgdm9pZCAqZGl0bikKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCisJaXRuaW0gPSBCRkFfSVROSU1fRlJPTV9UQUcoZmNwaW0sIHJwb3J0LT5ycG9ydF90YWcpOworCWJmYV9hc3NlcnQoaXRuaW0tPnJwb3J0ID09IHJwb3J0KTsKKworCWl0bmltLT5kaXRuID0gZGl0bjsKKworCWJmYV9zdGF0cyhpdG5pbSwgY3JlYXRlcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9DUkVBVEUpOworCisJcmV0dXJuIChpdG5pbSk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfc3RhdHMoaXRuaW0sIGRlbGV0ZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fREVMRVRFKTsKK30KKwordm9pZAorYmZhX2l0bmltX29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBiZmFfYm9vbGVhbl90IHNlcV9yZWMpCit7CisJaXRuaW0tPnNlcV9yZWMgPSBzZXFfcmVjOworCWJmYV9zdGF0cyhpdG5pbSwgb25saW5lcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9PTkxJTkUpOworfQorCit2b2lkCitiZmFfaXRuaW1fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWJmYV9zdGF0cyhpdG5pbSwgb2ZmbGluZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgaXRuaW0gaXMgY29uc2lkZXJlZCBvZmZsaW5lIGZvciBob2xkaW5nIG9mZiBJTyByZXF1ZXN0LgorICogSU8gaXMgbm90IGhlbGQgaWYgaXRuaW0gaXMgYmVpbmcgZGVsZXRlZC4KKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2l0bmltX2hvbGRfaW8oc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gKAorCQlpdG5pbS0+ZmNwaW0tPnBhdGhfdG92ICYmIGl0bmltLT5pb3Rvdl9hY3RpdmUgJiYKKwkJKGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9zbGVyKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfb2ZmbGluZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpKQorKTsKK30KKwordm9pZAorYmZhX2l0bmltX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCXN0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MgKnN0YXRzKQoreworCSpzdGF0cyA9IGl0bmltLT5zdGF0czsKK30KKwordm9pZAorYmZhX2l0bmltX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX29zX21lbXNldCgmaXRuaW0tPnN0YXRzLCAwLCBzaXplb2YoaXRuaW0tPnN0YXRzKSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjczNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nLmMKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2xvZy5jIEJGQSBsb2cgbGlicmFyeQorICovCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorCisvKgorICogZ2xvYmFsIGxvZyBpbmZvIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX2xvZ19pbmZvX3MgeworCXUzMiAgICAgICAgc3RhcnRfaWR4OwkvKiAgc3RhcnQgaW5kZXggZm9yIGEgbW9kdWxlICovCisJdTMyICAgICAgICB0b3RhbF9jb3VudDsJLyogIHRvdGFsIGNvdW50IGZvciBhIG1vZHVsZSAqLworCWVudW0gYmZhX2xvZ19zZXZlcml0eSBsZXZlbDsJLyogIGdsb2JhbCBsb2cgbGV2ZWwgKi8KKwliZmFfbG9nX2NiX3QJY2JmbjsJCS8qICBjYWxsYmFjayBmdW5jdGlvbiAqLworfTsKKworc3RhdGljIHN0cnVjdCBiZmFfbG9nX2luZm9fcyBiZmFfbG9nX2luZm9bQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMV07CitzdGF0aWMgdTMyIGJmYV9sb2dfbXNnX3RvdGFsX2NvdW50Oworc3RhdGljIGludCAgICAgIGJmYV9sb2dfaW5pdGlhbGl6ZWQ7CisKK3N0YXRpYyBjaGFyICAgICpiZmFfbG9nX3NldmVyaXR5W10gPQorCXsgIltub25lXSIsICJbY3JpdGljYWxdIiwgIltlcnJvcl0iLCAiW3dhcm5dIiwgIltpbmZvXSIsICIiIH07CisKKy8qKgorICogQkZBIGxvZyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uCisgKgorICogVGhlIGxvZyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcsCisgKiAgICAtIHNldCBsb2cgaW5zdGFuY2UgbmFtZSBhbmQgY2FsbGJhY2sgZnVuY3Rpb24KKyAqICAgIC0gcmVhZCB0aGUgbWVzc2FnZSBhcnJheSBnZW5lcmF0ZWQgZnJvbSB4bWwgZmlsZXMKKyAqICAgIC0gY2FsY3VsYXRlIHN0YXJ0IGluZGV4IGZvciBlYWNoIG1vZHVsZQorICogICAgLSBjYWxjdWxhdGUgbWVzc2FnZSBjb3VudCBmb3IgZWFjaCBtb2R1bGUKKyAqICAgIC0gcGVyZm9ybSBlcnJvciBjaGVja2luZworICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBpbnN0YW5jZV9uYW1lIC0gaW5zdGFuY2UgbmFtZQorICogQHBhcmFtW2luXSBjYmZuIC0gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBJdCByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBmYWlsdXJlCisgKi8KK2ludAorYmZhX2xvZ19pbml0KHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBjaGFyICppbnN0YW5jZV9uYW1lLAorCQkJYmZhX2xvZ19jYl90IGNiZm4pCit7CisJc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgKm1zZzsKKwl1MzIgICAgICAgIHByZV9tb2RfaWQgPSAwOworCXUzMiAgICAgICAgY3VyX21vZF9pZCA9IDA7CisJdTMyICAgICAgICBpLCBwcmVfaWR4LCBpZHgsIG1zZ19pZDsKKworCS8qCisJICogc2V0IGluc3RhbmNlIG5hbWUKKwkgKi8KKwlpZiAobG9nX21vZCkgeworCQlzdHJuY3B5KGxvZ19tb2QtPmluc3RhbmNlX2luZm8sIGluc3RhbmNlX25hbWUsCisJCQlzaXplb2YobG9nX21vZC0+aW5zdGFuY2VfaW5mbykpOworCQlsb2dfbW9kLT5jYmZuID0gY2JmbjsKKwkJZm9yIChpID0gMDsgaSA8PSBCRkFfTE9HX01PRFVMRV9JRF9NQVg7IGkrKykKKwkJCWxvZ19tb2QtPmxvZ19sZXZlbFtpXSA9IEJGQV9MT0dfV0FSTklORzsKKwl9CisKKwlpZiAoYmZhX2xvZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IEJGQV9MT0dfTU9EVUxFX0lEX01BWDsgaSsrKSB7CisJCWJmYV9sb2dfaW5mb1tpXS5zdGFydF9pZHggPSAwOworCQliZmFfbG9nX2luZm9baV0udG90YWxfY291bnQgPSAwOworCQliZmFfbG9nX2luZm9baV0ubGV2ZWwgPSBCRkFfTE9HX1dBUk5JTkc7CisJCWJmYV9sb2dfaW5mb1tpXS5jYmZuID0gY2JmbjsKKwl9CisKKwlwcmVfaWR4ID0gMDsKKwlpZHggPSAwOworCW1zZyA9IGJmYV9sb2dfbXNnX2FycmF5OworCW1zZ19pZCA9IEJGQV9MT0dfR0VUX01TR19JRChtc2cpOworCXByZV9tb2RfaWQgPSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnX2lkKTsKKwl3aGlsZSAobXNnX2lkICE9IDApIHsKKwkJY3VyX21vZF9pZCA9IEJGQV9MT0dfR0VUX01PRF9JRChtc2dfaWQpOworCisJCWlmIChjdXJfbW9kX2lkID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKSB7CisJCQljYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCQkiJXMlcyBsb2c6IG1vZHVsZSBpZCAldSBvdXQgb2YgcmFuZ2VcbiIsCisJCQkJQkZBX0xPR19DQVRfTkFNRSwKKwkJCQliZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLAorCQkJCWN1cl9tb2RfaWQpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHByZV9tb2RfaWQgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpIHsKKwkJCWNiZm4obG9nX21vZCwgbXNnX2lkLAorCQkJCSIlcyVzIGxvZzogbW9kdWxlIGlkICV1IG91dCBvZiByYW5nZVxuIiwKKwkJCQlCRkFfTE9HX0NBVF9OQU1FLAorCQkJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19FUlJPUl0sCisJCQkJcHJlX21vZF9pZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoY3VyX21vZF9pZCAhPSBwcmVfbW9kX2lkKSB7CisJCQliZmFfbG9nX2luZm9bcHJlX21vZF9pZF0uc3RhcnRfaWR4ID0gcHJlX2lkeDsKKwkJCWJmYV9sb2dfaW5mb1twcmVfbW9kX2lkXS50b3RhbF9jb3VudCA9IGlkeCAtIHByZV9pZHg7CisJCQlwcmVfbW9kX2lkID0gY3VyX21vZF9pZDsKKwkJCXByZV9pZHggPSBpZHg7CisJCX0KKworCQlpZHgrKzsKKwkJbXNnKys7CisJCW1zZ19pZCA9IEJGQV9MT0dfR0VUX01TR19JRChtc2cpOworCX0KKworCWJmYV9sb2dfaW5mb1tjdXJfbW9kX2lkXS5zdGFydF9pZHggPSBwcmVfaWR4OworCWJmYV9sb2dfaW5mb1tjdXJfbW9kX2lkXS50b3RhbF9jb3VudCA9IGlkeCAtIHByZV9pZHg7CisJYmZhX2xvZ19tc2dfdG90YWxfY291bnQgPSBpZHg7CisKKwljYmZuKGxvZ19tb2QsIG1zZ19pZCwgIiVzJXMgbG9nOiBpbml0IE9LLCBtc2cgdG90YWwgY291bnQgJXVcbiIsCisJCUJGQV9MT0dfQ0FUX05BTUUsCisJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19JTkZPXSwgYmZhX2xvZ19tc2dfdG90YWxfY291bnQpOworCisJYmZhX2xvZ19pbml0aWFsaXplZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBCRkEgbG9nIHNldCBsb2cgbGV2ZWwgZm9yIGEgbW9kdWxlCisgKgorICogQHBhcmFtW2luXSBsb2dfbW9kIC0gbG9nIG1vZHVsZSBpbmZvCisgKiBAcGFyYW1baW5dIG1vZF9pZCAtIG1vZHVsZSBpZAorICogQHBhcmFtW2luXSBsb2dfbGV2ZWwgLSBsb2cgc2V2ZXJpdHkgbGV2ZWwKKyAqCisgKiBJdCByZXR1cm4gQkZBX1NUQVRVU19PSyBvbiBzdWNjZXNzLCBvciA+IDAgb24gZmFpbHVyZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9sb2dfc2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBpbnQgbW9kX2lkLAorCQkgIGVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpCit7CisJaWYgKG1vZF9pZCA8PSBCRkFfTE9HX1VOVVNFRF9JRCB8fCBtb2RfaWQgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCWlmIChsb2dfbGV2ZWwgPD0gQkZBX0xPR19JTlZBTElEIHx8IGxvZ19sZXZlbCA+IEJGQV9MT0dfTEVWRUxfTUFYKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisKKwlpZiAobG9nX21vZCkKKwkJbG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0gPSBsb2dfbGV2ZWw7CisJZWxzZQorCQliZmFfbG9nX2luZm9bbW9kX2lkXS5sZXZlbCA9IGxvZ19sZXZlbDsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIEJGQSBsb2cgc2V0IGxvZyBsZXZlbCBmb3IgYWxsIG1vZHVsZXMKKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbG9nX2xldmVsIC0gbG9nIHNldmVyaXR5IGxldmVsCisgKgorICogSXQgcmV0dXJuIEJGQV9TVEFUVVNfT0sgb24gc3VjY2Vzcywgb3IgPiAwIG9uIGZhaWx1cmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfbG9nX3NldF9sZXZlbF9hbGwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCSAgZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCkKK3sKKwlpbnQgbW9kX2lkID0gQkZBX0xPR19VTlVTRURfSUQgKyAxOworCisJaWYgKGxvZ19sZXZlbCA8PSBCRkFfTE9HX0lOVkFMSUQgfHwgbG9nX2xldmVsID4gQkZBX0xPR19MRVZFTF9NQVgpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCWlmIChsb2dfbW9kKSB7CisJCWZvciAoOyBtb2RfaWQgPD0gQkZBX0xPR19NT0RVTEVfSURfTUFYOyBtb2RfaWQrKykKKwkJCWxvZ19tb2QtPmxvZ19sZXZlbFttb2RfaWRdID0gbG9nX2xldmVsOworCX0gZWxzZSB7CisJCWZvciAoOyBtb2RfaWQgPD0gQkZBX0xPR19NT0RVTEVfSURfTUFYOyBtb2RfaWQrKykKKwkJCWJmYV9sb2dfaW5mb1ttb2RfaWRdLmxldmVsID0gbG9nX2xldmVsOworCX0KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIEJGQSBsb2cgc2V0IGxvZyBsZXZlbCBmb3IgYWxsIGFlbiBzdWItbW9kdWxlcworICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBsb2dfbGV2ZWwgLSBsb2cgc2V2ZXJpdHkgbGV2ZWwKKyAqCisgKiBJdCByZXR1cm4gQkZBX1NUQVRVU19PSyBvbiBzdWNjZXNzLCBvciA+IDAgb24gZmFpbHVyZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9sb2dfc2V0X2xldmVsX2FlbihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJICBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKQoreworCWludCBtb2RfaWQgPSBCRkFfTE9HX0FFTl9NSU4gKyAxOworCisJaWYgKGxvZ19tb2QpIHsKKwkJZm9yICg7IG1vZF9pZCA8PSBCRkFfTE9HX0FFTl9NQVg7IG1vZF9pZCsrKQorCQkJbG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0gPSBsb2dfbGV2ZWw7CisJfSBlbHNlIHsKKwkJZm9yICg7IG1vZF9pZCA8PSBCRkFfTE9HX0FFTl9NQVg7IG1vZF9pZCsrKQorCQkJYmZhX2xvZ19pbmZvW21vZF9pZF0ubGV2ZWwgPSBsb2dfbGV2ZWw7CisJfQorCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogQkZBIGxvZyBnZXQgbG9nIGxldmVsIGZvciBhIG1vZHVsZQorICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBtb2RfaWQgLSBtb2R1bGUgaWQKKyAqCisgKiBJdCByZXR1cm5zIGxvZyBsZXZlbCBvciAtMSBvbiBlcnJvcgorICovCitlbnVtIGJmYV9sb2dfc2V2ZXJpdHkKK2JmYV9sb2dfZ2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBpbnQgbW9kX2lkKQoreworCWlmIChtb2RfaWQgPD0gQkZBX0xPR19VTlVTRURfSUQgfHwgbW9kX2lkID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKQorCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCisJaWYgKGxvZ19tb2QpCisJCXJldHVybiAobG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0pOworCWVsc2UKKwkJcmV0dXJuIChiZmFfbG9nX2luZm9bbW9kX2lkXS5sZXZlbCk7Cit9CisKK2VudW0gYmZhX2xvZ19zZXZlcml0eQorYmZhX2xvZ19nZXRfbXNnX2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkKQoreworCXN0cnVjdCBiZmFfbG9nX21zZ2RlZl9zICptc2c7CisJdTMyICAgICAgICBtb2QgPSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnX2lkKTsKKwl1MzIgICAgICAgIGlkeCA9IEJGQV9MT0dfR0VUX01TR19JRFgobXNnX2lkKSAtIDE7CisKKwlpZiAoIWJmYV9sb2dfaW5pdGlhbGl6ZWQpCisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisKKwlpZiAobW9kID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKQorCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCisJaWYgKGlkeCA+PSBiZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCkgeworCQliZmFfbG9nX2luZm9bbW9kXS5jYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCSIlcyVzIGxvZzogaW5jb25zaXN0ZW50IGlkeCAldSB2cy4gdG90YWwgY291bnQgJXVcbiIsCisJCQlCRkFfTE9HX0NBVF9OQU1FLCBiZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLCBpZHgsCisJCQliZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCk7CisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisJfQorCisJbXNnID0gYmZhX2xvZ19tc2dfYXJyYXkgKyBiZmFfbG9nX2luZm9bbW9kXS5zdGFydF9pZHggKyBpZHg7CisJaWYgKG1zZ19pZCAhPSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSkgeworCQliZmFfbG9nX2luZm9bbW9kXS5jYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCSIlcyVzIGxvZzogaW5jb25zaXN0ZW50IG1zZyBpZCAldSBhcnJheSBtc2cgaWQgJXVcbiIsCisJCQlCRkFfTE9HX0NBVF9OQU1FLCBiZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLAorCQkJbXNnX2lkLCBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSk7CisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisJfQorCisJcmV0dXJuIEJGQV9MT0dfR0VUX1NFVkVSSVRZKG1zZyk7Cit9CisKKy8qKgorICogQkZBIGxvZyBtZXNzYWdlIGhhbmRsaW5nCisgKgorICogQkZBIGxvZyBtZXNzYWdlIGhhbmRsaW5nIGZpbmRzIHRoZSBtZXNzYWdlIGJhc2VkIG9uIG1lc3NhZ2UgaWQgYW5kIHByaW50cworICogb3V0IHRoZSBtZXNzYWdlIGJhc2VkIG9uIGl0cyBmb3JtYXQgYW5kIGFyZ3VtZW50cy4gSXQgYWxzbyBkb2VzIHByZWZpeAorICogdGhlIHNldmVyaXR5IGV0Yy4KKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbXNnX2lkIC0gbWVzc2FnZSBpZAorICogQHBhcmFtW2luXSAuLi4gLSBtZXNzYWdlIGFyZ3VtZW50cworICoKKyAqIEl0IHJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGVycm9ycworICovCitpbnQKK2JmYV9sb2coc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQsIC4uLikKK3sKKwl2YV9saXN0ICAgICAgICAgYXA7CisJY2hhciAgICAgICAgICAgIGJ1ZlsyNTZdOworCXN0cnVjdCBiZmFfbG9nX21zZ2RlZl9zICptc2c7CisJaW50ICAgICAgICAgICAgIGxvZ19sZXZlbDsKKwl1MzIgICAgICAgIG1vZCA9IEJGQV9MT0dfR0VUX01PRF9JRChtc2dfaWQpOworCXUzMiAgICAgICAgaWR4ID0gQkZBX0xPR19HRVRfTVNHX0lEWChtc2dfaWQpIC0gMTsKKworCWlmICghYmZhX2xvZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKG1vZCA+IEJGQV9MT0dfTU9EVUxFX0lEX01BWCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGlkeCA+PSBiZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCkgeworCQliZmFfbG9nX2luZm9bbW9kXS4KKwkJCWNiZm4KKwkJCShsb2dfbW9kLCBtc2dfaWQsCisJCQkiJXMlcyBsb2c6IGluY29uc2lzdGVudCBpZHggJXUgdnMuIHRvdGFsIGNvdW50ICV1XG4iLAorCQkJQkZBX0xPR19DQVRfTkFNRSwgYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwgaWR4LAorCQkJYmZhX2xvZ19pbmZvW21vZF0udG90YWxfY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJbXNnID0gYmZhX2xvZ19tc2dfYXJyYXkgKyBiZmFfbG9nX2luZm9bbW9kXS5zdGFydF9pZHggKyBpZHg7CisJaWYgKG1zZ19pZCAhPSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSkgeworCQliZmFfbG9nX2luZm9bbW9kXS4KKwkJCWNiZm4KKwkJCShsb2dfbW9kLCBtc2dfaWQsCisJCQkiJXMlcyBsb2c6IGluY29uc2lzdGVudCBtc2cgaWQgJXUgYXJyYXkgbXNnIGlkICV1XG4iLAorCQkJQkZBX0xPR19DQVRfTkFNRSwgYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwKKwkJCW1zZ19pZCwgQkZBX0xPR19HRVRfTVNHX0lEKG1zZykpOworCQlyZXR1cm4gLTE7CisJfQorCisJbG9nX2xldmVsID0gbG9nX21vZCA/IGxvZ19tb2QtPmxvZ19sZXZlbFttb2RdIDogYmZhX2xvZ19pbmZvW21vZF0ubGV2ZWw7CisJaWYgKChCRkFfTE9HX0dFVF9TRVZFUklUWShtc2cpID4gbG9nX2xldmVsKSAmJgorCQkJKG1zZy0+YXR0cmlidXRlcyAhPSBCRkFfTE9HX0FUVFJfTk9ORSkpCisJCXJldHVybiAwOworCisJdmFfc3RhcnQoYXAsIG1zZ19pZCk7CisJYmZhX29zX3ZzcHJpbnRmKGJ1ZiwgQkZBX0xPR19HRVRfTVNHX0ZNVF9TVFJJTkcobXNnKSwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAobG9nX21vZCkKKwkJbG9nX21vZC0+Y2Jmbihsb2dfbW9kLCBtc2dfaWQsICIlc1slc10lcyVzICVzOiAlc1xuIiwKKwkJCQlCRkFfTE9HX0NBVF9OQU1FLCBsb2dfbW9kLT5pbnN0YW5jZV9pbmZvLAorCQkJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19HRVRfU0VWRVJJVFkobXNnKV0sCisJCQkJKG1zZy0+YXR0cmlidXRlcyAmIEJGQV9MT0dfQVRUUl9BVURJVCkKKwkJCQk/ICIgKGF1ZGl0KSAiIDogIiIsIG1zZy0+bXNnX3ZhbHVlLCBidWYpOworCWVsc2UKKwkJYmZhX2xvZ19pbmZvW21vZF0uY2Jmbihsb2dfbW9kLCBtc2dfaWQsICIlcyVzJXMgJXM6ICVzXG4iLAorCQkJCUJGQV9MT0dfQ0FUX05BTUUsCisJCQkJYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0dFVF9TRVZFUklUWShtc2cpXSwKKwkJCQkobXNnLT5hdHRyaWJ1dGVzICYgQkZBX0xPR19BVFRSX0FVRElUKSA/CisJCQkJIiAoYXVkaXQpICIgOiAiIiwgbXNnLT5tc2dfdmFsdWUsIGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nX21vZHVsZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTU0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2dfbW9kdWxlLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9hZGFwdGVyLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fYXVkaXQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9ldGhwb3J0Lmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faW9jLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faXRuaW0uaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9scG9ydC5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3BvcnQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9ycG9ydC5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2Zjcy5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2hhbC5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2xpbnV4Lmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfd2Rydi5oPgorCitzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyBiZmFfbG9nX21zZ19hcnJheVtdID0geworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfQURBUFRFUiBNb2R1bGUgKi8KK3tCRkFfQUVOX0FEQVBURVJfQURELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9BREFQVEVSX0FERCIsCisgIk5ldyBhZGFwdGVyIGZvdW5kOiBTTiA9ICVzLCBiYXNlIHBvcnQgV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9BREFQVEVSX1JFTU9WRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fQURBUFRFUl9SRU1PVkUiLAorICJBZGFwdGVyIHJlbW92ZWQ6IFNOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0FVRElUIE1vZHVsZSAqLwore0JGQV9BRU5fQVVESVRfQVVUSF9FTkFCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJCRkFfQUVOX0FVRElUX0FVVEhfRU5BQkxFIiwKKyAiQXV0aGVudGljYXRpb24gZW5hYmxlZCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0FVRElUX0FVVEhfRElTQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fQVVESVRfQVVUSF9ESVNBQkxFIiwKKyAiQXV0aGVudGljYXRpb24gZGlzYWJsZWQgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0VUSFBPUlQgTW9kdWxlICovCit7QkZBX0FFTl9FVEhQT1JUX0xJTktVUCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fRVRIUE9SVF9MSU5LVVAiLAorICJCYXNlIHBvcnQgZXRoZXJuZXQgbGlua3VwOiBtYWMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0VUSFBPUlRfTElOS0RPV04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0VUSFBPUlRfTElOS0RPV04iLAorICJCYXNlIHBvcnQgZXRoZXJuZXQgbGlua2Rvd246IG1hYyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fRVRIUE9SVF9FTkFCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0VUSFBPUlRfRU5BQkxFIiwKKyAiQmFzZSBwb3J0IGV0aGVybmV0IGludGVyZmFjZSBlbmFibGVkOiBtYWMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0VUSFBPUlRfRElTQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fRVRIUE9SVF9ESVNBQkxFIiwKKyAiQmFzZSBwb3J0IGV0aGVybmV0IGludGVyZmFjZSBkaXNhYmxlZDogbWFjID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lPQyBNb2R1bGUgKi8KK3tCRkFfQUVOX0lPQ19IQkdPT0QsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lPQ19IQkdPT0QiLAorICJIZWFydCBCZWF0IG9mIElPQyAlZCBpcyBnb29kLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0hCRkFJTCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0NSSVRJQ0FMLAorICJCRkFfQUVOX0lPQ19IQkZBSUwiLAorICJIZWFydCBCZWF0IG9mIElPQyAlZCBoYXMgZmFpbGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0VOQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSU9DX0VOQUJMRSIsCisgIklPQyAlZCBpcyBlbmFibGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0RJU0FCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lPQ19ESVNBQkxFIiwKKyAiSU9DICVkIGlzIGRpc2FibGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0ZXTUlTTUFUQ0gsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0NSSVRJQ0FMLCAiQkZBX0FFTl9JT0NfRldNSVNNQVRDSCIsCisgIlJ1bm5pbmcgZmlybXdhcmUgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyIHZlcnNpb24uIiwKKyAoMCksIDB9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lUTklNIE1vZHVsZSAqLwore0JGQV9BRU5fSVROSU1fT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9JVE5JTV9PTkxJTkUiLAorICJUYXJnZXQgKFdXTiA9ICVzKSBpcyBvbmxpbmUgZm9yIGluaXRpYXRvciAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fSVROSU1fT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSVROSU1fT0ZGTElORSIsCisgIlRhcmdldCAoV1dOID0gJXMpIG9mZmxpbmVkIGJ5IGluaXRpYXRvciAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fSVROSU1fRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfRVJST1IsICJCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QiLAorICJUYXJnZXQgKFdXTiA9ICVzKSBjb25uZWN0aXZpdHkgbG9zdCBmb3IgaW5pdGlhdG9yIChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0xQT1JUIE1vZHVsZSAqLwore0JGQV9BRU5fTFBPUlRfTkVXLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9ORVciLAorICJOZXcgbG9naWNhbCBwb3J0IGNyZWF0ZWQ6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9ERUxFVEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX0RFTEVURSIsCisgIkxvZ2ljYWwgcG9ydCBkZWxldGVkOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9PTkxJTkUiLAorICJMb2dpY2FsIHBvcnQgb25saW5lOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fTFBPUlRfT0ZGTElORSIsCisgIkxvZ2ljYWwgcG9ydCB0YWtlbiBvZmZsaW5lOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfRVJST1IsICJCRkFfQUVOX0xQT1JUX0RJU0NPTk5FQ1QiLAorICJMb2dpY2FsIHBvcnQgbG9zdCBmYWJyaWMgY29ubmVjdGl2aXR5OiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfTkVXX1BST1AsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX05FV19QUk9QIiwKKyAiTmV3IHZpcnR1YWwgcG9ydCBjcmVhdGVkIHVzaW5nIHByb3ByaWV0YXJ5IGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX0RFTEVURV9QUk9QLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9MUE9SVF9ERUxFVEVfUFJPUCIsCisgIlZpcnR1YWwgcG9ydCBkZWxldGVkIHVzaW5nIHByb3ByaWV0YXJ5IGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX05FV19TVEFOREFSRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fTFBPUlRfTkVXX1NUQU5EQVJEIiwKKyAiTmV3IHZpcnR1YWwgcG9ydCBjcmVhdGVkIHVzaW5nIHN0YW5kYXJkIGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX0RFTEVURV9TVEFOREFSRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fTFBPUlRfREVMRVRFX1NUQU5EQVJEIiwKKyAiVmlydHVhbCBwb3J0IGRlbGV0ZWQgdXNpbmcgc3RhbmRhcmQgaW50ZXJmYWNlOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfTlBJVl9EVVBfV1dOLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9MUE9SVF9OUElWX0RVUF9XV04iLAorICJWaXJ0dWFsIHBvcnQgbG9naW4gZmFpbGVkLiBEdXBsaWNhdGUgV1dOID0gJXMgcmVwb3J0ZWQgYnkgZmFicmljLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fTFBPUlRfTlBJVl9GQUJSSUNfTUFYLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9MUE9SVF9OUElWX0ZBQlJJQ19NQVgiLAorICJWaXJ0dWFsIHBvcnQgKFdXTiA9ICVzKSBsb2dpbiBmYWlsZWQuIE1heCBOUElWIHBvcnRzIGFscmVhZHkgZXhpc3QgaW4iCisgIiBmYWJyaWMvZnBvcnQuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9MUE9SVF9OUElWX1VOS05PV04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiIsCisgIlZpcnR1YWwgcG9ydCAoV1dOID0gJXMpIGxvZ2luIGZhaWxlZC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfUE9SVCBNb2R1bGUgKi8KK3tCRkFfQUVOX1BPUlRfT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSwgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9QT1JUX09OTElORSIsCisgIkJhc2UgcG9ydCBvbmxpbmU6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfV0FSTklORywKKyAiQkZBX0FFTl9QT1JUX09GRkxJTkUiLAorICJCYXNlIHBvcnQgb2ZmbGluZTogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1JMSVIsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfUkxJUiIsCisgIlJMSVIgZXZlbnQgbm90IHN1cHBvcnRlZC4iLAorICgwKSwgMH0sCisKK3tCRkFfQUVOX1BPUlRfU0ZQX0lOU0VSVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9TRlBfSU5TRVJUIiwKKyAiTmV3IFNGUCBmb3VuZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfUkVNT1ZFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX1NGUF9SRU1PVkUiLAorICJTRlAgcmVtb3ZlZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfUE9NLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfV0FSTklORywKKyAiQkZBX0FFTl9QT1JUX1NGUF9QT00iLAorICJTRlAgUE9NIGxldmVsIHRvICVzOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9QT1JUX0VOQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9FTkFCTEUiLAorICJCYXNlIHBvcnQgZW5hYmxlZDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0RJU0FCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfRElTQUJMRSIsCisgIkJhc2UgcG9ydCBkaXNhYmxlZDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0FVVEhfT04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfQVVUSF9PTiIsCisgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0FVVEhfT0ZGLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfRVJST1IsCisgIkJGQV9BRU5fUE9SVF9BVVRIX09GRiIsCisgIkF1dGhlbnRpY2F0aW9uIHVuc3VjY2Vzc2Z1bCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0VSUk9SLAorICJCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCIsCisgIkJhc2UgcG9ydCAoV1dOID0gJXMpIGxvc3QgZmFicmljIGNvbm5lY3Rpdml0eS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfUU9TX05FRywgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX1dBUk5JTkcsCisgIkJGQV9BRU5fUE9SVF9RT1NfTkVHIiwKKyAiUU9TIG5lZ290aWF0aW9uIGZhaWxlZCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfRkFCUklDX05BTUVfQ0hBTkdFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX0ZBQlJJQ19OQU1FX0NIQU5HRSIsCisgIkJhc2UgcG9ydCBXV04gPSAlcywgRmFicmljIFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfQUNDRVNTX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX1NGUF9BQ0NFU1NfRVJST1IiLAorICJTRlAgYWNjZXNzIGVycm9yOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1NGUF9VTlNVUFBPUlQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX1BPUlRfU0ZQX1VOU1VQUE9SVCIsCisgIlVuc3VwcG9ydGVkIFNGUCBmb3VuZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9SUE9SVCBNb2R1bGUgKi8KK3tCRkFfQUVOX1JQT1JUX09OTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUlBPUlRfT05MSU5FIiwKKyAiUmVtb3RlIHBvcnQgKFdXTiA9ICVzKSBvbmxpbmUgZm9yIGxvZ2ljYWwgcG9ydCAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUlBPUlRfT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUlBPUlRfT0ZGTElORSIsCisgIlJlbW90ZSBwb3J0IChXV04gPSAlcykgb2ZmbGluZWQgYnkgbG9naWNhbCBwb3J0IChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9SUE9SVF9ESVNDT05ORUNULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19FUlJPUiwgIkJGQV9BRU5fUlBPUlRfRElTQ09OTkVDVCIsCisgIlJlbW90ZSBwb3J0IChXV04gPSAlcykgY29ubmVjdGl2aXR5IGxvc3QgZm9yIGxvZ2ljYWwgcG9ydCAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUlBPUlRfUU9TX1BSSU8sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1JQT1JUX1FPU19QUklPIiwKKyAiUU9TIHByaW9yaXR5IGNoYW5nZWQgdG8gJXM6IFJQV1dOID0gJXMgYW5kIExQV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCit7QkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lEIiwKKyAiUU9TIGZsb3cgSUQgY2hhbmdlZCB0byAlZDogUlBXV04gPSAlcyBhbmQgTFBXV04gPSAlcy4iLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgRkNTIE1vZHVsZSAqLwore0JGQV9MT0dfRkNTX0ZBQlJJQ19OT1NXSVRDSCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkZDU19GQUJSSUNfTk9TV0lUQ0giLAorICJObyBzd2l0Y2hlZCBmYWJyaWMgcHJlc2VuY2UgaXMgZGV0ZWN0ZWQuIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19GQ1NfRkFCUklDX0lTT0xBVEVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiRkNTX0ZBQlJJQ19JU09MQVRFRCIsCisgIlBvcnQgaXMgaXNvbGF0ZWQgZHVlIHRvIFZGX0lEIG1pc21hdGNoLiBQV1dOOiAlcywgUG9ydCBWRl9JRDogJTA0eCBhbmQiCisgIiBzd2l0Y2ggcG9ydCBWRl9JRDogJTA0eC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgSEFMIE1vZHVsZSAqLwore0JGQV9MT0dfSEFMX0FTU0VSVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0VSUk9SLAorICJIQUxfQVNTRVJUIiwKKyAiQXNzZXJ0aW9uIGZhaWx1cmU6ICVzOiVkOiAlcyIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKwore0JGQV9MT0dfSEFMX0hFQVJUQkVBVF9GQUlMVVJFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19DUklUSUNBTCwgIkhBTF9IRUFSVEJFQVRfRkFJTFVSRSIsCisgIkZpcm13YXJlIGhlYXJ0YmVhdCBmYWlsdXJlIGF0ICVkIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19IQUxfRkNQSU1fUEFSTV9JTlZBTElELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiSEFMX0ZDUElNX1BBUk1fSU5WQUxJRCIsCisgIkRyaXZlciBjb25maWd1cmF0aW9uICVzIHZhbHVlICVkIGlzIGludmFsaWQuIFZhbHVlIHNob3VsZCBiZSB3aXRoaW4iCisgIiAlZCBhbmQgJWQuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzIpIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzMpIHwgMCksIDR9LAorCit7QkZBX0xPR19IQUxfU01fQVNTRVJULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfRVJST1IsCisgIkhBTF9TTV9BU1NFUlQiLAorICJTTSBBc3NlcnRpb24gZmFpbHVyZTogJXM6JWQ6IGV2ZW50ID0gJWQiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgTElOVVggTW9kdWxlICovCit7QkZBX0xPR19MSU5VWF9ERVZJQ0VfQ0xBSU1FRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0RFVklDRV9DTEFJTUVEIiwKKyAiYmZhIGRldmljZSBhdCAlcyBjbGFpbWVkLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfSEFTSF9JTklUX0ZBSUxFRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0hBU0hfSU5JVF9GQUlMRUQiLAorICJIYXNoIHRhYmxlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUgZm9yIHRoZSBwb3J0ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfU1lTRlNfRkFJTEVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfU1lTRlNfRkFJTEVEIiwKKyAic3lzZnMgZmlsZSBjcmVhdGlvbiBmYWlsdXJlIGZvciB0aGUgcG9ydCAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX01FTV9BTExPQ19GQUlMRUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9NRU1fQUxMT0NfRkFJTEVEIiwKKyAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkOiAlcy4gICIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfRFJJVkVSX1JFR0lTVFJBVElPTl9GQUlMRUQsCisgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkxJTlVYX0RSSVZFUl9SRUdJU1RSQVRJT05fRkFJTEVEIiwKKyAiJXMuICAiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX0lUTklNX0ZSRUUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJMSU5VWF9JVE5JTV9GUkVFIiwKKyAic2NzaSVkOiBGQ0lEOiAlcyBXV1BOOiAlcyIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKwore0JGQV9MT0dfTElOVVhfSVROSU1fT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfSVROSU1fT05MSU5FIiwKKyAiVGFyZ2V0OiAlZDowOiVkIEZDSUQ6ICVzIFdXUE46ICVzIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzMpIHwgMCksIDR9LAorCit7QkZBX0xPR19MSU5VWF9JVE5JTV9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfSVROSU1fT0ZGTElORSIsCisgIlRhcmdldDogJWQ6MDolZCBGQ0lEOiAlcyBXV1BOOiAlcyIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkczKSB8IDApLCA0fSwKKwore0JGQV9MT0dfTElOVVhfU0NTSV9IT1NUX0ZSRUUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9TQ1NJX0hPU1RfRlJFRSIsCisgIkZyZWUgc2NzaSVkIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9TQ1NJX0FCT1JULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiTElOVVhfU0NTSV9BQk9SVCIsCisgInNjc2klZDogYWJvcnQgY21uZCAlcCwgaW90YWcgJXgiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19QIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKK3tCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlRfQ09NUCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX1NDU0lfQUJPUlRfQ09NUCIsCisgInNjc2klZDogY29tcGxldGUgYWJvcnQgMHglcCwgaW90YWcgMHgleCIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1AgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1ggPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBXRFJWIE1vZHVsZSAqLwore0JGQV9MT0dfV0RSVl9JT0NfSU5JVF9FUlJPUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIldEUlZfSU9DX0lOSVRfRVJST1IiLAorICJJT0MgaW5pdGlhbGl6YXRpb24gaGFzIGZhaWxlZC4iLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX0lOVEVSTkFMX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JT0NfSU5URVJOQUxfRVJST1IiLAorICJJT0MgaW50ZXJuYWwgZXJyb3IuICAiLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX1NUQVJUX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JT0NfU1RBUlRfRVJST1IiLAorICJJT0MgY291bGQgbm90IGJlIHN0YXJ0ZWQuICAiLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX1NUT1BfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lPQ19TVE9QX0VSUk9SIiwKKyAiSU9DIGNvdWxkIG5vdCBiZSBzdG9wcGVkLiAgIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMiLAorICJJbnN1ZmZpY2llbnQgbWVtb3J5LiAgIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IiLAorICJVbmFibGUgdG8gbWFwIHRoZSBJT0Mgb250byB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UuICAiLAorICgwKSwgMH0sCisKKworezAsIDAsIDAsICIiLCAiIiwgMCwgMH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODQ0YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzLmMKQEAgLTAsMCArMSw3ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfbHBzLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIExQUyk7CitCRkFfTU9EVUxFKGxwcyk7CisKKyNkZWZpbmUgQkZBX0xQU19NSU5fTFBPUlRTCSgxKQorI2RlZmluZSBCRkFfTFBTX01BWF9MUE9SVFMJKDI1NikKKworLyoqCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCBiZmFfbHBzX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sCisJCQkgICAgdTMyICpkbV9sZW4pOworc3RhdGljIHZvaWQgYmZhX2xwc19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCQkgICBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQkgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJCSAgIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpOworc3RhdGljIHZvaWQgYmZhX2xwc19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ2luX3JzcChzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCSAgICAgIHN0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zICpyc3ApOworc3RhdGljIHZvaWQgYmZhX2xwc19sb2dvdXRfcnNwKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJICAgICAgIHN0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcyAqcnNwKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfcmVxcV9yZXN1bWUodm9pZCAqbHBzX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2ZyZWUoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc2VuZF9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19zZW5kX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19sb2dpbl9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ291dF9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CisKKworLyoqCisgKiAgbHBzX3B2dCBCRkEgTFBTIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworZW51bSBiZmFfbHBzX2V2ZW50IHsKKwlCRkFfTFBTX1NNX0xPR0lOCT0gMSwJLyogbG9naW4gcmVxdWVzdCBmcm9tIHVzZXIJKi8KKwlCRkFfTFBTX1NNX0xPR09VVAk9IDIsCS8qIGxvZ291dCByZXF1ZXN0IGZyb20gdXNlcgkqLworCUJGQV9MUFNfU01fRldSU1AJPSAzLAkvKiBmL3cgcmVzcG9uc2UgdG8gbG9naW4vbG9nb3V0CSovCisJQkZBX0xQU19TTV9SRVNVTUUJPSA0LAkvKiBzcGFjZSBwcmVzZW50IGluIHJlcXEgcXVldWUJKi8KKwlCRkFfTFBTX1NNX0RFTEVURQk9IDUsCS8qIGxwcyBkZWxldGUgZnJvbSB1c2VyCQkqLworCUJGQV9MUFNfU01fT0ZGTElORQk9IDYsCS8qIExpbmsgaXMgb2ZmbGluZQkJKi8KK307CisKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21faW5pdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ2luKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21fbG9naW53YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywKKwkJCWVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX29ubGluZShzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ293YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywKKwkJCWVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CisKKy8qKgorICogSW5pdCBzdGF0ZSAtLSBubyBsb2dpbgorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9pbml0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX0xPR0lOOgorCQlpZiAoYmZhX3JlcXFfZnVsbChscHMtPmJmYSwgbHBzLT5yZXFxKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fbG9naW53YWl0KTsKKwkJCWJmYV9yZXFxX3dhaXQobHBzLT5iZmEsIGxwcy0+cmVxcSwgJmxwcy0+d3FlKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ2luKTsKKwkJCWJmYV9scHNfc2VuZF9sb2dpbihscHMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX0xPR09VVDoKKwkJYmZhX2xwc19sb2dvdXRfY29tcChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9ERUxFVEU6CisJCWJmYV9scHNfZnJlZShscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9GV1JTUDoKKwkJLyogQ291bGQgaGFwcGVuIHdoZW4gZmFicmljIGRldGVjdHMgbG9vcGJhY2sgYW5kIGRpc2NhcmRzCisJCSAqIHRoZSBscHMgcmVxdWVzdC4gRncgd2lsbCBldmVudHVhbGx5IHNlbnQgb3V0IHRoZSB0aW1lb3V0CisJCSAqIEp1c3QgaWdub3JlCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ2luIGlzIGluIHByb2dyZXNzIC0tIGF3YWl0aW5nIHJlc3BvbnNlIGZyb20gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fbG9naW4oc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fRldSU1A6CisJCWlmIChscHMtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fb25saW5lKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJmYV9scHNfbG9naW5fY29tcChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dpbiBwZW5kaW5nIC0gYXdhaXRpbmcgc3BhY2UgaW4gcmVxdWVzdCBxdWV1ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9sb2dpbndhaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dpbik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZscHMtPndxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogbG9naW4gY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fb25saW5lKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX0xPR09VVDoKKwkJaWYgKGJmYV9yZXFxX2Z1bGwobHBzLT5iZmEsIGxwcy0+cmVxcSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ293YWl0KTsKKwkJCWJmYV9yZXFxX3dhaXQobHBzLT5iZmEsIGxwcy0+cmVxcSwgJmxwcy0+d3FlKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ291dCk7CisJCQliZmFfbHBzX3NlbmRfbG9nb3V0KGxwcyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwljYXNlIEJGQV9MUFNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dvdXQgaW4gcHJvZ3Jlc3MgLSBhd2FpdGluZyBmaXJtd2FyZSByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9sb2dvdXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fRldSU1A6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfbHBzX2xvZ291dF9jb21wKGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ291dCBwZW5kaW5nIC0tIGF3YWl0aW5nIHNwYWNlIGluIHJlcXVlc3QgcXVldWUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fbG9nb3dhaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dvdXQpOworCQliZmFfbHBzX3NlbmRfbG9nb3V0KGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZscHMtPndxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBscHNfcHZ0IEJGQSBMUFMgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIHJldHVybiBtZW1vcnkgcmVxdWlyZW1lbnQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwgdTMyICpkbV9sZW4pCit7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZhX2xwc19zKSAqIEJGQV9MUFNfTUlOX0xQT1JUUzsKKwllbHNlCisJCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZhX2xwc19zKSAqIEJGQV9MUFNfTUFYX0xQT1JUUzsKK30KKworLyoqCisgKiBiZmEgbW9kdWxlIGF0dGFjaCBhdCBpbml0aWFsaXphdGlvbiB0aW1lCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKwlpbnQJCQlpOworCisJYmZhX29zX21lbXNldChtb2QsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2xwc19tb2RfcykpOworCW1vZC0+bnVtX2xwcyA9IEJGQV9MUFNfTUFYX0xQT1JUUzsKKwlpZiAoY2ZnLT5kcnZjZmcubWluX2NmZykKKwkJbW9kLT5udW1fbHBzID0gQkZBX0xQU19NSU5fTFBPUlRTOworCWVsc2UKKwkJbW9kLT5udW1fbHBzID0gQkZBX0xQU19NQVhfTFBPUlRTOworCW1vZC0+bHBzX2FyciA9IGxwcyA9IChzdHJ1Y3QgYmZhX2xwc19zICopIGJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKTsKKworCWJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKSArPSBtb2QtPm51bV9scHMgKiBzaXplb2Yoc3RydWN0IGJmYV9scHNfcyk7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5scHNfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5scHNfYWN0aXZlX3EpOworCisJZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX2xwczsgaSsrLCBscHMrKykgeworCQlscHMtPmJmYQk9IGJmYTsKKwkJbHBzLT5scF90YWcJPSAodTgpIGk7CisJCWxwcy0+cmVxcQk9IEJGQV9SRVFRX0xQUzsKKwkJYmZhX3JlcXFfd2luaXQoJmxwcy0+d3FlLCBiZmFfbHBzX3JlcXFfcmVzdW1lLCBscHMpOworCQlsaXN0X2FkZF90YWlsKCZscHMtPnFlLCAmbW9kLT5scHNfZnJlZV9xKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbHBzX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2xwc19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbHBzX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2xwc19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIElPQyBpbiBkaXNhYmxlZCBzdGF0ZSAtLSBjb25zaWRlciBhbGwgbHBzIG9mZmxpbmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CisJc3RydWN0IGxpc3RfaGVhZAkJKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZtb2QtPmxwc19hY3RpdmVfcSkgeworCQlscHMgPSAoc3RydWN0IGJmYV9scHNfcyAqKSBxZTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX09GRkxJTkUpOworCX0KK30KKworLyoqCisgKiBGaXJtd2FyZSBsb2dpbiByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dpbl9yc3Aoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zICpyc3ApCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCisJYmZhX2Fzc2VydChyc3AtPmxwX3RhZyA8IG1vZC0+bnVtX2xwcyk7CisJbHBzID0gQkZBX0xQU19GUk9NX1RBRyhtb2QsIHJzcC0+bHBfdGFnKTsKKworCWxwcy0+c3RhdHVzID0gcnNwLT5zdGF0dXM7CisJc3dpdGNoIChyc3AtPnN0YXR1cykgeworCWNhc2UgQkZBX1NUQVRVU19PSzoKKwkJbHBzLT5mcG9ydAk9IHJzcC0+Zl9wb3J0OworCQlscHMtPm5waXZfZW4JPSByc3AtPm5waXZfZW47CisJCWxwcy0+bHBfcGlkCT0gcnNwLT5scF9waWQ7CisJCWxwcy0+cHJfYmJjcmVkCT0gYmZhX29zX250b2hzKHJzcC0+YmJfY3JlZGl0KTsKKwkJbHBzLT5wcl9wd3duCT0gcnNwLT5wb3J0X25hbWU7CisJCWxwcy0+cHJfbnd3bgk9IHJzcC0+bm9kZV9uYW1lOworCQlscHMtPmF1dGhfcmVxCT0gcnNwLT5hdXRoX3JlcTsKKwkJbHBzLT5scF9tYWMJPSByc3AtPmxwX21hYzsKKwkJbHBzLT5icmNkX3N3aXRjaCA9IHJzcC0+YnJjZF9zd2l0Y2g7CisJCWxwcy0+ZmNmX21hYwk9IHJzcC0+ZmNmX21hYzsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1NUQVRVU19GQUJSSUNfUkpUOgorCQlscHMtPmxzcmp0X3JzbiA9IHJzcC0+bHNyanRfcnNuOworCQlscHMtPmxzcmp0X2V4cGwgPSByc3AtPmxzcmp0X2V4cGw7CisKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfRVBST1RPQ09MOgorCQlscHMtPmV4dF9zdGF0dXMgPSByc3AtPmV4dF9zdGF0dXM7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBOb3RoaW5nIHRvIGRvIHdpdGggb3RoZXIgc3RhdHVzICovCisJCWJyZWFrOworCX0KKworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9GV1JTUCk7Cit9CisKKy8qKgorICogRmlybXdhcmUgbG9nb3V0IHJlc3BvbnNlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ291dF9yc3Aoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcyAqcnNwKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKworCWJmYV9hc3NlcnQocnNwLT5scF90YWcgPCBtb2QtPm51bV9scHMpOworCWxwcyA9IEJGQV9MUFNfRlJPTV9UQUcobW9kLCByc3AtPmxwX3RhZyk7CisKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fRldSU1ApOworfQorCisvKioKKyAqIFNwYWNlIGlzIGF2YWlsYWJsZSBpbiByZXF1ZXN0IHF1ZXVlLCByZXN1bWUgcXVldWVpbmcgcmVxdWVzdCB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfcmVxcV9yZXN1bWUodm9pZCAqbHBzX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHMgPSBscHNfYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX1JFU1VNRSk7Cit9CisKKy8qKgorICogbHBzIGlzIGZyZWVkIC0tIHRyaWdnZXJlZCBieSB2cG9ydCBkZWxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfZnJlZShzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGxwcy0+YmZhKTsKKworCWxpc3RfZGVsKCZscHMtPnFlKTsKKwlsaXN0X2FkZF90YWlsKCZscHMtPnFlLCAmbW9kLT5scHNfZnJlZV9xKTsKK30KKworLyoqCisgKiBzZW5kIGxvZ2luIHJlcXVlc3QgdG8gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc2VuZF9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJc3RydWN0IGJmaV9scHNfbG9naW5fcmVxX3MJKm07CisKKwltID0gYmZhX3JlcXFfbmV4dChscHMtPmJmYSwgbHBzLT5yZXFxKTsKKwliZmFfYXNzZXJ0KG0pOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19MUFMsIEJGSV9MUFNfSDJJX0xPR0lOX1JFUSwKKwkJCWJmYV9scHVpZChscHMtPmJmYSkpOworCisJbS0+bHBfdGFnCT0gbHBzLT5scF90YWc7CisJbS0+YWxwYQkJPSBscHMtPmFscGE7CisJbS0+cGR1X3NpemUJPSBiZmFfb3NfaHRvbnMobHBzLT5wZHVzeik7CisJbS0+cHd3bgkJPSBscHMtPnB3d247CisJbS0+bnd3bgkJPSBscHMtPm53d247CisJbS0+ZmRpc2MJPSBscHMtPmZkaXNjOworCW0tPmF1dGhfZW4JPSBscHMtPmF1dGhfZW47CisKKwliZmFfcmVxcV9wcm9kdWNlKGxwcy0+YmZhLCBscHMtPnJlcXEpOworfQorCisvKioKKyAqIHNlbmQgbG9nb3V0IHJlcXVlc3QgdG8gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc2VuZF9sb2dvdXQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXN0cnVjdCBiZmlfbHBzX2xvZ291dF9yZXFfcyAqbTsKKworCW0gPSBiZmFfcmVxcV9uZXh0KGxwcy0+YmZhLCBscHMtPnJlcXEpOworCWJmYV9hc3NlcnQobSk7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0xQUywgQkZJX0xQU19IMklfTE9HT1VUX1JFUSwKKwkJCWJmYV9scHVpZChscHMtPmJmYSkpOworCisJbS0+bHBfdGFnICAgID0gbHBzLT5scF90YWc7CisJbS0+cG9ydF9uYW1lID0gbHBzLT5wd3duOworCWJmYV9yZXFxX3Byb2R1Y2UobHBzLT5iZmEsIGxwcy0+cmVxcSk7Cit9CisKKy8qKgorICogSW5kaXJlY3QgbG9naW4gY29tcGxldGlvbiBoYW5kbGVyIGZvciBub24tZmNzCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ2luX2NvbXBfY2Iodm9pZCAqYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfbHBzX3MgKmxwcwk9IGFyZzsKKworCWlmICghY29tcGxldGUpCisJCXJldHVybjsKKworCWlmIChscHMtPmZkaXNjKQorCQliZmFfY2JfbHBzX2ZkaXNjX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZywgbHBzLT5zdGF0dXMpOworCWVsc2UKKwkJYmZhX2NiX2xwc19mbG9naV9jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcsIGxwcy0+c3RhdHVzKTsKK30KKworLyoqCisgKiBMb2dpbiBjb21wbGV0aW9uIGhhbmRsZXIgLS0gZGlyZWN0IGNhbGwgZm9yIGZjcywgcXVldWUgZm9yIG90aGVycworICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dpbl9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlpZiAoIWxwcy0+YmZhLT5mY3MpIHsKKwkJYmZhX2NiX3F1ZXVlKGxwcy0+YmZhLCAmbHBzLT5oY2JfcWUsCisJCQkJYmZhX2xwc19sb2dpbl9jb21wX2NiLCBscHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxwcy0+ZmRpc2MpCisJCWJmYV9jYl9scHNfZmRpc2NfY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnLCBscHMtPnN0YXR1cyk7CisJZWxzZQorCQliZmFfY2JfbHBzX2Zsb2dpX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZywgbHBzLT5zdGF0dXMpOworfQorCisvKioKKyAqIEluZGlyZWN0IGxvZ291dCBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIG5vbi1mY3MKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbG9nb3V0X2NvbXBfY2Iodm9pZCAqYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfbHBzX3MgKmxwcwk9IGFyZzsKKworCWlmICghY29tcGxldGUpCisJCXJldHVybjsKKworCWlmIChscHMtPmZkaXNjKQorCQliZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcpOworCWVsc2UKKwkJYmZhX2NiX2xwc19mbG9nb19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcpOworfQorCisvKioKKyAqIExvZ291dCBjb21wbGV0aW9uIGhhbmRsZXIgLS0gZGlyZWN0IGNhbGwgZm9yIGZjcywgcXVldWUgZm9yIG90aGVycworICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dvdXRfY29tcChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJaWYgKCFscHMtPmJmYS0+ZmNzKSB7CisJCWJmYV9jYl9xdWV1ZShscHMtPmJmYSwgJmxwcy0+aGNiX3FlLAorCQkJCWJmYV9scHNfbG9nb3V0X2NvbXBfY2IsIGxwcyk7CisJCXJldHVybjsKKwl9CisJaWYgKGxwcy0+ZmRpc2MpCisJCWJmYV9jYl9scHNfZmRpc2Nsb2dvX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZyk7CisJZWxzZQorCQliZmFfY2JfbHBzX2Zsb2dvX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZyk7Cit9CisKKworCisvKioKKyAqICBscHNfcHVibGljIEJGQSBMUFMgcHVibGljIGZ1bmN0aW9ucworICovCisKKy8qKgorICogQWxsb2NhdGUgYSBscG9ydCBzcnZpY2UgdGFnLgorICovCitzdHJ1Y3QgYmZhX2xwc19zICAqCitiZmFfbHBzX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwcyA9IE5VTEw7CisKKwliZmFfcV9kZXEoJm1vZC0+bHBzX2ZyZWVfcSwgJmxwcyk7CisKKwlpZiAobHBzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbGlzdF9hZGRfdGFpbCgmbHBzLT5xZSwgJm1vZC0+bHBzX2FjdGl2ZV9xKTsKKworCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCXJldHVybiBscHM7Cit9CisKKy8qKgorICogRnJlZSBscG9ydCBzZXJ2aWNlIHRhZy4gVGhpcyBjYW4gYmUgY2FsbGVkIGFueXRpbWUgYWZ0ZXIgYW4gYWxsb2MuCisgKiBObyBuZWVkIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nIGxvZ2luL2xvZ291dCBjb21wbGV0aW9ucy4KKyAqLwordm9pZAorYmZhX2xwc19kZWxldGUoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9ERUxFVEUpOworfQorCisvKioKKyAqIEluaXRpYXRlIGEgbHBvcnQgbG9naW4uCisgKi8KK3ZvaWQKK2JmYV9scHNfZmxvZ2koc3RydWN0IGJmYV9scHNfcyAqbHBzLCB2b2lkICp1YXJnLCB1OCBhbHBhLCB1MTYgcGR1c3osCisJd3duX3QgcHd3biwgd3duX3Qgbnd3biwgYmZhX2Jvb2xlYW5fdCBhdXRoX2VuKQoreworCWxwcy0+dWFyZwk9IHVhcmc7CisJbHBzLT5hbHBhCT0gYWxwYTsKKwlscHMtPnBkdXN6CT0gcGR1c3o7CisJbHBzLT5wd3duCT0gcHd3bjsKKwlscHMtPm53d24JPSBud3duOworCWxwcy0+ZmRpc2MJPSBCRkFfRkFMU0U7CisJbHBzLT5hdXRoX2VuCT0gYXV0aF9lbjsKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HSU4pOworfQorCisvKioKKyAqIEluaXRpYXRlIGEgbHBvcnQgZmRpc2MgbG9naW4uCisgKi8KK3ZvaWQKK2JmYV9scHNfZmRpc2Moc3RydWN0IGJmYV9scHNfcyAqbHBzLCB2b2lkICp1YXJnLCB1MTYgcGR1c3osIHd3bl90IHB3d24sCisJd3duX3Qgbnd3bikKK3sKKwlscHMtPnVhcmcJPSB1YXJnOworCWxwcy0+YWxwYQk9IDA7CisJbHBzLT5wZHVzegk9IHBkdXN6OworCWxwcy0+cHd3bgk9IHB3d247CisJbHBzLT5ud3duCT0gbnd3bjsKKwlscHMtPmZkaXNjCT0gQkZBX1RSVUU7CisJbHBzLT5hdXRoX2VuCT0gQkZBX0ZBTFNFOworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9MT0dJTik7Cit9CisKKy8qKgorICogSW5pdGlhdGUgYSBscG9ydCBsb2dvdXQgKGZsb2dpKS4KKyAqLwordm9pZAorYmZhX2xwc19mbG9nbyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0xPR09VVCk7Cit9CisKKy8qKgorICogSW5pdGlhdGUgYSBscG9ydCBGRFNJQyBsb2dvdXQuCisgKi8KK3ZvaWQKK2JmYV9scHNfZmRpc2Nsb2dvKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HT1VUKTsKK30KKworLyoqCisgKiBEaXNjYXJkIGEgcGVuZGluZyBsb2dpbiByZXF1ZXN0IC0tIHNob3VsZCBiZSBjYWxsZWQgb25seSBmb3IKKyAqIGxpbmsgZG93biBoYW5kbGluZy4KKyAqLwordm9pZAorYmZhX2xwc19kaXNjYXJkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogUmV0dXJuIGxwb3J0IHNlcnZpY2VzIHRhZworICovCit1OAorYmZhX2xwc19nZXRfdGFnKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5scF90YWc7Cit9CisKKy8qKgorICogUmV0dXJuIGxwb3J0IHNlcnZpY2VzIHRhZyBnaXZlbiB0aGUgcGlkCisgKi8KK3U4CitiZmFfbHBzX2dldF90YWdfZnJvbV9waWQoc3RydWN0IGJmYV9zICpiZmEsIHUzMiBwaWQpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwLCBscHMgPSBtb2QtPmxwc19hcnI7IGkgPCBtb2QtPm51bV9scHM7IGkrKywgbHBzKyspIHsKKwkJaWYgKGxwcy0+bHBfcGlkID09IHBpZCkKKwkJCXJldHVybiBscHMtPmxwX3RhZzsKKwl9CisKKwkvKiBSZXR1cm4gYmFzZSBwb3J0IHRhZyBhbnl3YXkgKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiByZXR1cm4gaWYgZmFicmljIGxvZ2luIGluZGljYXRlcyBzdXBwb3J0IGZvciBOUElWCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfbnBpdl9lbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+bnBpdl9lbjsKK30KKworLyoqCisgKiBSZXR1cm4gVFJVRSBpZiBhdHRhY2hlZCB0byBGLVBvcnQsIGVsc2UgcmV0dXJuIEZBTFNFCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfZnBvcnQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmZwb3J0OworfQorCisvKioKKyAqIFJldHVybiBUUlVFIGlmIGF0dGFjaGVkIHRvIGEgQnJvY2FkZSBGYWJyaWMKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2xwc19pc19icmNkX2ZhYnJpYyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+YnJjZF9zd2l0Y2g7Cit9CisvKioKKyAqIHJldHVybiBUUlVFIGlmIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfYXV0aHJlcShzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+YXV0aF9yZXE7Cit9CisKK2JmYV9lcHJvdG9fc3RhdHVzX3QKK2JmYV9scHNfZ2V0X2V4dHN0YXR1cyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+ZXh0X3N0YXR1czsKK30KKworLyoqCisgKiByZXR1cm4gcG9ydCBpZCBhc3NpZ25lZCB0byB0aGUgbHBvcnQKKyAqLwordTMyCitiZmFfbHBzX2dldF9waWQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmxwX3BpZDsKK30KKworLyoqCisgKiBSZXR1cm4gYmJfY3JlZGl0IGFzc2lnbmVkIGluIEZMT0dJIHJlc3BvbnNlCisgKi8KK3UxNgorYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+cHJfYmJjcmVkOworfQorCisvKioKKyAqIFJldHVybiBwZWVyIHBvcnQgbmFtZQorICovCit3d25fdAorYmZhX2xwc19nZXRfcGVlcl9wd3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5wcl9wd3duOworfQorCisvKioKKyAqIFJldHVybiBwZWVyIG5vZGUgbmFtZQorICovCit3d25fdAorYmZhX2xwc19nZXRfcGVlcl9ud3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5wcl9ud3duOworfQorCisvKioKKyAqIHJldHVybiByZWFzb24gY29kZSBpZiBsb2dpbiByZXF1ZXN0IGlzIHJlamVjdGVkCisgKi8KK3U4CitiZmFfbHBzX2dldF9sc3JqdF9yc24oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmxzcmp0X3JzbjsKK30KKworLyoqCisgKiByZXR1cm4gZXhwbGFuYXRpb24gY29kZSBpZiBsb2dpbiByZXF1ZXN0IGlzIHJlamVjdGVkCisgKi8KK3U4CitiZmFfbHBzX2dldF9sc3JqdF9leHBsKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5sc3JqdF9leHBsOworfQorCisKKy8qKgorICogTFBTIGZpcm13YXJlIG1lc3NhZ2UgY2xhc3MgaGFuZGxlci4KKyAqLwordm9pZAorYmZhX2xwc19pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJdW5pb24gYmZpX2xwc19pMmhfbXNnX3UJbXNnOworCisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKwltc2cubXNnID0gbTsKKworCXN3aXRjaCAobS0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9MUFNfSDJJX0xPR0lOX1JTUDoKKwkJYmZhX2xwc19sb2dpbl9yc3AoYmZhLCBtc2cubG9naW5fcnNwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9MUFNfSDJJX0xPR09VVF9SU1A6CisJCWJmYV9scHNfbG9nb3V0X3JzcChiZmEsIG1zZy5sb2dvdXRfcnNwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHNfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTZjNmNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzX3ByaXYuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfTFBTX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0xQU19QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorCitzdHJ1Y3QgYmZhX2xwc19tb2RfcyB7CisJc3RydWN0IGxpc3RfaGVhZAkJbHBzX2ZyZWVfcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlscHNfYWN0aXZlX3E7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzX2FycjsKKwlpbnQJCQludW1fbHBzOworfTsKKworI2RlZmluZSBCRkFfTFBTX01PRChfX2JmYSkJCSgmKF9fYmZhKS0+bW9kdWxlcy5scHNfbW9kKQorI2RlZmluZSBCRkFfTFBTX0ZST01fVEFHKF9fbW9kLCBfX3RhZykJKCYoX19tb2QpLT5scHNfYXJyW19fdGFnXSkKKworLyoKKyAqIGV4dGVybmFsIGZ1bmN0aW9ucworICovCit2b2lkCWJmYV9scHNfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworCisjZW5kaWYgLyogX19CRkFfTFBTX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZWRhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGUuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wY2kuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmFfaW9jZmMuaD4KKworLyoqCisgKiBCRkEgbW9kdWxlIGxpc3QgdGVybWluYXRlZCBieSBOVUxMCisgKi8KK3N0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW10gPSB7CisJJmhhbF9tb2Rfc2dwZywKKwkmaGFsX21vZF9wcG9ydCwKKwkmaGFsX21vZF9mY3hwLAorCSZoYWxfbW9kX2xwcywKKwkmaGFsX21vZF91ZiwKKwkmaGFsX21vZF9ycG9ydCwKKwkmaGFsX21vZF9mY3BpbSwKKyNpZmRlZiBCRkFfQ0ZHX1BCSU5ECisJJmhhbF9tb2RfcGJpbmQsCisjZW5kaWYKKwlOVUxMCit9OworCisvKioKKyAqIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIHZhcmlvdXMgbW9kdWxlcy4KKyAqLworYmZhX2lzcl9mdW5jX3QgIGJmYV9pc3JzW0JGSV9NQ19NQVhdID0geworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBOT05FICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0MgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0RJQUcgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0ZMQVNIICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19DRUUgKi8KKwliZmFfcHBvcnRfaXNyLAkJLyogQkZJX01DX1BPUlQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPQ0ZDICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19MTCAqLworCWJmYV91Zl9pc3IsCQkvKiBCRklfTUNfVUYgKi8KKwliZmFfZmN4cF9pc3IsCQkvKiBCRklfTUNfRkNYUCAqLworCWJmYV9scHNfaXNyLAkJLyogQkZJX01DX0xQUyAqLworCWJmYV9ycG9ydF9pc3IsCQkvKiBCRklfTUNfUlBPUlQgKi8KKwliZmFfaXRuaW1faXNyLAkJLyogQkZJX01DX0lUTklNICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0lNX1JFQUQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fV1JJVEUgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fSU8gKi8KKwliZmFfaW9pbV9pc3IsCQkvKiBCRklfTUNfSU9JTSAqLworCWJmYV9pb2ltX2dvb2RfY29tcF9pc3IsCS8qIEJGSV9NQ19JT0lNX0lPQ09NICovCisJYmZhX3Rza2ltX2lzciwJCS8qIEJGSV9NQ19UU0tJTSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfU0JPT1QgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lQRkMgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX1BPUlQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCit9OworCisvKioKKyAqIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIG1haWxib3ggY29tbWFuZCBjbGFzc2VzCisgKi8KK2JmYV9pb2NfbWJveF9tY2Z1bmNfdCAgYmZhX21ib3hfaXNyc1tCRklfTUNfTUFYXSA9IHsKKwlOVUxMLAorCU5VTEwsCQkJLyogQkZJX01DX0lPQwkqLworCU5VTEwsCQkJLyogQkZJX01DX0RJQUcJKi8KKwlOVUxMLAkJLyogQkZJX01DX0ZMQVNIICovCisJTlVMTCwJCQkvKiBCRklfTUNfQ0VFCSovCisJTlVMTCwJCQkvKiBCRklfTUNfUE9SVAkqLworCWJmYV9pb2NmY19pc3IsCQkvKiBCRklfTUNfSU9DRkMgKi8KKwlOVUxMLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlc19wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGVzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmY3MDUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlc19wcml2LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX01PRFVMRVNfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfTU9EVUxFU19QUklWX0hfXworCisjaW5jbHVkZSAiYmZhX3VmX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfcG9ydF9wcml2LmgiCisjaW5jbHVkZSAiYmZhX3Jwb3J0X3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfZmN4cF9wcml2LmgiCisjaW5jbHVkZSAiYmZhX2xwc19wcml2LmgiCisjaW5jbHVkZSAiYmZhX2ZjcGltX3ByaXYuaCIKKyNpbmNsdWRlIDxjZWUvYmZhX2NlZS5oPgorI2luY2x1ZGUgPHBvcnQvYmZhX3BvcnQuaD4KKworCitzdHJ1Y3QgYmZhX21vZHVsZXNfcyB7CisJc3RydWN0IGJmYV9wcG9ydF9zCXBwb3J0OwkvKiAgcGh5c2ljYWwgcG9ydCBtb2R1bGUJKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgZmN4cF9tb2Q7IC8qICBmY3hwIG1vZHVsZQkJKi8KKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcyBscHNfbW9kOyAgIC8qICBmY3hwIG1vZHVsZQkJKi8KKwlzdHJ1Y3QgYmZhX3VmX21vZF9zIHVmX21vZDsJLyogIHVuc29saWNpdGVkIGZyYW1lIG1vZHVsZQkqLworCXN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgcnBvcnRfbW9kOyAvKiAgcmVtb3RlIHBvcnQgbW9kdWxlCSovCisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyBmY3BpbV9tb2Q7IC8qICBGQ1AgaW5pdGlhdG9yIG1vZHVsZQkqLworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyBzZ3BnX21vZDsgLyogIFNHIHBhZ2UgbW9kdWxlCQkqLworCXN0cnVjdCBiZmFfY2VlX3MgY2VlOyAgIAkvKiAgQ0VFIE1vZHVsZSAgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3BvcnRfcyBwb3J0OwkJLyogIFBoeXNpY2FsIHBvcnQgbW9kdWxlCSovCit9OworCisjZW5kaWYgLyogX19CRkFfTU9EVUxFU19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfb3NfaW5jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9vc19pbmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGE4OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfb3NfaW5jLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBDb250YWlucyBkZWNsYXJhdGlvbnMgYWxsIE9TIFNwZWNpZmljIGZpbGVzIG5lZWRlZCBmb3IgQkZBIGxheWVyCisgKi8KKworI2lmbmRlZiBfX0JGQV9PU19JTkNfSF9fCisjZGVmaW5lIF9fQkZBX09TX0lOQ19IX18KKworI2lmbmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2RlZmluZSBTRVRfTU9EVUxFX1ZFUlNJT04oVkVSKQorCisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorCisjZGVmaW5lIEJGQV9FUlIJCQlLRVJOX0VSUgorI2RlZmluZSBCRkFfV0FSTklORwkJS0VSTl9XQVJOSU5HCisjZGVmaW5lIEJGQV9OT1RJQ0UJCUtFUk5fTk9USUNFCisjZGVmaW5lIEJGQV9JTkZPCQlLRVJOX0lORk8KKyNkZWZpbmUgQkZBX0RFQlVHCQlLRVJOX0RFQlVHCisKKyNkZWZpbmUgTE9HX0JGQURfSU5JVAkJMHgwMDAwMDAwMQorI2RlZmluZSBMT0dfRkNQX0lPCQkweDAwMDAwMDAyCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBCRkFfTE9HX1RSQUNFKGJmYWQsIGxldmVsLCBtYXNrLCBmbXQsIGFyZy4uLikJCQlcCisJCUJGQV9MT0coYmZhZCwgbGV2ZWwsIG1hc2ssIGZtdCwgIyMgYXJnKQorI2RlZmluZSBCRkFfREVWX1RSQUNFKGJmYWQsIGxldmVsLCBmbXQsIGFyZy4uLikJCQkJXAorCQlCRkFfREVWX1BSSU5URihiZmFkLCBsZXZlbCwgZm10LCAjIyBhcmcpCisjZGVmaW5lIEJGQV9UUkFDRShsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCisJCUJGQV9QUklOVEYobGV2ZWwsIGZtdCwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgQkZBX0xPR19UUkFDRShiZmFkLCBsZXZlbCwgbWFzaywgZm10LCBhcmcuLi4pCisjZGVmaW5lIEJGQV9ERVZfVFJBQ0UoYmZhZCwgbGV2ZWwsIGZtdCwgYXJnLi4uKQorI2RlZmluZSBCRkFfVFJBQ0UobGV2ZWwsIGZtdCwgYXJnLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgQkZBX0FTU0VSVChwKSBkbyB7CQkJCQkJXAorCWlmICghKHApKSB7ICAgICAgXAorCQlwcmludGsoS0VSTl9FUlIgImFzc2VydCglcykgZmFpbGVkIGF0ICVzOiVkXG4iLAkJXAorCQkjcCwgX19GSUxFX18sIF9fTElORV9fKTsgICAgICBcCisJCUJVRygpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgQkZBX0xPRyhiZmFkLCBsZXZlbCwgbWFzaywgZm10LCBhcmcuLi4pCQkJCVwKK2RvIHsgCQkJCQkJCQkJXAorCWlmICgoKG1hc2spICYgKCgoc3RydWN0IGJmYWRfcyAqKShiZmFkKSktPgkJCVwKKwkJY2ZnX2RhdGFbY2ZnX2xvZ19tYXNrXSkpIHx8IChsZXZlbFsxXSA8PSAnMycpKQkJXAorCQlkZXZfcHJpbnRrKGxldmVsLCAmKCgoc3RydWN0IGJmYWRfcyAqKQkJCVwKKwkJCShiZmFkKSktPnBjaWRldi0+ZGV2KSwgZm10LCAjI2FyZyk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2lmbmRlZiBCRkFfREVWX1BSSU5URgorI2RlZmluZSBCRkFfREVWX1BSSU5URihiZmFkLCBsZXZlbCwgZm10LCBhcmcuLi4pCQkJXAorCQlkZXZfcHJpbnRrKGxldmVsLCAmKCgoc3RydWN0IGJmYWRfcyAqKQkJCVwKKwkJCShiZmFkKSktPnBjaWRldi0+ZGV2KSwgZm10LCAjI2FyZyk7CisjZW5kaWYKKworI2RlZmluZSBCRkFfUFJJTlRGKGxldmVsLCBmbXQsIGFyZy4uLikJCQkJCVwKKwkJcHJpbnRrKGxldmVsIGZtdCwgIyNhcmcpOworCitpbnQgYmZhX29zX01XQih2b2lkICopOworCisjZGVmaW5lIGJmYV9vc19tbWlvd2IoKQkJbW1pb3diKCkKKworI2RlZmluZSBiZmFfc3dhcF8zYihfeCkJCQkJXAorCSgoKChfeCkgJiAweGZmKSA8PCAxNikgfAkJXAorCSgoX3gpICYgMHgwMGZmMDApIHwJCQlcCisJKCgoX3gpICYgMHhmZjAwMDApID4+IDE2KSkKKworI2RlZmluZSBiZmFfc3dhcF84YihfeCkgCQkJCVwKKyAgICAgKCgoKF94KSAmIDB4ZmYwMDAwMDAwMDAwMDAwMHVsbCkgPj4gNTYpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDBmZjAwMDAwMDAwMDAwMHVsbCkgPj4gNDApCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMGZmMDAwMDAwMDAwMHVsbCkgPj4gMjQpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMDAwZmYwMDAwMDAwMHVsbCkgPj4gOCkJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMDAwMDAwMGZmMDAwMDAwdWxsKSA8PCA4KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDBmZjAwMDB1bGwpIDw8IDI0KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDAwMGZmMDB1bGwpIDw8IDQwKQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDAwMDAwZmZ1bGwpIDw8IDU2KSkKKworI2RlZmluZSBiZmFfb3Nfc3dhcDMyKF94KSAJCQlcCisJKCgoKF94KSAmIDB4ZmYpIDw8IDI0KSAJCXwJXAorCSgoKF94KSAmIDB4MDAwMGZmMDApIDw8IDgpCXwJXAorCSgoKF94KSAmIDB4MDBmZjAwMDApID4+IDgpCXwJXAorCSgoKF94KSAmIDB4ZmYwMDAwMDApID4+IDI0KSkKKworCisjaWZuZGVmIF9fQklHRU5ESUFOCisjZGVmaW5lIGJmYV9vc19odG9ucyhfeCkgKCh1MTYpKCgoKF94KSAmIDB4ZmYwMCkgPj4gOCkgfCBcCisJCQkJICgoKF94KSAmIDB4MDBmZikgPDwgOCkpKQorCisjZGVmaW5lIGJmYV9vc19odG9ubChfeCkJYmZhX29zX3N3YXAzMihfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sbChfeCkJYmZhX3N3YXBfOGIoX3gpCisjZGVmaW5lIGJmYV9vc19odG9uM2IoX3gpCWJmYV9zd2FwXzNiKF94KQorCisjZGVmaW5lIGJmYV9vc193dG9sZShfeCkgICAoX3gpCisKKyNlbHNlCisKKyNkZWZpbmUgYmZhX29zX2h0b25zKF94KSAgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sKF94KSAgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b24zYihfeCkgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sbChfeCkgIChfeCkKKyNkZWZpbmUgYmZhX29zX3d0b2xlKF94KSAgIGJmYV9vc19zd2FwMzIoX3gpCisKKyNlbmRpZgorCisjZGVmaW5lIGJmYV9vc19udG9ocyhfeCkgICBiZmFfb3NfaHRvbnMoX3gpCisjZGVmaW5lIGJmYV9vc19udG9obChfeCkgICBiZmFfb3NfaHRvbmwoX3gpCisjZGVmaW5lIGJmYV9vc19udG9obGwoX3gpICBiZmFfb3NfaHRvbmxsKF94KQorI2RlZmluZSBiZmFfb3NfbnRvaDNiKF94KSAgYmZhX29zX2h0b24zYihfeCkKKworI2RlZmluZSBiZmFfb3NfdTMyKF9fcGE2NCkgKChfX3BhNjQpID4+IDMyKQorCisjZGVmaW5lIGJmYV9vc19tZW1zZXQJbWVtc2V0CisjZGVmaW5lIGJmYV9vc19tZW1jcHkJbWVtY3B5CisjZGVmaW5lIGJmYV9vc191ZGVsYXkJdWRlbGF5CisjZGVmaW5lIGJmYV9vc192c3ByaW50ZiB2c3ByaW50ZgorCisjZGVmaW5lIGJmYV9vc19hc3NpZ24oX190LCBfX3MpIF9fdCA9IF9fcworCisjZGVmaW5lIGJmYV9vc19hZGRyX3QgY2hhciBfX2lvbWVtICoKKyNkZWZpbmUgYmZhX29zX3BhbmljKCkKKworI2RlZmluZSBiZmFfb3NfcmVnX3JlYWQoX3JhZGRyKSBiZmFfb3Nfd3RvbGUocmVhZGwoX3JhZGRyKSkKKyNkZWZpbmUgYmZhX29zX3JlZ193cml0ZShfcmFkZHIsIF92YWwpIHdyaXRlbChiZmFfb3Nfd3RvbGUoKF92YWwpKSwgKF9yYWRkcikpCisjZGVmaW5lIGJmYV9vc19tZW1fcmVhZChfcmFkZHIsIF9vZmYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJYmZhX29zX250b2hsKHJlYWRsKCgoX3JhZGRyKSArIChfb2ZmKSkpKQorI2RlZmluZSBiZmFfb3NfbWVtX3dyaXRlKF9yYWRkciwgX29mZiwgX3ZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXdyaXRlbChiZmFfb3NfaHRvbmwoKF92YWwpKSwgKChfcmFkZHIpICsgKF9vZmYpKSkKKworI2RlZmluZSBCRkFfVFJDX1RTKF90cmNtKQkJCQkJCVwKKwkJCSh7CQkJCQkJXAorCQkJCXN0cnVjdCB0aW1ldmFsIHR2OwkJCVwKKwkJCQkJCQkJCVwKKwkJCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsgICAgICBcCisJCQkJKHR2LnR2X3NlYyoxMDAwMDAwK3R2LnR2X3VzZWMpOyAgICAgIFwKKwkJCSB9KQorCitzdHJ1Y3QgYmZhX2xvZ19tb2RfczsKK3ZvaWQgYmZhX29zX3ByaW50ZihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNlbmRpZgorCisjZGVmaW5lIGJvb2xlYW5fdCBpbnQKKworLyoqCisgKiBGb3IgY3VycmVudCB0aW1lIHN0YW1wLCBPUyBBUEkgd2lsbCBmaWxsLWluCisgKi8KK3N0cnVjdCBiZmFfdGltZXZhbF9zIHsKKwl1MzIJdHZfc2VjOwkJLyogIHNlY29uZHMgICAgICAgICovCisJdTMyCXR2X3VzZWM7CS8qICBtaWNyb3NlY29uZHMgICAqLworfTsKKwordm9pZCBiZmFfb3NfZ2V0dGltZW9mZGF5KHN0cnVjdCBiZmFfdGltZXZhbF9zICp0dik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord3duMnN0cihjaGFyICp3d25fc3RyLCB1NjQgd3duKQoreworCXVuaW9uIHsKKwkJdTY0IHd3bjsKKwkJdTggYnl0ZVs4XTsKKwl9IHc7CisKKwl3Lnd3biA9IHd3bjsKKwlzcHJpbnRmKHd3bl9zdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCB3LmJ5dGVbMF0sCisJCXcuYnl0ZVsxXSwgdy5ieXRlWzJdLCB3LmJ5dGVbM10sIHcuYnl0ZVs0XSwgdy5ieXRlWzVdLAorCQl3LmJ5dGVbNl0sIHcuYnl0ZVs3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmNpZDJzdHIoY2hhciAqZmNpZF9zdHIsIHUzMiBmY2lkKQoreworCXVuaW9uIHsKKwkJdTMyIGZjaWQ7CisJCXU4IGJ5dGVbNF07CisJfSBmOworCisJZi5mY2lkID0gZmNpZDsKKwlzcHJpbnRmKGZjaWRfc3RyLCAiJTAyeDolMDJ4OiUwMngiLCBmLmJ5dGVbMV0sIGYuYnl0ZVsyXSwgZi5ieXRlWzNdKTsKK30KKworI2VuZGlmIC8qIF9fQkZBX09TX0lOQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIxOTAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydC5jCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBvcnQvYmZhX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9wb3J0Lmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGNuYS9iZmFfY25hX3RyY21vZC5oPgorCitCRkFfVFJDX0ZJTEUoQ05BLCBQT1JUKTsKKworI2RlZmluZSBiZmFfaW9jX3BvcnRpZChfX2lvYykgKChfX2lvYyktPnBvcnRfaWQpCisjZGVmaW5lIGJmYV9scHVpZChfX2FyZykgYmZhX2lvY19wb3J0aWQoJihfX2FyZyktPmlvYykKKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX3N3YXAoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cykKK3sKKwl1MzIgICAgICAgKmRpcCA9ICh1MzIgKikgc3RhdHM7CisJdTMyICAgICAgICB0MCwgdDE7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAvIHNpemVvZih1MzIpOworCSAgICAgaSArPSAyKSB7CisJCXQwID0gZGlwW2ldOworCQl0MSA9IGRpcFtpICsgMV07CisjaWZkZWYgX19CSUdFTkRJQU4KKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHQwKTsKKwkJZGlwW2kgKyAxXSA9IGJmYV9vc19udG9obCh0MSk7CisjZWxzZQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwodDEpOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHQwKTsKKyNlbmRpZgorCX0KKworICAgIC8qKiB0b2RvCisgICAgICogUW9TIHN0YXRzIHIgYWxzbyBzd2FwcGVkIGFzIDY0Yml0OyB0aGF0IHN0cnVjdHVyZSBhbHNvCisgICAgICogaGFzIHRvIHVzZSA2NCBiaXQgY291bnRlcnMKKyAgICAgKi8KK30KKworLyoqCisgKiBiZmFfcG9ydF9lbmFibGVfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IC0gUG9pbnRlciB0byB0aGUgcG9ydCBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2VuYWJsZV9pc3Ioc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworLyoqCisgKiBiZmFfcG9ydF9kaXNhYmxlX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIHBvcnQgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9kaXNhYmxlX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCisvKioKKyAqIGJmYV9wb3J0X2dldF9zdGF0c19pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfZ2V0X3N0YXRzX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlwb3J0LT5zdGF0c19zdGF0dXMgPSBzdGF0dXM7CisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQltZW1jcHkocG9ydC0+c3RhdHMsIHBvcnQtPnN0YXRzX2RtYS5rdmEsCisJCSAgICAgICBzaXplb2YodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UpKTsKKwkJYmZhX3BvcnRfc3RhdHNfc3dhcChwb3J0LCBwb3J0LT5zdGF0cyk7CisJfQorCisJaWYgKHBvcnQtPnN0YXRzX2NiZm4pIHsKKwkJcG9ydC0+c3RhdHNfY2Jmbihwb3J0LT5zdGF0c19jYmFyZywgc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHNfY2JmbiA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIGJmYV9wb3J0X2NsZWFyX3N0YXRzX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9jbGVhcl9zdGF0c19pc3Ioc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJcG9ydC0+c3RhdHNfc3RhdHVzID0gc3RhdHVzOworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisKKwlpZiAocG9ydC0+c3RhdHNfY2JmbikgeworCQlwb3J0LT5zdGF0c19jYmZuKHBvcnQtPnN0YXRzX2NiYXJnLCBzdGF0dXMpOworCQlwb3J0LT5zdGF0c19jYmZuID0gTlVMTDsKKwl9Cit9CisKKy8qKgorICogYmZhX3BvcnRfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2lzcih2b2lkICpjYmFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXN0cnVjdCBiZmFfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcG9ydF9zICopY2Jhcmc7CisJdW5pb24gYmZpX3BvcnRfaTJoX21zZ191ICppMmhtc2c7CisKKwlpMmhtc2cgPSAodW5pb24gYmZpX3BvcnRfaTJoX21zZ191ICopbTsKKwliZmFfdHJjKHBvcnQsIG0tPm1oLm1zZ19pZCk7CisKKwlzd2l0Y2ggKG0tPm1oLm1zZ19pZCkgeworCWNhc2UgQkZJX1BPUlRfSTJIX0VOQUJMRV9SU1A6CisJCWlmIChwb3J0LT5lbmRpc19wZW5kaW5nID09IEJGQV9GQUxTRSkKKwkJCWJyZWFrOworCQliZmFfcG9ydF9lbmFibGVfaXNyKHBvcnQsIGkyaG1zZy0+ZW5hYmxlX3JzcC5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgQkZJX1BPUlRfSTJIX0RJU0FCTEVfUlNQOgorCQlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZyA9PSBCRkFfRkFMU0UpCisJCQlicmVhazsKKwkJYmZhX3BvcnRfZGlzYWJsZV9pc3IocG9ydCwgaTJobXNnLT5kaXNhYmxlX3JzcC5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgQkZJX1BPUlRfSTJIX0dFVF9TVEFUU19SU1A6CisJCS8qCisJCSAqIFN0YXRzIGJ1c3kgZmxhZyBpcyBzdGlsbCBzZXQ/IChtYXkgYmUgY21kIHRpbWVkIG91dCkKKwkJICovCisJCWlmIChwb3J0LT5zdGF0c19idXN5ID09IEJGQV9GQUxTRSkKKwkJCWJyZWFrOworCQliZmFfcG9ydF9nZXRfc3RhdHNfaXNyKHBvcnQsIGkyaG1zZy0+Z2V0c3RhdHNfcnNwLnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQOgorCQlpZiAocG9ydC0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UpCisJCQlicmVhazsKKwkJYmZhX3BvcnRfY2xlYXJfc3RhdHNfaXNyKHBvcnQsIGkyaG1zZy0+Y2xlYXJzdGF0c19yc3Auc3RhdHVzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBiZmFfcG9ydF9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLwordTMyCitiZmFfcG9ydF9tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIEJGQV9ST1VORFVQKHNpemVvZih1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9wb3J0X21lbV9jbGFpbSgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCBQb3J0IG1vZHVsZSBwb2ludGVyCisgKiAJICAgICAgZG1hX2t2YSBLZXJuZWwgVmlydHVhbCBBZGRyZXNzIG9mIFBvcnQgRE1BIE1lbW9yeQorICogCSAgICAgIGRtYV9wYSAgUGh5c2ljYWwgQWRkcmVzcyBvZiBQb3J0IERNQSBNZW1vcnkKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX3BvcnRfbWVtX2NsYWltKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCB1OCAqZG1hX2t2YSwgdTY0IGRtYV9wYSkKK3sKKwlwb3J0LT5zdGF0c19kbWEua3ZhID0gZG1hX2t2YTsKKwlwb3J0LT5zdGF0c19kbWEucGEgPSBkbWFfcGE7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZW5hYmxlKCkKKyAqCisgKiAgIFNlbmQgdGhlIFBvcnQgZW5hYmxlIHJlcXVlc3QgdG8gdGhlIGYvdworICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworYmZhX3N0YXR1c190CitiZmFfcG9ydF9lbmFibGUoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9wb3J0X2VuZGlzX2NiZm5fdCBjYmZuLAorCQl2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCS8qKiB0b2RvIE5vdCBpbXBsZW1lbnRlZCAqLworCWJmYV9hc3NlcnQoMCk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwocG9ydC0+aW9jKSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisKKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfREVWQlVTWSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqKXBvcnQtPmVuZGlzX21iLm1zZzsKKworCXBvcnQtPm1zZ3RhZysrOworCXBvcnQtPmVuZGlzX2NiZm4gPSBjYmZuOworCXBvcnQtPmVuZGlzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9UUlVFOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19QT1JULCBCRklfUE9SVF9IMklfRU5BQkxFX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKHBvcnQtPmlvYykpOworCWJmYV9pb2NfbWJveF9xdWV1ZShwb3J0LT5pb2MsICZwb3J0LT5lbmRpc19tYik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfcG9ydF9kaXNhYmxlKCkKKyAqCisgKiAgIFNlbmQgdGhlIFBvcnQgZGlzYWJsZSByZXF1ZXN0IHRvIHRoZSBmL3cKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3BvcnRfZGlzYWJsZShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3BvcnRfZW5kaXNfY2Jmbl90IGNiZm4sCisJCSB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCS8qKiB0b2RvIE5vdCBpbXBsZW1lbnRlZCAqLworCWJmYV9hc3NlcnQoMCk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwocG9ydC0+aW9jKSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisKKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfREVWQlVTWSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqKXBvcnQtPmVuZGlzX21iLm1zZzsKKworCXBvcnQtPm1zZ3RhZysrOworCXBvcnQtPmVuZGlzX2NiZm4gPSBjYmZuOworCXBvcnQtPmVuZGlzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9UUlVFOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19QT1JULCBCRklfUE9SVF9IMklfRElTQUJMRV9SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChwb3J0LT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUocG9ydC0+aW9jLCAmcG9ydC0+ZW5kaXNfbWIpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZ2V0X3N0YXRzKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBQb3J0IHN0YXRpc3RpY3MuCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCitiZmFfc3RhdHVzX3QKK2JmYV9wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkgICBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9wb3J0X2dldF9zdGF0c19yZXFfcyAqbTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChwb3J0LT5pb2MpKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19ERVZCVVNZKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfcG9ydF9nZXRfc3RhdHNfcmVxX3MgKilwb3J0LT5zdGF0c19tYi5tc2c7CisKKwlwb3J0LT5zdGF0cyA9IHN0YXRzOworCXBvcnQtPnN0YXRzX2NiZm4gPSBjYmZuOworCXBvcnQtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWJmYV9kbWFfYmVfYWRkcl9zZXQobS0+ZG1hX2FkZHIsIHBvcnQtPnN0YXRzX2RtYS5wYSk7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1BPUlQsIEJGSV9QT1JUX0gySV9HRVRfU1RBVFNfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQocG9ydC0+aW9jKSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKHBvcnQtPmlvYywgJnBvcnQtPnN0YXRzX21iKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9wb3J0X2NsZWFyX3N0YXRzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCitiZmFfc3RhdHVzX3QKK2JmYV9wb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2JmbiwKKwkJICAgICB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChwb3J0LT5pb2MpKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19ERVZCVVNZKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zICopcG9ydC0+c3RhdHNfbWIubXNnOworCisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1BPUlQsIEJGSV9QT1JUX0gySV9DTEVBUl9TVEFUU19SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChwb3J0LT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUocG9ydC0+aW9jLCAmcG9ydC0+c3RhdHNfbWIpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX3BvcnRfaGJmYWlsKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX3BvcnRfaGJmYWlsKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3BvcnRfcyAqKWFyZzsKKworCS8qCisJICogRmFpbCBhbnkgcGVuZGluZyBnZXRfc3RhdHMvY2xlYXJfc3RhdHMgcmVxdWVzdHMKKwkgKi8KKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQlpZiAocG9ydC0+c3RhdHNfY2JmbikKKwkJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+ZGV2LCBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCXBvcnQtPnN0YXRzX2NiZm4gPSBOVUxMOworCQlwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCX0KKworCS8qCisJICogQ2xlYXIgYW55IGVuYWJsZS9kaXNhYmxlIGlzIHBlbmRpbmcKKwkgKi8KKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQlpZiAocG9ydC0+ZW5kaXNfY2JmbikKKwkJCXBvcnQtPmVuZGlzX2NiZm4ocG9ydC0+ZGV2LCBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCXBvcnQtPmVuZGlzX2NiZm4gPSBOVUxMOworCQlwb3J0LT5lbmRpc19wZW5kaW5nID0gQkZBX0ZBTFNFOworCX0KK30KKworLyoqCisgKiBiZmFfcG9ydF9hdHRhY2goKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICBpb2MgIC0gUG9pbnRlciB0byB0aGUgaW9jIG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICBkZXYgIC0gUG9pbnRlciB0byB0aGUgZGV2aWNlIGRyaXZlciBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgIFRoZSBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIG1ib3ggSVNSIGZ1bmN0aW9ucyBoYXZlCisgKiAgICAgICAgICAgICAgICAgICB0aGlzIHBvaW50ZXIgYXMgb25lIG9mIHRoZSBwYXJhbWV0ZXJzLgorICogICAgICAgICAgICB0cmNtb2QgLQorICogICAgICAgICAgICBsb2dtb2QgLQorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfcG9ydF9hdHRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGV2LAorCQlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKQoreworCWJmYV9hc3NlcnQocG9ydCk7CisKKwlwb3J0LT5kZXYgPSBkZXY7CisJcG9ydC0+aW9jID0gaW9jOworCXBvcnQtPnRyY21vZCA9IHRyY21vZDsKKwlwb3J0LT5sb2dtb2QgPSBsb2dtb2Q7CisKKwlwb3J0LT5zdGF0c19idXN5ID0gcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwlwb3J0LT5zdGF0c19jYmZuID0gcG9ydC0+ZW5kaXNfY2JmbiA9IE5VTEw7CisKKwliZmFfaW9jX21ib3hfcmVnaXNyKHBvcnQtPmlvYywgQkZJX01DX1BPUlQsIGJmYV9wb3J0X2lzciwgcG9ydCk7CisJYmZhX2lvY19oYmZhaWxfaW5pdCgmcG9ydC0+aGJmYWlsLCBiZmFfcG9ydF9oYmZhaWwsIHBvcnQpOworCWJmYV9pb2NfaGJmYWlsX3JlZ2lzdGVyKHBvcnQtPmlvYywgJnBvcnQtPmhiZmFpbCk7CisKKwliZmFfdHJjKHBvcnQsIDApOworfQorCisvKioKKyAqIGJmYV9wb3J0X2RldGFjaCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9wb3J0X2RldGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfdHJjKHBvcnQsIDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0X3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjk3ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX1BPUlRfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfUE9SVF9QUklWX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcHBvcnQuaD4KKyNpbmNsdWRlICJiZmFfaW50cl9wcml2LmgiCisKKy8qKgorICogQkZBIHBoeXNpY2FsIHBvcnQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV9wcG9ydF9zIHsKKwlzdHJ1Y3QgYmZhX3MgCQkqYmZhOwkvKiAgcGFyZW50IEJGQSBpbnN0YW5jZSAqLworCWJmYV9zbV90CQlzbTsJLyogIHBvcnQgc3RhdGUgbWFjaGluZSAqLworCXd3bl90CQkJbnd3bjsJLyogIG5vZGUgd3duIG9mIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdAkJCXB3d247CS8qICBwb3J0IHd3biBvZiBwaHlzaWNhbCBvcHJ0ICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWRfc3VwOworCQkJCQkvKiAgc3VwcG9ydGVkIHNwZWVkcyAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkOwkvKiAgY3VycmVudCBzcGVlZCAqLworCWVudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IHRvcG9sb2d5OwkvKiAgY3VycmVudCB0b3BvbG9neSAqLworCXU4CQkJbXlhbHBhOwkvKiAgbXkgQUxQQSBpbiBMT09QIHRvcG9sb2d5ICovCisJdTgJCQlyc3ZkWzNdOworCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MJY2ZnOwkvKiAgY3VycmVudCBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MgIHFvc19hdHRyOyAgIC8qIFFvUyBBdHRyaWJ1dGVzICovCisJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zIHFvc192Y19hdHRyOyAgLyogIFZDIGluZm8gZnJvbSBFTFAgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXJlcXFfd2FpdDsKKwkJCQkJLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJc3ZjcmVxX3dhaXQ7CisJCQkJCS8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXN0YXRzX3JlcXFfd2FpdDsKKwkJCQkJLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAoc3RhdHMpICovCisJdm9pZAkJCSpldmVudF9jYmFyZzsKKwl2b2lkCQkJKCpldmVudF9jYmZuKSAodm9pZCAqY2JhcmcsCisJCQkJCQliZmFfcHBvcnRfZXZlbnRfdCBldmVudCk7CisJdW5pb24geworCQl1bmlvbiBiZmlfcHBvcnRfaTJoX21zZ191IGkyaG1zZzsKKwl9IGV2ZW50X2FyZzsKKwl2b2lkCQkJKmJmYWQ7CS8qICBCRkEgZHJpdmVyIGhhbmRsZSAqLworCXN0cnVjdCBiZmFfY2JfcWVfcwkJaGNiX3FlOwkvKiAgQkZBIGNhbGxiYWNrIHF1ZXVlIGVsZW0gKi8KKwllbnVtIGJmYV9wcG9ydF9saW5rc3RhdGUJaGNiX2V2ZW50OworCQkJCQkvKiAgbGluayBldmVudCBmb3IgY2FsbGJhY2sgKi8KKwl1MzIJCW1zZ3RhZzsJLyogIGZpbXJ3YXJlIG1zZyB0YWcgZm9yIHJlcGx5ICovCisJdTgJCQkqc3RhdHNfa3ZhOworCXU2NAkJc3RhdHNfcGE7CisJdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzOwkvKiAgcHBvcnQgc3RhdHMgKi8KKwl1MzIJCW15cGlkIDogMjQ7CisJdTMyCQlyc3ZkX2IgOiA4OworCXN0cnVjdCBiZmFfdGltZXJfcyAJdGltZXI7CS8qICB0aW1lciAqLworCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191IAkqc3RhdHNfcmV0OworCQkJCQkvKiAgZHJpdmVyIHN0YXRzIGxvY2F0aW9uICovCisJYmZhX3N0YXR1c190CQlzdGF0c19zdGF0dXM7CisJCQkJCS8qICBzdGF0cy9zdGF0c2NsciBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCXN0YXRzX2J1c3k7CisJCQkJCS8qICBvdXRzdGFuZGluZyBzdGF0cy9zdGF0c2NsciAqLworCWJmYV9ib29sZWFuX3QgICAJc3RhdHNfcWZ1bGw7CisJYmZhX2Jvb2xlYW5fdCAgIAlkaWFnX2J1c3k7CisJCQkJCS8qICBkaWFnIGJ1c3kgc3RhdHVzICovCisJYmZhX2Jvb2xlYW5fdCAgIAliZWFjb247CisJCQkJCS8qICBwb3J0IGJlYWNvbiBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCWxpbmtfZTJlX2JlYWNvbjsKKwkJCQkJLyogIGxpbmsgYmVhY29uIHN0YXR1cyAqLworCWJmYV9jYl9wcG9ydF90CQlzdGF0c19jYmZuOworCQkJCQkvKiAgZHJpdmVyIGNhbGxiYWNrIGZ1bmN0aW9uICovCisJdm9pZAkJCSpzdGF0c19jYmFyZzsKKwkJCQkJLyogKiE8IHVzZXIgY2FsbGJhY2sgYXJnICovCit9OworCisjZGVmaW5lIEJGQV9QT1JUX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnBwb3J0KQorCisvKgorICogcHVibGljIGZ1bmN0aW9ucworICovCit2b2lkCWJmYV9wcG9ydF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisjZW5kaWYgLyogX19CRkFfUE9SVF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDdhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wcml2LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9QUklWX0hfXworI2RlZmluZSBfX0JGQV9QUklWX0hfXworCisjaW5jbHVkZSAiYmZhX2lvY2ZjLmgiCisjaW5jbHVkZSAiYmZhX2ludHJfcHJpdi5oIgorI2luY2x1ZGUgImJmYV90cmNtb2RfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9tb2R1bGVzX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfZndpbWdfcHJpdi5oIgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxiZmFfdGltZXIuaD4KKworLyoqCisgKiBNYWNybyB0byBkZWZpbmUgYSBuZXcgQkZBIG1vZHVsZQorICovCisjZGVmaW5lIEJGQV9NT0RVTEUoX19tb2QpIAkJCQkJCVwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9tZW1pbmZvKAkJCQlcCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwJXAorCQkJdTMyICpkbV9sZW4pOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsCQlcCisJCQl2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIAlcCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywJCQlcCisJCQlzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKTsgICAgICBcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKKwkJCQkJCQkJCVwKKwlleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kXyAjIyBfX21vZDsJCQlcCisJc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kXyAjIyBfX21vZCA9IHsJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX21lbWluZm8sCQkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfYXR0YWNoLAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX2luaXRkb25lLAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX2RldGFjaCwJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9zdGFydCwJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9zdG9wLAkJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9pb2NkaXNhYmxlLAkJCQlcCisJfQorCisjZGVmaW5lIEJGQV9DQUNIRUxJTkVfU1oJKDI1NikKKworLyoqCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBpbnRlcmFjdCBiZXR3ZWVuIGRpZmZlcmVudCBCRkEgc3ViIG1vZHVsZXMKKyAqCisgKiBFYWNoIHN1YiBtb2R1bGUgbmVlZHMgdG8gaW1wbGVtZW50IG9ubHkgdGhlIGVudHJ5IHBvaW50cyByZWxldmFudCB0byBpdCAoYW5kCisgKiBjYW4gbGVhdmUgZW50cnkgcG9pbnRzIGFzIE5VTEwpCisgKi8KK3N0cnVjdCBiZmFfbW9kdWxlX3MgeworCXZvaWQgKCptZW1pbmZvKSAoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJCXUzMiAqZG1fbGVuKTsKKwl2b2lkICgqYXR0YWNoKSAoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7CisJdm9pZCAoKmluaXRkb25lKSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpkZXRhY2gpIChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKnN0YXJ0KSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpzdG9wKSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCppb2NkaXNhYmxlKSAoc3RydWN0IGJmYV9zICpiZmEpOworfTsKKworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW107CisKK3N0cnVjdCBiZmFfcyB7CisJdm9pZAkJCSpiZmFkOwkJLyogIEJGQSBkcml2ZXIgaW5zdGFuY2UgICAgKi8KKwlzdHJ1Y3QgYmZhX2Flbl9zCSphZW47CQkvKiAgQUVOIG1vZHVsZQkJICAgICovCisJc3RydWN0IGJmYV9wbG9nX3MJKnBsb2c7CQkvKiAgcG9ydGxvZyBidWZmZXIJICAgICovCisJc3RydWN0IGJmYV9sb2dfbW9kX3MJKmxvZ207CQkvKiAgZHJpdmVyIGxvZ2dpbmcgbW9kdWxlbiAqLworCXN0cnVjdCBiZmFfdHJjX21vZF9zCSp0cmNtb2Q7CS8qICBkcml2ZXIgdHJhY2luZwkgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY19zCWlvYzsJCS8qICBJT0MgbW9kdWxlCQkgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJaW9jZmM7CQkvKiAgSU9DRkMgbW9kdWxlCSAgICAqLworCXN0cnVjdCBiZmFfdGltZXJfbW9kX3MJdGltZXJfbW9kOwkvKiAgdGltZXIgbW9kdWxlCSAgICAqLworCXN0cnVjdCBiZmFfbW9kdWxlc19zCW1vZHVsZXM7CS8qICBCRkEgbW9kdWxlcwkgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbXBfcTsJCS8qICBwZW5kaW5nIGNvbXBsZXRpb25zICAgICovCisJYmZhX2Jvb2xlYW5fdAkJcm1lX3Byb2Nlc3M7CS8qICBSTUUgcHJvY2Vzc2luZyBlbmFibGVkICovCisJc3RydWN0IGxpc3RfaGVhZAkJcmVxcV93YWl0cVtCRklfSU9DX01BWF9DUVNdOworCWJmYV9ib29sZWFuX3QJCWZjczsJCS8qICBGQ1MgaXMgYXR0YWNoZWQgdG8gQkZBICovCisJc3RydWN0IGJmYV9tc2l4X3MJbXNpeDsKK307CisKK2V4dGVybiBiZmFfaXNyX2Z1bmNfdCBiZmFfaXNyc1tCRklfTUNfTUFYXTsKK2V4dGVybiBiZmFfaW9jX21ib3hfbWNmdW5jX3QgIGJmYV9tYm94X2lzcnNbXTsKK2V4dGVybiBiZmFfYm9vbGVhbl90IGJmYV9hdXRvX3JlY292ZXI7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX2ZsYXNoOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mY2RpYWc7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3NncGc7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3Bwb3J0OworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mY3hwOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9scHM7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3VmOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9ycG9ydDsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfZmNwaW07CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3BiaW5kOworCisjZW5kaWYgLyogX19CRkFfUFJJVl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkYTc3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0LmMKQEAgLTAsMCArMSw5MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3Jwb3J0Lmg+CisjaW5jbHVkZSAiYmZhX2ludHJfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoSEFMLCBSUE9SVCk7CitCRkFfTU9EVUxFKHJwb3J0KTsKKworI2RlZmluZSBiZmFfcnBvcnRfb2ZmbGluZV9jYihfX3JwKSBkbyB7CQkJCVwKKwlpZiAoKF9fcnApLT5iZmEtPmZjcykJCQkJCQlcCisJCWJmYV9jYl9ycG9ydF9vZmZsaW5lKChfX3JwKS0+cnBvcnRfZHJ2KTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19ycCktPmJmYSwgJihfX3JwKS0+aGNiX3FlLAkJXAorCQkJCV9fYmZhX2NiX3Jwb3J0X29mZmxpbmUsIChfX3JwKSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX3Jwb3J0X29ubGluZV9jYihfX3JwKSBkbyB7CQkJCVwKKwlpZiAoKF9fcnApLT5iZmEtPmZjcykJCQkJCQlcCisJCWJmYV9jYl9ycG9ydF9vbmxpbmUoKF9fcnApLT5ycG9ydF9kcnYpOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX3JwKS0+YmZhLCAmKF9fcnApLT5oY2JfcWUsCQlcCisJCQkJICBfX2JmYV9jYl9ycG9ydF9vbmxpbmUsIChfX3JwKSk7ICAgICAgXAorCQl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnRfYWxsb2Moc3RydWN0IGJmYV9ycG9ydF9tb2RfcyAqcnBfbW9kKTsKK3N0YXRpYyB2b2lkIGJmYV9ycG9ydF9mcmVlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9ycG9ydF9zZW5kX2Z3c3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9ycG9ydF9vbmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgX19iZmFfY2JfcnBvcnRfb2ZmbGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CisKKy8qKgorICogIGJmYV9ycG9ydF9zbSBCRkEgcnBvcnQgc3RhdGUgbWFjaGluZQorICovCisKKworZW51bSBiZmFfcnBvcnRfZXZlbnQgeworCUJGQV9SUE9SVF9TTV9DUkVBVEUJPSAxLAkvKiAgcnBvcnQgY3JlYXRlIGV2ZW50CQkqLworCUJGQV9SUE9SVF9TTV9ERUxFVEUJPSAyLAkvKiAgZGVsZXRpbmcgYW4gZXhpc3RpbmcgcnBvcnQgKi8KKwlCRkFfUlBPUlRfU01fT05MSU5FCT0gMywJLyogIHJwb3J0IGlzIG9ubGluZQkJKi8KKwlCRkFfUlBPUlRfU01fT0ZGTElORQk9IDQsCS8qICBycG9ydCBpcyBvZmZsaW5lCQkqLworCUJGQV9SUE9SVF9TTV9GV1JTUAk9IDUsCS8qICBmaXJtd2FyZSByZXNwb25zZQkJKi8KKwlCRkFfUlBPUlRfU01fSFdGQUlMCT0gNiwJLyogIElPQyBoL3cgZmFpbHVyZQkJKi8KKwlCRkFfUlBPUlRfU01fUU9TX1NDTgk9IDcsCS8qICBRb1MgU0NOIGZyb20gZmlybXdhcmUJKi8KKwlCRkFfUlBPUlRfU01fU0VUX1NQRUVECT0gOCwJLyogIFNldCBScG9ydCBTcGVlZCAJCSovCisJQkZBX1JQT1JUX1NNX1FSRVNVTUUJPSA5LAkvKiAgc3BhY2UgaW4gcmVxdWV1ZSBxdWV1ZQkqLworfTsKKworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fY3JlYXRlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndkZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX29mZmxpbmVfcGVuZGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndjcmVhdGVfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndkZWxldGVfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CisKKy8qKgorICogQmVnaW5uaW5nIHN0YXRlLCBvbmx5IG9ubGluZSBldmVudCBleHBlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9DUkVBVEU6CisJCWJmYV9zdGF0cyhycCwgc21fdW5fY3IpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fY3JlYXRlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV91bl91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fY3Jfb24pOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBXYWl0aW5nIGZvciBycG9ydCBjcmVhdGUgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2NyZWF0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19yc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fb25saW5lKTsKKwkJYmZhX3Jwb3J0X29ubGluZV9jYihycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRlX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX29mZik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9vZmZsaW5lX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogUmVxdWVzdCBxdWV1ZSBpcyBmdWxsLCBhd2FpdGluZyBxdWV1ZSByZXN1bWUgdG8gc2VuZCBjcmVhdGUgcmVxdWVzdC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZSk7CisJCWJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZycC0+cmVxcV93YWl0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX29mZik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBPbmxpbmUgc3RhdGUgLSBub3JtYWwgcGFya2luZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmaV9ycG9ydF9xb3Nfc2NuX3MgKnFvc19zY247CisKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fb25fb2ZmKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX29uX2RlbCk7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vbl9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fU0VUX1NQRUVEOgorCQliZmFfcnBvcnRfc2VuZF9md3NwZWVkKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9RT1NfU0NOOgorCQlxb3Nfc2NuID0gKHN0cnVjdCBiZmlfcnBvcnRfcW9zX3Njbl9zICopIHJwLT5ldmVudF9hcmcuZndfbXNnOworCQlycC0+cW9zX2F0dHIgPSBxb3Nfc2NuLT5uZXdfcW9zX2F0dHI7CisJCWJmYV90cmMocnAtPmJmYSwgcW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19mbG93X2lkKTsKKwkJYmZhX3RyYyhycC0+YmZhLCBxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCQliZmFfdHJjKHJwLT5iZmEsIHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCQliZmFfdHJjKHJwLT5iZmEsIHFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCisJCXFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfZmxvd19pZCAgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisJCXFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfZmxvd19pZCAgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisJCXFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCQlxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX3ByaW9yaXR5ID0KKwkJCWJmYV9vc19udG9obChxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX3ByaW9yaXR5KTsKKworCQlpZiAocW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19mbG93X2lkICE9CisJCQlxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX2Zsb3dfaWQpCisJCQliZmFfY2JfcnBvcnRfcW9zX3Njbl9mbG93aWQocnAtPnJwb3J0X2RydiwKKwkJCQkJCSAgICBxb3Nfc2NuLT5vbGRfcW9zX2F0dHIsCisJCQkJCQkgICAgcW9zX3Njbi0+bmV3X3Fvc19hdHRyKTsKKwkJaWYgKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkgIT0KKwkJCXFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfcHJpb3JpdHkpCisJCQliZmFfY2JfcnBvcnRfcW9zX3Njbl9wcmlvKHJwLT5ycG9ydF9kcnYsCisJCQkJCQkgIHFvc19zY24tPm9sZF9xb3NfYXR0ciwKKwkJCQkJCSAgcW9zX3Njbi0+bmV3X3Fvc19hdHRyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX29uX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogRmlybXdhcmUgcnBvcnQgaXMgYmVpbmcgZGVsZXRlZCAtIGF3YWl0aW5nIGYvdyByZXNwb25zZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9yc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlX3FmdWxsKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlKTsKKwkJYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIE9mZmxpbmUgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmX29uKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX29mZl9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBScG9ydCBpcyBkZWxldGVkLCB3YWl0aW5nIGZvciBmaXJtd2FyZSByZXNwb25zZSB0byBkZWxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfZndyc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9kZWxldGluZ19xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zdGF0cyhycCwgc21fZGVsX2Z3cnNwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKTsKKwkJYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnJwLT5yZXFxX3dhaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogV2FpdGluZyBmb3IgcnBvcnQgY3JlYXRlIHJlc3BvbnNlIGZyb20gZmlybXdhcmUuIEEgZGVsZXRlIGlzIHBlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZGVsZXRlX3BlbmRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2RlbHBfZndyc3ApOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZGVscF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZGVscF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFdhaXRpbmcgZm9yIHJwb3J0IGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLiBScG9ydCBvZmZsaW5lIGlzIHBlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fb2ZmbGluZV9wZW5kaW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fRldSU1A6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmcF9md3JzcCk7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZwX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGVfcGVuZGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX29mZnBfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmcF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPQyBoL3cgZmFpbGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2lvY2Rfb2ZmKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmVfY2IocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9pb2NkX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fT05MSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2lvY2Rfb24pOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9pb2NkX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfcnBvcnRfcHJpdmF0ZSBCRkEgcnBvcnQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorX19iZmFfY2JfcnBvcnRfb25saW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnAgPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX3Jwb3J0X29ubGluZShycC0+cnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3Jwb3J0X29mZmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfcnBvcnRfb2ZmbGluZShycC0+cnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9xcmVzdW1lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcwkqcnAgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fUVJFU1VNRSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwlpZiAoY2ZnLT5md2NmZy5udW1fcnBvcnRzIDwgQkZBX1JQT1JUX01JTikKKwkJY2ZnLT5md2NmZy5udW1fcnBvcnRzID0gQkZBX1JQT1JUX01JTjsKKworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1fcnBvcnRzICogc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfcyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycDsKKwl1MTYgICAgICAgIGk7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5ycF9mcmVlX3EpOworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnJwX2FjdGl2ZV9xKTsKKworCXJwID0gKHN0cnVjdCBiZmFfcnBvcnRfcyAqKSBiZmFfbWVtaW5mb19rdmEobWVtaW5mbyk7CisJbW9kLT5ycHNfbGlzdCA9IHJwOworCW1vZC0+bnVtX3Jwb3J0cyA9IGNmZy0+ZndjZmcubnVtX3Jwb3J0czsKKworCWJmYV9hc3NlcnQobW9kLT5udW1fcnBvcnRzCisJCSAgICYmICEobW9kLT5udW1fcnBvcnRzICYgKG1vZC0+bnVtX3Jwb3J0cyAtIDEpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fcnBvcnRzOyBpKyssIHJwKyspIHsKKwkJYmZhX29zX21lbXNldChycCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfcykpOworCQlycC0+YmZhID0gYmZhOworCQlycC0+cnBvcnRfdGFnID0gaTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisKKwkJLyoqCisJCSAqICAtIGlzIHVudXNlZAorCQkgKi8KKwkJaWYgKGkpCisJCQlsaXN0X2FkZF90YWlsKCZycC0+cWUsICZtb2QtPnJwX2ZyZWVfcSk7CisKKwkJYmZhX3JlcXFfd2luaXQoJnJwLT5yZXFxX3dhaXQsIGJmYV9ycG9ydF9xcmVzdW1lLCBycCk7CisJfQorCisJLyoqCisJICogY29uc3VtZSBtZW1vcnkKKwkgKi8KKwliZmFfbWVtaW5mb19rdmEobWVtaW5mbykgPSAodTggKikgcnA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJm1vZC0+cnBfYWN0aXZlX3EpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9ycG9ydF9zICopIHFlOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX0hXRkFJTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGJmYV9ycG9ydF9zICoKK2JmYV9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsKKworCWJmYV9xX2RlcSgmbW9kLT5ycF9mcmVlX3EsICZycG9ydCk7CisJaWYgKHJwb3J0KQorCQlsaXN0X2FkZF90YWlsKCZycG9ydC0+cWUsICZtb2QtPnJwX2FjdGl2ZV9xKTsKKworCXJldHVybiAocnBvcnQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKHJwb3J0LT5iZmEpOworCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPnJwX2FjdGl2ZV9xLCBycG9ydCkpOworCWxpc3RfZGVsKCZycG9ydC0+cWUpOworCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5xZSwgJm1vZC0+cnBfZnJlZV9xKTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApCit7CisJc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JULCAmcnAtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19SUE9SVCwgQkZJX1JQT1JUX0gySV9DUkVBVEVfUkVRLAorCQkJYmZhX2xwdWlkKHJwLT5iZmEpKTsKKwltLT5iZmFfaGFuZGxlID0gcnAtPnJwb3J0X3RhZzsKKwltLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMocnAtPnJwb3J0X2luZm8ubWF4X2ZybXN6KTsKKwltLT5waWQgPSBycC0+cnBvcnRfaW5mby5waWQ7CisJbS0+bHBfdGFnID0gcnAtPnJwb3J0X2luZm8ubHBfdGFnOworCW0tPmxvY2FsX3BpZCA9IHJwLT5ycG9ydF9pbmZvLmxvY2FsX3BpZDsKKwltLT5mY19jbGFzcyA9IHJwLT5ycG9ydF9pbmZvLmZjX2NsYXNzOworCW0tPnZmX2VuID0gcnAtPnJwb3J0X2luZm8udmZfZW47CisJbS0+dmZfaWQgPSBycC0+cnBvcnRfaW5mby52Zl9pZDsKKwltLT5jaXNjID0gcnAtPnJwb3J0X2luZm8uY2lzYzsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCkKK3sKKwlzdHJ1Y3QgYmZpX3Jwb3J0X2RlbGV0ZV9yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQsICZycC0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1JQT1JULCBCRklfUlBPUlRfSDJJX0RFTEVURV9SRVEsCisJCQliZmFfbHB1aWQocnAtPmJmYSkpOworCW0tPmZ3X2hhbmRsZSA9IHJwLT5md19oYW5kbGU7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9ycG9ydF9zZW5kX2Z3c3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3NwZWVkX3JlcV9zICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfaW5mby5zcGVlZCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19SUE9SVCwgQkZJX1JQT1JUX0gySV9TRVRfU1BFRURfUkVRLAorCQkJYmZhX2xwdWlkKHJwLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBycC0+ZndfaGFuZGxlOworCW0tPnNwZWVkID0gKHU4KXJwLT5ycG9ydF9pbmZvLnNwZWVkOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKworCisvKioKKyAqICBiZmFfcnBvcnRfcHVibGljCisgKi8KKworLyoqCisgKiAJCVJwb3J0IGludGVycnVwdCBwcm9jZXNzaW5nLgorICovCit2b2lkCitiZmFfcnBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXVuaW9uIGJmaV9ycG9ydF9pMmhfbXNnX3UgbXNnOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnA7CisKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCisJbXNnLm1zZyA9IG07CisKKwlzd2l0Y2ggKG0tPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfUlBPUlRfSTJIX0NSRUFURV9SU1A6CisJCXJwID0gQkZBX1JQT1JUX0ZST01fVEFHKGJmYSwgbXNnLmNyZWF0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQlycC0+ZndfaGFuZGxlID0gbXNnLmNyZWF0ZV9yc3AtPmZ3X2hhbmRsZTsKKwkJcnAtPnFvc19hdHRyID0gbXNnLmNyZWF0ZV9yc3AtPnFvc19hdHRyOworCQliZmFfYXNzZXJ0KG1zZy5jcmVhdGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fRldSU1ApOworCQlicmVhazsKKworCWNhc2UgQkZJX1JQT1JUX0kySF9ERUxFVEVfUlNQOgorCQlycCA9IEJGQV9SUE9SVF9GUk9NX1RBRyhiZmEsIG1zZy5kZWxldGVfcnNwLT5iZmFfaGFuZGxlKTsKKwkJYmZhX2Fzc2VydChtc2cuZGVsZXRlX3JzcC0+c3RhdHVzID09IEJGQV9TVEFUVVNfT0spOworCQliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0ZXUlNQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9SUE9SVF9JMkhfUU9TX1NDTjoKKwkJcnAgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBtc2cucW9zX3Njbl9ldnQtPmJmYV9oYW5kbGUpOworCQlycC0+ZXZlbnRfYXJnLmZ3X21zZyA9IG1zZy5xb3Nfc2NuX2V2dDsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnAsIEJGQV9SUE9SVF9TTV9RT1NfU0NOKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9ycG9ydF9hcGkKKyAqLworCitzdHJ1Y3QgYmZhX3Jwb3J0X3MgKgorYmZhX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqcnBvcnRfZHJ2KQoreworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnA7CisKKwlycCA9IGJmYV9ycG9ydF9hbGxvYyhCRkFfUlBPUlRfTU9EKGJmYSkpOworCisJaWYgKHJwID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwlycC0+YmZhID0gYmZhOworCXJwLT5ycG9ydF9kcnYgPSBycG9ydF9kcnY7CisJYmZhX3Jwb3J0X2NsZWFyX3N0YXRzKHJwKTsKKworCWJmYV9hc3NlcnQoYmZhX3NtX2NtcF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCkpOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fQ1JFQVRFKTsKKworCXJldHVybiAocnApOworfQorCit2b2lkCitiZmFfcnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9ERUxFVEUpOworfQorCit2b2lkCitiZmFfcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBiZmFfcnBvcnRfaW5mb19zICpycG9ydF9pbmZvKQoreworCWJmYV9hc3NlcnQocnBvcnRfaW5mby0+bWF4X2ZybXN6ICE9IDApOworCisJLyoqCisJICogU29tZSBKQk9EcyBhcmUgc2VlbiB0byBiZSBub3Qgc2V0dGluZyBQRFUgc2l6ZSBjb3JyZWN0bHkgaW4gUExPR0kKKwkgKiByZXNwb25zZXMuIERlZmF1bHQgdG8gbWluaW11bSBzaXplLgorCSAqLworCWlmIChycG9ydF9pbmZvLT5tYXhfZnJtc3ogPT0gMCkgeworCQliZmFfdHJjKHJwb3J0LT5iZmEsIHJwb3J0LT5ycG9ydF90YWcpOworCQlycG9ydF9pbmZvLT5tYXhfZnJtc3ogPSBGQ19NSU5fUERVU1o7CisJfQorCisJYmZhX29zX2Fzc2lnbihycG9ydC0+cnBvcnRfaW5mbywgKnJwb3J0X2luZm8pOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBCRkFfUlBPUlRfU01fT05MSU5FKTsKK30KKwordm9pZAorYmZhX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfcnBvcnRfc3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpCit7CisJYmZhX2Fzc2VydChzcGVlZCAhPSAwKTsKKwliZmFfYXNzZXJ0KHNwZWVkICE9IEJGQV9QUE9SVF9TUEVFRF9BVVRPKTsKKworCXJwb3J0LT5ycG9ydF9pbmZvLnNwZWVkID0gc3BlZWQ7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9TRVRfU1BFRUQpOworfQorCit2b2lkCitiZmFfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcyAqc3RhdHMpCit7CisJKnN0YXRzID0gcnBvcnQtPnN0YXRzOworfQorCit2b2lkCitiZmFfcnBvcnRfZ2V0X3Fvc19hdHRyKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCQkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyAqcW9zX2F0dHIpCit7CisJcW9zX2F0dHItPnFvc19wcmlvcml0eSAgPSBiZmFfb3NfbnRvaGwocnBvcnQtPnFvc19hdHRyLnFvc19wcmlvcml0eSk7CisJcW9zX2F0dHItPnFvc19mbG93X2lkICA9IGJmYV9vc19udG9obChycG9ydC0+cW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCit9CisKK3ZvaWQKK2JmYV9ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9vc19tZW1zZXQoJnJwb3J0LT5zdGF0cywgMCwgc2l6ZW9mKHJwb3J0LT5zdGF0cykpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0X3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0X3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDkwY2UyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnRfcHJpdi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9SUE9SVF9QUklWX0hfXworI2RlZmluZSBfX0JGQV9SUE9SVF9QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorCisjZGVmaW5lIEJGQV9SUE9SVF9NSU4JNAorCitzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwc19saXN0OwkvKiAgbGlzdCBvZiBycG9ydHMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlycF9mcmVlX3E7CS8qICBmcmVlIGJmYV9ycG9ydHMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlycF9hY3RpdmVfcTsJLyogIGZyZWUgYmZhX3Jwb3J0cyAJKi8KKwl1MTYJbnVtX3Jwb3J0czsJLyogIG51bWJlciBvZiBycG9ydHMJKi8KK307CisKKyNkZWZpbmUgQkZBX1JQT1JUX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnJwb3J0X21vZCkKKworLyoqCisgKiBDb252ZXJ0IHJwb3J0IHRhZyB0byBSUE9SVAorICovCisjZGVmaW5lIEJGQV9SUE9SVF9GUk9NX1RBRyhfX2JmYSwgX3RhZykJCQkJXAorCShCRkFfUlBPUlRfTU9EKF9fYmZhKS0+cnBzX2xpc3QgKwkJCQlcCisJICgoX3RhZykgJiAoQkZBX1JQT1JUX01PRChfX2JmYSktPm51bV9ycG9ydHMgLSAxKSkpCisKKy8qCisgKiBleHRlcm5hbCBmdW5jdGlvbnMKKyAqLwordm9pZAliZmFfcnBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworI2VuZGlmIC8qIF9fQkZBX1JQT1JUX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5ZDhmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGcuYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIFNHUEcpOworQkZBX01PRFVMRShzZ3BnKTsKKworLyoqCisgKiAgYmZhX3NncGdfbW9kIEJGQSBTR1BHIE1vZGUgbW9kdWxlCisgKi8KKworLyoqCisgKiBDb21wdXRlIGFuZCByZXR1cm4gbWVtb3J5IG5lZWRlZCBieSBGQ1AoaW0pIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyA8IEJGQV9TR1BHX01JTikKKwkJY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gQkZBX1NHUEdfTUlOOworCisJKmttX2xlbiArPSAoY2ZnLT5kcnZjZmcubnVtX3NncGdzICsgMSkgKiBzaXplb2Yoc3RydWN0IGJmYV9zZ3BnX3MpOworCSpkbV9sZW4gKz0gKGNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyArIDEpICogc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKTsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX3NncGdfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MJKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCWludAkJCQlpOworCXN0cnVjdCBiZmFfc2dwZ19zCQkqaHNncGc7CisJc3RydWN0IGJmaV9zZ3BnX3MgCSpzZ3BnOworCXU2NAkJYWxpZ25fbGVuOworCisJdW5pb24geworCQl1NjQgICAgICAgIHBhOworCQl1bmlvbiBiZmlfYWRkcl91ICAgICAgYWRkcjsKKwl9IHNncGdfcGE7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5zZ3BnX3EpOworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnNncGdfd2FpdF9xKTsKKworCWJmYV90cmMoYmZhLCBjZmctPmRydmNmZy5udW1fc2dwZ3MpOworCisJbW9kLT5udW1fc2dwZ3MgPSBjZmctPmRydmNmZy5udW1fc2dwZ3M7CisJbW9kLT5zZ3BnX2Fycl9wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pbmZvKTsKKwlhbGlnbl9sZW4gPSAoQkZBX1NHUEdfUk9VTkRVUChtb2QtPnNncGdfYXJyX3BhKSAtIG1vZC0+c2dwZ19hcnJfcGEpOworCW1vZC0+c2dwZ19hcnJfcGEgKz0gYWxpZ25fbGVuOworCW1vZC0+aHNncGdfYXJyID0gKHN0cnVjdCBiZmFfc2dwZ19zICopIChiZmFfbWVtaW5mb19rdmEobWluZm8pICsKKwkJCQkJCWFsaWduX2xlbik7CisJbW9kLT5zZ3BnX2FyciA9IChzdHJ1Y3QgYmZpX3NncGdfcyAqKSAoYmZhX21lbWluZm9fZG1hX3ZpcnQobWluZm8pICsKKwkJCQkJCWFsaWduX2xlbik7CisKKwloc2dwZyA9IG1vZC0+aHNncGdfYXJyOworCXNncGcgPSBtb2QtPnNncGdfYXJyOworCXNncGdfcGEucGEgPSBtb2QtPnNncGdfYXJyX3BhOworCW1vZC0+ZnJlZV9zZ3BncyA9IG1vZC0+bnVtX3NncGdzOworCisJYmZhX2Fzc2VydCghKHNncGdfcGEucGEgJiAoc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKSAtIDEpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fc2dwZ3M7IGkrKykgeworCQliZmFfb3NfbWVtc2V0KGhzZ3BnLCAwLCBzaXplb2YoKmhzZ3BnKSk7CisJCWJmYV9vc19tZW1zZXQoc2dwZywgMCwgc2l6ZW9mKCpzZ3BnKSk7CisKKwkJaHNncGctPnNncGcgPSBzZ3BnOworCQloc2dwZy0+c2dwZ19wYSA9IHNncGdfcGEuYWRkcjsKKwkJbGlzdF9hZGRfdGFpbCgmaHNncGctPnFlLCAmbW9kLT5zZ3BnX3EpOworCisJCWhzZ3BnKys7CisJCXNncGcrKzsKKwkJc2dwZ19wYS5wYSArPSBzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpOworCX0KKworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgaHNncGc7CisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWluZm8pID0gKHU4ICopIHNncGc7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWluZm8pID0gc2dwZ19wYS5wYTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworCisKKy8qKgorICogIGJmYV9zZ3BnX3B1YmxpYyBCRkEgU0dQRyBwdWJsaWMgZnVuY3Rpb25zCisgKi8KKworYmZhX3N0YXR1c190CitiZmFfc2dwZ19tYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwgaW50IG5zZ3BncykKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCXN0cnVjdCBiZmFfc2dwZ19zICpoc2dwZzsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYV90cmNfZnAoYmZhLCBuc2dwZ3MpOworCisJaWYgKG1vZC0+ZnJlZV9zZ3BncyA8IG5zZ3BncykKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IG5zZ3BnczsgaSsrKSB7CisJCWJmYV9xX2RlcSgmbW9kLT5zZ3BnX3EsICZoc2dwZyk7CisJCWJmYV9hc3NlcnQoaHNncGcpOworCQlsaXN0X2FkZF90YWlsKCZoc2dwZy0+cWUsIHNncGdfcSk7CisJfQorCisJbW9kLT5mcmVlX3NncGdzIC09IG5zZ3BnczsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX3NncGdfbWZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwgaW50IG5zZ3BnKQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWU7CisKKwliZmFfdHJjX2ZwKGJmYSwgbnNncGcpOworCisJbW9kLT5mcmVlX3NncGdzICs9IG5zZ3BnOworCWJmYV9hc3NlcnQobW9kLT5mcmVlX3NncGdzIDw9IG1vZC0+bnVtX3NncGdzKTsKKworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChzZ3BnX3EsICZtb2QtPnNncGdfcSk7CisKKwlpZiAobGlzdF9lbXB0eSgmbW9kLT5zZ3BnX3dhaXRfcSkpCisJCXJldHVybjsKKworCS8qKgorCSAqIHNhdGlzZnkgYXMgbWFueSB3YWl0aW5nIHJlcXVlc3RzIGFzIHBvc3NpYmxlCisJICovCisJZG8geworCQl3cWUgPSBiZmFfcV9maXJzdCgmbW9kLT5zZ3BnX3dhaXRfcSk7CisJCWlmIChtb2QtPmZyZWVfc2dwZ3MgPCB3cWUtPm5zZ3BnKQorCQkJbnNncGcgPSBtb2QtPmZyZWVfc2dwZ3M7CisJCWVsc2UKKwkJCW5zZ3BnID0gd3FlLT5uc2dwZzsKKwkJYmZhX3NncGdfbWFsbG9jKGJmYSwgJndxZS0+c2dwZ19xLCBuc2dwZyk7CisJCXdxZS0+bnNncGcgLT0gbnNncGc7CisJCWlmICh3cWUtPm5zZ3BnID09IDApIHsKKwkJCWxpc3RfZGVsKCZ3cWUtPnFlKTsKKwkJCXdxZS0+Y2Jmbih3cWUtPmNiYXJnKTsKKwkJfQorCX0gd2hpbGUgKG1vZC0+ZnJlZV9zZ3BncyAmJiAhbGlzdF9lbXB0eSgmbW9kLT5zZ3BnX3dhaXRfcSkpOworfQorCit2b2lkCitiZmFfc2dwZ193YWl0KHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSwgaW50IG5zZ3BnKQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KG5zZ3BnID4gMCk7CisJYmZhX2Fzc2VydChuc2dwZyA+IG1vZC0+ZnJlZV9zZ3Bncyk7CisKKwl3cWUtPm5zZ3BnX3RvdGFsID0gd3FlLT5uc2dwZyA9IG5zZ3BnOworCisJLyoqCisJICogYWxsb2NhdGUgYW55IGxlZnQgdG8gdGhpcyBvbmUgZmlyc3QKKwkgKi8KKwlpZiAobW9kLT5mcmVlX3NncGdzKSB7CisJCS8qKgorCQkgKiBubyBvbmUgZWxzZSBpcyB3YWl0aW5nIGZvciBTR1BHCisJCSAqLworCQliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJm1vZC0+c2dwZ193YWl0X3EpKTsKKwkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZtb2QtPnNncGdfcSwgJndxZS0+c2dwZ19xKTsKKwkJd3FlLT5uc2dwZyAtPSBtb2QtPmZyZWVfc2dwZ3M7CisJCW1vZC0+ZnJlZV9zZ3BncyA9IDA7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmd3FlLT5xZSwgJm1vZC0+c2dwZ193YWl0X3EpOworfQorCit2b2lkCitiZmFfc2dwZ193Y2FuY2VsKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSkKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPnNncGdfd2FpdF9xLCB3cWUpKTsKKwlsaXN0X2RlbCgmd3FlLT5xZSk7CisKKwlpZiAod3FlLT5uc2dwZ190b3RhbCAhPSB3cWUtPm5zZ3BnKQorCQliZmFfc2dwZ19tZnJlZShiZmEsICZ3cWUtPnNncGdfcSwKKwkJCQkgICB3cWUtPm5zZ3BnX3RvdGFsIC0gd3FlLT5uc2dwZyk7Cit9CisKK3ZvaWQKK2JmYV9zZ3BnX3dpbml0KHN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlLCB2b2lkICgqY2JmbikgKHZvaWQgKmNiYXJnKSwKKwkJICAgdm9pZCAqY2JhcmcpCit7CisJSU5JVF9MSVNUX0hFQUQoJndxZS0+c2dwZ19xKTsKKwl3cWUtPmNiZm4gPSBjYmZuOworCXdxZS0+Y2JhcmcgPSBjYmFyZzsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGdfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmE4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnX3ByaXYuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGhhbF9zZ3BnLmggQkZBIFNHIHBhZ2UgbW9kdWxlCisgKi8KKworI2lmbmRlZiBfX0JGQV9TR1BHX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1NHUEdfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisKKyNkZWZpbmUgQkZBX1NHUEdfTUlOCSgxNikKKworLyoqCisgKiBBbGlnbm1lbnQgbWFjcm8gZm9yIFNHIHBhZ2UgYWxsb2NhdGlvbgorICovCisjZGVmaW5lIEJGQV9TR1BHX1JPVU5EVVAoX2wpICgoKF9sKSArIChzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpIC0gMSkpIFwKKwkJCSYgfihzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpIC0gMSkpCisKK3N0cnVjdCBiZmFfc2dwZ193cWVfcyB7CisJc3RydWN0IGxpc3RfaGVhZCBxZTsJLyogIHF1ZXVlIHNnIHBhZ2UgZWxlbWVudAkqLworCWludAluc2dwZzsJCS8qICBwYWdlcyB0byBiZSBhbGxvY2F0ZWQJKi8KKwlpbnQJbnNncGdfdG90YWw7CS8qICB0b3RhbCBwYWdlcyByZXF1aXJlZAkqLworCXZvaWQJKCpjYmZuKSAodm9pZCAqY2JhcmcpOworCQkJCS8qICBjYWxsYmFjayBmdW5jdGlvbgkJKi8KKwl2b2lkCSpjYmFyZzsJCS8qICBjYWxsYmFjayBhcmcJCSovCisJc3RydWN0IGxpc3RfaGVhZCBzZ3BnX3E7CS8qICBxdWV1ZSBvZiBhbGxvY2VkIHNncGdzCSovCit9OworCitzdHJ1Y3QgYmZhX3NncGdfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CS8qICBxdWV1ZSBzZyBwYWdlIGVsZW1lbnQJKi8KKwlzdHJ1Y3QgYmZpX3NncGdfcyAqc2dwZzsgLyogIHZhIG9mIFNHIHBhZ2UJCSovCisJdW5pb24gYmZpX2FkZHJfdSBzZ3BnX3BhOy8qICBwYSBvZiBTRyBwYWdlCQkqLworfTsKKworLyoqCisgKiBHaXZlbiBudW1iZXIgb2YgU0cgZWxlbWVudHMsIEJGQV9TR1BHX05QQUdFKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgKiBTRyBwYWdlcyByZXF1aXJlZC4KKyAqLworI2RlZmluZSBCRkFfU0dQR19OUEFHRShfbnNnZXMpICAoKChfbnNnZXMpIC8gQkZJX1NHUEdfREFUQV9TR0VTKSArIDEpCisKK3N0cnVjdCBiZmFfc2dwZ19tb2RfcyB7CisJc3RydWN0IGJmYV9zICpiZmE7CisJaW50CQludW1fc2dwZ3M7CS8qICBudW1iZXIgb2YgU0cgcGFnZXMJCSovCisJaW50CQlmcmVlX3NncGdzOwkvKiAgbnVtYmVyIG9mIGZyZWUgU0cgcGFnZXMJKi8KKwlzdHJ1Y3QgYmZhX3NncGdfcyAqaHNncGdfYXJyOwkvKiAgQkZBIFNHIHBhZ2UgYXJyYXkJKi8KKwlzdHJ1Y3QgYmZpX3NncGdfcyAqc2dwZ19hcnI7CS8qICBhY3R1YWwgU0cgcGFnZSBhcnJheQkqLworCXU2NAlzZ3BnX2Fycl9wYTsJLyogIFNHIHBhZ2UgYXJyYXkgRE1BIGFkZHIJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNncGdfcTsJLyogIHF1ZXVlIG9mIGZyZWUgU0cgcGFnZXMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNncGdfd2FpdF9xOyAvKiAgd2FpdCBxdWV1ZSBmb3IgU0cgcGFnZXMJKi8KK307CisjZGVmaW5lIEJGQV9TR1BHX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnNncGdfbW9kKQorCitiZmFfc3RhdHVzX3QJYmZhX3NncGdfbWFsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpzZ3BnX3EsCisJCQkJCQkJCWludCBuc2dwZ3MpOwordm9pZAkJYmZhX3NncGdfbWZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwKKwkJCQkJCQkJaW50IG5zZ3Bncyk7Cit2b2lkCQliZmFfc2dwZ193aW5pdChzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSwKKwkJCQkgICB2b2lkICgqY2JmbikgKHZvaWQgKmNiYXJnKSwgdm9pZCAqY2JhcmcpOwordm9pZAkJYmZhX3NncGdfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUsCisJCQkJCQkJCWludCBuc2dwZ3MpOwordm9pZAkJYmZhX3NncGdfd2NhbmNlbChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUpOworCisjZW5kaWYgLyogX19CRkFfU0dQR19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc20uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMGY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NtLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFzbS5jIEJGQSBTdGF0ZSBtYWNoaW5lIHV0aWxpdHkgZnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorCisvKioKKyAqICBjc19zbV9hcGkKKyAqLworCitpbnQKK2JmYV9zbV90b19zdGF0ZShzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgKnNtdCwgYmZhX3NtX3Qgc20pCit7CisJaW50ICAgICAgICAgICAgIGkgPSAwOworCisJd2hpbGUgKHNtdFtpXS5zbSAmJiBzbXRbaV0uc20gIT0gc20pCisJCWkrKzsKKwlyZXR1cm4gc210W2ldLnN0YXRlOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RpbWVyLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNzY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90aW1lci5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYV90aW1lci5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorCit2b2lkCitiZmFfdGltZXJfaW5pdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpCit7CisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+dGltZXJfcSk7Cit9CisKK3ZvaWQKK2JmYV90aW1lcl9iZWF0KHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWggPSAmbW9kLT50aW1lcl9xOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlX25leHQ7CisJc3RydWN0IGJmYV90aW1lcl9zICplbGVtOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB0aW1lZG91dF9xOworCisJSU5JVF9MSVNUX0hFQUQoJnRpbWVkb3V0X3EpOworCisJcWUgPSBiZmFfcV9uZXh0KHFoKTsKKworCXdoaWxlIChxZSAhPSBxaCkgeworCQlxZV9uZXh0ID0gYmZhX3FfbmV4dChxZSk7CisKKwkJZWxlbSA9IChzdHJ1Y3QgYmZhX3RpbWVyX3MgKikgcWU7CisJCWlmIChlbGVtLT50aW1lb3V0IDw9IEJGQV9USU1FUl9GUkVRKSB7CisJCQllbGVtLT50aW1lb3V0ID0gMDsKKwkJCWxpc3RfZGVsKCZlbGVtLT5xZSk7CisJCQlsaXN0X2FkZF90YWlsKCZlbGVtLT5xZSwgJnRpbWVkb3V0X3EpOworCQl9IGVsc2UgeworCQkJZWxlbS0+dGltZW91dCAtPSBCRkFfVElNRVJfRlJFUTsKKwkJfQorCisJCXFlID0gcWVfbmV4dDsJLyogZ28gdG8gbmV4dCBlbGVtICovCisJfQorCisJLyoKKwkgKiBQb3AgYWxsIHRoZSB0aW1lb3V0IGVudHJpZXMKKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnRpbWVkb3V0X3EpKSB7CisJCWJmYV9xX2RlcSgmdGltZWRvdXRfcSwgJmVsZW0pOworCQllbGVtLT50aW1lcmNiKGVsZW0tPmFyZyk7CisJfQorfQorCisvKioKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBsb2NrIHByb3RlY3Rpb24KKyAqLwordm9pZAorYmZhX3RpbWVyX2JlZ2luKHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCwgc3RydWN0IGJmYV90aW1lcl9zICp0aW1lciwKKwkJICAgIHZvaWQgKCp0aW1lcmNiKSAodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKK3sKKworCWJmYV9hc3NlcnQodGltZXJjYiAhPSBOVUxMKTsKKwliZmFfYXNzZXJ0KCFiZmFfcV9pc19vbl9xKCZtb2QtPnRpbWVyX3EsIHRpbWVyKSk7CisKKwl0aW1lci0+dGltZW91dCA9IHRpbWVvdXQ7CisJdGltZXItPnRpbWVyY2IgPSB0aW1lcmNiOworCXRpbWVyLT5hcmcgPSBhcmc7CisKKwlsaXN0X2FkZF90YWlsKCZ0aW1lci0+cWUsICZtb2QtPnRpbWVyX3EpOworfQorCisvKioKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBsb2NrIHByb3RlY3Rpb24KKyAqLwordm9pZAorYmZhX3RpbWVyX3N0b3Aoc3RydWN0IGJmYV90aW1lcl9zICp0aW1lcikKK3sKKwliZmFfYXNzZXJ0KCFsaXN0X2VtcHR5KCZ0aW1lci0+cWUpKTsKKworCWxpc3RfZGVsKCZ0aW1lci0+cWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHJjbW9kX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RyY21vZF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NjJkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RyY21vZF9wcml2LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBoYWxfdHJjbW9kLmggQkZBIHRyYWNlIG1vZHVsZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX1RSQ01PRF9QUklWX0hfXworI2RlZmluZSBfX0JGQV9UUkNNT0RfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKworLyoKKyAqICEhISBPbmx5IGFwcGVuZCB0byB0aGUgZW51bXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFueSB2ZXJzaW9uaW5nCisgKiAhISEgbmVlZGVkIGJldHdlZW4gdHJhY2UgdXRpbGl0eSBhbmQgZHJpdmVyIHZlcnNpb24KKyAqLworZW51bSB7CisJQkZBX1RSQ19IQUxfSU9DCQk9IDEsCisJQkZBX1RSQ19IQUxfSU5UUgk9IDIsCisJQkZBX1RSQ19IQUxfRkNYUAk9IDMsCisJQkZBX1RSQ19IQUxfVUYJCT0gNCwKKwlCRkFfVFJDX0hBTF9ESUFHCT0gNSwKKwlCRkFfVFJDX0hBTF9SUE9SVAk9IDYsCisJQkZBX1RSQ19IQUxfRkNQSU0JPSA3LAorCUJGQV9UUkNfSEFMX0lPSU0JPSA4LAorCUJGQV9UUkNfSEFMX1RTS0lNCT0gOSwKKwlCRkFfVFJDX0hBTF9JVE5JTQk9IDEwLAorCUJGQV9UUkNfSEFMX1BQT1JUCT0gMTEsCisJQkZBX1RSQ19IQUxfU0dQRwk9IDEyLAorCUJGQV9UUkNfSEFMX0ZMQVNICT0gMTMsCisJQkZBX1RSQ19IQUxfREVCVUcJPSAxNCwKKwlCRkFfVFJDX0hBTF9XV04JCT0gMTUsCisJQkZBX1RSQ19IQUxfRkxBU0hfUkFXCT0gMTYsCisJQkZBX1RSQ19IQUxfU0JPT1QJPSAxNywKKwlCRkFfVFJDX0hBTF9TQk9PVF9JTwk9IDE4LAorCUJGQV9UUkNfSEFMX1NCT09UX0lOVFIJPSAxOSwKKwlCRkFfVFJDX0hBTF9TQlRFU1QJPSAyMCwKKwlCRkFfVFJDX0hBTF9JUEZDCT0gMjEsCisJQkZBX1RSQ19IQUxfSU9DRkMJPSAyMiwKKwlCRkFfVFJDX0hBTF9GQ1BUTQk9IDIzLAorCUJGQV9UUkNfSEFMX0lPVE0JPSAyNCwKKwlCRkFfVFJDX0hBTF9UU0tUTQk9IDI1LAorCUJGQV9UUkNfSEFMX1RJTgkJPSAyNiwKKwlCRkFfVFJDX0hBTF9MUFMJCT0gMjcsCisJQkZBX1RSQ19IQUxfRkNESUFHCT0gMjgsCisJQkZBX1RSQ19IQUxfUEJJTkQJPSAyOSwKKwlCRkFfVFJDX0hBTF9JT0NGQ19DVAk9IDMwLAorCUJGQV9UUkNfSEFMX0lPQ0ZDX0NCCT0gMzEsCisJQkZBX1RSQ19IQUxfSU9DRkNfUQk9IDMyLAorfTsKKworI2VuZGlmIC8qIF9fQkZBX1RSQ01PRF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHNraW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Rza2ltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwZDQwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Rza2ltLmMKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9jYl9pb2ltX21hY3Jvcy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBUU0tJTSk7CisKKy8qKgorICogdGFzayBtYW5hZ2VtZW50IGNvbXBsZXRpb24gaGFuZGxpbmcKKyAqLworI2RlZmluZSBiZmFfdHNraW1fcWNvbXAoX190c2tpbSwgX19jYmZuKSBkbyB7CQkJICAgICBcCisJYmZhX2NiX3F1ZXVlKChfX3Rza2ltKS0+YmZhLCAmKF9fdHNraW0pLT5oY2JfcWUsIF9fY2JmbiwgKF9fdHNraW0pKTsgXAorCWJmYV90c2tpbV9ub3RpZnlfY29tcChfX3Rza2ltKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV90c2tpbV9ub3RpZnlfY29tcChfX3Rza2ltKSBkbyB7CQkJCSAgICAgXAorCWlmICgoX190c2tpbSktPm5vdGlmeSkJCQkJCSAgICAgCSAgICAgXAorCQliZmFfaXRuaW1fdHNrZG9uZSgoX190c2tpbSktPml0bmltKTsgICAgICBcCit9IHdoaWxlICgwKQorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfdHNraW1fbWF0Y2hfc2NvcGUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJICAgICAgIGx1bl90IGx1bik7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2dhdGhlcl9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2NsZWFucF9jb21wKHZvaWQgKnRza2ltX2NiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fY2xlYW51cF9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfdHNraW1fc2VuZChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV90c2tpbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKKworLyoqCisgKiAgYmZhX3Rza2ltX3NtCisgKi8KKworZW51bSBiZmFfdHNraW1fZXZlbnQgeworCUJGQV9UU0tJTV9TTV9TVEFSVCAgICAgICAgPSAxLCAgLyogIFRNIGNvbW1hbmQgc3RhcnQgICAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9ET05FICAgICAgICAgPSAyLCAgLyogIFRNIGNvbXBsZXRpb24gICAgICAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9RUkVTVU1FICAgICAgPSAzLCAgLyogIHJlc3VtZSBhZnRlciBxZnVsbCAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9IV0ZBSUwgICAgICAgPSA1LCAgLyogIElPQyBoL3cgZmFpbHVyZSBldmVudCAgICAgICAqLworCUJGQV9UU0tJTV9TTV9IQ0IgICAgICAgICAgPSA2LCAgLyogIEJGQSBjYWxsYmFjayBjb21wbGV0aW9uICAgICAqLworCUJGQV9UU0tJTV9TTV9JT1NfRE9ORSAgICAgPSA3LCAgLyogIElPIGFuZCBzdWIgVE0gY29tcGxldGlvbnMgICAqLworCUJGQV9UU0tJTV9TTV9DTEVBTlVQICAgICAgPSA4LCAgLyogIFRNIGNsZWFudXAgb24gSVROIG9mZmxpbmUgICAqLworCUJGQV9UU0tJTV9TTV9DTEVBTlVQX0RPTkUgPSA5LCAgLyogIFRNIGFib3J0IGNvbXBsZXRpb24gICAgICAgICAqLworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV91bmluaXQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9hY3RpdmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJCSBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2lvY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCQkgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCSAgICAgICBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkgICAgICAgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9oY2Ioc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkgICAgIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGJlZ2lubmluZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV91bmluaXQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fU1RBUlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9hY3RpdmUpOworCQliZmFfdHNraW1fZ2F0aGVyX2lvcyh0c2tpbSk7CisKKwkJLyoqCisJCSAqIElmIGRldmljZSBpcyBvZmZsaW5lLCBkbyBub3Qgc2VuZCBUTSBvbiB3aXJlLiBKdXN0IGNsZWFudXAKKwkJICogYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMgYW5kIGNvbXBsZXRlIFRNIHJlcXVlc3QuCisJCSAqLworCQlpZiAoIWJmYV9pdG5pbV9pc19vbmxpbmUodHNraW0tPml0bmltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCQl0c2tpbS0+dHNrX3N0YXR1cyA9IEJGSV9UU0tJTV9TVFNfT0s7CisJCQliZmFfdHNraW1fY2xlYW51cF9pb3ModHNraW0pOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCFiZmFfdHNraW1fc2VuZCh0c2tpbSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KHRza2ltLT5iZmEsIHRza2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkJICAmdHNraW0tPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBicmllZgorICoJVE0gY29tbWFuZCBpcyBhY3RpdmUsIGF3YWl0aW5nIGNvbXBsZXRpb24gZnJvbSBmaXJtd2FyZSB0bworICoJY2xlYW51cCBJTyByZXF1ZXN0cyBpbiBUTSBzY29wZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV9hY3RpdmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXApOworCQlpZiAoIWJmYV90c2tpbV9zZW5kX2Fib3J0KHRza2ltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwpOworCQkJYmZhX3JlcXFfd2FpdCh0c2tpbS0+YmZhLCB0c2tpbS0+aXRuaW0tPnJlcXEsCisJCQkJJnRza2ltLT5yZXFxX3dhaXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqCUFuIGFjdGl2ZSBUTSBpcyBiZWluZyBjbGVhbmVkIHVwIHNpbmNlIElUTiBpcyBvZmZsaW5lLiBBd2FpdGluZyBjbGVhbnVwCisgKgljb21wbGV0aW9uIGV2ZW50IGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9ET05FOgorCQkvKioKKwkJICogSWdub3JlIGFuZCB3YWl0IGZvciBBQk9SVCBjb21wbGV0aW9uIGZyb20gZmlybXdhcmUuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0NMRUFOVVBfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2lvY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9JT1NfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2hjYik7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZG9uZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUDoKKwkJLyoqCisJCSAqIElnbm9yZSwgVE0gY29tbWFuZCBjb21wbGV0ZWQgb24gd2lyZS4KKwkJICogTm90aWZ5IFRNIGNvbm1wbGV0aW9uIG9uIElPIGNsZWFudXAgY29tcGxldGlvbi4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICAgICAgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaXMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2FjdGl2ZSk7CisJCWJmYV90c2tpbV9zZW5kKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQOgorCQkvKioKKwkJICogTm8gbmVlZCB0byBzZW5kIFRNIG9uIHdpcmUgc2luY2UgSVROIGlzIG9mZmxpbmUuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faW9jbGVhbnVwKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGlzIGFjdGl2ZSwgYXdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUQorICoJdG8gc2VuZCBjbGVhbiB1cCByZXF1ZXN0LgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fRE9ORToKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCS8qKgorCQkgKgorCQkgKiBGYWxsIHRocm91Z2ggISEhCisJCSAqLworCisJY2FzZSBCRkFfVFNLSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXApOworCQliZmFfdHNraW1fc2VuZF9hYm9ydCh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgICAgIEJGQSBjYWxsYmFjayBpcyBwZW5kaW5nCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21faGNiKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX0hDQjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX3VuaW5pdCk7CisJCWJmYV90c2tpbV9mcmVlKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQOgorCQliZmFfdHNraW1fbm90aWZ5X2NvbXAodHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9zdWNjZXNzKTsKKwliZmFfY2JfdHNraW1fZG9uZSh0c2tpbS0+YmZhLT5iZmFkLCB0c2tpbS0+ZHRzaywgdHNraW0tPnRza19zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfdHNraW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0gPSBjYmFyZzsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1fZmFpbHVyZXMpOworCWJmYV9jYl90c2tpbV9kb25lKHRza2ltLT5iZmEtPmJmYWQsIHRza2ltLT5kdHNrLAorCQkJICAgQkZJX1RTS0lNX1NUU19GQUlMRUQpOworfQorCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX3Rza2ltX21hdGNoX3Njb3BlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGx1bl90IGx1bikKK3sKKwlzd2l0Y2ggKHRza2ltLT50bV9jbW5kKSB7CisJY2FzZSBGQ1BfVE1fVEFSR0VUX1JFU0VUOgorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwljYXNlIEZDUF9UTV9BQk9SVF9UQVNLX1NFVDoKKwljYXNlIEZDUF9UTV9DTEVBUl9UQVNLX1NFVDoKKwljYXNlIEZDUF9UTV9MVU5fUkVTRVQ6CisJY2FzZSBGQ1BfVE1fQ0xFQVJfQUNBOgorCQlyZXR1cm4gKHRza2ltLT5sdW4gPT0gbHVuKTsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCisJcmV0dXJuIEJGQV9GQUxTRTsKK30KKworLyoqCisgKiAgICAgIEdhdGhlciBhZmZlY3RlZCBJTyByZXF1ZXN0cyBhbmQgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2dhdGhlcl9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gdHNraW0tPml0bmltOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCUlOSVRfTElTVF9IRUFEKCZ0c2tpbS0+aW9fcSk7CisKKwkvKioKKwkgKiBHYXRoZXIgYW55IGFjdGl2ZSBJTyByZXF1ZXN0cyBmaXJzdC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWlmIChiZmFfdHNraW1fbWF0Y2hfc2NvcGUKKwkJICAgICh0c2tpbSwgYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pKSkgeworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmdHNraW0tPmlvX3EpOworCQl9CisJfQorCisJLyoqCisJICogRmFpbGJhY2sgYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMgaW1tZWRpYXRlbHkuCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+cGVuZGluZ19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWlmIChiZmFfdHNraW1fbWF0Y2hfc2NvcGUKKwkJICAgICh0c2tpbSwgYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pKSkgeworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKKwkJCWJmYV9pb2ltX3Rvdihpb2ltKTsKKwkJfQorCX0KK30KKworLyoqCisgKiAJCUlPIGNsZWFudXAgY29tcGxldGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2NsZWFucF9jb21wKHZvaWQgKnRza2ltX2NiYXJnKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0gPSB0c2tpbV9jYmFyZzsKKworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2lvX2NvbXBzKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0lPU19ET05FKTsKK30KKworLyoqCisgKiAgICAgIEdhdGhlciBhZmZlY3RlZCBJTyByZXF1ZXN0cyBhbmQgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2NsZWFudXBfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJYmZhX3djX2luaXQoJnRza2ltLT53YywgYmZhX3Rza2ltX2NsZWFucF9jb21wLCB0c2tpbSk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnRza2ltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV93Y191cCgmdHNraW0tPndjKTsKKwkJYmZhX2lvaW1fY2xlYW51cF90bShpb2ltLCB0c2tpbSk7CisJfQorCisJYmZhX3djX3dhaXQoJnRza2ltLT53Yyk7Cit9CisKKy8qKgorICogICAgICBTZW5kIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Rza2ltX3NlbmQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gdHNraW0tPml0bmltOworCXN0cnVjdCBiZmlfdHNraW1fcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfVFNLSU0sIEJGSV9UU0tJTV9IMklfVE1fUkVRLAorCQkJYmZhX2xwdWlkKHRza2ltLT5iZmEpKTsKKworCW0tPnRza190YWcgPSBiZmFfb3NfaHRvbnModHNraW0tPnRza190YWcpOworCW0tPml0bl9maGRsID0gdHNraW0tPml0bmltLT5ycG9ydC0+ZndfaGFuZGxlOworCW0tPnRfc2VjcyA9IHRza2ltLT50c2VjczsKKwltLT5sdW4gPSB0c2tpbS0+bHVuOworCW0tPnRtX2ZsYWdzID0gdHNraW0tPnRtX2NtbmQ7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiAgICAgIFNlbmQgYWJvcnQgcmVxdWVzdCB0byBjbGVhbnVwIGFuIGFjdGl2ZSBUTSB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV90c2tpbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICAgICAgICAgICAgICppdG5pbSA9IHRza2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZpX3Rza2ltX2Fib3J0cmVxX3MgICAgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfVFNLSU0sIEJGSV9UU0tJTV9IMklfQUJPUlRfUkVRLAorCQkJYmZhX2xwdWlkKHRza2ltLT5iZmEpKTsKKworCW0tPnRza190YWcgID0gYmZhX29zX2h0b25zKHRza2ltLT50c2tfdGFnKTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZSh0c2tpbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqICAgICAgQ2FsbCB0byByZXN1bWUgdGFzayBtYW5hZ2VtZW50IGNtbmQgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSA9IGNiYXJnOworCisJYmZhX2ZjcGltX3N0YXRzKHRza2ltLT5mY3BpbSwgcXJlc3VtZXMpOworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX3FyZXN1bWVzKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX1FSRVNVTUUpOworfQorCisvKioKKyAqIENsZWFudXAgSU9zIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2sgbWFuZ2VtZW50IGNvbW1hbmQgb24gSU9DIGZhaWx1cmVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZ0c2tpbS0+aW9fcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfaW9pbV9pb2NkaXNhYmxlKGlvaW0pOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9mcmllbmQKKyAqLworCisvKioKKyAqIE5vdGlmaWNhdGlvbiBvbiBjb21wbGV0aW9ucyBmcm9tIHJlbGF0ZWQgaW9pbS4KKyAqLwordm9pZAorYmZhX3Rza2ltX2lvZG9uZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCWJmYV93Y19kb3duKCZ0c2tpbS0+d2MpOworfQorCisvKioKKyAqIEhhbmRsZSBJT0MgaC93IGZhaWx1cmUgbm90aWZpY2F0aW9uIGZyb20gaXRuaW0uCisgKi8KK3ZvaWQKK2JmYV90c2tpbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJdHNraW0tPm5vdGlmeSA9IEJGQV9GQUxTRTsKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9pb2Nkb3ducyk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9IV0ZBSUwpOworfQorCisvKioKKyAqIENsZWFudXAgVE0gY29tbWFuZCBhbmQgYXNzb2NpYXRlZCBJT3MgYXMgcGFydCBvZiBJVE5JTSBvZmZsaW5lLgorICovCit2b2lkCitiZmFfdHNraW1fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXRza2ltLT5ub3RpZnkgPSBCRkFfVFJVRTsKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9jbGVhbnVwcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9DTEVBTlVQKTsKK30KKworLyoqCisgKiAgICAgIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KKyAqLwordm9pZAorYmZhX3Rza2ltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJdTE2ICAgICAgICBpOworCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT50c2tpbV9mcmVlX3EpOworCisJdHNraW0gPSAoc3RydWN0IGJmYV90c2tpbV9zICopIGJmYV9tZW1pbmZvX2t2YShtaW5mbyk7CisJZmNwaW0tPnRza2ltX2FyciA9IHRza2ltOworCisJZm9yIChpID0gMDsgaSA8IGZjcGltLT5udW1fdHNraW1fcmVxczsgaSsrLCB0c2tpbSsrKSB7CisJCS8qCisJCSAqIGluaXRpYWxpemUgVFNLSU0KKwkJICovCisJCWJmYV9vc19tZW1zZXQodHNraW0sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Rza2ltX3MpKTsKKwkJdHNraW0tPnRza190YWcgPSBpOworCQl0c2tpbS0+YmZhICAgICA9IGZjcGltLT5iZmE7CisJCXRza2ltLT5mY3BpbSAgID0gZmNwaW07CisJCXRza2ltLT5ub3RpZnkgID0gQkZBX0ZBTFNFOworCQliZmFfcmVxcV93aW5pdCgmdHNraW0tPnJlcXFfd2FpdCwgYmZhX3Rza2ltX3FyZXN1bWUsCisJCQkJICAgdHNraW0pOworCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fdW5pbml0KTsKKworCQlsaXN0X2FkZF90YWlsKCZ0c2tpbS0+cWUsICZmY3BpbS0+dHNraW1fZnJlZV9xKTsKKwl9CisKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIHRza2ltOworfQorCit2b2lkCitiZmFfdHNraW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKQoreworICAgIC8qKgorICAgICAqIEB0b2RvCisgICAgICovCit9CisKK3ZvaWQKK2JmYV90c2tpbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmaV90c2tpbV9yc3BfcyAqcnNwID0gKHN0cnVjdCBiZmlfdHNraW1fcnNwX3MgKikgbTsKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltOworCXUxNiAgICAgICAgdHNrX3RhZyA9IGJmYV9vc19udG9ocyhyc3AtPnRza190YWcpOworCisJdHNraW0gPSBCRkFfVFNLSU1fRlJPTV9UQUcoZmNwaW0sIHRza190YWcpOworCWJmYV9hc3NlcnQodHNraW0tPnRza190YWcgPT0gdHNrX3RhZyk7CisKKwl0c2tpbS0+dHNrX3N0YXR1cyA9IHJzcC0+dHNrX3N0YXR1czsKKworCS8qKgorCSAqIEZpcm13YXJlIHNlbmRzIEJGSV9UU0tJTV9TVFNfQUJPUlRFRCBzdGF0dXMgZm9yIGFib3J0CisJICogcmVxdWVzdHMuIEFsbCBvdGhlciBzdGF0dXNlcyBhcmUgZm9yIG5vcm1hbCBjb21wbGV0aW9ucy4KKwkgKi8KKwlpZiAocnNwLT50c2tfc3RhdHVzID09IEJGSV9UU0tJTV9TVFNfQUJPUlRFRCkgeworCQliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9jbGVhbnVwX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9DTEVBTlVQX0RPTkUpOworCX0gZWxzZSB7CisJCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2Z3X3JzcHMpOworCQliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0RPTkUpOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9hcGkKKyAqLworCisKK3N0cnVjdCBiZmFfdHNraW1fcyAqCitiZmFfdHNraW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2spCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKworCWJmYV9xX2RlcSgmZmNwaW0tPnRza2ltX2ZyZWVfcSwgJnRza2ltKTsKKworCWlmICghdHNraW0pCisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgbm9fdHNraW1zKTsKKwllbHNlCisJCXRza2ltLT5kdHNrID0gZHRzazsKKworCXJldHVybiB0c2tpbTsKK30KKwordm9pZAorYmZhX3Rza2ltX2ZyZWUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3FfZnVuYygmdHNraW0tPml0bmltLT50c2tfcSwgJnRza2ltLT5xZSkpOworCWxpc3RfZGVsKCZ0c2tpbS0+cWUpOworCWxpc3RfYWRkX3RhaWwoJnRza2ltLT5xZSwgJnRza2ltLT5mY3BpbS0+dHNraW1fZnJlZV9xKTsKK30KKworLyoqCisgKiAgICAgIFN0YXJ0IGEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQuCisgKgorICogQHBhcmFtW2luXSAgICAgICB0c2tpbSAgICAgICBCRkEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gICAgICAgaXRuaW0gICAgICAgaS10IG5leHVzIGZvciB0aGUgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQKKyAqIEBwYXJhbVtpbl0gICAgICAgbHVuICAgICAgICAgbHVuLCBpZiBhcHBsaWNhYmxlCisgKiBAcGFyYW1baW5dICAgICAgIHRtX2NtbmQgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGNvZGUuCisgKiBAcGFyYW1baW5dICAgICAgIHRfc2VjcyAgICAgIFRpbWVvdXQgaW4gc2Vjb25kcworICoKKyAqIEByZXR1cm4gTm9uZS4KKyAqLwordm9pZAorYmZhX3Rza2ltX3N0YXJ0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGx1bl90IGx1biwKKwkJICAgIGVudW0gZmNwX3RtX2NtbmQgdG1fY21uZCwgdTggdHNlY3MpCit7CisJdHNraW0tPml0bmltICAgPSBpdG5pbTsKKwl0c2tpbS0+bHVuICAgICA9IGx1bjsKKwl0c2tpbS0+dG1fY21uZCA9IHRtX2NtbmQ7CisJdHNraW0tPnRzZWNzICAgPSB0c2VjczsKKwl0c2tpbS0+bm90aWZ5ICA9IEJGQV9GQUxTRTsKKwliZmFfc3RhdHMoaXRuaW0sIHRtX2NtbmRzKTsKKworCWxpc3RfYWRkX3RhaWwoJnRza2ltLT5xZSwgJml0bmltLT50c2tfcSk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9TVEFSVCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWYuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1ZjlkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX3VmLmMgQkZBIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaW1wbGVtZW50YXRpb24KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfdWYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgVUYpOworQkZBX01PRFVMRSh1Zik7CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEludGVybmFsIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3N0YXRpYyB2b2lkCitfX2JmYV9jYl91Zl9yZWN2KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfdWZfcyAgICp1ZiA9IGNiYXJnOworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QodWYtPmJmYSk7CisKKwlpZiAoY29tcGxldGUpCisJCXVmbS0+dWZyZWN2KHVmbS0+Y2JhcmcsIHVmKTsKK30KKworc3RhdGljIHZvaWQKK2NsYWltX3VmX3BicyhzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwl1MzIgICAgICAgIHVmX3BiX3RvdF9zejsKKworCXVmbS0+dWZfcGJzX2t2YSA9IChzdHJ1Y3QgYmZhX3VmX2J1Zl9zICopIGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKTsKKwl1Zm0tPnVmX3Bic19wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKTsKKwl1Zl9wYl90b3Rfc3ogPSBCRkFfUk9VTkRVUCgoc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpICogdWZtLT5udW1fdWZzKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKSArPSB1Zl9wYl90b3Rfc3o7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWkpICs9IHVmX3BiX3RvdF9zejsKKworCWJmYV9vc19tZW1zZXQoKHZvaWQgKil1Zm0tPnVmX3Bic19rdmEsIDAsIHVmX3BiX3RvdF9zeik7Cit9CisKK3N0YXRpYyB2b2lkCitjbGFpbV91Zl9wb3N0X21zZ3Moc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICp1Zl9icF9tc2c7CisJc3RydWN0IGJmaV9zZ2VfcyAgICAgICpzZ2U7CisJdW5pb24gYmZpX2FkZHJfdSAgICAgIHNnYV96ZXJvID0geyB7MH0gfTsKKwl1MTYgICAgICAgIGk7CisJdTE2ICAgICAgICBidWZfbGVuOworCisJdWZtLT51Zl9idWZfcG9zdHMgPSAoc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICopIGJmYV9tZW1pbmZvX2t2YShtaSk7CisJdWZfYnBfbXNnID0gdWZtLT51Zl9idWZfcG9zdHM7CisKKwlmb3IgKGkgPSAwLCB1Zl9icF9tc2cgPSB1Zm0tPnVmX2J1Zl9wb3N0czsgaSA8IHVmbS0+bnVtX3VmczsKKwkgICAgIGkrKywgdWZfYnBfbXNnKyspIHsKKwkJYmZhX29zX21lbXNldCh1Zl9icF9tc2csIDAsIHNpemVvZihzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MpKTsKKworCQl1Zl9icF9tc2ctPmJ1Zl90YWcgPSBpOworCQlidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpOworCQl1Zl9icF9tc2ctPmJ1Zl9sZW4gPSBiZmFfb3NfaHRvbnMoYnVmX2xlbik7CisJCWJmaV9oMmlfc2V0KHVmX2JwX21zZy0+bWgsIEJGSV9NQ19VRiwgQkZJX1VGX0gySV9CVUZfUE9TVCwKKwkJCSAgICBiZmFfbHB1aWQodWZtLT5iZmEpKTsKKworCQlzZ2UgPSB1Zl9icF9tc2ctPnNnZTsKKwkJc2dlWzBdLnNnX2xlbiA9IGJ1Zl9sZW47CisJCXNnZVswXS5mbGFncyA9IEJGSV9TR0VfREFUQV9MQVNUOworCQliZmFfZG1hX2FkZHJfc2V0KHNnZVswXS5zZ2EsIHVmbV9wYnNfcGEodWZtLCBpKSk7CisJCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKworCQlzZ2VbMV0uc2dfbGVuID0gYnVmX2xlbjsKKwkJc2dlWzFdLmZsYWdzID0gQkZJX1NHRV9QR0RMRU47CisJCXNnZVsxXS5zZ2EgPSBzZ2FfemVybzsKKwkJYmZhX3NnZV90b19iZSgmc2dlWzFdKTsKKwl9CisKKwkvKioKKwkgKiBhZHZhbmNlIHBvaW50ZXIgYmV5b25kIGNvbnN1bWVkIG1lbW9yeQorCSAqLworCWJmYV9tZW1pbmZvX2t2YShtaSkgPSAodTggKikgdWZfYnBfbXNnOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1fdWZzKHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pKQoreworCXUxNiAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWY7CisKKwkvKgorCSAqIENsYWltIGJsb2NrIG9mIG1lbW9yeSBmb3IgVUYgbGlzdAorCSAqLworCXVmbS0+dWZfbGlzdCA9IChzdHJ1Y3QgYmZhX3VmX3MgKikgYmZhX21lbWluZm9fa3ZhKG1pKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBVRnMgYW5kIHF1ZXVlIGl0IGluIFVGIGZyZWUgcXVldWUKKwkgKi8KKwlmb3IgKGkgPSAwLCB1ZiA9IHVmbS0+dWZfbGlzdDsgaSA8IHVmbS0+bnVtX3VmczsgaSsrLCB1ZisrKSB7CisJCWJmYV9vc19tZW1zZXQodWYsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3VmX3MpKTsKKwkJdWYtPmJmYSA9IHVmbS0+YmZhOworCQl1Zi0+dWZfdGFnID0gaTsKKwkJdWYtPnBiX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKTsKKwkJdWYtPmJ1Zl9rdmEgPSAodm9pZCAqKSZ1Zm0tPnVmX3Bic19rdmFbaV07CisJCXVmLT5idWZfcGEgPSB1Zm1fcGJzX3BhKHVmbSwgaSk7CisJCWxpc3RfYWRkX3RhaWwoJnVmLT5xZSwgJnVmbS0+dWZfZnJlZV9xKTsKKwl9CisKKwkvKioKKwkgKiBhZHZhbmNlIG1lbW9yeSBwb2ludGVyCisJICovCisJYmZhX21lbWluZm9fa3ZhKG1pKSA9ICh1OCAqKSB1ZjsKK30KKworc3RhdGljIHZvaWQKK3VmX21lbV9jbGFpbShzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwljbGFpbV91Zl9wYnModWZtLCBtaSk7CisJY2xhaW1fdWZzKHVmbSwgbWkpOworCWNsYWltX3VmX3Bvc3RfbXNncyh1Zm0sIG1pKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpuZG1fbGVuLCB1MzIgKmRtX2xlbikKK3sKKwl1MzIgICAgICAgIG51bV91ZnMgPSBjZmctPmZ3Y2ZnLm51bV91Zl9idWZzOworCisJLyoKKwkgKiBkbWEtYWJsZSBtZW1vcnkgZm9yIFVGIHBvc3RlZCBidWZzCisJICovCisJKmRtX2xlbiArPSBCRkFfUk9VTkRVUCgoc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpICogbnVtX3VmcyksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisKKwkvKgorCSAqIGtlcm5lbCBWaXJ0dWFsIG1lbW9yeSBmb3IgVUZzIGFuZCBVRiBidWYgcG9zdCBtc2cgY29waWVzCisJICovCisJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmFfdWZfcykgKiBudW1fdWZzOworCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MpICogbnVtX3VmczsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQodWZtLCAwLCBzaXplb2Yoc3RydWN0IGJmYV91Zl9tb2RfcykpOworCXVmbS0+YmZhID0gYmZhOworCXVmbS0+bnVtX3VmcyA9IGNmZy0+ZndjZmcubnVtX3VmX2J1ZnM7CisJSU5JVF9MSVNUX0hFQUQoJnVmbS0+dWZfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmdWZtLT51Zl9wb3N0ZWRfcSk7CisKKwl1Zl9tZW1fY2xhaW0odWZtLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3VmX3MgKgorYmZhX3VmX2dldChzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zl9tb2QpCit7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmOworCisJYmZhX3FfZGVxKCZ1Zl9tb2QtPnVmX2ZyZWVfcSwgJnVmKTsKKwlyZXR1cm4gKHVmKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9wdXQoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZfbW9kLCBzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCWxpc3RfYWRkX3RhaWwoJnVmLT5xZSwgJnVmX21vZC0+dWZfZnJlZV9xKTsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhX3VmX3Bvc3Qoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCXN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcyAqdWZfcG9zdF9tc2c7CisKKwl1Zl9wb3N0X21zZyA9IGJmYV9yZXFxX25leHQodWZtLT5iZmEsIEJGQV9SRVFRX0ZDWFApOworCWlmICghdWZfcG9zdF9tc2cpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCWJmYV9vc19tZW1jcHkodWZfcG9zdF9tc2csICZ1Zm0tPnVmX2J1Zl9wb3N0c1t1Zi0+dWZfdGFnXSwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcykpOworCWJmYV9yZXFxX3Byb2R1Y2UodWZtLT5iZmEsIEJGQV9SRVFRX0ZDWFApOworCisJYmZhX3RyYyh1Zm0tPmJmYSwgdWYtPnVmX3RhZyk7CisKKwlsaXN0X2FkZF90YWlsKCZ1Zi0+cWUsICZ1Zm0tPnVmX3Bvc3RlZF9xKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9wb3N0X2FsbChzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zl9tb2QpCit7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmOworCisJd2hpbGUgKCh1ZiA9IGJmYV91Zl9nZXQodWZfbW9kKSkgIT0gTlVMTCkgeworCQlpZiAoYmZhX3VmX3Bvc3QodWZfbW9kLCB1ZikgIT0gQkZBX1NUQVRVU19PSykKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3VmX3JlY3Yoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfdWZfZnJtX3JjdmRfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0gPSBCRkFfVUZfTU9EKGJmYSk7CisJdTE2ICAgICAgICB1Zl90YWcgPSBtLT5idWZfdGFnOworCXN0cnVjdCBiZmFfdWZfYnVmX3MgKnVmX2J1ZiA9ICZ1Zm0tPnVmX3Bic19rdmFbdWZfdGFnXTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWYgPSAmdWZtLT51Zl9saXN0W3VmX3RhZ107CisJdTggICAgICAgICpidWYgPSAmdWZfYnVmLT5kWzBdOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAqZmNoczsKKworCW0tPmZybV9sZW4gPSBiZmFfb3NfbnRvaHMobS0+ZnJtX2xlbik7CisJbS0+eGZyX2xlbiA9IGJmYV9vc19udG9ocyhtLT54ZnJfbGVuKTsKKworCWZjaHMgPSAoc3RydWN0IGZjaHNfcyAqKSB1Zl9idWY7CisKKwlsaXN0X2RlbCgmdWYtPnFlKTsJLyogZGVxdWV1ZSBmcm9tIHBvc3RlZCBxdWV1ZSAqLworCisJdWYtPmRhdGFfcHRyID0gYnVmOworCXVmLT5kYXRhX2xlbiA9IG0tPnhmcl9sZW47CisKKwliZmFfYXNzZXJ0KHVmLT5kYXRhX2xlbiA+PSBzaXplb2Yoc3RydWN0IGZjaHNfcykpOworCisJaWYgKHVmLT5kYXRhX2xlbiA9PSBzaXplb2Yoc3RydWN0IGZjaHNfcykpIHsKKwkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9VRiwgQkZBX1BMX0VJRF9SWCwKKwkJCSAgICAgICB1Zi0+ZGF0YV9sZW4sIChzdHJ1Y3QgZmNoc19zICopIGJ1Zik7CisJfSBlbHNlIHsKKwkJdTMyICAgICAgICBwbGRfdzAgPSAqKCh1MzIgKikgKGJ1ZiArIHNpemVvZihzdHJ1Y3QgZmNoc19zKSkpOworCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9VRiwKKwkJCQkgICAgICBCRkFfUExfRUlEX1JYLCB1Zi0+ZGF0YV9sZW4sCisJCQkJICAgICAgKHN0cnVjdCBmY2hzX3MgKikgYnVmLCBwbGRfdzApOworCX0KKworCWJmYV9jYl9xdWV1ZShiZmEsICZ1Zi0+aGNiX3FlLCBfX2JmYV9jYl91Zl9yZWN2LCB1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWY7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZ1Zm0tPnVmX3Bvc3RlZF9xKSB7CisJCXVmID0gKHN0cnVjdCBiZmFfdWZfcyAqKSBxZTsKKwkJbGlzdF9kZWwoJnVmLT5xZSk7CisJCWJmYV91Zl9wdXQodWZtLCB1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV91Zl9wb3N0X2FsbChCRkFfVUZfTU9EKGJmYSkpOworfQorCisKKworLyoqCisgKiAgYmZhX3VmX2FwaQorICovCisKKy8qKgorICogCQlSZWdpc3RlciBoYW5kbGVyIGZvciBhbGwgdW5zb2xpY3RlZCByZWNpZXZlIGZyYW1lcy4KKyAqCisgKiBAcGFyYW1baW5dCWJmYQkJQkZBIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCXVmcmVjdglyZWNlaXZlIGhhbmRsZXIgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0JY2JhcmcJcmVjZWl2ZSBoYW5kbGVyIGFyZworICovCit2b2lkCitiZmFfdWZfcmVjdl9yZWdpc3RlcihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3VmX3JlY3ZfdCB1ZnJlY3YsIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKworCXVmbS0+dWZyZWN2ID0gdWZyZWN2OworCXVmbS0+Y2JhcmcgPSBjYmFyZzsKK30KKworLyoqCisgKiAJCUZyZWUgYW4gdW5zb2xpY2l0ZWQgZnJhbWUgYmFjayB0byBCRkEuCisgKgorICogQHBhcmFtW2luXQkJdWYJCXVuc29saWNpdGVkIGZyYW1lIHRvIGJlIGZyZWVkCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV91Zl9mcmVlKHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJYmZhX3VmX3B1dChCRkFfVUZfTU9EKHVmLT5iZmEpLCB1Zik7CisJYmZhX3VmX3Bvc3RfYWxsKEJGQV9VRl9NT0QodWYtPmJmYSkpOworfQorCisKKworLyoqCisgKiAgdWZfcHViIEJGQSB1ZiBtb2R1bGUgcHVibGljIGZ1bmN0aW9ucworICovCisKK3ZvaWQKK2JmYV91Zl9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZykKK3sKKwliZmFfdHJjKGJmYSwgbXNnLT5taGRyLm1zZ19pZCk7CisKKwlzd2l0Y2ggKG1zZy0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9VRl9JMkhfRlJNX1JDVkQ6CisJCXVmX3JlY3YoYmZhLCAoc3RydWN0IGJmaV91Zl9mcm1fcmN2ZF9zICopIG1zZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhiZmEsIG1zZy0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zl9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zl9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiNDkwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmX3ByaXYuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1VGX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1VGX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV91Zi5oPgorCisjZGVmaW5lIEJGQV9VRl9NSU4JKDQpCisKK3N0cnVjdCBiZmFfdWZfbW9kX3MgeworCXN0cnVjdCBiZmFfcyAqYmZhOwkJLyogIGJhY2sgcG9pbnRlciB0byBCRkEgKi8KKwlzdHJ1Y3QgYmZhX3VmX3MgKnVmX2xpc3Q7CS8qICBhcnJheSBvZiBVRnMgKi8KKwl1MTYJbnVtX3VmczsJLyogIG51bSB1bnNvbGljaXRlZCByeCBmcmFtZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAl1Zl9mcmVlX3E7CS8qICBmcmVlIFVGcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgCXVmX3Bvc3RlZF9xOwkvKiAgVUZzIHBvc3RlZCB0byBJT0MgKi8KKwlzdHJ1Y3QgYmZhX3VmX2J1Zl9zICp1Zl9wYnNfa3ZhOwkvKiAgbGlzdCBVRiBidWZzIHJlcXVlc3QgcGxkICovCisJdTY0CXVmX3Bic19wYTsJLyogIHBoeSBhZGRyIGZvciBVRiBidWZzICovCisJc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICp1Zl9idWZfcG9zdHM7CisJCQkJCS8qICBwcmUtYnVpbHQgVUYgcG9zdCBtc2dzICovCisJYmZhX2NiX3VmX3JlY3ZfdCB1ZnJlY3Y7CS8qICB1ZiByZWN2IGhhbmRsZXIgZnVuY3Rpb24gKi8KKwl2b2lkCQkqY2Jhcmc7CQkvKiAgdWYgcmVjZWl2ZSBoYW5kbGVyIGFyZyAqLworfTsKKworI2RlZmluZSBCRkFfVUZfTU9EKF9fYmZhKQkoJihfX2JmYSktPm1vZHVsZXMudWZfbW9kKQorCisjZGVmaW5lIHVmbV9wYnNfcGEoX3VmbW9kLCBfdWZ0YWcpCVwKKwkoKF91Zm1vZCktPnVmX3Bic19wYSArIHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKSAqIChfdWZ0YWcpKQorCit2b2lkCWJmYV91Zl9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisKKyNlbmRpZiAvKiBfX0JGQV9VRl9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJiZTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKQEAgLTAsMCArMSwxMTgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYWQuYyBMaW51eCBkcml2ZXIgUENJIGludGVyZmFjZSBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgorI2luY2x1ZGUgImJmYWRfdG0uaCIKKyNpbmNsdWRlICJiZmFkX2lwZmMuaCIKKyNpbmNsdWRlICJiZmFkX3RyY21vZC5oIgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3ZmLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfcnBvcnQuaD4KKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl9wb3J0Lmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2IuaD4KKworQkZBX1RSQ19GSUxFKExEUlYsIEJGQUQpOworc3RhdGljIERFRklORV9NVVRFWChiZmFkX211dGV4KTsKK0xJU1RfSEVBRChiZmFkX2xpc3QpOworc3RhdGljIGludCAgICAgIGJmYWRfaW5zdDsKK2ludCBiZmFkX3N1cHBvcnRlZF9mYzRzOworCitzdGF0aWMgY2hhciAgICAgKmhvc3RfbmFtZTsKK3N0YXRpYyBjaGFyICAgICAqb3NfbmFtZTsKK3N0YXRpYyBjaGFyICAgICAqb3NfcGF0Y2g7CitzdGF0aWMgaW50ICAgICAgbnVtX3Jwb3J0czsKK3N0YXRpYyBpbnQgICAgICBudW1faW9zOworc3RhdGljIGludCAgICAgIG51bV90bXM7CitzdGF0aWMgaW50ICAgICAgbnVtX2ZjeHBzOworc3RhdGljIGludCAgICAgIG51bV91ZmJ1ZnM7CitzdGF0aWMgaW50ICAgICAgcmVxcV9zaXplOworc3RhdGljIGludCAgICAgIHJzcHFfc2l6ZTsKK3N0YXRpYyBpbnQgICAgICBudW1fc2dwZ3M7CitzdGF0aWMgaW50ICAgICAgcnBvcnRfZGVsX3RpbWVvdXQgPSBCRkFfRkNTX1JQT1JUX0RFRl9ERUxfVElNRU9VVDsKK3N0YXRpYyBpbnQgICAgICBiZmFfaW9fbWF4X3NnZSA9IEJGQURfSU9fTUFYX1NHRTsKK3N0YXRpYyBpbnQgICAgICBsb2dfbGV2ZWwgPSBCRkFfTE9HX1dBUk5JTkc7CitzdGF0aWMgaW50ICAgICAgaW9jX2F1dG9fcmVjb3ZlciA9IEJGQV9UUlVFOworc3RhdGljIGludCAgICAgIGlwZmNfZW5hYmxlID0gQkZBX0ZBTFNFOworc3RhdGljIGludCAgICAgIGlwZmNfbXR1ID0gLTE7CitpbnQgCQliZmFfbHVuX3F1ZXVlX2RlcHRoID0gQkZBRF9MVU5fUVVFVUVfREVQVEg7CitpbnQgICAgICAJYmZhX2xpbmt1cF9kZWxheSA9IC0xOworCittb2R1bGVfcGFyYW0ob3NfbmFtZSwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShvc19wYXRjaCwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShob3N0X25hbWUsIGNoYXJwLCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3Jwb3J0cywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX2lvcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3RtcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX2ZjeHBzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShudW1fdWZidWZzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShyZXFxX3NpemUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKHJzcHFfc2l6ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3NncGdzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShycG9ydF9kZWxfdGltZW91dCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oYmZhX2x1bl9xdWV1ZV9kZXB0aCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oYmZhX2lvX21heF9zZ2UsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGxvZ19sZXZlbCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oaW9jX2F1dG9fcmVjb3ZlciwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oaXBmY19lbmFibGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGlwZmNfbXR1LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShiZmFfbGlua3VwX2RlbGF5LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworLyoKKyAqIFN0b3JlcyB0aGUgbW9kdWxlIHBhcm0gbnVtX3NncGdzIHZhbHVlOworICogdXNlZCB0byByZXNldCBmb3IgYmZhZCBuZXh0IGluc3RhbmNlLgorICovCitzdGF0aWMgaW50IG51bV9zZ3Bnc19wYXJtOworCitzdGF0aWMgYmZhX3N0YXR1c190CitiZmFkX2ZjNF9wcm9iZShzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICByYzsKKworCXJjID0gYmZhZF9pbV9wcm9iZShiZmFkKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHQ7CisKKwliZmFkX3RtX3Byb2JlKGJmYWQpOworCisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmUoYmZhZCk7CitleHQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9mYzRfcHJvYmVfdW5kbyhzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWJmYWRfaW1fcHJvYmVfdW5kbyhiZmFkKTsKKwliZmFkX3RtX3Byb2JlX3VuZG8oYmZhZCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmVfdW5kbyhiZmFkKTsKK30KKworc3RhdGljIHZvaWQKK2JmYWRfZmM0X3Byb2JlX3Bvc3Qoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoYmZhZC0+aW0pCisJCWJmYWRfaW1fcHJvYmVfcG9zdChiZmFkLT5pbSk7CisKKwliZmFkX3RtX3Byb2JlX3Bvc3QoYmZhZCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmVfcG9zdChiZmFkKTsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhZF9mYzRfcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0LCBpbnQgcm9sZXMpCit7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkJcmMgPSBiZmFkX2ltX3BvcnRfbmV3KGJmYWQsIHBvcnQpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dDsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQlyYyA9IGJmYWRfdG1fcG9ydF9uZXcoYmZhZCwgcG9ydCk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gZXh0OworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQlyYyA9IGJmYWRfaXBmY19wb3J0X25ldyhiZmFkLCBwb3J0LCBwb3J0LT5wdmJfdHlwZSk7CitleHQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9mYzRfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0LCBpbnQgcm9sZXMpCit7CisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJCWJmYWRfaW1fcG9ydF9kZWxldGUoYmZhZCwgcG9ydCk7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJYmZhZF90bV9wb3J0X2RlbGV0ZShiZmFkLCBwb3J0KTsKKworCWlmICgocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSAmJiBpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX3BvcnRfZGVsZXRlKGJmYWQsIHBvcnQpOworfQorCisvKioKKyAqICBCRkEgY2FsbGJhY2tzCisgKi8KK3ZvaWQKK2JmYWRfaGNiX2NvbXAodm9pZCAqYXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCXN0cnVjdCBiZmFkX2hhbF9jb21wICpmY29tcCA9IChzdHJ1Y3QgYmZhZF9oYWxfY29tcCAqKWFyZzsKKworCWZjb21wLT5zdGF0dXMgPSBzdGF0dXM7CisJY29tcGxldGUoJmZjb21wLT5jb21wKTsKK30KKworLyoqCisgKiBiZmFfaW5pdCBjYWxsYmFjaworICovCit2b2lkCitiZmFfY2JfaW5pdCh2b2lkICpkcnYsIGJmYV9zdGF0dXNfdCBpbml0X3N0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhZF9zICAqYmZhZCA9IGRydjsKKworCWlmIChpbml0X3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfSEFMX0lOSVRfRE9ORTsKKworCWNvbXBsZXRlKCZiZmFkLT5jb21wKTsKK30KKworCisKKy8qKgorICogIEJGQV9GQ1MgY2FsbGJhY2tzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhZF9nZXRfZHJ2X3BvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LAorCQkgIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwlyZXR1cm4gKCh2cF9kcnYpID8gKCYodnBfZHJ2KS0+ZHJ2X3BvcnQpCisJCTogKCh2Zl9kcnYpID8gKCYodmZfZHJ2KS0+YmFzZV9wb3J0KSA6ICgmKGJmYWQpLT5wcG9ydCkpKTsKK30KKworc3RydWN0IGJmYWRfcG9ydF9zICoKK2JmYV9mY2JfcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLCBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsCisJCSBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydF9kcnY7CisKKwlpZiAoIXZwX2RydiAmJiAhdmZfZHJ2KSB7CisJCXBvcnRfZHJ2ID0gJmJmYWQtPnBwb3J0OworCQlwb3J0X2Rydi0+cHZiX3R5cGUgPSBCRkFEX1BPUlRfUEhZU19CQVNFOworCX0gZWxzZSBpZiAoIXZwX2RydiAmJiB2Zl9kcnYpIHsKKwkJcG9ydF9kcnYgPSAmdmZfZHJ2LT5iYXNlX3BvcnQ7CisJCXBvcnRfZHJ2LT5wdmJfdHlwZSA9IEJGQURfUE9SVF9WRl9CQVNFOworCX0gZWxzZSBpZiAodnBfZHJ2ICYmICF2Zl9kcnYpIHsKKwkJcG9ydF9kcnYgPSAmdnBfZHJ2LT5kcnZfcG9ydDsKKwkJcG9ydF9kcnYtPnB2Yl90eXBlID0gQkZBRF9QT1JUX1BIWVNfVlBPUlQ7CisJfSBlbHNlIHsKKwkJcG9ydF9kcnYgPSAmdnBfZHJ2LT5kcnZfcG9ydDsKKwkJcG9ydF9kcnYtPnB2Yl90eXBlID0gQkZBRF9QT1JUX1ZGX1ZQT1JUOworCX0KKworCXBvcnRfZHJ2LT5mY3NfcG9ydCA9IHBvcnQ7CisJcG9ydF9kcnYtPnJvbGVzID0gcm9sZXM7CisJcmMgPSBiZmFkX2ZjNF9wb3J0X25ldyhiZmFkLCBwb3J0X2Rydiwgcm9sZXMpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYWRfZmM0X3BvcnRfZGVsZXRlKGJmYWQsIHBvcnRfZHJ2LCByb2xlcyk7CisJCXBvcnRfZHJ2ID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcG9ydF9kcnY7Cit9CisKK3ZvaWQKK2JmYV9mY2JfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0X2RydjsKKworCS8qCisJICogdGhpcyB3aWxsIGJlIG9ubHkgY2FsbGVkIGZyb20gcm1tb2QgY29udGV4dAorCSAqLworCWlmICh2cF9kcnYgJiYgIXZwX2Rydi0+Y29tcF9kZWwpIHsKKwkJcG9ydF9kcnYgPSBiZmFkX2dldF9kcnZfcG9ydChiZmFkLCB2Zl9kcnYsIHZwX2Rydik7CisJCWJmYV90cmMoYmZhZCwgcm9sZXMpOworCQliZmFkX2ZjNF9wb3J0X2RlbGV0ZShiZmFkLCBwb3J0X2Rydiwgcm9sZXMpOworCX0KK30KKwordm9pZAorYmZhX2ZjYl9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCSAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnRfZHJ2ID0gYmZhZF9nZXRfZHJ2X3BvcnQoYmZhZCwgdmZfZHJ2LCB2cF9kcnYpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJCWJmYWRfaW1fcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisJCWJmYWRfdG1fcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX1BPUlRfT05MSU5FOworfQorCit2b2lkCitiZmFfZmNiX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCSAgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0X2RydiA9IGJmYWRfZ2V0X2Rydl9wb3J0KGJmYWQsIHZmX2RydiwgdnBfZHJ2KTsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCQliZmFkX2ltX3BvcnRfb2ZmbGluZShiZmFkLCBwb3J0X2Rydik7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJYmZhZF90bV9wb3J0X29mZmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcG9ydF9vZmZsaW5lKGJmYWQsIHBvcnRfZHJ2KTsKK30KKwordm9pZAorYmZhX2ZjYl92cG9ydF9kZWxldGUoc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnRfZHJ2KQoreworCWlmICh2cG9ydF9kcnYtPmNvbXBfZGVsKSB7CisJCWNvbXBsZXRlKHZwb3J0X2Rydi0+Y29tcF9kZWwpOworCQlyZXR1cm47CisJfQorCisJa2ZyZWUodnBvcnRfZHJ2KTsKK30KKworLyoqCisgKiBGQ1MgUlBPUlQgYWxsb2MgY2FsbGJhY2ssIGFmdGVyIHN1Y2Nlc3NmdWwgUExPR0kgYnkgRkNTCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2ZjYl9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoqcnBvcnQsCisJCSAgICBzdHJ1Y3QgYmZhZF9ycG9ydF9zICoqcnBvcnRfZHJ2KQoreworCWJmYV9zdGF0dXNfdCAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwkqcnBvcnRfZHJ2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfcnBvcnRfcyksIEdGUF9BVE9NSUMpOworCWlmICgqcnBvcnRfZHJ2ID09IE5VTEwpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJZ290byBleHQ7CisJfQorCisJKnJwb3J0ID0gJigqcnBvcnRfZHJ2KS0+ZmNzX3Jwb3J0OworCitleHQ6CisJcmV0dXJuIHJjOworfQorCisKKwordm9pZAorYmZhZF9oYWxfbWVtX3JlbGVhc2Uoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqaGFsX21lbWluZm8gPSAmYmZhZC0+bWVtaW5mbzsKKwlzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgKm1lbWluZm9fZWxlbTsKKworCWZvciAoaSA9IDA7IGkgPCBCRkFfTUVNX1RZUEVfTUFYOyBpKyspIHsKKwkJbWVtaW5mb19lbGVtID0gJmhhbF9tZW1pbmZvLT5tZW1pbmZvW2ldOworCQlpZiAobWVtaW5mb19lbGVtLT5rdmEgIT0gTlVMTCkgeworCQkJc3dpdGNoIChtZW1pbmZvX2VsZW0tPm1lbV90eXBlKSB7CisJCQljYXNlIEJGQV9NRU1fVFlQRV9LVkE6CisJCQkJdmZyZWUobWVtaW5mb19lbGVtLT5rdmEpOworCQkJCWJyZWFrOworCQkJY2FzZSBCRkFfTUVNX1RZUEVfRE1BOgorCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZiZmFkLT5wY2lkZXYtPmRldiwKKwkJCQkJCW1lbWluZm9fZWxlbS0+bWVtX2xlbiwKKwkJCQkJCW1lbWluZm9fZWxlbS0+a3ZhLAorCQkJCQkJKGRtYV9hZGRyX3QpIG1lbWluZm9fZWxlbS0+ZG1hKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYmZhX2Fzc2VydCgwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCW1lbXNldChoYWxfbWVtaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbWVtaW5mb19zKSk7Cit9CisKK3ZvaWQKK2JmYWRfdXBkYXRlX2hhbF9jZmcoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqYmZhX2NmZykKK3sKKwlpZiAobnVtX3Jwb3J0cyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV9ycG9ydHMgPSBudW1fcnBvcnRzOworCWlmIChudW1faW9zID4gMCkKKwkJYmZhX2NmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IG51bV9pb3M7CisJaWYgKG51bV90bXMgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IG51bV90bXM7CisJaWYgKG51bV9mY3hwcyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXMgPSBudW1fZmN4cHM7CisJaWYgKG51bV91ZmJ1ZnMgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1fdWZfYnVmcyA9IG51bV91ZmJ1ZnM7CisJaWYgKHJlcXFfc2l6ZSA+IDApCisJCWJmYV9jZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyA9IHJlcXFfc2l6ZTsKKwlpZiAocnNwcV9zaXplID4gMCkKKwkJYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zID0gcnNwcV9zaXplOworCWlmIChudW1fc2dwZ3MgPiAwKQorCQliZmFfY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gbnVtX3NncGdzOworCisJLyoKKwkgKiBwb3B1bGF0ZSB0aGUgaGFsIHZhbHVlcyBiYWNrIHRvIHRoZSBkcml2ZXIgZm9yIHN5c2ZzIHVzZS4KKwkgKiBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHNob3duIGFzIDAgaW4gc3lzZnMKKwkgKi8KKwludW1fcnBvcnRzID0gYmZhX2NmZy0+ZndjZmcubnVtX3Jwb3J0czsKKwludW1faW9zICAgID0gYmZhX2NmZy0+ZndjZmcubnVtX2lvaW1fcmVxczsKKwludW1fdG1zCSAgID0gYmZhX2NmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXM7CisJbnVtX2ZjeHBzICA9IGJmYV9jZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXM7CisJbnVtX3VmYnVmcyA9IGJmYV9jZmctPmZ3Y2ZnLm51bV91Zl9idWZzOworCXJlcXFfc2l6ZSAgPSBiZmFfY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXM7CisJcnNwcV9zaXplICA9IGJmYV9jZmctPmRydmNmZy5udW1fcnNwcV9lbGVtczsKKwludW1fc2dwZ3MgID0gYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9zZ3BnczsKK30KKworYmZhX3N0YXR1c190CitiZmFkX2hhbF9tZW1fYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqaGFsX21lbWluZm8gPSAmYmZhZC0+bWVtaW5mbzsKKwlzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgKm1lbWluZm9fZWxlbTsKKwliZmFfc3RhdHVzX3QgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCWRtYV9hZGRyX3QgICAgICBwaHlzX2FkZHI7CisJaW50ICAgICAgICAgICAgIHJldHJ5X2NvdW50ID0gMDsKKwlpbnQgICAgICAgICAgICAgcmVzZXRfdmFsdWUgPSAxOworCWludCAgICAgICAgICAgICBtaW5fbnVtX3NncGdzID0gNTEyOworCXZvaWQgICAgICAgICAgICprdmE7CisJaW50ICAgICAgICAgICAgIGk7CisKKwliZmFfY2ZnX2dldF9kZWZhdWx0KCZiZmFkLT5pb2NfY2ZnKTsKKworcmV0cnk6CisJYmZhZF91cGRhdGVfaGFsX2NmZygmYmZhZC0+aW9jX2NmZyk7CisJYmZhZC0+Y2ZnX2RhdGEuaW9jX3F1ZXVlX2RlcHRoID0gYmZhZC0+aW9jX2NmZy5md2NmZy5udW1faW9pbV9yZXFzOworCWJmYV9jZmdfZ2V0X21lbWluZm8oJmJmYWQtPmlvY19jZmcsIGhhbF9tZW1pbmZvKTsKKworCWZvciAoaSA9IDA7IGkgPCBCRkFfTUVNX1RZUEVfTUFYOyBpKyspIHsKKwkJbWVtaW5mb19lbGVtID0gJmhhbF9tZW1pbmZvLT5tZW1pbmZvW2ldOworCQlzd2l0Y2ggKG1lbWluZm9fZWxlbS0+bWVtX3R5cGUpIHsKKwkJY2FzZSBCRkFfTUVNX1RZUEVfS1ZBOgorCQkJa3ZhID0gdm1hbGxvYyhtZW1pbmZvX2VsZW0tPm1lbV9sZW4pOworCQkJaWYgKGt2YSA9PSBOVUxMKSB7CisJCQkJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CisJCQkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJCQlnb3RvIGV4dDsKKwkJCX0KKwkJCW1lbXNldChrdmEsIDAsIG1lbWluZm9fZWxlbS0+bWVtX2xlbik7CisJCQltZW1pbmZvX2VsZW0tPmt2YSA9IGt2YTsKKwkJCWJyZWFrOworCQljYXNlIEJGQV9NRU1fVFlQRV9ETUE6CisJCQlrdmEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJmYWQtPnBjaWRldi0+ZGV2LAorCQkJCQltZW1pbmZvX2VsZW0tPm1lbV9sZW4sCisJCQkJCSZwaHlzX2FkZHIsIEdGUF9LRVJORUwpOworCQkJaWYgKGt2YSA9PSBOVUxMKSB7CisJCQkJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgd2l0aCBkZWZhdWx0CisJCQkJICogbnVtX3NncGFnZXMgdHJ5IHdpdGggaGFsZiB0aGUgdmFsdWUuCisJCQkJICovCisJCQkJaWYgKG51bV9zZ3BncyA+IG1pbl9udW1fc2dwZ3MpIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYmZhZFslZF06IG1lbW9yeSIKKwkJCQkJCSIgYWxsb2NhdGlvbiBmYWlsZWQgd2l0aCIKKwkJCQkJCSIgbnVtX3NncGdzOiAlZFxuIiwKKwkJCQkJCWJmYWQtPmluc3Rfbm8sIG51bV9zZ3Bncyk7CisJCQkJCW5leHRMb3dlckludCgmbnVtX3NncGdzKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYmZhZFslZF06IHRyeWluZyB0byIKKwkJCQkJCSIgYWxsb2NhdGUgbWVtb3J5IHdpdGgiCisJCQkJCQkiIG51bV9zZ3BnczogJWRcbiIsCisJCQkJCQliZmFkLT5pbnN0X25vLCBudW1fc2dwZ3MpOworCQkJCQlyZXRyeV9jb3VudCsrOworCQkJCQlnb3RvIHJldHJ5OworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChudW1fc2dwZ3NfcGFybSA+IDApCisJCQkJCQludW1fc2dwZ3MgPSBudW1fc2dwZ3NfcGFybTsKKwkJCQkJZWxzZSB7CisJCQkJCQlyZXNldF92YWx1ZSA9CisJCQkJCQkJKDEgPDwgcmV0cnlfY291bnQpOworCQkJCQkJbnVtX3NncGdzICo9IHJlc2V0X3ZhbHVlOworCQkJCQl9CisJCQkJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCQkJCWdvdG8gZXh0OworCQkJCX0KKwkJCX0KKworCQkJaWYgKG51bV9zZ3Bnc19wYXJtID4gMCkKKwkJCQludW1fc2dwZ3MgPSBudW1fc2dwZ3NfcGFybTsKKwkJCWVsc2UgeworCQkJCXJlc2V0X3ZhbHVlID0gKDEgPDwgcmV0cnlfY291bnQpOworCQkJCW51bV9zZ3BncyAqPSByZXNldF92YWx1ZTsKKwkJCX0KKworCQkJbWVtc2V0KGt2YSwgMCwgbWVtaW5mb19lbGVtLT5tZW1fbGVuKTsKKwkJCW1lbWluZm9fZWxlbS0+a3ZhID0ga3ZhOworCQkJbWVtaW5mb19lbGVtLT5kbWEgPSBwaHlzX2FkZHI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCisJCX0KKwl9CitleHQ6CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIENyZWF0ZSBhIHZwb3J0IHVuZGVyIGEgdmYuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF92cG9ydF9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpCit7CisJc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnQ7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJc3RydWN0IGNvbXBsZXRpb24gZmNvbXA7CisKKwl2cG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3Zwb3J0X3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZwb3J0KSB7CisJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCWdvdG8gZXh0OworCX0KKworCXZwb3J0LT5kcnZfcG9ydC5iZmFkID0gYmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcmMgPSBiZmFfZmNzX3Zwb3J0X2NyZWF0ZSgmdnBvcnQtPmZjc192cG9ydCwgJmJmYWQtPmJmYV9mY3MsIHZmX2lkLAorCQkJCSAgcG9ydF9jZmcsIHZwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dF9mcmVlX3Zwb3J0OworCisJaWYgKHBvcnRfY2ZnLT5yb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKSB7CisJCXJjID0gYmZhZF9pbV9zY3NpX2hvc3RfYWxsb2MoYmZhZCwgdnBvcnQtPmRydl9wb3J0LmltX3BvcnQpOworCQlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJCWdvdG8gZXh0X2ZyZWVfZmNzX3Zwb3J0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZmNzX3Zwb3J0X3N0YXJ0KCZ2cG9ydC0+ZmNzX3Zwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworCitleHRfZnJlZV9mY3NfdnBvcnQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXZwb3J0LT5jb21wX2RlbCA9ICZmY29tcDsKKwlpbml0X2NvbXBsZXRpb24odnBvcnQtPmNvbXBfZGVsKTsKKwliZmFfZmNzX3Zwb3J0X2RlbGV0ZSgmdnBvcnQtPmZjc192cG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJd2FpdF9mb3JfY29tcGxldGlvbih2cG9ydC0+Y29tcF9kZWwpOworZXh0X2ZyZWVfdnBvcnQ6CisJa2ZyZWUodnBvcnQpOworZXh0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBDcmVhdGUgYSB2ZiBhbmQgaXRzIGJhc2UgdnBvcnQgaW1wbGljaXRlbHkuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF92Zl9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCSAgICAgICBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnKQoreworCXN0cnVjdCBiZmFkX3ZmX3MgKnZmOworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwl2ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3ZmX3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZmKSB7CisJCXJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJCWdvdG8gZXh0OworCX0KKworCXJjID0gYmZhX2Zjc192Zl9jcmVhdGUoJnZmLT5mY3NfdmYsICZiZmFkLT5iZmFfZmNzLCB2Zl9pZCwgcG9ydF9jZmcsCisJCQkgICAgICAgdmYpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlrZnJlZSh2Zik7CitleHQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX2JmYV90bW8odW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBiZmFkX3MgICpiZmFkID0gKHN0cnVjdCBiZmFkX3MgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBkb25lcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYV90aW1lcl90aWNrKCZiZmFkLT5iZmEpOworCisJYmZhX2NvbXBfZGVxKCZiZmFkLT5iZmEsICZkb25lcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRvbmVxKSkgeworCQliZmFfY29tcF9wcm9jZXNzKCZiZmFkLT5iZmEsICZkb25lcSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJYmZhX2NvbXBfZnJlZSgmYmZhZC0+YmZhLCAmZG9uZXEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwl9CisKKwltb2RfdGltZXIoJmJmYWQtPmhhbF90bW8sIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEJGQV9USU1FUl9GUkVRKSk7Cit9CisKK3ZvaWQKK2JmYWRfaW5pdF90aW1lcihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWluaXRfdGltZXIoJmJmYWQtPmhhbF90bW8pOworCWJmYWQtPmhhbF90bW8uZnVuY3Rpb24gPSBiZmFkX2JmYV90bW87CisJYmZhZC0+aGFsX3Rtby5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYmZhZDsKKworCW1vZF90aW1lcigmYmZhZC0+aGFsX3RtbywgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQkZBX1RJTUVSX0ZSRVEpKTsKK30KKworaW50CitiZmFkX3BjaV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXVuc2lnbmVkIGxvbmcgICBiYXIwX2xlbjsKKwlpbnQgICAgICAgICAgICAgcmMgPSAtRU5PREVWOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCUJGQV9QUklOVEYoQkZBX0VSUiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWwgJXBcbiIsIHBkZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBCRkFEX0RSSVZFUl9OQU1FKSkKKwkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMCkKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgeworCQkJQkZBX1BSSU5URihCRkFfRVJSLCAicGNpX3NldF9kbWFfbWFzayBmYWlsICVwXG4iLCBwZGV2KTsKKwkJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uOworCQl9CisKKwliZmFkLT5wY2lfYmFyMF9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJYmFyMF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWJmYWQtPnBjaV9iYXIwX2t2YSA9IGlvcmVtYXAoYmZhZC0+cGNpX2JhcjBfbWFwLCBiYXIwX2xlbik7CisKKwlpZiAoYmZhZC0+cGNpX2JhcjBfa3ZhID09IE5VTEwpIHsKKwkJQkZBX1BSSU5URihCRkFfRVJSLCAiRmFpbCB0byBtYXAgYmFyMFxuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uOworCX0KKworCWJmYWQtPmhhbF9wY2lkZXYucGNpX3Nsb3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CisJYmZhZC0+aGFsX3BjaWRldi5wY2lfZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKwliZmFkLT5oYWxfcGNpZGV2LnBjaV9iYXJfa3ZhID0gYmZhZC0+cGNpX2JhcjBfa3ZhOworCWJmYWQtPmhhbF9wY2lkZXYuZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCWJmYWQtPnBjaV9uYW1lID0gcGNpX25hbWUocGRldik7CisKKwliZmFkLT5wY2lfYXR0ci52ZW5kb3JfaWQgPSBwZGV2LT52ZW5kb3I7CisJYmZhZC0+cGNpX2F0dHIuZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCWJmYWQtPnBjaV9hdHRyLnNzaWQgPSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCWJmYWQtPnBjaV9hdHRyLnNzdmlkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwliZmFkLT5wY2lfYXR0ci5wY2lmbiA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKworCWJmYWQtPnBjaWRldiA9IHBkZXY7CisJcmV0dXJuIDA7CisKK291dF9yZWxlYXNlX3JlZ2lvbjoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworb3V0X2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfcGNpX3VuaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKyNpZiBkZWZpbmVkKF9faWE2NF9fKQorCXBjaV9pb3VubWFwKHBkZXYsIGJmYWQtPnBjaV9iYXIwX2t2YSk7CisjZWxzZQorCWlvdW5tYXAoYmZhZC0+cGNpX2JhcjBfa3ZhKTsKKyNlbmRpZgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK30KKwordm9pZAorYmZhZF9mY3NfcG9ydF9jZmcoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgcG9ydF9jZmc7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKwljaGFyICAgICAgICAgICAgc3ltbmFtZVtCRkFfU1lNTkFNRV9NQVhMRU5dOworCisJc3ByaW50ZihzeW1uYW1lLCAiJXMtJWQiLCBCRkFEX0RSSVZFUl9OQU1FLCBiZmFkLT5pbnN0X25vKTsKKwltZW1jcHkocG9ydF9jZmcuc3ltX25hbWUuc3ltbmFtZSwgc3ltbmFtZSwgc3RybGVuKHN5bW5hbWUpKTsKKwliZmFfcHBvcnRfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmF0dHIpOworCXBvcnRfY2ZnLm53d24gPSBhdHRyLm53d247CisJcG9ydF9jZmcucHd3biA9IGF0dHIucHd3bjsKKworCWJmYV9mY3NfY2ZnX2Jhc2VfcG9ydCgmYmZhZC0+YmZhX2ZjcywgJnBvcnRfY2ZnKTsKK30KKworYmZhX3N0YXR1c190CitiZmFkX2Rydl9pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zIGRyaXZlcl9pbmZvOworCWludCAgICAgICAgICAgICBpOworCisJYmZhZC0+Y2ZnX2RhdGEucnBvcnRfZGVsX3RpbWVvdXQgPSBycG9ydF9kZWxfdGltZW91dDsKKwliZmFkLT5jZmdfZGF0YS5sdW5fcXVldWVfZGVwdGggPSBiZmFfbHVuX3F1ZXVlX2RlcHRoOworCWJmYWQtPmNmZ19kYXRhLmlvX21heF9zZ2UgPSBiZmFfaW9fbWF4X3NnZTsKKwliZmFkLT5jZmdfZGF0YS5iaW5kaW5nX21ldGhvZCA9IEZDUF9QV1dOX0JJTkRJTkc7CisKKwlyYyA9IGJmYWRfaGFsX21lbV9hbGxvYyhiZmFkKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQgYmZhZF9oYWxfbWVtX2FsbG9jIGZhaWx1cmVcbiIsCisJCSAgICAgICBiZmFkLT5pbnN0X25vKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGF0dGFjaCBhbGwgQnJvY2FkZSBIQkEgcG9ydHMsIgorCQkJIiBTeXN0ZW0gbWF5IG5lZWQgbW9yZSBtZW1vcnkuXG4iKTsKKwkJZ290byBvdXRfaGFsX21lbV9hbGxvY19mYWlsdXJlOworCX0KKworCWJmYV9pbml0X2xvZygmYmZhZC0+YmZhLCBiZmFkLT5sb2dtb2QpOworCWJmYV9pbml0X3RyYygmYmZhZC0+YmZhLCBiZmFkLT50cmNtb2QpOworCWJmYV9pbml0X2FlbigmYmZhZC0+YmZhLCBiZmFkLT5hZW4pOworCUlOSVRfTElTVF9IRUFEKCZiZmFkLT5maWxlX3EpOworCUlOSVRfTElTVF9IRUFEKCZiZmFkLT5maWxlX2ZyZWVfcSk7CisJZm9yIChpID0gMDsgaSA8IEJGQURfQUVOX01BWF9BUFBTOyBpKyspIHsKKwkJYmZhX3FfcWVfaW5pdCgmYmZhZC0+ZmlsZV9idWZbaV0ucWUpOworCQlsaXN0X2FkZF90YWlsKCZiZmFkLT5maWxlX2J1ZltpXS5xZSwgJmJmYWQtPmZpbGVfZnJlZV9xKTsKKwl9CisJYmZhX2luaXRfcGxvZygmYmZhZC0+YmZhLCAmYmZhZC0+cGxvZ19idWYpOworCWJmYV9wbG9nX2luaXQoJmJmYWQtPnBsb2dfYnVmKTsKKwliZmFfcGxvZ19zdHIoJmJmYWQtPnBsb2dfYnVmLCBCRkFfUExfTUlEX0RSVlIsIEJGQV9QTF9FSURfRFJJVkVSX1NUQVJULAorCQkgICAgIDAsICJEcml2ZXIgQXR0YWNoIik7CisKKwliZmFfYXR0YWNoKCZiZmFkLT5iZmEsIGJmYWQsICZiZmFkLT5pb2NfY2ZnLCAmYmZhZC0+bWVtaW5mbywKKwkJICAgJmJmYWQtPmhhbF9wY2lkZXYpOworCisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKworCS8qCisJICogRW5hYmxlIEludGVycnVwdCBhbmQgd2FpdCBiZmFfaW5pdCBjb21wbGV0aW9uCisJICovCisJaWYgKGJmYWRfc2V0dXBfaW50cihiZmFkKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQ6IGJmYWRfc2V0dXBfaW50ciBmYWlsZWRcbiIsCisJCSAgICAgICBiZmFkLT5pbnN0X25vKTsKKwkJZ290byBvdXRfc2V0dXBfaW50cl9mYWlsdXJlOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfaW5pdCgmYmZhZC0+YmZhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogU2V0IHVwIGludGVycnVwdCBoYW5kbGVyIGZvciBlYWNoIHZlY3RvcnMKKwkgKi8KKwlpZiAoKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX01TSVhfT04pCisJICAgICYmIGJmYWRfaW5zdGFsbF9tc2l4X2hhbmRsZXIoYmZhZCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGluc3RhbGxfbXNpeCBmYWlsZWQsIGJmYWQlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgYmZhZC0+aW5zdF9ubyk7CisJfQorCisJYmZhZF9pbml0X3RpbWVyKGJmYWQpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisKKwltZW1zZXQoJmRyaXZlcl9pbmZvLCAwLCBzaXplb2YoZHJpdmVyX2luZm8pKTsKKwlzdHJuY3B5KGRyaXZlcl9pbmZvLnZlcnNpb24sIEJGQURfRFJJVkVSX1ZFUlNJT04sCisJCXNpemVvZihkcml2ZXJfaW5mby52ZXJzaW9uKSAtIDEpOworCWlmIChob3N0X25hbWUpCisJCXN0cm5jcHkoZHJpdmVyX2luZm8uaG9zdF9tYWNoaW5lX25hbWUsIGhvc3RfbmFtZSwKKwkJCXNpemVvZihkcml2ZXJfaW5mby5ob3N0X21hY2hpbmVfbmFtZSkgLSAxKTsKKwlpZiAob3NfbmFtZSkKKwkJc3RybmNweShkcml2ZXJfaW5mby5ob3N0X29zX25hbWUsIG9zX25hbWUsCisJCQlzaXplb2YoZHJpdmVyX2luZm8uaG9zdF9vc19uYW1lKSAtIDEpOworCWlmIChvc19wYXRjaCkKKwkJc3RybmNweShkcml2ZXJfaW5mby5ob3N0X29zX3BhdGNoLCBvc19wYXRjaCwKKwkJCXNpemVvZihkcml2ZXJfaW5mby5ob3N0X29zX3BhdGNoKSAtIDEpOworCisJc3RybmNweShkcml2ZXJfaW5mby5vc19kZXZpY2VfbmFtZSwgYmZhZC0+cGNpX25hbWUsCisJCXNpemVvZihkcml2ZXJfaW5mby5vc19kZXZpY2VfbmFtZSAtIDEpKTsKKworCS8qCisJICogRkNTIElOSVQKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX2Zjc19sb2dfaW5pdCgmYmZhZC0+YmZhX2ZjcywgYmZhZC0+bG9nbW9kKTsKKwliZmFfZmNzX3RyY19pbml0KCZiZmFkLT5iZmFfZmNzLCBiZmFkLT50cmNtb2QpOworCWJmYV9mY3NfYWVuX2luaXQoJmJmYWQtPmJmYV9mY3MsIGJmYWQtPmFlbik7CisJYmZhX2Zjc19pbml0KCZiZmFkLT5iZmFfZmNzLCAmYmZhZC0+YmZhLCBiZmFkLCBCRkFfRkFMU0UpOworCWJmYV9mY3NfZHJpdmVyX2luZm9faW5pdCgmYmZhZC0+YmZhX2ZjcywgJmRyaXZlcl9pbmZvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9EUlZfSU5JVF9ET05FOworCXJldHVybiBCRkFfU1RBVFVTX09LOworCitvdXRfc2V0dXBfaW50cl9mYWlsdXJlOgorCWJmYV9kZXRhY2goJmJmYWQtPmJmYSk7CisJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CitvdXRfaGFsX21lbV9hbGxvY19mYWlsdXJlOgorCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKK30KKwordm9pZAorYmZhZF9kcnZfdW5pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJZGVsX3RpbWVyX3N5bmMoJmJmYWQtPmhhbF90bW8pOworCWJmYV9pc3JfZGlzYWJsZSgmYmZhZC0+YmZhKTsKKwliZmFfZGV0YWNoKCZiZmFkLT5iZmEpOworCWJmYWRfcmVtb3ZlX2ludHIoYmZhZCk7CisJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCZiZmFkLT5maWxlX3EpKTsKKwliZmFkX2hhbF9tZW1fcmVsZWFzZShiZmFkKTsKK30KKwordm9pZAorYmZhZF9kcnZfc3RhcnQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX3N0YXJ0KCZiZmFkLT5iZmEpOworCWJmYV9mY3Nfc3RhcnQoJmJmYWQtPmJmYV9mY3MpOworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9IQUxfU1RBUlRfRE9ORTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYWRfZmM0X3Byb2JlX3Bvc3QoYmZhZCk7Cit9CisKK3ZvaWQKK2JmYWRfZHJ2X3N0b3Aoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKwliZmFkLT5wcG9ydC5mbGFncyB8PSBCRkFEX1BPUlRfREVMRVRFOworCWJmYV9mY3NfZXhpdCgmYmZhZC0+YmZhX2Zjcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKwliZmFfc3RvcCgmYmZhZC0+YmZhKTsKKwliZmFkLT5iZmFkX2ZsYWdzICY9IH5CRkFEX0hBTF9TVEFSVF9ET05FOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworfQorCitiZmFfc3RhdHVzX3QKK2JmYWRfY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlKQoreworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwkvKgorCSAqIEFsbG9jYXRlIHNjc2lfaG9zdCBmb3IgdGhlIHBoeXNpY2FsIHBvcnQKKwkgKi8KKwlpZiAoKGJmYWRfc3VwcG9ydGVkX2ZjNHMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkgICAgJiYgKHJvbGUgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkpIHsKKwkJaWYgKGJmYWQtPnBwb3J0LmltX3BvcnQgPT0gTlVMTCkgeworCQkJcmMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmMgPSBiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhiZmFkLCBiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCQlnb3RvIG91dDsKKworCQliZmFkLT5wcG9ydC5yb2xlcyB8PSBCRkFfUE9SVF9ST0xFX0ZDUF9JTTsKKwl9CisKKwliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfQ0ZHX1BQT1JUX0RPTkU7CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfdW5jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoKGJmYWQtPnBwb3J0LnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgJiYgaXBmY19lbmFibGUpIHsKKwkJYmZhZF9pcGZjX3BvcnRfZGVsZXRlKGJmYWQsICZiZmFkLT5wcG9ydCk7CisJCWJmYWQtPnBwb3J0LnJvbGVzICY9IH5CRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOworCX0KKworCWlmICgoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCSAgICAmJiAoYmZhZC0+cHBvcnQucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkpIHsKKwkJYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShiZmFkLCBiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJYmZhZF9pbV9wb3J0X2NsZWFuKGJmYWQtPnBwb3J0LmltX3BvcnQpOworCQlrZnJlZShiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJYmZhZC0+cHBvcnQucm9sZXMgJj0gfkJGQV9QT1JUX1JPTEVfRkNQX0lNOworCX0KKworCWJmYWQtPmJmYWRfZmxhZ3MgJj0gfkJGQURfQ0ZHX1BQT1JUX0RPTkU7Cit9CisKK3ZvaWQKK2JmYWRfZHJ2X2xvZ19sZXZlbF9zZXQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAobG9nX2xldmVsID4gQkZBX0xPR19JTlZBTElEICYmIGxvZ19sZXZlbCA8PSBCRkFfTE9HX0xFVkVMX01BWCkKKwkJYmZhX2xvZ19zZXRfbGV2ZWxfYWxsKCZiZmFkLT5sb2dfZGF0YSwgbG9nX2xldmVsKTsKK30KKworIC8qCisgICogIFBDSV9lbnRyeSBQQ0kgZHJpdmVyIGVudHJpZXMgKiB7CisgICovCisKKy8qKgorICogUENJIHByb2JlIGVudHJ5LgorICovCitpbnQKK2JmYWRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKQoreworCXN0cnVjdCBiZmFkX3MgICpiZmFkOworCWludCAgICAgICAgICAgICBlcnJvciA9IC1FTk9ERVYsIHJldHZhbDsKKwljaGFyICAgICAgICAgICAgYnVmWzE2XTsKKworCS8qCisJICogRm9yIHNpbmdsZSBwb3J0IGNhcmRzIC0gb25seSBjbGFpbSBmdW5jdGlvbiAwCisJICovCisJaWYgKChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUCkKKwkgICAgJiYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlCRkFfVFJBQ0UoQkZBX0lORk8sICJiZmFkX3BjaV9wcm9iZSBlbnRyeSIpOworCisJYmZhZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJmYWQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwliZmFkLT50cmNtb2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhX3RyY19tb2RfcyksIEdGUF9LRVJORUwpOworCWlmICghYmZhZC0+dHJjbW9kKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIGFsbG9jIHRyYWNlIGJ1ZmZlciFcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2FsbG9jX3RyYWNlX2ZhaWx1cmU7CisJfQorCisJLyoKKwkgKiBMT0cvVFJBQ0UgSU5JVAorCSAqLworCWJmYV90cmNfaW5pdChiZmFkLT50cmNtb2QpOworCWJmYV90cmMoYmZhZCwgYmZhZF9pbnN0KTsKKworCWJmYWQtPmxvZ21vZCA9ICZiZmFkLT5sb2dfZGF0YTsKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwgYmZhZF9pbnN0KTsKKwliZmFfbG9nX2luaXQoYmZhZC0+bG9nbW9kLCBidWYsIGJmYV9vc19wcmludGYpOworCisJYmZhZF9kcnZfbG9nX2xldmVsX3NldChiZmFkKTsKKworCWJmYWQtPmFlbiA9ICZiZmFkLT5hZW5fYnVmOworCisJaWYgKCEoYmZhZF9sb2FkX2Z3aW1nKHBkZXYpKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX2xvYWRfZndpbWcgZmFpbHVyZSFcbiIpOworCQlrZnJlZShiZmFkLT50cmNtb2QpOworCQlnb3RvIG91dF9hbGxvY190cmFjZV9mYWlsdXJlOworCX0KKworCXJldHZhbCA9IGJmYWRfcGNpX2luaXQocGRldiwgYmZhZCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX3BjaV9pbml0IGZhaWx1cmUhXG4iKTsKKwkJZXJyb3IgPSByZXR2YWw7CisJCWdvdG8gb3V0X3BjaV9pbml0X2ZhaWx1cmU7CisJfQorCisJbXV0ZXhfbG9jaygmYmZhZF9tdXRleCk7CisJYmZhZC0+aW5zdF9ubyA9IGJmYWRfaW5zdCsrOworCWxpc3RfYWRkX3RhaWwoJmJmYWQtPmxpc3RfZW50cnksICZiZmFkX2xpc3QpOworCW11dGV4X3VubG9jaygmYmZhZF9tdXRleCk7CisKKwlzcGluX2xvY2tfaW5pdCgmYmZhZC0+YmZhZF9sb2NrKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgYmZhZCk7CisKKwliZmFkLT5yZWZfY291bnQgPSAwOworCWJmYWQtPnBwb3J0LmJmYWQgPSBiZmFkOworCisJcmV0dmFsID0gYmZhZF9kcnZfaW5pdChiZmFkKTsKKwlpZiAocmV0dmFsICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gb3V0X2Rydl9pbml0X2ZhaWx1cmU7CisJaWYgKCEoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX0lOSVRfRE9ORSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCVkOiBoYWwgaW5pdCBmYWlsZWRcbiIsIGJmYWQtPmluc3Rfbm8pOworCQlnb3RvIG9rOworCX0KKworCS8qCisJICogUFBPUlQgRkNTIGNvbmZpZworCSAqLworCWJmYWRfZmNzX3BvcnRfY2ZnKGJmYWQpOworCisJcmV0dmFsID0gYmZhZF9jZmdfcHBvcnQoYmZhZCwgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pOworCWlmIChyZXR2YWwgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBvdXRfY2ZnX3Bwb3J0X2ZhaWx1cmU7CisKKwkvKgorCSAqIEJGQUQgbGV2ZWwgRkM0IChJTS9UTS9JUEZDKSBzcGVjaWZpYyByZXNvdXJjZSBhbGxvY2F0aW9uCisJICovCisJcmV0dmFsID0gYmZhZF9mYzRfcHJvYmUoYmZhZCk7CisJaWYgKHJldHZhbCAhPSBCRkFfU1RBVFVTX09LKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfZmM0X3Byb2JlIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0X2ZjNF9wcm9iZV9mYWlsdXJlOworCX0KKworCWJmYWRfZHJ2X3N0YXJ0KGJmYWQpOworCisJLyoKKwkgKiBJZiBiZmFfbGlua3VwX2RlbGF5IGlzIHNldCB0byAtMSBkZWZhdWx0OyB0cnkgdG8gcmV0cml2ZSB0aGUKKwkgKiB2YWx1ZSB1c2luZyB0aGUgYmZhZF9vc19nZXRfbGlua3VwX2RlbGF5KCk7IGVsc2UgdXNlIHRoZQorCSAqIHBhc3NlZCBpbiBtb2R1bGUgcGFyYW0gdmFsdWUgYXMgdGhlIGJmYV9saW5rdXBfZGVsYXkuCisJICovCisJaWYgKGJmYV9saW5rdXBfZGVsYXkgPCAwKSB7CisJCWJmYV9saW5rdXBfZGVsYXkgPSBiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoYmZhZCk7CisJCWJmYWRfb3NfcnBvcnRfb25saW5lX3dhaXQoYmZhZCk7CisJCWJmYV9saW5rdXBfZGVsYXkgPSAtMTsKKwl9IGVsc2UgeworCQliZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KGJmYWQpOworCX0KKworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX0RFVklDRV9DTEFJTUVELCBiZmFkLT5wY2lfbmFtZSk7CitvazoKKwlyZXR1cm4gMDsKKworb3V0X2ZjNF9wcm9iZV9mYWlsdXJlOgorCWJmYWRfZmM0X3Byb2JlX3VuZG8oYmZhZCk7CisJYmZhZF91bmNmZ19wcG9ydChiZmFkKTsKK291dF9jZmdfcHBvcnRfZmFpbHVyZToKKwliZmFkX2Rydl91bmluaXQoYmZhZCk7CitvdXRfZHJ2X2luaXRfZmFpbHVyZToKKwltdXRleF9sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX2luc3QtLTsKKwlsaXN0X2RlbCgmYmZhZC0+bGlzdF9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX3BjaV91bmluaXQocGRldiwgYmZhZCk7CitvdXRfcGNpX2luaXRfZmFpbHVyZToKKwlrZnJlZShiZmFkLT50cmNtb2QpOworb3V0X2FsbG9jX3RyYWNlX2ZhaWx1cmU6CisJa2ZyZWUoYmZhZCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIFBDSSByZW1vdmUgZW50cnkuCisgKi8KK3ZvaWQKK2JmYWRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYmZhZF9zICAqYmZhZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwliZmFfdHJjKGJmYWQsIGJmYWQtPmluc3Rfbm8pOworCisJaWYgKChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9EUlZfSU5JVF9ET05FKQorCSAgICAmJiAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0hBTF9JTklUX0RPTkUpKSB7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlpbml0X2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCQliZmFfc3RvcCgmYmZhZC0+YmZhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCisJCWJmYWRfcmVtb3ZlX2ludHIoYmZhZCk7CisJCWRlbF90aW1lcl9zeW5jKCZiZmFkLT5oYWxfdG1vKTsKKwkJZ290byBoYWxfZGV0YWNoOworCX0gZWxzZSBpZiAoIShiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9EUlZfSU5JVF9ET05FKSkgeworCQlnb3RvIHJlbW92ZV9zeXNmczsKKwl9CisKKwlpZiAoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX1NUQVJUX0RPTkUpCisJCWJmYWRfZHJ2X3N0b3AoYmZhZCk7CisKKwliZmFkX3JlbW92ZV9pbnRyKGJmYWQpOworCisJZGVsX3RpbWVyX3N5bmMoJmJmYWQtPmhhbF90bW8pOworCWJmYWRfZmM0X3Byb2JlX3VuZG8oYmZhZCk7CisKKwlpZiAoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfQ0ZHX1BQT1JUX0RPTkUpCisJCWJmYWRfdW5jZmdfcHBvcnQoYmZhZCk7CisKK2hhbF9kZXRhY2g6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYV9kZXRhY2goJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CityZW1vdmVfc3lzZnM6CisKKwltdXRleF9sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX2luc3QtLTsKKwlsaXN0X2RlbCgmYmZhZC0+bGlzdF9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX3BjaV91bmluaXQocGRldiwgYmZhZCk7CisKKwlrZnJlZShiZmFkLT50cmNtb2QpOworCWtmcmVlKGJmYWQpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiZmFkX2lkX3RhYmxlW10gPSB7CisJeworCSAudmVuZG9yID0gQkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwKKwkgLmRldmljZSA9IEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlAsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIC52ZW5kb3IgPSBCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLAorCSAuZGV2aWNlID0gQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSB9LAorCXsKKwkgLnZlbmRvciA9IEJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsCisJIC5kZXZpY2UgPSBCRkFfUENJX0RFVklDRV9JRF9DVCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSAuY2xhc3MgPSAoUENJX0NMQVNTX1NFUklBTF9GSUJFUiA8PCA4KSwKKwkgLmNsYXNzX21hc2sgPSB+MCwKKwkgfSwKKworCXswLCAwfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZmFkX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJmYWRfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IEJGQURfRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gYmZhZF9pZF90YWJsZSwKKwkucHJvYmUgPSBiZmFkX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYmZhZF9wY2lfcmVtb3ZlKSwKK307CisKKy8qKgorICogIExpbnV4IGRyaXZlciBtb2R1bGUgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF9mYzRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgICAgICAgICAgICAgcmM7CisKKwlyYyA9IGJmYWRfaW1fbW9kdWxlX2luaXQoKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHQ7CisKKwliZmFkX3RtX21vZHVsZV9pbml0KCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfbW9kdWxlX2luaXQoKTsKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfZmM0X21vZHVsZV9leGl0KHZvaWQpCit7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfbW9kdWxlX2V4aXQoKTsKKwliZmFkX3RtX21vZHVsZV9leGl0KCk7CisJYmZhZF9pbV9tb2R1bGVfZXhpdCgpOworfQorCisvKioKKyAqIERyaXZlciBtb2R1bGUgaW5pdC4KKyAqLworc3RhdGljIGludCAgICAgIF9faW5pdAorYmZhZF9pbml0KHZvaWQpCit7CisJaW50ICAgICAgICAgICAgIGVycm9yID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gIkJyb2NhZGUgQkZBIEZDL0ZDT0UgU0NTSSBkcml2ZXIgLSB2ZXJzaW9uOiAlc1xuIiwKKwkgICAgICAgQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwlpZiAobnVtX3NncGdzID4gMCkKKwkJbnVtX3NncGdzX3Bhcm0gPSBudW1fc2dwZ3M7CisKKwllcnJvciA9IGJmYWRfZmM0X21vZHVsZV9pbml0KCk7CisJaWYgKGVycm9yKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZF9mYzRfbW9kdWxlX2luaXQgZmFpbHVyZVxuIik7CisJCWdvdG8gZXh0OworCX0KKworCWlmICghc3RyY21wKEZDUElfTkFNRSwgIiBmY3BpbSIpKQorCQliZmFkX3N1cHBvcnRlZF9mYzRzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX0lNOworCWlmICghc3RyY21wKEZDUFRfTkFNRSwgIiBmY3B0bSIpKQorCQliZmFkX3N1cHBvcnRlZF9mYzRzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX1RNOworCWlmICghc3RyY21wKElQRkNfTkFNRSwgIiBpcGZjIikpCisJCWJmYWRfc3VwcG9ydGVkX2ZjNHMgfD0gQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQzsKKworCWJmYV9pb2NfYXV0b19yZWNvdmVyKGlvY19hdXRvX3JlY292ZXIpOworCWJmYV9mY3NfcnBvcnRfc2V0X2RlbF90aW1lb3V0KHJwb3J0X2RlbF90aW1lb3V0KTsKKwllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJmYWRfcGNpX2RyaXZlcik7CisKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCBwY2lfcmVnaXN0ZXJfZHJpdmVyIGZhaWx1cmVcbiIpOworCQlnb3RvIGV4dDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXh0OgorCWJmYWRfZmM0X21vZHVsZV9leGl0KCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIERyaXZlciBtb2R1bGUgZXhpdC4KKyAqLworc3RhdGljIHZvaWQgICAgIF9fZXhpdAorYmZhZF9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiZmFkX3BjaV9kcml2ZXIpOworCWJmYWRfZmM0X21vZHVsZV9leGl0KCk7CisJYmZhZF9mcmVlX2Z3aW1nKCk7Cit9CisKKyNkZWZpbmUgQkZBRF9QUk9UT19OQU1FIEZDUElfTkFNRSBGQ1BUX05BTUUgSVBGQ19OQU1FCisKK21vZHVsZV9pbml0KGJmYWRfaW5pdCk7Cittb2R1bGVfZXhpdChiZmFkX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9jYWRlIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlciIgQkZBRF9QUk9UT19OQU1FKTsKK01PRFVMRV9BVVRIT1IoIkJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLiIpOworTU9EVUxFX1ZFUlNJT04oQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyOWFlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMKQEAgLTAsMCArMSw2NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2F0dHIuYyBMaW51eCBkcml2ZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbW9kdWxlLgorICovCisKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorI2luY2x1ZGUgImJmYWRfaW0uaCIKKyNpbmNsdWRlICJiZmFkX3RyY21vZC5oIgorI2luY2x1ZGUgImJmYWRfYXR0ci5oIgorCisvKioKKyAqICBGQ190cmFuc3BvcnRfdGVtcGxhdGUgRkMgdHJhbnNwb3J0IHRlbXBsYXRlCisgKi8KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBwb3J0IElELgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IE5VTEw7CisJdTMyICAgICAgICBmY19pZCA9IC0xOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNob3N0ID0gYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0YXJnZXQpOworCWltX3BvcnQgPSAoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwliZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpZiAoaXRuaW0pCisJCWZjX2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisKKwlmY19zdGFyZ2V0X3BvcnRfaWQoc3RhcmdldCkgPSBmY19pZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBud3duLgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X25vZGVfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKKwl1NjQgICAgICAgICAgICAgbm9kZV9uYW1lID0gMDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzaG9zdCA9IGJmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdGFyZ2V0KTsKKwlpbV9wb3J0ID0gKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaXRuaW0gPSBiZmFkX29zX2dldF9pdG5pbShpbV9wb3J0LCBzdGFyZ2V0LT5pZCk7CisJaWYgKGl0bmltKQorCQlub2RlX25hbWUgPSBiZmFfZmNzX2l0bmltX2dldF9ud3duKCZpdG5pbS0+ZmNzX2l0bmltKTsKKworCWZjX3N0YXJnZXRfbm9kZV9uYW1lKHN0YXJnZXQpID0gYmZhX29zX2h0b25sbChub2RlX25hbWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IHB3d24uCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBOVUxMOworCXU2NCAgICAgICAgICAgICBwb3J0X25hbWUgPSAwOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNob3N0ID0gYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0YXJnZXQpOworCWltX3BvcnQgPSAoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwliZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpZiAoaXRuaW0pCisJCXBvcnRfbmFtZSA9IGJmYV9mY3NfaXRuaW1fZ2V0X3B3d24oJml0bmltLT5mY3NfaXRuaW0pOworCisJZmNfc3RhcmdldF9wb3J0X25hbWUoc3RhcmdldCkgPSBiZmFfb3NfaHRvbmxsKHBvcnRfbmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgSUQuCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKworCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPQorCQkJYmZhX29zX2h0b24zYihiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydC0+ZmNzX3BvcnQpKTsKK30KKworCisKKworCitzdHJ1Y3QgU2NzaV9Ib3N0ICoKK2JmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJcmV0dXJuIGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgcG9ydCB0eXBlLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9wb3J0X3R5cGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisKKwlzd2l0Y2ggKGF0dHIucG9ydF90eXBlKSB7CisJY2FzZSBCRkFfUFBPUlRfVFlQRV9OUE9SVDoKKwkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfTlBPUlQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfTkxQT1JUOgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9OTFBPUlQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfUDJQOgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9QVFA7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfTFBPUlQ6CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX0xQT1JUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX2dldF9ob3N0X3BvcnRfc3RhdGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisKKwlzd2l0Y2ggKGF0dHIucG9ydF9zdGF0ZSkgeworCWNhc2UgQkZBX1BQT1JUX1NUX0xJTktET1dOOgorCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gRkNfUE9SVFNUQVRFX0xJTktET1dOOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TVF9MSU5LVVA6CisJCWZjX2hvc3RfcG9ydF9zdGF0ZShzaG9zdCkgPSBGQ19QT1JUU1RBVEVfT05MSU5FOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TVF9VTklOSVQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfRU5BQkxJTkdfUVdBSVQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfRU5BQkxJTkc6CisJY2FzZSBCRkFfUFBPUlRfU1RfRElTQUJMSU5HX1FXQUlUOgorCWNhc2UgQkZBX1BQT1JUX1NUX0RJU0FCTElORzoKKwljYXNlIEJGQV9QUE9SVF9TVF9ESVNBQkxFRDoKKwljYXNlIEJGQV9QUE9SVF9TVF9TVE9QUEVEOgorCWNhc2UgQkZBX1BQT1JUX1NUX0lPQ0RPV046CisJZGVmYXVsdDoKKwkJZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IEZDX1BPUlRTVEFURV9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IGFjdGl2ZSBmYzRzLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9hY3RpdmVfZmM0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKworCW1lbXNldChmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSwgMCwKKwkgICAgICAgc2l6ZW9mKGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpKSk7CisKKwlpZiAocG9ydC0+c3VwcG9ydGVkX2ZjNHMgJgorCQkoQkZBX1BPUlRfUk9MRV9GQ1BfSU0gfCBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkpCisJCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzJdID0gMTsKKworCWlmIChwb3J0LT5zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpCisJCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzNdID0gMHgyMDsKKworCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzddID0gMTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgbGluayBzcGVlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3Rfc3BlZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisJc3dpdGNoIChhdHRyLnNwZWVkKSB7CisJY2FzZSBCRkFfUFBPUlRfU1BFRURfOEdCUFM6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzhHQklUOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF80R0JQUzoKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfNEdCSVQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzJHQlBTOgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF8yR0JJVDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfU1BFRURfMUdCUFM6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzFHQklUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgdHlwZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfZmFicmljX25hbWUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisJd3duX3QgICAgICAgICAgIGZhYnJpY19ud3duID0gMDsKKworCWZhYnJpY19ud3duID0gYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShwb3J0LT5mY3NfcG9ydCk7CisKKwlmY19ob3N0X2ZhYnJpY19uYW1lKHNob3N0KSA9IGJmYV9vc19odG9ubGwoZmFicmljX253d24pOworCit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgQkZBRCBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqCitiZmFkX2ltX2dldF9zdGF0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhZF9oYWxfY29tcCBmY29tcDsKKwlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzICpoc3RhdHM7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCWhzdGF0cyA9ICZiZmFkLT5saW5rX3N0YXRzOworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCW1lbXNldChoc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzKSk7CisJcmMgPSBiZmFfcHBvcnRfZ2V0X3N0YXRzKCZiZmFkLT5iZmEsCisJCQkJICAgICAodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKikgaHN0YXRzLAorCQkJCSAgICAgYmZhZF9oY2JfY29tcCwgJmZjb21wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJcmV0dXJuIE5VTEw7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKworCXJldHVybiBoc3RhdHM7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCByZXNldCBCRkFEIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX3Jlc2V0X3N0YXRzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwliZmFfc3RhdHVzX3QgICAgcmM7CisKKwlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlyYyA9IGJmYV9wcG9ydF9jbGVhcl9zdGF0cygmYmZhZC0+YmZhLCBiZmFkX2hjYl9jb21wLCAmZmNvbXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCXJldHVybjsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCisJcmV0dXJuOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IHJwb3J0IGxvc3MgdGltZW91dC4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X3Jwb3J0X2xvc3NfdG1vKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCit7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGl0bmltLT5pbS0+YmZhZDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcnBvcnQtPmRldl9sb3NzX3RtbyA9IGJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBzZXQgcnBvcnQgbG9zcyB0aW1lb3V0LgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9zZXRfcnBvcnRfbG9zc190bW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgdTMyIHRpbWVvdXQpCit7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGl0bmltLT5pbS0+YmZhZDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlpZiAodGltZW91dCA+IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfZmNwaW1fcGF0aF90b3Zfc2V0KCZiZmFkLT5iZmEsIHRpbWVvdXQpOworCQlycG9ydC0+ZGV2X2xvc3NfdG1vID0gYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJfQorCit9CisKK3N0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBiZmFkX2ltX2ZjX2Z1bmN0aW9uX3RlbXBsYXRlID0geworCisJLyogVGFyZ2V0IGR5bmFtaWMgYXR0cmlidXRlcyAqLworCS5nZXRfc3RhcmdldF9wb3J0X2lkID0gYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X2lkLAorCS5zaG93X3N0YXJnZXRfcG9ydF9pZCA9IDEsCisJLmdldF9zdGFyZ2V0X25vZGVfbmFtZSA9IGJmYWRfaW1fZ2V0X3N0YXJnZXRfbm9kZV9uYW1lLAorCS5zaG93X3N0YXJnZXRfbm9kZV9uYW1lID0gMSwKKwkuZ2V0X3N0YXJnZXRfcG9ydF9uYW1lID0gYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X25hbWUsCisJLnNob3dfc3RhcmdldF9wb3J0X25hbWUgPSAxLAorCisJLyogSG9zdCBkeW5hbWljIGF0dHJpYnV0ZSAqLworCS5nZXRfaG9zdF9wb3J0X2lkID0gYmZhZF9pbV9nZXRfaG9zdF9wb3J0X2lkLAorCS5zaG93X2hvc3RfcG9ydF9pZCA9IDEsCisKKwkvKiBIb3N0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ob3N0X25vZGVfbmFtZSA9IDEsCisJLnNob3dfaG9zdF9wb3J0X25hbWUgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX2ZjNHMgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyA9IDEsCisJLnNob3dfaG9zdF9tYXhmcmFtZV9zaXplID0gMSwKKworCS8qIE1vcmUgaG9zdCBkeW5hbWljIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ob3N0X3BvcnRfdHlwZSA9IDEsCisJLmdldF9ob3N0X3BvcnRfdHlwZSA9IGJmYWRfaW1fZ2V0X2hvc3RfcG9ydF90eXBlLAorCS5zaG93X2hvc3RfcG9ydF9zdGF0ZSA9IDEsCisJLmdldF9ob3N0X3BvcnRfc3RhdGUgPSBiZmFkX2ltX2dldF9ob3N0X3BvcnRfc3RhdGUsCisJLnNob3dfaG9zdF9hY3RpdmVfZmM0cyA9IDEsCisJLmdldF9ob3N0X2FjdGl2ZV9mYzRzID0gYmZhZF9pbV9nZXRfaG9zdF9hY3RpdmVfZmM0cywKKwkuc2hvd19ob3N0X3NwZWVkID0gMSwKKwkuZ2V0X2hvc3Rfc3BlZWQgPSBiZmFkX2ltX2dldF9ob3N0X3NwZWVkLAorCS5zaG93X2hvc3RfZmFicmljX25hbWUgPSAxLAorCS5nZXRfaG9zdF9mYWJyaWNfbmFtZSA9IGJmYWRfaW1fZ2V0X2hvc3RfZmFicmljX25hbWUsCisKKwkuc2hvd19ob3N0X3N5bWJvbGljX25hbWUgPSAxLAorCisJLyogU3RhdGlzdGljcyAqLworCS5nZXRfZmNfaG9zdF9zdGF0cyA9IGJmYWRfaW1fZ2V0X3N0YXRzLAorCS5yZXNldF9mY19ob3N0X3N0YXRzID0gYmZhZF9pbV9yZXNldF9zdGF0cywKKworCS8qIEFsbG9jYXRpb24gbGVuZ3RoIGZvciBob3N0IHNwZWNpZmljIGRhdGEgKi8KKwkuZGRfZmNycG9ydF9zaXplID0gc2l6ZW9mKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKSwKKworCS8qIFJlbW90ZSBwb3J0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ycG9ydF9tYXhmcmFtZV9zaXplID0gMSwKKwkuc2hvd19ycG9ydF9zdXBwb3J0ZWRfY2xhc3NlcyA9IDEsCisJLnNob3dfcnBvcnRfZGV2X2xvc3NfdG1vID0gMSwKKwkuZ2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyA9IGJmYWRfaW1fZ2V0X3Jwb3J0X2xvc3NfdG1vLAorCS5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vID0gYmZhZF9pbV9zZXRfcnBvcnRfbG9zc190bW8sCit9OworCisvKioKKyAqICBTY3NpX0hvc3RfYXR0cnMgU0NTSSBob3N0IGF0dHJpYnV0ZXMKKyAqLworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fc2VyaWFsX251bV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIuc2VyaWFsX251bSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX21vZGVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWwpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9tb2RlbF9kZXNjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWxfZGVzY3IpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9ub2RlX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCXU2NCAgICAgICAgbnd3bjsKKworCW53d24gPSBiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydC0+ZmNzX3BvcnQpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JWxseFxuIiwgYmZhX29zX2h0b25sbChud3duKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX3N5bWJvbGljX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIkJyb2NhZGUgJXMgRlYlcyBEViVzXG4iLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm1vZGVsLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLmZ3X3ZlciwgQkZBRF9EUklWRVJfVkVSU0lPTik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX2h3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIuaHdfdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fZHJ2X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgQkZBRF9EUklWRVJfVkVSU0lPTik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX29wdGlvbnJvbV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKKwkJCWlvY19hdHRyLmFkYXB0ZXJfYXR0ci5vcHRyb21fdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fZndfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIuZndfdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fbnVtX29mX3BvcnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm5wb3J0cyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX2Rydl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIEJGQURfRFJJVkVSX05BTUUpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9udW1fb2ZfZGlzY292ZXJlZF9wb3J0c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJaW50ICAgICAgICBucnBvcnRzID0gMjA0ODsKKwl3d25fdCAgICAgICAgICAqcnBvcnRzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlycG9ydHMgPSBremFsbG9jKHNpemVvZih3d25fdCkgKiBucnBvcnRzICwgR0ZQX0FUT01JQyk7CisJaWYgKHJwb3J0cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0cyhwb3J0LT5mY3NfcG9ydCwgcnBvcnRzLCAmbnJwb3J0cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJa2ZyZWUocnBvcnRzKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBucnBvcnRzKTsKK30KKworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKHNlcmlhbF9udW1iZXIsIFNfSVJVR08sCisJCQkJYmZhZF9pbV9zZXJpYWxfbnVtX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG1vZGVsLCBTX0lSVUdPLCBiZmFkX2ltX21vZGVsX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG1vZGVsX2Rlc2NyaXB0aW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbW9kZWxfZGVzY19zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihub2RlX25hbWUsIFNfSVJVR08sIGJmYWRfaW1fbm9kZV9uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKHN5bWJvbGljX25hbWUsIFNfSVJVR08sCisJCQkJYmZhZF9pbV9zeW1ib2xpY19uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGhhcmR3YXJlX3ZlcnNpb24sIFNfSVJVR08sCisJCQkJYmZhZF9pbV9od192ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGRyaXZlcl92ZXJzaW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fZHJ2X3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIob3B0aW9uX3JvbV92ZXJzaW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fb3B0aW9ucm9tX3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgU19JUlVHTywKKwkJCQliZmFkX2ltX2Z3X3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIobnVtYmVyX29mX3BvcnRzLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbnVtX29mX3BvcnRzX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGRyaXZlcl9uYW1lLCBTX0lSVUdPLCBiZmFkX2ltX2Rydl9uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG51bWJlcl9vZl9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbnVtX29mX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdywgTlVMTCk7CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpiZmFkX2ltX2hvc3RfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc2VyaWFsX251bWJlciwKKwkmZGV2X2F0dHJfbW9kZWwsCisJJmRldl9hdHRyX21vZGVsX2Rlc2NyaXB0aW9uLAorCSZkZXZfYXR0cl9ub2RlX25hbWUsCisJJmRldl9hdHRyX3N5bWJvbGljX25hbWUsCisJJmRldl9hdHRyX2hhcmR3YXJlX3ZlcnNpb24sCisJJmRldl9hdHRyX2RyaXZlcl92ZXJzaW9uLAorCSZkZXZfYXR0cl9vcHRpb25fcm9tX3ZlcnNpb24sCisJJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24sCisJJmRldl9hdHRyX251bWJlcl9vZl9wb3J0cywKKwkmZGV2X2F0dHJfZHJpdmVyX25hbWUsCisJJmRldl9hdHRyX251bWJlcl9vZl9kaXNjb3ZlcmVkX3BvcnRzLAorCU5VTEwsCit9OworCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmZhZF9pbV92cG9ydF9hdHRyc1tdID0geworICAgICZkZXZfYXR0cl9zZXJpYWxfbnVtYmVyLAorICAgICZkZXZfYXR0cl9tb2RlbCwKKyAgICAmZGV2X2F0dHJfbW9kZWxfZGVzY3JpcHRpb24sCisgICAgJmRldl9hdHRyX25vZGVfbmFtZSwKKyAgICAmZGV2X2F0dHJfc3ltYm9saWNfbmFtZSwKKyAgICAmZGV2X2F0dHJfaGFyZHdhcmVfdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfZHJpdmVyX3ZlcnNpb24sCisgICAgJmRldl9hdHRyX29wdGlvbl9yb21fdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfbnVtYmVyX29mX3BvcnRzLAorICAgICZkZXZfYXR0cl9kcml2ZXJfbmFtZSwKKyAgICAmZGV2X2F0dHJfbnVtYmVyX29mX2Rpc2NvdmVyZWRfcG9ydHMsCisgICAgTlVMTCwKK307CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzMzEyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBRF9BVFRSX0hfXworI2RlZmluZSBfX0JGQURfQVRUUl9IX18KKy8qKgorICogIGJmYWRfYXR0ci5oIFZNd2FyZSBkcml2ZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbW9kdWxlLgorICovCisKKy8qKgorICogIEZDX3RyYW5zcG9ydF90ZW1wbGF0ZSBGQyB0cmFuc3BvcnQgdGVtcGxhdGUKKyAqLworCitzdHJ1Y3QgU2NzaV9Ib3N0KgorYmZhZF9vc19kZXZfdG9fc2hvc3Qoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBwb3J0IElELgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBud3duLgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X25vZGVfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IHB3d24uCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgSUQuCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBpc3N1ZSBhIExJUC4KKyAqLworaW50CitiZmFkX2ltX2lzc3VlX2ZjX2hvc3RfbGlwKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKKworc3RydWN0IFNjc2lfSG9zdCoKK2JmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisKKyNlbmRpZiAvKiAgX19CRkFEX0FUVFJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyYzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaApAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIENvbnRhaW5zIGJhc2UgZHJpdmVyIGRlZmluaXRpb25zLgorICovCisKKy8qKgorICogIGJmYV9kcnYuaCBMaW51eCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorICovCisKKyNpZm5kZWYgX19CRkFEX0RSVl9IX18KKyNkZWZpbmUgX19CRkFEX0RSVl9IX18KKworI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ycG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisKKyNpbmNsdWRlIDxjcy9iZmFfcGxvZy5oPgorI2luY2x1ZGUgImFlbi9iZmFfYWVuLmgiCisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfbGludXguaD4KKworI2RlZmluZSBCRkFEX0RSSVZFUl9OQU1FICAgICAgICAiYmZhIgorI2lmZGVmIEJGQV9EUklWRVJfVkVSU0lPTgorI2RlZmluZSBCRkFEX0RSSVZFUl9WRVJTSU9OICAgIEJGQV9EUklWRVJfVkVSU0lPTgorI2Vsc2UKKyNkZWZpbmUgQkZBRF9EUklWRVJfVkVSU0lPTiAgICAiMi4wLjAuMCIKKyNlbmRpZgorCisKKyNkZWZpbmUgQkZBRF9JUlFfRkxBR1MgSVJRRl9TSEFSRUQKKworLyoKKyAqIEJGQUQgZmxhZ3MKKyAqLworI2RlZmluZSBCRkFEX01TSVhfT04JCQkJMHgwMDAwMDAwMQorI2RlZmluZSBCRkFEX0hBTF9JTklUX0RPTkUJCQkweDAwMDAwMDAyCisjZGVmaW5lIEJGQURfRFJWX0lOSVRfRE9ORQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQkZBRF9DRkdfUFBPUlRfRE9ORQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQkZBRF9IQUxfU1RBUlRfRE9ORQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQkZBRF9QT1JUX09OTElORQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgQkZBRF9SUE9SVF9PTkxJTkUJCQkweDAwMDAwMDQwCisKKyNkZWZpbmUgQkZBRF9QT1JUX0RFTEVURQkJCTB4MDAwMDAwMDEKKworLyoKKyAqIEJGQUQgcmVsYXRlZCBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgU0NTSV9TQ0FOX0RFTEFZCQlIWgorI2RlZmluZSBCRkFEX1NUT1BfVElNRU9VVAkzMAorI2RlZmluZSBCRkFEX1NVU1BFTkRfVElNRU9VVAlCRkFEX1NUT1BfVElNRU9VVAorCisvKgorICogQkZBRCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlcworICovCisjZGVmaW5lIEJGQURfTFVOX1FVRVVFX0RFUFRIIAkJMzIKKyNkZWZpbmUgQkZBRF9JT19NQVhfU0dFIAkJU0dfQUxMCisKKyNkZWZpbmUgYmZhZF9pc3JfdCBpcnFfaGFuZGxlcl90CisKKyNkZWZpbmUgTUFYX01TSVhfRU5UUlkgMjIKKworc3RydWN0IGJmYWRfbXNpeF9zIHsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXg7Cit9OworCitlbnVtIGJmYWRfcG9ydF9wdmJfdHlwZSB7CisJQkZBRF9QT1JUX1BIWVNfQkFTRSA9IDAsCisJQkZBRF9QT1JUX1BIWVNfVlBPUlQgPSAxLAorCUJGQURfUE9SVF9WRl9CQVNFID0gMiwKKwlCRkFEX1BPUlRfVkZfVlBPUlQgPSAzLAorfTsKKworLyoKKyAqIFBPUlQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfcG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQ7CisJdTMyICAgICAgICByb2xlczsKKwlzMzIgICAgICAgICBmbGFnczsKKwl1MzIgICAgICAgIHN1cHBvcnRlZF9mYzRzOworCXU4CQlpcGZjX2ZsYWdzOworCWVudW0gYmZhZF9wb3J0X3B2Yl90eXBlIHB2Yl90eXBlOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsJLyogSU0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFkX3RtX3BvcnRfcyAqdG1fcG9ydDsJLyogVE0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFkX2lwZmNfcG9ydF9zICppcGZjX3BvcnQ7CS8qIElQRkMgc3BlY2lmaWMgZGF0YSAqLworfTsKKworLyoKKyAqIFZQT1JUIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3Zwb3J0X3MgeworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAgZHJ2X3BvcnQ7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyBmY3NfdnBvcnQ7CisJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBfZGVsOworfTsKKworLyoKKyAqIFZGIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3ZmX3MgeworCWJmYV9mY3NfdmZfdCAgICBmY3NfdmY7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgIGJhc2VfcG9ydDsJLyogYmFzZSBwb3J0IGZvciB2ZiAqLworCXN0cnVjdCBiZmFkX3MgICAqYmZhZDsKK307CisKK3N0cnVjdCBiZmFkX2NmZ19wYXJhbV9zIHsKKwl1MzIgICAgICAgIHJwb3J0X2RlbF90aW1lb3V0OworCXUzMiAgICAgICAgaW9jX3F1ZXVlX2RlcHRoOworCXUzMiAgICAgICAgbHVuX3F1ZXVlX2RlcHRoOworCXUzMiAgICAgICAgaW9fbWF4X3NnZTsKKwl1MzIgICAgICAgIGJpbmRpbmdfbWV0aG9kOworfTsKKworI2RlZmluZSBCRkFEX0FFTl9NQVhfQVBQUyA4CitzdHJ1Y3QgYmZhZF9hZW5fZmlsZV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBxZTsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCXMzMiByaTsKKwlzMzIgYXBwX2lkOworfTsKKworLyoKKyAqIEJGQUQgKFBDSSBmdW5jdGlvbikgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5OworCXN0cnVjdCBiZmFfcyAgICAgICBiZmE7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICBiZmFfZmNzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJY29uc3QgY2hhciAqcGNpX25hbWU7CisJc3RydWN0IGJmYV9wY2lkZXZfcyBoYWxfcGNpZGV2OworCXN0cnVjdCBiZmFfaW9jX3BjaV9hdHRyX3MgcGNpX2F0dHI7CisJdW5zaWduZWQgbG9uZyAgIHBjaV9iYXIwX21hcDsKKwl2b2lkIF9faW9tZW0gICAqcGNpX2JhcjBfa3ZhOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CisJc3RydWN0IGNvbXBsZXRpb24gc3VzcGVuZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkaXNhYmxlX2NvbXA7CisJYmZhX2Jvb2xlYW5fdCAgIGRpc2FibGVfYWN0aXZlOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAgcHBvcnQ7CS8qIHBoeXNpY2FsIHBvcnQgb2YgdGhlIEJGQUQgKi8KKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyBtZW1pbmZvOworCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgICBpb2NfY2ZnOworCXUzMiAgICAgICAgaW5zdF9ubzsJLyogQkZBRCBpbnN0YW5jZSBudW1iZXIgKi8KKwl1MzIgICAgICAgIGJmYWRfZmxhZ3M7CisJc3BpbmxvY2tfdCAgICAgIGJmYWRfbG9jazsKKwlzdHJ1Y3QgYmZhZF9jZmdfcGFyYW1fcyBjZmdfZGF0YTsKKwlzdHJ1Y3QgYmZhZF9tc2l4X3MgbXNpeF90YWJbTUFYX01TSVhfRU5UUlldOworCWludCAgICAgICAgICAgICBudmVjOworCWNoYXIgICAgICAgICAgICBhZGFwdGVyX25hbWVbQkZBX0FEQVBURVJfU1lNX05BTUVfTEVOXTsKKwljaGFyICAgICAgICAgICAgcG9ydF9uYW1lW0JGQV9BREFQVEVSX1NZTV9OQU1FX0xFTl07CisJc3RydWN0IHRpbWVyX2xpc3QgaGFsX3RtbzsKKwl1bnNpZ25lZCBsb25nICAgaHNfc3RhcnQ7CisJc3RydWN0IGJmYWRfaW1fcyAqaW07CQkvKiBJTSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYWRfdG1fcyAqdG07CQkvKiBUTSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYWRfaXBmY19zICppcGZjOwkvKiBJUEZDIHNwZWNpZmljIGRhdGEgKi8KKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAgIGxvZ19kYXRhOworCXN0cnVjdCBiZmFfdHJjX21vZF9zICAqdHJjbW9kOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICAqbG9nbW9kOworCXN0cnVjdCBiZmFfYWVuX3MgICAgICAqYWVuOworCXN0cnVjdCBiZmFfYWVuX3MgICAgICAgYWVuX2J1ZjsKKwlzdHJ1Y3QgYmZhZF9hZW5fZmlsZV9zIGZpbGVfYnVmW0JGQURfQUVOX01BWF9BUFBTXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgZmlsZV9xOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBmaWxlX2ZyZWVfcTsKKwlzdHJ1Y3QgYmZhX3Bsb2dfcyAgICAgIHBsb2dfYnVmOworCWludCAgICAgICAgICAgICByZWZfY291bnQ7CisJYmZhX2Jvb2xlYW5fdAlpcGZjX2VuYWJsZWQ7CisJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyBsaW5rX3N0YXRzOworCisJc3RydWN0IGtvYmplY3QgKmJmYV9rb2JqOworCXN0cnVjdCBrb2JqZWN0ICppb2Nfa29iajsKKwlzdHJ1Y3Qga29iamVjdCAqcHBvcnRfa29iajsKKwlzdHJ1Y3Qga29iamVjdCAqbHBvcnRfa29iajsKK307CisKKy8qCisgKiBSUE9SVCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhZF9ycG9ydF9zIHsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zIGZjc19ycG9ydDsKK307CisKK3N0cnVjdCBiZmFkX2J1Zl9pbmZvIHsKKwl2b2lkICAgICAgICAgICAqdmlydDsKKwlkbWFfYWRkcl90ICAgICAgcGh5czsKKwl1MzIgICAgICAgIHNpemU7Cit9OworCitzdHJ1Y3QgYmZhZF9mY3hwIHsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQ7CisJYmZhX3N0YXR1c190ICAgIHJlcV9zdGF0dXM7CisJdTE2ICAgICAgICB0YWc7CisJdTE2ICAgICAgICByc3BfbGVuOworCXUxNiAgICAgICAgcnNwX21heGxlbjsKKwl1OCAgICAgICAgIHVzZV9pcmVxYnVmOworCXU4ICAgICAgICAgdXNlX2lyc3BidWY7CisJdTMyICAgICAgICBudW1fcmVxX3NnbGVzOworCXUzMiAgICAgICAgbnVtX3JzcF9zZ2xlczsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJdm9pZCAgICAgICAgICAgKnJlcWJ1Zl9pbmZvOworCXZvaWQgICAgICAgICAgICpyc3BidWZfaW5mbzsKKwlzdHJ1Y3QgYmZhX3NnZV9zICAqcmVxX3NnZTsKKwlzdHJ1Y3QgYmZhX3NnZV9zICAqcnNwX3NnZTsKKwlmY3hwX3NlbmRfY2JfdCAgc2VuZF9jYmZuOworCXZvaWQgICAgICAgICAgICpzZW5kX2NiYXJnOworCXZvaWQgICAgICAgICAgICpiZmFfZmN4cDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOworfTsKKworc3RydWN0IGJmYWRfaGFsX2NvbXAgeworCWJmYV9zdGF0dXNfdCAgICBzdGF0dXM7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKK307CisKKy8qCisgKiBNYWNybyB0byBvYnRhaW4gdGhlIGltbWVkaWF0ZSBsb3dlciBwb3dlcgorICogb2YgdHdvIGZvciB0aGUgaW50ZWdlci4KKyAqLworI2RlZmluZSBuZXh0TG93ZXJJbnQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJaW50IGo7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJKCp4KS0tOyAgICAJCSAgICAgICAgICAgICAgICAJXAorCWZvciAoaiA9IDE7IGogPCAoc2l6ZW9mKGludCkgKiA4KTsgaiA8PD0gMSkgICAgIFwKKwkJKCp4KSA9ICgqeCkgfCAoKngpID4+IGo7ICAgICAgICAJXAorCSgqeCkrKzsgICAgICAgICAgICAgICAgICAJICAgICAgICAJXAorCSgqeCkgPSAoKngpID4+IDE7ICAgICAgICAgICAgICAgICAgICAgICAJXAorfSB3aGlsZSAoMCkKKworCitiZmFfc3RhdHVzX3QgICAgYmZhZF92cG9ydF9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkJCSAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZyk7CitiZmFfc3RhdHVzX3QgICAgYmZhZF92Zl9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkJICAgICAgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpOworYmZhX3N0YXR1c190ICAgIGJmYWRfY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFkX2Rydl9pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfZHJ2X3N0YXJ0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfdW5jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF9kcnZfc3RvcChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX3JlbW92ZV9pbnRyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfaGFsX21lbV9yZWxlYXNlKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfaGNiX2NvbXAodm9pZCAqYXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworaW50ICAgICAgICAgICAgIGJmYWRfc2V0dXBfaW50cihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX3JlbW92ZV9pbnRyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCit2b2lkCQliZmFkX3VwZGF0ZV9oYWxfY2ZnKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmJmYV9jZmcpOworYmZhX3N0YXR1c190CWJmYWRfaGFsX21lbV9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfYmZhX3Rtbyh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZAkJYmZhZF9pbml0X3RpbWVyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOworaW50CQliZmFkX3BjaV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfcGNpX3VuaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkCQliZmFkX2Zjc19wb3J0X2NmZyhzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfZHJ2X3VuaW5pdChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfZHJ2X2xvZ19sZXZlbF9zZXQoc3RydWN0IGJmYWRfcyAqYmZhZCk7CitiZmFfc3RhdHVzX3QJYmZhZF9mYzRfbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkCQliZmFkX2ZjNF9tb2R1bGVfZXhpdCh2b2lkKTsKKwordm9pZCBiZmFkX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IGJmYWRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKTsKK3ZvaWQgYmZhZF9vc19ycG9ydF9vbmxpbmVfd2FpdChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK2ludCBiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoc3RydWN0IGJmYWRfcyAqYmZhZCk7CitpbnQgYmZhZF9pbnN0YWxsX21zaXhfaGFuZGxlcihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKKworZXh0ZXJuIHN0cnVjdCBpZHIgYmZhZF9pbV9wb3J0X2luZGV4OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYmZhZF9saXN0OworZXh0ZXJuIGludCBiZmFfbHVuX3F1ZXVlX2RlcHRoOworZXh0ZXJuIGludCBiZmFkX3N1cHBvcnRlZF9mYzRzOworZXh0ZXJuIGludCBiZmFfbGlua3VwX2RlbGF5OworCisjZW5kaWYgLyogX19CRkFEX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Z3aW1nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzNGIwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9md2ltZy5jIExpbnV4IGRyaXZlciBQQ0kgaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxiZmFkX2Rydi5oPgorI2luY2x1ZGUgPGJmYWRfaW1fY29tcGF0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxiZmFfZndpbWdfcHJpdi5oPgorI2luY2x1ZGUgPGJmYS5oPgorCit1MzIgYmZpX2ltYWdlX2N0X3NpemU7Cit1MzIgYmZpX2ltYWdlX2NiX3NpemU7Cit1MzIgKmJmaV9pbWFnZV9jdDsKK3UzMiAqYmZpX2ltYWdlX2NiOworCisKKyNkZWZpbmUJQkZBRF9GV19GSUxFX0NUCSJjdGZ3LmJpbiIKKyNkZWZpbmUJQkZBRF9GV19GSUxFX0NCCSJjYmZ3LmJpbiIKK01PRFVMRV9GSVJNV0FSRShCRkFEX0ZXX0ZJTEVfQ1QpOworTU9EVUxFX0ZJUk1XQVJFKEJGQURfRldfRklMRV9DQik7CisKK3UzMiAqCitiZmFkX3JlYWRfZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqKmJmaV9pbWFnZSwKKwkJCXUzMiAqYmZpX2ltYWdlX3NpemUsIGNoYXIgKmZ3X25hbWUpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJnBkZXYtPmRldikpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIkNhbid0IGxvY2F0ZSBmaXJtd2FyZSAlc1xuIiwgZndfbmFtZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJKmJmaV9pbWFnZSA9IHZtYWxsb2MoZnctPnNpemUpOworCWlmIChOVUxMID09ICpiZmlfaW1hZ2UpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIkZhaWwgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBmdyBpbWFnZSAiCisJCQkic2l6ZT0leCFcbiIsICh1MzIpIGZ3LT5zaXplKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltZW1jcHkoKmJmaV9pbWFnZSwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwkqYmZpX2ltYWdlX3NpemUgPSBmdy0+c2l6ZS9zaXplb2YodTMyKTsKKworCXJldHVybigqYmZpX2ltYWdlKTsKKworZXJyb3I6CisJcmV0dXJuKE5VTEwpOworfQorCit1MzIgKgorYmZhZF9nZXRfZmlybXdhcmVfYnVmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmIChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJaWYgKGJmaV9pbWFnZV9jdF9zaXplID09IDApCisJCQliZmFkX3JlYWRfZmlybXdhcmUocGRldiwgJmJmaV9pbWFnZV9jdCwKKwkJCQkmYmZpX2ltYWdlX2N0X3NpemUsIEJGQURfRldfRklMRV9DVCk7CisJCXJldHVybihiZmlfaW1hZ2VfY3QpOworCX0gZWxzZSB7CisJCWlmIChiZmlfaW1hZ2VfY2Jfc2l6ZSA9PSAwKQorCQkJYmZhZF9yZWFkX2Zpcm13YXJlKHBkZXYsICZiZmlfaW1hZ2VfY2IsCisJCQkJJmJmaV9pbWFnZV9jYl9zaXplLCBCRkFEX0ZXX0ZJTEVfQ0IpOworCQlyZXR1cm4oYmZpX2ltYWdlX2NiKTsKKwl9Cit9CisKK3UzMiAqCitiZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKHUzMiBvZmYpCit7IHJldHVybiAodTMyICopKGJmaV9pbWFnZV9jdCArIG9mZik7IH0KKwordTMyICoKK2JmaV9pbWFnZV9jYl9nZXRfY2h1bmsodTMyIG9mZikKK3sgcmV0dXJuICh1MzIgKikoYmZpX2ltYWdlX2NiICsgb2ZmKTsgfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDAxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpAQCAtMCwwICsxLDEyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9pbS5jIExpbnV4IGRyaXZlciBJTSBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgorI2luY2x1ZGUgImJmYWRfdHJjbW9kLmgiCisjaW5jbHVkZSAiYmZhX2NiX2lvaW1fbWFjcm9zLmgiCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfZmNwaW0uaD4KKworQkZBX1RSQ19GSUxFKExEUlYsIElNKTsKKworREVGSU5FX0lEUihiZmFkX2ltX3BvcnRfaW5kZXgpOworc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworc3RhdGljIHZvaWQgYmZhZF9pbV9pdG5pbV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgYmZhZF9pbV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21uZCwKKwkJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworc3RhdGljIGludCBiZmFkX2ltX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2RvbmUodm9pZCAqZHJ2LCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJCWVudW0gYmZpX2lvaW1fc3RhdHVzIGlvX3N0YXR1cywgdTggc2NzaV9zdGF0dXMsCisJCQlpbnQgc25zX2xlbiwgdTggKnNuc19pbmZvLCBzMzIgcmVzaWR1ZSkKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gZHJ2OworCXN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqaXRuaW1fZGF0YTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbTsKKworCXN3aXRjaCAoaW9fc3RhdHVzKSB7CisJY2FzZSBCRklfSU9JTV9TVFNfT0s6CisJCWJmYV90cmMoYmZhZCwgc2NzaV9zdGF0dXMpOworCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9PSywgc2NzaV9zdGF0dXMpOworCQlzY3NpX3NldF9yZXNpZChjbW5kLCAwKTsKKworCQlpZiAoc25zX2xlbiA+IDApIHsKKwkJCWJmYV90cmMoYmZhZCwgc25zX2xlbik7CisJCQlpZiAoc25zX2xlbiA+IFNDU0lfU0VOU0VfQlVGRkVSU0laRSkKKwkJCQlzbnNfbGVuID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCQkJbWVtY3B5KGNtbmQtPnNlbnNlX2J1ZmZlciwgc25zX2luZm8sIHNuc19sZW4pOworCQl9CisJCWlmIChyZXNpZHVlID4gMCkKKwkJCXNjc2lfc2V0X3Jlc2lkKGNtbmQsIHJlc2lkdWUpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX0FCT1JURUQ6CisJY2FzZSBCRklfSU9JTV9TVFNfVElNRURPVVQ6CisJY2FzZSBCRklfSU9JTV9TVFNfUEFUSFRPVjoKKwlkZWZhdWx0OgorCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9FUlJPUiwgMCk7CisJfQorCisJLyogVW5tYXAgRE1BLCBpZiBob3N0IGlzIE5VTEwsIGl0IG1lYW5zIGEgc2NzaSBwYXNzdGhydSBjbWQgKi8KKwlpZiAoY21uZC0+ZGV2aWNlLT5ob3N0ICE9IE5VTEwpCisJCXNjc2lfZG1hX3VubWFwKGNtbmQpOworCisJY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CisJYmZhX3RyYyhiZmFkLCBjbW5kLT5yZXN1bHQpOworCisJaXRuaW1fZGF0YSA9IGNtbmQtPmRldmljZS0+aG9zdGRhdGE7CisJaWYgKGl0bmltX2RhdGEpIHsKKwkJaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwkJaWYgKCFjbW5kLT5yZXN1bHQgJiYgaXRuaW0gJiYKKwkJCSAoYmZhX2x1bl9xdWV1ZV9kZXB0aCA+IGNtbmQtPmRldmljZS0+cXVldWVfZGVwdGgpKSB7CisJCQkvKiBRdWV1ZSBkZXB0aCBhZGp1c3RtZW50IGZvciBnb29kIHN0YXR1cyBjb21wbGV0aW9uICovCisJCQliZmFkX29zX3JhbXBfdXBfcWRlcHRoKGl0bmltLCBjbW5kLT5kZXZpY2UpOworCQl9IGVsc2UgaWYgKGNtbmQtPnJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMICYmIGl0bmltKSB7CisJCQkvKiBxZnVsbCBoYW5kbGluZyAqLworCQkJYmZhZF9vc19oYW5kbGVfcWZ1bGwoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCX0KKwl9CisKKwljbW5kLT5zY3NpX2RvbmUoY21uZCk7Cit9CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2dvb2RfY29tcCh2b2lkICpkcnYsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW07CisKKwljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9PSywgU0NTSV9TVEFUVVNfR09PRCk7CisKKwkvKiBVbm1hcCBETUEsIGlmIGhvc3QgaXMgTlVMTCwgaXQgbWVhbnMgYSBzY3NpIHBhc3N0aHJ1IGNtZCAqLworCWlmIChjbW5kLT5kZXZpY2UtPmhvc3QgIT0gTlVMTCkKKwkJc2NzaV9kbWFfdW5tYXAoY21uZCk7CisKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKworCS8qIFF1ZXVlIGRlcHRoIGFkanVzdG1lbnQgKi8KKwlpZiAoYmZhX2x1bl9xdWV1ZV9kZXB0aCA+IGNtbmQtPmRldmljZS0+cXVldWVfZGVwdGgpIHsKKwkJaXRuaW1fZGF0YSA9IGNtbmQtPmRldmljZS0+aG9zdGRhdGE7CisJCWlmIChpdG5pbV9kYXRhKSB7CisJCQlpdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCQkJaWYgKGl0bmltKQorCQkJCWJmYWRfb3NfcmFtcF91cF9xZGVwdGgoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCX0KKwl9CisKKwljbW5kLT5zY3NpX2RvbmUoY21uZCk7Cit9CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmRydiwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGRydjsKKworCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0VSUk9SLCAwKTsKKworCS8qIFVubWFwIERNQSwgaWYgaG9zdCBpcyBOVUxMLCBpdCBtZWFucyBhIHNjc2kgcGFzc3RocnUgY21kICovCisJaWYgKGNtbmQtPmRldmljZS0+aG9zdCAhPSBOVUxMKQorCQlzY3NpX2RtYV91bm1hcChjbW5kKTsKKworCWJmYV90cmMoYmZhZCwgY21uZC0+cmVzdWx0KTsKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKK30KKwordm9pZAorYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqYmZhZCwgc3RydWN0IGJmYWRfdHNraW1fcyAqZHRzaywKKwkJICAgZW51bSBiZmlfdHNraW1fc3RhdHVzIHRza19zdGF0dXMpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZHRzazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CisKKwljbW5kLT5TQ3AuU3RhdHVzIHw9IHRza19zdGF0dXMgPDwgMTsKKwlzZXRfYml0KElPX0RPTkVfQklULCAodW5zaWduZWQgbG9uZyAqKSZjbW5kLT5TQ3AuU3RhdHVzKTsKKwl3cSA9ICh3YWl0X3F1ZXVlX2hlYWRfdCAqKSBjbW5kLT5TQ3AucHRyOworCWNtbmQtPlNDcC5wdHIgPSBOVUxMOworCisJaWYgKHdxKQorCQl3YWtlX3VwKHdxKTsKK30KKwordm9pZAorYmZhX2NiX2lvaW1fcmVzZnJlZSh2b2lkICpkcnYpCit7Cit9CisKKy8qKgorICogIFNjc2lfSG9zdF90ZW1wbGF0ZSBTQ1NJIGhvc3QgdGVtcGxhdGUKKyAqLworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHJldHVybnMgQkZBRCBQQ0kgaW5mby4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorYmZhZF9pbV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0YXRpYyBjaGFyICAgICBiZmFfYnVmWzI1Nl07CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCisJbWVtc2V0KGJmYV9idWYsIDAsIHNpemVvZihiZmFfYnVmKSk7CisJc25wcmludGYoYmZhX2J1Ziwgc2l6ZW9mKGJmYV9idWYpLAorCQkgIkJyb2NhZGUgRkMvRkNPRSBBZGFwdGVyLCAiICJtb2RlbDogJXMgaHdwYXRoOiAlcyBkcml2ZXI6ICVzIiwKKwkJIGlvY19hdHRyLmFkYXB0ZXJfYXR0ci5tb2RlbCwgYmZhZC0+cGNpX25hbWUsCisJCSBCRkFEX0RSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gYmZhX2J1ZjsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIGFib3J0cyB0aGUgc3BlY2lmaWVkIFNDU0kgY29tbWFuZC4KKyAqCisgKiBSZXR1cm5zOiBTVUNDRVNTIG9yIEZBSUxFRC4KKyAqLworc3RhdGljIGludAorYmZhZF9pbV9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbW5kLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2ltX3MgKmhhbF9pbzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJdTMyICAgICAgICB0aW1lb3V0OworCWludCAgICAgICAgICAgICByYyA9IEZBSUxFRDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwloYWxfaW8gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgY21uZC0+aG9zdF9zY3JpYmJsZTsKKwlpZiAoIWhhbF9pbykgeworCQkvKiBJTyBoYXMgYmVlbiBjb21wbGV0ZWQsIHJldHJ1biBzdWNjZXNzICovCisJCXJjID0gU1VDQ0VTUzsKKwkJZ290byBvdXQ7CisJfQorCWlmIChoYWxfaW8tPmRpbyAhPSAoc3RydWN0IGJmYWRfaW9pbV9zICopIGNtbmQpIHsKKwkJcmMgPSBGQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCWJmYV90cmMoYmZhZCwgaGFsX2lvLT5pb3RhZyk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfU0NTSV9BQk9SVCwKKwkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sIGNtbmQsIGhhbF9pby0+aW90YWcpOworCWJmYV9pb2ltX2Fib3J0KGhhbF9pbyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwkvKiBOZWVkIHRvIHdhaXQgdW50aWwgdGhlIGNvbW1hbmQgZ2V0IGFib3J0ZWQgKi8KKwl0aW1lb3V0ID0gMTA7CisJd2hpbGUgKChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBjbW5kLT5ob3N0X3NjcmliYmxlID09IGhhbF9pbykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCWlmICh0aW1lb3V0IDwgNCAqIEhaKQorCQkJdGltZW91dCAqPSAyOworCX0KKworCWNtbmQtPnNjc2lfZG9uZShjbW5kKTsKKwliZmFfdHJjKGJmYWQsIGhhbF9pby0+aW90YWcpOworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlRfQ09NUCwKKwkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sIGNtbmQsIGhhbF9pby0+aW90YWcpOworCXJldHVybiBTVUNDRVNTOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhZF9pbV90YXJnZXRfcmVzZXRfc2VuZChzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kLAorCQkgICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJc3RydWN0IGJmYV9pdG5pbV9zICpiZmFfaXRuaW07CisJYmZhX3N0YXR1c190ICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKworCWJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW0tPmZjc19pdG5pbSk7CisJdHNraW0gPSBiZmFfdHNraW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX3Rza2ltX3MgKikgY21uZCk7CisJaWYgKCF0c2tpbSkgeworCQlCRkFfREVWX1BSSU5URihiZmFkLCBCRkFfRVJSLAorCQkJICAgICAgICJ0YXJnZXQgcmVzZXQsIGZhaWwgdG8gYWxsb2NhdGUgdHNraW1cbiIpOworCQlyYyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFNldCBob3N0X3NjcmliYmxlIHRvIE5VTEwgdG8gYXZvaWQgYWJvcnRpbmcgYSB0YXNrIGNvbW1hbmQgaWYKKwkgKiBoYXBwZW5zLgorCSAqLworCWNtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOworCWNtbmQtPlNDcC5TdGF0dXMgPSAwOworCWJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW0tPmZjc19pdG5pbSk7CisJYmZhX3Rza2ltX3N0YXJ0KHRza2ltLCBiZmFfaXRuaW0sIChsdW5fdCkwLAorCQkJICAgIEZDUF9UTV9UQVJHRVRfUkVTRVQsIEJGQURfVEFSR0VUX1JFU0VUX1RNTyk7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeSwgcmVzZXRzIGEgTFVOIGFuZCBhYm9ydCBpdHMgYWxsIGNvbW1hbmRzLgorICoKKyAqIFJldHVybnM6IFNVQ0NFU1Mgb3IgRkFJTEVELgorICoKKyAqLworc3RhdGljIGludAorYmZhZF9pbV9yZXNldF9sdW5faGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY21uZC0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGEgPSBjbW5kLT5kZXZpY2UtPmhvc3RkYXRhOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltOworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKKwlpbnQgICAgICAgICAgICAgcmMgPSBTVUNDRVNTOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwllbnVtIGJmaV90c2tpbV9zdGF0dXMgdGFza19zdGF0dXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwlpZiAoIWl0bmltKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlyYyA9IEZBSUxFRDsKKwkJZ290byBvdXQ7CisJfQorCisJdHNraW0gPSBiZmFfdHNraW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX3Rza2ltX3MgKikgY21uZCk7CisJaWYgKCF0c2tpbSkgeworCQlCRkFfREVWX1BSSU5URihiZmFkLCBCRkFfRVJSLAorCQkJCSJMVU4gcmVzZXQsIGZhaWwgdG8gYWxsb2NhdGUgdHNraW0iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXJjID0gRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwkvKioKKwkgKiBTZXQgaG9zdF9zY3JpYmJsZSB0byBOVUxMIHRvIGF2b2lkIGFib3J0aW5nIGEgdGFzayBjb21tYW5kCisJICogaWYgaGFwcGVucy4KKwkgKi8KKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKwljbW5kLT5TQ3AucHRyID0gKGNoYXIgKikmd3E7CisJY21uZC0+U0NwLlN0YXR1cyA9IDA7CisJYmZhX2l0bmltID0gYmZhX2Zjc19pdG5pbV9nZXRfaGFsaXRuKCZpdG5pbS0+ZmNzX2l0bmltKTsKKwliZmFfdHNraW1fc3RhcnQodHNraW0sIGJmYV9pdG5pbSwKKwkJCSAgICBiZmFkX2ludF90b19sdW4oY21uZC0+ZGV2aWNlLT5sdW4pLAorCQkJICAgIEZDUF9UTV9MVU5fUkVTRVQsIEJGQURfTFVOX1JFU0VUX1RNTyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwl3YWl0X2V2ZW50KHdxLCB0ZXN0X2JpdChJT19ET05FX0JJVCwKKwkJCSh1bnNpZ25lZCBsb25nICopJmNtbmQtPlNDcC5TdGF0dXMpKTsKKworCXRhc2tfc3RhdHVzID0gY21uZC0+U0NwLlN0YXR1cyA+PiAxOworCWlmICh0YXNrX3N0YXR1cyAhPSBCRklfVFNLSU1fU1RTX09LKSB7CisJCUJGQV9ERVZfUFJJTlRGKGJmYWQsIEJGQV9FUlIsICJMVU4gcmVzZXQgZmFpbHVyZSwgc3RhdHVzOiAlZFxuIiwKKwkJCSAgICAgICB0YXNrX3N0YXR1cyk7CisJCXJjID0gRkFJTEVEOworCX0KKworb3V0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHJlc2V0cyB0aGUgYnVzIGFuZCBhYm9ydCBhbGwgY29tbWFuZHMuCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fcmVzZXRfYnVzX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNtbmQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJdTMyICAgICAgICBpLCByYywgZXJyX2NudCA9IDA7CisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod3EpOworCWVudW0gYmZpX3Rza2ltX3N0YXR1cyB0YXNrX3N0YXR1czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZDUF9UQVJHRVQ7IGkrKykgeworCQlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIGkpOworCQlpZiAoaXRuaW0pIHsKKwkJCWNtbmQtPlNDcC5wdHIgPSAoY2hhciAqKSZ3cTsKKwkJCXJjID0gYmZhZF9pbV90YXJnZXRfcmVzZXRfc2VuZChiZmFkLCBjbW5kLCBpdG5pbSk7CisJCQlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykgeworCQkJCWVycl9jbnQrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogd2FpdCB0YXJnZXQgcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQkJd2FpdF9ldmVudCh3cSwgdGVzdF9iaXQoSU9fRE9ORV9CSVQsCisJCQkJCSh1bnNpZ25lZCBsb25nICopJmNtbmQtPlNDcC5TdGF0dXMpKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCQkJdGFza19zdGF0dXMgPSBjbW5kLT5TQ3AuU3RhdHVzID4+IDE7CisJCQlpZiAodGFza19zdGF0dXMgIT0gQkZJX1RTS0lNX1NUU19PSykgeworCQkJCUJGQV9ERVZfUFJJTlRGKGJmYWQsIEJGQV9FUlIsCisJCQkJCSJ0YXJnZXQgcmVzZXQgZmFpbHVyZSwiCisJCQkJCSIgc3RhdHVzOiAlZFxuIiwgdGFza19zdGF0dXMpOworCQkJCWVycl9jbnQrKzsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmIChlcnJfY250KQorCQlyZXR1cm4gRkFJTEVEOworCisJcmV0dXJuIFNVQ0NFU1M7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5IHNsYXZlX2Rlc3Ryb3kuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKKwlyZXR1cm47Cit9CisKKy8qKgorICogIEJGQSBGQ1MgaXRuaW0gY2FsbGJhY2tzCisgKi8KKworLyoqCisgKiBCRkEgRkNTIGl0bmltIGFsbG9jIGNhbGxiYWNrLCBhZnRlciBzdWNjZXNzZnVsIFBSTEkKKyAqIENvbnRleHQ6IEludGVycnVwdAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX2FsbG9jKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKippdG5pbSwKKwkJICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKippdG5pbV9kcnYpCit7CisJKml0bmltX2RydiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX2l0bmltX3MpLCBHRlBfQVRPTUlDKTsKKwlpZiAoKml0bmltX2RydiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkoKml0bmltX2RydiktPmltID0gYmZhZC0+aW07CisJKml0bmltID0gJigqaXRuaW1fZHJ2KS0+ZmNzX2l0bmltOworCSgqaXRuaW1fZHJ2KS0+c3RhdGUgPSBJVE5JTV9TVEFURV9OT05FOworCisJLyoKKwkgKiBJbml0aWF6ZSB0aGUgaXRuaW1fd29yaworCSAqLworCUlOSVRfV09SSygmKCppdG5pbV9kcnYpLT5pdG5pbV93b3JrLCBiZmFkX2ltX2l0bmltX3dvcmtfaGFuZGxlcik7CisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX1JQT1JUX09OTElORTsKK30KKworLyoqCisgKiBCRkEgRkNTIGl0bmltIGZyZWUgY2FsbGJhY2suCisgKiBDb250ZXh0OiBJbnRlcnJ1cHQuIGJmYWRfbG9jayBpcyBoZWxkCisgKi8KK3ZvaWQKK2JmYV9mY2JfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0OworCXd3bl90IHd3cG47CisJdTMyIGZjaWQ7CisJY2hhciB3d3BuX3N0clszMl0sIGZjaWRfc3RyWzE2XTsKKworCS8qIG9ubGluZSB0byBmcmVlIHN0YXRlIHRyYW5zdGlvbiBzaG91bGQgbm90IGhhcHBlbiAqLworCWJmYV9hc3NlcnQoaXRuaW1fZHJ2LT5zdGF0ZSAhPSBJVE5JTV9TVEFURV9PTkxJTkUpOworCisJaXRuaW1fZHJ2LT5xdWV1ZV93b3JrID0gMTsKKwkvKiBvZmZsaW5lIHJlcXVlc3QgaXMgbm90IHlldCBkb25lLCB1c2UgdGhlIHNhbWUgcmVxdWVzdCB0byBmcmVlICovCisJaWYgKGl0bmltX2Rydi0+c3RhdGUgPT0gSVROSU1fU1RBVEVfT0ZGTElORV9QRU5ESU5HKQorCQlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAwOworCisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX0ZSRUU7CisJcG9ydCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2RydnBvcnQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwlpdG5pbV9kcnYtPmltX3BvcnQgPSBwb3J0LT5pbV9wb3J0OworCXd3cG4gPSBiZmFfZmNzX2l0bmltX2dldF9wd3duKCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJZmNpZCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwlmY2lkMnN0cihmY2lkX3N0ciwgZmNpZCk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfSVROSU1fRlJFRSwKKwkJcG9ydC0+aW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sCisJCWZjaWRfc3RyLCB3d3BuX3N0cik7CisJYmZhZF9vc19pdG5pbV9wcm9jZXNzKGl0bmltX2Rydik7Cit9CisKKy8qKgorICogQkZBIEZDUyBpdG5pbSBvbmxpbmUgY2FsbGJhY2suCisgKiBDb250ZXh0OiBJbnRlcnJ1cHQuIGJmYWRfbG9jayBpcyBoZWxkCisgKi8KK3ZvaWQKK2JmYV9mY2JfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisKKwlpdG5pbV9kcnYtPmJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW1fZHJ2LT5mY3NfaXRuaW0pOworCXBvcnQgPSBiZmFfZmNzX2l0bmltX2dldF9kcnZwb3J0KCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX09OTElORTsKKwlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAxOworCWl0bmltX2Rydi0+aW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisJYmZhZF9vc19pdG5pbV9wcm9jZXNzKGl0bmltX2Rydik7Cit9CisKKy8qKgorICogQkZBIEZDUyBpdG5pbSBvZmZsaW5lIGNhbGxiYWNrLgorICogQ29udGV4dDogSW50ZXJydXB0LiBiZmFkX2xvY2sgaXMgaGVsZAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX29mZmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KQoreworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCisJcG9ydCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2RydnBvcnQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwliZmFkID0gcG9ydC0+YmZhZDsKKwlpZiAoKGJmYWQtPnBwb3J0LmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkgfHwKKwkJIChwb3J0LT5mbGFncyAmIEJGQURfUE9SVF9ERUxFVEUpKSB7CisJCWl0bmltX2Rydi0+c3RhdGUgPSBJVE5JTV9TVEFURV9PRkZMSU5FOworCQlyZXR1cm47CisJfQorCWl0bmltX2Rydi0+aW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX09GRkxJTkVfUEVORElORzsKKwlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAxOworCWJmYWRfb3NfaXRuaW1fcHJvY2VzcyhpdG5pbV9kcnYpOworfQorCisvKioKKyAqIEJGQSBGQ1MgaXRuaW0gdGltZW91dCBjYWxsYmFjay4KKyAqIENvbnRleHQ6IEludGVycnVwdC4gYmZhZF9sb2NrIGlzIGhlbGQKKyAqLwordm9pZCBiZmFfZmNiX2l0bmltX3RvdihzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSkKK3sKKwlpdG5pbS0+c3RhdGUgPSBJVE5JTV9TVEFURV9USU1FT1VUOworfQorCisvKioKKyAqIFBhdGggVE9WIHByb2Nlc3NpbmcgYmVnaW4gbm90aWZpY2F0aW9uIC0tIGR1bW15IGZvciBsaW51eAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX3Rvdl9iZWdpbihzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSkKK3sKK30KKworCisKKy8qKgorICogQWxsb2NhdGUgYSBTY3NpX0hvc3QgZm9yIGEgcG9ydC4KKyAqLworaW50CitiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJaW50IGVycm9yID0gMTsKKworCWlmICghaWRyX3ByZV9nZXQoJmJmYWRfaW1fcG9ydF9pbmRleCwgR0ZQX0tFUk5FTCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRyX3ByZV9nZXQgZmFpbHVyZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gaWRyX2dldF9uZXcoJmJmYWRfaW1fcG9ydF9pbmRleCwgaW1fcG9ydCwKKwkJCQkJICZpbV9wb3J0LT5pZHJfaWQpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpZHJfZ2V0X25ldyBmYWlsdXJlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaW1fcG9ydC0+c2hvc3QgPSBiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhpbV9wb3J0LCBiZmFkKTsKKwlpZiAoIWltX3BvcnQtPnNob3N0KSB7CisJCWVycm9yID0gMTsKKwkJZ290byBvdXRfZnJlZV9pZHI7CisJfQorCisJaW1fcG9ydC0+c2hvc3QtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpaW1fcG9ydDsKKwlpbV9wb3J0LT5zaG9zdC0+dW5pcXVlX2lkID0gaW1fcG9ydC0+aWRyX2lkOworCWltX3BvcnQtPnNob3N0LT50aGlzX2lkID0gLTE7CisJaW1fcG9ydC0+c2hvc3QtPm1heF9pZCA9IE1BWF9GQ1BfVEFSR0VUOworCWltX3BvcnQtPnNob3N0LT5tYXhfbHVuID0gTUFYX0ZDUF9MVU47CisJaW1fcG9ydC0+c2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CisJaW1fcG9ydC0+c2hvc3QtPmNhbl9xdWV1ZSA9IGJmYWQtPmNmZ19kYXRhLmlvY19xdWV1ZV9kZXB0aDsKKwlpbV9wb3J0LT5zaG9zdC0+dHJhbnNwb3J0dCA9IGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CisKKwllcnJvciA9IGJmYWRfb3Nfc2NzaV9hZGRfaG9zdChpbV9wb3J0LT5zaG9zdCwgaW1fcG9ydCwgYmZhZCk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfb3Nfc2NzaV9hZGRfaG9zdCBmYWlsdXJlICVkXG4iLAorCQkJCQkJCWVycm9yKTsKKwkJZ290byBvdXRfZmNfcmVsOworCX0KKworCS8qIHNldHVwIGhvc3QgZml4ZWQgYXR0cmlidXRlIGlmIHRoZSBsayBzdXBwb3J0cyAqLworCWJmYWRfb3NfZmNfaG9zdF9pbml0KGltX3BvcnQpOworCisJcmV0dXJuIDA7CisKK291dF9mY19yZWw6CisJc2NzaV9ob3N0X3B1dChpbV9wb3J0LT5zaG9zdCk7CitvdXRfZnJlZV9pZHI6CisJaWRyX3JlbW92ZSgmYmZhZF9pbV9wb3J0X2luZGV4LCBpbV9wb3J0LT5pZHJfaWQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKwordm9pZAorYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWJmYV90cmMoYmZhZCwgYmZhZC0+aW5zdF9ubyk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfU0NTSV9IT1NUX0ZSRUUsCisJCQlpbV9wb3J0LT5zaG9zdC0+aG9zdF9ubyk7CisKKwlmY19yZW1vdmVfaG9zdChpbV9wb3J0LT5zaG9zdCk7CisKKwlzY3NpX3JlbW92ZV9ob3N0KGltX3BvcnQtPnNob3N0KTsKKwlzY3NpX2hvc3RfcHV0KGltX3BvcnQtPnNob3N0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZHJfcmVtb3ZlKCZiZmFkX2ltX3BvcnRfaW5kZXgsIGltX3BvcnQtPmlkcl9pZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ltX3BvcnRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MsIHBvcnRfZGVsZXRlX3dvcmspOworCisJYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShpbV9wb3J0LT5iZmFkLCBpbV9wb3J0KTsKKwliZmFkX2ltX3BvcnRfY2xlYW4oaW1fcG9ydCk7CisJa2ZyZWUoaW1fcG9ydCk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9pbV9wb3J0X25ldyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisKKwlpbV9wb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfaW1fcG9ydF9zKSwgR0ZQX0FUT01JQyk7CisJaWYgKGltX3BvcnQgPT0gTlVMTCkgeworCQlyYyA9IEJGQV9TVEFUVVNfRU5PTUVNOworCQlnb3RvIGV4dDsKKwl9CisJcG9ydC0+aW1fcG9ydCA9IGltX3BvcnQ7CisJaW1fcG9ydC0+cG9ydCA9IHBvcnQ7CisJaW1fcG9ydC0+YmZhZCA9IGJmYWQ7CisKKwlJTklUX1dPUksoJmltX3BvcnQtPnBvcnRfZGVsZXRlX3dvcmssIGJmYWRfaW1fcG9ydF9kZWxldGVfaGFuZGxlcik7CisJSU5JVF9MSVNUX0hFQUQoJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW1fcG9ydC0+YmluZGluZ19saXN0KTsKKworZXh0OgorCXJldHVybiByYzsKK30KKwordm9pZAorYmZhZF9pbV9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0gcG9ydC0+aW1fcG9ydDsKKworCXF1ZXVlX3dvcmsoYmZhZC0+aW0tPmRydl93b3JrcSwKKwkJCQkmaW1fcG9ydC0+cG9ydF9kZWxldGVfd29yayk7Cit9CisKK3ZvaWQKK2JmYWRfaW1fcG9ydF9jbGVhbihzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJc3RydWN0IGJmYWRfZmNwX2JpbmRpbmcgKmJwLCAqYnBfbmV3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9ICBpbV9wb3J0LT5iZmFkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicCwgYnBfbmV3LCAmaW1fcG9ydC0+YmluZGluZ19saXN0LAorCQkJCQlsaXN0X2VudHJ5KSB7CisJCWxpc3RfZGVsKCZicC0+bGlzdF9lbnRyeSk7CisJCWtmcmVlKGJwKTsKKwl9CisKKwkvKiB0aGUgaXRuaW1fbWFwcGVkX2xpc3QgbXVzdCBiZSBlbXB0eSBhdCB0aGlzIHRpbWUgKi8KKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0KSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZAorYmZhZF9pbV9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7Cit9CisKK3ZvaWQKK2JmYWRfaW1fcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCkKK3sKK30KKworYmZhX3N0YXR1c190CitiZmFkX2ltX3Byb2JlKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IGJmYWRfaW1fcyAgICAgICppbTsKKwliZmFfc3RhdHVzX3QgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCisJaW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhZF9pbV9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGltID09IE5VTEwpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJZ290byBleHQ7CisJfQorCisJYmZhZC0+aW0gPSBpbTsKKwlpbS0+YmZhZCA9IGJmYWQ7CisKKwlpZiAoYmZhZF9vc190aHJlYWRfd29ya3EoYmZhZCkgIT0gQkZBX1NUQVRVU19PSykgeworCQlrZnJlZShpbSk7CisJCXJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJfQorCitleHQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX2ltX3Byb2JlX3VuZG8oc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoYmZhZC0+aW0pIHsKKwkJYmZhZF9vc19kZXN0cm95X3dvcmtxKGJmYWQtPmltKTsKKwkJa2ZyZWUoYmZhZC0+aW0pOworCQliZmFkLT5pbSA9IE5VTEw7CisJfQorfQorCisKKworCitpbnQKK2JmYWRfb3Nfc2NzaV9hZGRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LAorCQkJc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKyAgICBpZiAoaW1fcG9ydC0+cG9ydC0+cHZiX3R5cGUgPT0gQkZBRF9QT1JUX1BIWVNfQkFTRSkKKwkJZGV2ID0gJmJmYWQtPnBjaWRldi0+ZGV2OworICAgIGVsc2UKKwkJZGV2ID0gJmJmYWQtPnBwb3J0LmltX3BvcnQtPnNob3N0LT5zaG9zdF9nZW5kZXY7CisKKyAgICByZXR1cm4gc2NzaV9hZGRfaG9zdChzaG9zdCwgZGV2KTsKK30KKworc3RydWN0IFNjc2lfSG9zdCAqCitiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0OworCisJaWYgKGltX3BvcnQtPnBvcnQtPnB2Yl90eXBlID09IEJGQURfUE9SVF9QSFlTX0JBU0UpCisJCXNodCA9ICZiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZTsKKwllbHNlCisJCXNodCA9ICZiZmFkX2ltX3Zwb3J0X3RlbXBsYXRlOworCisJc2h0LT5zZ190YWJsZXNpemUgPSBiZmFkLT5jZmdfZGF0YS5pb19tYXhfc2dlOworCisJcmV0dXJuIHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Cit9CisKK3ZvaWQKK2JmYWRfb3Nfc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQoreworCWZsdXNoX3dvcmtxdWV1ZShiZmFkLT5pbS0+ZHJ2X3dvcmtxKTsKKwliZmFkX2ltX3Njc2lfaG9zdF9mcmVlKGltX3BvcnQtPmJmYWQsIGltX3BvcnQpOworCWJmYWRfaW1fcG9ydF9jbGVhbihpbV9wb3J0KTsKKwlrZnJlZShpbV9wb3J0KTsKK30KKwordm9pZAorYmZhZF9vc19kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKQoreworCWlmIChpbSAmJiBpbS0+ZHJ2X3dvcmtxKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGltLT5kcnZfd29ya3EpOworCQlpbS0+ZHJ2X3dvcmtxID0gTlVMTDsKKwl9Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9vc190aHJlYWRfd29ya3Eoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9zICAgICAgKmltID0gYmZhZC0+aW07CisKKwliZmFfdHJjKGJmYWQsIDApOworCXNucHJpbnRmKGltLT5kcnZfd29ya3FfbmFtZSwgQkZBRF9LT0JKX05BTUVfTEVOLCAiYmZhZF93cV8lZCIsCisJCSBiZmFkLT5pbnN0X25vKTsKKwlpbS0+ZHJ2X3dvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaW0tPmRydl93b3JrcV9uYW1lKTsKKwlpZiAoIWltLT5kcnZfd29ya3EpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE9TIGVudHJ5IHBvaW50IHRvIGFkanVzdCB0aGUgcXVldWVfZGVwdGhzIG9uIGEgcGVyLWRldmljZSBiYXNpcy4KKyAqIENhbGxlZCBvbmNlIHBlciBkZXZpY2UgZHVyaW5nIHRoZSBidXMgc2Nhbi4KKyAqIFJldHVybiBub24temVybyBpZiBmYWlscy4KKyAqLworc3RhdGljIGludAorYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBiZmFfbHVuX3F1ZXVlX2RlcHRoKTsKKwllbHNlCisJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgYmZhX2x1bl9xdWV1ZV9kZXB0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZSA9IHsKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBCRkFEX0RSSVZFUl9OQU1FLAorCS5pbmZvID0gYmZhZF9pbV9pbmZvLAorCS5xdWV1ZWNvbW1hbmQgPSBiZmFkX2ltX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlciA9IGJmYWRfaW1fYWJvcnRfaGFuZGxlciwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBiZmFkX2ltX3Jlc2V0X2x1bl9oYW5kbGVyLAorCS5laF9idXNfcmVzZXRfaGFuZGxlciA9IGJmYWRfaW1fcmVzZXRfYnVzX2hhbmRsZXIsCisKKwkuc2xhdmVfYWxsb2MgPSBiZmFkX2ltX3NsYXZlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUgPSBiZmFkX2ltX3NsYXZlX2NvbmZpZ3VyZSwKKwkuc2xhdmVfZGVzdHJveSA9IGJmYWRfaW1fc2xhdmVfZGVzdHJveSwKKworCS50aGlzX2lkID0gLTEsCisJLnNnX3RhYmxlc2l6ZSA9IEJGQURfSU9fTUFYX1NHRSwKKwkuY21kX3Blcl9sdW4gPSAzLAorCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5zaG9zdF9hdHRycyA9IGJmYWRfaW1faG9zdF9hdHRycywKKwkubWF4X3NlY3RvcnMgPSAweEZGRkYsCit9OworCitzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fdnBvcnRfdGVtcGxhdGUgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gQkZBRF9EUklWRVJfTkFNRSwKKwkuaW5mbyA9IGJmYWRfaW1faW5mbywKKwkucXVldWVjb21tYW5kID0gYmZhZF9pbV9xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIgPSBiZmFkX2ltX2Fib3J0X2hhbmRsZXIsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gYmZhZF9pbV9yZXNldF9sdW5faGFuZGxlciwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBiZmFkX2ltX3Jlc2V0X2J1c19oYW5kbGVyLAorCisJLnNsYXZlX2FsbG9jID0gYmZhZF9pbV9zbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlID0gYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUsCisJLnNsYXZlX2Rlc3Ryb3kgPSBiZmFkX2ltX3NsYXZlX2Rlc3Ryb3ksCisKKwkudGhpc19pZCA9IC0xLAorCS5zZ190YWJsZXNpemUgPSBCRkFEX0lPX01BWF9TR0UsCisJLmNtZF9wZXJfbHVuID0gMywKKwkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKKwkuc2hvc3RfYXR0cnMgPSBiZmFkX2ltX3Zwb3J0X2F0dHJzLAorCS5tYXhfc2VjdG9ycyA9IDB4RkZGRiwKK307CisKK3ZvaWQKK2JmYWRfaW1fcHJvYmVfcG9zdChzdHJ1Y3QgYmZhZF9pbV9zICppbSkKK3sKKwlmbHVzaF93b3JrcXVldWUoaW0tPmRydl93b3JrcSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9pbV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgPQorCQlmY19hdHRhY2hfdHJhbnNwb3J0KCZiZmFkX2ltX2ZjX2Z1bmN0aW9uX3RlbXBsYXRlKTsKKwlpZiAoIWJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpCisJCXJldHVybiBCRkFfU1RBVFVTX0VOT01FTTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFkX2ltX21vZHVsZV9leGl0KHZvaWQpCit7CisJaWYgKGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpCisJCWZjX3JlbGVhc2VfdHJhbnNwb3J0KGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpOworfQorCit2b2lkCitiZmFkX29zX2l0bmltX3Byb2Nlc3Moc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KQoreworCXN0cnVjdCBiZmFkX2ltX3MgICAgICAqaW0gPSBpdG5pbV9kcnYtPmltOworCisJaWYgKGl0bmltX2Rydi0+cXVldWVfd29yaykKKwkJcXVldWVfd29yayhpbS0+ZHJ2X3dvcmtxLCAmaXRuaW1fZHJ2LT5pdG5pbV93b3JrKTsKK30KKwordm9pZAorYmZhZF9vc19yYW1wX3VwX3FkZXB0aChzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqdG1wX3NkZXY7CisKKwlpZiAoKChqaWZmaWVzIC0gaXRuaW0tPmxhc3RfcmFtcF91cF90aW1lKSA+CisJCUJGQV9RVUVVRV9GVUxMX1JBTVBfVVBfVElNRSAqIEhaKSAmJgorCQkoKGppZmZpZXMgLSBpdG5pbS0+bGFzdF9xdWV1ZV9mdWxsX3RpbWUpID4KKwkJQkZBX1FVRVVFX0ZVTExfUkFNUF9VUF9USU1FICogSFopKSB7CisJCXNob3N0X2Zvcl9lYWNoX2RldmljZSh0bXBfc2Rldiwgc2Rldi0+aG9zdCkgeworCQkJaWYgKGJmYV9sdW5fcXVldWVfZGVwdGggPiB0bXBfc2Rldi0+cXVldWVfZGVwdGgpIHsKKwkJCQlpZiAodG1wX3NkZXYtPmlkICE9IHNkZXYtPmlkKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAodG1wX3NkZXYtPm9yZGVyZWRfdGFncykKKwkJCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgodG1wX3NkZXYsCisJCQkJCQlNU0dfT1JERVJFRF9UQUcsCisJCQkJCQl0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKKwkJCQllbHNlCisJCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHRtcF9zZGV2LAorCQkJCQkJTVNHX1NJTVBMRV9UQUcsCisJCQkJCQl0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKKworCQkJCWl0bmltLT5sYXN0X3JhbXBfdXBfdGltZSA9IGppZmZpZXM7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQKK2JmYWRfb3NfaGFuZGxlX3FmdWxsKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKKworCWl0bmltLT5sYXN0X3F1ZXVlX2Z1bGxfdGltZSA9IGppZmZpZXM7CisKKwlzaG9zdF9mb3JfZWFjaF9kZXZpY2UodG1wX3NkZXYsIHNkZXYtPmhvc3QpIHsKKwkJaWYgKHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCkKKwkJCWNvbnRpbnVlOworCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwodG1wX3NkZXYsIHRtcF9zZGV2LT5xdWV1ZV9kZXB0aCAtIDEpOworCX0KK30KKworCisKKworc3RydWN0IGJmYWRfaXRuaW1fcyAqCitiZmFkX29zX2dldF9pdG5pbShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIGludCBpZCkKK3sKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKKworCS8qIFNlYXJjaCB0aGUgbWFwcGVkIGxpc3QgZm9yIHRoaXMgdGFyZ2V0IElEICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdG5pbSwgJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0LCBsaXN0X2VudHJ5KSB7CisJCWlmIChpZCA9PSBpdG5pbS0+c2NzaV90Z3RfaWQpCisJCQlyZXR1cm4gaXRuaW07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5IHNsYXZlX2FsbG9jCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNkZXYpKTsKKworCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQorCQlyZXR1cm4gLUVOWElPOworCisJc2Rldi0+aG9zdGRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKworCXJldHVybiAwOworfQorCit2b2lkCitiZmFkX29zX2ZjX2hvc3RfaW5pdChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGltX3BvcnQtPnNob3N0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKwl1bmlvbiBhdHRyIHsKKwkJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgcGF0dHI7CisJCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisJfSBhdHRyOworCisJZmNfaG9zdF9ub2RlX25hbWUoaG9zdCkgPQorCQliZmFfb3NfaHRvbmxsKChiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydC0+ZmNzX3BvcnQpKSk7CisJZmNfaG9zdF9wb3J0X25hbWUoaG9zdCkgPQorCQliZmFfb3NfaHRvbmxsKChiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydC0+ZmNzX3BvcnQpKSk7CisKKwlmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKGhvc3QpID0gRkNfQ09TX0NMQVNTMzsKKworCW1lbXNldChmY19ob3N0X3N1cHBvcnRlZF9mYzRzKGhvc3QpLCAwLAorCSAgICAgICBzaXplb2YoZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KSkpOworCWlmIChiZmFkX3N1cHBvcnRlZF9mYzRzICYgKEJGQV9QT1JUX1JPTEVfRkNQX0lNIHwgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pKQorCQkvKiBGb3IgRkNQIHR5cGUgMHgwOCAqLworCQlmY19ob3N0X3N1cHBvcnRlZF9mYzRzKGhvc3QpWzJdID0gMTsKKwlpZiAoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpCisJCS8qIEZvciBMTEMvU05BUCB0eXBlIDB4MDUgKi8KKwkJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVszXSA9IDB4MjA7CisJLyogRm9yIGZpYnJlIGNoYW5uZWwgc2VydmljZXMgdHlwZSAweDIwICovCisJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVs3XSA9IDE7CisKKwltZW1zZXQoJmF0dHIuaW9jX2F0dHIsIDAsIHNpemVvZihhdHRyLmlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyLmlvY19hdHRyKTsKKwlzcHJpbnRmKGZjX2hvc3Rfc3ltYm9saWNfbmFtZShob3N0KSwgIkJyb2NhZGUgJXMgRlYlcyBEViVzIiwKKwkJYXR0ci5pb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWwsCisJCWF0dHIuaW9jX2F0dHIuYWRhcHRlcl9hdHRyLmZ3X3ZlciwgQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgPSAwOworCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhob3N0KSB8PQorCQlGQ19QT1JUU1BFRURfOEdCSVQgfCBGQ19QT1JUU1BFRURfNEdCSVQgfCBGQ19QT1JUU1BFRURfMkdCSVQgfAorCQlGQ19QT1JUU1BFRURfMUdCSVQ7CisKKwltZW1zZXQoJmF0dHIucGF0dHIsIDAsIHNpemVvZihhdHRyLnBhdHRyKSk7CisJYmZhX3Bwb3J0X2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyLnBhdHRyKTsKKwlmY19ob3N0X21heGZyYW1lX3NpemUoaG9zdCkgPSBhdHRyLnBhdHRyLnBwb3J0X2NmZy5tYXhmcnNpemU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ltX2ZjX3Jwb3J0X2FkZChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBycG9ydF9pZHM7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGE7CisKKwlycG9ydF9pZHMubm9kZV9uYW1lID0KKwkJYmZhX29zX2h0b25sbChiZmFfZmNzX2l0bmltX2dldF9ud3duKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJcnBvcnRfaWRzLnBvcnRfbmFtZSA9CisJCWJmYV9vc19odG9ubGwoYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSkpOworCXJwb3J0X2lkcy5wb3J0X2lkID0KKwkJYmZhX29zX2h0b24zYihiZmFfZmNzX2l0bmltX2dldF9mY2lkKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJcnBvcnRfaWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOworCisJaXRuaW0tPmZjX3Jwb3J0ID0gZmNfcnBvcnQgPQorCQlmY19yZW1vdGVfcG9ydF9hZGQoaW1fcG9ydC0+c2hvc3QsIDAsICZycG9ydF9pZHMpOworCisJaWYgKCFmY19ycG9ydCkKKwkJcmV0dXJuOworCisJZmNfcnBvcnQtPm1heGZyYW1lX3NpemUgPQorCQliZmFfZmNzX2l0bmltX2dldF9tYXhmcnNpemUoJml0bmltLT5mY3NfaXRuaW0pOworCWZjX3Jwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IGJmYV9mY3NfaXRuaW1fZ2V0X2NvcygmaXRuaW0tPmZjc19pdG5pbSk7CisKKwlpdG5pbV9kYXRhID0gZmNfcnBvcnQtPmRkX2RhdGE7CisJaXRuaW1fZGF0YS0+aXRuaW0gPSBpdG5pbTsKKworCXJwb3J0X2lkcy5yb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7CisKKwlpZiAocnBvcnRfaWRzLnJvbGVzICE9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTikKKwkJZmNfcmVtb3RlX3BvcnRfcm9sZWNoZyhmY19ycG9ydCwgcnBvcnRfaWRzLnJvbGVzKTsKKworCWlmICgoZmNfcnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKQorCSAgICAmJiAoZmNfcnBvcnQtPnNjc2lfdGFyZ2V0X2lkIDwgTUFYX0ZDUF9UQVJHRVQpKQorCQlpdG5pbS0+c2NzaV90Z3RfaWQgPSBmY19ycG9ydC0+c2NzaV90YXJnZXRfaWQ7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogV29yayBxdWV1ZSBoYW5kbGVyIHVzaW5nIEZDIHRyYW5zcG9ydCBzZXJ2aWNlCisqIENvbnRleHQ6IGtlcm5lbAorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9pdG5pbV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJmYWRfaXRuaW1fcywKKwkJCQkJCQlpdG5pbV93b3JrKTsKKwlzdHJ1Y3QgYmZhZF9pbV9zICAgICAgKmltID0gaXRuaW0tPmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltLT5iZmFkOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwl3d25fdCB3d3BuOworCXUzMiBmY2lkOworCWNoYXIgd3dwbl9zdHJbMzJdLCBmY2lkX3N0clsxNl07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW1fcG9ydCA9IGl0bmltLT5pbV9wb3J0OworCWJmYV90cmMoYmZhZCwgaXRuaW0tPnN0YXRlKTsKKwlzd2l0Y2ggKGl0bmltLT5zdGF0ZSkgeworCWNhc2UgSVROSU1fU1RBVEVfT05MSU5FOgorCQlpZiAoIWl0bmltLT5mY19ycG9ydCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQliZmFkX2ltX2ZjX3Jwb3J0X2FkZChpbV9wb3J0LCBpdG5pbSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl3d3BuID0gYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSk7CisJCQlmY2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisJCQl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwkJCWZjaWQyc3RyKGZjaWRfc3RyLCBmY2lkKTsKKwkJCWxpc3RfYWRkX3RhaWwoJml0bmltLT5saXN0X2VudHJ5LAorCQkJCSZpbV9wb3J0LT5pdG5pbV9tYXBwZWRfbGlzdCk7CisJCQliZmFfbG9nKGJmYWQtPmxvZ21vZCwgQkZBX0xPR19MSU5VWF9JVE5JTV9PTkxJTkUsCisJCQkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sCisJCQkJaXRuaW0tPnNjc2lfdGd0X2lkLAorCQkJCWZjaWRfc3RyLCB3d3BuX3N0cik7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIiVzOiBpdG5pbSAlbGx4IGlzIGFscmVhZHkgaW4gb25saW5lIHN0YXRlXG4iLAorCQkJCV9fRlVOQ1RJT05fXywKKwkJCQliZmFfZmNzX2l0bmltX2dldF9wd3duKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJCX0KKworCQlicmVhazsKKwljYXNlIElUTklNX1NUQVRFX09GRkxJTkVfUEVORElORzoKKwkJaXRuaW0tPnN0YXRlID0gSVROSU1fU1RBVEVfT0ZGTElORTsKKwkJaWYgKGl0bmltLT5mY19ycG9ydCkgeworCQkJZmNfcnBvcnQgPSBpdG5pbS0+ZmNfcnBvcnQ7CisJCQkoKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKQorCQkJCWZjX3Jwb3J0LT5kZF9kYXRhKS0+aXRuaW0gPSBOVUxMOworCQkJaXRuaW0tPmZjX3Jwb3J0ID0gTlVMTDsKKwkJCWlmICghKGltX3BvcnQtPnBvcnQtPmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJCQlmY19ycG9ydC0+ZGV2X2xvc3NfdG1vID0KKwkJCQkJYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKSArIDE7CisJCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKGZjX3Jwb3J0KTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl9CisJCQl3d3BuID0gYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSk7CisJCQlmY2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisJCQl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwkJCWZjaWQyc3RyKGZjaWRfc3RyLCBmY2lkKTsKKwkJCWxpc3RfZGVsKCZpdG5pbS0+bGlzdF9lbnRyeSk7CisJCQliZmFfbG9nKGJmYWQtPmxvZ21vZCwgQkZBX0xPR19MSU5VWF9JVE5JTV9PRkZMSU5FLAorCQkJCWltX3BvcnQtPnNob3N0LT5ob3N0X25vLAorCQkJCWl0bmltLT5zY3NpX3RndF9pZCwKKwkJCQlmY2lkX3N0ciwgd3dwbl9zdHIpOworCQl9CisJCWJyZWFrOworCWNhc2UgSVROSU1fU1RBVEVfRlJFRToKKwkJaWYgKGl0bmltLT5mY19ycG9ydCkgeworCQkJZmNfcnBvcnQgPSBpdG5pbS0+ZmNfcnBvcnQ7CisJCQkoKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKQorCQkJCWZjX3Jwb3J0LT5kZF9kYXRhKS0+aXRuaW0gPSBOVUxMOworCQkJaXRuaW0tPmZjX3Jwb3J0ID0gTlVMTDsKKwkJCWlmICghKGltX3BvcnQtPnBvcnQtPmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJCQlmY19ycG9ydC0+ZGV2X2xvc3NfdG1vID0KKwkJCQkJYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKSArIDE7CisJCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKGZjX3Jwb3J0KTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl9CisJCQlsaXN0X2RlbCgmaXRuaW0tPmxpc3RfZW50cnkpOworCQl9CisKKwkJa2ZyZWUoaXRuaW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHF1ZXVlIGEgU0NTSSBjb21tYW5kIHRvIHRoZSBCRkFELgorICovCitzdGF0aWMgaW50CitiZmFkX2ltX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kLCB2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKikpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gY21uZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltOworCXN0cnVjdCBiZmFfaW9pbV9zICpoYWxfaW87CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCWludCAgICAgICAgICAgICByYzsKKwlzMTYgICAgICAgIHNnX2NudCA9IDA7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoY21uZC0+ZGV2aWNlKSk7CisKKwlyYyA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKKwlpZiAocmMpIHsKKwkJY21uZC0+cmVzdWx0ID0gcmM7CisJCWRvbmUoY21uZCk7CisJCXJldHVybiAwOworCX0KKworCXNnX2NudCA9IHNjc2lfZG1hX21hcChjbW5kKTsKKworCWlmIChzZ19jbnQgPCAwKQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCWNtbmQtPnNjc2lfZG9uZSA9IGRvbmU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWYgKCEoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX1NUQVJUX0RPTkUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJiZmFkJWQsIHF1ZXVlY29tbWFuZCAlcCAleCBmYWlsZWQsIEJGQSBzdG9wcGVkXG4iLAorCQkgICAgICAgYmZhZC0+aW5zdF9ubywgY21uZCwgY21uZC0+Y21uZFswXSk7CisJCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX05PX0NPTk5FQ1QsIDApOworCQlnb3RvIG91dF9mYWlsX2NtZDsKKwl9CisKKwlpdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCWlmICghaXRuaW0pIHsKKwkJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfSU1NX1JFVFJZLCAwKTsKKwkJZ290byBvdXRfZmFpbF9jbWQ7CisJfQorCisJaGFsX2lvID0gYmZhX2lvaW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX2lvaW1fcyAqKSBjbW5kLAorCQkJCSAgICBpdG5pbS0+YmZhX2l0bmltLCBzZ19jbnQpOworCWlmICghaGFsX2lvKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImhhbF9pbyBmYWlsdXJlXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXNjc2lfZG1hX3VubWFwKGNtbmQpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gKGNoYXIgKiloYWxfaW87CisJYmZhX3RyY19mcChiZmFkLCBoYWxfaW8tPmlvdGFnKTsKKwliZmFfaW9pbV9zdGFydChoYWxfaW8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK291dF9mYWlsX2NtZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlzY3NpX2RtYV91bm1hcChjbW5kKTsKKwlpZiAoZG9uZSkKKwkJZG9uZShjbW5kKTsKKworCXJldHVybiAwOworfQorCit2b2lkCitiZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaW50IGk7CisJaW50IHJwb3J0X2RlbGF5ID0gMTA7CisKKwlmb3IgKGkgPSAwOyAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1BPUlRfT05MSU5FKQorCQkgJiYgaSA8IGJmYV9saW5rdXBfZGVsYXk7IGkrKykKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFopOworCisJaWYgKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1BPUlRfT05MSU5FKSB7CisJCXJwb3J0X2RlbGF5ID0gcnBvcnRfZGVsYXkgPCBiZmFfbGlua3VwX2RlbGF5ID8KKwkJCQkgcnBvcnRfZGVsYXkgOiBiZmFfbGlua3VwX2RlbGF5OworCQlmb3IgKGkgPSAwOyAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1JQT1JUX09OTElORSkKKwkJCSAmJiBpIDwgcnBvcnRfZGVsYXk7IGkrKykKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaKTsKKworCQlpZiAocnBvcnRfZGVsYXkgPiAwICYmIChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9SUE9SVF9PTkxJTkUpKQorCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUocnBvcnRfZGVsYXkgKiBIWik7CisJfQorfQorCitpbnQKK2JmYWRfb3NfZ2V0X2xpbmt1cF9kZWxheShzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCisJdTggICAgICAgICBud3ducyA9IDA7CisJd3duX3QgICAgICAgICAgICp3d25zOworCWludCAgICAgICAgICAgICBsZGVsYXk7CisKKwkvKgorCSAqIFF1ZXJ5aW5nIGZvciB0aGUgYm9vdCB0YXJnZXQgcG9ydCB3d25zCisJICogLS0gcmVhZCBmcm9tIGJvb3QgaW5mb3JtYXRpb24gaW4gZmxhc2guCisJICogSWYgbnd3bnMgPiAwID0+IGJvb3Qgb3ZlciBTQU4gYW5kIHNldCBiZmFfbGlua3VwX2RlbGF5ID0gMzAKKwkgKiBlbHNlID0+IGxvY2FsIGJvb3QgbWFjaGluZSBzZXQgYmZhX2xpbmt1cF9kZWxheSA9IDEwCisJICovCisKKwliZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKCZiZmFkLT5iZmEsICZud3ducywgJnd3bnMpOworCisJaWYgKG53d25zID4gMCkgeworCQkvKiBJZiBib290IG92ZXIgU0FOOyBsaW5rdXBfZGVsYXkgPSAzMHNlYyAqLworCQlsZGVsYXkgPSAzMDsKKwl9IGVsc2UgeworCQkvKiBJZiBsb2NhbCBib290OyBsaW5rdXBfZGVsYXkgPSAxMHNlYyAqLworCQlsZGVsYXkgPSAwOworCX0KKworCXJldHVybiBsZGVsYXk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODlhNWIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQURfSU1fSF9fCisjZGVmaW5lIF9fQkZBRF9JTV9IX18KKworI2luY2x1ZGUgImZjcy9iZmFfZmNzX2ZjcGltLmgiCisjaW5jbHVkZSAiYmZhZF9pbV9jb21wYXQuaCIKKworI2RlZmluZSBGQ1BJX05BTUUgIiBmY3BpbSIKKwordm9pZCBiZmFkX2ZsYWdzX3NldChzdHJ1Y3QgYmZhZF9zICpiZmFkLCB1MzIgZmxhZ3MpOworYmZhX3N0YXR1c190IGJmYWRfaW1fbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkIGJmYWRfaW1fbW9kdWxlX2V4aXQodm9pZCk7CitiZmFfc3RhdHVzX3QgYmZhZF9pbV9wcm9iZShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgYmZhZF9pbV9wcm9iZV91bmRvKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCBiZmFkX2ltX3Byb2JlX3Bvc3Qoc3RydWN0IGJmYWRfaW1fcyAqaW0pOworYmZhX3N0YXR1c190IGJmYWRfaW1fcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhZF9pbV9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFkX2ltX3BvcnRfb25saW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYWRfaW1fcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYWRfaW1fcG9ydF9jbGVhbihzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOworaW50ICBiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfaW1fc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOworCisjZGVmaW5lIE1BWF9GQ1BfVEFSR0VUIDEwMjQKKyNkZWZpbmUgTUFYX0ZDUF9MVU4gMTYzODQKKyNkZWZpbmUgQkZBRF9UQVJHRVRfUkVTRVRfVE1PIDYwCisjZGVmaW5lIEJGQURfTFVOX1JFU0VUX1RNTyA2MAorI2RlZmluZSBTY3NpUmVzdWx0KGhvc3RfY29kZSwgc2NzaV9jb2RlKSAoKChob3N0X2NvZGUpIDw8IDE2KSB8IHNjc2lfY29kZSkKKyNkZWZpbmUgQkZBX1FVRVVFX0ZVTExfUkFNUF9VUF9USU1FIDEyMAorI2RlZmluZSBCRkFEX0tPQkpfTkFNRV9MRU4gMjAKKworLyoKKyAqIGl0bmltIGZsYWdzCisgKi8KKyNkZWZpbmUgSVROSU1fTUFQUEVECQkweDAwMDAwMDAxCisKKyNkZWZpbmUgU0NTSV9UQVNLX01HTVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSU9fRE9ORV9CSVQJCQkwCisKK3N0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyB7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW07Cit9OworCitzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgeworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHBvcnRfZGVsZXRlX3dvcms7CisJaW50ICAgICAgICAgICAgIGlkcl9pZDsKKwl1MTYgICAgICAgIGN1cl9zY3NpX2lkOworCXN0cnVjdCBsaXN0X2hlYWQgYmluZGluZ19saXN0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBsaXN0X2hlYWQgaXRuaW1fbWFwcGVkX2xpc3Q7Cit9OworCitlbnVtIGJmYWRfaXRuaW1fc3RhdGUgeworCUlUTklNX1NUQVRFX05PTkUsCisJSVROSU1fU1RBVEVfT05MSU5FLAorCUlUTklNX1NUQVRFX09GRkxJTkVfUEVORElORywKKwlJVE5JTV9TVEFURV9PRkZMSU5FLAorCUlUTklNX1NUQVRFX1RJTUVPVVQsCisJSVROSU1fU1RBVEVfRlJFRSwKK307CisKKy8qCisgKiBQZXIgaXRuaW0gZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfaXRuaW1fcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5OworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgZmNzX2l0bmltOworCXN0cnVjdCB3b3JrX3N0cnVjdCBpdG5pbV93b3JrOworCXUzMiAgICAgICAgZmxhZ3M7CisJZW51bSBiZmFkX2l0bmltX3N0YXRlIHN0YXRlOworCXN0cnVjdCBiZmFkX2ltX3MgKmltOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwlzdHJ1Y3QgYmZhZF9ycG9ydF9zICpkcnZfcnBvcnQ7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbTsKKwl1MTYgICAgICAgIHNjc2lfdGd0X2lkOworCXUxNiAgICAgICAgcXVldWVfd29yazsKKwl1bnNpZ25lZCBsb25nCWxhc3RfcmFtcF91cF90aW1lOworCXVuc2lnbmVkIGxvbmcJbGFzdF9xdWV1ZV9mdWxsX3RpbWU7Cit9OworCitlbnVtIGJmYWRfYmluZGluZ190eXBlIHsKKwlGQ1BfUFdXTl9CSU5ESU5HID0gMHgxLAorCUZDUF9OV1dOX0JJTkRJTkcgPSAweDIsCisJRkNQX0ZDSURfQklORElORyA9IDB4MywKK307CisKK3N0cnVjdCBiZmFkX2ZjcF9iaW5kaW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CisJZW51bSBiZmFkX2JpbmRpbmdfdHlwZSBiaW5kaW5nX3R5cGU7CisJdTE2ICAgICAgICBzY3NpX3RhcmdldF9pZDsKKwl1MzIgICAgICAgIGZjX2lkOworCXd3bl90ICAgICAgICAgICBud3duOworCXd3bl90ICAgICAgICAgICBwd3duOworfTsKKworc3RydWN0IGJmYWRfaW1fcyB7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcnZfd29ya3E7CisJY2hhciAgIGRydl93b3JrcV9uYW1lW0JGQURfS09CSl9OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgU2NzaV9Ib3N0ICpiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsCisJCQkJc3RydWN0IGJmYWRfcyAqKTsKK2JmYV9zdGF0dXNfdCBiZmFkX29zX3RocmVhZF93b3JrcShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgYmZhZF9vc19kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKTsKK3ZvaWQgYmZhZF9vc19pdG5pbV9wcm9jZXNzKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7Cit2b2lkIGJmYWRfb3NfZmNfaG9zdF9pbml0KHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfb3NfaW5pdF93b3JrKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfb3Nfc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCQkgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KTsKK3ZvaWQgYmZhZF9vc19yYW1wX3VwX3FkZXB0aChzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSwKKwkJCQkgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKK3ZvaWQgYmZhZF9vc19oYW5kbGVfcWZ1bGwoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitzdHJ1Y3QgYmZhZF9pdG5pbV9zICpiZmFkX29zX2dldF9pdG5pbShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIGludCBpZCk7CitpbnQgYmZhZF9vc19zY3NpX2FkZF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCisvKgorICogc2NzaV9ob3N0X3RlbXBsYXRlIGVudHJpZXMKKyAqLwordm9pZCBiZmFkX2ltX2l0bmltX3VubWFwKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAgKmltX3BvcnQsCisJCQkgc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0pOworCitleHRlcm4gc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZTsKK2V4dGVybiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fdnBvcnRfdGVtcGxhdGU7CitleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIGJmYWRfaW1fZmNfZnVuY3Rpb25fdGVtcGxhdGU7CitleHRlcm4gc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDNlNzRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltX2NvbXBhdC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQURfSU1fQ09NUEFUX0hfXworI2RlZmluZSBfX0JGQURfSU1fQ09NUEFUX0hfXworCitleHRlcm4gdTMyICpiZmlfaW1hZ2VfYnVmOworZXh0ZXJuIHUzMiBiZmlfaW1hZ2Vfc2l6ZTsKKworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpiZmFkX2ltX2hvc3RfYXR0cnNbXTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmZhZF9pbV92cG9ydF9hdHRyc1tdOworCit1MzIgKmJmYWRfZ2V0X2Zpcm13YXJlX2J1ZihzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit1MzIgKmJmYWRfcmVhZF9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICoqYmZpX2ltYWdlLAorCQkJdTMyICpiZmlfaW1hZ2Vfc2l6ZSwgY2hhciAqZndfbmFtZSk7CisKK3N0YXRpYyBpbmxpbmUgdTMyICoKK2JmYWRfbG9hZF9md2ltZyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4oYmZhZF9nZXRfZmlybXdhcmVfYnVmKHBkZXYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiZmFkX2ZyZWVfZndpbWcodm9pZCkKK3sKKwlpZiAoYmZpX2ltYWdlX2N0X3NpemUgJiYgYmZpX2ltYWdlX2N0KQorCQl2ZnJlZShiZmlfaW1hZ2VfY3QpOworCWlmIChiZmlfaW1hZ2VfY2Jfc2l6ZSAmJiBiZmlfaW1hZ2VfY2IpCisJCXZmcmVlKGJmaV9pbWFnZV9jYik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ludHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbnRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNGUwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbnRyLmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF90cmNtb2QuaCIKKworQkZBX1RSQ19GSUxFKExEUlYsIElOVFIpOworCisvKioKKyAqICBiZmFfaXNyIEJGQSBkcml2ZXIgaW50ZXJydXB0IGZ1bmN0aW9ucworICovCitpcnFyZXR1cm5fdCBiZmFkX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBpbnQgbXNpeF9kaXNhYmxlOworbW9kdWxlX3BhcmFtKG1zaXhfZGlzYWJsZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisvKioKKyAqIExpbmUgYmFzZWQgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK2lycXJldHVybl90CitiZmFkX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGRldl9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgZG9uZXE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCWJmYV9ib29sZWFuX3QgcmM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcmMgPSBiZmFfaW50eCgmYmZhZC0+YmZhKTsKKwlpZiAoIXJjKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJYmZhX2NvbXBfZGVxKCZiZmFkLT5iZmEsICZkb25lcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRvbmVxKSkgeworCQliZmFfY29tcF9wcm9jZXNzKCZiZmFkLT5iZmEsICZkb25lcSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfY29tcF9mcmVlKCZiZmFkLT5iZmEsICZkb25lcSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfdHJjX2ZwKGJmYWQsIGlycSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworCit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorYmZhZF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYmZhZF9tc2l4X3MgKnZlYyA9IGRldl9pZDsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gdmVjLT5iZmFkOworCXN0cnVjdCBsaXN0X2hlYWQgZG9uZXE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJYmZhX21zaXgoJmJmYWQtPmJmYSwgdmVjLT5tc2l4LmVudHJ5KTsKKwliZmFfY29tcF9kZXEoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmZG9uZXEpKSB7CisJCWJmYV9jb21wX3Byb2Nlc3MoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWJmYV9jb21wX2ZyZWUoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIEluaXRpYWxpemUgdGhlIE1TSVggZW50cnkgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2luaXRfbXNpeF9lbnRyeShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzLAorCQkJIGludCBtYXNrLCBpbnQgbWF4X2JpdCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlpbnQgICAgICAgICAgICAgbWF0Y2ggPSAweDAwMDAwMDAxOworCisJZm9yIChpID0gMCwgYmZhZC0+bnZlYyA9IDA7IGkgPCBNQVhfTVNJWF9FTlRSWTsgaSsrKSB7CisJCWlmIChtYXNrICYgbWF0Y2gpIHsKKwkJCWJmYWQtPm1zaXhfdGFiW2JmYWQtPm52ZWNdLm1zaXguZW50cnkgPSBpOworCQkJYmZhZC0+bXNpeF90YWJbYmZhZC0+bnZlY10uYmZhZCA9IGJmYWQ7CisJCQltc2l4X2VudHJpZXNbYmZhZC0+bnZlY10uZW50cnkgPSBpOworCQkJYmZhZC0+bnZlYysrOworCQl9CisKKwkJbWF0Y2ggPDw9IDE7CisJfQorCit9CisKK2ludAorYmZhZF9pbnN0YWxsX21zaXhfaGFuZGxlcihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICBpLCBlcnJvciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmZhZC0+bnZlYzsgaSsrKSB7CisJCWVycm9yID0gcmVxdWVzdF9pcnEoYmZhZC0+bXNpeF90YWJbaV0ubXNpeC52ZWN0b3IsCisJCQkJICAgIChpcnFfaGFuZGxlcl90KSBiZmFkX21zaXgsIDAsCisJCQkJICAgIEJGQURfRFJJVkVSX05BTUUsICZiZmFkLT5tc2l4X3RhYltpXSk7CisJCWJmYV90cmMoYmZhZCwgaSk7CisJCWJmYV90cmMoYmZhZCwgYmZhZC0+bXNpeF90YWJbaV0ubXNpeC52ZWN0b3IpOworCQlpZiAoZXJyb3IpIHsKKwkJCWludCAgICAgICAgICAgICBqOworCisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJCWZyZWVfaXJxKGJmYWQtPm1zaXhfdGFiW2pdLm1zaXgudmVjdG9yLAorCQkJCQkJJmJmYWQtPm1zaXhfdGFiW2pdKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTZXR1cCBNU0lYIGJhc2VkIGludGVycnVwdC4KKyAqLworaW50CitiZmFkX3NldHVwX2ludHIoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCXUzMiBtYXNrID0gMCwgaSwgbnVtX2JpdCA9IDAsIG1heF9iaXQgPSAwOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tNQVhfTVNJWF9FTlRSWV07CisKKwkvKiBDYWxsIEJGQSB0byBnZXQgdGhlIG1zaXggbWFwIGZvciB0aGlzIFBDSSBmdW5jdGlvbi4gICovCisJYmZhX21zaXhfZ2V0dmVjcygmYmZhZC0+YmZhLCAmbWFzaywgJm51bV9iaXQsICZtYXhfYml0KTsKKworCS8qIFNldCB1cCB0aGUgbXNpeCBlbnRyeSB0YWJsZSAqLworCWJmYWRfaW5pdF9tc2l4X2VudHJ5KGJmYWQsIG1zaXhfZW50cmllcywgbWFzaywgbWF4X2JpdCk7CisKKwlpZiAoIW1zaXhfZGlzYWJsZSkgeworCQllcnJvciA9IHBjaV9lbmFibGVfbXNpeChiZmFkLT5wY2lkZXYsIG1zaXhfZW50cmllcywgYmZhZC0+bnZlYyk7CisJCWlmIChlcnJvcikgeworCQkJLyoKKwkJCSAqIE9ubHkgZXJyb3IgbnVtYmVyIG9mIHZlY3RvciBpcyBhdmFpbGFibGUuCisJCQkgKiBXZSBkb24ndCBoYXZlIGEgbWVjaGFuaXNtIHRvIG1hcCBtdWx0aXBsZQorCQkJICogaW50ZXJydXB0cyBpbnRvIG9uZSB2ZWN0b3IsIHNvIGV2ZW4gaWYgd2UKKwkJCSAqIGNhbiB0cnkgdG8gcmVxdWVzdCBsZXNzIHZlY3RvcnMsIHdlIGRvbid0CisJCQkgKiBrbm93IGhvdyB0byBhc3NvY2lhdGUgaW50ZXJydXB0IGV2ZW50cyB0bworCQkJICogIHZlY3RvcnMuIExpbnV4IGRvZXNuJ3QgZHVwaWNhdGUgdmVjdG9ycworCQkJICogaW4gdGhlIE1TSVggdGFibGUgZm9yIHRoaXMgY2FzZS4KKwkJCSAqLworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQ6ICIKKwkJCQkicGNpX2VuYWJsZV9tc2l4IGZhaWxlZCAoJWQpLCIKKwkJCQkiIHVzZSBsaW5lIGJhc2VkLlxuIiwgYmZhZC0+aW5zdF9ubywgZXJyb3IpOworCisJCQlnb3RvIGxpbmVfYmFzZWQ7CisJCX0KKworCQkvKiBTYXZlIHRoZSB2ZWN0b3JzICovCisJCWZvciAoaSA9IDA7IGkgPCBiZmFkLT5udmVjOyBpKyspIHsKKwkJCWJmYV90cmMoYmZhZCwgbXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7CisJCQliZmFkLT5tc2l4X3RhYltpXS5tc2l4LnZlY3RvciA9IG1zaXhfZW50cmllc1tpXS52ZWN0b3I7CisJCX0KKworCQliZmFfbXNpeF9pbml0KCZiZmFkLT5iZmEsIGJmYWQtPm52ZWMpOworCisJCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9NU0lYX09OOworCisJCXJldHVybiBlcnJvcjsKKwl9CisKK2xpbmVfYmFzZWQ6CisJZXJyb3IgPSAwOworCWlmIChyZXF1ZXN0X2lycQorCSAgICAoYmZhZC0+cGNpZGV2LT5pcnEsIChpcnFfaGFuZGxlcl90KSBiZmFkX2ludHgsIEJGQURfSVJRX0ZMQUdTLAorCSAgICAgQkZBRF9EUklWRVJfTkFNRSwgYmZhZCkgIT0gMCkgeworCQkvKiBFbmFibGUgaW50ZXJydXB0IGhhbmRsZXIgZmFpbGVkICovCisJCXJldHVybiAxOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKwordm9pZAorYmZhZF9yZW1vdmVfaW50cihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICBpOworCisJaWYgKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX01TSVhfT04pIHsKKwkJZm9yIChpID0gMDsgaSA8IGJmYWQtPm52ZWM7IGkrKykKKwkJCWZyZWVfaXJxKGJmYWQtPm1zaXhfdGFiW2ldLm1zaXgudmVjdG9yLAorCQkJCQkmYmZhZC0+bXNpeF90YWJbaV0pOworCisJCXBjaV9kaXNhYmxlX21zaXgoYmZhZC0+cGNpZGV2KTsKKwkJYmZhZC0+YmZhZF9mbGFncyAmPSB+QkZBRF9NU0lYX09OOworCX0gZWxzZSB7CisJCWZyZWVfaXJxKGJmYWQtPnBjaWRldi0+aXJxLCBiZmFkKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2lwZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pcGZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4YmM1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pcGZjLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9EUlZfSVBGQ19IX18KKyNkZWZpbmUgX19CRkFfRFJWX0lQRkNfSF9fCisKKworI2RlZmluZSBJUEZDX05BTUUgIiIKKworI2RlZmluZSBiZmFkX2lwZmNfbW9kdWxlX2luaXQoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19tb2R1bGVfZXhpdCh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3Byb2JlKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX2lwZmNfcHJvYmVfdW5kbyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfY29uZmlnKHgsIHkpIEJGQV9TVEFUVVNfT0sKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfdW5jb25maWcoeCwgeSkgZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhZF9pcGZjX3Byb2JlX3Bvc3QoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X25ldyh4LCB5LCB6KSBCRkFfU1RBVFVTX09LCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X2RlbGV0ZSh4LCB5KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfb25saW5lKHgsIHkpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX2lwZmNfcG9ydF9vZmZsaW5lKHgsIHkpIGRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYWRfaXBfZ2V0X2F0dHIoeCkgQkZBX1NUQVRVU19GQUlMRUQKKyNkZWZpbmUgYmZhZF9pcF9yZXNldF9kcnZfc3RhdHMoeCkgQkZBX1NUQVRVU19GQUlMRUQKKyNkZWZpbmUgYmZhZF9pcF9nZXRfZHJ2X3N0YXRzKHgsIHkpIEJGQV9TVEFUVVNfRkFJTEVECisjZGVmaW5lIGJmYWRfaXBfZW5hYmxlX2lwZmMoeCwgeSwgeikgQkZBX1NUQVRVU19GQUlMRUQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9vcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX29zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmNDdiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9vcy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9vcy5jIExpbnV4IGRyaXZlciBPUyBzcGVjaWZpYyBjYWxscy4KKyAqLworCisjaW5jbHVkZSAiYmZhX29zX2luYy5oIgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisKK3ZvaWQKK2JmYV9vc19nZXR0aW1lb2ZkYXkoc3RydWN0IGJmYV90aW1ldmFsX3MgKnR2KQoreworCXN0cnVjdCB0aW1ldmFsICB0bXBfdHY7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnRtcF90dik7CisJdHYtPnR2X3NlYyA9ICh1MzIpIHRtcF90di50dl9zZWM7CisJdHYtPnR2X3VzZWMgPSAodTMyKSB0bXBfdHYudHZfdXNlYzsKK30KKwordm9pZAorYmZhX29zX3ByaW50ZihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJI2RlZmluZSBCRkFfU1RSSU5HXzI1NgkyNTYKKwljaGFyIHRtcFtCRkFfU1RSSU5HXzI1Nl07CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c3ByaW50Zih0bXAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlwcmludGsodG1wKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdG0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDFiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdG0uaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSEJBIExpbnV4IFRhcmdldCBNb2RlIERyaXZlcgorICovCisKKy8qKgorICogIHRtL2R1bW15L2JmYWRfdG0uaCBCRkEgY2FsbGJhY2sgZHVtbXkgaGVhZGVyIGZpbGUgZm9yIEJGQSBMaW51eCB0YXJnZXQgbW9kZSBQQ0kgaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworCisjaWZuZGVmIF9fQkZBRF9UTV9IX18KKyNkZWZpbmUgX19CRkFEX1RNX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKworI2RlZmluZSBGQ1BUX05BTUUgCQkiIgorCisvKgorICogQ2FsbGVkIGZyb20gYmFzZSBMaW51eCBkcml2ZXIgb24gKERlKUluaXQgZXZlbnRzCisgKi8KKworLyogYXR0YWNoIHRndCB0ZW1wbGF0ZSB3aXRoIHNjc3QgKi8KKyNkZWZpbmUgYmZhZF90bV9tb2R1bGVfaW5pdCgpCWRvIHt9IHdoaWxlICgwKQorCisvKiBkZXRhY2gvcmVsZWFzZSB0Z3QgdGVtcGxhdGUgKi8KKyNkZWZpbmUgYmZhZF90bV9tb2R1bGVfZXhpdCgpCWRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYWRfdG1fcHJvYmUoeCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfdG1fcHJvYmVfdW5kbyh4KQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF90bV9wcm9iZV9wb3N0KHgpCWRvIHt9IHdoaWxlICgwKQorCisvKgorICogQ2FsbGVkIGJ5IGJhc2UgTGludXggZHJpdmVyIGJ1dCB0cmlnZ2VyZWQgYnkgQkZBIEZDUyBvbiBjb25maWcgZXZlbnRzCisgKi8KKyNkZWZpbmUgYmZhZF90bV9wb3J0X25ldyh4LCB5KQkJQkZBX1NUQVRVU19PSworI2RlZmluZSBiZmFkX3RtX3BvcnRfZGVsZXRlKHgsIHkpCWRvIHt9IHdoaWxlICgwKQorCisvKgorICogQ2FsbGVkIGJ5IGJhc2UgTGludXggZHJpdmVyIGJ1dCB0cmlnZ2VyZWQgYnkgQkZBIEZDUyBvbiBQTE9HSS9PIGV2ZW50cworICovCisjZGVmaW5lIGJmYWRfdG1fcG9ydF9vbmxpbmUoeCwgeSkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfdG1fcG9ydF9vZmZsaW5lKHgsIHkpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90cmNtb2QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90cmNtb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI3YjJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX3RyY21vZC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF90cmNtb2QuaCBMaW51eCBkcml2ZXIgdHJhY2UgbW9kdWxlcworICovCisKKworI2lmbmRlZiBfX0JGQURfVFJDTU9EX0hfXworI2RlZmluZSBfX0JGQURfVFJDTU9EX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorCisvKgorICogISEhIE9ubHkgYXBwZW5kIHRvIHRoZSBlbnVtcyBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgYW55IHZlcnNpb25pbmcKKyAqICEhISBuZWVkZWQgYmV0d2VlbiB0cmFjZSB1dGlsaXR5IGFuZCBkcml2ZXIgdmVyc2lvbgorICovCitlbnVtIHsKKwkvKiAyLjYgRHJpdmVyICovCisJQkZBX1RSQ19MRFJWX0JGQUQJCT0gMSwKKwlCRkFfVFJDX0xEUlZfQkZBRF8yXzYJCT0gMiwKKwlCRkFfVFJDX0xEUlZfQkZBRF8yXzZfOQkJPSAzLAorCUJGQV9UUkNfTERSVl9CRkFEXzJfNl8xMAk9IDQsCisJQkZBX1RSQ19MRFJWX0lOVFIJCT0gNSwKKwlCRkFfVFJDX0xEUlZfSU9DVEwJCT0gNiwKKwlCRkFfVFJDX0xEUlZfT1MJCQk9IDcsCisJQkZBX1RSQ19MRFJWX0lNCQkJPSA4LAorCUJGQV9UUkNfTERSVl9JTV8yXzYJCT0gOSwKKwlCRkFfVFJDX0xEUlZfSU1fMl82XzkJCT0gMTAsCisJQkZBX1RSQ19MRFJWX0lNXzJfNl8xMAkJPSAxMSwKKwlCRkFfVFJDX0xEUlZfVE0JCQk9IDEyLAorCUJGQV9UUkNfTERSVl9JUEZDCQk9IDEzLAorCUJGQV9UUkNfTERSVl9JTV8yXzQJCT0gMTQsCisJQkZBX1RSQ19MRFJWX0lNX1ZNVwkJPSAxNSwKKwlCRkFfVFJDX0xEUlZfSU1fTFRfMl82XzEwCT0gMTYsCit9OworCisjZW5kaWYgLyogX19CRkFEX1RSQ01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmFiLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2ZhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlM2E0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZhYi5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKKy8qKgorICogIGZhYi5jIHBvcnQgZmFiIGltcGxlbWVudGF0aW9uLgorICovCisKKy8qKgorICogIGJmYV9mY3NfcG9ydF9mYWJfcHVibGljIHBvcnQgZmFiIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gaW5pdGlhbGl6ZSBmYWJyaWMgc2VydmljZXMgb2YgdGhlIGJhc2UgcG9ydC4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2ZhYl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfaW5pdChwb3J0KTsKKwliZmFfZmNzX3BvcnRfc2NuX2luaXQocG9ydCk7CisJYmZhX2Zjc19wb3J0X21zX2luaXQocG9ydCk7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvbmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9mYWJfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfb25saW5lKHBvcnQpOworCWJmYV9mY3NfcG9ydF9zY25fb25saW5lKHBvcnQpOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb2ZmbGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2ZhYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShwb3J0KTsKKwliZmFfZmNzX3BvcnRfc2NuX29mZmxpbmUocG9ydCk7CisJYmZhX2Zjc19wb3J0X21zX29mZmxpbmUocG9ydCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZhYnJpYy5jIGIvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIxNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYwpAQCAtMCwwICsxLDEyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmFicmljLmMgRmFicmljIG1vZHVsZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjc19hdXRoLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiZmNidWlsZC5oIgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2Zjcy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIEZBQlJJQyk7CisKKyNkZWZpbmUgQkZBX0ZDU19GQUJSSUNfUkVUUllfREVMQVkJKDIwMDApCS8qIE1pbGxpc2Vjb25kcyAqLworI2RlZmluZSBCRkFfRkNTX0ZBQlJJQ19DTEVBTlVQX0RFTEFZCSgxMDAwMCkJLyogTWlsbGlzZWNvbmRzICovCisKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfc2V0X29wZXJ0eXBlKF9fZmFicmljKSBkbyB7ICAgICAgICAgIFwKKyAgICBpZiAoYmZhX3Bwb3J0X2dldF90b3BvbG9neSgoX19mYWJyaWMpLT5mY3MtPmJmYSkgICAgXAorCQkJCT09IEJGQV9QUE9SVF9UT1BPTE9HWV9QMlApICAgXAorCSAgICAoX19mYWJyaWMpLT5vcGVyX3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9OUE9SVDsgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAoX19mYWJyaWMpLT5vcGVyX3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9OTFBPUlQ7ICAgICAgXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX2xvZ2luKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfZGVsYXkodm9pZCAqY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19kZWxldGVfY29tcCh2b2lkICpjYmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc191ZihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgIHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUxNiBsZW4pOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3Byb2Nlc3NfZmxvZ2koc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zZW5kX2Zsb2dpX2FjYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19mbG9naWFjY19jb21wKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHN0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcGZjaHMpOworLyoqCisgKiAgZmNzX2ZhYnJpY19zbSBmYWJyaWMgc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIEZhYnJpYyBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IHsKKwlCRkFfRkNTX0ZBQlJJQ19TTV9DUkVBVEUgPSAxLAkvKiAgZmFicmljIGNyZWF0ZSBmcm9tIGRyaXZlciAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURSA9IDIsCS8qICBmYWJyaWMgZGVsZXRlIGZyb20gZHJpdmVyICovCisJQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOID0gMywJLyogIGxpbmsgZG93biBmcm9tIHBvcnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQID0gNCwJLyogIGxpbmsgdXAgZnJvbSBwb3J0ICovCisJQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUCA9IDUsCS8qICBjb250aW51ZSBvcCBmcm9tIGZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUCA9IDYsCS8qICBjb250aW51ZSBvcCBmcm9tIGZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUMgPSA3LAkvKiAgbm8gZmFicmljIGZyb20gZmxvZ2kvYXV0aAorCQkJCQkJICovCisJQkZBX0ZDU19GQUJSSUNfU01fUEVSRl9FVkZQID0gOCwJLyogIHBlcmZvcm0gRVZGUCBmcm9tCisJCQkJCQkgKmZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9JU09MQVRFID0gOSwJLyogIGlzb2xhdGUgZnJvbSBFVkZQIHByb2Nlc3NpbmcgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9OT19UQUdHSU5HID0gMTAsLyogIG5vIFZGVCB0YWdnaW5nIGZyb20gRVZGUCAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0RFTEFZRUQgPSAxMSwJLyogIHRpbWVvdXQgZGVsYXkgZXZlbnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9BVVRIX0ZBSUxFRCA9IDEyLAkvKiAgYXV0aGVudGljYXRpb24gZmFpbGVkICovCisJQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTID0gMTMsCS8qICBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsCisJCQkJCQkgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9ERUxDT01QID0gMTQsCS8qICBhbGwgdnBvcnRzIGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9MT09QQkFDSyA9IDE1LAkvKiAgUmVjZWl2ZWQgb3VyIG93biBGTE9HSSAqLworCUJGQV9GQ1NfRkFCUklDX1NNX1NUQVJUID0gMTYsCS8qICBmYWJyaWMgZGVsZXRlIGZyb20gZHJpdmVyICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24oc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2koc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fYXV0aChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9hdXRoX2ZhaWxlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9ub2ZhYnJpYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX2V2ZnAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZXZmcF9kb25lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9pc29sYXRlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKKy8qKgorICogICBCZWdpbm5pbmcgc3RhdGUgYmVmb3JlIGZhYnJpYyBjcmVhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKTsKKwkJYmZhX2Zjc19mYWJyaWNfaW5pdChmYWJyaWMpOworCQliZmFfZmNzX2xwb3J0X2luaXQoJmZhYnJpYy0+YnBvcnQsIGZhYnJpYy0+ZmNzLCBGQ19WRl9JRF9OVUxMLAorCQkJCSAgICZmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfVVA6CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgQmVnaW5uaW5nIHN0YXRlIGJlZm9yZSBmYWJyaWMgY3JlYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9pc19saW5rdXAoZmFicmljLT5mY3MtPmJmYSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9mbG9naSk7CisJCQliZmFfZmNzX2ZhYnJpY19sb2dpbihmYWJyaWMpOworCQl9IGVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmFicmljLT5mY3MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIExpbmsgaXMgZG93biwgYXdhaXRpbmcgTElOSyBVUCBldmVudCBmcm9tIHBvcnQuIFRoaXMgaXMgYWxzbyB0aGUKKyAqICAgZmlyc3Qgc3RhdGUgYXQgZmFicmljIGNyZWF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24oc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2kpOworCQliZmFfZmNzX2ZhYnJpY19sb2dpbihmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1A6CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEZMT0dJIGlzIGluIHByb2dyZXNzLCBhd2FpdGluZyBGTE9HSSByZXBseS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2Zsb2dpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQllbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUDoKKworCQliZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KGZhYnJpYy0+ZmNzLT5iZmEsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJZmFicmljLT5mYWJfdHlwZSA9IEJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEOworCisJCWlmIChmYWJyaWMtPmF1dGhfcmVxZCAmJiBmYWJyaWMtPmlzX2F1dGgpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9hdXRoKTsKKwkJCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUpOworCQkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KGZhYnJpYy0+ZmNzLT5iZmEsICZmYWJyaWMtPmRlbGF5X3RpbWVyLAorCQkJCWJmYV9mY3NfZmFicmljX2RlbGF5LCBmYWJyaWMsCisJCQkJQkZBX0ZDU19GQUJSSUNfUkVUUllfREVMQVkpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTE9PUEJBQ0s6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayk7CisJCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJmYV9mY3NfZmFicmljX3NldF9vcGVydHlwZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDOgorCQlmYWJyaWMtPmZhYl90eXBlID0gQkZBX0ZDU19GQUJSSUNfTjJOOworCQliZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KGZhYnJpYy0+ZmNzLT5iZmEsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbm9mYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2Zsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMQVlFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpKTsKKwkJYmZhX2Zjc19mYWJyaWNfbG9naW4oZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX3RpbWVyX3N0b3AoJmZhYnJpYy0+ZGVsYXlfdGltZXIpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmZmFicmljLT5kZWxheV90aW1lcik7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEF1dGhlbnRpY2F0aW9uIGlzIGluIHByb2dyZXNzLCBhd2FpdGluZyBhdXRoZW50aWNhdGlvbiByZXN1bHRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fYXV0aChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkgICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fUEVSRl9FVkZQOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZXZmcCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEF1dGhlbnRpY2F0aW9uIGZhaWxlZAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIFBvcnQgaXMgaW4gbG9vcGJhY2sgbW9kZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2xvb3BiYWNrKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBUaGVyZSBpcyBubyBhdHRhY2hlZCBmYWJyaWMgLSBwcml2YXRlIGxvb3Agb3IgTlBvcnQtdG8tTlBvcnQgdG9wb2xvZ3kuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9ub2ZhYnJpYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2RlbGV0aW5nKTsKKwkJYmZhX2Zjc19mYWJyaWNfZGVsZXRlKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUM6CisJCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChmYWJyaWMtPmZjcy0+YmZhLCBmYWJyaWMtPmJiX2NyZWRpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgRmFicmljIGlzIG9ubGluZSAtIG5vcm1hbCBvcGVyYXRpbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEV4Y2hhbmdpbmcgdmlydHVhbCBmYWJyaWMgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2V2ZnAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJICAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9DT05UX09QOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZXZmcF9kb25lKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0lTT0xBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9pc29sYXRlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgRVZGUCBleGNoYW5nZSBjb21wbGV0ZSBhbmQgVkZUIHRhZ2dpbmcgaXMgZW5hYmxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2V2ZnBfZG9uZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7Cit9CisKKy8qKgorICogICBQb3J0IGlzIGlzb2xhdGVkIGFmdGVyIEVWRlAgZXhjaGFuZ2UgZHVlIHRvIFZGX0lEIG1pc21hdGNoIChOIGFuZCBGKS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2lzb2xhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJYmZhX2xvZyhmYWJyaWMtPmZjcy0+bG9nbSwgQkZBX0xPR19GQ1NfRkFCUklDX0lTT0xBVEVELAorCQlmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24sIGZhYnJpYy0+ZmNzLT5wb3J0X3ZmaWQsCisJCWZhYnJpYy0+ZXZlbnRfYXJnLnN3cF92ZmlkKTsKK30KKworLyoqCisgKiAgIEZhYnJpYyBpcyBiZWluZyBkZWxldGVkLCBhd2FpdGluZyB2cG9ydCBkZWxldGUgY29tcGxldGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTENPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQpOworCQliZmFfZmNzX21vZGV4aXRfY29tcChmYWJyaWMtPmZjcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworCisKKy8qKgorICogIGZjc19mYWJyaWNfcHJpdmF0ZSBmYWJyaWMgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcgPSAmZmFicmljLT5icG9ydC5wb3J0X2NmZzsKKworCXBvcnRfY2ZnLT5yb2xlcyA9IEJGQV9QT1JUX1JPTEVfRkNQX0lNOworCXBvcnRfY2ZnLT5ud3duID0gYmZhX2lvY19nZXRfbnd3bigmZmFicmljLT5mY3MtPmJmYS0+aW9jKTsKKwlwb3J0X2NmZy0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oJmZhYnJpYy0+ZmNzLT5iZmEtPmlvYyk7Cit9CisKKy8qKgorICogUG9ydCBTeW1ib2xpYyBOYW1lIENyZWF0aW9uIGZvciBiYXNlIHBvcnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX3BzeW1iX2luaXQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyBhZGFwdGVyX2F0dHI7CisJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8gPSAmZmFicmljLT5mY3MtPmRyaXZlcl9pbmZvOworCisJYmZhX29zX21lbXNldCgodm9pZCAqKSZhZGFwdGVyX2F0dHIsIDAsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zKSk7CisJYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKCZmYWJyaWMtPmZjcy0+YmZhLT5pb2MsICZhZGFwdGVyX2F0dHIpOworCisJLyoKKwkgKiBNb2RlbCBuYW1lL251bWJlcgorCSAqLworCXN0cm5jcHkoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLCBhZGFwdGVyX2F0dHIubW9kZWwsCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9NT0RFTF9TWik7CisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisKKwkvKgorCSAqIERyaXZlciBWZXJzaW9uCisJICovCisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIChjaGFyICopZHJpdmVyX2luZm8tPnZlcnNpb24sCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9WRVJTSU9OX1NaKTsKKwlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiwKKwkJc2l6ZW9mKEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IpKTsKKworCS8qCisJICogSG9zdCBtYWNoaW5lIG5hbWUKKwkgKi8KKwlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJKGNoYXIgKilkcml2ZXJfaW5mby0+aG9zdF9tYWNoaW5lX25hbWUsCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9NQUNISU5FTkFNRV9TWik7CisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisKKwkvKgorCSAqIEhvc3QgT1MgSW5mbyA6CisJICogSWYgT1MgUGF0Y2ggSW5mbyBpcyBub3QgdGhlcmUsIGRvIG5vdCB0cnVuY2F0ZSBhbnkgYnl0ZXMgZnJvbSB0aGUKKwkgKiBPUyBuYW1lIHN0cmluZyBhbmQgaW5zdGVhZCBjb3B5IHRoZSBlbnRpcmUgT1MgaW5mbyBzdHJpbmcgKDY0IGJ5dGVzKS4KKwkgKi8KKwlpZiAoZHJpdmVyX2luZm8tPmhvc3Rfb3NfcGF0Y2hbMF0gPT0gJ1wwJykgeworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCShjaGFyICopZHJpdmVyX2luZm8tPmhvc3Rfb3NfbmFtZSwgQkZBX0ZDU19PU19TVFJfTEVOKTsKKwkJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsCisJCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SLAorCQkJc2l6ZW9mKEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IpKTsKKwl9IGVsc2UgeworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCShjaGFyICopZHJpdmVyX2luZm8tPmhvc3Rfb3NfbmFtZSwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU0lORk9fU1opOworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCQlzaXplb2YoQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUikpOworCisJCS8qCisJCSAqIEFwcGVuZCBob3N0IE9TIFBhdGNoIEluZm8KKwkJICovCisJCXN0cm5jYXQoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLAorCQkJKGNoYXIgKilkcml2ZXJfaW5mby0+aG9zdF9vc19wYXRjaCwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU1BBVENIX1NaKTsKKwl9CisKKwkvKgorCSAqIG51bGwgdGVybWluYXRlCisJICovCisJcG9ydF9jZmctPnN5bV9uYW1lLnN5bW5hbWVbQkZBX1NZTU5BTUVfTUFYTEVOIC0gMV0gPSAwOworfQorCisvKioKKyAqIGJmYSBscHMgbG9naW4gY29tcGxldGlvbiBjYWxsYmFjaworICovCit2b2lkCitiZmFfY2JfbHBzX2Zsb2dpX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZywgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljID0gdWFyZzsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgc3RhdHVzKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBCRkFfU1RBVFVTX09LOgorCQlmYWJyaWMtPnN0YXRzLmZsb2dpX2FjY2VwdHMrKzsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfSU5WQUxJRF9NQUM6CisJCS8qCisJCSAqIE9ubHkgZm9yIENOQQorCQkgKi8KKwkJZmFicmljLT5zdGF0cy5mbG9naV9hY2NfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1ApOworCisJCXJldHVybjsKKworCWNhc2UgQkZBX1NUQVRVU19FUFJPVE9DT0w6CisJCXN3aXRjaCAoYmZhX2xwc19nZXRfZXh0c3RhdHVzKGZhYnJpYy0+bHBzKSkgeworCQljYXNlIEJGQV9FUFJPVE9fQkFEX0FDQ0VQVDoKKwkJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfYWNjX2VycisrOworCQkJYnJlYWs7CisKKwkJY2FzZSBCRkFfRVBST1RPX1VOS05PV05fUlNQOgorCQkJZmFicmljLT5zdGF0cy5mbG9naV91bmtub3duX3JzcCsrOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1ApOworCisJCXJldHVybjsKKworCWNhc2UgQkZBX1NUQVRVU19GQUJSSUNfUkpUOgorCQlmYWJyaWMtPnN0YXRzLmZsb2dpX3JlamVjdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUCk7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX1JFVFJZX09QKTsKKwkJcmV0dXJuOworCX0KKworCWZhYnJpYy0+YmJfY3JlZGl0ID0gYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChmYWJyaWMtPmxwcyk7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5iYl9jcmVkaXQpOworCisJaWYgKCFiZmFfbHBzX2lzX2JyY2RfZmFicmljKGZhYnJpYy0+bHBzKSkKKwkJZmFicmljLT5mYWJyaWNfbmFtZSA9IGJmYV9scHNfZ2V0X3BlZXJfbnd3bihmYWJyaWMtPmxwcyk7CisKKwkvKgorCSAqIENoZWNrIHBvcnQgdHlwZS4gSXQgc2hvdWxkIGJlIDEgPSBGLXBvcnQuCisJICovCisJaWYgKGJmYV9scHNfaXNfZnBvcnQoZmFicmljLT5scHMpKSB7CisJCWZhYnJpYy0+YnBvcnQucGlkID0gYmZhX2xwc19nZXRfcGlkKGZhYnJpYy0+bHBzKTsKKwkJZmFicmljLT5pc19ucGl2ID0gYmZhX2xwc19pc19ucGl2X2VuKGZhYnJpYy0+bHBzKTsKKwkJZmFicmljLT5pc19hdXRoID0gYmZhX2xwc19pc19hdXRocmVxKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9DT05UX09QKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBOcG9ydC0yLU5wb3J0IGRpcmVjdCBhdHRhY2hlZAorCQkgKi8KKwkJZmFicmljLT5icG9ydC5wb3J0X3RvcG8ucG4ybi5yZW1fcG9ydF93d24gPQorCQkJYmZhX2xwc19nZXRfcGVlcl9wd3duKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUMpOworCX0KKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucGlkKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmlzX25waXYpOworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+aXNfYXV0aCk7Cit9CisKKy8qKgorICogCQlBbGxvY2F0ZSBhbmQgc2VuZCBGTE9HSS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2xvZ2luKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9zICAgKmJmYSA9IGZhYnJpYy0+ZmNzLT5iZmE7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJdTggICAgICAgICBhbHBhID0gMDsKKworCWlmIChiZmFfcHBvcnRfZ2V0X3RvcG9sb2d5KGJmYSkgPT0gQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1ApCisJCWFscGEgPSBiZmFfcHBvcnRfZ2V0X215YWxwYShiZmEpOworCisJYmZhX2xwc19mbG9naShmYWJyaWMtPmxwcywgZmFicmljLCBhbHBhLCBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShiZmEpLAorCQkgICAgICBwY2ZnLT5wd3duLCBwY2ZnLT5ud3duLCBmYWJyaWMtPmF1dGhfcmVxZCk7CisKKwlmYWJyaWMtPnN0YXRzLmZsb2dpX3NlbnQrKzsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+ZmFicmljX25hbWUpOworCisJYmZhX2Zjc19mYWJyaWNfc2V0X29wZXJ0eXBlKGZhYnJpYyk7CisJZmFicmljLT5zdGF0cy5mYWJyaWNfb25saW5lcysrOworCisJLyoqCisJICogbm90aWZ5IG9ubGluZSBldmVudCB0byBiYXNlIGFuZCB0aGVuIHZpcnR1YWwgcG9ydHMKKwkgKi8KKwliZmFfZmNzX3BvcnRfb25saW5lKCZmYWJyaWMtPmJwb3J0KTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmFicmljLT52cG9ydF9xKSB7CisJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc192cG9ydF9vbmxpbmUodnBvcnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmZhYnJpY19uYW1lKTsKKwlmYWJyaWMtPnN0YXRzLmZhYnJpY19vZmZsaW5lcysrOworCisJLyoqCisJICogbm90aWZ5IG9mZmxpbmUgZXZlbnQgZmlyc3QgdG8gdnBvcnRzIGFuZCB0aGVuIGJhc2UgcG9ydC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZhYnJpYy0+dnBvcnRfcSkgeworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopcWU7CisJCWJmYV9mY3NfdnBvcnRfb2ZmbGluZSh2cG9ydCk7CisJfQorCisJYmZhX2Zjc19wb3J0X29mZmxpbmUoJmZhYnJpYy0+YnBvcnQpOworCisJZmFicmljLT5mYWJyaWNfbmFtZSA9IDA7CisJZmFicmljLT5mYWJyaWNfaXBfYWRkclswXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19kZWxheSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljID0gY2Jhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEFZRUQpOworfQorCisvKioKKyAqIERlbGV0ZSBhbGwgdnBvcnRzIGFuZCB3YWl0IGZvciB2cG9ydCBkZWxldGUgY29tcGxldGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19kZWxldGUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmFicmljLT52cG9ydF9xKSB7CisJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc192cG9ydF9kZWxldGUodnBvcnQpOworCX0KKworCWJmYV9mY3NfcG9ydF9kZWxldGUoJmZhYnJpYy0+YnBvcnQpOworCWJmYV93Y193YWl0KCZmYWJyaWMtPndjKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2RlbGV0ZV9jb21wKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fREVMQ09NUCk7Cit9CisKKworCisvKioKKyAqICBmY3NfZmFicmljX3B1YmxpYyBmYWJyaWMgcHVibGljIGZ1bmN0aW9ucworICovCisKKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwliZmFfb3NfbWVtc2V0KGZhYnJpYywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zKSk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGJhc2UgZmFicmljLgorCSAqLworCWZhYnJpYy0+ZmNzID0gZmNzOworCUlOSVRfTElTVF9IRUFEKCZmYWJyaWMtPnZwb3J0X3EpOworCUlOSVRfTElTVF9IRUFEKCZmYWJyaWMtPnZmX3EpOworCWZhYnJpYy0+bHBzID0gYmZhX2xwc19hbGxvYyhmY3MtPmJmYSk7CisJYmZhX2Fzc2VydChmYWJyaWMtPmxwcyk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGZhYnJpYyBkZWxldGUgY29tcGxldGlvbiBoYW5kbGVyLiBGYWJyaWMgZGVsZXRpb24gaXMgY29tcGxldGUKKwkgKiB3aGVuIHRoZSBsYXN0IHZwb3J0IGRlbGV0ZSBpcyBjb21wbGV0ZS4KKwkgKi8KKwliZmFfd2NfaW5pdCgmZmFicmljLT53YywgYmZhX2Zjc19mYWJyaWNfZGVsZXRlX2NvbXAsIGZhYnJpYyk7CisJYmZhX3djX3VwKCZmYWJyaWMtPndjKTsJLyogRm9yIHRoZSBiYXNlIHBvcnQgKi8KKworCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQ1JFQVRFKTsKKwliZmFfdHJjKGZjcywgMCk7Cit9CisKKy8qKgorICogICBNb2R1bGUgY2xlYW51cAorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJYmZhX3RyYyhmY3MsIDApOworCisJLyoqCisJICogQ2xlYW51cCBiYXNlIGZhYnJpYy4KKwkgKi8KKwlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJYmZhX2xwc19kZWxldGUoZmFicmljLT5scHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFKTsKK30KKworLyoqCisgKiBGYWJyaWMgbW9kdWxlIHN0YXJ0IC0tIGtpY2sgc3RhcnRzIEZDUyBhY3Rpb25zCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX21vZHN0YXJ0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJYmZhX3RyYyhmY3MsIDApOworCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiAgIFN1c3BlbmQgZmFicmljIGFjdGl2aXR5IGFzIHBhcnQgb2YgZHJpdmVyIHN1c3BlbmQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX21vZHN1c3Aoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCitiZmFfYm9vbGVhbl90CitiZmFfZmNzX2ZhYnJpY19pc19sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiAoYmZhX3NtX2NtcF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xvb3BiYWNrKSk7Cit9CisKK2VudW0gYmZhX3Bwb3J0X3R5cGUKK2JmYV9mY3NfZmFicmljX3BvcnRfdHlwZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiBmYWJyaWMtPm9wZXJfdHlwZTsKK30KKworLyoqCisgKiAgIExpbmsgdXAgbm90aWZpY2F0aW9uIGZyb20gQkZBIHBoeXNpY2FsIHBvcnQgbW9kdWxlLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19saW5rX3VwKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfVVApOworfQorCisvKioKKyAqICAgTGluayBkb3duIG5vdGlmaWNhdGlvbiBmcm9tIEJGQSBwaHlzaWNhbCBwb3J0IG1vZHVsZS4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfbGlua19kb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTik7Cit9CisKKy8qKgorICogICBBIGNoaWxkIHZwb3J0IGlzIGJlaW5nIGNyZWF0ZWQgaW4gdGhlIGZhYnJpYy4KKyAqCisgKiAgIENhbGwgZnJvbSB2cG9ydCBtb2R1bGUgYXQgdnBvcnQgY3JlYXRpb24uIEEgbGlzdCBvZiBiYXNlIHBvcnQgYW5kIHZwb3J0cworICogICBiZWxvbmdpbmcgdG8gYSBmYWJyaWMgaXMgbWFpbnRhaW5lZCB0byBwcm9wYWdhdGUgbGluayBldmVudHMuCisgKgorICogICBwYXJhbVtpbl0gZmFicmljIC0gRmFicmljIGluc3RhbmNlLiBUaGlzIGNhbiBiZSBhIGJhc2UgZmFicmljIG9yIHZmLgorICogICBwYXJhbVtpbl0gdnBvcnQgIC0gVnBvcnQgYmVpbmcgY3JlYXRlZC4KKyAqCisgKiAgIEByZXR1cm4gTm9uZSAoYWx3YXlzIHN1Y2NlZWRzKQorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19hZGR2cG9ydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJLyoqCisJICogLSBhZGQgdnBvcnQgdG8gZmFicmljJ3MgdnBvcnRfcQorCSAqLworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+dmZfaWQpOworCisJbGlzdF9hZGRfdGFpbCgmdnBvcnQtPnFlLCAmZmFicmljLT52cG9ydF9xKTsKKwlmYWJyaWMtPm51bV92cG9ydHMrKzsKKwliZmFfd2NfdXAoJmZhYnJpYy0+d2MpOworfQorCisvKioKKyAqICAgQSBjaGlsZCB2cG9ydCBpcyBiZWluZyBkZWxldGVkIGZyb20gZmFicmljLgorICoKKyAqICAgVnBvcnQgaXMgYmVpbmcgZGVsZXRlZC4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfZGVsdnBvcnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWxpc3RfZGVsKCZ2cG9ydC0+cWUpOworCWZhYnJpYy0+bnVtX3Zwb3J0cy0tOworCWJmYV93Y19kb3duKCZmYWJyaWMtPndjKTsKK30KKworLyoqCisgKiAgIEJhc2UgcG9ydCBpcyBkZWxldGVkLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19wb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3djX2Rvd24oJmZhYnJpYy0+d2MpOworfQorCisvKioKKyAqICAgIENoZWNrIGlmIGZhYnJpYyBpcyBvbmxpbmUuCisgKgorICogICBwYXJhbVtpbl0gZmFicmljIC0gRmFicmljIGluc3RhbmNlLiBUaGlzIGNhbiBiZSBhIGJhc2UgZmFicmljIG9yIHZmLgorICoKKyAqICAgQHJldHVybiAgVFJVRS9GQUxTRQorICovCitpbnQKK2JmYV9mY3NfZmFicmljX2lzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiAoYmZhX3NtX2NtcF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX29ubGluZSkpOworfQorCisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19mYWJyaWNfYWRkdmYoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKnZmLCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCSAgICAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJICAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYpCit7CisJYmZhX3NtX3NldF9zdGF0ZSh2ZiwgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBMb29rdXAgZm9yIGEgdnBvcnQgd2l0aGluZyBhIGZhYnJpYyBnaXZlbiBpdHMgcHd3bgorICovCitzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICoKK2JmYV9mY3NfZmFicmljX3Zwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCB3d25fdCBwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCisJbGlzdF9mb3JfZWFjaChxZSwgJmZhYnJpYy0+dnBvcnRfcSkgeworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopcWU7CisJCWlmIChiZmFfZmNzX3BvcnRfZ2V0X3B3d24oJnZwb3J0LT5scG9ydCkgPT0gcHd3bikKKwkJCXJldHVybiB2cG9ydDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiAgICBJbiBhIGdpdmVuIGZhYnJpYywgcmV0dXJuIHRoZSBudW1iZXIgb2YgbHBvcnRzLgorICoKKyAqICAgcGFyYW1baW5dIGZhYnJpYyAtIEZhYnJpYyBpbnN0YW5jZS4gVGhpcyBjYW4gYmUgYSBiYXNlIGZhYnJpYyBvciB2Zi4KKyAqCisqICAgIEByZXR1cm4gOiAxIG9yIG1vcmUuCisgKi8KK3UxNgorYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlyZXR1cm4gKGZhYnJpYy0+bnVtX3Zwb3J0cyk7Cit9CisKKy8qKgorICogCQlVbnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsaW5nLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY191Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCSAgICAgICB1MTYgbGVuKQoreworCXUzMiAgICAgICAgcGlkID0gZmNocy0+ZF9pZDsKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOworCXN0cnVjdCBmY19sb2dpX3MgICAgICpmbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIGVsc19jbWQ7CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBsZW4pOworCWJmYV90cmMoZmFicmljLT5mY3MsIHBpZCk7CisKKwkvKioKKwkgKiBMb29rIGZvciBvdXIgb3duIEZMT0dJIGZyYW1lcyBiZWluZyBsb29wZWQgYmFjay4gVGhpcyBtZWFucyBhbgorCSAqIGV4dGVybmFsIGxvb3BiYWNrIGNhYmxlIGlzIGluIHBsYWNlLiBPdXIgb3duIEZMT0dJIGZyYW1lcyBhcmUKKwkgKiBzb21ldGltZXMgbG9vcGVkIGJhY2sgd2hlbiBzd2l0Y2ggcG9ydCBnZXRzIHRlbXBvcmFyaWx5IGJ5cGFzc2VkLgorCSAqLworCWlmICgocGlkID09IGJmYV9vc19udG9oM2IoRkNfRkFCUklDX1BPUlQpKQorCSAgICAmJiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0ZMT0dJKQorCSAgICAmJiAoZmxvZ2ktPnBvcnRfbmFtZSA9PSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24oJmZhYnJpYy0+YnBvcnQpKSkgeworCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xPT1BCQUNLKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZMT0dJL0VWRlAgZXhjaGFuZ2VzIHNob3VsZCBiZSBjb25zdW1lZCBieSBiYXNlIGZhYnJpYy4KKwkgKi8KKwlpZiAoZmNocy0+ZF9pZCA9PSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKSkgeworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBwaWQpOworCQliZmFfZmNzX2ZhYnJpY19wcm9jZXNzX3VmKGZhYnJpYywgZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChmYWJyaWMtPmJwb3J0LnBpZCA9PSBwaWQpIHsKKwkJLyoqCisJCSAqIEFsbCBhdXRoZW50aWNhdGlvbiBmcmFtZXMgc2hvdWxkIGJlIHJvdXRlZCB0byBhdXRoCisJCSAqLworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQVVUSCkgeworCQkJYmZhX3RyYyhmYWJyaWMtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQkJZmFicmljLT5hdXRoLnJlc3BvbnNlID0gKHU4ICopIGVsc19jbWQ7CisJCQlyZXR1cm47CisJCX0KKworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCAqKHU4ICopICgodTggKikgZmNocykpOworCQliZmFfZmNzX3BvcnRfdWZfcmVjdigmZmFicmljLT5icG9ydCwgZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIGxvb2sgZm9yIGEgbWF0Y2hpbmcgbG9jYWwgcG9ydCBJRAorCSAqLworCWxpc3RfZm9yX2VhY2gocWUsICZmYWJyaWMtPnZwb3J0X3EpIHsKKwkJdnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqKXFlOworCQlpZiAodnBvcnQtPmxwb3J0LnBpZCA9PSBwaWQpIHsKKwkJCWJmYV9mY3NfcG9ydF91Zl9yZWN2KCZ2cG9ydC0+bHBvcnQsIGZjaHMsIGxlbik7CisJCQlyZXR1cm47CisJCX0KKwl9CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCWJmYV9mY3NfcG9ydF91Zl9yZWN2KCZmYWJyaWMtPmJwb3J0LCBmY2hzLCBsZW4pOworfQorCisvKioKKyAqIAkJVW5zb2xpY2l0ZWQgZnJhbWVzIHRvIGJlIHByb2Nlc3NlZCBieSBmYWJyaWMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19wcm9jZXNzX3VmKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQkgIHUxNiBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKwljYXNlIEZDX0VMU19GTE9HSToKKwkJYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc19mbG9naShmYWJyaWMsIGZjaHMsIGxlbik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoKKwkJICogbmVlZCB0byBnZW5lcmF0ZSBhIExTX1JKVAorCQkgKi8KKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIAlQcm9jZXNzCWluY29taW5nIEZMT0dJCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19wcm9jZXNzX2Zsb2dpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBmY19sb2dpX3MgICAgICpmbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpicG9ydCA9ICZmYWJyaWMtPmJwb3J0OworCisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmNocy0+c19pZCk7CisKKwlmYWJyaWMtPnN0YXRzLmZsb2dpX3JjdmQrKzsKKwkvKgorCSAqIENoZWNrIHBvcnQgdHlwZS4gSXQgc2hvdWxkIGJlIDAgPSBuLXBvcnQuCisJICovCisJaWYgKGZsb2dpLT5jc3AucG9ydF90eXBlKSB7CisJCS8qCisJCSAqIEB0b2RvOiBtYXkgbmVlZCB0byBzZW5kIGEgTFNfUkpUCisJCSAqLworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmbG9naS0+cG9ydF9uYW1lKTsKKwkJZmFicmljLT5zdGF0cy5mbG9naV9yZWplY3RlZCsrOworCQlyZXR1cm47CisJfQorCisJZmFicmljLT5iYl9jcmVkaXQgPSBiZmFfb3NfbnRvaHMoZmxvZ2ktPmNzcC5iYmNyZWQpOworCWJwb3J0LT5wb3J0X3RvcG8ucG4ybi5yZW1fcG9ydF93d24gPSBmbG9naS0+cG9ydF9uYW1lOworCWJwb3J0LT5wb3J0X3RvcG8ucG4ybi5yZXBseV9veGlkID0gZmNocy0+b3hfaWQ7CisKKwkvKgorCSAqIFNlbmQgYSBGbG9naSBBY2MKKwkgKi8KKwliZmFfZmNzX2ZhYnJpY19zZW5kX2Zsb2dpX2FjYyhmYWJyaWMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NlbmRfZmxvZ2lfYWNjKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyAqbjJuX3BvcnQgPSAmZmFicmljLT5icG9ydC5wb3J0X3RvcG8ucG4ybjsKKwlzdHJ1Y3QgYmZhX3MgICAqYmZhID0gZmFicmljLT5mY3MtPmJmYTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1MTYgICAgICAgIHJlcWxlbjsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKGZhYnJpYy0+ZmNzKTsKKwkvKioKKwkgKiBEbyBub3QgZXhwZWN0IHRoaXMgZmFpbHVyZSAtLSBleHBlY3QgcmVtb3RlIG5vZGUgdG8gcmV0cnkKKwkgKi8KKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCXJlcWxlbiA9IGZjX2Zsb2dpX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQkgICAgYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCksCisJCQkJICAgIG4ybl9wb3J0LT5yZXBseV9veGlkLCBwY2ZnLT5wd3duLAorCQkJCSAgICBwY2ZnLT5ud3duLCBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShiZmEpLAorCQkJCSAgICBiZmFfcHBvcnRfZ2V0X3J4X2JiY3JlZGl0KGJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBmYWJyaWMtPnZmX2lkLCBiZmFfbHBzX2dldF90YWcoZmFicmljLT5scHMpLAorCQkJQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCByZXFsZW4sICZmY2hzLAorCQkJYmZhX2Zjc19mYWJyaWNfZmxvZ2lhY2NfY29tcCwgZmFicmljLAorCQkJRkNfTUFYX1BEVVNaLCAwKTsgLyogVGltZW91dCAwIGluZGljYXRlcyBubworCQkJCQkgICAqIHJlc3BvbnNlIGV4cGVjdGVkCisJCQkJCSAgICovCit9CisKKy8qKgorICogICBGbG9naSBBY2MgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2Zsb2dpYWNjX2NvbXAodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCBzdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BmY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMgPSBjYmFyZzsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIHN0YXR1cyk7Cit9CisKKy8qCisgKgorICogQHBhcmFtW2luXSBmYWJyaWMgLSBmYWJyaWMKKyAqIEBwYXJhbVtpbl0gcmVzdWx0IC0gMQorICoKKyAqIEByZXR1cm4gLSBub25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfYXV0aF9maW5pc2hlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCBlbnVtIGF1dGhfc3RhdHVzIHN0YXR1cykKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cyA9PSBGQ19BVVRIX1NUQVRFX1NVQ0NFU1MpCisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTKTsKKwllbHNlCisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9GQUlMRUQpOworfQorCisvKioKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBvcnQtPmZjcy0+bG9nbTsKKwl3d25fdCAgICAgICAgICAgcHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwl3d25fdCAgICAgICAgICAgZnd3biA9IGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX25hbWUocG9ydCk7CisJY2hhciAgICAgICAgICAgIHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICBmd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKworCXd3bjJzdHIocHd3bl9wdHIsIHB3d24pOworCXd3bjJzdHIoZnd3bl9wdHIsIGZ3d24pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9GQUJSSUNfTkFNRV9DSEFOR0UsIHB3d25fcHRyLAorCQkJZnd3bl9wdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlhZW5fZGF0YS5wb3J0LnB3d24gPSBwd3duOworCWFlbl9kYXRhLnBvcnQuZnd3biA9IGZ3d247Cit9CisKKy8qCisgKgorICogQHBhcmFtW2luXSBmYWJyaWMgLSBmYWJyaWMKKyAqIEBwYXJhbVtpbl0gd3duX3QgLSBuZXcgZmFicmljIG5hbWUKKyAqCisgKiBAcmV0dXJuIC0gbm9uZQorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19zZXRfZmFicmljX25hbWUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgICAgICB3d25fdCBmYWJyaWNfbmFtZSkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWNfbmFtZSk7CisKKwlpZiAoZmFicmljLT5mYWJyaWNfbmFtZSA9PSAwKSB7CisJCS8qCisJCSAqIFdpdGggQlJDRCBzd2l0Y2hlcywgd2UgZG9uJ3QgZ2V0IEZhYnJpYyBOYW1lIGluIEZMT0dJLgorCQkgKiBEb24ndCBnZW5lcmF0ZSBhIGZhYnJpYyBuYW1lIGNoYW5nZSBldmVudCBpbiB0aGlzIGNhc2UuCisJCSAqLworCQlmYWJyaWMtPmZhYnJpY19uYW1lID0gZmFicmljX25hbWU7CisJfSBlbHNlIHsKKwkJZmFicmljLT5mYWJyaWNfbmFtZSA9IGZhYnJpY19uYW1lOworCQkvKgorCQkgKiBHZW5lcmF0ZSBhIEV2ZW50CisJCSAqLworCQliZmFfZmNzX2ZhYnJpY19hZW5fcG9zdCgmZmFicmljLT5icG9ydCwKKwkJCQkJQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRSk7CisJfQorCit9CisKKy8qKgorICogTm90IHVzZWQgYnkgRkNTLgorICovCit2b2lkCitiZmFfY2JfbHBzX2Zsb2dvX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZykKK3sKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzQ3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuYwpAQCAtMCwwICsxLDE0NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qCisgKiBmY2J1aWxkLmMgLSBGQyBsaW5rIHNlcnZpY2UgZnJhbWUgYnVpbGRpbmcgYW5kIHBhcnNpbmcgcm91dGluZXMKKyAqLworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKworLyoKKyAqIHN0YXRpYyBidWlsZCBmdW5jdGlvbnMKKyAqLworc3RhdGljIHZvaWQgZmNfZWxzX3JzcF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworc3RhdGljIHZvaWQgZmNfYmxzX3JzcF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworc3RhdGljIHN0cnVjdCBmY2hzX3MgICBmY19lbHNfcmVxX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjaHNfcyAgIGZjX2Vsc19yc3BfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNoc19zICAgZmNfYmxzX3JlcV90bXBsOworc3RhdGljIHN0cnVjdCBmY2hzX3MgICBmY19ibHNfcnNwX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjX2JhX2FjY19zIGJhX2FjY190bXBsOworc3RhdGljIHN0cnVjdCBmY19sb2dpX3MgcGxvZ2lfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNfcHJsaV9zIHBybGlfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNfcnJxX3MgcnJxX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjaHNfcyAgIGZjcF9mY2hzX3RtcGw7CisKK3ZvaWQKK2ZjYnVpbGRfaW5pdCh2b2lkKQoreworCS8qCisJICogZmNfZWxzX3JlcV90bXBsCisJICovCisJZmNfZWxzX3JlcV90bXBsLnJvdXRpbmcgPSBGQ19SVEdfRVhUX0xJTks7CisJZmNfZWxzX3JlcV90bXBsLmNhdF9pbmZvID0gRkNfQ0FUX0xEX1JFUVVFU1Q7CisJZmNfZWxzX3JlcV90bXBsLnR5cGUgPSBGQ19UWVBFX0VMUzsKKwlmY19lbHNfcmVxX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfU0VRX0lOSSB8IEZDVExfRlNfRVhDSCB8IEZDVExfRU5EX1NFUSB8CisJCQkgICAgICBGQ1RMX1NJX1hGRVIpOworCWZjX2Vsc19yZXFfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19lbHNfcnNwX3RtcGwKKwkgKi8KKwlmY19lbHNfcnNwX3RtcGwucm91dGluZyA9IEZDX1JUR19FWFRfTElOSzsKKwlmY19lbHNfcnNwX3RtcGwuY2F0X2luZm8gPSBGQ19DQVRfTERfUkVQTFk7CisJZmNfZWxzX3JzcF90bXBsLnR5cGUgPSBGQ19UWVBFX0VMUzsKKwlmY19lbHNfcnNwX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfRUNfUkVTUCB8IEZDVExfU0VRX0lOSSB8IEZDVExfTFNfRVhDSCB8CisJCQkgICAgICBGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Vsc19yc3BfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19ibHNfcmVxX3RtcGwKKwkgKi8KKwlmY19ibHNfcmVxX3RtcGwucm91dGluZyA9IEZDX1JUR19CQVNJQ19MSU5LOworCWZjX2Jsc19yZXFfdG1wbC50eXBlID0gRkNfVFlQRV9CTFM7CisJZmNfYmxzX3JlcV90bXBsLmZfY3RsID0gYmZhX29zX2h0b24zYihGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Jsc19yZXFfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19ibHNfcnNwX3RtcGwKKwkgKi8KKwlmY19ibHNfcnNwX3RtcGwucm91dGluZyA9IEZDX1JUR19CQVNJQ19MSU5LOworCWZjX2Jsc19yc3BfdG1wbC5jYXRfaW5mbyA9IEZDX0NBVF9CQV9BQ0M7CisJZmNfYmxzX3JzcF90bXBsLnR5cGUgPSBGQ19UWVBFX0JMUzsKKwlmY19ibHNfcnNwX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfRUNfUkVTUCB8IEZDVExfU0VRX0lOSSB8IEZDVExfTFNfRVhDSCB8CisJCQkgICAgICBGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Jsc19yc3BfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBiYV9hY2NfdG1wbAorCSAqLworCWJhX2FjY190bXBsLnNlcV9pZF92YWxpZCA9IDA7CisJYmFfYWNjX3RtcGwubG93X3NlcV9jbnQgPSAwOworCWJhX2FjY190bXBsLmhpZ2hfc2VxX2NudCA9IDB4RkZGRjsKKworCS8qCisJICogcGxvZ2lfdG1wbAorCSAqLworCXBsb2dpX3RtcGwuY3NwLnZlcmhpID0gRkNfUEhfVkVSX1BIXzM7CisJcGxvZ2lfdG1wbC5jc3AudmVybG8gPSBGQ19QSF9WRVJfNF8zOworCXBsb2dpX3RtcGwuY3NwLmJiY3JlZCA9IGJmYV9vc19odG9ucygweDAwMDQpOworCXBsb2dpX3RtcGwuY3NwLmNpcm8gPSAweDE7CisJcGxvZ2lfdG1wbC5jc3AuY2lzYyA9IDB4MDsKKwlwbG9naV90bXBsLmNzcC5hbHRiYmNyZWQgPSAweDA7CisJcGxvZ2lfdG1wbC5jc3AuY29uc2VxID0gYmZhX29zX2h0b25zKDB4MDBGRik7CisJcGxvZ2lfdG1wbC5jc3Aucm9fYml0bWFwID0gYmZhX29zX2h0b25zKDB4MDAwMik7CisJcGxvZ2lfdG1wbC5jc3AuZV9kX3RvdiA9IGJmYV9vc19odG9ubCgyMDAwKTsKKworCXBsb2dpX3RtcGwuY2xhc3MzLmNsYXNzX3ZhbGlkID0gMTsKKwlwbG9naV90bXBsLmNsYXNzMy5zZXF1ZW50aWFsID0gMTsKKwlwbG9naV90bXBsLmNsYXNzMy5jb25zZXEgPSAweEZGOworCXBsb2dpX3RtcGwuY2xhc3MzLm9zcHggPSAxOworCisJLyoKKwkgKiBwcmxpX3RtcGwKKwkgKi8KKwlwcmxpX3RtcGwuY29tbWFuZCA9IEZDX0VMU19QUkxJOworCXBybGlfdG1wbC5wZ2xlbiA9IDB4MTA7CisJcHJsaV90bXBsLnBhZ2VieXRlcyA9IGJmYV9vc19odG9ucygweDAwMTQpOworCXBybGlfdG1wbC5wYXJhbXBhZ2UudHlwZSA9IEZDX1RZUEVfRkNQOworCXBybGlfdG1wbC5wYXJhbXBhZ2UuaW1hZ2VwYWlyID0gMTsKKwlwcmxpX3RtcGwucGFyYW1wYWdlLnNlcnZwYXJhbXMucnhyZGlzYWIgPSAxOworCisJLyoKKwkgKiBycnFfdG1wbAorCSAqLworCXJycV90bXBsLmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUlJROworCisJLyoKKwkgKiBmY3BfZmNoc190bXBsCisJICovCisJZmNwX2ZjaHNfdG1wbC5yb3V0aW5nID0gRkNfUlRHX0ZDNF9ERVZfREFUQTsKKwlmY3BfZmNoc190bXBsLmNhdF9pbmZvID0gRkNfQ0FUX1VOU09MSUNJVF9DTUQ7CisJZmNwX2ZjaHNfdG1wbC50eXBlID0gRkNfVFlQRV9GQ1A7CisJZmNwX2ZjaHNfdG1wbC5mX2N0bCA9CisJCWJmYV9vc19odG9uM2IoRkNUTF9GU19FWENIIHwgRkNUTF9FTkRfU0VRIHwgRkNUTF9TSV9YRkVSKTsKKwlmY3BfZmNoc190bXBsLnNlcV9pZCA9IDE7CisJZmNwX2ZjaHNfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworfQorCitzdGF0aWMgdm9pZAorZmNfZ3NfZmNoZHJfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTMyIG94X2lkKQoreworCWJmYV9vc19tZW1zZXQoZmNocywgMCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKworCWZjaHMtPnJvdXRpbmcgPSBGQ19SVEdfRkM0X0RFVl9EQVRBOworCWZjaHMtPmNhdF9pbmZvID0gRkNfQ0FUX1VOU09MSUNJVF9DVFJMOworCWZjaHMtPnR5cGUgPSBGQ19UWVBFX1NFUlZJQ0VTOworCWZjaHMtPmZfY3RsID0KKwkJYmZhX29zX2h0b24zYihGQ1RMX1NFUV9JTkkgfCBGQ1RMX0ZTX0VYQ0ggfCBGQ1RMX0VORF9TRVEgfAorCQkJICAgICAgRkNUTF9TSV9YRkVSKTsKKwlmY2hzLT5yeF9pZCA9IEZDX1JYSURfQU5ZOworCWZjaHMtPmRfaWQgPSAoZF9pZCk7CisJZmNocy0+c19pZCA9IChzX2lkKTsKKwlmY2hzLT5veF9pZCA9IGJmYV9vc19odG9ucyhveF9pZCk7CisKKwkvKioKKwkgKiBAdG9kbyBubyBuZWVkIHRvIHNldCBveF9pZCBmb3IgcmVxdWVzdAorCSAqICAgICAgIG5vIG5lZWQgdG8gc2V0IHJ4X2lkIGZvciByZXNwb25zZQorCSAqLworfQorCit2b2lkCitmY19lbHNfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCkKK3sKKwliZmFfb3NfbWVtY3B5KGZjaHMsICZmY19lbHNfcmVxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisJZmNocy0+ZF9pZCA9IChkX2lkKTsKKwlmY2hzLT5zX2lkID0gKHNfaWQpOworCWZjaHMtPm94X2lkID0gYmZhX29zX2h0b25zKG94X2lkKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2Vsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCWJmYV9vc19tZW1jcHkoZmNocywgJmZjX2Vsc19yc3BfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKwlmY2hzLT5kX2lkID0gZF9pZDsKKwlmY2hzLT5zX2lkID0gc19pZDsKKwlmY2hzLT5veF9pZCA9IG94X2lkOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfZWxzX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIGVsc19jbWQ7CisKKwlsZW4gPSBsZW47CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlpZiAobHNfcmp0LT5yZWFzb25fY29kZSA9PSBGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiAoRkNfUEFSU0VfQlVTWSk7CisJCWVsc2UKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwljYXNlIEZDX0VMU19BQ0M6CisJCXJldHVybiAoRkNfUEFSU0VfT0spOworCX0KKwlyZXR1cm4gKEZDX1BBUlNFX09LKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2Jsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCWJmYV9vc19tZW1jcHkoZmNocywgJmZjX2Jsc19yc3BfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKwlmY2hzLT5kX2lkID0gZF9pZDsKKwlmY2hzLT5zX2lkID0gc19pZDsKKwlmY2hzLT5veF9pZCA9IG94X2lkOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitmY19wbG9naV94X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJIHUxNiBwZHVfc2l6ZSwgdTggZWxzX2NvZGUpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKHBsZCk7CisKKwliZmFfb3NfbWVtY3B5KHBsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKKworCXBsb2dpLT5lbHNfY21kLmVsc19jb2RlID0gZWxzX2NvZGU7CisJaWYgKGVsc19jb2RlID09IEZDX0VMU19QTE9HSSkKKwkJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZWxzZQorCQlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXBsb2dpLT5jc3AucnhzeiA9IHBsb2dpLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisKKwliZmFfb3NfbWVtY3B5KCZwbG9naS0+cG9ydF9uYW1lLCAmcG9ydF9uYW1lLCBzaXplb2Yod3duX3QpKTsKKwliZmFfb3NfbWVtY3B5KCZwbG9naS0+bm9kZV9uYW1lLCAmbm9kZV9uYW1lLCBzaXplb2Yod3duX3QpKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKK30KKwordTE2CitmY19mbG9naV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9naV9zICpmbG9naSwgdTMyIHNfaWQsCisJCXUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCXUxNiBwZHVfc2l6ZSwgdTggc2V0X25waXYsIHU4IHNldF9hdXRoLAorCQl1MTYgbG9jYWxfYmJfY3JlZGl0cykKK3sKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKTsKKwl1MzIgCSp2dmxfaW5mbzsKKworCWJmYV9vc19tZW1jcHkoZmxvZ2ksICZwbG9naV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworCisJZmxvZ2ktPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfRkxPR0k7CisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlmbG9naS0+Y3NwLnJ4c3ogPSBmbG9naS0+Y2xhc3MzLnJ4c3ogPSBiZmFfb3NfaHRvbnMocGR1X3NpemUpOworCWZsb2dpLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisJZmxvZ2ktPm5vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKworCS8qCisJICogU2V0IHRoZSBOUElWIENhcGFiaWxpdHkgQml0ICggd29yZCAxLCBiaXQgMzEpIG9mIENvbW1vbgorCSAqIFNlcnZpY2UgUGFyYW1ldGVycy4KKwkgKi8KKwlmbG9naS0+Y3NwLmNpcm8gPSBzZXRfbnBpdjsKKworCS8qIHNldCBBVVRIIGNhcGFiaWxpdHkgKi8KKwlmbG9naS0+Y3NwLnNlY3VyaXR5ID0gc2V0X2F1dGg7CisKKwlmbG9naS0+Y3NwLmJiY3JlZCA9IGJmYV9vc19odG9ucyhsb2NhbF9iYl9jcmVkaXRzKTsKKworCS8qIFNldCBicmNkIHRva2VuIGluIFZWTCAqLworCXZ2bF9pbmZvID0gKHUzMiAqKSZmbG9naS0+dnZsWzBdOworCisJLyogc2V0IHRoZSBmbGFnIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBWVkwgKi8KKwlmbG9naS0+Y3NwLm5waXZfc3VwcCAgICA9IDE7IC8qIEB0b2RvLiBmaWVsZCBuYW1lIGlzIG5vdCBjb3JyZWN0ICovCisJdnZsX2luZm9bMF0JPSBiZmFfb3NfaHRvbmwoRkxPR0lfVlZMX0JSQ0QpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworfQorCit1MTYKK2ZjX2Zsb2dpX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9naV9zICpmbG9naSwgdTMyIHNfaWQsCisJCSAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCSAgIHUxNiBwZHVfc2l6ZSwgdTE2IGxvY2FsX2JiX2NyZWRpdHMpCit7CisJdTMyICAgICAgICBkX2lkID0gMDsKKworCWJmYV9vc19tZW1jcHkoZmxvZ2ksICZwbG9naV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmxvZ2ktPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfQUNDOworCWZsb2dpLT5jc3AucnhzeiA9IGZsb2dpLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisJZmxvZ2ktPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwlmbG9naS0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJZmxvZ2ktPmNzcC5iYmNyZWQgPSBiZmFfb3NfaHRvbnMobG9jYWxfYmJfY3JlZGl0cyk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7Cit9CisKK3UxNgorZmNfZmRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksIHUzMiBzX2lkLAorCQl1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAorCQl1MTYgcGR1X3NpemUpCit7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCk7CisKKwliZmFfb3NfbWVtY3B5KGZsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKKworCWZsb2dpLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0ZESVNDOworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmxvZ2ktPmNzcC5yeHN6ID0gZmxvZ2ktPmNsYXNzMy5yeHN6ID0gYmZhX29zX2h0b25zKHBkdV9zaXplKTsKKwlmbG9naS0+cG9ydF9uYW1lID0gcG9ydF9uYW1lOworCWZsb2dpLT5ub2RlX25hbWUgPSBub2RlX25hbWU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7Cit9CisKK3UxNgorZmNfcGxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJICAgICAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJICAgICAgIHUxNiBwZHVfc2l6ZSkKK3sKKwlyZXR1cm4gZmNfcGxvZ2lfeF9idWlsZChmY2hzLCBwbGQsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBwZHVfc2l6ZSwgRkNfRUxTX1BMT0dJKTsKK30KKwordTE2CitmY19wbG9naV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCSAgIHUxNiBwZHVfc2l6ZSkKK3sKKwlyZXR1cm4gZmNfcGxvZ2lfeF9idWlsZChmY2hzLCBwbGQsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBwZHVfc2l6ZSwgRkNfRUxTX0FDQyk7Cit9CisKK2VudW0gZmNfcGFyc2Vfc3RhdHVzCitmY19wbG9naV9yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbiwgd3duX3QgcG9ydF9uYW1lKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX0xTX1JKVDoKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSAoZmNocyArIDEpOworCQlpZiAobHNfcmp0LT5yZWFzb25fY29kZSA9PSBGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiAoRkNfUEFSU0VfQlVTWSk7CisJCWVsc2UKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisJY2FzZSBGQ19FTFNfQUNDOgorCQlwbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIChmY2hzICsgMSk7CisJCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCWlmICghd3duX2lzX2VxdWFsKHBsb2dpLT5wb3J0X25hbWUsIHBvcnRfbmFtZSkpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCWlmICghcGxvZ2ktPmNsYXNzMy5jbGFzc192YWxpZCkKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwkJaWYgKGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opIDwgKEZDX01JTl9QRFVTWikpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCXJldHVybiAoRkNfUEFSU0VfT0spOworCWRlZmF1bHQ6CisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisJfQorfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcGxvZ2lfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocykKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGxvZ2kgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJaWYgKHBsb2dpLT5jbGFzczMuY2xhc3NfdmFsaWQgIT0gMSkKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlpZiAoKGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opIDwgRkNfTUlOX1BEVVNaKQorCSAgICB8fCAoYmZhX29zX250b2hzKHBsb2dpLT5jbGFzczMucnhzeikgPiBGQ19NQVhfUERVU1opCisJICAgIHx8IChwbG9naS0+Y2xhc3MzLnJ4c3ogPT0gMCkpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfcHJsaV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkgICAgICB1MTYgb3hfaWQpCit7CisJc3RydWN0IGZjX3BybGlfcyAgICAgICpwcmxpID0gKHN0cnVjdCBmY19wcmxpX3MgKikgKHBsZCk7CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwliZmFfb3NfbWVtY3B5KHBybGksICZwcmxpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSk7CisKKwlwcmxpLT5jb21tYW5kID0gRkNfRUxTX1BSTEk7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yICAgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMucmV0cnkgICAgICAgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMucmVjX3N1cHBvcnQgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMudGFza19yZXRyeV9pZCA9IDA7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuY29uZmlybSAgICAgICA9IDE7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSk7Cit9CisKK3UxNgorZmNfcHJsaV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgdTE2IG94X2lkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZSkKK3sKKwlzdHJ1Y3QgZmNfcHJsaV9zICAgICAgKnBybGkgPSAoc3RydWN0IGZjX3BybGlfcyAqKSAocGxkKTsKKworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWJmYV9vc19tZW1jcHkocHJsaSwgJnBybGlfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19wcmxpX3MpKTsKKworCXBybGktPmNvbW1hbmQgPSBGQ19FTFNfQUNDOworCisJaWYgKChyb2xlICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pID09IEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQlwcmxpLT5wYXJhbXBhZ2Uuc2VydnBhcmFtcy50YXJnZXQgPSAxOworCWVsc2UKKwkJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yID0gMTsKKworCXBybGktPnBhcmFtcGFnZS5yc3Bjb2RlID0gRkNfUFJMSV9BQ0NfWFFURDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19wcmxpX3MpKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX3BybGlfcnNwX3BhcnNlKHN0cnVjdCBmY19wcmxpX3MgKnBybGksIGludCBsZW4pCit7CisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmIChwcmxpLT5jb21tYW5kICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoKHBybGktPnBhcmFtcGFnZS5yc3Bjb2RlICE9IEZDX1BSTElfQUNDX1hRVEQpCisJICAgICYmIChwcmxpLT5wYXJhbXBhZ2UucnNwY29kZSAhPSBGQ19QUkxJX0FDQ19QUkVERUZfSU1HKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmIChwcmxpLT5wYXJhbXBhZ2Uuc2VydnBhcmFtcy50YXJnZXQgIT0gMSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcHJsaV9wYXJzZShzdHJ1Y3QgZmNfcHJsaV9zICpwcmxpKQoreworCWlmIChwcmxpLT5wYXJhbXBhZ2UudHlwZSAhPSBGQ19UWVBFX0ZDUCkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghcHJsaS0+cGFyYW1wYWdlLmltYWdlcGFpcikKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJcmV0dXJuIChGQ19QQVJTRV9PSyk7Cit9CisKK3UxNgorZmNfbG9nb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9nb19zICpsb2dvLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChsb2dvLCAnXDAnLCBzaXplb2Yoc3RydWN0IGZjX2xvZ29fcykpOworCWxvZ28tPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfTE9HTzsKKwlsb2dvLT5ucG9ydF9pZCA9IChzX2lkKTsKKwlsb2dvLT5vcmlnX3BvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sb2dvX3MpKTsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorZmNfYWRpc2NfeF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIHUzMiBkX2lkLAorCQkgdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkgd3duX3Qgbm9kZV9uYW1lLCB1OCBlbHNfY29kZSkKK3sKKwltZW1zZXQoYWRpc2MsICdcMCcsIHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpOworCisJYWRpc2MtPmVsc19jbWQuZWxzX2NvZGUgPSBlbHNfY29kZTsKKworCWlmIChlbHNfY29kZSA9PSBGQ19FTFNfQURJU0MpCisJCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWVsc2UKKwkJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlhZGlzYy0+b3JpZ19IQSA9IDA7CisJYWRpc2MtPm9yaWdfcG9ydF9uYW1lID0gcG9ydF9uYW1lOworCWFkaXNjLT5vcmlnX25vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKwlhZGlzYy0+bnBvcnRfaWQgPSAoc19pZCk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpOworfQorCit1MTYKK2ZjX2FkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJd3duX3Qgbm9kZV9uYW1lKQoreworCXJldHVybiBmY19hZGlzY194X2J1aWxkKGZjaHMsIGFkaXNjLCBkX2lkLCBzX2lkLCBveF9pZCwgcG9ydF9uYW1lLAorCQkJCW5vZGVfbmFtZSwgRkNfRUxTX0FESVNDKTsKK30KKwordTE2CitmY19hZGlzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLCB1MzIgZF9pZCwKKwkJICAgdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkgICB3d25fdCBub2RlX25hbWUpCit7CisJcmV0dXJuIGZjX2FkaXNjX3hfYnVpbGQoZmNocywgYWRpc2MsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBGQ19FTFNfQUNDKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX2FkaXNjX3JzcF9wYXJzZShzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIGludCBsZW4sIHd3bl90IHBvcnRfbmFtZSwKKwkJCQkgd3duX3Qgbm9kZV9uYW1lKQoreworCisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoYWRpc2MtPmVsc19jbWQuZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghd3duX2lzX2VxdWFsKGFkaXNjLT5vcmlnX3BvcnRfbmFtZSwgcG9ydF9uYW1lKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfYWRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgaG9zdF9kYXAsCisJCSB3d25fdCBub2RlX25hbWUsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlzdHJ1Y3QgZmNfYWRpc2NfcyAgICAgKmFkaXNjID0gKHN0cnVjdCBmY19hZGlzY19zICopIHBsZDsKKworCWlmIChhZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJaWYgKChhZGlzYy0+bnBvcnRfaWQgPT0gKGhvc3RfZGFwKSkKKwkgICAgJiYgd3duX2lzX2VxdWFsKGFkaXNjLT5vcmlnX3BvcnRfbmFtZSwgcG9ydF9uYW1lKQorCSAgICAmJiB3d25faXNfZXF1YWwoYWRpc2MtPm9yaWdfbm9kZV9uYW1lLCBub2RlX25hbWUpKQorCQlyZXR1cm4gKEZDX1BBUlNFX09LKTsKKworCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7Cit9CisKK2VudW0gZmNfcGFyc2Vfc3RhdHVzCitmY19wZGlzY19wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCB3d25fdCBub2RlX25hbWUsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGRpc2MgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJaWYgKHBkaXNjLT5jbGFzczMuY2xhc3NfdmFsaWQgIT0gMSkKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlpZiAoKGJmYV9vc19udG9ocyhwZGlzYy0+Y2xhc3MzLnJ4c3opIDwKKwkJIChGQ19NSU5fUERVU1ogLSBzaXplb2Yoc3RydWN0IGZjaHNfcykpKQorCSAgICB8fCAocGRpc2MtPmNsYXNzMy5yeHN6ID09IDApKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJaWYgKCF3d25faXNfZXF1YWwocGRpc2MtPnBvcnRfbmFtZSwgcG9ydF9uYW1lKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghd3duX2lzX2VxdWFsKHBkaXNjLT5ub2RlX25hbWUsIG5vZGVfbmFtZSkpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfYWJ0c19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwliZmFfb3NfbWVtY3B5KGZjaHMsICZmY19ibHNfcmVxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisJZmNocy0+Y2F0X2luZm8gPSBGQ19DQVRfQUJUUzsKKwlmY2hzLT5kX2lkID0gKGRfaWQpOworCWZjaHMtPnNfaWQgPSAoc19pZCk7CisJZmNocy0+b3hfaWQgPSBiZmFfb3NfaHRvbnMob3hfaWQpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjaHNfcykpOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfYWJ0c19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlpZiAoKGZjaHMtPmNhdF9pbmZvID09IEZDX0NBVF9CQV9BQ0MpCisJICAgIHx8IChmY2hzLT5jYXRfaW5mbyA9PSBGQ19DQVRfQkFfUkpUKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9PSyk7CisKKwlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworfQorCit1MTYKK2ZjX3JycV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcnJxX3MgKnJycSwgdTMyIGRfaWQsCisJCQkgdTMyIHNfaWQsIHUxNiBveF9pZCwgdTE2IHJycV9veGlkKQoreworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJLyoKKwkgKiBidWlsZCBycnEgcGF5bG9hZAorCSAqLworCWJmYV9vc19tZW1jcHkocnJxLCAmcnJxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfcnJxX3MpKTsKKwlycnEtPnNfaWQgPSAoc19pZCk7CisJcnJxLT5veF9pZCA9IGJmYV9vc19odG9ucyhycnFfb3hpZCk7CisJcnJxLT5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3JycV9zKSk7Cit9CisKK3UxNgorZmNfbG9nb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgdTE2IG94X2lkKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqYWNjID0gcGxkOworCisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQoYWNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX2Vsc19jbWRfcykpOworCWFjYy0+ZWxzX2NvZGUgPSBGQ19FTFNfQUNDOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2Vsc19jbWRfcykpOworfQorCit1MTYKK2ZjX2xzX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbHNfcmp0X3MgKmxzX3JqdCwgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHU4IHJlYXNvbl9jb2RlLAorCQl1OCByZWFzb25fY29kZV9leHBsKQoreworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCW1lbXNldChsc19yanQsIDAsIHNpemVvZihzdHJ1Y3QgZmNfbHNfcmp0X3MpKTsKKworCWxzX3JqdC0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19MU19SSlQ7CisJbHNfcmp0LT5yZWFzb25fY29kZSA9IHJlYXNvbl9jb2RlOworCWxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCA9IHJlYXNvbl9jb2RlX2V4cGw7CisJbHNfcmp0LT52ZW5kb3JfdW5pcXVlID0gMHgwMDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sc19yanRfcykpOworfQorCit1MTYKK2ZjX2JhX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYmFfYWNjX3MgKmJhX2FjYywgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHUxNiByeF9pZCkKK3sKKwlmY19ibHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCWJmYV9vc19tZW1jcHkoYmFfYWNjLCAmYmFfYWNjX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfYmFfYWNjX3MpKTsKKworCWZjaHMtPnJ4X2lkID0gcnhfaWQ7CisKKwliYV9hY2MtPm94X2lkID0gZmNocy0+b3hfaWQ7CisJYmFfYWNjLT5yeF9pZCA9IGZjaHMtPnJ4X2lkOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2JhX2FjY19zKSk7Cit9CisKK3UxNgorZmNfbHNfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19lbHNfY21kX3MgKmVsc19jbWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwltZW1zZXQoZWxzX2NtZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfY21kX3MpKTsKKwllbHNfY21kLT5lbHNfY29kZSA9IEZDX0VMU19BQ0M7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfZWxzX2NtZF9zKSk7Cit9CisKK2ludAorZmNfbG9nb3V0X3BhcmFtc19wYWdlcyhzdHJ1Y3QgZmNoc19zICpmY19mcmFtZSwgdTggZWxzX2NvZGUpCit7CisJaW50ICAgICAgICAgICAgIG51bV9wYWdlcyA9IDA7CisJc3RydWN0IGZjX3BybG9fcyAgICAgICpwcmxvOworCXN0cnVjdCBmY190cHJsb19zICAgICAqdHBybG87CisKKwlpZiAoZWxzX2NvZGUgPT0gRkNfRUxTX1BSTE8pIHsKKwkJcHJsbyA9IChzdHJ1Y3QgZmNfcHJsb19zICopIChmY19mcmFtZSArIDEpOworCQludW1fcGFnZXMgPSAoYmZhX29zX250b2hzKHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisJfSBlbHNlIHsKKwkJdHBybG8gPSAoc3RydWN0IGZjX3RwcmxvX3MgKikgKGZjX2ZyYW1lICsgMSk7CisJCW51bV9wYWdlcyA9IChiZmFfb3NfbnRvaHModHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisJfQorCXJldHVybiBudW1fcGFnZXM7Cit9CisKK3UxNgorZmNfdHBybG9fYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY190cHJsb19hY2NfcyAqdHBybG9fYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlpbnQgbnVtX3BhZ2VzKQoreworCWludCAgICAgICAgICAgICBwYWdlOworCisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQodHBybG9fYWNjLCAwLCAobnVtX3BhZ2VzICogMTYpICsgNCk7CisJdHBybG9fYWNjLT5jb21tYW5kID0gRkNfRUxTX0FDQzsKKworCXRwcmxvX2FjYy0+cGFnZV9sZW4gPSAweDEwOworCXRwcmxvX2FjYy0+cGF5bG9hZF9sZW4gPSBiZmFfb3NfaHRvbnMoKG51bV9wYWdlcyAqIDE2KSArIDQpOworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG51bV9wYWdlczsgcGFnZSsrKSB7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgPSAwOworCQl0cHJsb19hY2MtPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkID0gMDsKKwkJdHBybG9fYWNjLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLmZjNHR5cGVfY3NwID0gRkNfVFlQRV9GQ1A7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyA9IDA7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5yZXNwX3Byb2Nlc3NfYXNzYyA9IDA7CisJfQorCXJldHVybiAoYmZhX29zX250b2hzKHRwcmxvX2FjYy0+cGF5bG9hZF9sZW4pKTsKK30KKwordTE2CitmY19wcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcHJsb19hY2NfcyAqcHJsb19hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCWludCBudW1fcGFnZXMpCit7CisJaW50ICAgICAgICAgICAgIHBhZ2U7CisKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChwcmxvX2FjYywgMCwgKG51bV9wYWdlcyAqIDE2KSArIDQpOworCXBybG9fYWNjLT5jb21tYW5kID0gRkNfRUxTX0FDQzsKKwlwcmxvX2FjYy0+cGFnZV9sZW4gPSAweDEwOworCXBybG9fYWNjLT5wYXlsb2FkX2xlbiA9IGJmYV9vc19odG9ucygobnVtX3BhZ2VzICogMTYpICsgNCk7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJcHJsb19hY2MtPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgPSAwOworCQlwcmxvX2FjYy0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCA9IDA7CisJCXBybG9fYWNjLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0uZmM0dHlwZV9jc3AgPSBGQ19UWVBFX0ZDUDsKKwkJcHJsb19hY2MtPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyA9IDA7CisJCXBybG9fYWNjLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ucmVzcF9wcm9jZXNzX2Fzc2MgPSAwOworCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHBybG9fYWNjLT5wYXlsb2FkX2xlbikpOworfQorCit1MTYKK2ZjX3JuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgdTMyIGRhdGFfZm9ybWF0KQoreworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJbWVtc2V0KHJuaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9jbWRfcykpOworCisJcm5pZC0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19STklEOworCXJuaWQtPm5vZGVfaWRfZGF0YV9mb3JtYXQgPSBkYXRhX2Zvcm1hdDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2NtZF9zKSk7Cit9CisKK3UxNgorZmNfcm5pZF9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfYWNjX3MgKnJuaWRfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1MzIgZGF0YV9mb3JtYXQsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zICpjb21tb25faWRfZGF0YSwKKwkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICpnZW5fdG9wb19kYXRhKQoreworCW1lbXNldChybmlkX2FjYywgMCwgc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2FjY19zKSk7CisKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXJuaWRfYWNjLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0FDQzsKKwlybmlkX2FjYy0+bm9kZV9pZF9kYXRhX2Zvcm1hdCA9IGRhdGFfZm9ybWF0OworCXJuaWRfYWNjLT5jb21tb25faWRfZGF0YV9sZW5ndGggPQorCQkJc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2NvbW1vbl9pZF9kYXRhX3MpOworCXJuaWRfYWNjLT5jb21tb25faWRfZGF0YSA9ICpjb21tb25faWRfZGF0YTsKKworCWlmIChkYXRhX2Zvcm1hdCA9PSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlkpIHsKKwkJcm5pZF9hY2MtPnNwZWNpZmljX2lkX2RhdGFfbGVuZ3RoID0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyk7CisJCWJmYV9vc19hc3NpZ24ocm5pZF9hY2MtPmdlbl90b3BvbG9neV9kYXRhLCAqZ2VuX3RvcG9fZGF0YSk7CisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2FjY19zKSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3JuaWRfYWNjX3MpIC0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcykpOworCX0KKworfQorCit1MTYKK2ZjX3Jwc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfY21kX3MgKnJwc2MsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChycHNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2NfY21kX3MpKTsKKworCXJwc2MtPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUlBTQzsKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcnBzY19jbWRfcykpOworfQorCit1MTYKK2ZjX3Jwc2MyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjMl9jbWRfcyAqcnBzYzIsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUzMiAqcGlkX2xpc3QsCisJCQl1MTYgbnBpZHMpCit7CisJdTMyIGRjdGxyX2lkID0gRkNfRE9NQUlOX0NUUkxSKGJmYV9vc19odG9uM2IoZF9pZCkpOworCWludCBpID0gMDsKKworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgYmZhX29zX2h0b24zYihkY3Rscl9pZCksIHNfaWQsIDApOworCisJbWVtc2V0KHJwc2MyLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2MyX2NtZF9zKSk7CisKKwlycHNjMi0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19SUFNDOworCXJwc2MyLT50b2tlbiA9IGJmYV9vc19odG9ubChGQ19CUkNEX1RPS0VOKTsKKwlycHNjMi0+bnVtX3BpZHMgID0gYmZhX29zX2h0b25zKG5waWRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnBpZHM7IGkrKykKKwkJcnBzYzItPnBpZF9saXN0W2ldLnBpZCA9IHBpZF9saXN0W2ldOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3Jwc2MyX2NtZF9zKSArICgobnBpZHMgLSAxKSAqCisJCQkoc2l6ZW9mKHUzMikpKSk7Cit9CisKK3UxNgorZmNfcnBzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfYWNjX3MgKnJwc2NfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3MgKm9wZXJfc3BlZWQpCit7CisJbWVtc2V0KHJwc2NfYWNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2NfYWNjX3MpKTsKKworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJcnBzY19hY2MtPmNvbW1hbmQgPSBGQ19FTFNfQUNDOworCXJwc2NfYWNjLT5udW1fZW50cmllcyA9IGJmYV9vc19odG9ucygxKTsKKworCXJwc2NfYWNjLT5zcGVlZF9pbmZvWzBdLnBvcnRfc3BlZWRfY2FwID0KKwkJYmZhX29zX2h0b25zKG9wZXJfc3BlZWQtPnBvcnRfc3BlZWRfY2FwKTsKKworCXJwc2NfYWNjLT5zcGVlZF9pbmZvWzBdLnBvcnRfb3Bfc3BlZWQgPQorCQliZmFfb3NfaHRvbnMob3Blcl9zcGVlZC0+cG9ydF9vcF9zcGVlZCk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcnBzY19hY2NfcykpOworCit9CisKKy8qCisgKiBUQkQgLQorICogLiBnZXQgcmlkIG9mIHVubmVjZXNzYXJ5IG1lbXNldHMKKyAqLworCit1MTYKK2ZjX2xvZ29fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWxlbiA9IGxlbjsKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfcGRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJCXUxNiBwZHVfc2l6ZSkKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGRpc2MgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJYmZhX29zX21lbWNweShwZGlzYywgJnBsb2dpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7CisKKwlwZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19QRElTQzsKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXBkaXNjLT5jc3AucnhzeiA9IHBkaXNjLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisJcGRpc2MtPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwlwZGlzYy0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworfQorCit1MTYKK2ZjX3BkaXNjX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuLCB3d25fdCBwb3J0X25hbWUpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBkaXNjID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKGZjaHMgKyAxKTsKKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpCisJCXJldHVybiAoRkNfUEFSU0VfTEVOX0lOVkFMKTsKKworCWlmIChwZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0FDQ19JTlZBTCk7CisKKwlpZiAoIXd3bl9pc19lcXVhbChwZGlzYy0+cG9ydF9uYW1lLCBwb3J0X25hbWUpKQorCQlyZXR1cm4gKEZDX1BBUlNFX1BXV05fTk9UX0VRVUFMKTsKKworCWlmICghcGRpc2MtPmNsYXNzMy5jbGFzc192YWxpZCkKKwkJcmV0dXJuIChGQ19QQVJTRV9OV1dOX05PVF9FUVVBTCk7CisKKwlpZiAoYmZhX29zX250b2hzKHBkaXNjLT5jbGFzczMucnhzeikgPCAoRkNfTUlOX1BEVVNaKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9SWFNaX0lOVkFMKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCit1MTYKK2ZjX3BybG9fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgaW50IG51bV9wYWdlcykKK3sKKwlzdHJ1Y3QgZmNfcHJsb19zICAgICAgKnBybG8gPSAoc3RydWN0IGZjX3BybG9fcyAqKSAoZmNocyArIDEpOworCWludCAgICAgICAgICAgICBwYWdlOworCisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJbWVtc2V0KHBybG8sIDAsIChudW1fcGFnZXMgKiAxNikgKyA0KTsKKwlwcmxvLT5jb21tYW5kID0gRkNfRUxTX1BSTE87CisJcHJsby0+cGFnZV9sZW4gPSAweDEwOworCXBybG8tPnBheWxvYWRfbGVuID0gYmZhX29zX2h0b25zKChudW1fcGFnZXMgKiAxNikgKyA0KTsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBudW1fcGFnZXM7IHBhZ2UrKykgeworCQlwcmxvLT5wcmxvX3BhcmFtc1twYWdlXS50eXBlID0gRkNfVFlQRV9GQ1A7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLm9wYV92YWxpZCA9IDA7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCA9IDA7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjID0gMDsKKwkJcHJsby0+cHJsb19wYXJhbXNbcGFnZV0ucmVzcF9wcm9jZXNzX2Fzc2MgPSAwOworCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHBybG8tPnBheWxvYWRfbGVuKSk7Cit9CisKK3UxNgorZmNfcHJsb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZmNfcHJsb19hY2NfcyAgKnBybG8gPSAoc3RydWN0IGZjX3BybG9fYWNjX3MgKikgKGZjaHMgKyAxKTsKKwlpbnQgICAgICAgICAgICAgbnVtX3BhZ2VzID0gMDsKKwlpbnQgICAgICAgICAgICAgcGFnZSA9IDA7CisKKwlsZW4gPSBsZW47CisKKwlpZiAocHJsby0+Y29tbWFuZCAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJbnVtX3BhZ2VzID0gKChiZmFfb3NfbnRvaHMocHJsby0+cGF5bG9hZF9sZW4pKSAtIDQpIC8gMTY7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJaWYgKHBybG8tPnBybG9fYWNjX3BhcmFtc1twYWdlXS50eXBlICE9IEZDX1RZUEVfRkNQKQorCQkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwkJaWYgKHBybG8tPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgIT0gMCkKKwkJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJCWlmIChwcmxvLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKworCQlpZiAocHJsby0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKworCQlpZiAocHJsby0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJlc3BfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKwl9CisJcmV0dXJuIChGQ19QQVJTRV9PSyk7CisKK30KKwordTE2CitmY190cHJsb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIGludCBudW1fcGFnZXMsCisJCQllbnVtIGZjX3RwcmxvX3R5cGUgdHBybG9fdHlwZSwgdTMyIHRwcl9pZCkKK3sKKwlzdHJ1Y3QgZmNfdHBybG9fcyAgICAgKnRwcmxvID0gKHN0cnVjdCBmY190cHJsb19zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIHBhZ2U7CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwltZW1zZXQodHBybG8sIDAsIChudW1fcGFnZXMgKiAxNikgKyA0KTsKKwl0cHJsby0+Y29tbWFuZCA9IEZDX0VMU19UUFJMTzsKKwl0cHJsby0+cGFnZV9sZW4gPSAweDEwOworCXRwcmxvLT5wYXlsb2FkX2xlbiA9IGJmYV9vc19odG9ucygobnVtX3BhZ2VzICogMTYpICsgNCk7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50eXBlID0gRkNfVFlQRV9GQ1A7CisJCXRwcmxvLT50cHJsb19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkID0gMDsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS5ycGFfdmFsaWQgPSAwOworCQl0cHJsby0+dHBybG9fcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjID0gMDsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS5yZXNwX3Byb2Nlc3NfYXNzYyA9IDA7CisJCWlmICh0cHJsb190eXBlID09IEZDX0dMT0JBTF9MT0dPKSB7CisJCQl0cHJsby0+dHBybG9fcGFyYW1zW3BhZ2VdLmdsb2JhbF9wcm9jZXNzX2xvZ291dCA9IDE7CisJCX0gZWxzZSBpZiAodHBybG9fdHlwZSA9PSBGQ19UUFJfTE9HTykgeworCQkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50cG9fbnBvcnRfdmFsaWQgPSAxOworCQkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50cG9fbnBvcnRfaWQgPSAodHByX2lkKTsKKwkJfQorCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHRwcmxvLT5wYXlsb2FkX2xlbikpOworfQorCit1MTYKK2ZjX3RwcmxvX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY190cHJsb19hY2NfcyAqdHBybG8gPSAoc3RydWN0IGZjX3RwcmxvX2FjY19zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIG51bV9wYWdlcyA9IDA7CisJaW50ICAgICAgICAgICAgIHBhZ2UgPSAwOworCisJbGVuID0gbGVuOworCisJaWYgKHRwcmxvLT5jb21tYW5kICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiAoRkNfUEFSU0VfQUNDX0lOVkFMKTsKKworCW51bV9wYWdlcyA9IChiZmFfb3NfbnRvaHModHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnR5cGUgIT0gRkNfVFlQRV9GQ1ApCisJCQlyZXR1cm4gKEZDX1BBUlNFX05PVF9GQ1ApOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX09QQUZMQUdfSU5WQUwpOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX1JQQUZMQUdfSU5WQUwpOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ub3JpZ19wcm9jZXNzX2Fzc2MgIT0gMCkKKwkJCXJldHVybiAoRkNfUEFSU0VfT1BBX0lOVkFMKTsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJlc3BfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX1JQQV9JTlZBTCk7CisJfQorCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcnJxX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwlsZW4gPSBsZW47CisJaWYgKGVsc19jbWQtPmVsc19jb2RlICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJcmV0dXJuIEZDX1BBUlNFX09LOworfQorCit1MTYKK2ZjX2JhX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHUzMiByZWFzb25fY29kZSwKKwkJCXUzMiByZWFzb25fZXhwbCkKK3sKKwlzdHJ1Y3QgZmNfYmFfcmp0X3MgICAgKmJhX3JqdCA9IChzdHJ1Y3QgZmNfYmFfcmp0X3MgKikgKGZjaHMgKyAxKTsKKworCWZjX2Jsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmNocy0+Y2F0X2luZm8gPSBGQ19DQVRfQkFfUkpUOworCWJhX3JqdC0+cmVhc29uX2NvZGUgPSByZWFzb25fY29kZTsKKwliYV9yanQtPnJlYXNvbl9leHBsID0gcmVhc29uX2V4cGw7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2JhX3JqdF9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitmY19nc19jdGhkcl9idWlsZChzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyLCB1MzIgc19pZCwgdTE2IGNtZF9jb2RlKQoreworCWJmYV9vc19tZW1zZXQoY3RoZHIsIDAsIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKKwljdGhkci0+cmV2X2lkID0gQ1RfR1MzX1JFVklTSU9OOworCWN0aGRyLT5nc190eXBlID0gQ1RfR1NUWVBFX0RJUlNFUlZJQ0U7CisJY3RoZHItPmdzX3N1Yl90eXBlID0gQ1RfR1NTVUJUWVBFX05BTUVTRVJWRVI7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19odG9ucyhjbWRfY29kZSk7Cit9CisKK3N0YXRpYyB2b2lkCitmY19nc19mZG1pX2N0aGRyX2J1aWxkKHN0cnVjdCBjdF9oZHJfcyAqY3RoZHIsIHUzMiBzX2lkLCB1MTYgY21kX2NvZGUpCit7CisJYmZhX29zX21lbXNldChjdGhkciwgMCwgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworCWN0aGRyLT5yZXZfaWQgPSBDVF9HUzNfUkVWSVNJT047CisJY3RoZHItPmdzX3R5cGUgPSBDVF9HU1RZUEVfTUdNVFNFUlZJQ0U7CisJY3RoZHItPmdzX3N1Yl90eXBlID0gQ1RfR1NTVUJUWVBFX0hCQV9NR01UU0VSVkVSOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfaHRvbnMoY21kX2NvZGUpOworfQorCitzdGF0aWMgdm9pZAorZmNfZ3NfbXNfY3RoZHJfYnVpbGQoc3RydWN0IGN0X2hkcl9zICpjdGhkciwgdTMyIHNfaWQsIHUxNiBjbWRfY29kZSwKKwkJCQkJIHU4IHN1Yl90eXBlKQoreworCWJmYV9vc19tZW1zZXQoY3RoZHIsIDAsIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKKwljdGhkci0+cmV2X2lkID0gQ1RfR1MzX1JFVklTSU9OOworCWN0aGRyLT5nc190eXBlID0gQ1RfR1NUWVBFX01HTVRTRVJWSUNFOworCWN0aGRyLT5nc19zdWJfdHlwZSA9IHN1Yl90eXBlOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfaHRvbnMoY21kX2NvZGUpOworfQorCit1MTYKK2ZjX2dpZHBuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgIHd3bl90IHBvcnRfbmFtZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MgKmdpZHBuID0KKwkJCShzdHJ1Y3QgZmNnc19naWRwbl9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR0lEX1BOKTsKKworCWJmYV9vc19tZW1zZXQoZ2lkcG4sIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19naWRwbl9yZXFfcykpOworCWdpZHBuLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX2dwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgIHUzMiBwb3J0X2lkKQoreworCisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dwbmlkX3JlcV90ICpncG5pZCA9IChmY2dzX2dwbmlkX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HUE5fSUQpOworCisJYmZhX29zX21lbXNldChncG5pZCwgMCwgc2l6ZW9mKGZjZ3NfZ3BuaWRfcmVxX3QpKTsKKwlncG5pZC0+ZGFwID0gcG9ydF9pZDsKKwlyZXR1cm4gKHNpemVvZihmY2dzX2dwbmlkX3JlcV90KSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19nbm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICB1MzIgcG9ydF9pZCkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJZmNnc19nbm5pZF9yZXFfdCAqZ25uaWQgPSAoZmNnc19nbm5pZF9yZXFfdCAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR05OX0lEKTsKKworCWJmYV9vc19tZW1zZXQoZ25uaWQsIDAsIHNpemVvZihmY2dzX2dubmlkX3JlcV90KSk7CisJZ25uaWQtPmRhcCA9IHBvcnRfaWQ7CisJcmV0dXJuIChzaXplb2YoZmNnc19nbm5pZF9yZXFfdCkgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfY3RfcnNwX3BhcnNlKHN0cnVjdCBjdF9oZHJfcyAqY3RoZHIpCit7CisJaWYgKGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKSAhPSBDVF9SU1BfQUNDRVBUKSB7CisJCWlmIChjdGhkci0+cmVhc29uX2NvZGUgPT0gQ1RfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiBGQ19QQVJTRV9CVVNZOworCQllbHNlCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfc2NyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19zY3JfcyAqc2NyLCB1OCBzZXRfYnJfcmVnLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19DT05UUk9MTEVSKTsKKworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJYmZhX29zX21lbXNldChzY3IsIDAsIHNpemVvZihzdHJ1Y3QgZmNfc2NyX3MpKTsKKwlzY3ItPmNvbW1hbmQgPSBGQ19FTFNfU0NSOworCXNjci0+cmVnX2Z1bmMgPSBGQ19TQ1JfUkVHX0ZVTkNfRlVMTDsKKwlpZiAoc2V0X2JyX3JlZykKKwkJc2NyLT52dV9yZWdfZnVuYyA9IEZDX1ZVX1NDUl9SRUdfRlVOQ19GQUJSSUNfTkFNRV9DSEFOR0U7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfc2NyX3MpKTsKK30KKwordTE2CitmY19yc2NuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19yc2NuX3BsX3MgKnJzY24sIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfRkFCUklDX0NPTlRST0xMRVIpOworCXUxNiAgICAgICAgcGF5bGRsZW47CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlyc2NuLT5jb21tYW5kID0gRkNfRUxTX1JTQ047CisJcnNjbi0+cGFnZWxlbiA9IHNpemVvZihyc2NuLT5ldmVudFswXSk7CisKKwlwYXlsZGxlbiA9IHNpemVvZih1MzIpICsgcnNjbi0+cGFnZWxlbjsKKwlyc2NuLT5wYXlsZGxlbiA9IGJmYV9vc19odG9ucyhwYXlsZGxlbik7CisKKwlyc2NuLT5ldmVudFswXS5mb3JtYXQgPSBGQ19SU0NOX0ZPUk1BVF9QT1JUSUQ7CisJcnNjbi0+ZXZlbnRbMF0ucG9ydGlkID0gc19pZDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19yc2NuX3BsX3MpKTsKK30KKwordTE2CitmY19yZnRpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqcmZ0aWQgPQorCQkJKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgdHlwZV92YWx1ZSwgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCXU4ICAgICAgICAgaW5kZXg7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JGVF9JRCk7CisKKwliZmFfb3NfbWVtc2V0KHJmdGlkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MpKTsKKworCXJmdGlkLT5kYXAgPSBzX2lkOworCisJLyogQnkgZGVmYXVsdCwgRkNQIEZDNCBUeXBlIGlzIHJlZ2lzdGVyZWQgKi8KKwlpbmRleCA9IEZDX1RZUEVfRkNQID4+IDU7CisJdHlwZV92YWx1ZSA9IDEgPDwgKEZDX1RZUEVfRkNQICUgMzIpOworCXJmdGlkLT5mYzRfdHlwZVtpbmRleF0gPSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSB7CisJCWluZGV4ID0gRkNfVFlQRV9JUCA+PiA1OworCQl0eXBlX3ZhbHVlID0gMSA8PCAoRkNfVFlQRV9JUCAlIDMyKTsKKwkJcmZ0aWQtPmZjNF90eXBlW2luZGV4XSB8PSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisJfQorCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3JmdGlkX2J1aWxkX3NvbChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTggKmZjNF9iaXRtYXAsCisJCQl1MzIgYml0bWFwX3NpemUpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqcmZ0aWQgPQorCQkJKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SRlRfSUQpOworCisJYmZhX29zX21lbXNldChyZnRpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zKSk7CisKKwlyZnRpZC0+ZGFwID0gc19pZDsKKwliZmFfb3NfbWVtY3B5KCh2b2lkICopcmZ0aWQtPmZjNF90eXBlLCAodm9pZCAqKWZjNF9iaXRtYXAsCisJCQkoYml0bWFwX3NpemUgPCAzMiA/IGJpdG1hcF9zaXplIDogMzIpKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19yZmZpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICB1OCBmYzRfdHlwZSwgdTggZmM0X2Z0cnMpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zICpyZmZpZCA9CisJCQkoc3RydWN0IGZjZ3NfcmZmaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SRkZfSUQpOworCisJYmZhX29zX21lbXNldChyZmZpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zKSk7CisKKwlyZmZpZC0+ZGFwIAkJIAk9IHNfaWQ7CisJcmZmaWQtPmZjNGZ0cl9iaXRzICA9IGZjNF9mdHJzOworCXJmZmlkLT5mYzRfdHlwZQkJPSBmYzRfdHlwZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19yc3BuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJdTggKm5hbWUpCit7CisKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JzcG5pZF9yZXFfcyAqcnNwbmlkID0KKwkJCShzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JTUE5fSUQpOworCisJYmZhX29zX21lbXNldChyc3BuaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3MpKTsKKworCXJzcG5pZC0+ZGFwID0gc19pZDsKKwlyc3BuaWQtPnNwbl9sZW4gPSAodTgpIHN0cmxlbigoY2hhciAqKW5hbWUpOworCXN0cm5jcHkoKGNoYXIgKilyc3BuaWQtPnNwbiwgKGNoYXIgKiluYW1lLCByc3BuaWQtPnNwbl9sZW4pOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcnNwbmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19naWRfZnRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1OCBmYzRfdHlwZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MgKmdpZGZ0ID0KKwkJCShzdHJ1Y3QgZmNnc19naWRmdF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0dJRF9GVCk7CisKKwliZmFfb3NfbWVtc2V0KGdpZGZ0LCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MpKTsKKwlnaWRmdC0+ZmM0X3R5cGUgPSBmYzRfdHlwZTsKKwlnaWRmdC0+ZG9tYWluX2lkID0gMDsKKwlnaWRmdC0+YXJlYV9pZCA9IDA7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19naWRmdF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfcnBuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUzMiBwb3J0X2lkLAorCSAgICAgICB3d25fdCBwb3J0X25hbWUpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfcyAqcnBuaWQgPQorCQkJKHN0cnVjdCBmY2dzX3JwbmlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JQTl9JRCk7CisKKwliZmFfb3NfbWVtc2V0KHJwbmlkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfcnBuaWRfcmVxX3MpKTsKKwlycG5pZC0+cG9ydF9pZCA9IHBvcnRfaWQ7CisJcnBuaWQtPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JwbmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19ybm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTMyIHBvcnRfaWQsCisJICAgICAgIHd3bl90IG5vZGVfbmFtZSkKK3sKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JubmlkX3JlcV9zICpybm5pZCA9CisJCQkoc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUk5OX0lEKTsKKworCWJmYV9vc19tZW1zZXQocm5uaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19ybm5pZF9yZXFfcykpOworCXJubmlkLT5wb3J0X2lkID0gcG9ydF9pZDsKKwlybm5pZC0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3Jjc2lkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MzIgcG9ydF9pZCwKKwkgICAgICAgdTMyIGNvcykKK3sKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3Jjc2lkX3JlcV9zICpyY3NpZCA9CisJCQkoc3RydWN0IGZjZ3NfcmNzaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUkNTX0lEKTsKKworCWJmYV9vc19tZW1zZXQocmNzaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19yY3NpZF9yZXFfcykpOworCXJjc2lkLT5wb3J0X2lkID0gcG9ydF9pZDsKKwlyY3NpZC0+Y29zID0gY29zOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcmNzaWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3JwdGlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MzIgcG9ydF9pZCwKKwkgICAgICAgdTggcG9ydF90eXBlKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfcnB0aWRfcmVxX3MgKnJwdGlkID0KKwkJCShzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SUFRfSUQpOworCisJYmZhX29zX21lbXNldChycHRpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JwdGlkX3JlcV9zKSk7CisJcnB0aWQtPnBvcnRfaWQgPSBwb3J0X2lkOworCXJwdGlkLT5wb3J0X3R5cGUgPSBwb3J0X3R5cGU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfZ2FueHRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUzMiBwb3J0X2lkKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2FueHRfcmVxX3MgKmdhbnh0ID0KKwkJCShzdHJ1Y3QgZmNnc19nYW54dF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HQV9OWFQpOworCisJYmZhX29zX21lbXNldChnYW54dCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX2dhbnh0X3JlcV9zKSk7CisJZ2FueHQtPnBvcnRfaWQgPSBwb3J0X2lkOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSArIHNpemVvZihzdHJ1Y3QgZmNnc19nYW54dF9yZXFfcykpOworfQorCisvKgorICogQnVpbGRzIGZjIGhkciBhbmQgY3QgaGRyIGZvciBGRE1JIHJlcXVlc3RzLgorICovCit1MTYKK2ZjX2ZkbWlfcmVxaGRyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkgICAgIHUxNiBjbWRfY29kZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19NR01UX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19mZG1pX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBjbWRfY29kZSk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKworLyoKKyAqIEdpdmVuIGEgRkM0IFR5cGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGZjNCB0eXBlIGJpdG1hc2sKKyAqLwordm9pZAorZmNfZ2V0X2ZjNHR5cGVfYml0bWFzayh1OCBmYzRfdHlwZSwgdTggKmJpdF9tYXNrKQoreworCXU4ICAgICAgICAgaW5kZXg7CisJdTMyICAgICAgICpwdHIgPSAodTMyICopIGJpdF9tYXNrOworCXUzMiAgICAgICAgdHlwZV92YWx1ZTsKKworCS8qCisJICogQHRvZG8gOiBDaGVjayBmb3IgYml0bWFzayBzaXplCisJICovCisKKwlpbmRleCA9IGZjNF90eXBlID4+IDU7CisJdHlwZV92YWx1ZSA9IDEgPDwgKGZjNF90eXBlICUgMzIpOworCXB0cltpbmRleF0gPSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisKK30KKworLyoKKyAqIEdNQUwgUmVxdWVzdAorICovCit1MTYKK2ZjX2dtYWxfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB3d25fdCB3d24pCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dtYWxfcmVxX3QgKmdtYWwgPSAoZmNnc19nbWFsX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTUdNVF9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfbXNfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0ZDX0dNQUxfQ01ELAorCQkJQ1RfR1NTVUJUWVBFX0NGR1NFUlZFUik7CisKKwliZmFfb3NfbWVtc2V0KGdtYWwsIDAsIHNpemVvZihmY2dzX2dtYWxfcmVxX3QpKTsKKwlnbWFsLT53d24gPSB3d247CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpICsgc2l6ZW9mKGZjZ3NfZ21hbF9yZXFfdCkpOworfQorCisvKgorICogR0ZOIChHZXQgRmFicmljIE5hbWUpIFJlcXVlc3QKKyAqLwordTE2CitmY19nZm5fcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB3d25fdCB3d24pCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dmbl9yZXFfdCAqZ2ZuID0gKGZjZ3NfZ2ZuX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTUdNVF9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfbXNfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0ZDX0dGTl9DTUQsCisJCQlDVF9HU1NVQlRZUEVfQ0ZHU0VSVkVSKTsKKworCWJmYV9vc19tZW1zZXQoZ2ZuLCAwLCBzaXplb2YoZmNnc19nZm5fcmVxX3QpKTsKKwlnZm4tPnd3biA9IHd3bjsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykgKyBzaXplb2YoZmNnc19nZm5fcmVxX3QpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY2J1aWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyNDg0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5oCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKgorICogZmNidWlsZC5oIC0gRkMgbGluayBzZXJ2aWNlIGZyYW1lIGJ1aWxkaW5nIGFuZCBwYXJzaW5nIHJvdXRpbmVzCisgKi8KKworI2lmbmRlZiBfX0ZDQlVJTERfSF9fCisjZGVmaW5lIF9fRkNCVUlMRF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjcC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2N0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCisvKgorICogVXRpbGl0eSBNYWNyb3MvZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSBmY2lmX3NvZl9zZXQoX2lmaGRyLCBfc29mKQkoX2lmaGRyKS0+c29mID0gRkNfICMjIF9zb2YKKyNkZWZpbmUgZmNpZl9lb2Zfc2V0KF9pZmhkciwgX2VvZikJKF9pZmhkciktPmVvZiA9IEZDXyAjIyBfZW9mCisKKyNkZWZpbmUgd3duX2lzX2VxdWFsKF93d24xLCBfd3duMikJCVwKKwkobWVtY21wKCYoX3d3bjEpLCAmKF93d24yKSwgc2l6ZW9mKHd3bl90KSkgPT0gMCkKKworI2RlZmluZSBmY19yb3VuZHVwKF9sLCBfcykgKCgoX2wpICsgKChfcykgLSAxKSkgJiB+KChfcykgLSAxKSkKKworLyoKKyAqIEdpdmVuIHRoZSBmYyByZXNwb25zZSBsZW5ndGgsIHRoaXMgcm91dGluZSB3aWxsIHJldHVybgorICogdGhlIGxlbmd0aCBvZiB0aGUgYWN0dWFsIHBheWxvYWQgYnl0ZXMgZm9sbG93aW5nIHRoZSBDVCBoZWFkZXIuCisgKgorICogQXNzdW1lcyB0aGUgaW5wdXQgcmVzcG9uc2UgbGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNyYywgZW9mLCBldGMuCisgKi8KK3N0YXRpYyBpbmxpbmUgICB1MzIKK2ZjX2dldF9jdHJlc3BfcHlsZF9sZW4odTMyIHJlc3BfbGVuKQoreworCXJldHVybiAocmVzcF9sZW4gLSBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKKy8qCisgKiBDb252ZXJ0IGJmYSBzcGVlZCB0byBycHNjIHNwZWVkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gYmZhX3Bwb3J0X3NwZWVkCitmY19ycHNjX29wZXJzcGVlZF90b19iZmFfc3BlZWQoZW51bSBmY19ycHNjX29wX3NwZWVkX3Mgc3BlZWQpCit7CisJc3dpdGNoIChzcGVlZCkgeworCisJY2FzZSBSUFNDX09QX1NQRUVEXzFHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzFHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzJHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzJHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzRHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzRHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzhHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzhHQlBTOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOOworCX0KK30KKworLyoKKyAqIENvbnZlcnQgUlBTQyBzcGVlZCB0byBiZmEgc3BlZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgICBlbnVtIGZjX3Jwc2Nfb3Bfc3BlZWRfcworZmNfYmZhX3NwZWVkX3RvX3Jwc2Nfb3BlcnNwZWVkKGVudW0gYmZhX3Bwb3J0X3NwZWVkIG9wX3NwZWVkKQoreworCXN3aXRjaCAob3Bfc3BlZWQpIHsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzFHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF8xRzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzJHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF8yRzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzRHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF80RzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzhHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF84RzsKKworCWRlZmF1bHQ6CisJCXJldHVybiBSUFNDX09QX1NQRUVEX05PVF9FU1Q7CisJfQorfQorZW51bSBmY19wYXJzZV9zdGF0dXMgeworCUZDX1BBUlNFX09LID0gMCwKKwlGQ19QQVJTRV9GQUlMVVJFID0gMSwKKwlGQ19QQVJTRV9CVVNZID0gMiwKKwlGQ19QQVJTRV9MRU5fSU5WQUwsCisJRkNfUEFSU0VfQUNDX0lOVkFMLAorCUZDX1BBUlNFX1BXV05fTk9UX0VRVUFMLAorCUZDX1BBUlNFX05XV05fTk9UX0VRVUFMLAorCUZDX1BBUlNFX1JYU1pfSU5WQUwsCisJRkNfUEFSU0VfTk9UX0ZDUCwKKwlGQ19QQVJTRV9PUEFGTEFHX0lOVkFMLAorCUZDX1BBUlNFX1JQQUZMQUdfSU5WQUwsCisJRkNfUEFSU0VfT1BBX0lOVkFMLAorCUZDX1BBUlNFX1JQQV9JTlZBTCwKKworfTsKKworc3RydWN0IGZjX3RlbXBsYXRlc19zIHsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjX2Vsc19yZXE7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY19ibHNfcmVxOworCXN0cnVjdCBmY19sb2dpX3MgICAgICBwbG9naTsKKwlzdHJ1Y3QgZmNfcnJxX3MgICAgICAgIHJycTsKK307CisKK3ZvaWQgZmNidWlsZF9pbml0KHZvaWQpOworCit1MTYgZmNfZmxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCQl3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSwgdTggc2V0X25waXYsCisJCQl1OCBzZXRfYXV0aCwgdTE2IGxvY2FsX2JiX2NyZWRpdHMpOwordTE2IGZjX2ZkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmJ1Ziwgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCQl3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSk7Cit1MTYgZmNfZmxvZ2lfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sb2dpX3MgKmZsb2dpLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkJd3duX3Qgbm9kZV9uYW1lLCB1MTYgcGR1X3NpemUsCisJCQl1MTYgbG9jYWxfYmJfY3JlZGl0cyk7Cit1MTYgZmNfcGxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJCXd3bl90IG5vZGVfbmFtZSwgdTE2IHBkdV9zaXplKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3Bsb2dpX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMpOwordTE2IGZjX2FidHNfYnVpbGQoc3RydWN0IGZjaHNfcyAqYnVmLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWJ0c19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqYnVmLCBpbnQgbGVuKTsKK3UxNiBmY19ycnFfYnVpbGQoc3RydWN0IGZjaHNfcyAqYnVmLCBzdHJ1Y3QgZmNfcnJxX3MgKnJycSwgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB1MTYgcnJxX294aWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfcnJxX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpidWYsIGludCBsZW4pOwordTE2IGZjX3JzcG5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB1OCAqbmFtZSk7Cit1MTYgZmNfcmZ0aWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpOwordTE2IGZjX3JmdGlkX2J1aWxkX3NvbChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTggKmZjNF9iaXRtYXAsCisJCQl1MzIgYml0bWFwX3NpemUpOwordTE2IGZjX3JmZmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB1OCBmYzRfdHlwZSwgdTggZmM0X2Z0cnMpOwordTE2IGZjX2dpZHBuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUpOwordTE2IGZjX2dwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHUzMiBwb3J0X2lkKTsKK3UxNiBmY19zY3JfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Njcl9zICpzY3IsCisJCQl1OCBzZXRfYnJfcmVnLCB1MzIgc19pZCwgdTE2IG94X2lkKTsKK3UxNiBmY19wbG9naV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwgdTE2IHBkdV9zaXplKTsKKwordTE2IGZjX2FkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLAorCQkJdTMyIGhvc3RfZGFwLAorCQkJd3duX3Qgbm9kZV9uYW1lLCB3d25fdCBwb3J0X25hbWUpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWRpc2NfcnNwX3BhcnNlKHN0cnVjdCBmY19hZGlzY19zICphZGlzYywgaW50IGxlbiwKKwkJCXd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lKTsKK3UxNiBmY19hZGlzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSk7Cit1MTYgZmNfbHNfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sc19yanRfcyAqbHNfcmp0LAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1OCByZWFzb25fY29kZSwgdTggcmVhc29uX2NvZGVfZXhwbCk7Cit1MTYgZmNfbHNfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19lbHNfY21kX3MgKmVsc19jbWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfcHJsaV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCk7CitlbnVtIGZjX3BhcnNlX3N0YXR1cyBmY19wcmxpX3JzcF9wYXJzZShzdHJ1Y3QgZmNfcHJsaV9zICpwcmxpLCBpbnQgbGVuKTsKKwordTE2IGZjX3BybGlfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpOwordTE2IGZjX3JuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCXUzMiBkYXRhX2Zvcm1hdCk7Cit1MTYgZmNfcm5pZF9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfYWNjX3MgKnJuaWRfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1MzIgZGF0YV9mb3JtYXQsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zICpjb21tb25faWRfZGF0YSwKKwkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICoKKwkJCWdlbl90b3BvX2RhdGEpOwordTE2IGZjX3Jwc2MyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjMl9jbWRfcyAqcnBzMmMsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MzIgKnBpZF9saXN0LCB1MTYgbnBpZHMpOwordTE2IGZjX3Jwc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfY21kX3MgKnJwc2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfcnBzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfYWNjX3MgKnJwc2NfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3MgKm9wZXJfc3BlZWQpOwordTE2IGZjX2dpZF9mdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBzX2lkLAorCQkJdTggZmM0X3R5cGUpOwordTE2IGZjX3JwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTMyIHBvcnRfaWQsIHd3bl90IHBvcnRfbmFtZSk7Cit1MTYgZmNfcm5uaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MzIgcG9ydF9pZCwgd3duX3Qgbm9kZV9uYW1lKTsKK3UxNiBmY19yY3NpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUzMiBwb3J0X2lkLCB1MzIgY29zKTsKK3UxNiBmY19ycHRpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUzMiBwb3J0X2lkLCB1OCBwb3J0X3R5cGUpOwordTE2IGZjX2dhbnh0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTMyIHBvcnRfaWQpOwordTE2IGZjX2xvZ29fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ29fcyAqbG9nbywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJd3duX3QgcG9ydF9uYW1lKTsKK3UxNiBmY19sb2dvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfZmRtaV9yZXFoZHJfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MTYgY21kX2NvZGUpOwordTE2IGZjX2dtYWxfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJd3duX3Qgd3duKTsKK3UxNiBmY19nZm5fcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJd3duX3Qgd3duKTsKK3ZvaWQgZmNfZ2V0X2ZjNHR5cGVfYml0bWFzayh1OCBmYzRfdHlwZSwgdTggKmJpdF9tYXNrKTsKK3ZvaWQgZmNfZWxzX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfZWxzX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3Bsb2dpX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuLAorCQkJIHd3bl90IHBvcnRfbmFtZSk7CitlbnVtIGZjX3BhcnNlX3N0YXR1cyBmY19wcmxpX3BhcnNlKHN0cnVjdCBmY19wcmxpX3MgKnBybGkpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfcGRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgd3duX3Qgbm9kZV9uYW1lLAorCQkJd3duX3QgcG9ydF9uYW1lKTsKK3UxNiBmY19iYV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2JhX2FjY19zICpiYV9hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCXUxNiByeF9pZCk7CitpbnQgZmNfbG9nb3V0X3BhcmFtc19wYWdlcyhzdHJ1Y3QgZmNoc19zICpmY19mcmFtZSwgdTggZWxzX2NvZGUpOwordTE2IGZjX3RwcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJc3RydWN0IGZjX3RwcmxvX2FjY19zICp0cHJsb19hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCWludCBudW1fcGFnZXMpOwordTE2IGZjX3BybG9fYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19wcmxvX2FjY19zICpwcmxvX2FjYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJaW50IG51bV9wYWdlcyk7Cit1MTYgZmNfbG9nb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbik7Cit1MTYgZmNfcGRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJCXUxNiBwZHVfc2l6ZSk7Cit1MTYgZmNfcGRpc2NfcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4sIHd3bl90IHBvcnRfbmFtZSk7Cit1MTYgZmNfcHJsb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIGludCBudW1fcGFnZXMpOwordTE2IGZjX3BybG9fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pOwordTE2IGZjX3RwcmxvX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgaW50IG51bV9wYWdlcywKKwkJCWVudW0gZmNfdHBybG9fdHlwZSB0cHJsb190eXBlLCB1MzIgdHByX2lkKTsKK3UxNiBmY190cHJsb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbik7Cit1MTYgZmNfYmFfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTMyIHJlYXNvbl9jb2RlLAorCQkJdTMyIHJlYXNvbl9leHBsKTsKK3UxNiBmY19nbm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTMyIHBvcnRfaWQpOwordTE2IGZjX2N0X3JzcF9wYXJzZShzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyKTsKK3UxNiBmY19yc2NuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19yc2NuX3BsX3MgKnJzY24sCisJCQl1MzIgc19pZCwgdTE2IG94X2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTVkODkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jCkBAIC0wLDAgKzEsODQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjcGltLmMgLSBGQ1AgaW5pdGlhdG9yIG1vZGUgaS10IG5leHVzIHN0YXRlIG1hY2hpbmUKKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19mY3BpbS5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZjcGltLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfZmNwaW0uaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9pdG5pbS5oPgorCitCRkFfVFJDX0ZJTEUoRkNTLCBGQ1BJTSk7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV90aW1lb3V0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9mcmVlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NlbmRfcHJsaSh2b2lkICppdG5pbV9jYmFyZywKKwkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9wcmxpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCSAgICAgICBlbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgZXZlbnQpOworCisvKioKKyAqICBmY3NfaXRuaW1fc20gRkNTIGl0bmltIHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KKworZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IHsKKwlCRkFfRkNTX0lUTklNX1NNX09OTElORSA9IDEsCS8qICBycG9ydCBvbmxpbmUgZXZlbnQgKi8KKwlCRkFfRkNTX0lUTklNX1NNX09GRkxJTkUgPSAyLAkvKiAgcnBvcnQgb2ZmbGluZSAqLworCUJGQV9GQ1NfSVROSU1fU01fRlJNU0VOVCA9IDMsCS8qICBwcmxpIGZyYW1lIGlzIHNlbnQgKi8KKwlCRkFfRkNTX0lUTklNX1NNX1JTUF9PSyA9IDQsCS8qICBnb29kIHJlc3BvbnNlICovCisJQkZBX0ZDU19JVE5JTV9TTV9SU1BfRVJST1IgPSA1LAkvKiAgZXJyb3IgcmVzcG9uc2UgKi8KKwlCRkFfRkNTX0lUTklNX1NNX1RJTUVPVVQgPSA2LAkvKiAgZGVsYXkgdGltZW91dCAqLworCUJGQV9GQ1NfSVROSU1fU01fSENCX09GRkxJTkUgPSA3LAkvKiAgQkZBIG9ubGluZSBjYWxsYmFjayAqLworCUJGQV9GQ1NfSVROSU1fU01fSENCX09OTElORSA9IDgsCS8qICBCRkEgb2ZmbGluZSBjYWxsYmFjayAqLworCUJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SID0gOSwJLyogIHJwb3J0IGlzIGluaXRpYXRvciAqLworCUJGQV9GQ1NfSVROSU1fU01fREVMRVRFID0gMTAsCS8qICBkZWxldGUgZXZlbnQgZnJvbSBycG9ydCAqLworCUJGQV9GQ1NfSVROSU1fU01fUFJMTyA9IDExLAkvKiAgZGVsZXRlIGV2ZW50IGZyb20gcnBvcnQgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb25saW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9pbml0aWF0b3Ioc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgaXRuaW1fc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSksIEJGQV9JVE5JTV9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKSwgQkZBX0lUTklNX1BSTElfU0VORH0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX3BybGkpLCBCRkFfSVROSU1fUFJMSV9TRU5UfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fcHJsaV9yZXRyeSksIEJGQV9JVE5JTV9QUkxJX1JFVFJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21faGNiX29ubGluZSksIEJGQV9JVE5JTV9IQ0JfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fb25saW5lKSwgQkZBX0lUTklNX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKSwgQkZBX0lUTklNX0hDQl9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKSwgQkZBX0lUTklNX0lOSVRJQVRJT1J9LAorfTsKKworLyoqCisgKiAgZmNzX2l0bmltX3NtIEZDUyBpdG5pbSBzdGF0ZSBtYWNoaW5lCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV90cmMoaXRuaW0tPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKTsKKwkJYmZhX2Zjc19pdG5pbV9zZW5kX3BybGkoaXRuaW0sIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGlfc2VuZChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0ZSTVNFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9pbml0aWF0b3IpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoaXRuaW0tPmZjcy0+YmZhLCAmaXRuaW0tPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGkoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCSAgICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb25saW5lKTsKKwkJYmZhX2l0bmltX29ubGluZShpdG5pbS0+YmZhX2l0bmltLCBpdG5pbS0+c2VxX3JlYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT50aW1lciwKKwkJCQliZmFfZmNzX2l0bmltX3RpbWVvdXQsIGl0bmltLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQoaXRuaW0tPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJLyoKKwkJICogZG9udCBkaXNjYXJkIGZjeHAuIGFjY2VwdCB3aWxsIHJlYWNoIHNhbWUgc3RhdGUKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChpdG5pbS0+ZmN4cCk7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGlfcmV0cnkoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3NlbmQpOworCQliZmFfZmNzX2l0bmltX3NlbmRfcHJsaShpdG5pbSwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZpdG5pbS0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJYmZhX3RpbWVyX3N0b3AoJml0bmltLT50aW1lcik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJml0bmltLT50aW1lcik7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX2hjYl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSENCX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vbmxpbmUpOworCQliZmFfZmNiX2l0bmltX29ubGluZShpdG5pbS0+aXRuaW1fZHJ2KTsKKwkJYmZhX2Zjc19pdG5pbV9hZW5fcG9zdChpdG5pbSwgQkZBX0lUTklNX0FFTl9PTkxJTkUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfaXRuaW1fb2ZmbGluZShpdG5pbS0+YmZhX2l0bmltKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV90cmMoaXRuaW0tPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKTsKKwkJYmZhX2ZjYl9pdG5pbV9vZmZsaW5lKGl0bmltLT5pdG5pbV9kcnYpOworCQliZmFfaXRuaW1fb2ZmbGluZShpdG5pbS0+YmZhX2l0bmltKTsKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19vbmxpbmUoaXRuaW0tPnJwb3J0LT5wb3J0KSA9PSBCRkFfVFJVRSkgeworCQkJYmZhX2Zjc19pdG5pbV9hZW5fcG9zdChpdG5pbSwgQkZBX0lUTklNX0FFTl9ESVNDT05ORUNUKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9mY3NfaXRuaW1fYWVuX3Bvc3QoaXRuaW0sIEJGQV9JVE5JTV9BRU5fT0ZGTElORSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSAgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSENCX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19pdG5pbV9mcmVlKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoKKyAqIFRoaXMgc3RhdGUgaXMgc2V0IHdoZW4gYSBkaXNjb3ZlcmVkIHJwb3J0IGlzIGFsc28gaW4gaW50aWF0b3IgbW9kZS4KKyAqIFRoaXMgSVROIGlzIG1hcmtlZCBhcyBub19vcCBhbmQgaXMgbm90IGFjdGl2ZSBhbmQgd2lsbCBub3QgYmUgdHJ1bmVkIGludG8KKyAqIG9ubGluZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fUlNQX0VSUk9SOgorCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PTkxJTkU6CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUjoKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgaXRuaW1fcHJpdmF0ZSBGQ1MgSVROSU0gcHJpdmF0ZSBpbnRlcmZhY2VzCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCSAgICAgICBlbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBpdG5pbS0+cnBvcnQ7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHJwb3J0LT5mY3MtPmxvZ207CisJd3duX3QgICAgICAgICAgIGxwd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHJwb3J0LT5wb3J0KTsKKwl3d25fdCAgICAgICAgICAgcnB3d24gPSBycG9ydC0+cHd3bjsKKwljaGFyICAgICAgICAgICAgbHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICBycHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisKKwkvKgorCSAqIERvbid0IHBvc3QgZXZlbnRzIGZvciB3ZWxsIGtub3duIGFkZHJlc3NlcworCSAqLworCWlmIChCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCXJldHVybjsKKworCXd3bjJzdHIobHB3d25fcHRyLCBscHd3bik7CisJd3duMnN0cihycHd3bl9wdHIsIHJwd3duKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9BRU5fT05MSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JVE5JTV9PTkxJTkUsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSVROSU1fQUVOX09GRkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lUTklNX09GRkxJTkUsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEuaXRuaW0udmZfaWQgPSBycG9ydC0+cG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5pdG5pbS5wcHd3biA9CisJCWJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQoaXRuaW0tPmZjcykpOworCWFlbl9kYXRhLml0bmltLmxwd3duID0gbHB3d247CisJYWVuX2RhdGEuaXRuaW0ucnB3d24gPSBycHd3bjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc2VuZF9wcmxpKHZvaWQgKml0bmltX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gaXRuaW1fY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBpdG5pbS0+cnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWl0bmltLT5zdGF0cy5mY3hwX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19pdG5pbV9zZW5kX3BybGksIGl0bmltKTsKKwkJcmV0dXJuOworCX0KKwlpdG5pbS0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wcmxpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBpdG5pbS0+cnBvcnQtPnBpZCwKKwkJCSAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDApOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBycG9ydC0+YmZhX3Jwb3J0LCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJICAgICAgYmZhX2Zjc19pdG5pbV9wcmxpX3Jlc3BvbnNlLCAodm9pZCAqKWl0bmltLCBGQ19NQVhfUERVU1osCisJCSAgICAgIEZDX1JBX1RPVik7CisKKwlpdG5pbS0+c3RhdHMucHJsaV9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fRlJNU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3BybGlfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYmFyZzsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisJc3RydWN0IGZjX3BybGlfcyAgICAgICpwcmxpX3Jlc3A7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisJc3RydWN0IGZjX3BybGlfcGFyYW1zX3MgKnNwYXJhbXM7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQUNDKSB7CisJCXBybGlfcmVzcCA9IChzdHJ1Y3QgZmNfcHJsaV9zICopIGVsc19jbWQ7CisKKwkJaWYgKGZjX3BybGlfcnNwX3BhcnNlKHBybGlfcmVzcCwgcnNwX2xlbikgIT0gRkNfUEFSU0VfT0spIHsKKwkJCWJmYV90cmMoaXRuaW0tPmZjcywgcnNwX2xlbik7CisJCQkvKgorCQkJICogQ2hlY2sgaWYgdGhpcyAgci1wb3J0IGlzIGFsc28gaW4gSW5pdGlhdG9yIG1vZGUuCisJCQkgKiBJZiBzbywgd2UgbmVlZCB0byBzZXQgdGhpcyBJVE4gYXMgYSBuby1vcC4KKwkJCSAqLworCQkJaWYgKHBybGlfcmVzcC0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yKSB7CisJCQkJYmZhX3RyYyhpdG5pbS0+ZmNzLCBwcmxpX3Jlc3AtPnBhcmFtcGFnZS50eXBlKTsKKwkJCQlpdG5pbS0+cnBvcnQtPnNjc2lfZnVuY3Rpb24gPQorCQkJCQlCRkFfUlBPUlRfSU5JVElBVE9SOworCQkJCWl0bmltLT5zdGF0cy5wcmxpX3JzcF9hY2MrKzsKKwkJCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwKKwkJCQkJCSAgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaXRuaW0tPnN0YXRzLnBybGlfcnNwX3BhcnNlX2VycisrOworCQkJcmV0dXJuOworCQl9CisJCWl0bmltLT5ycG9ydC0+c2NzaV9mdW5jdGlvbiA9IEJGQV9SUE9SVF9UQVJHRVQ7CisKKwkJc3BhcmFtcyA9ICZwcmxpX3Jlc3AtPnBhcmFtcGFnZS5zZXJ2cGFyYW1zOworCQlpdG5pbS0+c2VxX3JlYyA9IHNwYXJhbXMtPnJldHJ5OworCQlpdG5pbS0+cmVjX3N1cHBvcnQgPSBzcGFyYW1zLT5yZWNfc3VwcG9ydDsKKwkJaXRuaW0tPnRhc2tfcmV0cnlfaWQgPSBzcGFyYW1zLT50YXNrX3JldHJ5X2lkOworCQlpdG5pbS0+Y29uZl9jb21wID0gc3BhcmFtcy0+Y29uZmlybTsKKworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3BfYWNjKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9PSyk7CisJfSBlbHNlIHsKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMoaXRuaW0tPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMoaXRuaW0tPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3Bfcmp0Kys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUik7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICopYXJnOworCisJaXRuaW0tPnN0YXRzLnRpbWVvdXQrKzsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfaXRuaW1fZGVsZXRlKGl0bmltLT5iZmFfaXRuaW0pOworCWJmYV9mY2JfaXRuaW1fZnJlZShpdG5pbS0+ZmNzLT5iZmFkLCBpdG5pbS0+aXRuaW1fZHJ2KTsKK30KKworCisKKy8qKgorICogIGl0bmltX3B1YmxpYyBGQ1MgSVROSU0gcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKioKKyAqIAlDYWxsZWQgYnkgcnBvcnQgd2hlbiBhIG5ldyBycG9ydCBpcyBjcmVhdGVkLgorICoKKyAqIEBwYXJhbVtpbl0gcnBvcnQJLSAgcmVtb3RlIHBvcnQuCisgKi8KK3N0cnVjdCBiZmFfZmNzX2l0bmltX3MgKgorYmZhX2Zjc19pdG5pbV9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW07CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2OworCXN0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltOworCisJLyoKKwkgKiBjYWxsIGJmYWQgdG8gYWxsb2NhdGUgdGhlIGl0bmltCisJICovCisJYmZhX2ZjYl9pdG5pbV9hbGxvYyhwb3J0LT5mY3MtPmJmYWQsICZpdG5pbSwgJml0bmltX2Rydik7CisJaWYgKGl0bmltID09IE5VTEwpIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIGl0bmltCisJICovCisJaXRuaW0tPnJwb3J0ID0gcnBvcnQ7CisJaXRuaW0tPmZjcyA9IHJwb3J0LT5mY3M7CisJaXRuaW0tPml0bmltX2RydiA9IGl0bmltX2RydjsKKworCS8qCisJICogY2FsbCBCRkEgdG8gY3JlYXRlIHRoZSBpdG5pbQorCSAqLworCWJmYV9pdG5pbSA9IGJmYV9pdG5pbV9jcmVhdGUocG9ydC0+ZmNzLT5iZmEsIHJwb3J0LT5iZmFfcnBvcnQsIGl0bmltKTsKKworCWlmIChiZmFfaXRuaW0gPT0gTlVMTCkgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCQliZmFfZmNiX2l0bmltX2ZyZWUocG9ydC0+ZmNzLT5iZmFkLCBpdG5pbV9kcnYpOworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpdG5pbS0+YmZhX2l0bmltID0gYmZhX2l0bmltOworCWl0bmltLT5zZXFfcmVjID0gQkZBX0ZBTFNFOworCWl0bmltLT5yZWNfc3VwcG9ydCA9IEJGQV9GQUxTRTsKKwlpdG5pbS0+Y29uZl9jb21wID0gQkZBX0ZBTFNFOworCWl0bmltLT50YXNrX3JldHJ5X2lkID0gQkZBX0ZBTFNFOworCisJLyoKKwkgKiBTZXQgU3RhdGUgbWFjaGluZQorCSAqLworCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisKKwlyZXR1cm4gaXRuaW07Cit9CisKKy8qKgorICogCUNhbGxlZCBieSBycG9ydCB0byBkZWxldGUgIHRoZSBpbnN0YW5jZSBvZiBGQ1BJTS4KKyAqCisgKiBAcGFyYW1baW5dIHJwb3J0CS0gIHJlbW90ZSBwb3J0LgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cGlkKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9ERUxFVEUpOworfQorCisvKioKKyAqIE5vdGlmaWNhdGlvbiBmcm9tIHJwb3J0IHRoYXQgUExPR0kgaXMgY29tcGxldGUgdG8gaW5pdGlhdGUgRkMtNCBzZXNzaW9uLgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlpdG5pbS0+c3RhdHMub25saW5lcysrOworCisJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EoaXRuaW0tPnJwb3J0LT5waWQpKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX09OTElORSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRm9yIHdlbGwga25vd24gYWRkcmVzc2VzLCB3ZSBzZXQgdGhlIGl0bmltIHRvIGluaXRpYXRvcgorCQkgKiBzdGF0ZQorCQkgKi8KKwkJaXRuaW0tPnN0YXRzLmluaXRpYXRvcisrOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworCX0KK30KKworLyoqCisgKiBDYWxsZWQgYnkgcnBvcnQgdG8gaGFuZGxlIGEgcmVtb3RlIGRldmljZSBvZmZsaW5lLgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJaXRuaW0tPnN0YXRzLm9mZmxpbmVzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IHJwb3J0IHdoZW4gcmVtb3RlIHBvcnQgaXMga25vd24gdG8gYmUgYW4gaW5pdGlhdG9yIGZyb20KKyAqIFBSTEkgcmVjZWl2ZWQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfaXRuaW1faXNfaW5pdGlhdG9yKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5waWQpOworCWl0bmltLT5zdGF0cy5pbml0aWF0b3IrKzsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworfQorCisvKioKKyAqIENhbGxlZCBieSBycG9ydCB0byBjaGVjayBpZiB0aGUgaXRuaW0gaXMgb25saW5lLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfaXRuaW1fZ2V0X29ubGluZV9zdGF0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cGlkKTsKKwlzd2l0Y2ggKGJmYV9zbV90b19zdGF0ZShpdG5pbV9zbV90YWJsZSwgaXRuaW0tPnNtKSkgeworCWNhc2UgQkZBX0lUTklNX09OTElORToKKwljYXNlIEJGQV9JVE5JTV9JTklUSUFUSU9SOgorCQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKKworCWRlZmF1bHQ6CisJCXJldHVybiBCRkFfU1RBVFVTX05PX0ZDUElNX05FWFVTOworCisJfQorfQorCisvKioKKyAqIEJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb25saW5lKCkuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV9vbmxpbmUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiYXJnOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX0hDQl9PTkxJTkUpOworfQorCisvKioKKyAqIEJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb2ZmbGluZSgpLgorICovCit2b2lkCitiZmFfY2JfaXRuaW1fb2ZmbGluZSh2b2lkICpjYl9hcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiX2FyZzsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9IQ0JfT0ZGTElORSk7Cit9CisKKy8qKgorICogTWFyayB0aGUgYmVnaW5uaW5nIG9mIFBBVEggVE9WIGhhbmRsaW5nLiBJTyBjb21wbGV0aW9uIGNhbGxiYWNrcworICogYXJlIHN0aWxsIHBlbmRpbmcuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV90b3ZfYmVnaW4odm9pZCAqY2JfYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYl9hcmc7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX2ZjYl9pdG5pbV90b3ZfYmVnaW4oaXRuaW0tPml0bmltX2Rydik7Cit9CisKKy8qKgorICogTWFyayB0aGUgZW5kIG9mIFBBVEggVE9WIGhhbmRsaW5nLiBBbGwgcGVuZGluZyBJT3MgYXJlIGFscmVhZHkgY2xlYW5lZCB1cC4KKyAqLwordm9pZAorYmZhX2NiX2l0bmltX3Rvdih2b2lkICpjYl9hcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiX2FyZzsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfZmNiX2l0bmltX3RvdihpdG5pbS0+aXRuaW1fZHJ2KTsKK30KKworLyoqCisgKiAJCUJGQSBub3RpZmljYXRpb24gdG8gRkNTL2RyaXZlciBmb3Igc2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5LgorICoKKyAqIEF0bGVhc3Qgb25lIEkvTyByZXF1ZXN0IGhhcyB0aW1lZG91dCBhbmQgdGFyZ2V0IGlzIHVucmVzcG9uc2l2ZSB0bworICogcmVwZWF0ZWQgYWJvcnQgcmVxdWVzdHMuIFNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeSBzaG91bGQgYmUgaW5pdGlhdGVkCisgKiBieSBzdGFydGluZyBpbXBsaWNpdCBsb2dvdXQgYW5kIHJlY292ZXJ5IHByb2NlZHVyZXMuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV9zbGVyKHZvaWQgKmNiX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICopY2JfYXJnOworCisJaXRuaW0tPnN0YXRzLnNsZXIrKzsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChpdG5pbS0+cnBvcnQpOworfQorCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoKK2JmYV9mY3NfaXRuaW1fbG9va3VwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2xvb2t1cChwb3J0LCBycHd3bik7CisKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCWJmYV9hc3NlcnQocnBvcnQtPml0bmltICE9IE5VTEwpOworCXJldHVybiAocnBvcnQtPml0bmltKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX2l0bmltX2F0dHJfZ2V0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24sCisJCSAgICAgICBzdHJ1Y3QgYmZhX2l0bmltX2F0dHJfcyAqYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWF0dHItPnN0YXRlID0gYmZhX3NtX3RvX3N0YXRlKGl0bmltX3NtX3RhYmxlLCBpdG5pbS0+c20pOworCWF0dHItPnJldHJ5ID0gaXRuaW0tPnNlcV9yZWM7CisJYXR0ci0+cmVjX3N1cHBvcnQgPSBpdG5pbS0+cmVjX3N1cHBvcnQ7CisJYXR0ci0+Y29uZl9jb21wID0gaXRuaW0tPmNvbmZfY29tcDsKKwlhdHRyLT50YXNrX3JldHJ5X2lkID0gaXRuaW0tPnRhc2tfcmV0cnlfaWQ7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX2l0bmltX3N0YXRzX2dldChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duLAorCQkJc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zICpzdGF0cykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwliZmFfYXNzZXJ0KHBvcnQgIT0gTlVMTCk7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWJmYV9vc19tZW1jcHkoc3RhdHMsICZpdG5pbS0+c3RhdHMsIHNpemVvZihzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MpKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfaXRuaW1fc3RhdHNfY2xlYXIoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwliZmFfYXNzZXJ0KHBvcnQgIT0gTlVMTCk7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWJmYV9vc19tZW1zZXQoJml0bmltLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcykpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfZmNzX2ZjcGltX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCSAgICAgIHUxNiBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBmY2hzLT50eXBlKTsKKworCWlmIChmY2hzLT50eXBlICE9IEZDX1RZUEVfRUxTKQorCQlyZXR1cm47CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX1BSTE86CisJCS8qIGJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1BSTE8pOyAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCit2b2lkCitiZmFfZmNzX2l0bmltX3BhdXNlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworfQorCit2b2lkCitiZmFfZmNzX2l0bmltX3Jlc3VtZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKK30KKworLyoqCisgKiAgIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICovCit2b2lkCitiZmFfZmNzX2ZjcGltX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc19mY3BpbV9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNwdG0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNwdG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzhiMDhjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3B0bS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZHVtbXkgRkNQVE0gcm91dGluZXMgdG8gYWlkIGluIEluaXRpYXRvciBNb2RlIG9ubHkKKyAqIGNvbXBpbGF0aW9uIG9mIE9TIGRyaXZlci4KKyAqCisgKi8KKworI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmNwdG0uaCIKKyNpbmNsdWRlICJmY3MvYmZhX2Zjc19ycG9ydC5oIgorCitzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqCitiZmFfZmNzX3Rpbl9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdGluX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pCit7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdGluX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9yeF9wcmxpKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4sIHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUxNiBsZW4pCit7Cit9CisKK3ZvaWQKK2JmYV9mY3NfZmNwdG1fdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluLCBzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9wYXVzZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9yZXN1bWUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbikKK3sKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZWU2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjcy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzLmggRkNTIG1vZHVsZSBmdW5jdGlvbnMKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfSF9fCisjZGVmaW5lIF9fRkNTX0hfXworCisjZGVmaW5lIF9fZmNzX21pbl9jZmcoX19mY3MpICAgICAgIChfX2ZjcyktPm1pbl9jZmcKKwordm9pZCBiZmFfZmNzX21vZGV4aXRfY29tcChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCisjZW5kaWYgLyogX19GQ1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19hdXRoLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkMTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2F1dGguaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc191Zi5oIEZDUyB1bnNvbGljaXRlZCBmcmFtZSByZWNlaXZlCisgKi8KKworCisjaWZuZGVmIF9fRkNTX0FVVEhfSF9fCisjZGVmaW5lIF9fRkNTX0FVVEhfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKworLyoKKyAqIGZjcyBmcmllbmQgZnVuY3Rpb25zOiBvbmx5IGJldHdlZW4gZmNzIG1vZHVsZXMKKyAqLwordm9pZCBiZmFfZmNzX2F1dGhfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCBpbnQgbGVuKTsKK3ZvaWQgYmZhX2Zjc19hdXRoX3N0YXJ0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCBiZmFfZmNzX2F1dGhfc3RvcChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKKworI2VuZGlmIC8qIF9fRkNTX1VGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mYWJyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWU5NjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmFicmljLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfbHBvcnQuaCBGQ1MgbG9naWNhbCBwb3J0IGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fRkNTX0ZBQlJJQ19IX18KKyNkZWZpbmUgX19GQ1NfRkFCUklDX0hfXworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisKKy8qCisqIGZjcyBmcmllbmQgZnVuY3Rpb25zOiBvbmx5IGJldHdlZW4gZmNzIG1vZHVsZXMKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbW9kc3VzcChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX2xpbmtfdXAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbGlua19kb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX2FkZHZwb3J0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19kZWx2cG9ydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitpbnQgICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqYmZhX2Zjc19mYWJyaWNfdnBvcnRfbG9va3VwKAorCQkJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywgd3duX3QgcHd3bik7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbW9kc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY191Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKTsKK3UxNiAgICAgICAgYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitiZmFfYm9vbGVhbl90ICAgYmZhX2Zjc19mYWJyaWNfaXNfbG9vcGJhY2soc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitlbnVtIGJmYV9wcG9ydF90eXBlIGJmYV9mY3NfZmFicmljX3BvcnRfdHlwZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3ZvaWQgICAgIAliZmFfZmNzX2ZhYnJpY19wc3ltYl9pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCBiZmFfZmNzX2ZhYnJpY19wb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworCitiZmFfc3RhdHVzX3QgYmZhX2Zjc19mYWJyaWNfYWRkdmYoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKnZmLAorCQkJc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KTsKK3ZvaWQgYmZhX2Zjc19hdXRoX2ZpbmlzaGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQllbnVtIGF1dGhfc3RhdHVzIHN0YXR1cyk7CisKK3ZvaWQgYmZhX2Zjc19mYWJyaWNfc2V0X2ZhYnJpY19uYW1lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQl3d25fdCBmYWJyaWNfbmFtZSk7CisjZW5kaWYgLyogX19GQ1NfRkFCUklDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlOWUyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcGltLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0ZDU19GQ1BJTV9IX18KKyNkZWZpbmUgX19GQ1NfRkNQSU1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisKKy8qCisgKiBGb2xsb3dpbmcgcm91dGluZXMgYXJlIGZyb20gRkNQSU0gYW5kIHdpbGwgYmUgY2FsbGVkIGJ5IHJwb3J0LgorICovCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICpiZmFfZmNzX2l0bmltX2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfaXRuaW1fZGVsZXRlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOworYmZhX3N0YXR1c190IGJmYV9mY3NfaXRuaW1fZ2V0X29ubGluZV9zdGF0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSk7CisKK3ZvaWQgYmZhX2Zjc19pdG5pbV9pc19pbml0aWF0b3Ioc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOwordm9pZCBiZmFfZmNzX2l0bmltX3BhdXNlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9yZXN1bWUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOworCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KK3ZvaWQgYmZhX2Zjc19mY3BpbV9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfZmNwaW1fbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZjcGltX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKKyNlbmRpZiAvKiBfX0ZDU19GQ1BJTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcHRtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3B0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZmYwODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3B0bS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDU19GQ1BUTV9IX18KKyNkZWZpbmUgX19GQ1NfRkNQVE1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisKKy8qCisgKiBGb2xsb3dpbmcgcm91dGluZXMgYXJlIGZyb20gRkNQVE0gYW5kIHdpbGwgYmUgY2FsbGVkIGJ5IHJwb3J0LgorICovCitzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqYmZhX2Zjc190aW5fY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc190aW5fcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKTsKK3ZvaWQgYmZhX2Zjc190aW5fcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pOwordm9pZCBiZmFfZmNzX3Rpbl9kZWxldGUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbik7Cit2b2lkIGJmYV9mY3NfdGluX3J4X3BybGkoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbiwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOwordm9pZCBiZmFfZmNzX3Rpbl9wYXVzZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKTsKK3ZvaWQgYmZhX2Zjc190aW5fcmVzdW1lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pOworCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KK3ZvaWQgYmZhX2Zjc19mY3B0bV9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfZmNwdG1fbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZjcHRtX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbiwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOworCisjZW5kaWYgLyogX19GQ1NfRkNQVE1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3hwLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3hwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3N2ZlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjeHAuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19mY3hwLmggRkNYUCBoZWxwZXIgbWFjcm9zIGZvciBGQ1MKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfRkNYUF9IX18KKyNkZWZpbmUgX19GQ1NfRkNYUF9IX18KKworI2RlZmluZSBiZmFfZmNzX2ZjeHBfYWxsb2MoX19mY3MpCVwKKwliZmFfZmN4cF9hbGxvYyhOVUxMLCAoX19mY3MpLT5iZmEsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisKKyNlbmRpZiAvKiBfX0ZDU19GQ1hQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2xwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3NDRiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2xwb3J0LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX2xwb3J0LmggRkNTIGxvZ2ljYWwgcG9ydCBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0ZDU19MUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfTFBPUlRfSF9fCisKKyNkZWZpbmUgX19WUE9SVF9IX18KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzX2ZhYnJpYy5oPgorI2luY2x1ZGUgPGZjc19tcy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8ZmNidWlsZC5oPgorCisvKgorICogUElEIHVzZWQgaW4gUDJQL04yTiAoIEluIEJpZyBFbmRpYW4pCisgKi8KKyNkZWZpbmUgTjJOX0xPQ0FMX1BJRAkgICAgMHgwMTAwMDAKKyNkZWZpbmUgTjJOX1JFTU9URV9QSUQJCTB4MDIwMDAwCisKKy8qCisgKiBNaXNjIFRpbWVvdXRzCisgKi8KKy8qCisgKiBUbyBiZSB1c2VkIHdoZW4gc3Bhd25pbmcgYSB0aW1lciBiZWZvcmUgcmV0cnlpbmcgYSBmYWlsZWQgY29tbWFuZC4gTWlsbGkKKyAqIFNlY3MuCisgKi8KKyNkZWZpbmUJQkZBX0ZDU19SRVRSWV9USU1FT1VUIDIwMDAKKworLyoKKyAqIENoZWNrIGZvciBQb3J0L1Zwb3J0IE1vZGUvUm9sZQorICovCisjZGVmaW5lCUJGQV9GQ1NfVlBPUlRfSVNfSU5JVElBVE9SX01PREUocG9ydCkgXAorCQkocG9ydC0+cG9ydF9jZmcucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKworI2RlZmluZQlCRkFfRkNTX1ZQT1JUX0lTX1RBUkdFVF9NT0RFKHBvcnQpIFwKKwkJKHBvcnQtPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisKKyNkZWZpbmUJQkZBX0ZDU19WUE9SVF9JU19JUEZDX01PREUocG9ydCkgXAorCQkocG9ydC0+cG9ydF9jZmcucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKQorCisvKgorICogSXMgdGhpcyBhIFdlbGwgS25vd24gQWRkcmVzcworICovCisjZGVmaW5lIEJGQV9GQ1NfUElEX0lTX1dLQShwaWQpICAoKGJmYV9vc19udG9oM2IocGlkKSA+IDB4RkZGMDAwKSA/ICAxIDogMCkKKworLyoKKyAqIFBvaW50ZXIgdG8gZWxlbWVudHMgd2l0aGluIFBvcnQKKyAqLworI2RlZmluZSBCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpICAocG9ydC0+ZmNzLT5iZmEpCisjZGVmaW5lIEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5ucykKKyNkZWZpbmUgQkZBX0ZDU19HRVRfU0NOX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5zY24pCisjZGVmaW5lIEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5tcykKKyNkZWZpbmUgQkZBX0ZDU19HRVRfRkRNSV9GUk9NX1BPUlQocG9ydCkgICgmcG9ydC0+cG9ydF90b3BvLnBmYWIubXMuZmRtaSkKKworLyoKKyAqIGhhbmRsZXIgZm9yIHVuc29saWNpZWQgZnJhbWVzCisgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpscG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOworCisvKgorICogRm9sbG93aW5nIHJvdXRpbmVzIHdpbGwgYmUgY2FsbGVkIGJ5IEZhYnJpYyB0byBpbmRpY2F0ZSBwb3J0CisgKiBvbmxpbmUvb2ZmbGluZSB0byB2cG9ydC4KKyAqLwordm9pZCBiZmFfZmNzX2xwb3J0X2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpscG9ydCwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJdTE2IHZmX2lkLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK2JmYV9ib29sZWFuX3QgICBiZmFfZmNzX3BvcnRfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisKKy8qCisgKiBMb29rdXAgcnBvcnQgYmFzZWQgb24gUElECisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1MzIgcGlkKTsKKworLyoKKyAqIExvb2t1cCBycG9ydCBiYXNlZCBvbiBQV1dOCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bigKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcHd3bik7CitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X253d24oCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IG53d24pOwordm9pZCBiZmFfZmNzX3BvcnRfYWRkX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2RlbF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CisKK3ZvaWQgYmZhX2Zjc19wb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisjZW5kaWYgLyogX19GQ1NfTFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19tcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmE4YzEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfbXMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19tcy5oIEZDUyBtcyBpbnRlcmZhY2VzCisgKi8KKyNpZm5kZWYgX19GQ1NfTVNfSF9fCisjZGVmaW5lIF9fRkNTX01TX0hfXworCisvKiBNUyBGQ1Mgcm91dGluZXMgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X21zX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21zX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21zX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfbXNfZmFicmljX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKworLyogRkRNSSBGQ1Mgcm91dGluZXMgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI2NTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcG9ydC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX3Bwb3J0LmggRkNTIHBoeXNpY2FsIHBvcnQgaW50ZXJmYWNlcworICovCisKKworI2lmbmRlZiBfX0ZDU19QUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfUFBPUlRfSF9fCisKKy8qCisgKiBmY3MgZnJpZW5kIGZ1bmN0aW9uczogb25seSBiZXR3ZWVuIGZjcyBtb2R1bGVzCisgKi8KK3ZvaWQgYmZhX2Zjc19wcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfcHBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCisjZW5kaWYgLyogX19GQ1NfUFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjAxZTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcnBvcnQuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19ycG9ydC5oIEZDUyBycG9ydCBpbnRlcmZhY2VzIGFuZCBkZWZpbmVzCisgKi8KKworI2lmbmRlZiBfX0ZDU19SUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfUlBPUlRfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorCit2b2lkIGJmYV9mY3NfcnBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3Jwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKwordm9pZCBiZmFfZmNzX3Jwb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9zY24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl1MzIgcGlkKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfc3RhcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2lfcnNwKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9wbG9naV9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9pdG50bV9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X3Rpbl9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X2ZjcHRtX29mZmxpbmVfZG9uZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitpbnQgIGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfY3JlYXRlX2J5X3d3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCB3d24pOworCisKKy8qIFJwb3J0IEZlYXR1cmVzICovCit2b2lkICBiZmFfZmNzX3JwZl9pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgIGJmYV9mY3NfcnBmX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkICBiZmFfZmNzX3JwZl9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKKworI2VuZGlmIC8qIF9fRkNTX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfdHJjbW9kLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc190cmNtb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWI1YWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfdHJjbW9kLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfdHJjbW9kLmggQkZBIEZDUyB0cmFjZSBtb2R1bGVzCisgKi8KKworI2lmbmRlZiBfX0ZDU19UUkNNT0RfSF9fCisjZGVmaW5lIF9fRkNTX1RSQ01PRF9IX18KKworI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKworLyoKKyAqICEhISBPbmx5IGFwcGVuZCB0byB0aGUgZW51bXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFueSB2ZXJzaW9uaW5nCisgKiAhISEgbmVlZGVkIGJldHdlZW4gdHJhY2UgdXRpbGl0eSBhbmQgZHJpdmVyIHZlcnNpb24KKyAqLworZW51bSB7CisJQkZBX1RSQ19GQ1NfRkFCUklDCQk9IDEsCisJQkZBX1RSQ19GQ1NfVkZBUEkJCT0gMiwKKwlCRkFfVFJDX0ZDU19QT1JUCQk9IDMsCisJQkZBX1RSQ19GQ1NfVlBPUlQJCT0gNCwKKwlCRkFfVFJDX0ZDU19WUF9BUEkJCT0gNSwKKwlCRkFfVFJDX0ZDU19WUFMJCQk9IDYsCisJQkZBX1RSQ19GQ1NfUlBPUlQJCT0gNywKKwlCRkFfVFJDX0ZDU19GQ1BJTQkJPSA4LAorCUJGQV9UUkNfRkNTX0ZDUFRNCQk9IDksCisJQkZBX1RSQ19GQ1NfTlMJCQk9IDEwLAorCUJGQV9UUkNfRkNTX1NDTgkJCT0gMTEsCisJQkZBX1RSQ19GQ1NfTE9PUAkJPSAxMiwKKwlCRkFfVFJDX0ZDU19VRgkJCT0gMTMsCisJQkZBX1RSQ19GQ1NfUFBPUlQJCT0gMTQsCisJQkZBX1RSQ19GQ1NfRkNQSVAJCT0gMTUsCisJQkZBX1RSQ19GQ1NfUE9SVF9BUEkJPSAxNiwKKwlCRkFfVFJDX0ZDU19SUE9SVF9BUEkJPSAxNywKKwlCRkFfVFJDX0ZDU19BVVRICQk9IDE4LAorCUJGQV9UUkNfRkNTX04yTgkJCT0gMTksCisJQkZBX1RSQ19GQ1NfTVMJCQk9IDIwLAorCUJGQV9UUkNfRkNTX0ZETUkJCT0gMjEsCisJQkZBX1RSQ19GQ1NfUlBPUlRfRlRSUwk9IDIyLAorfTsKKworI2VuZGlmIC8qIF9fRkNTX1RSQ01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3VmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc191Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjFiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc191Zi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX3VmLmggRkNTIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfVUZfSF9fCisjZGVmaW5lIF9fRkNTX1VGX0hfXworCisvKgorICogZmNzIGZyaWVuZCBmdW5jdGlvbnM6IG9ubHkgYmV0d2VlbiBmY3MgbW9kdWxlcworICovCit2b2lkIGJmYV9mY3NfdWZfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3VmX21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fRkNTX1VGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Zwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MGI2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Zwb3J0LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRkNTX1ZQT1JUX0hfXworI2RlZmluZSBfX0ZDU19WUE9SVF9IX18KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfdnBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KKwordm9pZCBiZmFfZmNzX3Zwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisKK3ZvaWQgYmZhX2Zjc192cG9ydF9jbGVhbnVwKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3Zwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3Zwb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3UzMiBiZmFfZmNzX3Zwb3J0X2dldF9tYXgoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fRkNTX1ZQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmRtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NDVlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYwpAQCAtMCwwICsxLDEyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcG9ydF9hcGkuYyBCRkEgRkNTIHBvcnQKKyAqLworCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZkbWkuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgRkRNSSk7CisKKyNkZWZpbmUgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUyAyCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKHZvaWQgKmZkbWlfY2JhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQodm9pZCAqZmRtaV9jYmFyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhKHZvaWQgKmZkbWlfY2JhcmcsCisJCQkJCSAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JoYmFfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwcnRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9yaGJhX3B5bGQoCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwgdTggKnB5bGQpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycHJ0X3B5bGQoCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwgdTggKnB5bGQpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZCgKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLCB1OCAqcHlsZCk7CitzdGF0aWMgdTE2IGJmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3BvcnRhdHRyX2Jsb2NrKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksIHU4ICpweWxkKTsKK3ZvaWQgYmZhX2Zjc19mZG1pX2dldF9oYmFhdHRyKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpoYmFfYXR0cik7Cit2b2lkIGJmYV9mY3NfZmRtaV9nZXRfcG9ydGF0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQlzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zICpwb3J0X2F0dHIpOworLyoqCisgKiAgZmNzX2ZkbWlfc20gRkNTIEZETUkgc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogIEZETUkgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSBwb3J0X2ZkbWlfZXZlbnQgeworCUZETUlTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORSA9IDIsCisJRkRNSVNNX0VWRU5UX1JTUF9PSyA9IDQsCisJRkRNSVNNX0VWRU5UX1JTUF9FUlJPUiA9IDUsCisJRkRNSVNNX0VWRU5UX1RJTUVPVVQgPSA2LAorCUZETUlTTV9FVkVOVF9SSEJBX1NFTlQgPSA3LAorCUZETUlTTV9FVkVOVF9SUFJUX1NFTlQgPSA4LAorCUZETUlTTV9FVkVOVF9SUEFfU0VOVCA9IDksCit9OworCitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmFfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycHJ0KHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBydF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGFfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworLyoqCisgKiAJCVN0YXJ0IGluIG9mZmxpbmUgc3RhdGUgLSBhd2FpdGluZyBNUyB0byBzZW5kIHN0YXJ0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgICAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCWZkbWktPnJldHJ5X2NudCA9IDA7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PTkxJTkU6CisJCWlmIChwb3J0LT52cG9ydCkgeworCQkJLyoKKwkJCSAqIEZvciBWcG9ydHMsIHJlZ2lzdGVyIGEgbmV3IHBvcnQuCisJCQkgKi8KKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwKKwkJCQkJIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydCk7CisJCQliZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQoZmRtaSwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRm9yIGEgYmFzZSBwb3J0LCB3ZSBzaG91bGQgZmlyc3QgcmVnaXN0ZXIgdGhlIEhCQQorCQkJICogYXRyaWJ1dGUuIFRoZSBIQkEgYXR0cmlidXRlIGFsc28gY29udGFpbnMgdGhlIGJhc2UKKwkJCSAqICBwb3J0IHJlZ2lzdHJhdGlvbi4KKwkJCSAqLworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLAorCQkJCQkgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKTsKKwkJCWJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcmhiYShmZG1pLCBOVUxMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUkhCQV9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmEpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCSAgICAgICAmZmRtaS0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9yaGJhX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCQkmZmRtaS0+dGltZXIsIGJmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQsCisJCQkJCWZkbWksIEJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogc2V0IHN0YXRlIHRvIG9mZmxpbmUKKwkJCSAqLworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJLyoKKwkJICogSW5pdGlhdGUgUmVnaXN0ZXIgUG9ydCBBdHRyaWJ1dGVzCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKTsKKwkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycGEoZmRtaSwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfZmN4cF9kaXNjYXJkKGZkbWktPmZjeHApOworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKTsKKwkJYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKGZkbWksIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJmZkbWktPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoKKyogUlBSVCA6IFJlZ2lzdGVyIFBvcnQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUlBSVF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwcnQpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCSAgICAgICAmZmRtaS0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycHJ0X3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCQkmZmRtaS0+dGltZXIsIGJmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQsCisJCQkJCWZkbWksIEJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzZXQgc3RhdGUgdG8gb2ZmbGluZQorCQkJICovCisJCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChmZG1pLT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JwcnRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydCk7CisJCWJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBydChmZG1pLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZmZG1pLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qCisgKiBSZWdpc3RlciBQb3J0IEF0dHJpYnV0ZXMKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSBlbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1JQQV9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYSk7CisJCWJyZWFrOworCisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQocG9ydCksCisJCQkJICAgICAgICZmZG1pLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGEoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGFfcmV0cnkpOworCQkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQocG9ydCksCisJCQkJCSZmZG1pLT50aW1lciwgYmZhX2Zjc19wb3J0X2ZkbWlfdGltZW91dCwKKwkJCQkJZmRtaSwgQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzZXQgc3RhdGUgdG8gb2ZmbGluZQorCQkJICovCisJCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUpOworCQlmZG1pLT5yZXRyeV9jbnQgPSAwOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChmZG1pLT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgICAgICBlbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19ycGEpOworCQliZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwYShmZG1pLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZmZG1pLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgICAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworLyoqCisqICAgUkhCQSA6IFJlZ2lzdGVyIEhCQSBBdHRyaWJ1dGVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKHZvaWQgKmZkbWlfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSBmZG1pX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuLCBhdHRyX2xlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1OCAgICAgICAgKnB5bGQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZmZG1pLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhLCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SSEJBKTsKKworCWF0dHJfbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcmhiYV9weWxkKGZkbWksCisJCQkodTggKikgKChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZCArIDEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIChsZW4gKyBhdHRyX2xlbiksICZmY2hzLAorCQkgICAgICBiZmFfZmNzX3BvcnRfZmRtaV9yaGJhX3Jlc3BvbnNlLCAodm9pZCAqKWZkbWksCisJCSAgICAgIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SSEJBX1NFTlQpOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9yaGJhX3B5bGQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJICB1OCAqcHlsZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19mZG1pX2hiYV9hdHRyX3MgaGJhX2F0dHI7CS8qIEB0b2RvICovCisJc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpmY3NfaGJhX2F0dHIgPSAmaGJhX2F0dHI7IC8qIEB0b2RvICovCisJc3RydWN0IGZkbWlfcmhiYV9zICAgICpyaGJhID0gKHN0cnVjdCBmZG1pX3JoYmFfcyAqKSBweWxkOworCXN0cnVjdCBmZG1pX2F0dHJfcyAgICAqYXR0cjsKKwl1OCAgICAgICAgKmN1cnJfcHRyOworCXUxNiAgICAgICAgbGVuLCBjb3VudDsKKworCS8qCisJICogZ2V0IGhiYSBhdHRyaWJ1dGVzCisJICovCisJYmZhX2Zjc19mZG1pX2dldF9oYmFhdHRyKGZkbWksIGZjc19oYmFfYXR0cik7CisKKwlyaGJhLT5oYmFfaWQgPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJcmhiYS0+cG9ydF9saXN0Lm51bV9wb3J0cyA9IGJmYV9vc19odG9ubCgxKTsKKwlyaGJhLT5wb3J0X2xpc3QucG9ydF9lbnRyeSA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKworCWxlbiA9IHNpemVvZihyaGJhLT5oYmFfaWQpICsgc2l6ZW9mKHJoYmEtPnBvcnRfbGlzdCk7CisKKwljb3VudCA9IDA7CisJbGVuICs9IHNpemVvZihyaGJhLT5oYmFfYXR0cl9ibGsuYXR0cl9jb3VudCk7CisKKwkvKgorCSAqIGZpbGwgb3V0IHRoZSBpbnZpZGlkdWFsIGVudHJpZXMgb2YgdGhlIEhCQSBhdHRyaWIgQmxvY2sKKwkgKi8KKwljdXJyX3B0ciA9ICh1OCAqKSAmcmhiYS0+aGJhX2F0dHJfYmxrLmhiYV9hdHRyOworCisJLyoKKwkgKiBOb2RlIE5hbWUKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9OT0RFTkFNRSk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKHd3bl90KTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydCksIGF0dHItPmxlbik7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE1hbnVmYWN0dXJlcgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01BTlVGQUNUVVJFUik7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogU2VyaWFsIE51bWJlcgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX1NFUklBTE5VTSk7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+c2VyaWFsX251bSk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPnNlcmlhbF9udW0sIGF0dHItPmxlbik7CisJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCWxlbiArPSBhdHRyLT5sZW47CisJY291bnQrKzsKKwlhdHRyLT5sZW4gPQorCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCisJLyoKKwkgKiBNb2RlbAorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01PREVMKTsKKwlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5tb2RlbCk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm1vZGVsLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogTW9kZWwgRGVzYworCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01PREVMX0RFU0MpOworCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPm1vZGVsX2Rlc2MpOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5tb2RlbF9kZXNjLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogSC9XIFZlcnNpb24KKwkgKi8KKwlpZiAoZmNzX2hiYV9hdHRyLT5od192ZXJzaW9uWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX0hXX1ZFUlNJT04pOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5od192ZXJzaW9uKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPmh3X3ZlcnNpb24sIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBEcml2ZXIgVmVyc2lvbgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX0RSSVZFUl9WRVJTSU9OKTsKKwlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbik7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPmRyaXZlcl92ZXJzaW9uLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOzsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE9wdGlvbiBSb20gVmVyc2lvbgorCSAqLworCWlmIChmY3NfaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX1JPTV9WRVJTSU9OKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIpOworCQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIsIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBmL3cgVmVyc2lvbiA9IGRyaXZlciB2ZXJzaW9uCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX0hCQV9BVFRSSUJfRldfVkVSU0lPTik7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24pOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbiwgYXR0ci0+bGVuKTsKKwkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE9TIE5hbWUKKwkgKi8KKwlpZiAoZmNzX2hiYV9hdHRyLT5vc19uYW1lWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX09TX05BTUUpOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5vc19uYW1lKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm9zX25hbWUsIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBNQVhfQ1RfUEFZTE9BRAorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01BWF9DVCk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQsIGF0dHItPmxlbik7CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIFVwZGF0ZSBzaXplIG9mIHBheWxvYWQKKwkgKi8KKwlsZW4gKz0gKChzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSkgKiBjb3VudCk7CisKKwlyaGJhLT5oYmFfYXR0cl9ibGsuYXR0cl9jb3VudCA9IGJmYV9vc19odG9ubChjb3VudCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JoYmFfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiAgIFJQUlQgOiBSZWdpc3RlciBQb3J0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQodm9pZCAqZmRtaV9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9IGZkbWlfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXUxNiAgICAgICAgbGVuLCBhdHRyX2xlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1OCAgICAgICAgKnB5bGQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZmZG1pLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycHJ0LCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SUFJUKTsKKworCWF0dHJfbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBydF9weWxkKGZkbWksCisJCQkodTggKikgKChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZCArIDEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiArIGF0dHJfbGVuLCAmZmNocywKKwkJICAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfcnBydF9yZXNwb25zZSwgKHZvaWQgKilmZG1pLAorCQkgICAgICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlBSVF9TRU5UKTsKK30KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgYnVpbGRzIFBvcnQgQXR0cmlidXRlIEJsb2NrIHRoYXQgdXNlZCBpbiBSUEEsIFJQUlQgY29tbWFuZHMuCisgKi8KK3N0YXRpYyAgICAgICAgICB1MTYKK2JmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3BvcnRhdHRyX2Jsb2NrKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSAgICAgICB1OCAqcHlsZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zIGZjc19wb3J0X2F0dHI7CisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgKnBvcnRfYXR0cmliID0gKHN0cnVjdCBmZG1pX3BvcnRfYXR0cl9zICopIHB5bGQ7CisJc3RydWN0IGZkbWlfYXR0cl9zICAgICphdHRyOworCXU4ICAgICAgICAqY3Vycl9wdHI7CisJdTE2ICAgICAgICBsZW47CisJdTggICAgICAgICBjb3VudCA9IDA7CisKKwkvKgorCSAqIGdldCBwb3J0IGF0dHJpYnV0ZXMKKwkgKi8KKwliZmFfZmNzX2ZkbWlfZ2V0X3BvcnRhdHRyKGZkbWksICZmY3NfcG9ydF9hdHRyKTsKKworCWxlbiA9IHNpemVvZihwb3J0X2F0dHJpYi0+YXR0cl9jb3VudCk7CisKKwkvKgorCSAqIGZpbGwgb3V0IHRoZSBpbnZpZGlkdWFsIGVudHJpZXMKKwkgKi8KKwljdXJyX3B0ciA9ICh1OCAqKSAmcG9ydF9hdHRyaWItPnBvcnRfYXR0cjsKKworCS8qCisJICogRkM0IFR5cGVzCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX0ZDNF9UWVBFUyk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19wb3J0X2F0dHIuc3VwcF9mYzRfdHlwZXMpOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5zdXBwX2ZjNF90eXBlcywgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogU3VwcG9ydGVkIFNwZWVkCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX1NVUFBfU1BFRUQpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLnN1cHBfc3BlZWQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19wb3J0X2F0dHIuc3VwcF9zcGVlZCwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogY3VycmVudCBQb3J0IFNwZWVkCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX1BPUlRfU1BFRUQpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLmN1cnJfc3BlZWQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19wb3J0X2F0dHIuY3Vycl9zcGVlZCwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogbWF4IGZyYW1lIHNpemUKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfRlJBTUVfU0laRSk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19wb3J0X2F0dHIubWF4X2ZybV9zaXplKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZmY3NfcG9ydF9hdHRyLm1heF9mcm1fc2l6ZSwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogT1MgRGV2aWNlIE5hbWUKKwkgKi8KKwlpZiAoZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZVswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfREVWX05BTUUpOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSk7CisJCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSwgYXR0ci0+bGVuKTsKKwkJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwkJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJCWxlbiArPSBhdHRyLT5sZW47CisJCSsrY291bnQ7CisJCWF0dHItPmxlbiA9CisJCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCX0KKwkvKgorCSAqIEhvc3QgTmFtZQorCSAqLworCWlmIChmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZVswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfSE9TVF9OQU1FKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19wb3J0X2F0dHIuaG9zdF9uYW1lKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZSwgYXR0ci0+bGVuKTsKKwkJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwkJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJCWxlbiArPSBhdHRyLT5sZW47CisJCSsrY291bnQ7CisJCWF0dHItPmxlbiA9CisJCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCX0KKworCS8qCisJICogVXBkYXRlIHNpemUgb2YgcGF5bG9hZAorCSAqLworCXBvcnRfYXR0cmliLT5hdHRyX2NvdW50ID0gYmZhX29zX2h0b25sKGNvdW50KTsKKwlsZW4gKz0gKChzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSkgKiBjb3VudCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBydF9weWxkKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSAgdTggKnB5bGQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZkbWlfcnBydF9zICAgICpycHJ0ID0gKHN0cnVjdCBmZG1pX3JwcnRfcyAqKSBweWxkOworCXUxNiAgICAgICAgbGVuOworCisJcnBydC0+aGJhX2lkID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKTsKKwlycHJ0LT5wb3J0X25hbWUgPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisKKwlsZW4gPSBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9wb3J0YXR0cl9ibG9jayhmZG1pLAorCQkJKHU4ICopICZycHJ0LT5wb3J0X2F0dHJfYmxrKTsKKworCWxlbiArPSBzaXplb2YocnBydC0+aGJhX2lkKSArIHNpemVvZihycHJ0LT5wb3J0X25hbWUpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JwcnRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiAgIFJQQSA6IFJlZ2lzdGVyIFBvcnQgQXR0cmlidXRlcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhKHZvaWQgKmZkbWlfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSBmZG1pX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwl1MTYgICAgICAgIGxlbiwgYXR0cl9sZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICpweWxkOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmZmRtaS0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhLCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SUEEpOworCisJYXR0cl9sZW4gPSBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZChmZG1pLAorCQkJKHU4ICopICgoc3RydWN0IGN0X2hkcl9zICopIHB5bGQgKyAxKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4gKyBhdHRyX2xlbiwgJmZjaHMsCisJCSAgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSwgKHZvaWQgKilmZG1pLAorCQkgICAgICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlBBX1NFTlQpOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgdTggKnB5bGQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZkbWlfcnBhX3MgICAgICpycGEgPSAoc3RydWN0IGZkbWlfcnBhX3MgKikgcHlsZDsKKwl1MTYgICAgICAgIGxlbjsKKworCXJwYS0+cG9ydF9uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCisJbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcG9ydGF0dHJfYmxvY2soZmRtaSwKKwkJCSh1OCAqKSAmcnBhLT5wb3J0X2F0dHJfYmxrKTsKKworCWxlbiArPSBzaXplb2YocnBhLT5wb3J0X25hbWUpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9PSyk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICopYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1RJTUVPVVQpOworfQorCit2b2lkCitiZmFfZmNzX2ZkbWlfZ2V0X2hiYWF0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpoYmFfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zICpkcml2ZXJfaW5mbyA9ICZwb3J0LT5mY3MtPmRyaXZlcl9pbmZvOworCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgYWRhcHRlcl9hdHRyOworCisJYmZhX29zX21lbXNldChoYmFfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNzX2ZkbWlfaGJhX2F0dHJfcykpOworCWJmYV9vc19tZW1zZXQoJmFkYXB0ZXJfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MpKTsKKworCWJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cigmcG9ydC0+ZmNzLT5iZmEtPmlvYywgJmFkYXB0ZXJfYXR0cik7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tYW51ZmFjdHVyZXIsIGFkYXB0ZXJfYXR0ci5tYW51ZmFjdHVyZXIsCisJCXNpemVvZihhZGFwdGVyX2F0dHIubWFudWZhY3R1cmVyKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5zZXJpYWxfbnVtLCBhZGFwdGVyX2F0dHIuc2VyaWFsX251bSwKKwkJc2l6ZW9mKGFkYXB0ZXJfYXR0ci5zZXJpYWxfbnVtKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tb2RlbCwgYWRhcHRlcl9hdHRyLm1vZGVsLCBzaXplb2YoaGJhX2F0dHItPm1vZGVsKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tb2RlbF9kZXNjLCBhZGFwdGVyX2F0dHIubW9kZWxfZGVzY3IsCisJCXNpemVvZihoYmFfYXR0ci0+bW9kZWxfZGVzYykpOworCisJc3RybmNweShoYmFfYXR0ci0+aHdfdmVyc2lvbiwgYWRhcHRlcl9hdHRyLmh3X3ZlciwKKwkJc2l6ZW9mKGhiYV9hdHRyLT5od192ZXJzaW9uKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbiwgKGNoYXIgKilkcml2ZXJfaW5mby0+dmVyc2lvbiwKKwkJc2l6ZW9mKGhiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbikpOworCisJc3RybmNweShoYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIsIGFkYXB0ZXJfYXR0ci5vcHRyb21fdmVyLAorCQlzaXplb2YoaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5md192ZXJzaW9uLCBhZGFwdGVyX2F0dHIuZndfdmVyLAorCQlzaXplb2YoaGJhX2F0dHItPmZ3X3ZlcnNpb24pKTsKKworCXN0cm5jcHkoaGJhX2F0dHItPm9zX25hbWUsIGRyaXZlcl9pbmZvLT5ob3N0X29zX25hbWUsCisJCXNpemVvZihoYmFfYXR0ci0+b3NfbmFtZSkpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIHBhdGNoIGxldmVsLCBhcHBlbmQgaXQgdG8gdGhlIG9zIG5hbWUgYWxvbmcgd2l0aCBhCisJICogc2VwYXJhdG9yCisJICovCisJaWYgKGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoWzBdICE9ICdcMCcpIHsKKwkJc3RybmNhdChoYmFfYXR0ci0+b3NfbmFtZSwgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiwKKwkJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisJCXN0cm5jYXQoaGJhX2F0dHItPm9zX25hbWUsIGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoLAorCQkJc2l6ZW9mKGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoKSk7CisJfQorCisJaGJhX2F0dHItPm1heF9jdF9weWxkID0gYmZhX29zX2h0b25sKEZDX01BWF9QRFVTWik7CisKK30KKwordm9pZAorYmZhX2Zjc19mZG1pX2dldF9wb3J0YXR0cihzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcyAqcG9ydF9hdHRyKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvID0gJnBvcnQtPmZjcy0+ZHJpdmVyX2luZm87CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgcHBvcnRfYXR0cjsKKworCWJmYV9vc19tZW1zZXQocG9ydF9hdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcykpOworCisJLyoKKwkgKiBnZXQgcHBvcnQgYXR0cmlidXRlcyBmcm9tIGhhbAorCSAqLworCWJmYV9wcG9ydF9nZXRfYXR0cihwb3J0LT5mY3MtPmJmYSwgJnBwb3J0X2F0dHIpOworCisJLyoKKwkgKiBnZXQgRkM0IHR5cGUgQml0bWFzaworCSAqLworCWZjX2dldF9mYzR0eXBlX2JpdG1hc2soRkNfVFlQRV9GQ1AsIHBvcnRfYXR0ci0+c3VwcF9mYzRfdHlwZXMpOworCisJLyoKKwkgKiBTdXBwb3J0ZWQgU3BlZWRzCisJICovCisJcG9ydF9hdHRyLT5zdXBwX3NwZWVkID0gYmZhX29zX2h0b25sKEJGQV9GQ1NfRkRNSV9TVVBPUlRFRF9TUEVFRFMpOworCisJLyoKKwkgKiBDdXJyZW50IFNwZWVkCisJICovCisJcG9ydF9hdHRyLT5jdXJyX3NwZWVkID0gYmZhX29zX2h0b25sKHBwb3J0X2F0dHIuc3BlZWQpOworCisJLyoKKwkgKiBNYXggUERVIFNpemUuCisJICovCisJcG9ydF9hdHRyLT5tYXhfZnJtX3NpemUgPSBiZmFfb3NfaHRvbmwoRkNfTUFYX1BEVVNaKTsKKworCS8qCisJICogT1MgZGV2aWNlIE5hbWUKKwkgKi8KKwlzdHJuY3B5KHBvcnRfYXR0ci0+b3NfZGV2aWNlX25hbWUsIChjaGFyICopZHJpdmVyX2luZm8tPm9zX2RldmljZV9uYW1lLAorCQlzaXplb2YocG9ydF9hdHRyLT5vc19kZXZpY2VfbmFtZSkpOworCisJLyoKKwkgKiBIb3N0IG5hbWUKKwkgKi8KKwlzdHJuY3B5KHBvcnRfYXR0ci0+aG9zdF9uYW1lLCAoY2hhciAqKWRyaXZlcl9pbmZvLT5ob3N0X21hY2hpbmVfbmFtZSwKKwkJc2l6ZW9mKHBvcnRfYXR0ci0+aG9zdF9uYW1lKSk7CisKK30KKworCit2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAmbXMtPmZkbWk7CisKKwlmZG1pLT5tcyA9IG1zOworCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9ICZtcy0+ZmRtaTsKKworCWZkbWktPm1zID0gbXM7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gJm1zLT5mZG1pOworCisJZmRtaS0+bXMgPSBtczsKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUE9SVF9PTkxJTkUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThjYWMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9BRU5fSF9fCisjZGVmaW5lIF9fQkZBX0FFTl9IX18KKworI2luY2x1ZGUgImRlZnMvYmZhX2RlZnNfYWVuLmgiCisKKyNkZWZpbmUgQkZBX0FFTl9NQVhfRU5UUlkgICA1MTIKKworZXh0ZXJuIHMzMiBiZmFfYWVuX21heF9jZmdfZW50cnk7CitzdHJ1Y3QgYmZhX2Flbl9zIHsKKwl2b2lkCQkqYmZhZDsKKwlzMzIJCW1heF9lbnRyeTsKKwlzMzIJCXdyaXRlX2luZGV4OworCXMzMgkJcmVhZF9pbmRleDsKKwl1MzIJYmZhZF9udW07CisJdTMyCXNlcV9udW07CisJdm9pZAkJKCphZW5fY2Jfbm90aWZ5KSh2b2lkICpiZmFkKTsKKwl2b2lkCQkoKmdldHRpbWVvZmRheSkoc3RydWN0IGJmYV90aW1ldmFsX3MgKnR2KTsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAJKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zCWxpc3RbQkZBX0FFTl9NQVhfRU5UUlldOyAvKiBNdXN0IGJlIHRoZSBsYXN0ICovCit9OworCisKKy8qKgorICogUHVibGljIEFQSXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitiZmFfYWVuX3NldF9tYXhfY2ZnX2VudHJ5KGludCBtYXhfZW50cnkpCit7CisJYmZhX2Flbl9tYXhfY2ZnX2VudHJ5ID0gbWF4X2VudHJ5OworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfbWF4X2NmZ19lbnRyeSh2b2lkKQoreworCXJldHVybiBiZmFfYWVuX21heF9jZmdfZW50cnk7Cit9CisKK3N0YXRpYyBpbmxpbmUgczMyCitiZmFfYWVuX2dldF9tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGJmYV9hZW5fZW50cnlfcykgKiBiZmFfYWVuX2dldF9tYXhfY2ZnX2VudHJ5KCkpOworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfd2koc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCXJldHVybiBhZW4tPndyaXRlX2luZGV4OworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfcmkoc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCXJldHVybiBhZW4tPnJlYWRfaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgczMyCitiZmFfYWVuX2ZldGNoX2NvdW50KHN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgczMyIHJlYWRfaW5kZXgpCit7CisJcmV0dXJuICgoYWVuLT53cml0ZV9pbmRleCArIGFlbi0+bWF4X2VudHJ5KSAtIHJlYWRfaW5kZXgpCisJCSUgYWVuLT5tYXhfZW50cnk7Cit9CisKK3MzMiBiZmFfYWVuX2luaXQoc3RydWN0IGJmYV9hZW5fcyAqYWVuLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCQl2b2lkICpiZmFkLCB1MzIgaW5zdF9pZCwgdm9pZCAoKmFlbl9jYl9ub3RpZnkpKHZvaWQgKiksCisJCXZvaWQgKCpnZXR0aW1lb2ZkYXkpKHN0cnVjdCBiZmFfdGltZXZhbF9zICopKTsKKworczMyIGJmYV9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIGVudW0gYmZhX2Flbl9jYXRlZ29yeSBhZW5fY2F0ZWdvcnksCisJCSAgICAgaW50IGFlbl90eXBlLCB1bmlvbiBiZmFfYWVuX2RhdGFfdSAqYWVuX2RhdGEpOworCitzMzIgYmZhX2Flbl9mZXRjaChzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIHN0cnVjdCBiZmFfYWVuX2VudHJ5X3MgKmFlbl9lbnRyeSwKKwkJICAgICAgczMyIGVudHJ5X3NwYWNlLCBzMzIgcmlpLCBzMzIgKnJpX2FyciwKKwkJICAgICAgczMyIHJpX2Fycl9jbnQpOworCitzMzIgYmZhX2Flbl9nZXRfaW5zdChzdHJ1Y3QgYmZhX2Flbl9zICphZW4pOworCisjZW5kaWYgLyogX19CRkFfQUVOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2FkYXB0ZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwZDNlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hZGFwdGVyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0FEQVBURVIgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9hZGFwdGVyX2hfXworI2RlZmluZQlfX2JmYV9hZW5fYWRhcHRlcl9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9BREFQVEVSX0FERCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQURBUFRFUiwgQkZBX0FEQVBURVJfQUVOX0FERCkKKyNkZWZpbmUgQkZBX0FFTl9BREFQVEVSX1JFTU9WRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQURBUFRFUiwgQkZBX0FEQVBURVJfQUVOX1JFTU9WRSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hdWRpdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2F1ZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjZDdhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hdWRpdC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9BVURJVCBNb2R1bGUgKi8KKyNpZm5kZWYJX19iZmFfYWVuX2F1ZGl0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fYXVkaXRfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fQVVESVRfQVVUSF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0FVRElULCBCRkFfQVVESVRfQUVOX0FVVEhfRU5BQkxFKQorI2RlZmluZSBCRkFfQUVOX0FVRElUX0FVVEhfRElTQUJMRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQVVESVQsIEJGQV9BVURJVF9BRU5fQVVUSF9ESVNBQkxFKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2V0aHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ldGhwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3ZDBiNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ldGhwb3J0LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0VUSFBPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9ldGhwb3J0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fZXRocG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9FVEhQT1JUX0xJTktVUCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfRVRIUE9SVCwgQkZBX0VUSFBPUlRfQUVOX0xJTktVUCkKKyNkZWZpbmUgQkZBX0FFTl9FVEhQT1JUX0xJTktET1dOIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9FVEhQT1JULCBCRkFfRVRIUE9SVF9BRU5fTElOS0RPV04pCisjZGVmaW5lIEJGQV9BRU5fRVRIUE9SVF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0VUSFBPUlQsIEJGQV9FVEhQT1JUX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fRVRIUE9SVF9ESVNBQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9FVEhQT1JULCBCRkFfRVRIUE9SVF9BRU5fRElTQUJMRSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM3OGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2lvYy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9JT0MgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9pb2NfaF9fCisjZGVmaW5lCV9fYmZhX2Flbl9pb2NfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fSU9DX0hCR09PRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9IQkdPT0QpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0hCRkFJTCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9IQkZBSUwpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0VOQUJMRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0RJU0FCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fRElTQUJMRSkKKyNkZWZpbmUgQkZBX0FFTl9JT0NfRldNSVNNQVRDSCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9GV01JU01BVENIKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2l0bmltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5faXRuaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Q4ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2l0bmltLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lUTklNIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5faXRuaW1faF9fCisjZGVmaW5lCV9fYmZhX2Flbl9pdG5pbV9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9JVE5JTV9PTkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lUTklNLCBCRkFfSVROSU1fQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9JVE5JTV9PRkZMSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9JVE5JTSwgQkZBX0lUTklNX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lUTklNLCBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1QpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOGViYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fbHBvcnQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfTFBPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9scG9ydF9oX18KKyNkZWZpbmUJX19iZmFfYWVuX2xwb3J0X2hfXworCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlICA8ZGVmcy9iZmFfZGVmc19hZW4uaD4KKworI2RlZmluZSBCRkFfQUVOX0xQT1JUX05FVyBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX0RFTEVURSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fREVMRVRFKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX09OTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fT05MSU5FKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX09GRkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX09GRkxJTkUpCisjZGVmaW5lIEJGQV9BRU5fTFBPUlRfRElTQ09OTkVDVCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fRElTQ09OTkVDVCkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9ORVdfUFJPUCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXX1BST1ApCisjZGVmaW5lIEJGQV9BRU5fTFBPUlRfREVMRVRFX1BST1AgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX0RFTEVURV9QUk9QKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05FV19TVEFOREFSRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXX1NUQU5EQVJEKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX0RFTEVURV9TVEFOREFSRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fREVMRVRFX1NUQU5EQVJEKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfRFVQX1dXTiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfRkFCUklDX01BWCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkZDkwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9wb3J0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX1BPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9wb3J0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fcG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX09OTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX09GRkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfUkxJUiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1JMSVIpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9TRlBfSU5TRVJUIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fU0ZQX0lOU0VSVCkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1NGUF9SRU1PVkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9TRlBfUkVNT1ZFKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfU0ZQX1BPTSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1NGUF9QT00pCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9ESVNBQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fRElTQUJMRSkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX0FVVEhfT04gXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9BVVRIX09OKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfQVVUSF9PRkYgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9BVVRIX09GRikKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfUU9TX05FRyBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1FPU19ORUcpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9GQUJSSUNfTkFNRV9DSEFOR0UgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9GQUJSSUNfTkFNRV9DSEFOR0UpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9TRlBfQUNDRVNTX0VSUk9SIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fU0ZQX0FDQ0VTU19FUlJPUikKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1NGUF9VTlNVUFBPUlQgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9TRlBfVU5TVVBQT1JUKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRiZTFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3Jwb3J0LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX1JQT1JUIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5fcnBvcnRfaF9fCisjZGVmaW5lCV9fYmZhX2Flbl9ycG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9SUE9SVF9PTkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1JQT1JULCBCRkFfUlBPUlRfQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9SUE9SVF9PRkZMSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX1JQT1JUX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1JQT1JULCBCRkFfUlBPUlRfQUVOX0RJU0NPTk5FQ1QpCisjZGVmaW5lIEJGQV9BRU5fUlBPUlRfUU9TX1BSSU8gXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1JQT1JULCBCRkFfUlBPUlRfQUVOX1FPU19QUklPKQorI2RlZmluZSBCRkFfQUVOX1JQT1JUX1FPU19GTE9XSUQgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1JQT1JULCBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjMTQxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmEuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9IX18KKyNkZWZpbmUgX19CRkFfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgPGNzL2JmYV9wbG9nLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jZmMuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbi5oPgorI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworc3RydWN0IGJmYV9zOworI2luY2x1ZGUgPGJmYV9pbnRyX3ByaXYuaD4KKworc3RydWN0IGJmYV9wY2lkZXZfczsKKworLyoqCisgKiBQQ0kgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgQkZBCisgKi8KK3N0cnVjdCBiZmFfcGNpaWRfcyB7CisJdTE2ICAgICAgICBkZXZpY2VfaWQ7CisJdTE2ICAgICAgICB2ZW5kb3JfaWQ7Cit9OworCitleHRlcm4gY2hhciAgICAgYmZhX3ZlcnNpb25bXTsKKworLyoqCisgKiBCRkEgUG93ZXIgTWdtdCBDb21tYW5kcworICovCitlbnVtIGJmYV9wbV9jbWQgeworCUJGQV9QTV9DVExfRDAgPSAwLAorCUJGQV9QTV9DVExfRDEgPSAxLAorCUJGQV9QTV9DVExfRDIgPSAyLAorCUJGQV9QTV9DVExfRDMgPSAzLAorfTsKKworLyoqCisgKiBCRkEgbWVtb3J5IHJlc291cmNlcworICovCitlbnVtIGJmYV9tZW1fdHlwZSB7CisJQkZBX01FTV9UWVBFX0tWQSA9IDEsCS8qISBLZXJuZWwgVmlydHVhbCBNZW1vcnkgKihub24tZG1hLWFibGUpICovCisJQkZBX01FTV9UWVBFX0RNQSA9IDIsCS8qISBETUEtYWJsZSBtZW1vcnkgKi8KKwlCRkFfTUVNX1RZUEVfTUFYID0gQkZBX01FTV9UWVBFX0RNQSwKK307CisKK3N0cnVjdCBiZmFfbWVtX2VsZW1fcyB7CisJZW51bSBiZmFfbWVtX3R5cGUgbWVtX3R5cGU7CS8qICBzZWUgZW51bSBiZmFfbWVtX3R5cGUgCSovCisJdTMyICAgICAgICBtZW1fbGVuOwkvKiAgVG90YWwgTGVuZ3RoIGluIEJ5dGVzCSovCisJdTggICAgICAgCSprdmE7CQkvKiAga2VybmVsIHZpcnR1YWwgYWRkcmVzcwkqLworCXU2NCAgICAgICAgZG1hOwkJLyogIGRtYSBhZGRyZXNzIGlmIERNQSBtZW1vcnkJKi8KKwl1OCAgICAgICAJKmt2YV9jdXJwOwkvKiAga3ZhIGFsbG9jYXRpb24gY3Vyc29yCSovCisJdTY0ICAgICAgICBkbWFfY3VycDsJLyogIGRtYSBhbGxvY2F0aW9uIGN1cnNvcgkqLworfTsKKworc3RydWN0IGJmYV9tZW1pbmZvX3MgeworCXN0cnVjdCBiZmFfbWVtX2VsZW1fcyBtZW1pbmZvW0JGQV9NRU1fVFlQRV9NQVhdOworfTsKKyNkZWZpbmUgYmZhX21lbWluZm9fa3ZhKF9tKQlcCisJKF9tKS0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfS1ZBIC0gMV0ua3ZhX2N1cnAKKyNkZWZpbmUgYmZhX21lbWluZm9fZG1hX3ZpcnQoX20pCVwKKwkoX20pLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9ETUEgLSAxXS5rdmFfY3VycAorI2RlZmluZSBiZmFfbWVtaW5mb19kbWFfcGh5cyhfbSkJXAorCShfbSktPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLmRtYV9jdXJwCisKKy8qKgorICogR2VuZXJpYyBTY2F0dGVyIEdhdGhlciBFbGVtZW50IHVzZWQgYnkgZHJpdmVyCisgKi8KK3N0cnVjdCBiZmFfc2dlX3MgeworCXUzMiAgICAgICAgc2dfbGVuOworCXZvaWQgICAgICAgICAgICpzZ19hZGRyOworfTsKKworI2RlZmluZSBiZmFfc2dlX3RvX2JlKF9fc2dlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSgodTMyICopKF9fc2dlKSlbMF0gPSBiZmFfb3NfaHRvbmwoKCh1MzIgKikoX19zZ2UpKVswXSk7ICAgICAgXAorCSgodTMyICopKF9fc2dlKSlbMV0gPSBiZmFfb3NfaHRvbmwoKCh1MzIgKikoX19zZ2UpKVsxXSk7ICAgICAgXAorCSgodTMyICopKF9fc2dlKSlbMl0gPSBiZmFfb3NfaHRvbmwoKCh1MzIgKikoX19zZ2UpKVsyXSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworCisvKgorICogYmZhIHN0YXRzIGludGVyZmFjZXMKKyAqLworI2RlZmluZSBiZmFfc3RhdHMoX21vZCwgX3N0YXRzKQkoX21vZCktPnN0YXRzLl9zdGF0cyArKworCisjZGVmaW5lIGJmYV9pb2NfZ2V0X3N0YXRzKF9fYmZhLCBfX2lvY19zdGF0cykJXAorCWJmYV9pb2NfZmV0Y2hfc3RhdHMoJihfX2JmYSktPmlvYywgX19pb2Nfc3RhdHMpCisjZGVmaW5lIGJmYV9pb2NfY2xlYXJfc3RhdHMoX19iZmEpCVwKKwliZmFfaW9jX2Nscl9zdGF0cygmKF9fYmZhKS0+aW9jKQorCisvKgorICogYmZhIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfZ2V0X3BjaWlkcyhzdHJ1Y3QgYmZhX3BjaWlkX3MgKipwY2lpZHMsIGludCAqbnBjaWlkcyk7Cit2b2lkIGJmYV9jZmdfZ2V0X2RlZmF1bHQoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnKTsKK3ZvaWQgYmZhX2NmZ19nZXRfbWluKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZyk7Cit2b2lkIGJmYV9jZmdfZ2V0X21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8pOwordm9pZCBiZmFfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7Cit2b2lkIGJmYV9pbml0X3RyYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCk7Cit2b2lkIGJmYV9pbml0X2xvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCk7Cit2b2lkIGJmYV9pbml0X2FlbihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9hZW5fcyAqYWVuKTsKK3ZvaWQgYmZhX2luaXRfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOwordm9pZCBiZmFfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2luaXQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9hdHRhY2hfZmNzKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2NiX2luaXQodm9pZCAqYmZhZCwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit2b2lkIGJmYV9jYl9zdG9wKHZvaWQgKmJmYWQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordm9pZCBiZmFfY2JfdXBkYXRlcSh2b2lkICpiZmFkLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworYmZhX2Jvb2xlYW5fdCBiZmFfaW50eChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pc3JfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lzcl9kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICptc2l4X3ZlY3NfYm1hcCwKKwkJCXUzMiAqbnVtX3ZlY3MsIHUzMiAqbWF4X3ZlY19iaXQpOworI2RlZmluZSBiZmFfbXNpeChfX2JmYSwgX192ZWMpIChfX2JmYSktPm1zaXguaGFuZGxlcltfX3ZlY10oX19iZmEsIF9fdmVjKQorCit2b2lkIGJmYV9jb21wX2RlcShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKTsKK3ZvaWQgYmZhX2NvbXBfcHJvY2VzcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKTsKK3ZvaWQgYmZhX2NvbXBfZnJlZShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKTsKKwordHlwZWRlZiB2b2lkICgqYmZhX2NiX2lvY190KSAodm9pZCAqY2JhcmcsIGVudW0gYmZhX3N0YXR1cyBzdGF0dXMpOwordm9pZCBiZmFfaW9jZmNfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jZmNfYXR0cl9zICphdHRyKTsKK2JmYV9zdGF0dXNfdCBiZmFfaW9jZmNfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9pb2NmY19zdGF0c19zICpzdGF0cywKKwkJCWJmYV9jYl9pb2NfdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgYmZhX2lvY2ZjX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJYmZhX2NiX2lvY190IGNiZm4sIHZvaWQgKmNiYXJnKTsKK3ZvaWQgYmZhX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgKmlvY19hdHRyKTsKKwordm9pZCBiZmFfYWRhcHRlcl9nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpOwordTY0IGJmYV9hZGFwdGVyX2dldF9pZChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKK2JmYV9zdGF0dXNfdCBiZmFfaW9jZmNfaXNyYXR0cl9zZXQoc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zICphdHRyKTsKKwordm9pZCBiZmFfaW9jZmNfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jX2F1dG9fcmVjb3ZlcihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3Zlcik7Cit2b2lkIGJmYV9jYl9pb2NfZGlzYWJsZSh2b2lkICpiZmFkKTsKK3ZvaWQgYmZhX3RpbWVyX3RpY2soc3RydWN0IGJmYV9zICpiZmEpOworI2RlZmluZSBiZmFfdGltZXJfc3RhcnQoX2JmYSwgX3RpbWVyLCBfdGltZXJjYiwgX2FyZywgX3RpbWVvdXQpCVwKKwliZmFfdGltZXJfYmVnaW4oJihfYmZhKS0+dGltZXJfbW9kLCBfdGltZXIsIF90aW1lcmNiLCBfYXJnLCBfdGltZW91dCkKKworLyoKKyAqIEJGQSBkZWJ1ZyBBUEkgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKTsKK2JmYV9zdGF0dXNfdCBiZmFfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbik7CisKKyNpbmNsdWRlICJiZmFfcHJpdi5oIgorCisjZW5kaWYgLyogX19CRkFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3ODk3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwaW0uaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDUElNX0hfXworI2RlZmluZSBfX0JGQV9GQ1BJTV9IX18KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2ZjcGltLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19mY3BpbS5oPgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYV9pdG5pbV9zOworc3RydWN0IGJmYV9pb2ltX3M7CitzdHJ1Y3QgYmZhX3Rza2ltX3M7CitzdHJ1Y3QgYmZhZF9pb2ltX3M7CitzdHJ1Y3QgYmZhZF90c2tpbV9zOworCisvKgorICogYmZhIGZjcGltIG1vZHVsZSBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQJCWJmYV9mY3BpbV9wYXRoX3Rvdl9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBwYXRoX3Rvdik7Cit1MTYJYmZhX2ZjcGltX3BhdGhfdG92X2dldChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkCQliZmFfZmNwaW1fcWRlcHRoX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHFfZGVwdGgpOwordTE2CWJmYV9mY3BpbV9xZGVwdGhfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNwaW1fZ2V0X21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9mY3BpbV9zdGF0c19zICptb2RzdGF0cyk7CitiZmFfc3RhdHVzX3QgYmZhX2ZjcGltX2Nscl9tb2RzdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKKy8qCisgKiBiZmEgaXRuaW0gQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbV9jcmVhdGUoc3RydWN0IGJmYV9zICpiZmEsCisJCQkJCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIHZvaWQgKml0bmltKTsKK3ZvaWQJCWJmYV9pdG5pbV9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7Cit2b2lkCQliZmFfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJIGJmYV9ib29sZWFuX3Qgc2VxX3JlYyk7Cit2b2lkCQliZmFfaXRuaW1fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3ZvaWQJCWJmYV9pdG5pbV9nZXRfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MgKnN0YXRzKTsKK3ZvaWQJCWJmYV9pdG5pbV9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKKworCisvKioKKyAqIAkJQkZBIGNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9pdG5pbV9vbmxpbmUoKS4KKyAqCisgKiBAcGFyYW1baW5dCQlpdG5pbQkJRkNTIG9yIGRyaXZlciBpdG5pbSBpbnN0YW5jZQorICoKKyAqIHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaXRuaW1fb25saW5lKHZvaWQgKml0bmltKTsKKworLyoqCisgKiAJCUJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb2ZmbGluZSgpLgorICoKKyAqIEBwYXJhbVtpbl0JCWl0bmltCQlGQ1Mgb3IgZHJpdmVyIGl0bmltIGluc3RhbmNlCisgKgorICogcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pdG5pbV9vZmZsaW5lKHZvaWQgKml0bmltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaXRuaW1fdG92X2JlZ2luKHZvaWQgKml0bmltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaXRuaW1fdG92KHZvaWQgKml0bmltKTsKKworLyoqCisgKiAJCUJGQSBub3RpZmljYXRpb24gdG8gRkNTL2RyaXZlciBmb3Igc2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5LgorICoKKyAqIEF0bGVhc3Qgb25lIEkvTyByZXF1ZXN0IGhhcyB0aW1lZG91dCBhbmQgdGFyZ2V0IGlzIHVucmVzcG9uc2l2ZSB0bworICogcmVwZWF0ZWQgYWJvcnQgcmVxdWVzdHMuIFNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeSBzaG91bGQgYmUgaW5pdGlhdGVkCisgKiBieSBzdGFydGluZyBpbXBsaWNpdCBsb2dvdXQgYW5kIHJlY292ZXJ5IHByb2NlZHVyZXMuCisgKgorICogQHBhcmFtW2luXQkJaXRuaW0JCUZDUyBvciBkcml2ZXIgaXRuaW0gaW5zdGFuY2UKKyAqCisgKiByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2l0bmltX3NsZXIodm9pZCAqaXRuaW0pOworCisvKgorICogYmZhIGlvaW0gQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX2lvaW1fcwkqYmZhX2lvaW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsCisJCQkJCXN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLAorCQkJCQlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQl1MTYgbnNnbGVzKTsKKwordm9pZAkJYmZhX2lvaW1fZnJlZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkCQliZmFfaW9pbV9zdGFydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkCQliZmFfaW9pbV9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkIAkJYmZhX2lvaW1fZGVsYXllZF9jb21wKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICAgIGJmYV9ib29sZWFuX3QgaW90b3YpOworCisKKy8qKgorICogCQlJL08gY29tcGxldGlvbiBub3RpZmljYXRpb24uCisgKgorICogQHBhcmFtW2luXQkJZGlvCQkJZHJpdmVyIElPIHN0cnVjdHVyZQorICogQHBhcmFtW2luXQkJaW9fc3RhdHVzCQlJTyBjb21wbGV0aW9uIHN0YXR1cworICogQHBhcmFtW2luXQkJc2NzaV9zdGF0dXMJCVNDU0kgc3RhdHVzIHJldHVybmVkIGJ5IHRhcmdldAorICogQHBhcmFtW2luXQkJc25zX2xlbgkJCVNDU0kgc2Vuc2UgbGVuZ3RoLCAwIGlmIG5vbmUKKyAqIEBwYXJhbVtpbl0JCXNuc19pbmZvCQlTQ1NJIHNlbnNlIGRhdGEsIGlmIGFueQorICogQHBhcmFtW2luXQkJcmVzaWR1ZQkJCVJlc2lkdWFsIGxlbmd0aAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2lvaW1fZG9uZSh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJCQkgIGVudW0gYmZpX2lvaW1fc3RhdHVzIGlvX3N0YXR1cywKKwkJCQkgIHU4IHNjc2lfc3RhdHVzLCBpbnQgc25zX2xlbiwKKwkJCQkgIHU4ICpzbnNfaW5mbywgczMyIHJlc2lkdWUpOworCisvKioKKyAqIAkJSS9PIGdvb2QgY29tcGxldGlvbiBub3RpZmljYXRpb24uCisgKgorICogQHBhcmFtW2luXQkJZGlvCQkJZHJpdmVyIElPIHN0cnVjdHVyZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKTsKKworLyoqCisgKiAJCUkvTyBhYm9ydCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbgorICoKKyAqIEBwYXJhbVtpbl0JCWRpbwkJCWRyaXZlciBJTyB0aGF0IHdhcyBhYm9ydGVkCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaW9pbV9hYm9ydCh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbyk7Cit2b2lkCQliZmFfY2JfaW9pbV9yZXNmcmVlKHZvaWQgKmhjYl9iZmFkKTsKKwordm9pZCAJCQliZmFfY2JfaW9pbV9yZXNmcmVlKHZvaWQgKmhjYl9iZmFkKTsKKworLyoKKyAqIGJmYSB0c2tpbSBBUEkgZnVuY3Rpb25zCisgKi8KK3N0cnVjdCBiZmFfdHNraW1fcwkqYmZhX3Rza2ltX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJCQlzdHJ1Y3QgYmZhZF90c2tpbV9zICpkdHNrKTsKK3ZvaWQJCWJmYV90c2tpbV9mcmVlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOwordm9pZAkJYmZhX3Rza2ltX3N0YXJ0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgbHVuX3QgbHVuLAorCQkJCWVudW0gZmNwX3RtX2NtbmQgdG0sIHU4IHRfc2Vjcyk7Cit2b2lkCQliZmFfY2JfdHNraW1fZG9uZSh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF90c2tpbV9zICpkdHNrLAorCQkJCSAgZW51bSBiZmlfdHNraW1fc3RhdHVzIHRza19zdGF0dXMpOworCisjZW5kaWYgLyogX19CRkFfRkNQSU1fSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwdG0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjVmZmUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9mY3B0bS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1BUTV9IX18KKyNkZWZpbmUgX19CRkFfRkNQVE1fSF9fCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9mY3B0bS5oPgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYV90aW5fczsKK3N0cnVjdCBiZmFfaW90bV9zOworc3RydWN0IGJmYV90c2t0bV9zOworCisvKgorICogYmZhIGZjcHRtIG1vZHVsZSBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX2ZjcHRtX3BhdGhfdG92X3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHBhdGhfdG92KTsKK3UxNiBiZmFfZmNwdG1fcGF0aF90b3ZfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2ZjcHRtX3FkZXB0aF9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBxX2RlcHRoKTsKK3UxNiBiZmFfZmNwdG1fcWRlcHRoX2dldChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKKy8qCisgKiBiZmEgdGluIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfdGluX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3Rpbl9zICp0aW4sIHN0cnVjdCBiZmFfdGluX3N0YXRzX3MgKnN0YXRzKTsKK3ZvaWQgYmZhX3Rpbl9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3Rpbl9zICp0aW4pOworCisjZW5kaWYgLyogX19CRkFfRkNQVE1fSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfc3ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3N2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODBiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3N2Yy5oCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1NWQ19IX18KKyNkZWZpbmUgX19CRkFfU1ZDX0hfXworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYV9mY3hwX3M7CisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19xb3MuaD4KKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxiZmEuaD4KKworLyoqCisgKiAJCUJGQSBycG9ydCBpbmZvcm1hdGlvbi4KKyAqLworc3RydWN0IGJmYV9ycG9ydF9pbmZvX3MgeworCXUxNiAgICAgICAgbWF4X2ZybXN6OwkvKiAgbWF4IHJjdiBwZHUgc2l6ZSAgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwaWQgOiAyNCwJLyogIHJlbW90ZSBwb3J0IElEICAgICAgICAgICAgICAgICAqLworCQkJbHBfdGFnIDogODsKKwl1MzIgICAgICAgIGxvY2FsX3BpZCA6IDI0LAkvKiAgbG9jYWwgcG9ydCBJRAkJICAgICovCisJCQljaXNjIDogODsJLyogIENJUk8gc3VwcG9ydGVkCQkgICAgKi8KKwl1OCAgICAgICAgIGZjX2NsYXNzOwkvKiAgc3VwcG9ydGVkIEZDIGNsYXNzZXMuIGVudW0gZmNfY29zICovCisJdTggICAgICAgICB2Zl9lbjsJCS8qICB2aXJ0dWFsIGZhYnJpYyBlbmFibGUgICAgICAgICAgKi8KKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZpcnR1YWwgZmFicmljIElEICAgICAgICAgICAgICAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkOwkvKiAgUnBvcnQncyBjdXJyZW50IHNwZWVkCSAgICAqLworfTsKKworLyoqCisgKiBCRkEgcnBvcnQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV9ycG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBxZTsJICAvKiAgcXVldWUgZWxlbWVudCAqLworCWJmYV9zbV90CSAgICAgIHNtOyAJICAvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfcyAgICAgICAgICAqYmZhOwkgIC8qICBiYWNrcG9pbnRlciB0byBCRkEgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgKnJwb3J0X2RydjsgLyogIGZjcy9kcml2ZXIgcnBvcnQgb2JqZWN0ICovCisJdTE2ICAgICAgICAgICAgICBmd19oYW5kbGU7IC8qICBmaXJtd2FyZSBycG9ydCBoYW5kbGUgKi8KKwl1MTYgICAgICAgICAgICAgIHJwb3J0X3RhZzsgLyogIEJGQSBycG9ydCB0YWcgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X2luZm9fcyBycG9ydF9pbmZvOyAvKiAgcnBvcnQgaW5mbyBmcm9tICpmY3MvZHJpdmVyICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcyByZXFxX3dhaXQ7IC8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAgaGNiX3FlOwkgLyogIEJGQSBjYWxsYmFjayBxZWxlbSAqLworCXN0cnVjdCBiZmFfcnBvcnRfaGFsX3N0YXRzX3Mgc3RhdHM7IC8qICBCRkEgcnBvcnQgc3RhdGlzdGljcyAgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgIHFvc19hdHRyOworCXVuaW9uIGEgeworCQliZmFfc3RhdHVzX3QgICAgc3RhdHVzOwkgLyogIGYvdyBzdGF0dXMgKi8KKwkJdm9pZCAgICAgICAgICAgICpmd19tc2c7IC8qICBRb1Mgc2NuIGV2ZW50ICovCisJfSBldmVudF9hcmc7Cit9OworI2RlZmluZSBCRkFfUlBPUlRfRkNfQ09TKF9ycG9ydCkJKChfcnBvcnQpLT5ycG9ydF9pbmZvLmZjX2NsYXNzKQorCisvKioKKyAqIFNlbmQgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2NiX2ZjeHBfc2VuZF90KSAodm9pZCAqYmZhZF9mY3hwLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCXZvaWQgKmNiYXJnLCBlbnVtIGJmYV9zdGF0dXMgcmVxX3N0YXR1cywKKwkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCisvKioKKyAqIEJGQSBmY3hwIGFsbG9jYXRpb24gKGFzeW5jaHJvbm91cykKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2ZjeHBfYWxsb2NfY2Jmbl90KSAodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKKworc3RydWN0IGJmYV9mY3hwX3dxZV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgcWU7CisJYmZhX2ZjeHBfYWxsb2NfY2Jmbl90ICBhbGxvY19jYmZuOworCXZvaWQgICAgICAgICAgICphbGxvY19jYmFyZzsKK307CisKK3R5cGVkZWYgdTY0ICgqYmZhX2ZjeHBfZ2V0X3NnYWRkcl90KSAodm9pZCAqYmZhZF9mY3hwLCBpbnQgc2dlaWQpOwordHlwZWRlZiB1MzIgKCpiZmFfZmN4cF9nZXRfc2dsZW5fdCkgKHZvaWQgKmJmYWRfZmN4cCwgaW50IHNnZWlkKTsKKworI2RlZmluZSBCRkFfVUZfQlVGU1oJKDIgKiAxMDI0ICsgMjU2KQorCisvKioKKyAqIEB0b2RvIHByaXZhdGUKKyAqLworc3RydWN0IGJmYV91Zl9idWZfcyB7CisJdTggICAgICAgICBkW0JGQV9VRl9CVUZTWl07Cit9OworCisKK3N0cnVjdCBiZmFfdWZfcyB7CisJc3RydWN0IGxpc3RfaGVhZAlxZTsJCS8qICBxdWV1ZSBlbGVtZW50CSAgKi8KKwlzdHJ1Y3QgYmZhX3MJKmJmYTsJCS8qICBiZmEgaW5zdGFuY2UJICAqLworCXUxNiAgICAgICAgdWZfdGFnOwkJLyogIGlkZW50aWZ5aW5nIHRhZyBmL3cgbWVzc2FnZXMgKi8KKwl1MTYgICAgICAgIHZmX2lkOworCXUxNiAgICAgICAgc3JjX3Jwb3J0X2hhbmRsZTsKKwl1MTYgICAgICAgIHJzdmQ7CisJdTggICAgICAgIAkqZGF0YV9wdHI7CisJdTE2ICAgICAgICBkYXRhX2xlbjsJLyogIGFjdHVhbCByZWNlaXZlIGxlbmd0aAkgICovCisJdTE2ICAgICAgICBwYl9sZW47CQkvKiAgcG9zdGVkIGJ1ZmZlciBsZW5ndGgJICAqLworCXZvaWQgICAgICAgICAgIAkqYnVmX2t2YTsJLyogIGJ1ZmZlciB2aXJ0dWFsIGFkZHJlc3MJICAqLworCXU2NCAgICAgICAgYnVmX3BhOwkJLyogIGJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzCSAgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAgaGNiX3FlOwkvKiAgY29tcDogQkZBIGNvbXAgcWVsZW0JICAqLworCXN0cnVjdCBiZmFfc2dlX3MgICAJc2dlc1tCRklfU0dFX0lOTElORV9NQVhdOworfTsKKwordHlwZWRlZiB2b2lkICgqYmZhX2NiX3Bwb3J0X3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CisKKy8qKgorICogYmZhIGxwb3J0IGxvZ2luL2xvZ291dCBzZXJ2aWNlIGludGVyZmFjZQorICovCitzdHJ1Y3QgYmZhX2xwc19zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXFlOwkJLyogIHF1ZXVlIGVsZW1lbnQgKi8KKwlzdHJ1Y3QgYmZhX3MJKmJmYTsJCS8qICBwYXJlbnQgYmZhIGluc3RhbmNlCSovCisJYmZhX3NtX3QJc207CQkvKiAgZmluaXRlIHN0YXRlIG1hY2hpbmUJKi8KKwl1OAkJbHBfdGFnOwkJLyogIGxwb3J0IHRhZwkJCSovCisJdTgJCXJlcXE7CQkvKiAgbHBvcnQgcmVxdWVzdCBxdWV1ZQkqLworCXU4CQlhbHBhOwkJLyogIEFMUEEgZm9yIGxvb3AgdG9wb2xvZ2llcwkqLworCXUzMglscF9waWQ7CQkvKiAgbHBvcnQgcG9ydCBJRAkJKi8KKwliZmFfYm9vbGVhbl90CWZkaXNjOwkJLyogIHNlbmQgRkRJU0MgaW5zdGVhZCBvZiBGTE9HSSovCisJYmZhX2Jvb2xlYW5fdAlhdXRoX2VuOwkvKiAgZW5hYmxlIGF1dGhlbnRpY2F0aW9uCSovCisJYmZhX2Jvb2xlYW5fdAlhdXRoX3JlcTsJLyogIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkCSovCisJYmZhX2Jvb2xlYW5fdAlucGl2X2VuOwkvKiAgTlBJViBpcyBhbGxvd2VkIGJ5IHBlZXIJKi8KKwliZmFfYm9vbGVhbl90CWZwb3J0OwkJLyogIGF0dGFjaGVkIHBlZXIgaXMgRl9QT1JUCSovCisJYmZhX2Jvb2xlYW5fdAlicmNkX3N3aXRjaDsvKiAgYXR0YWNoZWQgcGVlciBpcyBicmNkIHN3aXRjaAkqLworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CQkvKiAgbG9naW4gc3RhdHVzCQkqLworCXUxNglwZHVzejsJCS8qICBtYXggcmVjZWl2ZSBQRFUgc2l6ZSAJKi8KKwl1MTYJcHJfYmJjcmVkOwkvKiAgQkJfQ1JFRElUIGZyb20gcGVlciAJKi8KKwl1OAkJbHNyanRfcnNuOwkvKiAgTFNSSlQgcmVhc29uCQkqLworCXU4CQlsc3JqdF9leHBsOwkvKiAgTFNSSlQgZXhwbGFuYXRpb24JCSovCisJd3duX3QJCXB3d247CQkvKiAgcG9ydCB3d24gb2YgbHBvcnQJCSovCisJd3duX3QJCW53d247CQkvKiAgbm9kZSB3d24gb2YgbHBvcnQJCSovCisJd3duX3QJCXByX3B3d247CS8qICBwb3J0IHd3biBvZiBscG9ydCBwZWVyCSovCisJd3duX3QJCXByX253d247CS8qICBub2RlIHd3biBvZiBscG9ydCBwZWVyCSovCisJbWFjX3QJCWxwX21hYzsJCS8qICBmcG1hL3NwbWEgTUFDIGZvciBscG9ydAkqLworCW1hY190CQlmY2ZfbWFjOwkvKiAgRkNGIE1BQyBvZiBscG9ydAkJKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXdxZTsJLyogIHJlcXVlc3Qgd2FpdCBxdWV1ZSBlbGVtZW50CSovCisJdm9pZAkJKnVhcmc7CQkvKiAgdXNlciBjYWxsYmFjayBhcmcJCSovCisJc3RydWN0IGJmYV9jYl9xZV9zIGhjYl9xZTsJLyogIGNvbXA6IGNhbGxiYWNrIHFlbGVtCSovCisJc3RydWN0IGJmaV9scHNfbG9naW5fcnNwX3MgKmxvZ2lucnNwOworCWJmYV9lcHJvdG9fc3RhdHVzX3QJZXh0X3N0YXR1czsKK307CisKKy8qCisgKiBiZmEgcHBvcnQgQVBJIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jZmdfc3BlZWQoc3RydWN0IGJmYV9zICpiZmEsCisJCQllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCk7CitlbnVtIGJmYV9wcG9ydF9zcGVlZCBiZmFfcHBvcnRfZ2V0X3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2ZnX3RvcG9sb2d5KHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgdG9wbyk7CitlbnVtIGJmYV9wcG9ydF90b3BvbG9neSBiZmFfcHBvcnRfZ2V0X3RvcG9sb2d5KHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2ZnX2hhcmRhbHBhKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBhbHBhKTsKK2JmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X2dldF9oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggKmFscGEpOwordTggYmZhX3Bwb3J0X2dldF9teWFscGEoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jbHJfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jZmdfbWF4ZnJzaXplKHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgbWF4c2l6ZSk7Cit1MTYgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUoc3RydWN0IGJmYV9zICpiZmEpOwordTMyIGJmYV9wcG9ydF9teXBpZChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit1OCBiZmFfcHBvcnRfZ2V0X3J4X2JiY3JlZGl0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfdHJ1bmtfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBiaXRtYXApOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF90cnVua19kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X3RydW5rX3F1ZXJ5KHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKmJpdG1hcCk7Cit2b2lkIGJmYV9wcG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgKmF0dHIpOword3duX3QgYmZhX3Bwb3J0X2dldF93d24oc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgbm9kZSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cywKKwkJCWJmYV9jYl9wcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wcG9ydF90IGNiZm4sCisJCQl2b2lkICpjYmFyZyk7Cit2b2lkIGJmYV9wcG9ydF9ldmVudF9yZWdpc3RlcihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXZvaWQgKCpldmVudF9jYmZuKSAodm9pZCAqY2JhcmcsCisJCQliZmFfcHBvcnRfZXZlbnRfdCBldmVudCksIHZvaWQgKmV2ZW50X2NiYXJnKTsKK2JmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX3Bwb3J0X2NmZ19xb3Moc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgb25fb2ZmKTsKK3ZvaWQgYmZhX3Bwb3J0X2NmZ19yYXRlbGltKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG9uX29mZik7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NmZ19yYXRlbGltX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpOworZW51bSBiZmFfcHBvcnRfc3BlZWQgYmZhX3Bwb3J0X2dldF9yYXRlbGltX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwordm9pZCBiZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgdHhfYmJjcmVkaXQpOwordm9pZCBiZmFfcHBvcnRfYnVzeShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBzdGF0dXMpOwordm9pZCBiZmFfcHBvcnRfYmVhY29uKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IGJlYWNvbiwKKwkJCWJmYV9ib29sZWFuX3QgbGlua19lMmVfYmVhY29uKTsKK3ZvaWQgYmZhX2NiX3Bwb3J0X2V2ZW50KHZvaWQgKmNiYXJnLCBiZmFfcHBvcnRfZXZlbnRfdCBldmVudCk7Cit2b2lkIGJmYV9wcG9ydF9xb3NfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcW9zX2F0dHJfcyAqcW9zX2F0dHIpOwordm9pZCBiZmFfcHBvcnRfcW9zX2dldF92Y19hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zICpxb3NfdmNfYXR0cik7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2dldF9xb3Nfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsCisJCQl1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCQliZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NsZWFyX3Fvc19zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2JmbiwKKwkJCXZvaWQgKmNiYXJnKTsKK2JmYV9ib29sZWFuX3QgICAgIGJmYV9wcG9ydF9pc19yYXRlbGltKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9ib29sZWFuX3QJYmZhX3Bwb3J0X2lzX2xpbmt1cChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKKy8qCisgKiBiZmEgcnBvcnQgQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydF9jcmVhdGUoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnJwb3J0X2Rydik7Cit2b2lkIGJmYV9ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfaW5mb19zICpycG9ydF9pbmZvKTsKK3ZvaWQgYmZhX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9ycG9ydF9zcGVlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCk7Cit2b2lkIGJmYV9ycG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfaGFsX3N0YXRzX3MgKnN0YXRzKTsKK3ZvaWQgYmZhX3Jwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfY2JfcnBvcnRfb25saW5lKHZvaWQgKnJwb3J0KTsKK3ZvaWQgYmZhX2NiX3Jwb3J0X29mZmxpbmUodm9pZCAqcnBvcnQpOwordm9pZCBiZmFfY2JfcnBvcnRfcW9zX3Njbl9mbG93aWQodm9pZCAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyLAorCQkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cik7Cit2b2lkIGJmYV9jYl9ycG9ydF9xb3Nfc2NuX3ByaW8odm9pZCAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyLAorCQkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cik7Cit2b2lkIGJmYV9ycG9ydF9nZXRfcW9zX2F0dHIoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyAqcW9zX2F0dHIpOworCisvKgorICogYmZhIGZjeHAgQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX2ZjeHBfcyAqYmZhX2ZjeHBfYWxsb2Modm9pZCAqYmZhZF9mY3hwLCBzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCWludCBucmVxX3NnbGVzLCBpbnQgbnJzcF9zZ2xlcywKKwkJCWJmYV9mY3hwX2dldF9zZ2FkZHJfdCBnZXRfcmVxX3NnYSwKKwkJCWJmYV9mY3hwX2dldF9zZ2xlbl90IGdldF9yZXFfc2dsZW4sCisJCQliZmFfZmN4cF9nZXRfc2dhZGRyX3QgZ2V0X3JzcF9zZ2EsCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCBnZXRfcnNwX3NnbGVuKTsKK3ZvaWQgYmZhX2ZjeHBfYWxsb2Nfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUsCisJCQliZmFfZmN4cF9hbGxvY19jYmZuX3QgYWxsb2NfY2Jmbiwgdm9pZCAqY2JhcmcpOwordm9pZCBiZmFfZmN4cF93YWxsb2NfY2FuY2VsKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUpOwordm9pZCBiZmFfZmN4cF9kaXNjYXJkKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKKwordm9pZCAqYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCk7Cit2b2lkICpiZmFfZmN4cF9nZXRfcnNwYnVmKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKKwordm9pZCBiZmFfZmN4cF9mcmVlKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKKwordm9pZCBiZmFfZmN4cF9zZW5kKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgdTE2IHZmX2lkLCB1OCBscF90YWcsCisJCQliZmFfYm9vbGVhbl90IGN0cywgZW51bSBmY19jb3MgY29zLAorCQkJdTMyIHJlcWxlbiwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCWJmYV9jYl9mY3hwX3NlbmRfdCBjYmZuLAorCQkJdm9pZCAqY2JhcmcsCisJCQl1MzIgcnNwX21heGxlbiwgdTggcnNwX3RpbWVvdXQpOworYmZhX3N0YXR1c190IGJmYV9mY3hwX2Fib3J0KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKK3UzMiAgICAgICAgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZnN6KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKK3UzMgliZmFfZmN4cF9nZXRfbWF4cnNwKHN0cnVjdCBiZmFfcyAqYmZhKTsKKworc3RhdGljIGlubGluZSB2b2lkICoKK2JmYV91Zl9nZXRfZnJtYnVmKHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJcmV0dXJuIHVmLT5kYXRhX3B0cjsKK30KKworc3RhdGljIGlubGluZSAgIHUxNgorYmZhX3VmX2dldF9mcm1sZW4oc3RydWN0IGJmYV91Zl9zICp1ZikKK3sKKwlyZXR1cm4gdWYtPmRhdGFfbGVuOworfQorCisvKioKKyAqICAgICAgQ2FsbGJhY2sgcHJvdG90eXBlIGZvciB1bnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsZXIuCisgKgorICogQHBhcmFtW2luXSAgICAgICAgICAgY2JhcmcgICAgICAgICAgIGNhbGxiYWNrIGFyZyBmb3IgcmVjZWl2ZSBoYW5kbGVyCisgKiBAcGFyYW1baW5dICAgICAgICAgICB1ZiAgICAgICAgICAgICAgdW5zb2xpY2l0ZWQgZnJhbWUgZGVzY3JpcHRvcgorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfY2JfdWZfcmVjdl90KSAodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmFfdWZfcyAqdWYpOworCisvKgorICogYmZhIHVmIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfdWZfcmVjdl9yZWdpc3RlcihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3VmX3JlY3ZfdCB1ZnJlY3YsCisJCQl2b2lkICpjYmFyZyk7Cit2b2lkIGJmYV91Zl9mcmVlKHN0cnVjdCBiZmFfdWZfcyAqdWYpOworCisvKioKKyAqIGJmYSBscG9ydCBzZXJ2aWNlIGFwaQorICovCisKK3N0cnVjdCBiZmFfbHBzX3MgKmJmYV9scHNfYWxsb2Moc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfbHBzX2RlbGV0ZShzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordm9pZCBiZmFfbHBzX2Rpc2NhcmQoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3ZvaWQgYmZhX2xwc19mbG9naShzdHJ1Y3QgYmZhX2xwc19zICpscHMsIHZvaWQgKnVhcmcsIHU4IGFscGEsIHUxNiBwZHVzeiwKKwkJICAgd3duX3QgcHd3biwgd3duX3Qgbnd3biwgYmZhX2Jvb2xlYW5fdCBhdXRoX2VuKTsKK3ZvaWQgYmZhX2xwc19mZGlzYyhzdHJ1Y3QgYmZhX2xwc19zICpscHMsIHZvaWQgKnVhcmcsIHUxNiBwZHVzeiwgd3duX3QgcHd3biwKKwkJICAgd3duX3Qgbnd3bik7Cit2b2lkIGJmYV9scHNfZmxvZ28oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3ZvaWQgYmZhX2xwc19mZGlzY2xvZ28oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3U4IGJmYV9scHNfZ2V0X3RhZyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworYmZhX2Jvb2xlYW5fdCBiZmFfbHBzX2lzX25waXZfZW4oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK2JmYV9ib29sZWFuX3QgYmZhX2xwc19pc19mcG9ydChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworYmZhX2Jvb2xlYW5fdCBiZmFfbHBzX2lzX2JyY2RfZmFicmljKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitiZmFfYm9vbGVhbl90IGJmYV9scHNfaXNfYXV0aHJlcShzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworYmZhX2Vwcm90b19zdGF0dXNfdCBiZmFfbHBzX2dldF9leHRzdGF0dXMoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3UzMiBiZmFfbHBzX2dldF9waWQoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3U4IGJmYV9scHNfZ2V0X3RhZ19mcm9tX3BpZChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHBpZCk7Cit1MTYgYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOword3duX3QgYmZhX2xwc19nZXRfcGVlcl9wd3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit3d25fdCBiZmFfbHBzX2dldF9wZWVyX253d24oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3U4IGJmYV9scHNfZ2V0X2xzcmp0X3JzbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordTggYmZhX2xwc19nZXRfbHNyanRfZXhwbChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordm9pZCBiZmFfY2JfbHBzX2Zsb2dpX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZywgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit2b2lkIGJmYV9jYl9scHNfZmxvZ29fY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnKTsKK3ZvaWQgYmZhX2NiX2xwc19mZGlzY19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordm9pZCBiZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcpOworCisjZW5kaWYgLyogX19CRkFfU1ZDX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3RpbWVyLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwNzEwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfdGltZXIuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1RJTUVSX0hfXworI2RlZmluZSBfX0JGQV9USU1FUl9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorCitzdHJ1Y3QgYmZhX3M7CisKK3R5cGVkZWYgdm9pZCAoKmJmYV90aW1lcl9jYmZuX3QpKHZvaWQgKik7CisKKy8qKgorICogQkZBIHRpbWVyIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfdGltZXJfcyB7CisJc3RydWN0IGxpc3RfaGVhZAlxZTsKKwliZmFfdGltZXJfY2Jmbl90IHRpbWVyY2I7CisJdm9pZCAgICAgICAgICAgICphcmc7CisJaW50ICAgICAgICAgICAgIHRpbWVvdXQ7CS8qKjwgaW4gbWlsbGlzZWNzLiAqLworfTsKKworLyoqCisgKiBUaW1lciBtb2R1bGUgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfdGltZXJfbW9kX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgdGltZXJfcTsKK307CisKKyNkZWZpbmUgQkZBX1RJTUVSX0ZSRVEgNTAwIC8qKjwgc3BlY2lmaWVkIGluIG1pbGxpc2VjcyAqLworCit2b2lkIGJmYV90aW1lcl9iZWF0KHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCk7Cit2b2lkIGJmYV90aW1lcl9pbml0KHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCk7Cit2b2lkIGJmYV90aW1lcl9iZWdpbihzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QsIHN0cnVjdCBiZmFfdGltZXJfcyAqdGltZXIsCisJCQliZmFfdGltZXJfY2Jmbl90IHRpbWVyY2IsIHZvaWQgKmFyZywKKwkJCXVuc2lnbmVkIGludCB0aW1lb3V0KTsKK3ZvaWQgYmZhX3RpbWVyX3N0b3Aoc3RydWN0IGJmYV90aW1lcl9zICp0aW1lcik7CisKKyNlbmRpZiAvKiBfX0JGQV9USU1FUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYWRmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaS5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfSF9fCisjZGVmaW5lIF9fQkZJX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisvKioKKyAqIE1zZyBoZWFkZXIgY29tbW9uIHRvIGFsbCBtc2dzCisgKi8KK3N0cnVjdCBiZmlfbWhkcl9zIHsKKwl1OCAgICAgICAgIG1zZ19jbGFzczsJLyogIEByZWYgYmZpX21jbGFzc190CSAgICAqLworCXU4ICAgICAgICAgbXNnX2lkOwkJLyogIG1zZyBvcGNvZGUgd2l0aCBpbiB0aGUgY2xhc3MgICAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4ICAgICAgICAgcnN2ZDsKKwkJCXU4ICAgICAgICAgbHB1X2lkOwkvKiAgbXNnIGRlc3RpbmF0aW9uCSAgICAqLworCQl9IGgyaTsKKwkJdTE2ICAgICAgICBpMmh0b2s7CS8qICB0b2tlbiBpbiBtc2dzIHRvIGhvc3QJICAgICovCisJfSBtdGFnOworfTsKKworI2RlZmluZSBiZmlfaDJpX3NldChfbWgsIF9tYywgX29wLCBfbHB1aWQpIGRvIHsJCVwKKwkoX21oKS5tc2dfY2xhc3MgCQk9IChfbWMpOyAgICAgIFwKKwkoX21oKS5tc2dfaWQJCQk9IChfb3ApOyAgICAgIFwKKwkoX21oKS5tdGFnLmgyaS5scHVfaWQJPSAoX2xwdWlkKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmaV9pMmhfc2V0KF9taCwgX21jLCBfb3AsIF9pMmh0b2spIGRvIHsJCVwKKwkoX21oKS5tc2dfY2xhc3MgCQk9IChfbWMpOyAgICAgIFwKKwkoX21oKS5tc2dfaWQJCQk9IChfb3ApOyAgICAgIFwKKwkoX21oKS5tdGFnLmkyaHRvawkJPSAoX2kyaHRvayk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIE1lc3NhZ2Ugb3Bjb2RlczogMC0xMjcgdG8gZmlybXdhcmUsIDEyOC0yNTUgdG8gaG9zdAorICovCisjZGVmaW5lIEJGSV9JMkhfT1BDT0RFX0JBU0UJMTI4CisjZGVmaW5lIEJGQV9JMkhNKF94KSAJCQkoKF94KSArIEJGSV9JMkhfT1BDT0RFX0JBU0UpCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTY2F0dGVyIEdhdGhlciBFbGVtZW50IGFuZCBQYWdlIGRlZmluaXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNkZWZpbmUgQkZJX1NHRV9JTkxJTkUJMQorI2RlZmluZSBCRklfU0dFX0lOTElORV9NQVgJKEJGSV9TR0VfSU5MSU5FICsgMSkKKworLyoqCisgKiBTRyBGbGFncworICovCitlbnVtIHsKKwlCRklfU0dFX0RBVEEJPSAwLAkvKiAgZGF0YSBhZGRyZXNzLCBub3QgbGFzdAkgICAgICovCisJQkZJX1NHRV9EQVRBX0NQTAk9IDEsCS8qICBkYXRhIGFkZHIsIGxhc3QgaW4gY3VycmVudCBwYWdlICovCisJQkZJX1NHRV9EQVRBX0xBU1QJPSAzLAkvKiAgZGF0YSBhZGRyZXNzLCBsYXN0CQkgICAgICovCisJQkZJX1NHRV9MSU5LCT0gMiwJLyogIGxpbmsgYWRkcmVzcwkJICAgICAqLworCUJGSV9TR0VfUEdETEVOCT0gMiwJLyogIGN1bXVsYXRpdmUgZGF0YSBsZW5ndGggZm9yIHBhZ2UgKi8KK307CisKKy8qKgorICogRE1BIGFkZHJlc3NlcworICovCit1bmlvbiBiZmlfYWRkcl91IHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAgIGFkZHJfbG87CisJCXUzMiAgICAgICAgYWRkcl9oaTsKKwl9IGEzMjsKK307CisKKy8qKgorICogU2NhdHRlciBHYXRoZXIgRWxlbWVudAorICovCitzdHJ1Y3QgYmZpX3NnZV9zIHsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgZmxhZ3MJOiAyLAorCQkJcnN2ZAk6IDIsCisJCQlzZ19sZW4JOiAyODsKKyNlbHNlCisJdTMyICAgICAgICBzZ19sZW4JOiAyOCwKKwkJCXJzdmQJOiAyLAorCQkJZmxhZ3MJOiAyOworI2VuZGlmCisJdW5pb24gYmZpX2FkZHJfdSBzZ2E7Cit9OworCisvKioKKyAqIFNjYXR0ZXIgR2F0aGVyIFBhZ2UKKyAqLworI2RlZmluZSBCRklfU0dQR19EQVRBX1NHRVMJCTcKKyNkZWZpbmUgQkZJX1NHUEdfU0dFU19NQVgJCShCRklfU0dQR19EQVRBX1NHRVMgKyAxKQorI2RlZmluZSBCRklfU0dQR19SU1ZEX1dEX0xFTgk4CitzdHJ1Y3QgYmZpX3NncGdfcyB7CisJc3RydWN0IGJmaV9zZ2VfcyBzZ2VzW0JGSV9TR1BHX1NHRVNfTUFYXTsKKwl1MzIJcnN2ZFtCRklfU0dQR19SU1ZEX1dEX0xFTl07Cit9OworCisvKgorICogTGFyZ2UgTWVzc2FnZSBzdHJ1Y3R1cmUgLSAxMjggQnl0ZXMgc2l6ZSBNc2dzCisgKi8KKyNkZWZpbmUgQkZJX0xNU0dfU1oJCTEyOAorI2RlZmluZSBCRklfTE1TR19QTF9XU1oJXAorCQkJKChCRklfTE1TR19TWiAtIHNpemVvZihzdHJ1Y3QgYmZpX21oZHJfcykpIC8gNCkKKworc3RydWN0IGJmaV9tc2dfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWhkcjsKKwl1MzIJcGxbQkZJX0xNU0dfUExfV1NaXTsKK307CisKKy8qKgorICogTWFpbGJveCBtZXNzYWdlIHN0cnVjdHVyZQorICovCisjZGVmaW5lIEJGSV9NQk1TR19TWgkJNworc3RydWN0IGJmaV9tYm1zZ19zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwltaDsKKwl1MzIJCXBsW0JGSV9NQk1TR19TWl07Cit9OworCisvKioKKyAqIE1lc3NhZ2UgQ2xhc3NlcworICovCitlbnVtIGJmaV9tY2xhc3MgeworCUJGSV9NQ19JT0MJCT0gMSwJLyogIElPIENvbnRyb2xsZXIgKElPQykJICAgICovCisJQkZJX01DX0RJQUcJCT0gMiwJLyogIERpYWdub3N0aWMgTXNncwkJICAgICovCisJQkZJX01DX0ZMQVNICQk9IDMsCS8qICBGbGFzaCBtZXNzYWdlIGNsYXNzCSAgICAqLworCUJGSV9NQ19DRUUJCT0gNCwKKwlCRklfTUNfRkNfUE9SVAkJPSA1LAkvKiAgRkMgcG9ydAkJICAgCSAgICAqLworCUJGSV9NQ19JT0NGQwkJPSA2LAkvKiAgRkMgLSBJTyBDb250cm9sbGVyIChJT0MpCSAgICAqLworCUJGSV9NQ19MTAkJPSA3LAkvKiAgTGluayBMYXllcgkJIAkgICAgKi8KKwlCRklfTUNfVUYJCT0gOCwJLyogIFVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUJICAgICovCisJQkZJX01DX0ZDWFAJCT0gOSwJLyogIEZDIFRyYW5zcG9ydAkJICAgICovCisJQkZJX01DX0xQUwkJPSAxMCwJLyogIGxwb3J0IGZjIGxvZ2luIHNlcnZpY2VzCSAgICAqLworCUJGSV9NQ19SUE9SVAkJPSAxMSwJLyogIFJlbW90ZSBwb3J0CQkgICAgKi8KKwlCRklfTUNfSVROSU0JCT0gMTIsCS8qICBJLVQgbmV4dXMgKEluaXRpYXRvciBtb2RlKQkgICAgKi8KKwlCRklfTUNfSU9JTV9SRUFECT0gMTMsCS8qICByZWFkIElPIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU1fV1JJVEUJPSAxNCwJLyogIHdyaXRlIElPIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU1fSU8JCT0gMTUsCS8qICBJTyAoSW5pdGlhdG9yIG1vZGUpCSAgICAqLworCUJGSV9NQ19JT0lNCQk9IDE2LAkvKiAgSU8gKEluaXRpYXRvciBtb2RlKQkgICAgKi8KKwlCRklfTUNfSU9JTV9JT0NPTQk9IDE3LAkvKiAgZ29vZCBJTyBjb21wbGV0aW9uCQkgICAgKi8KKwlCRklfTUNfVFNLSU0JCT0gMTgsCS8qICBJbml0aWF0b3IgVGFzayBtYW5hZ2VtZW50CSAgICAqLworCUJGSV9NQ19TQk9PVAkJPSAxOSwJLyogIFNBTiBib290IHNlcnZpY2VzCQkgICAgKi8KKwlCRklfTUNfSVBGQwkJPSAyMCwJLyogIElQIG92ZXIgRkMgTXNncwkJICAgICovCisJQkZJX01DX1BPUlQJCT0gMjEsCS8qICBQaHlzaWNhbCBwb3J0CQkgICAgKi8KKwlCRklfTUNfTUFYCQk9IDMyCit9OworCisjZGVmaW5lIEJGSV9JT0NfTUFYX0NRUwkJNAorI2RlZmluZSBCRklfSU9DX01BWF9DUVNfQVNJQwk4CisjZGVmaW5lIEJGSV9JT0NfTVNHTEVOX01BWAkzMgkvKiAzMiBieXRlcyAqLworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2Jvb3QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTU1YWZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfYm9vdC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qCisgKiBiZmlfYm9vdC5oCisgKi8KKworI2lmbmRlZiBfX0JGSV9CT09UX0hfXworI2RlZmluZSBfX0JGSV9CT09UX0hfXworCisjZGVmaW5lIEJGSV9CT09UX1RZUEVfT0ZGCQk4CisjZGVmaW5lIEJGSV9CT09UX1BBUkFNX09GRgkJMTIKKworI2RlZmluZSBCRklfQk9PVF9UWVBFX05PUk1BTCAJCTAJLyogcGFyYW0gaXMgZGV2aWNlIGlkICovCisjZGVmaW5lCUJGSV9CT09UX1RZUEVfRkxBU0gJCTEKKyNkZWZpbmUJQkZJX0JPT1RfVFlQRV9NRU1URVNUCQkyCisKKyNkZWZpbmUgQkZJX0JPT1RfTUVNVEVTVF9SRVNfQUREUiAgIDB4OTAwCisjZGVmaW5lIEJGSV9CT09UX01FTVRFU1RfUkVTX1NJRyAgICAweEEwQTFBMkEzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2JyZWcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NicmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiYjUyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NicmVnLmgKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIGJmaV9jYnJlZy5oIGNyb3NzYm93IGhvc3QgYmxvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAhISEgRG8gbm90IGVkaXQuIEF1dG8gZ2VuZXJhdGVkLiAhISEKKyAqLworCisjaWZuZGVmIF9fQkZJX0NCUkVHX0hfXworI2RlZmluZSBfX0JGSV9DQlJFR19IX18KKworCisjZGVmaW5lIEhPU1RGTjBfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX1AgICAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgSE9TVEZOMF9JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDAwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMCAgICAgICAgICAgICAgICAweDAwMDE0MDA4CisjZGVmaW5lIF9fSE9TVF9QQUdFX05VTV9GTiAgICAgICAgICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSE9TVEZOMV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAxNDEwMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRfTFZMX01LICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVF9MVkxfU0ggICAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVF9MVkwoX3YpICAgICAgICgoX3YpIDw8IF9fSE9TVEZOMV9JTlRfU1RBVF9MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVF9QICAgICAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgSE9TVEZOMV9JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDEwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMSAgICAgICAgICAgICAgICAweDAwMDE0MTA4CisjZGVmaW5lIEFQUF9QTExfNDAwX0NUTF9SRUcgICAgICAgICAgICAgIDB4MDAwMTQyMDQKKyNkZWZpbmUgX19QXzQwMF9QTExfTE9DSyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1NSQU1fVVNFXzEwME1IWiAgICAweDAwMTAwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUkVTRVRfVElNRVJfTUsgICAgIDB4MDAwZTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9SRVNFVF9USU1FUl9TSCAgICAgMTcKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9SRVNFVF9USU1FUihfdikgICAgKChfdikgPDwgX19BUFBfUExMXzQwMF9SRVNFVF9USU1FUl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9MT0dJQ19TT0ZUX1JFU0VUICAgMHgwMDAxMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0NOVExNVDBfMV9NSyAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfQ05UTE1UMF8xX1NIICAgICAgIDE0CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfQ05UTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfQ05UTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDAwX0pJVExNVDBfMV9NSyAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfSklUTE1UMF8xX1NIICAgICAgIDEyCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfSklUTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfSklUTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDAwX0hSRUYgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfSERJViAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9QMF8xX01LICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1AwXzFfU0ggICAgICAgICAgICA4CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUDBfMShfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfUDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9aMF8yX01LICAgICAgICAgICAgMHgwMDAwMDBlMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1owXzJfU0ggICAgICAgICAgICA1CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfWjBfMihfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfWjBfMl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9SU0VMMjAwNTAwICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0VOQVJTVCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfQllQQVNTICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9MUkVTRVROICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0FQUF9QTExfNDAwX0VOQUJMRSAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFQUF9QTExfMjEyX0NUTF9SRUcgICAgICAgICAgICAgIDB4MDAwMTQyMDgKKyNkZWZpbmUgX19QXzIxMl9QTExfTE9DSyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1JFU0VUX1RJTUVSX01LICAgICAweDAwMGUwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUkVTRVRfVElNRVJfU0ggICAgIDE3CisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUkVTRVRfVElNRVIoX3YpICAgICgoX3YpIDw8IF9fQVBQX1BMTF8yMTJfUkVTRVRfVElNRVJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfTE9HSUNfU09GVF9SRVNFVCAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9DTlRMTVQwXzFfTUsgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0NOVExNVDBfMV9TSCAgICAgICAxNAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0NOVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX0NOVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9KSVRMTVQwXzFfTUsgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0pJVExNVDBfMV9TSCAgICAgICAxMgorI2RlZmluZSBfX0FQUF9QTExfMjEyX0pJVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX0pJVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9IUkVGICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0hESVYgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUDBfMV9NSyAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9QMF8xX1NIICAgICAgICAgICAgOAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1AwXzEoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX1AwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfWjBfMl9NSyAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9aMF8yX1NIICAgICAgICAgICAgNQorI2RlZmluZSBfX0FQUF9QTExfMjEyX1owXzIoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX1owXzJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUlNFTDIwMDUwMCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9FTkFSU1QgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0JZUEFTUyAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfTFJFU0VUTiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9FTkFCTEUgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NUX1NFTTBfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjMwCisjZGVmaW5lIF9fSE9TVF9TRU1BUEhPUkUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU0xX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzNAorI2RlZmluZSBIT1NUX1NFTTJfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjM4CisjZGVmaW5lIEhPU1RfU0VNM19SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyM2MKKyNkZWZpbmUgSE9TVF9TRU0wX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0MAorI2RlZmluZSBIT1NUX1NFTTFfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQ0CisjZGVmaW5lIEhPU1RfU0VNMl9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDgKKyNkZWZpbmUgSE9TVF9TRU0zX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0YworI2RlZmluZSBIT1NURk4wX0xQVTBfQ01EX1NUQVQgICAgICAgICAgICAweDAwMDE5MDAwCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1hfSU5GT19NSyAgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWF9JTkZPX1NIICAgICAgMQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YX0lORk8oX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjBfTFBVMF9NQk9YX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1hfQ01EX1NUQVRVUyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMF9IT1NURk4wX0NNRF9TVEFUICAgICAgICAgICAgMHgwMDAxOTAwOAorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YX0lORk9fTUsgICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1hfSU5GT19TSCAgICAgIDEKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWF9JTkZPKF92KSAgICAgKChfdikgPDwgX19MUFUwX0hPU1RGTjBfTUJPWF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YX0NNRF9TVEFUVVMgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjFfTFBVMV9DTURfU1RBVCAgICAgICAgICAgIDB4MDAwMTkwMTQKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWF9JTkZPX01LICAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YX0lORk9fU0ggICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1hfSU5GTyhfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMV9MUFUxX01CT1hfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWF9DTURfU1RBVFVTICAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUxX0hPU1RGTjFfQ01EX1NUQVQgICAgICAgICAgICAweDAwMDE5MDFjCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1hfSU5GT19NSyAgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWF9JTkZPX1NIICAgICAgMQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YX0lORk8oX3YpICAgICAoKF92KSA8PCBfX0xQVTFfSE9TVEZOMV9NQk9YX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1hfQ01EX1NUQVRVUyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BFX1EwX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAxNAorI2RlZmluZSBDUEVfUTBfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDFjCisjZGVmaW5lIENQRV9RMF9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMjAKKyNkZWZpbmUgQ1BFX1ExX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAzNAorI2RlZmluZSBDUEVfUTFfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDNjCisjZGVmaW5lIENQRV9RMV9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNDAKKyNkZWZpbmUgQ1BFX1EyX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA1NAorI2RlZmluZSBDUEVfUTJfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDVjCisjZGVmaW5lIENQRV9RMl9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNjAKKyNkZWZpbmUgQ1BFX1EzX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA3NAorI2RlZmluZSBDUEVfUTNfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDdjCisjZGVmaW5lIENQRV9RM19DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwODAKKyNkZWZpbmUgQ1BFX1E0X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA5NAorI2RlZmluZSBDUEVfUTRfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDljCisjZGVmaW5lIENQRV9RNF9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwYTAKKyNkZWZpbmUgQ1BFX1E1X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBiNAorI2RlZmluZSBDUEVfUTVfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGJjCisjZGVmaW5lIENQRV9RNV9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwYzAKKyNkZWZpbmUgQ1BFX1E2X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBkNAorI2RlZmluZSBDUEVfUTZfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGRjCisjZGVmaW5lIENQRV9RNl9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwZTAKKyNkZWZpbmUgQ1BFX1E3X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBmNAorI2RlZmluZSBDUEVfUTdfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGZjCisjZGVmaW5lIENQRV9RN19DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAxMDAKKyNkZWZpbmUgUk1FX1EwX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAxNAorI2RlZmluZSBSTUVfUTBfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDFjCisjZGVmaW5lIFJNRV9RMF9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwMjAKKyNkZWZpbmUgUk1FX1ExX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAzNAorI2RlZmluZSBSTUVfUTFfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDNjCisjZGVmaW5lIFJNRV9RMV9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNDAKKyNkZWZpbmUgUk1FX1EyX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA1NAorI2RlZmluZSBSTUVfUTJfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDVjCisjZGVmaW5lIFJNRV9RMl9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNjAKKyNkZWZpbmUgUk1FX1EzX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA3NAorI2RlZmluZSBSTUVfUTNfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDdjCisjZGVmaW5lIFJNRV9RM19DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwODAKKyNkZWZpbmUgUk1FX1E0X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA5NAorI2RlZmluZSBSTUVfUTRfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDljCisjZGVmaW5lIFJNRV9RNF9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwYTAKKyNkZWZpbmUgUk1FX1E1X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBiNAorI2RlZmluZSBSTUVfUTVfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGJjCisjZGVmaW5lIFJNRV9RNV9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwYzAKKyNkZWZpbmUgUk1FX1E2X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBkNAorI2RlZmluZSBSTUVfUTZfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGRjCisjZGVmaW5lIFJNRV9RNl9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwZTAKKyNkZWZpbmUgUk1FX1E3X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBmNAorI2RlZmluZSBSTUVfUTdfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGZjCisjZGVmaW5lIFJNRV9RN19DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTExMDAKKyNkZWZpbmUgUFNTX0NUTF9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxODgwMAorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVl9NSyAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWX1NIICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWKF92KSAgICAgICAgICAgICgoX3YpIDw8IF9fUFNTX0kyQ19DTEtfRElWX1NIKQorI2RlZmluZSBfX1BTU19MTUVNX0lOSVRfRE9ORSAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIF9fUFNTX0xNRU1fUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgX19QU1NfTE1FTV9JTklUX0VOICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBfX1BTU19MUFUxX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fUFNTX0xQVTBfUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworCisvKgorICogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGVpdGhlciBpbiBlcnJvci9taXNzaW5nIGluIHNwZWMuIEl0cyBhdXRvLWdlbmVyYXRlZAorICogZnJvbSBoYXJkIGNvZGVkIHZhbHVlcyBpbiByZWdwYXJzZS5wbC4KKyAqLworI2RlZmluZSBfX0VNUEhQT1NUX0FUXzRHX01LX0ZJWCAgICAgICAgICAweDAwMDAwMDFjCisjZGVmaW5lIF9fRU1QSFBPU1RfQVRfNEdfU0hfRklYICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19FTVBIUFJFX0FUXzRHX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBfX1NGUF9UWFJBVEVfRU5fRklYICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIF9fU0ZQX1JYUkFURV9FTl9GSVggICAgICAgICAgICAgIDB4MDAwMDAwODAKKworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlIGF1dG8tZ2VuZXJhdGVkIGZyb20gaGFyZCBjb2RlZCB2YWx1ZXMKKyAqIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIEhPU1RGTjBfTFBVX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTkyMDAKKyNkZWZpbmUgSE9TVEZOMV9MUFVfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTI2MAorI2RlZmluZSBMUFVfSE9TVEZOMF9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5MjgwCisjZGVmaW5lIExQVV9IT1NURk4xX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTkyZTAKKworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgbWFwcGluZyBkZWZpbml0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSBtYXBwaW5nIHRhYmxlcworICogaW4gcmVncGFyc2UucGwuCisgKi8KKyNkZWZpbmUgQkZBX0lPQzBfSEJFQVRfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0wX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MwX1NUQVRFX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMV9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMV9IQkVBVF9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTJfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzFfU1RBVEVfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0zX0lORk9fUkVHCisjZGVmaW5lIEJGQV9GV19VU0VfQ09VTlQgICAgICAgICAgICAgICAgIEhPU1RfU0VNNF9JTkZPX1JFRworCisjZGVmaW5lIENQRV9RX0RFUFRIKF9fbikgXAorCShDUEVfUTBfREVQVEggKyAoX19uKSAqIChDUEVfUTFfREVQVEggLSBDUEVfUTBfREVQVEgpKQorI2RlZmluZSBDUEVfUV9QSShfX24pIFwKKwkoQ1BFX1EwX1BJICsgKF9fbikgKiAoQ1BFX1ExX1BJIC0gQ1BFX1EwX1BJKSkKKyNkZWZpbmUgQ1BFX1FfQ0koX19uKSBcCisJKENQRV9RMF9DSSArIChfX24pICogKENQRV9RMV9DSSAtIENQRV9RMF9DSSkpCisjZGVmaW5lIFJNRV9RX0RFUFRIKF9fbikgXAorCShSTUVfUTBfREVQVEggKyAoX19uKSAqIChSTUVfUTFfREVQVEggLSBSTUVfUTBfREVQVEgpKQorI2RlZmluZSBSTUVfUV9QSShfX24pIFwKKwkoUk1FX1EwX1BJICsgKF9fbikgKiAoUk1FX1ExX1BJIC0gUk1FX1EwX1BJKSkKKyNkZWZpbmUgUk1FX1FfQ0koX19uKSBcCisJKFJNRV9RMF9DSSArIChfX24pICogKFJNRV9RMV9DSSAtIFJNRV9RMF9DSSkpCisKKyNkZWZpbmUgQ1BFX1FfTlVNKF9fZm4sIF9fcSkgICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCisjZGVmaW5lIFJNRV9RX05VTShfX2ZuLCBfX3EpICAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQorI2RlZmluZSBDUEVfUV9NQVNLKF9fcSkgICgoX19xKSAmIDB4MykKKyNkZWZpbmUgUk1FX1FfTUFTSyhfX3EpICAoKF9fcSkgJiAweDMpCisKKworLyoKKyAqIFBDSSBNU0ktWCB2ZWN0b3IgZGVmaW5lcworICovCitlbnVtIHsKKyAgICBCRkFfTVNJWF9DUEVfUTAgPSAwLAorICAgIEJGQV9NU0lYX0NQRV9RMSA9IDEsCisgICAgQkZBX01TSVhfQ1BFX1EyID0gMiwKKyAgICBCRkFfTVNJWF9DUEVfUTMgPSAzLAorICAgIEJGQV9NU0lYX0NQRV9RNCA9IDQsCisgICAgQkZBX01TSVhfQ1BFX1E1ID0gNSwKKyAgICBCRkFfTVNJWF9DUEVfUTYgPSA2LAorICAgIEJGQV9NU0lYX0NQRV9RNyA9IDcsCisgICAgQkZBX01TSVhfUk1FX1EwID0gOCwKKyAgICBCRkFfTVNJWF9STUVfUTEgPSA5LAorICAgIEJGQV9NU0lYX1JNRV9RMiA9IDEwLAorICAgIEJGQV9NU0lYX1JNRV9RMyA9IDExLAorICAgIEJGQV9NU0lYX1JNRV9RNCA9IDEyLAorICAgIEJGQV9NU0lYX1JNRV9RNSA9IDEzLAorICAgIEJGQV9NU0lYX1JNRV9RNiA9IDE0LAorICAgIEJGQV9NU0lYX1JNRV9RNyA9IDE1LAorICAgIEJGQV9NU0lYX0VSUl9FTUMgPSAxNiwKKyAgICBCRkFfTVNJWF9FUlJfTFBVMCA9IDE3LAorICAgIEJGQV9NU0lYX0VSUl9MUFUxID0gMTgsCisgICAgQkZBX01TSVhfRVJSX1BTUyA9IDE5LAorICAgIEJGQV9NU0lYX01CT1hfTFBVMCA9IDIwLAorICAgIEJGQV9NU0lYX01CT1hfTFBVMSA9IDIxLAorICAgIEJGQV9NU0lYX0NCX01BWCA9IDIyLAorfTsKKworLyoKKyAqIEFuZCBjb3JyZXNwb25kaW5nIGhvc3QgaW50ZXJydXB0IHN0YXR1cyBiaXQgZmllbGQgZGVmaW5lcworICovCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EyICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMiAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EzICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTQgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNSAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E2ICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTcgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9FTUMgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0xQVTAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfTFBVMSAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9QU1MgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWF9MUFUwICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YX0xQVTEgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1gxX0xQVTAgICAgICAgICAgICAgICAweDAwNDAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWDFfTFBVMSAgICAgICAgICAgICAgIDB4MDA4MDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZlUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDBmZjAwVQorCisKKy8qCisgKiBjcm9zc2JvdyBtZW1vcnkgbWFwLgorICovCisjZGVmaW5lIFBTU19TTUVNX1BBR0VfU1RBUlQJMHg4MDAwCisjZGVmaW5lIFBTU19TTUVNX1BHTlVNKF9wZzAsIF9tYSkJKChfcGcwKSArICgoX21hKSA+PiAxNSkpCisjZGVmaW5lIFBTU19TTUVNX1BHT0ZGKF9tYSkJKChfbWEpICYgMHg3ZmZmKQorCisvKgorICogRW5kIG9mIGNyb3NzYm93IG1lbW9yeSBtYXAKKyAqLworCisKKyNlbmRpZiAvKiBfX0JGSV9DQlJFR19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2VlLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTcwNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2VlLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qKgorICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIGJmaV9kY2J4LmggQkZJIEludGVyZmFjZSAoTWFpbGJveCBjb21tYW5kcyBhbmQgcmVsYXRlZCBzdHJ1Y3R1cmVzKQorICogYmV0d2VlbiBob3N0IGRyaXZlciBhbmQgRENCWC9MTERQIGZpcm13YXJlIG1vZHVsZS4KKyAqCisqKi8KKworI2lmbmRlZiBfX0JGSV9DRUVfSF9fCisjZGVmaW5lIF9fQkZJX0NFRV9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKworZW51bSBiZmlfY2VlX2gyaV9tc2dzX2UgeworCUJGSV9DRUVfSDJJX0dFVF9DRkdfUkVRID0gMSwKKwlCRklfQ0VFX0gySV9SRVNFVF9TVEFUUyA9IDIsCisJQkZJX0NFRV9IMklfR0VUX1NUQVRTX1JFUSA9IDMsCit9OworCisKK2VudW0gYmZpX2NlZV9pMmhfbXNnc19lIHsKKwlCRklfQ0VFX0kySF9HRVRfQ0ZHX1JTUCA9IEJGQV9JMkhNKDEpLAorCUJGSV9DRUVfSTJIX1JFU0VUX1NUQVRTX1JTUCA9IEJGQV9JMkhNKDIpLAorCUJGSV9DRUVfSTJIX0dFVF9TVEFUU19SU1AgPSBCRkFfSTJITSgzKSwKK307CisKKworLyogRGF0YSBzdHJ1Y3R1cmVzICovCisKKy8qCisgKiBCRklfQ0VFX0gySV9SRVNFVF9TVEFUUworICovCitzdHJ1Y3QgYmZpX2xsZHBfcmVzZXRfc3RhdHNfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOworfTsKKworLyoKKyAqIEJGSV9DRUVfSDJJX1JFU0VUX1NUQVRTCisgKi8KK3N0cnVjdCBiZmlfY2VlX3Jlc2V0X3N0YXRzX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKK307CisKKy8qCisgKiBCRklfQ0VFX0gySV9HRVRfQ0ZHX1JFUQorICovCitzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKKwl1bmlvbiBiZmlfYWRkcl91ICAgZG1hX2FkZHI7Cit9OworCisKKy8qCisgKiBCRklfQ0VFX0kySF9HRVRfQ0ZHX1JTUAorICovCitzdHJ1Y3QgYmZpX2NlZV9nZXRfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKKwl1OCAgICAgICAgICAgIGNtZF9zdGF0dXM7CisJdTggICAgICAgICAgICByc3ZkWzNdOworfTsKKworLyoKKyAqIEJGSV9DRUVfSDJJX0dFVF9TVEFUU19SRVEKKyAqLworc3RydWN0IGJmaV9jZWVfc3RhdHNfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKKwl1bmlvbiBiZmlfYWRkcl91ICAgZG1hX2FkZHI7Cit9OworCisKKy8qCisgKiBCRklfQ0VFX0kySF9HRVRfU1RBVFNfUlNQCisgKi8KK3N0cnVjdCBiZmlfY2VlX3N0YXRzX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CisJdTggCQkgICBjbWRfc3RhdHVzOworCXU4IAkJICAgcnN2ZFszXTsKK307CisKKworCit1bmlvbiBiZmlfY2VlX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAgICAgIG1oOworCXN0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyAgIGdldF9yZXE7CisJc3RydWN0IGJmaV9jZWVfc3RhdHNfcmVxX3Mgc3RhdHNfcmVxOworfTsKKworCit1bmlvbiBiZmlfY2VlX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAgICBtaDsKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcnNwX3MgIGdldF9yc3A7CisJc3RydWN0IGJmaV9jZWVfc3RhdHNfcnNwX3Mgc3RhdHNfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworCisjZW5kaWYgLyogX19CRklfQ0VFX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jdHJlZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY3RyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NhYTU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY3RyZWcuaApAQCAtMCwwICsxLDYxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogYmZpX2N0cmVnLmggY2F0YXB1bHQgaG9zdCBibG9jayByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqICEhISBEbyBub3QgZWRpdC4gQXV0byBnZW5lcmF0ZWQuICEhIQorICovCisKKyNpZm5kZWYgX19CRklfQ1RSRUdfSF9fCisjZGVmaW5lIF9fQkZJX0NUUkVHX0hfXworCisKKyNkZWZpbmUgSE9TVEZOMF9MUFVfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTIwMAorI2RlZmluZSBIT1NURk4xX0xQVV9NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5MjYwCisjZGVmaW5lIExQVV9IT1NURk4wX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTkyODAKKyNkZWZpbmUgTFBVX0hPU1RGTjFfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTJlMAorI2RlZmluZSBIT1NURk4yX0xQVV9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5NDAwCisjZGVmaW5lIEhPU1RGTjNfTFBVX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTk0NjAKKyNkZWZpbmUgTFBVX0hPU1RGTjJfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTQ4MAorI2RlZmluZSBMUFVfSE9TVEZOM19NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5NGUwCisjZGVmaW5lIEhPU1RGTjBfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQwMDAKKyNkZWZpbmUgX19IT1NURk4wX0hBTFRfT0NDVVJSRUQgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfTUsgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9TSCAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTChfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfUF9NSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19QX1NIICAgICAgICAxNgorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19QKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjBfSU5UX1NUQVRVU19QX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19GICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhPU1RGTjBfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQwMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjAgICAgICAgICAgICAgICAgMHgwMDAxNDAwOAorI2RlZmluZSBfX0hPU1RfUEFHRV9OVU1fRk4gICAgICAgICAgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhPU1RfTVNJWF9FUlJfSU5ERVhfRk4wICAgICAgICAgIDB4MDAwMTQwMGMKKyNkZWZpbmUgX19NU0lYX0VSUl9JTkRFWF9GTiAgICAgICAgICAgICAgMHgwMDAwMDFmZgorI2RlZmluZSBIT1NURk4xX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MTAwCisjZGVmaW5lIF9fSE9TVEZOMV9IQUxUX09DQ1VSUkVEICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjFfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX1BfTUsgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfUF9TSCAgICAgICAgMTYKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfUChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4xX0lOVF9TVEFUVVNfUF9TSCkKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfRiAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIT1NURk4xX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0MTA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4xICAgICAgICAgICAgICAgIDB4MDAwMTQxMDgKKyNkZWZpbmUgSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjEgICAgICAgICAgMHgwMDAxNDEwYworI2RlZmluZSBBUFBfUExMXzQyNV9DVExfUkVHICAgICAgICAgICAgICAweDAwMDE0MjA0CisjZGVmaW5lIF9fUF80MjVfUExMX0xPQ0sgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9TUkFNX1VTRV8xMDBNSFogICAgMHgwMDEwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1JFU0VUX1RJTUVSX01LICAgICAweDAwMGUwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUkVTRVRfVElNRVJfU0ggICAgIDE3CisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUkVTRVRfVElNRVIoX3YpICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MjVfUkVTRVRfVElNRVJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfTE9HSUNfU09GVF9SRVNFVCAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9DTlRMTVQwXzFfTUsgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0NOVExNVDBfMV9TSCAgICAgICAxNAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0NOVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X0NOVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9KSVRMTVQwXzFfTUsgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0pJVExNVDBfMV9TSCAgICAgICAxMgorI2RlZmluZSBfX0FQUF9QTExfNDI1X0pJVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X0pJVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9IUkVGICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0hESVYgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUDBfMV9NSyAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9QMF8xX1NIICAgICAgICAgICAgOAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1AwXzEoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X1AwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfWjBfMl9NSyAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9aMF8yX1NIICAgICAgICAgICAgNQorI2RlZmluZSBfX0FQUF9QTExfNDI1X1owXzIoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X1owXzJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUlNFTDIwMDUwMCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9FTkFSU1QgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0JZUEFTUyAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX1BMTF80MjVfTFJFU0VUTiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9FTkFCTEUgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUFBfUExMXzMxMl9DVExfUkVHICAgICAgICAgICAgICAweDAwMDE0MjA4CisjZGVmaW5lIF9fUF8zMTJfUExMX0xPQ0sgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19FTkFCTEVfTUFDX0FIQl8xICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBfX0VOQUJMRV9NQUNfQUhCXzAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIF9fRU5BQkxFX01BQ18xICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgX19FTkFCTEVfTUFDXzAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1JFU0VUX1RJTUVSX01LICAgICAweDAwMGUwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUkVTRVRfVElNRVJfU0ggICAgIDE3CisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUkVTRVRfVElNRVIoX3YpICAgICgoX3YpIDw8IF9fQVBQX1BMTF8zMTJfUkVTRVRfVElNRVJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9DTlRMTVQwXzFfTUsgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0NOVExNVDBfMV9TSCAgICAgICAxNAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0NOVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX0NOVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9KSVRMTVQwXzFfTUsgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0pJVExNVDBfMV9TSCAgICAgICAxMgorI2RlZmluZSBfX0FQUF9QTExfMzEyX0pJVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX0pJVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9IUkVGICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0hESVYgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUDBfMV9NSyAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9QMF8xX1NIICAgICAgICAgICAgOAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1AwXzEoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX1AwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfWjBfMl9NSyAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9aMF8yX1NIICAgICAgICAgICAgNQorI2RlZmluZSBfX0FQUF9QTExfMzEyX1owXzIoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX1owXzJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUlNFTDIwMDUwMCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9FTkFSU1QgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0JZUEFTUyAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfTFJFU0VUTiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9FTkFCTEUgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQklTVF9DVExfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjIwCisjZGVmaW5lIF9fRURSQU1fQklTVFJfU1RBUlQgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19NQklTVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX01CSVNUX1NUQVJUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1CSVNUX1NUQVRfUkVHICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMjQKKyNkZWZpbmUgX19FRFJBTV9CSVNUUl9TVEFUVVMgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0VEUkFNX0JJU1RSX0RPTkUgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fTUVNX0JJVF9TVEFUVVMgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19NQklTVF9ET05FICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NUX1NFTTBfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjMwCisjZGVmaW5lIF9fSE9TVF9TRU1BUEhPUkUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU0xX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzNAorI2RlZmluZSBIT1NUX1NFTTJfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjM4CisjZGVmaW5lIEhPU1RfU0VNM19SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyM2MKKyNkZWZpbmUgSE9TVF9TRU0wX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0MAorI2RlZmluZSBIT1NUX1NFTTFfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQ0CisjZGVmaW5lIEhPU1RfU0VNMl9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDgKKyNkZWZpbmUgSE9TVF9TRU0zX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0YworI2RlZmluZSBFVEhfTUFDX1NFUl9SRUcgICAgICAgICAgICAgICAgICAweDAwMDE0Mjg4CisjZGVmaW5lIF9fQVBQX0VNU19DS0JVRkFNUElOICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgX19BUFBfRU1TX1JFRkNMS1NFTCAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBfX0FQUF9FTVNfQ01MQ0tTRUwgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fQVBQX0VNU19SRUZDS0JVRkVOMiAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19BUFBfRU1TX1JFRkNLQlVGRU4xICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0FQUF9FTVNfQ0hBTk5FTF9TRUwgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjJfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQzMDAKKyNkZWZpbmUgX19IT1NURk4yX0hBTFRfT0NDVVJSRUQgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19MVkxfTUsgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX0xWTF9TSCAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX0xWTChfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMl9JTlRfU1RBVFVTX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfUF9NSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19QX1NIICAgICAgICAxNgorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19QKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjJfSU5UX1NUQVRVU19QX1NIKQorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19GICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhPU1RGTjJfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQzMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjIgICAgICAgICAgICAgICAgMHgwMDAxNDMwOAorI2RlZmluZSBIT1NUX01TSVhfRVJSX0lOREVYX0ZOMiAgICAgICAgICAweDAwMDE0MzBjCisjZGVmaW5lIEhPU1RGTjNfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQ0MDAKKyNkZWZpbmUgX19IQUxUX09DQ1VSUkVEICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19MVkxfTUsgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX0xWTF9TSCAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX0xWTChfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOM19JTlRfU1RBVFVTX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfUF9NSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19QX1NIICAgICAgICAxNgorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19QKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjNfSU5UX1NUQVRVU19QX1NIKQorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19GICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhPU1RGTjNfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQ0MDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjMgICAgICAgICAgICAgICAgMHgwMDAxNDQwOAorI2RlZmluZSBIT1NUX01TSVhfRVJSX0lOREVYX0ZOMyAgICAgICAgICAweDAwMDE0NDBjCisjZGVmaW5lIEZOQ19JRF9SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MDAKKyNkZWZpbmUgX19GVU5DVElPTl9OVU1CRVIgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBGTkNfUEVSU19SRUcgICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjA0CisjZGVmaW5lIF9fRjNfRlVOQ1RJT05fQUNUSVZFICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19GM19GVU5DVElPTl9NT0RFICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX0YzX1BPUlRfTUFQX01LICAgICAgICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIF9fRjNfUE9SVF9NQVBfU0ggICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIF9fRjNfUE9SVF9NQVAoX3YpICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fRjNfUE9SVF9NQVBfU0gpCisjZGVmaW5lIF9fRjNfVk1fTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgX19GM19JTlRYX1NUQVRVU19NSyAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBfX0YzX0lOVFhfU1RBVFVTX1NIICAgICAgICAgICAgICAyNAorI2RlZmluZSBfX0YzX0lOVFhfU1RBVFVTKF92KSAgICAgICAgICAgICAoKF92KSA8PCBfX0YzX0lOVFhfU1RBVFVTX1NIKQorI2RlZmluZSBfX0YyX0ZVTkNUSU9OX0FDVElWRSAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIF9fRjJfRlVOQ1RJT05fTU9ERSAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgX19GMl9QT1JUX01BUF9NSyAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMAorI2RlZmluZSBfX0YyX1BPUlRfTUFQX1NIICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBfX0YyX1BPUlRfTUFQKF92KSAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0YyX1BPUlRfTUFQX1NIKQorI2RlZmluZSBfX0YyX1ZNX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIF9fRjJfSU5UWF9TVEFUVVNfTUsgICAgICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgX19GMl9JTlRYX1NUQVRVU19TSCAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19GMl9JTlRYX1NUQVRVUyhfdikgICAgICAgICAgICAgKChfdikgPDwgX19GMl9JTlRYX1NUQVRVU19TSCkKKyNkZWZpbmUgX19GMV9GVU5DVElPTl9BQ1RJVkUgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBfX0YxX0ZVTkNUSU9OX01PREUgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIF9fRjFfUE9SVF9NQVBfTUsgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19GMV9QT1JUX01BUF9TSCAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgX19GMV9QT1JUX01BUChfdikgICAgICAgICAgICAgICAgKChfdikgPDwgX19GMV9QT1JUX01BUF9TSCkKKyNkZWZpbmUgX19GMV9WTV9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0YxX0lOVFhfU1RBVFVTX01LICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIF9fRjFfSU5UWF9TVEFUVVNfU0ggICAgICAgICAgICAgIDgKKyNkZWZpbmUgX19GMV9JTlRYX1NUQVRVUyhfdikgICAgICAgICAgICAgKChfdikgPDwgX19GMV9JTlRYX1NUQVRVU19TSCkKKyNkZWZpbmUgX19GMF9GVU5DVElPTl9BQ1RJVkUgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBfX0YwX0ZVTkNUSU9OX01PREUgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIF9fRjBfUE9SVF9NQVBfTUsgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgX19GMF9QT1JUX01BUF9TSCAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBfX0YwX1BPUlRfTUFQKF92KSAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0YwX1BPUlRfTUFQX1NIKQorI2RlZmluZSBfX0YwX1ZNX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fRjBfSU5UWF9TVEFUVVMgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKK2VudW0geworICAgIF9fRjBfSU5UWF9TVEFUVVNfTVNJWCAgICAgICAgICAgID0gMHgwLAorICAgIF9fRjBfSU5UWF9TVEFUVVNfSU5UQSAgICAgICAgICAgID0gMHgxLAorICAgIF9fRjBfSU5UWF9TVEFUVVNfSU5UQiAgICAgICAgICAgID0gMHgyLAorICAgIF9fRjBfSU5UWF9TVEFUVVNfSU5UQyAgICAgICAgICAgID0gMHgzLAorICAgIF9fRjBfSU5UWF9TVEFUVVNfSU5URCAgICAgICAgICAgID0gMHg0LAorfTsKKyNkZWZpbmUgT1BfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYwYworI2RlZmluZSBfX0FQUF9FVEhfQ0xLX0xPV1NQRUVEICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fR0xPQkFMX0NPUkVDTEtfSEFMRlNQRUVEICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19HTE9CQUxfRkNPRV9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NUX1NFTTRfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjEwCisjZGVmaW5lIEhPU1RfU0VNNV9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MTQKKyNkZWZpbmUgSE9TVF9TRU02X1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYxOAorI2RlZmluZSBIT1NUX1NFTTdfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjFjCisjZGVmaW5lIEhPU1RfU0VNNF9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQ2MjAKKyNkZWZpbmUgSE9TVF9TRU01X0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDYyNAorI2RlZmluZSBIT1NUX1NFTTZfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0NjI4CisjZGVmaW5lIEhPU1RfU0VNN19JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQ2MmMKKyNkZWZpbmUgSE9TVEZOMF9MUFUwX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAwMAorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4wX0xQVTBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4wX0xQVTFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDA0CisjZGVmaW5lIF9fSE9TVEZOMF9MUFUxX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4wX0xQVTFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjBfTFBVMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMDgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4wX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4wX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAwYworI2RlZmluZSBfX0xQVTFfSE9TVEZOMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4wX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4xX0xQVTBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDEwCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUwX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4xX0xQVTBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjFfTFBVMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjFfTFBVMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMTQKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMV9MUFUxX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMF9IT1NURk4xX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAxOAorI2RlZmluZSBfX0xQVTBfSE9TVEZOMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMF9IT1NURk4xX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUwX0hPU1RGTjFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUxX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDFjCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTFfSE9TVEZOMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjJfTFBVMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNTAKKyNkZWZpbmUgX19IT1NURk4yX0xQVTBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUwX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMl9MUFUwX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUwX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMl9MUFUxX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE1NAorI2RlZmluZSBfX0hPU1RGTjJfTFBVMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUxX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4yX0xQVTFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4yX0xQVTFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4yX0xQVTFfTUJPWDBCT1gwX0NNRF9TVEFUVVMgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUwX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTU4CisjZGVmaW5lIF9fTFBVMF9IT1NURk4yX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjJfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMl9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTBfSE9TVEZOMl9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMl9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTFfSE9TVEZOMl9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNWMKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjJfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMl9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMV9IT1NURk4yX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMV9IT1NURk4yX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4yX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOM19MUFUwX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE2MAorI2RlZmluZSBfX0hPU1RGTjNfTFBVMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOM19MUFUwX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4zX0xQVTBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4zX0xQVTBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4zX0xQVTBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4zX0xQVTFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTY0CisjZGVmaW5lIF9fSE9TVEZOM19MUFUxX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4zX0xQVTFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjNfTFBVMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOM19NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNjgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjNfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOM19NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4zX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4zX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMF9IT1NURk4zX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4zX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE2YworI2RlZmluZSBfX0xQVTFfSE9TVEZOM19NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4zX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjNfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjNfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBGV19JTklUX0hBTFRfUDAgICAgICAgICAgICAgICAgICAweDAwMDE5MWFjCisjZGVmaW5lIF9fRldfSU5JVF9IQUxUX1AgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRldfSU5JVF9IQUxUX1AxICAgICAgICAgICAgICAgICAgMHgwMDAxOTFiYworI2RlZmluZSBDUEVfUElfUFRSX1EwICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDAwCisjZGVmaW5lIF9fQ1BFX1BJX1VOVVNFRF9NSyAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgX19DUEVfUElfVU5VU0VEX1NIICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19DUEVfUElfVU5VU0VEKF92KSAgICAgICAgICAgICAgKChfdikgPDwgX19DUEVfUElfVU5VU0VEX1NIKQorI2RlZmluZSBfX0NQRV9QSV9QVFIgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIENQRV9QSV9QVFJfUTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNDAKKyNkZWZpbmUgQ1BFX0NJX1BUUl9RMCAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwNAorI2RlZmluZSBfX0NQRV9DSV9VTlVTRURfTUsgICAgICAgICAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIF9fQ1BFX0NJX1VOVVNFRF9TSCAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fQ1BFX0NJX1VOVVNFRChfdikgICAgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NJX1VOVVNFRF9TSCkKKyNkZWZpbmUgX19DUEVfQ0lfUFRSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBDUEVfQ0lfUFRSX1ExICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDQ0CisjZGVmaW5lIENQRV9ERVBUSF9RMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMDgKKyNkZWZpbmUgX19DUEVfREVQVEhfVU5VU0VEX01LICAgICAgICAgICAgMHhmODAwMDAwMAorI2RlZmluZSBfX0NQRV9ERVBUSF9VTlVTRURfU0ggICAgICAgICAgICAyNworI2RlZmluZSBfX0NQRV9ERVBUSF9VTlVTRUQoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0NQRV9ERVBUSF9VTlVTRURfU0gpCisjZGVmaW5lIF9fQ1BFX01TSVhfVkVDX0lOREVYX01LICAgICAgICAgIDB4MDdmZjAwMDAKKyNkZWZpbmUgX19DUEVfTVNJWF9WRUNfSU5ERVhfU0ggICAgICAgICAgMTYKKyNkZWZpbmUgX19DUEVfTVNJWF9WRUNfSU5ERVgoX3YpICAgICAgICAgKChfdikgPDwgX19DUEVfTVNJWF9WRUNfSU5ERVhfU0gpCisjZGVmaW5lIF9fQ1BFX0RFUFRIICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQ1BFX0RFUFRIX1ExICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA0OAorI2RlZmluZSBDUEVfUUNUUkxfUTAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDBjCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzBfTUsgICAgICAgICAgIDB4ZmMwMDAwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMF9TSCAgICAgICAgICAgMjYKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQzMF9TSCkKKyNkZWZpbmUgX19DUEVfRlVOQ19JTlRfQ1RSTF9NSyAgICAgICAgICAgMHgwMzAwMDAwMAorI2RlZmluZSBfX0NQRV9GVU5DX0lOVF9DVFJMX1NIICAgICAgICAgICAyNAorI2RlZmluZSBfX0NQRV9GVU5DX0lOVF9DVFJMKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9GVU5DX0lOVF9DVFJMX1NIKQorZW51bSB7CisgICAgX19DUEVfRlVOQ19JTlRfQ1RSTF9ESVNBQkxFICAgICAgPSAweDAsCisgICAgX19DUEVfRlVOQ19JTlRfQ1RSTF9GMk5GICAgICAgICAgPSAweDEsCisgICAgX19DUEVfRlVOQ19JTlRfQ1RSTF8zUVVBUlQgICAgICAgPSAweDIsCisgICAgX19DUEVfRlVOQ19JTlRfQ1RSTF9IQUxGICAgICAgICAgPSAweDMsCit9OworI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIwX01LICAgICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjBfU0ggICAgICAgICAgIDIwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMjBfU0gpCisjZGVmaW5lIF9fQ1BFX1NDSV9USF9NSyAgICAgICAgICAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19DUEVfU0NJX1RIX1NIICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19DUEVfU0NJX1RIKF92KSAgICAgICAgICAgICAgICAgKChfdikgPDwgX19DUEVfU0NJX1RIX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDEwX01LICAgICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTBfU0ggICAgICAgICAgIDE0CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMTBfU0gpCisjZGVmaW5lIF9fQ1BFX0FDS19QRU5ESU5HICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MF9NSyAgICAgICAgICAgMHgwMDAwMWMwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQwX1NIICAgICAgICAgICAxMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQwKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDQwX1NIKQorI2RlZmluZSBfX0NQRV9QQ0lFSURfTUsgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQ1BFX1BDSUVJRF9TSCAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgX19DUEVfUENJRUlEKF92KSAgICAgICAgICAgICAgICAgKChfdikgPDwgX19DUEVfUENJRUlEX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAwX01LICAgICAgICAgICAweDAwMDAwMGZlCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDBfU0ggICAgICAgICAgIDEKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQwMF9TSCkKKyNkZWZpbmUgX19DUEVfRVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUEVfUUNUUkxfUTEgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDRjCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzFfTUsgICAgICAgICAgIDB4ZmMwMDAwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMV9TSCAgICAgICAgICAgMjYKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMShfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQzMV9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMV9NSyAgICAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIxX1NIICAgICAgICAgICAyMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIxKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDIxX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDExX01LICAgICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTFfU0ggICAgICAgICAgIDE0CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMTFfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDFfTUsgICAgICAgICAgIDB4MDAwMDFjMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MV9TSCAgICAgICAgICAgMTAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MShfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQ0MV9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMV9NSyAgICAgICAgICAgMHgwMDAwMDBmZQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAxX1NIICAgICAgICAgICAxCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMDFfU0gpCisjZGVmaW5lIFJNRV9QSV9QVFJfUTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMjAKKyNkZWZpbmUgX19MQVRFTkNZX1RJTUVfU1RBTVBfTUsgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBfX0xBVEVOQ1lfVElNRV9TVEFNUF9TSCAgICAgICAgICAxNgorI2RlZmluZSBfX0xBVEVOQ1lfVElNRV9TVEFNUChfdikgICAgICAgICAoKF92KSA8PCBfX0xBVEVOQ1lfVElNRV9TVEFNUF9TSCkKKyNkZWZpbmUgX19STUVfUElfUFRSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBSTUVfUElfUFRSX1ExICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDYwCisjZGVmaW5lIFJNRV9DSV9QVFJfUTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMjQKKyNkZWZpbmUgX19ERUxBWV9USU1FX1NUQU1QX01LICAgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBfX0RFTEFZX1RJTUVfU1RBTVBfU0ggICAgICAgICAgICAxNgorI2RlZmluZSBfX0RFTEFZX1RJTUVfU1RBTVAoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0RFTEFZX1RJTUVfU1RBTVBfU0gpCisjZGVmaW5lIF9fUk1FX0NJX1BUUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgUk1FX0NJX1BUUl9RMSAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA2NAorI2RlZmluZSBSTUVfREVQVEhfUTAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDI4CisjZGVmaW5lIF9fUk1FX0RFUFRIX1VOVVNFRF9NSyAgICAgICAgICAgIDB4ZjgwMDAwMDAKKyNkZWZpbmUgX19STUVfREVQVEhfVU5VU0VEX1NIICAgICAgICAgICAgMjcKKyNkZWZpbmUgX19STUVfREVQVEhfVU5VU0VEKF92KSAgICAgICAgICAgKChfdikgPDwgX19STUVfREVQVEhfVU5VU0VEX1NIKQorI2RlZmluZSBfX1JNRV9NU0lYX1ZFQ19JTkRFWF9NSyAgICAgICAgICAweDA3ZmYwMDAwCisjZGVmaW5lIF9fUk1FX01TSVhfVkVDX0lOREVYX1NIICAgICAgICAgIDE2CisjZGVmaW5lIF9fUk1FX01TSVhfVkVDX0lOREVYKF92KSAgICAgICAgICgoX3YpIDw8IF9fUk1FX01TSVhfVkVDX0lOREVYX1NIKQorI2RlZmluZSBfX1JNRV9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIFJNRV9ERVBUSF9RMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNjgKKyNkZWZpbmUgUk1FX1FDVFJMX1EwICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAyYworI2RlZmluZSBfX1JNRV9JTlRfTEFURU5DWV9USU1FUl9NSyAgICAgICAweGZmMDAwMDAwCisjZGVmaW5lIF9fUk1FX0lOVF9MQVRFTkNZX1RJTUVSX1NIICAgICAgIDI0CisjZGVmaW5lIF9fUk1FX0lOVF9MQVRFTkNZX1RJTUVSKF92KSAgICAgICgoX3YpIDw8IF9fUk1FX0lOVF9MQVRFTkNZX1RJTUVSX1NIKQorI2RlZmluZSBfX1JNRV9JTlRfREVMQVlfVElNRVJfTUsgICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIF9fUk1FX0lOVF9ERUxBWV9USU1FUl9TSCAgICAgICAgIDE2CisjZGVmaW5lIF9fUk1FX0lOVF9ERUxBWV9USU1FUihfdikgICAgICAgICgoX3YpIDw8IF9fUk1FX0lOVF9ERUxBWV9USU1FUl9TSCkKKyNkZWZpbmUgX19STUVfSU5UX0RFTEFZX0RJU0FCTEUgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBfX1JNRV9ETFlfREVMQVlfRElTQUJMRSAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIF9fUk1FX0FDS19QRU5ESU5HICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgX19STUVfRlVMTF9JTlRFUlJVUFRfRElTQUJMRSAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDEwX01LICAgICAgICAgICAweDAwMDAwYzAwCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTBfU0ggICAgICAgICAgIDEwCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fUk1FX0NUUkxfVU5VU0VEMTBfU0gpCisjZGVmaW5lIF9fUk1FX1BDSUVJRF9NSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19STUVfUENJRUlEX1NIICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBfX1JNRV9QQ0lFSUQoX3YpICAgICAgICAgICAgICAgICAoKF92KSA8PCBfX1JNRV9QQ0lFSURfU0gpCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDBfTUsgICAgICAgICAgIDB4MDAwMDAwZmUKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMF9TSCAgICAgICAgICAgMQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAwKF92KSAgICAgICAgICAoKF92KSA8PCBfX1JNRV9DVFJMX1VOVVNFRDAwX1NIKQorI2RlZmluZSBfX1JNRV9FU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJNRV9RQ1RSTF9RMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNmMKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMV9NSyAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDExX1NIICAgICAgICAgICAxMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDExKF92KSAgICAgICAgICAoKF92KSA8PCBfX1JNRV9DVFJMX1VOVVNFRDExX1NIKQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAxX01LICAgICAgICAgICAweDAwMDAwMGZlCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDFfU0ggICAgICAgICAgIDEKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMShfdikgICAgICAgICAgKChfdikgPDwgX19STUVfQ1RSTF9VTlVTRUQwMV9TSCkKKyNkZWZpbmUgUFNTX0NUTF9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxODgwMAorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVl9NSyAgICAgICAgICAgICAweDAwN2YwMDAwCisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWX1NIICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWKF92KSAgICAgICAgICAgICgoX3YpIDw8IF9fUFNTX0kyQ19DTEtfRElWX1NIKQorI2RlZmluZSBfX1BTU19MTUVNX0lOSVRfRE9ORSAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIF9fUFNTX0xNRU1fUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgX19QU1NfTE1FTV9JTklUX0VOICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBfX1BTU19MUFUxX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fUFNTX0xQVTBfUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSFFNX1FTRVQwX1JYUV9EUkJMX1AwICAgICAgICAgICAgMHgwMDAzODAwMAorI2RlZmluZSBfX1JYUTBfQUREX1ZFQ1RPUlNfUCAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fUlhRMF9TVE9QX1AgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19SWFEwX1BSRF9QVFJfUCAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDFfUlhRX0RSQkxfUDAgICAgICAgICAgICAweDAwMDM4MDgwCisjZGVmaW5lIF9fUlhRMV9BRERfVkVDVE9SU19QICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19SWFExX1NUT1BfUCAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX1JYUTFfUFJEX1BUUl9QICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMF9SWFFfRFJCTF9QMSAgICAgICAgICAgIDB4MDAwM2MwMDAKKyNkZWZpbmUgSFFNX1FTRVQxX1JYUV9EUkJMX1AxICAgICAgICAgICAgMHgwMDAzYzA4MAorI2RlZmluZSBIUU1fUVNFVDBfVFhRX0RSQkxfUDAgICAgICAgICAgICAweDAwMDM4MDIwCisjZGVmaW5lIF9fVFhRMF9BRERfVkVDVE9SU19QICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19UWFEwX1NUT1BfUCAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX1RYUTBfUFJEX1BUUl9QICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMV9UWFFfRFJCTF9QMCAgICAgICAgICAgIDB4MDAwMzgwYTAKKyNkZWZpbmUgX19UWFExX0FERF9WRUNUT1JTX1AgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX1RYUTFfU1RPUF9QICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fVFhRMV9QUkRfUFRSX1AgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQwX1RYUV9EUkJMX1AxICAgICAgICAgICAgMHgwMDAzYzAyMAorI2RlZmluZSBIUU1fUVNFVDFfVFhRX0RSQkxfUDEgICAgICAgICAgICAweDAwMDNjMGEwCisjZGVmaW5lIEhRTV9RU0VUMF9JQl9EUkJMXzFfUDAgICAgICAgICAgIDB4MDAwMzgwNDAKKyNkZWZpbmUgX19JQjFfMF9BQ0tfUCAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0lCMV8wX0RJU0FCTEVfUCAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fSUIxXzBfTlVNX09GX0FDS0VEX0VWRU5UU19QICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQxX0lCX0RSQkxfMV9QMCAgICAgICAgICAgMHgwMDAzODBjMAorI2RlZmluZSBfX0lCMV8xX0FDS19QICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fSUIxXzFfRElTQUJMRV9QICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19JQjFfMV9OVU1fT0ZfQUNLRURfRVZFTlRTX1AgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDBfSUJfRFJCTF8xX1AxICAgICAgICAgICAweDAwMDNjMDQwCisjZGVmaW5lIEhRTV9RU0VUMV9JQl9EUkJMXzFfUDEgICAgICAgICAgIDB4MDAwM2MwYzAKKyNkZWZpbmUgSFFNX1FTRVQwX0lCX0RSQkxfMl9QMCAgICAgICAgICAgMHgwMDAzODA2MAorI2RlZmluZSBfX0lCMl8wX0FDS19QICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fSUIyXzBfRElTQUJMRV9QICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19JQjJfMF9OVU1fT0ZfQUNLRURfRVZFTlRTX1AgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDFfSUJfRFJCTF8yX1AwICAgICAgICAgICAweDAwMDM4MGUwCisjZGVmaW5lIF9fSUIyXzFfQUNLX1AgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19JQjJfMV9ESVNBQkxFX1AgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX0lCMl8xX05VTV9PRl9BQ0tFRF9FVkVOVFNfUCAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMF9JQl9EUkJMXzJfUDEgICAgICAgICAgIDB4MDAwM2MwNjAKKyNkZWZpbmUgSFFNX1FTRVQxX0lCX0RSQkxfMl9QMSAgICAgICAgICAgMHgwMDAzYzBlMAorCisKKy8qCisgKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgZWl0aGVyIGluIGVycm9yL21pc3NpbmcgaW4gc3BlYy4gSXRzIGF1dG8tZ2VuZXJhdGVkCisgKiBmcm9tIGhhcmQgY29kZWQgdmFsdWVzIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIF9fRU1QSFBPU1RfQVRfNEdfTUtfRklYICAgICAgICAgIDB4MDAwMDAwMWMKKyNkZWZpbmUgX19FTVBIUE9TVF9BVF80R19TSF9GSVggICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0VNUEhQUkVfQVRfNEdfRklYICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIF9fU0ZQX1RYUkFURV9FTl9GSVggICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgX19TRlBfUlhSQVRFX0VOX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDA4MAorCisKKy8qCisgKiBUaGVzZSByZWdpc3RlciBkZWZpbml0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSBoYXJkIGNvZGVkIHZhbHVlcworICogaW4gcmVncGFyc2UucGwuCisgKi8KKworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgbWFwcGluZyBkZWZpbml0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSBtYXBwaW5nIHRhYmxlcworICogaW4gcmVncGFyc2UucGwuCisgKi8KKyNkZWZpbmUgQkZBX0lPQzBfSEJFQVRfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0wX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MwX1NUQVRFX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMV9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMV9IQkVBVF9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTJfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzFfU1RBVEVfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0zX0lORk9fUkVHCisjZGVmaW5lIEJGQV9GV19VU0VfQ09VTlQgICAgICAgICAgICAgICAgIEhPU1RfU0VNNF9JTkZPX1JFRworCisjZGVmaW5lIENQRV9ERVBUSF9RKF9fbikgXAorCShDUEVfREVQVEhfUTAgKyAoX19uKSAqIChDUEVfREVQVEhfUTEgLSBDUEVfREVQVEhfUTApKQorI2RlZmluZSBDUEVfUUNUUkxfUShfX24pIFwKKwkoQ1BFX1FDVFJMX1EwICsgKF9fbikgKiAoQ1BFX1FDVFJMX1ExIC0gQ1BFX1FDVFJMX1EwKSkKKyNkZWZpbmUgQ1BFX1BJX1BUUl9RKF9fbikgXAorCShDUEVfUElfUFRSX1EwICsgKF9fbikgKiAoQ1BFX1BJX1BUUl9RMSAtIENQRV9QSV9QVFJfUTApKQorI2RlZmluZSBDUEVfQ0lfUFRSX1EoX19uKSBcCisJKENQRV9DSV9QVFJfUTAgKyAoX19uKSAqIChDUEVfQ0lfUFRSX1ExIC0gQ1BFX0NJX1BUUl9RMCkpCisjZGVmaW5lIFJNRV9ERVBUSF9RKF9fbikgXAorCShSTUVfREVQVEhfUTAgKyAoX19uKSAqIChSTUVfREVQVEhfUTEgLSBSTUVfREVQVEhfUTApKQorI2RlZmluZSBSTUVfUUNUUkxfUShfX24pIFwKKwkoUk1FX1FDVFJMX1EwICsgKF9fbikgKiAoUk1FX1FDVFJMX1ExIC0gUk1FX1FDVFJMX1EwKSkKKyNkZWZpbmUgUk1FX1BJX1BUUl9RKF9fbikgXAorCShSTUVfUElfUFRSX1EwICsgKF9fbikgKiAoUk1FX1BJX1BUUl9RMSAtIFJNRV9QSV9QVFJfUTApKQorI2RlZmluZSBSTUVfQ0lfUFRSX1EoX19uKSBcCisJKFJNRV9DSV9QVFJfUTAgKyAoX19uKSAqIChSTUVfQ0lfUFRSX1ExIC0gUk1FX0NJX1BUUl9RMCkpCisjZGVmaW5lIEhRTV9RU0VUX1JYUV9EUkJMX1AwKF9fbikgXAorCShIUU1fUVNFVDBfUlhRX0RSQkxfUDAgKyAoX19uKSAqIChIUU1fUVNFVDFfUlhRX0RSQkxfUDAgLSBcCisJSFFNX1FTRVQwX1JYUV9EUkJMX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfVFhRX0RSQkxfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9UWFFfRFJCTF9QMCArIChfX24pICogKEhRTV9RU0VUMV9UWFFfRFJCTF9QMCAtIFwKKwlIUU1fUVNFVDBfVFhRX0RSQkxfUDApKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzFfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzFfUDAgKyAoX19uKSAqIChIUU1fUVNFVDFfSUJfRFJCTF8xX1AwIC0gXAorCUhRTV9RU0VUMF9JQl9EUkJMXzFfUDApKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzJfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzJfUDAgKyAoX19uKSAqIChIUU1fUVNFVDFfSUJfRFJCTF8yX1AwIC0gXAorCUhRTV9RU0VUMF9JQl9EUkJMXzJfUDApKQorI2RlZmluZSBIUU1fUVNFVF9SWFFfRFJCTF9QMShfX24pIFwKKwkoSFFNX1FTRVQwX1JYUV9EUkJMX1AxICsgKF9fbikgKiAoSFFNX1FTRVQxX1JYUV9EUkJMX1AxIC0gXAorCUhRTV9RU0VUMF9SWFFfRFJCTF9QMSkpCisjZGVmaW5lIEhRTV9RU0VUX1RYUV9EUkJMX1AxKF9fbikgXAorCShIUU1fUVNFVDBfVFhRX0RSQkxfUDEgKyAoX19uKSAqIChIUU1fUVNFVDFfVFhRX0RSQkxfUDEgLSBcCisJSFFNX1FTRVQwX1RYUV9EUkJMX1AxKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8xX1AxKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8xX1AxICsgKF9fbikgKiAoSFFNX1FTRVQxX0lCX0RSQkxfMV9QMSAtIFwKKwlIUU1fUVNFVDBfSUJfRFJCTF8xX1AxKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8yX1AxKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8yX1AxICsgKF9fbikgKiAoSFFNX1FTRVQxX0lCX0RSQkxfMl9QMSAtIFwKKwlIUU1fUVNFVDBfSUJfRFJCTF8yX1AxKSkKKworI2RlZmluZSBDUEVfUV9OVU0oX19mbiwgX19xKSAgKCgoX19mbikgPDwgMikgKyAoX19xKSkKKyNkZWZpbmUgUk1FX1FfTlVNKF9fZm4sIF9fcSkgICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCisjZGVmaW5lIENQRV9RX01BU0soX19xKSAgKChfX3EpICYgMHgzKQorI2RlZmluZSBSTUVfUV9NQVNLKF9fcSkgICgoX19xKSAmIDB4MykKKworCisvKgorICogUENJIE1TSS1YIHZlY3RvciBkZWZpbmVzCisgKi8KK2VudW0geworICAgIEJGQV9NU0lYX0NQRV9RMCA9IDAsCisgICAgQkZBX01TSVhfQ1BFX1ExID0gMSwKKyAgICBCRkFfTVNJWF9DUEVfUTIgPSAyLAorICAgIEJGQV9NU0lYX0NQRV9RMyA9IDMsCisgICAgQkZBX01TSVhfUk1FX1EwID0gNCwKKyAgICBCRkFfTVNJWF9STUVfUTEgPSA1LAorICAgIEJGQV9NU0lYX1JNRV9RMiA9IDYsCisgICAgQkZBX01TSVhfUk1FX1EzID0gNywKKyAgICBCRkFfTVNJWF9MUFVfRVJSID0gOCwKKyAgICBCRkFfTVNJWF9DVF9NQVggPSA5LAorfTsKKworLyoKKyAqIEFuZCBjb3JyZXNwb25kaW5nIGhvc3QgaW50ZXJydXB0IHN0YXR1cyBiaXQgZmllbGQgZGVmaW5lcworICovCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EyICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMiAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EzICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTQgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNSAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E2ICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTcgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9FTUMgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0xQVTAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfTFBVMSAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9QU1MgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWF9MUFUwICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YX0xQVTEgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1gxX0xQVTAgICAgICAgICAgICAgICAweDAwNDAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWDFfTFBVMSAgICAgICAgICAgICAgIDB4MDA4MDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZlUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDBmZjAwVQorCisKKy8qCisgKiBjYXRhcHVsdCBtZW1vcnkgbWFwLgorICovCisjZGVmaW5lIExMX1BHTl9IUU0wICAgICAgICAgICAgICAgICAgICAgIDB4MDA5NgorI2RlZmluZSBMTF9QR05fSFFNMSAgICAgICAgICAgICAgICAgICAgICAweDAwOTcKKyNkZWZpbmUgUFNTX1NNRU1fUEFHRV9TVEFSVAkweDgwMDAKKyNkZWZpbmUgUFNTX1NNRU1fUEdOVU0oX3BnMCwgX21hKQkoKF9wZzApICsgKChfbWEpID4+IDE1KSkKKyNkZWZpbmUgUFNTX1NNRU1fUEdPRkYoX21hKQkoKF9tYSkgJiAweDdmZmYpCisKKy8qCisgKiBFbmQgb2YgY2F0YXB1bHQgbWVtb3J5IG1hcAorICovCisKKworI2VuZGlmIC8qIF9fQkZJX0NUUkVHX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mYWJyaWMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZhYnJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjY5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mYWJyaWMuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfRkFCUklDX0hfXworI2RlZmluZSBfX0JGSV9GQUJSSUNfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9mYWJyaWNfaDJpX21zZ3MgeworCUJGSV9GQUJSSUNfSDJJX0NSRUFURV9SRVEJPSAxLAorCUJGSV9GQUJSSUNfSDJJX0RFTEVURV9SRVEJPSAyLAorCUJGSV9GQUJSSUNfSDJJX1NFVEFVVEgJCT0gMywKK307CisKK2VudW0gYmZpX2ZhYnJpY19pMmhfbXNncyB7CisJQkZJX0ZBQlJJQ19JMkhfQ1JFQVRFX1JTUAk9IEJGQV9JMkhNKDEpLAorCUJGSV9GQUJSSUNfSTJIX0RFTEVURV9SU1AJPSBCRkFfSTJITSgyKSwKKwlCRklfRkFCUklDX0kySF9TRVRBVVRIX1JTUAk9IEJGQV9JMkhNKDMpLAorCUJGSV9GQUJSSUNfSTJIX09OTElORQkJPSBCRkFfSTJITSg0KSwKKwlCRklfRkFCUklDX0kySF9PRkZMSU5FCQk9IEJGQV9JMkhNKDUpLAorfTsKKworc3RydWN0IGJmaV9mYWJyaWNfY3JlYXRlX3JlcV9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4ICAgICAgICAgdmZfZW47CQkvKiAgdmlydHVhbCBmYWJyaWMgZW5hYmxlCSovCisJdTggICAgICAgICByc3ZkOworCXUxNiAgICAgICAgdmZfaWQ7CQkvKiAgdmlydHVhbCBmYWJyaWMgSUQJCSovCisJd3duX3QJCXB3d247CQkvKiAgcG9ydCBuYW1lCQkJKi8KKwl3d25fdAkJbnd3bjsJCS8qICBub2RlIG5hbWUJCQkqLworfTsKKworc3RydWN0IGJmaV9mYWJyaWNfY3JlYXRlX3JzcF9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgZmFicmljIGhhbmRsZQkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBmYWJyaWMgY3JlYXRlIHN0YXR1cwkqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfZmFicmljX2RlbGV0ZV9yZXFfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIGZhYnJpYyBoYW5kbGUJKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX2ZhYnJpY19kZWxldGVfcnNwX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBmYWJyaWMgaGFuZGxlCQkqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGZhYnJpYyBkZWxldGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCisjZGVmaW5lIEJGSV9GQUJSSUNfQVVUSFNFQ1JFVF9MRU4JNjQKK3N0cnVjdCBiZmlfZmFicmljX3NldGF1dGhfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmL3cgaGFuZGxlIG9mIGZhYnJpYwkqLworCXU4CQlhbGdvcml0aG07CisJdTgJCWdyb3VwOworCXU4CQlzZWNyZXRbQkZJX0ZBQlJJQ19BVVRIU0VDUkVUX0xFTl07Cit9OworCit1bmlvbiBiZmlfZmFicmljX2gyaV9tc2dfdSB7CisJYmZpX21zZ190CQkqbXNnOworCXN0cnVjdCBiZmlfZmFicmljX2NyZWF0ZV9yZXFfcwkqY3JlYXRlX3JlcTsKKwlzdHJ1Y3QgYmZpX2ZhYnJpY19kZWxldGVfcmVxX3MJKmRlbGV0ZV9yZXE7Cit9OworCit1bmlvbiBiZmlfZmFicmljX2kyaF9tc2dfdSB7CisJYmZpX21zZ190CQkqbXNnOworCXN0cnVjdCBiZmlfZmFicmljX2NyZWF0ZV9yc3BfcwkqY3JlYXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX2ZhYnJpY19kZWxldGVfcnNwX3MJKmRlbGV0ZV9yc3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfRkFCUklDX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmNwaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMwNTlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmNwaW0uaApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0ZDUElNX0hfXworI2RlZmluZSBfX0JGSV9GQ1BJTV9IX18KKworI2luY2x1ZGUgImJmaS5oIgorI2luY2x1ZGUgPHByb3RvY29sL2ZjcC5oPgorCisjcHJhZ21hIHBhY2soMSkKKworLyoKKyAqIEluaXRpYXRvciBtb2RlIEktVCBuZXh1cyBpbnRlcmZhY2UgZGVmaW5lcy4KKyAqLworCitlbnVtIGJmaV9pdG5pbV9oMmkgeworCUJGSV9JVE5JTV9IMklfQ1JFQVRFX1JFUSA9IDEsCS8qICBpLXQgbmV4dXMgY3JlYXRpb24gKi8KKwlCRklfSVROSU1fSDJJX0RFTEVURV9SRVEgPSAyLAkvKiAgaS10IG5leHVzIGRlbGV0aW9uICovCit9OworCitlbnVtIGJmaV9pdG5pbV9pMmggeworCUJGSV9JVE5JTV9JMkhfQ1JFQVRFX1JTUCA9IEJGQV9JMkhNKDEpLAorCUJGSV9JVE5JTV9JMkhfREVMRVRFX1JTUCA9IEJGQV9JMkhNKDIpLAorCUJGSV9JVE5JTV9JMkhfU0xFUl9FVkVOVCA9IEJGQV9JMkhNKDMpLAorfTsKKworc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmL3cgaGFuZGxlIGZvciBpdG5pbQkgKi8KKwl1OCAgICAgICAgIGNsYXNzOwkJLyogIEZDIGNsYXNzIGZvciBJTwkJICovCisJdTggICAgICAgICBzZXFfcmVjOwkvKiAgc2VxdWVuY2UgcmVjb3Zlcnkgc3VwcG9ydAkgKi8KKwl1OCAgICAgICAgIG1zZ19ubzsJCS8qICBzZXEgaWQgb2YgdGhlIG1zZwkJICovCit9OworCitzdHJ1Y3QgYmZpX2l0bmltX2NyZWF0ZV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBiZmEgaGFuZGxlIGZvciBpdG5pbQkgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBmY3AgcmVxdWVzdCBzdGF0dXMJCSAqLworCXU4ICAgICAgICAgc2VxX2lkOwkJLyogIHNlcSBpZCBvZiB0aGUgbXNnCQkgKi8KK307CisKK3N0cnVjdCBiZmlfaXRuaW1fZGVsZXRlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZi93IGl0bmltIGhhbmRsZQkJICovCisJdTggICAgICAgICBzZXFfaWQ7CQkvKiAgc2VxIGlkIG9mIHRoZSBtc2cJCSAqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfaXRuaW1fZGVsZXRlX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGJmYSBoYW5kbGUgZm9yIGl0bmltCSAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGZjcCByZXF1ZXN0IHN0YXR1cwkJICovCisJdTggICAgICAgICBzZXFfaWQ7CQkvKiAgc2VxIGlkIG9mIHRoZSBtc2cJCSAqLworfTsKKworc3RydWN0IGJmaV9pdG5pbV9zbGVyX2V2ZW50X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgYmZhIGhhbmRsZSBmb3IgaXRuaW0JICovCisJdTE2ICAgICAgICByc3ZkOworfTsKKwordW5pb24gYmZpX2l0bmltX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcmVxX3MgKmNyZWF0ZV9yZXE7CisJc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcmVxX3MgKmRlbGV0ZV9yZXE7CisJc3RydWN0IGJmaV9tc2dfcyAgICAgICptc2c7Cit9OworCit1bmlvbiBiZmlfaXRuaW1faTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX2l0bmltX2NyZWF0ZV9yc3BfcyAqY3JlYXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX2l0bmltX2RlbGV0ZV9yc3BfcyAqZGVsZXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX2l0bmltX3NsZXJfZXZlbnRfcyAqc2xlcl9ldmVudDsKKwlzdHJ1Y3QgYmZpX21zZ19zICAgICAgKm1zZzsKK307CisKKy8qCisgKiBJbml0aWF0b3IgbW9kZSBJTyBpbnRlcmZhY2UgZGVmaW5lcy4KKyAqLworCitlbnVtIGJmaV9pb2ltX2gyaSB7CisJQkZJX0lPSU1fSDJJX0lPQUJPUlRfUkVRID0gMSwJLyogIElPIGFib3J0IHJlcXVlc3QJICovCisJQkZJX0lPSU1fSDJJX0lPQ0xFQU5VUF9SRVEgPSAyLAkvKiAgSU8gY2xlYW51cCByZXF1ZXN0CSAqLworfTsKKworZW51bSBiZmlfaW9pbV9pMmggeworCUJGSV9JT0lNX0kySF9JT19SU1AgPSBCRkFfSTJITSgxKSwJLyogIG5vbi1mcCBJTyByZXNwb25zZQkgKi8KKwlCRklfSU9JTV9JMkhfSU9BQk9SVF9SU1AgPSBCRkFfSTJITSgyKSwvKiAgQUJPUlQgcnNwCSAqLworfTsKKworLyoqCisgKiBJTyBjb21tYW5kIERJRiBpbmZvCisgKi8KK3N0cnVjdCBiZmlfaW9pbV9kaWZfcyB7CisJdTMyCWRpZl9pbmZvWzRdOworfTsKKworLyoqCisgKiBGQ1AgSU8gbWVzc2FnZXMgb3ZlcnZpZXcKKyAqCisgKiBAbm90ZQorICogLSBNYXggQ0RCIGxlbmd0aCBzdXBwb3J0ZWQgaXMgNjQgYnl0ZXMuCisgKiAtIFNDU0kgTGlua2VkIGNvbW1hbmRzIGFuZCBTQ1NJIGJpLWRpcmVjdGlvbmFsIENvbW1hbmRzIG5vdAorICogCSBzdXBwb3J0ZWQuCisgKgorICovCitzdHJ1Y3QgYmZpX2lvaW1fcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBpb190YWc7CQkvKiAgSS9PIHRhZwkJCSAqLworCXUxNiAgICAgICAgcnBvcnRfaGRsOwkvKiAgaXRuaW0vcnBvcnQgZmlybXdhcmUgaGFuZGxlICovCisJc3RydWN0IGZjcF9jbW5kX3MgY21uZDsJCS8qICBJTyByZXF1ZXN0IGluZm8JCSAqLworCisJLyoqCisJICogU0cgZWxlbWVudHMgYXJyYXkgd2l0aGluIHRoZSBJTyByZXF1ZXN0IG11c3QgYmUgZG91YmxlIHdvcmQKKwkgKiBhbGlnbmVkLiBUaGlzIGFsaWdtZW50IGlzIHJlcXVpcmVkIHRvIG9wdGltaXplIFNHTSBzZXR1cCBmb3IgdGhlIElPLgorCSAqLworCXN0cnVjdCBiZmlfc2dlX3MgICBzZ2VzW0JGSV9TR0VfSU5MSU5FX01BWF07CisJdTggICAgICAgICBpb190aW1lb3V0OworCXU4ICAgICAgICAgZGlmX2VuOworCXU4ICAgICAgICAgcnN2ZF9hWzJdOworCXN0cnVjdCBiZmlfaW9pbV9kaWZfcyAgZGlmOworfTsKKworLyoqCisgKiAJVGhpcyB0YWJsZSBzaG93cyB2YXJpb3VzIElPIHN0YXR1cyBjb2RlcyBmcm9tIGZpcm13YXJlIGFuZCB0aGVpcgorICoJbWVhbmluZy4gSG9zdCBkcml2ZXIgY2FuIHVzZSB0aGVzZSBzdGF0dXMgY29kZXMgdG8gZnVydGhlciBwcm9jZXNzCisgKglJTyBjb21wbGV0aW9ucy4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX09LCQk6IElPIGNvbXBsZXRlZCB3aXRoIGVycm9yIGZyZWUgU0NTSSAmCisgKgkJCQkJICAgdHJhbnNwb3J0IHN0YXR1cy4KKyAqIAkJCQkJICAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZBX0lPSU1fU1RTX1NDU0lfRVJSCQk6IElPIGNvbXBsZXRlZCB3aXRoIHNjc2kgZXJyb3IuCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX0hPU1RfQUJPUlRFRAk6IElPIHdhcyBhYm9ydGVkIHN1Y2Nlc3NmdWxseSBkdWUgdG8KKyAqCQkJCQkgICBob3N0IHJlcXVlc3QuCisgKiAJCQkJCSAgIC0gaW8tdGFnIGNhbm5vdCBiZSByZXVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfQUJPUlRFRAkJOiBJTyB3YXMgYWJvcnRlZCBzdWNjZXNzZnVsbHkKKyAqCQkJCQkgICBpbnRlcm5hbGx5IGJ5IGYvdy4KKyAqIAkJCQkJICAgLSBpby10YWcgY2Fubm90IGJlIHJldXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19USU1FRE9VVAk6IElPIHRpbWVkb3V0IGFuZCBBQlRTL1JSUSBpcyBoYXBwZW5pbmcKKyAqCQkJCQkgICBpbiB0aGUgZmlybXdhcmUgYW5kCisgKiAJCQkJCSAgIC0gaW8tdGFnIGNhbm5vdCBiZSByZXVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfU1FFUl9ORUVERUQJOiBGaXJtd2FyZSBjb3VsZCBub3QgcmVjb3ZlciB0aGUgSU8KKyAqCQkJCQkgIHdpdGggc2VxdWVuY2UgbGV2ZWwgZXJyb3IKKyAqIAkJCQkJICBsb2dpYyBhbmQgaGVuY2UgaG9zdCBuZWVkcyB0byByZXRyeQorICoJCQkJCSAgdGhpcyBJTyB3aXRoIGEgZGlmZmVyZW50IElPIHRhZworICogCQkJCQkgIC0gaW8tdGFnIGNhbm5vdCBiZSB1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX05FWFVTX0FCT1JUCTogU2Vjb25kIExldmVsIEVycm9yIFJlY292ZXJ5IGZyb20gaG9zdAorICoJCQkJCSAgaXMgcmVxdWlyZWQgYmVjYXVzZSAyIGNvbnNlY3V0aXZlIEFCVFMKKyAqCQkJCQkgIHRpbWVkb3V0IGFuZCBob3N0IG5lZWRzIGxvZ291dCBhbmQKKyAqCQkJCQkgIHJlLWxvZ2luIHdpdGggdGhlIHRhcmdldAorICogCQkJCQkgIC0gaW8tdGFnIGNhbm5vdCBiZSB1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1VOREVSUlVOCTogSU8gY29tcGxldGVkIHdpdGggU0NTSSBzdGF0dXMgZ29vZCwKKyAqCQkJCQkgIGJ1dCB0aGUgZGF0YSB0cmFuZmVycmVkIGlzIGxlc3MgdGhhbgorICoJCQkJCSAgdGhlIGZjcCBkYXRhIGxlbmd0aCBpbiB0aGUgY29tbWFuZC4KKyAqCQkJCQkgIGV4LiBTQ1NJIElOUVVJUlkgd2hlcmUgdHJhbnNmZXJyZWQKKyAqCQkJCQkgIGRhdGEgbGVuZ3RoIGFuZCByZXNpZHVlIGNvdW50IGluIEZDUAorICoJCQkJCSAgcmVzcG9uc2UgYWNjb3VudHMgZm9yIHRvdGFsIGZjcC1kbAorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGSV9JT0lNX1NUU19PVkVSUlVOCTogSU8gY29tcGxldGVkIHdpdGggU0NTSSBzdGF0dXMgZ29vZCwKKyAqCQkJCQkgIGJ1dCB0aGUgZGF0YSB0cmFuc2VycmVkIGlzIG1vcmUgdGhhbgorICoJCQkJCSAgZmNwIGRhdGEgbGVuZ3RoIGluIHRoZSBjb21tYW5kLiBleC4KKyAqCQkJCQkgIFRBUEUgSU9zIHdoZXJlIGJsb2NrcyBjYW4gb2YgdW5lcXVhbAorICoJCQkJCSAgbGVuZ3Rocy4KKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRklfSU9JTV9TVFNfUkVTX0ZSRUUJOiBGaXJtd2FyZSBoYXMgY29tcGxldGVkIHVzaW5nIGlvLXRhZworICoJCQkJCSAgZHVyaW5nIGFib3J0IHByb2Nlc3MKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRklfSU9JTV9TVFNfUFJPVE9fRVJSCTogRmlybXdhcmUgZGV0ZWN0ZWQgYSBwcm90b2NvbCBlcnJvci4KKyAqCQkJCQkgIGV4IHRhcmdldCBzZW50IG1vcmUgZGF0YSB0aGFuCisgKgkJCQkJICByZXF1ZXN0ZWQsIG9yIHRoZXJlIHdhcyBkYXRhIGZyYW1lCisgKgkJCQkJICBsb3NzIGFuZCBvdGhlciByZWFzb25zCisgKiAJCQkJCSAgLSBpby10YWcgY2Fubm90IGJlIHVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfRElGX0VSUgk6IEZpcndtYXJlIGRldGVjdGVkIERJRiBlcnJvci4gZXg6IERJRgorICogCQkJCQkgIENSQyBlcnIgb3IgUmVmIFRhZyBlcnIgb3IgQXBwIHRhZyBlcnIuCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZBX0lPSU1fU1RTX1RTS19NR1RfQUJPUlQJOiBJTyB3YXMgYWJvcnRlZCBiZWNhdXNlIG9mIFRhc2sKKyAqCQkJCQkgIE1hbmFnZW1lbnQgY29tbWFuZCBmcm9tIHRoZSBob3N0CisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1VUQUcJCTogRmlybXdhcmUgZG9lcyBub3Qga25vdyBhYm91dCB0aGlzCisgKgkJCQkJICBpb190YWcuCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqLworZW51bSBiZmlfaW9pbV9zdGF0dXMgeworCUJGSV9JT0lNX1NUU19PSyA9IDAsCisJQkZJX0lPSU1fU1RTX0hPU1RfQUJPUlRFRCA9IDEsCisJQkZJX0lPSU1fU1RTX0FCT1JURUQgPSAyLAorCUJGSV9JT0lNX1NUU19USU1FRE9VVCA9IDMsCisJQkZJX0lPSU1fU1RTX1JFU19GUkVFID0gNCwKKwlCRklfSU9JTV9TVFNfU1FFUl9ORUVERUQgPSA1LAorCUJGSV9JT0lNX1NUU19QUk9UT19FUlIgPSA2LAorCUJGSV9JT0lNX1NUU19VVEFHID0gNywKKwlCRklfSU9JTV9TVFNfUEFUSFRPViA9IDgsCit9OworCisjZGVmaW5lIEJGSV9JT0lNX1NOU0xFTgkoMjU2KQorLyoqCisgKiBJL08gcmVzcG9uc2UgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkgCSAqLworCXUxNiAgICAgICAgaW9fdGFnOwkJLyogIGNvbXBsZXRlZCBJTyB0YWcJCSAqLworCXUxNiAgICAgICAgYmZhX3Jwb3J0X2huZGw7CS8qICByZWxlYXRlZCBycG9ydCBoYW5kbGUJICovCisJdTggICAgICAgICBpb19zdGF0dXM7CS8qICBJTyBjb21wbGV0aW9uIHN0YXR1cwkgKi8KKwl1OCAgICAgICAgIHJldXNlX2lvX3RhZzsJLyogIElPIHRhZyBjYW4gYmUgcmV1c2VkICAgICAgICAqLworCXUxNglhYm9ydF90YWc7CS8qICBob3N0IGFib3J0IHJlcXVlc3QgdGFnICAgICAgKi8KKwl1OAkJc2NzaV9zdGF0dXM7CS8qICBzY3NpIHN0YXR1cyBmcm9tIHRhcmdldAkgKi8KKwl1OAkJc25zX2xlbjsJLyogIHNjc2kgc2Vuc2UgbGVuZ3RoCQkgKi8KKwl1OAkJcmVzaWRfZmxhZ3M7CS8qICBJTyByZXNpZHVlIGZsYWdzCQkgKi8KKwl1OAkJcnN2ZF9hOworCXUzMglyZXNpZHVlOwkvKiAgSU8gcmVzaWR1YWwgbGVuZ3RoIGluIGJ5dGVzICovCisJdTMyCXJzdmRfYlszXTsKK307CisKK3N0cnVjdCBiZmlfaW9pbV9hYm9ydF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOyAgICAgICAgICAvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICovCisJdTE2ICAgICAgICBpb190YWc7ICAgICAgICAgLyogIEkvTyB0YWcgICAgICAgICAgICAqLworCXUxNiAgICAgICAgYWJvcnRfdGFnOyAgICAgIC8qICB1bmlxdWUgcmVxdWVzdCB0YWcgKi8KK307CisKKy8qCisgKiBJbml0aWF0b3IgbW9kZSB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCBpbnRlcmZhY2UgZGVmaW5lcy4KKyAqLworCitlbnVtIGJmaV90c2tpbV9oMmkgeworCUJGSV9UU0tJTV9IMklfVE1fUkVRICAgID0gMSwgLyogIHRhc2stbWdtdCBjb21tYW5kICAgICAgICAgKi8KKwlCRklfVFNLSU1fSDJJX0FCT1JUX1JFUSA9IDIsIC8qICB0YXNrLW1nbXQgY29tbWFuZCAgICAgICAgICovCit9OworCitlbnVtIGJmaV90c2tpbV9pMmggeworCUJGSV9UU0tJTV9JMkhfVE1fUlNQID0gQkZBX0kySE0oMSksCit9OworCitzdHJ1Y3QgYmZpX3Rza2ltX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7ICAgICAgICAgICAgIC8qICBDb21tb24gbXNnIGhlYWRlciAgICAgICAgICAqLworCXUxNiAgICAgICAgdHNrX3RhZzsgICAgICAgIC8qICB0YXNrIG1hbmFnZW1lbnQgdGFnICAgICAgICAqLworCXUxNiAgICAgICAgaXRuX2ZoZGw7ICAgICAgIC8qICBpdG4gZmlybXdhcmUgaGFuZGxlICAgICAgICAqLworCWx1bl90ICAgICAgICAgICBsdW47ICAgICAgICAgICAgLyogIExVIG51bWJlciAgICAgICAgICAgICAgICAgICovCisJdTggICAgICAgICB0bV9mbGFnczsgICAgICAgLyogIHNlZSBmY3BfdG1fY21uZF90ICAgICAgICAgICovCisJdTggICAgICAgICB0X3NlY3M7ICAgICAgICAgLyogIFRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcyAgICovCisJdTggICAgICAgICByc3ZkWzJdOworfTsKKworc3RydWN0IGJmaV90c2tpbV9hYm9ydHJlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7ICAgICAgICAgICAgIC8qICBDb21tb24gbXNnIGhlYWRlciAgICAgICAgICAqLworCXUxNiAgICAgICAgdHNrX3RhZzsgICAgICAgIC8qICB0YXNrIG1hbmFnZW1lbnQgdGFnICAgICAgICAqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKK2VudW0gYmZpX3Rza2ltX3N0YXR1cyB7CisJLyoKKwkgKiBGb2xsb3dpbmcgYXJlIEZDUC00IHNwZWMgZGVmaW5lZCBzdGF0dXMgY29kZXMsCisJICogKipETyBOT1QgQ0hBTkdFIFRIRU0gKioKKwkgKi8KKwlCRklfVFNLSU1fU1RTX09LICAgICAgID0gMCwKKwlCRklfVFNLSU1fU1RTX05PVF9TVVBQID0gNCwKKwlCRklfVFNLSU1fU1RTX0ZBSUxFRCAgID0gNSwKKworCS8qKgorCSAqIERlZmluZWQgYnkgQkZBCisJICovCisJQkZJX1RTS0lNX1NUU19USU1FT1VUICA9IDEwLCAgICAvKiAgVE0gcmVxdWVzdCB0aW1lZG91dCAgICAgKi8KKwlCRklfVFNLSU1fU1RTX0FCT1JURUQgID0gMTEsICAgIC8qICBBYm9ydGVkIG9uIGhvc3QgcmVxdWVzdCAqLworfTsKKworc3RydWN0IGJmaV90c2tpbV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIHRza190YWc7CS8qICB0YXNrIG1nbXQgY21uZCB0YWcJCSAqLworCXU4ICAgICAgICAgdHNrX3N0YXR1czsJLyogIEByZWYgYmZpX3Rza2ltX3N0YXR1cyAqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9GQ1BJTV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmN4cC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmN4cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZTk5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mY3hwLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0ZDWFBfSF9fCisjZGVmaW5lIF9fQkZJX0ZDWFBfSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2ZjeHBfaDJpIHsKKwlCRklfRkNYUF9IMklfU0VORF9SRVEgPSAxLAorfTsKKworZW51bSBiZmlfZmN4cF9pMmggeworCUJGSV9GQ1hQX0kySF9TRU5EX1JTUCA9IEJGQV9JMkhNKDEpLAorfTsKKworI2RlZmluZSBCRkFfRkNYUF9NQVhfU0dFUwkyCisKKy8qKgorICogRkNYUCBzZW5kIHJlcXVlc3Qgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmlfZmN4cF9zZW5kX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXUxNiAgICAgICAgZmN4cF90YWc7CS8qICBkcml2ZXIgcmVxdWVzdCB0YWcJCSAgICAqLworCXUxNiAgICAgICAgbWF4X2ZybXN6OwkvKiAgbWF4IHNlbmQgZnJhbWUgc2l6ZQkgICAgKi8KKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZzYW4gdGFnIGlmIGFwcGxpY2FibGUJICAgICovCisJdTE2ICAgICAgICBycG9ydF9md19obmRsOwkvKiAgRlcgSGFuZGxlIGZvciB0aGUgcmVtb3RlIHBvcnQgICovCisJdTggICAgICAgICBjbGFzczsJCS8qICBGQyBjbGFzcyB1c2VkIGZvciByZXEvcnNwCSAgICAqLworCXU4ICAgICAgICAgcnNwX3RpbWVvdXQ7CS8qICB0aW1lb3V0IGluIHNlY3MsIDAtbm8gcmVzcG9uc2UgKi8KKwl1OCAgICAgICAgIGN0czsJCS8qICBjb250aW51ZSBzZXF1ZW5jZQkJICAgICovCisJdTggICAgICAgICBscF90YWc7CQkvKiAgbHBvcnQgdGFnCQkJICAgICovCisJc3RydWN0IGZjaHNfcyAgIGZjaHM7CQkvKiAgcmVxdWVzdCBGQyBoZWFkZXIgc3RydWN0dXJlICAgICovCisJdTMyICAgICAgICByZXFfbGVuOwkvKiAgcmVxdWVzdCBwYXlsb2FkIGxlbmd0aAkgICAgKi8KKwl1MzIgICAgICAgIHJzcF9tYXhsZW47CS8qICBtYXggcmVzcG9uc2UgbGVuZ3RoIGV4cGVjdGVkICAgKi8KKwlzdHJ1Y3QgYmZpX3NnZV9zICAgcmVxX3NnZVtCRkFfRkNYUF9NQVhfU0dFU107CS8qICByZXF1ZXN0IGJ1ZiAgICAqLworCXN0cnVjdCBiZmlfc2dlX3MgICByc3Bfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsJLyogIHJlc3BvbnNlIGJ1ZiAgICovCit9OworCisvKioKKyAqIEZDWFAgc2VuZCByZXNwb25zZSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJICAgICovCisJdTE2ICAgICAgICBmY3hwX3RhZzsJLyogIHNlbmQgcmVxdWVzdCB0YWcJCSAgICAqLworCXU4ICAgICAgICAgcmVxX3N0YXR1czsJLyogIHJlcXVlc3Qgc3RhdHVzCQkgICAgKi8KKwl1OCAgICAgICAgIHJzdmQ7CisJdTMyICAgICAgICByc3BfbGVuOwkvKiAgYWN0dWFsIHJlc3BvbnNlIGxlbmd0aAkgICAgKi8KKwl1MzIgICAgICAgIHJlc2lkdWVfbGVuOwkvKiAgcmVzaWR1YWwgcmVzcG9uc2UgbGVuZ3RoCSAgICAqLworCXN0cnVjdCBmY2hzX3MgICBmY2hzOwkJLyogIHJlc3BvbnNlIEZDIGhlYWRlciBzdHJ1Y3R1cmUgICAqLworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0ZDWFBfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2ZTljMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvYy5oCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfSU9DX0hfXworI2RlZmluZSBfX0JGSV9JT0NfSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfaW9jX2gyaV9tc2dzIHsKKwlCRklfSU9DX0gySV9FTkFCTEVfUkVRIAkJPSAxLAorCUJGSV9JT0NfSDJJX0RJU0FCTEVfUkVRIAk9IDIsCisJQkZJX0lPQ19IMklfR0VUQVRUUl9SRVEgCT0gMywKKwlCRklfSU9DX0gySV9EQkdfU1lOQwkgCT0gNCwKKwlCRklfSU9DX0gySV9EQkdfRFVNUAkgCT0gNSwKK307CisKK2VudW0gYmZpX2lvY19pMmhfbXNncyB7CisJQkZJX0lPQ19JMkhfRU5BQkxFX1JFUExZCT0gQkZBX0kySE0oMSksCisJQkZJX0lPQ19JMkhfRElTQUJMRV9SRVBMWSAJPSBCRkFfSTJITSgyKSwKKwlCRklfSU9DX0kySF9HRVRBVFRSX1JFUExZIAk9IEJGQV9JMkhNKDMpLAorCUJGSV9JT0NfSTJIX1JFQURZX0VWRU5UIAk9IEJGQV9JMkhNKDQpLAorCUJGSV9JT0NfSTJIX0hCRUFUCQk9IEJGQV9JMkhNKDUpLAorfTsKKworLyoqCisgKiBCRklfSU9DX0gySV9HRVRBVFRSX1JFUSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jX2dldGF0dHJfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zCW1oOworCXVuaW9uIGJmaV9hZGRyX3UJYXR0cl9hZGRyOworfTsKKworc3RydWN0IGJmaV9pb2NfYXR0cl9zIHsKKwl3d25fdCAgICAgICAgICAgbWZnX3d3bjsKKwltYWNfdAkJbWZnX21hYzsKKwl1MTYJcnN2ZF9hOworCWNoYXIgICAgICAgICAgICBicmNkX3NlcmlhbG51bVtTVFJTWihCRkFfTUZHX1NFUklBTE5VTV9TSVpFKV07CisJdTggICAgICAgICBwY2llX2dlbjsKKwl1OCAgICAgICAgIHBjaWVfbGFuZXNfb3JpZzsKKwl1OCAgICAgICAgIHBjaWVfbGFuZXM7CisJdTggICAgICAgICByeF9iYmNyZWRpdDsJLyogIHJlY2VpdmUgYnVmZmVyIGNyZWRpdHMgKi8KKwl1MzIgICAgICAgIGFkYXB0ZXJfcHJvcDsJLyogIGFkYXB0ZXIgcHJvcGVydGllcyAgICAgKi8KKwl1MTYgICAgICAgIG1heGZyc2l6ZTsJLyogIG1heCByZWNlaXZlIGZyYW1lIHNpemUgKi8KKwljaGFyICAgICAgICAgCWFzaWNfcmV2OworCXU4ICAgICAgICAgcnN2ZF9iOworCWNoYXIgICAgICAgICAgICBmd192ZXJzaW9uW0JGQV9WRVJTSU9OX0xFTl07CisJY2hhciAgICAgICAgICAgIG9wdHJvbV92ZXJzaW9uW0JGQV9WRVJTSU9OX0xFTl07CisJc3RydWN0IGJmYV9tZmdfdnBkX3MJdnBkOworfTsKKworLyoqCisgKiBCRklfSU9DX0kySF9HRVRBVFRSX1JFUExZIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NfZ2V0YXR0cl9yZXBseV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICAgICAgKi8KKwl1OAkJc3RhdHVzOwkvKiAgY2ZnIHJlcGx5IHN0YXR1cyAgICAgICAgICAgKi8KKwl1OAkJcnN2ZFszXTsKK307CisKKy8qKgorICogRmlybXdhcmUgbWVtb3J5IHBhZ2Ugb2Zmc2V0cworICovCisjZGVmaW5lIEJGSV9JT0NfU01FTV9QRzBfQ0IJKDB4NDApCisjZGVmaW5lIEJGSV9JT0NfU01FTV9QRzBfQ1QJKDB4MTgwKQorCisvKioKKyAqIEZpcm13YXJlIHRyYWNlIG9mZnNldAorICovCisjZGVmaW5lIEJGSV9JT0NfVFJDX09GRgkJKDB4NGIwMCkKKyNkZWZpbmUgQkZJX0lPQ19UUkNfRU5UUwkyNTYKKworI2RlZmluZSBCRklfSU9DX0ZXX1NJR05BVFVSRQkoMHhiZmFkYmZhZCkKKyNkZWZpbmUgQkZJX0lPQ19NRDVTVU1fU1oJNAorc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgeworCXUzMiAgICAgICAgc2lnbmF0dXJlOwkvKiAgY29uc3RhbnQgc2lnbmF0dXJlICovCisJdTMyICAgICAgICByc3ZkX2E7CisJdTMyICAgICAgICBleGVjOwkJLyogIGV4ZWMgdmVjdG9yICAgICAgICAqLworCXUzMiAgICAgICAgcGFyYW07CQkvKiAgcGFyYW1ldGVycyAgICAgICAgICovCisJdTMyICAgICAgICByc3ZkX2JbNF07CisJdTMyICAgICAgICBtZDVzdW1bQkZJX0lPQ19NRDVTVU1fU1pdOworfTsKKworLyoqCisgKiAgQkZJX0lPQ19JMkhfUkVBRFlfRVZFTlQgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY19yZHlfZXZlbnRfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJCS8qICBjb21tb24gbXNnIGhlYWRlciAqLworCXU4ICAgICAgICAgaW5pdF9zdGF0dXM7CS8qICBpbml0IGV2ZW50IHN0YXR1cyAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKK307CisKK3N0cnVjdCBiZmlfaW9jX2hiZWF0X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MzIJICAgaGJfY291bnQ7CS8qICBjdXJyZW50IGhlYXJ0IGJlYXQgY291bnQJKi8KK307CisKKy8qKgorICogSU9DIGhhcmR3YXJlL2Zpcm13YXJlIHN0YXRlCisgKi8KK2VudW0gYmZpX2lvY19zdGF0ZSB7CisJQkZJX0lPQ19VTklOSVQgCSA9IDAsCQkvKiAgbm90IGluaXRpYWxpemVkICAgICAgICAgICAgICAgICAqLworCUJGSV9JT0NfSU5JVElORyAJID0gMSwJLyogIGgvdyBpcyBiZWluZyBpbml0aWFsaXplZCAgICAgICAgKi8KKwlCRklfSU9DX0hXSU5JVCAJID0gMiwJCS8qICBoL3cgaXMgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICovCisJQkZJX0lPQ19DRkcgCSA9IDMsCQkvKiAgSU9DIGNvbmZpZ3VyYXRpb24gaW4gcHJvZ3Jlc3MgICAqLworCUJGSV9JT0NfT1AgCQkgPSA0LAkvKiAgSU9DIGlzIG9wZXJhdGlvbmFsICAgICAgICAgICAgICAqLworCUJGSV9JT0NfRElTQUJMSU5HIAkgPSA1LAkvKiAgSU9DIGlzIGJlaW5nIGRpc2FibGVkICAgICAgICAgICAqLworCUJGSV9JT0NfRElTQUJMRUQgCSA9IDYsCS8qICBJT0MgaXMgZGlzYWJsZWQgICAgICAgICAgICAgICAgICovCisJQkZJX0lPQ19DRkdfRElTQUJMRUQgPSA3LAkvKiAgSU9DIGlzIGJlaW5nIGRpc2FibGVkO3RyYW5zaWVudCAqLworCUJGSV9JT0NfSEJGQUlMICAgICAgID0gOCwJLyogIElPQyBoZWFydC1iZWF0IGZhaWx1cmUgICAgICAgICAgKi8KKwlCRklfSU9DX01FTVRFU1QgICAgICA9IDksCS8qICBJT0MgaXMgZG9pbmcgbWVtdGVzdCAgICAgICAgICAgICovCit9OworCisjZGVmaW5lIEJGSV9JT0NfRU5ESUFOX1NJRyAgMHgxMjM0NTY3OAorCitlbnVtIHsKKwlCRklfQURBUFRFUl9UWVBFX0ZDICAgPSAweDAxLAkJLyogIEZDIGFkYXB0ZXJzICAgICAgICAgICAqLworCUJGSV9BREFQVEVSX1RZUEVfTUsgICA9IDB4MGYwMDAwLAkvKiAgYWRhcHRlciB0eXBlIG1hc2sgICAgICovCisJQkZJX0FEQVBURVJfVFlQRV9TSCAgID0gMTYsCSAgICAgICAgLyogIGFkYXB0ZXIgdHlwZSBzaGlmdCAgICAqLworCUJGSV9BREFQVEVSX05QT1JUU19NSyA9IDB4ZmYwMCwJCS8qICBudW1iZXIgb2YgcG9ydHMgbWFzayAgKi8KKwlCRklfQURBUFRFUl9OUE9SVFNfU0ggPSA4LAkgICAgICAgIC8qICBudW1iZXIgb2YgcG9ydHMgc2hpZnQgKi8KKwlCRklfQURBUFRFUl9TUEVFRF9NSyAgPSAweGZmLAkJLyogIGFkYXB0ZXIgc3BlZWQgbWFzayAgICAqLworCUJGSV9BREFQVEVSX1NQRUVEX1NIICA9IDAsCSAgICAgICAgLyogIGFkYXB0ZXIgc3BlZWQgc2hpZnQgICAqLworCUJGSV9BREFQVEVSX1BST1RPICAgICA9IDB4MTAwMDAwLAkvKiAgcHJvdG90eXBlIGFkYXBhdGVycyAgICovCisJQkZJX0FEQVBURVJfVFRWICAgICAgID0gMHgyMDAwMDAsCS8qICBUVFYgZGVidWcgY2FwYWJsZSAgICAgKi8KKwlCRklfQURBUFRFUl9VTlNVUFAgICAgPSAweDQwMDAwMCwJLyogIHVua25vd24gYWRhcHRlciB0eXBlICAqLworfTsKKworI2RlZmluZSBCRklfQURBUFRFUl9HRVRQKF9fcHJvcCxfX2FkYXBfcHJvcCkgICAgICAgICAgCQlcCisgICAgKCgoX19hZGFwX3Byb3ApICYgQkZJX0FEQVBURVJfICMjIF9fcHJvcCAjIyBfTUspID4+ICAgICAgICAgXAorICAgICBCRklfQURBUFRFUl8gIyMgX19wcm9wICMjIF9TSCkKKyNkZWZpbmUgQkZJX0FEQVBURVJfU0VUUChfX3Byb3AsIF9fdmFsKSAgICAgICAgIAkJXAorICAgICgoX192YWwpIDw8IEJGSV9BREFQVEVSXyAjIyBfX3Byb3AgIyMgX1NIKQorI2RlZmluZSBCRklfQURBUFRFUl9JU19QUk9UTyhfX2FkYXBfdHlwZSkgICAJCQlcCisgICAgKChfX2FkYXBfdHlwZSkgJiBCRklfQURBUFRFUl9QUk9UTykKKyNkZWZpbmUgQkZJX0FEQVBURVJfSVNfVFRWKF9fYWRhcF90eXBlKSAgICAgCQkJXAorICAgICgoX19hZGFwX3R5cGUpICYgQkZJX0FEQVBURVJfVFRWKQorI2RlZmluZSBCRklfQURBUFRFUl9JU19VTlNVUFAoX19hZGFwX3R5cGUpICAJCQlcCisgICAgKChfX2FkYXBfdHlwZSkgJiBCRklfQURBUFRFUl9VTlNVUFApCisjZGVmaW5lIEJGSV9BREFQVEVSX0lTX1NQRUNJQUwoX19hZGFwX3R5cGUpICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoX19hZGFwX3R5cGUpICYgKEJGSV9BREFQVEVSX1RUViB8IEJGSV9BREFQVEVSX1BST1RPIHwgICAgIFwKKwkJCUJGSV9BREFQVEVSX1VOU1VQUCkpCisKKy8qKgorICogQkZJX0lPQ19IMklfRU5BQkxFX1JFUSAmIEJGSV9JT0NfSDJJX0RJU0FCTEVfUkVRIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zCW1oOworCXU4CQkJaW9jX2NsYXNzOworCXU4ICAgICAgICAgCXJzdmRbM107Cit9OworCisvKioKKyAqIEJGSV9JT0NfSTJIX0VOQUJMRV9SRVBMWSAmIEJGSV9JT0NfSTJIX0RJU0FCTEVfUkVQTFkgbWVzc2FnZXMKKyAqLworc3RydWN0IGJmaV9pb2NfY3RybF9yZXBseV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgZW5hYmxlL2Rpc2FibGUgc3RhdHVzICovCisJdTggICAgICAgICByc3ZkWzNdOworfTsKKworI2RlZmluZSBCRklfSU9DX01TR1NaICAgOAorLyoqCisgKiBIMkkgTWVzc2FnZXMKKyAqLwordW5pb24gYmZpX2lvY19oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zIAltaDsKKwlzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIGVuYWJsZV9yZXE7CisJc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyBkaXNhYmxlX3JlcTsKKwlzdHJ1Y3QgYmZpX2lvY19nZXRhdHRyX3JlcV9zIGdldGF0dHJfcmVxOworCXUzMiAgICAgICAJCW1ib3htc2dbQkZJX0lPQ19NU0dTWl07Cit9OworCisvKioKKyAqIEkySCBNZXNzYWdlcworICovCit1bmlvbiBiZmlfaW9jX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAJbWg7CisJc3RydWN0IGJmaV9pb2NfcmR5X2V2ZW50X3MgCXJkeV9ldmVudDsKKwl1MzIgICAgICAgCQltYm94bXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0lPQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvY2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3NjBkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvY2ZjLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9JT0NGQ19IX18KKyNkZWZpbmUgX19CRklfSU9DRkNfSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jZmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2Jvb3QuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2lvY2ZjX2gyaV9tc2dzIHsKKwlCRklfSU9DRkNfSDJJX0NGR19SRVEgCQk9IDEsCisJQkZJX0lPQ0ZDX0gySV9HRVRfU1RBVFNfUkVRIAk9IDIsCisJQkZJX0lPQ0ZDX0gySV9DTEVBUl9TVEFUU19SRVEJPSAzLAorCUJGSV9JT0NGQ19IMklfU0VUX0lOVFJfUkVRIAk9IDQsCisJQkZJX0lPQ0ZDX0gySV9VUERBVEVRX1JFUSA9IDUsCit9OworCitlbnVtIGJmaV9pb2NmY19pMmhfbXNncyB7CisJQkZJX0lPQ0ZDX0kySF9DRkdfUkVQTFkJCT0gQkZBX0kySE0oMSksCisJQkZJX0lPQ0ZDX0kySF9HRVRfU1RBVFNfUlNQIAk9IEJGQV9JMkhNKDIpLAorCUJGSV9JT0NGQ19JMkhfQ0xFQVJfU1RBVFNfUlNQCT0gQkZBX0kySE0oMyksCisJQkZJX0lPQ0ZDX0kySF9VUERBVEVRX1JTUCA9IEJGQV9JMkhNKDUpLAorfTsKKworc3RydWN0IGJmaV9pb2NmY19jZmdfcyB7CisJdTggICAgICAgICBudW1fY3FzOyAJLyogIE51bWJlciBvZiBDUXMgdG8gYmUgdXNlZCAgICAgKi8KKwl1OCAgICAgICAgIHNlbnNlX2J1Zl9sZW47CS8qICBTQ1NJIHNlbnNlIGxlbmd0aCAgICAgICAgICAgICovCisJdTggICAgICAgICB0cnVua19lbmFibGVkOwkvKiAgcG9ydCB0cnVua2luZyBlbmFibGVkICAgICAgICAqLworCXU4ICAgICAgICAgdHJ1bmtfcG9ydHM7CS8qICB0cnVuayBwb3J0cyBiaXQgbWFwICAgICAgICAgICovCisJdTMyICAgICAgICBlbmRpYW5fc2lnOwkvKiAgZW5kaWFuIHNpZ25hdHVyZSBvZiBob3N0ICAgICAqLworCisJLyoqCisJICogUmVxdWVzdCBhbmQgcmVzcG9uc2UgY2lyY3VsYXIgcXVldWUgYmFzZSBhZGRyZXNzZXMsIHNpemUgYW5kCisJICogc2hhZG93IGluZGV4IHBvaW50ZXJzLgorCSAqLworCXVuaW9uIGJmaV9hZGRyX3UgIHJlcV9jcV9iYVtCRklfSU9DX01BWF9DUVNdOworCXVuaW9uIGJmaV9hZGRyX3UgIHJlcV9zaGFkb3dfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1MTYgICAgcmVxX2NxX2VsZW1zW0JGSV9JT0NfTUFYX0NRU107CisJdW5pb24gYmZpX2FkZHJfdSAgcnNwX2NxX2JhW0JGSV9JT0NfTUFYX0NRU107CisJdW5pb24gYmZpX2FkZHJfdSAgcnNwX3NoYWRvd19waVtCRklfSU9DX01BWF9DUVNdOworCXUxNiAgICByc3BfY3FfZWxlbXNbQkZJX0lPQ19NQVhfQ1FTXTsKKworCXVuaW9uIGJmaV9hZGRyX3UgIHN0YXRzX2FkZHI7CS8qICBETUEtYWJsZSBhZGRyZXNzIGZvciBzdGF0cwkgICovCisJdW5pb24gYmZpX2FkZHJfdSAgY2ZncnNwX2FkZHI7CS8qICBjb25maWcgcmVzcG9uc2UgZG1hIGFkZHJlc3MgICovCisJdW5pb24gYmZpX2FkZHJfdSAgaW9pbV9zbnNiYXNlOyAgLyogIElPIHNlbnNlIGJ1ZmZlciBiYXNlIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zIGludHJfYXR0cjsgLyogIElPQyBpbnRlcnJ1cHQgYXR0cmlidXRlcyAqLworfTsKKworLyoqCisgKiBCb290IHRhcmdldCB3d24gaW5mb3JtYXRpb24gZm9yIHRoaXMgcG9ydC4gVGhpcyBjb250YWlucyBlaXRoZXIgdGhlIHN0b3JlZAorICogb3IgZGlzY292ZXJlZCBib290IHRhcmdldCBwb3J0IHd3bnMgZm9yIHRoZSBwb3J0LgorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX2Jvb3R3d25zIHsKKwl3d25fdAkJd3duW0JGQV9CT09UX0JPT1RMVU5fTUFYXTsKKwl1OAkJbnd3bnM7CisJdTgJCXJzdmRbN107Cit9OworCitzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zIHsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2Z3Y2ZnX3MJZndjZmc7CisJc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcwlpbnRyX2F0dHI7CisJc3RydWN0IGJmaV9pb2NmY19ib290d3ducwlib290d3duczsKK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0gySV9DRkdfUkVRIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NmY19jZmdfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgbWg7CisJdW5pb24gYmZpX2FkZHJfdSAgICAgIGlvY19jZmdfZG1hX2FkZHI7Cit9OworCisvKioKKyAqIEJGSV9JT0NGQ19JMkhfQ0ZHX1JFUExZIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NmY19jZmdfcmVwbHlfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyICAgICAgICAgICovCisJdTggICAgICAgICBjZmdfc3VjY2VzczsJLyogIGNmZyByZXBseSBzdGF0dXMgICAgICAgICAgICovCisJdTggICAgICAgICBscHVfYm07CQkvKiAgTFBVcyBhc3NpZ25lZCBmb3IgdGhpcyBJT0MgKi8KKwl1OCAgICAgICAgIHJzdmRbMl07Cit9OworCisvKioKKyAqICBCRklfSU9DRkNfSDJJX0dFVF9TVEFUU19SRVEgJiBCRklfSU9DRkNfSDJJX0NMRUFSX1NUQVRTX1JFUSBtZXNzYWdlcworICovCitzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaDsJCS8qICBtc2cgaGVhZGVyICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5ICAgICAgKi8KK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0kySF9HRVRfU1RBVFNfUlNQICYgQkZJX0lPQ0ZDX0kySF9DTEVBUl9TVEFUU19SU1AgbWVzc2FnZXMKKyAqLworc3RydWN0IGJmaV9pb2NmY19zdGF0c19yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcmVwbHkgc3RhdHVzICAgICAgICAgICovCisJdTggICAgICAgICByc3ZkWzNdOworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkgICAgICAqLworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSDJJX1NFVF9JTlRSX1JFUSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfc2V0X2ludHJfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXU4CQljb2FsZXNjZTsJLyogIGVuYWJsZSBpbnRyIGNvYWxlc2NpbmcqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MTYJZGVsYXk7CQkvKiAgZGVsYXkgdGltZXIgMC4uMTEyNXVzICAqLworCXUxNglsYXRlbmN5OwkvKiAgbGF0ZW5jeSB0aW1lciAwLi4yMjV1cyAqLworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSDJJX1VQREFURVFfUkVRIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NmY191cGRhdGVxX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlciAgICAgKi8KKwl1MzIgcmVxcV9iYTsJCQkvKiAgcmVxcSBiYXNlIGFkZHIgICAgICAgICovCisJdTMyIHJzcHFfYmE7CQkJLyogIHJzcHEgYmFzZSBhZGRyICAgICAgICAqLworCXUzMiByZXFxX3NjaTsJCQkvKiAgcmVxcSBzaGFkb3cgY2kgICAgICAgICovCisJdTMyIHJzcHFfc3BpOwkJCS8qICByc3BxIHNoYWRvdyBwaSAgICAgICAgKi8KK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0kySF9VUERBVEVRX1JTUCBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgdXBkYXRlcSAgc3RhdHVzICAgICAgICovCisJdTggICAgICAgICByc3ZkWzNdOworfTsKKworLyoqCisgKiBIMkkgTWVzc2FnZXMKKyAqLwordW5pb24gYmZpX2lvY2ZjX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgCQltaDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcyAJY2ZnX3JlcTsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHN0YXRzX2dldDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHN0YXRzX2NscjsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcmVxX3MgdXBkYXRlcV9yZXE7CisJdTMyICAgICAgIAkJCW1ib3htc2dbQkZJX0lPQ19NU0dTWl07Cit9OworCisvKioKKyAqIEkySCBNZXNzYWdlcworICovCit1bmlvbiBiZmlfaW9jZmNfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgIAkJbWg7CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcmVwbHlfcyAJCWNmZ19yZXBseTsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JzcF9zIHN0YXRzX2dldF9yc3A7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yc3BfcyBzdGF0c19jbHJfcnNwOworCXN0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yc3BfcyB1cGRhdGVxX3JzcDsKKwl1MzIgICAgICAgCQkJbWJveG1zZ1tCRklfSU9DX01TR1NaXTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9JT0NGQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwMTA2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwb3J0LmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0xQT1JUX0hfXworI2RlZmluZSBfX0JGSV9MUE9SVF9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2xwb3J0X2gyaV9tc2dzIHsKKwlCRklfTFBPUlRfSDJJX0NSRUFURV9SRVEgPSAxLAorCUJGSV9MUE9SVF9IMklfREVMRVRFX1JFUSA9IDIsCit9OworCitlbnVtIGJmaV9scG9ydF9pMmhfbXNncyB7CisJQkZJX0xQT1JUX0kySF9DUkVBVEVfUlNQID0gQkZBX0kySE0oMSksCisJQkZJX0xQT1JUX0kySF9ERUxFVEVfUlNQID0gQkZBX0kySE0oMiksCisJQkZJX0xQT1JUX0kySF9PTkxJTkUJICA9IEJGQV9JMkhNKDMpLAorCUJGSV9MUE9SVF9JMkhfT0ZGTElORQkgID0gQkZBX0kySE0oNCksCit9OworCisjZGVmaW5lIEJGSV9MUE9SVF9NQVhfU1lOTkFNRQk2NAorCitlbnVtIGJmaV9scG9ydF9yb2xlX2UgeworCUJGSV9MUE9SVF9ST0xFX0ZDUElNCT0gMSwKKwlCRklfTFBPUlRfUk9MRV9GQ1BUTQk9IDIsCisJQkZJX0xQT1JUX1JPTEVfSVBGQwk9IDQsCit9OworCitzdHJ1Y3QgYmZpX2xwb3J0X2NyZWF0ZV9yZXFfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYJZmFicmljX2Z3aGRsOwkvKiAgcGFyZW50IGZhYnJpYyBpbnN0YW5jZQkqLworCXU4CQlyb2xlczsJCS8qICBscG9ydCBGQy00IHJvbGVzCQkqLworCXU4CQlyc3ZkOworCXd3bl90CQlwd3duOwkJLyogIHBvcnQgbmFtZQkJCSovCisJd3duX3QJCW53d247CQkvKiAgbm9kZSBuYW1lCQkJKi8KKwl1OAkJc3ltbmFtZVtCRklfTFBPUlRfTUFYX1NZTk5BTUVdOworfTsKKworc3RydWN0IGJmaV9scG9ydF9jcmVhdGVfcnNwX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgbHBvcnQgY3JlYXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkWzNdOworfTsKKworc3RydWN0IGJmaV9scG9ydF9kZWxldGVfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmaXJtd2FyZSBscG9ydCBoYW5kbGUJKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX2xwb3J0X2RlbGV0ZV9yc3BfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IGxwb3J0IGhhbmRsZQkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBscG9ydCBkZWxldGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCit1bmlvbiBiZmlfbHBvcnRfaDJpX21zZ191IHsKKwliZmlfbXNnX3QJCSptc2c7CisJc3RydWN0IGJmaV9scG9ydF9jcmVhdGVfcmVxX3MJKmNyZWF0ZV9yZXE7CisJc3RydWN0IGJmaV9scG9ydF9kZWxldGVfcmVxX3MJKmRlbGV0ZV9yZXE7Cit9OworCit1bmlvbiBiZmlfbHBvcnRfaTJoX21zZ191IHsKKwliZmlfbXNnX3QJCSptc2c7CisJc3RydWN0IGJmaV9scG9ydF9jcmVhdGVfcnNwX3MJKmNyZWF0ZV9yc3A7CisJc3RydWN0IGJmaV9scG9ydF9kZWxldGVfcnNwX3MJKmRlbGV0ZV9yc3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfTFBPUlRfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfbHBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0YjBlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwcy5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9MUFNfSF9fCisjZGVmaW5lIF9fQkZJX0xQU19IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2xwc19oMmlfbXNncyB7CisJQkZJX0xQU19IMklfTE9HSU5fUkVRCT0gMSwKKwlCRklfTFBTX0gySV9MT0dPVVRfUkVRCT0gMiwKK307CisKK2VudW0gYmZpX2xwc19pMmhfbXNncyB7CisJQkZJX0xQU19IMklfTE9HSU5fUlNQCT0gQkZBX0kySE0oMSksCisJQkZJX0xQU19IMklfTE9HT1VUX1JTUAk9IEJGQV9JMkhNKDIpLAorfTsKKworc3RydWN0IGJmaV9scHNfbG9naW5fcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAkJbHBfdGFnOworCXU4CQlhbHBhOworCXUxNglwZHVfc2l6ZTsKKwl3d25fdAkJcHd3bjsKKwl3d25fdAkJbnd3bjsKKwl1OAkJZmRpc2M7CisJdTgJCWF1dGhfZW47CisJdTgJCXJzdmRbMl07Cit9OworCitzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4CQlscF90YWc7CisJdTgJCXN0YXR1czsKKwl1OAkJbHNyanRfcnNuOworCXU4CQlsc3JqdF9leHBsOworCXd3bl90CQlwb3J0X25hbWU7CisJd3duX3QJCW5vZGVfbmFtZTsKKwl1MTYJYmJfY3JlZGl0OworCXU4CQlmX3BvcnQ7CisJdTgJCW5waXZfZW47CisJdTMyCWxwX3BpZCA6IDI0OworCXUzMglhdXRoX3JlcSA6IDg7CisJbWFjX3QJCWxwX21hYzsKKwltYWNfdAkJZmNmX21hYzsKKwl1OAkJZXh0X3N0YXR1czsKKwl1OCAgCWJyY2Rfc3dpdGNoOy8qICBhdHRhY2hlZCBwZWVyIGlzIGJyY2Qgc3dpdGNoCSovCit9OworCitzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAkJbHBfdGFnOworCXU4CQlyc3ZkWzNdOworCXd3bl90CQlwb3J0X25hbWU7Cit9OworCitzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAkJbHBfdGFnOworCXU4CQlzdGF0dXM7CisJdTgJCXJzdmRbMl07Cit9OworCit1bmlvbiBiZmlfbHBzX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MJCSptc2c7CisJc3RydWN0IGJmaV9scHNfbG9naW5fcmVxX3MJKmxvZ2luX3JlcTsKKwlzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcmVxX3MJKmxvZ291dF9yZXE7Cit9OworCit1bmlvbiBiZmlfbHBzX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9tc2dfcwkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yc3BfcwkqbG9naW5fcnNwOworCXN0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcwkqbG9nb3V0X3JzcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9MUFNfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzNiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wb3J0LmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRklfUE9SVF9IX18KKyNkZWZpbmUgX19CRklfUE9SVF9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9wb3J0X2gyaSB7CisJQkZJX1BPUlRfSDJJX0VOQUJMRV9SRVEJCT0gKDEpLAorCUJGSV9QT1JUX0gySV9ESVNBQkxFX1JFUQk9ICgyKSwKKwlCRklfUE9SVF9IMklfR0VUX1NUQVRTX1JFUQk9ICgzKSwKKwlCRklfUE9SVF9IMklfQ0xFQVJfU1RBVFNfUkVRCT0gKDQpLAorfTsKKworZW51bSBiZmlfcG9ydF9pMmggeworCUJGSV9QT1JUX0kySF9FTkFCTEVfUlNQCQk9IEJGQV9JMkhNKDEpLAorCUJGSV9QT1JUX0kySF9ESVNBQkxFX1JTUAk9IEJGQV9JMkhNKDIpLAorCUJGSV9QT1JUX0kySF9HRVRfU1RBVFNfUlNQCT0gQkZBX0kySE0oMyksCisJQkZJX1BPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUAk9IEJGQV9JMkhNKDQpLAorfTsKKworLyoqCisgKiBHZW5lcmljIFJFUSB0eXBlCisgKi8KK3N0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlcgkJCSAgICAqLworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworCXUzMglyc3ZkOworfTsKKworLyoqCisgKiBHZW5lcmljIFJTUCB0eXBlCisgKi8KK3N0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHBvcnQgZW5hYmxlIHN0YXR1cwkJICAgICovCisJdTggICAgICAgICByc3ZkWzNdOworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworfTsKKworLyoqCisgKiBAdG9kbworICogQkZJX1BPUlRfSDJJX0VOQUJMRV9SRVEKKyAqLworCisvKioKKyAqIEB0b2RvCisgKiBCRklfUE9SVF9JMkhfRU5BQkxFX1JTUAorICovCisKKy8qKgorICogQkZJX1BPUlRfSDJJX0RJU0FCTEVfUkVRCisgKi8KKworLyoqCisgKiBCRklfUE9SVF9JMkhfRElTQUJMRV9SU1AKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0gySV9HRVRfU1RBVFNfUkVRCisgKi8KK3N0cnVjdCBiZmlfcG9ydF9nZXRfc3RhdHNfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICAgICovCisJdW5pb24gYmZpX2FkZHJfdSAgIGRtYV9hZGRyOworfTsKKworLyoqCisgKiBCRklfUE9SVF9JMkhfR0VUX1NUQVRTX1JTUAorICovCisKKy8qKgorICogQkZJX1BPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUQorICovCisKKy8qKgorICogQkZJX1BPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUAorICovCisKK3VuaW9uIGJmaV9wb3J0X2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MJCW1oOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zCWVuYWJsZV9yZXE7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MJZGlzYWJsZV9yZXE7CisJc3RydWN0IGJmaV9wb3J0X2dldF9zdGF0c19yZXFfcwlnZXRzdGF0c19yZXE7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MJY2xlYXJzdGF0c19yZXE7Cit9OworCit1bmlvbiBiZmlfcG9ydF9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgICAgCW1oOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zCWVuYWJsZV9yc3A7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcnNwX3MJZGlzYWJsZV9yc3A7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcnNwX3MJZ2V0c3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zCWNsZWFyc3RhdHNfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX1BPUlRfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3Bwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmQyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wcG9ydC5oCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZJX1BQT1JUX0hfXworI2RlZmluZSBfX0JGSV9QUE9SVF9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9wcG9ydF9oMmkgeworCUJGSV9QUE9SVF9IMklfRU5BQkxFX1JFUQkJPSAoMSksCisJQkZJX1BQT1JUX0gySV9ESVNBQkxFX1JFUQkJPSAoMiksCisJQkZJX1BQT1JUX0gySV9HRVRfU1RBVFNfUkVRCQk9ICgzKSwKKwlCRklfUFBPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUQk9ICg0KSwKKwlCRklfUFBPUlRfSDJJX1NFVF9TVkNfUEFSQU1TX1JFUQk9ICg1KSwKKwlCRklfUFBPUlRfSDJJX0VOQUJMRV9SWF9WRl9UQUdfUkVRCT0gKDYpLAorCUJGSV9QUE9SVF9IMklfRU5BQkxFX1RYX1ZGX1RBR19SRVEJPSAoNyksCisJQkZJX1BQT1JUX0gySV9HRVRfUU9TX1NUQVRTX1JFUQkJPSAoOCksCisJQkZJX1BQT1JUX0gySV9DTEVBUl9RT1NfU1RBVFNfUkVRCT0gKDkpLAorfTsKKworZW51bSBiZmlfcHBvcnRfaTJoIHsKKwlCRklfUFBPUlRfSTJIX0VOQUJMRV9SU1AJCT0gQkZBX0kySE0oMSksCisJQkZJX1BQT1JUX0kySF9ESVNBQkxFX1JTUAkJPSBCRkFfSTJITSgyKSwKKwlCRklfUFBPUlRfSTJIX0dFVF9TVEFUU19SU1AJCT0gQkZBX0kySE0oMyksCisJQkZJX1BQT1JUX0kySF9DTEVBUl9TVEFUU19SU1AJPSBCRkFfSTJITSg0KSwKKwlCRklfUFBPUlRfSTJIX1NFVF9TVkNfUEFSQU1TX1JTUAk9IEJGQV9JMkhNKDUpLAorCUJGSV9QUE9SVF9JMkhfRU5BQkxFX1JYX1ZGX1RBR19SU1AJPSBCRkFfSTJITSg2KSwKKwlCRklfUFBPUlRfSTJIX0VOQUJMRV9UWF9WRl9UQUdfUlNQCT0gQkZBX0kySE0oNyksCisJQkZJX1BQT1JUX0kySF9FVkVOVAkJCT0gQkZBX0kySE0oOCksCisJQkZJX1BQT1JUX0kySF9HRVRfUU9TX1NUQVRTX1JTUAkJPSBCRkFfSTJITSg5KSwKKwlCRklfUFBPUlRfSTJIX0NMRUFSX1FPU19TVEFUU19SU1AJPSBCRkFfSTJITSgxMCksCit9OworCisvKioKKyAqIEdlbmVyaWMgUkVRIHR5cGUKKyAqLworc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlcgkJCSAgICAqLworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworfTsKKworLyoqCisgKiBHZW5lcmljIFJTUCB0eXBlCisgKi8KK3N0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBwb3J0IGVuYWJsZSBzdGF0dXMJCSAgICAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KK307CisKKy8qKgorICogQkZJX1BQT1JUX0gySV9FTkFCTEVfUkVRCisgKi8KK3N0cnVjdCBiZmlfcHBvcnRfZW5hYmxlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlcgkJCSAgICAqLworCXUzMiAgICAgICAgcnN2ZDE7CisJd3duX3QgICAgICAgICAgIG53d247CQkvKiAgbm9kZSB3d24gb2YgcGh5c2ljYWwgcG9ydAkgICAgKi8KKwl3d25fdCAgICAgICAgICAgcHd3bjsJCS8qICBwb3J0IHd3biBvZiBwaHlzaWNhbCBwb3J0CSAgICAqLworCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MgcG9ydF9jZmc7CS8qICBwb3J0IGNvbmZpZ3VyYXRpb24JICAgICovCisJdW5pb24gYmZpX2FkZHJfdSAgc3RhdHNfZG1hX2FkZHI7CS8qICBETUEgYWRkcmVzcyBmb3Igc3RhdHMgICovCisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseQkJICAgICovCisJdTMyICAgICAgICByc3ZkMjsKK307CisKKy8qKgorICogQkZJX1BQT1JUX0kySF9FTkFCTEVfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2VuYWJsZV9yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0RJU0FCTEVfUkVRCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2Rpc2FibGVfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0kySF9ESVNBQkxFX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9kaXNhYmxlX3JzcF90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfR0VUX1NUQVRTX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9nZXRfc3RhdHNfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0kySF9HRVRfU1RBVFNfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2dldF9zdGF0c19yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9jbGVhcl9zdGF0c19yZXFfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MKKworLyoqCisgKiBCRklfUFBPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9jbGVhcl9zdGF0c19yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0dFVF9RT1NfU1RBVFNfUkVRCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2dldF9xb3Nfc3RhdHNfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9HRVRfUU9TX1NUQVRTX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9nZXRfcW9zX3N0YXRzX3JzcF90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfQ0xFQVJfUU9TX1NUQVRTX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9DTEVBUl9RT1NfU1RBVFNfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX1NFVF9TVkNfUEFSQU1TX1JFUQorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X3NldF9zdmNfcGFyYW1zX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlciAqLworCXUxNiAgICAgICAgdHhfYmJjcmVkaXQ7CS8qICBUeCBjcmVkaXRzICovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworLyoqCisgKiBCRklfUFBPUlRfSTJIX1NFVF9TVkNfUEFSQU1TX1JTUAorICovCisKKy8qKgorICogQkZJX1BQT1JUX0kySF9FVkVOVAorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X2V2ZW50X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIAltaDsJLyogIGNvbW1vbiBtc2cgaGVhZGVyICovCisJc3RydWN0IGJmYV9wcG9ydF9saW5rX3MJbGlua19zdGF0ZTsKK307CisKK3VuaW9uIGJmaV9wcG9ydF9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zCQkJKm1oZHI7CisJc3RydWN0IGJmaV9wcG9ydF9lbmFibGVfcmVxX3MJCSpwZW5hYmxlOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcwkJKnBkaXNhYmxlOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcwkJKnBnZXRzdGF0czsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MJCSpwY2xlYXJzdGF0czsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X3NldF9zdmNfcGFyYW1zX3JlcV9zCSpwc2V0c3ZjcGFyYW1zOworCXN0cnVjdCBiZmlfcHBvcnRfZ2V0X3Fvc19zdGF0c19yZXFfcwkqcGdldHFvc3N0YXRzOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcwkJKnBjbGVhcnFvc3N0YXRzOworfTsKKwordW5pb24gYmZpX3Bwb3J0X2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9tc2dfcwkJCSptc2c7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCQkqZW5hYmxlX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2Rpc2FibGVfcnNwX3MJCSpkaXNhYmxlX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MJCSpnZXRzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9jbGVhcl9zdGF0c19yc3BfcwkqY2xlYXJzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yc3Bfcwkqc2V0c3ZjcGFyYXNtX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dldF9xb3Nfc3RhdHNfcnNwX3MJKmdldHFvc3N0YXRzX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yc3BfcwkqY2xlYXJxb3NzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9ldmVudF9zCQkqZXZlbnQ7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfUFBPUlRfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjBmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ycG9ydC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfUlBPUlRfSF9fCisjZGVmaW5lIF9fQkZJX1JQT1JUX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfcnBvcnRfaDJpX21zZ3MgeworCUJGSV9SUE9SVF9IMklfQ1JFQVRFX1JFUSA9IDEsCisJQkZJX1JQT1JUX0gySV9ERUxFVEVfUkVRID0gMiwKKwlCRklfUlBPUlRfSDJJX1NFVF9TUEVFRF9SRVEgID0gMywKK307CisKK2VudW0gYmZpX3Jwb3J0X2kyaF9tc2dzIHsKKwlCRklfUlBPUlRfSTJIX0NSRUFURV9SU1AgPSBCRkFfSTJITSgxKSwKKwlCRklfUlBPUlRfSTJIX0RFTEVURV9SU1AgPSBCRkFfSTJITSgyKSwKKwlCRklfUlBPUlRfSTJIX1FPU19TQ04gICAgPSBCRkFfSTJITSgzKSwKK307CisKK3N0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBycG9ydCBoYW5kbGUJCSovCisJdTE2ICAgICAgICBtYXhfZnJtc3o7CS8qICBtYXggcmN2IHBkdSBzaXplCQkqLworCXUzMiAgICAgICAgcGlkICAgICAgIDogMjQsCS8qICByZW1vdGUgcG9ydCBJRAkJKi8KKwkJCWxwX3RhZyAgICA6IDg7CS8qICBsb2NhbCBwb3J0IHRhZwkJKi8KKwl1MzIgICAgICAgIGxvY2FsX3BpZCA6IDI0LAkvKiAgbG9jYWwgcG9ydCBJRAkJKi8KKwkJCWNpc2MgICAgICA6IDg7CisJdTggICAgICAgICBmY19jbGFzczsJLyogIHN1cHBvcnRlZCBGQyBjbGFzc2VzCSovCisJdTggICAgICAgICB2Zl9lbjsJCS8qICB2aXJ0dWFsIGZhYnJpYyBlbmFibGUJKi8KKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZpcnR1YWwgZmFicmljIElECQkqLworfTsKKworc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBycG9ydCBjcmVhdGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmRbM107CisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBycG9ydCBoYW5kbGUJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmaXJtd2FyZSBycG9ydCBoYW5kbGUJKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgcW9zX2F0dHI7ICAvKiBRb1MgQXR0cmlidXRlcyAqLworfTsKKworc3RydWN0IGJmYV9ycG9ydF9zcGVlZF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgcnBvcnQgaGFuZGxlCSovCisJdTgJCXNwZWVkOwkJLyohIHJwb3J0J3Mgc3BlZWQgdmlhIFJQU0MgICovCisJdTgJCXJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX3Jwb3J0X2RlbGV0ZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgcnBvcnQgaGFuZGxlCSovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IHJwb3J0IGhhbmRsZQkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBycG9ydCBkZWxldGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX3Jwb3J0X3Fvc19zY25fcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgcnBvcnQgaGFuZGxlCQkqLworCXUxNiAgICAgICAgcnN2ZDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyOyAgLyogT2xkIFFvUyBBdHRyaWJ1dGVzICovCisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cjsgIC8qIE5ldyBRb1MgQXR0cmlidXRlcyAqLworfTsKKwordW5pb24gYmZpX3Jwb3J0X2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9tc2dfcyAJCSptc2c7CisJc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcmVxX3MJKmNyZWF0ZV9yZXE7CisJc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcmVxX3MJKmRlbGV0ZV9yZXE7CisJc3RydWN0IGJmaV9ycG9ydF9zcGVlZF9yZXFfcwkqc3BlZWRfcmVxOworfTsKKwordW5pb24gYmZpX3Jwb3J0X2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9tc2dfcyAJCSptc2c7CisJc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcnNwX3MJKmNyZWF0ZV9yc3A7CisJc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcnNwX3MJKmRlbGV0ZV9yc3A7CisJc3RydWN0IGJmaV9ycG9ydF9xb3Nfc2NuX3MJKnFvc19zY25fZXZ0OworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX1JQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV91Zi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfdWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzI4YTllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfdWYuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfVUZfSF9fCisjZGVmaW5lIF9fQkZJX1VGX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV91Zl9oMmkgeworCUJGSV9VRl9IMklfQlVGX1BPU1QgPSAxLAorfTsKKworZW51bSBiZmlfdWZfaTJoIHsKKwlCRklfVUZfSTJIX0ZSTV9SQ1ZEID0gQkZBX0kySE0oMSksCit9OworCisjZGVmaW5lIEJGQV9VRl9NQVhfU0dFUwkyCisKK3N0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYnVmX3RhZzsJLyogIGJ1ZmZlciB0YWcJCQkqLworCXUxNiAgICAgICAgYnVmX2xlbjsJLyogIHRvdGFsIGJ1ZmZlciBsZW5ndGgJKi8KKwlzdHJ1Y3QgYmZpX3NnZV9zICAgc2dlW0JGQV9VRl9NQVhfU0dFU107IC8qICBidWZmZXIgRE1BIFNHRXMJKi8KK307CisKK3N0cnVjdCBiZmlfdWZfZnJtX3JjdmRfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYnVmX3RhZzsJLyogIGJ1ZmZlciB0YWcJCQkqLworCXUxNiAgICAgICAgcnN2ZDsKKwl1MTYgICAgICAgIGZybV9sZW47CS8qICByZWNlaXZlZCBmcmFtZSBsZW5ndGggCSovCisJdTE2ICAgICAgICB4ZnJfbGVuOwkvKiAgdHJhbmZlcnJlZCBsZW5ndGgJCSovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfVUZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2JmYV9jbmFfdHJjbW9kLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2JmYV9jbmFfdHJjbW9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiYTcwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvYmZhX2NuYV90cmNtb2QuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9jbmFfdHJjbW9kLmggQ05BIHRyYWNlIG1vZHVsZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0NOQV9UUkNNT0RfSF9fCisjZGVmaW5lIF9fQkZBX0NOQV9UUkNNT0RfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisKKy8qCisgKiAhISEgT25seSBhcHBlbmQgdG8gdGhlIGVudW1zIGRlZmluZWQgaGVyZSB0byBhdm9pZCBhbnkgdmVyc2lvbmluZworICogISEhIG5lZWRlZCBiZXR3ZWVuIHRyYWNlIHV0aWxpdHkgYW5kIGRyaXZlciB2ZXJzaW9uCisgKi8KK2VudW0geworCUJGQV9UUkNfQ05BX0NFRQkJPSAxLAorCUJGQV9UUkNfQ05BX1BPUlQJPSAyLAorfTsKKworI2VuZGlmIC8qIF9fQkZBX0NOQV9UUkNNT0RfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2NlZS9iZmFfY2VlLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2NlZS9iZmFfY2VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmMjk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvY2VlL2JmYV9jZWUuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfQ0VFX0hfXworI2RlZmluZSBfX0JGQV9DRUVfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2NlZS5oPgorI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorCit0eXBlZGVmIHZvaWQgKCpiZmFfY2VlX2dldF9hdHRyX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfY2VlX2dldF9zdGF0c19jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICgqYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICgqYmZhX2NlZV9oYmZhaWxfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworc3RydWN0IGJmYV9jZWVfY2Jmbl9zIHsKKwliZmFfY2VlX2dldF9hdHRyX2NiZm5fdCAgICBnZXRfYXR0cl9jYmZuOworCXZvaWQgKmdldF9hdHRyX2NiYXJnOworCWJmYV9jZWVfZ2V0X3N0YXRzX2NiZm5fdCAgIGdldF9zdGF0c19jYmZuOworCXZvaWQgKmdldF9zdGF0c19jYmFyZzsKKwliZmFfY2VlX3Jlc2V0X3N0YXRzX2NiZm5fdCByZXNldF9zdGF0c19jYmZuOworCXZvaWQgKnJlc2V0X3N0YXRzX2NiYXJnOworfTsKKworc3RydWN0IGJmYV9jZWVfcyB7CisJdm9pZCAqZGV2OworCWJmYV9ib29sZWFuX3QgZ2V0X2F0dHJfcGVuZGluZzsKKwliZmFfYm9vbGVhbl90IGdldF9zdGF0c19wZW5kaW5nOworCWJmYV9ib29sZWFuX3QgcmVzZXRfc3RhdHNfcGVuZGluZzsKKwliZmFfc3RhdHVzX3QgZ2V0X2F0dHJfc3RhdHVzOworCWJmYV9zdGF0dXNfdCBnZXRfc3RhdHNfc3RhdHVzOworCWJmYV9zdGF0dXNfdCByZXNldF9zdGF0c19zdGF0dXM7CisJc3RydWN0IGJmYV9jZWVfY2Jmbl9zIGNiZm47CisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zIGhiZmFpbDsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2Q7CisJc3RydWN0IGJmYV9jZWVfYXR0cl9zICphdHRyOworCXN0cnVjdCBiZmFfY2VlX3N0YXRzX3MgKnN0YXRzOworCXN0cnVjdCBiZmFfZG1hX3MgYXR0cl9kbWE7CisJc3RydWN0IGJmYV9kbWFfcyBzdGF0c19kbWE7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyBnZXRfY2ZnX21iOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyBnZXRfc3RhdHNfbWI7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zIHJlc2V0X3N0YXRzX21iOworfTsKKwordTMyIGJmYV9jZWVfbWVtaW5mbyh2b2lkKTsKK3ZvaWQgYmZhX2NlZV9tZW1fY2xhaW0oc3RydWN0IGJmYV9jZWVfcyAqY2VlLCB1OCAqZG1hX2t2YSwKKwkJCSB1NjQgZG1hX3BhKTsKK3ZvaWQgYmZhX2NlZV9hdHRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRldiwKKwkJCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJCQlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKTsKK3ZvaWQgYmZhX2NlZV9kZXRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlKTsKK2JmYV9zdGF0dXNfdCBiZmFfY2VlX2dldF9hdHRyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwKKwkJCSBzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmF0dHIsCisJCQliZmFfY2VlX2dldF9hdHRyX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgYmZhX2NlZV9nZXRfc3RhdHMoc3RydWN0IGJmYV9jZWVfcyAqY2VlLAorCQkJc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqc3RhdHMsCisJCQliZmFfY2VlX2dldF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190IGJmYV9jZWVfcmVzZXRfc3RhdHMoc3RydWN0IGJmYV9jZWVfcyAqY2VlLAorCQkJYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworI2VuZGlmIC8qIF9fQkZBX0NFRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcG9ydC9iZmFfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wb3J0L2JmYV9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiZjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcG9ydC9iZmFfcG9ydC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9QT1JUX0hfXworI2RlZmluZSBfX0JGQV9QT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisKK3R5cGVkZWYgdm9pZCAgICAoKmJmYV9wb3J0X3N0YXRzX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit0eXBlZGVmIHZvaWQgICAgKCpiZmFfcG9ydF9lbmRpc19jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOworCitzdHJ1Y3QgYmZhX3BvcnRfcyB7CisJdm9pZCAgICAgICAgICAgKmRldjsKKwlzdHJ1Y3QgYmZhX2lvY19zICppb2M7CisJc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kOworCXUzMiAgICAgICAgbXNndGFnOworCWJmYV9ib29sZWFuX3QgICBzdGF0c19idXN5OworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyBzdGF0c19tYjsKKwliZmFfcG9ydF9zdGF0c19jYmZuX3Qgc3RhdHNfY2JmbjsKKwl2b2lkICAgICAgICAgICAqc3RhdHNfY2Jhcmc7CisJYmZhX3N0YXR1c190ICAgIHN0YXRzX3N0YXR1czsKKwl1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHM7CisJc3RydWN0IGJmYV9kbWFfcyBzdGF0c19kbWE7CisJYmZhX2Jvb2xlYW5fdCAgIGVuZGlzX3BlbmRpbmc7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zIGVuZGlzX21iOworCWJmYV9wb3J0X2VuZGlzX2NiZm5fdCBlbmRpc19jYmZuOworCXZvaWQgICAgICAgICAgICplbmRpc19jYmFyZzsKKwliZmFfc3RhdHVzX3QgICAgZW5kaXNfc3RhdHVzOworCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyBoYmZhaWw7Cit9OworCit2b2lkICAgICAgICAgICAgYmZhX3BvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCQkJdm9pZCAqZGV2LCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCQkJCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpOwordm9pZCAgICAgICAgICAgIGJmYV9wb3J0X2RldGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX3BvcnRfaGJmYWlsKHZvaWQgKmFyZyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCisJCQkJICAgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkJCSAgIGJmYV9wb3J0X3N0YXRzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCisJCQkJICAgICBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190ICAgIGJmYV9wb3J0X2VuYWJsZShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwKKwkJCQliZmFfcG9ydF9lbmRpc19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190ICAgIGJmYV9wb3J0X2Rpc2FibGUoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCisJCQkJIGJmYV9wb3J0X2VuZGlzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7Cit1MzIgICAgICAgIGJmYV9wb3J0X21lbWluZm8odm9pZCk7Cit2b2lkICAgICAgICAgICAgYmZhX3BvcnRfbWVtX2NsYWltKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCB1OCAqZG1hX2t2YSwKKwkJCQkgICB1NjQgZG1hX3BhKTsKKworI2VuZGlmIC8qIF9fQkZBX1BPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9ldGhwb3J0X2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcHN0YXRzL2V0aHBvcnRfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjNlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9ldGhwb3J0X2RlZnMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0VUSFBPUlRfREVGU19IX18KKyNkZWZpbmUgX19FVEhQT1JUX0RFRlNfSF9fCisKK3N0cnVjdCBibmFkX2Rydl9zdGF0cyB7CisJdTY0IG5ldGlmX3F1ZXVlX3N0b3A7CisJdTY0IG5ldGlmX3F1ZXVlX3dha2V1cDsKKwl1NjQgdHNvNDsKKwl1NjQgdHNvNjsKKwl1NjQgdHNvX2VycjsKKwl1NjQgdGNwY3N1bV9vZmZsb2FkOworCXU2NCB1ZHBjc3VtX29mZmxvYWQ7CisJdTY0IGNzdW1faGVscDsKKwl1NjQgY3N1bV9oZWxwX2VycjsKKworCXU2NCBod19zdGF0c191cGRhdGVzOworCXU2NCBuZXRpZl9yeF9zY2hlZHVsZTsKKwl1NjQgbmV0aWZfcnhfY29tcGxldGU7CisJdTY0IG5ldGlmX3J4X2Ryb3BwZWQ7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcHN0YXRzL3BoeXBvcnRfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzU0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19QSFlQT1JUX0RFRlNfSF9fCisjZGVmaW5lIF9fUEhZUE9SVF9ERUZTX0hfXworCisjZGVmaW5lIEJOQV9UWEZfSURfTUFYICAJNjQKKyNkZWZpbmUgQk5BX1JYRl9JRF9NQVggIAk2NAorCisvKgorICogU3RhdGlzdGljcworICovCisKKy8qCisgKiBUeEYgRnJhbWUgU3RhdGlzdGljcworICovCitzdHJ1Y3QgYm5hX3N0YXRzX3R4ZiB7CisJdTY0ICAgICAgICB1Y2FzdF9vY3RldHM7CisJdTY0ICAgICAgICB1Y2FzdDsKKwl1NjQgICAgICAgIHVjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIG1jYXN0X29jdGV0czsKKwl1NjQgICAgICAgIG1jYXN0OworCXU2NCAgICAgICAgbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgYmNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgYmNhc3Q7CisJdTY0ICAgICAgICBiY2FzdF92bGFuOworCisJdTY0ICAgICAgICBlcnJvcnM7CisJdTY0ICAgICAgICBmaWx0ZXJfdmxhbjsJLyogZnJhbWVzIGZpbHRlcmVkIGR1ZSB0byBWTEFOICovCisJdTY0ICAgICAgICBmaWx0ZXJfbWFjX3NhOwkvKiBmcmFtZXMgZmlsdGVyZWQgZHVlIHRvIFNBIGNoZWNrICovCit9OworCisvKgorICogUnhGIEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0c19yeGYgeworCXU2NCAgICAgICAgdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdWNhc3Q7CisJdTY0ICAgICAgICB1Y2FzdF92bGFuOworCisJdTY0ICAgICAgICBtY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICBtY2FzdDsKKwl1NjQgICAgICAgIG1jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIGJjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIGJjYXN0OworCXU2NCAgICAgICAgYmNhc3RfdmxhbjsKKwl1NjQgICAgICAgIGZyYW1lX2Ryb3BzOworfTsKKworLyoKKyAqIEZDIFR4IEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0c19mY190eCB7CisJdTY0ICAgICAgICB0eGZfdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdHhmX3VjYXN0OworCXU2NCAgICAgICAgdHhmX3VjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHR4Zl9tY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICB0eGZfbWNhc3Q7CisJdTY0ICAgICAgICB0eGZfbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgdHhmX2JjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHR4Zl9iY2FzdDsKKwl1NjQgICAgICAgIHR4Zl9iY2FzdF92bGFuOworCisJdTY0ICAgICAgICB0eGZfcGFyaXR5X2Vycm9yczsKKwl1NjQgICAgICAgIHR4Zl90aW1lb3V0OworCXU2NCAgICAgICAgdHhmX2ZpZF9wYXJpdHlfZXJyb3JzOworfTsKKworLyoKKyAqIEZDIFJ4IEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0c19mY19yeCB7CisJdTY0ICAgICAgICByeGZfdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhmX3VjYXN0OworCXU2NCAgICAgICAgcnhmX3VjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4Zl9tY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeGZfbWNhc3Q7CisJdTY0ICAgICAgICByeGZfbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgcnhmX2JjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4Zl9iY2FzdDsKKwl1NjQgICAgICAgIHJ4Zl9iY2FzdF92bGFuOworfTsKKworLyoKKyAqIFJBRCBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfcmFkIHsKKwl1NjQgICAgICAgIHJ4X2ZyYW1lczsKKwl1NjQgICAgICAgIHJ4X29jdGV0czsKKwl1NjQgICAgICAgIHJ4X3ZsYW5fZnJhbWVzOworCisJdTY0ICAgICAgICByeF91Y2FzdDsKKwl1NjQgICAgICAgIHJ4X3VjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4X3VjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4X21jYXN0OworCXU2NCAgICAgICAgcnhfbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhfbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgcnhfYmNhc3Q7CisJdTY0ICAgICAgICByeF9iY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeF9iY2FzdF92bGFuOworCisJdTY0ICAgICAgICByeF9kcm9wczsKK307CisKKy8qCisgKiBCUEMgVHggUmVnaXN0ZXJzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfYnBjX3R4IHsKKwl1NjQgICAgICAgIHR4X3BhdXNlWzhdOworCXU2NCAgICAgICAgdHhfemVyb19wYXVzZVs4XTsJLyogIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NCAgICAgICAgdHhfZmlyc3RfcGF1c2VbOF07CS8qICBQYXVzZSBpbml0aWF0aW9uIHJhdGhlcgorCQkJCQkJICp0aGFuIHJldGVudGlvbiAqLworfTsKKworLyoKKyAqIEJQQyBSeCBSZWdpc3RlcnMKKyAqLworc3RydWN0IGNuYV9zdGF0c19icGNfcnggeworCXU2NCAgICAgICAgcnhfcGF1c2VbOF07CisJdTY0ICAgICAgICByeF96ZXJvX3BhdXNlWzhdOwkvKiAgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0ICAgICAgICByeF9maXJzdF9wYXVzZVs4XTsJLyogIFBhdXNlIGluaXRpYXRpb24gcmF0aGVyCisJCQkJCQkgKnRoYW4gcmV0ZW50aW9uICovCit9OworCisvKgorICogTUFDIFJ4IFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGNuYV9zdGF0c19tYWNfcnggeworCXU2NCAgICAgICAgZnJhbWVfNjQ7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzY1XzEyNzsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfMTI4XzI1NTsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfMjU2XzUxMTsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfNTEyXzEwMjM7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzEwMjRfMTUxODsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfMTUxOF8xNTIyOwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICByeF9ieXRlczsKKwl1NjQgICAgICAgIHJ4X3BhY2tldHM7CisJdTY0ICAgICAgICByeF9mY3NfZXJyb3I7CisJdTY0ICAgICAgICByeF9tdWx0aWNhc3Q7CisJdTY0ICAgICAgICByeF9icm9hZGNhc3Q7CisJdTY0ICAgICAgICByeF9jb250cm9sX2ZyYW1lczsKKwl1NjQgICAgICAgIHJ4X3BhdXNlOworCXU2NCAgICAgICAgcnhfdW5rbm93bl9vcGNvZGU7CisJdTY0ICAgICAgICByeF9hbGlnbm1lbnRfZXJyb3I7CisJdTY0ICAgICAgICByeF9mcmFtZV9sZW5ndGhfZXJyb3I7CisJdTY0ICAgICAgICByeF9jb2RlX2Vycm9yOworCXU2NCAgICAgICAgcnhfY2Fycmllcl9zZW5zZV9lcnJvcjsKKwl1NjQgICAgICAgIHJ4X3VuZGVyc2l6ZTsKKwl1NjQgICAgICAgIHJ4X292ZXJzaXplOworCXU2NCAgICAgICAgcnhfZnJhZ21lbnRzOworCXU2NCAgICAgICAgcnhfamFiYmVyOworCXU2NCAgICAgICAgcnhfZHJvcDsKK307CisKKy8qCisgKiBNQUMgVHggU3RhdGlzdGljcworICovCitzdHJ1Y3QgY25hX3N0YXRzX21hY190eCB7CisJdTY0ICAgICAgICB0eF9ieXRlczsKKwl1NjQgICAgICAgIHR4X3BhY2tldHM7CisJdTY0ICAgICAgICB0eF9tdWx0aWNhc3Q7CisJdTY0ICAgICAgICB0eF9icm9hZGNhc3Q7CisJdTY0ICAgICAgICB0eF9wYXVzZTsKKwl1NjQgICAgICAgIHR4X2RlZmVycmFsOworCXU2NCAgICAgICAgdHhfZXhjZXNzaXZlX2RlZmVycmFsOworCXU2NCAgICAgICAgdHhfc2luZ2xlX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X211bGlwbGVfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfbGF0ZV9jb2xsaXNpb247CisJdTY0ICAgICAgICB0eF9leGNlc3NpdmVfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfdG90YWxfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfcGF1c2VfaG9ub3JlZDsKKwl1NjQgICAgICAgIHR4X2Ryb3A7CisJdTY0ICAgICAgICB0eF9qYWJiZXI7CisJdTY0ICAgICAgICB0eF9mY3NfZXJyb3I7CisJdTY0ICAgICAgICB0eF9jb250cm9sX2ZyYW1lOworCXU2NCAgICAgICAgdHhfb3ZlcnNpemU7CisJdTY0ICAgICAgICB0eF91bmRlcnNpemU7CisJdTY0ICAgICAgICB0eF9mcmFnbWVudHM7Cit9OworCisvKgorICogQ29tcGxldGUgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYm5hX3N0YXRzIHsKKwlzdHJ1Y3QgY25hX3N0YXRzX21hY19yeCBtYWNfcnhfc3RhdHM7CisJc3RydWN0IGNuYV9zdGF0c19icGNfcnggYnBjX3J4X3N0YXRzOworCXN0cnVjdCBjbmFfc3RhdHNfcmFkIHJhZF9zdGF0czsKKwlzdHJ1Y3QgYm5hX3N0YXRzX2ZjX3J4IGZjX3J4X3N0YXRzOworCXN0cnVjdCBjbmFfc3RhdHNfbWFjX3R4IG1hY190eF9zdGF0czsKKwlzdHJ1Y3QgY25hX3N0YXRzX2JwY190eCBicGNfdHhfc3RhdHM7CisJc3RydWN0IGJuYV9zdGF0c19mY190eCBmY190eF9zdGF0czsKKwlzdHJ1Y3QgYm5hX3N0YXRzX3J4ZiByeGZfc3RhdHNbQk5BX1RYRl9JRF9NQVhdOworCXN0cnVjdCBibmFfc3RhdHNfdHhmIHR4Zl9zdGF0c1tCTkFfUlhGX0lEX01BWF07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfY2hlY2tzdW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhjMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9jaGVja3N1bS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2NoZWNrc3VtLmggQkZBIGNoZWNrc3VtIHV0aWxpdGllcworICovCisKKyNpZm5kZWYgX19CRkFfQ0hFQ0tTVU1fSF9fCisjZGVmaW5lIF9fQkZBX0NIRUNLU1VNX0hfXworCitzdGF0aWMgaW5saW5lIHUzMgorYmZhX2NoZWNrc3VtX3UzMih1MzIgKmJ1ZiwgaW50IHN6KQoreworCWludAkJaSwgbSA9IHN6ID4+IDI7CisJdTMyCXN1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKQorCQlzdW0gXj0gYnVmW2ldOworCisJcmV0dXJuIChzdW0pOworfQorCitzdGF0aWMgaW5saW5lIHUxNgorYmZhX2NoZWNrc3VtX3UxNih1MTYgKmJ1ZiwgaW50IHN6KQoreworCWludCAgICAgICAgICAgICBpLCBtID0gc3ogPj4gMTsKKwl1MTYgICAgICAgIHN1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKQorCQlzdW0gXj0gYnVmW2ldOworCisJcmV0dXJuIChzdW0pOworfQorCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2hlY2tzdW1fdTgodTggKmJ1ZiwgaW50IHN6KQoreworCWludCAgICAgICAgICAgICBpOworCXU4ICAgICAgICAgc3VtID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzejsgaSsrKQorCQlzdW0gXj0gYnVmW2ldOworCisJcmV0dXJuIChzdW0pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2RlYnVnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxYmU4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfZGVidWcuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9kZWJ1Zy5oIEJGQSBkZWJ1ZyBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUJVR19IX18KKyNkZWZpbmUgX19CRkFfREVCVUdfSF9fCisKKyNkZWZpbmUgYmZhX2Fzc2VydChfX2NvbmQpCWRvIHsJCQkJCVwKKwlpZiAoIShfX2NvbmQpKSAJCQkJCQkJXAorCQliZmFfcGFuaWMoX19MSU5FX18sIF9fRklMRV9fLCAjX19jb25kKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9zbV9mYXVsdChfX21vZCwgX19ldmVudCkJZG8gewkJCQlcCisJYmZhX3NtX3BhbmljKChfX21vZCktPmxvZ20sIF9fTElORV9fLCBfX0ZJTEVfXywgX19ldmVudCk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2lmbmRlZiBCRkFfUEVSRl9CVUlMRAorI2RlZmluZSBiZmFfYXNzZXJ0X2ZwKF9fY29uZCkJYmZhX2Fzc2VydChfX2NvbmQpCisjZWxzZQorI2RlZmluZSBiZmFfYXNzZXJ0X2ZwKF9fY29uZCkKKyNlbmRpZgorCitzdHJ1Y3QgYmZhX2xvZ19tb2RfczsKK3ZvaWQgYmZhX3BhbmljKGludCBsaW5lLCBjaGFyICpmaWxlLCBjaGFyICpwYW5pY3N0cik7Cit2b2lkIGJmYV9zbV9wYW5pYyhzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbSwgaW50IGxpbmUsIGNoYXIgKmZpbGUsIGludCBldmVudCk7CisKKyNlbmRpZiAvKiBfX0JGQV9ERUJVR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfbG9nLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MWNiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2xvZy5oCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9sb2cuaCBCRkEgbG9nIGxpYnJhcnkgZGF0YSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb24KKyAqLworCisjaWZuZGVmIF9fQkZBX0xPR19IX18KKyNkZWZpbmUgX19CRkFfTE9HX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hZW4uaD4KKworLyoKKyAqIEJGQSBsb2cgbW9kdWxlIGRlZmluaXRpb24KKyAqCisgKiBUbyBjcmVhdGUgYSBuZXcgbW9kdWxlIGlkOgorICogQWRkIGEgI2RlZmluZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGJlbG93LiBTZWxlY3QgYSB2YWx1ZSBmb3IgeW91cgorICogZGVmaW5pdGlvbiBzbyB0aGF0IGl0IGlzIG9uZSAoMSkgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cworICogZGVmaW5pdGlvbi4gTW9kaWZ5IHRoZSBkZWZpbml0aW9uIG9mIEJGQV9MT0dfTU9EVUxFX0lEX01BWCB0byBiZWNvbWUKKyAqIHlvdXIgbmV3IGRlZmluaXRpb24uCisgKiBTaG91bGQgaGF2ZSBubyBnYXBzIGluIGJldHdlZW4gdGhlIHZhbHVlcyBiZWNhdXNlIHRoaXMgaXMgdXNlZCBpbiBhcnJheXMuCisgKiBJTVBPUlRBTlQ6IEFFTl9JRHMgbXVzdCBiZSBhdCB0aGUgYmVnaW5pbmcsIG90aGVyd2lzZSB1cGRhdGUgYmZhX2RlZnNfYWVuLmgKKyAqLworCitlbnVtIGJmYV9sb2dfbW9kdWxlX2lkIHsKKwlCRkFfTE9HX1VOVVNFRF9JRAk9IDAsCisKKwkvKiBBRU4gZGVmcyBiZWdpbiAqLworCUJGQV9MT0dfQUVOX01JTgkJPSBCRkFfTE9HX1VOVVNFRF9JRCwKKworCUJGQV9MT0dfQUVOX0lEX0FEQVBURVIgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfQURBUFRFUiwvKiAxICovCisJQkZBX0xPR19BRU5fSURfUE9SVCAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9QT1JULAkvKiAyICovCisJQkZBX0xPR19BRU5fSURfTFBPUlQgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfTFBPUlQsCS8qIDMgKi8KKwlCRkFfTE9HX0FFTl9JRF9SUE9SVCAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9SUE9SVCwJLyogNCAqLworCUJGQV9MT0dfQUVOX0lEX0lUTklNIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0lUTklNLAkvKiA1ICovCisJQkZBX0xPR19BRU5fSURfVElOIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX1RJTiwJLyogNiAqLworCUJGQV9MT0dfQUVOX0lEX0lQRkMgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfSVBGQywJLyogNyAqLworCUJGQV9MT0dfQUVOX0lEX0FVRElUIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0FVRElULAkvKiA4ICovCisJQkZBX0xPR19BRU5fSURfSU9DCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfSU9DLAkvKiA5ICovCisJQkZBX0xPR19BRU5fSURfRVRIUE9SVAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0VUSFBPUlQsLyogMTAgKi8KKworCUJGQV9MT0dfQUVOX01BWAkJPSBCRkFfTE9HX0FFTl9JRF9FVEhQT1JULAorCS8qIEFFTiBkZWZzIGVuZCAqLworCisJQkZBX0xPR19NT0RVTEVfSURfTUlOCT0gQkZBX0xPR19BRU5fTUFYLAorCisJQkZBX0xPR19GV19JRAkJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyAxLAorCUJGQV9MT0dfSEFMX0lECQk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDIsCisJQkZBX0xPR19GQ1NfSUQJCT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgMywKKwlCRkFfTE9HX1dEUlZfSUQJCT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgNCwKKwlCRkFfTE9HX0xJTlVYX0lECT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgNSwKKwlCRkFfTE9HX1NPTEFSSVNfSUQJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyA2LAorCisJQkZBX0xPR19NT0RVTEVfSURfTUFYIAk9IEJGQV9MT0dfU09MQVJJU19JRCwKKworCS8qIE5vdCBwYXJ0IG9mIGFueSBhcnJheXMgKi8KKwlCRkFfTE9HX01PRFVMRV9JRF9BTEwgCT0gQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMSwKKwlCRkFfTE9HX0FFTl9BTEwgCT0gQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMiwKKwlCRkFfTE9HX0RSVl9BTEwJCT0gQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMywKK307CisKKy8qCisgKiBCRkEgbG9nIGNhdGFsb2cgbmFtZQorICovCisjZGVmaW5lIEJGQV9MT0dfQ0FUX05BTUUJIkJGQSIKKworLyoKKyAqIGJmYSBsb2cgc2V2ZXJpdHkgdmFsdWVzCisgKi8KK2VudW0gYmZhX2xvZ19zZXZlcml0eSB7CisJQkZBX0xPR19JTlZBTElEID0gMCwKKwlCRkFfTE9HX0NSSVRJQ0FMID0gMSwKKwlCRkFfTE9HX0VSUk9SID0gMiwKKwlCRkFfTE9HX1dBUk5JTkcgPSAzLAorCUJGQV9MT0dfSU5GTyA9IDQsCisJQkZBX0xPR19OT05FID0gNSwKKwlCRkFfTE9HX0xFVkVMX01BWCA9IEJGQV9MT0dfTk9ORQorfTsKKworI2RlZmluZSBCRkFfTE9HX01PRElEX09GRlNFVAkJMTYKKworCitzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyB7CisJdTMyCW1zZ19pZDsJCS8qICBtZXNzYWdlIGlkICovCisJaW50CQlhdHRyaWJ1dGVzOwkvKiAgYXR0cmlidXRlcyAqLworCWludAkJc2V2ZXJpdHk7CS8qICBzZXZlcml0eSBsZXZlbCAqLworCWNoYXIJCSptc2dfdmFsdWU7CisJCQkJCS8qICBtc2cgc3RyaW5nICovCisJY2hhcgkJKm1lc3NhZ2U7CisJCQkJCS8qICBtc2cgZm9ybWF0IHN0cmluZyAqLworCWludAkJYXJnX3R5cGU7CS8qICBhcmd1bWVudCB0eXBlICovCisJaW50CQlhcmdfbnVtOwkvKiAgbnVtYmVyIG9mIGFyZ3VtZW50ICovCit9OworCisvKgorICogc3VwcG9ydGVkIGFyZ3VtZW50IHR5cGUKKyAqLworZW51bSBiZmFfbG9nX2FyZ190eXBlIHsKKwlCRkFfTE9HX1MgPSAwLAkJLyogIHN0cmluZyAqLworCUJGQV9MT0dfRCwJCS8qICBkZWNpbWFsICovCisJQkZBX0xPR19JLAkJLyogIGludGVnZXIgKi8KKwlCRkFfTE9HX08sCQkvKiAgb2N0IG51bWJlciAqLworCUJGQV9MT0dfVSwJCS8qICB1bnNpZ25lZCBpbnRlZ2VyICovCisJQkZBX0xPR19YLAkJLyogIGhleCBudW1iZXIgKi8KKwlCRkFfTE9HX0YsCQkvKiAgZmxvYXRpbmcgKi8KKwlCRkFfTE9HX0MsCQkvKiAgY2hhcmFjdGVyICovCisJQkZBX0xPR19MLAkJLyogIGRvdWJsZSAqLworCUJGQV9MT0dfUAkJLyogIHBvaW50ZXIgKi8KK307CisKKyNkZWZpbmUgQkZBX0xPR19BUkdfVFlQRQkyCisjZGVmaW5lIEJGQV9MT0dfQVJHMAkJKDAgKiBCRkFfTE9HX0FSR19UWVBFKQorI2RlZmluZSBCRkFfTE9HX0FSRzEJCSgxICogQkZBX0xPR19BUkdfVFlQRSkKKyNkZWZpbmUgQkZBX0xPR19BUkcyCQkoMiAqIEJGQV9MT0dfQVJHX1RZUEUpCisjZGVmaW5lIEJGQV9MT0dfQVJHMwkJKDMgKiBCRkFfTE9HX0FSR19UWVBFKQorCisjZGVmaW5lIEJGQV9MT0dfR0VUX01PRF9JRChtc2dpZCkgKChtc2dpZCA+PiBCRkFfTE9HX01PRElEX09GRlNFVCkgJiAweGZmKQorI2RlZmluZSBCRkFfTE9HX0dFVF9NU0dfSURYKG1zZ2lkKSAobXNnaWQgJiAweGZmZmYpCisjZGVmaW5lIEJGQV9MT0dfR0VUX01TR19JRChtc2dkZWYpICgobXNnZGVmKS0+bXNnX2lkKQorI2RlZmluZSBCRkFfTE9HX0dFVF9NU0dfRk1UX1NUUklORyhtc2dkZWYpICgobXNnZGVmKS0+bWVzc2FnZSkKKyNkZWZpbmUgQkZBX0xPR19HRVRfU0VWRVJJVFkobXNnZGVmKSAoKG1zZ2RlZiktPnNldmVyaXR5KQorCisvKgorICogRXZlbnQgYXR0cmlidXRlcworICovCisjZGVmaW5lIEJGQV9MT0dfQVRUUl9OT05FCTAKKyNkZWZpbmUgQkZBX0xPR19BVFRSX0FVRElUCTEKKyNkZWZpbmUgQkZBX0xPR19BVFRSX0xPRwkyCisjZGVmaW5lIEJGQV9MT0dfQVRUUl9GRkRDCTQKKworI2RlZmluZSBCRkFfTE9HX0NSRUFURV9JRChtc3csIGxzdykgXAorCSgoKHUzMiltc3cgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgbHN3KQorCitzdHJ1Y3QgYmZhX2xvZ19tb2RfczsKKworLyoqCisgKiBjYWxsYmFjayBmdW5jdGlvbgorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfbG9nX2NiX3QpKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkLAorCQkJY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCisKK3N0cnVjdCBiZmFfbG9nX21vZF9zIHsKKwljaGFyCQlpbnN0YW5jZV9pbmZvWzE2XTsJLyogIGluc3RhbmNlIGluZm8gKi8KKwlpbnQJCWxvZ19sZXZlbFtCRkFfTE9HX01PRFVMRV9JRF9NQVggKyAxXTsKKwkJCQkJCS8qICBsb2cgbGV2ZWwgZm9yIG1vZHVsZXMgKi8KKwliZmFfbG9nX2NiX3QJY2JmbjsgCQkJLyogIGNhbGxiYWNrIGZ1bmN0aW9uICovCit9OworCitleHRlcm4gaW50IGJmYV9sb2dfaW5pdChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWNoYXIgKmluc3RhbmNlX25hbWUsIGJmYV9sb2dfY2JfdCBjYmZuKTsKK2V4dGVybiBpbnQgYmZhX2xvZyhzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwgLi4uKTsKK2V4dGVybiBiZmFfc3RhdHVzX3QgYmZhX2xvZ19zZXRfbGV2ZWwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQlpbnQgbW9kX2lkLCBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKTsKK2V4dGVybiBiZmFfc3RhdHVzX3QgYmZhX2xvZ19zZXRfbGV2ZWxfYWxsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkJZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCk7CitleHRlcm4gYmZhX3N0YXR1c190IGJmYV9sb2dfc2V0X2xldmVsX2FlbihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpOworZXh0ZXJuIGVudW0gYmZhX2xvZ19zZXZlcml0eSBiZmFfbG9nX2dldF9sZXZlbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWludCBtb2RfaWQpOworZXh0ZXJuIGVudW0gYmZhX2xvZ19zZXZlcml0eSBiZmFfbG9nX2dldF9tc2dfbGV2ZWwoCisJCQlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCk7CisvKgorICogYXJyYXkgb2YgbWVzc2FnZXMgZ2VuZXJhdGVkIGZyb20geG1sIGZpbGVzCisgKi8KK2V4dGVybiBzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyBiZmFfbG9nX21zZ19hcnJheVtdOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGVyZi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9wZXJmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhYTVmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGVyZi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFEX1BFUkZfSF9fCisjZGVmaW5lIF9fQkZBRF9QRVJGX0hfXworCisjaWZkZWYgQkZBRF9QRVJGX0JVSUxECisKKyN1bmRlZiBiZmFfdHJjCisjdW5kZWYgYmZhX3RyYzMyCisjdW5kZWYgYmZhX2Fzc2VydAorI3VuZGVmIEJGQV9UUkNfRklMRQorCisjZGVmaW5lIGJmYV90cmMoX3RyY3AsIF9kYXRhKQorI2RlZmluZSBiZmFfdHJjMzIoX3RyY3AsIF9kYXRhKQorI2RlZmluZSBiZmFfYXNzZXJ0KF9fY29uZCkKKyNkZWZpbmUgQkZBX1RSQ19GSUxFKF9fbW9kLCBfX3N1Ym1vZCkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0JGQURfUEVSRl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGxvZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9wbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwZjg2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGxvZy5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1BPUlRMT0dfSF9fCisjZGVmaW5lIF9fQkZBX1BPUlRMT0dfSF9fCisKKyNpbmNsdWRlICJwcm90b2NvbC9mYy5oIgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworI2RlZmluZSBCRkFfUExfTkxPR19FTlRTIDI1NgorI2RlZmluZSBCRkFfUExfTE9HX1JFQ19JTkNSKF94KSAoKF94KSsrLCAoX3gpICU9IEJGQV9QTF9OTE9HX0VOVFMpCisKKyNkZWZpbmUgQkZBX1BMX1NUUklOR19MT0dfU1ogICAzMiAgIC8qIG51bWJlciBvZiBjaGFycyBpbiBzdHJpbmcgbG9nICovCisjZGVmaW5lIEJGQV9QTF9JTlRfTE9HX1NaICAgICAgOCAgICAvKiBudW1iZXIgb2YgaW50ZWdlcnMgaW4gdGhlIGludGVnZXIgbG9nICovCisKK2VudW0gYmZhX3Bsb2dfbG9nX3R5cGUgeworCUJGQV9QTF9MT0dfVFlQRV9JTlZBTElEID0gMCwKKwlCRkFfUExfTE9HX1RZUEVfSU5UIAk9IDEsCisJQkZBX1BMX0xPR19UWVBFX1NUUklORyAJPSAyLAorfTsKKworLyoKKyAqIHRoZSAoZml4ZWQgc2l6ZSkgcmVjb3JkIGZvcm1hdCBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgcG9ydGxvZworICovCitzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgeworCXUzMiAgICAgICAgdHY7CS8qIEZpbGxlZCBieSB0aGUgcG9ydGxvZyBkcml2ZXIgd2hlbiB0aGUgKgorCQkJCSAqIGVudHJ5IGlzIGFkZGVkIHRvIHRoZSBjaXJjdWxhciBsb2cuICAgKi8KKwl1OCAgICAgICAgIHBvcnQ7CS8qIFNvdXJjZSBwb3J0IHRoYXQgbG9nZ2VkIHRoaXMgZW50cnkuIENNCisJCQkJICogZW50aXRpZXMgd2lsbCB1c2UgMHhGRiAqLworCXU4ICAgICAgICAgbWlkOwkvKiBJbnRlZ2VyIHZhbHVlIHRvIGJlIHVzZWQgYnkgYWxsIGVudGl0aWVzICoKKwkJCQkgKiB3aGlsZSBsb2dnaW5nLiBUaGUgbW9kdWxlIGlkIHRvIHN0cmluZyAgICoKKwkJCQkgKiBjb252ZXJzaW9uIHdpbGwgYmUgZG9uZSBieSBCRkFMLiBTZWUKKwkJCQkgKiBlbnVtIGJmYV9wbG9nX21pZCAqLworCXU4ICAgICAgICAgZWlkOwkvKiBpbmRpY2F0ZXMgUngsIFR4LCBJT0NUTCwgZXRjLiBTZWUKKwkJCQkgKiBlbnVtIGJmYV9wbG9nX2VpZCAqLworCXU4ICAgICAgICAgbG9nX3R5cGU7IC8qIGluZGljYXRlcyBzdHJpbmcgbG9nIG9yIGludGVnZXIgbG9nLgorCQkJCSAgICogc2VlIGJmYV9wbG9nX2xvZ190eXBlX3QgKi8KKwl1OCAgICAgICAgIGxvZ19udW1faW50czsKKwkvKgorCSAqIGludGVycHJldGVkIG9ubHkgaWYgbG9nX3R5cGUgaXMgSU5UX0xPRy4gaW5kaWNhdGVzIG51bWJlciBvZgorCSAqIGludGVnZXJzIGluIHRoZSBpbnRfbG9nW10gKDAtUExfSU5UX0xPR19TWikuCisJICovCisJdTggICAgICAgICByc3ZkOworCXUxNiAgICAgICAgbWlzYzsJLyogY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUgZmMgZnJhbWUgbGVuZ3RoLAorCQkJCSAqZXRjLi4gKi8KKwl1bmlvbiB7CisJCWNoYXIgICAgICAgICAgICBzdHJpbmdfbG9nW0JGQV9QTF9TVFJJTkdfTE9HX1NaXTsKKwkJdTMyICAgICAgICBpbnRfbG9nW0JGQV9QTF9JTlRfTE9HX1NaXTsKKwl9IGxvZ19lbnRyeTsKKworfTsKKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgI2RlZmluZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBsb2dnaW5nIGVudGl0aWVzIHRvIGluZGljYXRlCisgKiB0aGVpciBtb2R1bGUgaWQuIEJGQUwgd2lsbCBjb252ZXJ0IHRoZSBpbnRlZ2VyIHZhbHVlIHRvIHN0cmluZyBmb3JtYXQKKyAqCisqIHByb2Nlc3MgdG8gYmUgdXNlZCB3aGlsZSBjaGFuZ2luZyB0aGUgZm9sbG93aW5nICNkZWZpbmVzOgorICogIC0gQWx3YXlzIGFkZCBuZXcgZW50cmllcyBhdCB0aGUgZW5kCisgKiAgLSBkZWZpbmUgY29ycmVzcG9uZGluZyBzdHJpbmcgaW4gQkZBTAorICogIC0gRG8gbm90IHJlbW92ZSBhbnkgZW50cnkgb3IgcmVhcnJhbmdlIHRoZSBvcmRlci4KKyAqLworZW51bSBiZmFfcGxvZ19taWQgeworCUJGQV9QTF9NSURfSU5WQUxJRCAJPSAwLAorCUJGQV9QTF9NSURfREVCVUcgCT0gMSwKKwlCRkFfUExfTUlEX0RSVlIgCT0gMiwKKwlCRkFfUExfTUlEX0hBTCAJCT0gMywKKwlCRkFfUExfTUlEX0hBTF9GQ1hQIAk9IDQsCisJQkZBX1BMX01JRF9IQUxfVUYgCT0gNSwKKwlCRkFfUExfTUlEX0ZDUyAJCT0gNiwKKwlCRkFfUExfTUlEX01BWCAJCT0gNworfTsKKworI2RlZmluZSBCRkFfUExfTUlEX1NUUkxFTiAgICA4CitzdHJ1Y3QgYmZhX3Bsb2dfbWlkX3N0cmluZ3NfcyB7CisJY2hhciAgICAgICAgICAgIG1fc3RyW0JGQV9QTF9NSURfU1RSTEVOXTsKK307CisKKy8qCisgKiB0aGUgZm9sbG93aW5nICNkZWZpbmVzIHdpbGwgYmUgdXNlZCBieSB0aGUgbG9nZ2luZyBlbnRpdGllcyB0byBpbmRpY2F0ZQorICogdGhlaXIgZXZlbnQgdHlwZS4gQkZBTCB3aWxsIGNvbnZlcnQgdGhlIGludGVnZXIgdmFsdWUgdG8gc3RyaW5nIGZvcm1hdAorICoKKyogcHJvY2VzcyB0byBiZSB1c2VkIHdoaWxlIGNoYW5naW5nIHRoZSBmb2xsb3dpbmcgI2RlZmluZXM6CisgKiAgLSBBbHdheXMgYWRkIG5ldyBlbnRyaWVzIGF0IHRoZSBlbmQKKyAqICAtIGRlZmluZSBjb3JyZXNwb25kaW5nIHN0cmluZyBpbiBCRkFMCisgKiAgLSBEbyBub3QgcmVtb3ZlIGFueSBlbnRyeSBvciByZWFycmFuZ2UgdGhlIG9yZGVyLgorICovCitlbnVtIGJmYV9wbG9nX2VpZCB7CisJQkZBX1BMX0VJRF9JTlZBTElEIAkJPSAwLAorCUJGQV9QTF9FSURfSU9DX0RJU0FCTEUgCQk9IDEsCisJQkZBX1BMX0VJRF9JT0NfRU5BQkxFIAkJPSAyLAorCUJGQV9QTF9FSURfUE9SVF9ESVNBQkxFIAk9IDMsCisJQkZBX1BMX0VJRF9QT1JUX0VOQUJMRSAJCT0gNCwKKwlCRkFfUExfRUlEX1BPUlRfU1RfQ0hBTkdFIAk9IDUsCisJQkZBX1BMX0VJRF9UWCAJCQk9IDYsCisJQkZBX1BMX0VJRF9UWF9BQ0sxIAkJPSA3LAorCUJGQV9QTF9FSURfVFhfUkpUIAkJPSA4LAorCUJGQV9QTF9FSURfVFhfQlNZIAkJPSA5LAorCUJGQV9QTF9FSURfUlggCQkJPSAxMCwKKwlCRkFfUExfRUlEX1JYX0FDSzEgCQk9IDExLAorCUJGQV9QTF9FSURfUlhfUkpUIAkJPSAxMiwKKwlCRkFfUExfRUlEX1JYX0JTWSAJCT0gMTMsCisJQkZBX1BMX0VJRF9DVF9JTiAJCT0gMTQsCisJQkZBX1BMX0VJRF9DVF9PVVQgCQk9IDE1LAorCUJGQV9QTF9FSURfRFJJVkVSX1NUQVJUIAk9IDE2LAorCUJGQV9QTF9FSURfUlNDTiAJCT0gMTcsCisJQkZBX1BMX0VJRF9ERUJVRyAJCT0gMTgsCisJQkZBX1BMX0VJRF9NSVNDIAkJPSAxOSwKKwlCRkFfUExfRUlEX01BWCAJCQk9IDIwCit9OworCisjZGVmaW5lIEJGQV9QTF9FTkFNRV9TVFJMRU4gICAgCTgKK3N0cnVjdCBiZmFfcGxvZ19laWRfc3RyaW5nc19zIHsKKwljaGFyICAgICAgICAgICAgZV9zdHJbQkZBX1BMX0VOQU1FX1NUUkxFTl07Cit9OworCisjZGVmaW5lIEJGQV9QTF9TSUdfTEVOCTgKKyNkZWZpbmUgQkZBX1BMX1NJR19TVFIgICIxMnBsMTIzIgorCisvKgorICogcGVyIHBvcnQgY2lyY3VsYXIgbG9nIGJ1ZmZlcgorICovCitzdHJ1Y3QgYmZhX3Bsb2dfcyB7CisJY2hhciAgICAgICAgICAgIHBsb2dfc2lnW0JGQV9QTF9TSUdfTEVOXTsJLyogU3RhcnQgc2lnbmF0dXJlICovCisJdTggICAgICAgICBwbG9nX2VuYWJsZWQ7CisJdTggICAgICAgICByc3ZkWzddOworCXUzMiAgICAgICAgdGlja3M7CisJdTE2ICAgICAgICBoZWFkOworCXUxNiAgICAgICAgdGFpbDsKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgIHBsb2dfcmVjc1tCRkFfUExfTkxPR19FTlRTXTsKK307CisKK3ZvaWQgYmZhX3Bsb2dfaW5pdChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7Cit2b2lkIGJmYV9wbG9nX3N0cihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsIHUxNiBtaXNjLCBjaGFyICpsb2dfc3RyKTsKK3ZvaWQgYmZhX3Bsb2dfaW50YXJyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsCisJCQl1MzIgKmludGFyciwgdTMyIG51bV9pbnRzKTsKK3ZvaWQgYmZhX3Bsb2dfZmNoZHIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LCB1MTYgbWlzYywKKwkJCXN0cnVjdCBmY2hzX3MgKmZjaGRyKTsKK3ZvaWQgYmZhX3Bsb2dfZmNoZHJfYW5kX3BsKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hkciwgdTMyIHBsZF93MCk7Cit2b2lkIGJmYV9wbG9nX2NsZWFyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKK3ZvaWQgYmZhX3Bsb2dfZW5hYmxlKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKK3ZvaWQgYmZhX3Bsb2dfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7CitiZmFfYm9vbGVhbl90CWJmYV9wbG9nX2dldF9zZXR0aW5nKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKKworI2VuZGlmIC8qIF9fQkZBX1BPUlRMT0dfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3EuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODk1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3EuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9xLmggQ2lyY3VsYXIgcXVldWUgZGVmaW5pdGlvbnMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9RX0hfXworI2RlZmluZSBfX0JGQV9RX0hfXworCisjZGVmaW5lIGJmYV9xX2ZpcnN0KF9xKSAoKHZvaWQgKikoKChzdHJ1Y3QgbGlzdF9oZWFkICopIChfcSkpLT5uZXh0KSkKKyNkZWZpbmUgYmZhX3FfbmV4dChfcWUpCSgoKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xZSkpLT5uZXh0KQorI2RlZmluZSBiZmFfcV9wcmV2KF9xZSkgKCgoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3FlKSktPnByZXYpCisKKy8qCisgKiBiZmFfcV9xZV9pbml0IC0gdG8gaW5pdGlhbGl6ZSBhIHF1ZXVlIGVsZW1lbnQKKyAqLworI2RlZmluZSBiZmFfcV9xZV9pbml0KF9xZSkgewkJCQkJCVwKKwliZmFfcV9uZXh0KF9xZSkgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBOVUxMOwkJCVwKKwliZmFfcV9wcmV2KF9xZSkgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBOVUxMOwkJCVwKK30KKworLyoKKyAqIGJmYV9xX2RlcSAtIGRlcXVldWUgYW4gZWxlbWVudCBmcm9tIGhlYWQgb2YgdGhlIHF1ZXVlCisgKi8KKyNkZWZpbmUgYmZhX3FfZGVxKF9xLCBfcWUpIHsJCQkJCQlcCisJaWYgKCFsaXN0X2VtcHR5KF9xKSkgewkJCQkJXAorCQkoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgKF9xZSkpKSA9IGJmYV9xX25leHQoX3EpOwlcCisJCWJmYV9xX3ByZXYoYmZhX3FfbmV4dCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKSkgPQlcCisJCQkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3EpOyBcCisJCWJmYV9xX25leHQoX3EpID0gYmZhX3FfbmV4dCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKTsgXAorCQlCRkFfUV9EQkdfSU5JVCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKTsJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCSooKHN0cnVjdCBsaXN0X2hlYWQgKiopIChfcWUpKSA9IChzdHJ1Y3QgbGlzdF9oZWFkICopIE5VTEw7IFwKKwl9CQkJCQkJCQlcCit9CisKKy8qCisgKiBiZmFfcV9kZXFfdGFpbCAtIGRlcXVldWUgYW4gZWxlbWVudCBmcm9tIHRhaWwgb2YgdGhlIHF1ZXVlCisgKi8KKyNkZWZpbmUgYmZhX3FfZGVxX3RhaWwoX3EsIF9xZSkgewkJCQkJICAgIFwKKwlpZiAoIWxpc3RfZW1wdHkoX3EpKSB7CQkJCQkgICAgICAgICAgICBcCisJCSooKHN0cnVjdCBsaXN0X2hlYWQgKiopIChfcWUpKSA9IGJmYV9xX3ByZXYoX3EpOwkgICAgXAorCQliZmFfcV9uZXh0KGJmYV9xX3ByZXYoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSkpID0gCSAgICBcCisJCQkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3EpOyAgXAorCQliZmFfcV9wcmV2KF9xKSA9IGJmYV9xX3ByZXYoKihzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpOyAgICBcCisJCUJGQV9RX0RCR19JTklUKCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpOwkJICAgIFwKKwl9IGVsc2UgewkJCQkJCQkgICAgXAorCQkqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSAoX3FlKSkgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBOVUxMOyBcCisJfQkJCQkJCQkJICAgIFwKK30KKworLyoKKyAqICNpZmRlZiBCRkFfREVCVUcgKFVzaW5nIGJmYV9hc3NlcnQgdG8gY2hlY2sgZm9yIGRlYnVnX2J1aWxkIGlzIG5vdAorICogY29uc2lzdGVudCBhY3Jvc3MgbW9kdWxlcykKKyAqLworI2lmbmRlZiBCRkFfUEVSRl9CVUlMRAorI2RlZmluZSBCRkFfUV9EQkdfSU5JVChfcWUpCWJmYV9xX3FlX2luaXQoX3FlKQorI2Vsc2UKKyNkZWZpbmUgQkZBX1FfREJHX0lOSVQoX3FlKQorI2VuZGlmCisKKyNkZWZpbmUgYmZhX3FfaXNfb25fcShfcSwgX3FlKQkJXAorCWJmYV9xX2lzX29uX3FfZnVuYyhfcSwgKHN0cnVjdCBsaXN0X2hlYWQgKikoX3FlKSkKK2V4dGVybiBpbnQgYmZhX3FfaXNfb25fcV9mdW5jKHN0cnVjdCBsaXN0X2hlYWQgKnEsIHN0cnVjdCBsaXN0X2hlYWQgKnFlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3NtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3NtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NzA2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfc20uaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYXNtLmggU3RhdGUgbWFjaGluZSBkZWZpbmVzCisgKi8KKworI2lmbmRlZiBfX0JGQV9TTV9IX18KKyNkZWZpbmUgX19CRkFfU01fSF9fCisKK3R5cGVkZWYgdm9pZCAoKmJmYV9zbV90KSh2b2lkICpzbSwgaW50IGV2ZW50KTsKKworI2RlZmluZSBiZmFfc21fc2V0X3N0YXRlKF9zbSwgX3N0YXRlKQkoX3NtKS0+c20gPSAoYmZhX3NtX3QpKF9zdGF0ZSkKKyNkZWZpbmUgYmZhX3NtX3NlbmRfZXZlbnQoX3NtLCBfZXZlbnQpCShfc20pLT5zbSgoX3NtKSwgKF9ldmVudCkpCisjZGVmaW5lIGJmYV9zbV9nZXRfc3RhdGUoX3NtKQkJKChfc20pLT5zbSkKKyNkZWZpbmUgYmZhX3NtX2NtcF9zdGF0ZShfc20sIF9zdGF0ZSkJKChfc20pLT5zbSA9PSAoYmZhX3NtX3QpKF9zdGF0ZSkpCisKKy8qKgorICogRm9yIGNvbnZlcnRpbmcgZnJvbSBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9uIHRvIHN0YXRlIGVuY29kaW5nLgorICovCitzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgeworCWJmYV9zbV90CXNtOwkvKiAgc3RhdGUgbWFjaGluZSBmdW5jdGlvbgkqLworCWludAkJc3RhdGU7CS8qICBzdGF0ZSBtYWNoaW5lIGVuY29kaW5nCSovCisJY2hhcgkJKm5hbWU7CS8qICBzdGF0ZSBuYW1lIGZvciBkaXNwbGF5CSovCit9OworI2RlZmluZSBCRkFfU00oX3NtKQkoKGJmYV9zbV90KShfc20pKQorCitpbnQgYmZhX3NtX3RvX3N0YXRlKHN0cnVjdCBiZmFfc21fdGFibGVfcyAqc210LCBiZmFfc21fdCBzbSk7CisKKy8qKgorICogU3RhdGUgbWFjaGluZSB3aXRoIGVudHJ5IGFjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9mc21fdCkodm9pZCAqZnNtLCBpbnQgZXZlbnQpOworCisvKioKKyAqIG9jIC0gb2JqZWN0IGNsYXNzIGVnLiBiZmFfaW9jCisgKiBzdCAtIHN0YXRlLCBlZy4gcmVzZXQKKyAqIG90eXBlIC0gb2JqZWN0IHR5cGUsIGVnLiBzdHJ1Y3QgYmZhX2lvY19zCisgKiBldHlwZSAtIG9iamVjdCB0eXBlLCBlZy4gZW51bSBpb2NfZXZlbnQKKyAqLworI2RlZmluZSBiZmFfZnNtX3N0YXRlX2RlY2wob2MsIHN0LCBvdHlwZSwgZXR5cGUpCQlcCisJc3RhdGljIHZvaWQgb2MgIyMgX3NtXyAjIyBzdChvdHlwZSAqIGZzbSwgZXR5cGUgZXZlbnQpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBvYyAjIyBfc21fICMjIHN0ICMjIF9lbnRyeShvdHlwZSAqIGZzbSkKKworI2RlZmluZSBiZmFfZnNtX3NldF9zdGF0ZShfZnNtLCBfc3RhdGUpIGRvIHsJXAorCShfZnNtKS0+ZnNtID0gKGJmYV9mc21fdCkoX3N0YXRlKTsgICAgICBcCisJX3N0YXRlICMjIF9lbnRyeShfZnNtKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9mc21fc2VuZF9ldmVudChfZnNtLCBfZXZlbnQpCVwKKwkoX2ZzbSktPmZzbSgoX2ZzbSksIChfZXZlbnQpKQorI2RlZmluZSBiZmFfZnNtX2NtcF9zdGF0ZShfZnNtLCBfc3RhdGUpCQlcCisJKChfZnNtKS0+ZnNtID09IChiZmFfZnNtX3QpKF9zdGF0ZSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV90cmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfdHJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3NDM5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfdHJjLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfVFJDX0hfXworI2RlZmluZSBfX0JGQV9UUkNfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKyNpZm5kZWYgQkZBX1RSQ19NQVgKKyNkZWZpbmUgQkZBX1RSQ19NQVgJKDQgKiAxMDI0KQorI2VuZGlmCisKKyNpZm5kZWYgQkZBX1RSQ19UUworI2RlZmluZSBCRkFfVFJDX1RTKF90cmNtKQkoKF90cmNtKS0+dGlja3MgKyspCisjZW5kaWYKKworc3RydWN0IGJmYV90cmNfcyB7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MTYJZmlsZW5vOworCXUxNglsaW5lOworI2Vsc2UKKwl1MTYJbGluZTsKKwl1MTYJZmlsZW5vOworI2VuZGlmCisJdTMyCXRpbWVzdGFtcDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIJcnN2ZDsKKwkJCXUzMgl1MzI7CisJCX0gdTMyOworCQl1NjQJdTY0OworCX0gZGF0YTsKK307CisKKworc3RydWN0IGJmYV90cmNfbW9kX3MgeworCXUzMgloZWFkOworCXUzMgl0YWlsOworCXUzMgludHJjOworCXUzMglzdG9wcGVkOworCXUzMgl0aWNrczsKKwl1MzIJcnN2ZFszXTsKKwlzdHJ1Y3QgYmZhX3RyY19zIHRyY1tCRkFfVFJDX01BWF07Cit9OworCisKK2VudW0geworCUJGQV9UUkNfRlcgICA9IDEsCS8qICBmaXJtd2FyZSBtb2R1bGVzICovCisJQkZBX1RSQ19IQUwgID0gMiwJLyogIEJGQSBtb2R1bGVzICovCisJQkZBX1RSQ19GQ1MgID0gMywJLyogIEJGQSBGQ1MgbW9kdWxlcyAqLworCUJGQV9UUkNfTERSViA9IDQsCS8qICBMaW51eCBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfU0RSViA9IDUsCS8qICBTb2xhcmlzIGRyaXZlciBtb2R1bGVzICovCisJQkZBX1RSQ19WRFJWID0gNiwJLyogIHZtd2FyZSBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfV0RSViA9IDcsCS8qICB3aW5kb3dzIGRyaXZlciBtb2R1bGVzICovCisJQkZBX1RSQ19BRU4gID0gOCwJLyogIEFFTiBtb2R1bGUgKi8KKwlCRkFfVFJDX0JJT1MgPSA5LAkvKiAgYmlvcyBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfRUZJICA9IDEwLAkvKiAgRUZJIGRyaXZlciBtb2R1bGVzICovCisJQk5BX1RSQ19XRFJWID0gMTEsCS8qICBCTkEgd2luZG93cyBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfVkRSViA9IDEyLAkvKiAgQk5BIHZtd2FyZSBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfU0RSViA9IDEzLAkvKiAgQk5BIFNvbGFyaXMgZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX0xEUlYgPSAxNCwJLyogIEJOQSBMaW51eCBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfSEFMICA9IDE1LAkvKiAgQk5BIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0NOQSAgPSAxNiwJLyogIENvbW1vbiBtb2R1bGVzICovCisJQk5BX1RSQ19JTURSViA9IDE3CS8qICBCTkEgd2luZG93cyBpbnRlcm1lZGlhdGUgZHJpdmVyIG1vZHVsZXMgKi8KK307CisjZGVmaW5lIEJGQV9UUkNfTU9EX1NICTEwCisjZGVmaW5lIEJGQV9UUkNfTU9EKF9fbW9kKQkoKEJGQV9UUkNfICMjIF9fbW9kKSA8PCBCRkFfVFJDX01PRF9TSCkKKworLyoqCisgKiBEZWZpbmUgYSBuZXcgdHJhY2luZyBmaWxlIChtb2R1bGUpLiBNb2R1bGUgc2hvdWxkIG1hdGNoIG9uZSBkZWZpbmVkIGFib3ZlLgorICovCisjZGVmaW5lIEJGQV9UUkNfRklMRShfX21vZCwgX19zdWJtb2QpCQkJCQlcCisJc3RhdGljIGludCBfX3RyY19maWxlbm8gPSAoKEJGQV9UUkNfICMjIF9fbW9kICMjIF8gIyMgX19zdWJtb2QpIHwgXAorCQkJCQkJIEJGQV9UUkNfTU9EKF9fbW9kKSkKKworCisjZGVmaW5lIGJmYV90cmMzMihfdHJjcCwgX2RhdGEpCVwKKwlfX2JmYV90cmMoKF90cmNwKS0+dHJjbW9kLCBfX3RyY19maWxlbm8sIF9fTElORV9fLCAodTMyKV9kYXRhKQorCisKKyNpZm5kZWYgQkZBX0JPT1RfQlVJTEQKKyNkZWZpbmUgYmZhX3RyYyhfdHJjcCwgX2RhdGEpCVwKKwlfX2JmYV90cmMoKF90cmNwKS0+dHJjbW9kLCBfX3RyY19maWxlbm8sIF9fTElORV9fLCAodTY0KV9kYXRhKQorI2Vsc2UKK3ZvaWQgYmZhX2Jvb3RfdHJjKHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIHUxNiBmaWxlbm8sCisJCQl1MTYgbGluZSwgdTMyIGRhdGEpOworI2RlZmluZSBiZmFfdHJjKF90cmNwLCBfZGF0YSkJXAorCWJmYV9ib290X3RyYygoX3RyY3ApLT50cmNtb2QsIF9fdHJjX2ZpbGVubywgX19MSU5FX18sICh1MzIpX2RhdGEpCisjZW5kaWYKKworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV90cmNfaW5pdChzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbSkKK3sKKwl0cmNtLT5oZWFkID0gdHJjbS0+dGFpbCA9IHRyY20tPnN0b3BwZWQgPSAwOworCXRyY20tPm50cmMgPSBCRkFfVFJDX01BWDsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV90cmNfc3RvcChzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbSkKK3sKKwl0cmNtLT5zdG9wcGVkID0gMTsKK30KKworI2lmZGVmIEZXVFJDCitleHRlcm4gdm9pZCBkY19mbHVzaCh2b2lkICpkYXRhKTsKKyNlbHNlCisjZGVmaW5lIGRjX2ZsdXNoKGRhdGEpCisjZW5kaWYKKworCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYmZhX3RyYyhzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbSwgaW50IGZpbGVubywgaW50IGxpbmUsIHU2NCBkYXRhKQoreworCWludAkJdGFpbCA9IHRyY20tPnRhaWw7CisJc3RydWN0IGJmYV90cmNfcyAJKnRyYyA9ICZ0cmNtLT50cmNbdGFpbF07CisKKwlpZiAodHJjbS0+c3RvcHBlZCkKKwkJcmV0dXJuOworCisJdHJjLT5maWxlbm8gPSAodTE2KSBmaWxlbm87CisJdHJjLT5saW5lID0gKHUxNikgbGluZTsKKwl0cmMtPmRhdGEudTY0ID0gZGF0YTsKKwl0cmMtPnRpbWVzdGFtcCA9IEJGQV9UUkNfVFModHJjbSk7CisJZGNfZmx1c2godHJjKTsKKworCXRyY20tPnRhaWwgPSAodHJjbS0+dGFpbCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7CisJaWYgKHRyY20tPnRhaWwgPT0gdHJjbS0+aGVhZCkKKwkJdHJjbS0+aGVhZCA9ICh0cmNtLT5oZWFkICsgMSkgJiAoQkZBX1RSQ19NQVggLSAxKTsKKwlkY19mbHVzaCh0cmNtKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYmZhX3RyYzMyKHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtLCBpbnQgZmlsZW5vLCBpbnQgbGluZSwgdTMyIGRhdGEpCit7CisJaW50CQl0YWlsID0gdHJjbS0+dGFpbDsKKwlzdHJ1Y3QgYmZhX3RyY19zICp0cmMgPSAmdHJjbS0+dHJjW3RhaWxdOworCisJaWYgKHRyY20tPnN0b3BwZWQpCisJCXJldHVybjsKKworCXRyYy0+ZmlsZW5vID0gKHUxNikgZmlsZW5vOworCXRyYy0+bGluZSA9ICh1MTYpIGxpbmU7CisJdHJjLT5kYXRhLnUzMi51MzIgPSBkYXRhOworCXRyYy0+dGltZXN0YW1wID0gQkZBX1RSQ19UUyh0cmNtKTsKKwlkY19mbHVzaCh0cmMpOworCisJdHJjbS0+dGFpbCA9ICh0cmNtLT50YWlsICsgMSkgJiAoQkZBX1RSQ19NQVggLSAxKTsKKwlpZiAodHJjbS0+dGFpbCA9PSB0cmNtLT5oZWFkKQorCQl0cmNtLT5oZWFkID0gKHRyY20tPmhlYWQgKyAxKSAmIChCRkFfVFJDX01BWCAtIDEpOworCWRjX2ZsdXNoKHRyY20pOworfQorCisjaWZuZGVmIEJGQV9QRVJGX0JVSUxECisjZGVmaW5lIGJmYV90cmNfZnAoX3RyY3AsIF9kYXRhKQliZmFfdHJjKF90cmNwLCBfZGF0YSkKKyNlbHNlCisjZGVmaW5lIGJmYV90cmNfZnAoX3RyY3AsIF9kYXRhKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0JGQV9UUkNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfd2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfd2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDYwYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV93Yy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX3djLmggR2VuZXJpYyB3YWl0IGNvdW50ZXIuCisgKi8KKworI2lmbmRlZiBfX0JGQV9XQ19IX18KKyNkZWZpbmUgX19CRkFfV0NfSF9fCisKK3R5cGVkZWYgdm9pZCAoKmJmYV93Y19yZXN1bWVfdCkgKHZvaWQgKmNiYXJnKTsKKworc3RydWN0IGJmYV93Y19zIHsKKwliZmFfd2NfcmVzdW1lX3Qgd2NfcmVzdW1lOworCXZvaWQJCSp3Y19jYmFyZzsKKwlpbnQJCXdjX2NvdW50OworfTsKKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfd2NfdXAoc3RydWN0IGJmYV93Y19zICp3YykKK3sKKwl3Yy0+d2NfY291bnQrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfd2NfZG93bihzdHJ1Y3QgYmZhX3djX3MgKndjKQoreworCXdjLT53Y19jb3VudC0tOworCWlmICh3Yy0+d2NfY291bnQgPT0gMCkKKwkJd2MtPndjX3Jlc3VtZSh3Yy0+d2NfY2JhcmcpOworfQorCisvKioKKyAqIEluaXRpYWxpemUgYSB3YWl0aW5nIGNvdW50ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3djX2luaXQoc3RydWN0IGJmYV93Y19zICp3YywgYmZhX3djX3Jlc3VtZV90IHdjX3Jlc3VtZSwgdm9pZCAqd2NfY2JhcmcpCit7CisJd2MtPndjX3Jlc3VtZSA9IHdjX3Jlc3VtZTsKKwl3Yy0+d2NfY2JhcmcgPSB3Y19jYmFyZzsKKwl3Yy0+d2NfY291bnQgPSAwOworCWJmYV93Y191cCh3Yyk7Cit9CisKKy8qKgorICogV2FpdCBmb3IgY291bnRlciB0byByZWFjaCB6ZXJvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3djX3dhaXQoc3RydWN0IGJmYV93Y19zICp3YykKK3sKKwliZmFfd2NfZG93bih3Yyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWRhcHRlci5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjA4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZGFwdGVyLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0FEQVBURVJfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQURBUFRFUl9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19tZmcuaD4KKworLyoqCisgKiBCRkEgYWRhcHRlciBsZXZlbCBhdHRyaWJ1dGVzLgorICovCitlbnVtIHsKKwlCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTiA9IFNUUlNaKEJGQV9NRkdfU0VSSUFMTlVNX1NJWkUpLAorCQkJCQkvKgorCQkJCQkgKiE8IGFkYXB0ZXIgc2VyaWFsIG51bSBsZW5ndGgKKwkJCQkJICovCisJQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU4gID0gMTYsICAvKiAgbW9kZWwgbmFtZSBsZW5ndGggKi8KKwlCRkFfQURBUFRFUl9NT0RFTF9ERVNDUl9MRU4gPSAxMjgsIC8qICBtb2RlbCBkZXNjcmlwdGlvbiBsZW5ndGggKi8KKwlCRkFfQURBUFRFUl9NRkdfTkFNRV9MRU4gICAgPSA4LCAgIC8qICBtYW51ZmFjdHVyZXIgbmFtZSBsZW5ndGggKi8KKwlCRkFfQURBUFRFUl9TWU1fTkFNRV9MRU4gICAgPSA2NCwgIC8qICBhZGFwdGVyIHN5bWJvbGljIG5hbWUgbGVuZ3RoICovCisJQkZBX0FEQVBURVJfT1NfVFlQRV9MRU4JICAgID0gNjQsICAvKiAgYWRhcHRlciBvcyB0eXBlIGxlbmd0aCAqLworfTsKKworc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyB7CisJY2hhciAgICAgICAgICAgIG1hbnVmYWN0dXJlcltCRkFfQURBUFRFUl9NRkdfTkFNRV9MRU5dOworCWNoYXIgICAgICAgICAgICBzZXJpYWxfbnVtW0JGQV9BREFQVEVSX1NFUklBTF9OVU1fTEVOXTsKKwl1MzIJcnN2ZDE7CisJY2hhciAgICAgICAgICAgIG1vZGVsW0JGQV9BREFQVEVSX01PREVMX05BTUVfTEVOXTsKKwljaGFyICAgICAgICAgICAgbW9kZWxfZGVzY3JbQkZBX0FEQVBURVJfTU9ERUxfREVTQ1JfTEVOXTsKKwl3d25fdCAgICAgICAgICAgcHd3bjsKKwljaGFyICAgICAgICAgICAgbm9kZV9zeW1uYW1lW0ZDX1NZTU5BTUVfTUFYXTsKKwljaGFyICAgICAgICAgICAgaHdfdmVyW0JGQV9WRVJTSU9OX0xFTl07CisJY2hhciAgICAgICAgICAgIGZ3X3ZlcltCRkFfVkVSU0lPTl9MRU5dOworCWNoYXIgICAgICAgICAgICBvcHRyb21fdmVyW0JGQV9WRVJTSU9OX0xFTl07CisJY2hhciAgICAgICAgICAgIG9zX3R5cGVbQkZBX0FEQVBURVJfT1NfVFlQRV9MRU5dOworCXN0cnVjdCBiZmFfbWZnX3ZwZF9zCXZwZDsKKwlzdHJ1Y3QgbWFjX3MJbWFjOworCisJdTgJCW5wb3J0czsKKwl1OAkJbWF4X3NwZWVkOworCXU4CQlwcm90b3R5cGU7CisJY2hhcgkgICAgICAgIGFzaWNfcmV2OworCisJdTggICAgICAgICBwY2llX2dlbjsKKwl1OCAgICAgICAgIHBjaWVfbGFuZXNfb3JpZzsKKwl1OCAgICAgICAgIHBjaWVfbGFuZXM7CisJdTgJICAgICAgICBjbmFfY2FwYWJsZTsKK307CisKKy8qKgorICogQkZBIGFkYXB0ZXIgbGV2ZWwgZXZlbnRzCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9QT1JUX0FFTl9BREQ6ICAgICAgICBbaW5dOiBOb25lICAgICBbb3V0XTogc2VyaWFsX251bSwgcHd3biwgbnBvcnRzCisgKiBCRkFfUE9SVF9BRU5fUkVNT1ZFOiAgICAgW2luXTogcHd3biAgICAgW291dF06IHNlcmlhbF9udW0sIHB3d24sIG5wb3J0cworICovCitlbnVtIGJmYV9hZGFwdGVyX2Flbl9ldmVudCB7CisJQkZBX0FEQVBURVJfQUVOX0FERCAJPSAxLAkvKiAgTmV3IEFkYXB0ZXIgZm91bmQgZXZlbnQgKi8KKwlCRkFfQURBUFRFUl9BRU5fUkVNT1ZFIAk9IDIsCS8qICBBZGFwdGVyIHJlbW92ZWQgZXZlbnQgKi8KK307CisKK3N0cnVjdCBiZmFfYWRhcHRlcl9hZW5fZGF0YV9zIHsKKwljaGFyICAgICAgICAgICAgc2VyaWFsX251bVtCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTl07CisJdTMyICAgICAgICBucG9ydHM7CS8qICBOdW1iZXIgb2YgTlBvcnRzICovCisJd3duX3QgICAgICAgICAgIHB3d247CS8qICBXV04gb2Ygb25lIG9mIGl0cyBwaHlzaWNhbCBwb3J0ICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19BREFQVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWVuLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzgxYTYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWVuLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfQUVOX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0FFTl9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYWRhcHRlci5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfbHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pdG5pbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdGluLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pcGZjLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hdWRpdC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfZXRocG9ydC5oPgorCitlbnVtIGJmYV9hZW5fY2F0ZWdvcnkgeworCUJGQV9BRU5fQ0FUX0FEQVBURVIgCT0gMSwKKwlCRkFfQUVOX0NBVF9QT1JUIAk9IDIsCisJQkZBX0FFTl9DQVRfTFBPUlQgCT0gMywKKwlCRkFfQUVOX0NBVF9SUE9SVCAJPSA0LAorCUJGQV9BRU5fQ0FUX0lUTklNIAk9IDUsCisJQkZBX0FFTl9DQVRfVElOIAk9IDYsCisJQkZBX0FFTl9DQVRfSVBGQyAJPSA3LAorCUJGQV9BRU5fQ0FUX0FVRElUIAk9IDgsCisJQkZBX0FFTl9DQVRfSU9DIAk9IDksCisJQkZBX0FFTl9DQVRfRVRIUE9SVAk9IDEwLAorCUJGQV9BRU5fTUFYX0NBVCAJPSAxMAorfTsKKworI3ByYWdtYSBwYWNrKDEpCit1bmlvbiBiZmFfYWVuX2RhdGFfdSB7CisJc3RydWN0IGJmYV9hZGFwdGVyX2Flbl9kYXRhX3MgCWFkYXB0ZXI7CisJc3RydWN0IGJmYV9wb3J0X2Flbl9kYXRhX3MgCXBvcnQ7CisJc3RydWN0IGJmYV9scG9ydF9hZW5fZGF0YV9zIAlscG9ydDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgCXJwb3J0OworCXN0cnVjdCBiZmFfaXRuaW1fYWVuX2RhdGFfcyAJaXRuaW07CisJc3RydWN0IGJmYV9hdWRpdF9hZW5fZGF0YV9zIAlhdWRpdDsKKwlzdHJ1Y3QgYmZhX2lvY19hZW5fZGF0YV9zIAlpb2M7CisJc3RydWN0IGJmYV9ldGhwb3J0X2Flbl9kYXRhX3MgCWV0aHBvcnQ7Cit9OworCitzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zIHsKKwllbnVtIGJmYV9hZW5fY2F0ZWdvcnkgCWFlbl9jYXRlZ29yeTsKKwlpbnQJCQlhZW5fdHlwZTsKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSAgCWFlbl9kYXRhOworCXN0cnVjdCBiZmFfdGltZXZhbF9zICAgCWFlbl90djsKKwlzMzIgICAgICAgICAJc2VxX251bTsKKwlzMzIgICAgICAgICAJYmZhZF9udW07CisJczMyICAgICAgICAgCXJzdmRbMV07Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZGVmaW5lIGJmYV9hZW5fZXZlbnRfdCBpbnQKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQUVOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXVkaXQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1ZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzYTk2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1ZGl0LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfQVVESVRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQVVESVRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKy8qKgorICogQkZBIGF1ZGl0IGV2ZW50cworICovCitlbnVtIGJmYV9hdWRpdF9hZW5fZXZlbnQgeworCUJGQV9BVURJVF9BRU5fQVVUSF9FTkFCTEUgCT0gMSwKKwlCRkFfQVVESVRfQUVOX0FVVEhfRElTQUJMRSAJPSAyLAorfTsKKworLyoqCisgKiBhdWRpdCBldmVudCBkYXRhCisgKi8KK3N0cnVjdCBiZmFfYXVkaXRfYWVuX2RhdGFfcyB7CisJd3duX3QgICAgICAgICAgIHB3d247Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19BVURJVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1dGguaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1dGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE5YzgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXV0aC5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfQVVUSF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19BVVRIX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorCisjZGVmaW5lIFBVQkxJQ19LRVkJCQkxNTQwOQorI2RlZmluZSBQUklWQVRFX0tFWQkJCTE5MDA5CisjZGVmaW5lIEtFWV9MRU4JCQkJMzIzOTkKKyNkZWZpbmUgQkZBX0FVVEhfU0VDUkVUX1NUUklOR19MRU4JMjU2CisjZGVmaW5lIEJGQV9BVVRIX0ZBSUxfVElNRU9VVAkJMHhGRgorCisvKioKKyAqIEF1dGhlbnRpY2F0aW9uIHN0YXR1cworICovCitlbnVtIGJmYV9hdXRoX3N0YXR1cyB7CisJQkZBX0FVVEhfU1RBVFVTX05PTkUgCT0gMCwJLyogIG5vIGF1dGhlbnRpY2F0aW9uICovCisJQkZBX0FVVEhfVU5JTklUIAk9IDEsCS8qICBzdGF0ZSAtIHVuaW5pdCAqLworCUJGQV9BVVRIX05FR19TRU5EIAk9IDIsCS8qICBzdGF0ZSAtIG5lZ290aWF0ZSBzZW5kICovCisJQkZBX0FVVEhfQ0hBTF9XQUlUIAk9IDMsCS8qICBzdGF0ZSAtIGNoYWxsZW5nZSB3YWl0ICovCisJQkZBX0FVVEhfTkVHX1JFVFJZIAk9IDQsCS8qICBzdGF0ZSAtIG5lZ290aWF0ZSByZXRyeSAqLworCUJGQV9BVVRIX1JFUExZX1NFTkQgCT0gNSwJLyogIHN0YXRlIC0gcmVwbHkgc2VuZCAqLworCUJGQV9BVVRIX1NUQVRVU19XQUlUIAk9IDYsCS8qICBzdGF0ZSAtIHN0YXR1cyB3YWl0ICovCisJQkZBX0FVVEhfU1VDQ0VTUyAJPSA3LAkvKiAgc3RhdGUgLSBzdWNjZXNzICovCisJQkZBX0FVVEhfRkFJTEVEIAk9IDgsCS8qICBzdGF0ZSAtIGZhaWxlZCAqLworCUJGQV9BVVRIX1NUQVRVU19VTktOT1dOID0gOSwJLyogIGF1dGhlbnRpY2F0aW9uIHN0YXR1cyB1bmtub3duICovCit9OworCitzdHJ1Y3QgYXV0aF9wcm90b19zdGF0c19zIHsKKwl1MzIgICAgICAgIGF1dGhfcmp0czsKKwl1MzIgICAgICAgIGF1dGhfbmVnczsKKwl1MzIgICAgICAgIGF1dGhfZG9uZXM7CisKKwl1MzIgICAgICAgIGRoY2hhcF9jaGFsbGVuZ2VzOworCXUzMiAgICAgICAgZGhjaGFwX3JlcGxpZXM7CisJdTMyICAgICAgICBkaGNoYXBfc3VjY2Vzc2VzOworfTsKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiByZWxhdGVkIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9hdXRoX3N0YXRzX3MgeworCXUzMiAgICAgICAgICAgYXV0aF9mYWlsdXJlczsJLyogIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzICovCisJdTMyICAgICAgICAgICBhdXRoX3N1Y2Nlc3NlczsJLyogIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NlcyovCisJc3RydWN0IGF1dGhfcHJvdG9fc3RhdHNfcyBhdXRoX3J4X3N0YXRzOyAvKiAgUnggcHJvdG9jb2wgc3RhdHMgKi8KKwlzdHJ1Y3QgYXV0aF9wcm90b19zdGF0c19zIGF1dGhfdHhfc3RhdHM7IC8qICBUeCBwcm90b2NvbCBzdGF0cyAqLworfTsKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiBoYXNoIGZ1bmN0aW9uIGFsZ29yaXRobXMKKyAqLworZW51bSBiZmFfYXV0aF9hbGdvIHsKKwlCRkFfQVVUSF9BTEdPX01ENSAJPSAxLAkvKiAgTWVzc2FnZS1EaWdlc3QgYWxnb3JpdGhtIDUgKi8KKwlCRkFfQVVUSF9BTEdPX1NIQTEgCT0gMiwJLyogIFNlY3VyZSBIYXNoIEFsZ29yaXRobSAxICovCisJQkZBX0FVVEhfQUxHT19NUyAJPSAzLAkvKiAgTUQ1LCB0aGVuIFNIQS0xICovCisJQkZBX0FVVEhfQUxHT19TTSAJPSA0LAkvKiAgU0hBLTEsIHRoZW4gTUQ1ICovCit9OworCisvKioKKyAqIERIIEdyb3VwcworICoKKyAqIEN1cnJlbnQgdmFsdWUgY291bGQgYmUgY29tYmluYXRpb24gb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMKKyAqLworZW51bSBiZmFfYXV0aF9ncm91cCB7CisJQkZBX0FVVEhfR1JPVVBfREhOVUxMIAk9IDAsCS8qICBESCBOVUxMICh2YWx1ZSA9PSAwKSAqLworCUJGQV9BVVRIX0dST1VQX0RINzY4IAk9IDEsCS8qICBESCBncm91cCA3NjggKHZhbHVlID09IDEpICovCisJQkZBX0FVVEhfR1JPVVBfREgxMDI0IAk9IDIsCS8qICBESCBncm91cCAxMDI0ICh2YWx1ZSA9PSAyKSAqLworCUJGQV9BVVRIX0dST1VQX0RIMTI4MCAJPSA0LAkvKiAgREggZ3JvdXAgMTI4MCAodmFsdWUgPT0gMykgKi8KKwlCRkFfQVVUSF9HUk9VUF9ESDE1MzYgCT0gOCwJLyogIERIIGdyb3VwIDE1MzYgKHZhbHVlID09IDQpICovCisKKwlCRkFfQVVUSF9HUk9VUF9BTEwgCT0gMjU2CS8qICBVc2UgZGVmYXVsdCBESCBncm91cCBvcmRlcgorCQkJCQkgKiAgICAwLCAxLCAyLCAzLCA0ICovCit9OworCisvKioKKyAqIEF1dGhlbnRpY2F0aW9uIHNlY3JldCBzb3VyY2VzCisgKi8KK2VudW0gYmZhX2F1dGhfc2VjcmV0c291cmNlIHsKKwlCRkFfQVVUSF9TRUNTUkNfTE9DQUwgCT0gMSwJLyogIGxvY2FsbHkgY29uZmlndXJlZCAqLworCUJGQV9BVVRIX1NFQ1NSQ19SQURJVVMgCT0gMiwJLyogIHVzZSByYWRpdXMgc2VydmVyICovCisJQkZBX0FVVEhfU0VDU1JDX1RBQ0FDUyAJPSAzLAkvKiAgVEFDQUNTIHNlcnZlciAqLworfTsKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBiZmFfYXV0aF9hdHRyX3MgeworCWVudW0gYmZhX2F1dGhfc3RhdHVzIAlzdGF0dXM7CisJZW51bSBiZmFfYXV0aF9hbGdvIAlhbGdvOworCWVudW0gYmZhX2F1dGhfZ3JvdXAgCWRoX2dycDsKKwl1MTYJCXJqdF9jb2RlOworCXUxNgkJcmp0X2NvZGVfZXhwOworCXU4CQkJc2VjcmV0X3NldDsKKwl1OAkJCXJlc3ZbN107Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19BVVRIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYm9vdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNGFhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ib290LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfQk9PVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19CT09UX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCitlbnVtIHsKKwlCRkFfQk9PVF9CT09UTFVOX01BWCA9IDQsCS8qICBtYXhpbXVtIGJvb3QgbHVuIHBlciBJT0MgKi8KK307CisKKyNkZWZpbmUgQk9PVF9DRkdfUkVWMQkxCisKKy8qKgorICogICAgICBCb290IG9wdGlvbnMgc2V0dGluZy4gQm9vdCBvcHRpb25zIHNldHRpbmcgZGV0ZXJtaW5lcyBmcm9tIHdoZXJlCisgKiAgICAgIHRvIGdldCB0aGUgYm9vdCBsdW4gaW5mb3JtYXRpb24KKyAqLworZW51bSBiZmFfYm9vdF9ib290b3B0IHsKKyAgICBCRkFfQk9PVF9BVVRPX0RJU0NPVkVSID0gMCwgICAgLyogIEJvb3QgZnJvbSBibHVuIHByb3ZpZGVkIGJ5IGZhYnJpYyAqLworICAgIEJGQV9CT09UX1NUT1JFRF9CTFVOICAgPSAxLCAgICAvKiAgQm9vdCBmcm9tIGJsdW5zIHN0b3JlZCBpbiBmbGFzaCAgICovCisgICAgQkZBX0JPT1RfRklSU1RfTFVOICAgICA9IDIsICAgIC8qICBCb290IGZyb20gZmlyc3QgZGlzY292ZXJlZCBibHVuICAgKi8KK307CisKKy8qKgorICogQm9vdCBsdW4gaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBiZmFfYm9vdF9ib290bHVuX3MgeworCXd3bl90ICAgICAgICAgICBwd3duOwkvKiAgcG9ydCB3d24gb2YgdGFyZ2V0ICovCisJbHVuX3QgICAgICAgICAgIGx1bjsJLyogIDY0LWJpdCBsdW4gKi8KK307CisKKy8qKgorICogQk9PVCBib290IGNvbmZpZ3VyYXRvbgorICovCitzdHJ1Y3QgYmZhX2Jvb3RfY2ZnX3MgeworCXU4ICAgICAgICAgdmVyc2lvbjsKKwl1OCAgICAgICAgIHJzdmQxOworCXUxNiAgICAgICAgY2hrc3VtOworCisJdTggICAgICAgICBlbmFibGU7CQkvKiAgZW5hYmxlL2Rpc2FibGUgU0FOIGJvb3QgKi8KKwl1OCAgICAgICAgIHNwZWVkOwkJLyogIGJvb3Qgc3BlZWQgc2V0dGluZ3MgKi8KKwl1OCAgICAgICAgIHRvcG9sb2d5OwkvKiAgYm9vdCB0b3BvbG9neSBzZXR0aW5nICovCisJdTggICAgICAgICBib290b3B0OwkvKiAgYmZhX2Jvb3RfYm9vdG9wdF90ICovCisKKwl1MzIgICAgICAgIG5ibHVuczsJCS8qICBudW1iZXIgb2YgYm9vdCBsdW5zICovCisKKwl1MzIgICAgICAgIHJzdmQyOworCisJc3RydWN0IGJmYV9ib290X2Jvb3RsdW5fcyBibHVuW0JGQV9CT09UX0JPT1RMVU5fTUFYXTsKKwlzdHJ1Y3QgYmZhX2Jvb3RfYm9vdGx1bl9zIGJsdW5fZGlzY1tCRkFfQk9PVF9CT09UTFVOX01BWF07Cit9OworCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0JPT1RfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19jZWUuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2NlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMGEyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19jZWUuaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogIGJmYV9kZWZzX2NlZS5oIEludGVyZmFjZSBkZWNsYXJhdGlvbnMgYmV0d2VlbiBob3N0IGJhc2VkCisgKglCRkFMIGFuZCBEQ0JYL0xMRFAgbW9kdWxlIGluIEZpcm13YXJlCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0NFRV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19DRUVfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisjZGVmaW5lIEJGQV9DRUVfTExEUF9NQVhfU1RSSU5HX0xFTiAoMTI4KQorCisKKy8qIEZJWE1FOiB0aGlzIGlzIGNvbWluZyBmcm9tIHRoZSBwcm90b2NvbCBzcGVjLiBDYW4gdGhlIGhvc3QgJiBhcHBzIHNoYXJlIHRoZQorICAgcHJvdG9jb2wgLmggZmlsZXMgPworICovCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX09USEVSICAgICAgIDB4MDAwMQorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9SRVBFQVRFUiAgICAweDAwMDIKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfTUFDX0JSSURHRSAgMHgwMDA0CisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1dMQU5fQVAgICAgIDB4MDAwOAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9ST1VURVIgICAgICAweDAwMTAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfVEVMRVBIT05FIAkgMHgwMDIwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX0RPQ1NJU19DRCAgIDB4MDA0MAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9TVEFUSU9OICAgICAweDAwODAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfQ1ZMQU4JICAgICAweDAxMDAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfU1ZMQU4gCSAgICAgMHgwMjAwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1RQTVIJCSAweDA0MDAKKworCisvKiBMTERQIHN0cmluZyB0eXBlICovCitzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHsKKwl1OCBzdWJfdHlwZTsKKwl1OCBsZW47CisJdTggcnN2ZFsyXTsKKwl1OCB2YWx1ZVtCRkFfQ0VFX0xMRFBfTUFYX1NUUklOR19MRU5dOworfTsKKworCisvKiBMTERQIHBhcmFtdGVycyAqLworc3RydWN0IGJmYV9jZWVfbGxkcF9jZmdfcyB7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBjaGFzc2lzX2lkOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3MgcG9ydF9pZDsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHBvcnRfZGVzYzsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHN5c19uYW1lOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3Mgc3lzX2Rlc2M7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBtZ210X2FkZHI7CisJdTE2ICAgIHRpbWVfdG9faW50ZXJ2YWw7CisJdTE2ICAgIGVuYWJsZWRfc3lzdGVtX2NhcDsKK307CisKK2VudW0gYmZhX2NlZV9kY2J4X3ZlcnNpb25fZSB7CisJRENCWF9QUk9UT0NPTF9QUkVDRUUgPSAxLAorCURDQlhfUFJPVE9DT0xfQ0VFICAgID0gMiwKK307CisKK2VudW0gYmZhX2NlZV9sbHNfZSB7CisJQ0VFX0xMU19ET1dOX05PX1RMViA9IDAsIC8qIExMUyBpcyBkb3duIGJlY2F1c2UgdGhlIFRMViBub3Qgc2VudCBieQorCQkJCSAgKiB0aGUgcGVlciAqLworCUNFRV9MTFNfRE9XTiAgICAgICAgPSAxLCAvKiBMTFMgaXMgZG93biBhcyBhZHZlcnRpc2VkIGJ5IHRoZSBwZWVyICovCisJQ0VFX0xMU19VUCAgICAgICAgICA9IDIsCit9OworCisvKiBDRUUvRENCWCBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgYmZhX2NlZV9kY2J4X2NmZ19zIHsKKwl1OCBwZ2lkWzhdOworCXU4IHBnX3BlcmNlbnRhZ2VbOF07CisJdTggcGZjX2VuYWJsZWQ7ICAgICAgICAgIC8qIGJpdG1hcCBvZiBwcmlvcnRpZXMgd2l0aCBQRkMgZW5hYmxlZCAqLworCXU4IGZjb2VfdXNlcl9wcmlvcml0eTsgICAvKiBiaXRtYXAgb2YgcHJpb3JpdGllcyB1c2VkIGZvciBGY29FCisJCQkJICAgICAgICogdHJhZmZpYyAqLworCXU4IGRjYnhfdmVyc2lvbjsJLyogb3BlcmF0aW5nIHZlcnNpb246Q0VFIG9yIHByZUNFRSAqLworCXU4IGxsc19mY29lOwkvKiBGQ29FIExvZ2ljYWwgTGluayBTdGF0dXMgKi8KKwl1OCBsbHNfbGFuOwkvKiBMQU4gTG9naWNhbCBMaW5rIFN0YXR1cyAqLworCXU4IHJzdmRbM107Cit9OworCisvKiBDRUUgc3RhdHVzICovCisvKiBNYWtpbmcgdGhpcyB0byB0cmktc3RhdGUgZm9yIHRoZSBiZW5lZml0IG9mIHBvcnQgbGlzdCBjb21tYW5kICovCitlbnVtIGJmYV9jZWVfc3RhdHVzX2UgeworICAgIENFRV9QSFlfRE9XTiA9IDAsCisgICAgQ0VFX1BIWV9VUCA9IDEsCisgICAgQ0VFX1VQID0gMiwKK307CisKKy8qIENFRSBRdWVyeSAqLworc3RydWN0IGJmYV9jZWVfYXR0cl9zIHsKKwl1OCAgICAgICAgICAgICAgICAgICBjZWVfc3RhdHVzOworCXU4ICAgICAgICAgICAgICAgICAgIGVycm9yX3JlYXNvbjsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX2NmZ19zIGxsZHBfcmVtb3RlOworCXN0cnVjdCBiZmFfY2VlX2RjYnhfY2ZnX3MgZGNieF9yZW1vdGU7CisJbWFjX3Qgc3JjX21hYzsKKwl1OCBsaW5rX3NwZWVkOworCXU4IGZpbGxlclszXTsKK307CisKKworCisKKy8qIExMRFAvRENCWC9DRUUgU3RhdGlzdGljcyAqLworCitzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MgeworCXUzMiBmcmFtZXNfdHJhbnNtaXR0ZWQ7CisJdTMyIGZyYW1lc19hZ2VkX291dDsKKwl1MzIgZnJhbWVzX2Rpc2NhcmRlZDsKKwl1MzIgZnJhbWVzX2luX2Vycm9yOworCXUzMiBmcmFtZXNfcmN2ZDsKKwl1MzIgdGx2c19kaXNjYXJkZWQ7CisJdTMyIHRsdnNfdW5yZWNvZ25pemVkOworfTsKKworc3RydWN0IGJmYV9jZWVfZGNieF9zdGF0c19zIHsKKwl1MzIgc3VidGx2c191bnJlY29nbml6ZWQ7CisJdTMyIG5lZ290aWF0aW9uX2ZhaWxlZDsKKwl1MzIgcmVtb3RlX2NmZ19jaGFuZ2VkOworCXUzMiB0bHZzX3JlY2VpdmVkOworCXUzMiB0bHZzX2ludmFsaWQ7CisJdTMyIHNlcW5vOworCXUzMiBhY2tubzsKKwl1MzIgcmVjdmRfc2Vxbm87CisJdTMyIHJlY3ZkX2Fja25vOworfTsKKworc3RydWN0IGJmYV9jZWVfY2ZnX3N0YXRzX3MgeworCXUzMiBjZWVfc3RhdHVzX2Rvd247CisJdTMyIGNlZV9zdGF0dXNfdXA7CisJdTMyIGNlZV9od19jZmdfY2hhbmdlZDsKKwl1MzIgcmVjdmRfaW52YWxpZF9jZmc7Cit9OworCisKK3N0cnVjdCBiZmFfY2VlX3N0YXRzX3MgeworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RhdHNfcyBsbGRwX3N0YXRzOworCXN0cnVjdCBiZmFfY2VlX2RjYnhfc3RhdHNfcyBkY2J4X3N0YXRzOworCXN0cnVjdCBiZmFfY2VlX2NmZ19zdGF0c19zICBjZmdfc3RhdHM7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisKKyNlbmRpZgkvKiBfX0JGQV9ERUZTX0NFRV9IX18gKi8KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19kcml2ZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2RyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MDQ5ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19kcml2ZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19EUklWRVJfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfRFJJVkVSX0hfXworCisvKioKKyAqIERyaXZlciBzdGF0aXN0aWNzCisgKi8KKwl1MTYgICAgdG1faW9fYWJvcnQ7CisgICAgdTE2ICAgIHRtX2lvX2Fib3J0X2NvbXA7CisgICAgdTE2ICAgIHRtX2x1bl9yZXNldDsKKyAgICB1MTYgICAgdG1fbHVuX3Jlc2V0X2NvbXA7CisgICAgdTE2ICAgIHRtX3RhcmdldF9yZXNldDsKKyAgICB1MTYgICAgdG1fYnVzX3Jlc2V0OworICAgIHUxNiAgICBpb2NfcmVzdGFydDsgICAgICAgIC8qICBJT0MgcmVzdGFydCBjb3VudCAqLworICAgIHUxNiAgICBpb19wZW5kaW5nOyAgICAgICAgIC8qICBvdXRzdGFuZGluZyBpbyBjb3VudCBwZXItSU9DICovCisgICAgdTY0ICAgIGNvbnRyb2xfcmVxOworICAgIHU2NCAgICBpbnB1dF9yZXE7CisgICAgdTY0ICAgIG91dHB1dF9yZXE7CisgICAgdTY0ICAgIGlucHV0X3dvcmRzOworICAgIHU2NCAgICBvdXRwdXRfd29yZHM7Cit9IGJmYV9kcml2ZXJfc3RhdHNfdDsKKworCisjZW5kaWYgLyogX19CRkFfREVGU19EUklWRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ldGhwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ldGhwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmOWIzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2V0aHBvcnQuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19FVEhQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0VUSFBPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8Y25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaD4KKyNpbmNsdWRlIDxjbmEvcHN0YXRzL2V0aHBvcnRfZGVmcy5oPgorCitzdHJ1Y3QgYm5hX3R4X2luZm9fcyB7CisJdTMyICAgIG1pbmlwb3J0X3N0YXRlOworCXUzMiAgICBhZGFwdGVyX3N0YXRlOworCXU2NCAgICB0eF9jb3VudDsKKwl1NjQgICAgdHhfd2k7CisJdTY0ICAgIHR4X3NnOworCXU2NCAgICB0eF90Y3BfY2hrc3VtOworCXU2NCAgICB0eF91ZHBfY2hrc3VtOworCXU2NCAgICB0eF9pcF9jaGtzdW07CisJdTY0ICAgIHR4X2xzb3YxOworCXU2NCAgICB0eF9sc292MjsKKwl1NjQgICAgdHhfbWF4X3NnX2xlbiA7Cit9OworCitzdHJ1Y3QgYm5hX3J4X3F1ZXVlX2luZm9fcyB7CisJdTE2ICAgIHFfaWQgOworCXUxNiAgICBidWZfc2l6ZSA7CisJdTE2ICAgIGJ1Zl9jb3VudCA7CisJdTE2ICAgIHJzdmQgOworCXU2NCAgICByeF9jb3VudCA7CisJdTY0ICAgIHJ4X2Ryb3BwZWQgOworCXU2NCAgICByeF91bnN1cHBvcnRlZCA7CisJdTY0ICAgIHJ4X2ludGVybmFsX2VyciA7CisJdTY0ICAgIHJzc19jb3VudCA7CisJdTY0ICAgIHZsYW5fY291bnQgOworCXU2NCAgICByeF90Y3BfY2hrc3VtIDsKKwl1NjQgICAgcnhfdWRwX2Noa3N1bSA7CisJdTY0ICAgIHJ4X2lwX2Noa3N1bSA7CisJdTY0ICAgIHJ4X2hkcyA7Cit9OworCitzdHJ1Y3QgYm5hX3J4X3Ffc2V0X3MgeworCXUxNiAgICBxX3NldF90eXBlOworCXUzMiAgICBtaW5pcG9ydF9zdGF0ZTsKKwl1MzIgICAgYWRhcHRlcl9zdGF0ZTsKKwlzdHJ1Y3QgYm5hX3J4X3F1ZXVlX2luZm9fcyAgICByeF9xdWV1ZVsyXTsKK307CisKK3N0cnVjdCBibmFfcG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYm5hX3R4X2luZm9fcyAgIHR4X3N0YXRzOworCXUxNiAgICAgICAgcXNldF9jb3VudCA7CisJc3RydWN0IGJuYV9yeF9xX3NldF9zICByeF9xc2V0WzhdOworfTsKKworc3RydWN0IGJmYV9ldGhwb3J0X3N0YXRzX3MgeworCXN0cnVjdCBibmFfc3RhdHNfdHhmCXR4Zl9zdGF0c1sxXTsKKwlzdHJ1Y3QgYm5hX3N0YXRzX3J4ZglyeGZfc3RhdHNbMV07CisJc3RydWN0IGJuYWRfZHJ2X3N0YXRzIGRydl9zdGF0czsKK307CisKKy8qKgorICogRXRoZXJuZXQgcG9ydCBldmVudHMKKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX1BPUlRfQUVOX0VUSF9MSU5LVVA6ICAgIFtpbl06IG1hYyBbb3V0XTogbWFjCisgKiBCRkFfUE9SVF9BRU5fRVRIX0xJTktET1dOOiAgW2luXTogbWFjIFtvdXRdOiBtYWMKKyAqIEJGQV9QT1JUX0FFTl9FVEhfRU5BQkxFOiAgW2luXTogbWFjIFtvdXRdOiBtYWMKKyAqIEJGQV9QT1JUX0FFTl9FVEhfRElTQUJMRTogIFtpbl06IG1hYyBbb3V0XTogbWFjCisgKgorICovCitlbnVtIGJmYV9ldGhwb3J0X2Flbl9ldmVudCB7CisJQkZBX0VUSFBPUlRfQUVOX0xJTktVUCA9IDEsIC8qICBCYXNlIFBvcnQgRXRoZXJuZXQgbGluayB1cCBldmVudCAqLworCUJGQV9FVEhQT1JUX0FFTl9MSU5LRE9XTiA9IDIsIC8qICBCYXNlIFBvcnQgRXRoZXJuZXQgbGluayBkb3duIGV2ZW50ICovCisJQkZBX0VUSFBPUlRfQUVOX0VOQUJMRSA9IDMsIC8qICBCYXNlIFBvcnQgRXRoZXJuZXQgbGluayBlbmFibGUgZXZlbnQgKi8KKwlCRkFfRVRIUE9SVF9BRU5fRElTQUJMRSA9IDQsIC8qICBCYXNlIFBvcnQgRXRoZXJuZXQgbGluayBkaXNhYmxlCisJCQkJICAgICAgKiBldmVudCAqLworfTsKKworc3RydWN0IGJmYV9ldGhwb3J0X2Flbl9kYXRhX3MgeworCW1hY190IG1hYzsJLyogIE1BQyBhZGRyZXNzIG9mIHRoZSBwaHlzaWNhbCBwb3J0ICovCit9OworCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0VUSFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZmNwaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDhmNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZmNwaW0uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfRkNQSU1fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfRkNQSU1fSF9fCisKK3N0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyB7CisJdTMyICAgICAgICB0b3RhbF9pb3M7CS8qICBUb3RhbCBJTyBjb3VudCAqLworCXUzMiAgICAgICAgcXJlc3VtZXM7CS8qICBJTyB3YWl0aW5nIGZvciBDUSBzcGFjZSAqLworCXUzMiAgICAgICAgbm9faW90YWdzOwkvKiAgTk8gSU8gY29udGV4dHMgKi8KKwl1MzIgICAgICAgIGlvX2Fib3J0czsJLyogIElPIGFib3J0IHJlcXVlc3RzICovCisJdTMyICAgICAgICBub190c2tpbXM7CS8qICBOTyB0YXNrIG1hbmFnZW1lbnQgY29udGV4dHMgKi8KKwl1MzIgICAgICAgIGlvY29tcF9vazsJLyogIElPIGNvbXBsZXRpb25zIHdpdGggT0sgc3RhdHVzICovCisJdTMyICAgICAgICBpb2NvbXBfdW5kZXJydW47CS8qICBJTyB1bmRlcnJ1biAoZ29vZCkgKi8KKwl1MzIgICAgICAgIGlvY29tcF9vdmVycnVuOwkvKiAgSU8gb3ZlcnJ1biAoZ29vZCkgKi8KKwl1MzIgICAgICAgIGlvY29tcF9hYm9ydGVkOwkvKiAgQWJvcnRlZCBJTyByZXF1ZXN0cyAqLworCXUzMiAgICAgICAgaW9jb21wX3RpbWVkb3V0OwkvKiAgSU8gdGltZW91dHMgKi8KKwl1MzIgICAgICAgIGlvY29tX25leHVzX2Fib3J0OwkvKiAgSU8gc2VsZWN0aW9uIHRpbWVvdXRzICovCisJdTMyICAgICAgICBpb2NvbV9wcm90b19lcnI7CS8qICBJTyBwcm90b2NvbCBlcnJvcnMgKi8KKwl1MzIgICAgICAgIGlvY29tX2RpZl9lcnI7CS8qICBJTyBTQkMtMyBwcm90ZWN0aW9uIGVycm9ycyAqLworCXUzMiAgICAgICAgaW9jb21fdG1fYWJvcnQ7CS8qICBJTyBhYm9ydGVkIGJ5IFRNIHJlcXVlc3RzICovCisJdTMyICAgICAgICBpb2NvbV9zcWVyX25lZWRlZDsJLyogIElPIHJldHJ5IGZvciBTUSBlcnJvcgorCQkJCQkJICpyZWNvdmVyeSAqLworCXUzMiAgICAgICAgaW9jb21fcmVzX2ZyZWU7CS8qICBEZWxheWVkIGZyZWVpbmcgb2YgSU8gcmVzb3VyY2VzICovCisJdTMyICAgICAgICBpb2NvbXBfc2NzaWVycjsJLyogIElPIHdpdGggbm9uLWdvb2QgU0NTSSBzdGF0dXMgKi8KKwl1MzIgICAgICAgIGlvY29tX2hvc3RhYnJ0czsJLyogIEhvc3QgSU8gYWJvcnQgcmVxdWVzdHMgKi8KKwl1MzIgICAgICAgIGlvY29tX3V0YWdzOwkvKiAgSU8gY29tcCB3aXRoIHVua25vd24gdGFncyAqLworCXUzMiAgICAgICAgaW9fY2xlYW51cHM7CS8qICBJTyBpbXBsaWNpdGx5IGFib3J0ZWQgKi8KKwl1MzIgICAgICAgIGlvX3RtYWJvcnRzOwkvKiAgSU8gYWJvcnRlZCBkdWUgdG8gVE0gY29tbWFuZHMgKi8KKwl1MzIgICAgICAgIHJzdmQ7Cit9OworI2VuZGlmIC8qX19CRkFfREVGU19GQ1BJTV9IX18qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fY29tbW9uLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2NmNTNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fY29tbW9uLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfSU1fQ09NTU9OX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lNX0NPTU1PTl9IX18KKworI2RlZmluZQlCRkFfQURBUFRFUl9OQU1FX0xFTgkyNTYKKyNkZWZpbmUgQkZBX0FEQVBURVJfR1VJRF9MRU4gICAgMjU2CisjZGVmaW5lIFJFU0VSVkVEX1ZMQU5fTkFNRSAgICAgIEwiUE9SVCBWTEFOIgorI2RlZmluZSBQQVNTVEhSVV9WTEFOX05BTUUgICAgICBMIlBBU1NUSFJVIFZMQU4iCisKKwl1NjQJdHhfcGt0X2NudDsKKwl1NjQJcnhfcGt0X2NudDsKKwl1MzIJZHVyYXRpb247CisJdTgJCXN0YXR1czsKK30gYmZhX2ltX3N0YXRzX3QsICpwYmZhX2ltX3N0YXRzX3Q7CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lNX0NPTU1PTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX3RlYW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX3RlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg2YTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fdGVhbS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0lNX1RFQU1fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSU1fVEVBTV9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNkZWZpbmUJQkZBX1RFQU1fTUFYX1BPUlRTCTgKKyNkZWZpbmUJQkZBX1RFQU1fTkFNRV9MRU4JMjU2CisjZGVmaW5lIEJGQV9NQVhfTlVNX1RFQU1TCTE2CisjZGVmaW5lIEJGQV9URUFNX0lOVkFMSURfREVMQVkgLTEKKworCUJGQV9MQUNQX1JBVEVfU0xPVyA9IDEsCisJQkZBX0xBQ1BfUkFURV9GQVNUCit9IGJmYV9pbV9sYWNwX3JhdGVfdDsKKworCUJGQV9URUFNX01PREVfRkFJTF9PVkVSID0gMSwKKwlCRkFfVEVBTV9NT0RFX0ZBSUxfQkFDSywKKwlCRkFfVEVBTV9NT0RFX0xBQ1AsCisJQkZBX1RFQU1fTU9ERV9OT05FCit9IGJmYV9pbV90ZWFtX21vZGVfdDsKKworCUJGQV9YTUlUX1BPTElDWV9MMiA9IDEsCisJQkZBX1hNSVRfUE9MSUNZX0wzX0w0Cit9IGJmYV9pbV94bWl0X3BvbGljeV90OworCisJYmZhX2ltX3RlYW1fbW9kZV90ICAgICB0ZWFtX21vZGU7CisJYmZhX2ltX2xhY3BfcmF0ZV90ICAgICBsYWNwX3JhdGU7CisJYmZhX2ltX3htaXRfcG9saWN5X3QgICB4bWl0X3BvbGljeTsKKwlpbnQgICAJICAgICAgICAgIGRlbGF5OworCXdjaGFyX3QgICAgCSAgcHJpbWFyeVtCRkFfQURBUFRFUl9OQU1FX0xFTl07CisJd2NoYXJfdCAgICAgICAgCSAgcHJlZmVycmVkX3ByaW1hcnlbQkZBX0FEQVBURVJfTkFNRV9MRU5dOworCW1hY190CSAgICAgICAgICBtYWM7CisJdTE2ICAgICAgIAkgIG51bV9wb3J0czsKKwl1MTYgICAgICAgICAgbnVtX3ZsYW5zOworCXUxNiB2bGFuX2xpc3RbQkZBX01BWF9WTEFOU19QRVJfUE9SVF07CisJd2NoYXJfdAkgdGVhbV9ndWlkX2xpc3RbQkZBX1RFQU1fTUFYX1BPUlRTXVtCRkFfQURBUFRFUl9HVUlEX0xFTl07CisJd2NoYXJfdAkgaW9jX25hbWVfbGlzdFtCRkFfVEVBTV9NQVhfUE9SVFNdW0JGQV9BREFQVEVSX05BTUVfTEVOXTsKK30gYmZhX2ltX3RlYW1fYXR0cl90OworCisJd2NoYXJfdAkJICAgICAgICAgICAgIHRlYW1fbmFtZVtCRkFfVEVBTV9OQU1FX0xFTl07CisJYmZhX2ltX3htaXRfcG9saWN5X3QJIHhtaXRfcG9saWN5OworCWludCAgICAgICAgICAgICAgICAgCSBkZWxheTsKKwl3Y2hhcl90ICAgICAgICAgICAgICAgIAkgcHJpbWFyeVtCRkFfQURBUFRFUl9OQU1FX0xFTl07CisJd2NoYXJfdCAgICAgICAgICAgICAgIAkgcHJlZmVycmVkX3ByaW1hcnlbQkZBX0FEQVBURVJfTkFNRV9MRU5dOworfSBiZmFfaW1fdGVhbV9lZGl0X3QsICpwYmZhX2ltX3RlYW1fZWRpdF90OworCisJd2NoYXJfdAkJCQkJdGVhbV9uYW1lW0JGQV9URUFNX05BTUVfTEVOXTsKKwliZmFfaW1fdGVhbV9tb2RlX3QgICAgICB0ZWFtX21vZGU7CisJbWFjX3QJICAgICAgICAgICAgICAgCW1hYzsKK30gYmZhX2ltX3RlYW1faW5mb190OworCisJYmZhX2ltX3RlYW1faW5mb190IAkJdGVhbV9pbmZvW0JGQV9NQVhfTlVNX1RFQU1TXTsKKwl1MTYgCQkJCW51bV90ZWFtczsKK30gYmZhX2ltX3RlYW1fbGlzdF90LCAqcGJmYV9pbV90ZWFtX2xpc3RfdDsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSU1fVEVBTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkNTMyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19JT0NfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSU9DX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hZGFwdGVyLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wbS5oPgorCitlbnVtIHsKKwlCRkFfSU9DX0RSSVZFUl9MRU4JPSAxNiwKKwlCRkFfSU9DX0NISVBfUkVWX0xFTiAJPSA4LAorfTsKKworLyoqCisgKiBEcml2ZXIgYW5kIGZpcm13YXJlIHZlcnNpb25zLgorICovCitzdHJ1Y3QgYmZhX2lvY19kcml2ZXJfYXR0cl9zIHsKKwljaGFyICAgICAgICAgICAgZHJpdmVyW0JGQV9JT0NfRFJJVkVSX0xFTl07CS8qICBkcml2ZXIgbmFtZSAqLworCWNoYXIgICAgICAgICAgICBkcml2ZXJfdmVyW0JGQV9WRVJTSU9OX0xFTl07CS8qICBkcml2ZXIgdmVyc2lvbiAqLworCWNoYXIgICAgICAgICAgICBmd192ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIGZpcm13YXJlIHZlcnNpb24qLworCWNoYXIgICAgICAgICAgICBiaW9zX3ZlcltCRkFfVkVSU0lPTl9MRU5dOwkvKiAgYmlvcyB2ZXJzaW9uICovCisJY2hhciAgICAgICAgICAgIGVmaV92ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIEVGSSB2ZXJzaW9uICovCisJY2hhciAgICAgICAgICAgIG9iX3ZlcltCRkFfVkVSU0lPTl9MRU5dOwkvKiAgb3BlbmJvb3QgdmVyc2lvbiovCit9OworCisvKioKKyAqIElPQyBQQ0kgZGV2aWNlIGF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGJmYV9pb2NfcGNpX2F0dHJfcyB7CisJdTE2ICAgICAgICB2ZW5kb3JfaWQ7CS8qICBQQ0kgdmVuZG9yIElEICovCisJdTE2ICAgICAgICBkZXZpY2VfaWQ7CS8qICBQQ0kgZGV2aWNlIElEICovCisJdTE2ICAgICAgICBzc2lkOwkJLyogIHN1YnN5c3RlbSBJRCAqLworCXUxNiAgICAgICAgc3N2aWQ7CQkvKiAgc3Vic3lzdGVtIHZlbmRvciBJRCAqLworCXUzMiAgICAgICAgcGNpZm47CQkvKiAgUENJIGRldmljZSBmdW5jdGlvbiAqLworCXUzMiAgICAgICAgcnN2ZDsJCS8qIHBhZGRpbmcgKi8KKwl1OCAgICAgICAgIGNoaXBfcmV2W0JGQV9JT0NfQ0hJUF9SRVZfTEVOXTsJIC8qICBjaGlwIHJldmlzaW9uICovCit9OworCisvKioKKyAqIElPQyBzdGF0ZXMKKyAqLworZW51bSBiZmFfaW9jX3N0YXRlIHsKKwlCRkFfSU9DX1JFU0VUICAgICAgID0gMSwgIC8qICBJT0MgaXMgaW4gcmVzZXQgc3RhdGUgKi8KKwlCRkFfSU9DX1NFTVdBSVQgICAgID0gMiwgIC8qICBXYWl0aW5nIGZvciBJT0MgaGFyZHdhcmUgc2VtYXBob3JlICovCisJQkZBX0lPQ19IV0lOSVQgCSAgICA9IDMsICAvKiAgSU9DIGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkICovCisJQkZBX0lPQ19HRVRBVFRSICAgICA9IDQsICAvKiAgSU9DIGlzIGJlaW5nIGNvbmZpZ3VyZWQgKi8KKwlCRkFfSU9DX09QRVJBVElPTkFMID0gNSwgIC8qICBJT0MgaXMgb3BlcmF0aW9uYWwgKi8KKwlCRkFfSU9DX0lOSVRGQUlMICAgID0gNiwgIC8qICBJT0MgaGFyZHdhcmUgZmFpbHVyZSAqLworCUJGQV9JT0NfSEJGQUlMICAgICAgPSA3LCAgLyogIElPQyBoZWFydC1iZWF0IGZhaWx1cmUgKi8KKwlCRkFfSU9DX0RJU0FCTElORyAgID0gOCwgIC8qICBJT0MgaXMgYmVpbmcgZGlzYWJsZWQgKi8KKwlCRkFfSU9DX0RJU0FCTEVEICAgID0gOSwgIC8qICBJT0MgaXMgZGlzYWJsZWQgKi8KKwlCRkFfSU9DX0ZXTUlTTUFUQ0ggID0gMTAsIC8qICBJT0MgZmlybXdhcmUgZGlmZmVyZW50IGZyb20gZHJpdmVycyAqLworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19pb2Nfc3RhdHNfcyB7CisJdTMyICAgICAgICBoYl9jb3VudDsKKwl1MzIgICAgICAgIGNmZ19yZXFzOworCXUzMiAgICAgICAgZW5hYmxlX3JlcXM7CisJdTMyICAgICAgICBkaXNhYmxlX3JlcXM7CisJdTMyICAgICAgICBzdGF0c19yZXFzOworCXUzMiAgICAgICAgY2xyc3RhdHNfcmVxczsKKwl1MzIgICAgICAgIHVua25vd25fcmVxczsKKwl1MzIgICAgICAgIGljX3JlcXM7CQkvKiAgaW50ZXJydXB0IGNvYWxlc2NlIHJlcXMgKi8KK307CisKKy8qKgorICogSU9DIGRyaXZlciBzdGF0cworICovCitzdHJ1Y3QgYmZhX2lvY19kcnZfc3RhdHNfcyB7CisJdTMyCWlvY19pc3JzOworCXUzMglpb2NfZW5hYmxlczsKKwl1MzIJaW9jX2Rpc2FibGVzOworCXUzMglpb2NfaGJmYWlsczsKKwl1MzIJaW9jX2Jvb3RzOworCXUzMglzdGF0c190bW9zOworCXUzMiAgICAgICAgaGJfY291bnQ7CisJdTMyICAgICAgICBkaXNhYmxlX3JlcXM7CisJdTMyICAgICAgICBlbmFibGVfcmVxczsKKwl1MzIgICAgICAgIGRpc2FibGVfcmVwbGllczsKKwl1MzIgICAgICAgIGVuYWJsZV9yZXBsaWVzOworfTsKKworLyoqCisgKiBJT0Mgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX2lvY19zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2lvY19kcnZfc3RhdHNfcwlkcnZfc3RhdHM7IC8qICBkcml2ZXIgSU9DIHN0YXRzICovCisJc3RydWN0IGJmYV9md19pb2Nfc3RhdHNfcyAJZndfc3RhdHM7ICAvKiAgZmlybXdhcmUgSU9DIHN0YXRzICovCit9OworCisKK2VudW0gYmZhX2lvY190eXBlX2UgeworCUJGQV9JT0NfVFlQRV9GQwkgID0gMSwKKwlCRkFfSU9DX1RZUEVfRkNvRSA9IDIsCisJQkZBX0lPQ19UWVBFX0xMCSAgPSAzLAorfTsKKworLyoqCisgKiBJT0MgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfaW9jX2F0dHJfcyB7CisJZW51bSBiZmFfaW9jX3R5cGVfZQkJaW9jX3R5cGU7CisJZW51bSBiZmFfaW9jX3N0YXRlIAkJc3RhdGU7CQkvKiAgSU9DIHN0YXRlICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zCWFkYXB0ZXJfYXR0cjsJLyogIEhCQSBhdHRyaWJ1dGVzICovCisJc3RydWN0IGJmYV9pb2NfZHJpdmVyX2F0dHJfcyAJZHJpdmVyX2F0dHI7CS8qICBkcml2ZXIgYXR0ciAgICAqLworCXN0cnVjdCBiZmFfaW9jX3BjaV9hdHRyX3MJcGNpX2F0dHI7CisJdTgJCQkJcG9ydF9pZDsJLyogIHBvcnQgbnVtYmVyICAgICovCit9OworCisvKioKKyAqIEJGQSBJT0MgbGV2ZWwgZXZlbnRzCisgKi8KK2VudW0gYmZhX2lvY19hZW5fZXZlbnQgeworCUJGQV9JT0NfQUVOX0hCR09PRAk9IDEsCS8qICBIZWFydCBCZWF0IHJlc3RvcmUgZXZlbnQJKi8KKwlCRkFfSU9DX0FFTl9IQkZBSUwJPSAyLAkvKiAgSGVhcnQgQmVhdCBmYWlsdXJlIGV2ZW50CSovCisJQkZBX0lPQ19BRU5fRU5BQkxFCT0gMywJLyogIElPQyBlbmFibGVkIGV2ZW50CQkqLworCUJGQV9JT0NfQUVOX0RJU0FCTEUJPSA0LAkvKiAgSU9DIGRpc2FibGVkIGV2ZW50CQkqLworCUJGQV9JT0NfQUVOX0ZXTUlTTUFUQ0gJPSA1LAkvKiAgSU9DIGZpcm13YXJlIG1pc21hdGNoCSovCit9OworCisvKioKKyAqIEJGQSBJT0MgbGV2ZWwgZXZlbnQgZGF0YSwgbm93IGp1c3QgYSBwbGFjZSBob2xkZXIKKyAqLworc3RydWN0IGJmYV9pb2NfYWVuX2RhdGFfcyB7CisJZW51bSBiZmFfaW9jX3R5cGVfZSBpb2NfdHlwZTsKKwl3d25fdAlwd3duOworCW1hY190CW1hYzsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lPQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvY2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2YmNiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvY2ZjLmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0lPQ0ZDX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lPQ0ZDX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hZGFwdGVyLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wbS5oPgorCisjZGVmaW5lIEJGQV9JT0NGQ19JTlRSX0RFTEFZCTExMjUKKyNkZWZpbmUgQkZBX0lPQ0ZDX0lOVFJfTEFURU5DWQkyMjUKKworLyoqCisgKiBJbnRlcnJ1cHQgY29hbGVzY2luZyBjb25maWd1cmF0aW9uLgorICovCitzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zIHsKKwliZmFfYm9vbGVhbl90CWNvYWxlc2NlOwkvKiAgZW5hYmxlL2Rpc2FibGUgY29hbGVzY2luZyAqLworCXUxNglsYXRlbmN5OwkvKiAgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMgICAqLworCXUxNglkZWxheTsJCS8qICBkZWxheSBpbiBtaWNyb3NlY29uZHMgICAgICovCit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBjb25maWd1cmF0b24KKyAqLworc3RydWN0IGJmYV9pb2NmY19md2NmZ19zIHsKKwl1MTYgICAgICAgIG51bV9mYWJyaWNzOwkvKiAgbnVtYmVyIG9mIGZhYnJpY3MJCSovCisJdTE2ICAgICAgICBudW1fbHBvcnRzOwkvKiAgbnVtYmVyIG9mIGxvY2FsIGxwb3J0cwkqLworCXUxNiAgICAgICAgbnVtX3Jwb3J0czsJLyogIG51bWJlciBvZiByZW1vdGUgcG9ydHMJKi8KKwl1MTYgICAgICAgIG51bV9pb2ltX3JlcXM7CS8qICBudW1iZXIgb2YgSU8gcmVxcwkJKi8KKwl1MTYgICAgICAgIG51bV90c2tpbV9yZXFzOwkvKiAgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3RzCSovCisJdTE2ICAgICAgICBudW1faW90bV9yZXFzOwkvKiAgbnVtYmVyIG9mIFRNIElPIHJlcXMJKi8KKwl1MTYgICAgICAgIG51bV90c2t0bV9yZXFzOwkvKiAgVE0gdGFzayBtYW5hZ2VtZW50IHJlcXVlc3RzKi8KKwl1MTYgICAgICAgIG51bV9mY3hwX3JlcXM7CS8qICB1bmFzc2lzdGVkIEZDIGV4Y2hhbmdlcwkqLworCXUxNiAgICAgICAgbnVtX3VmX2J1ZnM7CS8qICB1bnNvbGljaXRlZCByZWN2IGJ1ZmZlcnMJKi8KKwl1OAkJbnVtX2NxczsKKwl1OAkJcnN2ZDsKK307CisKK3N0cnVjdCBiZmFfaW9jZmNfZHJ2Y2ZnX3MgeworCXUxNiAgICAgICAgbnVtX3JlcXFfZWxlbXM7CS8qICBudW1iZXIgb2YgcmVxIHF1ZXVlIGVsZW1lbnRzICovCisJdTE2ICAgICAgICBudW1fcnNwcV9lbGVtczsJLyogIG51bWJlciBvZiByc3AgcXVldWUgZWxlbWVudHMgKi8KKwl1MTYgICAgICAgIG51bV9zZ3BnczsJLyogIG51bWJlciBvZiB0b3RhbCBTRyBwYWdlcwkgICovCisJdTE2ICAgICAgICBudW1fc2Jvb3RfdGd0czsJLyogIG51bWJlciBvZiBTQU4gYm9vdCB0YXJnZXRzCSAgKi8KKwl1MTYgICAgICAgIG51bV9zYm9vdF9sdW5zOwkvKiAgbnVtYmVyIG9mIFNBTiBib290IGx1bnMJICAqLworCXUxNgkgICAgaW9jX3JlY292ZXI7CS8qICBJT0MgcmVjb3ZlcnkgbW9kZQkJICAqLworCXUxNgkgICAgbWluX2NmZzsJLyogIG1pbmltdW0gY29uZmlndXJhdGlvbgkgICovCisJdTE2ICAgICAgICBwYXRoX3RvdjsJLyogIGRldmljZSBwYXRoIHRpbWVvdXQJICAqLworCWJmYV9ib29sZWFuX3QgICBkZWxheV9jb21wOyAvKiAgZGVsYXkgY29tcGxldGlvbiBvZgorCQkJCQkJCWZhaWxlZCBpbmZsaWdodCBJT3MgKi8KKwl1MzIJCXJzdmQ7Cit9OworLyoqCisgKiBJT0MgY29uZmlndXJhdGlvbgorICovCitzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zIHsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2Z3Y2ZnX3MJZndjZmc7CS8qICBmaXJtd2FyZSBzaWRlIGNvbmZpZyAqLworCXN0cnVjdCBiZmFfaW9jZmNfZHJ2Y2ZnX3MJZHJ2Y2ZnOwkvKiAgZHJpdmVyIHNpZGUgY29uZmlnCSAgKi8KK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIElPIHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfaW9fc3RhdHNfcyB7CisJdTMyCWhvc3RfYWJvcnQ7CQkvKiAgSU8gYWJvcnRlZCBieSBob3N0IGRyaXZlciovCisJdTMyCWhvc3RfY2xlYW51cDsJCS8qICBJTyBjbGVhbiB1cCBieSBob3N0IGRyaXZlciAqLworCisJdTMyCWZ3X2lvX3RpbWVvdXQ7CQkvKiAgSU9zIHRpbWVkb3V0ICovCisJdTMyCWZ3X2ZybV9wYXJzZTsJCS8qICBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV9kYXRhOwkJLyogIGZjcF9kYXRhIGZyYW1lIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX3JzcDsJCS8qICBmY3BfcnNwIGZyYW1lIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX3hmZXJfcmR5OwkvKiAgeGZlcl9yZHkgZnJhbWUgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fYmxzX2FjYzsJCS8qICBCTFMgQUNDICBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV90Z3RfYWJvcnQ7CS8qICB0YXJnZXQgQUJUUyBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV91bmtub3duOwkJLyogIHVua25vd24gcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19kYXRhX2RtYTsJCS8qICBmL3cgRE1BJ2VkIHRoZSBkYXRhIGZyYW1lICovCisJdTMyCWZ3X2ZybV9kcm9wOwkJLyogIGYvdyBkcm9wIHRoZSBmcmFtZSAqLworCisJdTMyCXJlY190aW1lb3V0OwkJLyogIEZXIHJlYyB0aW1lZCBvdXQgKi8KKwl1MzIJZXJyb3JfcmVjOwkJCS8qICBGVyBzZW5kaW5nIHJlYyBvbgorCQkJCQkJCSogYW4gZXJyb3IgY29uZGl0aW9uKi8KKwl1MzIJd2FpdF9mb3Jfc2k7CQkvKiAgRlcgd2FpdCBmb3IgU0kgKi8KKwl1MzIJcmVjX3JzcF9pbnZhbDsJCS8qICBSRUMgcnNwIGludmFsaWQgKi8KKwl1MzIJc2Vxcl9pb19hYm9ydDsJCS8qICB0YXJnZXQgZG9lcyBub3Qga25vdyBjbWQgc28gYWJvcnQgKi8KKwl1MzIJc2Vxcl9pb19yZXRyeTsJCS8qICBTRVFSIGZhaWxlZCBzbyByZXRyeSBJTyAqLworCisJdTMyCWl0bl9jaXNjX3VwZF9yc3A7CS8qICBJVE4gY2lzYyB1cGRhdGVkIG9uIGZjcF9yc3AgKi8KKwl1MzIJaXRuX2Npc2NfdXBkX2RhdGE7CS8qICBJVE4gY2lzYyB1cGRhdGVkIG9uIGZjcF9kYXRhICovCisJdTMyCWl0bl9jaXNjX3VwZF94ZmVyX3JkeTsJLyogIElUTiBjaXNjIHVwZGF0ZWQgb24gZmNwX2RhdGEgKi8KKworCXUzMglmY3BfZGF0YV9sb3N0OwkJLyogIGZjcCBkYXRhIGxvc3QgKi8KKworCXUzMglyb19zZXRfaW5feGZlcl9yZHk7CS8qICBUYXJnZXQgc2V0IFJPIGluIFhmZXJfcmR5IGZyYW1lICovCisJdTMyCXhmZXJfcmR5X29vb19lcnI7CS8qICBPdXQgb2Ygb3JkZXIgWGZlcl9yZHkgcmVjZWl2ZWQgKi8KKwl1MzIJeGZlcl9yZHlfdW5rbm93bl9lcnI7CS8qICB1bmtub3duIGVycm9yIGluIHhmZXJfcmR5IGZyYW1lICovCisKKwl1MzIJaW9fYWJvcnRfdGltZW91dDsJLyogIEFCVFMgdGltZWRvdXQgICovCisJdTMyCXNsZXJfaW5pdGlhdGVkOwkJLyogIFNMRVIgaW5pdGlhdGVkICovCisKKwl1MzIJdW5leHBfZmNwX3JzcDsJCS8qICBmY3AgcmVzcG9uc2UgaW4gd3Jvbmcgc3RhdGUgKi8KKworCXUzMglmY3BfcnNwX3VuZGVyX3J1bjsJLyogIGZjcCByc3AgSU8gdW5kZXJydW4gKi8KKwl1MzIgICAgICAgIGZjcF9yc3BfdW5kZXJfcnVuX3dyOyAgIC8qICBmY3AgcnNwIElPIHVuZGVycnVuIGZvciB3cml0ZSAqLworCXUzMglmY3BfcnNwX3VuZGVyX3J1bl9lcnI7CS8qICBmY3AgcnNwIElPIHVuZGVycnVuIGVycm9yICovCisJdTMyICAgICAgICBmY3BfcnNwX3Jlc2lkX2ludmFsOyAgICAvKiAgaW52YWxpZCByZXNpZHVlICovCisJdTMyCWZjcF9yc3Bfb3Zlcl9ydW47CS8qICBmY3AgcnNwIElPIG92ZXJydW4gKi8KKwl1MzIJZmNwX3JzcF9vdmVyX3J1bl9lcnI7CS8qICBmY3AgcnNwIElPIG92ZXJydW4gZXJyb3IgKi8KKwl1MzIJZmNwX3JzcF9wcm90b19lcnI7CS8qICBwcm90b2NvbCBlcnJvciBpbiBmY3AgcnNwICovCisJdTMyCWZjcF9yc3Bfc2Vuc2VfZXJyOwkvKiAgZXJyb3IgaW4gc2Vuc2UgaW5mbyBpbiBmY3AgcnNwICovCisJdTMyCWZjcF9jb25mX3JlcTsJCS8qICBGQ1AgY29uZiByZXF1ZXN0ZWQgKi8KKworCXUzMgl0Z3RfYWJvcnRlZF9pbzsJCS8qICB0YXJnZXQgaW5pdGlhdGVkIGFib3J0ICovCisKKwl1MzIJaW9oX2VkdG92X3RpbWVvdXRfZXZlbnQ7LyogIElPSCBlZHRvdiB0aW1lciBwb3BwZWQgKi8KKwl1MzIJaW9oX2ZjcF9yc3BfZXhjcF9ldmVudDsJLyogIElPSCBGQ1BfUlNQIGV4Y2VwdGlvbiAqLworCXUzMglpb2hfZmNwX2NvbmZfZXZlbnQ7CS8qICBJT0ggRkNQX0NPTkYgKi8KKwl1MzIJaW9oX211bHRfZnJtX3JzcF9ldmVudDsJLyogIElPSCBtdWx0aV9mcmFtZSBGQ1BfUlNQICovCisJdTMyCWlvaF9oaXRfY2xhc3MyX2V2ZW50OwkvKiAgSU9IIGhpdCBjbGFzczIgKi8KKwl1MzIJaW9oX21pc3Nfb3RoZXJfZXZlbnQ7CS8qICBJT0ggbWlzcyBvdGhlciAqLworCXUzMglpb2hfc2VxX2NudF9lcnJfZXZlbnQ7CS8qICBJT0ggc2VxIGNudCBlcnJvciAqLworCXUzMglpb2hfbGVuX2Vycl9ldmVudDsJCS8qICBJT0ggbGVuIGVycm9yIC0gZmNwX2RsICE9CisJCQkJCQkJKiBieXRlcyB4ZmVyZWQgKi8KKwl1MzIJaW9oX3NlcV9sZW5fZXJyX2V2ZW50OwkvKiAgSU9IIHNlcSBsZW4gZXJyb3IgKi8KKwl1MzIJaW9oX2RhdGFfb29yX2V2ZW50OwkvKiAgRGF0YSBvdXQgb2YgcmFuZ2UgKi8KKwl1MzIJaW9oX3JvX29vb19ldmVudDsJLyogIFJlbGF0aXZlIG9mZnNldCBvdXQgb2YgcmFuZ2UgKi8KKwl1MzIJaW9oX2NwdV9vd25lZF9ldmVudDsJLyogIElPSCBoaXQgLWlvc3Qgb3duZWQgYnkgZi93ICovCisJdTMyCWlvaF91bmV4cF9mcmFtZV9ldmVudDsJLyogIHVuZXhwZWN0ZWQgZnJhbWUgcmVjaWV2ZWQKKwkJCQkJCSAqICAgY291bnQgKi8KKwl1MzIJaW9oX2Vycl9pbnQ7CQkvKiAgSU9IIGVycm9yIGludCBkdXJpbmcgZGF0YS1waGFzZQorCQkJCQkJICogICBmb3Igc2NzaSB3cml0ZQorCQkJCQkJICovCit9OworCisvKioKKyAqIElPQyBwb3J0IGZpcm13YXJlIHN0YXRzCisgKi8KKworc3RydWN0IGJmYV9md19wb3J0X2ZwZ19zdGF0c19zIHsKKyAgICB1MzIgICAgaW50cl9ldnQ7CisgICAgdTMyICAgIGludHI7CisgICAgdTMyICAgIGludHJfZXhjZXNzOworICAgIHUzMiAgICBpbnRyX2NhdXNlMDsKKyAgICB1MzIgICAgaW50cl9vdGhlcjsKKyAgICB1MzIgICAgaW50cl9vdGhlcl9pZ247CisgICAgdTMyICAgIHNpZ19sb3N0OworICAgIHUzMiAgICBzaWdfcmVnYWluZWQ7CisgICAgdTMyICAgIHN5bmNfbG9zdDsKKyAgICB1MzIgICAgc3luY190bzsKKyAgICB1MzIgICAgc3luY19yZWdhaW5lZDsKKyAgICB1MzIgICAgZGl2Ml9vdmVyZmxvdzsKKyAgICB1MzIgICAgZGl2Ml91bmRlcmZsb3c7CisgICAgdTMyICAgIGVmaWZvX292ZXJmbG93OworICAgIHUzMiAgICBlZmlmb191bmRlcmZsb3c7CisgICAgdTMyICAgIGlkbGVfcng7CisgICAgdTMyICAgIGxycl9yeDsKKyAgICB1MzIgICAgbHJfcng7CisgICAgdTMyICAgIG9sc19yeDsKKyAgICB1MzIgICAgbm9zX3J4OworICAgIHUzMiAgICBsaXBfcng7CisgICAgdTMyICAgIGFyYmYwX3J4OworICAgIHUzMiAgICBtcmtfcng7CisgICAgdTMyICAgIGNvbnN0X21ya19yeDsKKyAgICB1MzIgICAgcHJpbV91bmtub3duOworICAgIHUzMiAgICByc3ZkOworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X3BvcnRfbGtzbV9zdGF0c19zIHsKKyAgICB1MzIgICAgaHdzbV9zdWNjZXNzOyAgICAgICAvKiAgaHdzbSBzdGF0ZSBtYWNoaW5lIHN1Y2Nlc3MgICAgICAgICAgKi8KKyAgICB1MzIgICAgaHdzbV9mYWlsczsgICAgICAgICAvKiAgaHdzbSBmYWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgaHdzbV93ZHRvdjsgICAgICAgICAvKiAgaHdzbSB0aW1lZCBvdXQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc3dzbV9zdWNjZXNzOyAgICAgICAvKiAgc3dzbSBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc3dzbV9mYWlsczsgICAgICAgICAvKiAgc3dzbSBmYWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc3dzbV93ZHRvdjsgICAgICAgICAvKiAgc3dzbSB0aW1lZCBvdXQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgYnVzeWJ1ZnM7ICAgICAgICAgICAvKiAgbGluayBpbml0IGZhaWxlZCBkdWUgdG8gYnVzeWJ1ZiAgICAgKi8KKyAgICB1MzIgICAgYnVmX3dhaXRzOyAgICAgICAgICAvKiAgYnVmd2FpdCBzdGF0ZSBlbnRyaWVzICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgbGlua19mYWlsczsgICAgICAgICAvKiAgbGluayBmYWlsdXJlcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgcHNwX2Vycm9yczsgICAgICAgICAvKiAgcHJpbWl0aXZlIHNlcXVlbmNlIHByb3RvY29sIGVycm9ycyAgKi8KKyAgICB1MzIgICAgbHJfdW5leHA7ICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSIHJ4LWVkIHVuZXhwZWN0ZWRseSAgKi8KKyAgICB1MzIgICAgbHJyX3VuZXhwOyAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSUiByeC1lZCB1bmV4cGVjdGVkbHkgKi8KKyAgICB1MzIgICAgbHJfdHg7ICAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSIHR4IHN0YXJ0ZWQgICAgICAgICAgKi8KKyAgICB1MzIgICAgbHJyX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSUiB0eCBzdGFydGVkICAgICAgICAgKi8KKyAgICB1MzIgICAgb2xzX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIE9MUyB0eCBzdGFydGVkICAgICAgICAgKi8KKyAgICB1MzIgICAgbm9zX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIE5PUyB0eCBzdGFydGVkICAgICAgICAgKi8KK307CisKKworc3RydWN0IGJmYV9md19wb3J0X3Nuc21fc3RhdHNfcyB7CisgICAgdTMyICAgIGh3c21fc3VjY2VzczsgICAgICAgLyogIFN1Y2Nlc3NmdWwgaHdzbSB0ZXJtaW5hdGlvbnMgICAgICAgICovCisgICAgdTMyICAgIGh3c21fZmFpbHM7ICAgICAgICAgLyogIGh3c20gZmFpbCBjb3VudCAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGh3c21fd2R0b3Y7ICAgICAgICAgLyogIGh3c20gdGltZWQgb3V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fc3VjY2VzczsgICAgICAgLyogIHN3c20gc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fd2R0b3Y7ICAgICAgICAgLyogIHN3c20gdGltZWQgb3V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGVycm9yX3Jlc2V0czsgICAgICAgLyogIGVycm9yIHJlc2V0cyBpbml0aWF0ZWQgYnkgdXBzbSAgICAgICovCisgICAgdTMyICAgIHN5bmNfbG9zdDsgICAgICAgICAgLyogIFN5bmMgbG9zcyBjb3VudCAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHNpZ19sb3N0OyAgICAgICAgICAgLyogIFNpZ25hbCBsb3NzIGNvdW50ICAgICAgICAgICAgICAgICAgICovCit9OworCisKK3N0cnVjdCBiZmFfZndfcG9ydF9waHlzbV9zdGF0c19zIHsKKyAgICB1MzIgICAgbW9kdWxlX2luc2VydHM7ICAgICAvKiAgTW9kdWxlIGluc2VydCBjb3VudCAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgbW9kdWxlX3h0cmFjdHM7ICAgICAvKiAgTW9kdWxlIGV4dHJhY3RzIGNvdW50ICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgbW9kdWxlX2ludmFsaWRzOyAgICAvKiAgSW52YWxpZCBtb2R1bGUgaW5zZXJ0ZWQgY291bnQgICAgICAgKi8KKyAgICB1MzIgICAgbW9kdWxlX3JlYWRfaWduOyAgICAvKiAgTW9kdWxlIHZhbGlkYXRpb24gc3RhdHVzIGlnbm9yZWQgICAgKi8KKyAgICB1MzIgICAgbGFzZXJfZmF1bHRzOyAgICAgICAvKiAgTGFzZXIgZmF1bHQgY291bnQgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgcnN2ZDsKK307CisKKworc3RydWN0IGJmYV9md19maXBfc3RhdHNfcyB7CisgICAgdTMyICAgIGRpc2NfcmVxOyAgICAgICAgICAgLyogIERpc2NvdmVyeSBzb2xpY2l0IHJlcXVlc3RzICAgICAgICAgICovCisgICAgdTMyICAgIGRpc2NfcnNwOyAgICAgICAgICAgLyogIERpc2NvdmVyeSBzb2xpY2l0IHJlc3BvbnNlICAgICAgICAgICovCisgICAgdTMyICAgIGRpc2NfZXJyOyAgICAgICAgICAgLyogIERpc2NvdmVyeSBhZHZ0LiBwYXJzZSBlcnJvcnMgICAgICAgICovCisgICAgdTMyICAgIGRpc2NfdW5zb2w7ICAgICAgICAgLyogIERpc2NvdmVyeSB1bnNvbGljaXRlZCAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGRpc2NfdGltZW91dHM7ICAgICAgLyogIERpc2NvdmVyeSB0aW1lb3V0cyAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGxpbmtzdmNfdW5zdXBwOyAgICAgLyogIFVuc3VwcG9ydGVkIGxpbmsgc2VydmljZSByZXEgICAgICAgICovCisgICAgdTMyICAgIGxpbmtzdmNfZXJyOyAgICAgICAgLyogIFBhcnNlIGVycm9yIGluIGxpbmsgc2VydmljZSByZXEgICAgICovCisgICAgdTMyICAgIGxvZ29fcmVxOyAgICAgICAgICAgLyogIE51bWJlciBvZiBGSVAgbG9nb3MgcmVjZWl2ZWQgICAgICAgICovCisgICAgdTMyICAgIGNscnZsaW5rX3JlcTsgICAgICAgLyogIENsZWFyIHZpcnR1YWwgbGluayByZXEgICAgICAgICAgICAgICovCisgICAgdTMyICAgIG9wX3Vuc3VwcDsgICAgICAgICAgLyogIFVuc3VwcG9ydGVkIEZJUCBvcGVyYXRpb24gICAgICAgICAgICovCisgICAgdTMyICAgIHVudGFnZ2VkOyAgICAgICAgICAgLyogIFVudGFnZ2VkIGZyYW1lcyAoaWdub3JlZCkgICAgICAgICAgICovCisgICAgdTMyICAgIHJzdmQ7Cit9OworCisKK3N0cnVjdCBiZmFfZndfbHBzX3N0YXRzX3MgeworICAgIHUzMiAgICBtYWNfaW52YWxpZHM7ICAgICAgIC8qICBJbnZhbGlkIG1hYyBhc3NpZ25lZCAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICByc3ZkOworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X2Zjb2Vfc3RhdHNfcyB7CisgICAgdTMyICAgIGNlZV9saW5rdXBzOyAgICAgICAgLyogIENFRSBsaW5rIHVwIGNvdW50ICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGNlZV9saW5rZG5zOyAgICAgICAgLyogIENFRSBsaW5rIGRvd24gY291bnQgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGZpcF9saW5rdXBzOyAgICAgICAgLyogIEZJUCBsaW5rIHVwIGNvdW50ICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGZpcF9saW5rZG5zOyAgICAgICAgLyogIEZJUCBsaW5rIHVwIGNvdW50ICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGZpcF9mYWlsczsgICAgICAgICAgLyogIEZJUCBmYWlsIGNvdW50ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIG1hY19pbnZhbGlkczsgICAgICAgLyogIEludmFsaWQgbWFjIGFzc2lnbmVkICAgICAgICAgICAgICAgICovCit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBGQ29FIHBvcnQgc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19mY29lX3BvcnRfc3RhdHNfcyB7CisgICAgc3RydWN0IGJmYV9md19mY29lX3N0YXRzX3MgIGZjb2Vfc3RhdHM7CisgICAgc3RydWN0IGJmYV9md19maXBfc3RhdHNfcyAgIGZpcF9zdGF0czsKK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIEZDIHBvcnQgc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19mY19wb3J0X3N0YXRzX3MgeworCXN0cnVjdCBiZmFfZndfcG9ydF9mcGdfc3RhdHNfcwkJZnBnX3N0YXRzOworCXN0cnVjdCBiZmFfZndfcG9ydF9waHlzbV9zdGF0c19zCXBoeXNtX3N0YXRzOworCXN0cnVjdCBiZmFfZndfcG9ydF9zbnNtX3N0YXRzX3MJCXNuc21fc3RhdHM7CisJc3RydWN0IGJmYV9md19wb3J0X2xrc21fc3RhdHNfcwkJbGtzbV9zdGF0czsKK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIEZDIHBvcnQgc3RhdHMKKyAqLwordW5pb24gYmZhX2Z3X3BvcnRfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9md19mY19wb3J0X3N0YXRzX3MJZmNfc3RhdHM7CisJc3RydWN0IGJmYV9md19mY29lX3BvcnRfc3RhdHNfcwlmY29lX3N0YXRzOworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2Z3X2lvY19zdGF0c19zCWlvY19zdGF0czsKKwlzdHJ1Y3QgYmZhX2Z3X2lvX3N0YXRzX3MJaW9fc3RhdHM7CisJdW5pb24gIGJmYV9md19wb3J0X3N0YXRzX3MJcG9ydF9zdGF0czsKK307CisKKy8qKgorICogSU9DIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9pb2NmY19zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgCWZ3X3N0YXRzOwkvKiAgZmlybXdhcmUgSU9DIHN0YXRzICAgICAgKi8KK307CisKKy8qKgorICogSU9DIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX2lvY2ZjX2F0dHJfcyB7CisJc3RydWN0IGJmYV9pb2NmY19jZmdfcwkJY29uZmlnOwkJLyogIElPQ0ZDIGNvbmZpZyAgICovCisJc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcwlpbnRyX2F0dHI7CS8qICBpbnRlcnJ1cHQgYXR0ciAqLworfTsKKworI2RlZmluZSBCRkFfSU9DRkNfUEFUSFRPVl9NQVgJNjAKKyNkZWZpbmUgQkZBX0lPQ0ZDX1FERVBUSF9NQVgJMjAwMAorCisjZW5kaWYgLyogX19CRkFfREVGU19JT0NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pcGZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pcGZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiNjNlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lwZmMuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfSVBGQ19IX18KKyNkZWZpbmUgX19CRkFfREVGU19JUEZDX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorCisvKioKKyAqIEZDUyBpcCByZW1vdGUgcG9ydCBzdGF0ZXMKKyAqLworZW51bSBiZmFfaXBycF9zdGF0ZSB7CisJQkZBX0lQUlBfVU5JTklUICA9IDAsCS8qICBQT1JUIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfSVBSUF9PTkxJTkUgID0gMSwJLyogIHByb2Nlc3MgbG9naW4gaXMgY29tcGxldGUgKi8KKwlCRkFfSVBSUF9PRkZMSU5FID0gMiwJLyogIGlwcnAgaXMgb2ZmbGluZSAqLworfTsKKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX2lwcnBfc3RhdHNfcyB7CisJdTMyICAgICAgICBvZmZsaW5lczsKKwl1MzIgICAgICAgIG9ubGluZXM7CisJdTMyICAgICAgICByc2NuczsKKwl1MzIgICAgICAgIHBsb2dpczsKKwl1MzIgICAgICAgIGxvZ29zOworCXUzMiAgICAgICAgcGxvZ2lfdGltZW91dHM7CisJdTMyICAgICAgICBwbG9naV9yZWplY3RzOworfTsKKworLyoqCisgKiBGQ1MgaXBycCBhdHRyaWJ1dGUgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX2lwcnBfYXR0cl9zIHsKKwllbnVtIGJmYV9pcHJwX3N0YXRlIHN0YXRlOworfTsKKworc3RydWN0IGJmYV9pcGZjX3N0YXRzX3MgeworCXUzMiBhcnBfc2VudDsKKwl1MzIgYXJwX3JlY3Y7CisJdTMyIGFycF9yZXBseV9zZW50OworCXUzMiBhcnBfcmVwbHlfcmVjdjsKKwl1MzIgZmFycF9zZW50OworCXUzMiBmYXJwX3JlY3Y7CisJdTMyIGZhcnBfcmVwbHlfc2VudDsKKwl1MzIgZmFycF9yZXBseV9yZWN2OworCXUzMiBmYXJwX3JlamVjdF9zZW50OworCXUzMiBmYXJwX3JlamVjdF9yZWN2OworfTsKKworc3RydWN0IGJmYV9pcGZjX2F0dHJfcyB7CisJYmZhX2Jvb2xlYW5fdCBlbmFibGVkOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSVBGQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2l0bmltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pdG5pbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYzc2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pdG5pbS5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfSVROSU1fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSVROSU1fSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworLyoqCisgKiBGQ1MgaXRuaW0gc3RhdGVzCisgKi8KK2VudW0gYmZhX2l0bmltX3N0YXRlIHsKKwlCRkFfSVROSU1fT0ZGTElORSAJPSAwLAkvKiAgb2ZmbGluZSAqLworCUJGQV9JVE5JTV9QUkxJX1NFTkQgCT0gMSwJLyogIHBybGkgc2VuZCAqLworCUJGQV9JVE5JTV9QUkxJX1NFTlQgCT0gMiwJLyogIHBybGkgc2VudCAqLworCUJGQV9JVE5JTV9QUkxJX1JFVFJZIAk9IDMsCS8qICBwcmxpIHJldHJ5ICovCisJQkZBX0lUTklNX0hDQl9PTkxJTkUgCT0gNCwJLyogIG9ubGluZSBjYWxsYmFjayAqLworCUJGQV9JVE5JTV9PTkxJTkUgCT0gNSwJLyogIG9ubGluZSAqLworCUJGQV9JVE5JTV9IQ0JfT0ZGTElORSAJPSA2LAkvKiAgb2ZmbGluZSBjYWxsYmFjayAqLworCUJGQV9JVE5JTV9JTklUSUFUSU9SIAk9IDcsCS8qICBpbml0aWF0b3IgKi8KK307CisKK3N0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MgeworCXUzMglvbmxpbmVzOwkvKiAgSVROIG5leHVzIG9ubGluZXMgKFBSTEkgZG9uZSkgKi8KKwl1MzIJb2ZmbGluZXM7CS8qICBJVE4gTmV4dXMgb2ZmbGluZXMgCSovCisJdTMyCWNyZWF0ZXM7CS8qICBJVE4gY3JlYXRlIHJlcXVlc3RzIAkqLworCXUzMglkZWxldGVzOwkvKiAgSVROIGRlbGV0ZSByZXF1ZXN0cyAJKi8KKwl1MzIJY3JlYXRlX2NvbXBzOwkvKiAgSVROIGNyZWF0ZSBjb21wbGV0aW9ucyAJKi8KKwl1MzIJZGVsZXRlX2NvbXBzOwkvKiAgSVROIGRlbGV0ZSBjb21wbGV0aW9ucyAJKi8KKwl1MzIJc2xlcl9ldmVudHM7CS8qICBTTEVSIChzZXF1ZW5jZSBsZXZlbCBlcnJvcgorCQkJCQkgKiByZWNvdmVyeSkgZXZlbnRzICovCisJdTMyCWlvY19kaXNhYmxlZDsJLyogIE51bSBJT0MgZGlzYWJsZXMJCSovCisJdTMyCWNsZWFudXBfY29tcHM7CS8qICBJVE4gY2xlYW51cCBjb21wbGV0aW9ucyAqLworCXUzMgl0bV9jbW5kczsJLyogIHRhc2sgbWFuYWdlbWVudChUTSkgY21uZHMgc2VudCAqLworCXUzMgl0bV9md19yc3BzOwkvKiAgVE0gY21kcyBmaXJtd2FyZSByZXNwb25zZXMgKi8KKwl1MzIJdG1fc3VjY2VzczsJLyogIFRNIHN1Y2Nlc3NlcyAqLworCXUzMgl0bV9mYWlsdXJlczsJLyogIFRNIGZhaWx1cmVzICovCisJdTMyCXRtX2lvX2NvbXBzOwkvKiAgVE0gSU8gY29tcGxldGlvbnMgKi8KKwl1MzIJdG1fcXJlc3VtZXM7CS8qICBUTSBxdWV1ZSByZXN1bWVzIChhZnRlciB3YWl0aW5nCisJCQkJCSAqIGZvciByZXNvdXJjZXMpCisJCQkJCSAqLworCXUzMgl0bV9pb2Nkb3duczsJLyogIFRNIGNtbmRzIGFmZmVjdGVkIGJ5IElPQyBkb3duICovCisJdTMyCXRtX2NsZWFudXBzOwkvKiAgVE0gY2xlYW51cHMgKi8KKwl1MzIJdG1fY2xlYW51cF9jb21wczsKKwkJCQkJLyogIFRNIGNsZWFudXAgY29tcGxldGlvbnMgKi8KKwl1MzIJaW9zOwkJLyogIElPIHJlcXVlc3RzICovCisJdTMyCWlvX2NvbXBzOwkvKiAgSU8gY29tcGxldGlvbnMgKi8KKwl1NjQJaW5wdXRfcmVxczsJLyogIElOUFVUIHJlcXVlc3RzICovCisJdTY0CW91dHB1dF9yZXFzOwkvKiAgT1VUUFVUIHJlcXVlc3RzICovCit9OworCisvKioKKyAqIEZDUyByZW1vdGUgcG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcyB7CisJdTMyICAgICAgICBvbmxpbmVzOwkvKiAgbnVtIHJwb3J0IG9ubGluZSAqLworCXUzMiAgICAgICAgb2ZmbGluZXM7CS8qICBudW0gcnBvcnQgb2ZmbGluZSAqLworCXUzMiAgICAgICAgcHJsaV9zZW50OwkvKiAgbnVtIHBybGkgc2VudCBvdXQgKi8KKwl1MzIgICAgICAgIGZjeHBfYWxsb2Nfd2FpdDsvKiAgbnVtIGZjeHAgYWxsb2Mgd2FpdHMgKi8KKwl1MzIgICAgICAgIHBybGlfcnNwX2VycjsJLyogIG51bSBwcmxpIHJzcCBlcnJvcnMgKi8KKwl1MzIgICAgICAgIHBybGlfcnNwX2FjYzsJLyogIG51bSBwcmxpIHJzcCBhY2NlcHRzICovCisJdTMyICAgICAgICBpbml0aWF0b3I7CS8qICBycG9ydCBpcyBhbiBpbml0aWF0b3IgKi8KKwl1MzIgICAgICAgIHBybGlfcnNwX3BhcnNlX2VycjsJLyogIHBybGkgcnNwIHBhcnNpbmcgZXJyb3JzICovCisJdTMyICAgICAgICBwcmxpX3JzcF9yanQ7CS8qICBudW0gcHJsaSByc3AgcmVqZWN0cyAqLworCXUzMiAgICAgICAgdGltZW91dDsJLyogIG51bSB0aW1lb3V0cyBkZXRlY3RlZCAqLworCXUzMiAgICAgICAgc2xlcjsJCS8qICBudW0gc2xlciBub3RpZmljYXRpb24gZnJvbSBCRkEgKi8KKwl1MzIJcnN2ZDsKKwlzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zCWhhbF9zdGF0czsKK307CisKKy8qKgorICogRkNTIGl0bmltIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX2l0bmltX2F0dHJfcyB7CisJZW51bSBiZmFfaXRuaW1fc3RhdGUgc3RhdGU7IC8qICBGQ1MgaXRuaW0gc3RhdGUgICAgICAgICovCisJdTggcmV0cnk7CQkvKiAgZGF0YSByZXRyYW5zbWlzaW9uIHN1cHBvcnQgKi8KKwl1OAl0YXNrX3JldHJ5X2lkOyAgLyogIHRhc2sgcmV0cnkgaWRlbnQgc3VwcG9ydCAgICovCisJdTggcmVjX3N1cHBvcnQ7ICAgIC8qICBSRUMgc3VwcG9ydGVkICAgICAgICAgICAgICAqLworCXU4IGNvbmZfY29tcDsgICAgICAvKiAgY29uZmlybWVkIGNvbXBsZXRpb24gc3VwcCAgKi8KK307CisKKy8qKgorICogQkZBIElUTklNIGV2ZW50cy4KKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX0lUTklNX0FFTl9ORVc6ICAgICAgIFtpbl06IE5vbmUgIFtvdXRdOiB2Zl9pZCwgbHB3d24KKyAqIEJGQV9JVE5JTV9BRU5fREVMRVRFOiAgICBbaW5dOiB2Zl9pZCwgbHB3d24sIHJwd3duICgwID0gYWxsIGZjcDQgdGFyZ2V0cyksCisgKgkJCQkgIFtvdXRdOiB2Zl9pZCwgcHB3d24sIGxwd3duLCBycHd3bgorICogQkZBX0lUTklNX0FFTl9PTkxJTkU6ICAgIFtpbl06IHZmX2lkLCBscHd3biwgcnB3d24gKDAgPSBhbGwgZmNwNCB0YXJnZXRzKSwKKyAqCQkJCSAgW291dF06IHZmX2lkLCBwcHd3biwgbHB3d24sIHJwd3duCisgKiBCRkFfSVROSU1fQUVOX09GRkxJTkU6ICAgW2luXTogdmZfaWQsIGxwd3duLCBycHd3biAoMCA9IGFsbCBmY3A0IHRhcmdldHMpLAorICoJCQkJICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcnB3d24KKyAqIEJGQV9JVE5JTV9BRU5fRElTQ09OTkVDVDpbaW5dOiB2Zl9pZCwgbHB3d24sIHJwd3duICgwID0gYWxsIGZjcDQgdGFyZ2V0cyksCisgKgkJCQkgIFtvdXRdOiB2Zl9pZCwgcHB3d24sIGxwd3duLCBycHd3bgorICovCitlbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgeworCUJGQV9JVE5JTV9BRU5fT05MSU5FIAk9IDEsCS8qICBUYXJnZXQgb25saW5lICovCisJQkZBX0lUTklNX0FFTl9PRkZMSU5FIAk9IDIsCS8qICBUYXJnZXQgb2ZmbGluZSAqLworCUJGQV9JVE5JTV9BRU5fRElTQ09OTkVDVCA9IDMsCS8qICBUYXJnZXQgZGlzY29ubmVjdGVkICovCit9OworCisvKioKKyAqIEJGQSBJVE5JTSBldmVudCBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGJmYV9pdG5pbV9hZW5fZGF0YV9zIHsKKwl1MTYgICAgICAgIHZmX2lkOwkvKiAgdmZfaWQgb2YgdGhlIElUIG5leHVzICovCisJdTE2ICAgICAgICByc3ZkWzNdOworCXd3bl90ICAgICAgICAgICBwcHd3bjsJLyogIFdXTiBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBscHd3bjsJLyogIFdXTiBvZiBsb2dpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgcnB3d247CS8qICBXV04gb2YgcmVtb3RlKHRhcmdldCkgcG9ydCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSVROSU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19sZWQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2xlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMDM5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19sZWQuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19MRURfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfTEVEX0hfXworCisjZGVmaW5lCUJGQV9MRURfTUFYX05VTQkJMworCitlbnVtIGJmYV9sZWRfb3AgeworCUJGQV9MRURfT0ZGICAgPSAwLAorCUJGQV9MRURfT04gICAgPSAxLAorCUJGQV9MRURfRkxJQ0sgPSAyLAorCUJGQV9MRURfQkxJTksgPSAzLAorfTsKKworZW51bSBiZmFfbGVkX2NvbG9yIHsKKwlCRkFfTEVEX0dSRUVOID0gMCwKKwlCRkFfTEVEX0FNQkVSID0gMSwKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0xFRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTlmODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19scG9ydC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0xQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0xQT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorCisvKioKKyAqIEJGQSBBRU4gbG9naWNhbCBwb3J0IGV2ZW50cy4KKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX0xQT1JUX0FFTl9ORVc6ICAgICAgIFtpbl06IE5vbmUgICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fREVMRVRFOiAgICBbaW5dOiBscHd3biAgICAgICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX09OTElORTogICAgW2luXTogbHB3d24gICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9PRkZMSU5FOiAgIFtpbl06IGxwd3duICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fRElTQ09OTkVDVDpbaW5dOiBscHd3biAgICAgICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05FV19QUk9QOiAgW2luXTogTm9uZSAgICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ERUxFVEVfUFJPUDogICAgIFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fTkVXX1NUQU5EQVJEOiAgICBbaW5dOiBOb25lICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX0RFTEVURV9TVEFOREFSRDogW2luXTogbHB3d24gIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9OUElWX0RVUF9XV046ICAgIFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYOiBbaW5dOiBscHd3biAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTjogICAgW2luXTogbHB3d24gIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICovCitlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgeworCUJGQV9MUE9SVF9BRU5fTkVXCT0gMSwJLyogIExQb3J0IGNyZWF0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RFTEVURQk9IDIsCS8qICBMUG9ydCBkZWxldGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9PTkxJTkUJPSAzLAkvKiAgTFBvcnQgb25saW5lIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9PRkZMSU5FCT0gNCwJLyogIExQb3J0IG9mZmxpbmUgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1QgPSA1LAkvKiAgTFBvcnQgZGlzY29ubmVjdCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fTkVXX1BST1AJPSA2LAkvKiAgVlBvcnQgY3JlYXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fREVMRVRFX1BST1AgPSA3LAkvKiAgVlBvcnQgZGVsZXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fTkVXX1NUQU5EQVJEID0gOCwJLyogIFZQb3J0IGNyZWF0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RFTEVURV9TVEFOREFSRCA9IDksICAvKiAgVlBvcnQgZGVsZXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOID0gMTAsICAgIC8qICBWUG9ydCBjb25maWd1cmVkIHdpdGgKKwkJCQkJICAgICAqICAgZHVwbGljYXRlIFdXTiBldmVudAorCQkJCQkJICovCisJQkZBX0xQT1JUX0FFTl9OUElWX0ZBQlJJQ19NQVggPSAxMSwgLyogIE1heCBOUElWIGluIGZhYnJpYy9mcG9ydCAqLworCUJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOID0gMTIsIC8qICBVbmtub3duIE5QSVYgRXJyb3IgY29kZSBldmVudCAqLworfTsKKworLyoqCisgKiBCRkEgQUVOIGV2ZW50IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfbHBvcnRfYWVuX2RhdGFfcyB7CisJdTE2ICAgICAgICB2Zl9pZDsJLyogIHZmX2lkIG9mIHRoaXMgbG9naWNhbCBwb3J0ICovCisJdTE2ICAgICAgICByc3ZkOworCWVudW0gYmZhX3BvcnRfcm9sZSByb2xlczsJLyogIExvZ2ljYWwgcG9ydCBtb2RlLElNL1RNL0lQIGV0YyAqLworCXd3bl90ICAgICAgICAgICBwcHd3bjsJLyogIFdXTiBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBscHd3bjsJLyogIFdXTiBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfTFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19tZmcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX21mZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZmQ0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19tZmcuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfTUZHX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX01GR19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworLyoqCisgKiBNYW51ZmFjdHVyaW5nIGJsb2NrIHZlcnNpb24KKyAqLworI2RlZmluZSBCRkFfTUZHX1ZFUlNJT04JCQkJMQorCisvKioKKyAqIE1hbnVmYWN0dXJpbmcgYmxvY2sgZm9ybWF0CisgKi8KKyNkZWZpbmUgQkZBX01GR19TRVJJQUxOVU1fU0laRQkJCTExCisjZGVmaW5lIEJGQV9NRkdfUEFSVE5VTV9TSVpFCQkJMTQKKyNkZWZpbmUgQkZBX01GR19TVVBQTElFUl9JRF9TSVpFCQkxMAorI2RlZmluZSBCRkFfTUZHX1NVUFBMSUVSX1BBUlROVU1fU0laRQkyMAorI2RlZmluZSBCRkFfTUZHX1NVUFBMSUVSX1NFUklBTE5VTV9TSVpFCTIwCisjZGVmaW5lIEJGQV9NRkdfU1VQUExJRVJfUkVWSVNJT05fU0laRQk0CisjZGVmaW5lIFNUUlNaKF9uKQkoKChfbikgKyA0KSAmIH4zKQorCisvKioKKyAqIFZQRCBkYXRhIGxlbmd0aAorICovCisjZGVmaW5lIEJGQV9NRkdfVlBEX0xFTiAgICAgMjU2CisKKy8qKgorICogQWxsIG51bWVyaWNhbCBmaWVsZHMgYXJlIGluIGJpZy1lbmRpYW4gZm9ybWF0LgorICovCitzdHJ1Y3QgYmZhX21mZ192cGRfcyB7CisgICAgdTggICAgIHZlcnNpb247ICAgIC8qICB2cGQgZGF0YSB2ZXJzaW9uICovCisgICAgdTggICAgIHZwZF9zaWdbM107IC8qICBjaGFyYWN0ZXJzICdWJywgJ1AnLCAnRCcgKi8KKyAgICB1OCAgICAgY2hrc3VtOyAgICAgLyogIHU4IGNoZWNrc3VtICovCisgICAgdTggICAgIHZlbmRvcjsgICAgIC8qICB2ZW5kb3IgKi8KKyAgICB1OCAgICAgbGVuOyAgICAgICAgLyogIHZwZCBkYXRhIGxlbmd0aCBleGNsdWRpbmcgaGVhZGVyICovCisgICAgdTggICAgIHJzdjsKKyAgICB1OCAgICAgZGF0YVtCRkFfTUZHX1ZQRF9MRU5dOyAgLyogIHZwZCBkYXRhICovCit9OworCisjcHJhZ21hIHBhY2soMSkKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfTUZHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcGNpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWI4MzMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcGNpLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUENJX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1BDSV9IX18KKworLyoqCisgKiBQQ0kgZGV2aWNlIGFuZCB2ZW5kb3IgSUQgaW5mb3JtYXRpb24KKyAqLworZW51bSB7CisJQkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERQk9IDB4MTY1NywKKwlCRkFfUENJX0RFVklDRV9JRF9GQ184RzJQCT0gMHgxMywKKwlCRkFfUENJX0RFVklDRV9JRF9GQ184RzFQCT0gMHgxNywKKwlCRkFfUENJX0RFVklDRV9JRF9DVAkJPSAweDE0LAorfTsKKworLyoqCisgKiBQQ0kgc3ViLXN5c3RlbSBkZXZpY2UgYW5kIHZlbmRvciBJRCBpbmZvcm1hdGlvbgorICovCitlbnVtIHsKKwlCRkFfUENJX0ZDT0VfU1NERVZJQ0VfSUQJPSAweDE0LAorfTsKKworI2RlZmluZSBCRkFfUENJX0FDQ0VTU19SQU5HRVMgMQkvKiBNYXhpbXVtIG51bWJlciBvZiBkZXZpY2UgYWRkcmVzcyByYW5nZXMKKwkJCQkgKiBtYXBwZWQgdGhyb3VnaCBkaWZmZXJlbnQgQkFSKHMpLiAqLworCisjZW5kaWYgLyogX19CRkFfREVGU19QQ0lfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQ2ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG0uaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19QTV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QTV9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworLyoqCisgKiBCRkEgcG93ZXIgbWFuYWdlbWVudCBkZXZpY2Ugc3RhdGVzCisgKi8KK2VudW0gYmZhX3BtX2RzIHsKKwlCRkFfUE1fRFNfRDAgPSAwLAkvKiAgZnVsbCBwb3dlciBtb2RlICovCisJQkZBX1BNX0RTX0QxID0gMSwJLyogIHBvd2VyIHNhdmUgc3RhdGUgMSAqLworCUJGQV9QTV9EU19EMiA9IDIsCS8qICBwb3dlciBzYXZlIHN0YXRlIDIgKi8KKwlCRkFfUE1fRFNfRDMgPSAzLAkvKiAgcG93ZXIgb2ZmIHN0YXRlICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19QTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmYTI3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvbS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19QT01fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUE9NX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworLyoqCisgKiBQT00gaGVhbHRoIHN0YXR1cyBsZXZlbHMgZm9yIGVhY2ggYXR0cmlidXRlcy4KKyAqLworZW51bSBiZmFfcG9tX2VudHJ5X2hlYWx0aCB7CisJQkZBX1BPTV9IRUFMVEhfTk9JTkZPICA9IDEsCS8qICBubyBpbmZvcm1hdGlvbiAqLworCUJGQV9QT01fSEVBTFRIX05PUk1BTCAgPSAyLAkvKiAgaGVhbHRoIGlzIG5vcm1hbCAqLworCUJGQV9QT01fSEVBTFRIX1dBUk5JTkcgPSAzLAkvKiAgd2FybmluZyBsZXZlbCAqLworCUJGQV9QT01fSEVBTFRIX0FMQVJNICAgPSA0LAkvKiAgYWxhcm1pbmcgbGV2ZWwgKi8KK307CisKKy8qKgorICogUmVhZGluZyBvZiB0ZW1wZXJhdHVyZS92b2x0YWdlL2N1cnJlbnQvcG93ZXIKKyAqLworc3RydWN0IGJmYV9wb21fZW50cnlfcyB7CisJZW51bSBiZmFfcG9tX2VudHJ5X2hlYWx0aCBoZWFsdGg7CS8qICBQT00gZW50cnkgaGVhbHRoICovCisJdTMyICAgICAgICBjdXJyX3ZhbHVlOwkvKiAgY3VycmVudCB2YWx1ZSAqLworCXUzMiAgICAgICAgdGhyX3dhcm5faGlnaDsJLyogIHRocmVzaG9sZCB3YXJuaW5nIGhpZ2ggKi8KKwl1MzIgICAgICAgIHRocl93YXJuX2xvdzsJLyogIHRocmVzaG9sZCB3YXJuaW5nIGxvdyAqLworCXUzMiAgICAgICAgdGhyX2FsYXJtX2xvdzsJLyogIHRocmVzaG9sZCBhbGFyYW0gbG93ICovCisJdTMyICAgICAgICB0aHJfYWxhcm1faGlnaDsJLyogIHRocmVzaG9sZCBhbGFybSBoaWdoICovCit9OworCisvKioKKyAqIFBPTSBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBiZmFfcG9tX2F0dHJfcyB7CisJc3RydWN0IGJmYV9wb21fZW50cnlfcyB0ZW1wZXJhdHVyZTsJLyogIGNlbnRpZ3JhZGUgKi8KKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIHZvbHRhZ2U7CS8qICB2b2x0cyAqLworCXN0cnVjdCBiZmFfcG9tX2VudHJ5X3MgY3VycjsJLyogIG1pbGxpIGFtcHMgKi8KKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIHR4cG93ZXI7CS8qICBtaWNybyB3YXR0cyAqLworCXN0cnVjdCBiZmFfcG9tX2VudHJ5X3Mgcnhwb3dlcjsJLyogIG1pY3JvIHdhdHRzICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19QT01fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwNjk2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvcnQuaApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QT1JUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jLmg+CisKKyNkZWZpbmUgQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaICAxNgorCisvKioKKyAqIHN5bWJvbGljIG5hbWVzIGZvciBiYXNlIHBvcnQvdmlydHVhbCBwb3J0CisgKi8KKyNkZWZpbmUgQkZBX1NZTU5BTUVfTUFYTEVOCTEyOAkvKiB2bXdhcmUvd2luZG93cyB1c2VzIDEyOCBieXRlcyAqLworc3RydWN0IGJmYV9wb3J0X3N5bW5hbWVfcyB7CisJY2hhciAgICAgICAgICAgIHN5bW5hbWVbQkZBX1NZTU5BTUVfTUFYTEVOXTsKK307CisKKy8qKgorKiBSb2xlcyBvZiBGQ1MgcG9ydDoKKyAqICAgICAtIEZDUCBJTSBhbmQgRkNQIFRNIHJvbGVzIGNhbm5vdCBiZSBlbmFibGVkIHRvZ2V0aGVyIGZvciBhIEZDUyBwb3J0CisgKiAgICAgLSBDcmVhdGUgbXVsdGlwbGUgcG9ydHMgaWYgYm90aCBJTSBhbmQgVE0gZnVuY3Rpb25zIHJlcXVpcmVkLgorICogICAgIC0gQXRsZWFzdCBvbmUgcm9sZSBtdXN0IGJlIHNwZWNpZmllZC4KKyAqLworZW51bSBiZmFfcG9ydF9yb2xlIHsKKwlCRkFfUE9SVF9ST0xFX0ZDUF9JTSAJPSAweDAxLAkvKiAgRkNQIGluaXRpYXRvciByb2xlICovCisJQkZBX1BPUlRfUk9MRV9GQ1BfVE0gCT0gMHgwMiwJLyogIEZDUCB0YXJnZXQgcm9sZSAqLworCUJGQV9QT1JUX1JPTEVfRkNQX0lQRkMgCT0gMHgwNCwJLyogIElQIG92ZXIgRkMgcm9sZSAqLworCUJGQV9QT1JUX1JPTEVfRkNQX01BWCAJPSBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDIHwgQkZBX1BPUlRfUk9MRV9GQ1BfSU0KK307CisKKy8qKgorICogRkNTIHBvcnQgY29uZmlndXJhdGlvbi4KKyAqLworc3RydWN0IGJmYV9wb3J0X2NmZ19zIHsKKyAgICB3d25fdCAgICAgICAgICAgICAgIHB3d247ICAgICAgIC8qICBwb3J0IHd3biAqLworICAgIHd3bl90ICAgICAgICAgICAgICAgbnd3bjsgICAgICAgLyogIG5vZGUgd3duICovCisgICAgc3RydWN0IGJmYV9wb3J0X3N5bW5hbWVfcyAgc3ltX25hbWU7ICAgLyogIHZtIHBvcnQgc3ltYm9saWMgbmFtZSAqLworICAgIGVudW0gYmZhX3BvcnRfcm9sZSAgICAgcm9sZXM7ICAgICAgLyogIEZDUyBwb3J0IHJvbGVzICovCisJdTMyCQkJcnN2ZDsKKyAgICB1OCAgICAgICAgICAgICB0YWdbMTZdOwkvKiAgb3BhcXVlIHRhZyBmcm9tIGFwcGxpY2F0aW9uICovCit9OworCisvKioKKyAqIEZDUyBwb3J0IHN0YXRlcworICovCitlbnVtIGJmYV9wb3J0X3N0YXRlIHsKKwlCRkFfUE9SVF9VTklOSVQgID0gMCwJLyogIFBPUlQgaXMgbm90IHlldCBpbml0aWFsaXplZCAqLworCUJGQV9QT1JUX0ZESVNDICAgPSAxLAkvKiAgRkRJU0MgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfUE9SVF9PTkxJTkUgID0gMiwJLyogIGxvZ2luIHRvIGZhYnJpYyBpcyBjb21wbGV0ZSAqLworCUJGQV9QT1JUX09GRkxJTkUgPSAzLAkvKiAgTm8gbG9naW4gdG8gZmFicmljICovCit9OworCisvKioKKyAqIEZDUyBwb3J0IHR5cGUuIFJlcXVpcmVkIGZvciBWbVdhcmUuCisgKi8KK2VudW0gYmZhX3BvcnRfdHlwZSB7CisJQkZBX1BPUlRfVFlQRV9QSFlTSUNBTCA9IDAsCisJQkZBX1BPUlRfVFlQRV9WSVJUVUFMLAorfTsKKworLyoqCisgKiBGQ1MgcG9ydCBvZmZsaW5lIHJlYXNvbi4gUmVxdWlyZWQgZm9yIFZtV2FyZS4KKyAqLworZW51bSBiZmFfcG9ydF9vZmZsaW5lX3JlYXNvbiB7CisJQkZBX1BPUlRfT0ZGTElORV9VTktOT1dOID0gMCwKKwlCRkFfUE9SVF9PRkZMSU5FX0xJTktET1dOLAorCUJGQV9QT1JUX09GRkxJTkVfRkFCX1VOU1VQUE9SVEVELAkvKiAgTlBJViBub3Qgc3VwcG9ydGVkIGJ5IHRoZQorCQkJCQkJICogICAgZmFicmljICovCisJQkZBX1BPUlRfT0ZGTElORV9GQUJfTk9SRVNPVVJDRVMsCisJQkZBX1BPUlRfT0ZGTElORV9GQUJfTE9HT1VULAorfTsKKworLyoqCisgKiBGQ1MgbHBvcnQgaW5mby4gUmVxdWlyZWQgZm9yIFZtV2FyZS4KKyAqLworc3RydWN0IGJmYV9wb3J0X2luZm9fcyB7CisJdTggICAgICAgICBwb3J0X3R5cGU7CS8qIGJmYV9wb3J0X3R5cGVfdCA6IHBoeXNpY2FsIG9yCisJCQkJCSAqIHZpcnR1YWwgKi8KKwl1OCAgICAgICAgIHBvcnRfc3RhdGU7CS8qIG9uZSBvZiBiZmFfcG9ydF9zdGF0ZSB2YWx1ZXMgKi8KKwl1OCAgICAgICAgIG9mZmxpbmVfcmVhc29uOwkvKiBvbmUgb2YgYmZhX3BvcnRfb2ZmbGluZV9yZWFzb25fdAorCQkJCQkgKiB2YWx1ZXMgKi8KKwl3d25fdCAgICAgICAgICAgcG9ydF93d247CisJd3duX3QgICAgICAgICAgIG5vZGVfd3duOworCisJLyoKKwkgKiBmb2xsb3dpbmcgNCBmZWlsZHMgYXJlIHZhbGlkIGZvciBQaHlzaWNhbCBQb3J0cyBvbmx5CisJICovCisJdTMyICAgICAgICBtYXhfdnBvcnRzX3N1cHA7CS8qIE1heCBzdXBwb3J0ZWQgdnBvcnRzICovCisJdTMyICAgICAgICBudW1fdnBvcnRzX2ludXNlOwkvKiBOdW0gb2YgaW4gdXNlIHZwb3J0cyAqLworCXUzMiAgICAgICAgbWF4X3Jwb3J0c19zdXBwOwkvKiBNYXggc3VwcG9ydGVkIHJwb3J0cyAqLworCXUzMiAgICAgICAgbnVtX3Jwb3J0c19pbnVzZTsJLyogTnVtIG9mIGRvc2NvdmVyZWQgcnBvcnRzICovCisKK307CisKKy8qKgorICogRkNTIHBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyB7CisJdTMyICAgICAgICBuc19wbG9naV9zZW50OworCXUzMiAgICAgICAgbnNfcGxvZ2lfcnNwX2VycjsKKwl1MzIgICAgICAgIG5zX3Bsb2dpX2FjY19lcnI7CisJdTMyICAgICAgICBuc19wbG9naV9hY2NlcHRzOworCXUzMiAgICAgICAgbnNfcmVqZWN0czsJLyogTlMgY29tbWFuZCByZWplY3RzICovCisJdTMyICAgICAgICBuc19wbG9naV91bmtub3duX3JzcDsKKwl1MzIgICAgICAgIG5zX3Bsb2dpX2FsbG9jX3dhaXQ7CisKKwl1MzIgICAgICAgIG5zX3JldHJpZXM7CS8qIE5TIGNvbW1hbmQgcmV0cmllcyAqLworCXUzMiAgICAgICAgbnNfdGltZW91dHM7CS8qIE5TIGNvbW1hbmQgdGltZW91dHMgKi8KKworCXUzMiAgICAgICAgbnNfcnNwbmlkX3NlbnQ7CisJdTMyICAgICAgICBuc19yc3BuaWRfYWNjZXB0czsKKwl1MzIgICAgICAgIG5zX3JzcG5pZF9yc3BfZXJyOworCXUzMiAgICAgICAgbnNfcnNwbmlkX3JlamVjdHM7CisJdTMyICAgICAgICBuc19yc3BuaWRfYWxsb2Nfd2FpdDsKKworCXUzMiAgICAgICAgbnNfcmZ0aWRfc2VudDsKKwl1MzIgICAgICAgIG5zX3JmdGlkX2FjY2VwdHM7CisJdTMyICAgICAgICBuc19yZnRpZF9yc3BfZXJyOworCXUzMiAgICAgICAgbnNfcmZ0aWRfcmVqZWN0czsKKwl1MzIgICAgICAgIG5zX3JmdGlkX2FsbG9jX3dhaXQ7CisKKwl1MzIJbnNfcmZmaWRfc2VudDsKKwl1MzIJbnNfcmZmaWRfYWNjZXB0czsKKwl1MzIJbnNfcmZmaWRfcnNwX2VycjsKKwl1MzIJbnNfcmZmaWRfcmVqZWN0czsKKwl1MzIJbnNfcmZmaWRfYWxsb2Nfd2FpdDsKKworCXUzMiAgICAgICAgbnNfZ2lkZnRfc2VudDsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X2FjY2VwdHM7CisJdTMyICAgICAgICBuc19naWRmdF9yc3BfZXJyOworCXUzMiAgICAgICAgbnNfZ2lkZnRfcmVqZWN0czsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X3Vua25vd25fcnNwOworCXUzMiAgICAgICAgbnNfZ2lkZnRfYWxsb2Nfd2FpdDsKKworCS8qCisJICogTWdtdCBTZXJ2ZXIgc3RhdHMKKwkgKi8KKwl1MzIgICAgICAgIG1zX3JldHJpZXM7CS8qIE1TIGNvbW1hbmQgcmV0cmllcyAqLworCXUzMiAgICAgICAgbXNfdGltZW91dHM7CS8qIE1TIGNvbW1hbmQgdGltZW91dHMgKi8KKwl1MzIgICAgICAgIG1zX3Bsb2dpX3NlbnQ7CisJdTMyICAgICAgICBtc19wbG9naV9yc3BfZXJyOworCXUzMiAgICAgICAgbXNfcGxvZ2lfYWNjX2VycjsKKwl1MzIgICAgICAgIG1zX3Bsb2dpX2FjY2VwdHM7CisJdTMyICAgICAgICBtc19yZWplY3RzOwkvKiBOUyBjb21tYW5kIHJlamVjdHMgKi8KKwl1MzIgICAgICAgIG1zX3Bsb2dpX3Vua25vd25fcnNwOworCXUzMiAgICAgICAgbXNfcGxvZ2lfYWxsb2Nfd2FpdDsKKworCXUzMiAgICAgICAgbnVtX3JzY247CS8qIE51bSBvZiBSU0NOIHJlY2VpdmVkICovCisJdTMyICAgICAgICBudW1fcG9ydGlkX3JzY247LyogTnVtIHBvcnRpZCBmb3JtYXQgUlNDTgorCQkJCQkJCQkqIHJlY2VpdmVkICovCisKKwl1MzIJdWZfcmVjdnM7IAkvKiB1bnNvbGljaXRlZCByZWN2IGZyYW1lcyAgICAgICovCisJdTMyCXVmX3JlY3ZfZHJvcHM7IAkvKiBkcm9wcGVkIHJlY2VpdmVkIGZyYW1lcwkqLworCisJdTMyCXJzdmQ7IAkJLyogcGFkZGluZyBmb3IgNjQgYml0IGFsaWdubWVudCAqLworfTsKKworLyoqCisgKiBCRkEgcG9ydCBhdHRyaWJ1dGUgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX3BvcnRfYXR0cl9zIHsKKwllbnVtIGJmYV9wb3J0X3N0YXRlIHN0YXRlOwkJLyogIHBvcnQgc3RhdGUgKi8KKwl1MzIgICAgICAgICBwaWQ7CQkvKiAgcG9ydCBJRCAqLworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAgIHBvcnRfY2ZnOwkvKiAgcG9ydCBjb25maWd1cmF0aW9uICovCisJZW51bSBiZmFfcHBvcnRfdHlwZSBwb3J0X3R5cGU7CS8qICBjdXJyZW50IHRvcG9sb2d5ICovCisJdTMyICAgICAgICAgbG9vcGJhY2s7CS8qICBjYWJsZSBpcyBleHRlcm5hbGx5IGxvb3BlZCBiYWNrICovCisJd3duX3QJCWZhYnJpY19uYW1lOyAvKiAgYXR0YWNoZWQgc3dpdGNoJ3Mgbnd3biAqLworCXU4CQlmYWJyaWNfaXBfYWRkcltCRkFfRkNTX0ZBQlJJQ19JUEFERFJfU1pdOyAvKiAgYXR0YWNoZWQKKwkJCQkJCQkqIGZhYnJpYydzIGlwIGFkZHIgKi8KK307CisKKy8qKgorICogQkZBIHBoeXNpY2FsIHBvcnQgTGV2ZWwgZXZlbnRzCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9QT1JUX0FFTl9PTkxJTkU6ICAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fT0ZGTElORTogICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX1JMSVI6ICAgICAgIFtpbl06IE5vbmUJW291dF06IHB3d24sIHJsaXJfZGF0YSwgcmxpcl9sZW4KKyAqIEJGQV9QT1JUX0FFTl9TRlBfSU5TRVJUOiBbaW5dOiBwd3duCVtvdXRdOiBwb3J0X2lkLCBwd3duCisgKiBCRkFfUE9SVF9BRU5fU0ZQX1JFTU9WRTogW2luXTogcHd3bglbb3V0XTogcG9ydF9pZCwgcHd3bgorICogQkZBX1BPUlRfQUVOX1NGUF9QT006ICAgIFtpbl06IHB3d24JW291dF06IGxldmVsLCBwb3J0X2lkLCBwd3duCisgKiBCRkFfUE9SVF9BRU5fRU5BQkxFOiAgICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0RJU0FCTEU6ICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9BVVRIX09OOiAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fQVVUSF9PRkY6ICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1Q6IFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9RT1NfTkVHOiAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fRkFCUklDX05BTUVfQ0hBTkdFOiBbaW5dOiBwd3duLCBbb3V0XTogcHd3biwgZnd3bgorICoKKyAqLworZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgeworCUJGQV9QT1JUX0FFTl9PTkxJTkUgICAgID0gMSwJLyogIFBoeXNpY2FsIFBvcnQgb25saW5lIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX09GRkxJTkUgICAgPSAyLAkvKiAgUGh5c2ljYWwgUG9ydCBvZmZsaW5lIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1JMSVIgICAgICAgPSAzLAkvKiAgUkxJUiBldmVudCwgbm90IHN1cHBvcnRlZCAqLworCUJGQV9QT1JUX0FFTl9TRlBfSU5TRVJUID0gNCwJLyogIFNGUCBpbnNlcnRlZCBldmVudCAqLworCUJGQV9QT1JUX0FFTl9TRlBfUkVNT1ZFID0gNSwJLyogIFNGUCByZW1vdmVkIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT00gICAgPSA2LAkvKiAgU0ZQIFBPTSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9FTkFCTEUgICAgID0gNywJLyogIFBoeXNpY2FsIFBvcnQgZW5hYmxlIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0RJU0FCTEUgICAgPSA4LAkvKiAgUGh5c2ljYWwgUG9ydCBkaXNhYmxlIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0FVVEhfT04gICAgPSA5LAkvKiAgUGh5c2ljYWwgUG9ydCBhdXRoIHN1Y2Nlc3MgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fQVVUSF9PRkYgICA9IDEwLAkvKiAgUGh5c2ljYWwgUG9ydCBhdXRoIGZhaWwgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fRElTQ09OTkVDVCA9IDExLAkvKiAgUGh5c2ljYWwgUG9ydCBkaXNjb25uZWN0IGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1FPU19ORUcgICAgPSAxMiwgIAkvKiAgQmFzZSBQb3J0IFFPUyBuZWdvdGlhdGlvbiBldmVudCAqLworCUJGQV9QT1JUX0FFTl9GQUJSSUNfTkFNRV9DSEFOR0UgPSAxMywgLyogIEZhYnJpYyBOYW1lL1dXTiBjaGFuZ2UKKwkJCQkJICAgICAgICogZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX0FDQ0VTU19FUlJPUiA9IDE0LCAvKiAgU0ZQIHJlYWQgZXJyb3IgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1VOU1VQUE9SVCA9IDE1LCAvKiAgVW5zdXBwb3J0ZWQgU0ZQIGV2ZW50ICovCit9OworCitlbnVtIGJmYV9wb3J0X2Flbl9zZnBfcG9tIHsKKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9HUkVFTiA9IDEsCS8qICBOb3JtYWwgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9BTUJFUiA9IDIsCS8qICBXYXJuaW5nICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT01fUkVEICAgPSAzLAkvKiAgQ3JpdGljYWwgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9NQVggICA9IEJGQV9QT1JUX0FFTl9TRlBfUE9NX1JFRAorfTsKKworc3RydWN0IGJmYV9wb3J0X2Flbl9kYXRhX3MgeworCWVudW0gYmZhX2lvY190eXBlX2UgaW9jX3R5cGU7CisJd3duX3QgICAgICAgICAgIHB3d247CSAgICAgIC8qICBXV04gb2YgdGhlIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgZnd3bjsJICAgICAgLyogIFdXTiBvZiB0aGUgZmFicmljIHBvcnQgKi8KKwltYWNfdCAgICAgICAgICAgbWFjOwkgICAgICAvKiAgTUFDIGFkZHJlcyBvZiB0aGUgZXRoZXJuZXQgcG9ydCwKKwkJCQkgICAgICAgKiBhcHBsaWNhYmxlIHRvIENOQSBwb3J0IG9ubHkgKi8KKwlpbnQgICAgICAgICAgICAgcGh5X3BvcnRfbnVtOyAvKiEgRm9yIFNGUCByZWxhdGVkIGV2ZW50cyAqLworCWVudW0gYmZhX3BvcnRfYWVuX3NmcF9wb20gbGV2ZWw7IC8qICBPbmx5IHRyYW5zaXRpb25zIHdpbGwKKwkJCQkJICAqIGJlIGluZm9ybWVkICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Bwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwMGJjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Bwb3J0LmgKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1BQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1BQT1JUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcW9zLmg+CisjaW5jbHVkZSA8Y25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaD4KKworLyogTW9kaWZ5IGNoYXIqIHBvcnRfc3R0W10gaW4gYmZhbF9wb3J0LmMgaWYgYSBuZXcgc3RhdGUgd2FzIGFkZGVkICovCitlbnVtIGJmYV9wcG9ydF9zdGF0ZXMgeworCUJGQV9QUE9SVF9TVF9VTklOSVQgCQk9IDEsCisJQkZBX1BQT1JUX1NUX0VOQUJMSU5HX1FXQUlUIAk9IDIsCisJQkZBX1BQT1JUX1NUX0VOQUJMSU5HIAkJPSAzLAorCUJGQV9QUE9SVF9TVF9MSU5LRE9XTiAJCT0gNCwKKwlCRkFfUFBPUlRfU1RfTElOS1VQIAkJPSA1LAorCUJGQV9QUE9SVF9TVF9ESVNBQkxJTkdfUVdBSVQgCT0gNiwKKwlCRkFfUFBPUlRfU1RfRElTQUJMSU5HCQk9IDcsCisJQkZBX1BQT1JUX1NUX0RJU0FCTEVEIAkJPSA4LAorCUJGQV9QUE9SVF9TVF9TVE9QUEVEIAkJPSA5LAorCUJGQV9QUE9SVF9TVF9JT0NET1dOIAkJPSAxMCwKKwlCRkFfUFBPUlRfU1RfSU9DRElTIAkJPSAxMSwKKwlCRkFfUFBPUlRfU1RfRldNSVNNQVRDSAkJPSAxMiwKKwlCRkFfUFBPUlRfU1RfTUFYX1NUQVRFLAorfTsKKworLyoqCisgKiAJUG9ydCBzcGVlZCBzZXR0aW5ncy4gRWFjaCBzcGVjaWZpYyBzcGVlZCBpcyBhIGJpdCBmaWVsZC4gVXNlIG11bHRpcGxlCisgKiAgICAgIGJpdHMgdG8gc3BlY2lmeSBzcGVlZHMgdG8gYmUgc2VsZWN0ZWQgZm9yIGF1dG8tbmVnb3RpYXRpb24uCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NwZWVkIHsKKwlCRkFfUFBPUlRfU1BFRURfVU5LTk9XTiA9IDAsCisJQkZBX1BQT1JUX1NQRUVEXzFHQlBTIAk9IDEsCisJQkZBX1BQT1JUX1NQRUVEXzJHQlBTIAk9IDIsCisJQkZBX1BQT1JUX1NQRUVEXzRHQlBTIAk9IDQsCisJQkZBX1BQT1JUX1NQRUVEXzhHQlBTIAk9IDgsCisJQkZBX1BQT1JUX1NQRUVEXzEwR0JQUyAJPSAxMCwKKwlCRkFfUFBPUlRfU1BFRURfQVVUTyA9CisJCShCRkFfUFBPUlRfU1BFRURfMUdCUFMgfCBCRkFfUFBPUlRfU1BFRURfMkdCUFMgfAorCQkgQkZBX1BQT1JUX1NQRUVEXzRHQlBTIHwgQkZBX1BQT1JUX1NQRUVEXzhHQlBTKSwKK307CisKKy8qKgorICogCQlQb3J0IG9wZXJhdGlvbmFsIHR5cGUgKGluIHN5bmMgd2l0aCBTTklBIHBvcnQgdHlwZSkuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3R5cGUgeworCUJGQV9QUE9SVF9UWVBFX1VOS05PV04gPSAxLAkvKiAgcG9ydCB0eXBlIGlzIHVua293biAqLworCUJGQV9QUE9SVF9UWVBFX1RSVU5LRUQgPSAyLAkvKiAgVHJ1bmtlZCBtb2RlICovCisJQkZBX1BQT1JUX1RZUEVfTlBPUlQgICA9IDUsCS8qICBQMlAgd2l0aCBzd2l0Y2hlZCBmYWJyaWMgKi8KKwlCRkFfUFBPUlRfVFlQRV9OTFBPUlQgID0gNiwJLyogIHB1YmxpYyBsb29wICovCisJQkZBX1BQT1JUX1RZUEVfTFBPUlQgICA9IDIwLAkvKiAgcHJpdmF0ZSBsb29wICovCisJQkZBX1BQT1JUX1RZUEVfUDJQICAgICA9IDIxLAkvKiAgUDJQIHdpdGggbm8gc3dpdGNoZWQgZmFicmljICovCisJQkZBX1BQT1JUX1RZUEVfVlBPUlQgICA9IDIyLAkvKiAgTlBJViAtIHZpcnR1YWwgcG9ydCAqLworfTsKKworLyoqCisgKiAJCVBvcnQgdG9wb2xvZ3kgc2V0dGluZy4gQSBwb3J0J3MgdG9wb2xvZ3kgYW5kIGZhYnJpYyBsb2dpbiBzdGF0dXMKKyAqIAkJZGV0ZXJtaW5lIGl0cyBvcGVyYXRpb25hbCB0eXBlLgorICovCitlbnVtIGJmYV9wcG9ydF90b3BvbG9neSB7CisJQkZBX1BQT1JUX1RPUE9MT0dZX05PTkUgPSAwLAkvKiAgTm8gdmFsaWQgdG9wb2xvZ3kgKi8KKwlCRkFfUFBPUlRfVE9QT0xPR1lfUDJQICA9IDEsCS8qICBQMlAgb25seSAqLworCUJGQV9QUE9SVF9UT1BPTE9HWV9MT09QID0gMiwJLyogIExPT1AgdG9wb2xvZ3kgKi8KKwlCRkFfUFBPUlRfVE9QT0xPR1lfQVVUTyA9IDMsCS8qICBhdXRvIHRvcG9sb2d5IHNlbGVjdGlvbiAqLworfTsKKworLyoqCisgKiAJCVBoeXNpY2FsIHBvcnQgbG9vcGJhY2sgdHlwZXMuCisgKi8KK2VudW0gYmZhX3Bwb3J0X29wbW9kZSB7CisJQkZBX1BQT1JUX09QTU9ERV9OT1JNQUwgICA9IDB4MDAsIC8qICBub3JtYWwgbm9uLWxvb3BiYWNrIG1vZGUgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX0lOVCAgID0gMHgwMSwgLyogIGludGVybmFsIGxvb3AgYmFjayAqLworCUJGQV9QUE9SVF9PUE1PREVfTEJfU0xXICAgPSAweDAyLCAvKiAgc2VyaWFsIGxpbmsgd3JhcGJhY2sgKHNlcmRlcykgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX0VYVCAgID0gMHgwNCwgLyogIGV4dGVybmFsIGxvb3AgYmFjayAoc2VyZGVzKSAqLworCUJGQV9QUE9SVF9PUE1PREVfTEJfQ0JMICAgPSAweDA4LCAvKiAgY2FibGVkIGxvb3AgYmFjayAqLworCUJGQV9QUE9SVF9PUE1PREVfTEJfTkxJTlQgPSAweDIwLCAvKiAgTkxfUG9ydCBpbnRlcm5hbCBsb29wYmFjayAqLworfTsKKworI2RlZmluZSBCRkFfUFBPUlRfT1BNT0RFX0xCX0hBUkQoX21vZGUpCQkJXAorCSgoX21vZGUgPT0gQkZBX1BQT1JUX09QTU9ERV9MQl9JTlQpIHx8CQlcCisgICAgIChfbW9kZSA9PSBCRkFfUFBPUlRfT1BNT0RFX0xCX1NMVykgfHwJCVwKKyAgICAgKF9tb2RlID09IEJGQV9QUE9SVF9PUE1PREVfTEJfRVhUKSkKKworLyoqCisJCVBvcnQgU3RhdGUgKGluIHN5bmMgd2l0aCBTTklBIHBvcnQgc3RhdGUpLgorICovCitlbnVtIGJmYV9wcG9ydF9zbmlhX3N0YXRlIHsKKwlCRkFfUFBPUlRfU1RBVEVfVU5LTk9XTiAgPSAxLAkvKiAgcG9ydCBpcyBub3QgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfUFBPUlRfU1RBVEVfT05MSU5FICAgPSAyLAkvKiAgcG9ydCBpcyBPTkxJTkUgKi8KKwlCRkFfUFBPUlRfU1RBVEVfRElTQUJMRUQgPSAzLAkvKiAgcG9ydCBpcyBkaXNhYmxlZCBieSB1c2VyICovCisJQkZBX1BQT1JUX1NUQVRFX0JZUEFTU0VEID0gNCwJLyogIHBvcnQgaXMgYnlwYXNzZWQgKGluIExPT1ApICovCisJQkZBX1BQT1JUX1NUQVRFX0RJQUcgICAgID0gNSwJLyogIHBvcnQgZGlhZ25vc3RpY3MgaXMgYWN0aXZlICovCisJQkZBX1BQT1JUX1NUQVRFX0xJTktET1dOID0gNiwJLyogIGxpbmsgaXMgZG93biAqLworCUJGQV9QUE9SVF9TVEFURV9MT09QQkFDSyA9IDgsCS8qICBwb3J0IGlzIGxvb3BlZCBiYWNrICovCit9OworCisvKioKKyAqIAkJUG9ydCBsaW5rIHN0YXRlCisgKi8KK2VudW0gYmZhX3Bwb3J0X2xpbmtzdGF0ZSB7CisJQkZBX1BQT1JUX0xJTktVUCAJID0gMSwJLyogIFBoeXNpY2FsIHBvcnQvVHJ1bmsgbGluayB1cCAqLworCUJGQV9QUE9SVF9MSU5LRE9XTiAJID0gMiwJLyogIFBoeXNpY2FsIHBvcnQvVHJ1bmsgbGluayBkb3duICovCisJQkZBX1BQT1JUX1RSVU5LX0xJTktET1dOID0gMywJLyogIFRydW5rIGxpbmsgZG93biAobmV3IHRtYXN0ZXIpICovCit9OworCisvKioKKyAqIAkJUG9ydCBsaW5rIHN0YXRlIGV2ZW50CisgKi8KKyNkZWZpbmUgYmZhX3Bwb3J0X2V2ZW50X3QgZW51bSBiZmFfcHBvcnRfbGlua3N0YXRlCisKKy8qKgorICogCQlQb3J0IGxpbmsgc3RhdGUgcmVhc29uIGNvZGUKKyAqLworZW51bSBiZmFfcHBvcnRfbGlua3N0YXRlX3JzbiB7CisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fTk9ORQkJPSAwLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX0RJU0FCTEVEIAk9IDEsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfTk9TIAkJPSAyLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JYX09MUyAJCT0gMywKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SWF9MSVAgCQk9IDQsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfTElQRjcgCT0gNSwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9TRlBfUkVNT1ZFRCAJPSA2LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1BPUlRfRkFVTFQgCT0gNywKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SWF9MT1MgCQk9IDgsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fTE9DQUxfRkFVTFQgCT0gOSwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SRU1PVEVfRkFVTFQgCT0gMTAsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fVElNRU9VVCAJPSAxMSwKKworCisKKwkvKiBDRUUgcmVsYXRlZCByZWFzb24gY29kZXMvZXJyb3JzICovCisJQ0VFX0xMRFBfSU5GT19BR0VEX09VVCAgICAgICA9IDIwLAorCUNFRV9MTERQX1NIVVRET1dOX1RMVl9SQ1ZEICAgPSAyMSwKKwlDRUVfUEVFUl9OT1RfQURWRVJUSVNFX0RDQlggID0gMjIsCisJQ0VFX1BFRVJfTk9UX0FEVkVSVElTRV9QRyAgICA9IDIzLAorCUNFRV9QRUVSX05PVF9BRFZFUlRJU0VfUEZDICAgPSAyNCwKKwlDRUVfUEVFUl9OT1RfQURWRVJUSVNFX0ZDT0UgID0gMjUsCisJQ0VFX1BHX05PVF9DT01QQVRJQkxFICAgICAgICA9IDI2LAorCUNFRV9QRkNfTk9UX0NPTVBBVElCTEUgICAgICAgPSAyNywKKwlDRUVfRkNPRV9OT1RfQ09NUEFUSUJMRSAgICAgID0gMjgsCisJQ0VFX0JBRF9QR19SQ1ZEICAgICAgICAgICAgICA9IDI5LAorCUNFRV9CQURfQldfUkNWRCAgICAgICAgICAgICAgPSAzMCwKKwlDRUVfQkFEX1BGQ19SQ1ZEICAgICAgICAgICAgID0gMzEsCisJQ0VFX0JBRF9GQ09FX1BSSV9SQ1ZEICAgICAgICA9IDMyLAorCUNFRV9GQ09FX1BSSV9QRkNfT0ZGICAgICAgICAgPSAzMywKKwlDRUVfRFVQX0NPTlRST0xfVExWX1JDVkQgICAgID0gMzQsCisJQ0VFX0RVUF9GRUFUX1RMVl9SQ1ZEICAgICAgICA9IDM1LAorCUNFRV9BUFBMWV9ORVdfQ0ZHICAgICAgICAgICAgPSAzNiwJLyogcmVhc29uLCBub3QgYW4gZXJyb3IgKi8KKwlDRUVfUFJPVE9DT0xfSU5JVCAgICAgICAgICAgID0gMzcsICAvKiByZWFzb24sIG5vdCBhbiBlcnJvciAqLworCUNFRV9QSFlfTElOS19ET1dOICAgICAgICAgICAgPSAzOCwKKwlDRUVfTExTX0ZDT0VfQUJTRU5UICAgICAgICAgID0gMzksCisJQ0VFX0xMU19GQ09FX0RPV04gICAgICAgICAgICA9IDQwCit9OworCisvKioKKyAqICAgICAgRGVmYXVsdCBUYXJnZXQgUmF0ZSBMaW1pdGluZyBTcGVlZC4KKyAqLworI2RlZmluZSBCRkFfUFBPUlRfREVGX1RSTF9TUEVFRCAgQkZBX1BQT1JUX1NQRUVEXzFHQlBTCisKKy8qKgorICogICAgICBQaHlzaWNhbCBwb3J0IGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IGJmYV9wcG9ydF9jZmdfcyB7CisJdTggICAgICAgICB0b3BvbG9neTsJLyogIGJmYV9wcG9ydF90b3BvbG9neQkJKi8KKwl1OCAgICAgICAgIHNwZWVkOwkJLyogIGVudW0gYmZhX3Bwb3J0X3NwZWVkCSovCisJdTggICAgICAgICB0cnVua2VkOwkvKiAgdHJ1bmtlZCBvciBub3QJCSovCisJdTggICAgICAgICBxb3NfZW5hYmxlZDsJLyogIHFvcyBlbmFibGVkIG9yIG5vdAkJKi8KKwl1OCAgICAgICAgIHRydW5rX3BvcnRzOwkvKiAgYml0bWFwIG9mIHRydW5rZWQgcG9ydHMJKi8KKwl1OCAgICAgICAgIGNmZ19oYXJkYWxwYTsJLyogIGlzIGhhcmQgYWxwYSBjb25maWd1cmVkCSovCisJdTE2ICAgICAgICBtYXhmcnNpemU7CS8qICBtYXhpbXVtIGZyYW1lIHNpemUJCSovCisJdTggICAgICAgICBoYXJkYWxwYTsJLyogIGNvbmZpZ3VyZWQgaGFyZCBhbHBhCSovCisJdTggICAgICAgICByeF9iYmNyZWRpdDsJLyogIHJlY2VpdmUgYnVmZmVyIGNyZWRpdHMJKi8KKwl1OCAgICAgICAgIHR4X2JiY3JlZGl0OwkvKiAgdHJhbnNtaXQgYnVmZmVyIGNyZWRpdHMJKi8KKwl1OCAgICAgICAgIHJhdGVsaW1pdDsJLyogIHJhdGVsaW1pdCBlbmFibGVkIG9yIG5vdAkqLworCXU4ICAgICAgICAgdHJsX2RlZl9zcGVlZDsJLyogIHJhdGVsaW1pdCBkZWZhdWx0IHNwZWVkCSovCisJdTgJCXJzdmRbM107CisJdTE2ICAgCXBhdGhfdG92OwkvKiAgZGV2aWNlIHBhdGggdGltZW91dAkqLworCXUxNiAgIAlxX2RlcHRoOwkvKiAgU0NTSSBRdWV1ZSBkZXB0aAkJKi8KK307CisKKy8qKgorICogCQlQb3J0IGF0dHJpYnV0ZSB2YWx1ZXMuCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHsKKwkvKgorCSAqIFN0YXRpYyBmaWVsZHMKKwkgKi8KKwl3d25fdCAgICAgICAgICAgbnd3bjsJCS8qICBub2RlIHd3biAqLworCXd3bl90ICAgICAgICAgICBwd3duOwkJLyogIHBvcnQgd3duICovCisJZW51bSBmY19jb3MgICAgIGNvc19zdXBwb3J0ZWQ7CS8qICBzdXBwb3J0ZWQgY2xhc3Mgb2Ygc2VydmljZXMgKi8KKwl1MzIgICAgICAgIHJzdmQ7CisJc3RydWN0IGZjX3N5bW5hbWVfcyAgICBwb3J0X3N5bW5hbWU7CS8qICBwb3J0IHN5bWJvbGljIG5hbWUgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZF9zdXBwb3J0ZWQ7IC8qICBzdXBwb3J0ZWQgc3BlZWRzICovCisJYmZhX2Jvb2xlYW5fdCAgIHBiaW5kX2VuYWJsZWQ7CS8qICBXaWxsIGJlIHNldCBpZiBQZXJzaXN0ZW50IGJpbmRpbmcKKwkJCQkJICogICBlbmFibGVkLiBSZWxldmFudCBvbmx5IGluIFdpbmRvd3MKKwkJCQkJICovCisKKwkvKgorCSAqIENvbmZpZ3VyZWQgdmFsdWVzCisJICovCisJc3RydWN0IGJmYV9wcG9ydF9jZmdfcyBwcG9ydF9jZmc7CS8qICBwcG9ydCBjZmcgKi8KKworCS8qCisJICogRHluYW1pYyBmaWVsZCAtIGluZm8gZnJvbSBCRkEKKwkgKi8KKwllbnVtIGJmYV9wcG9ydF9zdGF0ZXMgCXBvcnRfc3RhdGU7CS8qICBjdXJyZW50IHBvcnQgc3RhdGUgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCAJc3BlZWQ7CQkvKiAgY3VycmVudCBzcGVlZCAqLworCWVudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IAl0b3BvbG9neTsJLyogIGN1cnJlbnQgdG9wb2xvZ3kgKi8KKwliZmFfYm9vbGVhbl90CQliZWFjb247CQkvKiAgY3VycmVudCBiZWFjb24gc3RhdHVzICovCisJYmZhX2Jvb2xlYW5fdAkJbGlua19lMmVfYmVhY29uOy8qICBzZXQgaWYgbGluayBiZWFjb24gb24gKi8KKwliZmFfYm9vbGVhbl90CQlwbG9nX2VuYWJsZWQ7CS8qICBzZXQgaWYgcG9ydGxvZyBpcyBlbmFibGVkKi8KKworCS8qCisJICogRHluYW1pYyBmaWVsZCAtIGluZm8gZnJvbSBGQ1MKKwkgKi8KKwl1MzIgICAgICAgIAlwaWQ7CQkvKiAgcG9ydCBJRCAqLworCWVudW0gYmZhX3Bwb3J0X3R5cGUgCXBvcnRfdHlwZTsJLyogIGN1cnJlbnQgdG9wb2xvZ3kgKi8KKwl1MzIgICAgICAgIAlsb29wYmFjazsJLyogIGV4dGVybmFsIGxvb3BiYWNrICovCisJdTMyCQlyc3ZkMTsKKwl1MzIJCXJzdmQyOwkJLyogIHBhZGRpbmcgZm9yIDY0IGJpdCAqLworfTsKKworLyoqCisgKiAJCUZDIFBvcnQgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IGJmYV9wcG9ydF9mY19zdGF0c19zIHsKKwl1NjQgICAgICAgIHNlY3NfcmVzZXQ7CS8qICBzZWNvbmRzIHNpbmNlIHN0YXRzIGlzIHJlc2V0ICovCisJdTY0ICAgICAgICB0eF9mcmFtZXM7CS8qICB0cmFuc21pdHRlZCBmcmFtZXMgKi8KKwl1NjQgICAgICAgIHR4X3dvcmRzOwkvKiAgdHJhbnNtaXR0ZWQgd29yZHMgKi8KKwl1NjQgICAgICAgIHJ4X2ZyYW1lczsJLyogIHJlY2VpdmVkIGZyYW1lcyAqLworCXU2NCAgICAgICAgcnhfd29yZHM7CS8qICByZWNlaXZlZCB3b3JkcyAqLworCXU2NCAgICAgICAgbGlwX2NvdW50OwkvKiAgTElQcyBzZWVuICovCisJdTY0ICAgICAgICBub3NfY291bnQ7CS8qICBOT1MgY291bnQgKi8KKwl1NjQgICAgICAgIGVycm9yX2ZyYW1lczsJLyogIGVycm9yZWQgZnJhbWVzIChzZW50PykgKi8KKwl1NjQgICAgICAgIGRyb3BwZWRfZnJhbWVzOwkvKiAgZHJvcHBlZCBmcmFtZXMgKi8KKwl1NjQgICAgICAgIGxpbmtfZmFpbHVyZXM7CS8qICBsaW5rIGZhaWx1cmUgY291bnQgKi8KKwl1NjQgICAgICAgIGxvc3Nfb2Zfc3luY3M7CS8qICBsb3NzIG9mIHN5bmMgY291bnQgKi8KKwl1NjQgICAgICAgIGxvc3Nfb2Zfc2lnbmFsczsvKiAgbG9zcyBvZiBzaWduYWwgY291bnQgKi8KKwl1NjQgICAgICAgIHByaW1zZXFfZXJyczsJLyogIHByaW1pdGl2ZSBzZXF1ZW5jZSBwcm90b2NvbCAqLworCXU2NCAgICAgICAgYmFkX29zX2NvdW50OwkvKiAgaW52YWxpZCBvcmRlcmVkIHNldCAqLworCXU2NCAgICAgICAgZXJyX2VuY19vdXQ7CS8qICBFbmNvZGluZyBlcnJvciBvdXRzaWRlIGZyYW1lICovCisJdTY0ICAgICAgICBpbnZhbGlkX2NyY3M7CS8qICBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBpbnZhbGlkIENSQyovCisJdTY0CXVuZGVyc2l6ZWRfZnJtOyAvKiAgdW5kZXJzaXplZCBmcmFtZXMgKi8KKwl1NjQJb3ZlcnNpemVkX2ZybTsJLyogIG92ZXJzaXplZCBmcmFtZXMgKi8KKwl1NjQJYmFkX2VvZl9mcm07CS8qICBmcmFtZXMgd2l0aCBiYWQgRU9GICovCisJc3RydWN0IGJmYV9xb3Nfc3RhdHNfcwlxb3Nfc3RhdHM7CS8qICBRb1Mgc3RhdGlzdGljcyAqLworfTsKKworLyoqCisgKiAJCUV0aCBQb3J0IHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfZXRoX3N0YXRzX3MgeworCXU2NAlzZWNzX3Jlc2V0OwkvKiAgc2Vjb25kcyBzaW5jZSBzdGF0cyBpcyByZXNldCAqLworCXU2NAlmcmFtZV82NDsgICAgICAvKiAgYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV82NV8xMjc7ICAgICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV8xMjhfMjU1OyAgICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV8yNTZfNTExOyAgICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV81MTJfMTAyMzsgICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV8xMDI0XzE1MTg7ICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV8xNTE5XzE1MjI7ICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCisJdTY0CXR4X2J5dGVzOworCXU2NAl0eF9wYWNrZXRzOworCXU2NAl0eF9tY2FzdF9wYWNrZXRzOworCXU2NAl0eF9iY2FzdF9wYWNrZXRzOworCXU2NAl0eF9jb250cm9sX2ZyYW1lOworCXU2NAl0eF9kcm9wOworCXU2NAl0eF9qYWJiZXI7CisJdTY0CXR4X2Zjc19lcnJvcjsKKwl1NjQJdHhfZnJhZ21lbnRzOworCisJdTY0CXJ4X2J5dGVzOworCXU2NAlyeF9wYWNrZXRzOworCXU2NAlyeF9tY2FzdF9wYWNrZXRzOworCXU2NAlyeF9iY2FzdF9wYWNrZXRzOworCXU2NAlyeF9jb250cm9sX2ZyYW1lczsKKwl1NjQJcnhfdW5rbm93bl9vcGNvZGU7CisJdTY0CXJ4X2Ryb3A7CisJdTY0CXJ4X2phYmJlcjsKKwl1NjQJcnhfZmNzX2Vycm9yOworCXU2NAlyeF9hbGlnbm1lbnRfZXJyb3I7CisJdTY0CXJ4X2ZyYW1lX2xlbmd0aF9lcnJvcjsKKwl1NjQJcnhfY29kZV9lcnJvcjsKKwl1NjQJcnhfZnJhZ21lbnRzOworCisJdTY0CXJ4X3BhdXNlOyAvKiBCUEMgKi8KKwl1NjQJcnhfemVyb19wYXVzZTsgLyogIEJQQyBQYXVzZSBjYW5jZWxsYXRpb24gKi8KKwl1NjQJdHhfcGF1c2U7ICAgICAgLyogQlBDICovCisJdTY0CXR4X3plcm9fcGF1c2U7IC8qICBCUEMgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0CXJ4X2Zjb2VfcGF1c2U7IC8qIEJQQyAqLworCXU2NAlyeF9mY29lX3plcm9fcGF1c2U7IC8qICBCUEMgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0CXR4X2Zjb2VfcGF1c2U7ICAgICAgLyogQlBDICovCisJdTY0CXR4X2Zjb2VfemVyb19wYXVzZTsgLyogIEJQQyBQYXVzZSBjYW5jZWxsYXRpb24gKi8KK307CisKKy8qKgorICogCQlQb3J0IHN0YXRpc3RpY3MuCisgKi8KK3VuaW9uIGJmYV9wcG9ydF9zdGF0c191IHsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2ZjX3N0YXRzX3MJZmM7CisJc3RydWN0IGJmYV9wcG9ydF9ldGhfc3RhdHNfcyAJZXRoOworfTsKKworLyoqCisgKiAgICAgICAgICAgICAgUG9ydCBGQ1AgbWFwcGluZ3MuCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfZmNwbWFwX3MgeworCWNoYXIJCW9zZGV2bmFtZVsyNTZdOworCXUzMglidXM7CisJdTMyICAgICAgICB0YXJnZXQ7CisJdTMyICAgICAgICBvc2x1bjsKKwl1MzIgICAgICAgIGZjaWQ7CisJd3duX3QgICAgICAgICAgIG53d247CisJd3duX3QgICAgICAgICAgIHB3d247CisJdTY0ICAgICAgICBmY3BsdW47CisJY2hhcgkJbHVpZFsyNTZdOworfTsKKworLyoqCisgKiAgICAgICAgICAgICAgUG9ydCBSTklEIGluZm8uCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfcm5pZF9zIHsKKwl3d25fdCAgICAgICAgICAgICB3d247CisJdTMyICAgICAgICAgIHVuaXR0eXBlOworCXUzMiAgICAgICAgICBwb3J0aWQ7CisJdTMyICAgICAgICAgIGF0dGFjaGVkX25vZGVzX251bTsKKwl1MTYgICAgICAgICAgaXBfdmVyc2lvbjsKKwl1MTYgICAgICAgICAgdWRwX3BvcnQ7CisJdTggICAgICAgICAgIGlwYWRkclsxNl07CisJdTE2ICAgICAgICAgIHJzdmQ7CisJdTE2ICAgICAgICAgIHRvcG9sb2d5ZGlzY292ZXJ5ZmxhZ3M7Cit9OworCisvKioKKyAqIAkJTGluayBzdGF0ZSBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2xpbmtfcyB7CisJdTggICAgICAgICBsaW5rc3RhdGU7CS8qICBMaW5rIHN0YXRlIGJmYV9wcG9ydF9saW5rc3RhdGUgKi8KKwl1OCAgICAgICAgIGxpbmtzdGF0ZV9yc247CS8qICBiZmFfcHBvcnRfbGlua3N0YXRlX3Jzbl90ICovCisJdTggICAgICAgICB0b3BvbG9neTsJLyogIFAyUC9MT09QIGJmYV9wcG9ydF90b3BvbG9neSAqLworCXU4ICAgICAgICAgc3BlZWQ7CQkvKiAgTGluayBzcGVlZCAoMS8yLzQvOCBHKSAqLworCXUzMiAgICAgICAgbGlua3N0YXRlX29wdDsJLyogIExpbmtzdGF0ZSBvcHRpb25hbCBkYXRhIChkZWJ1ZykgKi8KKwl1OCAgICAgICAgIHRydW5rZWQ7CS8qICBUcnVua2VkIG9yIG5vdCAoMSBvciAwKSAqLworCXU4ICAgICAgICAgcmVzdmRbM107CisJc3RydWN0IGJmYV9xb3NfYXR0cl9zICBxb3NfYXR0cjsgICAvKiBRb1MgQXR0cmlidXRlcyAqLworCXN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyBxb3NfdmNfYXR0cjsgIC8qICBWQyBpbmZvIGZyb20gRUxQICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggICAgICAgICB0bWFzdGVyOy8qICBUcnVuayBNYXN0ZXIgb3IKKwkJCQkJCSAqICAgIG5vdCAoMSBvciAwKSAqLworCQkJdTggICAgICAgICB0bGlua3M7CS8qICBUcnVuayBsaW5rcyBiaXRtYXAKKwkJCQkJCSAqICAgIChsaW5rdXApICovCisJCQl1OCAgICAgICAgIHJlc3YxOwkvKiAgUmVzZXJ2ZWQgKi8KKwkJfSB0cnVua19pbmZvOworCisJCXN0cnVjdCB7CisJCQl1OCAgICAgICAgIG15YWxwYTsJICAgLyogIGFscGEgY2xhaW1lZCAqLworCQkJdTggICAgICAgICBsb2dpbl9yZXE7IC8qICBMb2dpbiByZXF1aXJlZCBvcgorCQkJCQkJICAgICogICAgbm90ICgxIG9yIDApICovCisJCQl1OCAgICAgICAgIGFscGFibV92YWw7LyogIGFscGEgYml0bWFwIHZhbGlkCisJCQkJCQkgICAgKiAgICBvciBub3QgKDEgb3IgMCkgKi8KKwkJCXN0cnVjdCBmY19hbHBhYm1fcyAgICAgYWxwYWJtOwkgICAvKiAgYWxwYSBiaXRtYXAgKi8KKwkJfSBsb29wX2luZm87CisJfSB0bDsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1BQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcW9zLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19xb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRiYWNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcW9zLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUU9TX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1FPU19IX18KKworLyoqCisgKiBRb1Mgc3RhdGVzCisgKi8KK2VudW0gYmZhX3Fvc19zdGF0ZSB7CisJQkZBX1FPU19PTkxJTkUgPSAxLAkJLyogIFFvUyBpcyBvbmxpbmUgKi8KKwlCRkFfUU9TX09GRkxJTkUgPSAyLAkJLyogIFFvUyBpcyBvZmZsaW5lICovCit9OworCisKKy8qKgorICogUW9TICBQcmlvcml0eSBsZXZlbHMuCisgKi8KK2VudW0gYmZhX3Fvc19wcmlvcml0eSB7CisJQkZBX1FPU19VTktOT1dOID0gMCwKKwlCRkFfUU9TX0hJR0ggID0gMSwJLyogIFFvUyBQcmlvcml0eSBMZXZlbCBIaWdoICovCisJQkZBX1FPU19NRUQgID0gIDIsCS8qICBRb1MgUHJpb3JpdHkgTGV2ZWwgTWVkaXVtICovCisJQkZBX1FPU19MT1cgID0gIDMsCS8qICBRb1MgUHJpb3JpdHkgTGV2ZWwgTG93ICovCit9OworCisKKy8qKgorICogUW9TICBiYW5kd2lkdGggYWxsb2NhdGlvbiBmb3IgZWFjaCBwcmlvcml0eSBsZXZlbAorICovCitlbnVtIGJmYV9xb3NfYndfYWxsb2MgeworCUJGQV9RT1NfQldfSElHSCAgPSA2MCwJLyogIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZvciBIaWdoICovCisJQkZBX1FPU19CV19NRUQgID0gIDMwLAkvKiAgYmFuZHdpZHRoIGFsbG9jYXRpb24gZm9yIE1lZGl1bSAqLworCUJGQV9RT1NfQldfTE9XICA9ICAxMCwJLyogIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZvciBMb3cgKi8KK307CisKKy8qKgorICogUW9TIGF0dHJpYnV0ZSByZXR1cm5lZCBpbiBRb1MgUXVlcnkKKyAqLworc3RydWN0IGJmYV9xb3NfYXR0cl9zIHsKKwllbnVtIGJmYV9xb3Nfc3RhdGUgc3RhdGU7CQkvKiAgUW9TIGN1cnJlbnQgc3RhdGUgKi8KKwl1MzIgIHRvdGFsX2JiX2NyOyAgCSAJLyogIFRvdGFsIEJCIENyZWRpdHMgKi8KK307CisKKy8qKgorICogVGhlc2UgZmllbGRzIHNob3VsZCBiZSBkaXNwbGF5ZWQgb25seSBmcm9tIHRoZSBDTEkuCisgKiBUaGVyZSB3aWxsIGJlIGEgc2VwYXJhdGUgQkZBTCBBUEkgKGdldF9xb3NfdmNfYXR0ciA/KQorICogdG8gcmV0cmlldmUgdGhpcy4KKyAqCisgKi8KKyNkZWZpbmUgIEJGQV9RT1NfTUFYX1ZDICAxNgorCitzdHJ1Y3QgYmZhX3Fvc192Y19pbmZvX3MgeworCXU4IHZjX2NyZWRpdDsKKwl1OCBib3Jyb3dfY3JlZGl0OworCXU4IHByaW9yaXR5OworCXU4IHJlc3ZkOworfTsKKworc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zIHsKKwl1MTYgIHRvdGFsX3ZjX2NvdW50OyAgICAgICAgICAgICAgICAgICAgLyogIFRvdGFsIFZDIENvdW50ICovCisJdTE2ICBzaGFyZWRfY3JlZGl0OworCXUzMiAgZWxwX29wbW9kZV9mbGFnczsKKwlzdHJ1Y3QgYmZhX3Fvc192Y19pbmZvX3MgdmNfaW5mb1tCRkFfUU9TX01BWF9WQ107ICAvKiAgIGFzIG1hbnkgYXMKKwkJCQkJCQkgICAgKiB0b3RhbF92Y19jb3VudCAqLworfTsKKworLyoqCisgKiBRb1Mgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3Fvc19zdGF0c19zIHsKKwl1MzIJZmxvZ2lfc2VudDsgCQkvKiAgUW9TIEZsb2dpIHNlbnQgKi8KKwl1MzIJZmxvZ2lfYWNjX3JlY3ZkOwkvKiAgUW9TIEZsb2dpIEFjYyByZWNlaXZlZCAqLworCXUzMglmbG9naV9yanRfcmVjdmQ7IC8qICBRb1MgRmxvZ2kgcmVqZWN0cyByZWNlaXZlZCAqLworCXUzMglmbG9naV9yZXRyaWVzOwkJLyogIFFvUyBGbG9naSByZXRyaWVzICovCisKKwl1MzIJZWxwX3JlY3ZkOyAJICAgCS8qICBRb1MgRUxQIHJlY2VpdmVkICovCisJdTMyCWVscF9hY2NlcHRlZDsgICAgICAgLyogIFFvUyBFTFAgQWNjZXB0ZWQgKi8KKwl1MzIJZWxwX3JlamVjdGVkOyAgICAgICAvKiAgUW9TIEVMUCByZWplY3RlZCAqLworCXUzMgllbHBfZHJvcHBlZDsgICAgICAgIC8qICBRb1MgRUxQIGRyb3BwZWQgICovCisKKwl1MzIJcW9zX3JzY25fcmVjdmQ7ICAgICAvKiAgUW9TIFJTQ04gcmVjZWl2ZWQgKi8KKwl1MzIJcnN2ZDsgCQkvKiBwYWRkaW5nIGZvciA2NCBiaXQgYWxpZ25tZW50ICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19RT1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFmNTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcnBvcnQuaApAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUlBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19xb3MuaD4KKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgc3RhdGVzCisgKi8KK2VudW0gYmZhX3Jwb3J0X3N0YXRlIHsKKwlCRkFfUlBPUlRfVU5JTklUIAk9IDAsCS8qICBQT1JUIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfUlBPUlRfT0ZGTElORSAJPSAxLAkvKiAgcnBvcnQgaXMgb2ZmbGluZSAqLworCUJGQV9SUE9SVF9QTE9HSSAJPSAyLAkvKiAgUExPR0kgdG8gcnBvcnQgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfUlBPUlRfT05MSU5FIAk9IDMsCS8qICBsb2dpbiB0byBycG9ydCBpcyBjb21wbGV0ZSAqLworCUJGQV9SUE9SVF9QTE9HSV9SRVRSWSAJPSA0LAkvKiAgcmV0cnlpbmcgbG9naW4gdG8gcnBvcnQgKi8KKwlCRkFfUlBPUlRfTlNRVUVSWSAJPSA1LAkvKiAgbmFtZXNlcnZlciBxdWVyeSAqLworCUJGQV9SUE9SVF9BRElTQyAJPSA2LAkvKiAgQURJU0MgYXV0aGVudGljYXRpb24gKi8KKwlCRkFfUlBPUlRfTE9HTyAJCT0gNywJLyogIGxvZ2dpbmcgb3V0IHdpdGggcnBvcnQgKi8KKwlCRkFfUlBPUlRfTE9HT1JDViAJPSA4LAkvKiAgaGFuZGxpbmcgTE9HTyBmcm9tIHJwb3J0ICovCisJQkZBX1JQT1JUX05TRElTQyAJPSA5LAkvKiAgcmUtZGlzY292ZXIgcnBvcnQgKi8KK307CisKKy8qKgorICogIFJwb3J0IFNjc2kgRnVuY3Rpb24gOiBJbml0aWF0b3IvVGFyZ2V0LgorICovCitlbnVtIGJmYV9ycG9ydF9mdW5jdGlvbiB7CisJQkZBX1JQT1JUX0lOSVRJQVRPUiAJPSAweDAxLAkvKiAgU0NTSSBJbml0aWF0b3IJKi8KKwlCRkFfUlBPUlRfVEFSR0VUIAk9IDB4MDIsCS8qICBTQ1NJIFRhcmdldAkqLworfTsKKworLyoqCisgKiBwb3J0L25vZGUgc3ltYm9saWMgbmFtZXMgZm9yIHJwb3J0CisgKi8KKyNkZWZpbmUgQkZBX1JQT1JUX1NZTU5BTUVfTUFYTEVOCTI1NQorc3RydWN0IGJmYV9ycG9ydF9zeW1uYW1lX3MgeworCWNoYXIgICAgICAgICAgICBzeW1uYW1lW0JGQV9SUE9SVF9TWU1OQU1FX01BWExFTl07Cit9OworCitzdHJ1Y3QgYmZhX3Jwb3J0X2hhbF9zdGF0c19zIHsKKwl1MzIgICAgICAgIHNtX3VuX2NyOwkgICAgLyogIHVuaW5pdDogY3JlYXRlIGV2ZW50cyAgICAgICovCisJdTMyICAgICAgICBzbV91bl91bmV4cDsJICAgIC8qICB1bmluaXQ6IGV4Y2VwdGlvbiBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fY3Jfb247CSAgICAvKiAgY3JlYXRlZDogb25saW5lIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX2NyX2RlbDsJICAgIC8qICBjcmVhdGVkOiBkZWxldGUgZXZlbnRzICAgICAqLworCXUzMiAgICAgICAgc21fY3JfaHdmOwkgICAgLyogIGNyZWF0ZWQ6IElPQyBkb3duICAgICAgICAgICovCisJdTMyICAgICAgICBzbV9jcl91bmV4cDsJICAgIC8qICBjcmVhdGVkOiBleGNlcHRpb24gZXZlbnRzICAqLworCXUzMiAgICAgICAgc21fZndjX3JzcDsJICAgIC8qICBmdyBjcmVhdGU6IGYvdyByZXNwb25zZXMgICAqLworCXUzMiAgICAgICAgc21fZndjX2RlbDsJICAgIC8qICBmdyBjcmVhdGU6IGRlbGV0ZSBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fZndjX29mZjsJICAgIC8qICBmdyBjcmVhdGU6IG9mZmxpbmUgZXZlbnRzICAqLworCXUzMiAgICAgICAgc21fZndjX2h3ZjsJICAgIC8qICBmdyBjcmVhdGU6IElPQyBkb3duICAgICAgICAqLworCXUzMiAgICAgICAgc21fZndjX3VuZXhwOwkgICAgLyogIGZ3IGNyZWF0ZTogZXhjZXB0aW9uIGV2ZW50cyovCisJdTMyICAgICAgICBzbV9vbl9vZmY7CSAgICAvKiAgb25saW5lOiBvZmZsaW5lIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX29uX2RlbDsJICAgIC8qICBvbmxpbmU6IGRlbGV0ZSBldmVudHMgICAgICAqLworCXUzMiAgICAgICAgc21fb25faHdmOwkgICAgLyogIG9ubGluZTogSU9DIGRvd24gZXZlbnRzICAgICovCisJdTMyICAgICAgICBzbV9vbl91bmV4cDsJICAgIC8qICBvbmxpbmU6IGV4Y2VwdGlvbiBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fZndkX3JzcDsJICAgIC8qICBmdyBkZWxldGU6IGZ3IHJlc3BvbnNlcyAgICAqLworCXUzMiAgICAgICAgc21fZndkX2RlbDsJICAgIC8qICBmdyBkZWxldGU6IGRlbGV0ZSBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fZndkX2h3ZjsJICAgIC8qICBmdyBkZWxldGU6IElPQyBkb3duIGV2ZW50cyAqLworCXUzMiAgICAgICAgc21fZndkX3VuZXhwOwkgICAgLyogIGZ3IGRlbGV0ZTogZXhjZXB0aW9uIGV2ZW50cyovCisJdTMyICAgICAgICBzbV9vZmZfZGVsOwkgICAgLyogIG9mZmxpbmU6IGRlbGV0ZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9vZmZfb247CSAgICAvKiAgb2ZmbGluZTogb25saW5lIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX29mZl9od2Y7CSAgICAvKiAgb2ZmbGluZTogSU9DIGRvd24gZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX29mZl91bmV4cDsJICAgIC8qICBvZmZsaW5lOiBleGNlcHRpb24gZXZlbnRzICAqLworCXUzMiAgICAgICAgc21fZGVsX2Z3cnNwOwkgICAgLyogIGRlbGV0ZTogZncgcmVzcG9uc2VzICAgICAgICovCisJdTMyICAgICAgICBzbV9kZWxfaHdmOwkgICAgLyogIGRlbGV0ZTogSU9DIGRvd24gZXZlbnRzICAgICovCisJdTMyICAgICAgICBzbV9kZWxfdW5leHA7CSAgICAvKiAgZGVsZXRlOiBleGNlcHRpb24gZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2RlbHBfZndyc3A7CSAgICAvKiAgZGVsZXRlIHBlbmQ6IGZ3IHJlc3BvbnNlcyAgKi8KKwl1MzIgICAgICAgIHNtX2RlbHBfaHdmOwkgICAgLyogIGRlbGV0ZSBwZW5kOiBJT0MgZG93bnMgICAgICovCisJdTMyICAgICAgICBzbV9kZWxwX3VuZXhwOwkgICAgLyogIGRlbGV0ZSBwZW5kOiBleGNlcHRpb25zICAgICovCisJdTMyICAgICAgICBzbV9vZmZwX2Z3cnNwOwkgICAgLyogIG9mZi1wZW5kaW5nOiBmdyByZXNwb25zZXMgICovCisJdTMyICAgICAgICBzbV9vZmZwX2RlbDsJICAgIC8qICBvZmYtcGVuZGluZzogZGVsZXRlcyAgICAgICAqLworCXUzMiAgICAgICAgc21fb2ZmcF9od2Y7CSAgICAvKiAgb2ZmLXBlbmRpbmc6IElPQyBkb3ducyAgICAgKi8KKwl1MzIgICAgICAgIHNtX29mZnBfdW5leHA7CSAgICAvKiAgb2ZmLXBlbmRpbmc6IGV4Y2VwdGlvbnMgICAgKi8KKwl1MzIgICAgICAgIHNtX2lvY2Rfb2ZmOwkgICAgLyogIElPQyBkb3duOiBvZmZsaW5lIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9pb2NkX2RlbDsJICAgIC8qICBJT0MgZG93bjogZGVsZXRlIGV2ZW50cyAgICAqLworCXUzMiAgICAgICAgc21faW9jZF9vbjsJICAgIC8qICBJT0MgZG93bjogb25saW5lIGV2ZW50cyAgICAqLworCXUzMiAgICAgICAgc21faW9jZF91bmV4cDsJICAgIC8qICBJT0MgZG93bjogZXhjZXB0aW9ucyAgICAgICAqLworCXUzMiAgICAgICAgcnN2ZDsKK307CisKKy8qKgorICogRkNTIHJlbW90ZSBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zIHsKKwl1MzIgICAgICAgIG9mZmxpbmVzOyAgICAgICAgICAgLyogIHJlbW90ZSBwb3J0IG9mZmxpbmUgY291bnQgICovCisJdTMyICAgICAgICBvbmxpbmVzOyAgICAgICAgICAgIC8qICByZW1vdGUgcG9ydCBvbmxpbmUgY291bnQgICAqLworCXUzMiAgICAgICAgcnNjbnM7ICAgICAgICAgICAgICAvKiAgUlNDTiBhZmZlY3RpbmcgcnBvcnQgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpczsJCSAgICAvKiAgcGxvZ2lzIHNlbnQgICAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpX2FjY3M7CSAgICAvKiAgcGxvZ2kgYWNjZXB0cyAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpX3RpbWVvdXRzOwkgICAgLyogIHBsb2dpIHRpbWVvdXRzICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV9yZWplY3RzOwkgICAgLyogIHJjdmQgcGxvZ2kgcmVqZWN0cyAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV9mYWlsZWQ7CSAgICAvKiAgbG9jYWwgZmFpbHVyZSAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpX3JjdmQ7CSAgICAvKiAgcGxvZ2lzIHJjdmQgICAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBybGlfcmN2ZDsgICAgICAgICAgLyogIGluYm91bmQgUFJMSXMgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBhZGlzY19yY3ZkOyAgICAgICAgIC8qICBBRElTQ3MgcmVjZWl2ZWQgICAgICAgICAgICAqLworCXUzMiAgICAgICAgYWRpc2NfcmVqZWN0czsgICAgICAvKiAgcmVjdmQgIEFESVNDIHJlamVjdHMgICAgICAgKi8KKwl1MzIgICAgICAgIGFkaXNjX3NlbnQ7ICAgICAgICAgLyogIEFESVNDIHJlcXVlc3RzIHNlbnQgICAgICAgICovCisJdTMyICAgICAgICBhZGlzY19hY2NzOyAgICAgICAgIC8qICBBRElTQyBhY2NlcHRlZCBieSBycG9ydCAgICAqLworCXUzMiAgICAgICAgYWRpc2NfZmFpbGVkOyAgICAgICAvKiAgQURJU0MgZmFpbGVkIChubyByZXNwb25zZSkgKi8KKwl1MzIgICAgICAgIGFkaXNjX3JlamVjdGVkOyAgICAgLyogIEFESVNDIHJlamVjdGVkIGJ5IHVzICAgICovCisJdTMyICAgICAgICBsb2dvczsgICAgICAgICAgICAgIC8qICBsb2dvcyBzZW50ICAgICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgbG9nb19hY2NzOyAgICAgICAgICAvKiAgTE9HTyBhY2NlcHRzIGZyb20gcnBvcnQgICAgKi8KKwl1MzIgICAgICAgIGxvZ29fZmFpbGVkOyAgICAgICAgLyogIExPR08gZmFpbHVyZXMgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBsb2dvX3JlamVjdGVkOyAgICAgIC8qICBMT0dPIHJlamVjdHMgZnJvbSBycG9ydCAgICAqLworCXUzMiAgICAgICAgbG9nb19yY3ZkOyAgICAgICAgICAvKiAgTE9HTyBmcm9tIHJlbW90ZSBwb3J0ICAgICAgKi8KKworCXUzMiAgICAgICAgcnBzY19yY3ZkOyAgICAgICAgIC8qICBSUFNDIHJlY2VpdmVkICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHJwc2NfcmVqZWN0czsgICAgICAvKiAgcmVjdmQgIFJQU0MgcmVqZWN0cyAgICAgICAqLworCXUzMiAgICAgICAgcnBzY19zZW50OyAgICAgICAgIC8qICBSUFNDIHJlcXVlc3RzIHNlbnQgICAgICAgICovCisJdTMyICAgICAgICBycHNjX2FjY3M7ICAgICAgICAgLyogIFJQU0MgYWNjZXB0ZWQgYnkgcnBvcnQgICAgKi8KKwl1MzIgICAgICAgIHJwc2NfZmFpbGVkOyAgICAgICAvKiAgUlBTQyBmYWlsZWQgKG5vIHJlc3BvbnNlKSAqLworCXUzMiAgICAgICAgcnBzY19yZWplY3RlZDsgICAgIC8qICBSUFNDIHJlamVjdGVkIGJ5IHVzICAgICovCisKKwl1MzIgICAgICAgIHJzdmQ7CisJc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcwloYWxfc3RhdHM7ICAvKiAgQkZBIHJwb3J0IHN0YXRzICAgICovCit9OworCisvKioKKyAqICBScG9ydCdzIFFvUyBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyB7CisJZW51bSBiZmFfcW9zX3ByaW9yaXR5IHFvc19wcmlvcml0eTsgIC8qICBycG9ydCdzIFFvUyBwcmlvcml0eSAgICovCisJdTMyCSAgICAgICBxb3NfZmxvd19pZDsJICAvKiAgUW9TIGZsb3cgSWQJICovCit9OworCisvKioKKyAqIEZDUyByZW1vdGUgcG9ydCBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9ycG9ydF9hdHRyX3MgeworCXd3bl90ICAgICAgICAgICAJbnd3bjsJLyogIG5vZGUgd3duICovCisJd3duX3QgICAgICAgICAgIAlwd3duOwkvKiAgcG9ydCB3d24gKi8KKwllbnVtIGZjX2NvcyBjb3Nfc3VwcG9ydGVkOwkvKiAgc3VwcG9ydGVkIGNsYXNzIG9mIHNlcnZpY2VzICovCisJdTMyICAgICAgICAJcGlkOwkvKiAgcG9ydCBJRCAqLworCXUzMiAgICAgICAgCWRmX3N6OwkvKiAgTWF4IHBheWxvYWQgc2l6ZSAqLworCWVudW0gYmZhX3Jwb3J0X3N0YXRlIAlzdGF0ZTsJLyogIFJwb3J0IFN0YXRlIG1hY2hpbmUgc3RhdGUgKi8KKwllbnVtIGZjX2NvcyAgICAgICAgCWZjX2NvczsJLyogIEZDIGNsYXNzZXMgb2Ygc2VydmljZXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCWNpc2M7CS8qICBDSVNDIGNhcGFibGUgZGV2aWNlICovCisJc3RydWN0IGJmYV9ycG9ydF9zeW1uYW1lX3Mgc3ltbmFtZTsgLyogIFN5bWJvbGljIE5hbWUgKi8KKwllbnVtIGJmYV9ycG9ydF9mdW5jdGlvbglzY3NpX2Z1bmN0aW9uOyAvKiAgSW5pdGlhdG9yL1RhcmdldCAqLworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBxb3NfYXR0cjsgLyogIHFvcyBhdHRyaWJ1dGVzICAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIGN1cnJfc3BlZWQ7ICAgLyogIG9wZXJhdGluZyBzcGVlZCBnb3QgZnJvbQorCQkJCQkgICAgKiBSUFNDIEVMUy4gVU5LTk9XTiwgaWYgUlBTQworCQkJCQkgICAgKiBpcyBub3Qgc3VwcG9ydGVkICovCisJYmZhX2Jvb2xlYW5fdCAJdHJsX2VuZm9yY2VkOwkvKiAgVFJMIGVuZm9yY2VkID8gVFJVRS9GQUxTRSAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkCWFzc2lnbmVkX3NwZWVkOwkvKiBTcGVlZCBhc3NpZ25lZCBieSB0aGUgdXNlci4KKwkJCQkJCSAqIHdpbGwgYmUgdXNlZCBpZiBSUFNDIGlzIG5vdAorCQkJCQkJICogc3VwcG9ydGVkIGJ5IHRoZSBycG9ydCAqLworfTsKKworI2RlZmluZSBiZmFfcnBvcnRfYWVuX3Fvc19kYXRhX3Qgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zCisKKy8qKgorICogQkZBIHJlbW90ZSBwb3J0IGV2ZW50cworICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfUlBPUlRfQUVOX09OTElORTogICAgW2luXTogbHB3d24JW291dF06IHZmX2lkLCBscHd3biwgcnB3d24KKyAqIEJGQV9SUE9SVF9BRU5fT0ZGTElORTogICBbaW5dOiBscHd3biBbb3V0XTogdmZfaWQsIGxwd3duLCBycHd3bgorICogQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNUOltpbl06IGxwd3duIFtvdXRdOiB2Zl9pZCwgbHB3d24sIHJwd3duCisgKiBCRkFfUlBPUlRfQUVOX1FPU19QUklPOiAgW2luXTogbHB3d24gW291dF06IHZmX2lkLCBscHd3biwgcnB3d24sIHByaW8KKyAqIEJGQV9SUE9SVF9BRU5fUU9TX0ZMT1dJRDpbaW5dOiBscHd3biBbb3V0XTogdmZfaWQsIGxwd3duLCBycHd3biwgZmxvd19pZAorICovCitlbnVtIGJmYV9ycG9ydF9hZW5fZXZlbnQgeworCUJGQV9SUE9SVF9BRU5fT05MSU5FICAgICAgPSAxLAkvKiAgUlBvcnQgb25saW5lIGV2ZW50ICovCisJQkZBX1JQT1JUX0FFTl9PRkZMSU5FICAgICA9IDIsCS8qICBSUG9ydCBvZmZsaW5lIGV2ZW50ICovCisJQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNUICA9IDMsCS8qICBSUG9ydCBkaXNjb25uZWN0IGV2ZW50ICovCisJQkZBX1JQT1JUX0FFTl9RT1NfUFJJTyAgICA9IDQsCS8qICBRT1MgcHJpb3JpdHkgY2hhbmdlIGV2ZW50ICovCisJQkZBX1JQT1JUX0FFTl9RT1NfRkxPV0lEICA9IDUsCS8qICBRT1MgZmxvdyBJZCBjaGFuZ2UgZXZlbnQgKi8KK307CisKK3N0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyB7CisJdTE2ICAgICAgICB2Zl9pZDsJLyogIHZmX2lkIG9mIHRoaXMgbG9naWNhbCBwb3J0ICovCisJdTE2ICAgICAgICByc3ZkWzNdOworCXd3bl90ICAgICAgICAgICBwcHd3bjsJLyogIFdXTiBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBscHd3bjsJLyogIFdXTiBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBycHd3bjsJLyogIFdXTiBvZiB0aGlzIHJlbW90ZSBwb3J0ICovCisJdW5pb24geworCQliZmFfcnBvcnRfYWVuX3Fvc19kYXRhX3QgcW9zOworCX0gcHJpdjsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfc3RhdHVzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19zdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGNlYWViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfc3RhdHVzLmgKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19TVEFUVVNfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfU1RBVFVTX0hfXworCisvKioKKyAqIEFQSSBzdGF0dXMgcmV0dXJuIHZhbHVlcworICoKKyAqIE5PVEU6IFRoZSBlcnJvciBtc2dzIGFyZSBhdXRvIGdlbmVyYXRlZCBmcm9tIHRoZSBjb21tZW50cy4gT25seSBzaW5nZSBsaW5lCisgKiBjb21tZW50cyBhcmUgc3VwcG9ydGVkCisgKi8KK2VudW0gYmZhX3N0YXR1cyB7CisJQkZBX1NUQVRVU19PSyAJCT0gMCwJLyogIFN1Y2Nlc3MgKi8KKwlCRkFfU1RBVFVTX0ZBSUxFRCAJPSAxLAkvKiAgT3BlcmF0aW9uIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfRUlOVkFMIAk9IDIsCS8qICBJbnZhbGlkIHBhcmFtcyBDaGVjayBpbnB1dAorCQkJCQkgKiBwYXJhbWV0ZXJzICovCisJQkZBX1NUQVRVU19FTk9NRU0gCT0gMywJLyogIE91dCBvZiByZXNvdXJjZXMgKi8KKwlCRkFfU1RBVFVTX0VOT1NZUyAJPSA0LAkvKiAgRnVuY3Rpb24gbm90IGltcGxlbWVudGVkICovCisJQkZBX1NUQVRVU19FVElNRVIgCT0gNSwJLyogIFRpbWVyIGV4cGlyZWQgLSBSZXRyeSwgaWYKKwkJCQkJICogcGVyc2lzdHMsIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfRVBST1RPQ09MIAk9IDYsCS8qICBQcm90b2NvbCBlcnJvciAqLworCUJGQV9TVEFUVVNfRU5PRkNQT1JUUyAJPSA3LAkvKiAgTm8gRkMgcG9ydHMgcmVzb3VyY2VzICovCisJQkZBX1NUQVRVU19OT0ZMQVNIIAk9IDgsCS8qICBGbGFzaCBub3QgcHJlc2VudCAqLworCUJGQV9TVEFUVVNfQkFERkxBU0ggCT0gOSwJLyogIEZsYXNoIGlzIGNvcnJ1cHRlZCBvciBiYWQgKi8KKwlCRkFfU1RBVFVTX1NGUF9VTlNVUFAgCT0gMTAsCS8qICBVbnN1cHBvcnRlZCBTRlAgLSBSZXBsYWNlIFNGUCAqLworCUJGQV9TVEFUVVNfVU5LTk9XTl9WRklEID0gMTEsCS8qICBWRl9JRCBub3QgZm91bmQgKi8KKwlCRkFfU1RBVFVTX0RBVEFDT1JSVVBURUQgPSAxMiwJLyogIERpYWcgcmV0dXJuZWQgZGF0YSBjb3JydXB0ZWQKKwkJCQkJICogY29udGFjdCBzdXBwb3J0ICovCisJQkZBX1NUQVRVU19ERVZCVVNZIAk9IDEzLAkvKiAgRGV2aWNlIGJ1c3kgLSBSZXRyeSBvcGVyYXRpb24gKi8KKwlCRkFfU1RBVFVTX0FCT1JURUQgCT0gMTQsCS8qICBPcGVyYXRpb24gYWJvcnRlZCAqLworCUJGQV9TVEFUVVNfTk9ERVYgCT0gMTUsCS8qICBEZXYgaXMgbm90IHByZXNlbnQgKi8KKwlCRkFfU1RBVFVTX0hETUFfRkFJTEVEIAk9IDE2LAkvKiAgSG9zdCBkbWEgZmFpbGVkIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfRkxBU0hfQkFEX0xFTiA9IDE3LAkvKiAgRmxhc2ggYmFkIGxlbmd0aCAqLworCUJGQV9TVEFUVVNfVU5LTk9XTl9MV1dOID0gMTgsCS8qICBMUE9SVCBQV1dOIG5vdCBmb3VuZCAqLworCUJGQV9TVEFUVVNfVU5LTk9XTl9SV1dOID0gMTksCS8qICBSUE9SVCBQV1dOIG5vdCBmb3VuZCAqLworCUJGQV9TVEFUVVNfRkNQVF9MU19SSlQgCT0gMjAsCS8qICBHb3QgTFNfUkpUIGZvciBGQyBQYXNzCisJCQkJCSAqIHRocm91Z2ggUmVxICovCisJQkZBX1NUQVRVU19WUE9SVF9FWElTVFMgPSAyMSwJLyogIFZQT1JUIGFscmVhZHkgZXhpc3RzICovCisJQkZBX1NUQVRVU19WUE9SVF9NQVggCT0gMjIsCS8qICBSZWFjaGVkIG1heCBWUE9SVCBzdXBwb3J0ZWQKKwkJCQkJICogbGltaXQgKi8KKwlCRkFfU1RBVFVTX1VOU1VQUF9TUEVFRCA9IDIzLAkvKiAgSW52YWxpZCBTcGVlZCBDaGVjayBzcGVlZAorCQkJCQkgKiBzZXR0aW5nICovCisJQkZBX1NUQVRVU19JTlZMRF9ERlNaIAk9IDI0LAkvKiAgSW52YWxpZCBNYXggZGF0YSBmaWVsZCBzaXplICovCisJQkZBX1NUQVRVU19DTkZHX0ZBSUxFRCAJPSAyNSwJLyogIFNldHRpbmcgY2FuIG5vdCBiZSBwZXJzaXN0ZWQgKi8KKwlCRkFfU1RBVFVTX0NNRF9OT1RTVVBQIAk9IDI2LAkvKiAgQ29tbWFuZC9BUEkgbm90IHN1cHBvcnRlZCAqLworCUJGQV9TVEFUVVNfTk9fQURBUFRFUiAJPSAyNywJLyogIE5vIEJyb2NhZGUgQWRhcHRlciBGb3VuZCAqLworCUJGQV9TVEFUVVNfTElOS0RPV04gCT0gMjgsCS8qICBMaW5rIGlzIGRvd24gLSBDaGVjayBvciByZXBsYWNlCisJCQkJCSAqIFNGUC9jYWJsZSAqLworCUJGQV9TVEFUVVNfRkFCUklDX1JKVCAJPSAyOSwJLyogIFJlamVjdCBmcm9tIGF0dGFjaGVkIGZhYnJpYyAqLworCUJGQV9TVEFUVVNfVU5LTk9XTl9WV1dOID0gMzAsCS8qICBWUE9SVCBQV1dOIG5vdCBmb3VuZCAqLworCUJGQV9TVEFUVVNfTlNMT0dJTl9GQUlMRUQgPSAzMSwJLyogIE5hbWVzZXJ2ZXIgbG9naW4gZmFpbGVkICovCisJQkZBX1NUQVRVU19OT19SUE9SVFMgCT0gMzIsCS8qICBObyByZW1vdGUgcG9ydHMgZm91bmQgKi8KKwlCRkFfU1RBVFVTX05TUVVFUllfRkFJTEVEID0gMzMsCS8qICBOYW1lc2VydmVyIHF1ZXJ5IGZhaWxlZCAqLworCUJGQV9TVEFUVVNfUE9SVF9PRkZMSU5FID0gMzQsCS8qICBQb3J0IGlzIG5vdCBvbmxpbmUgKi8KKwlCRkFfU1RBVFVTX1JQT1JUX09GRkxJTkUgPSAzNSwJLyogIFJQT1JUIGlzIG5vdCBvbmxpbmUgKi8KKwlCRkFfU1RBVFVTX1RHVE9QRU5fRkFJTEVEID0gMzYsCS8qICBSZW1vdGUgU0NTSSB0YXJnZXQgb3BlbiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX0JBRF9MVU5TIAk9IDM3LAkvKiAgTm8gdmFsaWQgTFVOcyBmb3VuZCAqLworCUJGQV9TVEFUVVNfSU9fRkFJTFVSRSAJPSAzOCwJLyogIFNDU0kgdGFyZ2V0IElPIGZhaWx1cmUgKi8KKwlCRkFfU1RBVFVTX05PX0ZBQlJJQyAJPSAzOSwJLyogIE5vIHN3aXRjaGVkIGZhYnJpYyBwcmVzZW50ICovCisJQkZBX1NUQVRVU19FQkFERiAJPSA0MCwJLyogIEJhZCBmaWxlIGRlc2NyaXB0b3IgKi8KKwlCRkFfU1RBVFVTX0VJTlRSIAk9IDQxLAkvKiAgQSBzaWduYWwgd2FzIGNhdWdodCBkdXJpbmcgaW9jdGwgKi8KKwlCRkFfU1RBVFVTX0VJTyAJCT0gNDIsCS8qICBJL08gZXJyb3IgKi8KKwlCRkFfU1RBVFVTX0VOT1RUWSAJPSA0MywJLyogIEluYXBwcm9wcmlhdGUgSS9PIGNvbnRyb2wKKwkJCQkJICogb3BlcmF0aW9uICovCisJQkZBX1NUQVRVU19FTlhJTyAJPSA0NCwJLyogIE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MgKi8KKwlCRkFfU1RBVFVTX0VGT1BFTiAJPSA0NSwJLyogIEZhaWxlZCB0byBvcGVuIGZpbGUgKi8KKwlCRkFfU1RBVFVTX1ZQT1JUX1dXTl9CUCA9IDQ2LAkvKiAgV1dOIGlzIHNhbWUgYXMgYmFzZSBwb3J0J3MgV1dOICovCisJQkZBX1NUQVRVU19QT1JUX05PVF9ESVNBQkxFRCA9IDQ3LCAvKiAgUG9ydCBub3QgZGlzYWJsZWQgZGlzYWJsZSBwb3J0CisJCQkJCSAgICAqIGZpcnN0ICovCisJQkZBX1NUQVRVU19CQURGUk1IRFIgCT0gNDgsCS8qICBCYWQgZnJhbWUgaGVhZGVyICovCisJQkZBX1NUQVRVU19CQURGUk1TWiAJPSA0OSwJLyogIEJhZCBmcmFtZSBzaXplIGNoZWNrIGFuZCByZXBsYWNlCisJCQkJCSAqIFNGUC9jYWJsZSAqLworCUJGQV9TVEFUVVNfTUlTU0lOR0ZSTSAJPSA1MCwJLyogIE1pc3NpbmcgZnJhbWUgY2hlY2sgYW5kIHJlcGxhY2UKKwkJCQkJICogU0ZQL2NhYmxlICovCisJQkZBX1NUQVRVU19MSU5LVElNRU9VVCAJPSA1MSwJLyogIExpbmsgdGltZW91dCBjaGVjayBhbmQgcmVwbGFjZQorCQkJCQkgKiBTRlAvY2FibGUgKi8KKwlCRkFfU1RBVFVTX05PX0ZDUElNX05FWFVTID0gNTIsCS8qICBObyBGQ1AgTmV4dXMgZXhpc3RzIHdpdGggdGhlCisJCQkJCSAqIHJwb3J0ICovCisJQkZBX1NUQVRVU19DSEVDS1NVTV9GQUlMID0gNTMsCS8qICBjaGVja3N1bSBmYWlsdXJlICovCisJQkZBX1NUQVRVU19HWk1FX0ZBSUxFRCAJPSA1NCwJLyogIEdldCB6b25lIG1lbWJlciBxdWVyeSBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX1NDU0lTVEFSVF9SRVFEID0gNTUsCS8qICBTQ1NJIGRpc2sgcmVxdWlyZSBTVEFSVCBjb21tYW5kICovCisJQkZBX1NUQVRVU19JT0NfRkFJTFVSRSAJPSA1NiwJLyogIElPQyBmYWlsdXJlIC0gUmV0cnksIGlmIHBlcnNpc3RzCisJCQkJCSAqIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfSU5WQUxJRF9XV04gCT0gNTcsCS8qICBJbnZhbGlkIFdXTiAqLworCUJGQV9TVEFUVVNfTUlTTUFUQ0ggCT0gNTgsCS8qICBWZXJzaW9uIG1pc21hdGNoICovCisJQkZBX1NUQVRVU19JT0NfRU5BQkxFRCAJPSA1OSwJLyogIElPQyBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0FEQVBURVJfRU5BQkxFRCA9IDYwLCAvKiAgQWRhcHRlciBpcyBub3QgZGlzYWJsZWQgZGlzYWJsZQorCQkJCQkgICogYWRhcHRlciBmaXJzdCAqLworCUJGQV9TVEFUVVNfSU9DX05PTl9PUCAJPSA2MSwJLyogIElPQyBpcyBub3Qgb3BlcmF0aW9uYWwuIEVuYWJsZSBJT0MKKwkJCQkJICogYW5kIGlmIGl0IHN0aWxsIGZhaWxzLAorCQkJCQkgKiBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0FERFJfTUFQX0ZBSUxVUkUgPSA2MiwgLyogIFBDSSBiYXNlIGFkZHJlc3Mgbm90IG1hcHBlZAorCQkJCQkgICAqIGluIE9TICovCisJQkZBX1NUQVRVU19TQU1FX05BTUUgCT0gNjMsCS8qICBOYW1lIGV4aXN0cyEgdXNlIGEgZGlmZmVyZW50CisJCQkJCSAqIG5hbWUgKi8KKwlCRkFfU1RBVFVTX1BFTkRJTkcgICAgICA9IDY0LCAgIC8qICBBUEkgY29tcGxldGVzIGFzeW5jaHJvbm91c2x5ICovCisJQkZBX1NUQVRVU184R19TUEQJPSA2NSwJLyogIFNwZWVkIHNldHRpbmcgbm90IHZhbGlkIGZvcgorCQkJCQkgKiA4RyBIQkEgKi8KKwlCRkFfU1RBVFVTXzRHX1NQRAk9IDY2LAkvKiAgU3BlZWQgc2V0dGluZyBub3QgdmFsaWQgZm9yCisJCQkJCSAqIDRHIEhCQSAqLworCUJGQV9TVEFUVVNfQURfSVNfRU5BQkxFID0gNjcsCS8qICBBZGFwdGVyIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfRUlOVkFMX1RPViAJPSA2OCwJLyogIEludmFsaWQgcGF0aCBmYWlsb3ZlciBUT1YgKi8KKwlCRkFfU1RBVFVTX0VJTlZBTF9RREVQVEggPSA2OSwJLyogIEludmFsaWQgcXVldWUgZGVwdGggdmFsdWUgKi8KKwlCRkFfU1RBVFVTX1ZFUlNJT05fRkFJTCA9IDcwLAkvKiAgQXBwbGljYXRpb24vRHJpdmVyIHZlcnNpb24KKwkJCQkJICogbWlzbWF0Y2ggKi8KKwlCRkFfU1RBVFVTX0RJQUdfQlVTWSAgICA9IDcxLAkvKiAgZGlhZyBidXN5ICovCisJQkZBX1NUQVRVU19CRUFDT05fT04JPSA3MiwJLyogIFBvcnQgQmVhY29uIGFscmVhZHkgb24gKi8KKwlCRkFfU1RBVFVTX0JFQUNPTl9PRkYJPSA3MywJLyogIFBvcnQgQmVhY29uIGFscmVhZHkgb2ZmICovCisJQkZBX1NUQVRVU19MQkVBQ09OX09OICAgPSA3NCwJLyogIExpbmsgRW5kLXRvLUVuZCBCZWFjb24gYWxyZWFkeQorCQkJCQkgKiBvbiAqLworCUJGQV9TVEFUVVNfTEJFQUNPTl9PRkYJPSA3NSwJLyogIExpbmsgRW5kLXRvLUVuZCBCZWFjb24gYWxyZWFkeQorCQkJCQkgKiBvZmYgKi8KKwlCRkFfU1RBVFVTX1BPUlRfTk9UX0lOSVRFRCA9IDc2LCAvKiAgUG9ydCBub3QgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfU1RBVFVTX1JQU0NfRU5BQkxFRCA9IDc3LCAvKiAgVGFyZ2V0IGhhcyBhIHZhbGlkIHNwZWVkICovCisJQkZBX1NUQVRVU19FTk9GU0FWRSA9IDc4LAkvKiAgTm8gc2F2ZWQgZmlybXdhcmUgdHJhY2UgKi8KKwlCRkFfU1RBVFVTX0JBRF9GSUxFID0gNzksCS8qICBOb3QgYSB2YWxpZCBCcm9jYWRlIEJvb3QgQ29kZQorCQkJCQkgKiBmaWxlICovCisJQkZBX1NUQVRVU19STElNX0VOID0gODAsCS8qICBUYXJnZXQgcmF0ZSBsaW1pdGluZyBpcyBhbHJlYWR5CisJCQkJCSAqIGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX1JMSU1fRElTID0gODEsICAvKiAgVGFyZ2V0IHJhdGUgbGltaXRpbmcgaXMgYWxyZWFkeQorCQkJCSAgICAqIGRpc2FibGVkICovCisJQkZBX1NUQVRVU19JT0NfRElTQUJMRUQgPSA4MiwgICAvKiAgSU9DIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0FEQVBURVJfRElTQUJMRUQgPSA4MywgICAvKiAgQWRhcHRlciBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19CSU9TX0RJU0FCTEVEID0gODQsICAgLyogIEJpb3MgaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfQVVUSF9FTkFCTEVEID0gODUsICAgLyogIEF1dGhlbnRpY2F0aW9uIGlzIGFscmVhZHkKKwkJCQkJICogZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfQVVUSF9ESVNBQkxFRCA9IDg2LCAgIC8qICBBdXRoZW50aWNhdGlvbiBpcyBhbHJlYWR5CisJCQkJCSAqIGRpc2FibGVkICovCisJQkZBX1NUQVRVU19FUlJPUl9UUkxfRU5BQkxFRCA9IDg3LCAgIC8qICBUYXJnZXQgcmF0ZSBsaW1pdGluZyBpcworCQkJCQkgICAgICAqIGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0VSUk9SX1FPU19FTkFCTEVEID0gODgsICAgLyogIFFvUyBpcyBlbmFibGVkICovCisJQkZBX1NUQVRVU19OT19TRlBfREVWID0gODksIC8qICBObyBTRlAgZGV2aWNlIGNoZWNrIG9yIHJlcGxhY2UgU0ZQICovCisJQkZBX1NUQVRVU19NRU1URVNUX0ZBSUxFRCA9IDkwLAkvKiAgTWVtb3J5IHRlc3QgZmFpbGVkIGNvbnRhY3QKKwkJCQkJICogc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfSU5WQUxJRF9ERVZJRCA9IDkxLAkvKiAgSW52YWxpZCBkZXZpY2UgaWQgcHJvdmlkZWQgKi8KKwlCRkFfU1RBVFVTX1FPU19FTkFCTEVEID0gOTIsIC8qICBRT1MgaXMgYWxyZWFkeSBlbmFibGVkICovCisJQkZBX1NUQVRVU19RT1NfRElTQUJMRUQgPSA5MywgLyogIFFPUyBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19JTkNPUlJFQ1RfRFJWX0NPTkZJRyA9IDk0LCAvKiAgQ2hlY2sgY29uZmlndXJhdGlvbgorCQkJCQkgICAgICAgKiBrZXkvdmFsdWUgcGFpciAqLworCUJGQV9TVEFUVVNfUkVHX0ZBSUwgPSA5NSwgLyogIENhbid0IHJlYWQgd2luZG93cyByZWdpc3RyeSAqLworCUJGQV9TVEFUVVNfSU1fSU5WX0NPREUgPSA5NiwgLyogIEludmFsaWQgSU9DVEwgY29kZSAqLworCUJGQV9TVEFUVVNfSU1fSU5WX1ZMQU4gPSA5NywgLyogIEludmFsaWQgVkxBTiBJRCAqLworCUJGQV9TVEFUVVNfSU1fSU5WX0FEQVBUX05BTUUgPSA5OCwgLyogIEludmFsaWQgYWRhcHRlciBuYW1lICovCisJQkZBX1NUQVRVU19JTV9MT1dfUkVTT1VSQ0VTID0gOTksIC8qICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluCisJCQkJCSAgICogZHJpdmVyICovCisJQkZBX1NUQVRVU19JTV9WTEFOSURfSVNfUFZJRCA9IDEwMCwgLyogIEdpdmVuIFZMQU4gaWQgc2FtZSBhcyBQVklEICovCisJQkZBX1NUQVRVU19JTV9WTEFOSURfRVhJU1RTID0gMTAxLCAvKiAgR2l2ZW4gVkxBTiBpZCBhbHJlYWR5IGV4aXN0cyAqLworCUJGQV9TVEFUVVNfSU1fRldfVVBEQVRFX0ZBSUwgPSAxMDIsIC8qICBVcGRhdGluZyBmaXJtd2FyZSB3aXRoIG5ldworCQkJCQkgICAgICogVkxBTiBJRCBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX1BPUlRMT0dfRU5BQkxFRCA9IDEwMywgLyogIFBvcnQgTG9nIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfUE9SVExPR19ESVNBQkxFRCA9IDEwNCwgLyogIFBvcnQgTG9nIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0ZJTEVfTk9UX0ZPVU5EID0gMTA1LCAvKiAgU3BlY2lmaWVkIGZpbGUgY291bGQgbm90IGJlCisJCQkJCSAgKiBmb3VuZCAqLworCUJGQV9TVEFUVVNfUU9TX0ZDX09OTFkgPSAxMDYsIC8qICBRT1MgY2FuIGJlIGVuYWJsZWQgZm9yIEZDIG1vZGUKKwkJCQkgICAgICAgKiBvbmx5ICovCisJQkZBX1NUQVRVU19STElNX0ZDX09OTFkgPSAxMDcsIC8qICBSQVRFTElNIGNhbiBiZSBlbmFibGVkIGZvciBGQyBtb2RlCisJCQkJCSogb25seSAqLworCUJGQV9TVEFUVVNfQ1RfU1BEID0gMTA4LCAvKiAgSW52YWxpZCBzcGVlZCBzZWxlY3Rpb24gZm9yIENhdGFwdWx0LiAqLworCUJGQV9TVEFUVVNfTEVEVEVTVF9PUCA9IDEwOSwgLyogIExFRCB0ZXN0IGlzIG9wZXJhdGluZyAqLworCUJGQV9TVEFUVVNfQ0VFX05PVF9ETiA9IDExMCwgLyogIGV0aCBwb3J0IGlzIG5vdCBhdCBkb3duIHN0YXRlLCBwbGVhc2UKKwkJCQkgICAgICAqIGJyaW5nIGRvd24gZmlyc3QgKi8KKwlCRkFfU1RBVFVTXzEwR19TUEQgPSAxMTEsIC8qICBTcGVlZCBzZXR0aW5nIG5vdCB2YWxpZCBmb3IgMTBHIEhCQSAqLworCUJGQV9TVEFUVVNfSU1fSU5WX1RFQU1fTkFNRSA9IDExMiwgLyogIEludmFsaWQgdGVhbSBuYW1lICovCisJQkZBX1NUQVRVU19JTV9EVVBfVEVBTV9OQU1FID0gMTEzLCAvKiAgR2l2ZW4gdGVhbSBuYW1lIGFscmVhZHkKKwkJCQkJICAgICogZXhpc3RzICovCisJQkZBX1NUQVRVU19JTV9BREFQVF9BTFJFQURZX0lOX1RFQU0gPSAxMTQsIC8qICBHaXZlbiBhZGFwdGVyIGlzIHBhcnQKKwkJCQkJCSAgICAqIG9mIGFub3RoZXIgdGVhbSAqLworCUJGQV9TVEFUVVNfSU1fQURBUFRfSEFTX1ZMQU5TID0gMTE1LCAvKiAgQWRhcHRlciBoYXMgVkxBTnMgY29uZmlndXJlZC4KKwkJCQkJICAgICAgKiBEZWxldGUgYWxsIFZMQU5zIGJlZm9yZQorCQkJCQkgICAgICAqIGNyZWF0aW5nIHRlYW0gKi8KKwlCRkFfU1RBVFVTX0lNX1BWSURfTUlTTUFUQ0ggPSAxMTYsIC8qICBNaXNtYXRjaGluZyBQVklEcyBjb25maWd1cmVkCisJCQkJCSAgICAqIGZvciBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fTElOS19TUEVFRF9NSVNNQVRDSCA9IDExNywgLyogIE1pc21hdGNoaW5nIGxpbmsgc3BlZWRzCisJCQkJCQkgICogY29uZmlndXJlZCBmb3IgYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX01UVV9NSVNNQVRDSCA9IDExOCwgLyogIE1pc21hdGNoaW5nIE1UVXMgY29uZmlndXJlZCBmb3IKKwkJCQkJICAgKiBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fUlNTX01JU01BVENIID0gMTE5LCAvKiAgTWlzbWF0Y2hpbmcgUlNTIHBhcmFtZXRlcnMKKwkJCQkJICAgKiBjb25maWd1cmVkIGZvciBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fSERTX01JU01BVENIID0gMTIwLCAvKiAgTWlzbWF0Y2hpbmcgSERTIHBhcmFtZXRlcnMKKwkJCQkJICAgKiBjb25maWd1cmVkIGZvciBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fT0ZGTE9BRF9NSVNNQVRDSCA9IDEyMSwgLyogIE1pc21hdGNoaW5nIG9mZmxvYWQKKwkJCQkJICAgICAgICogcGFyYW1ldGVycyBjb25maWd1cmVkIGZvcgorCQkJCQkgICAgICAgKiBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fUE9SVF9QQVJBTVMgPSAxMjIsIC8qICBFcnJvciBzZXR0aW5nIHBvcnQgcGFyYW1ldGVycyAqLworCUJGQV9TVEFUVVNfSU1fUE9SVF9OT1RfSU5fVEVBTSA9IDEyMywgLyogIFBvcnQgaXMgbm90IHBhcnQgb2YgdGVhbSAqLworCUJGQV9TVEFUVVNfSU1fQ0FOTk9UX1JFTV9QUkkgPSAxMjQsIC8qICBQcmltYXJ5IGFkYXB0ZXIgY2Fubm90IGJlCisJCQkJCSAgICAgKiByZW1vdmVkLiBDaGFuZ2UgcHJpbWFyeSBiZWZvcmUKKwkJCQkJICAgICAqIHJlbW92aW5nICovCisJQkZBX1NUQVRVU19JTV9NQVhfUE9SVFNfUkVBQ0hFRCA9IDEyNSwgLyogIEV4Y2VlZGluZyBtYXhpbXVtIHBvcnRzCisJCQkJCQkqIHBlciB0ZWFtICovCisJQkZBX1NUQVRVU19JTV9MQVNUX1BPUlRfREVMRVRFID0gMTI2LCAvKiAgTGFzdCBwb3J0IGluIHRlYW0gYmVpbmcKKwkJCQkJICAgICAgICogZGVsZXRlZCAqLworCUJGQV9TVEFUVVNfSU1fTk9fRFJJVkVSID0gMTI3LCAvKiAgSU0gZHJpdmVyIGlzIG5vdCBpbnN0YWxsZWQgKi8KKwlCRkFfU1RBVFVTX0lNX01BWF9WTEFOU19SRUFDSEVEID0gMTI4LCAvKiAgRXhjZWVkaW5nIG1heGltdW0gVkxBTnMKKwkJCQkJCSogcGVyIHBvcnQgKi8KKwlCRkFfU1RBVFVTX1RPTUNBVF9TUERfTk9UX0FMTE9XRUQgPSAxMjksIC8qIEJpb3Mgc3BlZWQgY29uZmlnIG5vdAorCQkJCQkJICAqIGFsbG93ZWQgZm9yIENOQSAqLworCUJGQV9TVEFUVVNfTk9fTUlOUE9SVF9EUklWRVIgPSAxMzAsIC8qICBNaW5pcG9ydCBkcml2ZXIgaXMgbm90CisJCQkJCSAgICAgKiBsb2FkZWQgKi8KKwlCRkFfU1RBVFVTX0NBUkRfVFlQRV9NSVNNQVRDSCA9IDEzMSwgLyogIENhcmQgdHlwZSBtaXNtYXRjaCAqLworCUJGQV9TVEFUVVNfQkFEX0FTSUNCTEsgPSAxMzIsIC8qICBCYWQgQVNJQyBibG9jayAqLworCUJGQV9TVEFUVVNfTk9fRFJJVkVSID0gMTMzLCAvKiAgU3RvcmFnZS9FdGhlcm5ldCBkcml2ZXIgbm90IGxvYWRlZCAqLworCUJGQV9TVEFUVVNfSU5WQUxJRF9NQUMgPSAxMzQsIC8qICBJbnZhbGlkIG1hYyBhZGRyZXNzICovCisJQkZBX1NUQVRVU19JTV9OT19WTEFOID0gMTM1LCAvKiAgTm8gVkxBTnMgY29uZmlndXJlZCBvbiB0aGUgYWRhcHRlciAqLworCUJGQV9TVEFUVVNfSU1fRVRIX0xCX0ZBSUxFRCA9IDEzNiwgLyogIEV0aGVybmV0IGxvb3BiYWNrIHRlc3QgZmFpbGVkICovCisJQkZBX1NUQVRVU19JTV9QVklEX1JFTU9WRSA9IDEzNywgLyogIENhbm5vdCByZW1vdmUgcG9ydCB2bGFuIChQVklEKSAqLworCUJGQV9TVEFUVVNfSU1fUFZJRF9FRElUID0gMTM4LCAvKiAgQ2Fubm90IGVkaXQgcG9ydCB2bGFuIChQVklEKSAqLworCUJGQV9TVEFUVVNfQ05BX05PX0JPT1QgPSAxMzksIC8qICBCb290IHVwbG9hZCBub3QgYWxsb3dlZCBmb3IgQ05BICovCisJQkZBX1NUQVRVU19JTV9QVklEX05PTl9aRVJPID0gMTQwLCAvKiAgUG9ydCBWTEFOIElEIChQVklEKSBpcyBTZXQgdG8KKwkJCQkJICAgICogTm9uLVplcm8gVmFsdWUgKi8KKwlCRkFfU1RBVFVTX0lNX0lORVRDRkdfTE9DS19GQUlMRUQgPSAxNDEsIC8qICBBY3F1aXJpbmcgTmV0d29yaworCQkJCQkJICAqIFN1YnN5dGVtIExvY2sgRmFpbGVkLlBsZWFzZQorCQkJCQkJICAqIHRyeSBhZnRlciBzb21lIHRpbWUgKi8KKwlCRkFfU1RBVFVTX0lNX0dFVF9JTkVUQ0ZHX0ZBSUxFRCA9IDE0MiwgLyogIEFjcXVpcmluZyBOZXR3b3JrIFN1YnN5dGVtCisJCQkJCQkgKiBoYW5kbGUgRmFpbGVkLiBQbGVhc2UgdHJ5CisJCQkJCQkgKiBhZnRlciBzb21lIHRpbWUgKi8KKwlCRkFfU1RBVFVTX0lNX05PVF9CT1VORCA9IDE0MywgLyogIEJyb2NhZGUgMTBHIEV0aGVybmV0IFNlcnZpY2UgaXMgbm90CisJCQkJCSogRW5hYmxlZCBvbiB0aGlzIHBvcnQgKi8KKwlCRkFfU1RBVFVTX0lOU1VGRklDSUVOVF9QRVJNUyA9IDE0NCwgLyogIFVzZXIgZG9lc24ndCBoYXZlIHN1ZmZpY2llbnQKKwkJCQkJICAgICAgKiBwZXJtaXNzaW9ucyB0byBleGVjdXRlIHRoZSBCQ1UKKwkJCQkJICAgICAgKiBhcHBsaWNhdGlvbiAqLworCUJGQV9TVEFUVVNfSU1fSU5WX1ZMQU5fTkFNRSA9IDE0NSwgLyogIEludmFsaWQvUmVzZXJ2ZWQgVmxhbiBuYW1lCisJCQkJCSAgICAqIHN0cmluZy4gVGhlIG5hbWUgaXMgbm90IGFsbG93ZWQKKwkJCQkJICAgICogZm9yIHRoZSBub3JtYWwgVmxhbnMgKi8KKwlCRkFfU1RBVFVTX0NNRF9OT1RTVVBQX0NOQSA9IDE0NiwgLyogIENvbW1hbmQgbm90IHN1cHBvcnRlZCBmb3IgQ05BICovCisJQkZBX1NUQVRVU19JTV9QQVNTVEhSVV9FRElUID0gMTQ3LCAvKiAgQ2FuIG5vdCBlZGl0IHBhc3N0aHJ1IHZsYW4gaWQgKi8KKwlCRkFfU1RBVFVTX0lNX0JJTkRfRkFJTEVEID0gMTQ4LCAvKiEgPCBJTSBEcml2ZXIgYmluZCBvcGVyYXRpb24KKwkJCQkJICAqIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfSU1fVU5CSU5EX0ZBSUxFRCA9IDE0OSwgLyogISA8IElNIERyaXZlciB1bmJpbmQgb3BlcmF0aW9uCisJCQkJCSAgICAqIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfTUFYX1ZBTAkJLyogIFVua25vd24gZXJyb3IgY29kZSAqLworfTsKKyNkZWZpbmUgYmZhX3N0YXR1c190IGVudW0gYmZhX3N0YXR1cworCitlbnVtIGJmYV9lcHJvdG9fc3RhdHVzIHsKKwlCRkFfRVBST1RPX0JBRF9BQ0NFUFQgPSAwLAorCUJGQV9FUFJPVE9fVU5LTk9XTl9SU1AgPSAxCit9OworI2RlZmluZSBiZmFfZXByb3RvX3N0YXR1c190IGVudW0gYmZhX2Vwcm90b19zdGF0dXMKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfU1RBVFVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdGluLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDVhMmRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdGluLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1RJTl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19USU5fSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisKKy8qKgorICogRkNTIHRpbiBzdGF0ZXMKKyAqLworZW51bSBiZmFfdGluX3N0YXRlX2UgeworCUJGQV9USU5fU01fT0ZGTElORSA9IDAsCQkvKiAgdGluIGlzIG9mZmxpbmUgKi8KKwlCRkFfVElOX1NNX1dPU19MT0dJTiA9IDEsCS8qICBXYWl0aW5nIFBSTEkgQUNDL1JKVCBmcm9tIFVMUCAqLworCUJGQV9USU5fU01fV0ZXX09OTElORSA9IDIsCS8qICBXYWl0aW5nIEFDSyB0byBQUkxJIEFDQyBmcm9tIEZXICovCisJQkZBX1RJTl9TTV9PTkxJTkUgPSAzLAkJLyogIHRpbiBsb2dpbiBpcyBjb21wbGV0ZSAqLworCUJGQV9USU5fU01fV0lPX1JFTE9HSU4gPSA0LAkvKiAgdGluIHJlbG9naW4gaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfVElOX1NNX1dJT19MT0dPVVQgPSA1LAkvKiAgUHJvY2Vzc2luZyBvZiBQUkxPIHJlcSBmcm9tCisJCQkJCSAqICAgSW5pdGlhdG9yIGlzIGluIHByb2dyZXNzCisJCQkJCSAqLworCUJGQV9USU5fU01fV09TX0xPR09VVCA9IDYsCS8qICBQcm9jZXNzaW5nIG9mIFBSTE8gcmVxIGZyb20KKwkJCQkJICogICBJbml0aWF0b3IgaXMgaW4gcHJvZ3Jlc3MKKwkJCQkJICovCisJQkZBX1RJTl9TTV9XSU9fQ0xFQU4gPSA3LAkvKiAgV2FpdGluZyBmb3IgSU8gY2xlYW51cCBiZWZvcmUgdGluCisJCQkJCSAqICAgaXMgb2ZmbGluZS4gVGhpcyBjYW4gYmUgdHJpZ2dlcmVkCisJCQkJCSAqICAgYnkgUlBPUlQgTE9HTyAocmN2ZC9zZW50KSBvciBieQorCQkJCQkgKiAgIFBSTE8gKHJjdmQvc2VudCkKKwkJCQkJICovCit9OworCitzdHJ1Y3QgYmZhX3BybGlfcmVxX3MgeworCXN0cnVjdCBmY2hzX3MgZmNoczsKKwlzdHJ1Y3QgZmNfcHJsaV9zIHBybGlfcGF5bG9hZDsKK307CisKK3N0cnVjdCBiZmFfcHJsb19yZXFfcyB7CisJc3RydWN0IGZjaHNfcyBmY2hzOworCXN0cnVjdCBmY19wcmxvX3MgcHJsb19wYXlsb2FkOworfTsKKwordm9pZCBiZmFfdGluX3NlbmRfbG9naW5fcnNwKHZvaWQgKmJmYV90aW4sIHUzMiBsb2dpbl9yc3AsCisJCQkJc3RydWN0IGZjX2xzX3JqdF9zIHJqdF9wYXlsb2FkKTsKK3ZvaWQgYmZhX3Rpbl9zZW5kX2xvZ291dF9yc3Aodm9pZCAqYmZhX3RpbiwgdTMyIGxvZ291dF9yc3AsCisJCQkJc3RydWN0IGZjX2xzX3JqdF9zIHJqdF9wYXlsb2FkKTsKKy8qKgorICogRkNTIHRhcmdldCBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV90aW5fc3RhdHNfcyB7CisJdTMyIG9ubGluZXM7CS8qICBJVE4gbmV4dXMgb25saW5lcyAoUFJMSSBkb25lKSAqLworCXUzMiBvZmZsaW5lczsJLyogIElUTiBOZXh1cyBvZmZsaW5lcyAJKi8KKwl1MzIgcHJsaV9yZXFfcGFyc2VfZXJyOwkvKiAgcHJsaSByZXEgcGFyc2luZyBlcnJvcnMgKi8KKwl1MzIgcHJsaV9yc3Bfcmp0OwkvKiAgbnVtIHBybGkgcnNwIHJlamVjdHMgc2VudCAqLworCXUzMiBwcmxpX3JzcF9hY2M7CS8qICBudW0gcHJsaSByc3AgYWNjZXB0cyBzZW50ICovCisJdTMyIGNsZWFudXBfY29tcHM7CS8qICBJVE4gY2xlYW51cCBjb21wbGV0aW9ucyAqLworfTsKKworLyoqCisgKiBGQ1MgdGluIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX3Rpbl9hdHRyX3MgeworCWVudW0gYmZhX3Rpbl9zdGF0ZV9lIHN0YXRlOworCXU4CXNlcV9yZXRyeTsgICAgLyogIFNlcXVlbmNlIHJldHJ5IHN1cHBvcnRlZCAgICAgICovCisJdTgJcnN2ZFszXTsKK307CisKKy8qKgorICogQkZBIFRJTiBhc3luYyBldmVudCBkYXRhIHN0cnVjdHVyZSBmb3IgQkZBTAorICovCitlbnVtIGJmYV90aW5fYWVuX2V2ZW50IHsKKwlCRkFfVElOX0FFTl9PTkxJTkUgCT0gMSwJLyogIFRhcmdldCBvbmxpbmUgKi8KKwlCRkFfVElOX0FFTl9PRkZMSU5FIAk9IDIsCS8qICBUYXJnZXQgb2ZmbGluZSAqLworCUJGQV9USU5fQUVOX0RJU0NPTk5FQ1QJPSAzLAkvKiAgVGFyZ2V0IGRpc2Nvbm5lY3RlZCAqLworfTsKKworLyoqCisgKiBCRkEgVElOIGV2ZW50IGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgYmZhX3Rpbl9hZW5fZGF0YV9zIHsKKwl1MTYgdmZfaWQ7CS8qICB2Zl9pZCBvZiB0aGUgSVQgbmV4dXMgKi8KKwl1MTYgcnN2ZFszXTsKKwl3d25fdCBscHd3bjsJLyogIFdXTiBvZiBsb2dpY2FsIHBvcnQgKi8KKwl3d25fdCBycHd3bjsJLyogIFdXTiBvZiByZW1vdGUodGFyZ2V0KSBwb3J0ICovCit9OworCisvKioKKyAqIEJlbG93IEFQSXMgYXJlIG5lZWRlZCBmcm9tIEJGQSBkcml2ZXIKKyAqIE1vdmUgdGhlc2UgdG8gQkZBIGRyaXZlciBwdWJsaWMgaGVhZGVyIGZpbGU/CisgKi8KKy8qICBUSU4gcmN2ZCBuZXcgUFJMSSAmIGdldHMgYmZhZF90aW5fdCBwdHIgZnJvbSBkcml2ZXIgdGhpcyBjYWxsYmFjayAqLwordm9pZCAqYmZhZF90aW5fcmN2ZF9sb2dpbl9yZXEodm9pZCAqYmZhZF90bV9wb3J0LCB2b2lkICpiZmFfdGluLAorCQkJCXd3bl90IHJwX3d3biwgdTMyIHJwX2ZjaWQsCisJCQkJc3RydWN0IGJmYV9wcmxpX3JlcV9zIHBybGlfcmVxKTsKKy8qICBUSU4gcmN2ZCBuZXcgUFJMTyAqLwordm9pZCBiZmFkX3Rpbl9yY3ZkX2xvZ291dF9yZXEodm9pZCAqYmZhZF90aW4sIHd3bl90IHJwX3d3biwgdTMyIHJwX2ZjaWQsCisJCQkJc3RydWN0IGJmYV9wcmxvX3JlcV9zIHBybG9fcmVxKTsKKy8qICBUSU4gaXMgb25saW5lIGFuZCByZWFkeSBmb3IgSU8gKi8KK3ZvaWQgYmZhZF90aW5fb25saW5lKHZvaWQgKmJmYWRfdGluKTsKKy8qICBUSU4gaXMgb2ZmbGluZSBhbmQgQkZBIGRyaXZlciBjYW4gc2h1dGRvd24gaXRzIHVwcGVyIHN0YWNrICovCit2b2lkIGJmYWRfdGluX29mZmxpbmUodm9pZCAqYmZhZF90aW4pOworLyogIFRJTiBkb2VzIG5vdCBuZWVkIHRoaXMgQkZBIGRyaXZlciB0aW4gdGFnIGFueW1vcmUsIHNvIGNhbiBiZSBmcmVlZCAqLwordm9pZCBiZmFkX3Rpbl9yZXNfZnJlZSh2b2lkICpiZmFkX3Rpbik7CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1RJTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3RzZW5zb3IuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3RzZW5zb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTg4MWQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHNlbnNvci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1RTRU5TT1JfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVFNFTlNPUl9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisKKy8qKgorICogVGVtcGVyYXR1cmUgc2Vuc29yIHN0YXR1cyB2YWx1ZXMKKyAqLworZW51bSBiZmFfdHNlbnNvcl9zdGF0dXMgeworCUJGQV9UU0VOU09SX1NUQVRVU19VTktOT1dOICAgPSAxLCAgIC8qICB1bmtvd24gc3RhdHVzICovCisJQkZBX1RTRU5TT1JfU1RBVFVTX0ZBVUxUWSAgICA9IDIsICAgLyogIHNlbnNvciBpcyBmYXVsdHkgKi8KKwlCRkFfVFNFTlNPUl9TVEFUVVNfQkVMT1dfTUlOID0gMywgICAvKiAgdGVtcGVyYXR1cmUgYmVsb3cgbWluaW51bSAqLworCUJGQV9UU0VOU09SX1NUQVRVU19OT01JTkFMICAgPSA0LCAgIC8qICBub3JtYWwgdGVtcGVyYXR1cmUgKi8KKwlCRkFfVFNFTlNPUl9TVEFUVVNfQUJPVkVfTUFYID0gNSwgICAvKiAgdGVtcGVyYXR1cmUgYWJvdmUgbWF4aW11bSAqLworfTsKKworLyoqCisgKiBUZW1wZXJhdHVyZSBzZW5zb3IgYXR0cmlidXRlCisgKi8KK3N0cnVjdCBiZmFfdHNlbnNvcl9hdHRyX3MgeworCWVudW0gYmZhX3RzZW5zb3Jfc3RhdHVzIHN0YXR1czsJLyogIHRlbXBlcmF0dXJlIHNlbnNvciBzdGF0dXMgKi8KKwl1MzIgICAgICAgIAl2YWx1ZTsJLyogIGN1cnJlbnQgdGVtcGVyYXR1cmUgaW4gY2Vsc2l1cyAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfVFNFTlNPUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3R5cGVzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDgzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190eXBlcy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19UWVBFU19IX18KKyNkZWZpbmUgX19CRkFfREVGU19UWVBFU19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworZW51bSBiZmFfYm9vbGVhbiB7CisJQkZBX0ZBTFNFID0gMCwKKwlCRkFfVFJVRSAgPSAxCit9OworI2RlZmluZSBiZmFfYm9vbGVhbl90IGVudW0gYmZhX2Jvb2xlYW4KKworI2RlZmluZSBCRkFfU1RSSU5HXzMyCTMyCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OTAyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192ZXJzaW9uLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX1ZFUlNJT05fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVkVSU0lPTl9IX18KKworI2RlZmluZSBCRkFfVkVSU0lPTl9MRU4JCTY0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzNWJlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZmLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfVkZfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVkZfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworLyoqCisgKiBWRiBzdGF0ZXMKKyAqLworZW51bSBiZmFfdmZfc3RhdGUgeworCUJGQV9WRl9VTklOSVQgICAgPSAwLAkvKiAgZmFicmljIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfVkZfTElOS19ET1dOID0gMSwJLyogIGxpbmsgaXMgZG93biAqLworCUJGQV9WRl9GTE9HSSAgICAgPSAyLAkvKiAgZmxvZ2kgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfVkZfQVVUSCAgICAgID0gMywJLyogIGF1dGhlbnRpY2F0aW9uIGluIHByb2dyZXNzICovCisJQkZBX1ZGX05PRkFCUklDICA9IDQsCS8qICBmYWJyaWMgaXMgbm90IHByZXNlbnQgKi8KKwlCRkFfVkZfT05MSU5FICAgID0gNSwJLyogIGxvZ2luIHRvIGZhYnJpYyBpcyBjb21wbGV0ZSAqLworCUJGQV9WRl9FVkZQICAgICAgPSA2LAkvKiAgRVZGUCBpcyBpbiBwcm9ncmVzcyAqLworCUJGQV9WRl9JU09MQVRFRCAgPSA3LAkvKiAgcG9ydCBpc29sYXRlZCBkdWUgdG8gdmZfaWQgbWlzbWF0Y2ggKi8KK307CisKKy8qKgorICogVkYgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MgeworCXUzMiAgICAgICAgZmxvZ2lfc2VudDsJLyogIE51bSBGTE9HSXMgc2VudCAJCSovCisJdTMyICAgICAgICBmbG9naV9yc3BfZXJyOwkvKiAgRkxPR0kgcmVzcG9uc2UgZXJyb3JzIAkqLworCXUzMiAgICAgICAgZmxvZ2lfYWNjX2VycjsJLyogIEZMT0dJIGFjY2VwdCBlcnJvcnMgCSovCisJdTMyICAgICAgICBmbG9naV9hY2NlcHRzOwkvKiAgRkxPR0kgYWNjZXB0cyByZWNlaXZlZCAJKi8KKwl1MzIgICAgICAgIGZsb2dpX3JlamVjdHM7CS8qICBGTE9HSSByZWplY3RzIHJlY2VpdmVkIAkqLworCXUzMiAgICAgICAgZmxvZ2lfdW5rbm93bl9yc3A7IC8qICBVbmtub3duIHJlc3BvbnNlcyBmb3IgRkxPR0kgKi8KKwl1MzIgICAgICAgIGZsb2dpX2FsbG9jX3dhaXQ7IC8qICBBbGxvY2F0aW9uIHdhaXRzIHByaW9yIHRvCisJCQkJCSAgICogc2VuZGluZyBGTE9HSQorCQkJCQkgICAqLworCXUzMiAgICAgICAgZmxvZ2lfcmN2ZDsJLyogIEZMT0dJcyByZWNlaXZlZCAqLworCXUzMiAgICAgICAgZmxvZ2lfcmVqZWN0ZWQ7CS8qICBJbmNvbWluZyBGTE9HSXMgcmVqZWN0ZWQgKi8KKwl1MzIgICAgICAgIGZhYnJpY19vbmxpbmVzOwkvKiAgSW50ZXJuYWwgZmFicmljIG9ubGluZQorCQkJCQkgKiBub3RpZmljYXRpb24gc2VudCB0byBvdGhlcgorCQkJCQkgKiBtb2R1bGVzCisJCQkJCSAqLworCXUzMiAgICAgICAgZmFicmljX29mZmxpbmVzOyAvKiAgSW50ZXJuYWwgZmFicmljIG9mZmxpbmUKKwkJCQkJICAqIG5vdGlmaWNhdGlvbiBzZW50IHRvIG90aGVyCisJCQkJCSAgKiBtb2R1bGVzCisJCQkJCSAgKi8KKwl1MzIgICAgICAgIHJlc3ZkOworfTsKKworLyoqCisgKiBWRiBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV92Zl9hdHRyX3MgeworCWVudW0gYmZhX3ZmX3N0YXRlICBzdGF0ZTsJCS8qICBWRiBzdGF0ZSAqLworCXUzMiAgICAgICAgcnN2ZDsKKwl3d25fdCAgICAgICAgICAgZmFicmljX25hbWU7CS8qICBmYWJyaWMgbmFtZSAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfVkZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192cG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjAyMWY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdnBvcnQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19WUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19WUE9SVF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisvKioKKyAqIFZQT1JUIHN0YXRlcworICovCitlbnVtIGJmYV92cG9ydF9zdGF0ZSB7CisJQkZBX0ZDU19WUE9SVF9VTklOSVQgCQk9IDAsCisJQkZBX0ZDU19WUE9SVF9DUkVBVEVEIAkJPSAxLAorCUJGQV9GQ1NfVlBPUlRfT0ZGTElORSAJCT0gMSwKKwlCRkFfRkNTX1ZQT1JUX0ZESVNDX1NFTkQgCT0gMiwKKwlCRkFfRkNTX1ZQT1JUX0ZESVNDIAkJPSAzLAorCUJGQV9GQ1NfVlBPUlRfRkRJU0NfUkVUUlkgCT0gNCwKKwlCRkFfRkNTX1ZQT1JUX09OTElORSAJCT0gNSwKKwlCRkFfRkNTX1ZQT1JUX0RFTEVUSU5HIAkJPSA2LAorCUJGQV9GQ1NfVlBPUlRfQ0xFQU5VUCAJCT0gNiwKKwlCRkFfRkNTX1ZQT1JUX0xPR09fU0VORCAJPSA3LAorCUJGQV9GQ1NfVlBPUlRfTE9HTyAJCQk9IDgsCisJQkZBX0ZDU19WUE9SVF9FUlJPUgkJCT0gOSwKKwlCRkFfRkNTX1ZQT1JUX01BWF9TVEFURSwKK307CisKKy8qKgorICogdnBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MgeworCXN0cnVjdCBiZmFfcG9ydF9zdGF0c19zIHBvcnRfc3RhdHM7CS8qICBiYXNlIGNsYXNzIChwb3J0KSBzdGF0cyAqLworCS8qCisJICogVE9ETyAtIHJlbW92ZQorCSAqLworCisJdTMyICAgICAgICBmZGlzY19zZW50OwkvKiAgbnVtIGZkaXNjIHNlbnQgKi8KKwl1MzIgICAgICAgIGZkaXNjX2FjY2VwdHM7CS8qICBmZGlzYyBhY2NlcHRzICovCisJdTMyICAgICAgICBmZGlzY19yZXRyaWVzOwkvKiAgZmRpc2MgcmV0cmllcyAqLworCXUzMiAgICAgICAgZmRpc2NfdGltZW91dHM7CS8qICBmZGlzYyB0aW1lb3V0cyAqLworCXUzMiAgICAgICAgZmRpc2NfcnNwX2VycjsJLyogIGZkaXNjIHJlc3BvbnNlIGVycm9yICovCisJdTMyICAgICAgICBmZGlzY19hY2NfYmFkOwkvKiAgYmFkIGZkaXNjIGFjY2VwdHMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3JlamVjdHM7CS8qICBmZGlzYyByZWplY3RzICovCisJdTMyICAgICAgICBmZGlzY191bmtub3duX3JzcDsKKwkvKgorCSAqITwgZmRpc2MgcnNwIHVua25vd24gZXJyb3IKKwkgKi8KKwl1MzIgICAgICAgIGZkaXNjX2FsbG9jX3dhaXQ7LyogIGZkaXNjIHJlcSAoZmN4cClhbGxvYyB3YWl0ICovCisKKwl1MzIgICAgICAgIGxvZ29fYWxsb2Nfd2FpdDsvKiAgbG9nbyByZXEgKGZjeHApIGFsbG9jIHdhaXQgKi8KKwl1MzIgICAgICAgIGxvZ29fc2VudDsJLyogIGxvZ28gc2VudCAqLworCXUzMiAgICAgICAgbG9nb19hY2NlcHRzOwkvKiAgbG9nbyBhY2NlcHRzICovCisJdTMyICAgICAgICBsb2dvX3JlamVjdHM7CS8qICBsb2dvIHJlamVjdHMgKi8KKwl1MzIgICAgICAgIGxvZ29fcnNwX2VycjsJLyogIGxvZ28gcnNwIGVycm9ycyAqLworCXUzMiAgICAgICAgbG9nb191bmtub3duX3JzcDsKKwkJCS8qICBsb2dvIHJzcCB1bmtub3duIGVycm9ycyAqLworCisJdTMyICAgICAgICBmYWJfbm9fbnBpdjsJLyogIGZhYnJpYyBkb2VzIG5vdCBzdXBwb3J0IG5waXYgKi8KKworCXUzMiAgICAgICAgZmFiX29mZmxpbmU7CS8qICBvZmZsaW5lIGV2ZW50cyBmcm9tIGZhYiBTTSAqLworCXUzMiAgICAgICAgZmFiX29ubGluZTsJLyogIG9ubGluZSBldmVudHMgZnJvbSBmYWIgU00gKi8KKwl1MzIgICAgICAgIGZhYl9jbGVhbnVwOwkvKiAgY2xlYW51cCByZXF1ZXN0IGZyb20gZmFiIFNNICovCisJdTMyICAgICAgICByc3ZkOworfTsKKworLyoqCisgKiBCRkEgdnBvcnQgYXR0cmlidXRlIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV92cG9ydF9hdHRyX3MgeworCXN0cnVjdCBiZmFfcG9ydF9hdHRyX3MgICBwb3J0X2F0dHI7IC8qICBiYXNlIGNsYXNzIChwb3J0KSBhdHRyaWJ1dGVzICovCisJZW51bSBiZmFfdnBvcnRfc3RhdGUgdnBvcnRfc3RhdGU7IC8qICB2cG9ydCBzdGF0ZSAqLworCXUzMiAgICAgICAgICByc3ZkOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfVlBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2IuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjNiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2IuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY2IuaCBCRkEgRkNTIGNhbGxiYWNrIGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDQl9IX18KKyNkZWZpbmUgX19CRkFfRkNCX0hfXworCisvKioKKyAqICBmY2IgTWFpbiBmY3MgY2FsbGJhY2tzCisgKi8KKwordm9pZCBiZmFfZmNiX2V4aXQoc3RydWN0IGJmYWRfcyAqYmZhZCk7CisKKworCisjZW5kaWYgLyogX19CRkFfRkNCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfZmNwaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmM3MGFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX2ZjcGltLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyogOiBiZmFkX2ZjcGltLmggLSBCRkEgRkNTIGluaXRpYXRvciBtb2RlIHJlbW90ZSBwb3J0IGNhbGxiYWNrcworICovCisKKyNpZm5kZWYgX19CRkFEX0ZDQl9GQ1BJTV9IX18KKyNkZWZpbmUgX19CRkFEX0ZDQl9GQ1BJTV9IX18KKworc3RydWN0IGJmYWRfaXRuaW1fczsKKworLyoKKyAqIFJQSU0gY2FsbGJhY2tzCisgKi8KKworLyoqCisgKiAJTWVtb3J5IGFsbG9jYXRpb24gZm9yIHJlbW90ZSBwb3J0IGluc3RhbmNlLiBDYWxsZWQgYmVmb3JlIFBSTEkgaXMKKyAqIAlpbml0aWF0ZWQgdG8gdGhlIHJlbW90ZSB0YXJnZXQgcG9ydC4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQJCS0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1bb3V0XSBpdG5pbQkJLSBGQ1MgcmVtb3RlIHBvcnQgKElNKSBpbnN0YW5jZQorICogQHBhcmFtW291dF0gaXRuaW1fZHJ2CS0gZHJpdmVyIHJlbW90ZSBwb3J0IChJTSkgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX2l0bmltX2FsbG9jKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKippdG5pbSwKKwkJCQkgICAgc3RydWN0IGJmYWRfaXRuaW1fcyAqKml0bmltX2Rydik7CisKKy8qKgorICogCQlGcmVlIHJlbW90ZSBwb3J0IChJTSkgaW5zdGFuY2UuCisgKgorICogQHBhcmFtW2luXSBiZmFkCS0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1baW5dIGl0bmltX2RydgktIGRyaXZlciByZW1vdGUgcG9ydCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV9mcmVlKHN0cnVjdCBiZmFkX3MgKmJmYWQsCisJCQkJICAgc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKworLyoqCisgKiAJTm90aWZpY2F0aW9uIG9mIHdoZW4gbG9naW4gd2l0aCBhIHJlbW90ZSB0YXJnZXQgZGV2aWNlIGlzIGNvbXBsZXRlLgorICoKKyAqIEBwYXJhbVtpbl0gaXRuaW1fZHJ2CS0gZHJpdmVyIHJlbW90ZSBwb3J0IGluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX2l0bmltX29ubGluZShzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpOworCisvKioKKyAqIAlOb3RpZmljYXRpb24gd2hlbiBsb2dpbiB3aXRoIHRoZSByZW1vdGUgZGV2aWNlIGlzIHNldmVyZWQuCisgKgorICogQHBhcmFtW2luXSBpdG5pbV9kcnYJLSBkcml2ZXIgcmVtb3RlIHBvcnQgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fb2ZmbGluZShzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpOworCit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV90b3ZfYmVnaW4oc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX2l0bmltX3RvdihzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpOworCisjZW5kaWYgLyogX19CRkFEX0ZDQl9GQ1BJTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZDdmOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcG9ydC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY2JfcG9ydC5oIEJGQSBGQ1MgdmlydHVhbCBwb3J0IGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ0JfUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfRkNCX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl92cG9ydC5oPgorLyoqCisgKiAgZmNzX3BvcnRfZmNiIEZDUyBwb3J0IGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBiZmFkX3BvcnRfczsKKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9ucyBmcm9tIEJGQSBGQ1MgdG8gZHJpdmVyCisgKi8KKworLyoqCisgKiAJQ2FsbCBmcm9tIEZDUyB0byBkcml2ZXIgbW9kdWxlIHdoZW4gYSBwb3J0IGlzIGluc3RhbnRpYXRlZC4gVGhlIHBvcnQKKyAqIAljYW4gYmUgYSBiYXNlIHBvcnQgb3IgYSB2aXJ0dWFsIHBvcnQgd2l0aCBpbiB0aGUgYmFzZSBmYWJyaWMgb3IKKyAqIAlhIHZpcnR1YWwgZmFicmljLgorICoKKyAqICBPbiB0aGlzIGNhbGxiYWNrLCBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gY3JlYXRlIHNjc2lfaG9zdCwgc2NzaV90Z3Qgb3IKKyAqICBuZXR3b3JrIGludGVyZmFjZXMgYmFzZXMgb24gcG9ydHMgcGVyc29uYWxpdHkvcm9sZXMuCisgKgorICogICAgICBiYXNlIHBvcnQgb2YgYmFzZSBmYWJyaWM6CXZmX2RydiA9PSBOVUxMICYmIHZwX2RydiA9PSBOVUxMCisgKiAgICAgIHZwb3J0IG9mIGJhc2UgZmFicmljOgkJdmZfZHJ2ID09IE5VTEwgJiYgdnBfZHJ2ICE9IE5VTEwKKyAqICAgICAgYmFzZSBwb3J0IG9mIFZGOgkJdmZfZHJ2ICE9IE5VTEwgJiYgdnBfZHJ2ID09IE5VTEwKKyAqICAgICAgdnBvcnQgb2YgVkY6CQkJdmZfZHJ2ICE9IE5VTEwgJiYgdnBfZHJ2ICE9IE5VTEwKKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgICAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSBwb3J0ICAgLSBGQ1MgcG9ydCBpbnN0YW5jZQorICogQHBhcmFtW2luXSByb2xlcyAgLSBwb3J0IHJvbGVzOiBJTSwgVE0sIElQCisgKiBAcGFyYW1baW5dIHZmX2RydiAtIFZGIGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIGZhYnJpYyAobm8gVkYpCisgKiBAcGFyYW1baW5dIHZwX2RydiAtIHZwb3J0IGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIHBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLworc3RydWN0IGJmYWRfcG9ydF9zICpiZmFfZmNiX3BvcnRfbmV3KHN0cnVjdCBiZmFkX3MgKmJmYWQsCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQllbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2RydiwKKwkJCXN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2Rydik7CisKKy8qKgorICogCUNhbGwgZnJvbSBGQ1MgdG8gZHJpdmVyIG1vZHVsZSB3aGVuIGEgcG9ydCBpcyBkZWxldGVkLiBUaGUgcG9ydAorICogCWNhbiBiZSBhIGJhc2UgcG9ydCBvciBhIHZpcnR1YWwgcG9ydCB3aXRoIGluIHRoZSBiYXNlIGZhYnJpYyBvcgorICogCWEgdmlydHVhbCBmYWJyaWMuCisgKgorICogQHBhcmFtW2luXSBiZmFkICAgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcm9sZXMgIC0gcG9ydCByb2xlczogSU0sIFRNLCBJUAorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBWRiBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBmYWJyaWMgKG5vIFZGKQorICogQHBhcmFtW2luXSB2cF9kcnYgLSB2cG9ydCBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCQlzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2Rydik7CisKKy8qKgorICogCU5vdGlmaWNhdGlvbiB3aGVuIHBvcnQgdHJhbnNpdGlvbnMgdG8gT05MSU5FIHN0YXRlLgorICoKKyAqIE9ubGluZSBub3RpZmljYXRpb24gaXMgYSBsb2dpY2FsIGxpbmsgdXAgZm9yIHRoZSBsb2NhbCBwb3J0LiBUaGlzCisgKiBub3RpZmljYXRpb24gaXMgc2VudCBhZnRlciBhIHN1Y2Nlc3NmdWxsIEZMT0dJLCBvciBhIHN1Y2Nlc3NmdWwKKyAqIGxpbmsgaW5pdGlhbGl6YXRpb24gaW4gcHJvdmlhdGUtbG9vcCBvciBOMk4gdG9wb2xvZ2llcy4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgICAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSByb2xlcyAgLSBwb3J0IHJvbGVzOiBJTSwgVE0sIElQCisgKiBAcGFyYW1baW5dIHZmX2RydiAtIFZGIGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIGZhYnJpYyAobm8gVkYpCisgKiBAcGFyYW1baW5dIHZwX2RydiAtIHZwb3J0IGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIHBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3BvcnRfb25saW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlcywKKwkJCXN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydiwgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KTsKKworLyoqCisgKiAJTm90aWZpY2F0aW9uIHdoZW4gcG9ydCB0cmFuc2l0aW9ucyB0byBPRkZMSU5FIHN0YXRlLgorICoKKyAqIE9mZmxpbmUgbm90aWZpY2F0aW9uIGlzIGEgbG9naWNhbCBsaW5rIGRvd24gZm9yIHRoZSBsb2NhbCBwb3J0LgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAgIC0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1baW5dIHJvbGVzICAtIHBvcnQgcm9sZXM6IElNLCBUTSwgSVAKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gVkYgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgZmFicmljIChubyBWRikKKyAqIEBwYXJhbVtpbl0gdnBfZHJ2IC0gdnBvcnQgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgcG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlcywKKwkJCXN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydiwgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KTsKKworCisjZW5kaWYgLyogX19CRkFfRkNCX1BPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9ycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjYxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcnBvcnQuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY2JfcnBvcnQuaCBCRkEgRkNTIHJwb3J0IGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ0JfUlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9SUE9SVF9IX18KKworLyoqCisgKiAgZmNzX3Jwb3J0X2ZjYiBSZW1vdGUgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKworc3RydWN0IGJmYWRfcnBvcnRfczsKKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9ucyBmcm9tIEJGQSBGQ1MgdG8gZHJpdmVyCisgKi8KKworLyoqCisgKiAJQ29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2Zjc19ycG9ydF9hZGQoKS4KKyAqCisgKiBAcGFyYW1baW5dIHJwb3J0X2RydiAtIGRyaXZlciBpbnN0YW5jZSBvZiBycG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfcnBvcnRfYWRkKHN0cnVjdCBiZmFkX3Jwb3J0X3MgKnJwb3J0X2Rydik7CisKKy8qKgorICogCUNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9mY3NfcnBvcnRfcmVtb3ZlKCkuCisgKgorICogQHBhcmFtW2luXSBycG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3Jwb3J0X3JlbW92ZShzdHJ1Y3QgYmZhZF9ycG9ydF9zICpycG9ydF9kcnYpOworCisvKioKKyAqIAkJQ2FsbCB0byBhbGxvY2F0ZSBhIHJwb3J0IGluc3RhbmNlLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW291dF0gcnBvcnQgLSBCRkEgRkNTIGluc3RhbmNlIG9mIHJwb3J0CisgKiBAcGFyYW1bb3V0XSBycG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqCisgKiBAcmV0dmFsIEJGQV9TVEFUVVNfT0sgLSBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkCisgKiBAcmV0dmFsIEJGQV9TVEFUVVNfRU5PTUVNIC0gY2Fubm90IGFsbG9jYXRlCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfZmNiX3Jwb3J0X2FsbG9jKHN0cnVjdCBiZmFkX3MgKmJmYWQsCisJCQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhZF9ycG9ydF9zICoqcnBvcnRfZHJ2KTsKKworLyoqCisgKiAJQ2FsbCB0byBmcmVlIHJwb3J0IG1lbW9yeSByZXNvdXJjZXMuCisgKgorICogQHBhcmFtW2luXSBiZmFkIC0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1baW5dIHJwb3J0X2RydiAtIGRyaXZlciBpbnN0YW5jZSBvZiBycG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfcnBvcnRfZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9ycG9ydF9zICoqcnBvcnRfZHJ2KTsKKworCisKKyNlbmRpZiAvKiBfX0JGQV9GQ0JfUlBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdmYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDNmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdmYuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY2JfdmYuaCBCRkEgRkNTIHZpcnR1YWwgZmFicmljIGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ0JfVkZfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9WRl9IX18KKworLyoqCisgKiAgZmNzX3ZmX2ZjYiBWaXJ0dWFsIGZhYnJpYyBkcml2ZXIgaW50cmVmYWNlcworICovCisKKworc3RydWN0IGJmYWRfdmZfczsKKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9ucyBmcm9tIEJGQSBGQ1MgdG8gZHJpdmVyCisgKi8KKworLyoqCisgKiAJQ29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2Zjc192Zl9zdG9wKCkuCisgKgorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgdmYKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfdmZfc3RvcChzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYpOworCisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9WRl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92cG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Zwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5ZjQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92cG9ydC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2ZjYl92cG9ydC5oIEJGQSBGQ1MgdmlydHVhbCBwb3J0IGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ0JfVlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9WUE9SVF9IX18KKworLyoqCisgKiAgZmNzX3Zwb3J0X2ZjYiBWaXJ0dWFsIHBvcnQgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisKK3N0cnVjdCBiZmFkX3Zwb3J0X3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9mY3NfdnBvcnRfZGVsZXRlKCkuCisgKgorICogQHBhcmFtW2luXSB2cG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgdnBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfdnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2Rydik7CisKKworCisjZW5kaWYgLyogX19CRkFfRkNCX1ZQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjc2NjljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19IX18KKyNkZWZpbmUgX19CRkFfRkNTX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19mYWJyaWMuaD4KKworI2RlZmluZSBCRkFfRkNTX09TX1NUUl9MRU4gIAkJNjQKKworc3RydWN0IGJmYV9mY3Nfc3RhdHNfcyB7CisJc3RydWN0IHsKKwkJdTMyICAgICAgICB1bnRhZ2dlZDsgLyogIHVudGFnZ2VkIHJlY2VpdmUgZnJhbWVzICovCisJCXUzMiAgICAgICAgdGFnZ2VkOwkvKiAgdGFnZ2VkIHJlY2VpdmUgZnJhbWVzICovCisJCXUzMiAgICAgICAgdmZpZF91bmtub3duOwkvKiAgVkYgaWQgaXMgdW5rbm93biAqLworCX0gdWY7Cit9OworCitzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zIHsKKwl1OCAgdmVyc2lvbltCRkFfVkVSU0lPTl9MRU5dOwkJLyogIERyaXZlciBWZXJzaW9uICovCisJdTggIGhvc3RfbWFjaGluZV9uYW1lW0JGQV9GQ1NfT1NfU1RSX0xFTl07CisJdTggIGhvc3Rfb3NfbmFtZVtCRkFfRkNTX09TX1NUUl9MRU5dOyAvKiAgT1MgbmFtZSBhbmQgdmVyc2lvbiAqLworCXU4ICBob3N0X29zX3BhdGNoW0JGQV9GQ1NfT1NfU1RSX0xFTl07LyogIHBhdGNoIG9yIHNlcnZpY2UgcGFjayAqLworCXU4ICBvc19kZXZpY2VfbmFtZVtCRkFfRkNTX09TX1NUUl9MRU5dOyAvKiAgRHJpdmVyIERldmljZSBOYW1lICovCit9OworCitzdHJ1Y3QgYmZhX2Zjc19zIHsKKwlzdHJ1Y3QgYmZhX3MgICAgICAqYmZhOwkvKiAgY29ycmVzcG9uZGluZyBCRkEgYmZhIGluc3RhbmNlICovCisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOyAvKiAgY29ycmVzcG9uZGluZyBCREEgZHJpdmVyIGluc3RhbmNlICovCisJc3RydWN0IGJmYV9sb2dfbW9kX3MgICpsb2dtOwkvKiAgZHJpdmVyIGxvZ2dpbmcgbW9kdWxlIGluc3RhbmNlICovCisJc3RydWN0IGJmYV90cmNfbW9kX3MgICp0cmNtb2Q7CS8qICB0cmFjaW5nIG1vZHVsZSAqLworCXN0cnVjdCBiZmFfYWVuX3MgICAgICAqYWVuOwkvKiAgYWVuIGNvbXBvbmVudCAqLworCWJmYV9ib29sZWFuX3QgICB2Zl9lbmFibGVkOwkvKiAgVkYgbW9kZSBpcyBlbmFibGVkICovCisJYmZhX2Jvb2xlYW5fdCBtaW5fY2ZnOwkJLyogbWluIGNmZyBlbmFibGVkL2Rpc2FibGVkICovCisJdTE2ICAgICAgICBwb3J0X3ZmaWQ7CS8qICBwb3J0IGRlZmF1bHQgVkYgSUQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zIGRyaXZlcl9pbmZvOworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zIGZhYnJpYzsgLyogIGJhc2UgZmFicmljIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zdGF0c19zCXN0YXRzOwkvKiAgRkNTIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgCXdjOwkvKiAgd2FpdGluZyBjb3VudGVyICovCit9OworCisvKgorICogYmZhIGZjcyBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX2Zjc19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFkX3MgKmJmYWQsCisJCQliZmFfYm9vbGVhbl90IG1pbl9jZmcpOwordm9pZCBiZmFfZmNzX2RyaXZlcl9pbmZvX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8pOwordm9pZCBiZmFfZmNzX2V4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc190cmNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpOwordm9pZCBiZmFfZmNzX2xvZ19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCk7Cit2b2lkIGJmYV9mY3NfYWVuX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX2Flbl9zICphZW4pOwordm9pZCAJICAJYmZhX2Zjc19zdGFydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCisjZW5kaWYgLyogX19CRkFfRkNTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2F1dGguaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjNGM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19hdXRoLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19BVVRIX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfQVVUSF9IX18KKworc3RydWN0IGJmYV9mY3NfczsKKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hdXRoLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192Zi5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3NtLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmNfc3AuaD4KKworc3RydWN0IGJmYV9mY3NfZmFicmljX3M7CisKKworCitzdHJ1Y3QgYmZhX2Zjc19hdXRoX3MgeworCWJmYV9zbV90CXNtOwkvKiAgc3RhdGUgbWFjaGluZSAqLworCWJmYV9ib29sZWFuX3QgICBwb2xpY3k7CS8qICBhdXRoZW50aWNhdGlvbiBlbmFibGVkL2Rpc2FibGVkICovCisJZW51bSBiZmFfYXV0aF9zdGF0dXMgc3RhdHVzOwkvKiAgYXV0aGVudGljYXRpb24gc3RhdHVzICovCisJZW51bSBhdXRoX3JqdF9jb2RlcyAgcmp0X2NvZGU7CS8qICBhdXRoIHJlamVjdCBzdGF0dXMgKi8KKwllbnVtIGF1dGhfcmp0X2NvZGVfZXhwcyAgcmp0X2NvZGVfZXhwOwkvKiAgYXV0aCByZWplY3QgcmVhc29uICovCisJZW51bSBiZmFfYXV0aF9hbGdvIGFsZ287CS8qICBBdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gKi8KKwlzdHJ1Y3QgYmZhX2F1dGhfc3RhdHNfcyBzdGF0czsJLyogIFN0YXRpc3RpY3MgKi8KKwllbnVtIGF1dGhfZGhfZ2lkICAgZ3JvdXA7CS8qICBESChkaWZmaWUtaGVsbG1hbikgR3JvdXAgKi8KKwllbnVtIGJmYV9hdXRoX3NlY3JldHNvdXJjZSBzb3VyY2U7CS8qICBTZWNyZXQgc291cmNlICovCisJY2hhciAgICAgICAgICAgIHNlY3JldFtCRkFfQVVUSF9TRUNSRVRfU1RSSU5HX0xFTl07CisJCQkJLyogIHNlY3JldCBzdHJpbmcgKi8KKwl1OCAgICAgICAgIHNlY3JldF9sZW47CisJCQkJLyogIHNlY3JldCBzdHJpbmcgbGVuZ3RoICovCisJdTggICAgICAgICBucmV0cmllczsKKwkJCQkvKiAgbnVtYmVyIG9mIHJldHJpZXMgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOy8qICBwb2ludGVyIHRvIGZhYnJpYyAqLworCXU4ICAgICAgICAgc2VudGNvZGU7CS8qICBwb2ludGVyIHRvIHJlc3BvbnNlIGRhdGEgKi8KKwl1OCAgICAgICAgKnJlc3BvbnNlOwkvKiAgcG9pbnRlciB0byByZXNwb25zZSBkYXRhICovCisJc3RydWN0IGJmYV90aW1lcl9zIGRlbGF5X3RpbWVyOyAJLyogIGRlbGF5IHRpbWVyICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CQkvKiAgcG9pbnRlciB0byBmY3hwICovCisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIGZjeHBfd3FlOworfTsKKworLyoqCisgKiBiZmEgZmNzIGF1dGhlbnRpY2F0aW9uIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCSAgICAgIHN0cnVjdCBiZmFfYXV0aF9hdHRyX3MgKmF0dHIpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfcG9saWN5KHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQsCisJCQkJCWJmYV9ib29sZWFuX3QgcG9saWN5KTsKK2VudW0gYmZhX2F1dGhfc3RhdHVzIGJmYV9mY3NfYXV0aF9nZXRfc3RhdHVzKHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfYWxnbyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCSAgICAgIGVudW0gYmZhX2F1dGhfYWxnbyBhbGdvKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQsCisJCQkJICAgICAgIHN0cnVjdCBiZmFfYXV0aF9zdGF0c19zICpzdGF0cyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX3NldF9kaF9ncm91cChzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LCBpbnQgZ3JvdXApOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfc2VjcmV0c3RyaW5nKHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQsCisJCQkJCSAgICAgIGNoYXIgKnNlY3JldCk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX3NldF9zZWNyZXRzdHJpbmdfZW5jcnlwdChzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQkgICAgICB1MzIgc2VjcmV0W10sIHUzMiBsZW4pOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfc2VjcmV0c291cmNlKHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQsCisJCQkJCSAgICAgIGVudW0gYmZhX2F1dGhfc2VjcmV0c291cmNlIHNyYyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX3Jlc2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9yZWluaXQoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCk7CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfQVVUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mYWJyaWMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mYWJyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmZkMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZhYnJpYy5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX0ZBQlJJQ19IX18KKyNkZWZpbmUgX19CRkFfRkNTX0ZBQlJJQ19IX18KKworc3RydWN0IGJmYV9mY3NfczsKKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192Zi5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3NtLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmNfc3AuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19hdXRoLmg+CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9uCisgKi8KK3N0cnVjdCBiZmFkX3ZmX3M7CisKK2VudW0gYmZhX2Zjc19mYWJyaWNfdHlwZSB7CisJQkZBX0ZDU19GQUJSSUNfVU5LTk9XTiA9IDAsCisJQkZBX0ZDU19GQUJSSUNfU1dJVENIRUQgPSAxLAorCUJGQV9GQ1NfRkFCUklDX1BMT09QID0gMiwKKwlCRkFfRkNTX0ZBQlJJQ19OMk4gPSAzLAorfTsKKworCitzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgIHFlOwkJLyogIHF1ZXVlIGVsZW1lbnQgKi8KKwliZmFfc21fdAkgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfZmNzX3MgKmZjczsJCS8qICBGQ1MgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgIGJwb3J0OwkvKiAgYmFzZSBsb2dpY2FsIHBvcnQgKi8KKwllbnVtIGJmYV9mY3NfZmFicmljX3R5cGUgZmFiX3R5cGU7IC8qICBmYWJyaWMgdHlwZSAqLworCWVudW0gYmZhX3Bwb3J0X3R5cGUgb3Blcl90eXBlOwkvKiAgY3VycmVudCBsaW5rIHRvcG9sb2d5ICovCisJdTggICAgICAgICBpc192ZjsJCS8qICBpcyB2aXJ0dWFsIGZhYnJpYz8gKi8KKwl1OCAgICAgICAgIGlzX25waXY7CS8qICBpcyBOUElWIHN1cHBvcnRlZCA/ICovCisJdTggICAgICAgICBpc19hdXRoOwkvKiAgaXMgU2VjdXJpdHkvQXV0aCBzdXBwb3J0ZWQgPyAqLworCXUxNiAgICAgICAgYmJfY3JlZGl0OwkvKiAgQkIgY3JlZGl0IGZyb20gZmFicmljICovCisJdTE2ICAgICAgICB2Zl9pZDsJCS8qICB2aXJ0dWFsIGZhYnJpYyBJRCAqLworCXUxNiAgICAgICAgbnVtX3Zwb3J0czsJLyogIG51bSB2cG9ydHMgKi8KKwl1MTYgICAgICAgIHJzdmQ7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHZwb3J0X3E7CS8qICBxdWV1ZSBvZiB2aXJ0dWFsIHBvcnRzICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHZmX3E7CS8qICBxdWV1ZSBvZiB2aXJ0dWFsIGZhYnJpY3MgKi8KKwlzdHJ1Y3QgYmZhZF92Zl9zICAgICAgKnZmX2RydjsJLyogIGRyaXZlciB2ZiBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgbGlua190aW1lcjsJLyogIExpbmsgRmFpbHVyZSB0aW1lci4gVnBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgZmFicmljX25hbWU7CS8qICBhdHRhY2hlZCBmYWJyaWMgbmFtZSAqLworCWJmYV9ib29sZWFuX3QgICBhdXRoX3JlcWQ7CS8qICBhdXRoZW50aWNhdGlvbiByZXF1aXJlZAkqLworCXN0cnVjdCBiZmFfdGltZXJfcyBkZWxheV90aW1lcjsJLyogIGRlbGF5IHRpbWVyCQkqLworCXVuaW9uIHsKKwkJdTE2ICAgICAgICBzd3BfdmZpZDsvKiAgc3dpdGNoIHBvcnQgVkYgaWQJCSovCisJfSBldmVudF9hcmc7CisJc3RydWN0IGJmYV9mY3NfYXV0aF9zICBhdXRoOwkvKiAgYXV0aGVudGljYXRpb24gY29uZmlnCSovCisJc3RydWN0IGJmYV93Y19zICAgICAgICB3YzsJLyogIHdhaXQgY291bnRlciBmb3IgZGVsZXRlCSovCisJc3RydWN0IGJmYV92Zl9zdGF0c19zICBzdGF0czsgCS8qICBmYWJyaWMvdmYgc3RhdHMJCSovCisJc3RydWN0IGJmYV9scHNfcwkqbHBzOwkvKiAgbHBvcnQgbG9naW4gc2VydmljZXMJKi8KKwl1OAlmYWJyaWNfaXBfYWRkcltCRkFfRkNTX0ZBQlJJQ19JUEFERFJfU1pdOyAgLyogIGF0dGFjaGVkCisJCQkJCQkJICAgICogZmFicmljJ3MgaXAgYWRkcgorCQkJCQkJCSAgICAqLworfTsKKworI2RlZmluZSBiZmFfZmNzX2ZhYnJpY19ucGl2X2NhcGFibGUoX19mKSAgICAoX19mKS0+aXNfbnBpdgorI2RlZmluZSBiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChfX2YpCQkJXAorCSgoX19mKS0+ZmFiX3R5cGUgPT0gQkZBX0ZDU19GQUJSSUNfU1dJVENIRUQpCisKKy8qKgorICogICBUaGUgZGVzaWduIGNhbGxzIGZvciBhIHNpbmdsZSBpbXBsZW1lbnRhdGlvbiBvZiBiYXNlIGZhYnJpYyBhbmQgdmYuCisgKi8KKyNkZWZpbmUgYmZhX2Zjc192Zl90IHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zCisKK3N0cnVjdCBiZmFfdmZfZXZlbnRfcyB7CisJdTMyICAgICAgICB1bmRlZmluZWQ7Cit9OworCisvKioKKyAqIGJmYSBmY3MgdmYgcHVibGljIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgYmZhX2Zjc192Zl9tb2RlX2VuYWJsZShzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192Zl9tb2RlX2Rpc2FibGUoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3ZmX2NyZWF0ZShiZmFfZmNzX3ZmX3QgKnZmLCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCQkgICAgICAgdTE2IHZmX2lkLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJICAgICAgIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydik7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192Zl9kZWxldGUoYmZhX2Zjc192Zl90ICp2Zik7Cit2b2lkIGJmYV9mY3NfdmZfc3RhcnQoYmZhX2Zjc192Zl90ICp2Zik7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192Zl9zdG9wKGJmYV9mY3NfdmZfdCAqdmYpOwordm9pZCBiZmFfZmNzX3ZmX2xpc3Qoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgKnZmX2lkcywgaW50ICpudmZzKTsKK3ZvaWQgYmZhX2Zjc192Zl9saXN0X2FsbChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiAqdmZfaWRzLCBpbnQgKm52ZnMpOwordm9pZCBiZmFfZmNzX3ZmX2dldF9hdHRyKGJmYV9mY3NfdmZfdCAqdmYsIHN0cnVjdCBiZmFfdmZfYXR0cl9zICp2Zl9hdHRyKTsKK3ZvaWQgYmZhX2Zjc192Zl9nZXRfc3RhdHMoYmZhX2Zjc192Zl90ICp2ZiwKKwkJCSAgc3RydWN0IGJmYV92Zl9zdGF0c19zICp2Zl9zdGF0cyk7Cit2b2lkIGJmYV9mY3NfdmZfY2xlYXJfc3RhdHMoYmZhX2Zjc192Zl90ICp2Zik7Cit2b2lkIGJmYV9mY3NfdmZfZ2V0X3BvcnRzKGJmYV9mY3NfdmZfdCAqdmYsIHd3bl90IHZwd3duW10sIGludCAqbnBvcnRzKTsKK2JmYV9mY3NfdmZfdCAqYmZhX2Zjc192Zl9sb29rdXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpOworc3RydWN0IGJmYWRfdmZfcyAqYmZhX2Zjc192Zl9nZXRfZHJ2X3ZmKGJmYV9mY3NfdmZfdCAqdmYpOworCisjZW5kaWYgLyogX19CRkFfRkNTX0ZBQlJJQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcxOWYyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mY3BpbS5oCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfZmNwaW0uaCBCRkEgRkNTIEZDUCBJbml0aWF0b3IgTW9kZSBpbnRlcmZhY2VzL2RlZmluZXMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfRkNQSU1fSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19GQ1BJTV9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pdG5pbS5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfcnBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGJmYV9mY3BpbS5oPgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYWRfaXRuaW1fczsKKworc3RydWN0IGJmYV9mY3NfaXRuaW1fcyB7CisJYmZhX3NtX3QJCXNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zIAkqcnBvcnQ7CQkvKiAgcGFyZW50IHJlbW90ZSBycG9ydCAgKi8KKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgCSppdG5pbV9kcnY7CS8qICBkcml2ZXIgcGVlciBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAJKmZjczsJCS8qICBmY3MgaW5zdGFuY2UgICAgICAgICAqLworCXN0cnVjdCBiZmFfdGltZXJfcyAJdGltZXI7CQkvKiAgdGltZXIgZnVuY3Rpb25zICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX3MgCSpiZmFfaXRuaW07CS8qICBCRkEgaXRuaW0gc3RydWN0ICAgICAqLworCWJmYV9ib29sZWFuX3QJIAlzZXFfcmVjOwkvKiAgc2VxIHJlY292ZXJ5IHN1cHBvcnQgKi8KKwliZmFfYm9vbGVhbl90CSAJcmVjX3N1cHBvcnQ7CS8qICBSRUMgc3VwcG9ydGVkICAgICAgICAqLworCWJmYV9ib29sZWFuX3QJIAljb25mX2NvbXA7CS8qICBGQ1BfQ09ORiAgICAgc3VwcG9ydCAqLworCWJmYV9ib29sZWFuX3QJIAl0YXNrX3JldHJ5X2lkOwkvKiAgdGFzayByZXRyeSBpZCBzdXBwICAgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgCWZjeHBfd3FlOwkvKiAgd2FpdCBxZWxlbSBmb3IgZmN4cCAgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsJCS8qICBGQ1hQIGluIHVzZSAgICAgICAgICAqLworCXN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcyAJc3RhdHM7CS8qICBpdG4gc3RhdGlzdGljcyAgICAgICAqLworfTsKKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZmFkX3BvcnRfcyAqCitiZmFfZmNzX2l0bmltX2dldF9kcnZwb3J0KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPnBvcnQtPmJmYWRfcG9ydDsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqCitiZmFfZmNzX2l0bmltX2dldF9wb3J0KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPnBvcnQ7Cit9CisKKworc3RhdGljIGlubGluZSB3d25fdAorYmZhX2Zjc19pdG5pbV9nZXRfbnd3bihzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5ud3duOworfQorCisKK3N0YXRpYyBpbmxpbmUgd3duX3QKK2JmYV9mY3NfaXRuaW1fZ2V0X3B3d24oc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+cHd3bjsKK30KKworCitzdGF0aWMgaW5saW5lIHUzMgorYmZhX2Zjc19pdG5pbV9nZXRfZmNpZChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5waWQ7Cit9CisKKworc3RhdGljIGlubGluZSAgIHUzMgorYmZhX2Zjc19pdG5pbV9nZXRfbWF4ZnJzaXplKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPm1heGZyc2l6ZTsKK30KKworCitzdGF0aWMgaW5saW5lICAgZW51bSBmY19jb3MKK2JmYV9mY3NfaXRuaW1fZ2V0X2NvcyhzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5mY19jb3M7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhZF9pdG5pbV9zICoKK2JmYV9mY3NfaXRuaW1fZ2V0X2Rydml0bihzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPml0bmltX2RydjsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZmFfaXRuaW1fcyAqCitiZmFfZmNzX2l0bmltX2dldF9oYWxpdG4oc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5iZmFfaXRuaW07Cit9CisKKy8qKgorICogYmZhIGZjcyBGQ1AgSW5pdGlhdG9yIG1vZGUgQVBJIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV9mY3NfaXRuaW1fZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQlzdHJ1Y3QgYmZhX2l0bmltX2F0dHJfcyAqYXR0cik7Cit2b2lkIGJmYV9mY3NfaXRuaW1fZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zICpzdGF0cyk7CitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICpiZmFfZmNzX2l0bmltX2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCBycHd3bik7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc19pdG5pbV9hdHRyX2dldChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duLAorCQkJc3RydWN0IGJmYV9pdG5pbV9hdHRyX3MgKmF0dHIpOworYmZhX3N0YXR1c190IGJmYV9mY3NfaXRuaW1fc3RhdHNfZ2V0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24sCisJCQlzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MgKnN0YXRzKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX2l0bmltX3N0YXRzX2NsZWFyKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXd3bl90IHJwd3duKTsKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfRkNQSU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmRtaS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZkbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQxZmZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZkbWkuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfZmRtaS5oIEJGQSBmY3MgZmRtaSBtb2R1bGUgcHVibGljIGludGVyZmFjZQorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX0ZETUlfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19GRE1JX0hfXworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mZG1pLmg+CisKKyNkZWZpbmUJQkZBX0ZDU19GRE1JX1NVUE9SVEVEX1NQRUVEUyAgKEZETUlfVFJBTlNfU1BFRURfMUcgIHwgXAorCQkJCQlGRE1JX1RSQU5TX1NQRUVEXzJHIHwgXAorCQkJCQlGRE1JX1RSQU5TX1NQRUVEXzRHIHwgXAorCQkJCQlGRE1JX1RSQU5TX1NQRUVEXzhHKQorCisvKgorKiBIQkEgQXR0cmlidXRlIEJsb2NrIDogQkZBIGludGVybmFsIHJlcHJlc2VudGF0aW9uLiBOb3RlIDogU29tZSB2YXJpYWJsZQorKiBzaXplcyBoYXZlIGJlZW4gdHJpbW1lZCB0byBzdWl0IEJGQSBGb3IgRXggOiBNb2RlbCB3aWxsIGJlICJCcm9jYWRlIi4gQmFzZWQKKyAqIG9uIHRoaXMgdGhlIHNpemUgaGFzIGJlZW4gcmVkdWNlZCB0byAxNiBieXRlcyBmcm9tIHRoZSBzdGFuZGFyZCdzIDY0IGJ5dGVzLgorICovCitzdHJ1Y3QgYmZhX2Zjc19mZG1pX2hiYV9hdHRyX3MgeworCXd3bl90ICAgICAgICAgICBub2RlX25hbWU7CisJdTggICAgICAgICBtYW51ZmFjdHVyZXJbNjRdOworCXU4ICAgICAgICAgc2VyaWFsX251bVs2NF07CisJdTggICAgICAgICBtb2RlbFsxNl07CisJdTggICAgICAgICBtb2RlbF9kZXNjWzI1Nl07CisJdTggICAgICAgICBod192ZXJzaW9uWzhdOworCXU4ICAgICAgICAgZHJpdmVyX3ZlcnNpb25bOF07CisJdTggICAgICAgICBvcHRpb25fcm9tX3ZlcltCRkFfVkVSU0lPTl9MRU5dOworCXU4ICAgICAgICAgZndfdmVyc2lvbls4XTsKKwl1OCAgICAgICAgIG9zX25hbWVbMjU2XTsKKwl1MzIgICAgICAgIG1heF9jdF9weWxkOworfTsKKworLyoKKyAqIFBvcnQgQXR0cmlidXRlIEJsb2NrCisgKi8KK3N0cnVjdCBiZmFfZmNzX2ZkbWlfcG9ydF9hdHRyX3MgeworCXU4ICAgICAgICAgc3VwcF9mYzRfdHlwZXNbMzJdOwkvKiBzdXBwb3J0ZWQgRkM0IHR5cGVzICovCisJdTMyICAgICAgICBzdXBwX3NwZWVkOwkvKiBzdXBwb3J0ZWQgc3BlZWQgKi8KKwl1MzIgICAgICAgIGN1cnJfc3BlZWQ7CS8qIGN1cnJlbnQgU3BlZWQgKi8KKwl1MzIgICAgICAgIG1heF9mcm1fc2l6ZTsJLyogbWF4IGZyYW1lIHNpemUgKi8KKwl1OCAgICAgICAgIG9zX2RldmljZV9uYW1lWzI1Nl07CS8qIE9TIGRldmljZSBOYW1lICovCisJdTggICAgICAgICBob3N0X25hbWVbMjU2XTsJLyogaG9zdCBuYW1lICovCit9OworCisjZW5kaWYgLyogX19CRkFfRkNTX0ZETUlfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWNiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfbHBvcnQuaApAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3BvcnQuaCBCRkEgZmNzIHBvcnQgbW9kdWxlIHB1YmxpYyBpbnRlcmZhY2UKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19QT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcnBvcnQuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfd2MuaD4KKworc3RydWN0IGJmYV9mY3NfczsKK3N0cnVjdCBiZmFfZmNzX2ZhYnJpY19zOworCisvKgorKiBAdG9kbyA6IG5lZWQgdG8gbW92ZSB0byBhIGdsb2JhbCBjb25maWcgZmlsZS4KKyAqIE1heGltdW0gVnBvcnRzIHN1cHBvcnRlZCBwZXIgcGh5c2ljYWwgcG9ydCBvciB2Zi4KKyAqLworI2RlZmluZSBCRkFfRkNTX01BWF9WUE9SVFNfU1VQUF9DQiAgMjU1CisjZGVmaW5lIEJGQV9GQ1NfTUFYX1ZQT1JUU19TVVBQX0NUICAxOTEKKworLyoKKyogQHRvZG8gOiBuZWVkIHRvIG1vdmUgdG8gYSBnbG9iYWwgY29uZmlnIGZpbGUuCisgKiBNYXhpbXVtIFJwb3J0cyBzdXBwb3J0ZWQgcGVyIHBvcnQgKHBoeXNpY2FsL2xvZ2ljYWwpLgorICovCisjZGVmaW5lIEJGQV9GQ1NfTUFYX1JQT1JUU19TVVBQICAyNTYJLyogQHRvZG8gOiB0ZW50YXRpdmUgdmFsdWUgKi8KKworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgeworCWJmYV9zbV90ICAgICAgICBzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBwb3J0ICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIGZjeHBfd3FlOworfTsKKworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zIHsKKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CS8qICBwYXJlbnQgcG9ydCAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgeworCWJmYV9zbV90ICAgICAgICBzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXM7CS8qICBwYXJlbnQgbXMgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7CisJdTggICAgICAgICByZXRyeV9jbnQ7CS8qICByZXRyeSBjb3VudCAqLworCXU4CSAJICAgcnN2ZFszXTsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zIHsKKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CS8qICBwYXJlbnQgcG9ydCAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyBmZG1pOwkvKiAgRkRNSSBjb21wb25lbnQgb2YgTVMgKi8KKwl1OCAgICAgICAgIHJldHJ5X2NudDsJLyogIHJldHJ5IGNvdW50ICovCisJdTgJIAkgICByc3ZkWzNdOworfTsKKworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZhYl9zIHsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgbnM7CS8qICBOUyBjb21wb25lbnQgb2YgcG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3Mgc2NuOwkvKiAgc2NuIGNvbXBvbmVudCBvZiBwb3J0ICovCisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zIG1zOwkvKiAgTVMgY29tcG9uZW50IG9mIHBvcnQgKi8KK307CisKKworCisjZGVmaW5lIAlNQVhfQUxQQV9DT1VOVCAJCTEyNworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X2xvb3BfcyB7CisJdTggICAgICAgICBudW1fYWxwYTsJLyogIE51bSBvZiBBTFBBIGVudHJpZXMgaW4gdGhlIG1hcCAqLworCXU4ICAgICAgICAgYWxwYV9wb3NfbWFwW01BWF9BTFBBX0NPVU5UXTsJLyogIEFMUEEgUG9zaXRpb25hbAorCQkJCQkJCSAqTWFwICovCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IHBvcnQgKi8KK307CisKKworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X24ybl9zIHsKKwl1MzIgICAgICAgIHJzdmQ7CisJdTE2ICAgICAgICByZXBseV9veGlkOwkvKiAgb3hfaWQgZnJvbSB0aGUgcmVxIGZsb2dpIHRvIGJlCisJCQkJCSAqdXNlZCBpbiBmbG9naSBhY2MgKi8KKwl3d25fdCAgICAgICAgICAgcmVtX3BvcnRfd3duOwkvKiAgQXR0YWNoZWQgcG9ydCdzIHd3biAqLworfTsKKworCit1bmlvbiBiZmFfZmNzX3BvcnRfdG9wb191IHsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZhYl9zIHBmYWI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9sb29wX3MgcGxvb3A7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyBwbjJuOworfTsKKworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBxZTsJLyogIHVzZWQgYnkgcG9ydC92cG9ydCAqLworCWJmYV9zbV90ICAgICAgICAgICAgICAgc207CS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsJLyogIHBhcmVudCBmYWJyaWMgKi8KKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgIHBvcnRfY2ZnOwkvKiAgcG9ydCBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGJmYV90aW1lcl9zIGxpbmtfdGltZXI7CS8qICB0aW1lciBmb3IgbGluayBvZmZsaW5lICovCisJdTMyICAgICAgICBwaWQgOiAyNDsJLyogIEZDIGFkZHJlc3MgKi8KKwl1OCAgICAgICAgIGxwX3RhZzsJCS8qICBscG9ydCB0YWcgKi8KKwl1MTYgICAgICAgIG51bV9ycG9ydHM7CS8qICBOdW0gb2Ygci1wb3J0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgcnBvcnRfcTsJLyogIHF1ZXVlIG9mIGRpc2NvdmVyZWQgci1wb3J0cyAqLworCXN0cnVjdCBiZmFfZmNzX3MgKmZjczsJLyogIEZDUyBpbnN0YW5jZSAqLworCXVuaW9uIGJmYV9mY3NfcG9ydF90b3BvX3UgcG9ydF90b3BvOwkvKiAgZmFicmljL2xvb3AvbjJuIGRldGFpbHMgKi8KKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgKmJmYWRfcG9ydDsJLyogIGRyaXZlciBwZWVyIGluc3RhbmNlICovCisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CS8qICBOVUxMIGZvciBiYXNlIHBvcnRzICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIGZjeHBfd3FlOworCXN0cnVjdCBiZmFfcG9ydF9zdGF0c19zIHN0YXRzOworCXN0cnVjdCBiZmFfd2NfcyAgICAgICAgd2M7CS8qICB3YWl0aW5nIGNvdW50ZXIgZm9yIGV2ZW50cyAqLworfTsKKworI2RlZmluZSBiZmFfZmNzX2xwb3J0X3Qgc3RydWN0IGJmYV9mY3NfcG9ydF9zCisKKy8qKgorICogU3ltYm9saWMgTmFtZSByZWxhdGVkIGRlZmluZXMKKyAqICBUb3RhbCBieXRlcyAyNTUuCisgKiAgUGh5c2ljYWwgUG9ydCdzIHN5bWJvbGljIG5hbWUgMTI4IGJ5dGVzLgorICogIEZvciBWcG9ydHMsIFZwb3J0J3Mgc3ltYm9saWMgbmFtZSBpcyBhcHBlbmRlZCB0byB0aGUgUGh5c2ljYWwgcG9ydCdzCisgKiAgU3ltYm9saWMgTmFtZS4KKyAqCisgKiAgUGh5c2ljYWwgUG9ydCdzIHN5bWJvbGljIG5hbWUgRm9ybWF0IDogKFRvdGFsIDEyOCBieXRlcykKKyAqICBBZGFwdGVyIE1vZGVsIG51bWJlci9uYW1lIDogMTIgYnl0ZXMKKyAqICBEcml2ZXIgVmVyc2lvbiAgICAgOiAxMCBieXRlcworICogIEhvc3QgTWFjaGluZSBOYW1lICA6IDMwIGJ5dGVzCisgKiAJSG9zdCBPUyBJbmZvCSAgIDogNDggYnl0ZXMKKyAqIAlIb3N0IE9TIFBBVENIIEluZm8gOiAxNiBieXRlcworICogICggcmVtYWluaW5nIDEyIGJ5dGVzIHJlc2VydmVkIHRvIGJlIHVzZWQgZm9yIHNlcGFyYXRvcikKKyAqLworI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SIAkJIiB8ICIKKworI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfTU9ERUxfU1oJCQkxMgorI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfVkVSU0lPTl9TWiAJCTEwCisjZGVmaW5lIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9NQUNISU5FTkFNRV9TWiAJMzAKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX09TSU5GT19TWgkJCTQ4CisjZGVmaW5lIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU1BBVENIX1NaCQkxNgorCisvKioKKyAqIEdldCBGQyBwb3J0IElEIGZvciBhIGxvZ2ljYWwgcG9ydC4KKyAqLworI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQoX2xwb3J0KQkoKF9scG9ydCktPnBpZCkKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9wd3duKF9scG9ydCkJKChfbHBvcnQpLT5wb3J0X2NmZy5wd3duKQorI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X253d24oX2xwb3J0KQkoKF9scG9ydCktPnBvcnRfY2ZnLm53d24pCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lKF9scG9ydCkJKChfbHBvcnQpLT5wb3J0X2NmZy5zeW1fbmFtZSkKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihfbHBvcnQpCVwKKwkJCSgoX2xwb3J0KS0+cG9ydF9jZmcucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2lzX3RhcmdldChfbHBvcnQpCVwKKwkJCSgoX2xwb3J0KS0+cG9ydF9jZmcucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9ucnBvcnRzKF9scG9ydCkJXAorCQkJKChfbHBvcnQpID8gKF9scG9ydCktPm51bV9ycG9ydHMgOiAwKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZmFkX3BvcnRfcyAqCitiZmFfZmNzX3BvcnRfZ2V0X2RydnBvcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXJldHVybiBwb3J0LT5iZmFkX3BvcnQ7Cit9CisKKworI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X29wZXJ0eXBlKF9scG9ydCkJKF9scG9ydCktPmZhYnJpYy0+b3Blcl90eXBlCisKKworI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19uYW1lKF9scG9ydCkJKF9scG9ydCktPmZhYnJpYy0+ZmFicmljX25hbWUKKworCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX2lwYWRkcihfbHBvcnQpCShfbHBvcnQpLT5mYWJyaWMtPmZhYnJpY19pcF9hZGRyCisKKy8qKgorICogYmZhIGZjcyBwb3J0IHB1YmxpYyBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfZmNzX2NmZ19iYXNlX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZyk7CitzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0cyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCBycG9ydF93d25zW10sIGludCAqbnJwb3J0cyk7CisKK3d3bl90IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCB3d24sCisJCQlpbnQgaW5kZXgsIGludCBucnBvcnRzLCBiZmFfYm9vbGVhbl90IGJ3d24pOworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmJmYV9mY3NfbG9va3VwX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJdTE2IHZmX2lkLCB3d25fdCBscHd3bik7CisKK3ZvaWQgYmZhX2Zjc19wb3J0X2dldF9pbmZvKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBiZmFfcG9ydF9pbmZvX3MgKnBvcnRfaW5mbyk7Cit2b2lkIGJmYV9mY3NfcG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3BvcnRfYXR0cl9zICpwb3J0X2F0dHIpOwordm9pZCBiZmFfZmNzX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQsCisJCQlzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyAqcG9ydF9zdGF0cyk7Cit2b2lkIGJmYV9mY3NfcG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KTsKK2VudW0gYmZhX3Bwb3J0X3NwZWVkIGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfbWF4X3NwZWVkKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2VuYWJsZV9pcGZjX3JvbGVzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfZGlzYWJsZV9pcGZjX3JvbGVzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpOworCisjZW5kaWYgLyogX19CRkFfRkNTX1BPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfcnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19ycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMmI5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfcnBvcnQuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19SUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfRkNTX1JQT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ycG9ydC5oPgorCisjZGVmaW5lIEJGQV9GQ1NfUlBPUlRfREVGX0RFTF9USU1FT1VUIAk5MCAJLyogaW4gc2VjcyAqLworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBiZmFkX3Jwb3J0X3M7CisKK3N0cnVjdCBiZmFfZmNzX2l0bmltX3M7CitzdHJ1Y3QgYmZhX2Zjc190aW5fczsKK3N0cnVjdCBiZmFfZmNzX2lwcnBfczsKKworLyogUnBvcnQgRmVhdHVyZXMgKFJQRikgKi8KK3N0cnVjdCBiZmFfZmNzX3JwZl9zIHsKKwliZmFfc21fdCAgICAgICAgICAgICAgIHNtOwkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OwkvKiAgcGFyZW50IHJwb3J0ICovCisJc3RydWN0IGJmYV90aW1lcl9zIAl0aW1lcjsJLyogIGdlbmVyYWwgcHVycG9zZSB0aW1lciAqLworCXN0cnVjdCBiZmFfZmN4cF9zIAkqZmN4cDsJLyogIEZDWFAgbmVlZGVkIGZvciBkaXNjYXJkaW5nICovCisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIAlmY3hwX3dxZTsJLyogIGZjeHAgd2FpdCBxdWV1ZSBlbGVtZW50ICovCisJaW50ICAgICAgICAgICAgIAlycHNjX3JldHJpZXM7CS8qICBtYXggUlBTQyByZXRyeSBhdHRlbXB0cyAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIAlycHNjX3NwZWVkOwkvKiBDdXJyZW50IFNwZWVkIGZyb20gUlBTQy4KKwkJCQkJCSAqIE8gaWYgUlBTQyBmYWlscyAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkCWFzc2lnbmVkX3NwZWVkOwkvKiBTcGVlZCBhc3NpZ25lZCBieSB0aGUgdXNlci4KKwkJCQkJCSAqIHdpbGwgYmUgdXNlZCBpZiBSUFNDIGlzIG5vdAorCQkJCQkJICogc3VwcG9ydGVkIGJ5IHRoZSBycG9ydCAqLworfTsKKworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHFlOwkvKiAgdXNlZCBieSBwb3J0L3Zwb3J0ICovCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IEZDUyBwb3J0ICovCisJc3RydWN0IGJmYV9mY3NfcyAgICAgICpmY3M7CS8qICBmY3MgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhZF9ycG9ydF9zICAgKnJwX2RydjsJLyogIGRyaXZlciBwZWVyIGluc3RhbmNlICovCisJdTMyICAgICAgICBwaWQ7CS8qICBwb3J0IElEIG9mIHJwb3J0ICovCisJdTE2ICAgICAgICBtYXhmcnNpemU7CS8qICBtYXhpbXVtIGZyYW1lIHNpemUgKi8KKwl1MTYgICAgICAgIHJlcGx5X294aWQ7CS8qICBPWF9JRCBvZiBpbmJvdW5kIHJlcXVlc3RzICovCisJZW51bSBmY19jb3MgICAgICAgIGZjX2NvczsJLyogIEZDIGNsYXNzZXMgb2Ygc2VydmljZSBzdXBwICovCisJYmZhX2Jvb2xlYW5fdCAgIGNpc2M7CS8qICBDSVNDIGNhcGFibGUgZGV2aWNlICovCisJd3duX3QgICAgICAgICAgIHB3d247CS8qICBwb3J0IHd3biBvZiBycG9ydCAqLworCXd3bl90ICAgICAgICAgICBud3duOwkvKiAgbm9kZSB3d24gb2YgcnBvcnQgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3N5bW5hbWVfcyBwc3ltX25hbWU7IC8qICBwb3J0IHN5bWJvbGljIG5hbWUgICovCisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CS8qICBnZW5lcmFsIHB1cnBvc2UgdGltZXIgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbTsJLyogIElUTiBpbml0aWF0b3IgbW9kZSByb2xlICovCisJc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbjsJLyogIElUTiBpbml0aWF0b3IgbW9kZSByb2xlICovCisJc3RydWN0IGJmYV9mY3NfaXBycF9zICppcHJwOwkvKiAgSVAvRkMgcm9sZSAqLworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0OwkvKiAgQkZBIFJwb3J0ICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CS8qICBGQ1hQIG5lZWRlZCBmb3IgZGlzY2FyZGluZyAqLworCWludCAgICAgICAgICAgICBwbG9naV9yZXRyaWVzOwkvKiAgbWF4IHBsb2dpIHJldHJ5IGF0dGVtcHRzICovCisJaW50ICAgICAgICAgICAgIG5zX3JldHJpZXM7CS8qICBtYXggTlMgcXVlcnkgcmV0cnkgYXR0ZW1wdHMgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgCWZjeHBfd3FlOyAvKiAgZmN4cCB3YWl0IHF1ZXVlIGVsZW1lbnQgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3N0YXRzX3Mgc3RhdHM7CS8qICBycG9ydCBzdGF0cyAqLworCWVudW0gYmZhX3Jwb3J0X2Z1bmN0aW9uCXNjc2lfZnVuY3Rpb247ICAvKiAgSW5pdGlhdG9yL1RhcmdldCAqLworCXN0cnVjdCBiZmFfZmNzX3JwZl9zIHJwZjsgCS8qIFJwb3J0IGZlYXR1cmVzIG1vZHVsZSAqLworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhX3Jwb3J0X3MgKgorYmZhX2Zjc19ycG9ydF9nZXRfaGFscnBvcnQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJcmV0dXJuIHJwb3J0LT5iZmFfcnBvcnQ7Cit9CisKKy8qKgorICogYmZhIGZjcyBycG9ydCBBUEkgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Jwb3J0X2FkZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90ICpwd3duLAorCQkJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhZF9ycG9ydF9zICpycG9ydF9kcnYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfcnBvcnRfcmVtb3ZlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfYXR0cl9zICphdHRyKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3N0YXRzX3MgKnN0YXRzKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3Jwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCBycHd3bik7CitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3Jwb3J0X2xvb2t1cF9ieV9ud3duKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBybnd3bik7Cit2b2lkIGJmYV9mY3NfcnBvcnRfc2V0X2RlbF90aW1lb3V0KHU4IHJwb3J0X3Rtbyk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfc2V0X3NwZWVkKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpOworI2VuZGlmIC8qIF9fQkZBX0ZDU19SUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc192cG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Zwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzM2YyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc192cG9ydC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc192cG9ydC5oIEJGQSBmY3MgdnBvcnQgbW9kdWxlIHB1YmxpYyBpbnRlcmZhY2UKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19WUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfRkNTX1ZQT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl92cG9ydC5oPgorCitzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxZTsJCS8qICBxdWV1ZSBlbGVtCSAqLworCWJmYV9zbV90CQlzbTsJCS8qICBzdGF0ZSBtYWNoaW5lCSovCisJYmZhX2Zjc19scG9ydF90CQlscG9ydDsJCS8qICBsb2dpY2FsIHBvcnQJKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MJdGltZXI7CQkvKiAgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCisJc3RydWN0IGJmYWRfdnBvcnRfcwkqdnBvcnRfZHJ2OwkvKiAgRHJpdmVyIHByaXZhdGUJKi8KKwlzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MgdnBvcnRfc3RhdHM7CS8qICB2cG9ydCBzdGF0aXN0aWNzCSovCisJc3RydWN0IGJmYV9scHNfcwkqbHBzOwkJLyogIExwb3J0IGxvZ2luIHNlcnZpY2UgKi8KKwlpbnQJCQlmZGlzY19yZXRyaWVzOworfTsKKworI2RlZmluZSBiZmFfZmNzX3Zwb3J0X2dldF9wb3J0KHZwb3J0KSBcCisJCQkoKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAgKikoJnZwb3J0LT5wb3J0KSkKKworLyoqCisgKiBiZmEgZmNzIHZwb3J0IHB1YmxpYyBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190IGJmYV9mY3NfdnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQsCisJCQlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnRfZHJ2KTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9zdGFydChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9zdG9wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCXN0cnVjdCBiZmFfdnBvcnRfYXR0cl9zICp2cG9ydF9hdHRyKTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MgKnZwb3J0X3N0YXRzKTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9jbHJfc3RhdHMoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqYmZhX2Zjc192cG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJdTE2IHZmX2lkLCB3d25fdCB2cHd3bik7CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfVlBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfZmNzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfZmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmNWRmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19mY3MuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEZDUyBNb2R1bGUKKyAqLworI2lmbmRlZglfX0JGQV9MT0dfRkNTX0hfXworI2RlZmluZQlfX0JGQV9MT0dfRkNTX0hfXworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjZGVmaW5lIEJGQV9MT0dfRkNTX0ZBQlJJQ19OT1NXSVRDSCAJXAorCSgoKHUzMikgQkZBX0xPR19GQ1NfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMSkKKyNkZWZpbmUgQkZBX0xPR19GQ1NfRkFCUklDX0lTT0xBVEVEIAlcCisJKCgodTMyKSBCRkFfTE9HX0ZDU19JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAyKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfaGFsLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfaGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxMmFlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19oYWwuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgSEFMIE1vZHVsZSAqLworI2lmbmRlZglfX0JGQV9MT0dfSEFMX0hfXworI2RlZmluZQlfX0JGQV9MT0dfSEFMX0hfXworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjZGVmaW5lIEJGQV9MT0dfSEFMX0FTU0VSVCBcCisJKCgodTMyKSBCRkFfTE9HX0hBTF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAxKQorI2RlZmluZSBCRkFfTE9HX0hBTF9IRUFSVEJFQVRfRkFJTFVSRSBcCisJKCgodTMyKSBCRkFfTE9HX0hBTF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAyKQorI2RlZmluZSBCRkFfTE9HX0hBTF9GQ1BJTV9QQVJNX0lOVkFMSUQgXAorCSgoKHUzMikgQkZBX0xPR19IQUxfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMykKKyNkZWZpbmUgQkZBX0xPR19IQUxfU01fQVNTRVJUIFwKKwkoKCh1MzIpIEJGQV9MT0dfSEFMX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDQpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19saW51eC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2xpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3YzA1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19saW51eC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBMSU5VWCBNb2R1bGUgKi8KKyNpZm5kZWYJX19CRkFfTE9HX0xJTlVYX0hfXworI2RlZmluZQlfX0JGQV9MT0dfTElOVVhfSF9fCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9ERVZJQ0VfQ0xBSU1FRCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAxKQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0hBU0hfSU5JVF9GQUlMRUQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMikKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9TWVNGU19GQUlMRUQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMykKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9NRU1fQUxMT0NfRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDQpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfRFJJVkVSX1JFR0lTVFJBVElPTl9GQUlMRUQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNSkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9JVE5JTV9GUkVFIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDYpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfSVROSU1fT05MSU5FIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDcpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfSVROSU1fT0ZGTElORSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA4KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX1NDU0lfSE9TVF9GUkVFIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDkpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfU0NTSV9BQk9SVCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAxMCkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9TQ1NJX0FCT1JUX0NPTVAgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMTEpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ193ZHJ2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfd2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOWE5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfd2Rydi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIG1lc3NhZ2VzIGRlZmluZSBmb3IgV0RSViBNb2R1bGUKKyAqLworI2lmbmRlZglfX0JGQV9MT0dfV0RSVl9IX18KKyNkZWZpbmUJX19CRkFfTE9HX1dEUlZfSF9fCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNkZWZpbmUgQkZBX0xPR19XRFJWX0lPQ19JTklUX0VSUk9SIAlcCisJKCgodTMyKSBCRkFfTE9HX1dEUlZfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMSkKKyNkZWZpbmUgQkZBX0xPR19XRFJWX0lPQ19JTlRFUk5BTF9FUlJPUiBcCisJKCgodTMyKSBCRkFfTE9HX1dEUlZfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMikKKyNkZWZpbmUgQkZBX0xPR19XRFJWX0lPQ19TVEFSVF9FUlJPUiAJXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDMpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfU1RPUF9FUlJPUiAJXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDQpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTIFwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA1KQorI2RlZmluZSBCRkFfTE9HX1dEUlZfQkFTRV9BRERSRVNTX01BUF9FUlJPUiBcCisJKCgodTMyKSBCRkFfTE9HX1dEUlZfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2N0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTlkNjYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2N0LmgKQEAgLTAsMCArMSw0OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0NUX0hfXworI2RlZmluZSBfX0NUX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK3N0cnVjdCBjdF9oZHJfc3sKKwl1MzIJcmV2X2lkOjg7CS8qIFJldmlzaW9uIG9mIHRoZSBDVCAqLworCXUzMglpbl9pZDoyNDsJLyogSW5pdGlhdG9yIElkICovCisJdTMyCWdzX3R5cGU6ODsJLyogR2VuZXJpYyBzZXJ2aWNlIFR5cGUgKi8KKwl1MzIJZ3Nfc3ViX3R5cGU6ODsJLyogR2VuZXJpYyBzZXJ2aWNlIHN1YiB0eXBlICovCisJdTMyCW9wdGlvbnM6ODsJLyogb3B0aW9ucyAqLworCXUzMglyc3ZyZDo4OwkvKiByZXNlcnZlZCAqLworCXUzMgljbWRfcnNwX2NvZGU6MTY7LyogY3QgY29tbWFuZC9yZXNwb25zZSBjb2RlICovCisJdTMyCW1heF9yZXNfc2l6ZToxNjsvKiBtYXhpbXVtL3Jlc2lkdWFsIHNpemUgKi8KKwl1MzIJZnJhZ19pZDo4OwkvKiBmcmFnbWVudCBJRCAqLworCXUzMglyZWFzb25fY29kZTo4OwkvKiByZWFzb24gY29kZSAqLworCXUzMglleHBfY29kZTo4OwkvKiBleHBsYW5hdGlvbiBjb2RlICovCisJdTMyCXZlbmRvcl91bnE6ODsJLyogdmVuZG9yIHVuaXF1ZSAqLworfTsKKworLyoKKyAqIGRlZmluZXMgZm9yIHRoZSBSZXZpc2lvbgorICovCitlbnVtIHsKKwlDVF9HUzNfUkVWSVNJT04gPSAweDAxLAorfTsKKworLyoKKyAqIGRlZmluZXMgZm9yIGdzX3R5cGUKKyAqLworZW51bSB7CisJQ1RfR1NUWVBFX0tFWVNFUlZJQ0UJPSAweEY3LAorCUNUX0dTVFlQRV9BTElBU1NFUlZJQ0UJPSAweEY4LAorCUNUX0dTVFlQRV9NR01UU0VSVklDRQk9IDB4RkEsCisJQ1RfR1NUWVBFX1RJTUVTRVJWSUNFCT0gMHhGQiwKKwlDVF9HU1RZUEVfRElSU0VSVklDRQk9IDB4RkMsCit9OworCisvKgorICogZGVmaW5lcyBmb3IgZ3Nfc3ViX3R5cGUgZm9yIGdzIHR5cGUgZGlyZWN0b3J5IHNlcnZpY2UKKyAqLworZW51bSB7CisJQ1RfR1NTVUJUWVBFX05BTUVTRVJWRVIgPSAweDAyLAorfTsKKworLyoKKyAqIGRlZmluZXMgZm9yIGdzX3N1Yl90eXBlIGZvciBncyB0eXBlIG1hbmFnZW1lbnQgc2VydmljZQorICovCitlbnVtIHsKKwlDVF9HU1NVQlRZUEVfQ0ZHU0VSVkVSCT0gMHgwMSwKKwlDVF9HU1NVQlRZUEVfVU5aT05FRF9OUyA9IDB4MDIsCisJQ1RfR1NTVUJUWVBFX1pPTkVTRVJWRVIgPSAweDAzLAorCUNUX0dTU1VCVFlQRV9MT0NLU0VSVkVSID0gMHgwNCwKKwlDVF9HU1NVQlRZUEVfSEJBX01HTVRTRVJWRVIgPSAweDEwLAkvKiBmb3IgRkRNSSAqLworfTsKKworLyoKKyAqIGRlZmluZXMgZm9yIENUIHJlc3BvbnNlIGNvZGUgZmllbGQKKyAqLworZW51bSB7CisJQ1RfUlNQX1JFSkVDVCA9IDB4ODAwMSwKKwlDVF9SU1BfQUNDRVBUID0gMHg4MDAyLAorfTsKKworLyoKKyAqIGRlZmludGlvbnMgZm9yIENUIHJlYXNvbiBjb2RlCisgKi8KK2VudW0geworCUNUX1JTTl9JTlZfQ01ECQk9IDB4MDEsCisJQ1RfUlNOX0lOVl9WRVIJCT0gMHgwMiwKKwlDVF9SU05fTE9HSUNfRVJSCT0gMHgwMywKKwlDVF9SU05fSU5WX1NJWkUJCT0gMHgwNCwKKwlDVF9SU05fTE9HSUNBTF9CVVNZCT0gMHgwNSwKKwlDVF9SU05fUFJPVE9fRVJSCT0gMHgwNywKKwlDVF9SU05fVU5BQkxFX1RPX1BFUkYJPSAweDA5LAorCUNUX1JTTl9OT1RfU1VQUAkJCT0gMHgwQiwKKwlDVF9SU05fU0VSVkVSX05PVF9BVkJMICA9IDB4MEQsCisJQ1RfUlNOX1NFU1NJT05fQ09VTERfTk9UX0JFX0VTVEJEID0gMHgwRSwKKwlDVF9SU05fVkVORE9SX1NQRUNJRklDICA9IDB4RkYsCisKK307CisKKy8qCisgKiBkZWZpbml0aW9ucyBmb3IgZXhwbGFuYXRpb25zIGNvZGUgZm9yIE5hbWUgc2VydmVyCisgKi8KK2VudW0geworCUNUX05TX0VYUF9OT0FERElUSU9OQUwJPSAweDAwLAorCUNUX05TX0VYUF9JRF9OT1RfUkVHCT0gMHgwMSwKKwlDVF9OU19FWFBfUE5fTk9UX1JFRwk9IDB4MDIsCisJQ1RfTlNfRVhQX05OX05PVF9SRUcJPSAweDAzLAorCUNUX05TX0VYUF9DU19OT1RfUkVHCT0gMHgwNCwKKwlDVF9OU19FWFBfSVBOX05PVF9SRUcJPSAweDA1LAorCUNUX05TX0VYUF9JUEFfTk9UX1JFRwk9IDB4MDYsCisJQ1RfTlNfRVhQX0ZUX05PVF9SRUcJPSAweDA3LAorCUNUX05TX0VYUF9TUE5fTk9UX1JFRwk9IDB4MDgsCisJQ1RfTlNfRVhQX1NOTl9OT1RfUkVHCT0gMHgwOSwKKwlDVF9OU19FWFBfUFRfTk9UX1JFRwk9IDB4MEEsCisJQ1RfTlNfRVhQX0lQUF9OT1RfUkVHCT0gMHgwQiwKKwlDVF9OU19FWFBfRlBOX05PVF9SRUcJPSAweDBDLAorCUNUX05TX0VYUF9IQV9OT1RfUkVHCT0gMHgwRCwKKwlDVF9OU19FWFBfRkRfTk9UX1JFRwk9IDB4MEUsCisJQ1RfTlNfRVhQX0ZGX05PVF9SRUcJPSAweDBGLAorCUNUX05TX0VYUF9BQ0NFU1NERU5JRUQJPSAweDEwLAorCUNUX05TX0VYUF9VTkFDQ0VQVEFCTEVfSUQgPSAweDExLAorCUNUX05TX0VYUF9EQVRBQkFTRUVNUFRZCQkJPSAweDEyLAorCUNUX05TX0VYUF9OT1RfUkVHX0lOX1NDT1BFIAkJPSAweDEzLAorCUNUX05TX0VYUF9ET01fSURfTk9UX1BSRVNFTlQgCT0gMHgxNCwKKwlDVF9OU19FWFBfUE9SVF9OVU1fTk9UX1BSRVNFTlQgID0gMHgxNSwKKwlDVF9OU19FWFBfTk9fREVWSUNFX0FUVEFDSEVEIAk9IDB4MTYKK307CisKKy8qCisgKiBkZWZpbnRpb25zIGZvciB0aGUgZXhwbGFuYXRpb24gY29kZSBmb3IgYWxsIHNlcnZlcnMKKyAqLworZW51bSB7CisJQ1RfRVhQX0FVVEhfRVhDRVBUSU9OCQkJPSAweEYxLAorCUNUX0VYUF9EQl9GVUxMCQkJCQk9IDB4RjIsCisJQ1RfRVhQX0RCX0VNUFRZCQkJCQk9IDB4RjMsCisJQ1RfRVhQX1BST0NFU1NJTkdfUkVRCQkJPSAweEY0LAorCUNUX0VYUF9VTkFCTEVfVE9fVkVSSUZZX0NPTk4JPSAweEY1LAorCUNUX0VYUF9ERVZJQ0VTX05PVF9JTl9DTU5fWk9ORSAgPSAweEY2Cit9OworCisvKgorICogQ29tbWFuZCBjb2RlcyBmb3IgTmFtZSBzZXJ2ZXIKKyAqLworZW51bSB7CisJR1NfR0lEX1BOCT0gMHgwMTIxLAkvKiBHZXQgSWQgb24gcG9ydCBuYW1lICovCisJR1NfR1BOX0lECT0gMHgwMTEyLAkvKiBHZXQgcG9ydCBuYW1lIG9uIElEICovCisJR1NfR05OX0lECT0gMHgwMTEzLAkvKiBHZXQgbm9kZSBuYW1lIG9uIElEICovCisJR1NfR0lEX0ZUCT0gMHgwMTcxLAkvKiBHZXQgSWQgb24gRkM0IHR5cGUgKi8KKwlHU19HU1BOX0lECT0gMHgwMTE4LAkvKiBHZXQgc3ltYm9saWMgUE4gb24gSUQgKi8KKwlHU19SRlRfSUQJPSAweDAyMTcsCS8qIFJlZ2lzdGVyIGZjNHR5cGUgb24gSUQgKi8KKwlHU19SU1BOX0lECT0gMHgwMjE4LAkvKiBSZWdpc3RlciBzeW1ib2xpYyBQTiBvbiBJRCAqLworCUdTX1JQTl9JRAk9IDB4MDIxMiwJLyogUmVnaXN0ZXIgcG9ydCBuYW1lICovCisJR1NfUk5OX0lECT0gMHgwMjEzLAkvKiBSZWdpc3RlciBub2RlIG5hbWUgKi8KKwlHU19SQ1NfSUQJPSAweDAyMTQsCS8qIFJlZ2lzdGVyIGNsYXNzIG9mIHNlcnZpY2UgKi8KKwlHU19SUFRfSUQJPSAweDAyMUEsCS8qIFJlZ2lzdGVyIHBvcnQgdHlwZSAqLworCUdTX0dBX05YVAk9IDB4MDEwMCwJLyogR2V0IGFsbCBuZXh0ICovCisJR1NfUkZGX0lECT0gMHgwMjFGLAkvKiBSZWdpc3RlciBGQzQgRmVhdHVyZQkJKi8KK307CisKK3N0cnVjdCBmY2dzX2lkX3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCWRhcDoyNDsJLyogcG9ydCBpZGVudGlmaWVyICovCit9OworI2RlZmluZSBmY2dzX2dwbmlkX3JlcV90IHN0cnVjdCBmY2dzX2lkX3JlcV9zCisjZGVmaW5lIGZjZ3NfZ25uaWRfcmVxX3Qgc3RydWN0IGZjZ3NfaWRfcmVxX3MKKyNkZWZpbmUgZmNnc19nc3BuaWRfcmVxX3Qgc3RydWN0IGZjZ3NfaWRfcmVxX3MKKworc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3N7CisJd3duX3QJcG9ydF9uYW1lOwkvKiBwb3J0IHd3biAqLworfTsKKworc3RydWN0IGZjZ3NfZ2lkcG5fcmVzcF9zeworCXUzMglyc3ZkOjg7CisJdTMyCWRhcDoyNDsJLyogcG9ydCBpZGVudGlmaWVyICovCit9OworCisvKioKKyAqIFJGVF9JRAorICovCitzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyB7CisJdTMyCXJzdmQ6ODsKKwl1MzIJZGFwOjI0OwkJLyogcG9ydCBpZGVudGlmaWVyICovCisJdTMyCWZjNF90eXBlWzhdOwkvKiBmYzQgdHlwZXMgKi8KK307CisKKy8qKgorICogUkZGX0lEIDogUmVnaXN0ZXIgRkM0IGZlYXR1cmVzLgorICovCisKKyNkZWZpbmUgRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX0lOSVRJQVRPUiAgMHgwMgorI2RlZmluZSBGQ19HU19GQ1BfRkM0X0ZFQVRVUkVfVEFSR0VUCSAweDAxCisKK3N0cnVjdCBmY2dzX3JmZmlkX3JlcV9zeworICAgIHUzMiAgICByc3ZkICAgICAgICAgIDo4OworICAgIHUzMiAgICBkYXAgICAgICAgIAkgIDoyNDsJCS8qIHBvcnQgaWRlbnRpZmllcgkqLworICAgIHUzMiAgICByc3ZkMSAgICAgICAgIDoxNjsKKyAgICB1MzIgICAgZmM0ZnRyX2JpdHMgICA6ODsJCS8qIGZjNCBmZWF0dXJlIGJpdHMJKi8KKyAgICB1MzIgICAgZmM0X3R5cGUgICAgICA6ODsJCS8qIGNvcnJlc3BvbmRpbmcgRkM0IFR5cGUgKi8KK307CisKKy8qKgorICogR0lEX0ZUIFJlcXVlc3QKKyAqLworc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3N7CisJdTgJcmVzZXJ2ZWQ7CisJdTgJZG9tYWluX2lkOwkvKiBkb21haW4sIDAgLSBhbGwgZmFicmljICovCisJdTgJYXJlYV9pZDsJLyogYXJlYSwgMCAtIHdob2xlIGRvbWFpbiAqLworCXU4CWZjNF90eXBlOwkvKiBGQ19UWVBFX0ZDUCBmb3IgU0NTSSBkZXZpY2VzICovCit9OwkJCQkvKiBHSURfRlQgUmVxdWVzdCAqLworCisvKioKKyAqIEdJRF9GVCBSZXNwb25zZQorICovCitzdHJ1Y3QgZmNnc19naWRmdF9yZXNwX3MgeworCXU4CQlsYXN0OjE7CS8qIGxhc3QgcG9ydCBpZGVudGlmaWVyIGZsYWcgKi8KKwl1OAkJcmVzZXJ2ZWQ6NzsKKwl1MzIJcGlkOjI0OwkvKiBwb3J0IGlkZW50aWZpZXIgKi8KK307CQkJCS8qIEdJRF9GVCBSZXNwb25zZSAqLworCisvKioKKyAqIFJTUE5fSUQKKyAqLworc3RydWN0IGZjZ3NfcnNwbmlkX3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCWRhcDoyNDsJCS8qIHBvcnQgaWRlbnRpZmllciAqLworCXU4CQlzcG5fbGVuOwkvKiBzeW1ib2xpYyBwb3J0IG5hbWUgbGVuZ3RoICovCisJdTgJCXNwblsyNTZdOwkvKiBzeW1ib2xpYyBwb3J0IG5hbWUgKi8KK307CisKKy8qKgorICogUlBOX0lECisgKi8KK3N0cnVjdCBmY2dzX3JwbmlkX3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCXBvcnRfaWQ6MjQ7CisJd3duX3QJCXBvcnRfbmFtZTsKK307CisKKy8qKgorICogUk5OX0lECisgKi8KK3N0cnVjdCBmY2dzX3JubmlkX3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCXBvcnRfaWQ6MjQ7CisJd3duX3QJCW5vZGVfbmFtZTsKK307CisKKy8qKgorICogUkNTX0lECisgKi8KK3N0cnVjdCBmY2dzX3Jjc2lkX3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCXBvcnRfaWQ6MjQ7CisJdTMyCWNvczsKK307CisKKy8qKgorICogUlBUX0lECisgKi8KK3N0cnVjdCBmY2dzX3JwdGlkX3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCXBvcnRfaWQ6MjQ7CisJdTMyCXBvcnRfdHlwZTo4OworCXUzMglyc3ZkMToyNDsKK307CisKKy8qKgorICogR0FfTlhUIFJlcXVlc3QKKyAqLworc3RydWN0IGZjZ3NfZ2FueHRfcmVxX3N7CisJdTMyCXJzdmQ6ODsKKwl1MzIJcG9ydF9pZDoyNDsKK307CisKKy8qKgorICogR0FfTlhUIFJlc3BvbnNlCisgKi8KK3N0cnVjdCBmY2dzX2dhbnh0X3JzcF9zeworCXUzMglwb3J0X3R5cGU6ODsJLyogUG9ydCBUeXBlICovCisJdTMyCXBvcnRfaWQ6MjQ7CS8qIFBvcnQgSWRlbnRpZmllciAqLworCXd3bl90CQlwb3J0X25hbWU7CS8qIFBvcnQgTmFtZSAqLworCXU4CQlzcG5fbGVuOwkvKiBMZW5ndGggb2YgU3ltYm9saWMgUG9ydCBOYW1lICovCisJY2hhcgkJc3BuWzI1NV07CS8qIFN5bWJvbGljIFBvcnQgTmFtZSAqLworCXd3bl90CQlub2RlX25hbWU7CS8qIE5vZGUgTmFtZSAqLworCXU4CQlzbm5fbGVuOwkvKiBMZW5ndGggb2YgU3ltYm9saWMgTm9kZSBOYW1lICovCisJY2hhcgkJc25uWzI1NV07CS8qIFN5bWJvbGljIE5vZGUgTmFtZSAqLworCXU4CQlpcGFbOF07CQkvKiBJbml0aWFsIFByb2Nlc3MgQXNzb2NpYXRvciAqLworCXU4CQlpcFsxNl07CQkvKiBJUCBBZGRyZXNzICovCisJdTMyCWNvczsJCS8qIENsYXNzIG9mIFNlcnZpY2UgKi8KKwl1MzIJZmM0dHlwZXNbOF07CS8qIEZDLTQgVFlQRXMgKi8KKwl3d25fdAkJZmFicmljX3BvcnRfbmFtZTsKKwkJCQkJLyogRmFicmljIFBvcnQgTmFtZSAqLworCXUzMglyc3ZkOjg7CQkvKiBSZXNlcnZlZCAqLworCXUzMgloYXJkX2FkZHI6MjQ7CS8qIEhhcmQgQWRkcmVzcyAqLworfTsKKworLyoKKyAqIEZhYnJpYyBDb25maWcgU2VydmVyCisgKi8KKworLyoKKyAqIENvbW1hbmQgY29kZXMgZm9yIEZhYnJpYyBDb25maWd1cmF0aW9uIFNlcnZlcgorICovCitlbnVtIHsKKwlHU19GQ19HRk5fQ01ECT0gMHgwMTE0LAkvKiBHUyBGQyBHZXQgRmFicmljIE5hbWUgICovCisJR1NfRkNfR01BTF9DTUQJPSAweDAxMTYsCS8qIEdTIEZDIEdNQUwgICovCisJR1NfRkNfVFJBQ0VfQ01ECT0gMHgwNDAwLAkvKiBHUyBGQyBUcmFjZSBSb3V0ZSAqLworCUdTX0ZDX1BJTkdfQ01ECT0gMHgwNDAxLAkvKiBHUyBGQyBQaW5nICovCit9OworCisvKgorICogU291cmNlIG9yIERlc3RpbmF0aW9uIFBvcnQgVGFncy4KKyAqLworZW51bSB7CisJR1NfRlRSQUNFX1RBR19OUE9SVF9JRAkJPSAxLAorCUdTX0ZUUkFDRV9UQUdfTlBPUlRfTkFNRQk9IDIsCit9OworCisvKgorKiBQb3J0IFZhbHVlIDogQ291bGQgYmUgYSBQb3J0IGlkIG9yIHd3bgorICovCit1bmlvbiBmY2dzX3BvcnRfdmFsX3V7CisJdTMyCW5wb3J0X2lkOworCXd3bl90CQlucG9ydF93d247Cit9OworCisjZGVmaW5lIEdTX0ZUUkFDRV9NQVhfSE9QX0NPVU5UCTIwCisjZGVmaW5lIEdTX0ZUUkFDRV9SRVZJU0lPTgkxCisKKy8qCisgKiBGdHJhY2UgUmVsYXRlZCBTdHJ1Y3R1cmVzLgorICovCisKKy8qCisgKiBTVFIgKFN3aXRjaCBUcmFjZSkgUmVqZWN0IFJlYXNvbiBDb2Rlcy4gRnJvbSBGQy1TVy4KKyAqLworZW51bSB7CisJR1NfRlRSQUNFX1NUUl9DTURfQ09NUExFVEVEX1NVQ0MJPSAwLAorCUdTX0ZUUkFDRV9TVFJfQ01EX05PVF9TVVBQX0lOX05FWFRfU1dJVENILAorCUdTX0ZUUkFDRV9TVFJfTk9fUkVTUF9GUk9NX05FWFRfU1dJVENILAorCUdTX0ZUUkFDRV9TVFJfTUFYX0hPUF9DTlRfUkVBQ0hFRCwKKwlHU19GVFJBQ0VfU1RSX1NSQ19QT1JUX05PVF9GT1VORCwKKwlHU19GVFJBQ0VfU1RSX0RTVF9QT1JUX05PVF9GT1VORCwKKwlHU19GVFJBQ0VfU1RSX0RFVklDRVNfTk9UX0lOX0NPTU1PTl9aT05FLAorCUdTX0ZUUkFDRV9TVFJfTk9fUk9VVEVfQldfUE9SVFMsCisJR1NfRlRSQUNFX1NUUl9OT19BRERMX0VYUExOLAorCUdTX0ZUUkFDRV9TVFJfRkFCUklDX0JVU1ksCisJR1NfRlRSQUNFX1NUUl9GQUJSSUNfQlVJTERfSU5fUFJPR1JFU1MsCisJR1NfRlRSQUNFX1NUUl9WRU5ET1JfU1BFQ0lGSUNfRVJSX1NUQVJUID0gMHhmMCwKKwlHU19GVFJBQ0VfU1RSX1ZFTkRPUl9TUEVDSUZJQ19FUlJfRU5EID0gMHhmZiwKK307CisKKy8qCisgKiBGdHJhY2UgUmVxdWVzdAorICovCitzdHJ1Y3QgZmNnc19mdHJhY2VfcmVxX3N7CisJdTMyCXJldmlzaW9uOworCXUxNglzcmNfcG9ydF90YWc7CS8qIFNvdXJjZSBQb3J0IHRhZyAqLworCXUxNglzcmNfcG9ydF9sZW47CS8qIFNvdXJjZSBQb3J0IGxlbiAqLworCXVuaW9uIGZjZ3NfcG9ydF92YWxfdSBzcmNfcG9ydF92YWw7CS8qIFNvdXJjZSBQb3J0IHZhbHVlICovCisJdTE2CWRzdF9wb3J0X3RhZzsJLyogRGVzdGluYXRpb24gUG9ydCB0YWcgKi8KKwl1MTYJZHN0X3BvcnRfbGVuOwkvKiBEZXN0aW5hdGlvbiBQb3J0IGxlbiAqLworCXVuaW9uIGZjZ3NfcG9ydF92YWxfdSBkc3RfcG9ydF92YWw7CS8qIERlc3RpbmF0aW9uIFBvcnQgdmFsdWUgKi8KKwl1MzIJdG9rZW47CisJdTgJCXZlbmRvcl9pZFs4XTsJLyogVDEwIFZlbmRvciBJZGVudGlmaWVyICovCisJdTgJCXZlbmRvcl9pbmZvWzhdOwkvKiBWZW5kb3Igc3BlY2lmaWMgSW5mbyAqLworCXUzMgltYXhfaG9wX2NudDsJLyogTWF4IEhvcCBDb3VudCAqLworfTsKKworLyoKKyAqIFBhdGggaW5mbyBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGZjZ3NfZnRyYWNlX3BhdGhfaW5mb19zeworCXd3bl90CQlzd2l0Y2hfbmFtZTsJCS8qIFN3aXRjaCBXV04gKi8KKwl1MzIJZG9tYWluX2lkOworCXd3bl90CQlpbmdyZXNzX3BvcnRfbmFtZTsJLyogSW5ncmVzcyBwb3J0cyB3d24gKi8KKwl1MzIJaW5ncmVzc19waHlzX3BvcnRfbnVtOwkvKiBJbmdyZXNzIHBvcnRzIHBoeXNpY2FsIHBvcnQKKwkJCQkJCSAqIG51bWJlcgorCQkJCQkJICovCisJd3duX3QJCWVncmVzc19wb3J0X25hbWU7CS8qIEluZ3Jlc3MgcG9ydHMgd3duICovCisJdTMyCWVncmVzc19waHlzX3BvcnRfbnVtOwkvKiBJbmdyZXNzIHBvcnRzIHBoeXNpY2FsIHBvcnQKKwkJCQkJCSAqIG51bWJlcgorCQkJCQkJICovCit9OworCisvKgorICogRnRyYWNlIEFjYyBSZXNwb25zZQorICovCitzdHJ1Y3QgZmNnc19mdHJhY2VfcmVzcF9zeworCXUzMglyZXZpc2lvbjsKKwl1MzIJdG9rZW47CisJdTgJCXZlbmRvcl9pZFs4XTsJCS8qIFQxMCBWZW5kb3IgSWRlbnRpZmllciAqLworCXU4CQl2ZW5kb3JfaW5mb1s4XTsJCS8qIFZlbmRvciBzcGVjaWZpYyBJbmZvICovCisJdTMyCXN0cl9yZWpfcmVhc29uX2NvZGU7CS8qIFNUUiBSZWplY3QgUmVhc29uIENvZGUgKi8KKwl1MzIJbnVtX3BhdGhfaW5mb19lbnRyaWVzOwkvKiBOby4gb2YgcGF0aCBpbmZvIGVudHJpZXMgKi8KKwkvKgorCSAqIHBhdGggaW5mbyBlbnRyeS9lbnRyaWVzLgorCSAqLworCXN0cnVjdCBmY2dzX2Z0cmFjZV9wYXRoX2luZm9fcyBwYXRoX2luZm9bMV07CisKK307CisKKy8qCisqIEZhYnJpYyBDb25maWcgU2VydmVyIDogRkNQaW5nCisgKi8KKworLyoKKyAqIEZDIFBpbmcgUmVxdWVzdAorICovCitzdHJ1Y3QgZmNnc19mY3BpbmdfcmVxX3N7CisJdTMyCXJldmlzaW9uOworCXUxNglwb3J0X3RhZzsKKwl1MTYJcG9ydF9sZW47CS8qIFBvcnQgbGVuICovCisJdW5pb24gZmNnc19wb3J0X3ZhbF91IHBvcnRfdmFsOwkvKiBQb3J0IHZhbHVlICovCisJdTMyCXRva2VuOworfTsKKworLyoKKyAqIEZDIFBpbmcgUmVzcG9uc2UKKyAqLworc3RydWN0IGZjZ3NfZmNwaW5nX3Jlc3Bfc3sKKwl1MzIJdG9rZW47Cit9OworCisvKgorICogQ29tbWFuZCBjb2RlcyBmb3Igem9uZSBzZXJ2ZXIgcXVlcnkuCisgKi8KK2VudW0geworCVpTX0daTUUgPSAweDAxMjQsCS8qIEdldCB6b25lIG1lbWJlciBleHRlbmRlZCAqLworfTsKKworLyoKKyAqIFpTIEdaTUUgcmVxdWVzdAorICovCisjZGVmaW5lIFpTX0daTUVfWk5BTUVMRU4JMzIKK3N0cnVjdCB6c19nem1lX3JlcV9zeworCXU4CXpuYW1lbGVuOworCXU4CXJzdmRbM107CisJdTgJem5hbWVbWlNfR1pNRV9aTkFNRUxFTl07Cit9OworCitlbnVtIHpzX21icl90eXBleworCVpTX01CUl9UWVBFX1BXV04JPSAxLAorCVpTX01CUl9UWVBFX0RPTVBPUlQJPSAyLAorCVpTX01CUl9UWVBFX1BPUlRJRAk9IDMsCisJWlNfTUJSX1RZUEVfTldXTgk9IDQsCit9OworCitzdHJ1Y3QgenNfbWJyX3d3bl9zeworCXU4CW1icl90eXBlOworCXU4CXJzdmRbM107CisJd3duX3QJd3duOworfTsKKworc3RydWN0IHpzX3F1ZXJ5X3Jlc3Bfc3sKKwl1MzIJbm1icnM7CS8qICBudW1iZXIgb2Ygem9uZSBtZW1iZXJzICovCisJc3RydWN0IHpzX21icl93d25fcwltYnJbMV07Cit9OworCisvKgorICogR01BTCBDb21tYW5kICggR2V0ICggaW50ZXJjb25uZWN0IEVsZW1lbnQpIE1hbmFnZW1lbnQgQWRkcmVzcyBMaXN0KQorICogVG8gcmV0cmlldmUgdGhlIElQIEFkZHJlc3Mgb2YgYSBTd2l0Y2guCisgKi8KKworI2RlZmluZSBDVF9HTUFMX1JFU1BfUFJFRklYX1RFTE5FVAkgInRlbG5ldDovLyIKKyNkZWZpbmUgQ1RfR01BTF9SRVNQX1BSRUZJWF9IVFRQCSAiaHR0cDovLyIKKworLyogIEdNQUwvR0ZOIHJlcXVlc3QgKi8KK3N0cnVjdCBmY2dzX3JlcV9zIHsKKwl3d25fdCAgICB3d247IAkvKiBQV1dOL05XV04gKi8KK307CisKKyNkZWZpbmUgZmNnc19nbWFsX3JlcV90IHN0cnVjdCBmY2dzX3JlcV9zCisjZGVmaW5lIGZjZ3NfZ2ZuX3JlcV90IHN0cnVjdCBmY2dzX3JlcV9zCisKKy8qIEFjY2VwdCBSZXNwb25zZSB0byBHTUFMICovCitzdHJ1Y3QgZmNnc19nbWFsX3Jlc3BfcyB7CisJdTMyIAkJbXNfbGVuOyAgIC8qIE51bSBvZiBlbnRyaWVzICovCisJdTggICAgIAltc19tYVsyNTZdOworfTsKKworc3RydWN0IGZjX2dtYWxfZW50cnlfcyB7CisJdTggIGxlbjsKKwl1OCAgcHJlZml4WzddOyAvKiBsaWtlICJodHRwOi8vIiAqLworCXU4ICBpcF9hZGRyWzI0OF07Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzOWJhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mYy5oCkBAIC0wLDAgKzEsMTEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRkNfSF9fCisjZGVmaW5lIF9fRkNfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworLyoKKyAqIEZpYnJlIENoYW5uZWwgSGVhZGVyIFN0cnVjdHVyZSAoRkNIUykgZGVmaW5pdGlvbgorICovCitzdHJ1Y3QgZmNoc19zIHsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgcm91dGluZzo0OwkvKiByb3V0aW5nIGJpdHMgKi8KKwl1MzIgICAgICAgIGNhdF9pbmZvOjQ7CS8qIGNhdGVnb3J5IGluZm8gKi8KKyNlbHNlCisJdTMyICAgICAgICBjYXRfaW5mbzo0OwkvKiBjYXRlZ29yeSBpbmZvICovCisJdTMyICAgICAgICByb3V0aW5nOjQ7CS8qIHJvdXRpbmcgYml0cyAqLworI2VuZGlmCisJdTMyICAgICAgICBkX2lkOjI0OwkvKiBkZXN0aW5hdGlvbiBpZGVudGlmaWVyICovCisKKwl1MzIgICAgICAgIGNzX2N0bDo4OwkvKiBjbGFzcyBzcGVjaWZpYyBjb250cm9sICovCisJdTMyICAgICAgICBzX2lkOjI0OwkvKiBzb3VyY2UgaWRlbnRpZmllciAqLworCisJdTMyICAgICAgICB0eXBlOjg7CQkvKiBkYXRhIHN0cnVjdHVyZSB0eXBlICovCisJdTMyICAgICAgICBmX2N0bDoyNDsJLyogaW5pdGlhbCBmcmFtZSBjb250cm9sICovCisKKwl1OCAgICAgICAgIHNlcV9pZDsJCS8qIHNlcXVlbmNlIGlkZW50aWZpZXIgKi8KKwl1OCAgICAgICAgIGRmX2N0bDsJCS8qIGRhdGEgZmllbGQgY29udHJvbCAqLworCXUxNiAgICAgICAgc2VxX2NudDsJLyogc2VxdWVuY2UgY291bnQgKi8KKworCXUxNiAgICAgICAgb3hfaWQ7CQkvKiBvcmlnaW5hdG9yIGV4Y2hhbmdlIElEICovCisJdTE2ICAgICAgICByeF9pZDsJCS8qIHJlc3BvbmRlciBleGNoYW5nZSBJRCAqLworCisJdTMyICAgICAgICBybzsJCS8qIHJlbGF0aXZlIG9mZnNldCAqLworfTsKKy8qCisgKiBGaWJyZSBDaGFubmVsIEJCX0UgSGVhZGVyIFN0cnVjdHVyZQorICovCitzdHJ1Y3QgZmNiYmVoc19zIHsKKwl1MTYJdmVyX3JzdmQ7CisJdTMyCXJzdmRbMl07CisJdTMyCXJzdmRfX3NvZjsKK307CisKKyNkZWZpbmUgRkNfU0VRX0lEX01BWAkJMjU2CisKKy8qCisgKiByb3V0aW5nIGJpdCBkZWZpbml0aW9ucworICovCitlbnVtIHsKKwlGQ19SVEdfRkM0X0RFVl9EQVRBCT0gMHgwLAkvKiBGQy00IERldmljZSBEYXRhICovCisJRkNfUlRHX0VYVF9MSU5LCQk9IDB4MiwJLyogRXh0ZW5kZWQgTGluayBEYXRhICovCisJRkNfUlRHX0ZDNF9MSU5LX0RBVEEJPSAweDMsCS8qIEZDLTQgTGluayBEYXRhICovCisJRkNfUlRHX1ZJREVPX0RBVEEJPSAweDQsCS8qIFZpZGVvIERhdGEgKi8KKwlGQ19SVEdfRVhUX0hEUgkJPSAweDUsCS8qIFZGVCwgSUZSIG9yIEVuY2Fwc3VsZWQgKi8KKwlGQ19SVEdfQkFTSUNfTElOSwk9IDB4OCwJLyogQmFzaWMgTGluayBkYXRhICovCisJRkNfUlRHX0xJTktfQ1RSTAk9IDB4QywJLyogTGluayBDb250cm9sICovCit9OworCisvKgorICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIGV4dGVuZGVkIGxpbmsgZGF0YSBhbmQgRkMtNCBMaW5rIERhdGEKKyAqLworZW51bSB7CisJRkNfQ0FUX0xEX1JFUVVFU1QJPSAweDIsCS8qIFJlcXVlc3QgKi8KKwlGQ19DQVRfTERfUkVQTFkJCT0gMHgzLAkvKiBSZXBseSAqLworCUZDX0NBVF9MRF9ESUFHCQk9IDB4RiwJLyogZm9yIERJQUcgdXNlIG9ubHkgKi8KK307CisKKy8qCisgKiBpbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgZXh0ZW5kZWQgaGVhZGVycyAoVkZULCBJRlIgb3IgZW5jYXBzdWxhdGlvbikKKyAqLworZW51bSB7CisJRkNfQ0FUX1ZGVF9IRFIgPSAweDAsCS8qIFZpcnR1YWwgZmFicmljIHRhZ2dpbmcgaGVhZGVyICovCisJRkNfQ0FUX0lGUl9IRFIgPSAweDEsCS8qIEludGVyLUZhYnJpYyByb3V0aW5nIGhlYWRlciAqLworCUZDX0NBVF9FTkNfSERSID0gMHgyLAkvKiBFbmNhcHN1bGF0aW9uIGhlYWRlciAqLworfTsKKworLyoKKyAqIGluZm9ybWF0aW9uIGNhdGVnb3J5IGZvciBGQy00IGRldmljZSBkYXRhCisgKi8KK2VudW0geworCUZDX0NBVF9VTkNBVEVHX0lORk8JPSAweDAsCS8qIFVuY2F0ZWdvcml6ZWQgaW5mb3JtYXRpb24gKi8KKwlGQ19DQVRfU09MSUNJVF9EQVRBCT0gMHgxLAkvKiBTb2xpY2l0ZWQgRGF0YSAqLworCUZDX0NBVF9VTlNPTElDSVRfQ1RSTAk9IDB4MiwJLyogVW5zb2xpY2l0ZWQgQ29udHJvbCAqLworCUZDX0NBVF9TT0xJQ0lUX0NUUkwJPSAweDMsCS8qIFNvbGljaXRlZCBDb250cm9sICovCisJRkNfQ0FUX1VOU09MSUNJVF9EQVRBCT0gMHg0LAkvKiBVbnNvbGljaXRlZCBEYXRhICovCisJRkNfQ0FUX0RBVEFfREVTQwk9IDB4NSwJLyogRGF0YSBEZXNjcmlwdG9yICovCisJRkNfQ0FUX1VOU09MSUNJVF9DTUQJPSAweDYsCS8qIFVuc29saWNpdGVkIENvbW1hbmQgKi8KKwlGQ19DQVRfQ01EX1NUQVRVUwk9IDB4NywJLyogQ29tbWFuZCBTdGF0dXMgKi8KK307CisKKy8qCisgKiBpbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgTGluayBDb250cm9sCisgKi8KK2VudW0geworCUZDX0NBVF9BQ0tfMQkJPSAweDAwLAorCUZDX0NBVF9BQ0tfMF9OCQk9IDB4MDEsCisJRkNfQ0FUX1BfUkpUCQk9IDB4MDIsCisJRkNfQ0FUX0ZfUkpUCQk9IDB4MDMsCisJRkNfQ0FUX1BfQlNZCQk9IDB4MDQsCisJRkNfQ0FUX0ZfQlNZX0RBVEEJPSAweDA1LAorCUZDX0NBVF9GX0JTWV9MSU5LX0NUTAk9IDB4MDYsCisJRkNfQ0FUX0ZfTENSCQk9IDB4MDcsCisJRkNfQ0FUX05UWQkJPSAweDA4LAorCUZDX0NBVF9FTkQJCT0gMHgwOSwKK307CisKKy8qCisgKiBUeXBlIEZpZWxkIERlZmluaXRpb25zLiBGQy1QSCBTZWN0aW9uIDE4LjUgcGcuIDE2NQorICovCitlbnVtIHsKKwlGQ19UWVBFX0JMUwkJPSAweDAsCS8qIEJhc2ljIExpbmsgU2VydmljZSAqLworCUZDX1RZUEVfRUxTCQk9IDB4MSwJLyogRXh0ZW5kZWQgTGluayBTZXJ2aWNlICovCisJRkNfVFlQRV9JUAkJPSAweDUsCS8qIElQICovCisJRkNfVFlQRV9GQ1AJCT0gMHg4LAkvKiBTQ1NJLUZDUCAqLworCUZDX1RZUEVfR1BQCQk9IDB4OSwJLyogU0NTSV9HUFAgKi8KKwlGQ19UWVBFX1NFUlZJQ0VTCT0gMHgyMCwJLyogRmlicmUgQ2hhbm5lbCBTZXJ2aWNlcyAqLworCUZDX1RZUEVfRkNfRlNTCQk9IDB4MjIsCS8qIEZhYnJpYyBTd2l0Y2ggU2VydmljZXMgKi8KKwlGQ19UWVBFX0ZDX0FMCQk9IDB4MjMsCS8qIEZDLUFMICovCisJRkNfVFlQRV9GQ19TTk1QCQk9IDB4MjQsCS8qIEZDLVNOTVAgKi8KKwlGQ19UWVBFX01BWAkJPSAyNTYsCS8qIDI1NiBGQy00IHR5cGVzICovCit9OworCitzdHJ1Y3QgZmNfZmM0dHlwZXNfc3sKKwl1OCAgICAgICAgIGJpdHNbRkNfVFlQRV9NQVggLyA4XTsKK307CisKKy8qCisgKiBGcmFtZSBDb250cm9sIERlZmluaXRpb25zLiBGQy1QSCBUYWJsZS00NS4gcGcuIDE2OAorICovCitlbnVtIHsKKwlGQ1RMX0VDX09SSUcgPSAweDAwMDAwMCwJLyogZXhjaGFuZ2Ugb3JpZ2luYXRvciAqLworCUZDVExfRUNfUkVTUCA9IDB4ODAwMDAwLAkvKiBleGNoYW5nZSByZXNwb25kZXIgKi8KKwlGQ1RMX1NFUV9JTkkgPSAweDAwMDAwMCwJLyogc2VxdWVuY2UgaW5pdGlhdG9yICovCisJRkNUTF9TRVFfUkVDID0gMHg0MDAwMDAsCS8qIHNlcXVlbmNlIHJlY2lwaWVudCAqLworCUZDVExfRlNfRVhDSCA9IDB4MjAwMDAwLAkvKiBmaXJzdCBzZXF1ZW5jZSBvZiB4Y2hnICovCisJRkNUTF9MU19FWENIID0gMHgxMDAwMDAsCS8qIGxhc3Qgc2VxdWVuY2Ugb2YgeGNoZyAqLworCUZDVExfRU5EX1NFUSA9IDB4MDgwMDAwLAkvKiBsYXN0IGZyYW1lIG9mIHNlcXVlbmNlICovCisJRkNUTF9TSV9YRkVSID0gMHgwMTAwMDAsCS8qIHNlcSBpbml0aWF0aXZlIHRyYW5zZmVyICovCisJRkNUTF9ST19QUkVTRU5UID0gMHgwMDAwMDgsCS8qIHJlbGF0aXZlIG9mZnNldCBwcmVzZW50ICovCisJRkNUTF9GSUxMQllURV9NQVNLID0gMHgwMDAwMDMJLyogLCBmaWxsIGJ5dGUgbWFzayAqLworfTsKKworLyoKKyAqIEZhYnJpYyBXZWxsIEtub3duIEFkZHJlc3NlcworICovCitlbnVtIHsKKwlGQ19NSU5fV0VMTF9LTk9XTl9BRERSCQk9IDB4RkZGRkYwLAorCUZDX0RPTUFJTl9DT05UUk9MTEVSX01BU0sgCT0gMHhGRkZDMDAsCisJRkNfQUxJQVNfU0VSVkVSCQkJPSAweEZGRkZGOCwKKwlGQ19NR01UX1NFUlZFUgkJCT0gMHhGRkZGRkEsCisJRkNfVElNRV9TRVJWRVIJCQk9IDB4RkZGRkZCLAorCUZDX05BTUVfU0VSVkVSCQkJPSAweEZGRkZGQywKKwlGQ19GQUJSSUNfQ09OVFJPTExFUgkJPSAweEZGRkZGRCwKKwlGQ19GQUJSSUNfUE9SVAkJCT0gMHhGRkZGRkUsCisJRkNfQlJPQURDQVNUX1NFUlZFUgkJPSAweEZGRkZGRgorfTsKKworLyoKKyAqIGRvbWFpbi9hcmVhL3BvcnQgZGVmaW5lcworICovCisjZGVmaW5lIEZDX0RPTUFJTl9NQVNLICAweEZGMDAwMAorI2RlZmluZSBGQ19ET01BSU5fU0hJRlQgMTYKKyNkZWZpbmUgRkNfQVJFQV9NQVNLICAgIDB4MDBGRjAwCisjZGVmaW5lIEZDX0FSRUFfU0hJRlQgICA4CisjZGVmaW5lIEZDX1BPUlRfTUFTSyAgICAweDAwMDBGRgorI2RlZmluZSBGQ19QT1JUX1NISUZUICAgMAorCisjZGVmaW5lIEZDX0dFVF9ET01BSU4ocCkJKCgocCkgJiBGQ19ET01BSU5fTUFTSykgPj4gRkNfRE9NQUlOX1NISUZUKQorI2RlZmluZSBGQ19HRVRfQVJFQShwKQkJKCgocCkgJiBGQ19BUkVBX01BU0spID4+IEZDX0FSRUFfU0hJRlQpCisjZGVmaW5lIEZDX0dFVF9QT1JUKHApCQkoKChwKSAmIEZDX1BPUlRfTUFTSykgPj4gRkNfUE9SVF9TSElGVCkKKworI2RlZmluZSBGQ19ET01BSU5fQ1RSTFIocCkJKEZDX0RPTUFJTl9DT05UUk9MTEVSX01BU0sgfCAoRkNfR0VUX0RPTUFJTihwKSkpCisKK2VudW0geworCUZDX1JYSURfQU5ZID0gMHhGRkZGVSwKK307CisKKy8qCisgKiBnZW5lcmljIEVMUyBjb21tYW5kCisgKi8KK3N0cnVjdCBmY19lbHNfY21kX3N7CisJdTMyICAgICAgICBlbHNfY29kZTo4OwkvKiBFTFMgQ29tbWFuZCBDb2RlICovCisJdTMyICAgICAgICByZXNlcnZlZDoyNDsKK307CisKKy8qCisgKiBFTFMgQ29tbWFuZCBDb2Rlcy4gRkMtUEggVGFibGUtNzUuIHBnLiAyMjMKKyAqLworZW51bSB7CisJRkNfRUxTX0xTX1JKVCA9IDB4MSwJLyogTGluayBTZXJ2aWNlIFJlamVjdC4gKi8KKwlGQ19FTFNfQUNDID0gMHgwMiwJLyogQWNjZXB0ICovCisJRkNfRUxTX1BMT0dJID0gMHgwMywJLyogTl9Qb3J0IExvZ2luLiAqLworCUZDX0VMU19GTE9HSSA9IDB4MDQsCS8qIEZfUG9ydCBMb2dpbi4gKi8KKwlGQ19FTFNfTE9HTyA9IDB4MDUsCS8qIExvZ291dC4gKi8KKwlGQ19FTFNfQUJUWCA9IDB4MDYsCS8qIEFib3J0IEV4Y2hhbmdlICovCisJRkNfRUxTX1JFUyA9IDB4MDgsCS8qIFJlYWQgRXhjaGFuZ2Ugc3RhdHVzICovCisJRkNfRUxTX1JTUyA9IDB4MDksCS8qIFJlYWQgc2VxdWVuY2Ugc3RhdHVzIGJsb2NrICovCisJRkNfRUxTX1JTSSA9IDB4MEEsCS8qIFJlcXVlc3QgU2VxdWVuY2UgSW5pdGlhdGl2ZSAqLworCUZDX0VMU19FU1RDID0gMHgwQywJLyogRXN0aW1hdGUgQ3JlZGl0LiAqLworCUZDX0VMU19SVFYgPSAweDBFLAkvKiBSZWFkIFRpbWVvdXQgVmFsdWUuICovCisJRkNfRUxTX1JMUyA9IDB4MEYsCS8qIFJlYWQgTGluayBTdGF0dXMuICovCisJRkNfRUxTX0VDSE8gPSAweDEwLAkvKiBFY2hvICovCisJRkNfRUxTX1RFU1QgPSAweDExLAkvKiBUZXN0ICovCisJRkNfRUxTX1JSUSA9IDB4MTIsCS8qIFJlaW5zdGF0ZSBSZWNvdmVyeSBRdWFsaWZpZXIuICovCisJRkNfRUxTX1JFQyA9IDB4MTMsCS8qIEFkZCB0aGlzIGZvciBUQVBFIHN1cHBvcnQgaW4gRkNSICovCisJRkNfRUxTX1BSTEkgPSAweDIwLAkvKiBQcm9jZXNzIExvZ2luICovCisJRkNfRUxTX1BSTE8gPSAweDIxLAkvKiBQcm9jZXNzIExvZ291dC4gKi8KKwlGQ19FTFNfU0NOID0gMHgyMiwJLyogU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbi4gKi8KKwlGQ19FTFNfVFBSTE8gPSAweDI0LAkvKiBUaGlyZCBQYXJ0eSBQcm9jZXNzIExvZ291dC4gKi8KKwlGQ19FTFNfUERJU0MgPSAweDUwLAkvKiBEaXNjb3ZlciBOX1BvcnQgUGFyYW1ldGVycy4gKi8KKwlGQ19FTFNfRkRJU0MgPSAweDUxLAkvKiBEaXNjb3ZlciBGX1BvcnQgUGFyYW1ldGVycy4gKi8KKwlGQ19FTFNfQURJU0MgPSAweDUyLAkvKiBEaXNjb3ZlciBBZGRyZXNzLiAqLworCUZDX0VMU19GQU4gPSAweDYwLAkvKiBGYWJyaWMgQWRkcmVzcyBOb3RpZmljYXRpb24gKi8KKwlGQ19FTFNfUlNDTiA9IDB4NjEsCS8qIFJlZyBTdGF0ZSBDaGFuZ2UgTm90aWZpY2F0aW9uICovCisJRkNfRUxTX1NDUiA9IDB4NjIsCS8qIFN0YXRlIENoYW5nZSBSZWdpc3RyYXRpb24uICovCisJRkNfRUxTX1JUSU4gPSAweDc3LAkvKiBNYW5nZW1lbnQgc2VydmVyIHJlcXVlc3QgKi8KKwlGQ19FTFNfUk5JRCA9IDB4NzgsCS8qIE1hbmdlbWVudCBzZXJ2ZXIgcmVxdWVzdCAqLworCUZDX0VMU19STElSID0gMHg3OSwJLyogUmVnaXN0ZXJlZCBMaW5rIEluY2lkZW50IFJlY29yZCAqLworCisJRkNfRUxTX1JQU0MgPSAweDdELAkvKiBSZXBvcnQgUG9ydCBTcGVlZCBDYXBhYmlsaXRpZXMgKi8KKwlGQ19FTFNfUVNBID0gMHg3RSwJLyogUXVlcnkgU2VjdXJpdHkgQXR0cmlidXRlcy4gUmVmIEZDLVNQICovCisJRkNfRUxTX0UyRV9MQkVBQ09OID0gMHg4MSwKKwkJCQkvKiBFbmQtdG8tRW5kIExpbmsgQmVhY29uICovCisJRkNfRUxTX0FVVEggPSAweDkwLAkvKiBBdXRoZW50aWNhdGlvbi4gUmVmIEZDLVNQICovCisJRkNfRUxTX1JGQ04gPSAweDk3LAkvKiBSZXF1ZXN0IEZhYnJpYyBDaGFuZ2UgTm90aWZpY2F0aW9uLiBSZWYKKwkJCQkgKkZDLVNQICovCisKK307CisKKy8qCisgKiAgVmVyc2lvbiBudW1iZXJzIGZvciBGQy1QSCBzdGFuZGFyZHMsCisgKiAgdXNlZCBpbiBsb2dpbiB0byBpbmRpY2F0ZSB3aGF0IHBvcnQKKyAqICBzdXBwb3J0cy4gU2VlIEZDLVBILVggdGFibGUgMTU4LgorICovCitlbnVtIHsKKwlGQ19QSF9WRVJfNF8zID0gMHgwOSwKKwlGQ19QSF9WRVJfUEhfMyA9IDB4MjAsCit9OworCisvKgorICogUERVIHNpemUgZGVmaW5lcworICovCitlbnVtIHsKKwlGQ19NSU5fUERVU1ogPSA1MTIsCisJRkNfTUFYX1BEVVNaID0gMjExMiwKK307CisKKy8qCisgKiBOX1BvcnQgUExPR0kgQ29tbW9uIFNlcnZpY2UgUGFyYW1ldGVycy4KKyAqIEZDLVBILXguIEZpZ3VyZS03Ni4gcGcuIDMwOC4KKyAqLworc3RydWN0IGZjX3Bsb2dpX2NzcF9zeworCXU4ICAgICAgICAgdmVyaGk7CS8qIEZDLVBIIGhpZ2ggdmVyc2lvbiAqLworCXU4ICAgICAgICAgdmVybG87CS8qIEZDLVBIIGxvdyB2ZXJzaW9uICovCisJdTE2ICAgICAgICBiYmNyZWQ7CS8qIEJCX0NyZWRpdCAqLworCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGNpcm86MSwJCS8qIGNvbnRpbnVvdXNseSBpbmNyZWFzaW5nIFJPICovCisJCQlycm86MSwJCS8qIHJhbmRvbSByZWxhdGl2ZSBvZmZzZXQgKi8KKwkJCW5waXZfc3VwcDoxLAkvKiBOUElWIHN1cHBvcnRlZCAqLworCQkJcG9ydF90eXBlOjEsCS8qIE5fUG9ydC9GX3BvcnQgKi8KKwkJCWFsdGJiY3JlZDoxLAkvKiBhbHRlcm5hdGUgQkJfQ3JlZGl0ICovCisJCQlyZXNvbHV0aW9uOjEsCS8qIG1zL25zIEVEX1RPViByZXNvbHV0aW9uICovCisJCQl2dmxfaW5mbzoxLAkvKiBWVkwgSW5mbyBpbmNsdWRlZCAqLworCQkJcmVzZXJ2ZWQxOjE7CisKKwl1OCAgICAgICAgIGhnX3N1cHA6MSwKKwkJCXF1ZXJ5X2RiYzoxLAorCQkJc2VjdXJpdHk6MSwKKwkJCXN5bmNfY2FwOjEsCisJCQlyX3RfdG92OjEsCisJCQlkaF9kdXBfc3VwcDoxLAorCQkJY2lzYzoxLAkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgc2VxIGNvdW50ICovCisJCQlwYXlsb2FkOjE7CisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjIsCisJCQlyZXNvbHV0aW9uOjEsCS8qIG1zL25zIEVEX1RPViByZXNvbHV0aW9uICovCisJCQlhbHRiYmNyZWQ6MSwJLyogYWx0ZXJuYXRlIEJCX0NyZWRpdCAqLworCQkJcG9ydF90eXBlOjEsCS8qIE5fUG9ydC9GX3BvcnQgKi8KKwkJCW5waXZfc3VwcDoxLAkvKiBOUElWIHN1cHBvcnRlZCAqLworCQkJcnJvOjEsCQkvKiByYW5kb20gcmVsYXRpdmUgb2Zmc2V0ICovCisJCQljaXJvOjE7CQkvKiBjb250aW51b3VzbHkgaW5jcmVhc2luZyBSTyAqLworCisJdTggICAgICAgICBwYXlsb2FkOjEsCisJCQljaXNjOjEsCQkvKiBjb250aW51b3VzbHkgaW5jcmVhc2luZyBzZXEgY291bnQgKi8KKwkJCWRoX2R1cF9zdXBwOjEsCisJCQlyX3RfdG92OjEsCisJCQlzeW5jX2NhcDoxLAorCQkJc2VjdXJpdHk6MSwKKwkJCXF1ZXJ5X2RiYzoxLAorCQkJaGdfc3VwcDoxOworI2VuZGlmCisKKwl1MTYgICAgICAgIHJ4c3o7CQkvKiByZWNpZXZlIGRhdGFfZmllbGQgc2l6ZSAqLworCisJdTE2ICAgICAgICBjb25zZXE7CisJdTE2ICAgICAgICByb19iaXRtYXA7CisKKwl1MzIgICAgICAgIGVfZF90b3Y7Cit9OworCisvKgorICogTl9Qb3J0IFBMT0dJIENsYXNzIFNwZWNpZmljIFBhcmFtZXRlcnMuCisgKiBGQy1QSC14LiBGaWd1cmUgNzguIHBnLiAzMTguCisgKi8KK3N0cnVjdCBmY19wbG9naV9jbHBfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgY2xhc3NfdmFsaWQ6MTsKKwl1MzIgICAgICAgIGludGVybWl4OjE7CS8qIGNsYXNzIGludGVybWl4IHN1cHBvcnRlZCBpZiBzZXQgPTEuCisJCQkJCSAqIHZhbGlkIG9ubHkgZm9yIGNsYXNzMS4gUmVzZXJ2ZWQgZm9yCisJCQkJCSAqIGNsYXNzMiAmIGNsYXNzMworCQkJCQkgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMToyOworCXUzMiAgICAgICAgc2VxdWVudGlhbDoxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjM7CisjZWxzZQorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTMyICAgICAgICBzZXF1ZW50aWFsOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIGludGVybWl4OjE7CS8qIGNsYXNzIGludGVybWl4IHN1cHBvcnRlZCBpZiBzZXQgPTEuCisJCQkJCSAqIHZhbGlkIG9ubHkgZm9yIGNsYXNzMS4gUmVzZXJ2ZWQgZm9yCisJCQkJCSAqIGNsYXNzMiAmIGNsYXNzMworCQkJCQkgKi8KKwl1MzIgICAgICAgIGNsYXNzX3ZhbGlkOjE7CisjZW5kaWYKKworCXUzMiAgICAgICAgcmVzZXJ2ZWQzOjI0OworCisJdTMyICAgICAgICByZXNlcnZlZDQ6MTY7CisJdTMyICAgICAgICByeHN6OjE2OwkvKiBSZWNlaXZlIGRhdGFfZmllbGQgc2l6ZSAqLworCisJdTMyICAgICAgICByZXNlcnZlZDU6ODsKKwl1MzIgICAgICAgIGNvbnNlcTo4OworCXUzMiAgICAgICAgZTJlX2NyZWRpdDoxNjsJLyogZW5kIHRvIGVuZCBjcmVkaXQgKi8KKworCXUzMiAgICAgICAgcmVzZXJ2ZWQ3Ojg7CisJdTMyICAgICAgICBvc3B4Ojg7CisJdTMyICAgICAgICByZXNlcnZlZDg6MTY7Cit9OworCisjZGVmaW5lIEZMT0dJX1ZWTF9CUkNEICAgIDB4NDI1MjQzNDQgLyogQVNDSUkgdmFsdWUgZm9yIGVhY2ggY2hhcmFjdGVyIGluCisJCQkJICAgICAgKiBzdHJpbmcgIkJSQ0QiICovCisKKy8qCisgKiBQTE9HSSBlbHMgY29tbWFuZCBhbmQgcmVwbHkgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfbG9naV9zeworCXN0cnVjdCBmY19lbHNfY21kX3MgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXN0cnVjdCBmY19wbG9naV9jc3BfcyAgY3NwOwkJLyogY29tbW9uIHNlcnZpY2UgcGFyYW1zICovCisJd3duX3QgICAgICAgICAgIHBvcnRfbmFtZTsKKwl3d25fdCAgICAgICAgICAgbm9kZV9uYW1lOworCXN0cnVjdCBmY19wbG9naV9jbHBfcyAgY2xhc3MxOwkJLyogY2xhc3MgMSBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgIGNsYXNzMjsJCS8qIGNsYXNzIDIgc2VydmljZSBwYXJhbWV0ZXJzICovCisJc3RydWN0IGZjX3Bsb2dpX2NscF9zICBjbGFzczM7CQkvKiBjbGFzcyAzIHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBmY19wbG9naV9jbHBfcyAgY2xhc3M0OwkJLyogY2xhc3MgNCBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KKwl1OCAgICAgICAgIHZ2bFsxNl07CS8qIHZlbmRvciB2ZXJzaW9uIGxldmVsICovCit9OworCisvKgorICogTE9HTyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19sb2dvX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBucG9ydF9pZDoyNDsJLyogTl9Qb3J0IGlkZW50aWZpZXIgb2Ygc291cmNlICovCisJd3duX3QgICAgICAgICAgIG9yaWdfcG9ydF9uYW1lOwkvKiBQb3J0IG5hbWUgb2YgdGhlIExPR08gb3JpZ2luYXRvciAqLworfTsKKworLyoKKyAqIEFESVNDIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX2FkaXNjX3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgb3JpZ19IQToyNDsJLyogb3JpZ2luYXRvciBoYXJkIGFkZHJlc3MgKi8KKwl3d25fdCAgICAgICAgICAgb3JpZ19wb3J0X25hbWU7CS8qIG9yaWdpbmF0b3IgcG9ydCBuYW1lICovCisJd3duX3QgICAgICAgICAgIG9yaWdfbm9kZV9uYW1lOwkvKiBvcmlnaW5hdG9yIG5vZGUgbmFtZSAqLworCXUzMiAgICAgICAgcmVzMjo4OworCXUzMiAgICAgICAgbnBvcnRfaWQ6MjQ7CS8qIG9yaWdpbmF0b3IgTlBvcnRJRCAqLworfTsKKworLyoKKyAqIEV4Y2hhbmdlIHN0YXR1cyBibG9jaworICovCitzdHJ1Y3QgZmNfZXhjaF9zdGF0dXNfYmxrX3N7CisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG9yaWdfbnA6MjQ7CS8qIG9yaWdpbmF0b3IgTlBvcnRJRCAqLworCXUzMiAgICAgICAgcmVzMjo4OworCXUzMiAgICAgICAgcmVzcF9ucDoyNDsJLyogcmVzcG9uZGVyIE5Qb3J0SUQgKi8KKwl1MzIgICAgICAgIGVzX2JpdHM7CisJdTMyICAgICAgICByZXMzOworCS8qCisJICogdW4gbW9kaWZpZWQgc2VjdGlvbiBvZiB0aGUgZmllbGRzCisJICovCit9OworCisvKgorICogUkVTIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3Jlc19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBOX1BvcnQgaWRlbnRpZmllciBvZiBzb3VyY2UgKi8KKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworCXU4ICAgICAgICAgYXNzb2NfaGRyWzMyXTsKK307CisKKy8qCisgKiBSRVMgZWxzIGFjY2VwdCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yZXNfYWNjX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJc3RydWN0IGZjX2V4Y2hfc3RhdHVzX2Jsa19zIGZjX2V4Y2hfYmxrOyAvKiBFeGNoYW5nZSBzdGF0dXMgYmxvY2sgKi8KK307CisKKy8qCisgKiBSRUMgZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcmVjX3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgbnBvcnRfaWQ6MjQ7CS8qIE5fUG9ydCBpZGVudGlmaWVyIG9mIHNvdXJjZSAqLworCXUzMiAgICAgICAgb3hpZDoxNjsKKwl1MzIgICAgICAgIHJ4aWQ6MTY7Cit9OworCisjZGVmaW5lIEZDX1JFQ19FU0JfT1dOX1JTUAkweDgwMDAwMDAwCS8qIHJlc3BvbmRlciBvd25zICovCisjZGVmaW5lIEZDX1JFQ19FU0JfU0kJCTB4NDAwMDAwMDAJLyogU0kgaXMgb3duZWQgCSovCisjZGVmaW5lIEZDX1JFQ19FU0JfQ09NUAkJMHgyMDAwMDAwMAkvKiBleGNoYW5nZSBpcyBjb21wbGV0ZQkqLworI2RlZmluZSBGQ19SRUNfRVNCX0VORENPTkRfQUJOCTB4MTAwMDAwMDAJLyogYWJub3JtYWwgZW5kaW5nIAkqLworI2RlZmluZSBGQ19SRUNfRVNCX1JRQUNUCTB4MDQwMDAwMDAJLyogcmVjb3ZlcnkgcXVhbCBhY3RpdmUJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9FUlJQX01TSwkweDAzMDAwMDAwCisjZGVmaW5lIEZDX1JFQ19FU0JfT1hJRF9JTlYJMHgwMDgwMDAwMAkvKiBpbnZhbGlkIE9YSUQJCSovCisjZGVmaW5lIEZDX1JFQ19FU0JfUlhJRF9JTlYJMHgwMDQwMDAwMAkvKiBpbnZhbGlkIFJYSUQJCSovCisjZGVmaW5lIEZDX1JFQ19FU0JfUFJJT19JTlVTRQkweDAwMjAwMDAwCisKKy8qCisgKiBSRUMgZWxzIGFjY2VwdCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yZWNfYWNjX3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgb3hpZDoxNjsKKwl1MzIgICAgICAgIHJ4aWQ6MTY7CisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBvcmlnX2lkOjI0OwkvKiBOX1BvcnQgaWQgb2YgZXhjaGFuZ2Ugb3JpZ2luYXRvciAqLworCXUzMiAgICAgICAgcmVzMjo4OworCXUzMiAgICAgICAgcmVzcF9pZDoyNDsJLyogTl9Qb3J0IGlkIG9mIGV4Y2hhbmdlIHJlc3BvbmRlciAqLworCXUzMiAgICAgICAgY291bnQ7CQkvKiBkYXRhIHRyYW5zZmVyIGNvdW50ICovCisJdTMyICAgICAgICBlX3N0YXQ7CQkvKiBleGNoYW5nZSBzdGF0dXMgKi8KK307CisKKy8qCisgKiBSU0kgZWxzIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3JzaV9zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBvcmlnX3NpZDoyNDsKKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworfTsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgUFJMSSBwYXJhbWF0ZXIgcGFnZXMsIGJvdGggcmVxdWVzdCAmIHJlc3BvbnNlCisgKiBzZWUgRkMtUEgtWCB0YWJsZSAxMTMgJiAxMTUgZm9yIGV4cGxhbmF0aW9uIGFsc28gRkNQIHRhYmxlIDgKKyAqLworc3RydWN0IGZjX3BybGlfcGFyYW1zX3N7CisJdTMyICAgICAgICByZXNlcnZlZDogMTY7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHJlc2VydmVkMTogNTsKKwl1MzIgICAgICAgIHJlY19zdXBwb3J0IDogMTsKKwl1MzIgICAgICAgIHRhc2tfcmV0cnlfaWQgOiAxOworCXUzMiAgICAgICAgcmV0cnkgOiAxOworCisJdTMyICAgICAgICBjb25maXJtIDogMTsKKwl1MzIgICAgICAgIGRvdmVybGF5OjE7CisJdTMyICAgICAgICBpbml0aWF0b3I6MTsKKwl1MzIgICAgICAgIHRhcmdldDoxOworCXUzMiAgICAgICAgY2RtaXg6MTsKKwl1MzIgICAgICAgIGRybWl4OjE7CisJdTMyICAgICAgICByeHJkaXNhYjoxOworCXUzMiAgICAgICAgd3hyZGlzYWI6MTsKKyNlbHNlCisJdTMyICAgICAgICByZXRyeSA6IDE7CisJdTMyICAgICAgICB0YXNrX3JldHJ5X2lkIDogMTsKKwl1MzIgICAgICAgIHJlY19zdXBwb3J0IDogMTsKKwl1MzIgICAgICAgIHJlc2VydmVkMTogNTsKKworCXUzMiAgICAgICAgd3hyZGlzYWI6MTsKKwl1MzIgICAgICAgIHJ4cmRpc2FiOjE7CisJdTMyICAgICAgICBkcm1peDoxOworCXUzMiAgICAgICAgY2RtaXg6MTsKKwl1MzIgICAgICAgIHRhcmdldDoxOworCXUzMiAgICAgICAgaW5pdGlhdG9yOjE7CisJdTMyICAgICAgICBkb3ZlcmxheToxOworCXUzMiAgICAgICAgY29uZmlybSA6IDE7CisjZW5kaWYKK307CisKKy8qCisgKiB2YWxpZCB2YWx1ZXMgZm9yIHJzcGNvZGUgaW4gUFJMSSBBQ0MgcGF5bG9hZAorICovCitlbnVtIHsKKwlGQ19QUkxJX0FDQ19YUVREID0gMHgxLAkJLyogcmVxdWVzdCBleGVjdXRlZCAqLworCUZDX1BSTElfQUNDX1BSRURFRl9JTUcgPSAweDUsCS8qIHByZWRlZmluZWQgaW1hZ2UgLSBubyBwcmxpIG5lZWRlZCAqLworfTsKKworc3RydWN0IGZjX3BybGlfcGFyYW1zX3BhZ2Vfc3sKKwl1MzIgICAgICAgIHR5cGU6ODsKKwl1MzIgICAgICAgIGNvZGV4dDo4OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBvcmlncHJvY2FzdjoxOworCXUzMiAgICAgICAgcnNwcGF2OjE7CisJdTMyICAgICAgICBpbWFnZXBhaXI6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMToxOworCXUzMiAgICAgICAgcnNwY29kZTo0OworI2Vsc2UKKwl1MzIgICAgICAgIHJzcGNvZGU6NDsKKwl1MzIgICAgICAgIHJlc2VydmVkMToxOworCXUzMiAgICAgICAgaW1hZ2VwYWlyOjE7CisJdTMyICAgICAgICByc3BwYXY6MTsKKwl1MzIgICAgICAgIG9yaWdwcm9jYXN2OjE7CisjZW5kaWYKKwl1MzIgICAgICAgIHJlc2VydmVkMjo4OworCisJdTMyICAgICAgICBvcmlncHJvY2FzOworCXUzMiAgICAgICAgcnNwcHJvY2FzOworCXN0cnVjdCBmY19wcmxpX3BhcmFtc19zICBzZXJ2cGFyYW1zOworfTsKKworLyoKKyAqIFBSTEkgcmVxdWVzdCBhbmQgYWNjZXB0IHBheWxvYWQsIEZDLVBILVggdGFibGVzIDExMiAmIDExNAorICovCitzdHJ1Y3QgZmNfcHJsaV9zeworCXUzMiAgICAgICAgY29tbWFuZDo4OworCXUzMiAgICAgICAgcGdsZW46ODsKKwl1MzIgICAgICAgIHBhZ2VieXRlczoxNjsKKwlzdHJ1Y3QgZmNfcHJsaV9wYXJhbXNfcGFnZV9zIHBhcmFtcGFnZTsKK307CisKKy8qCisgKiBQUkxPIGxvZ291dCBwYXJhbXMgcGFnZQorICovCitzdHJ1Y3QgZmNfcHJsb19wYXJhbXNfcGFnZV9zeworCXUzMiAgICAgICAgdHlwZTo4OworCXUzMiAgICAgICAgdHlwZV9leHQ6ODsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CS8qIG9yaWdpbmF0b3IgcHJvY2VzcyBhc3NvY2lhdG9yCisJCQkJCSAqIHZhbGlkCisJCQkJCSAqLworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CS8qIHJlc3BvbmRlciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KKwl1MzIgICAgICAgIHJlczE6MTQ7CisjZWxzZQorCXUzMiAgICAgICAgcmVzMToxNDsKKwl1MzIgICAgICAgIHJwYV92YWxpZDoxOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yIHZhbGlkICovCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IKKwkJCQkJICogdmFsaWQKKwkJCQkJICovCisjZW5kaWYKKwl1MzIgICAgICAgIG9yaWdfcHJvY2Vzc19hc3NjOworCXUzMiAgICAgICAgcmVzcF9wcm9jZXNzX2Fzc2M7CisKKwl1MzIgICAgICAgIHJlczI7Cit9OworCisvKgorICogUFJMTyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19wcmxvX3N7CisJdTMyICAgICAgICAJY29tbWFuZDo4OworCXUzMiAgICAgICAgCXBhZ2VfbGVuOjg7CisJdTMyICAgICAgICAJcGF5bG9hZF9sZW46MTY7CisJc3RydWN0IGZjX3BybG9fcGFyYW1zX3BhZ2VfcyAJcHJsb19wYXJhbXNbMV07Cit9OworCisvKgorICogUFJMTyBMb2dvdXQgcmVzcG9uc2UgcGFyYW1ldGVyIHBhZ2UKKyAqLworc3RydWN0IGZjX3BybG9fYWNjX3BhcmFtc19wYWdlX3N7CisJdTMyICAgICAgICB0eXBlOjg7CisJdTMyICAgICAgICB0eXBlX2V4dDo4OworCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgorCQkJCQkgKiB2YWxpZAorCQkJCQkgKi8KKwl1MzIgICAgICAgIHJwYV92YWxpZDoxOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yIHZhbGlkICovCisJdTMyICAgICAgICByZXMxOjE0OworI2Vsc2UKKwl1MzIgICAgICAgIHJlczE6MTQ7CisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsJLyogcmVzcG9uZGVyIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLworCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CS8qIG9yaWdpbmF0b3IgcHJvY2VzcyBhc3NvY2lhdG9yCisJCQkJCSAqIHZhbGlkCisJCQkJCSAqLworI2VuZGlmCisJdTMyICAgICAgICBvcmlnX3Byb2Nlc3NfYXNzYzsKKwl1MzIgICAgICAgIHJlc3BfcHJvY2Vzc19hc3NjOworCisJdTMyICAgICAgICBmYzR0eXBlX2NzcDsKK307CisKKy8qCisgKiBQUkxPIGVscyBjb21tYW5kIEFDQyBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19wcmxvX2FjY19zeworCXUzMiAgICAgICAgY29tbWFuZDo4OworCXUzMiAgICAgICAgcGFnZV9sZW46ODsKKwl1MzIgICAgICAgIHBheWxvYWRfbGVuOjE2OworCXN0cnVjdCBmY19wcmxvX2FjY19wYXJhbXNfcGFnZV9zIHBybG9fYWNjX3BhcmFtc1sxXTsKK307CisKKy8qCisgKiBTQ1IgZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitlbnVtIHsKKwlGQ19TQ1JfUkVHX0ZVTkNfRkFCUklDX0RFVEVDVEVEID0gMHgwMSwKKwlGQ19TQ1JfUkVHX0ZVTkNfTl9QT1JUX0RFVEVDVEVEID0gMHgwMiwKKwlGQ19TQ1JfUkVHX0ZVTkNfRlVMTCA9IDB4MDMsCisJRkNfU0NSX1JFR19GVU5DX0NMRUFSX1JFRyA9IDB4RkYsCit9OworCisvKiBTQ1IgVlUgcmVnaXN0cmF0aW9ucyAqLworZW51bSB7CisJRkNfVlVfU0NSX1JFR19GVU5DX0ZBQlJJQ19OQU1FX0NIQU5HRSA9IDB4MDEKK307CisKK3N0cnVjdCBmY19zY3Jfc3sKKwl1MzIgY29tbWFuZDo4OworCXUzMiByZXM6MjQ7CisJdTMyIHZ1X3JlZ19mdW5jOjg7IC8qIFZlbmRvciBVbmlxdWUgUmVnaXN0cmF0aW9ucyAqLworCXUzMiByZXMxOjE2OworCXUzMiByZWdfZnVuYzo4OworfTsKKworLyoKKyAqIEluZm9ybWF0aW9uIGNhdGVnb3J5IGZvciBCYXNpYyBsaW5rIGRhdGEKKyAqLworZW51bSB7CisJRkNfQ0FUX05PUAk9IDB4MCwKKwlGQ19DQVRfQUJUUwk9IDB4MSwKKwlGQ19DQVRfUk1DCT0gMHgyLAorCUZDX0NBVF9CQV9BQ0MJPSAweDQsCisJRkNfQ0FUX0JBX1JKVAk9IDB4NSwKKwlGQ19DQVRfUFJNVAk9IDB4NiwKK307CisKKy8qCisgKiBMU19SSlQgZWxzIHJlcGx5IHBheWxvYWQKKyAqLworc3RydWN0IGZjX2xzX3JqdF9zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CQkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICByZWFzb25fY29kZTo4OwkJLyogUmVhc29uIGNvZGUgZm9yIHJlamVjdCAqLworCXUzMiAgICAgICAgcmVhc29uX2NvZGVfZXhwbDo4OwkvKiBSZWFzb24gY29kZSBleHBsYW5hdGlvbiAqLworCXUzMiAgICAgICAgdmVuZG9yX3VuaXF1ZTo4OwkvKiBWZW5kb3Igc3BlY2lmaWMgKi8KK307CisKKy8qCisgKiBMU19SSlQgcmVhc29uIGNvZGVzCisgKi8KK2VudW0geworCUZDX0xTX1JKVF9SU05fSU5WX0NNRF9DT0RFCT0gMHgwMSwKKwlGQ19MU19SSlRfUlNOX0xPR0lDQUxfRVJST1IJPSAweDAzLAorCUZDX0xTX1JKVF9SU05fTE9HSUNBTF9CVVNZCT0gMHgwNSwKKwlGQ19MU19SSlRfUlNOX1BST1RPQ09MX0VSUk9SCT0gMHgwNywKKwlGQ19MU19SSlRfUlNOX1VOQUJMRV9UT19QRVJGX0NNRCA9IDB4MDksCisJRkNfTFNfUkpUX1JTTl9DTURfTk9UX1NVUFAJPSAweDBCLAorfTsKKworLyoKKyAqIExTX1JKVCByZWFzb24gY29kZSBleHBsYW5hdGlvbgorICovCitlbnVtIHsKKwlGQ19MU19SSlRfRVhQX05PX0FERExfSU5GTwkJPSAweDAwLAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9PUFRJT05TCT0gMHgwMSwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfSU5JX0NUTAk9IDB4MDMsCisJRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX1JFQ19DVEwJPSAweDA1LAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9SWFNaCQk9IDB4MDcsCisJRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX0NPTlNFUQkJPSAweDA5LAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9DUkVESVQJCT0gMHgwQiwKKwlGQ19MU19SSlRfRVhQX0lOVl9QT1JUX05BTUUJCT0gMHgwRCwKKwlGQ19MU19SSlRfRVhQX0lOVl9OT0RFX0ZBQlJJQ19OQU1FCT0gMHgwRSwKKwlGQ19MU19SSlRfRVhQX0lOVl9DU1AJCQk9IDB4MEYsCisJRkNfTFNfUkpUX0VYUF9JTlZfQVNTT0NfSERSCQk9IDB4MTEsCisJRkNfTFNfUkpUX0VYUF9BU1NPQ19IRFJfUkVRRAkJPSAweDEzLAorCUZDX0xTX1JKVF9FWFBfSU5WX09SSUdfU19JRAkJPSAweDE1LAorCUZDX0xTX1JKVF9FWFBfSU5WX09YSURfUlhJRF9DT01CCT0gMHgxNywKKwlGQ19MU19SSlRfRVhQX0NNRF9BTFJFQURZX0lOX1BST0cJPSAweDE5LAorCUZDX0xTX1JKVF9FWFBfTE9HSU5fUkVRVUlSRUQJCT0gMHgxRSwKKwlGQ19MU19SSlRfRVhQX0lOVkFMSURfTlBPUlRfSUQJCT0gMHgxRiwKKwlGQ19MU19SSlRfRVhQX0lOU1VGRl9SRVMJCT0gMHgyOSwKKwlGQ19MU19SSlRfRVhQX0NNRF9OT1RfU1VQUAkJPSAweDJDLAorCUZDX0xTX1JKVF9FWFBfSU5WX1BBWUxPQURfTEVOCQk9IDB4MkQsCit9OworCisvKgorICogUlJRIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3JycV9zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgc19pZDoyNDsJLyogZXhjaGFuZ2Ugb3JpZ2luYXRvciBTX0lEICovCisKKwl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBvcmlnaW5hdG9yIGV4Y2hhbmdlIElEICovCisJdTMyICAgICAgICByeF9pZDoxNjsJLyogcmVzcG9uZGVyIGV4Y2hhbmdlIElEICovCisKKwl1MzIgICAgICAgIHJlczJbOF07CS8qIG9wdGlvbmFsIGFzc29jaWF0aW9uIGhlYWRlciAqLworfTsKKworLyoKKyAqIEFCVFMgQkFfQUNDIHJlcGx5IHBheWxvYWQKKyAqLworc3RydWN0IGZjX2JhX2FjY19zeworCXUzMiAgICAgICAgc2VxX2lkX3ZhbGlkOjg7CS8qIHNldCB0byAweDAwIGZvciBBYm9ydCBFeGNoYW5nZSAqLworCXUzMiAgICAgICAgc2VxX2lkOjg7CS8qIGludmFsaWQgZm9yIEFib3J0IEV4Y2hhbmdlICovCisJdTMyICAgICAgICByZXMyOjE2OworCXUzMiAgICAgICAgb3hfaWQ6MTY7CS8qIE9YX0lEIGZyb20gQUJUUyBmcmFtZSAqLworCXUzMiAgICAgICAgcnhfaWQ6MTY7CS8qIFJYX0lEIGZyb20gQUJUUyBmcmFtZSAqLworCXUzMiAgICAgICAgbG93X3NlcV9jbnQ6MTY7CS8qIHNldCB0byAweDAwMDAgZm9yIEFib3J0IEV4Y2hhbmdlICovCisJdTMyICAgICAgICBoaWdoX3NlcV9jbnQ6MTY7Lyogc2V0IHRvIDB4RkZGRiBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KK307CisKKy8qCisgKiBBQlRTIEJBX1JKVCByZWplY3QgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfYmFfcmp0X3N7CisJdTMyICAgICAgICByZXMxOjg7CQkvKiBSZXNlcnZlZCAqLworCXUzMiAgICAgICAgcmVhc29uX2NvZGU6ODsJLyogcmVhc29uIGNvZGUgZm9yIHJlamVjdCAqLworCXUzMiAgICAgICAgcmVhc29uX2V4cGw6ODsJLyogcmVhc29uIGNvZGUgZXhwbGFuYXRpb24gKi8KKwl1MzIgICAgICAgIHZlbmRvcl91bmlxdWU6ODsvKiB2ZW5kb3IgdW5pcXVlIHJlYXNvbiBjb2RlLHNldCB0byAwICovCit9OworCisvKgorICogVFBSTE8gbG9nb3V0IHBhcmFtZXRlciBwYWdlCisgKi8KK3N0cnVjdCBmY190cHJsb19wYXJhbXNfcGFnZV9zeworCXUzMiAgICAgICAgdHlwZTo4OworCXUzMiAgICAgICAgdHlwZV9leHQ6ODsKKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsKKwl1MzIgICAgICAgIHJwYV92YWxpZDoxOworCXUzMiAgICAgICAgdHBvX25wb3J0X3ZhbGlkOjE7CisJdTMyICAgICAgICBnbG9iYWxfcHJvY2Vzc19sb2dvdXQ6MTsKKwl1MzIgICAgICAgIHJlczE6MTI7CisjZWxzZQorCXUzMiAgICAgICAgcmVzMToxMjsKKwl1MzIgICAgICAgIGdsb2JhbF9wcm9jZXNzX2xvZ291dDoxOworCXUzMiAgICAgICAgdHBvX25wb3J0X3ZhbGlkOjE7CisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsKKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOworI2VuZGlmCisKKwl1MzIgICAgICAgIG9yaWdfcHJvY2Vzc19hc3NjOworCXUzMiAgICAgICAgcmVzcF9wcm9jZXNzX2Fzc2M7CisKKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIHRwb19ucG9ydF9pZDsKK307CisKKy8qCisgKiBUUFJMTyBFTFMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY190cHJsb19zeworCXUzMiAgICAgICAgY29tbWFuZDo4OworCXUzMiAgICAgICAgcGFnZV9sZW46ODsKKwl1MzIgICAgICAgIHBheWxvYWRfbGVuOjE2OworCisJc3RydWN0IGZjX3RwcmxvX3BhcmFtc19wYWdlX3MgdHBybG9fcGFyYW1zWzFdOworfTsKKworZW51bSBmY190cHJsb190eXBleworCUZDX0dMT0JBTF9MT0dPID0gMSwKKwlGQ19UUFJfTE9HTworfTsKKworLyoKKyAqIFRQUkxPIGVscyBjb21tYW5kIEFDQyBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY190cHJsb19hY2Nfc3sKKwl1MzIJY29tbWFuZDo4OworCXUzMglwYWdlX2xlbjo4OworCXUzMglwYXlsb2FkX2xlbjoxNjsKKwlzdHJ1Y3QgZmNfcHJsb19hY2NfcGFyYW1zX3BhZ2VfcyB0cHJsb19hY2NfcGFyYW1zWzFdOworfTsKKworLyoKKyAqIFJTQ04gZWxzIGNvbW1hbmQgcmVxIHBheWxvYWQKKyAqLworI2RlZmluZSBGQ19SU0NOX1BHTEVOCTB4NAorCitlbnVtIGZjX3JzY25fZm9ybWF0eworCUZDX1JTQ05fRk9STUFUX1BPUlRJRAk9IDB4MCwKKwlGQ19SU0NOX0ZPUk1BVF9BUkVBCT0gMHgxLAorCUZDX1JTQ05fRk9STUFUX0RPTUFJTgk9IDB4MiwKKwlGQ19SU0NOX0ZPUk1BVF9GQUJSSUMJPSAweDMsCit9OworCitzdHJ1Y3QgZmNfcnNjbl9ldmVudF9zeworCXUzMiAgICAgICAgZm9ybWF0OjI7CisJdTMyICAgICAgICBxdWFsaWZpZXI6NDsKKwl1MzIgICAgICAgIHJlc3ZkOjI7CisJdTMyICAgICAgICBwb3J0aWQ6MjQ7Cit9OworCitzdHJ1Y3QgZmNfcnNjbl9wbF9zeworCXU4ICAgICAgICAgY29tbWFuZDsKKwl1OCAgICAgICAgIHBhZ2VsZW47CisJdTE2ICAgICAgICBwYXlsZGxlbjsKKwlzdHJ1Y3QgZmNfcnNjbl9ldmVudF9zIGV2ZW50WzFdOworfTsKKworLyoKKyAqIEVDSE8gZWxzIGNvbW1hbmQgcmVxIHBheWxvYWQKKyAqLworc3RydWN0IGZjX2VjaG9fcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworfTsKKworLyoKKyAqIFJOSUQgZWxzIGNvbW1hbmQKKyAqLworCisjZGVmaW5lIFJOSURfTk9ERUlEX0RBVEFfRk9STUFUX0NPTU1PTiAgICAJCSAweDAwCisjZGVmaW5lIFJOSURfTk9ERUlEX0RBVEFfRk9STUFUX0ZDUDMgICAgICAgIAkJIDB4MDgKKyNkZWZpbmUgUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfRElTQ09WRVJZICAgICAJCTB4REYKKworI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9VTktOT1dOICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX09USEVSICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSFVCICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0dBVEVXQVkgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1RPUkFHRV9ERVZJQ0UgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9IT1NUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfU1VCU1lTVEVNICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1RPUkFHRV9BQ0NFU1NfREVWSUNFICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9OQVNfU0VSVkVSICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0JSSURHRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfVklSVFVBTElaQVRJT05fREVWSUNFICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9NVUxUSV9GVU5DVElPTl9ERVZJQ0UgICAgICAweDAwMDAwMEZGCisKKy8qCisgKiBSTklEIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3JuaWRfY21kX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworCXUzMiAgICAgICAgbm9kZV9pZF9kYXRhX2Zvcm1hdDo4OworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6MjQ7Cit9OworCisvKgorICogUk5JRCBlbHMgcmVzcG9uc2UgcGF5bG9hZAorICovCisKK3N0cnVjdCBmY19ybmlkX2NvbW1vbl9pZF9kYXRhX3N7CisJd3duX3QgICAgICAgICAgIHBvcnRfbmFtZTsKKwl3d25fdCAgICAgICAgICAgbm9kZV9uYW1lOworfTsKKworc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3N7CisJdTMyICAgICAgICB2ZW5kb3JfdW5pcXVlWzRdOworCXUzMiAgICAgICAgYXNzb190eXBlOworCXUzMiAgICAgICAgcGh5X3BvcnRfbnVtOworCXUzMiAgICAgICAgbnVtX2F0dGFjaGVkX25vZGVzOworCXUzMiAgICAgICAgbm9kZV9tZ210Ojg7CisJdTMyICAgICAgICBpcF92ZXJzaW9uOjg7CisJdTMyICAgICAgICB1ZHBfdGNwX3BvcnRfbnVtOjE2OworCXUzMiAgICAgICAgaXBfYWRkcmVzc1s0XTsKKwl1MzIgICAgICAgIHJlc2VydmVkOjE2OworCXUzMiAgICAgICAgdmVuZG9yX3NwZWNpZmljOjE2OworfTsKKworc3RydWN0IGZjX3JuaWRfYWNjX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworCXUzMiAgICAgICAgbm9kZV9pZF9kYXRhX2Zvcm1hdDo4OworCXUzMiAgICAgICAgY29tbW9uX2lkX2RhdGFfbGVuZ3RoOjg7CisJdTMyICAgICAgICByZXNlcnZlZDo4OworCXUzMiAgICAgICAgc3BlY2lmaWNfaWRfZGF0YV9sZW5ndGg6ODsKKwlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zIGNvbW1vbl9pZF9kYXRhOworCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zIGdlbl90b3BvbG9neV9kYXRhOworfTsKKworI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9VTktOT1dOICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX09USEVSICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSFVCICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0dBVEVXQVkgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1RPUkFHRV9ERVZJQ0UgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9IT1NUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfU1VCU1lTVEVNICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1RPUkFHRV9BQ0NFU1NfREVWSUNFICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9OQVNfU0VSVkVSICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0JSSURHRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfVklSVFVBTElaQVRJT05fREVWSUNFICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9NVUxUSV9GVU5DVElPTl9ERVZJQ0UgICAgICAweDAwMDAwMEZGCisKK2VudW0gZmNfcnBzY19zcGVlZF9jYXB7CisJUlBTQ19TUEVFRF9DQVBfMUcgPSAweDgwMDAsCisJUlBTQ19TUEVFRF9DQVBfMkcgPSAweDQwMDAsCisJUlBTQ19TUEVFRF9DQVBfNEcgPSAweDIwMDAsCisJUlBTQ19TUEVFRF9DQVBfMTBHID0gMHgxMDAwLAorCVJQU0NfU1BFRURfQ0FQXzhHID0gMHgwODAwLAorCVJQU0NfU1BFRURfQ0FQXzE2RyA9IDB4MDQwMCwKKworCVJQU0NfU1BFRURfQ0FQX1VOS05PV04gPSAweDAwMDEsCit9OworCitlbnVtIGZjX3Jwc2Nfb3Bfc3BlZWRfc3sKKwlSUFNDX09QX1NQRUVEXzFHID0gMHg4MDAwLAorCVJQU0NfT1BfU1BFRURfMkcgPSAweDQwMDAsCisJUlBTQ19PUF9TUEVFRF80RyA9IDB4MjAwMCwKKwlSUFNDX09QX1NQRUVEXzEwRyA9IDB4MTAwMCwKKwlSUFNDX09QX1NQRUVEXzhHID0gMHgwODAwLAorCVJQU0NfT1BfU1BFRURfMTZHID0gMHgwNDAwLAorCisJUlBTQ19PUF9TUEVFRF9OT1RfRVNUID0gMHgwMDAxLAkvKiEgc3BlZWQgbm90IGVzdGFibGlzaGVkICovCit9OworCitzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3N7CisJdTE2ICAgICAgICBwb3J0X3NwZWVkX2NhcDsJLyohIHNlZSBmY19ycHNjX3NwZWVkX2NhcF90ICovCisJdTE2ICAgICAgICBwb3J0X29wX3NwZWVkOwkvKiEgc2VlIGZjX3Jwc2Nfb3Bfc3BlZWRfdCAqLworfTsKKworZW51bSBsaW5rX2UyZV9iZWFjb25fc3ViY21keworCUxJTktfRTJFX0JFQUNPTl9PTiA9IDEsCisJTElOS19FMkVfQkVBQ09OX09GRiA9IDIKK307CisKK2VudW0gYmVhY29uX3R5cGV7CisJQkVBQ09OX1RZUEVfTk9STUFMCT0gMSwJLyohIE5vcm1hbCBCZWFjb25pbmcuIEdyZWVuICovCisJQkVBQ09OX1RZUEVfV0FSTgk9IDIsCS8qISBXYXJuaW5nIEJlYWNvbmluZy4gWWVsbG93L0FtYmVyICovCisJQkVBQ09OX1RZUEVfQ1JJVElDQUwJPSAzCS8qISBDcml0aWNhbCBCZWFjb25pbmcuIFJlZCAqLworfTsKKworc3RydWN0IGxpbmtfZTJlX2JlYWNvbl9wYXJhbV9zIHsKKwl1OCAgICAgICAgIGJlYWNvbl90eXBlOwkvKiBCZWFjb24gVHlwZS4gU2VlIGJlYWNvbl90eXBlX3QgKi8KKwl1OCAgICAgICAgIGJlYWNvbl9mcmVxdWVuY3k7CisJCQkJCS8qIEJlYWNvbiBmcmVxdWVuY3kuIE51bWJlciBvZiBibGlua3MKKwkJCQkJICogcGVyIDEwIHNlY29uZHMKKwkJCQkJICovCisJdTE2ICAgICAgICBiZWFjb25fZHVyYXRpb247LyogQmVhY29uIGR1cmF0aW9uIChpbiBTZWNvbmRzKS4gVGhlCisJCQkJCSAqIGNvbW1hbmQgb3BlcmF0aW9uIHNob3VsZCBiZQorCQkJCQkgKiB0ZXJtaW5hdGVkIGF0IHRoZSBlbmQgb2YgdGhpcworCQkJCQkgKiB0aW1lb3V0IHZhbHVlLgorCQkJCQkgKgorCQkJCQkgKiBJZ25vcmVkIGlmIGRpYWdfc3ViX2NtZCBpcworCQkJCQkgKiBMSU5LX0UyRV9CRUFDT05fT0ZGLgorCQkJCQkgKgorCQkJCQkgKiBJZiAwLCBiZWFjb25pbmcgd2lsbCBjb250aW51ZSB0aWxsIGEKKwkJCQkJICogQkVBQ09OIE9GRiByZXF1ZXN0IGlzIHJlY2VpdmVkCisJCQkJCSAqLworfTsKKworLyoKKyAqIExpbmsgRTJFIGJlYWNvbiByZXF1ZXN0L2dvb2QgcmVzcG9uc2UgZm9ybWF0LiBGb3IgTFNfUkpUcyB1c2UgZmNfbHNfcmp0X3QKKyAqLworc3RydWN0IGxpbmtfZTJlX2JlYWNvbl9yZXFfc3sKKwl1MzIgICAgICAgIGxzX2NvZGU7CS8qISBGQ19FTFNfRTJFX0xCRUFDT04gaW4gcmVxdWVzdHMgKgorCQkJCQkgKm9yIEZDX0VMU19BQ0MgaW4gZ29vZCByZXBsaWVzICovCisJdTMyICAgICAgICBsc19zdWJfY21kOwkvKiEgU2VlIGxpbmtfZTJlX2JlYWNvbl9zdWJjbWRfdCAqLworCXN0cnVjdCBsaW5rX2UyZV9iZWFjb25fcGFyYW1fcyBiZWFjb25fcGFybTsKK307CisKKy8qKgorICogSWYgUlBTQyByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIERvbWFpbiBDb250cm9sbGVyLCB0aGUgcmVxdWVzdCBpcyBmb3IKKyAqIGFsbCB0aGUgcG9ydHMgd2l0aGluIHRoYXQgZG9tYWluIChUT0RPIC0gSSBkb24ndCB0aGluayBGT1MgaW1wbGVtZW50cworICogdGhpcy4uLikuCisgKi8KK3N0cnVjdCBmY19ycHNjX2NtZF9zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKK307CisKKy8qCisgKiBSUFNDIEFjYworICovCitzdHJ1Y3QgZmNfcnBzY19hY2Nfc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHJzdmQ6ODsKKwl1MzIgICAgICAgIG51bV9lbnRyaWVzOjE2OworCisJc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zIHNwZWVkX2luZm9bMV07Cit9OworCisvKioKKyAqIElmIFJQU0MyIHJlcXVlc3QgaXMgc2VudCB0byB0aGUgRG9tYWluIENvbnRyb2xsZXIsCisgKi8KKyNkZWZpbmUgRkNfQlJDRF9UT0tFTiAgICAweDQyNTI0MzQ0CisKK3N0cnVjdCBmY19ycHNjMl9jbWRfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CisJdTMyICAgICAgIAl0b2tlbjsKKwl1MTYgICAgIAlyZXN2ZDsKKwl1MTYgICAgIAludW1fcGlkczsgICAgICAgLyogTnVtYmVyIG9mIHBpZHMgaW4gdGhlIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgIHsKKwkJdTMyCXJzdmQxOjg7CisJCXUzMglwaWQ6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLworCX0gcGlkX2xpc3RbMV07Cit9OworCitlbnVtIGZjX3Jwc2MyX3BvcnRfdHlwZXsKKwlSUFNDMl9QT1JUX1RZUEVfVU5LTk9XTiA9IDAsCisJUlBTQzJfUE9SVF9UWVBFX05QT1JUICAgPSAxLAorCVJQU0MyX1BPUlRfVFlQRV9OTFBPUlQgID0gMiwKKwlSUFNDMl9QT1JUX1RZUEVfTlBJVl9QT1JUICA9IDB4NWYsCisJUlBTQzJfUE9SVF9UWVBFX05QT1JUX1RSVU5LICA9IDB4NmYsCit9OworCisvKgorICogUlBTQzIgcG9ydEluZm8gZW50cnkgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBmY19ycHNjMl9wb3J0X2luZm9fc3sKKyAgICB1MzIgICAgcGlkOyAgICAgICAgLyogUElEICovCisgICAgdTE2ICAgIHJlc3ZkMTsKKyAgICB1MTYgICAgaW5kZXg7ICAgICAgLyogcG9ydCBudW1iZXIgLyBpbmRleCAqLworICAgIHU4ICAgICByZXN2ZDI7CisgICAgdTggICAgCXR5cGU7ICAgICAgICAvKiBwb3J0IHR5cGUgTi9OTC8uLi4gKi8KKyAgICB1MTYgICAgc3BlZWQ7ICAgICAgLyogcG9ydCBPcGVyYXRpbmcgU3BlZWQgKi8KK307CisKKy8qCisgKiBSUFNDMiBBY2NlcHQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcnBzYzJfYWNjX3N7CisJdTggICAgICAgIGVsc19jbWQ7CisJdTggICAgICAgIHJlc3ZkOworCXUxNiAgICAgICBudW1fcGlkczsgIC8qIE51bWJlciBvZiBwaWRzIGluIHRoZSByZXF1ZXN0ICovCisJc3RydWN0IGZjX3Jwc2MyX3BvcnRfaW5mb19zICBwb3J0X2luZm9bMV07ICAgIC8qIHBvcnQgaW5mb3JtYXRpb24gKi8KK307CisKKy8qKgorICogYml0IGZpZWxkcyBzbyB0aGF0IG11bHRpcGxlIGNsYXNzZXMgY2FuIGJlIHNwZWNpZmllZAorICovCitlbnVtIGZjX2Nvc3sKKwlGQ19DTEFTU18yCT0gMHgwNCwKKwlGQ19DTEFTU18zCT0gMHgwOCwKKwlGQ19DTEFTU18yXzMJPSAweDBDLAorfTsKKworLyoKKyAqIHN5bWJvbGljIG5hbWUKKyAqLworc3RydWN0IGZjX3N5bW5hbWVfc3sKKwl1OCAgICAgICAgIHN5bW5hbWVbRkNfU1lNTkFNRV9NQVhdOworfTsKKworc3RydWN0IGZjX2FscGFibV9zeworCXU4ICAgICAgICAgYWxwYV9ibVtGQ19BTFBBX01BWCAvIDhdOworfTsKKworLyoKKyAqIHByb3RvY29sIGRlZmF1bHQgdGltZW91dCB2YWx1ZXMKKyAqLworI2RlZmluZSBGQ19FRF9UT1YJCTIKKyNkZWZpbmUgRkNfUkVDX1RPVgkJKEZDX0VEX1RPViArIDEpCisjZGVmaW5lIEZDX1JBX1RPVgkJMTAKKyNkZWZpbmUgRkNfRUxTX1RPVgkJKDIgKiBGQ19SQV9UT1YpCisKKy8qCisgKiB2aXJ0dWFsIGZhYnJpYyByZWxhdGVkIGRlZmluZXMKKyAqLworI2RlZmluZSBGQ19WRl9JRF9OVUxMICAgIDAJLyogIG11c3Qgbm90IGJlIHVzZWQgYXMgVkZfSUQgKi8KKyNkZWZpbmUgRkNfVkZfSURfTUlOICAgICAxCisjZGVmaW5lIEZDX1ZGX0lEX01BWCAgICAgMHhFRkYKKyNkZWZpbmUgRkNfVkZfSURfQ1RMICAgICAweEZFRgkvKiAgY29udHJvbCBWRl9JRCAqLworCisvKioKKyAqIFZpcnR1YWwgRmFicmljIFRhZ2dpbmcgaGVhZGVyIGZvcm1hdAorICogQGNhdXRpb24gVGhpcyBpcyBkZWZpbmVkIG9ubHkgaW4gQklHIEVORElBTiBmb3JtYXQuCisgKi8KK3N0cnVjdCBmY192ZnRfc3sKKwl1MzIgICAgICAgIHJfY3RsOjg7CisJdTMyICAgICAgICB2ZXI6MjsKKwl1MzIgICAgICAgIHR5cGU6NDsKKwl1MzIgICAgICAgIHJlc19hOjI7CisJdTMyICAgICAgICBwcmlvcml0eTozOworCXUzMiAgICAgICAgdmZfaWQ6MTI7CisJdTMyICAgICAgICByZXNfYjoxOworCXUzMiAgICAgICAgaG9wY3Q6ODsKKwl1MzIgICAgICAgIHJlc19jOjI0OworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNfc3AuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mY19zcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YmIwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNfc3AuaApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRkNfU1BfSF9fCisjZGVmaW5lIF9fRkNfU1BfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBhdXRoX2Vsc19mbGFnc3sKKwlGQ19BVVRIX0VMU19NT1JFX0ZSQUdTX0ZMQUcgCT0gMHg4MCwJLyohIGJpdC03LiBNb3JlIEZyYWdtZW50cworCQkJCQkJICogRm9sbG93CisJCQkJCQkgKi8KKwlGQ19BVVRIX0VMU19DT05DQVRfRkxBRyAJPSAweDQwLAkvKiEgYml0LTYuIENvbmNhdGVuYXRpb24gRmxhZyAqLworCUZDX0FVVEhfRUxTX1NFUV9OVU1fRkxBRyAJPSAweDAxIAkvKiEgYml0LTAuIFNlcXVlbmNlIE51bWJlciAqLworfTsKKworZW51bSBhdXRoX21zZ19jb2Rlc3sKKwlGQ19BVVRIX01DX0FVVEhfUkpUCQk9IDB4MEEsCS8qISBBdXRoIFJlamVjdCAqLworCUZDX0FVVEhfTUNfQVVUSF9ORUcgCQk9IDB4MEIsIC8qISBBdXRoIE5lZ290aWF0ZSAqLworCUZDX0FVVEhfTUNfQVVUSF9ET05FIAkJPSAweDBDLCAvKiEgQXV0aCBEb25lICovCisKKwlGQ19BVVRIX01DX0RIQ0hBUF9DSEFMIAkJPSAweDEwLCAvKiEgREhDSEFQIENoYWxsZW5nZSAqLworCUZDX0FVVEhfTUNfREhDSEFQX1JFUExZIAk9IDB4MTEsIC8qISBESENIQVAgUmVwbHkgKi8KKwlGQ19BVVRIX01DX0RIQ0hBUF9TVUNDIAkJPSAweDEyLCAvKiEgREhDSEFQIFN1Y2Nlc3MgKi8KKworCUZDX0FVVEhfTUNfRkNBUF9SRVEgCQk9IDB4MTMsIC8qISBGQ0FQIFJlcXVlc3QgKi8KKwlGQ19BVVRIX01DX0ZDQVBfQUNLIAkJPSAweDE0LCAvKiEgRkNBUCBBY2tub3dsZWRnZSAqLworCUZDX0FVVEhfTUNfRkNBUF9DT05GIAkJPSAweDE1LCAvKiEgRkNBUCBDb25maXJtICovCisKKwlGQ19BVVRIX01DX0ZDUEFQX0lOSVQgCQk9IDB4MTYsIC8qISBGQ1BBUCBJbml0ICovCisJRkNfQVVUSF9NQ19GQ1BBUF9BQ0MgCQk9IDB4MTcsIC8qISBGQ1BBUCBBY2NlcHQgKi8KKwlGQ19BVVRIX01DX0ZDUEFQX0NPTVAgCQk9IDB4MTgsIC8qISBGQ1BBUCBDb21wbGV0ZSAqLworCisJRkNfQVVUSF9NQ19JS0VfU0FfSU5JVCAJCT0gMHgyMiwgLyohIElLRSBTQSBJTklUICovCisJRkNfQVVUSF9NQ19JS0VfU0FfQVVUSCAJCT0gMHgyMywgLyohIElLRSBTQSBBdXRoICovCisJRkNfQVVUSF9NQ19JS0VfQ1JFQVRFX0NISUxEX1NBCT0gMHgyNCwgLyohIElLRSBDcmVhdGUgQ2hpbGQgU0EgKi8KKwlGQ19BVVRIX01DX0lLRV9JTkZPIAkJPSAweDI1LCAvKiEgSUtFIGluZm9ybWF0aW9uYWwgKi8KK307CisKK2VudW0gYXV0aF9wcm90b192ZXJzaW9ueworCUZDX0FVVEhfUFJPVE9fVkVSXzEgCT0gMSwJLyohIFByb3RvY29sIFZlcnNpb24gMSAqLworfTsKKworZW51bSB7CisJRkNfQVVUSF9FTFNfQ09NTUFORF9DT0RFID0gMHg5MCwvKiEgQXV0aGVudGljYXRpb24gRUxTIENvbW1hbmQgY29kZSAgKi8KKwlGQ19BVVRIX1BST1RPX1BBUkFNX0xFTl9TWiA9IDQsCS8qISBTaXplIG9mIFByb3RvIFBhcmFtZXRlciBMZW4gRmllbGQgKi8KKwlGQ19BVVRIX1BST1RPX1BBUkFNX1ZBTF9TWiA9IDQsCS8qISBTaXplIG9mIFByb3RvIFBhcmFtZXRlciBWYWwgRmllbGQgKi8KKwlGQ19NQVhfQVVUSF9TRUNSRVRfTEVOICAgICA9IDI1NiwKKwkJCQkJLyohIE1heGltdW0gc2VjcmV0IHN0cmluZyBsZW5ndGggKi8KKwlGQ19BVVRIX05VTV9VU0FCTEVfUFJPVE9fTEVOX1NaID0gNCwKKwkJCQkJLyohIFNpemUgb2YgdXNhYmxlIHByb3RvY29scyBmaWVsZCAqLworCUZDX0FVVEhfUkVTUF9WQUxVRV9MRU5fU1oJPSA0LAorCQkJCQkvKiEgU2l6ZSBvZiByZXNwb25zZSB2YWx1ZSBsZW5ndGggKi8KKwlGQ19NQVhfQ0hBUF9LRVlfTEVOCT0gMjU2LAkvKiEgTWF4aW11bSBtZDUgZGlnZXN0IGxlbmd0aCAqLworCUZDX01BWF9BVVRIX1JFVFJJRVMgICAgID0gMywJLyohIE1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgKi8KKwlGQ19NRDVfRElHRVNUX0xFTiAgICAgICA9IDE2LAkvKiEgTUQ1IGRpZ2VzdCBsZW5ndGggKi8KKwlGQ19TSEExX0RJR0VTVF9MRU4gICAgICA9IDIwLAkvKiEgU0hBMSBkaWdlc3QgbGVuZ3RoICovCisJRkNfTUFYX0RIR19TVVBQT1JURUQgICAgPSAxLAkvKiEgTWF4aW11bSBESCBHcm91cHMgc3VwcG9ydGVkICovCisJRkNfTUFYX0FMR19TVVBQT1JURUQgICAgPSAxLAkvKiEgTWF4aW11bSBhbGdvcml0aG1zIHN1cHBvcnRlZCAqLworCUZDX01BWF9QUk9UT19TVVBQT1JURUQgID0gMSwJLyohIE1heGltdW0gcHJvdG9jb2xzIHN1cHBvcnRlZCAqLworCUZDX1NUQVJUX1RYTl9JRCAgICAgICAgID0gMiwJLyohIFN0YXJ0aW5nIHRyYW5zYWN0aW9uIElEICovCit9OworCitlbnVtIGF1dGhfcHJvdG9faWR7CisJRkNfQVVUSF9QUk9UT19ESENIQVAJCT0gMHgwMDAwMDAwMSwKKwlGQ19BVVRIX1BST1RPX0ZDQVAgCQk9IDB4MDAwMDAwMDIsCisJRkNfQVVUSF9QUk9UT19GQ1BBUCAJCT0gMHgwMDAwMDAwMywKKwlGQ19BVVRIX1BST1RPX0lLRXYyIAkJPSAweDAwMDAwMDA0LAorCUZDX0FVVEhfUFJPVE9fSUtFdjJfQVVUSCAJPSAweDAwMDAwMDA1LAorfTsKKworc3RydWN0IGF1dGhfbmFtZV9zeworCXUxNgluYW1lX3RhZzsJLyohIE5hbWUgVGFnID0gMSBmb3IgQXV0aGVudGljYXRpb24gKi8KKwl1MTYJbmFtZV9sZW47CS8qISBOYW1lIExlbmd0aCA9IDggZm9yIEF1dGhlbnRpY2F0aW9uCisJCQkJCSAqLworCXd3bl90CQluYW1lOyAgCQkvKiEgTmFtZS4gVE9ETyAtIGlzIHRoaXMgUFdXTiAqLworfTsKKworCitlbnVtIGF1dGhfaGFzaF9mdW5jeworCUZDX0FVVEhfSEFTSF9GVU5DX01ENSAJCT0gMHgwMDAwMDAwNSwKKwlGQ19BVVRIX0hBU0hfRlVOQ19TSEFfMSAJPSAweDAwMDAwMDA2LAorfTsKKworZW51bSBhdXRoX2RoX2dpZHsKKwlGQ19BVVRIX0RIX0dJRF8wX0RIR19OVUxMCT0gMHgwMDAwMDAwMCwKKwlGQ19BVVRIX0RIX0dJRF8xX0RIR18xMDI0CT0gMHgwMDAwMDAwMSwKKwlGQ19BVVRIX0RIX0dJRF8yX0RIR18xMjgwCT0gMHgwMDAwMDAwMiwKKwlGQ19BVVRIX0RIX0dJRF8zX0RIR18xNTM2CT0gMHgwMDAwMDAwMywKKwlGQ19BVVRIX0RIX0dJRF80X0RIR18yMDQ4CT0gMHgwMDAwMDAwNCwKKwlGQ19BVVRIX0RIX0dJRF82X0RIR18zMDcyCT0gMHgwMDAwMDAwNiwKKwlGQ19BVVRIX0RIX0dJRF83X0RIR180MDk2CT0gMHgwMDAwMDAwNywKKwlGQ19BVVRIX0RIX0dJRF84X0RIR182MTQ0CT0gMHgwMDAwMDAwOCwKKwlGQ19BVVRIX0RIX0dJRF85X0RIR184MTkyCT0gMHgwMDAwMDAwOSwKK307CisKK3N0cnVjdCBhdXRoX2Vsc19tc2dfcyB7CisJdTgJCWF1dGhfZWxzX2NvZGU7CS8qICBBdXRoZW50aWNhdGlvbiBFTFMgQ29kZSAoMHg5MCkgKi8KKwl1OCAJYXV0aF9lbHNfZmxhZzsgCS8qICBBdXRoZW50aWNhdGlvbiBFTFMgRmxhZ3MgKi8KKwl1OCAJYXV0aF9tc2dfY29kZTsgCS8qICBBdXRoZW50aWNhdGlvbiBNZXNzYWdlIENvZGUgKi8KKwl1OCAJcHJvdG9fdmVyc2lvbjsgCS8qICBQcm90b2NvbCBWZXJzaW9uICovCisJdTMyCW1zZ19sZW47IAkvKiAgTWVzc2FnZSBMZW5ndGggKi8KKwl1MzIJdHJhbnNfaWQ7IAkvKiAgVHJhbnNhY3Rpb24gSWRlbnRpZmllciAoVF9JRCkgKi8KKworCS8qIE1zZyBwYXlsb2FkIGZvbGxvd3MuLi4gKi8KK307CisKKworZW51bSBhdXRoX25lZ19wYXJhbV90YWdzIHsKKwlGQ19BVVRIX05FR19ESENIQVBfSEFTSExJU1QgCT0gMHgwMDAxLAorCUZDX0FVVEhfTkVHX0RIQ0hBUF9ESEdfSURfTElTVCAJPSAweDAwMDIsCit9OworCisKK3N0cnVjdCBkaGNoYXBfcGFyYW1fZm9ybWF0X3MgeworCXUxNgl0YWc7CQkvKiEgUGFyYW1ldGVyIFRhZy4gU2VlCisJCQkJCSAqIGF1dGhfbmVnX3BhcmFtX3RhZ3NfdAorCQkJCQkgKi8KKwl1MTYJd29yZF9jbnQ7CisKKwkvKiBmb2xsb3dlZCBieSB2YXJpYWJsZSBsZW5ndGggcGFyYW1ldGVyIHZhbHVlLi4uICovCit9OworCitzdHJ1Y3QgYXV0aF9wcm90b19wYXJhbXNfcyB7CisJdTMyCXByb3RvX3BhcmFtX2xlbjsKKwl1MzIJcHJvdG9faWQ7CisKKwkvKgorCSAqIEZvbGxvd2VkIGJ5IHZhcmlhYmxlIGxlbmd0aCBQcm90b2NvbCBzcGVjaWZpYyBwYXJhbWV0ZXJzLiBESC1DSEFQCisJICogdXNlcyBkaGNoYXBfcGFyYW1fZm9ybWF0X3QKKwkgKi8KK307CisKK3N0cnVjdCBhdXRoX25lZ19tc2dfcyB7CisJc3RydWN0IGF1dGhfbmFtZV9zCWF1dGhfaW5pX25hbWU7CisJdTMyCQl1c2FibGVfYXV0aF9wcm90b3M7CisJc3RydWN0IGF1dGhfcHJvdG9fcGFyYW1zX3MgcHJvdG9fcGFyYW1zWzFdOyAvKiEgKDEuLnVzYWJsZV9hdXRoX3Byb3RvKQorCQkJCQkJICAgICAqIHByb3RvY29sIHBhcmFtcworCQkJCQkJICAgICAqLworfTsKKworc3RydWN0IGF1dGhfZGhfdmFsX3MgeworCXUzMiBkaF92YWxfbGVuOworCXUzMiBkaF92YWxbMV07Cit9OworCitzdHJ1Y3QgYXV0aF9kaGNoYXBfY2hhbF9tc2dfcyB7CisJc3RydWN0IGF1dGhfZWxzX21zZ19zCWhkcjsKKwlzdHJ1Y3QgYXV0aF9uYW1lX3MgYXV0aF9yZXNwb25kZXJfbmFtZTsJLyogVE9ETyBWUksgLSBpcyBhdXRoX25hbWVfdAorCQkJCQkJICogdHlwZSBPSz8KKwkJCQkJCSAqLworCXUzMiAJaGFzaF9pZDsKKwl1MzIgCWRoX2dycF9pZDsKKwl1MzIgCWNoYWxfdmFsX2xlbjsKKwljaGFyCQljaGFsX3ZhbFsxXTsKKworCS8qIC4uLmZvbGxvd2VkIGJ5IHZhcmlhYmxlIENoYWxsZW5nZSBsZW5ndGgvdmFsdWUgYW5kIERIIGxlbmd0aC92YWx1ZSAqLworfTsKKworCitlbnVtIGF1dGhfcmp0X2NvZGVzIHsKKwlGQ19BVVRIX1JKVF9DT0RFX0FVVEhfRkFJTFVSRSAJPSAweDAxLAorCUZDX0FVVEhfUkpUX0NPREVfTE9HSUNBTF9FUlIJPSAweDAyLAorfTsKKworZW51bSBhdXRoX3JqdF9jb2RlX2V4cHMgeworCUZDX0FVVEhfQ0VYUF9BVVRIX01FQ0hfTk9UX1VTQUJMRQk9IDB4MDEsCisJRkNfQVVUSF9DRVhQX0RIX0dST1VQX05PVF9VU0FCTEUgCT0gMHgwMiwKKwlGQ19BVVRIX0NFWFBfSEFTSF9GVU5DX05PVF9VU0FCTEUgCT0gMHgwMywKKwlGQ19BVVRIX0NFWFBfQVVUSF9YQUNUX1NUQVJURUQJCT0gMHgwNCwKKwlGQ19BVVRIX0NFWFBfQVVUSF9GQUlMRUQgCQk9IDB4MDUsCisJRkNfQVVUSF9DRVhQX0lOQ09SUkVDVF9QTEQgCQk9IDB4MDYsCisJRkNfQVVUSF9DRVhQX0lOQ09SUkVDVF9QUk9UT19NU0cgCT0gMHgwNywKKwlGQ19BVVRIX0NFWFBfUkVTVEFSVF9BVVRIX1BST1RPIAk9IDB4MDgsCisJRkNfQVVUSF9DRVhQX0FVVEhfQ09OQ0FUX05PVF9TVVBQIAk9IDB4MDksCisJRkNfQVVUSF9DRVhQX1BST1RPX1ZFUl9OT1RfU1VQUCAJPSAweDBBLAorfTsKKworZW51bSBhdXRoX3N0YXR1cyB7CisJRkNfQVVUSF9TVEFURV9JTlBST0dSRVNTID0gMCwgCS8qISBhdXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzcyAJKi8KKwlGQ19BVVRIX1NUQVRFX0ZBSUxFRAk9IDEsIAkvKiEgYXV0aGVudGljYXRpb24gZmFpbGVkICovCisJRkNfQVVUSF9TVEFURV9TVUNDRVNTCT0gMiAJLyohIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwJKi8KK307CisKK3N0cnVjdCBhdXRoX3JqdF9tc2dfcyB7CisJc3RydWN0IGF1dGhfZWxzX21zZ19zCWhkcjsKKwl1OAkJcmVhc29uX2NvZGU7CisJdTgJCXJlYXNvbl9jb2RlX2V4cDsKKwl1OAkJcnN2ZFsyXTsKK307CisKKworc3RydWN0IGF1dGhfZGhjaGFwX25lZ19tc2dfcyB7CisJc3RydWN0IGF1dGhfZWxzX21zZ19zIGhkcjsKKwlzdHJ1Y3QgYXV0aF9uZWdfbXNnX3MgbmVnbzsKK307CisKK3N0cnVjdCBhdXRoX2RoY2hhcF9yZXBseV9tc2dfcyB7CisJc3RydWN0IGF1dGhfZWxzX21zZ19zCWhkcjsKKworCS8qCisJICogZm9sbG93ZWQgYnkgcmVzcG9uc2UgdmFsdWUgbGVuZ3RoICYgVmFsdWUgKyBESCBWYWx1ZSBMZW5ndGggJiBWYWx1ZQorCSAqLworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fRkNfU1BfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNwLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkZTY4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mY3AuaApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRkNQUFJPVE9fSF9fCisjZGVmaW5lIF9fRkNQUFJPVE9fSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC9zY3NpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIHsKKwlGQ1BfUkpUCQk9IDB4MDEwMDAwMDAsCS8qIFNSUiByZWplY3QgKi8KKwlGQ1BfU1JSX0FDQ0VQVAk9IDB4MDIwMDAwMDAsCS8qIFNSUiBhY2NlcHQgKi8KKwlGQ1BfU1JSCQk9IDB4MTQwMDAwMDAsCS8qIFNlcXVlbmNlIFJldHJhbnNtaXNzaW9uIFJlcXVlc3QgKi8KK307CisKKy8qCisgKiBTUlIgRkMtNCBMUyBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19zcnJfc3sKKwl1MzIJbHNfY21kOworCXUzMiAgICAgICAgb3hfaWQ6MTY7CS8qIG94LWlkICovCisJdTMyICAgICAgICByeF9pZDoxNjsJLyogcngtaWQgKi8KKwl1MzIgICAgICAgIHJvOwkJLyogcmVsYXRpdmUgb2Zmc2V0ICovCisJdTMyICAgICAgICByX2N0bDo4OwkJLyogUl9DVEwgZm9yIEkuVS4gKi8KKwl1MzIgICAgICAgIHJlczoyNDsKK307CisKKworLyoKKyAqIEZDUF9DTU5EIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgRkNQX0NNTkRfQ0RCX0xFTiAgICAxNgorI2RlZmluZSBGQ1BfQ01ORF9MVU5fTEVOICAgIDgKKworc3RydWN0IGZjcF9jbW5kX3N7CisJbHVuX3QgICAgICAgICAgIGx1bjsJCS8qIDY0LWJpdCBMVSBudW1iZXIgKi8KKwl1OCAgICAgICAgIGNybjsJCS8qIGNvbW1hbmQgcmVmZXJlbmNlIG51bWJlciAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXN2ZDoxLAorCQkJcHJpb3JpdHk6NCwJLyogRkNQLTM6IFNBTS0zIHByaW9yaXR5ICovCisJCQl0YXNrYXR0cjozOwkvKiBzY3NpIHRhc2sgYXR0cmlidXRlICovCisjZWxzZQorCXU4ICAgICAgICAgdGFza2F0dHI6MywJLyogc2NzaSB0YXNrIGF0dHJpYnV0ZSAqLworCQkJcHJpb3JpdHk6NCwJLyogRkNQLTM6IFNBTS0zIHByaW9yaXR5ICovCisJCQlyZXN2ZDoxOworI2VuZGlmCisJdTggICAgICAgICB0bV9mbGFnczsJLyogdGFzayBtYW5hZ2VtZW50IGZsYWdzICovCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGFkZGxfY2RiX2xlbjo2LAkvKiBhZGRpdGlvbmFsIENEQiBsZW5ndGggd29yZHMgKi8KKwkJCWlvZGlyOjI7CS8qIHJlYWQvd3JpdGUgRkNQX0RBVEEgSVVzICovCisjZWxzZQorCXU4ICAgICAgICAgaW9kaXI6MiwJLyogcmVhZC93cml0ZSBGQ1BfREFUQSBJVXMgKi8KKwkJCWFkZGxfY2RiX2xlbjo2OwkvKiBhZGRpdGlvbmFsIENEQiBsZW5ndGggKi8KKyNlbmRpZgorCXN0cnVjdCBzY3NpX2NkYl9zICAgICAgY2RiOworCisJLyoKKwkgKiAhISEgYWRkaXRpb25hbCBjZGIgYnl0ZXMgZm9sbG93cyBoZXJlISEhCisJICovCisJdTMyICAgICAgICBmY3BfZGw7CS8qIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkICovCit9OworCisjZGVmaW5lIGZjcF9jbW5kX2NkYl9sZW4oX2NtbmQpICgoX2NtbmQpLT5hZGRsX2NkYl9sZW4gKiA0ICsgRkNQX0NNTkRfQ0RCX0xFTikKKyNkZWZpbmUgZmNwX2NtbmRfZmNwZGwoX2NtbmQpCSgoJihfY21uZCktPmZjcF9kbClbKF9jbW5kKS0+YWRkbF9jZGJfbGVuXSkKKworLyoKKyAqIGZjcF9jbW5kX3QuaW9kaXIgZmllbGQgdmFsdWVzCisgKi8KK2VudW0gZmNwX2lvZGlyeworCUZDUF9JT0RJUl9OT05FCT0gMCwKKwlGQ1BfSU9ESVJfV1JJVEUgPSAxLAorCUZDUF9JT0RJUl9SRUFECT0gMiwKKwlGQ1BfSU9ESVJfUlcJPSAzLAorfTsKKworLyoKKyAqIFRhc2sgYXR0cmlidXRlIGZpZWxkCisgKi8KK2VudW0geworCUZDUF9UQVNLX0FUVFJfU0lNUExFCT0gMCwKKwlGQ1BfVEFTS19BVFRSX0hPUQk9IDEsCisJRkNQX1RBU0tfQVRUUl9PUkRFUkVECT0gMiwKKwlGQ1BfVEFTS19BVFRSX0FDQQk9IDQsCisJRkNQX1RBU0tfQVRUUl9VTlRBR0dFRAk9IDUsCS8qIG9ic29sZXRlIGluIEZDUC0zICovCit9OworCisvKgorICogVGFzayBtYW5hZ2VtZW50IGZsYWdzIGZpZWxkIC0gb25seSBvbmUgYml0IHNoYWxsIGJlIHNldAorICovCisjaWZuZGVmIEJJVAorI2RlZmluZSBCSVQoX3gpCSgxIDw8IChfeCkpCisjZW5kaWYKK2VudW0gZmNwX3RtX2NtbmR7CisJRkNQX1RNX0FCT1JUX1RBU0tfU0VUCT0gQklUKDEpLAorCUZDUF9UTV9DTEVBUl9UQVNLX1NFVAk9IEJJVCgyKSwKKwlGQ1BfVE1fTFVOX1JFU0VUCT0gQklUKDQpLAorCUZDUF9UTV9UQVJHRVRfUkVTRVQJPSBCSVQoNSksCS8qIG9ic29sZXRlIGluIEZDUC0zICovCisJRkNQX1RNX0NMRUFSX0FDQQk9IEJJVCg2KSwKK307CisKKy8qCisgKiBGQ1BfWEZFUl9SRFkgSVUgZGVmaW5lcworICovCitzdHJ1Y3QgZmNwX3hmZXJfcmR5X3N7CisJdTMyICAgICAgICBkYXRhX3JvOworCXUzMiAgICAgICAgYnVyc3RfbGVuOworCXUzMiAgICAgICAgcmVzZXJ2ZWQ7Cit9OworCisvKgorICogRkNQX1JTUCByZXNpZHVlIGZsYWdzCisgKi8KK2VudW0gZmNwX3Jlc2lkdWV7CisJRkNQX05PX1JFU0lEVUUgPSAwLAkvKiBubyByZXNpZHVlICovCisJRkNQX1JFU0lEX09WRVIgPSAxLAkvKiBtb3JlIGRhdGEgbGVmdCB0aGF0IHdhcyBub3Qgc2VudCAqLworCUZDUF9SRVNJRF9VTkRFUiA9IDIsCS8qIGxlc3MgZGF0YSB0aGFuIHJlcXVlc3RlZCAqLworfTsKKworZW51bSB7CisJRkNQX1JTUElORk9fR09PRCA9IDAsCisJRkNQX1JTUElORk9fREFUQUxFTl9NSVNNQVRDSCA9IDEsCisJRkNQX1JTUElORk9fQ01ORF9JTlZBTElEID0gMiwKKwlGQ1BfUlNQSU5GT19ST0xFTl9NSVNNQVRDSCA9IDMsCisJRkNQX1JTUElORk9fVE1fTk9UX1NVUFAgPSA0LAorCUZDUF9SU1BJTkZPX1RNX0ZBSUxFRCA9IDUsCit9OworCitzdHJ1Y3QgZmNwX3JzcGluZm9fc3sKKwl1MzIgICAgICAgIHJlczA6MjQ7CisJdTMyICAgICAgICByc3BfY29kZTo4OwkvKiByZXNwb25zZSBjb2RlIChhcyBhYm92ZSkgKi8KKwl1MzIgICAgICAgIHJlczE7Cit9OworCitzdHJ1Y3QgZmNwX3Jlc3Bfc3sKKwl1MzIgICAgICAgIHJlc2VydmVkWzJdOwkvKiAyIHdvcmRzIHJlc2VydmVkICovCisJdTE2ICAgICAgICByZXNlcnZlZDI7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMzozOworCXU4ICAgICAgICAgZmNwX2NvbmZfcmVxOjE7CS8qIEZDUF9DT05GIGlzIHJlcXVlc3RlZCAqLworCXU4ICAgICAgICAgcmVzaWRfZmxhZ3M6MjsJLyogdW5kZXJmbG93L292ZXJmbG93ICovCisJdTggICAgICAgICBzbnNfbGVuX3ZhbGlkOjE7Lyogc2Vuc2UgbGVuIGlzIHZhbGlkICovCisJdTggICAgICAgICByc3BfbGVuX3ZhbGlkOjE7LyogcmVzcG9uc2UgbGVuIGlzIHZhbGlkICovCisjZWxzZQorCXU4ICAgICAgICAgcnNwX2xlbl92YWxpZDoxOy8qIHJlc3BvbnNlIGxlbiBpcyB2YWxpZCAqLworCXU4ICAgICAgICAgc25zX2xlbl92YWxpZDoxOy8qIHNlbnNlIGxlbiBpcyB2YWxpZCAqLworCXU4ICAgICAgICAgcmVzaWRfZmxhZ3M6MjsJLyogdW5kZXJmbG93L292ZXJmbG93ICovCisJdTggICAgICAgICBmY3BfY29uZl9yZXE6MTsJLyogRkNQX0NPTkYgaXMgcmVxdWVzdGVkICovCisJdTggICAgICAgICByZXNlcnZlZDM6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgc2NzaV9zdGF0dXM7CS8qIG9uZSBieXRlIFNDU0kgc3RhdHVzICovCisJdTMyICAgICAgICByZXNpZHVlOwkvKiByZXNpZHVhbCBkYXRhIGJ5dGVzICovCisJdTMyICAgICAgICBzbnNfbGVuOwkvKiBsZW5ndGggb2Qgc2Vuc2UgaW5mbyAqLworCXUzMiAgICAgICAgcnNwX2xlbjsJLyogbGVuZ3RoIG9mIHJlc3BvbnNlIGluZm8gKi8KK307CisKKyNkZWZpbmUgZmNwX3Nuc2xlbihfX2ZjcHJzcCkJKChfX2ZjcHJzcCktPnNuc19sZW5fdmFsaWQgPyAJCVwKKwkJCQkJKF9fZmNwcnNwKS0+c25zX2xlbiA6IDApCisjZGVmaW5lIGZjcF9yc3BsZW4oX19mY3Byc3ApCSgoX19mY3Byc3ApLT5yc3BfbGVuX3ZhbGlkID8gCQlcCisJCQkJCShfX2ZjcHJzcCktPnJzcF9sZW4gOiAwKQorI2RlZmluZSBmY3BfcnNwaW5mbyhfX2ZjcHJzcCkJKChzdHJ1Y3QgZmNwX3JzcGluZm9fcyAqKSgoX19mY3Byc3ApICsgMSkpCisjZGVmaW5lIGZjcF9zbnNpbmZvKF9fZmNwcnNwKQkoKCh1OCAqKWZjcF9yc3BpbmZvKF9fZmNwcnNwKSkgKyAJXAorCQkJCQkJZmNwX3JzcGxlbihfX2ZjcHJzcCkpCisKK3N0cnVjdCBmY3BfY21uZF9mcl9zeworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgZmNwX2NtbmRfcyAgICAgIGZjcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZkbWkuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwNWMyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mZG1pLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZETUlfSF9fCisjZGVmaW5lIF9fRkRNSV9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9jdC5oPgorCisjcHJhZ21hIHBhY2soMSkKKworLyoKKyAqIEZETUkgQ29tbWFuZCBDb2RlcworICovCisjZGVmaW5lCUZETUlfR1JITAkJMHgwMTAwCisjZGVmaW5lCUZETUlfR0hBVAkJMHgwMTAxCisjZGVmaW5lCUZETUlfR1JQTAkJMHgwMTAyCisjZGVmaW5lCUZETUlfR1BBVAkJMHgwMTEwCisjZGVmaW5lCUZETUlfUkhCQQkJMHgwMjAwCisjZGVmaW5lCUZETUlfUkhBVAkJMHgwMjAxCisjZGVmaW5lCUZETUlfUlBSVAkJMHgwMjEwCisjZGVmaW5lCUZETUlfUlBBCQkweDAyMTEKKyNkZWZpbmUJRkRNSV9ESEJBCQkweDAzMDAKKyNkZWZpbmUJRkRNSV9EUFJUCQkweDAzMTAKKworLyoKKyAqIEZETUkgcmVhc29uIGNvZGVzCisgKi8KKyNkZWZpbmUJRkRNSV9OT19BRERJVElPTkFMX0VYUAkJMHgwMAorI2RlZmluZQlGRE1JX0hCQV9BTFJFQURZX1JFRwkJMHgxMAorI2RlZmluZQlGRE1JX0hCQV9BVFRSSUJfTk9UX1JFRwkJMHgxMQorI2RlZmluZQlGRE1JX0hCQV9BVFRSSUJfTVVMVElQTEUJMHgxMgorI2RlZmluZQlGRE1JX0hCQV9BVFRSSUJfTEVOR1RIX0lOVkFMSUQJMHgxMworI2RlZmluZQlGRE1JX0hCQV9BVFRSSUJfTk9UX1BSRVNFTlQJMHgxNAorI2RlZmluZQlGRE1JX1BPUlRfT1JJR19OT1RfSU5fTElTVAkweDE1CisjZGVmaW5lCUZETUlfUE9SVF9IQkFfTk9UX0lOX0xJU1QJMHgxNgorI2RlZmluZQlGRE1JX1BPUlRfQVRUUklCX05PVF9SRUcJMHgyMAorI2RlZmluZQlGRE1JX1BPUlRfTk9UX1JFRwkJMHgyMQorI2RlZmluZQlGRE1JX1BPUlRfQVRUUklCX01VTFRJUExFCTB4MjIKKyNkZWZpbmUJRkRNSV9QT1JUX0FUVFJJQl9MRU5HVEhfSU5WQUxJRAkweDIzCisjZGVmaW5lCUZETUlfUE9SVF9BTFJFQURZX1JFR0lTVEVSRUVECTB4MjQKKworLyoKKyAqIEZETUkgVHJhbnNtaXNzaW9uIFNwZWVkIE1hc2sgdmFsdWVzCisgKi8KKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF8xRwkJMHgwMDAwMDAwMQorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzJHCQkweDAwMDAwMDAyCisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfMTBHCQkweDAwMDAwMDA0CisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfNEcJCTB4MDAwMDAwMDgKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF84RwkJMHgwMDAwMDAxMAorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzE2RwkJMHgwMDAwMDAyMAorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEX1VOS05PV04JMHgwMDAwODAwMAorCisvKgorICogRkRNSSBIQkEgYXR0cmlidXRlIHR5cGVzCisgKi8KK2VudW0gZmRtaV9oYmFfYXR0cmlidXRlX3R5cGUgeworCUZETUlfSEJBX0FUVFJJQl9OT0RFTkFNRSA9IDEsCS8qIDB4MDAwMSAqLworCUZETUlfSEJBX0FUVFJJQl9NQU5VRkFDVFVSRVIsCS8qIDB4MDAwMiAqLworCUZETUlfSEJBX0FUVFJJQl9TRVJJQUxOVU0sCS8qIDB4MDAwMyAqLworCUZETUlfSEJBX0FUVFJJQl9NT0RFTCwJCS8qIDB4MDAwNCAqLworCUZETUlfSEJBX0FUVFJJQl9NT0RFTF9ERVNDLAkvKiAweDAwMDUgKi8KKwlGRE1JX0hCQV9BVFRSSUJfSFdfVkVSU0lPTiwJLyogMHgwMDA2ICovCisJRkRNSV9IQkFfQVRUUklCX0RSSVZFUl9WRVJTSU9OLAkvKiAweDAwMDcgKi8KKwlGRE1JX0hCQV9BVFRSSUJfUk9NX1ZFUlNJT04sCS8qIDB4MDAwOCAqLworCUZETUlfSEJBX0FUVFJJQl9GV19WRVJTSU9OLAkvKiAweDAwMDkgKi8KKwlGRE1JX0hCQV9BVFRSSUJfT1NfTkFNRSwJLyogMHgwMDBBICovCisJRkRNSV9IQkFfQVRUUklCX01BWF9DVCwJCS8qIDB4MDAwQiAqLworCisJRkRNSV9IQkFfQVRUUklCX01BWF9UWVBFCit9OworCisvKgorICogRkRNSSBQb3J0IGF0dHJpYnV0ZSB0eXBlcworICovCitlbnVtIGZkbWlfcG9ydF9hdHRyaWJ1dGVfdHlwZSB7CisJRkRNSV9QT1JUX0FUVFJJQl9GQzRfVFlQRVMgPSAxLAkvKiAweDAwMDEgKi8KKwlGRE1JX1BPUlRfQVRUUklCX1NVUFBfU1BFRUQsCS8qIDB4MDAwMiAqLworCUZETUlfUE9SVF9BVFRSSUJfUE9SVF9TUEVFRCwJLyogMHgwMDAzICovCisJRkRNSV9QT1JUX0FUVFJJQl9GUkFNRV9TSVpFLAkvKiAweDAwMDQgKi8KKwlGRE1JX1BPUlRfQVRUUklCX0RFVl9OQU1FLAkvKiAweDAwMDUgKi8KKwlGRE1JX1BPUlRfQVRUUklCX0hPU1RfTkFNRSwJLyogMHgwMDA2ICovCisKKwlGRE1JX1BPUlRfQVRUUl9NQVhfVFlQRQorfTsKKworLyoKKyAqIEZETUkgYXR0cmlidXRlCisgKi8KK3N0cnVjdCBmZG1pX2F0dHJfcyB7CisJdTE2ICAgICAgICB0eXBlOworCXUxNiAgICAgICAgbGVuOworCXU4ICAgICAgICAgdmFsdWVbMV07Cit9OworCisvKgorICogSEJBIEF0dHJpYnV0ZSBCbG9jaworICovCitzdHJ1Y3QgZmRtaV9oYmFfYXR0cl9zIHsKKwl1MzIgICAgICAgIGF0dHJfY291bnQ7CS8qICMgb2YgYXR0cmlidXRlcyAqLworCXN0cnVjdCBmZG1pX2F0dHJfcyAgICAgaGJhX2F0dHI7CS8qIG4gYXR0cmlidXRlcyAqLworfTsKKworLyoKKyAqIFJlZ2lzdGVyZWQgUG9ydCBMaXN0CisgKi8KK3N0cnVjdCBmZG1pX3BvcnRfbGlzdF9zIHsKKwl1MzIgICAgICAgIG51bV9wb3J0czsJLyogbnVtYmVyIE9mIFBvcnQgRW50cmllcyAqLworCXd3bl90ICAgICAgICAgICBwb3J0X2VudHJ5OwkvKiBvbmUgb3IgbW9yZSAqLworfTsKKworLyoKKyAqIFBvcnQgQXR0cmlidXRlIEJsb2NrCisgKi8KK3N0cnVjdCBmZG1pX3BvcnRfYXR0cl9zIHsKKwl1MzIgICAgICAgIGF0dHJfY291bnQ7CS8qICMgb2YgYXR0cmlidXRlcyAqLworCXN0cnVjdCBmZG1pX2F0dHJfcyAgICAgcG9ydF9hdHRyOwkvKiBuIGF0dHJpYnV0ZXMgKi8KK307CisKKy8qCisgKiBGRE1JIFJlZ2lzdGVyIEhCQSBBdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBmZG1pX3JoYmFfcyB7CisJd3duX3QgICAgICAgICAgIGhiYV9pZDsJCS8qIEhCQSBJZGVudGlmaWVyICovCisJc3RydWN0IGZkbWlfcG9ydF9saXN0X3MgcG9ydF9saXN0OwkvKiBSZWdpc3RlcmVkIFBvcnQgTGlzdCAqLworCXN0cnVjdCBmZG1pX2hiYV9hdHRyX3MgaGJhX2F0dHJfYmxrOwkvKiBIQkEgYXR0cmlidXRlIGJsb2NrICovCit9OworCisvKgorICogRkRNSSBSZWdpc3RlciBQb3J0CisgKi8KK3N0cnVjdCBmZG1pX3JwcnRfcyB7CisJd3duX3QgICAgICAgICAgIGhiYV9pZDsJCS8qIEhCQSBJZGVudGlmaWVyICovCisJd3duX3QgICAgICAgICAgIHBvcnRfbmFtZTsJLyogUG9ydCB3d24gKi8KKwlzdHJ1Y3QgZmRtaV9wb3J0X2F0dHJfcyBwb3J0X2F0dHJfYmxrOwkvKiBQb3J0IEF0dHIgQmxvY2sgKi8KK307CisKKy8qCisgKiBGRE1JIFJlZ2lzdGVyIFBvcnQgQXR0cmlidXRlcworICovCitzdHJ1Y3QgZmRtaV9ycGFfcyB7CisJd3duX3QgICAgICAgICAgIHBvcnRfbmFtZTsJLyogcG9ydCB3d24gKi8KKwlzdHJ1Y3QgZmRtaV9wb3J0X2F0dHJfcyBwb3J0X2F0dHJfYmxrOwkvKiBQb3J0IEF0dHIgQmxvY2sgKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3BjaWZ3LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvcGNpZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODMwZGMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3BjaWZ3LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBwY2lmdy5oIFBDSSBGVyByZWxhdGVkIGhlYWRlcnMKKyAqLworCisjaWZuZGVmIF9fUENJRldfSF9fCisjZGVmaW5lIF9fUENJRldfSF9fCisKKyNwcmFnbWEgcGFjaygxKQorCitzdHJ1Y3QgcG5wX2hkcl9zeworICB1MzIJc2lnbmF0dXJlOwkvKiAiJFBuUCIgKi8KKyAgdTgJcmV2OwkJLyogU3RydWN0IHJldmlzaW9uICovCisgIHU4IAlsZW47CQkvKiBIZWFkZXIgc3RydWN0dXJlIGxlbiBpbiBtdWx0aXBsZXMKKwkJCQkgKiBvZiAxNiBieXRlcyAqLworICB1MTYgIG9mZjsJCS8qIE9mZnNldCB0byBuZXh0IGhlYWRlciAwMCBpZiBub25lICovCisgIHU4CXJzdmQ7CQkvKiBSZXNlcnZlZCBieXRlICovCisgIHU4CWNrc3VtOwkJLyogOC1iaXQgY2hlY2tzdW0gZm9yIHRoaXMgaGVhZGVyICovCisgIHUzMglwbnBfZGV2X2lkOwkvKiBQblAgRGV2aWNlIElkICovCisgIHUxNiAgbWZzdHI7CQkvKiBQb2ludGVyIHRvIG1hbnVmYWN0dXJlciBzdHJpbmcgKi8KKyAgdTE2CXByc3RyOwkJLyogUG9pbnRlciB0byBwcm9kdWN0IHN0cmluZyAqLworICB1OAlkZXZ0eXBlWzNdOwkvKiBEZXZpY2UgVHlwZSBDb2RlICovCisgIHU4CWRldmluZDsJCS8qIERldmljZSBJbmRpY2F0b3IgKi8KKyAgdTE2CWJjdmVudHI7CS8qIEJvb3RzdHJhcCBlbnRyeSB2ZWN0b3IgKi8KKyAgdTE2CXJzdmQyOwkJLyogUmVzZXJ2ZWQgKi8KKyAgdTE2ICBzcml2OwkJLyogU3RhdGljIHJlc291cmNlIGluZm9ybWF0aW9uIHZlY3RvciAqLworfTsKKworc3RydWN0IHBjaV8zXzBfZHNfc3sKKyB1MzIJc2lnOyAgIAkJLyogU2lnbmF0dXJlICJQQ0lSIiAqLworIHUxNgl2ZW5kaWQ7CQkvKiBWZW5kb3IgSUQgKi8KKyB1MTYJZGV2aWQ7CQkvKiBEZXZpY2UgSUQgKi8KKyB1MTYJZGV2bGlzdG9mZjsJLyogRGV2aWNlIExpc3QgT2Zmc2V0ICovCisgdTE2CWxlbjsJCS8qIFBDSSBEYXRhIFN0cnVjdHVyZSBMZW5ndGggKi8KKyB1OAlyZXY7CQkvKiBQQ0kgRGF0YSBTdHJ1Y3R1cmUgUmV2aXNpb24gKi8KKyB1OAljbGNvZGVbM107CS8qIENsYXNzIENvZGUgKi8KKyB1MTYJaW1nbGVuOwkJLyogQ29kZSBpbWFnZSBsZW5ndGggaW4gbXVsdGlwbGVzIG9mCisJCQkJICogNTEyIGJ5dGVzICovCisgdTE2CWNvZGVyZXY7CS8qIFJldmlzaW9uIGxldmVsIG9mIGNvZGUvZGF0YSAqLworIHU4CWNvZGV0eXBlOwkvKiBDb2RlIHR5cGUgMHgwMCAtIEJJT1MgKi8KKyB1OAlpbmRyOwkJLyogTGFzdCBpbWFnZSBpbmRpY2F0b3IgKi8KKyB1MTYJbXJ0aW1nbGVuOwkvKiBNYXggUnVuIFRpbWUgSW1hZ2UgTGVuZ3RoICovCisgdTE2CWN1b2ZmOwkJLyogQ29uZmlnIFV0aWxpdHkgQ29kZSBIZWFkZXIgT2Zmc2V0ICovCisgdTE2CWRtdGZjbHA7CS8qIERNVEYgQ0xQIGVudHJ5IHBvaW50IG9mZnNldCAqLworfTsKKworc3RydWN0IHBjaV9vcHRyb21faGRyX3N7CisgdTE2CXNpZzsJCS8qIFNpZ25hdHVyZSAweDU1QUEgKi8KKyB1OAlsZW47CQkvKiBPcHRpb24gUk9NIGxlbmd0aCBpbiB1bml0cyBvZiA1MTIgYnl0ZXMgKi8KKyB1OAlpbml2ZWNbM107CS8qIEluaXRpYWxpemF0aW9uIHZlY3RvciAqLworIHU4CXJzdmRbMTZdOwkvKiBSZXNlcnZlZCBmaWVsZCAqLworIHUxNgl2ZXJwdHI7CQkvKiBQb2ludGVyIHRvIHZlcnNpb24gc3RyaW5nIC0gcHJpdmF0ZSAqLworIHUxNglwY2lkczsJCS8qIFBvaW50ZXIgdG8gUENJIGRhdGEgc3RydWN0dXJlICovCisgdTE2CXBucGhkcjsJCS8qIFBvaW50ZXIgdG8gUG5QIGV4cGFuc2lvbiBoZWFkZXIgKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9zY3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyMGU2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9zY3NpLmgKQEAgLTAsMCArMSwxNjQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19TQ1NJX0hfXworI2RlZmluZSBfX1NDU0lfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworLyoKKyAqIGdlbmVyaWMgU0NTSSBjZGIgZGVmaW5pdGlvbgorICovCisjZGVmaW5lIFNDU0lfTUFYX0NEQkxFTiAgICAgMTYKK3N0cnVjdCBzY3NpX2NkYl9zeworCXU4ICAgICAgICAgc2NzaV9jZGJbU0NTSV9NQVhfQ0RCTEVOXTsKK307CisKKy8qCisgKiBzY3NpIGx1biBzZXJpYWwgbnVtYmVyIGRlZmluaXRpb24KKyAqLworI2RlZmluZSBTQ1NJX0xVTl9TTl9MRU4gICAgIDMyCitzdHJ1Y3Qgc2NzaV9sdW5fc25fc3sKKwl1OCAgICAgICAgIGx1bl9zbltTQ1NJX0xVTl9TTl9MRU5dOworfTsKKworLyoKKyAqIFNDU0kgRGlyZWN0IEFjY2VzcyBDb21tYW5kcworICovCitlbnVtIHsKKwlTQ1NJX09QX1RFU1RfVU5JVF9SRUFEWQkJPSAweDAwLAorCVNDU0lfT1BfUkVRVUVTVF9TRU5TRQkJPSAweDAzLAorCVNDU0lfT1BfRk9STUFUX1VOSVQJCT0gMHgwNCwKKwlTQ1NJX09QX1JFQUQ2CQkJPSAweDA4LAorCVNDU0lfT1BfV1JJVEU2CQkJPSAweDBBLAorCVNDU0lfT1BfV1JJVEVfRklMRU1BUktTCQk9IDB4MTAsCisJU0NTSV9PUF9JTlFVSVJZCQkJPSAweDEyLAorCVNDU0lfT1BfTU9ERV9TRUxFQ1Q2CQk9IDB4MTUsCisJU0NTSV9PUF9SRVNFUlZFNgkJPSAweDE2LAorCVNDU0lfT1BfUkVMRUFTRTYJCT0gMHgxNywKKwlTQ1NJX09QX01PREVfU0VOU0U2CQk9IDB4MUEsCisJU0NTSV9PUF9TVEFSVF9TVE9QX1VOSVQJCT0gMHgxQiwKKwlTQ1NJX09QX1NFTkRfRElBR05PU1RJQwkJPSAweDFELAorCVNDU0lfT1BfUkVBRF9DQVBBQ0lUWQkJPSAweDI1LAorCVNDU0lfT1BfUkVBRDEwCQkJPSAweDI4LAorCVNDU0lfT1BfV1JJVEUxMAkJCT0gMHgyQSwKKwlTQ1NJX09QX1ZFUklGWTEwCQk9IDB4MkYsCisJU0NTSV9PUF9SRUFEX0RFRkVDVF9EQVRBCT0gMHgzNywKKwlTQ1NJX09QX0xPR19TRUxFQ1QJCT0gMHg0QywKKwlTQ1NJX09QX0xPR19TRU5TRQkJPSAweDRELAorCVNDU0lfT1BfTU9ERV9TRUxFQ1QxMAkJPSAweDU1LAorCVNDU0lfT1BfUkVTRVJWRTEwCQk9IDB4NTYsCisJU0NTSV9PUF9SRUxFQVNFMTAJCT0gMHg1NywKKwlTQ1NJX09QX01PREVfU0VOU0UxMAkJPSAweDVBLAorCVNDU0lfT1BfUEVSX1JFU0VSVkVfSU4JCT0gMHg1RSwKKwlTQ1NJX09QX1BFUl9SRVNFUlZFX09VUgkJPSAweDVFLAorCVNDU0lfT1BfUkVBRDE2CQkJPSAweDg4LAorCVNDU0lfT1BfV1JJVEUxNgkJCT0gMHg4QSwKKwlTQ1NJX09QX1ZFUklGWTE2CQk9IDB4OEYsCisJU0NTSV9PUF9SRUFEX0NBUEFDSVRZMTYJCT0gMHg5RSwKKwlTQ1NJX09QX1JFUE9SVF9MVU5TCQk9IDB4QTAsCisJU0NTSV9PUF9SRUFEMTIJCQk9IDB4QTgsCisJU0NTSV9PUF9XUklURTEyCQkJPSAweEFBLAorCVNDU0lfT1BfVU5ERUYJCQk9IDB4RkYsCit9OworCisvKgorICogU0NTSSBTVEFSVF9TVE9QX1VOSVQgY29tbWFuZAorICovCitzdHJ1Y3Qgc2NzaV9zdGFydF9zdG9wX3VuaXRfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIGltbWVkOjE7CisjZWxzZQorCXU4ICAgICAgICAgaW1tZWQ6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkMjsKKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcG93ZXJfY29uZGl0aW9uczo0OworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjI7CisJdTggICAgICAgICBsb0VqOjE7CisJdTggICAgICAgICBzdGFydDoxOworI2Vsc2UKKwl1OCAgICAgICAgIHN0YXJ0OjE7CisJdTggICAgICAgICBsb0VqOjE7CisJdTggICAgICAgICByZXNlcnZlZDQ6MjsKKwl1OCAgICAgICAgIHBvd2VyX2NvbmRpdGlvbnM6NDsKKyNlbmRpZgorCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBTQ1NJIFNFTkRfRElBR05PU1RJQyBjb21tYW5kCisgKi8KK3N0cnVjdCBzY3NpX3NlbmRfZGlhZ25vc3RpY19zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBzZWxmX3Rlc3RfY29kZTozOworCXU4ICAgICAgICAgcGY6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgc2VsZl90ZXN0OjE7CisJdTggICAgICAgICBkZXZfb2ZmbDoxOworCXU4ICAgICAgICAgdW5pdF9vZmZsOjE7CisjZWxzZQorCXU4ICAgICAgICAgdW5pdF9vZmZsOjE7CisJdTggICAgICAgICBkZXZfb2ZmbDoxOworCXU4ICAgICAgICAgc2VsZl90ZXN0OjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBmOjE7CisJdTggICAgICAgICBzZWxmX3Rlc3RfY29kZTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDI7CisKKwl1OCAgICAgICAgIHBhcmFtX2xpc3RfbGVuZ3RoWzJdOwkvKiBNU0IgZmlyc3QgKi8KKwl1OCAgICAgICAgIGNvbnRyb2w7CisKK307CisKKy8qCisgKiBTQ1NJIFJFQUQxMC9XUklURTEwIGNvbW1hbmRzCisgKi8KK3N0cnVjdCBzY3NpX3J3MTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICBkcG86MTsJLyogRGlzYWJsZSBQYWdlIE91dCAqLworCXU4ICAgICAgICAgZnVhOjE7CS8qIEZvcmNlIFVuaXQgQWNjZXNzICovCisJdTggICAgICAgICByZXNlcnZlZDE6MjsKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsJLyogcmVsYXRpdmUgYWRkcmVzcyAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToyOworCXU4ICAgICAgICAgZnVhOjE7CisJdTggICAgICAgICBkcG86MTsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBsYmEwOwkvKiBsb2dpY2FsIGJsb2NrIGFkZHJlc3MgLSBNU0IgKi8KKwl1OCAgICAgICAgIGxiYTE7CisJdTggICAgICAgICBsYmEyOworCXU4ICAgICAgICAgbGJhMzsJLyogTFNCICovCisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICB4ZmVyX2xlbmd0aDA7CS8qIHRyYW5zZmVyIGxlbmd0aCBpbiBibG9ja3MgLSBNU0IgKi8KKwl1OCAgICAgICAgIHhmZXJfbGVuZ3RoMTsJLyogTFNCICovCisJdTggICAgICAgICBjb250cm9sOworfTsKKworI2RlZmluZSBTQ1NJX0NEQjEwX0dFVF9MQkEoY2RiKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKChjZGIpLT5sYmEwIDw8IDI0KSB8ICgoY2RiKS0+bGJhMSA8PCAxNikgfCAgICBcCisgICAgICgoY2RiKS0+bGJhMiA8PCA4KSB8IChjZGIpLT5sYmEzKQorCisjZGVmaW5lIFNDU0lfQ0RCMTBfU0VUX0xCQShjZGIsIGxiYSkgeyAgICAgIFwKKyAgICAoY2RiKS0+bGJhMCA9IGxiYSA+PiAyNDsgICAgICAgICAgICBcCisgICAgKGNkYiktPmxiYTEgPSAobGJhID4+IDE2KSAmIDB4RkY7ICAgXAorICAgIChjZGIpLT5sYmEyID0gKGxiYSA+PiA4KSAmIDB4RkY7ICAgIFwKKyAgICAoY2RiKS0+bGJhMyA9IGxiYSAmIDB4RkY7ICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU0NTSV9DREIxMF9HRVRfVEwoY2RiKSAgXAorICAgICgoY2RiKS0+eGZlcl9sZW5ndGgwIDw8IDggfCAoY2RiKS0+eGZlcl9sZW5ndGgxKQorI2RlZmluZSBTQ1NJX0NEQjEwX1NFVF9UTChjZGIsIHRsKSB7ICAgICAgXAorICAgIChjZGIpLT54ZmVyX2xlbmd0aDAgPSB0bCA+PiA4OyAgICAgICBcCisgICAgKGNkYiktPnhmZXJfbGVuZ3RoMSA9IHRsICYgMHhGRjsgICAgIFwKK30KKworLyoKKyAqIFNDU0kgUkVBRDYvV1JJVEU2IGNvbW1hbmRzCisgKi8KK3N0cnVjdCBzY3NpX3J3Nl9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIGxiYTA6NTsJCS8qIE1TYiAqLworI2Vsc2UKKwl1OCAgICAgICAgIGxiYTA6NTsJCS8qIE1TYiAqLworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIGxiYTE7CisJdTggICAgICAgICBsYmEyOwkJLyogTFNCICovCisJdTggICAgICAgICB4ZmVyX2xlbmd0aDsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisjZGVmaW5lIFNDU0lfVEFQRV9DREI2X0dFVF9UTChjZGIpICAgICAgICAgICAgICBcCisgICAgKCgoY2RiKS0+dGwwIDw8IDE2KSB8ICgoY2RiKS0+dGwxIDw8IDgpIHwgKGNkYiktPnRsMikKKworI2RlZmluZSBTQ1NJX1RBUEVfQ0RCNl9TRVRfVEwoY2RiLCB0bCkgeyAgICAgIFwKKyAgICAoY2RiKS0+dGwwID0gdGwgPj4gMTY7ICAgICAgICAgICAgXAorICAgIChjZGIpLT50bDEgPSAodGwgPj4gOCkgJiAweEZGOyAgICBcCisgICAgKGNkYiktPnRsMiA9IHRsICYgMHhGRjsgICAgICAgICAgIFwKK30KKworLyoKKyAqIFNDU0kgc2VxdWVudGlhbCAoVEFQRSkgd3J0aWUgY29tbWFuZAorICovCitzdHJ1Y3Qgc2NzaV90YXBlX3dyX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJzdmQ6NzsKKwl1OCAgICAgICAgIGZpeGVkOjE7CS8qIE1TYiAqLworI2Vsc2UKKwl1OCAgICAgICAgIGZpeGVkOjE7CS8qIE1TYiAqLworCXU4ICAgICAgICAgcnN2ZDo3OworI2VuZGlmCisJdTggICAgICAgICB0bDA7CQkvKiBNc2IgKi8KKwl1OCAgICAgICAgIHRsMTsKKwl1OCAgICAgICAgIHRsMjsJCS8qIExzYiAqLworCisJdTggICAgICAgICBjb250cm9sOworfTsKKworI2RlZmluZSBTQ1NJX0NEQjZfR0VUX0xCQShjZGIpICAgICAgICAgICAgICBcCisgICAgKCgoY2RiKS0+bGJhMCA8PCAxNikgfCAoKGNkYiktPmxiYTEgPDwgOCkgfCAoY2RiKS0+bGJhMikKKworI2RlZmluZSBTQ1NJX0NEQjZfU0VUX0xCQShjZGIsIGxiYSkgeyAgICAgIFwKKyAgICAoY2RiKS0+bGJhMCA9IGxiYSA+PiAxNjsgICAgICAgICAgICBcCisgICAgKGNkYiktPmxiYTEgPSAobGJhID4+IDgpICYgMHhGRjsgICAgXAorICAgIChjZGIpLT5sYmEyID0gbGJhICYgMHhGRjsgICAgICAgICAgIFwKK30KKworI2RlZmluZSBTQ1NJX0NEQjZfR0VUX1RMKGNkYikgKChjZGIpLT54ZmVyX2xlbmd0aCkKKyNkZWZpbmUgU0NTSV9DREI2X1NFVF9UTChjZGIsIHRsKSB7ICAgICAgXAorICAgIChjZGIpLT54ZmVyX2xlbmd0aCA9IHRsOyAgICAgICAgIFwKK30KKworLyoKKyAqIFNDU0kgc2Vuc2UgZGF0YSBmb3JtYXQKKyAqLworc3RydWN0IHNjc2lfc2Vuc2Vfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgdmFsaWQ6MTsKKwl1OCAgICAgICAgIHJzcF9jb2RlOjc7CisjZWxzZQorCXU4ICAgICAgICAgcnNwX2NvZGU6NzsKKwl1OCAgICAgICAgIHZhbGlkOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHNlZ19udW07CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGZpbGVfbWFyazoxOworCXU4ICAgICAgICAgZW9tOjE7CQkvKiBlbmQgb2YgbWVkaWEgKi8KKwl1OCAgICAgICAgIGlsaToxOwkJLyogaW5jb3JyZWN0IGxlbmd0aCBpbmRpY2F0b3IgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkOjE7CisJdTggICAgICAgICBzZW5zZV9rZXk6NDsKKyNlbHNlCisJdTggICAgICAgICBzZW5zZV9rZXk6NDsKKwl1OCAgICAgICAgIHJlc2VydmVkOjE7CisJdTggICAgICAgICBpbGk6MTsJCS8qIGluY29ycmVjdCBsZW5ndGggaW5kaWNhdG9yICovCisJdTggICAgICAgICBlb206MTsJCS8qIGVuZCBvZiBtZWRpYSAqLworCXU4ICAgICAgICAgZmlsZV9tYXJrOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIGluZm9ybWF0aW9uWzRdOwkvKiBkZXZpY2UtdHlwZSBvciBjb21tYW5kIHNwZWNpZmljIGluZm8KKwkJCQkJICovCisJdTggICAgICAgICBhZGRfc2Vuc2VfbGVuZ3RoOworCQkJCQkvKiBhZGRpdGlvbmFsIHNlbnNlIGxlbmd0aCAqLworCXU4ICAgICAgICAgY29tbWFuZF9pbmZvWzRdOy8qIGNvbW1hbmQgc3BlY2lmaWMgaW5mb3JtYXRpb24KKwkJCQkJCSAqLworCXU4ICAgICAgICAgYXNjOwkJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisJdTggICAgICAgICBhc2NxOwkJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworCXU4ICAgICAgICAgZnJ1X2NvZGU7CS8qIGZpZWxkIHJlcGxhY2VhYmxlIHVuaXQgY29kZSAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBza3N2OjE7CQkvKiBzZW5zZSBrZXkgc3BlY2lmaWMgdmFsaWQgKi8KKwl1OCAgICAgICAgIGNfZDoxOwkJLyogY29tbWFuZC9kYXRhIGJpdCAqLworCXU4ICAgICAgICAgcmVzMToyOworCXU4ICAgICAgICAgYnB2OjE7CQkvKiBiaXQgcG9pbnRlciB2YWxpZCAqLworCXU4ICAgICAgICAgYnBvaW50ZXI6MzsJLyogYml0IHBvaW50ZXIgKi8KKyNlbHNlCisJdTggICAgICAgICBicG9pbnRlcjozOwkvKiBiaXQgcG9pbnRlciAqLworCXU4ICAgICAgICAgYnB2OjE7CQkvKiBiaXQgcG9pbnRlciB2YWxpZCAqLworCXU4ICAgICAgICAgcmVzMToyOworCXU4ICAgICAgICAgY19kOjE7CQkvKiBjb21tYW5kL2RhdGEgYml0ICovCisJdTggICAgICAgICBza3N2OjE7CQkvKiBzZW5zZSBrZXkgc3BlY2lmaWMgdmFsaWQgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgZnBvaW50ZXJbMl07CS8qIGZpZWxkIHBvaW50ZXIgKi8KK307CisKKyNkZWZpbmUgU0NTSV9TRU5TRV9DVVJfRVJSICAgICAgICAgIDB4NzAKKyNkZWZpbmUgU0NTSV9TRU5TRV9ERUZfRVJSICAgICAgICAgIDB4NzEKKworLyoKKyAqIFNDU0kgc2Vuc2Uga2V5IHZhbHVlcworICovCisjZGVmaW5lIFNDU0lfU0tfTk9fU0VOU0UgICAgICAgIDB4MAorI2RlZmluZSBTQ1NJX1NLX1JFQ19FUlIgICAgICAgICAweDEJLyogcmVjb3ZlcmVkIGVycm9yICovCisjZGVmaW5lIFNDU0lfU0tfTk9UX1JFQURZICAgICAgIDB4MgorI2RlZmluZSBTQ1NJX1NLX01FRF9FUlIgICAgICAgICAweDMJLyogbWVkaXVtIGVycm9yICovCisjZGVmaW5lIFNDU0lfU0tfSFdfRVJSICAgICAgICAgIDB4NAkvKiBoYXJkd2FyZSBlcnJvciAqLworI2RlZmluZSBTQ1NJX1NLX0lMTEVHQUxfUkVRICAgICAweDUKKyNkZWZpbmUgU0NTSV9TS19VTklUX0FUVCAgICAgICAgMHg2CS8qIHVuaXQgYXR0ZW50aW9uICovCisjZGVmaW5lIFNDU0lfU0tfREFUQV9QUk9URUNUICAgIDB4NworI2RlZmluZSBTQ1NJX1NLX0JMQU5LX0NIRUNLICAgICAweDgKKyNkZWZpbmUgU0NTSV9TS19WRU5ET1JfU1BFQyAgICAgMHg5CisjZGVmaW5lIFNDU0lfU0tfQ09QWV9BQk9SVEVEICAgIDB4QQorI2RlZmluZSBTQ1NJX1NLX0FCT1JURURfQ01ORCAgICAweEIKKyNkZWZpbmUgU0NTSV9TS19WT0xfT1ZFUkZMT1cgICAgMHhECisjZGVmaW5lIFNDU0lfU0tfTUlTQ09NUEFSRSAgICAgIDB4RQorCisvKgorICogU0NTSSBhZGRpdGlvbmFsIHNlbnNlIGNvZGVzCisgKi8KKyNkZWZpbmUgU0NTSV9BU0NfTk9fQUREX1NFTlNFICAgICAgICAgICAweDAwCisjZGVmaW5lIFNDU0lfQVNDX0xVTl9OT1RfUkVBRFkgICAgICAgICAgMHgwNAorI2RlZmluZSBTQ1NJX0FTQ19MVU5fQ09NTVVOSUNBVElPTiAgICAgIDB4MDgKKyNkZWZpbmUgU0NTSV9BU0NfV1JJVEVfRVJST1IgICAgICAgICAgICAweDBDCisjZGVmaW5lIFNDU0lfQVNDX0lOVkFMSURfQ01ORF9DT0RFICAgICAgMHgyMAorI2RlZmluZSBTQ1NJX0FTQ19CQURfTEJBICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgU0NTSV9BU0NfSU5WQUxJRF9GSUVMRF9JTl9DREIgICAweDI0CisjZGVmaW5lIFNDU0lfQVNDX0xVTl9OT1RfU1VQUE9SVEVEICAgICAgMHgyNQorI2RlZmluZSBTQ1NJX0FTQ19MVU5fV1JJVEVfUFJPVEVDVCAgICAgIDB4MjcKKyNkZWZpbmUgU0NTSV9BU0NfUE9XRVJPTl9CRFIgICAgICAgICAgICAweDI5CS8qIHBvd2VyIG9uIHJlc2V0LCBidXMgcmVzZXQsCisJCQkJCQkgKiBidXMgZGV2aWNlIHJlc2V0CisJCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9BU0NfUEFSQU1TX0NIQU5HRUQgICAgICAgICAweDJBCisjZGVmaW5lIFNDU0lfQVNDX0NNTkRfQ0xFQVJFRF9CWV9BX0kgICAgMHgyRgorI2RlZmluZSBTQ1NJX0FTQ19TQVZJTkdfUEFSQU1fTk9UU1VQUCAgIDB4MzkKKyNkZWZpbmUgU0NTSV9BU0NfVE9DQyAgICAgICAgICAgICAgICAgICAweDNGCS8qIHRhcmdldCBvcGVyYXRpbmcgY29uZHRpb25zCisJCQkJCQkgKiBjaGFuZ2VkCisJCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9BU0NfUEFSSVRZX0VSUk9SICAgICAgICAgICAweDQ3CisjZGVmaW5lIFNDU0lfQVNDX0NNTkRfUEhBU0VfRVJST1IgICAgICAgMHg0QQorI2RlZmluZSBTQ1NJX0FTQ19EQVRBX1BIQVNFX0VSUk9SICAgICAgIDB4NEIKKyNkZWZpbmUgU0NTSV9BU0NfVkVORE9SX1NQRUMgICAgICAgICAgICAweDdGCisKKy8qCisgKiBTQ1NJIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXJzCisgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX0NBVVNFX05PVF9SRVBPUlQgICAgICAweDAwCisjZGVmaW5lIFNDU0lfQVNDUV9CRUNPTUlOR19SRUFEWSAgICAgICAgMHgwMQorI2RlZmluZSBTQ1NJX0FTQ1FfSU5JVF9DTURfUkVRICAgICAgICAgIDB4MDIKKyNkZWZpbmUgU0NTSV9BU0NRX0ZPUk1BVF9JTl9QUk9HUkVTUyAgICAweDA0CisjZGVmaW5lIFNDU0lfQVNDUV9PUEVSQVRJT05fSU5fUFJPR1JFU1MgMHgwNworI2RlZmluZSBTQ1NJX0FTQ1FfU0VMRl9URVNUX0lOX1BST0dSRVNTIDB4MDkKKyNkZWZpbmUgU0NTSV9BU0NRX1dSX1VORVhQX1VOU09MX0RBVEEgICAweDBDCisjZGVmaW5lIFNDU0lfQVNDUV9XUl9OT1RFTkdfVU5TT0xfREFUQSAgMHgwRAorCisjZGVmaW5lIFNDU0lfQVNDUV9MQkFfT1VUX09GX1JBTkdFICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ1FfSU5WQUxJRF9FTEVNRU5UX0FERFIgIDB4MDEKKworI2RlZmluZSBTQ1NJX0FTQ1FfTFVOX1dSSVRFX1BST1RFQ1RFRCAgICAgICAweDAwCisjZGVmaW5lIFNDU0lfQVNDUV9MVU5fSFdfV1JJVEVfUFJPVEVDVEVEICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9BU0NRX0xVTl9TV19XUklURV9QUk9URUNURUQgICAgMHgwMgorCisjZGVmaW5lIFNDU0lfQVNDUV9QT1IgICAweDAxCS8qIHBvd2VyIG9uIHJlc2V0ICovCisjZGVmaW5lIFNDU0lfQVNDUV9TQlIgICAweDAyCS8qIHNjc2kgYnVzIHJlc2V0ICovCisjZGVmaW5lIFNDU0lfQVNDUV9CRFIgICAweDAzCS8qIGJ1cyBkZXZpY2UgcmVzZXQgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX0RJUiAgIDB4MDQJLyogZGV2aWNlIGludGVybmFsIHJlc2V0ICovCisKKyNkZWZpbmUgU0NTSV9BU0NRX01PREVfUEFSQU1TX0NIQU5HRUQgICAgICAgMHgwMQorI2RlZmluZSBTQ1NJX0FTQ1FfTE9HX1BBUkFNU19DSEFOR0VEICAgICAgICAweDAyCisjZGVmaW5lIFNDU0lfQVNDUV9SRVNFUlZBVElPTlNfUFJFRU1QVEVEICAgIDB4MDMKKyNkZWZpbmUgU0NTSV9BU0NRX1JFU0VSVkFUSU9OU19SRUxFQVNFRCAgICAgMHgwNAorI2RlZmluZSBTQ1NJX0FTQ1FfUkVHSVNUUkFUSU9OU19QUkVFTVBURUQgICAweDA1CisKKyNkZWZpbmUgU0NTSV9BU0NRX01JQ1JPQ09ERV9DSEFOR0VEIDB4MDEKKyNkZWZpbmUgU0NTSV9BU0NRX0NIQU5HRURfT1BFUl9DT05EIDB4MDIKKyNkZWZpbmUgU0NTSV9BU0NRX0lOUV9DSEFOR0VEICAgICAgIDB4MDMJLyogaW5xdWlyeSBkYXRhIGNoYW5nZWQgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX0RJX0NIQU5HRUQgICAgICAgIDB4MDUJLyogZGV2aWNlIGlkIGNoYW5nZWQgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX1JMX0RBVEFfQ0hBTkdFRCAgIDB4MEUJLyogcmVwb3J0IGx1bnMgZGF0YSBjaGFuZ2VkICovCisKKyNkZWZpbmUgU0NTSV9BU0NRX0RQX0NSQ19FUlIgICAgICAgICAgICAweDAxCS8qIGRhdGEgcGhhc2UgY3JjIGVycm9yICovCisjZGVmaW5lIFNDU0lfQVNDUV9EUF9TQ1NJX1BBUklUWV9FUlIgICAgMHgwMgkvKiBkYXRhIHBoYXNlIHNjc2kgcGFyaXR5IGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX0lVX0NSQ19FUlIgICAgICAgICAgICAweDAzCS8qIGluZm9ybWF0aW9uIHVuaXQgY3JjIGVycm9yICovCisjZGVmaW5lIFNDU0lfQVNDUV9QUk9UT19TRVJWX0NSQ19FUlIgICAgMHgwNQorCisjZGVmaW5lIFNDU0lfQVNDUV9MVU5fVElNRV9PVVQgICAgICAgICAgMHgwMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNDU0kgSU5RVUlSWQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IHNjc2lfaW5xdWlyeV9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgY21kX2R0OjE7CisJdTggICAgICAgICBldnBkOjE7CisjZWxzZQorCXU4ICAgICAgICAgZXZwZDoxOworCXU4ICAgICAgICAgY21kX2R0OjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2NvZGU7CisJdTggICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICBhbGxvY19sZW5ndGg7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworc3RydWN0IHNjc2lfaW5xdWlyeV92ZW5kb3Jfc3sKKwl1OCAgICAgICAgIHZlbmRvcl9pZFs4XTsKK307CisKK3N0cnVjdCBzY3NpX2lucXVpcnlfcHJvZGlkX3N7CisJdTggICAgICAgICBwcm9kdWN0X2lkWzE2XTsKK307CisKK3N0cnVjdCBzY3NpX2lucXVpcnlfcHJvZHJldl9zeworCXU4ICAgICAgICAgcHJvZHVjdF9yZXZbNF07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X2RhdGFfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CS8qIHBlcmlwaGVyYWwgcXVhbGlmaWVyICovCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OwkJLyogcGVyaXBoZXJhbCBkZXZpY2UgdHlwZSAqLworCisJdTggICAgICAgICBybWI6MTsJCQkvKiByZW1vdmFibGUgbWVkaXVtIGJpdCAqLworCXU4ICAgICAgICAgZGV2aWNlX3R5cGVfbW9kOjc7CS8qIGRldmljZSB0eXBlIG1vZGlmaWVyICovCisKKwl1OCAgICAgICAgIHZlcnNpb247CisKKwl1OCAgICAgICAgIGFlbmM6MTsJCS8qIGFzeW5jIGV2ZW50IG5vdGlmaWNhdGlvbiBjYXBhYmlsaXR5CisJCQkJCSAqLworCXU4ICAgICAgICAgdHJtX2lvcDoxOwkvKiB0ZXJtaW5hdGUgSS9PIHByb2Nlc3MgKi8KKwl1OCAgICAgICAgIG5vcm1fYWNhOjE7CS8qIG5vcm1hbCBBQ0Egc3VwcG9ydGVkICovCisJdTggICAgICAgICBoaV9zdXBwb3J0OjE7CS8qIFNDU0ktMzogc3VwcG9ydHMgUkVQT1JUIExVTlMgKi8KKwl1OCAgICAgICAgIHJzcF9kYXRhX2Zvcm1hdDo0OworCisJdTggICAgICAgICBhZGRpdGlvbmFsX2xlbjsKKwl1OCAgICAgICAgIHNjY3M6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTo3OworCisJdTggICAgICAgICByZXNlcnZlZDI6MTsKKwl1OCAgICAgICAgIGVuY19zZXJ2OjE7CS8qIGVuY2xvc3VyZSBzZXJ2aWNlIGNvbXBvbmVudCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjE7CisJdTggICAgICAgICBtdWx0aV9wb3J0OjE7CS8qIG11bHRpLXBvcnQgZGV2aWNlICovCisJdTggICAgICAgICBtX2NobmdyOjE7CS8qIGRldmljZSBpbiBtZWRpdW0gdHJhbnNwb3J0IGVsZW1lbnQgKi8KKwl1OCAgICAgICAgIGFja19yZXFfcToxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisJdTggICAgICAgICBhZGRyMzI6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgYWRkcjE2OjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKworCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisJdTggICAgICAgICB3X2J1czMyOjE7CisJdTggICAgICAgICB3X2J1czE2OjE7CisJdTggICAgICAgICBzeW5jaHJvbm91czoxOworCXU4ICAgICAgICAgbGlua2VkX2NvbW1hbmRzOjE7CisJdTggICAgICAgICB0cmFuc19kaXM6MTsKKwl1OCAgICAgICAgIGNtZF9xdWV1ZToxOwkvKiBjb21tYW5kIHF1ZXVlaW5nIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgc29mdF9yZXNldDoxOwkvKiBzb2Z0IHJlc2V0IGFsdGVybmF0aXZlIChWUykgKi8KKyNlbHNlCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OwkvKiBwZXJpcGhlcmFsIGRldmljZSB0eXBlICovCisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKwkJCQkJLyogcGVyaXBoZXJhbCBxdWFsaWZpZXIgKi8KKworCXU4ICAgICAgICAgZGV2aWNlX3R5cGVfbW9kOjc7CisJCQkJCS8qIGRldmljZSB0eXBlIG1vZGlmaWVyICovCisJdTggICAgICAgICBybWI6MTsJCS8qIHJlbW92YWJsZSBtZWRpdW0gYml0ICovCisKKwl1OCAgICAgICAgIHZlcnNpb247CisKKwl1OCAgICAgICAgIHJzcF9kYXRhX2Zvcm1hdDo0OworCXU4ICAgICAgICAgaGlfc3VwcG9ydDoxOwkvKiBTQ1NJLTM6IHN1cHBvcnRzIFJFUE9SVCBMVU5TICovCisJdTggICAgICAgICBub3JtX2FjYToxOwkvKiBub3JtYWwgQUNBIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgdGVybWluYXRlX2lvcDoxOy8qIHRlcm1pbmF0ZSBJL08gcHJvY2VzcyAqLworCXU4ICAgICAgICAgYWVuYzoxOwkJLyogYXN5bmMgZXZlbnQgbm90aWZpY2F0aW9uIGNhcGFiaWxpdHkKKwkJCQkJICovCisKKwl1OCAgICAgICAgIGFkZGl0aW9uYWxfbGVuOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjc7CisJdTggICAgICAgICBzY2NzOjE7CisKKwl1OCAgICAgICAgIGFkZHIxNjoxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisJdTggICAgICAgICBhZGRyMzI6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgYWNrX3JlcV9xOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIG1fY2huZ3I6MTsJLyogZGV2aWNlIGluIG1lZGl1bSB0cmFuc3BvcnQgZWxlbWVudCAqLworCXU4ICAgICAgICAgbXVsdGlfcG9ydDoxOwkvKiBtdWx0aS1wb3J0IGRldmljZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjE7CS8qIFRCRCAtIFZlbmRvciBTcGVjaWZpYyAqLworCXU4ICAgICAgICAgZW5jX3NlcnY6MTsJLyogZW5jbG9zdXJlIHNlcnZpY2UgY29tcG9uZW50ICovCisJdTggICAgICAgICByZXNlcnZlZDI6MTsKKworCXU4ICAgICAgICAgc29mdF9zZXNldDoxOwkvKiBzb2Z0IHJlc2V0IGFsdGVybmF0aXZlIChWUykgKi8KKwl1OCAgICAgICAgIGNtZF9xdWV1ZToxOwkvKiBjb21tYW5kIHF1ZXVlaW5nIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgdHJhbnNfZGlzOjE7CisJdTggICAgICAgICBsaW5rZWRfY29tbWFuZHM6MTsKKwl1OCAgICAgICAgIHN5bmNocm9ub3VzOjE7CisJdTggICAgICAgICB3X2J1czE2OjE7CisJdTggICAgICAgICB3X2J1czMyOjE7CisJdTggICAgICAgICByZWxfYWRyOjE7CS8qIHJlbGF0aXZlIGFkZHJlc3MgKi8KKyNlbmRpZgorCXN0cnVjdCBzY3NpX2lucXVpcnlfdmVuZG9yX3MgdmVuZG9yX2lkOworCXN0cnVjdCBzY3NpX2lucXVpcnlfcHJvZGlkX3MgcHJvZHVjdF9pZDsKKwlzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RyZXZfcyBwcm9kdWN0X3JldjsKKwl1OCAgICAgICAgIHZlbmRvcl9zcGVjaWZpY1syMF07CisJdTggICAgICAgICByZXNlcnZlZDRbNDBdOworfTsKKworLyoKKyAqIGlucXVpcnkucGVyaXBoZXJhbF9xdWFsIGZpZWxkIHZhbHVlcworICovCisjZGVmaW5lIFNDU0lfREVWUVVBTF9ERUZBVUxUICAgICAgICAwCisjZGVmaW5lIFNDU0lfREVWUVVBTF9OT1RfQ09OTkVDVEVEICAxCisjZGVmaW5lIFNDU0lfREVWUVVBTF9OT1RfU1VQUE9SVEVEICAzCisKKy8qCisgKiBpbnF1aXJ5LmRldmljZV90eXBlIGZpZWxkIHZhbHVlcworICovCisjZGVmaW5lIFNDU0lfREVWSUNFX0RJUkVDVF9BQ0NFU1MgICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0RFVklDRV9TRVFfQUNDRVNTICAgICAgICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9ERVZJQ0VfQVJSQVlfQ09OVFJPTExFUiAgICAweDBDCisjZGVmaW5lIFNDU0lfREVWSUNFX1VOS05PV04gICAgICAgICAgICAgMHgxRgorCisvKgorICogaW5xdWlyeS52ZXJzaW9uCisgKi8KKyNkZWZpbmUgU0NTSV9WRVJTSU9OX0FOU0lfWDMxMzEgICAgIDIJLyogQU5TSSBYMy4xMzEgU0NTSS0yICovCisjZGVmaW5lIFNDU0lfVkVSU0lPTl9TUEMgICAgICAgICAgICAzCS8qIFNQQyAoU0NTSS0zKSwgQU5TSSBYMy4zMDE6MTk5NyAqLworI2RlZmluZSBTQ1NJX1ZFUlNJT05fU1BDXzIgICAgICAgICAgNAkvKiBTUEMtMiAqLworCisvKgorICogcmVzcG9uc2UgZGF0YSBmb3JtYXQKKyAqLworI2RlZmluZSBTQ1NJX1JTUF9EQVRBX0ZPUk1BVCAgICAgICAgMgkvKiBTQ1NJLTIgJiBTUEMgKi8KKworLyoKKyAqIFNDU0kgaW5xdWlyeSBwYWdlIGNvZGVzCisgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRV9WUERfUEFHRVMgICAgIDB4MDAJLyogc3VwcG9ydGVkIHZwZCBwYWdlcyAqLworI2RlZmluZSBTQ1NJX0lOUV9QQUdFX1VTTl9QQUdFICAgICAgMHg4MAkvKiB1bml0IHNlcmlhbCBudW1iZXIgcGFnZSAqLworI2RlZmluZSBTQ1NJX0lOUV9QQUdFX0RFVl9JREVOVCAgICAgMHg4MwkvKiBkZXZpY2UgaW5kZW50aWZpY2F0aW9uIHBhZ2UKKwkJCQkJCSAqLworI2RlZmluZSBTQ1NJX0lOUV9QQUdFU19NQVggICAgICAgICAgMworCisvKgorICogc3VwcG9ydGVkIHZpdGFsIHByb2R1Y3QgZGF0YSBwYWdlcworICovCitzdHJ1Y3Qgc2NzaV9pbnFfcGFnZV92cGRfcGFnZXNfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworI2Vsc2UKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9jb2RlOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ7CisJdTggICAgICAgICBwYWdlX2xlbmd0aDsKKwl1OCAgICAgICAgIHBhZ2VzW1NDU0lfSU5RX1BBR0VTX01BWF07Cit9OworCisvKgorICogVW5pdCBzZXJpYWwgbnVtYmVyIHBhZ2UKKyAqLworI2RlZmluZSBTQ1NJX0lOUV9VU05fTEVOIDMyCisKK3N0cnVjdCBzY3NpX2lucV91c25fc3sKKwljaGFyICAgICAgICAgICAgdXNuW1NDU0lfSU5RX1VTTl9MRU5dOworfTsKKworc3RydWN0IHNjc2lfaW5xX3BhZ2VfdXNuX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKyNlbHNlCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfY29kZTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTsKKwl1OCAgICAgICAgIHBhZ2VfbGVuZ3RoOworCXN0cnVjdCBzY3NpX2lucV91c25fcyAgdXNuOworfTsKKworZW51bSB7CisJU0NTSV9JTlFfRElQX0NPREVfQklOQVJZID0gMSwJLyogaWRlbnRpZmllciBoYXMgYmluYXJ5IHZhbHVlICovCisJU0NTSV9JTlFfRElQX0NPREVfQVNDSUkgPSAyLAkvKiBpZGVudGlmaWVyIGhhcyBhc2NpaSB2YWx1ZSAqLworfTsKKworZW51bSB7CisJU0NTSV9JTlFfRElQX0FTU09DX0xVTiA9IDAsCS8qIGlkIGlzIGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgKi8KKwlTQ1NJX0lOUV9ESVBfQVNTT0NfUE9SVCA9IDEsCS8qIGlkIGlzIGFzc29jaWF0ZWQgd2l0aCBwb3J0IHRoYXQKKwkJCQkJICogcmVjZWl2ZWQgdGhlIHJlcXVlc3QKKwkJCQkJICovCit9OworCitlbnVtIHsKKwlTQ1NJX0lOUV9JRF9UWVBFX1ZFTkRPUiA9IDEsCisJU0NTSV9JTlFfSURfVFlQRV9JRUVFID0gMiwKKwlTQ1NJX0lOUV9JRF9UWVBFX0ZDX0ZTID0gMywKKwlTQ1NJX0lOUV9JRF9UWVBFX09USEVSID0gNCwKK307CisKK3N0cnVjdCBzY3NpX2lucV9kaXBfZGVzY19zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXMwOjQ7CisJdTggICAgICAgICBjb2RlX3NldDo0OworCXU4ICAgICAgICAgcmVzMToyOworCXU4ICAgICAgICAgYXNzb2NpYXRpb246MjsKKwl1OCAgICAgICAgIGlkX3R5cGU6NDsKKyNlbHNlCisJdTggICAgICAgICBjb2RlX3NldDo0OworCXU4ICAgICAgICAgcmVzMDo0OworCXU4ICAgICAgICAgaWRfdHlwZTo0OworCXU4ICAgICAgICAgYXNzb2NpYXRpb246MjsKKwl1OCAgICAgICAgIHJlczE6MjsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzMjsKKwl1OCAgICAgICAgIGlkX2xlbjsKKwlzdHJ1Y3Qgc2NzaV9sdW5fc25fcyAgIGlkOworfTsKKworLyoKKyAqIERldmljZSBpbmRlbnRpZmljYXRpb24gcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9pbnFfcGFnZV9kZXZfaWRlbnRfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworI2Vsc2UKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9jb2RlOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOworCXU4ICAgICAgICAgcGFnZV9sZW5ndGg7CisJc3RydWN0IHNjc2lfaW5xX2RpcF9kZXNjX3MgZGVzYzsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUkVBRCBDQVBBQ0lUWQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RydWN0IHNjc2lfcmVhZF9jYXBhY2l0eV9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCXU4ICAgICAgICAgcmVsX2FkcjoxOworI2Vsc2UKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIGxiYTA7CS8qIE1TQiAqLworCXU4ICAgICAgICAgbGJhMTsKKwl1OCAgICAgICAgIGxiYTI7CisJdTggICAgICAgICBsYmEzOwkvKiBMU0IgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjsKKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQ0Ojc7CisJdTggICAgICAgICBwbWk6MTsJLyogcGFydGlhbCBtZWRpdW0gaW5kaWNhdG9yICovCisjZWxzZQorCXU4ICAgICAgICAgcG1pOjE7CS8qIHBhcnRpYWwgbWVkaXVtIGluZGljYXRvciAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0Ojc7CisjZW5kaWYKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCitzdHJ1Y3Qgc2NzaV9yZWFkX2NhcGFjaXR5X2RhdGFfc3sKKwl1MzIgICAgICAgIG1heF9sYmE7CS8qIG1heGltdW0gTEJBIGF2YWlsYWJsZSAqLworCXUzMiAgICAgICAgYmxvY2tfbGVuZ3RoOwkvKiBpbiBieXRlcyAqLworfTsKKworc3RydWN0IHNjc2lfcmVhZF9jYXBhY2l0eTE2X2RhdGFfc3sKKwl1NjQgICAgICAgIGxiYTsJLyogbWF4aW11bSBMQkEgYXZhaWxhYmxlICovCisJdTMyICAgICAgICBibG9ja19sZW5ndGg7CS8qIGluIGJ5dGVzICovCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTo0LAorCQkJcF90eXBlOjMsCisJCQlwcm90X2VuOjE7CisJdTgJCXJlc2VydmVkMjo0LAorCQkJbGJfcGJlOjQ7CS8qIGxvZ2ljYWwgYmxvY2tzIHBlciBwaHlzaWNhbCBibG9jaworCQkJCQkgKiBleHBvbmVudCAqLworCXUxNglyZXNlcnZlZDM6MiwKKwkJCWxiYV9hbGlnbjoxNDsJLyogbG93ZXN0IGFsaWduZWQgbG9naWNhbCBibG9jaworCQkJCQkgKiBhZGRyZXNzICovCisjZWxzZQorCXUxNglsYmFfYWxpZ246MTQsCS8qIGxvd2VzdCBhbGlnbmVkIGxvZ2ljYWwgYmxvY2sKKwkJCQkJICogYWRkcmVzcyAqLworCQkJcmVzZXJ2ZWQzOjI7CisJdTgJCWxiX3BiZTo0LAkvKiBsb2dpY2FsIGJsb2NrcyBwZXIgcGh5c2ljYWwgYmxvY2sKKwkJCQkJICogZXhwb25lbnQgKi8KKwkJCXJlc2VydmVkMjo0OworCXU4CQlwcm90X2VuOjEsCisJCQlwX3R5cGU6MywKKwkJCXJlc2VydmVkMTo0OworI2VuZGlmCisJdTY0CXJlc2VydmVkNDsKKwl1NjQJcmVzZXJ2ZWQ1OworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSRVBPUlQgTFVOUyBjb21tYW5kCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdHJ1Y3Qgc2NzaV9yZXBvcnRfbHVuc19zeworCXU4ICAgICAgICAgb3Bjb2RlOwkJLyogQTBoIC0gUkVQT1JUIExVTlMgb3BDb2RlICovCisJdTggICAgICAgICByZXNlcnZlZDFbNV07CisJdTggICAgICAgICBhbGxvY19sZW5ndGhbNF07LyogYWxsb2NhdGlvbiBsZW5ndGggTVNCIGZpcnN0ICovCisJdTggICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworI2RlZmluZSBTQ1NJX1JFUE9SVF9MVU5fQUxMT0NfTEVOR1RIKHJsKSAgICAgICAgICAgICAgICAJCVwKKyAgICAoKHJsLT5hbGxvY19sZW5ndGhbMF0gPDwgMjQpIHwgKHJsLT5hbGxvY19sZW5ndGhbMV0gPDwgMTYpIHwgCVwKKyAgICAgKHJsLT5hbGxvY19sZW5ndGhbMl0gPDwgOCkgfCAocmwtPmFsbG9jX2xlbmd0aFszXSkpCisKKyNkZWZpbmUgU0NTSV9SRVBPUlRfTFVOU19TRVRfQUxMT0NMRU4ocmwsIGFsbG9jX2xlbikgeyAgICAgIFwKKyAgICAocmwpLT5hbGxvY19sZW5ndGhbMF0gPSAoYWxsb2NfbGVuKSA+PiAyNDsgICAgICAJCQlcCisgICAgKHJsKS0+YWxsb2NfbGVuZ3RoWzFdID0gKChhbGxvY19sZW4pID4+IDE2KSAmIDB4RkY7IAkJXAorICAgIChybCktPmFsbG9jX2xlbmd0aFsyXSA9ICgoYWxsb2NfbGVuKSA+PiA4KSAmIDB4RkY7ICAJCVwKKyAgICAocmwpLT5hbGxvY19sZW5ndGhbM10gPSAoYWxsb2NfbGVuKSAmIDB4RkY7ICAgICAJCQlcCit9CisKK3N0cnVjdCBzY3NpX3JlcG9ydF9sdW5zX2RhdGFfc3sKKwl1MzIgICAgICAgIGx1bl9saXN0X2xlbmd0aDsJLyogbGVuZ3RoIG9mIExVTiBsaXN0IGxlbmd0aCAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQ7CisJbHVuX3QgICAgICAgICAgIGx1blsxXTsJCQkvKiBmaXJzdCBMVU4gaW4gbHVuIGxpc3QgKi8KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNDU0kgbW9kZSAgcGFyYW1ldGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworZW51bSB7CisJU0NTSV9EQV9NRURJVU1fREVGID0gMCwJLyogZGlyZWN0IGFjY2VzcyBkZWZhdWx0IG1lZGl1bSB0eXBlICovCisJU0NTSV9EQV9NRURJVU1fU1MgPSAxLAkvKiBkaXJlY3QgYWNjZXNzIHNpbmdsZSBzaWRlZCAqLworCVNDU0lfREFfTUVESVVNX0RTID0gMiwJLyogZGlyZWN0IGFjY2VzcyBkb3VibGUgc2lkZWQgKi8KK307CisKKy8qCisgKiBTQ1NJIE1vZGUgU2VsZWN0KDYpIGNkYgorICovCitzdHJ1Y3Qgc2NzaV9tb2RlX3NlbGVjdDZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBwZjoxOwkJLyogcGFnZSBmb3JtYXQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCXU4ICAgICAgICAgc3A6MTsJCS8qIHNhdmUgcGFnZXMgaWYgc2V0IHRvIDEgKi8KKyNlbHNlCisJdTggICAgICAgICBzcDoxOwkvKiBzYXZlIHBhZ2VzIGlmIHNldCB0byAxICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKwl1OCAgICAgICAgIHBmOjE7CS8qIHBhZ2UgZm9ybWF0ICovCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQzWzJdOworCXU4ICAgICAgICAgYWxsb2NfbGVuOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBTQ1NJIE1vZGUgU2VsZWN0KDEwKSBjZGIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9zZWxlY3QxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIHBmOjE7CS8qIHBhZ2UgZm9ybWF0ICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKwl1OCAgICAgICAgIHNwOjE7CS8qIHNhdmUgcGFnZXMgaWYgc2V0IHRvIDEgKi8KKyNlbHNlCisJdTggICAgICAgICBzcDoxOwkvKiBzYXZlIHBhZ2VzIGlmIHNldCB0byAxICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKwl1OCAgICAgICAgIHBmOjE7CS8qIHBhZ2UgZm9ybWF0ICovCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQzWzVdOworCXU4ICAgICAgICAgYWxsb2NfbGVuX21zYjsKKwl1OCAgICAgICAgIGFsbG9jX2xlbl9sc2I7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIFNDU0kgTW9kZSBTZW5zZSg2KSBjZGIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9zZW5zZTZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQ7CisJdTggICAgICAgICBkYmQ6MTsJLyogZGlzYWJsZSBibG9jayBkaXNjcmlwdG9ycyBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisKKwl1OCAgICAgICAgIHBjOjI7CS8qIHBhZ2UgY29udHJvbCAqLworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBkYmQ6MTsJLyogZGlzYWJsZSBibG9jayBkZXNjcmlwdG9ycyBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQ7CisKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcGM6MjsJLyogcGFnZSBjb250cm9sICovCisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKwl1OCAgICAgICAgIGFsbG9jX2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogU0NTSSBNb2RlIFNlbnNlKDEwKSBjZGIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9zZW5zZTEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgTExCQUE6MTsJLyogbG9uZyBMQkEgYWNjZXB0ZWQgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIGRiZDoxOwkJLyogZGlzYWJsZSBibG9jayBkZXNjcmlwdG9ycyBpZiBzZXQKKwkJCQkJICogdG8gMQorCQkJCQkgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCisJdTggICAgICAgICBwYzoyOwkJLyogcGFnZSBjb250cm9sICovCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKwl1OCAgICAgICAgIGRiZDoxOwkJLyogZGlzYWJsZSBibG9jayBkZXNjcmlwdG9ycyBpZiBzZXQgdG8KKwkJCQkJICogMQorCQkJCQkgKi8KKwl1OCAgICAgICAgIExMQkFBOjE7CS8qIGxvbmcgTEJBIGFjY2VwdGVkIGlmIHNldCB0byAxICovCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICBwYzoyOwkJLyogcGFnZSBjb250cm9sICovCisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkM1s0XTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbl9tc2I7CisJdTggICAgICAgICBhbGxvY19sZW5fbHNiOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9DREIxMF9HRVRfQUwoY2RiKSAgCQkJCQlcCisgICAgKChjZGIpLT5hbGxvY19sZW5fbXNiIDw8IDggfCAoY2RiKS0+YWxsb2NfbGVuX2xzYikKKworI2RlZmluZSBTQ1NJX0NEQjEwX1NFVF9BTChjZGIsIGFsKSB7ICAgICAgXAorICAgIChjZGIpLT5hbGxvY19sZW5fbXNiID0gYWwgPj4gODsgICAgICAgCQkJCVwKKyAgICAoY2RiKS0+YWxsb2NfbGVuX2xzYiA9IGFsICYgMHhGRjsgICAgIAkJCQlcCit9CisKKyNkZWZpbmUgU0NTSV9DREI2X0dFVF9BTChjZGIpICgoY2RiKS0+YWxsb2NfbGVuKQorCisjZGVmaW5lIFNDU0lfQ0RCNl9TRVRfQUwoY2RiLCBhbCkgeyAgICAgIFwKKyAgICAoY2RiKS0+YWxsb2NfbGVuID0gYWw7ICAgICAgICAgCQkJCQlcCit9CisKKy8qCisgKiBwYWdlIGNvbnRyb2wgZmllbGQgdmFsdWVzCisgKi8KKyNkZWZpbmUgU0NTSV9QQ19DVVJSRU5UX1ZBTFVFUyAgICAgICAweDAKKyNkZWZpbmUgU0NTSV9QQ19DSEFOR0VBQkxFX1ZBTFVFUyAgICAweDEKKyNkZWZpbmUgU0NTSV9QQ19ERUZBVUxUX1ZBTFVFUyAgICAgICAweDIKKyNkZWZpbmUgU0NTSV9QQ19TQVZFRF9WQUxVRVMgICAgICAgICAweDMKKworLyoKKyAqIFNDU0kgbW9kZSBwYWdlIGNvZGVzCisgKi8KKyNkZWZpbmUgU0NTSV9NUF9WRU5ET1JfU1BFQyAgICAgMHgwMAorI2RlZmluZSBTQ1NJX01QX0RJU0NfUkVDTiAgICAgICAweDAyCS8qIGRpc2Nvbm5lY3QtcmVjb25uZWN0IHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9GT1JNQVRfREVWSUNFICAgMHgwMworI2RlZmluZSBTQ1NJX01QX1JERyAgICAgICAgICAgICAweDA0CS8qIHJpZ2lkIGRpc2sgZ2VvbWV0cnkgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX0ZEUCAgICAgICAgICAgICAweDA1CS8qIGZsZXhpYmxlIGRpc2sgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX0NBQ0hJTkcgICAgICAgICAweDA4CS8qIGNhY2hpbmcgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX0NPTlRST0wgICAgICAgICAweDBBCS8qIGNvbnRyb2wgbW9kZSBwYWdlICovCisjZGVmaW5lIFNDU0lfTVBfTUVEX1RZUEVTX1NVUCAgIDB4MEIJLyogbWVkaXVtIHR5cGVzIHN1cHBvcnRlZCBwYWdlICovCisjZGVmaW5lIFNDU0lfTVBfSU5GT19FWENQX0NOVEwgIDB4MUMJLyogaW5mb3JtYXRpb25hbCBleGNlcHRpb24gY29udHJvbCAqLworI2RlZmluZSBTQ1NJX01QX0FMTCAgICAgICAgICAgICAweDNGCS8qIHJldHVybiBhbGwgcGFnZXMgLSBtb2RlIHNlbnNlIG9ubHkgKi8KKworLyoKKyAqIG1vZGUgcGFyYW1ldGVyIGhlYWRlcgorICovCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjZfc3sKKwl1OCAgICAgICAgIG1vZGVfZGF0YWxlbjsKKwl1OCAgICAgICAgIG1lZGl1bV90eXBlOworCisJLyoKKwkgKiBkZXZpY2Ugc3BlY2lmaWMgcGFyYW1ldGVycyBleHBhbmRlZCBmb3IgZGlyZWN0IGFjY2VzcyBkZXZpY2VzCisJICovCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHdwOjE7CQkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMToyOworCXUzMiAgICAgICAgZHBvZnVhOjE7CS8qIGRpc2FibGUgcGFnZSBvdXQgKyBmb3JjZSB1bml0IGFjY2VzcworCQkJCQkgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMjo0OworI2Vsc2UKKwl1MzIgICAgICAgIHJlc2VydmVkMjo0OworCXUzMiAgICAgICAgZHBvZnVhOjE7CS8qIGRpc2FibGUgcGFnZSBvdXQgKyBmb3JjZSB1bml0IGFjY2VzcworCQkJCQkgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMToyOworCXUzMiAgICAgICAgd3A6MTsJCS8qIHdyaXRlIHByb3RlY3RlZCAqLworI2VuZGlmCisKKwl1OCAgICAgICAgIGJsb2NrX2Rlc2NsZW47Cit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjEwX3N7CisJdTMyICAgICAgICBtb2RlX2RhdGFsZW46MTY7CisJdTMyICAgICAgICBtZWRpdW1fdHlwZTo4OworCisJLyoKKwkgKiBkZXZpY2Ugc3BlY2lmaWMgcGFyYW1ldGVycyBleHBhbmRlZCBmb3IgZGlyZWN0IGFjY2VzcyBkZXZpY2VzCisJICovCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHdwOjE7CQkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMToyOworCXUzMiAgICAgICAgZHBvZnVhOjE7CS8qIGRpc2FibGUgcGFnZSBvdXQgKyBmb3JjZSB1bml0IGFjY2VzcworCQkJCQkgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMjo0OworI2Vsc2UKKwl1MzIgICAgICAgIHJlc2VydmVkMjo0OworCXUzMiAgICAgICAgZHBvZnVhOjE7CS8qIGRpc2FibGUgcGFnZSBvdXQgKyBmb3JjZSB1bml0IGFjY2VzcworCQkJCQkgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMToyOworCXUzMiAgICAgICAgd3A6MTsJCS8qIHdyaXRlIHByb3RlY3RlZCAqLworI2VuZGlmCisKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgcmVzZXJ2ZWQzOjc7CisJdTMyICAgICAgICBsb25nbGJhOjE7CisjZWxzZQorCXUzMiAgICAgICAgbG9uZ2xiYToxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQzOjc7CisjZW5kaWYKKwl1MzIgICAgICAgIHJlc2VydmVkNDo4OworCXUzMiAgICAgICAgYmxvY2tfZGVzY2xlbjoxNjsKK307CisKKy8qCisgKiBtb2RlIHBhcmFtZXRlciBibG9jayBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zeworCXUzMiAgICAgICAgbmJsa3M7CisJdTMyICAgICAgICBkZW5zaXR5X2NvZGU6ODsKKwl1MzIgICAgICAgIGJsb2NrX2xlbmd0aDoyNDsKK307CisKKy8qCisgKiBEaXNjb25uZWN0LXJlY29ubmVjdCBtb2RlIHBhZ2UgZm9ybWF0CisgKi8KK3N0cnVjdCBzY3NpX21wX2Rpc2NfcmVjbl9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwczoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcHM6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9sZW47CisJdTggICAgICAgICBidWZfZnVsbF9yYXRpbzsKKwl1OCAgICAgICAgIGJ1Zl9lbXB0eV9yYXRpbzsKKworCXU4ICAgICAgICAgYmlsX21zYjsJLyogYnVzIGluYWN0aXZpdHkgbGltaXQgLU1TQiAqLworCXU4ICAgICAgICAgYmlsX2xzYjsJLyogYnVzIGluYWN0aXZpdHkgbGltaXQgLUxTQiAqLworCisJdTggICAgICAgICBkdGxfbXNiOwkvKiBkaXNjb25uZWN0IHRpbWUgbGltaXQgLSBNU0IgKi8KKwl1OCAgICAgICAgIGR0bF9sc2I7CS8qIGRpc2Nvbm5lY3QgdGltZSBsaW1pdCAtIExTQiAqLworCisJdTggICAgICAgICBjdGxfbXNiOwkvKiBjb25uZWN0IHRpbWUgbGltaXQgLSBNU0IgKi8KKwl1OCAgICAgICAgIGN0bF9sc2I7CS8qIGNvbm5lY3QgdGltZSBsaW1pdCAtIExTQiAqLworCisJdTggICAgICAgICBtYXhfYnVyc3RfbGVuX21zYjsKKwl1OCAgICAgICAgIG1heF9idXJzdF9sZW5fbHNiOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBlbWRwOjE7CS8qIGVuYWJsZSBtb2RpZnkgZGF0YSBwb2ludGVycyAqLworCXU4ICAgICAgICAgZmE6MzsJLyogZmFpciBhcmJpdHJhdGlvbiAqLworCXU4ICAgICAgICAgZGltbToxOwkvKiBkaXNjb25uZWN0IGltbWVkaWF0ZSAqLworCXU4ICAgICAgICAgZHRkYzozOwkvKiBkYXRhIHRyYW5zZmVyIGRpc2Nvbm5lY3QgY29udHJvbCAqLworI2Vsc2UKKwl1OCAgICAgICAgIGR0ZGM6MzsJLyogZGF0YSB0cmFuc2ZlciBkaXNjb25uZWN0IGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIGRpbW06MTsJLyogZGlzY29ubmVjdCBpbW1lZGlhdGUgKi8KKwl1OCAgICAgICAgIGZhOjM7CS8qIGZhaXIgYXJiaXRyYXRpb24gKi8KKwl1OCAgICAgICAgIGVtZHA6MTsJLyogZW5hYmxlIG1vZGlmeSBkYXRhIHBvaW50ZXJzICovCisjZW5kaWYKKworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworCisJdTggICAgICAgICBmaXJzdF9idXJzdF9sZW5fbXNiOworCXU4ICAgICAgICAgZmlyc3RfYnVyc3RfbGVuX2xzYjsKK307CisKKy8qCisgKiBTQ1NJIGZvcm1hdCBkZXZpY2UgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX2Zvcm1hdF9kZXZpY2Vfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgcHM6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMToxOworCXUzMiAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXUzMiAgICAgICAgcGFnZV9jb2RlOjY7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1MzIgICAgICAgIHBhZ2VfbGVuOjg7CisJdTMyICAgICAgICB0cmFja3NfcGVyX3pvbmU6MTY7CisKKwl1MzIgICAgICAgIGFfc2VjX3Blcl96b25lOjE2OworCXUzMiAgICAgICAgYV90cmFja3NfcGVyX3pvbmU6MTY7CisKKwl1MzIgICAgICAgIGFfdHJhY2tzX3Blcl9sdW46MTY7CS8qIGFsdGVybmF0ZSB0cmFja3MvbHVuLU1TQiAqLworCXUzMiAgICAgICAgc2VjX3Blcl90cmFjazoxNjsJLyogc2VjdG9ycy90cmFjay1NU0IgKi8KKworCXUzMiAgICAgICAgYnl0ZXNfcGVyX3NlY3RvcjoxNjsKKwl1MzIgICAgICAgIGludGVybGVhdmU6MTY7CisKKwl1MzIgICAgICAgIHRzZjoxNjsJCQkvKiB0cmFjayBza2V3IGZhY3Rvci1NU0IgKi8KKwl1MzIgICAgICAgIGNzZjoxNjsJCQkvKiBjeWxpbmRlciBza2V3IGZhY3Rvci1NU0IgKi8KKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBzc2VjOjE7CS8qIHNvZnQgc2VjdG9yIGZvcm1hdHRpbmcgKi8KKwl1MzIgICAgICAgIGhzZWM6MTsJLyogaGFyZCBzZWN0b3IgZm9ybWF0dGluZyAqLworCXUzMiAgICAgICAgcm1iOjE7CS8qIHJlbW92YWJsZSBtZWRpYSAqLworCXUzMiAgICAgICAgc3VyZjoxOwkvKiBzdXJmYWNlICovCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKyNlbHNlCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKwl1MzIgICAgICAgIHN1cmY6MTsJLyogc3VyZmFjZSAqLworCXUzMiAgICAgICAgcm1iOjE7CS8qIHJlbW92YWJsZSBtZWRpYSAqLworCXUzMiAgICAgICAgaHNlYzoxOwkvKiBoYXJkIHNlY3RvciBmb3JtYXR0aW5nICovCisJdTMyICAgICAgICBzc2VjOjE7CS8qIHNvZnQgc2VjdG9yIGZvcm1hdHRpbmcgKi8KKyNlbmRpZgorCXUzMiAgICAgICAgcmVzZXJ2ZWQzOjI0OworfTsKKworLyoKKyAqIFNDU0kgcmlnaWQgZGlzayBkZXZpY2UgZ2VvbWV0cnkgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9yaWdpZF9kZXZpY2VfZ2VvbWV0cnlfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgcHM6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMToxOworCXUzMiAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXUzMiAgICAgICAgcGFnZV9jb2RlOjY7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1MzIgICAgICAgIHBhZ2VfbGVuOjg7CisJdTMyICAgICAgICBudW1fY3lsaW5kZXJzMDo4OworCXUzMiAgICAgICAgbnVtX2N5bGluZGVyczE6ODsKKworCXUzMiAgICAgICAgbnVtX2N5bGluZGVyczI6ODsKKwl1MzIgICAgICAgIG51bV9oZWFkczo4OworCXUzMiAgICAgICAgc2N3cDA6ODsKKwl1MzIgICAgICAgIHNjd3AxOjg7CisKKwl1MzIgICAgICAgIHNjd3AyOjg7CisJdTMyICAgICAgICBzY3J3YzA6ODsKKwl1MzIgICAgICAgIHNjcndjMTo4OworCXUzMiAgICAgICAgc2Nyd2MyOjg7CisKKwl1MzIgICAgICAgIGRzcjoxNjsKKwl1MzIgICAgICAgIGxzY3lsMDo4OworCXUzMiAgICAgICAgbHNjeWwxOjg7CisKKwl1MzIgICAgICAgIGxzY3lsMjo4OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICByZXNlcnZlZDI6NjsKKwl1MzIgICAgICAgIHJwbDoyOwkvKiByb3RhdGlvbmFsIHBvc2l0aW9uIGxvY2tpbmcgKi8KKyNlbHNlCisJdTMyICAgICAgICBycGw6MjsJLyogcm90YXRpb25hbCBwb3NpdGlvbiBsb2NraW5nICovCisJdTMyICAgICAgICByZXNlcnZlZDI6NjsKKyNlbmRpZgorCXUzMiAgICAgICAgcm90X29mZjo4OworCXUzMiAgICAgICAgcmVzZXJ2ZWQzOjg7CisKKwl1MzIgICAgICAgIG1lZF9yb3RfcmF0ZToxNjsKKwl1MzIgICAgICAgIHJlc2VydmVkNDoxNjsKK307CisKKy8qCisgKiBTQ1NJIGNhY2hpbmcgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX2NhY2hpbmdfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlczE6MTsKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcmVzMToxOworCXU4ICAgICAgICAgcHM6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9sZW47CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGljOjE7CS8qIGluaXRpYXRvciBjb250cm9sICovCisJdTggICAgICAgICBhYnBmOjE7CS8qIGFib3J0IHByZS1mZXRjaCAqLworCXU4ICAgICAgICAgY2FwOjE7CS8qIGNhY2hpbmcgYW5hbHlzaXMgcGVybWl0dGVkICovCisJdTggICAgICAgICBkaXNjOjE7CS8qIGRpc2NvbnRpbnVpdHkgKi8KKwl1OCAgICAgICAgIHNpemU6MTsJLyogc2l6ZSBlbmFibGUgKi8KKwl1OCAgICAgICAgIHdjZToxOwkvKiB3cml0ZSBjYWNoZSBlbmFibGUgKi8KKwl1OCAgICAgICAgIG1mOjE7CS8qIG11bHRpcGxpY2F0aW9uIGZhY3RvciAqLworCXU4ICAgICAgICAgcmNkOjE7CS8qIHJlYWQgY2FjaGUgZGlzYWJsZSAqLworCisJdTggICAgICAgICBkcnJwOjQ7CS8qIGRlbWFuZCByZWFkIHJldGVudGlvbiBwcmlvcml0eSAqLworCXU4ICAgICAgICAgd3JwOjQ7CS8qIHdyaXRlIHJldGVudGlvbiBwcmlvcml0eSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJjZDoxOwkvKiByZWFkIGNhY2hlIGRpc2FibGUgKi8KKwl1OCAgICAgICAgIG1mOjE7CS8qIG11bHRpcGxpY2F0aW9uIGZhY3RvciAqLworCXU4ICAgICAgICAgd2NlOjE7CS8qIHdyaXRlIGNhY2hlIGVuYWJsZSAqLworCXU4ICAgICAgICAgc2l6ZToxOwkvKiBzaXplIGVuYWJsZSAqLworCXU4ICAgICAgICAgZGlzYzoxOwkvKiBkaXNjb250aW51aXR5ICovCisJdTggICAgICAgICBjYXA6MTsJLyogY2FjaGluZyBhbmFseXNpcyBwZXJtaXR0ZWQgKi8KKwl1OCAgICAgICAgIGFicGY6MTsJLyogYWJvcnQgcHJlLWZldGNoICovCisJdTggICAgICAgICBpYzoxOwkvKiBpbml0aWF0b3IgY29udHJvbCAqLworCisJdTggICAgICAgICB3cnA6NDsJLyogd3JpdGUgcmV0ZW50aW9uIHByaW9yaXR5ICovCisJdTggICAgICAgICBkcnJwOjQ7CS8qIGRlbWFuZCByZWFkIHJldGVudGlvbiBwcmlvcml0eSAqLworI2VuZGlmCisJdTggICAgICAgICBkcHRsWzJdOy8qIGRpc2FibGUgcHJlLWZldGNoIHRyYW5zZmVyIGxlbmd0aCAqLworCXU4ICAgICAgICAgbWluX3ByZWZldGNoWzJdOworCXU4ICAgICAgICAgbWF4X3ByZWZldGNoWzJdOworCXU4ICAgICAgICAgbWF4X3ByZWZldGNoX2xpbWl0WzJdOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBmc3c6MTsJLyogZm9yY2Ugc2VxdWVudGlhbCB3cml0ZSAqLworCXU4ICAgICAgICAgbGJjc3M6MTsvKiBsb2dpY2FsIGJsb2NrIGNhY2hlIHNlZ21lbnQgc2l6ZSAqLworCXU4ICAgICAgICAgZHJhOjE7CS8qIGRpc2FibGUgcmVhZCBhaGVhZCAqLworCXU4ICAgICAgICAgdnM6MjsJLyogdmVuZG9yIHNwZWNpZmljICovCisJdTggICAgICAgICByZXMyOjM7CisjZWxzZQorCXU4ICAgICAgICAgcmVzMjozOworCXU4ICAgICAgICAgdnM6MjsJLyogdmVuZG9yIHNwZWNpZmljICovCisJdTggICAgICAgICBkcmE6MTsJLyogZGlzYWJsZSByZWFkIGFoZWFkICovCisJdTggICAgICAgICBsYmNzczoxOy8qIGxvZ2ljYWwgYmxvY2sgY2FjaGUgc2VnbWVudCBzaXplICovCisJdTggICAgICAgICBmc3c6MTsJLyogZm9yY2Ugc2VxdWVudGlhbCB3cml0ZSAqLworI2VuZGlmCisJdTggICAgICAgICBudW1fY2FjaGVfc2VnczsKKworCXU4ICAgICAgICAgY2FjaGVfc2VnX3NpemVbMl07CisJdTggICAgICAgICByZXMzOworCXU4ICAgICAgICAgbm9uX2NhY2hlX3NlZ19zaXplWzNdOworfTsKKworLyoKKyAqIFNDU0kgY29udHJvbCBtb2RlIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfY29udHJvbF9wYWdlX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KK3U4ICAgICAgICAgcHM6MTsKK3U4ICAgICAgICAgcmVzZXJ2ZWQxOjE7Cit1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKK3U4ICAgICAgICAgcGFnZV9jb2RlOjY7Cit1OCAgICAgICAgIHJlc2VydmVkMToxOwordTggICAgICAgICBwczoxOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2xlbjsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgdHN0OjM7CQkvKiB0YXNrIHNldCB0eXBlICovCisJdTggICAgICAgICByZXNlcnZlZDM6MzsKKwl1OCAgICAgICAgIGdsdHNkOjE7CS8qIGdsb2JhbCBsb2dnaW5nIHRhcmdldCBzYXZlIGRpc2FibGUgKi8KKwl1OCAgICAgICAgIHJsZWM6MTsJCS8qIHJlcG9ydCBsb2cgZXhjZXB0aW9uIGNvbmRpdGlvbiAqLworCisJdTggICAgICAgICBxYWxnb19tb2Q6NDsJLyogcXVldWUgYWxvZ29yaXRobSBtb2RpZmllciAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjE7CisJdTggICAgICAgICBxZXJyOjI7CQkvKiBxdWV1ZSBlcnJvciBtYW5hZ2VtZW50ICovCisJdTggICAgICAgICBkcXVlOjE7CQkvKiBkaXNhYmxlIHF1ZXVpbmcgKi8KKworCXU4ICAgICAgICAgcmVzZXJ2ZWQ1OjE7CisJdTggICAgICAgICByYWM6MTsJCS8qIHJlcG9ydCBhIGNoZWNrICovCisJdTggICAgICAgICByZXNlcnZlZDY6MjsKKwl1OCAgICAgICAgIHN3cDoxOwkJLyogc29mdHdhcmUgd3JpdGUgcHJvdGVjdCAqLworCXU4ICAgICAgICAgcmFlcnA6MTsJLyogcmVhZHkgQUVSIHBlcm1pc3Npb24gKi8KKwl1OCAgICAgICAgIHVhYWVycDoxOwkvKiB1bml0IGF0dGVuc3Rpb24gQUVSIHBlcm1pc3Npb24gKi8KKwl1OCAgICAgICAgIGVhZXJwOjE7CS8qIGVycm9yIEFFUiBwZXJtaXNzaW9uICovCisKKwl1OCAgICAgICAgIHJlc2VydmVkNzo1OworCXU4ICAgICAgICAgYXV0b2xvYWRfbW9kOjM7CisjZWxzZQorCXU4ICAgICAgICAgcmxlYzoxOwkJLyogcmVwb3J0IGxvZyBleGNlcHRpb24gY29uZGl0aW9uICovCisJdTggICAgICAgICBnbHRzZDoxOwkvKiBnbG9iYWwgbG9nZ2luZyB0YXJnZXQgc2F2ZSBkaXNhYmxlICovCisJdTggICAgICAgICByZXNlcnZlZDM6MzsKKwl1OCAgICAgICAgIHRzdDozOwkJLyogdGFzayBzZXQgdHlwZSAqLworCisJdTggICAgICAgICBkcXVlOjE7CQkvKiBkaXNhYmxlIHF1ZXVpbmcgKi8KKwl1OCAgICAgICAgIHFlcnI6MjsJCS8qIHF1ZXVlIGVycm9yIG1hbmFnZW1lbnQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDoxOworCXU4ICAgICAgICAgcWFsZ29fbW9kOjQ7CS8qIHF1ZXVlIGFsb2dvcml0aG0gbW9kaWZpZXIgKi8KKworCXU4ICAgICAgICAgZWFlcnA6MTsJLyogZXJyb3IgQUVSIHBlcm1pc3Npb24gKi8KKwl1OCAgICAgICAgIHVhYWVycDoxOwkvKiB1bml0IGF0dGVuc3Rpb24gQUVSIHBlcm1pc3Npb24gKi8KKwl1OCAgICAgICAgIHJhZXJwOjE7CS8qIHJlYWR5IEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICBzd3A6MTsJCS8qIHNvZnR3YXJlIHdyaXRlIHByb3RlY3QgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNjoyOworCXU4ICAgICAgICAgcmFjOjE7CQkvKiByZXBvcnQgYSBjaGVjayAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ1OjE7CisKKwl1OCAgICAgICAgIGF1dG9sb2FkX21vZDozOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ3OjU7CisjZW5kaWYKKwl1OCAgICAgICAgIHJhaHBfbXNiOwkvKiByZWFkeSBBRVIgaG9sZG9mZiBwZXJpb2QgLSBNU0IgKi8KKwl1OCAgICAgICAgIHJhaHBfbHNiOwkvKiByZWFkeSBBRVIgaG9sZG9mZiBwZXJpb2QgLSBMU0IgKi8KKworCXU4ICAgICAgICAgYnVzeV90aW1lb3V0X3BlcmlvZF9tc2I7CisJdTggICAgICAgICBidXN5X3RpbWVvdXRfcGVyaW9kX2xzYjsKKworCXU4ICAgICAgICAgZXh0X3NlbGZ0ZXN0X2NvbXBsX3RpbWVfbXNiOworCXU4ICAgICAgICAgZXh0X3NlbGZ0ZXN0X2NvbXBsX3RpbWVfbHNiOworfTsKKworLyoKKyAqIFNDU0kgbWVkaXVtIHR5cGVzIHN1cHBvcnRlZCBtb2RlIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfbWVkaXVtX3R5cGVzX3N1cF9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwczoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcHM6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9sZW47CisKKwl1OCAgICAgICAgIHJlc2VydmVkM1syXTsKKwl1OCAgICAgICAgIG1lZF90eXBlMV9zdXA7CS8qIG1lZGl1bSB0eXBlIG9uZSBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIG1lZF90eXBlMl9zdXA7CS8qIG1lZGl1bSB0eXBlIHR3byBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIG1lZF90eXBlM19zdXA7CS8qIG1lZGl1bSB0eXBlIHRocmVlIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgbWVkX3R5cGU0X3N1cDsJLyogbWVkaXVtIHR5cGUgZm91ciBzdXBwb3J0ZWQgKi8KK307CisKKy8qCisgKiBTQ1NJIGluZm9ybWF0aW9uYWwgZXhjZXB0aW9uIGNvbnRyb2wgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX2luZm9fZXhjcHRfY250bF9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwczoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcHM6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9sZW47CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmY6MTsJCS8qIHBlcmZvcm1hbmNlICovCisJdTggICAgICAgICByZXNlcnZlZDM6MTsKKwl1OCAgICAgICAgIGViZjoxOwkJLyogZW5hYmxlIGJhY2tncm91bmQgZnVjbnRpb24gKi8KKwl1OCAgICAgICAgIGV3YXNjOjE7CS8qIGVuYWJsZSB3YXJuaW5nICovCisJdTggICAgICAgICBkZXhjcHQ6MTsJLyogZGlzYWJsZSBleGNlcHRpb24gY29udHJvbCAqLworCXU4ICAgICAgICAgdGVzdDoxOwkJLyogZW5hYmxlIHRlc3QgZGV2aWNlIGZhaWx1cmUKKwkJCQkJICogbm90aWZpY2F0aW9uCisJCQkJCSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjE7CisJdTggICAgICAgICBsb2dfZXJyb3I6MTsKKworCXU4ICAgICAgICAgcmVzZXJ2ZWQ1OjQ7CisJdTggICAgICAgICBtcmllOjQ7CQkvKiBtZXRob2Qgb2YgcmVwb3J0aW5nIGluZm8KKwkJCQkJICogZXhjZXB0aW9ucworCQkJCQkgKi8KKyNlbHNlCisJdTggICAgICAgICBsb2dfZXJyb3I6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkNDoxOworCXU4ICAgICAgICAgdGVzdDoxOwkJLyogZW5hYmxlIHRlc3QgZGV2aWNlIGZhaWx1cmUKKwkJCQkJICogbm90aWZpY2F0aW9uCisJCQkJCSAqLworCXU4ICAgICAgICAgZGV4Y3B0OjE7CS8qIGRpc2FibGUgZXhjZXB0aW9uIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIGV3YXNjOjE7CS8qIGVuYWJsZSB3YXJuaW5nICovCisJdTggICAgICAgICBlYmY6MTsJCS8qIGVuYWJsZSBiYWNrZ3JvdW5kIGZ1Y250aW9uICovCisJdTggICAgICAgICByZXNlcnZlZDM6MTsKKwl1OCAgICAgICAgIHBlcmY6MTsJCS8qIHBlcmZvcm1hbmNlICovCisKKwl1OCAgICAgICAgIG1yaWU6NDsJCS8qIG1ldGhvZCBvZiByZXBvcnRpbmcgaW5mbworCQkJCQkgKiBleGNlcHRpb25zCisJCQkJCSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ1OjQ7CisjZW5kaWYKKwl1OCAgICAgICAgIGludGVydmFsX3RpbWVyX21zYjsKKwl1OCAgICAgICAgIGludGVydmFsX3RpbWVyX2xzYjsKKworCXU4ICAgICAgICAgcmVwb3J0X2NvdW50X21zYjsKKwl1OCAgICAgICAgIHJlcG9ydF9jb3VudF9sc2I7Cit9OworCisvKgorICogTWV0aG9kcyBvZiByZXBvcnRpbmcgaW5mb3JtYXRpb25hbCBleGNlcHRpb25zCisgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfTk9fUkVQT1JUICAgICAgIDB4MAkvKiBubyByZXBvcnRpbmcgb2YgZXhjZXB0aW9ucyAqLworI2RlZmluZSBTQ1NJX01QX0lFQ19BRVIgICAgICAgICAgICAgMHgxCS8qIGFzeW5jIGV2ZW50IHJlcG9ydGluZyAqLworI2RlZmluZSBTQ1NJX01QX0lFQ19VTklUX0FUVE4gICAgICAgMHgyCS8qIGdlbmVyYXRlIHVuaXQgYXR0ZW5zdGlvbiAqLworI2RlZmluZSBTQ1NJX01PX0lFQ19DT05EX1JFQ19FUlIgICAgMHgzCS8qIGNvbmRpdGlvbmFsbHkgZ2VuZXJhdGUgcmVjb3ZlcmVkCisJCQkJCSAqIGVycm9yCisJCQkJCSAqLworI2RlZmluZSBTQ1NJX01QX0lFQ19VTkNPTkRfUkVDX0VSUiAgMHg0CS8qIHVuY29uZGl0aW9uYWxseSBnZW5lcmF0ZSByZWNvdmVyZWQKKwkJCQkJICogZXJyb3IKKwkJCQkJICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX05PX1NFTlNFICAgICAgICAweDUJLyogZ2VuZXJhdGUgbm8gc2Vuc2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfT05fUkVRVUVTVCAgICAgIDB4NgkvKiBvbmx5IHJlcG9ydCBleGNlcHRpb25zIG9uIHJlcXVlc3QgKi8KKworLyoKKyAqIFNDU0kgZmxleGlibGUgZGlzayBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX2ZsZXhpYmxlX2Rpc2tfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworCisJdTggICAgICAgICB0cmFuc2Zlcl9yYXRlX21zYjsKKwl1OCAgICAgICAgIHRyYW5zZmVyX3JhdGVfbHNiOworCisJdTggICAgICAgICBudW1faGVhZHM7CisJdTggICAgICAgICBudW1fc2VjdG9yczsKKworCXU4ICAgICAgICAgYnl0ZXNfcGVyX3NlY3Rvcl9tc2I7CisJdTggICAgICAgICBieXRlc19wZXJfc2VjdG9yX2xzYjsKKworCXU4ICAgICAgICAgbnVtX2N5bGluZGVyc19tc2I7CisJdTggICAgICAgICBudW1fY3lsaW5kZXJzX2xzYjsKKworCXU4ICAgICAgICAgc2Nfd3BjX21zYjsJLyogc3RhcnRpbmcgY3lsaW5kZXItd3JpdGUKKwkJCQkJICogcHJlY29tcGVuc2F0aW9uIG1zYgorCQkJCQkgKi8KKwl1OCAgICAgICAgIHNjX3dwY19sc2I7CS8qIHN0YXJ0aW5nIGN5bGluZGVyLXdyaXRlCisJCQkJCSAqIHByZWNvbXBlbnNhdGlvbiBsc2IKKwkJCQkJICovCisJdTggICAgICAgICBzY19yd2NfbXNiOwkvKiBzdGFydGluZyBjeWxpbmRlci1yZWR1Y2VkIHdyaXRlCisJCQkJCSAqIGN1cnJlbnQgbXNiCisJCQkJCSAqLworCXU4ICAgICAgICAgc2NfcndjX2xzYjsJLyogc3RhcnRpbmcgY3lsaW5kZXItcmVkdWNlZCB3cml0ZQorCQkJCQkgKiBjdXJyZW50IGxzYgorCQkJCQkgKi8KKworCXU4ICAgICAgICAgZGV2X3N0ZXBfcmF0ZV9tc2I7CisJdTggICAgICAgICBkZXZfc3RlcF9yYXRlX2xzYjsKKworCXU4ICAgICAgICAgZGV2X3N0ZXBfcHVsc2Vfd2lkdGg7CisKKwl1OCAgICAgICAgIGhlYWRfc2RfbXNiOwkvKiBoZWFkIHNldHRsZSBkZWxheSBtc2IgKi8KKwl1OCAgICAgICAgIGhlYWRfc2RfbHNiOwkvKiBoZWFkIHNldHRsZSBkZWxheSBsc2IgKi8KKworCXU4ICAgICAgICAgbW90b3Jfb25fZGVsYXk7CisJdTggICAgICAgICBtb3Rvcl9vZmZfZGVsYXk7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHRyZHk6MTsJCS8qIHRydWUgcmVhZHkgYml0ICovCisJdTggICAgICAgICBzc246MTsJCS8qIHN0YXJ0IHNlY3RvciBudW1iZXIgYml0ICovCisJdTggICAgICAgICBtbzoxOwkJLyogbW90b3Igb24gYml0ICovCisJdTggICAgICAgICByZXNlcnZlZDM6NTsKKworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjQ7CisJdTggICAgICAgICBzcGM6NDsJCS8qIHN0ZXAgcHVsc2UgcGVyIGN5bGluZGVyICovCisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjU7CisJdTggICAgICAgICBtbzoxOwkJLyogbW90b3Igb24gYml0ICovCisJdTggICAgICAgICBzc246MTsJCS8qIHN0YXJ0IHNlY3RvciBudW1iZXIgYml0ICovCisJdTggICAgICAgICB0cmR5OjE7CQkvKiB0cnVlIHJlYWR5IGJpdCAqLworCisJdTggICAgICAgICBzcGM6NDsJCS8qIHN0ZXAgcHVsc2UgcGVyIGN5bGluZGVyICovCisJdTggICAgICAgICByZXNlcnZlZDQ6NDsKKyNlbmRpZgorCXU4ICAgICAgICAgd3JpdGVfY29tcDsKKwl1OCAgICAgICAgIGhlYWRfbG9hZF9kZWxheTsKKwl1OCAgICAgICAgIGhlYWRfdW5sb2FkX2RlbGF5OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwaW4zNDo0OwkvKiBwaW4zNCB1c2FnZSAqLworCXU4ICAgICAgICAgcGluMjo0OwkJLyogcGluMiB1c2FnZSAqLworCisJdTggICAgICAgICBwaW40OjQ7CQkvKiBwaW40IHVzYWdlICovCisJdTggICAgICAgICBwaW4xOjQ7CQkvKiBwaW4xIHVzYWdlICovCisjZWxzZQorCXU4ICAgICAgICAgcGluMjo0OwkJLyogcGluMiB1c2FnZSAqLworCXU4ICAgICAgICAgcGluMzQ6NDsJLyogcGluMzQgdXNhZ2UgKi8KKworCXU4ICAgICAgICAgcGluMTo0OwkJLyogcGluMSB1c2FnZSAqLworCXU4ICAgICAgICAgcGluNDo0OwkJLyogcGluNCB1c2FnZSAqLworI2VuZGlmCisJdTggICAgICAgICBtZWRfcm90X3JhdGVfbXNiOworCXU4ICAgICAgICAgbWVkX3JvdF9yYXRlX2xzYjsKKworCXU4ICAgICAgICAgcmVzZXJ2ZWQ1WzJdOworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX2Zvcm1hdF9kYXRhNl9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyNl9zIG1waDsJLyogbW9kZSBwYWdlIGhlYWRlciAqLworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zIGRlc2M7CS8qIGJsb2NrIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3Qgc2NzaV9tcF9mb3JtYXRfZGV2aWNlX3MgZm9ybWF0OwkvKiBmb3JtYXQgZGV2aWNlIGRhdGEgKi8KK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFnZV9mb3JtYXRfZGF0YTEwX3N7CisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXIxMF9zIG1waDsJLyogbW9kZSBwYWdlIGhlYWRlciAqLworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zIGRlc2M7CS8qIGJsb2NrIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3Qgc2NzaV9tcF9mb3JtYXRfZGV2aWNlX3MgZm9ybWF0OwkvKiBmb3JtYXQgZGV2aWNlIGRhdGEgKi8KK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFnZV9yZGdfZGF0YTZfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjZfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfcmlnaWRfZGV2aWNlX2dlb21ldHJ5X3MgcmRnOworCQkJCQkvKiByaWdpZCBnZW9tZXRyeSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfcmRnX2RhdGExMF9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyMTBfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfcmlnaWRfZGV2aWNlX2dlb21ldHJ5X3MgcmRnOworCQkJCQkvKiByaWdpZCBnZW9tZXRyeSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfY2FjaGU2X3N7CisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXI2X3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX2NhY2hpbmdfcyBjYWNoZTsJLyogY2FjaGUgcGFnZSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfY2FjaGUxMF9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyMTBfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfY2FjaGluZ19zIGNhY2hlOwkvKiBjYWNoZSBwYWdlIGRhdGEgKi8KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGb3JtYXQgVW5pdCBjb21tYW5kCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogRm9ybWF0IFVuaXQgQ0RCCisgKi8KK3N0cnVjdCBzY3NpX2Zvcm1hdF91bml0X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlczE6MzsKKwl1OCAgICAgICAgIGZtdGRhdGE6MTsJLyogaWYgc2V0LCBkYXRhIG91dCBwaGFzZSBoYXMgZm9ybWF0CisJCQkJCSAqIGRhdGEKKwkJCQkJICovCisJdTggICAgICAgICBjbXBsc3Q6MTsJLyogaWYgc2V0LCBkZWZlY3QgbGlzdCBpcyBjb21wbGV0ZSAqLworCXU4ICAgICAgICAgZGVmX2xpc3Q6MzsJLyogZm9ybWF0IG9mIGRlZmVjdCBkZXNjcmlwdG9yIGlzCisJCQkJCSAqIGZtdGRhdGEgPTEKKwkJCQkJICovCisjZWxzZQorCXU4ICAgICAgICAgZGVmX2xpc3Q6MzsJLyogZm9ybWF0IG9mIGRlZmVjdCBkZXNjcmlwdG9yIGlzCisJCQkJCSAqIGZtdGRhdGEgPSAxCisJCQkJCSAqLworCXU4ICAgICAgICAgY21wbHN0OjE7CS8qIGlmIHNldCwgZGVmZWN0IGxpc3QgaXMgY29tcGxldGUgKi8KKwl1OCAgICAgICAgIGZtdGRhdGE6MTsJLyogaWYgc2V0LCBkYXRhIG91dCBwaGFzZSBoYXMgZm9ybWF0CisJCQkJCSAqIGRhdGEKKwkJCQkJICovCisJdTggICAgICAgICByZXMxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIGludGVybGVhdmVfbXNiOworCXU4ICAgICAgICAgaW50ZXJsZWF2ZV9sc2I7CisJdTggICAgICAgICB2ZW5kb3Jfc3BlYzsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogaAorICovCitzdHJ1Y3Qgc2NzaV9yZXNlcnZlNl9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDozOworCXU4ICAgICAgICAgb2Jzb2xldGU6NDsKKwl1OCAgICAgICAgIGV4dGVudDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV4dGVudDoxOworCXU4ICAgICAgICAgb2Jzb2xldGU6NDsKKwl1OCAgICAgICAgIHJlc2VydmVkOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmF0aW9uX2lkOworCXUxNiAgICAgICAgcGFyYW1fbGlzdF9sZW47CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIGgKKyAqLworc3RydWN0IHNjc2lfcmVsZWFzZTZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBvYnNvbGV0ZTo0OworCXU4ICAgICAgICAgZXh0ZW50OjE7CisjZWxzZQorCXU4ICAgICAgICAgZXh0ZW50OjE7CisJdTggICAgICAgICBvYnNvbGV0ZTo0OworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmF0aW9uX2lkOworCXUxNiAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBoCisgKi8KK3N0cnVjdCBzY3NpX3Jlc2VydmUxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIHRoaXJkX3BhcnR5OjE7CisJdTggICAgICAgICByZXNlcnZlZDI6MjsKKwl1OCAgICAgICAgIGxvbmdfaWQ6MTsKKwl1OCAgICAgICAgIGV4dGVudDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV4dGVudDoxOworCXU4ICAgICAgICAgbG9uZ19pZDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjI7CisJdTggICAgICAgICB0aGlyZF9wYXJ0eToxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmF0aW9uX2lkOworCXU4ICAgICAgICAgdGhpcmRfcHR5X2Rldl9pZDsKKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKwl1OCAgICAgICAgIHJlc2VydmVkNDsKKwl1OCAgICAgICAgIHJlc2VydmVkNTsKKwl1MTYgICAgICAgIHBhcmFtX2xpc3RfbGVuOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKK3N0cnVjdCBzY3NpX3JlbGVhc2UxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIHRoaXJkX3BhcnR5OjE7CisJdTggICAgICAgICByZXNlcnZlZDI6MjsKKwl1OCAgICAgICAgIGxvbmdfaWQ6MTsKKwl1OCAgICAgICAgIGV4dGVudDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV4dGVudDoxOworCXU4ICAgICAgICAgbG9uZ19pZDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjI7CisJdTggICAgICAgICB0aGlyZF9wYXJ0eToxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmF0aW9uX2lkOworCXU4ICAgICAgICAgdGhpcmRfcHR5X2Rldl9pZDsKKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKwl1OCAgICAgICAgIHJlc2VydmVkNDsKKwl1OCAgICAgICAgIHJlc2VydmVkNTsKKwl1MTYgICAgICAgIHBhcmFtX2xpc3RfbGVuOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKK3N0cnVjdCBzY3NpX3ZlcmlmeTEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgZHBvOjE7CisJdTggICAgICAgICByZXNlcnZlZDoyOworCXU4ICAgICAgICAgYnl0Y2hrOjE7CisJdTggICAgICAgICByZWxhZGRyOjE7CisjZWxzZQorCXU4ICAgICAgICAgcmVsYWRkcjoxOworCXU4ICAgICAgICAgYnl0Y2hrOjE7CisJdTggICAgICAgICByZXNlcnZlZDoyOworCXU4ICAgICAgICAgZHBvOjE7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMDsKKwl1OCAgICAgICAgIGxiYTE7CisJdTggICAgICAgICBsYmEyOworCXU4ICAgICAgICAgbGJhMzsKKwl1OCAgICAgICAgIHJlc2VydmVkMTsKKwl1OCAgICAgICAgIHZlcmlmaWNhdGlvbl9sZW4wOworCXU4ICAgICAgICAgdmVyaWZpY2F0aW9uX2xlbjE7CisJdTggICAgICAgICBjb250cm9sX2J5dGU7Cit9OworCitzdHJ1Y3Qgc2NzaV9yZXF1ZXN0X3NlbnNlX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6NTsKKyNlbHNlCisJdTggICAgICAgICByZXNlcnZlZDo1OworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkMDsKKwl1OCAgICAgICAgIHJlc2VydmVkMTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2xfYnl0ZTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0NTSSBzdGF0dXMgYnl0ZSB2YWx1ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIFNDU0lfU1RBVFVTX0dPT0QgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX1NUQVRVU19DSEVDS19DT05ESVRJT04gICAgICAgIDB4MDIKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQ09ORElUSU9OX01FVCAgICAgICAgICAweDA0CisjZGVmaW5lIFNDU0lfU1RBVFVTX0JVU1kgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBTQ1NJX1NUQVRVU19JTlRFUk1FRElBVEUgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgU0NTSV9TVEFUVVNfSUNNICAgICAgICAgICAgICAgICAgICAweDE0CS8qIGludGVybWVkaWF0ZSBjb25kaXRpb24gbWV0ICovCisjZGVmaW5lIFNDU0lfU1RBVFVTX1JFU0VSVkFUSU9OX0NPTkZMSUNUICAgMHgxOAorI2RlZmluZSBTQ1NJX1NUQVRVU19DT01NQU5EX1RFUk1JTkFURUQgICAgIDB4MjIKKyNkZWZpbmUgU0NTSV9TVEFUVVNfUVVFVUVfRlVMTCAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFNDU0lfU1RBVFVTX0FDQV9BQ1RJVkUgICAgICAgICAgICAgMHgzMAorCisjZGVmaW5lIFNDU0lfTUFYX0FMTE9DX0xFTgkJMHhGRgkvKiBtYXhpbXVtIGFsbG9jYXJpb24gbGVuZ3RoCisJCQkJCQkgKiBpbiBDREJzCisJCQkJCQkgKi8KKworI2RlZmluZSBTQ1NJX09QX1dSSVRFX1ZFUklGWTEwICAgICAgMHgyRQorI2RlZmluZSBTQ1NJX09QX1dSSVRFX1ZFUklGWTEyICAgICAgMHhBRQorI2RlZmluZSBTQ1NJX09QX1VOREVGICAgICAgICAgICAgICAgMHhGRgorCisvKgorICogU0NTSSBXUklURS1WRVJJRlkoMTApIGNvbW1hbmQKKyAqLworc3RydWN0IHNjc2lfd3JpdGVfdmVyaWZ5MTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBkcG86MTsJCS8qIERpc2FibGUgUGFnZSBPdXQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjoxOworCXU4ICAgICAgICAgZWJwOjE7CQkvKiBlcnNlIGJ5LXBhc3MgKi8KKwl1OCAgICAgICAgIGJ5dGNoazoxOwkvKiBieXRlIGNoZWNrICovCisJdTggICAgICAgICByZWxfYWRyOjE7CS8qIHJlbGF0aXZlIGFkZHJlc3MgKi8KKyNlbHNlCisJdTggICAgICAgICByZWxfYWRyOjE7CS8qIHJlbGF0aXZlIGFkZHJlc3MgKi8KKwl1OCAgICAgICAgIGJ5dGNoazoxOwkvKiBieXRlIGNoZWNrICovCisJdTggICAgICAgICBlYnA6MTsJCS8qIGVyc2UgYnktcGFzcyAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjE7CisJdTggICAgICAgICBkcG86MTsJCS8qIERpc2FibGUgUGFnZSBPdXQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICBsYmEwOwkJLyogbG9naWNhbCBibG9jayBhZGRyZXNzIC0gTVNCICovCisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsKKwl1OCAgICAgICAgIGxiYTM7CQkvKiBMU0IgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKwl1OCAgICAgICAgIHhmZXJfbGVuZ3RoMDsJLyogdHJhbnNmZXIgbGVuZ3RoIGluIGJsb2NrcyAtIE1TQiAqLworCXU4ICAgICAgICAgeGZlcl9sZW5ndGgxOwkvKiBMU0IgKi8KKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19TQ1NJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3R5cGVzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODc1YTZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3R5cGVzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICB0eXBlcy5oIFByb3RvY29sIGRlZmluZWQgYmFzZSB0eXBlcworICovCisKKyNpZm5kZWYgX19UWVBFU19IX18KKyNkZWZpbmUgX19UWVBFU19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworI2RlZmluZSB3d25fdCB1NjQKKyNkZWZpbmUgbHVuX3QgdTY0CisKKyNkZWZpbmUgV1dOX05VTEwJKDApCisjZGVmaW5lIEZDX1NZTU5BTUVfTUFYCTI1NgkvKiAgbWF4IG5hbWUgc2VydmVyIHN5bWJvbGljIG5hbWUgc2l6ZSAqLworI2RlZmluZSBGQ19BTFBBX01BWAkxMjgKKworI3ByYWdtYSBwYWNrKDEpCisKKyNkZWZpbmUgTUFDX0FERFJMRU4JKDYpCitzdHJ1Y3QgbWFjX3MgeyB1OCBtYWNbTUFDX0FERFJMRU5dOyB9OworI2RlZmluZSBtYWNfdCBzdHJ1Y3QgbWFjX3MKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2xvb3AuYyBiL2RyaXZlcnMvc2NzaS9iZmEvbG9vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MThkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2xvb3AuYwpAQCAtMCwwICsxLDQyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBwb3J0X2xvb3AuYyB2cG9ydCBwcml2YXRlIGxvb3AgaW1wbGVtZW50YXRpb24uCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgTE9PUCk7CisKKy8qKgorICogICBBTFBBIHRvIExJWEEgYml0bWFwIG1hcHBpbmcKKyAqCisgKiAgIEFMUEEgMHgwMCAoV29yZCAwLCBCaXQgMzApIGlzIGludmFsaWQgZm9yIE5fUG9ydHMuIEFsc28gV29yZCAwIEJpdCAzMQorICogaXMgZm9yIExfYml0IChsb2dpbiByZXF1aXJlZCkgYW5kIGlzIGZpbGxlZCBhcyBBTFBBIDB4MDAgaGVyZS4KKyAqLworc3RhdGljIGNvbnN0IHU4ICAgcG9ydF9sb29wX2FscGFfbWFwW10gPSB7CisJMHhFRiwgMHhFOCwgMHhFNCwgMHhFMiwgMHhFMSwgMHhFMCwgMHhEQywgMHhEQSwJLyogV29yZCAzIEJpdHMgMC4uNyAqLworCTB4RDksIDB4RDYsIDB4RDUsIDB4RDQsIDB4RDMsIDB4RDIsIDB4RDEsIDB4Q0UsCS8qIFdvcmQgMyBCaXRzIDguLjE1ICovCisJMHhDRCwgMHhDQywgMHhDQiwgMHhDQSwgMHhDOSwgMHhDNywgMHhDNiwgMHhDNSwJLyogV29yZCAzIEJpdHMgMTYuLjIzICovCisJMHhDMywgMHhCQywgMHhCQSwgMHhCOSwgMHhCNiwgMHhCNSwgMHhCNCwgMHhCMywJLyogV29yZCAzIEJpdHMgMjQuLjMxICovCisKKwkweEIyLCAweEIxLCAweEFFLCAweEFELCAweEFDLCAweEFCLCAweEFBLCAweEE5LAkvKiBXb3JkIDIgQml0cyAwLi43ICovCisJMHhBNywgMHhBNiwgMHhBNSwgMHhBMywgMHg5RiwgMHg5RSwgMHg5RCwgMHg5QiwJLyogV29yZCAyIEJpdHMgOC4uMTUgKi8KKwkweDk4LCAweDk3LCAweDkwLCAweDhGLCAweDg4LCAweDg0LCAweDgyLCAweDgxLAkvKiBXb3JkIDIgQml0cyAxNi4uMjMgKi8KKwkweDgwLCAweDdDLCAweDdBLCAweDc5LCAweDc2LCAweDc1LCAweDc0LCAweDczLAkvKiBXb3JkIDIgQml0cyAyNC4uMzEgKi8KKworCTB4NzIsIDB4NzEsIDB4NkUsIDB4NkQsIDB4NkMsIDB4NkIsIDB4NkEsIDB4NjksCS8qIFdvcmQgMSBCaXRzIDAuLjcgKi8KKwkweDY3LCAweDY2LCAweDY1LCAweDYzLCAweDVDLCAweDVBLCAweDU5LCAweDU2LAkvKiBXb3JkIDEgQml0cyA4Li4xNSAqLworCTB4NTUsIDB4NTQsIDB4NTMsIDB4NTIsIDB4NTEsIDB4NEUsIDB4NEQsIDB4NEMsCS8qIFdvcmQgMSBCaXRzIDE2Li4yMyAqLworCTB4NEIsIDB4NEEsIDB4NDksIDB4NDcsIDB4NDYsIDB4NDUsIDB4NDMsIDB4M0MsCS8qIFdvcmQgMSBCaXRzIDI0Li4zMSAqLworCisJMHgzQSwgMHgzOSwgMHgzNiwgMHgzNSwgMHgzNCwgMHgzMywgMHgzMiwgMHgzMSwJLyogV29yZCAwIEJpdHMgMC4uNyAqLworCTB4MkUsIDB4MkQsIDB4MkMsIDB4MkIsIDB4MkEsIDB4MjksIDB4MjcsIDB4MjYsCS8qIFdvcmQgMCBCaXRzIDguLjE1ICovCisJMHgyNSwgMHgyMywgMHgxRiwgMHgxRSwgMHgxRCwgMHgxQiwgMHgxOCwgMHgxNywJLyogV29yZCAwIEJpdHMgMTYuLjIzICovCisJMHgxMCwgMHgwRiwgMHgwOCwgMHgwNCwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwJLyogV29yZCAwIEJpdHMgMjQuLjMxICovCit9OworCisvKgorICogTG9jYWwgRnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICAgICB1OCBhbHBhKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSB2b2lkICpjYmFyZywKKwkJCQkJCSBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSB1MzIgcnNwX2xlbiwKKwkJCQkJCSB1MzIgcmVzaWRfbGVuLAorCQkJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfcG9ydF9sb29wX3NlbmRfYWRpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgICAgIHU4IGFscGEpOworCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJIHZvaWQgKmNiYXJnLAorCQkJCQkJIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJIHUzMiByc3BfbGVuLAorCQkJCQkJIHUzMiByZXNpZF9sZW4sCisJCQkJCQkgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naV9hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkJIHU4IGFscGEpOworCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfYWNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfcG9ydF9sb29wX3NlbmRfYWRpc2NfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJCSB1OCBhbHBhKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX2FkaXNjX2FjY19yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gaW5pdGlhbGl6YXIgaW4gcHJvdmF0ZSBMT09QIHRvcG9sb2d5LgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbG9vcF9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIG5vdGlmeSB0cmFuc2l0aW9uIHRvIG9ubGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3Bfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKworCXU4ICAgICAgICAgbnVtX2FscGEgPSBwb3J0LT5wb3J0X3RvcG8ucGxvb3AubnVtX2FscGE7CisJdTggICAgICAgICphbHBhX3Bvc19tYXAgPSBwb3J0LT5wb3J0X3RvcG8ucGxvb3AuYWxwYV9wb3NfbWFwOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJfcG9ydDsKKwlpbnQgICAgICAgICAgICAgaWkgPSAwOworCisJLyoKKwkgKiBJZiB0aGUgcG9ydCByb2xlIGlzIEluaXRpYXRvciBNb2RlLCBjcmVhdGUgUnBvcnRzLgorCSAqLworCWlmIChwb3J0LT5wb3J0X2NmZy5yb2xlcyA9PSBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkgeworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgQUxQQSBwb3NpdGlvbmFsIGJpdG1hcCBpcyBhdmFpbGFibGUuCisJCSAqIGlmIG5vdCwgd2Ugc2VuZCBQTE9HSSB0byBhbGwgcG9zc2libGUgQUxQQXMuCisJCSAqLworCQlpZiAobnVtX2FscGEgPiAwKSB7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBudW1fYWxwYTsgaWkrKykgeworCQkJCS8qCisJCQkJICogaWdub3JlIEFMUEEgb2YgYmZhIHBvcnQKKwkJCQkgKi8KKwkJCQlpZiAoYWxwYV9wb3NfbWFwW2lpXSAhPSBwb3J0LT5waWQpIHsKKwkJCQkJcl9wb3J0ID0gYmZhX2Zjc19ycG9ydF9jcmVhdGUocG9ydCwKKwkJCQkJCWFscGFfcG9zX21hcFtpaV0pOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZvciAoaWkgPSAwOyBpaSA8IE1BWF9BTFBBX0NPVU5UOyBpaSsrKSB7CisJCQkJLyoKKwkJCQkgKiBpZ25vcmUgQUxQQSBvZiBiZmEgcG9ydAorCQkJCSAqLworCQkJCWlmICgocG9ydF9sb29wX2FscGFfbWFwW2lpXSA+IDApCisJCQkJICAgICYmIChwb3J0X2xvb3BfYWxwYV9tYXBbaWldICE9IHBvcnQtPnBpZCkpCisJCQkJCWJmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2kocG9ydCwKKwkJCQkJCXBvcnRfbG9vcF9hbHBhX21hcFtpaV0pOworCQkJCS8qKlRCRCAqLworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVEJEIFRhcmdldCBNb2RlID8/CisJCSAqLworCX0KKworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb2ZmbGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3Bfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIG5vdGlmeSBhIExJUCBvbiB0aGUgbG9vcC4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfbGlwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKK30KKworLyoqCisgKiBMb2NhbCBGdW5jdGlvbnMuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHU4IGFscGEpCit7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGFscGEpOworCisJZmN4cCA9IGJmYV9mY3hwX2FsbG9jKE5VTEwsIHBvcnQtPmZjcy0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgTlVMTCk7CisJYmZhX2Fzc2VydChmY3hwKTsKKworCWxlbiA9IGZjX3Bsb2dpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBhbHBhLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkJIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkJICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLAorCQkJICBiZmFfZmNzX3BvcnRfbG9vcF9wbG9naV9yZXNwb25zZSwgKHZvaWQgKilwb3J0LAorCQkJICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBmY3hwIHRvIG5vdGlmeSB0aGUgUGxvZ2kgcmVzcG9uc2UKKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqKSBjYmFyZzsKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGxvZ2lfcmVzcDsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJLyoKKwkJICogQHRvZG8KKwkJICogVGhpcyBjb3VsZCBtZWFuIHRoYXQgdGhlIGRldmljZSB3aXRoIHRoaXMgQVBMQSBkb2VzIG5vdAorCQkgKiBleGlzdCBvbiB0aGUgbG9vcC4KKwkJICovCisKKwkJcmV0dXJuOworCX0KKworCWVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCXBsb2dpX3Jlc3AgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSBlbHNfY21kOworCisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19BQ0MpIHsKKwkJYmZhX2Zjc19ycG9ydF9zdGFydChwb3J0LCByc3BfZmNocywgcGxvZ2lfcmVzcCk7CisJfSBlbHNlIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHBsb2dpX3Jlc3AtPmVsc19jbWQuZWxzX2NvZGUpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX3Bsb2dpX2FjYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHU4IGFscGEpCit7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgYWxwYSk7CisKKwlmY3hwID0gYmZhX2ZjeHBfYWxsb2MoTlVMTCwgcG9ydC0+ZmNzLT5iZmEsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICBOVUxMKTsKKwliZmFfYXNzZXJ0KGZjeHApOworCisJbGVuID0gZmNfcGxvZ2lfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBhbHBhLAorCQkJCSBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkJIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkJIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkJCSBGQ19DTEFTU18zLCBsZW4sICZmY2hzLAorCQkJCSBiZmFfZmNzX3BvcnRfbG9vcF9wbG9naV9hY2NfcmVzcG9uc2UsCisJCQkJICh2b2lkICopcG9ydCwgRkNfTUFYX1BEVVNaLCAwKTsgLyogTm8gcmVzcG9uc2UKKwkJCQkJCQkJICAqIGV4cGVjdGVkCisJCQkJCQkJCSAgKi8KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKgorICogIFBsb2dpIEFjYyBSZXNwb25zZQorICogV2UgZG9ub3QgZG8gYW55IHByb2Nlc3NpbmcgaGVyZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfYWNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqKSBjYmFyZzsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHU4IGFscGEpCit7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgYWxwYSk7CisKKwlmY3hwID0gYmZhX2ZjeHBfYWxsb2MoTlVMTCwgcG9ydC0+ZmNzLT5iZmEsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICBOVUxMKTsKKwliZmFfYXNzZXJ0KGZjeHApOworCisJbGVuID0gZmNfYWRpc2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIGFscGEsCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICAgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3bik7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkJICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLAorCQkJICBiZmFfZmNzX3BvcnRfbG9vcF9hZGlzY19yZXNwb25zZSwgKHZvaWQgKilwb3J0LAorCQkJICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBmY3hwIHRvIG5vdGlmeSB0aGUgQURJU0MgcmVzcG9uc2UKKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqKSBjYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgZmNfYWRpc2NfcyAgICAgKmFkaXNjX3Jlc3A7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXUzMiAgICAgICAgcGlkID0gcnNwX2ZjaHMtPnNfaWQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCS8qCisJCSAqIFRCRCA6IHdlIG1heSBuZWVkIHRvIHJldHJ5IGNlcnRhaW4gcmVxdWVzdHMKKwkJICovCisJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwlhZGlzY19yZXNwID0gKHN0cnVjdCBmY19hZGlzY19zICopIGVsc19jbWQ7CisKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0FDQykgeworCX0gZWxzZSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBhZGlzY19yZXNwLT5lbHNfY21kLmVsc19jb2RlKTsKKworCQkvKgorCQkgKiBUQkQ6IHdlIG1heSBuZWVkIHRvIGNoZWNrIGZvciByZWplY3QgY29kZXMgYW5kIHJldHJ5CisJCSAqLworCQlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIHBpZCk7CisJCWlmIChycG9ydCkgeworCQkJbGlzdF9kZWwoJnJwb3J0LT5xZSk7CisJCQliZmFfZmNzX3Jwb3J0X2RlbGV0ZShycG9ydCk7CisJCX0KKworCX0KKwlyZXR1cm47Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9hZGlzY19hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGFscGEpOworCisJZmN4cCA9IGJmYV9mY3hwX2FsbG9jKE5VTEwsIHBvcnQtPmZjcy0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgTlVMTCk7CisJYmZhX2Fzc2VydChmY3hwKTsKKworCWxlbiA9IGZjX2FkaXNjX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgYWxwYSwKKwkJCQkgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJCSBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCQkJRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCQliZmFfZmNzX3BvcnRfbG9vcF9hZGlzY19hY2NfcmVzcG9uc2UsCisJCQkJKHZvaWQgKilwb3J0LCBGQ19NQVhfUERVU1osIDApOyAvKiBubyByZXBvbnNlCisJCQkJCQkJCSAqIGV4cGVjdGVkCisJCQkJCQkJCSAqLworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qCisgKiAgQWRpc2MgQWNjIFJlc3BvbnNlCisgKiBXZSBkb25vdCBkbyBhbnkgcHJvY2Vzc2luZyBoZXJlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbG9vcF9hZGlzY19hY2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgICAgIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICopIGNiYXJnOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfYXBpLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNTFhODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X2FwaS5jCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHBvcnRfYXBpLmMgQkZBIEZDUyBwb3J0CisgKi8KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX3Zwb3J0LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFBPUlRfQVBJKTsKKworCisKKy8qKgorICogIGZjc19wb3J0X2FwaSBCRkEgRkNTIHBvcnQgQVBJCisgKi8KKwordm9pZAorYmZhX2Zjc19jZmdfYmFzZV9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZykKK3sKK30KKworc3RydWN0IGJmYV9mY3NfcG9ydF9zICoKK2JmYV9mY3NfZ2V0X2Jhc2VfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJcmV0dXJuICgmZmNzLT5mYWJyaWMuYnBvcnQpOworfQorCit3d25fdAorYmZhX2Zjc19wb3J0X2dldF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHd3biwgaW50IGluZGV4LAorCQkgICAgICAgaW50IG5ycG9ydHMsIGJmYV9ib29sZWFuX3QgYnd3bikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxaCwgKnFlOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CisKKwlpZiAocG9ydCA9PSBOVUxMIHx8IG5ycG9ydHMgPT0gMCkKKwkJcmV0dXJuICh3d25fdCkgMDsKKworCWZjcyA9IHBvcnQtPmZjczsKKwliZmFfdHJjKGZjcywgKHUzMikgbnJwb3J0cyk7CisKKwlpID0gMDsKKwlxaCA9ICZwb3J0LT5ycG9ydF9xOworCXFlID0gYmZhX3FfZmlyc3QocWgpOworCisJd2hpbGUgKChxZSAhPSBxaCkgJiYgKGkgPCBucnBvcnRzKSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmIChiZmFfb3NfbnRvaDNiKHJwb3J0LT5waWQpID4gMHhGRkYwMDApIHsKKwkJCXFlID0gYmZhX3FfbmV4dChxZSk7CisJCQliZmFfdHJjKGZjcywgKHUzMikgcnBvcnQtPnB3d24pOworCQkJYmZhX3RyYyhmY3MsIHJwb3J0LT5waWQpOworCQkJYmZhX3RyYyhmY3MsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYnd3bikgeworCQkJaWYgKCFtZW1jbXAoJnd3biwgJnJwb3J0LT5wd3duLCA4KSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlmIChpID09IGluZGV4KQorCQkJCWJyZWFrOworCQl9CisKKwkJaSsrOworCQlxZSA9IGJmYV9xX25leHQocWUpOworCX0KKworCWJmYV90cmMoZmNzLCBpKTsKKwlpZiAocnBvcnQpIHsKKwkJcmV0dXJuIHJwb3J0LT5wd3duOworCX0gZWxzZSB7CisJCXJldHVybiAod3duX3QpIDA7CisJfQorfQorCit2b2lkCitiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0cyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwb3J0X3d3bnNbXSwKKwkJCWludCAqbnJwb3J0cykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxaCwgKnFlOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CisKKwlpZiAocG9ydCA9PSBOVUxMIHx8IHJwb3J0X3d3bnMgPT0gTlVMTCB8fCAqbnJwb3J0cyA9PSAwKQorCQlyZXR1cm47CisKKwlmY3MgPSBwb3J0LT5mY3M7CisJYmZhX3RyYyhmY3MsICh1MzIpICpucnBvcnRzKTsKKworCWkgPSAwOworCXFoID0gJnBvcnQtPnJwb3J0X3E7CisJcWUgPSBiZmFfcV9maXJzdChxaCk7CisKKwl3aGlsZSAoKHFlICE9IHFoKSAmJiAoaSA8ICpucnBvcnRzKSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmIChiZmFfb3NfbnRvaDNiKHJwb3J0LT5waWQpID4gMHhGRkYwMDApIHsKKwkJCXFlID0gYmZhX3FfbmV4dChxZSk7CisJCQliZmFfdHJjKGZjcywgKHUzMikgcnBvcnQtPnB3d24pOworCQkJYmZhX3RyYyhmY3MsIHJwb3J0LT5waWQpOworCQkJYmZhX3RyYyhmY3MsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQlycG9ydF93d25zW2ldID0gcnBvcnQtPnB3d247CisKKwkJaSsrOworCQlxZSA9IGJmYV9xX25leHQocWUpOworCX0KKworCWJmYV90cmMoZmNzLCBpKTsKKwkqbnJwb3J0cyA9IGk7CisJcmV0dXJuOworfQorCisvKgorICogSXRlcmF0ZSdzIHRocm91Z2ggYWxsIHRoZSBycG9ydCdzIGluIHRoZSBnaXZlbiBwb3J0IHRvCisgKiBkZXRlcm1pbmUgdGhlIG1heGltdW0gb3BlcmF0aW5nIHNwZWVkLgorICovCitlbnVtIGJmYV9wcG9ydF9zcGVlZAorYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9tYXhfc3BlZWQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnFoLCAqcWU7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBOVUxMOworCXN0cnVjdCBiZmFfZmNzX3MgKmZjczsKKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBtYXhfc3BlZWQgPSAwOworCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHBwb3J0X2F0dHI7CisJZW51bSBiZmFfcHBvcnRfc3BlZWQgcHBvcnRfc3BlZWQ7CisKKwlpZiAocG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWZjcyA9IHBvcnQtPmZjczsKKworCS8qCisJICogR2V0IFBoeXNpY2FsIHBvcnQncyBjdXJyZW50IHNwZWVkCisJICovCisJYmZhX3Bwb3J0X2dldF9hdHRyKHBvcnQtPmZjcy0+YmZhLCAmcHBvcnRfYXR0cik7CisJcHBvcnRfc3BlZWQgPSBwcG9ydF9hdHRyLnNwZWVkOworCWJmYV90cmMoZmNzLCBwcG9ydF9zcGVlZCk7CisKKwlxaCA9ICZwb3J0LT5ycG9ydF9xOworCXFlID0gYmZhX3FfZmlyc3QocWgpOworCisJd2hpbGUgKHFlICE9IHFoKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKChiZmFfb3NfbnRvaDNiKHJwb3J0LT5waWQpID4gMHhGRkYwMDApCisJCSAgICB8fCAoYmZhX2Zjc19ycG9ydF9nZXRfc3RhdGUocnBvcnQpID09IEJGQV9SUE9SVF9PRkZMSU5FKSkgeworCQkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPT0gQkZBX1BQT1JUX1NQRUVEXzhHQlBTKQorCQkgICAgfHwgKHJwb3J0LT5ycGYucnBzY19zcGVlZCA+IHBwb3J0X3NwZWVkKSkgeworCQkJbWF4X3NwZWVkID0gcnBvcnQtPnJwZi5ycHNjX3NwZWVkOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocnBvcnQtPnJwZi5ycHNjX3NwZWVkID4gbWF4X3NwZWVkKSB7CisJCQltYXhfc3BlZWQgPSBycG9ydC0+cnBmLnJwc2Nfc3BlZWQ7CisJCX0KKworCQlxZSA9IGJmYV9xX25leHQocWUpOworCX0KKworCWJmYV90cmMoZmNzLCBtYXhfc3BlZWQpOworCXJldHVybiBtYXhfc3BlZWQ7Cit9CisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfcyAqCitiZmFfZmNzX2xvb2t1cF9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkLCB3d25fdCBscHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwliZmFfZmNzX3ZmX3QgICAqdmY7CisKKwliZmFfYXNzZXJ0KGZjcyAhPSBOVUxMKTsKKworCXZmID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCB2Zl9pZCk7CisJaWYgKHZmID09IE5VTEwpIHsKKwkJYmZhX3RyYyhmY3MsIHZmX2lkKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoIWxwd3duIHx8ICh2Zi0+YnBvcnQucG9ydF9jZmcucHd3biA9PSBscHd3bikpCisJCXJldHVybiAoJnZmLT5icG9ydCk7CisKKwl2cG9ydCA9IGJmYV9mY3NfZmFicmljX3Zwb3J0X2xvb2t1cCh2ZiwgbHB3d24pOworCWlmICh2cG9ydCkKKwkJcmV0dXJuICgmdnBvcnQtPmxwb3J0KTsKKworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qCisgKiAgQVBJIGNvcnJlc3BvbmRpbmcgdG8gVm1XYXJlJ3MgTlBJVl9WUE9SVF9HRVRJTkZPLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfZ2V0X2luZm8oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkgICAgICBzdHJ1Y3QgYmZhX3BvcnRfaW5mb19zICpwb3J0X2luZm8pCit7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+ZmFicmljLT5mYWJyaWNfbmFtZSk7CisKKwlpZiAocG9ydC0+dnBvcnQgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgUGh5c2ljYWwgcG9ydAorCQkgKi8KKwkJcG9ydF9pbmZvLT5wb3J0X3R5cGUgPSBCRkFfUE9SVF9UWVBFX1BIWVNJQ0FMOworCisJCS8qCisJCSAqIEB0b2RvIDogbmVlZCB0byBmaXggdGhlIHN0YXRlICYgcmVhc29uCisJCSAqLworCQlwb3J0X2luZm8tPnBvcnRfc3RhdGUgPSAwOworCQlwb3J0X2luZm8tPm9mZmxpbmVfcmVhc29uID0gMDsKKworCQlwb3J0X2luZm8tPnBvcnRfd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCQlwb3J0X2luZm8tPm5vZGVfd3duID0gYmZhX2Zjc19wb3J0X2dldF9ud3duKHBvcnQpOworCisJCXBvcnRfaW5mby0+bWF4X3Zwb3J0c19zdXBwID0gYmZhX2Zjc192cG9ydF9nZXRfbWF4KHBvcnQtPmZjcyk7CisJCXBvcnRfaW5mby0+bnVtX3Zwb3J0c19pbnVzZSA9CisJCQliZmFfZmNzX2ZhYnJpY192cG9ydF9jb3VudChwb3J0LT5mYWJyaWMpOworCQlwb3J0X2luZm8tPm1heF9ycG9ydHNfc3VwcCA9IEJGQV9GQ1NfTUFYX1JQT1JUU19TVVBQOworCQlwb3J0X2luZm8tPm51bV9ycG9ydHNfaW51c2UgPSBwb3J0LT5udW1fcnBvcnRzOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoaXMgaXMgYSB2aXJ0dWFsIHBvcnQKKwkJICovCisJCXBvcnRfaW5mby0+cG9ydF90eXBlID0gQkZBX1BPUlRfVFlQRV9WSVJUVUFMOworCisJCS8qCisJCSAqIEB0b2RvIDogbmVlZCB0byBmaXggdGhlIHN0YXRlICYgcmVhc29uCisJCSAqLworCQlwb3J0X2luZm8tPnBvcnRfc3RhdGUgPSAwOworCQlwb3J0X2luZm8tPm9mZmxpbmVfcmVhc29uID0gMDsKKworCQlwb3J0X2luZm8tPnBvcnRfd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCQlwb3J0X2luZm8tPm5vZGVfd3duID0gYmZhX2Zjc19wb3J0X2dldF9ud3duKHBvcnQpOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0LAorCQkgICAgICAgc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MgKnBvcnRfc3RhdHMpCit7CisJYmZhX29zX21lbWNweShwb3J0X3N0YXRzLCAmZmNzX3BvcnQtPnN0YXRzLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MpKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KQoreworCWJmYV9vc19tZW1zZXQoJmZjc19wb3J0LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcG9ydF9zdGF0c19zKSk7CisJcmV0dXJuOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfZW5hYmxlX2lwZmNfcm9sZXMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCkKK3sKKwlmY3NfcG9ydC0+cG9ydF9jZmcucm9sZXMgfD0gQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQzsKKwlyZXR1cm47Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9kaXNhYmxlX2lwZmNfcm9sZXMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCkKK3sKKwlmY3NfcG9ydC0+cG9ydF9jZmcucm9sZXMgJj0gfkJGQV9QT1JUX1JPTEVfRkNQX0lQRkM7CisJcmV0dXJuOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhZTM3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfcHJpdi5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX1ZQX1BSSVZfSF9fCisjZGVmaW5lIF9fVlBfUFJJVl9IX18KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfdnBvcnQuaD4KKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSB2cHMKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfdnBvcnRfaW5pdChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdnBzCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3Zwc19vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3Zwc19vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc192cHNfbGlwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgcG9ydF9mYWIKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9mYWJfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfZmFiX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfZmFiX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2ZhYl9yeF9mcmFtZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgdTggKnJ4X2ZyYW1lLCB1MzIgbGVuKTsKKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSBWUC1OUy4KKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uc19pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uc19vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uc19vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X25zX3F1ZXJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgVlAtU0NOCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfc2NuX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X3Njbl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9zY25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9zY25fcHJvY2Vzc19yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICAgICAgc3RydWN0IGZjaHNfcyAqcnhfZnJhbWUsIHUzMiBsZW4pOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IFZQLU4yTgorICovCisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbjJuX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbjJuX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uMm5fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uMm5fcnhfZnJhbWUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgIHU4ICpyeF9mcmFtZSwgdTMyIGxlbik7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgVlAtTE9PUAorICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9saXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9yeF9mcmFtZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgIHU4ICpyeF9mcmFtZSwgdTMyIGxlbik7CisKKyNlbmRpZiAvKiBfX1ZQX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL21zLmMgYi9kcml2ZXJzL3Njc2kvYmZhL21zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2YjNjYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbXMuYwpAQCAtMCwwICsxLDc1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBNUyk7CisKKyNkZWZpbmUgQkZBX0ZDU19NU19DTURfTUFYX1JFVFJJRVMgIDIKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NlbmRfcGxvZ2kodm9pZCAqbXNfY2JhcmcsCisJCQkJCSAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc190aW1lb3V0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwodm9pZCAqbXNfY2JhcmcsCisJCQkJCSAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX2dtYWxfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbih2b2lkICptc19jYmFyZywKKwkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19nZm5fcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworLyoqCisgKiAgZmNzX21zX3NtIEZDUyBNUyBzdGF0ZSBtYWNoaW5lCisgKi8KKworLyoqCisgKiAgTVMgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSBwb3J0X21zX2V2ZW50IHsKKwlNU1NNX0VWRU5UX1BPUlRfT05MSU5FID0gMSwKKwlNU1NNX0VWRU5UX1BPUlRfT0ZGTElORSA9IDIsCisJTVNTTV9FVkVOVF9SU1BfT0sgPSAzLAorCU1TU01fRVZFTlRfUlNQX0VSUk9SID0gNCwKKwlNU1NNX0VWRU5UX1RJTUVPVVQgPSA1LAorCU1TU01fRVZFTlRfRkNYUF9TRU5UID0gNiwKKwlNU1NNX0VWRU5UX1BPUlRfRkFCUklDX1JTQ04gPSA3Cit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkJIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbF9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCQllbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCWVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dmbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworLyoqCisgKiAJCVN0YXJ0IGluIG9mZmxpbmUgc3RhdGUgLSBhd2FpdGluZyBOUyB0byBzZW5kIHN0YXJ0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCSAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfcGxvZ2kobXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCSBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksCisJCQkJICAgICAgICZtcy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfcmV0cnkpOworCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksICZtcy0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQsIG1zLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1JTUF9PSzoKKwkJLyoKKwkJICogc2luY2UgcGxvZ2kgaXMgZG9uZSwgbm93IGludm9rZSBNUyByZWxhdGVkIHN1Yi1tb2R1bGVzCisJCSAqLworCQliZmFfZmNzX3BvcnRfZmRtaV9vbmxpbmUobXMpOworCisJCS8qKgorCQkgKiBpZiB0aGlzIGlzIGEgVnBvcnQsIGdvIHRvIG9ubGluZSBzdGF0ZS4KKwkJICovCisJCWlmIChtcy0+cG9ydC0+dnBvcnQpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vbmxpbmUpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBGb3IgYSBiYXNlIHBvcnQgd2UgbmVlZCB0byBnZXQgdGhlCisJCSAqIHN3aXRjaCdzIElQIGFkZHJlc3MuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbF9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfZ21hbChtcywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG1zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfVElNRU9VVDoKKwkJLyoKKwkJICogUmV0cnkgVGltZXIgRXhwaXJlZC4gUmUtc2VuZAorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naShtcywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbXMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCSAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJLyoKKwkJICogbm93IGludm9rZSBNUyByZWxhdGVkIHN1Yi1tb2R1bGVzCisJCSAqLworCQliZmFfZmNzX3BvcnRfZmRtaV9vZmZsaW5lKG1zKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9GQUJSSUNfUlNDTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKTsKKwkJbXMtPnJldHJ5X2NudCA9IDA7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbihtcywgTlVMTCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fZ21hbF9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksCisJCQkJICAgICAgICZtcy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dtYWwoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWlmIChtcy0+cmV0cnlfY250KysgPCBCRkFfRkNTX01TX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfcmV0cnkpOworCQkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCQkmbXMtPnRpbWVyLCBiZmFfZmNzX3BvcnRfbXNfdGltZW91dCwgbXMsCisJCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3NlbmRpbmcpOworCQkJYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuKG1zLCBOVUxMKTsKKwkJCW1zLT5yZXRyeV9jbnQgPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobXMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCSAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfVElNRU9VVDoKKwkJLyoKKwkJICogUmV0cnkgVGltZXIgRXhwaXJlZC4gUmUtc2VuZAorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwobXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm1zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogIG1zX3B2dCBNUyBsb2NhbCBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NlbmRfZ21hbCh2b2lkICptc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gbXNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm1zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X21zX3NlbmRfZ21hbCwgbXMpOworCQlyZXR1cm47CisJfQorCW1zLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX2dtYWxfcmVxX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwKKwkJCQliZmFfbHBzX2dldF9wZWVyX253d24ocG9ydC0+ZmFicmljLT5scHMpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9tc19nbWFsX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX2dtYWxfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCSAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBtcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKwlzdHJ1Y3QgZmNnc19nbWFsX3Jlc3BfcyAqZ21hbF9yZXNwOworCXN0cnVjdCBmY19nbWFsX2VudHJ5X3MgKmdtYWxfZW50cnk7CisJdTMyICAgICAgICBudW1fZW50cmllczsKKwl1OCAgICAgICAgKnJzcF9zdHI7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQlnbWFsX3Jlc3AgPSAoc3RydWN0IGZjZ3NfZ21hbF9yZXNwX3MgKikoY3RoZHIgKyAxKTsKKwkJbnVtX2VudHJpZXMgPSBiZmFfb3NfbnRvaGwoZ21hbF9yZXNwLT5tc19sZW4pOworCQlpZiAobnVtX2VudHJpZXMgPT0gMCkgeworCQkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKgorCQkgKiBUaGUgcmVzcG9uc2UgY291bGQgY29udGFpbiBtdWx0aXBsZSBFbnRyaWVzLgorCQkgKiBFbnRyaWVzIGZvciBTTk1QIGludGVyZmFjZSwgZXRjLgorCQkgKiBXZSBsb29rIGZvciB0aGUgZW50cnkgd2l0aCBhIHRlbG5ldCBwcmVmaXguCisJCSAqIEZpcnN0ICJodHRwOi8vIiBlbnRyeSByZWZlcnMgdG8gSVAgYWRkcgorCQkgKi8KKworCQlnbWFsX2VudHJ5ID0gKHN0cnVjdCBmY19nbWFsX2VudHJ5X3MgKilnbWFsX3Jlc3AtPm1zX21hOworCQl3aGlsZSAobnVtX2VudHJpZXMgPiAwKSB7CisJCQlpZiAoc3RybmNtcAorCQkJICAgIChnbWFsX2VudHJ5LT5wcmVmaXgsIENUX0dNQUxfUkVTUF9QUkVGSVhfSFRUUCwKKwkJCSAgICAgc2l6ZW9mKGdtYWxfZW50cnktPnByZWZpeCkpID09IDApIHsKKworCQkJCS8qCisJCQkJICogaWYgdGhlIElQIGFkZHJlc3MgaXMgdGVybWluYXRpbmcgd2l0aCBhICcvJywKKwkJCQkgKiByZW1vdmUgaXQuICpCeXRlIDAgY29uc2lzdHMgb2YgdGhlIGxlbmd0aAorCQkJCSAqIG9mIHRoZSBzdHJpbmcuCisJCQkJICovCisJCQkJcnNwX3N0ciA9ICYoZ21hbF9lbnRyeS0+cHJlZml4WzBdKTsKKwkJCQlpZiAocnNwX3N0cltnbWFsX2VudHJ5LT5sZW4gLSAxXSA9PSAnLycpCisJCQkJCXJzcF9zdHJbZ21hbF9lbnRyeS0+bGVuIC0gMV0gPSAwOworCQkJCS8qCisJCQkJICogY29weSBJUCBBZGRyZXNzIHRvIGZhYnJpYworCQkJCSAqLworCQkJCXN0cm5jcHkoYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfaXBhZGRyKHBvcnQpLAorCQkJCQlnbWFsX2VudHJ5LT5pcF9hZGRyLAorCQkJCQlCRkFfRkNTX0ZBQlJJQ19JUEFERFJfU1opOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQktLW51bV9lbnRyaWVzOworCQkJCSsrZ21hbF9lbnRyeTsKKwkJCX0KKwkJfQorCisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9PSyk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm4pOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkgICAgICAgJm1zLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQlpZiAobXMtPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19NU19DTURfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fcmV0cnkpOworCQkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCQkmbXMtPnRpbWVyLCBiZmFfZmNzX3BvcnRfbXNfdGltZW91dCwgbXMsCisJCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKTsKKwkJCW1zLT5yZXRyeV9jbnQgPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZSk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG1zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nZm5fcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCSAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4obXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm1zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogIG1zX3B2dCBNUyBsb2NhbCBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuKHZvaWQgKm1zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSBtc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBtcy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbXMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4sIG1zKTsKKwkJcmV0dXJuOworCX0KKwltcy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19nZm5fcmVxX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwKKwkJCSAgICAgICBiZmFfbHBzX2dldF9wZWVyX253d24ocG9ydC0+ZmFicmljLT5scHMpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9tc19nZm5fcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbXMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfZ2ZuX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQkgICAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBtcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKwl3d25fdCAgICAgICAgICAqZ2ZuX3Jlc3A7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQlnZm5fcmVzcCA9ICh3d25fdCAqKSAoY3RoZHIgKyAxKTsKKwkJLyoKKwkJICogY2hlY2sgaWYgaXQgaGFzIGFjdHVhbGx5IGNoYW5nZWQKKwkJICovCisJCWlmICgobWVtY21wCisJCSAgICAgKCh2b2lkICopJmJmYV9mY3NfcG9ydF9nZXRfZmFicmljX25hbWUocG9ydCksIGdmbl9yZXNwLAorCQkgICAgICBzaXplb2Yod3duX3QpKSAhPSAwKSkKKwkJCWJmYV9mY3NfZmFicmljX3NldF9mYWJyaWNfbmFtZShwb3J0LT5mYWJyaWMsICpnZm5fcmVzcCk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9PSyk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworfQorCisvKioKKyAqICBtc19wdnQgTVMgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpKHZvaWQgKm1zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSBtc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBtcy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5tc19wbG9naV9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZtcy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpLCBtcyk7CisJCXJldHVybjsKKwl9CisJbXMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcGxvZ2lfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgIGJmYV9vc19odG9uM2IoRkNfTUdNVF9TRVJWRVIpLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkgICAgIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbXNfcGxvZ2lfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbXMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXBvcnQtPnN0YXRzLm1zX3Bsb2dpX3NlbnQrKzsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkgICAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJICAgICAgIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJICAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICopY2Jhcmc7CisKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBtcy0+cG9ydDsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQlwb3J0LT5zdGF0cy5tc19wbG9naV9yc3BfZXJyKys7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCisJY2FzZSBGQ19FTFNfQUNDOgorCQlpZiAocnNwX2xlbiA8IHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSkgeworCQkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzcF9sZW4pOworCQkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfYWNjX2VycisrOworCQkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJCWJyZWFrOworCQl9CisJCXBvcnQtPnN0YXRzLm1zX3Bsb2dpX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX09LKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19MU19SSlQ6CisJCWxzX3JqdCA9IChzdHJ1Y3QgZmNfbHNfcmp0X3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlX2V4cGwpOworCisJCXBvcnQtPnN0YXRzLm1zX3JlamVjdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0LT5zdGF0cy5tc19wbG9naV91bmtub3duX3JzcCsrOworCQliZmFfdHJjKHBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc190aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqKWFyZzsKKworCW1zLT5wb3J0LT5zdGF0cy5tc190aW1lb3V0cysrOworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1RJTUVPVVQpOworfQorCisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9tc19pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gQkZBX0ZDU19HRVRfTVNfRlJPTV9QT1JUKHBvcnQpOworCisJbXMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKworCS8qCisJICogSW52b2tlIGluaXQgcm91dGluZXMgb2Ygc3ViIG1vZHVsZXMuCisJICovCisJYmZhX2Zjc19wb3J0X2ZkbWlfaW5pdChtcyk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9tc19vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gQkZBX0ZDU19HRVRfTVNfRlJPTV9QT1JUKHBvcnQpOworCisJbXMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9tc19vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSBCRkFfRkNTX0dFVF9NU19GUk9NX1BPUlQocG9ydCk7CisKKwltcy0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUE9SVF9PTkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfZmFicmljX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSBCRkFfRkNTX0dFVF9NU19GUk9NX1BPUlQocG9ydCk7CisKKwkvKgorCSAqIEB0b2RvLiAgSGFuZGxlIHRoaXMgb25seSB3aGVuIGluIE9ubGluZSBzdGF0ZQorCSAqLworCWlmIChiZmFfc21fY21wX3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKSkKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUE9SVF9GQUJSSUNfUlNDTik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL24ybi5jIGIvZHJpdmVycy9zY3NpL2JmYS9uMm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU0NTY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9uMm4uYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBuMm4uYyBuMm4gaW1wbGVtZW50YXRpb24uCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgTjJOKTsKKworLyoqCisgKiAgIENhbGxlZCBieSBmY3MvcG9ydCB0byBpbml0aWFsaXplIE4yTiB0b3BvbG9neS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X24ybl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBmY3MvcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvbmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9uMm5fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X24ybl9zICpuMm5fcG9ydCA9ICZwb3J0LT5wb3J0X3RvcG8ucG4ybjsKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBjZmcgPSAmcG9ydC0+cG9ydF9jZmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcGNmZy0+cHd3bik7CisKKwkvKgorCSAqIElmIG91ciBQV1dOIGlzID4gdGhhbiB0aGF0IG9mIHRoZSByLXBvcnQsIHdlIGhhdmUgdG8gaW5pdGlhdGUgUExPR0kKKwkgKiBhbmQgYXNzaWduIGFuIEFkZHJlc3MuIGlmIG5vdCwgd2UgbmVlZCB0byB3YWl0IGZvciBpdHMgUExPR0kuCisJICoKKwkgKiBJZiBvdXIgUFdXTiBpcyA8IHRoYW4gdGhhdCBvZiB0aGUgcmVtb3RlIHBvcnQsIGl0IHdpbGwgc2VuZCBhIFBMT0dJCisJICogd2l0aCB0aGUgUElEcyBhc3NpZ25lZC4gVGhlIHJwb3J0IHN0YXRlIG1hY2hpbmUgdGFrZSBjYXJlIG9mIHRoaXMKKwkgKiBpbmNvbWluZyBQTE9HSS4KKwkgKi8KKwlpZiAobWVtY21wCisJICAgICgodm9pZCAqKSZwY2ZnLT5wd3duLCAodm9pZCAqKSZuMm5fcG9ydC0+cmVtX3BvcnRfd3duLAorCSAgICAgc2l6ZW9mKHd3bl90KSkgPiAwKSB7CisJCXBvcnQtPnBpZCA9IE4yTl9MT0NBTF9QSUQ7CisJCS8qKgorCQkgKiBGaXJzdCwgY2hlY2sgaWYgd2Uga25vdyB0aGUgZGV2aWNlIGJ5IHB3d24uCisJCSAqLworCQlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihwb3J0LAorCQkJCQkJICAgICAgIG4ybl9wb3J0LT5yZW1fcG9ydF93d24pOworCQlpZiAocnBvcnQpIHsKKwkJCWJmYV90cmMocG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMocG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJCQlycG9ydC0+cGlkID0gTjJOX1JFTU9URV9QSUQ7CisJCQliZmFfZmNzX3Jwb3J0X29ubGluZShycG9ydCk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKgorCQkgKiBJbiBuMm4gdGhlcmUgY2FuIGJlIG9ubHkgb25lIHJwb3J0LiBEZWxldGUgdGhlIG9sZCBvbmUgd2hvc2UKKwkJICogcGlkIHNob3VsZCBiZSB6ZXJvLCBiZWNhdXNlIGl0IGlzIG9mZmxpbmUuCisJCSAqLworCQlpZiAocG9ydC0+bnVtX3Jwb3J0cyA+IDApIHsKKwkJCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgMCk7CisJCQliZmFfYXNzZXJ0KHJwb3J0ICE9IE5VTEwpOworCQkJaWYgKHJwb3J0KSB7CisJCQkJYmZhX3RyYyhwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbGV0ZShycG9ydCk7CisJCQl9CisJCX0KKwkJYmZhX2Zjc19ycG9ydF9jcmVhdGUocG9ydCwgTjJOX1JFTU9URV9QSUQpOworCX0KK30KKworLyoqCisgKiAgIENhbGxlZCBieSBmY3MvcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvZmZsaW5lIHN0YXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbjJuX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbjJuX3MgKm4ybl9wb3J0ID0gJnBvcnQtPnBvcnRfdG9wby5wbjJuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisJcG9ydC0+cGlkID0gMDsKKwluMm5fcG9ydC0+cmVtX3BvcnRfd3duID0gMDsKKwluMm5fcG9ydC0+cmVwbHlfb3hpZCA9IDA7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9ucy5jIGIvZHJpdmVycy9zY3NpL2JmYS9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZmVhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL25zLmMKQEAgLTAsMCArMSwxMjQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogQHBhZ2UgbnNfc21faW5mbyBWUE9SVCBOUyBTdGF0ZSBNYWNoaW5lCisgKgorICogQHNlY3Rpb24gbnNfc21faW50ZXJhY3Rpb25zIFZQT1JUIE5TIFN0YXRlIE1hY2hpbmUgSW50ZXJhY3Rpb25zCisgKgorICogQHNlY3Rpb24gbnNfc20gVlBPUlQgTlMgU3RhdGUgTWFjaGluZQorICogCWltZyBuc19zbS5qcGcKKyAqLworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxiZmFfaW9jZmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIE5TKTsKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9wbG9naSh2b2lkICpuc19jYmFyZywKKwkJCQkJICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcnNwbl9pZCh2b2lkICpuc19jYmFyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9yZnRfaWQodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9yZmZfaWQodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9naWRfZnQodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3JzcG5faWRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJIHZvaWQgKmNiYXJnLAorCQkJCQkJIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJIHUzMiByc3BfbGVuLAorCQkJCQkJIHUzMiByZXNpZF9sZW4sCisJCQkJCQkgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19yZnRfaWRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19yZmZfaWRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19naWRfZnRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19wcm9jZXNzX2dpZGZ0X3BpZHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkJICAgdTMyICpwaWRfYnVmLAorCQkJCQkJICAgdTMyIG5fcGlkcyk7CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfYm9vdF90YXJnZXRfZGlzYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworLyoqCisgKiAgZmNzX25zX3NtIEZDUyBuYW1lc2VydmVyIGludGVyZmFjZSBzdGF0ZSBtYWNoaW5lCisgKi8KKworLyoqCisgKiBWUG9ydCBOUyBTdGF0ZSBNYWNoaW5lIGV2ZW50cworICovCitlbnVtIHZwb3J0X25zX2V2ZW50IHsKKwlOU1NNX0VWRU5UX1BPUlRfT05MSU5FID0gMSwKKwlOU1NNX0VWRU5UX1BPUlRfT0ZGTElORSA9IDIsCisJTlNTTV9FVkVOVF9QTE9HSV9TRU5UID0gMywKKwlOU1NNX0VWRU5UX1JTUF9PSyA9IDQsCisJTlNTTV9FVkVOVF9SU1BfRVJST1IgPSA1LAorCU5TU01fRVZFTlRfVElNRU9VVCA9IDYsCisJTlNTTV9FVkVOVF9OU19RVUVSWSA9IDcsCisJTlNTTV9FVkVOVF9SU1BOSURfU0VOVCA9IDgsCisJTlNTTV9FVkVOVF9SRlRJRF9TRU5UID0gOSwKKwlOU1NNX0VWRU5UX1JGRklEX1NFTlQgPSAxMCwKKwlOU1NNX0VWRU5UX0dJREZUX1NFTlQgPSAxMSwKK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgICAgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yc3BuX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQkgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcnNwbl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcnNwbl9pZF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmdF9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9yZmZfaWRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCWVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9yZmZfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19naWRfZnQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9naWRfZnRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCWVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKKy8qKgorICogCQlTdGFydCBpbiBvZmZsaW5lIHN0YXRlIC0gYXdhaXRpbmcgbGlua3VwCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcGxvZ2kobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9QTE9HSV9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2kpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwKKwkJCQkgICAgICAgJm5zLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9yZXRyeSk7CisJCW5zLT5wb3J0LT5zdGF0cy5uc19yZXRyaWVzKys7CisJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwgJm5zLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfbnNfdGltZW91dCwgbnMsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yc3BuX2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcnNwbl9pZChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG5zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICAgICAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcGxvZ2kobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm5zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yc3BuX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQTklEX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWRfcmV0cnkpOworCQlucy0+cG9ydC0+c3RhdHMubnNfcmV0cmllcysrOworCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksICZucy0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQsIG5zLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZ0X2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfZmN4cF9kaXNjYXJkKG5zLT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJLyoKKwkJICogUmV0cnkgVGltZXIgRXhwaXJlZC4gUmUtc2VuZAorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm5zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZnRfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JGVElEX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9yZnRfaWQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwKKwkJCQkgICAgICAgJm5zLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JTUF9PSzoKKwkJLyoKKwkJICogTm93IG1vdmUgdG8gcmVnaXN0ZXIgRkM0IEZlYXR1cmVzCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZmZfaWQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9yZmZfaWQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9yZnRfaWRfcmV0cnkpOworCQlucy0+cG9ydC0+c3RhdHMubnNfcmV0cmllcysrOworCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksICZucy0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQsIG5zLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG5zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yZnRfaWRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZnRfaWQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9yZnRfaWQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm5zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZmZfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JGRklEX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9yZmZfaWQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwKKwkJCQkgICAgICAgJm5zLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JTUF9PSzoKKworCQkvKgorCQkgKiBJZiBtaW4gY2ZnIG1vZGUgaXMgZW5hYmxlZCwgd2UgZG9ub3QgaW5pdGlhdGUgcnBvcnQKKwkJICogZGlzY292ZXJ5IHdpdGggdGhlIGZhYnJpYy4gSW5zdGVhZCwgd2Ugd2lsbCByZXRyaWV2ZSB0aGUKKwkJICogYm9vdCB0YXJnZXRzIGZyb20gSEFML0ZXLgorCQkgKi8KKwkJaWYgKF9fZmNzX21pbl9jZmcobnMtPnBvcnQtPmZjcykpIHsKKwkJCWJmYV9mY3NfcG9ydF9uc19ib290X3RhcmdldF9kaXNjKG5zLT5wb3J0KTsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlIHBvcnQgcm9sZSBpcyBJbml0aWF0b3IgTW9kZSBpc3N1ZSBOUyBxdWVyeS4KKwkJICogSWYgaXQgaXMgVGFyZ2V0IE1vZGUsIHNraXAgdGhpcyBhbmQgZ28gdG8gb25saW5lLgorCQkgKi8KKwkJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfSU5JVElBVE9SX01PREUobnMtPnBvcnQpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19naWRfZnQpOworCQkJYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KG5zLCBOVUxMKTsKKwkJfSBlbHNlIGlmIChCRkFfRkNTX1ZQT1JUX0lTX1RBUkdFVF9NT0RFKG5zLT5wb3J0KSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29ubGluZSk7CisJCX0KKwkJLyoKKwkJICoga2ljayBvZmYgbWdtdCBzcnZyIHN0YXRlIG1hY2hpbmUKKwkJICovCisJCWJmYV9mY3NfcG9ydF9tc19vbmxpbmUobnMtPnBvcnQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9yZmZfaWRfcmV0cnkpOworCQlucy0+cG9ydC0+c3RhdHMubnNfcmV0cmllcysrOworCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksICZucy0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQsIG5zLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG5zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yZmZfaWRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZmZfaWQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9yZmZfaWQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm5zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9HSURGVF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fZ2lkX2Z0KTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFRCRDogZm9yIGNlcnRhaW4gcmVqZWN0IGNvZGVzLCB3ZSBkb24ndCBuZWVkIHRvIHJldHJ5CisJCSAqLworCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fZ2lkX2Z0X3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fZ2lkX2Z0X3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfTlNfUVVFUlk6CisJCS8qCisJCSAqIElmIHRoZSBwb3J0IHJvbGUgaXMgSW5pdGlhdG9yIE1vZGUgaXNzdWUgTlMgcXVlcnkuCisJCSAqIElmIGl0IGlzIFRhcmdldCBNb2RlLCBza2lwIHRoaXMgYW5kIGdvIHRvIG9ubGluZS4KKwkJICovCisJCWlmIChCRkFfRkNTX1ZQT1JUX0lTX0lOSVRJQVRPUl9NT0RFKG5zLT5wb3J0KSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KTsKKwkJCWJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdChucywgTlVMTCk7CisJCX07CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBuc19wdnQgTmFtZXNlcnZlciBsb2NhbCBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfcGxvZ2kodm9pZCAqbnNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IG5zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm5zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcGxvZ2ksIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wbG9naV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUiksCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICAgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3biwKKwkJCSAgICAgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUocG9ydC0+ZmNzLT5iZmEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19wbG9naV9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX3NlbnQrKzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1BMT0dJX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkgICAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJICAgICAgIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJICAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJLyogc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2lfcmVzcDsgKi8KKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCisJY2FzZSBGQ19FTFNfQUNDOgorCQlpZiAocnNwX2xlbiA8IHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSkgeworCQkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzcF9sZW4pOworCQkJcG9ydC0+c3RhdHMubnNfcGxvZ2lfYWNjX2VycisrOworCQkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJCWJyZWFrOworCQl9CisJCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19MU19SSlQ6CisJCWxzX3JqdCA9IChzdHJ1Y3QgZmNfbHNfcmp0X3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlX2V4cGwpOworCisJCXBvcnQtPnN0YXRzLm5zX3JlamVjdHMrKzsKKworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX3Vua25vd25fcnNwKys7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqIFJlZ2lzdGVyIHRoZSBzeW1ib2xpYyBwb3J0IG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc2VuZF9yc3BuX2lkKHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1OCAgICAgICAgIHN5bWJsWzI1Nl07CisJdTggICAgICAgICpwc3ltYmwgPSAmc3ltYmxbMF07CisKKwliZmFfb3NfbWVtc2V0KHN5bWJsLCAwLCBzaXplb2Yoc3ltYmwpKTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubnNfcnNwbmlkX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm5zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcnNwbl9pZCwgbnMpOworCQlyZXR1cm47CisJfQorCW5zLT5mY3hwID0gZmN4cDsKKworCS8qCisJICogZm9yIFYtUG9ydCwgZm9ybSBhIFBvcnQgU3ltYm9saWMgTmFtZQorCSAqLworCWlmIChwb3J0LT52cG9ydCkgeworCQkvKipGb3IgVnBvcnRzLAorCQkgKiAgd2UgYXBwZW5kIHRoZSB2cG9ydCdzIHBvcnQgc3ltYm9saWMgbmFtZSB0byB0aGF0IG9mIHRoZSBiYXNlIHBvcnQuCisJCSAqLworCisJCXN0cm5jcHkoKGNoYXIgKilwc3ltYmwsCisJCQkoY2hhciAqKQorCQkJJihiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZQorCQkJICAoYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpKSwKKwkJCXN0cmxlbigoY2hhciAqKQorCQkJICAgICAgICZiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZShiZmFfZmNzX2dldF9iYXNlX3BvcnQKKwkJCQkJCQkgICAocG9ydC0+ZmNzKSkpKTsKKworCQkvKgorCQkgKiBFbnN1cmUgd2UgaGF2ZSBhIG51bGwgdGVybWluYXRpbmcgc3RyaW5nLgorCQkgKi8KKwkJKChjaGFyICopCisJCSBwc3ltYmwpW3N0cmxlbigoY2hhciAqKQorCQkJCSZiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZQorCQkJCShiZmFfZmNzX2dldF9iYXNlX3BvcnQocG9ydC0+ZmNzKSkpXSA9IDA7CisKKwkJc3RybmNhdCgoY2hhciAqKXBzeW1ibCwKKwkJCShjaGFyICopJihiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZShwb3J0KSksCisJCQlzdHJsZW4oKGNoYXIgKikmYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUocG9ydCkpKTsKKwl9IGVsc2UgeworCQlwc3ltYmwgPSAodTggKikgJihiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZShwb3J0KSk7CisJfQorCisJbGVuID0gZmNfcnNwbmlkX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLCBwc3ltYmwpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX3JzcG5faWRfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9zZW50Kys7CisKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BOSURfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfcnNwbl9pZF9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCSBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQlwb3J0LT5zdGF0cy5uc19yc3BuaWRfYWNjZXB0cysrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJcG9ydC0+c3RhdHMubnNfcnNwbmlkX3JlamVjdHMrKzsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworfQorCisvKioKKyAqIFJlZ2lzdGVyIEZDNC1UeXBlcworICogVEJELCBOZWVkIHRvIHJldHJpZXZlIHRoaXMgZnJvbSB0aGUgT1MgZHJpdmVyLCBpbiBjYXNlIElQRkMgaXMgZW5hYmxlZCA/CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc2VuZF9yZnRfaWQodm9pZCAqbnNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IG5zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19yZnRpZF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JmdF9pZCwgbnMpOworCQlyZXR1cm47CisJfQorCW5zLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3JmdGlkX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnJvbGVzKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19yZnRfaWRfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXBvcnQtPnN0YXRzLm5zX3JmdGlkX3NlbnQrKzsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SRlRJRF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19yZnRfaWRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19yZnRpZF9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQlwb3J0LT5zdGF0cy5uc19yZnRpZF9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0LT5zdGF0cy5uc19yZnRpZF9yZWplY3RzKys7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworLyoqCisqIFJlZ2lzdGVyIEZDNC1GZWF0dXJlcyA6IFNob3VsZCBiZSBkb25lIGFmdGVyIFJGVF9JRAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1OCAgICAgICAgIGZjNF9mdHJzID0gMDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubnNfcmZmaWRfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbnMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9yZmZfaWQsIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwlpZiAoQkZBX0ZDU19WUE9SVF9JU19JTklUSUFUT1JfTU9ERShucy0+cG9ydCkpIHsKKwkJZmM0X2Z0cnMgPSBGQ19HU19GQ1BfRkM0X0ZFQVRVUkVfSU5JVElBVE9SOworCX0gZWxzZSBpZiAoQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShucy0+cG9ydCkpIHsKKwkJZmM0X2Z0cnMgPSBGQ19HU19GQ1BfRkM0X0ZFQVRVUkVfVEFSR0VUOworCX0KKworCWxlbiA9IGZjX3JmZmlkX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsIEZDX1RZUEVfRkNQLAorCQkJICAgICBmYzRfZnRycyk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcmZmX2lkX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5uc19yZmZpZF9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUkZGSURfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfcmZmX2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfcmZmaWRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJcG9ydC0+c3RhdHMubnNfcmZmaWRfYWNjZXB0cysrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJcG9ydC0+c3RhdHMubnNfcmZmaWRfcmVqZWN0cysrOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCisJaWYgKGN0aGRyLT5yZWFzb25fY29kZSA9PSBDVF9SU05fTk9UX1NVUFApIHsKKwkJLyoKKwkJICogaWYgdGhpcyBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQsIHdlIGRvbid0IHJldHJ5CisJCSAqLworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCX0gZWxzZSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqIFF1ZXJ5IEZhYnJpYyBmb3IgRkM0LVR5cGVzIERldmljZXMuCisgKgorKiAgVEJEIDogTmVlZCB0byB1c2UgYSBsb2NhbCAoRkNTIHByaXZhdGUpIHJlc3BvbnNlIGJ1ZmZlciwgc2luY2UgdGhlIHJlc3BvbnNlCisgKiBjYW4gYmUgbGFyZ2VyIHRoYW4gMksuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc2VuZF9naWRfZnQodm9pZCAqbnNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IG5zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm5zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0LCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJLyoKKwkgKiBUaGlzIHF1ZXJ5IGlzIG9ubHkgaW5pdGlhdGVkIGZvciBGQ1AgaW5pdGlhdG9yIG1vZGUuCisJICovCisJbGVuID0gZmNfZ2lkX2Z0X2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBucy0+cG9ydC0+cGlkLAorCQkJICAgICAgRkNfVFlQRV9GQ1ApOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX2dpZF9mdF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilucywgYmZhX2ZjeHBfZ2V0X21heHJzcChwb3J0LT5mY3MtPmJmYSksCisJCSAgICAgIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5uc19naWRmdF9zZW50Kys7CisKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9HSURGVF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19naWRfZnRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKwl1MzIgICAgICAgIG5fcGlkczsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19naWRmdF9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocmVzaWRfbGVuICE9IDApIHsKKwkJLyoKKwkJICogVEJEIDogd2Ugd2lsbCBuZWVkIHRvIGFsbG9jYXRlIGEgbGFyZ2VyIGJ1ZmZlciAmIHJldHJ5IHRoZQorCQkgKiBjb21tYW5kCisJCSAqLworCQliZmFfdHJjKHBvcnQtPmZjcywgcnNwX2xlbik7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXNpZF9sZW4pOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCXN3aXRjaCAoY3RoZHItPmNtZF9yc3BfY29kZSkgeworCisJY2FzZSBDVF9SU1BfQUNDRVBUOgorCisJCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X2FjY2VwdHMrKzsKKwkJbl9waWRzID0gKGZjX2dldF9jdHJlc3BfcHlsZF9sZW4ocnNwX2xlbikgLyBzaXplb2YodTMyKSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBuX3BpZHMpOworCQliZmFfZmNzX3BvcnRfbnNfcHJvY2Vzc19naWRmdF9waWRzKHBvcnQsCisJCQkJCQkgICAodTMyICopIChjdGhkciArIDEpLAorCQkJCQkJICAgbl9waWRzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJYnJlYWs7CisKKwljYXNlIENUX1JTUF9SRUpFQ1Q6CisKKwkJLyoKKwkJICogQ2hlY2sgdGhlIHJlYXNvbiBjb2RlICAmIGV4cGxhbmF0aW9uLgorCQkgKiBUaGVyZSBtYXkgbm90IGhhdmUgYmVlbiBhbnkgRkM0IGRldmljZXMgaW4gdGhlIGZhYnJpYworCQkgKi8KKwkJcG9ydC0+c3RhdHMubnNfZ2lkZnRfcmVqZWN0cysrOworCQliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisKKwkJaWYgKChjdGhkci0+cmVhc29uX2NvZGUgPT0gQ1RfUlNOX1VOQUJMRV9UT19QRVJGKQorCQkgICAgJiYgKGN0aGRyLT5leHBfY29kZSA9PSBDVF9OU19FWFBfRlRfTk9UX1JFRykpIHsKKworCQkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBmb3IgYWxsIG90aGVyIGVycm9ycywgcmV0cnkKKwkJCSAqLworCQkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X3Vua25vd25fcnNwKys7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+Y21kX3JzcF9jb2RlKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwl9Cit9CisKKy8qKgorICogICAgIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBieSBiZmFfdGltZXIgb24gdGltZXIgdGltZW91dHMuCisgKgorICogCXBhcmFtW2luXSAJcG9ydCAJLSBwb2ludGVyIHRvIGJmYV9mY3NfcG9ydF90LgorICoKKyAqIAlyZXR1cm4KKyAqIAkJdm9pZAorICoKKyogCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc190aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWFyZzsKKworCW5zLT5wb3J0LT5zdGF0cy5uc190aW1lb3V0cysrOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1RJTUVPVVQpOworfQorCisvKgorICogUHJvY2VzcyB0aGUgUElEIGxpc3QgaW4gR0lEX0ZUIHJlc3BvbnNlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfcHJvY2Vzc19naWRmdF9waWRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkgICB1MzIgKnBpZF9idWYsIHUzMiBuX3BpZHMpCit7CisJc3RydWN0IGZjZ3NfZ2lkZnRfcmVzcF9zICpnaWRmdF9lbnRyeTsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwl1MzIgICAgICAgIGlpOworCisJZm9yIChpaSA9IDA7IGlpIDwgbl9waWRzOyBpaSsrKSB7CisJCWdpZGZ0X2VudHJ5ID0gKHN0cnVjdCBmY2dzX2dpZGZ0X3Jlc3BfcyAqKSAmcGlkX2J1ZltpaV07CisKKwkJaWYgKGdpZGZ0X2VudHJ5LT5waWQgPT0gcG9ydC0+cGlkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhpcyBycG9ydCBhbHJlYWR5IGV4aXN0cworCQkgKi8KKwkJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChwb3J0LCBnaWRmdF9lbnRyeS0+cGlkKTsKKwkJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiB0aGlzIGlzIGEgbmV3IGRldmljZS4gY3JlYXRlIHJwb3J0CisJCQkgKi8KKwkJCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9jcmVhdGUocG9ydCwgZ2lkZnRfZW50cnktPnBpZCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogdGhpcyBycG9ydCBhbHJlYWR5IGV4aXN0cworCQkJICovCisJCQliZmFfZmNzX3Jwb3J0X3NjbihycG9ydCk7CisJCX0KKworCQliZmFfdHJjKHBvcnQtPmZjcywgZ2lkZnRfZW50cnktPnBpZCk7CisKKwkJLyoKKwkJICogaWYgdGhlIGxhc3QgZW50cnkgYml0IGlzIHNldCwgYmFpbCBvdXQuCisJCSAqLworCQlpZiAoZ2lkZnRfZW50cnktPmxhc3QpCisJCQlyZXR1cm47CisJfQorfQorCisvKioKKyAqICBmY3NfbnNfcHVibGljIEZDUyBuYW1lc2VydmVyIHB1YmxpYyBpbnRlcmZhY2VzCisgKi8KKworLyoKKyAqIEZ1bmN0aW9ucyBjYWxsZWQgYnkgcG9ydC9mYWIuCisgKiBUaGVzZSB3aWxsIHNlbmQgcmVsZXZhbnQgRXZlbnRzIHRvIHRoZSBucyBzdGF0ZSBtYWNoaW5lLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbnNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KTsKKworCW5zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9uc19vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gQkZBX0ZDU19HRVRfTlNfRlJPTV9QT1JUKHBvcnQpOworCisJbnMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9uc19vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBCRkFfRkNTX0dFVF9OU19GUk9NX1BPUlQocG9ydCk7CisKKwlucy0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUE9SVF9PTkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbnNfcXVlcnkoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBCRkFfRkNTX0dFVF9OU19GUk9NX1BPUlQocG9ydCk7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9OU19RVUVSWSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfYm9vdF90YXJnZXRfZGlzYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwl1OCAgICAgICAgIG53d25zOworCXd3bl90ICAgICAgICAgICp3d25zOworCWludCAgICAgICAgICAgICBpaTsKKworCWJmYV9pb2NmY19nZXRfYm9vdHd3bnMocG9ydC0+ZmNzLT5iZmEsICZud3ducywgJnd3bnMpOworCisJZm9yIChpaSA9IDA7IGlpIDwgbnd3bnM7ICsraWkpIHsKKwkJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2NyZWF0ZV9ieV93d24ocG9ydCwgd3duc1tpaV0pOworCQliZmFfYXNzZXJ0KHJwb3J0KTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9wbG9nLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Bsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmFmODE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9wbG9nLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcGxvZy5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorCitzdGF0aWMgaW50CitwbGtkX3ZhbGlkYXRlX2xvZ3JlYyhzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgKnBsX3JlYykKK3sKKwlpZiAoKHBsX3JlYy0+bG9nX3R5cGUgIT0gQkZBX1BMX0xPR19UWVBFX0lOVCkKKwkgICAgJiYgKHBsX3JlYy0+bG9nX3R5cGUgIT0gQkZBX1BMX0xPR19UWVBFX1NUUklORykpCisJCXJldHVybiAxOworCisJaWYgKChwbF9yZWMtPmxvZ190eXBlICE9IEJGQV9QTF9MT0dfVFlQRV9JTlQpCisJICAgICYmIChwbF9yZWMtPmxvZ19udW1faW50cyA+IEJGQV9QTF9JTlRfTE9HX1NaKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wbG9nX2FkZChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgc3RydWN0IGJmYV9wbG9nX3JlY19zICpwbF9yZWMpCit7CisJdTE2ICAgICAgICB0YWlsOworCXN0cnVjdCBiZmFfcGxvZ19yZWNfcyAqcGxfcmVjcDsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKHBsa2RfdmFsaWRhdGVfbG9ncmVjKHBsX3JlYykpIHsKKwkJYmZhX2Fzc2VydCgwKTsKKwkJcmV0dXJuOworCX0KKworCXRhaWwgPSBwbG9nLT50YWlsOworCisJcGxfcmVjcCA9ICYocGxvZy0+cGxvZ19yZWNzW3RhaWxdKTsKKworCWJmYV9vc19tZW1jcHkocGxfcmVjcCwgcGxfcmVjLCBzaXplb2Yoc3RydWN0IGJmYV9wbG9nX3JlY19zKSk7CisKKwlwbF9yZWNwLT50diA9IEJGQV9UUkNfVFMocGxvZyk7CisJQkZBX1BMX0xPR19SRUNfSU5DUihwbG9nLT50YWlsKTsKKworCWlmIChwbG9nLT5oZWFkID09IHBsb2ctPnRhaWwpCisJCUJGQV9QTF9MT0dfUkVDX0lOQ1IocGxvZy0+aGVhZCk7Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2luaXQoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJYmZhX29zX21lbXNldCgoY2hhciAqKXBsb2csIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcykpOworCisJYmZhX29zX21lbWNweShwbG9nLT5wbG9nX3NpZywgQkZBX1BMX1NJR19TVFIsIEJGQV9QTF9TSUdfTEVOKTsKKwlwbG9nLT5oZWFkID0gcGxvZy0+dGFpbCA9IDA7CisJcGxvZy0+cGxvZ19lbmFibGVkID0gMTsKK30KKwordm9pZAorYmZhX3Bsb2dfc3RyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LAorCQl1MTYgbWlzYywgY2hhciAqbG9nX3N0cikKK3sKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgIGxwOworCisJaWYgKHBsb2ctPnBsb2dfZW5hYmxlZCkgeworCQliZmFfb3NfbWVtc2V0KCZscCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCQlscC5taWQgPSBtaWQ7CisJCWxwLmVpZCA9IGV2ZW50OworCQlscC5sb2dfdHlwZSA9IEJGQV9QTF9MT0dfVFlQRV9TVFJJTkc7CisJCWxwLm1pc2MgPSBtaXNjOworCQlzdHJuY3B5KGxwLmxvZ19lbnRyeS5zdHJpbmdfbG9nLCBsb2dfc3RyLAorCQkJQkZBX1BMX1NUUklOR19MT0dfU1ogLSAxKTsKKwkJbHAubG9nX2VudHJ5LnN0cmluZ19sb2dbQkZBX1BMX1NUUklOR19MT0dfU1ogLSAxXSA9ICdcMCc7CisJCWJmYV9wbG9nX2FkZChwbG9nLCAmbHApOworCX0KK30KKwordm9pZAorYmZhX3Bsb2dfaW50YXJyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LAorCQl1MTYgbWlzYywgdTMyICppbnRhcnIsIHUzMiBudW1faW50cykKK3sKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgIGxwOworCXUzMiAgICAgICAgaTsKKworCWlmIChudW1faW50cyA+IEJGQV9QTF9JTlRfTE9HX1NaKQorCQludW1faW50cyA9IEJGQV9QTF9JTlRfTE9HX1NaOworCisJaWYgKHBsb2ctPnBsb2dfZW5hYmxlZCkgeworCQliZmFfb3NfbWVtc2V0KCZscCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCQlscC5taWQgPSBtaWQ7CisJCWxwLmVpZCA9IGV2ZW50OworCQlscC5sb2dfdHlwZSA9IEJGQV9QTF9MT0dfVFlQRV9JTlQ7CisJCWxwLm1pc2MgPSBtaXNjOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1faW50czsgaSsrKQorCQkJYmZhX29zX2Fzc2lnbihscC5sb2dfZW50cnkuaW50X2xvZ1tpXSwKKwkJCQkJaW50YXJyW2ldKTsKKworCQlscC5sb2dfbnVtX2ludHMgPSAodTgpIG51bV9pbnRzOworCisJCWJmYV9wbG9nX2FkZChwbG9nLCAmbHApOworCX0KK30KKwordm9pZAorYmZhX3Bsb2dfZmNoZHIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LAorCQkJdTE2IG1pc2MsIHN0cnVjdCBmY2hzX3MgKmZjaGRyKQoreworCXN0cnVjdCBiZmFfcGxvZ19yZWNfcyAgbHA7CisJdTMyICAgICAgICp0bXBfaW50ID0gKHUzMiAqKSBmY2hkcjsKKwl1MzIgICAgICAgIGludHNbQkZBX1BMX0lOVF9MT0dfU1pdOworCisJaWYgKHBsb2ctPnBsb2dfZW5hYmxlZCkgeworCQliZmFfb3NfbWVtc2V0KCZscCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCisJCWludHNbMF0gPSB0bXBfaW50WzBdOworCQlpbnRzWzFdID0gdG1wX2ludFsxXTsKKwkJaW50c1syXSA9IHRtcF9pbnRbNF07CisKKwkJYmZhX3Bsb2dfaW50YXJyKHBsb2csIG1pZCwgZXZlbnQsIG1pc2MsIGludHMsIDMpOworCX0KK30KKwordm9pZAorYmZhX3Bsb2dfZmNoZHJfYW5kX3BsKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCSAgICAgIGVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LCB1MTYgbWlzYywgc3RydWN0IGZjaHNfcyAqZmNoZHIsCisJCSAgICAgIHUzMiBwbGRfdzApCit7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBscDsKKwl1MzIgICAgICAgKnRtcF9pbnQgPSAodTMyICopIGZjaGRyOworCXUzMiAgICAgICAgaW50c1tCRkFfUExfSU5UX0xPR19TWl07CisKKwlpZiAocGxvZy0+cGxvZ19lbmFibGVkKSB7CisJCWJmYV9vc19tZW1zZXQoJmxwLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wbG9nX3JlY19zKSk7CisKKwkJaW50c1swXSA9IHRtcF9pbnRbMF07CisJCWludHNbMV0gPSB0bXBfaW50WzFdOworCQlpbnRzWzJdID0gdG1wX2ludFs0XTsKKwkJaW50c1szXSA9IHBsZF93MDsKKworCQliZmFfcGxvZ19pbnRhcnIocGxvZywgbWlkLCBldmVudCwgbWlzYywgaW50cywgNCk7CisJfQorfQorCit2b2lkCitiZmFfcGxvZ19jbGVhcihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwlwbG9nLT5oZWFkID0gcGxvZy0+dGFpbCA9IDA7Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2VuYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwlwbG9nLT5wbG9nX2VuYWJsZWQgPSAxOworfQorCit2b2lkCitiZmFfcGxvZ19kaXNhYmxlKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQoreworCXBsb2ctPnBsb2dfZW5hYmxlZCA9IDA7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wbG9nX2dldF9zZXR0aW5nKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQoreworCXJldHVybigoYmZhX2Jvb2xlYW5fdClwbG9nLT5wbG9nX2VuYWJsZWQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjU4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0LmMKQEAgLTAsMCArMSwyNjE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHJwb3J0LmMgUmVtb3RlIHBvcnQgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY2J1aWxkLmgiCisjaW5jbHVkZSAiZmNzX3Zwb3J0LmgiCisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX2ZjcGltLmgiCisjaW5jbHVkZSAiZmNzX2ZjcHRtLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfcnBvcnQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9ycG9ydC5oPgorCitCRkFfVFJDX0ZJTEUoRkNTLCBSUE9SVCk7CisKKyNkZWZpbmUgQkZBX0ZDU19SUE9SVF9NQVhfUkVUUklFUwkJKDUpCisKKy8qIEluIG1pbGxpc2VjcyAqLworc3RhdGljIHUzMiBiZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0ID0KKwkJCUJGQV9GQ1NfUlBPUlRfREVGX0RFTF9USU1FT1VUICogMTAwMDsKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3Jwb3J0X2FsbG9jKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJCSAgIHd3bl90IHB3d24sIHUzMiBycGlkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9vbmxpbmVfYWN0aW9uKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3VwZGF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkgICAgIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X2ZjNF9wYXVzZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9mYzRfcmVzdW1lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3RpbWVvdXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kodm9pZCAqcnBvcnRfY2JhcmcsCisJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2Modm9pZCAqcnBvcnRfY2JhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfYWRpc2Modm9pZCAqcnBvcnRfY2JhcmcsCisJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4odm9pZCAqcnBvcnRfY2JhcmcsCisJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X2dpZHBuX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfbG9nbyh2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ29fYWNjKHZvaWQgKnJwb3J0X2NiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfcHJsaShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHUxNiBsZW4pOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9sc19yanQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1OCByZWFzb25fY29kZSwKKwkJCXU4IHJlYXNvbl9jb2RlX2V4cGwpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfcHJvY2Vzc19hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHUxNiBsZW4pOworLyoqCisgKiAgZmNzX3Jwb3J0X3NtIEZDUyBycG9ydCBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCisKK2VudW0gcnBvcnRfZXZlbnQgeworCVJQU01fRVZFTlRfUExPR0lfU0VORCA9IDEsCS8qICBuZXcgcnBvcnQ7IHN0YXJ0IHdpdGggUExPR0kgKi8KKwlSUFNNX0VWRU5UX1BMT0dJX1JDVkQgPSAyLAkvKiAgSW5ib3VuZCBQTE9HSSBmcm9tIHJlbW90ZSBwb3J0ICovCisJUlBTTV9FVkVOVF9QTE9HSV9DT01QID0gMywJLyogIFBMT0dJIGNvbXBsZXRlZCB0byBycG9ydCAqLworCVJQU01fRVZFTlRfTE9HT19SQ1ZEID0gNCwJLyogIExPR08gZnJvbSByZW1vdGUgZGV2aWNlICovCisJUlBTTV9FVkVOVF9MT0dPX0lNUCA9IDUsCS8qICBpbXBsaWNpdCBsb2dvIGZvciBTTEVSICovCisJUlBTTV9FVkVOVF9GQ1hQX1NFTlQgPSA2LAkvKiAgRnJhbWUgZnJvbSBoYXMgYmVlbiBzZW50ICovCisJUlBTTV9FVkVOVF9ERUxFVEUgPSA3LAkvKiAgUlBPUlQgZGVsZXRlIHJlcXVlc3QgKi8KKwlSUFNNX0VWRU5UX1NDTiA9IDgsCS8qICBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uICovCisJUlBTTV9FVkVOVF9BQ0NFUFRFRCA9IDksLyogIEdvb2QgcmVzcG9uc2UgZnJvbSByZW1vdGUgZGV2aWNlICovCisJUlBTTV9FVkVOVF9GQUlMRUQgPSAxMCwJLyogIFJlcXVlc3QgdG8gcnBvcnQgZmFpbGVkLiAgKi8KKwlSUFNNX0VWRU5UX1RJTUVPVVQgPSAxMSwJLyogIFJwb3J0IFNNIHRpbWVvdXQgZXZlbnQgKi8KKwlSUFNNX0VWRU5UX0hDQl9PTkxJTkUgPSAxMiwJLyogIEJGQSBycG9ydCBvbmxpbmUgY2FsbGJhY2sgKi8KKwlSUFNNX0VWRU5UX0hDQl9PRkZMSU5FID0gMTMsCS8qICBCRkEgcnBvcnQgb2ZmbGluZSBjYWxsYmFjayAqLworCVJQU01fRVZFTlRfRkM0X09GRkxJTkUgPSAxNCwJLyogIEZDLTQgb2ZmbGluZSBjb21wbGV0ZSAqLworCVJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UgPSAxNSwJLyogIFJwb3J0J3MgUElEIGhhcyBjaGFuZ2VkICovCisJUlBTTV9FVkVOVF9BRERSRVNTX0RJU0MgPSAxNgkvKiAgTmVlZCB0byBEaXNjb3ZlciBycG9ydCdzIFBJRCAqLworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCQkgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkJIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fYWRpc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2xvZ29fc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW50KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbnQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgcnBvcnRfc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KSwgQkZBX1JQT1JUX1VOSU5JVH0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcpLCBCRkFfUlBPUlRfUExPR0l9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKSwgQkZBX1JQT1JUX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3JldHJ5KSwgQkZBX1JQT1JUX1BMT0dJX1JFVFJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fcGxvZ2kpLCBCRkFfUlBPUlRfUExPR0l9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKSwgQkZBX1JQT1JUX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX29ubGluZSksIEJGQV9SUE9SVF9PTkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcpLCBCRkFfUlBPUlRfTlNRVUVSWX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnkpLCBCRkFfUlBPUlRfTlNRVUVSWX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjX3NlbmRpbmcpLCBCRkFfUlBPUlRfQURJU0N9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9hZGlzYyksIEJGQV9SUE9SVF9BRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KSwgQkZBX1JQT1JUX0xPR09SQ1Z9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpLCBCRkFfUlBPUlRfTE9HT30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKSwgQkZBX1JQT1JUX09GRkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZSksIEJGQV9SUE9SVF9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29yY3YpLCBCRkFfUlBPUlRfTE9HT1JDVn0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZCksIEJGQV9SUE9SVF9MT0dPfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbG9nb19zZW5kaW5nKSwgQkZBX1JQT1JUX0xPR099LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKSwgQkZBX1JQT1JUX09GRkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyksIEJGQV9SUE9SVF9OU0RJU0N9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2NfcmV0cnkpLCBCRkFfUlBPUlRfTlNESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbnQpLCBCRkFfUlBPUlRfTlNESVNDfSwKK307CisKKy8qKgorICogCQlCZWdpbm5pbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9TRU5EOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcpOworCQlycG9ydC0+cGxvZ2lfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naShycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0RJU0M6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlQTE9HSSBpcyBiZWluZyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlQTE9HSSBpcyBiZWluZyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIElnbm9yZSwgU0NOIGlzIHBvc3NpYmx5IG9ubGluZSBub3RpZmljYXRpb24uCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORToKKwkJLyoqCisJCSAqIElnbm9yZSBCRkEgY2FsbGJhY2ssIG9uIGEgUExPR0kgcmVjZWl2ZSB3ZSBjYWxsIGJmYSBvZmZsaW5lLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVBMT0dJIGlzIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQkvKgorCQkgKiAhISBmYWxsIHRocm91Z2ggISEKKwkJICovCisKKwljYXNlIFJQU01fRVZFTlRfVElNRU9VVDoKKwkJcnBvcnQtPnBsb2dpX3JldHJpZXMrKzsKKwkJaWYgKHJwb3J0LT5wbG9naV9yZXRyaWVzIDwgQkZBX0ZDU19SUE9SVF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naShycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlycG9ydC0+cGlkID0gMDsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVBMT0dJIGlzIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0FDQ0VQVEVEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQlycG9ydC0+cGxvZ2lfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ29fYWNjKHJwb3J0KTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCS8qCisJCSAqICEhIGZhbGwgdGhyb3VnaCAhIQorCQkgKi8KKwljYXNlIFJQU01fRVZFTlRfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogSWdub3JlIFNDTiAtIHdhaXQgZm9yIFBMT0dJIHJlc3BvbnNlLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVBMT0dJIGlzIGNvbXBsZXRlLiBBd2FpdGluZyBCRkEgcnBvcnQgb25saW5lIGNhbGxiYWNrLiBGQy00cworICogCQlhcmUgb2ZmbGluZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfSENCX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X29ubGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29yY3YpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIEB0b2RvCisJCSAqIElnbm9yZSBTQ04gLSBQTE9HSSBqdXN0IGNvbXBsZXRlZCwgRkMtNCBsb2dpbiBzaG91bGQgZGV0ZWN0CisJCSAqIGRldmljZSBmYWlsdXJlcy4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBPTkxJTkUuIEZDLTRzIGFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIFBhdXNlIEZDLTQgYWN0aXZpdHkgdGlsbCBycG9ydCBpcyBhdXRoZW50aWNhdGVkLgorCQkgKiBJbiBzd2l0Y2hlZCBmYWJyaWNzLCBjaGVjayBwcmVzZW5jZSBvZiBkZXZpY2UgaW4gbmFtZXNlcnZlcgorCQkgKiBmaXJzdC4KKwkJICovCisJCWJmYV9mY3NfcnBvcnRfZmM0X3BhdXNlKHJwb3J0KTsKKworCQlpZiAoYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocnBvcnQtPnBvcnQtPmZhYnJpYykpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnlfc2VuZGluZyk7CisJCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYyhycG9ydCwgTlVMTCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlBbiBTQ04gZXZlbnQgaXMgcmVjZWl2ZWQgaW4gT05MSU5FIHN0YXRlLiBOUyBxdWVyeSBpcyBiZWluZyBzZW50CisgKiAJCXByaW9yIHRvIEFESVNDIGF1dGhlbnRpY2F0aW9uIHdpdGggcnBvcnQuIEZDLTRzIGFyZSBwYXVzZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnlfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeSk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBpZ25vcmUgU0NOLCB3YWl0IGZvciByZXNwb25zZSB0byBxdWVyeSBpdHNlbGYKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJQW4gU0NOIGV2ZW50IGlzIHJlY2VpdmVkIGluIE9OTElORSBzdGF0ZS4gTlMgcXVlcnkgaXMgc2VudCB0byBycG9ydC4KKyAqIAlGQy00cyBhcmUgcGF1c2VkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0FDQ0VQVEVEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjX3NlbmRpbmcpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfYWRpc2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9GQUlMRUQ6CisJCXJwb3J0LT5uc19yZXRyaWVzKys7CisJCWlmIChycG9ydC0+bnNfcmV0cmllcyA8IEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnlfc2VuZGluZyk7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAlBbiBTQ04gZXZlbnQgaXMgcmVjZWl2ZWQgaW4gT05MSU5FIHN0YXRlLiBBRElTQyBpcyBiZWluZyBzZW50IGZvcgorICogCWF1dGhlbnRpY2F0aW5nIHdpdGggcnBvcnQuIEZDLTRzIGFyZSBwYXVzZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fYWRpc2MpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUFuIFNDTiBldmVudCBpcyByZWNlaXZlZCBpbiBPTkxJTkUgc3RhdGUuIEFESVNDIGlzIHRvIHJwb3J0LgorICogCQlGQy00cyBhcmUgcGF1c2VkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9BQ0NFUFRFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X2ZjNF9yZXN1bWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQkvKioKKwkJICogVG9vIGNvbXBsZXggdG8gY2xlYW51cCBGQy00ICYgcnBvcnQgYW5kIHRoZW4gYWNjIHRvIFBMT0dJLgorCQkgKiBBdCBsZWFzdCBnbyBvZmZsaW5lIHdoZW4gYSBQTE9HSSBpcyByZWNlaXZlZC4KKwkJICovCisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQkvKgorCQkgKiAhISEgZmFsbCB0aHJvdWdoICEhIQorCQkgKi8KKworCWNhc2UgUlBTTV9FVkVOVF9GQUlMRUQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIGFscmVhZHkgcHJvY2Vzc2luZyBSU0NOCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaGFzIHNlbnQgTE9HTy4gQXdhaXRpbmcgRkMtNCBvZmZsaW5lIGNvbXBsZXRpb24gY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQzRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3Jjdik7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUxPR08gbmVlZHMgdG8gYmUgc2VudCB0byBycG9ydC4gQXdhaXRpbmcgRkMtNCBvZmZsaW5lIGNvbXBsZXRpb24KKyAqIAkJY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkM0X09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCVJwb3J0IGlzIGdvaW5nIG9mZmxpbmUuIEF3YWl0aW5nIEZDLTQgb2ZmbGluZSBjb21wbGV0aW9uIGNhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkM0X09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJLyoqCisJCSAqIHJwb3J0IGlzIGFscmVhZHkgZ29pbmcgb2ZmbGluZS4KKwkJICogU0NOIC0gaWdub3JlIGFuZCB3YWl0IHRpbGwgdHJhbnNpdGlvbmluZyB0byBvZmZsaW5lIHN0YXRlCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGlzIG9mZmxpbmUuIEZDLTRzIGFyZSBvZmZsaW5lLiBBd2FpdGluZyBCRkEgcnBvcnQgb2ZmbGluZQorICogCQljYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PRkZMSU5FOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19vbmxpbmUocnBvcnQtPnBvcnQpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJcnBvcnQtPnBpZCA9IDA7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQkvKioKKwkJICogSWdub3JlLCBhbHJlYWR5IG9mZmxpbmUuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaXMgb2ZmbGluZS4gRkMtNHMgYXJlIG9mZmxpbmUuIEF3YWl0aW5nIEJGQSBycG9ydCBvZmZsaW5lCisgKiAJCWNhbGxiYWNrIHRvIHNlbmQgTE9HTyBhY2NlcHQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORToKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWlmIChycG9ydC0+cGlkKQorCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ29fYWNjKHJwb3J0KTsKKwkJLyoKKwkJICogSWYgdGhlIGxwb3J0IGlzIG9ubGluZSBhbmQgaWYgdGhlIHJwb3J0IGlzIG5vdCBhIHdlbGwga25vd24KKwkJICogYWRkcmVzcyBwb3J0LCB3ZSB0cnkgdG8gcmUtZGlzY292ZXIgdGhlIHItcG9ydC4KKwkJICovCisJCWlmIChiZmFfZmNzX3BvcnRfaXNfb25saW5lKHJwb3J0LT5wb3J0KQorCQkgICAgJiYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIGlmIGl0IGlzIG5vdCBhIHdlbGwga25vd24gYWRkcmVzcywgcmVzZXQgdGhlIHBpZCB0bworCQkJICoKKwkJCSAqLworCQkJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCQkJcnBvcnQtPnBpZCA9IDA7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQkvKioKKwkJICogSWdub3JlIC0gYWxyZWFkeSBwcm9jZXNzaW5nIGEgTE9HTy4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogUnBvcnQgaXMgYmVpbmcgZGVsZXRlZC4gRkMtNHMgYXJlIG9mZmxpbmUuIEF3YWl0aW5nIEJGQSBycG9ydCBvZmZsaW5lCisgKiBjYWxsYmFjayB0byBzZW5kIExPR08uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfSENCX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbG9nb19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ28ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaXMgYmVpbmcgZGVsZXRlZC4gRkMtNHMgYXJlIG9mZmxpbmUuIExPR08gaXMgYmVpbmcgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbG9nb19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCS8qCisJCSAqIE9uY2UgTE9HTyBpcyBzZW50LCB3ZSBkb25vdCB3YWl0IGZvciB0aGUgcmVzcG9uc2UKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGlzIG9mZmxpbmUuIEZDLTRzIGFyZSBvZmZsaW5lLiBCRkEgcnBvcnQgaXMgb2ZmbGluZS4KKyAqIAkJVGltZXIgYWN0aXZlIHRvIGRlbGV0ZSBzdGFsZSBycG9ydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfU0VORDoKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyk7CisJCXJwb3J0LT5wbG9naV9yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJUnBvcnQgYWRkcmVzcyBoYXMgY2hhbmdlZC4gTmFtZXNlcnZlciBkaXNjb3ZlcnkgcmVxdWVzdCBpcyBiZWluZyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1NFTkQ6CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CS8qIHJlc2V0IHRoZSByZXRyeSBjb3VudCAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCU5hbWVzZXJ2ZXIgZGlzY292ZXJ5IGZhaWxlZC4gV2FpdGluZyBmb3IgdGltZW91dCB0byByZXRyeS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2MocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBScG9ydCBhZGRyZXNzIGhhcyBjaGFuZ2VkLiBOYW1lc2VydmVyIGRpc2NvdmVyeSByZXF1ZXN0IGlzIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW50KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9BQ0NFUFRFRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWlmIChycG9ydC0+cGlkKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfRkFJTEVEOgorCQlycG9ydC0+bnNfcmV0cmllcysrOworCQlpZiAocnBvcnQtPm5zX3JldHJpZXMgPCBCRkFfRkNTX1JQT1JUX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJcnBvcnQtPnBpZCA9IDA7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCX07CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogaWdub3JlLCB3YWl0IGZvciBOUyBxdWVyeSByZXNwb25zZQorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQkvKioKKwkJICogTm90IGxvZ2dlZC1pbiB5ZXQuIEFjY2VwdCBMT0dPLgorCQkgKi8KKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ29fYWNjKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBmY3NfcnBvcnRfcHJpdmF0ZSBGQ1MgUlBPUlQgcHJvdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHZvaWQgKnJwb3J0X2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpLCBycG9ydCk7CisJCXJldHVybjsKKwl9CisJcnBvcnQtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcGxvZ2lfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICAgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3biwKKwkJCSAgICAgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUocG9ydC0+ZmNzLT5iZmEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcnBvcnRfcGxvZ2lfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopcnBvcnQsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXJwb3J0LT5zdGF0cy5wbG9naXMrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisJc3RydWN0IGZjX2xvZ2lfcwkqcGxvZ2lfcnNwOworCXN0cnVjdCBmY19sc19yanRfcwkqbHNfcmp0OworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnR3aW47CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcnBvcnQtPnN0YXRzLnBsb2dpX2ZhaWxlZCsrOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlyZXR1cm47CisJfQorCisJcGxvZ2lfcnNwID0gKHN0cnVjdCBmY19sb2dpX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCS8qKgorCSAqIENoZWNrIGZvciBmYWlsdXJlIGZpcnN0LgorCSAqLworCWlmIChwbG9naV9yc3AtPmVsc19jbWQuZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykgeworCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlKTsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlX2V4cGwpOworCisJCXJwb3J0LT5zdGF0cy5wbG9naV9yZWplY3RzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBQTE9HSSBpcyBjb21wbGV0ZS4gTWFrZSBzdXJlIHRoaXMgZGV2aWNlIGlzIG5vdCBvbmUgb2YgdGhlIGtub3duCisJICogZGV2aWNlIHdpdGggYSBuZXcgRkMgcG9ydCBhZGRyZXNzLgorCSAqLworCWxpc3RfZm9yX2VhY2gocWUsICZycG9ydC0+cG9ydC0+cnBvcnRfcSkgeworCQl0d2luID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKHR3aW4gPT0gcnBvcnQpCisJCQljb250aW51ZTsKKwkJaWYgKCFycG9ydC0+cHd3biAmJiAocGxvZ2lfcnNwLT5wb3J0X25hbWUgPT0gdHdpbi0+cHd3bikpIHsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywgdHdpbi0+cGlkKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwkJCS8qCisJCQkgKiBVcGRhdGUgcGxvZ2kgc3RhdHMgaW4gdHdpbgorCQkJICovCisJCQl0d2luLT5zdGF0cy5wbG9naXMgKz0gcnBvcnQtPnN0YXRzLnBsb2dpczsKKwkJCXR3aW4tPnN0YXRzLnBsb2dpX3JlamVjdHMgKz0gcnBvcnQtPnN0YXRzLnBsb2dpX3JlamVjdHM7CisJCQl0d2luLT5zdGF0cy5wbG9naV90aW1lb3V0cyArPQorCQkJCXJwb3J0LT5zdGF0cy5wbG9naV90aW1lb3V0czsKKwkJCXR3aW4tPnN0YXRzLnBsb2dpX2ZhaWxlZCArPSBycG9ydC0+c3RhdHMucGxvZ2lfZmFpbGVkOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfcmN2ZCArPSBycG9ydC0+c3RhdHMucGxvZ2lfcmN2ZDsKKwkJCXR3aW4tPnN0YXRzLnBsb2dpX2FjY3MrKzsKKworCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCisJCQliZmFfZmNzX3Jwb3J0X3VwZGF0ZSh0d2luLCBwbG9naV9yc3ApOworCQkJdHdpbi0+cGlkID0gcnNwX2ZjaHMtPnNfaWQ7CisJCQliZmFfc21fc2VuZF9ldmVudCh0d2luLCBSUFNNX0VWRU5UX1BMT0dJX0NPTVApOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyoqCisJICogTm9ybWFsIGxvZ2luIHBhdGggLS0gbm8gZXZpbCB0d2lucy4KKwkgKi8KKwlycG9ydC0+c3RhdHMucGxvZ2lfYWNjcysrOworCWJmYV9mY3NfcnBvcnRfdXBkYXRlKHJwb3J0LCBwbG9naV9yc3ApOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FDQ0VQVEVEKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyh2b2lkICpycG9ydF9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cmVwbHlfb3hpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYywgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Bsb2dpX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnBvcnQtPnBpZCwKKwkJCQkgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCBycG9ydC0+cmVwbHlfb3hpZCwKKwkJCQkgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3biwKKwkJCQkgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUocG9ydC0+ZmNzLT5iZmEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsIEZDX01BWF9QRFVTWiwgMCk7CisKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2FkaXNjKHZvaWQgKnJwb3J0X2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2FkaXNjLCBycG9ydCk7CisJCXJldHVybjsKKwl9CisJcnBvcnQtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfYWRpc2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICAgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3bik7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3Jwb3J0X2FkaXNjX3Jlc3BvbnNlLAorCQkgICAgICBycG9ydCwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcnBvcnQtPnN0YXRzLmFkaXNjX3NlbnQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9hZGlzY19yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisJdm9pZCAgICAgICAgICAgKnBsZCA9IGJmYV9mY3hwX2dldF9yc3BidWYoZmN4cCk7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisKKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXJwb3J0LT5zdGF0cy5hZGlzY19mYWlsZWQrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChmY19hZGlzY19yc3BfcGFyc2UoKHN0cnVjdCBmY19hZGlzY19zICopcGxkLCByc3BfbGVuLCBycG9ydC0+cHd3biwKKwkJcnBvcnQtPm53d24pICA9PSBGQ19QQVJTRV9PSykgeworCQlycG9ydC0+c3RhdHMuYWRpc2NfYWNjcysrOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9BQ0NFUFRFRCk7CisJCXJldHVybjsKKwl9CisKKwlycG9ydC0+c3RhdHMuYWRpc2NfcmVqZWN0cysrOworCWxzX3JqdCA9IHBsZDsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+ZWxzX2NtZC5lbHNfY29kZSk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9naWRwbih2b2lkICpycG9ydF9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuLCBycG9ydCk7CisJCXJldHVybjsKKwl9CisJcnBvcnQtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfZ2lkcG5fYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwgcnBvcnQtPnB3d24pOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycG9ydF9naWRwbl9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilycG9ydCwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfZ2lkcG5fcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnR3aW47CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisJc3RydWN0IGN0X2hkcl9zICAgICAgIAkqY3RoZHI7CisJc3RydWN0IGZjZ3NfZ2lkcG5fcmVzcF9zCSpnaWRwbl9yc3A7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCS8qCisJCSAqIENoZWNrIGlmIHRoZSBwaWQgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCQkgKi8KKwkJZ2lkcG5fcnNwID0gKHN0cnVjdCBmY2dzX2dpZHBuX3Jlc3BfcyAqKSAoY3RoZHIgKyAxKTsKKworCQlpZiAoZ2lkcG5fcnNwLT5kYXAgPT0gcnBvcnQtPnBpZCkgeworCQkJLyoKKwkJCSAqIERldmljZSBpcyBvbmxpbmUKKwkJCSAqLworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfQUNDRVBURUQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIERldmljZSdzIFBJRCBoYXMgY2hhbmdlZC4gV2UgbmVlZCB0byBjbGVhbnVwIGFuZAorCQkJICogcmUtbG9naW4uIElmIHRoZXJlIGlzIGFub3RoZXIgZGV2aWNlIHdpdGggdGhlIHRoZQorCQkJICogbmV3bHkgZGlzY292ZXJlZCBwaWQsIHNlbmQgYW4gc2NuIG5vdGljZSBzbyB0aGF0IGl0cworCQkJICogbmV3IHBpZCBjYW4gYmUgZGlzY292ZXJlZC4KKwkJCSAqLworCQkJbGlzdF9mb3JfZWFjaChxZSwgJnJwb3J0LT5wb3J0LT5ycG9ydF9xKSB7CisJCQkJdHdpbiA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCQkJaWYgKHR3aW4gPT0gcnBvcnQpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChnaWRwbl9yc3AtPmRhcCA9PSB0d2luLT5waWQpIHsKKwkJCQkJYmZhX3RyYyhycG9ydC0+ZmNzLCB0d2luLT5waWQpOworCQkJCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJCQkJCXR3aW4tPnBpZCA9IDA7CisJCQkJCWJmYV9zbV9zZW5kX2V2ZW50KHR3aW4sCisJCQkJCQlSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFKTsKKwkJCQl9CisJCQl9CisJCQlycG9ydC0+cGlkID0gZ2lkcG5fcnNwLT5kYXA7CisJCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUmVqZWN0IFJlc3BvbnNlCisJICovCisJc3dpdGNoIChjdGhkci0+cmVhc29uX2NvZGUpIHsKKwljYXNlIENUX1JTTl9MT0dJQ0FMX0JVU1k6CisJCS8qCisJCSAqIE5lZWQgdG8gcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgQ1RfUlNOX1VOQUJMRV9UT19QRVJGOgorCQkvKgorCQkgKiBkZXZpY2UgZG9lc24ndCBleGlzdCA6IFN0YXJ0IHRpbWVyIHRvIGNsZWFudXAgdGhpcyBsYXRlci4KKwkJICovCisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqICAgIENhbGxlZCB0byBzZW5kIGEgbG9nb3V0IHRvIHRoZSBycG9ydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9sb2dvKHZvaWQgKnJwb3J0X2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1MTYgICAgICAgIGxlbjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvLCBycG9ydCk7CisJCXJldHVybjsKKwl9CisJcnBvcnQtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfbG9nb19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnBvcnQtPnBpZCwKKwkJCSAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIHJwb3J0LCBGQ19NQVhfUERVU1osCisJCSAgICAgIEZDX0VEX1RPVik7CisKKwlycG9ydC0+c3RhdHMubG9nb3MrKzsKKwliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCisvKioKKyAqICAgIFNlbmQgQUNDIGZvciBhIExPR08gcmVjZWl2ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2Modm9pZCAqcnBvcnRfY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXUxNiAgICAgICAgbGVuOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCXBvcnQgPSBycG9ydC0+cG9ydDsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCXJwb3J0LT5zdGF0cy5sb2dvX3JjdmQrKzsKKwlsZW4gPSBmY19sb2dvX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnBvcnQtPnBpZCwKKwkJCQliZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJwb3J0LT5yZXBseV9veGlkKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qKgorICogICAgIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBieSBiZmFfdGltZXIgb24gdGltZXIgdGltZW91dHMuCisgKgorICogCXBhcmFtW2luXSAJcnBvcnQgCQkJLSBwb2ludGVyIHRvIGJmYV9mY3NfcG9ydF9uc190LgorICogCXBhcmFtW291dF0JcnBvcnRfc3RhdHVzIAktIHBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IHN0YXR1cyBpbgorICoKKyAqIAlyZXR1cm4KKyAqIAkJdm9pZAorICoKKyogIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilhcmc7CisKKwlycG9ydC0+c3RhdHMucGxvZ2lfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcHJvY2Vzc19wcmxpKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjX3BybGlfcyAgICAgICpwcmxpOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKworCXJwb3J0LT5zdGF0cy5wcmxpX3JjdmQrKzsKKworCWlmIChCRkFfRkNTX1ZQT1JUX0lTX1RBUkdFVF9NT0RFKHBvcnQpKSB7CisJCS8qCisJCSAqIFRhcmdldCBNb2RlIDogTGV0IHRoZSBmY3B0bSBoYW5kbGUgaXQKKwkJICovCisJCWJmYV9mY3NfdGluX3J4X3BybGkocnBvcnQtPnRpbiwgcnhfZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogV2UgYXJlIGVpdGhlciBpbiBJbml0aWF0b3Igb3IgaXBmYyBNb2RlCisJICovCisJcHJsaSA9IChzdHJ1Y3QgZmNfcHJsaV9zICopIChyeF9mY2hzICsgMSk7CisKKwlpZiAocHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yKSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgcHJsaS0+cGFyYW1wYWdlLnR5cGUpOworCQlycG9ydC0+c2NzaV9mdW5jdGlvbiA9IEJGQV9SUE9SVF9JTklUSUFUT1I7CisJCWJmYV9mY3NfaXRuaW1faXNfaW5pdGlhdG9yKHJwb3J0LT5pdG5pbSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQHRvZG86IFBSTEkgZnJvbSBhIHRhcmdldCA/CisJCSAqLworCQliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJCXJwb3J0LT5zY3NpX2Z1bmN0aW9uID0gQkZBX1JQT1JUX1RBUkdFVDsKKwl9CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19wcmxpX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCQliZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkLAorCQkJCXBvcnQtPnBvcnRfY2ZnLnJvbGVzKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfcnBzYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHUxNiBsZW4pCit7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY19ycHNjX3NwZWVkX2luZm9fcyBzcGVlZHM7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgcHBvcnRfYXR0cjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisKKwlycG9ydC0+c3RhdHMucnBzY19yY3ZkKys7CisJc3BlZWRzLnBvcnRfc3BlZWRfY2FwID0KKwkJUlBTQ19TUEVFRF9DQVBfMUcgfCBSUFNDX1NQRUVEX0NBUF8yRyB8IFJQU0NfU1BFRURfQ0FQXzRHIHwKKwkJUlBTQ19TUEVFRF9DQVBfOEc7CisKKwkvKgorCSAqIGdldCBjdXJlbnQgc3BlZWQgZnJvbSBwcG9ydCBhdHRyaWJ1dGVzIGZyb20gQkZBCisJICovCisJYmZhX3Bwb3J0X2dldF9hdHRyKHBvcnQtPmZjcy0+YmZhLCAmcHBvcnRfYXR0cik7CisKKwlzcGVlZHMucG9ydF9vcF9zcGVlZCA9IGZjX2JmYV9zcGVlZF90b19ycHNjX29wZXJzcGVlZChwcG9ydF9hdHRyLnNwZWVkKTsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX3Jwc2NfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkJJnNwZWVkcyk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjX2FkaXNjX3MgICAgICAqYWRpc2M7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCisJcnBvcnQtPnN0YXRzLmFkaXNjX3JjdmQrKzsKKworCWlmIChCRkFfRkNTX1ZQT1JUX0lTX1RBUkdFVF9NT0RFKHBvcnQpKSB7CisJCS8qCisJCSAqIEB0b2RvIDogVGFyZ2V0IE1vZGUgaGFuZGxpbmcKKwkJICovCisJCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwkJcmV0dXJuOworCX0KKworCWFkaXNjID0gKHN0cnVjdCBmY19hZGlzY19zICopIChyeF9mY2hzICsgMSk7CisKKwkvKgorCSAqIEFjY2VwdCBpZiB0aGUgaXRuaW0gZm9yIHRoaXMgcnBvcnQgaXMgb25saW5lLiBFbHNlIHJlamVjdCB0aGUgQURJU0MKKwkgKi8KKwlpZiAoYmZhX2Zjc19pdG5pbV9nZXRfb25saW5lX3N0YXRlKHJwb3J0LT5pdG5pbSkgPT0gQkZBX1NUQVRVU19PSykgeworCisJCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwkJaWYgKCFmY3hwKQorCQkJcmV0dXJuOworCisJCWxlbiA9IGZjX2FkaXNjX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQkJIHJ4X2ZjaHMtPnNfaWQsCisJCQkJCSBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJCSByeF9mY2hzLT5veF9pZCwgcG9ydC0+cG9ydF9jZmcucHd3biwKKwkJCQkJIHBvcnQtPnBvcnRfY2ZnLm53d24pOworCisJCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLAorCQkJICAgICAgRkNfTUFYX1BEVVNaLCAwKTsKKwl9IGVsc2UgeworCQlycG9ydC0+c3RhdHMuYWRpc2NfcmVqZWN0ZWQrKzsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2xzX3JqdChycG9ydCwgcnhfZmNocywKKwkJCQkJICBGQ19MU19SSlRfUlNOX1VOQUJMRV9UT19QRVJGX0NNRCwKKwkJCQkJICBGQ19MU19SSlRfRVhQX0xPR0lOX1JFUVVJUkVEKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfaGFsX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2luZm9fcyBycG9ydF9pbmZvOworCisJcnBvcnRfaW5mby5waWQgPSBycG9ydC0+cGlkOworCXJwb3J0X2luZm8ubG9jYWxfcGlkID0gcG9ydC0+cGlkOworCXJwb3J0X2luZm8ubHBfdGFnID0gcG9ydC0+bHBfdGFnOworCXJwb3J0X2luZm8udmZfaWQgPSBwb3J0LT5mYWJyaWMtPnZmX2lkOworCXJwb3J0X2luZm8udmZfZW4gPSBwb3J0LT5mYWJyaWMtPmlzX3ZmOworCXJwb3J0X2luZm8uZmNfY2xhc3MgPSBycG9ydC0+ZmNfY29zOworCXJwb3J0X2luZm8uY2lzYyA9IHJwb3J0LT5jaXNjOworCXJwb3J0X2luZm8ubWF4X2ZybXN6ID0gcnBvcnQtPm1heGZyc2l6ZTsKKwliZmFfcnBvcnRfb25saW5lKHJwb3J0LT5iZmFfcnBvcnQsICZycG9ydF9pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfZmM0X3BhdXNlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHJwb3J0LT5wb3J0KSkKKwkJYmZhX2Zjc19pdG5pbV9wYXVzZShycG9ydC0+aXRuaW0pOworCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocnBvcnQtPnBvcnQpKQorCQliZmFfZmNzX3Rpbl9wYXVzZShycG9ydC0+dGluKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfZmM0X3Jlc3VtZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihycG9ydC0+cG9ydCkpCisJCWJmYV9mY3NfaXRuaW1fcmVzdW1lKHJwb3J0LT5pdG5pbSk7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChycG9ydC0+cG9ydCkpCisJCWJmYV9mY3NfdGluX3Jlc3VtZShycG9ydC0+dGluKTsKK30KKworc3RhdGljIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHB3d24sIHUzMiBycGlkKQoreworCXN0cnVjdCBiZmFfZmNzX3MgKmZjcyA9IHBvcnQtPmZjczsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgYmZhZF9ycG9ydF9zICpycG9ydF9kcnY7CisKKwkvKioKKwkgKiBhbGxvY2F0ZSBycG9ydAorCSAqLworCWlmIChiZmFfZmNiX3Jwb3J0X2FsbG9jKGZjcy0+YmZhZCwgJnJwb3J0LCAmcnBvcnRfZHJ2KQorCSAgICAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMoZmNzLCBycGlkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIHItcG9ydAorCSAqLworCXJwb3J0LT5wb3J0ID0gcG9ydDsKKwlycG9ydC0+ZmNzID0gZmNzOworCXJwb3J0LT5ycF9kcnYgPSBycG9ydF9kcnY7CisJcnBvcnQtPnBpZCA9IHJwaWQ7CisJcnBvcnQtPnB3d24gPSBwd3duOworCisJLyoqCisJICogYWxsb2NhdGUgQkZBIHJwb3J0CisJICovCisJcnBvcnQtPmJmYV9ycG9ydCA9IGJmYV9ycG9ydF9jcmVhdGUocG9ydC0+ZmNzLT5iZmEsIHJwb3J0KTsKKwlpZiAoIXJwb3J0LT5iZmFfcnBvcnQpIHsKKwkJYmZhX3RyYyhmY3MsIHJwaWQpOworCQlrZnJlZShycG9ydF9kcnYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKioKKwkgKiBhbGxvY2F0ZSBGQy00cworCSAqLworCWJmYV9hc3NlcnQoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSBeCisJCSAgIGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpOworCisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocG9ydCkpIHsKKwkJcnBvcnQtPml0bmltID0gYmZhX2Zjc19pdG5pbV9jcmVhdGUocnBvcnQpOworCQlpZiAoIXJwb3J0LT5pdG5pbSkgeworCQkJYmZhX3RyYyhmY3MsIHJwaWQpOworCQkJYmZhX3Jwb3J0X2RlbGV0ZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJCWtmcmVlKHJwb3J0X2Rydik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKSB7CisJCXJwb3J0LT50aW4gPSBiZmFfZmNzX3Rpbl9jcmVhdGUocnBvcnQpOworCQlpZiAoIXJwb3J0LT50aW4pIHsKKwkJCWJmYV90cmMoZmNzLCBycGlkKTsKKwkJCWJmYV9ycG9ydF9kZWxldGUocnBvcnQtPmJmYV9ycG9ydCk7CisJCQlrZnJlZShycG9ydF9kcnYpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwliZmFfZmNzX3BvcnRfYWRkX3Jwb3J0KHBvcnQsIHJwb3J0KTsKKworCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgUnBvcnQgRmVhdHVyZXMoUlBGKSBTdWIgTW9kdWxlCisJICovCisJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCWJmYV9mY3NfcnBmX2luaXQocnBvcnQpOworCisJcmV0dXJuIHJwb3J0OworfQorCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwkvKioKKwkgKiAtIGRlbGV0ZSBGQy00cworCSAqIC0gZGVsZXRlIEJGQSBycG9ydAorCSAqIC0gcmVtb3ZlIGZyb20gcXVldWUgb2YgcnBvcnRzCisJICovCisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocG9ydCkpCisJCWJmYV9mY3NfaXRuaW1fZGVsZXRlKHJwb3J0LT5pdG5pbSk7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSkKKwkJYmZhX2Zjc190aW5fZGVsZXRlKHJwb3J0LT50aW4pOworCisJYmZhX3Jwb3J0X2RlbGV0ZShycG9ydC0+YmZhX3Jwb3J0KTsKKwliZmFfZmNzX3BvcnRfZGVsX3Jwb3J0KHBvcnQsIHJwb3J0KTsKKwlrZnJlZShycG9ydC0+cnBfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCSAgICAgICBlbnVtIGJmYV9ycG9ydF9hZW5fZXZlbnQgZXZlbnQsCisJCSAgICAgICBzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgKmRhdGEpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHJwb3J0LT5mY3MtPmxvZ207CisJd3duX3QgICAgICAgICAgIGxwd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHJwb3J0LT5wb3J0KTsKKwl3d25fdCAgICAgICAgICAgcnB3d24gPSBycG9ydC0+cHd3bjsKKwljaGFyICAgICAgICAgICAgbHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICBycHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJY2hhciAgICAgICAgICAgKnByaW9fc3RyW10gPSB7ICJ1bmtub3duIiwgImhpZ2giLCAibWVkaXVtIiwgImxvdyIgfTsKKworCXd3bjJzdHIobHB3d25fcHRyLCBscHd3bik7CisJd3duMnN0cihycHd3bl9wdHIsIHJwd3duKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9BRU5fT05MSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9SUE9SVF9PTkxJTkUsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUlBPUlRfQUVOX09GRkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1JQT1JUX09GRkxJTkUsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUlBPUlRfQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1JQT1JUX0RJU0NPTk5FQ1QsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUlBPUlRfQUVOX1FPU19QUklPOgorCQlhZW5fZGF0YS5ycG9ydC5wcml2LnFvcyA9IGRhdGEtPnByaXYucW9zOworCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9SUE9SVF9RT1NfUFJJTywKKwkJCXByaW9fc3RyW2Flbl9kYXRhLnJwb3J0LnByaXYucW9zLnFvc19wcmlvcml0eV0sCisJCQlycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1JQT1JUX0FFTl9RT1NfRkxPV0lEOgorCQlhZW5fZGF0YS5ycG9ydC5wcml2LnFvcyA9IGRhdGEtPnByaXYucW9zOworCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lELAorCQkJYWVuX2RhdGEucnBvcnQucHJpdi5xb3MucW9zX2Zsb3dfaWQsIHJwd3duX3B0ciwKKwkJCWxwd3duX3B0cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFlbl9kYXRhLnJwb3J0LnZmX2lkID0gcnBvcnQtPnBvcnQtPmZhYnJpYy0+dmZfaWQ7CisJYWVuX2RhdGEucnBvcnQucHB3d24gPQorCQliZmFfZmNzX3BvcnRfZ2V0X3B3d24oYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHJwb3J0LT5mY3MpKTsKKwlhZW5fZGF0YS5ycG9ydC5scHd3biA9IGxwd3duOworCWFlbl9kYXRhLnJwb3J0LnJwd3duID0gcnB3d247Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X29ubGluZV9hY3Rpb24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwlycG9ydC0+c3RhdHMub25saW5lcysrOworCisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocG9ydCkpIHsKKwkJYmZhX2Zjc19pdG5pbV9ycG9ydF9vbmxpbmUocnBvcnQtPml0bmltKTsKKwkJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCQliZmFfZmNzX3JwZl9ycG9ydF9vbmxpbmUocnBvcnQpOworCX07CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSkKKwkJYmZhX2Zjc190aW5fcnBvcnRfb25saW5lKHJwb3J0LT50aW4pOworCisJLyoKKwkgKiBEb24ndCBwb3N0IGV2ZW50cyBmb3Igd2VsbCBrbm93biBhZGRyZXNzZXMKKwkgKi8KKwlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChycG9ydCwgQkZBX1JQT1JUX0FFTl9PTkxJTkUsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKworCXJwb3J0LT5zdGF0cy5vZmZsaW5lcysrOworCisJLyoKKwkgKiBEb24ndCBwb3N0IGV2ZW50cyBmb3Igd2VsbCBrbm93biBhZGRyZXNzZXMKKwkgKi8KKwlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkgeworCQlpZiAoYmZhX2Zjc19wb3J0X2lzX29ubGluZShycG9ydC0+cG9ydCkgPT0gQkZBX1RSVUUpIHsKKwkJCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsIEJGQV9SUE9SVF9BRU5fRElTQ09OTkVDVCwKKwkJCQkJICAgICAgIE5VTEwpOworCQl9IGVsc2UgeworCQkJYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChycG9ydCwgQkZBX1JQT1JUX0FFTl9PRkZMSU5FLAorCQkJCQkgICAgICAgTlVMTCk7CisJCX0KKwl9CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkgeworCQliZmFfZmNzX2l0bmltX3Jwb3J0X29mZmxpbmUocnBvcnQtPml0bmltKTsKKwkJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCQliZmFfZmNzX3JwZl9ycG9ydF9vZmZsaW5lKHJwb3J0KTsKKwl9CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSkKKwkJYmZhX2Zjc190aW5fcnBvcnRfb2ZmbGluZShycG9ydC0+dGluKTsKK30KKworLyoqCisgKiBVcGRhdGUgcnBvcnQgcGFyYW1ldGVycyBmcm9tIFBMT0dJIG9yIFBMT0dJIGFjY2VwdC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfdXBkYXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKworCS8qKgorCSAqIC0gcG9ydCBuYW1lCisJICogLSBub2RlIG5hbWUKKwkgKi8KKwlycG9ydC0+cHd3biA9IHBsb2dpLT5wb3J0X25hbWU7CisJcnBvcnQtPm53d24gPSBwbG9naS0+bm9kZV9uYW1lOworCisJLyoqCisJICogLSBjbGFzcyBvZiBzZXJ2aWNlCisJICovCisJcnBvcnQtPmZjX2NvcyA9IDA7CisJaWYgKHBsb2dpLT5jbGFzczMuY2xhc3NfdmFsaWQpCisJCXJwb3J0LT5mY19jb3MgPSBGQ19DTEFTU18zOworCisJaWYgKHBsb2dpLT5jbGFzczIuY2xhc3NfdmFsaWQpCisJCXJwb3J0LT5mY19jb3MgfD0gRkNfQ0xBU1NfMjsKKworCS8qKgorCSAqIC0gQ0lTQworCSAqIC0gTUFYIHJlY2VpdmUgZnJhbWUgc2l6ZQorCSAqLworCXJwb3J0LT5jaXNjID0gcGxvZ2ktPmNzcC5jaXNjOworCXJwb3J0LT5tYXhmcnNpemUgPSBiZmFfb3NfbnRvaHMocGxvZ2ktPmNsYXNzMy5yeHN6KTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBiZmFfb3NfbnRvaHMocGxvZ2ktPmNzcC5iYmNyZWQpKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+ZmFicmljLT5iYl9jcmVkaXQpOworCS8qKgorCSAqIERpcmVjdCBBdHRhY2ggUDJQIG1vZGUgOgorCSAqIFRoaXMgaXMgdG8gaGFuZGxlIGEgYnVnICgyMzM0NzYpIGluIElCTSB0YXJnZXRzIGluIERpcmVjdCBBdHRhY2gKKwkgKiBNb2RlLiBCYXNpY2FsbHksIGluIEZMT0dJIEFjY2VwdCB0aGUgdGFyZ2V0IHdvdWxkIGhhdmUgZXJyb25lb3VzbHkKKwkgKiBzZXQgdGhlIEJCIENyZWRpdCB0byB0aGUgdmFsdWUgdXNlZCBpbiB0aGUgRkxPR0kgc2VudCBieSB0aGUgSEJBLgorCSAqIEl0IHVzZXMgdGhlIGNvcnJlY3QgdmFsdWUgKGl0cyBvd24gQkIgY3JlZGl0KSBpbiBQTE9HSS4KKwkgKi8KKwlpZiAoKCFiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChwb3J0LT5mYWJyaWMpKQorCSAgICAmJiAoYmZhX29zX250b2hzKHBsb2dpLT5jc3AuYmJjcmVkKSA8IHBvcnQtPmZhYnJpYy0+YmJfY3JlZGl0KSkgeworCisJCWJmYV90cmMocG9ydC0+ZmNzLCBiZmFfb3NfbnRvaHMocGxvZ2ktPmNzcC5iYmNyZWQpKTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+YmJfY3JlZGl0KTsKKworCQlwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCA9IGJmYV9vc19udG9ocyhwbG9naS0+Y3NwLmJiY3JlZCk7CisJCWJmYV9wcG9ydF9zZXRfdHhfYmJjcmVkaXQocG9ydC0+ZmNzLT5iZmEsCisJCQkJCSAgcG9ydC0+ZmFicmljLT5iYl9jcmVkaXQpOworCX0KKworfQorCisvKioKKyAqICAgQ2FsbGVkIHRvIGhhbmRsZSBMT0dPIHJlY2VpdmVkIGZyb20gYW4gZXhpc3RpbmcgcmVtb3RlIHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfbG9nbyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocykKK3sKKwlycG9ydC0+cmVwbHlfb3hpZCA9IGZjaHMtPm94X2lkOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnJlcGx5X294aWQpOworCisJcnBvcnQtPnN0YXRzLmxvZ29fcmN2ZCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0xPR09fUkNWRCk7Cit9CisKKworCisvKioKKyAqICBmY3NfcnBvcnRfcHVibGljIEZDUyBycG9ydCBwdWJsaWMgaW50ZXJmYWNlcworICovCisKKy8qKgorICogCUNhbGxlZCBieSBicG9ydC92cG9ydCB0byBjcmVhdGUgYSByZW1vdGUgcG9ydCBpbnN0YW5jZSBmb3IgYSBkaXNjb3ZlcmVkCisgKiAJcmVtb3RlIGRldmljZS4KKyAqCisgKiBAcGFyYW1baW5dIHBvcnQJLSBiYXNlIHBvcnQgb3IgdnBvcnQKKyAqIEBwYXJhbVtpbl0gcnBpZAktIHJlbW90ZSBwb3J0IElECisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19ycG9ydF9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1MzIgcnBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBycGlkKTsKKwlycG9ydCA9IGJmYV9mY3NfcnBvcnRfYWxsb2MocG9ydCwgV1dOX05VTEwsIHJwaWQpOworCWlmICghcnBvcnQpCisJCXJldHVybiBOVUxMOworCisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfU0VORCk7CisJcmV0dXJuIHJwb3J0OworfQorCisvKioKKyAqIENhbGxlZCB0byBjcmVhdGUgYSBycG9ydCBmb3Igd2hpY2ggb25seSB0aGUgd3duIGlzIGtub3duLgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydAktIGJhc2UgcG9ydAorICogQHBhcmFtW2luXSBycHd3bgktIHJlbW90ZSBwb3J0IHd3bgorICoKKyAqIEByZXR1cm4gTm9uZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfY3JlYXRlX2J5X3d3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJwd3duKTsKKwlycG9ydCA9IGJmYV9mY3NfcnBvcnRfYWxsb2MocG9ydCwgcnB3d24sIDApOworCWlmICghcnBvcnQpCisJCXJldHVybiBOVUxMOworCisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfQUREUkVTU19ESVNDKTsKKwlyZXR1cm4gcnBvcnQ7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGJwb3J0IGluIHByaXZhdGUgbG9vcCB0b3BvbG9neSB0byBpbmRpY2F0ZSB0aGF0IGEKKyAqIHJwb3J0IGhhcyBiZWVuIGRpc2NvdmVyZWQgYW5kIHBsb2dpIGhhcyBiZWVuIGNvbXBsZXRlZC4KKyAqCisgKiBAcGFyYW1baW5dIHBvcnQJLSBiYXNlIHBvcnQgb3IgdnBvcnQKKyAqIEBwYXJhbVtpbl0gcnBpZAktIHJlbW90ZSBwb3J0IElECisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfc3RhcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwlycG9ydCA9IGJmYV9mY3NfcnBvcnRfYWxsb2MocG9ydCwgV1dOX05VTEwsIGZjaHMtPnNfaWQpOworCWlmICghcnBvcnQpCisJCXJldHVybjsKKworCWJmYV9mY3NfcnBvcnRfdXBkYXRlKHJwb3J0LCBwbG9naSk7CisKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9DT01QKTsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBicG9ydC92cG9ydCB0byBoYW5kbGUgUExPR0kgcmVjZWl2ZWQgZnJvbSBhIG5ldyByZW1vdGUgcG9ydC4KKyAqICAgSWYgYW4gZXhpc3RpbmcgcnBvcnQgZG9lcyBhIHBsb2dpLCBpdCB3aWxsIGJlIGhhbmRsZWQgc2VwYXJhdGVseS4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9wbG9naV9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJICAgc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwlycG9ydCA9IGJmYV9mY3NfcnBvcnRfYWxsb2MocG9ydCwgcGxvZ2ktPnBvcnRfbmFtZSwgZmNocy0+c19pZCk7CisJaWYgKCFycG9ydCkKKwkJcmV0dXJuOworCisJYmZhX2Zjc19ycG9ydF91cGRhdGUocnBvcnQsIHBsb2dpKTsKKworCXJwb3J0LT5yZXBseV9veGlkID0gZmNocy0+b3hfaWQ7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cmVwbHlfb3hpZCk7CisKKwlycG9ydC0+c3RhdHMucGxvZ2lfcmN2ZCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1BMT0dJX1JDVkQpOworfQorCitzdGF0aWMgaW50Cit3d25fY29tcGFyZSh3d25fdCB3d24xLCB3d25fdCB3d24yKQoreworCXU4ICAgICAgICAqYjEgPSAodTggKikgJnd3bjE7CisJdTggICAgICAgICpiMiA9ICh1OCAqKSAmd3duMjsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yod3duX3QpOyBpKyspIHsKKwkJaWYgKGIxW2ldIDwgYjJbaV0pCisJCQlyZXR1cm4gLTE7CisJCWlmIChiMVtpXSA+IGIyW2ldKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGJwb3J0L3Zwb3J0IHRvIGhhbmRsZSBQTE9HSSByZWNlaXZlZCBmcm9tIGFuIGV4aXN0aW5nCisgKiAJIHJlbW90ZSBwb3J0LgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkgICAgc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpCit7CisJLyoqCisJICogQHRvZG8gSGFuZGxlIFAyUCBhbmQgaW5pdGlhdG9yLWluaXRpYXRvci4KKwkgKi8KKworCWJmYV9mY3NfcnBvcnRfdXBkYXRlKHJwb3J0LCBwbG9naSk7CisKKwlycG9ydC0+cmVwbHlfb3hpZCA9IHJ4X2ZjaHMtPm94X2lkOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnJlcGx5X294aWQpOworCisJLyoqCisJICogSW4gU3dpdGNoZWQgZmFicmljIHRvcG9sb2d5LAorCSAqIFBMT0dJIHRvIGVhY2ggb3RoZXIuIElmIG91ciBwd3duIGlzIHNtYWxsZXIsIGlnbm9yZSBpdCwKKwkgKiBpZiBpdCBpcyBub3QgYSB3ZWxsIGtub3duIGFkZHJlc3MuCisJICogSWYgdGhlIGxpbmsgdG9wb2xvZ3kgaXMgTjJOLAorCSAqIHRoaXMgUGxvZ2kgc2hvdWxkIGJlIGFjY2VwdGVkLgorCSAqLworCWlmICgod3duX2NvbXBhcmUocnBvcnQtPnBvcnQtPnBvcnRfY2ZnLnB3d24sIHJwb3J0LT5wd3duKSA9PSAtMSkKKwkgICAgJiYgKGJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHJwb3J0LT5wb3J0LT5mYWJyaWMpKQorCSAgICAmJiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkpIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwkJcmV0dXJuOworCX0KKworCXJwb3J0LT5zdGF0cy5wbG9naV9yY3ZkKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfUkNWRCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGJwb3J0L3Zwb3J0IHRvIGRlbGV0ZSBhIHJlbW90ZSBwb3J0IGluc3RhbmNlLgorICoKKyogUnBvcnQgZGVsZXRlIGlzIGNhbGxlZCB1bmRlciB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAJCS0gdnBvcnQgaXMgZGVsZXRlZAorICogCQktIHZmIGlzIGRlbGV0ZWQKKyAqIAkJLSBleHBsaWNpdCByZXF1ZXN0IGZyb20gT1MgdG8gZGVsZXRlIHJwb3J0ICh2bXdhcmUpCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0RFTEVURSk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGJwb3J0L3Zwb3J0IHRvICB3aGVuIGEgdGFyZ2V0IGdvZXMgb2ZmbGluZS4KKyAqCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9MT0dPX0lNUCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGJwb3J0IGluIG4ybiB3aGVuIGEgdGFyZ2V0IChhdHRhY2hlZCBwb3J0KSBiZWNvbWVzIG9ubGluZS4KKyAqCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1BMT0dJX1NFTkQpOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGJwb3J0L3Zwb3J0IHRvIG5vdGlmeSBTQ04gZm9yIHRoZSByZW1vdGUgcG9ydAorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3NjbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKworCXJwb3J0LT5zdGF0cy5yc2NucysrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1NDTik7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgIGZjcGltIHRvIG5vdGlmeSB0aGF0IHRoZSBJVE4gY2xlYW51cCBpcyBkb25lLgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQzRfT0ZGTElORSk7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNwdG0gdG8gbm90aWZ5IHRoYXQgdGhlIElUTiBjbGVhbnVwIGlzIGRvbmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfdGluX2FjayhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQzRfT0ZGTElORSk7Cit9CisKKy8qKgorICogICAgIFRoaXMgcm91dGluZSBCRkEgY2FsbGJhY2sgZm9yIGJmYV9ycG9ydF9vbmxpbmUoKSBjYWxsLgorICoKKyAqIAlwYXJhbVtpbl0gCWNiX2FyZwktICBycG9ydCBzdHJ1Y3QuCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorKiAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCit2b2lkCitiZmFfY2JfcnBvcnRfb25saW5lKHZvaWQgKmNiYXJnKQoreworCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfSENCX09OTElORSk7Cit9CisKKy8qKgorICogICAgIFRoaXMgcm91dGluZSBCRkEgY2FsbGJhY2sgZm9yIGJmYV9ycG9ydF9vZmZsaW5lKCkgY2FsbC4KKyAqCisgKiAJcGFyYW1baW5dIAlycG9ydCAJLQorICoKKyAqIAlyZXR1cm4KKyAqIAkJdm9pZAorICoKKyAqIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3ZvaWQKK2JmYV9jYl9ycG9ydF9vZmZsaW5lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0hDQl9PRkZMSU5FKTsKK30KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBzdGF0aWMgQkZBIGNhbGxiYWNrIHdoZW4gdGhlcmUgaXMgYSBRb1MgZmxvd19pZAorICogY2hhbmdlIG5vdGlmaWNhdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gCXJwb3J0IAktCisgKgorICogQHJldHVybiAgCXZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIEBub3RlCisgKi8KK3ZvaWQKK2JmYV9jYl9ycG9ydF9xb3Nfc2NuX2Zsb3dpZCh2b2lkICpjYmFyZywKKwkJCSAgICBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyLAorCQkJICAgIHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBuZXdfcW9zX2F0dHIpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyBhZW5fZGF0YTsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWFlbl9kYXRhLnByaXYucW9zID0gbmV3X3Fvc19hdHRyOworCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsIEJGQV9SUE9SVF9BRU5fUU9TX0ZMT1dJRCwgJmFlbl9kYXRhKTsKK30KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBzdGF0aWMgQkZBIGNhbGxiYWNrIHdoZW4gdGhlcmUgaXMgYSBRb1MgcHJpb3JpdHkKKyAqIGNoYW5nZSBub3RpZmljYXRpb24KKyAqCisgKiBAcGFyYW1baW5dIAlycG9ydCAJLQorICoKKyAqIEByZXR1cm4gCXZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIEBub3RlCisgKi8KK3ZvaWQKK2JmYV9jYl9ycG9ydF9xb3Nfc2NuX3ByaW8odm9pZCAqY2JhcmcsIHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBvbGRfcW9zX2F0dHIsCisJCQkgIHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBuZXdfcW9zX2F0dHIpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyBhZW5fZGF0YTsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWFlbl9kYXRhLnByaXYucW9zID0gbmV3X3Fvc19hdHRyOworCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsIEJGQV9SUE9SVF9BRU5fUU9TX1BSSU8sICZhZW5fZGF0YSk7Cit9CisKKy8qKgorICogCQlDYWxsZWQgdG8gcHJvY2VzcyBhbnkgdW5zb2xpY3RlZCBmcmFtZXMgZnJvbSB0aGlzIHJlbW90ZSBwb3J0CisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfbG9nb19pbXAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfTE9HT19JTVApOworfQorCisvKioKKyAqIAkJQ2FsbGVkIHRvIHByb2Nlc3MgYW55IHVuc29saWN0ZWQgZnJhbWVzIGZyb20gdGhpcyByZW1vdGUgcG9ydAorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+c19pZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBmY2hzLT5kX2lkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGZjaHMtPnR5cGUpOworCisJaWYgKGZjaHMtPnR5cGUgIT0gRkNfVFlQRV9FTFMpCisJCXJldHVybjsKKworCWVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisJY2FzZSBGQ19FTFNfTE9HTzoKKwkJYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2xvZ28ocnBvcnQsIGZjaHMpOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX0FESVNDOgorCQliZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfYWRpc2MocnBvcnQsIGZjaHMsIGxlbik7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfUFJMTzoKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocG9ydCkpCisJCQliZmFfZmNzX2ZjcGltX3VmX3JlY3YocnBvcnQtPml0bmltLCBmY2hzLCBsZW4pOworCisJCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKQorCQkJYmZhX2Zjc19mY3B0bV91Zl9yZWN2KHJwb3J0LT50aW4sIGZjaHMsIGxlbik7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfUFJMSToKKwkJYmZhX2Zjc19ycG9ydF9wcm9jZXNzX3BybGkocnBvcnQsIGZjaHMsIGxlbik7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfUlBTQzoKKwkJYmZhX2Zjc19ycG9ydF9wcm9jZXNzX3Jwc2MocnBvcnQsIGZjaHMsIGxlbik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2xzX3JqdChycG9ydCwgZmNocywKKwkJCQkJICBGQ19MU19SSlRfUlNOX0NNRF9OT1RfU1VQUCwKKwkJCQkJICBGQ19MU19SSlRfRVhQX05PX0FERExfSU5GTyk7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFNlbmQgYSBMUyByZWplY3QKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9sc19yanQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQkgIHU4IHJlYXNvbl9jb2RlLCB1OCByZWFzb25fY29kZV9leHBsKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocnBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19sc19yanRfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkLAorCQkJICAgICAgcmVhc29uX2NvZGUsIHJlYXNvbl9jb2RlX2V4cGwpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworLyoqCisgKiAgIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQorCisvKioKKyAqIFJldHVybiBzdGF0ZSBvZiBycG9ydC4KKyAqLworaW50CitiZmFfZmNzX3Jwb3J0X2dldF9zdGF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlyZXR1cm4gYmZhX3NtX3RvX3N0YXRlKHJwb3J0X3NtX3RhYmxlLCBycG9ydC0+c20pOworfQorCisvKioKKyAqIAkJIENhbGxlZCBieSB0aGUgRHJpdmVyIHRvIHNldCBycG9ydCBkZWxldGUvYWdlb3V0IHRpbWVvdXQKKyAqCisgKiAJcGFyYW1baW5dCQlycG9ydCB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfc2V0X2RlbF90aW1lb3V0KHU4IHJwb3J0X3RtbykKK3sKKwkvKgorCSAqIGNvbnZlcnQgdG8gTWlsbGlzZWNzCisJICovCisJaWYgKHJwb3J0X3RtbyA+IDApCisJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQgPSBycG9ydF90bW8gKiAxMDAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9hcGkuYyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhZTE3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfYXBpLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX3Zwb3J0LmgiCisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBSUE9SVF9BUEkpOworCisvKioKKyAqICBycG9ydF9hcGkuYyBSZW1vdGUgcG9ydCBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisvKioKKyAqICBmY3NfcnBvcnRfYXBpIEZDUyBycG9ydCBBUEkuCisgKi8KKworLyoqCisgKiAJRGlyZWN0IEFQSSB0byBhZGQgYSB0YXJnZXQgYnkgcG9ydCB3d24uIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQsIGZvcgorICoJZXhhbXBsZSwgYnkgYmlvcyB3aGVuIHRhcmdldCBwd3duIGlzIGtub3duIGZyb20gYm9vdCBsdW4gY29uZmlndXJhdGlvbi4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Jwb3J0X2FkZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90ICpwd3duLAorCQkJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhZF9ycG9ydF9zICpycG9ydF9kcnYpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsICpwd3duKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqCURpcmVjdCBBUEkgdG8gcmVtb3ZlIGEgdGFyZ2V0IGFuZCBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuIFRoaXMKKyAqCWludGVyZmFjZSBpcyB1c2VkLCBmb3IgZXhhbXBsZSwgYnkgdm13YXJlIGRyaXZlciB0byByZW1vdmUgdGFyZ2V0CisgKglwb3J0cyBmcm9tIHRoZSB0YXJnZXQgbGlzdCBmb3IgYSBWTS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Jwb3J0X3JlbW92ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydF9pbikKK3sKKworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhycG9ydF9pbi0+ZmNzLCBycG9ydF9pbi0+cHd3bik7CisKKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihycG9ydF9pbi0+cG9ydCwgcnBvcnRfaW4tPnB3d24pOworCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRCRCBFcnJvciBoYW5kbGluZworCQkgKi8KKwkJYmZhX3RyYyhycG9ydF9pbi0+ZmNzLCBycG9ydF9pbi0+cGlkKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVU5LTk9XTl9SV1dOOworCX0KKworCS8qCisJICogVEJEIGlmIHRoaXMgcmVtb3RlIHBvcnQgaXMgb25saW5lLCBzZW5kIGEgbG9nbworCSAqLworCXJldHVybiBCRkFfU1RBVFVTX09LOworCit9CisKKy8qKgorICoJUmVtb3RlIGRldmljZSBzdGF0dXMgZm9yIGRpc3BsYXkvZGVidWcuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X2F0dHJfcyAqcnBvcnRfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgcW9zX2F0dHI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwliZmFfb3NfbWVtc2V0KHJwb3J0X2F0dHIsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Jwb3J0X2F0dHJfcykpOworCisJcnBvcnRfYXR0ci0+cGlkID0gcnBvcnQtPnBpZDsKKwlycG9ydF9hdHRyLT5wd3duID0gcnBvcnQtPnB3d247CisJcnBvcnRfYXR0ci0+bnd3biA9IHJwb3J0LT5ud3duOworCXJwb3J0X2F0dHItPmNvc19zdXBwb3J0ZWQgPSBycG9ydC0+ZmNfY29zOworCXJwb3J0X2F0dHItPmRmX3N6ID0gcnBvcnQtPm1heGZyc2l6ZTsKKwlycG9ydF9hdHRyLT5zdGF0ZSA9IGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHJwb3J0KTsKKwlycG9ydF9hdHRyLT5mY19jb3MgPSBycG9ydC0+ZmNfY29zOworCXJwb3J0X2F0dHItPmNpc2MgPSBycG9ydC0+Y2lzYzsKKwlycG9ydF9hdHRyLT5zY3NpX2Z1bmN0aW9uID0gcnBvcnQtPnNjc2lfZnVuY3Rpb247CisJcnBvcnRfYXR0ci0+Y3Vycl9zcGVlZCAgPSBycG9ydC0+cnBmLnJwc2Nfc3BlZWQ7CisJcnBvcnRfYXR0ci0+YXNzaWduZWRfc3BlZWQgID0gcnBvcnQtPnJwZi5hc3NpZ25lZF9zcGVlZDsKKworCWJmYV9ycG9ydF9nZXRfcW9zX2F0dHIocnBvcnQtPmJmYV9ycG9ydCwgJnFvc19hdHRyKTsKKwlycG9ydF9hdHRyLT5xb3NfYXR0ciA9IHFvc19hdHRyOworCisJcnBvcnRfYXR0ci0+dHJsX2VuZm9yY2VkID0gQkZBX0ZBTFNFOworCWlmIChiZmFfcHBvcnRfaXNfcmF0ZWxpbShwb3J0LT5mY3MtPmJmYSkpIHsKKwkJaWYgKChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pIHx8CisJCQkocnBvcnQtPnJwZi5ycHNjX3NwZWVkIDwKKwkJCWJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfbWF4X3NwZWVkKHBvcnQpKSkKKwkJCXJwb3J0X2F0dHItPnRybF9lbmZvcmNlZCA9IEJGQV9UUlVFOworCX0KKworCS8qCisJICogVE9ETworCSAqIHJwb3J0LT5zeW1uYW1lCisJICovCit9CisKKy8qKgorICogCVBlciByZW1vdGUgZGV2aWNlIHN0YXRpc3RpY3MuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zICpzdGF0cykKK3sKKwkqc3RhdHMgPSBycG9ydC0+c3RhdHM7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcnBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX29zX21lbXNldCgoY2hhciAqKSZycG9ydC0+c3RhdHMsIDAsCisJCQlzaXplb2Yoc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zKSk7Cit9CisKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19ycG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9wd3duKHBvcnQsIHJwd3duKTsKKwlpZiAocnBvcnQgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUQkQgRXJyb3IgaGFuZGxpbmcKKwkJICovCisJfQorCisJcmV0dXJuIHJwb3J0OworfQorCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfbG9va3VwX2J5X253d24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBybnd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9ud3duKHBvcnQsIHJud3duKTsKKwlpZiAocnBvcnQgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUQkQgRXJyb3IgaGFuZGxpbmcKKwkJICovCisJfQorCisJcmV0dXJuIHJwb3J0OworfQorCisvKgorICogVGhpcyBBUEkgaXMgdG8gc2V0IHRoZSBScG9ydCdzIHNwZWVkLiBTaG91bGQgYmUgdXNlZCB3aGVuIFJQU0MgaXMgbm90CisgKiBzdXBwb3J0ZWQgYnkgdGhlIHJwb3J0LgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3NldF9zcGVlZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKQoreworCXJwb3J0LT5ycGYuYXNzaWduZWRfc3BlZWQgID0gc3BlZWQ7CisKKwkvKiBTZXQgdGhpcyBzcGVlZCBpbiBmL3cgb25seSBpZiB0aGUgUlBTQyBzcGVlZCBpcyBub3QgYXZhaWxhYmxlICovCisJaWYgKHJwb3J0LT5ycGYucnBzY19zcGVlZCA9PSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTikKKwkJYmZhX3Jwb3J0X3NwZWVkKHJwb3J0LT5iZmFfcnBvcnQsIHNwZWVkKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2Z0cnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfZnRycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMWY1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2Z0cnMuYwpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBycG9ydF9mdHJzLmMgUmVtb3RlIHBvcnQgZmVhdHVyZXMgKFJQRikgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY2J1aWxkLmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAiZmNzLmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFJQT1JUX0ZUUlMpOworCisjZGVmaW5lIEJGQV9GQ1NfUlBGX1JFVFJJRVMJKDMpCisjZGVmaW5lIEJGQV9GQ1NfUlBGX1JFVFJZX1RJTUVPVVQgICgxMDAwKSAvKiAxIHNlYyAoSW4gbWlsbGlzZWNzKSAqLworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfc2VuZF9ycHNjMih2b2lkICpycG9ydF9jYmFyZywKKwkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3Jwc2MyX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCXUzMiByZXNpZF9sZW4sCisJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfdGltZW91dCh2b2lkICphcmcpOworCisvKioKKyAqICBmY3NfcnBvcnRfZnRyc19zbSBGQ1MgcnBvcnQgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworCitlbnVtIHJwZl9ldmVudCB7CisJUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSAgPSAxLCAgICAgLyogIFJwb3J0IG9mZmxpbmUgICAgICAgICAgICAqLworCVJQRlNNX0VWRU5UX1JQT1JUX09OTElORSAgID0gMiwgICAgIC8qICBScG9ydCBvbmxpbmUgICAgICAgICAgICAqLworCVJQRlNNX0VWRU5UX0ZDWFBfU0VOVCAgICAgID0gMywgICAgLyogIEZyYW1lIGZyb20gaGFzIGJlZW4gc2VudCAqLworCVJQRlNNX0VWRU5UX1RJTUVPVVQgIAkgICA9IDQsICAgIC8qICBScG9ydCBTTSB0aW1lb3V0IGV2ZW50ICAgKi8KKwlSUEZTTV9FVkVOVF9SUFNDX0NPTVAgICAgICA9IDUsCisJUlBGU01fRVZFTlRfUlBTQ19GQUlMICAgICAgPSA2LAorCVJQRlNNX0VWRU5UX1JQU0NfRVJST1IgICAgID0gNywKK307CisKK3N0YXRpYyB2b2lkCWJmYV9mY3NfcnBmX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQllbnVtIHJwZl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfc21fcnBzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCSAgICAgICBlbnVtIHJwZl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfc21fcnBzYyhzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQkgICAgICAgZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgCWJmYV9mY3NfcnBmX3NtX3Jwc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJCQllbnVtIHJwZl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQkJCWVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJCQllbnVtIHJwZl9ldmVudCBldmVudCk7CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09OTElORSA6CisJCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fcnBzY19zZW5kaW5nKTsKKwkJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJCWJmYV9mY3NfcnBmX3NlbmRfcnBzYzIocnBmLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9OworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2MpOworCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycGYtPmZjeHBfd3FlKTsKKwkJcnBmLT5ycHNjX3JldHJpZXMgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fcnBzYyhzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfUlBTQ19DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb25saW5lKTsKKwkJLyogVXBkYXRlIHNwZWVkIGluZm8gaW4gZi93IHZpYSBCRkEgKi8KKwkJaWYgKHJwZi0+cnBzY19zcGVlZCAhPSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTikgeworCQkJYmZhX3Jwb3J0X3NwZWVkKHJwb3J0LT5iZmFfcnBvcnQsIHJwZi0+cnBzY19zcGVlZCk7CisJCX0gZWxzZSBpZiAocnBmLT5hc3NpZ25lZF9zcGVlZCAhPSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTikgeworCQkJYmZhX3Jwb3J0X3NwZWVkKHJwb3J0LT5iZmFfcnBvcnQsIHJwZi0+YXNzaWduZWRfc3BlZWQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUFNDX0ZBSUw6CisJCS8qIFJQU0Mgbm90IHN1cHBvcnRlZCBieSBycG9ydCAqLworCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb25saW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQU0NfRVJST1I6CisJCS8qIG5lZWQgdG8gcmV0cnkuLi5kZWxheWVkIGEgYml0LiAqLworCQlpZiAocnBmLT5ycHNjX3JldHJpZXMrKyA8IEJGQV9GQ1NfUlBGX1JFVFJJRVMpIHsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycGYtPnRpbWVyLAorCQkJCSAgICBiZmFfZmNzX3JwZl90aW1lb3V0LCBycGYsCisJCQkJICAgIEJGQV9GQ1NfUlBGX1JFVFJZX1RJTUVPVVQpOworCQkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2NfcmV0cnkpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29ubGluZSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBmLT5mY3hwKTsKKwkJcnBmLT5ycHNjX3JldHJpZXMgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fcnBzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfVElNRU9VVCA6CisJCS8qIHJlLXNlbmQgdGhlIFJQU0MgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyk7CisJCWJmYV9mY3NfcnBmX3NlbmRfcnBzYzIocnBmLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQliZmFfdGltZXJfc3RvcCgmcnBmLT50aW1lcik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKTsKKwkJcnBmLT5ycHNjX3JldHJpZXMgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUpOworCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PTkxJTkUgOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fcnBzY19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycGZfc2VuZF9ycHNjMihycGYsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisvKioKKyAqIENhbGxlZCB3aGVuIFJwb3J0IGlzIGNyZWF0ZWQuCisgKi8KK3ZvaWQgIGJmYV9mY3NfcnBmX2luaXQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiA9ICZycG9ydC0+cnBmOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwlycGYtPnJwb3J0ID0gcnBvcnQ7CisKKwliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fdW5pbml0KTsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiBScG9ydCBiZWNvbWVzIG9ubGluZQorICovCit2b2lkICBiZmFfZmNzX3JwZl9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCWlmIChfX2Zjc19taW5fY2ZnKHJwb3J0LT5wb3J0LT5mY3MpKQorCQlyZXR1cm47CisKKwlpZiAoYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocnBvcnQtPnBvcnQtPmZhYnJpYykpCisJCWJmYV9zbV9zZW5kX2V2ZW50KCZycG9ydC0+cnBmLCBSUEZTTV9FVkVOVF9SUE9SVF9PTkxJTkUpOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIFJwb3J0IGJlY29tZXMgb2ZmbGluZQorICovCit2b2lkICBiZmFfZmNzX3JwZl9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlpZiAoX19mY3NfbWluX2NmZyhycG9ydC0+cG9ydC0+ZmNzKSkKKwkJcmV0dXJuOworCisJYmZhX3NtX3NlbmRfZXZlbnQoJnJwb3J0LT5ycGYsIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiA9IChzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqKSBhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX1RJTUVPVVQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc2VuZF9ycHNjMih2b2lkICpycGZfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiAJPSAoc3RydWN0IGJmYV9mY3NfcnBmX3MgKilycGZfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycGYtPmZjeHBfd3FlLAorCQkJCQliZmFfZmNzX3JwZl9zZW5kX3Jwc2MyLCBycGYpOworCQlyZXR1cm47CisJfQorCXJwZi0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19ycHNjMl9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnBvcnQtPnBpZCwKKwkJCSAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksICZycG9ydC0+cGlkLCAxKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCQkgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcnBmX3Jwc2MyX3Jlc3BvbnNlLAorCQkJICBycGYsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKwlycG9ydC0+c3RhdHMucnBzY19zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9GQ1hQX1NFTlQpOworCit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9ycHNjMl9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCSAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQkgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiA9IChzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqKSBjYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisJc3RydWN0IGZjX3Jwc2MyX2FjY19zICAqcnBzYzJfYWNjOworCXUxNiAgICAgICAgbnVtX2VudHM7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlpZiAocmVxX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCXJwb3J0LT5zdGF0cy5ycHNjX2ZhaWxlZCsrOworCQliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX1JQU0NfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJcnBzYzJfYWNjID0gKHN0cnVjdCBmY19ycHNjMl9hY2NfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWlmIChycHNjMl9hY2MtPmVsc19jbWQgPT0gRkNfRUxTX0FDQykgeworCQlycG9ydC0+c3RhdHMucnBzY19hY2NzKys7CisJCW51bV9lbnRzID0gYmZhX29zX250b2hzKHJwc2MyX2FjYy0+bnVtX3BpZHMpOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIG51bV9lbnRzKTsKKwkJaWYgKG51bV9lbnRzID4gMCkgeworCQkJYmZhX2Fzc2VydChycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5waWQgIT0gcnBvcnQtPnBpZCk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsCisJCQkJYmZhX29zX250b2hzKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnBpZCkpOworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLAorCQkJCWJmYV9vc19udG9ocyhycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5zcGVlZCkpOworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLAorCQkJCWJmYV9vc19udG9ocyhycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5pbmRleCkpOworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLAorCQkJCXJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnR5cGUpOworCisJCQlpZiAocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0uc3BlZWQgPT0gMCkgeworCQkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfUlBTQ19FUlJPUik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlycGYtPnJwc2Nfc3BlZWQgPSBmY19ycHNjX29wZXJzcGVlZF90b19iZmFfc3BlZWQoCisJCQkJYmZhX29zX250b2hzKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnNwZWVkKSk7CisKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfUlBTQ19DT01QKTsKKwkJfQorCX0gZWxzZSB7CisJCWxzX3JqdCA9IChzdHJ1Y3QgZmNfbHNfcmp0X3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlKTsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlX2V4cGwpOworCQlycG9ydC0+c3RhdHMucnBzY19yZWplY3RzKys7CisJCWlmIChsc19yanQtPnJlYXNvbl9jb2RlID09IEZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQKSB7CisJCQliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX1JQU0NfRkFJTCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX1JQU0NfRVJST1IpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9zY24uYyBiL2RyaXZlcnMvc2NzaS9iZmEvc2NuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0NzcxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvc2NuLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbXMuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFNDTik7CisKKyNkZWZpbmUgRkNfUU9TX1JTQ05fRVZFTlQJCTB4MGMKKyNkZWZpbmUgRkNfRkFCUklDX05BTUVfUlNDTl9FVkVOVAkweDBkCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3Njcih2b2lkICpzY25fY2JhcmcsCisJCQkJCSAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zY3JfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc2VuZF9sc19hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fdGltZW91dCh2b2lkICphcmcpOworCisvKioKKyAqICBmY3Nfc2NtX3NtIEZDUyBTQ04gc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogVlBvcnQgU0NOIFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gcG9ydF9zY25fZXZlbnQgeworCVNDTlNNX0VWRU5UX1BPUlRfT05MSU5FID0gMSwKKwlTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCVNDTlNNX0VWRU5UX1JTUF9PSyA9IDMsCisJU0NOU01fRVZFTlRfUlNQX0VSUk9SID0gNCwKKwlTQ05TTV9FVkVOVF9USU1FT1VUID0gNSwKKwlTQ05TTV9FVkVOVF9TQ1JfU0VOVCA9IDYsCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJICAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fc2VuZGluZ19zY3Ioc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCQkJZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3Ioc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCQllbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NtX3Njcl9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJCSAgICAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJICAgZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCk7CisKKy8qKgorICogCQlTdGFydGluZyBzdGF0ZSAtIGF3YWl0aW5nIGxpbmsgdXAuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJICAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX3NlbmRpbmdfc2NyKTsKKwkJYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3NjcihzY24sIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9zZW5kaW5nX3NjcihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTQ05TTV9FVkVOVF9TQ1JfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fc2NyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoc2NuLT5wb3J0LT5mY3MtPmJmYSwgJnNjbi0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3Ioc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBzY24tPnBvcnQ7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTQ05TTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29ubGluZSk7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9SU1BfRVJST1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX3Njcl9yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChwb3J0LT5mY3MtPmJmYSwgJnNjbi0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X3Njbl90aW1lb3V0LCBzY24sCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQoc2NuLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc21fc2NyX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCSAgICAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fc2VuZGluZ19zY3IpOworCQliZmFfZmNzX3BvcnRfc2NuX3NlbmRfc2NyKHNjbiwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmc2NuLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBmY3Nfc2NuX3ByaXZhdGUgRkNTIFNDTiBwcml2YXRlIGZ1bmN0aW9ucworICovCisKKy8qKgorICogVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIHRvIHNlbmQgYSBTQ1IgY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc2VuZF9zY3Iodm9pZCAqc2NuX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IHNjbl9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBzY24tPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZzY24tPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfc2NuX3NlbmRfc2NyLCBzY24pOworCQlyZXR1cm47CisJfQorCXNjbi0+ZmN4cCA9IGZjeHA7CisKKwkvKgorCSAqIEhhbmRsZSBWVSByZWdpc3RyYXRpb25zIGZvciBCYXNlIHBvcnQgb25seQorCSAqLworCWlmICgoIXBvcnQtPnZwb3J0KSAmJiBiZmFfaW9jX2dldF9mY21vZGUoJnBvcnQtPmZjcy0+YmZhLT5pb2MpKSB7CisJCWxlbiA9IGZjX3Njcl9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQkgICBiZmFfbHBzX2lzX2JyY2RfZmFicmljKHBvcnQtPmZhYnJpYy0+bHBzKSwKKwkJCQkgICBwb3J0LT5waWQsIDApOworCX0gZWxzZSB7CisJCWxlbiA9IGZjX3Njcl9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgQkZBX0ZBTFNFLAorCQkJCSAgIHBvcnQtPnBpZCwgMCk7CisJfQorCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X3Njbl9zY3JfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopc2NuLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1NDUl9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc2NyX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkgICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gc2NuLT5wb3J0OworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKworCWNhc2UgRkNfRUxTX0FDQzoKKwkJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9SU1BfT0spOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX0xTX1JKVDoKKworCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1JTUF9FUlJPUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoKKyAqIFNlbmQgYSBMUyBBY2NlcHQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc2VuZF9sc19hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocykKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQgPSBOVUxMOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19sc19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgYmZhX3Jwb3J0LCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwKKwkJICAgICAgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IGJmYV90aW1lciBvbiB0aW1lciB0aW1lb3V0cy4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCQktIHBvaW50ZXIgdG8gYmZhX2Zjc19wb3J0X3QuCisgKiAJcGFyYW1bb3V0XQl2cG9ydF9zdGF0dXMgCS0gcG9pbnRlciB0byByZXR1cm4gdnBvcnQgc3RhdHVzIGluCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorKiAgCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKilhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1RJTUVPVVQpOworfQorCisKKworLyoqCisgKiAgZmNzX3Njbl9wdWJsaWMgRkNTIHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKgorICogRnVuY3Rpb25zIGNhbGxlZCBieSBwb3J0L2ZhYgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfc2NuX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IEJGQV9GQ1NfR0VUX1NDTl9GUk9NX1BPUlQocG9ydCk7CisKKwlzY24tPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfc2NuX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IEJGQV9GQ1NfR0VUX1NDTl9GUk9NX1BPUlQocG9ydCk7CisKKwlzY24tPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X3Njbl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IEJGQV9GQ1NfR0VUX1NDTl9GUk9NX1BPUlQocG9ydCk7CisKKwlzY24tPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUE9SVF9PTkxJTkUpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9wb3J0aWRfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHUzMiBycGlkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJwaWQpOworCisJLyoqCisJICogSWYgdGhpcyBpcyBhbiB1bmtub3duIGRldmljZSwgdGhlbiBpdCBqdXN0IGNhbWUgb25saW5lLgorCSAqIE90aGVyd2lzZSBsZXQgcnBvcnQgaGFuZGxlIHRoZSBSU0NOIGV2ZW50LgorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgcnBpZCk7CisJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogSWYgbWluIGNmZyBtb2RlIGlzIGVuYWJsZWQsIHdlIGRvbm90IG5lZWQgdG8KKwkJICogZGlzY292ZXIgYW55IG5ldyBycG9ydHMuCisJCSAqLworCQlpZiAoIV9fZmNzX21pbl9jZmcocG9ydC0+ZmNzKSkKKwkJCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9jcmVhdGUocG9ydCwgcnBpZCk7CisJfSBlbHNlIHsKKwkJYmZhX2Zjc19ycG9ydF9zY24ocnBvcnQpOworCX0KK30KKworLyoqCisgKiByc2NuIGZvcm1hdCBiYXNlZCBQSUQgY29tcGFyaXNvbgorICovCisjZGVmaW5lIF9fZmNfcGlkX21hdGNoKF9fYzAsIF9fYzEsIF9fZm10KQkJXAorCSgoKF9fZm10KSA9PSBGQ19SU0NOX0ZPUk1BVF9GQUJSSUMpIHx8CQlcCisJICgoKF9fZm10KSA9PSBGQ19SU0NOX0ZPUk1BVF9ET01BSU4pICYmCQlcCisJICAoKF9fYzApWzBdID09IChfX2MxKVswXSkpIHx8CQkJXAorCSAoKChfX2ZtdCkgPT0gRkNfUlNDTl9GT1JNQVRfQVJFQSkgJiYJCVwKKwkgICgoX19jMClbMF0gPT0gKF9fYzEpWzBdKSAmJgkJCVwKKwkgICgoX19jMClbMV0gPT0gKF9fYzEpWzFdKSkpCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX211bHRpcG9ydF9yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gZmNfcnNjbl9mb3JtYXQgZm9ybWF0LCB1MzIgcnNjbl9waWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZV9uZXh0OworCXU4ICAgICAgICAqYzAsICpjMTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBmb3JtYXQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByc2NuX3BpZCk7CisKKwljMCA9ICh1OCAqKSAmcnNjbl9waWQ7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlX25leHQsICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJYzEgPSAodTggKikgJnJwb3J0LT5waWQ7CisJCWlmIChfX2ZjX3BpZF9tYXRjaChjMCwgYzEsIGZvcm1hdCkpCisJCQliZmFfZmNzX3Jwb3J0X3NjbihycG9ydCk7CisJfQorfQorCit2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3Byb2Nlc3NfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQkgICAgICB1MzIgbGVuKQoreworCXN0cnVjdCBmY19yc2NuX3BsX3MgICAqcnNjbiA9IChzdHJ1Y3QgZmNfcnNjbl9wbF9zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIG51bV9lbnRyaWVzOworCXUzMiAgICAgICAgcnNjbl9waWQ7CisJYmZhX2Jvb2xlYW5fdCAgIG5zcXVlcnkgPSBCRkFfRkFMU0U7CisJaW50ICAgICAgICAgICAgIGkgPSAwOworCisJbnVtX2VudHJpZXMgPQorCQkoYmZhX29zX250b2hzKHJzY24tPnBheWxkbGVuKSAtCisJCSBzaXplb2YodTMyKSkgLyBzaXplb2YocnNjbi0+ZXZlbnRbMF0pOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIG51bV9lbnRyaWVzKTsKKworCXBvcnQtPnN0YXRzLm51bV9yc2NuKys7CisKKwliZmFfZmNzX3BvcnRfc2NuX3NlbmRfbHNfYWNjKHBvcnQsIGZjaHMpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspIHsKKwkJcnNjbl9waWQgPSByc2NuLT5ldmVudFtpXS5wb3J0aWQ7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzY24tPmV2ZW50W2ldLmZvcm1hdCk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByc2NuX3BpZCk7CisKKwkJc3dpdGNoIChyc2NuLT5ldmVudFtpXS5mb3JtYXQpIHsKKwkJY2FzZSBGQ19SU0NOX0ZPUk1BVF9QT1JUSUQ6CisJCQlpZiAocnNjbi0+ZXZlbnRbaV0ucXVhbGlmaWVyID09IEZDX1FPU19SU0NOX0VWRU5UKSB7CisJCQkJLyoKKwkJCQkgKiBJZ25vcmUgdGhpcyBldmVudC4gZi93IHdvdWxkIGhhdmUgcHJvY2Vzc2VkCisJCQkJICogaXQKKwkJCQkgKi8KKwkJCQliZmFfdHJjKHBvcnQtPmZjcywgcnNjbl9waWQpOworCQkJfSBlbHNlIHsKKwkJCQlwb3J0LT5zdGF0cy5udW1fcG9ydGlkX3JzY24rKzsKKwkJCQliZmFfZmNzX3BvcnRfc2NuX3BvcnRpZF9yc2NuKHBvcnQsIHJzY25fcGlkKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRkNfUlNDTl9GT1JNQVRfRkFCUklDOgorCQkJaWYgKHJzY24tPmV2ZW50W2ldLnF1YWxpZmllciA9PQorCQkJICAgIEZDX0ZBQlJJQ19OQU1FX1JTQ05fRVZFTlQpIHsKKwkJCQliZmFfZmNzX3BvcnRfbXNfZmFicmljX3JzY24ocG9ydCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKgorCQkJICogISEhISEhISEhIEZhbGwgVGhyb3VnaCAhISEhISEhISEhISEhCisJCQkgKi8KKworCQljYXNlIEZDX1JTQ05fRk9STUFUX0FSRUE6CisJCWNhc2UgRkNfUlNDTl9GT1JNQVRfRE9NQUlOOgorCQkJbnNxdWVyeSA9IEJGQV9UUlVFOworCQkJYmZhX2Zjc19wb3J0X3Njbl9tdWx0aXBvcnRfcnNjbihwb3J0LAorCQkJCQkJCXJzY24tPmV2ZW50W2ldLmZvcm1hdCwKKwkJCQkJCQlyc2NuX3BpZCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYmZhX2Fzc2VydCgwKTsKKwkJCW5zcXVlcnkgPSBCRkFfVFJVRTsKKwkJfQorCX0KKworCS8qKgorCSAqIElmIGFueSBvZiBhcmVhLCBkb21haW4gb3IgZmFicmljIFJTQ04gaXMgcmVjZWl2ZWQsIGRvIGEgZnJlc2ggZGlzY292ZXJ5CisJICogdG8gZmluZCBuZXcgZGV2aWNlcy4KKwkgKi8KKwlpZiAobnNxdWVyeSkKKwkJYmZhX2Zjc19wb3J0X25zX3F1ZXJ5KHBvcnQpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvdmZhcGkuYyBiL2RyaXZlcnMvc2NzaS9iZmEvdmZhcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ4MWZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS92ZmFwaS5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHZmYXBpLmMgRmFicmljIG1vZHVsZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgVkZBUEkpOworCisvKioKKyAqICBmY3NfdmZfYXBpIHZpcnR1YWwgZmFicmljcyBBUEkKKyAqLworCisvKioKKyAqIAkJRW5hYmxlIFZGIG1vZGUuCisgKgorICogQHBhcmFtW2luXQkJZmNzCQlmY3MgbW9kdWxlIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCQl2Zl9pZAkJZGVmYXVsdCB2Zl9pZCBvZiBwb3J0LCBGQ19WRl9JRF9OVUxMCisgKiAJCQkJCXRvIHVzZSBzdGFuZGFyZCBkZWZhdWx0IHZmX2lkIG9mIDEuCisgKgorICogQHJldHZhbAlCRkFfU1RBVFVTX09LCQl2ZiBtb2RlIGlzIGVuYWJsZWQKKyAqIEByZXR2YWwJQkZBX1NUQVRVU19CVVNZCQlQb3J0IGlzIGFjdGl2ZS4gUG9ydCBtdXN0IGJlIGRpc2FibGVkCisgKgkJCQkJYmVmb3JlIFZGIG1vZGUgY2FuIGJlIGVuYWJsZWQuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9tb2RlX2VuYWJsZShzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCkKK3sKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAJCURpc2FibGUgVkYgbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dCQlmY3MJCWZjcyBtb2R1bGUgaW5zdGFuY2UKKyAqCisgKiBAcmV0dmFsCUJGQV9TVEFUVVNfT0sJCXZmIG1vZGUgaXMgZGlzYWJsZWQKKyAqIEByZXR2YWwJQkZBX1NUQVRVU19CVVNZCQlWRnMgYXJlIHByZXNlbnQgYW5kIGJlaW5nIHVzZWQuIEFsbAorICogCQkJCQlWRnMgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBkaXNhYmxpbmcKKyAqCQkJCQlWRiBtb2RlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfbW9kZV9kaXNhYmxlKHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAJCUNyZWF0ZSBhIG5ldyBWRiBpbnN0YW5jZS4KKyAqCisgKiAgQSBuZXcgVkYgaXMgY3JlYXRlZCB1c2luZyB0aGUgZ2l2ZW4gVkYgY29uZmlndXJhdGlvbi4gQSBWRiBpcyBpZGVudGlmaWVkCisgKiAgYnkgVkYgaWQuIE5vIGR1cGxpY2F0ZSBWRiBjcmVhdGlvbiBpcyBhbGxvd2VkIHdpdGggdGhlIHNhbWUgVkYgaWQuIE9uY2UKKyAqICBhIFZGIGlzIGNyZWF0ZWQsIFZGIGlzIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBhZnRlciBsaW5rIGluaXRpYWxpemF0aW9uCisgKiAgYW5kIEVWRlAgZXhjaGFuZ2UgaXMgY29tcGxldGVkLgorICoKKyAqIAlwYXJhbVtpbl0gdmYJCS0gCUZDUyB2ZiBkYXRhIHN0cnVjdHVyZS4gTWVtb3J5IGlzCisgKgkJCQkJYWxsb2NhdGVkIGJ5IGNhbGxlciAoZHJpdmVyKQorICogCXBhcmFtW2luXSBmY3MgCQktIAlGQ1MgbW9kdWxlCisgKiAJcGFyYW1baW5dIHZmX2NmZwktIAlWRiBjb25maWd1cmF0aW9uCisgKiAJcGFyYW1baW5dIHZmX2RydiAJLSAJT3BhcXVlIGhhbmRsZSBiYWNrIHRvIHRoZSBkcml2ZXIncworICoJCQkJCXZpcnR1YWwgdmYgc3RydWN0dXJlCisgKgorICogCXJldHZhbCBCRkFfU1RBVFVTX09LIFZGIGNyZWF0aW9uIGlzIHN1Y2Nlc3NmdWwKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19GQUlMRUQgVkYgY3JlYXRpb24gZmFpbGVkCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfRUVYSVNUIEEgVkYgZXhpc3RzIHdpdGggdGhlIGdpdmVuIHZmX2lkCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9jcmVhdGUoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQsCisJCSAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KQoreworCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBkZWxldGUgYSBCRkEgVkYgb2JqZWN0LiBWRiBvYmplY3Qgc2hvdWxkCisgKiAJCWJlIHN0b3BwZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAqCisgKiAJcGFyYW1baW5dIHZmIC0gcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfT0sJT24gdmYgZGVsZXRpb24gc3VjY2VzcworICogCXJldHZhbCBCRkFfU1RBVFVTX0JVU1kgVkYgaXMgbm90IGluIGEgc3RvcHBlZCBzdGF0ZQorICogCXJldHZhbCBCRkFfU1RBVFVTX0lOUFJPR1JFU1MgVkYgZGVsZXRpb24gaW4gaW4gcHJvZ3Jlc3MKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3ZmX2RlbGV0ZShiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVN0YXJ0IHBhcnRpY2lwYXRpb24gaW4gVkYuIFRoaXMgdHJpZ2dlcnMgbG9naW4gdG8gdGhlIHZpcnR1YWwgZmFicmljLgorICoKKyAqIAlwYXJhbVtpbl0gdmYgLSBwb2ludGVyIHRvIGJmYV92Zl90LgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3ZmX3N0YXJ0KGJmYV9mY3NfdmZfdCAqdmYpCit7CisJYmZhX3RyYyh2Zi0+ZmNzLCB2Zi0+dmZfaWQpOworfQorCisvKioKKyAqICAJTG9nb3V0IHdpdGggdGhlIHZpcnR1YWwgZmFicmljLgorICoKKyAqIAlwYXJhbVtpbl0gdmYgLSBwb2ludGVyIHRvIGJmYV92Zl90LgorICoKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19PSyAJT24gc3VjY2Vzcy4KKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19JTlBST0dSRVNTIFZGIGlzIGJlaW5nIHN0b3BwZWQuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9zdG9wKGJmYV9mY3NfdmZfdCAqdmYpCit7CisJYmZhX3RyYyh2Zi0+ZmNzLCB2Zi0+dmZfaWQpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJUmV0dXJucyBhdHRyaWJ1dGVzIG9mIHRoZSBnaXZlbiBWRi4KKyAqCisgKiAJcGFyYW1baW5dIAl2ZgkJCXBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKiAJcGFyYW1bb3V0XSB2Zl9hdHRyIAl2ZiBhdHRyaWJ1dGVzIHJldHVybmVkCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfZ2V0X2F0dHIoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV92Zl9hdHRyX3MgKnZmX2F0dHIpCit7CisJYmZhX3RyYyh2Zi0+ZmNzLCB2Zi0+dmZfaWQpOworfQorCisvKioKKyAqIAkJUmV0dXJuIHN0YXRpc3RpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB2Zi4KKyAqCisgKiAJcGFyYW1baW5dIAl2ZgkJCXBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKiAJcGFyYW1bb3V0XSB2Zl9zdGF0cyAJdmYgc3RhdGlzdGljcyByZXR1cm5lZAorICoKKyAqICBAcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9nZXRfc3RhdHMoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV92Zl9zdGF0c19zICp2Zl9zdGF0cykKK3sKKwliZmFfb3NfbWVtY3B5KHZmX3N0YXRzLCAmdmYtPnN0YXRzLCBzaXplb2Yoc3RydWN0IGJmYV92Zl9zdGF0c19zKSk7CisJcmV0dXJuOworfQorCit2b2lkCisvKioKKyAqIAkJY2xlYXIgc3RhdGlzdGljcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHZmLgorICoKKyAqIAlwYXJhbVtpbl0gCXZmCQkJcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqCisgKiAgQHJldHVybiBOb25lCisgKi8KK2JmYV9mY3NfdmZfY2xlYXJfc3RhdHMoYmZhX2Zjc192Zl90ICp2ZikKK3sKKwliZmFfb3NfbWVtc2V0KCZ2Zi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MpKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogIAlSZXR1cm5zIEZDUyB2ZiBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gdmZfaWQuCisgKgorICogCXBhcmFtW2luXSAJdmZfaWQJCS0gVkZfSUQKKyAqCisgKiAJcmV0dXJuCisgKiAJCUlmIGxvb2t1cCBzdWNjZWVkcywgcmV0dW5zIGZjcyB2ZiBvYmplY3QsIG90aGVyd2lzZSByZXR1cm5zIE5VTEwKKyAqLworYmZhX2Zjc192Zl90ICAgKgorYmZhX2Zjc192Zl9sb29rdXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpCit7CisJYmZhX3RyYyhmY3MsIHZmX2lkKTsKKwlpZiAodmZfaWQgPT0gRkNfVkZfSURfTlVMTCkKKwkJcmV0dXJuICgmZmNzLT5mYWJyaWMpOworCisJLyoqCisJICogQHRvZG8gdmYgc3VwcG9ydAorCSAqLworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogIAlSZXR1cm5zIGRyaXZlciBWRiBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gRkNTIHZmLgorICoKKyAqIAlwYXJhbVtpbl0gCXZmCQktIHBvaW50ZXIgdG8gYmZhX3ZmX3QKKyAqCisgKiAJcmV0dXJuIERyaXZlciBWRiBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfdmZfcyAgICAgICoKK2JmYV9mY3NfdmZfZ2V0X2Rydl92ZihiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV9hc3NlcnQodmYpOworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKKwlyZXR1cm4gdmYtPnZmX2RydjsKK30KKworLyoqCisgKiAgCVJldHVybiB0aGUgbGlzdCBvZiBWRnMgY29uZmlndXJlZC4KKyAqCisgKiAJcGFyYW1baW5dCWZjcwlmY3MgbW9kdWxlIGluc3RhbmNlCisgKiAJcGFyYW1bb3V0XSAJdmZfaWRzCXJldHVybmVkIGxpc3Qgb2YgdmZfaWRzCisgKiAJcGFyYW1baW4sb3V0XSAJbnZmcwlpbjpzaXplIG9mIHZmX2lkcyBhcnJheSwKKyAqIAkJCQlvdXQ6dG90YWwgZWxlbWVudHMgcHJlc2VudCwKKyAqIAkJCQlhY3R1YWwgZWxlbWVudHMgcmV0dXJuZWQgaXMgbGltaXRlZCBieSB0aGUgc2l6ZQorICoKKyAqIAlyZXR1cm4gRHJpdmVyIFZGIHN0cnVjdHVyZQorICovCit2b2lkCitiZmFfZmNzX3ZmX2xpc3Qoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgKnZmX2lkcywgaW50ICpudmZzKQoreworCWJmYV90cmMoZmNzLCAqbnZmcyk7Cit9CisKKy8qKgorICogIAlSZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIFZGcyB2aXNpYmxlIGZyb20gZmFicmljLgorICoKKyAqIAlwYXJhbVtpbl0JZmNzCWZjcyBtb2R1bGUgaW5zdGFuY2UKKyAqIAlwYXJhbVtvdXRdIAl2Zl9pZHMJcmV0dXJuZWQgbGlzdCBvZiB2Zl9pZHMKKyAqIAlwYXJhbVtpbixvdXRdIAludmZzCWluOnNpemUgb2YgdmZfaWRzIGFycmF5LAorICoJCQkJb3V0OnRvdGFsIGVsZW1lbnRzIHByZXNlbnQsCisgKiAJCQkJYWN0dWFsIGVsZW1lbnRzIHJldHVybmVkIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUKKyAqCisgKiAJcmV0dXJuIERyaXZlciBWRiBzdHJ1Y3R1cmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9saXN0X2FsbChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiAqdmZfaWRzLCBpbnQgKm52ZnMpCit7CisJYmZhX3RyYyhmY3MsICpudmZzKTsKK30KKworLyoqCisgKiAJCVJldHVybiB0aGUgbGlzdCBvZiBsb2NhbCBsb2dpY2FsIHBvcnRzIHByZXNlbnQgaW4gdGhlIGdpdmVuIFZGLgorICoKKyAqIAlwYXJhbVtpbl0JdmYJdmYgZm9yIHdoaWNoIGxvZ2ljYWwgcG9ydHMgYXJlIHJldHVybmVkCisgKiAJcGFyYW1bb3V0XSAJbHB3d24JcmV0dXJuZWQgbG9naWNhbCBwb3J0IHd3biBsaXN0CisgKiAJcGFyYW1baW4sb3V0XSAJbmxwb3J0cwlpbjpzaXplIG9mIGxwd3duIGxpc3Q7CisgKgkJCQlvdXQ6dG90YWwgZWxlbWVudHMgcHJlc2VudCwKKyAqIAkJCQlhY3R1YWwgZWxlbWVudHMgcmV0dXJuZWQgaXMgbGltaXRlZCBieSB0aGUgc2l6ZQorICoKKyAqLwordm9pZAorYmZhX2Zjc192Zl9nZXRfcG9ydHMoYmZhX2Zjc192Zl90ICp2Ziwgd3duX3QgbHB3d25bXSwgaW50ICpubHBvcnRzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgKmZjczsKKworCWlmICh2ZiA9PSBOVUxMIHx8IGxwd3duID09IE5VTEwgfHwgKm5scG9ydHMgPT0gMCkKKwkJcmV0dXJuOworCisJZmNzID0gdmYtPmZjczsKKworCWJmYV90cmMoZmNzLCB2Zi0+dmZfaWQpOworCWJmYV90cmMoZmNzLCAodTMyKSAqbmxwb3J0cyk7CisKKwlpID0gMDsKKwlscHd3bltpKytdID0gdmYtPmJwb3J0LnBvcnRfY2ZnLnB3d247CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmdmYtPnZwb3J0X3EpIHsKKwkJaWYgKGkgPj0gKm5scG9ydHMpCisJCQlicmVhazsKKworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopIHFlOworCQlscHd3bltpKytdID0gdnBvcnQtPmxwb3J0LnBvcnRfY2ZnLnB3d247CisJfQorCisJYmZhX3RyYyhmY3MsIGkpOworCSpubHBvcnRzID0gaTsKKwlyZXR1cm47Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS92cG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS92cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMGFmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Zwb3J0LmMKQEAgLTAsMCArMSw4OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc192cG9ydC5jIEZDUyB2aXJ0dWFsIHBvcnQgc3RhdGUgbWFjaGluZQorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNidWlsZC5oPgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fbHBvcnQuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgVlBPUlQpOworCisjZGVmaW5lIF9fdnBvcnRfZmNzKF9fdnApICAgICAgIChfX3ZwKS0+bHBvcnQuZmNzCisjZGVmaW5lIF9fdnBvcnRfcHd3bihfX3ZwKSAgICAgIChfX3ZwKS0+bHBvcnQucG9ydF9jZmcucHd3bgorI2RlZmluZSBfX3Zwb3J0X253d24oX192cCkgICAgICAoX192cCktPmxwb3J0LnBvcnRfY2ZnLm53d24KKyNkZWZpbmUgX192cG9ydF9iZmEoX192cCkgICAgICAgKF9fdnApLT5scG9ydC5mY3MtPmJmYQorI2RlZmluZSBfX3Zwb3J0X2ZjaWQoX192cCkgICAgICAoX192cCktPmxwb3J0LnBpZAorI2RlZmluZSBfX3Zwb3J0X2ZhYnJpYyhfX3ZwKSAgICAoX192cCktPmxwb3J0LmZhYnJpYworI2RlZmluZSBfX3Zwb3J0X3ZmaWQoX192cCkgICAgICAoX192cCktPmxwb3J0LmZhYnJpYy0+dmZfaWQKKworI2RlZmluZSBCRkFfRkNTX1ZQT1JUX01BWF9SRVRSSUVTICA1CisvKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfZG9fZmRpc2Moc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfdGltZW91dCh2b2lkICp2cG9ydF9hcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfZG9fbG9nbyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9mcmVlKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKKworLyoqCisgKiAgZmNzX3Zwb3J0X3NtIEZDUyB2aXJ0dWFsIHBvcnQgc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogVlBvcnQgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IHsKKwlCRkFfRkNTX1ZQT1JUX1NNX0NSRUFURSA9IDEsCS8qICB2cG9ydCBjcmVhdGUgZXZlbnQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURSA9IDIsCS8qICB2cG9ydCBkZWxldGUgZXZlbnQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1NUQVJUID0gMywJLyogIHZwb3J0IHN0YXJ0IHJlcXVlc3QgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1NUT1AgPSA0LAkvKiAgc3RvcDogdW5zdXBwb3J0ZWQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX09OTElORSA9IDUsCS8qICBmYWJyaWMgb25saW5lICovCisJQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FID0gNiwJLyogIGZhYnJpYyBvZmZsaW5lIGV2ZW50ICovCisJQkZBX0ZDU19WUE9SVF9TTV9GUk1TRU5UID0gNywJLyogIGZkaXNjL2xvZ28gc2VudCBldmVudHMgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSyA9IDgsCS8qICBnb29kIHJlc3BvbnNlICovCisJQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IgPSA5LAkvKiAgZXJyb3IvYmFkIHJlc3BvbnNlICovCisJQkZBX0ZDU19WUE9SVF9TTV9USU1FT1VUID0gMTAsCS8qICBkZWxheSB0aW1lciBldmVudCAqLworCUJGQV9GQ1NfVlBPUlRfU01fREVMQ09NUCA9IDExLAkvKiAgbHBvcnQgZGVsZXRlIGNvbXBsZXRpb24gKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1JTUF9EVVBfV1dOID0gMTIsCS8qICBEdXAgd25uIGVycm9yICovCisJQkZBX0ZDU19WUE9SVF9TTV9SU1BfRkFJTEVEID0gMTMsCS8qICBub24tcmV0cnlhYmxlIGZhaWx1cmUgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9mZGlzYyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQkgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCWVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9sb2dvKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCSAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9lcnJvcihzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGVfcyB2cG9ydF9zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV91bmluaXQpLCBCRkFfRkNTX1ZQT1JUX1VOSU5JVH0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2NyZWF0ZWQpLCBCRkFfRkNTX1ZQT1JUX0NSRUFURUR9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKSwgQkZBX0ZDU19WUE9SVF9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpLCBCRkFfRkNTX1ZQT1JUX0ZESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fZmRpc2NfcmV0cnkpLCBCRkFfRkNTX1ZQT1JUX0ZESVNDX1JFVFJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fb25saW5lKSwgQkZBX0ZDU19WUE9SVF9PTkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9kZWxldGluZyksIEJGQV9GQ1NfVlBPUlRfREVMRVRJTkd9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKSwgQkZBX0ZDU19WUE9SVF9DTEVBTlVQfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fbG9nbyksIEJGQV9GQ1NfVlBPUlRfTE9HT30sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2Vycm9yKSwgQkZBX0ZDU19WUE9SVF9FUlJPUn0KK307CisKKy8qKgorICogQmVnaW5uaW5nIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQllbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0NSRUFURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jcmVhdGVkKTsKKwkJYmZhX2Zjc19mYWJyaWNfYWRkdnBvcnQoX192cG9ydF9mYWJyaWModnBvcnQpLCB2cG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogQ3JlYXRlZCBzdGF0ZSAtIGEgc3RhcnQgZXZlbnQgaXMgcmVxdWlyZWQgdG8gc3RhcnQgdXAgdGhlIHN0YXRlIG1hY2hpbmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9TVEFSVDoKKwkJaWYgKGJmYV9mY3NfZmFicmljX2lzX29ubGluZShfX3Zwb3J0X2ZhYnJpYyh2cG9ydCkpCisJCSAgICAmJiBiZmFfZmNzX2ZhYnJpY19ucGl2X2NhcGFibGUoX192cG9ydF9mYWJyaWModnBvcnQpKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9mZGlzYyk7CisJCQliZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHZwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCS8qKgorCQkJICogRmFicmljIGlzIG9mZmxpbmUgb3Igbm90IE5QSVYgY2FwYWJsZSwgc3RheSBpbgorCQkJICogb2ZmbGluZSBzdGF0ZS4KKwkJCSAqLworCQkJdnBvcnQtPnZwb3J0X3N0YXRzLmZhYl9ub19ucGl2Kys7CisJCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT05MSU5FOgorCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQkvKioKKwkJICogSWdub3JlIE9OTElORS9PRkZMSU5FIGV2ZW50cyBmcm9tIGZhYnJpYyB0aWxsIHZwb3J0IGlzIHN0YXJ0ZWQuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIE9mZmxpbmUgc3RhdGUgLSBhd2FpdGluZyBPTkxJTkUgZXZlbnQgZnJvbSBmYWJyaWMgU00uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCk7CisJCWJmYV9mY3NfcG9ydF9kZWxldGUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9mZGlzYyk7CisJCXZwb3J0LT5mZGlzY19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc192cG9ydF9kb19mZGlzYyh2cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCS8qCisJCSAqIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdnBvcnQgY291bGRuJ3QgYmUgaW5pdGlhbHppZWQgZHVlCisJCSAqIHRoZSBmYWN0IHRoYXQgdGhlIG5waXYgd2FzIG5vdCBlbmFibGVkIG9uIHRoZSBzd2l0Y2guIEluCisJCSAqIHRoYXQgY2FzZSB3ZSB3aWxsIHB1dCB0aGUgdnBvcnQgaW4gb2ZmbGluZSBzdGF0ZS4gSG93ZXZlciwKKwkJICogdGhlIGxpbmsgY2FuIGdvIGRvd24gYW5kIGNhdXNlIHRoZSB0aGlzIGV2ZW50IHRvIGJlIHNlbnQgd2hlbgorCQkgKiB3ZSBhcmUgYWxyZWFkeSBvZmZsaW5lLiBJZ25vcmUgaXQuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIEZESVNDIGlzIHNlbnQgYW5kIGF3YWl0aW5nIHJlcGx5IGZyb20gZmFicmljLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9mZGlzYyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJICAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2xvZ28pOworCQliZmFfbHBzX2Rpc2NhcmQodnBvcnQtPmxwcyk7CisJCWJmYV9mY3NfdnBvcnRfZG9fbG9nbyh2cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29ubGluZSk7CisJCWJmYV9mY3NfcG9ydF9vbmxpbmUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9mZGlzY19yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChfX3Zwb3J0X2JmYSh2cG9ydCksICZ2cG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc192cG9ydF90aW1lb3V0LCB2cG9ydCwKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRFVQX1dXTjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9lcnJvcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogRkRJU0MgYXR0ZW1wdCBmYWlsZWQgLSBhIHRpbWVyIGlzIGFjdGl2ZSB0byByZXRyeSBGRElTQy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fZmRpc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXApOworCQliZmFfdGltZXJfc3RvcCgmdnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnZwb3J0LT50aW1lcik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpOworCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfcmV0cmllcysrOworCQl2cG9ydC0+ZmRpc2NfcmV0cmllcysrOworCQliZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHZwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBWcG9ydCBpcyBvbmxpbmUgKEZESVNDIGlzIGNvbXBsZXRlKS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX3BvcnRfZGVsZXRlKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQliZmFfbHBzX2Rpc2NhcmQodnBvcnQtPmxwcyk7CisJCWJmYV9mY3NfcG9ydF9vZmZsaW5lKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFZwb3J0IGlzIGJlaW5nIGRlbGV0ZWQgLSBhd2FpdGluZyBscG9ydCBkZWxldGUgY29tcGxldGlvbiB0byBzZW5kCisgKiBMT0dPIHRvIGZhYnJpYy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxDT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2xvZ28pOworCQliZmFfZmNzX3Zwb3J0X2RvX2xvZ28odnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIEVycm9yIFN0YXRlLgorICogVGhpcyBzdGF0ZSB3aWxsIGJlIHNldCB3aGVuIHRoZSBWcG9ydCBDcmVhdGlvbiBmYWlscyBkdWUgdG8gZXJyb3JzIGxpa2UKKyAqIER1cCBXV04uIEluIHRoaXMgc3RhdGUgb25seSBvcGVyYXRpb24gYWxsb3dlZCBpcyBhIFZwb3J0IERlbGV0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fZXJyb3Ioc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCSAgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Zwb3J0X2ZyZWUodnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIExwb3J0IGNsZWFudXAgaXMgaW4gcHJvZ3Jlc3Mgc2luY2UgdnBvcnQgaXMgYmVpbmcgZGVsZXRlZC4gRmFicmljIGlzCisgKiBvZmZsaW5lLCBzbyBubyBMT0dPIGlzIG5lZWRlZCB0byBjb21wbGV0ZSB2cG9ydCBkZWxldGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fY2xlYW51cChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTENPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc192cG9ydF9mcmVlKHZwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIExPR08gaXMgc2VudCB0byBmYWJyaWMuIFZwb3J0IGRlbGV0ZSBpcyBpbiBwcm9ncmVzcy4gTHBvcnQgZGVsZXRlIGNsZWFudXAKKyAqIGlzIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2xvZ28oc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCSAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX2xwc19kaXNjYXJkKHZwb3J0LT5scHMpOworCQkvKgorCQkgKiAhISEgZmFsbCB0aHJvdWdoICEhIQorCQkgKi8KKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfT0s6CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Zwb3J0X2ZyZWUodnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBmY3NfdnBvcnRfcHJpdmF0ZSBGQ1MgdmlydHVhbCBwb3J0IHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBTZW5kIEFFTiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoYmZhX2Zjc19scG9ydF90ICpwb3J0LCBlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBvcnQtPmZjcy0+bG9nbTsKKwllbnVtIGJmYV9wb3J0X3JvbGUgcm9sZSA9IHBvcnQtPnBvcnRfY2ZnLnJvbGVzOworCXd3bl90ICAgICAgICAgICBscHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwljaGFyICAgICAgICAgICAgbHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICpyb2xlX3N0cltCRkFfUE9SVF9ST0xFX0ZDUF9NQVggLyAyICsgMV0gPQorCQl7ICJJbml0aWF0b3IiLCAiVGFyZ2V0IiwgIklQRkMiIH07CisKKwl3d24yc3RyKGxwd3duX3B0ciwgbHB3d24pOworCisJYmZhX2Fzc2VydChyb2xlIDw9IEJGQV9QT1JUX1JPTEVfRkNQX01BWCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTjoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfTlBJVl9EVVBfV1dOLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9OUElWX0ZBQlJJQ19NQVgsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9OUElWX1VOS05PV046CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEubHBvcnQudmZfaWQgPSBwb3J0LT5mYWJyaWMtPnZmX2lkOworCWFlbl9kYXRhLmxwb3J0LnJvbGVzID0gcm9sZTsKKwlhZW5fZGF0YS5scG9ydC5wcHd3biA9CisJCWJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQocG9ydC0+ZmNzKSk7CisJYWVuX2RhdGEubHBvcnQubHB3d24gPSBscHd3bjsKK30KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgdG8gc2VuZCBhIEZESVNDIGNvbW1hbmQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9scHNfZmRpc2ModnBvcnQtPmxwcywgdnBvcnQsCisJCSAgICAgIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKF9fdnBvcnRfYmZhKHZwb3J0KSksCisJCSAgICAgIF9fdnBvcnRfcHd3bih2cG9ydCksIF9fdnBvcnRfbnd3bih2cG9ydCkpOworCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19zZW50Kys7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2ZkaXNjX3JlamVjdGVkKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCXU4ICAgICAgICAgbHNyanRfcnNuID0gYmZhX2xwc19nZXRfbHNyanRfcnNuKHZwb3J0LT5scHMpOworCXU4ICAgICAgICAgbHNyanRfZXhwbCA9IGJmYV9scHNfZ2V0X2xzcmp0X2V4cGwodnBvcnQtPmxwcyk7CisKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgbHNyanRfcnNuKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgbHNyanRfZXhwbCk7CisKKwkvKgorCSAqIEZvciBjZXJ0YWluIHJlYXNvbiBjb2Rlcywgd2UgZG9uJ3Qgd2FudCB0byByZXRyeS4KKwkgKi8KKwlzd2l0Y2ggKGJmYV9scHNfZ2V0X2xzcmp0X2V4cGwodnBvcnQtPmxwcykpIHsKKwljYXNlIEZDX0xTX1JKVF9FWFBfSU5WX1BPUlRfTkFNRToJLyogYnkgYnJvY2FkZSAqLworCWNhc2UgRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lEOgkvKiBieSBDaXNjbyAqLworCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPCBCRkFfRkNTX1ZQT1JUX01BWF9SRVRSSUVTKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKwkJZWxzZSB7CisJCQliZmFfZmNzX3Zwb3J0X2Flbl9wb3N0KCZ2cG9ydC0+bHBvcnQsCisJCQkJCSAgICAgICBCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTik7CisJCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRFVQX1dXTik7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZDX0xTX1JKVF9FWFBfSU5TVUZGX1JFUzoKKwkJLyoKKwkJICogVGhpcyBtZWFucyBtYXggbG9naW5zIHBlciBwb3J0L3N3aXRjaCBzZXR0aW5nIG9uIHRoZQorCQkgKiBzd2l0Y2ggd2FzIGV4Y2VlZGVkLgorCQkgKi8KKwkJaWYgKHZwb3J0LT5mZGlzY19yZXRyaWVzIDwgQkZBX0ZDU19WUE9SVF9NQVhfUkVUUklFUykKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJCWVsc2UgeworCQkJYmZhX2Zjc192cG9ydF9hZW5fcG9zdCgmdnBvcnQtPmxwb3J0LAorCQkJCQkgICAgICAgQkZBX0xQT1JUX0FFTl9OUElWX0ZBQlJJQ19NQVgpOworCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0ZBSUxFRCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPT0gMCkJLyogUHJpbnQgb25seSBvbmNlICovCisJCQliZmFfZmNzX3Zwb3J0X2Flbl9wb3N0KCZ2cG9ydC0+bHBvcnQsCisJCQkJCSAgICAgICBCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTik7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqIAlDYWxsZWQgdG8gc2VuZCBhIGxvZ291dCB0byB0aGUgZmFicmljLiBVc2VkIHdoZW4gYSBWLVBvcnQgaXMKKyAqIAlkZWxldGVkL3N0b3BwZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2RvX2xvZ28oc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCisJdnBvcnQtPnZwb3J0X3N0YXRzLmxvZ29fc2VudCsrOworCWJmYV9scHNfZmRpc2Nsb2dvKHZwb3J0LT5scHMpOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgYmZhX3RpbWVyIG9uIHRpbWVyIHRpbWVvdXRzLgorICoKKyAqIAlwYXJhbVtpbl0gCXZwb3J0IAkJLSBwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqIAlwYXJhbVtvdXRdCXZwb3J0X3N0YXR1cyAJLSBwb2ludGVyIHRvIHJldHVybiB2cG9ydCBzdGF0dXMgaW4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3RpbWVvdXQodm9pZCAqdnBvcnRfYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKil2cG9ydF9hcmc7CisKKwl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfZnJlZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfZmNzX2ZhYnJpY19kZWx2cG9ydChfX3Zwb3J0X2ZhYnJpYyh2cG9ydCksIHZwb3J0KTsKKwliZmFfZmNiX3Zwb3J0X2RlbGV0ZSh2cG9ydC0+dnBvcnRfZHJ2KTsKKwliZmFfbHBzX2RlbGV0ZSh2cG9ydC0+bHBzKTsKK30KKworCisKKy8qKgorICogIGZjc192cG9ydF9wdWJsaWMgRkNTIHZpcnR1YWwgcG9ydCBwdWJsaWMgaW50ZXJmYWNlcworICovCisKKy8qKgorICogT25saW5lIG5vdGlmaWNhdGlvbiBmcm9tIGZhYnJpYyBTTS4KKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJdnBvcnQtPnZwb3J0X3N0YXRzLmZhYl9vbmxpbmUrKzsKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9PTkxJTkUpOworfQorCisvKioKKyAqIE9mZmxpbmUgbm90aWZpY2F0aW9uIGZyb20gZmFicmljIFNNLgorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJdnBvcnQtPnZwb3J0X3N0YXRzLmZhYl9vZmZsaW5lKys7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogQ2xlYW51cCBub3RpZmljYXRpb24gZnJvbSBmYWJyaWMgU00gb24gbGluayB0aW1lciBleHBpcnkuCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfY2xlYW51cChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwl2cG9ydC0+dnBvcnRfc3RhdHMuZmFiX2NsZWFudXArKzsKK30KKworLyoqCisgKiBEZWxldGUgY29tcGxldGlvbiBjYWxsYmFjayBmcm9tIGFzc29jaWF0ZWQgbHBvcnQKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9kZWxldGVfY29tcChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9ERUxDT01QKTsKK30KKworLyoqCisgKiAgIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQorCit1MzIKK2JmYV9mY3NfdnBvcnRfZ2V0X21heChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zIGlvY19hdHRyOworCisJYmZhX2dldF9hdHRyKGZjcy0+YmZhLCAmaW9jX2F0dHIpOworCisJaWYgKGlvY19hdHRyLnBjaV9hdHRyLmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkKKwkJcmV0dXJuIChCRkFfRkNTX01BWF9WUE9SVFNfU1VQUF9DVCk7CisJZWxzZQorCQlyZXR1cm4gKEJGQV9GQ1NfTUFYX1ZQT1JUU19TVVBQX0NCKTsKK30KKworCisKKy8qKgorICogIGZjc192cG9ydF9hcGkgVmlydHVhbCBwb3J0IEFQSQorICovCisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBpbnN0YW50aWF0ZSBhIG5ldyBGQ1MgdnBvcnQgb2JqZWN0LiBUaGlzCisgKiAJZnVuY3Rpb24gd2lsbCBub3QgdHJpZ2dlciBhbnkgSFcgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyAod2hpY2ggd2lsbCBiZQorICogCWRvbmUgaW4gdnBvcnRfc3RhcnQoKSBjYWxsKQorICoKKyAqIAlwYXJhbVtpbl0gdnBvcnQJLSAJcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuIFRoaXMgc3BhY2UKKyAqIAkJCQkJbmVlZHMgdG8gYmUgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuCisgKiAJcGFyYW1baW5dIGZjcyAJCS0gCUZDUyBpbnN0YW5jZQorICogCXBhcmFtW2luXSB2cG9ydF9jZmcJLSAJdnBvcnQgY29uZmlndXJhdGlvbgorICogCXBhcmFtW2luXSB2Zl9pZCAgICAJLSAJVkZfSUQgaWYgdnBvcnQgaXMgY3JlYXRlZCB3aXRoaW4gYSBWRi4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAJCUZDX1ZGX0lEX05VTEwgdG8gc3BlY2lmeSBiYXNlIGZhYnJpYy4KKyAqIAlwYXJhbVtpbl0gdnBvcnRfZHJ2IAktIAlPcGFxdWUgaGFuZGxlIGJhY2sgdG8gdGhlIGRyaXZlcidzIHZwb3J0CisgKiAJCQkJCXN0cnVjdHVyZQorICoKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19PSyAtIG9uIHN1Y2Nlc3MuCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfRkFJTEVEIC0gb24gZmFpbHVyZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkgICAgIHUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICp2cG9ydF9jZmcsCisJCSAgICAgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnRfZHJ2KQoreworCWlmICh2cG9ydF9jZmctPnB3d24gPT0gMCkKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0lOVkFMSURfV1dOKTsKKworCWlmIChiZmFfZmNzX3BvcnRfZ2V0X3B3d24oJmZjcy0+ZmFicmljLmJwb3J0KSA9PSB2cG9ydF9jZmctPnB3d24pCisJCXJldHVybiBCRkFfU1RBVFVTX1ZQT1JUX1dXTl9CUDsKKworCWlmIChiZmFfZmNzX3Zwb3J0X2xvb2t1cChmY3MsIHZmX2lkLCB2cG9ydF9jZmctPnB3d24pICE9IE5VTEwpCisJCXJldHVybiBCRkFfU1RBVFVTX1ZQT1JUX0VYSVNUUzsKKworCWlmIChiZmFfZmNzX2ZhYnJpY192cG9ydF9jb3VudCgmZmNzLT5mYWJyaWMpID09CisJICAgIGJmYV9mY3NfdnBvcnRfZ2V0X21heChmY3MpKQorCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9NQVg7CisKKwl2cG9ydC0+bHBzID0gYmZhX2xwc19hbGxvYyhmY3MtPmJmYSk7CisJaWYgKCF2cG9ydC0+bHBzKQorCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9NQVg7CisKKwl2cG9ydC0+dnBvcnRfZHJ2ID0gdnBvcnRfZHJ2OworCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKKworCWJmYV9mY3NfbHBvcnRfaW5pdCgmdnBvcnQtPmxwb3J0LCBmY3MsIHZmX2lkLCB2cG9ydF9jZmcsIHZwb3J0KTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX0NSRUFURSk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIGluaXRpYWxpemUgdGhlIHZwb3J0LgorICoKKyAqICBAcGFyYW1baW5dIHZwb3J0IC0gcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKgorICogIEByZXR1cm5zIE5vbmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Zwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1NUQVJUKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gcXVpZXNlIHRoZSB2cG9ydCBvYmplY3QuIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAqIAlpbW1lZGlhdGVseSwgd2hlbiB0aGUgdnBvcnQgaXMgYWN0dWFsbHkgc3RvcHBlZCwgdGhlCisgKiAJYmZhX2Rydl92cG9ydF9zdG9wX2NiKCkgd2lsbCBiZSBjYWxsZWQuCisgKgorICogCXBhcmFtW2luXSB2cG9ydCAtIHBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdnBvcnRfc3RvcChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9TVE9QKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIGEgdnBvcnQgb2JqZWN0LiBGYWJyaWMgb2JqZWN0IHNob3VsZAorICogCQliZSBzdG9wcGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgKgorICogCXBhcmFtW2luXSB2cG9ydCAtIHBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICoKKyAqIAlyZXR1cm4gICAgIE5vbmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEUpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdnBvcnQncyBjdXJyZW50IHN0YXR1cyBpbmZvLgorICoKKyAqIAlwYXJhbVtpbl0gCXZwb3J0IAkJcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKiAJcGFyYW1bb3V0XQlhdHRyIAkJcG9pbnRlciB0byByZXR1cm4gdnBvcnQgYXR0cmlidXRlcworICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkgICAgICAgc3RydWN0IGJmYV92cG9ydF9hdHRyX3MgKmF0dHIpCit7CisJaWYgKHZwb3J0ID09IE5VTEwgfHwgYXR0ciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwliZmFfb3NfbWVtc2V0KGF0dHIsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcykpOworCisJYmZhX2Zjc19wb3J0X2dldF9hdHRyKCZ2cG9ydC0+bHBvcnQsICZhdHRyLT5wb3J0X2F0dHIpOworCWF0dHItPnZwb3J0X3N0YXRlID0gYmZhX3NtX3RvX3N0YXRlKHZwb3J0X3NtX3RhYmxlLCB2cG9ydC0+c20pOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHZwb3J0J3Mgc3RhdGlzdGljcy4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCXBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICogCXBhcmFtW291dF0Jc3RhdHMJCXBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IHN0YXRpc3RpY3MgaW4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MgKnN0YXRzKQoreworCSpzdGF0cyA9IHZwb3J0LT52cG9ydF9zdGF0czsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNsZWFyIHZwb3J0J3Mgc3RhdGlzdGljcy4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCXBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X2Nscl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfb3NfbWVtc2V0KCZ2cG9ydC0+dnBvcnRfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MpKTsKK30KKworLyoqCisgKiAgICAgIExvb2t1cCBhIHZpcnR1YWwgcG9ydC4gRXhjbHVkZXMgYmFzZSBwb3J0IGZyb20gbG9va3VwLgorICovCitzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICoKK2JmYV9mY3NfdnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkLCB3d25fdCB2cHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJYmZhX3RyYyhmY3MsIHZmX2lkKTsKKwliZmFfdHJjKGZjcywgdnB3d24pOworCisJZmFicmljID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCB2Zl9pZCk7CisJaWYgKCFmYWJyaWMpIHsKKwkJYmZhX3RyYyhmY3MsIHZmX2lkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdnBvcnQgPSBiZmFfZmNzX2ZhYnJpY192cG9ydF9sb29rdXAoZmFicmljLCB2cHd3bik7CisJcmV0dXJuIHZwb3J0OworfQorCisvKioKKyAqIEZESVNDIFJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9jYl9scHNfZmRpc2NfY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0ID0gdWFyZzsKKworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgc3RhdHVzKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBCRkFfU1RBVFVTX09LOgorCQkvKgorCQkgKiBJbml0aWFsaWF6ZSB0aGUgVi1Qb3J0IGZpZWxkcworCQkgKi8KKwkJX192cG9ydF9mY2lkKHZwb3J0KSA9IGJmYV9scHNfZ2V0X3BpZCh2cG9ydC0+bHBzKTsKKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfSU5WQUxJRF9NQUM6CisJCS8qCisJCSAqIE9ubHkgZm9yIENOQQorCQkgKi8KKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX2FjY19iYWQrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1NUQVRVU19FUFJPVE9DT0w6CisJCXN3aXRjaCAoYmZhX2xwc19nZXRfZXh0c3RhdHVzKHZwb3J0LT5scHMpKSB7CisJCWNhc2UgQkZBX0VQUk9UT19CQURfQUNDRVBUOgorCQkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX2FjY19iYWQrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgQkZBX0VQUk9UT19VTktOT1dOX1JTUDoKKwkJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY191bmtub3duX3JzcCsrOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfRkFCUklDX1JKVDoKKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3JlamVjdHMrKzsKKwkJYmZhX2Zjc192cG9ydF9mZGlzY19yZWplY3RlZCh2cG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKwl9Cit9CisKKy8qKgorICogTE9HTyByZXNwb25zZQorICovCit2b2lkCitiZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQgPSB1YXJnOworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmggYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaAppbmRleCBkNzU3NmYyLi41ZWRkZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaAorKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaApAQCAtMTAwLDYgKzEwMCw4IEBACiAjZGVmaW5lIENUWF9PRkZTRVQgCQkJMHgxMDAwMAogI2RlZmluZSBNQVhfQ0lEX0NOVAkJCTB4NDAwMAogCisjZGVmaW5lIEJOWDJJXzU3MFhfUEFHRV9TSVpFX0RFRkFVTFQJNDA5NgorCiAvKiA1NzA5IGNvbnRleHQgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEJOWDJfTVFfQ09ORklHMgkJCTB4MDAwMDNkMDAKICNkZWZpbmUgQk5YMl9NUV9DT05GSUcyX0NPTlRfU1oJCSgweDdMPDw0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCmluZGV4IDQxZTFiMGUuLjVjOGQ3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKQEAgLTIzODYsNyArMjM4Niw3IEBACiAJCWN0eF9zeiA9IChjb25maWcyICYgQk5YMl9NUV9DT05GSUcyX0NPTlRfU1opID4+IDM7CiAJCWlmIChjdHhfc3opCiAJCQlyZWdfb2ZmID0gQ1RYX09GRlNFVCArIE1BWF9DSURfQ05UICogTUJfS0VSTkVMX0NUWF9TSVpFCi0JCQkJICArIFBBR0VfU0laRSAqCisJCQkJICArIEJOWDJJXzU3MFhfUEFHRV9TSVpFX0RFRkFVTFQgKgogCQkJCSAgKCgoY2lkX251bSAtIGZpcnN0X2w0bDUpIC8gY3R4X3N6KSArIDI1Nik7CiAJCWVsc2UKIAkJCXJlZ19vZmYgPSBDVFhfT0ZGU0VUICsgKE1CX0tFUk5FTF9DVFhfU0laRSAqIGNpZF9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwppbmRleCA5YTdiYTcxLi5jYWZiODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwpAQCAtMTI0Myw3ICsxMjQzLDcgQEAKIAkJY21kc19tYXggPSBCTlgySV9TUV9XUUVTX01JTjsKIAogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmYm54MmlfaXNjc2lfdHJhbnNwb3J0LCBzaG9zdCwKLQkJCQkJICBjbWRzX21heCwgc2l6ZW9mKHN0cnVjdCBibngyaV9jbWQpLAorCQkJCQkgIGNtZHNfbWF4LCAwLCBzaXplb2Yoc3RydWN0IGJueDJpX2NtZCksCiAJCQkJCSAgaW5pdGlhbF9jbWRzbiwgSVNDU0lfTUFYX1RBUkdFVCk7CiAJaWYgKCFjbHNfc2Vzc2lvbikKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYwppbmRleCBjMzk5ZjQ4Li4yNjMxYmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKQEAgLTQyMiw3ICs0MjIsNyBAQAogCUJVR19PTihoYmEgIT0gaXNjc2lfaG9zdF9wcml2KHNob3N0KSk7CiAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmN4Z2IzaV9pc2NzaV90cmFuc3BvcnQsIHNob3N0LAotCQkJCQkgIGNtZHNfbWF4LAorCQkJCQkgIGNtZHNfbWF4LCAwLAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2spICsKIAkJCQkJICBzaXplb2Yoc3RydWN0IGN4Z2IzaV90YXNrX2RhdGEpLAogCQkJCQkgIGluaXRpYWxfY21kc24sIElTQ1NJX01BWF9UQVJHRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCmluZGV4IDExYzg5MzEuLjI2ODE4OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKQEAgLTUwMCw4ICs1MDAsNiBAQAogCWlmICghcmV0KQogCQlnb3RvIGRvbmU7CiAKLQllcnIgPSBTQ1NJX0RIX09LOwotCiAJc3dpdGNoIChzZW5zZV9oZHIuc2Vuc2Vfa2V5KSB7CiAJY2FzZSBOT19TRU5TRToKIAljYXNlIEFCT1JURURfQ09NTUFORDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IGI2YWY2M2MuLjQ5Njc2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtMTkxOCw2ICsxOTE4LDEwIEBACiAJCX0KIAkJc2l6ZSA9IHNpemU+PjE2OwogCQlzaXplICo9IDQ7CisJCWlmIChzaXplID4gTUFYX01FU1NBR0VfU0laRSkgeworCQkJcmNvZGUgPSAtRUlOVkFMOworCQkJZ290byBjbGVhbnVwOworCQl9CiAJCS8qIENvcHkgaW4gdGhlIHVzZXIncyBJMk8gY29tbWFuZCAqLwogCQlpZiAoY29weV9mcm9tX3VzZXIgKG1zZywgdXNlcl9tc2csIHNpemUpKSB7CiAJCQlyY29kZSA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5jIGIvZHJpdmVycy9zY3NpL2dkdGguYwppbmRleCAxODVlNmJjLi45ZThmY2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKQEAgLTI5MDAsNyArMjkwMCw3IEBACiAgICAgICAgIGVpbmRleCA9IGhhbmRsZTsKICAgICBlc3RyLT5ldmVudF9zb3VyY2UgPSAwOwogCi0gICAgaWYgKGVpbmRleCA+PSBNQVhfRVZFTlRTKSB7CisgICAgaWYgKGVpbmRleCA8IDAgfHwgZWluZGV4ID49IE1BWF9FVkVOVFMpIHsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgICAgIHJldHVybiBlaW5kZXg7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCmluZGV4IGM1OTZhYjUuLmEwZTdlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYworKysgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogSGlnaFBvaW50IFJSM3h4eC80eHh4IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBMaW51eAotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgSGlnaFBvaW50IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgSGlnaFBvaW50IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgY2hhciBkcml2ZXJfbmFtZVtdID0gImhwdGlvcCI7CiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZV9sb25nW10gPSAiUm9ja2V0UkFJRCAzeHh4LzR4eHggQ29udHJvbGxlciBkcml2ZXIiOwotc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX3ZlcltdID0gInYxLjMgKDA3MTIwMykiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX3ZlcltdID0gInYxLjYgKDA5MDkxMCkiOwogCiBzdGF0aWMgaW50IGlvcF9zZW5kX3N5bmNfbXNnKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsIHUzMiBtc2csIHUzMiBtaWxsaXNlYyk7CiBzdGF0aWMgdm9pZCBocHRpb3BfZmluaXNoX3Njc2lfcmVxKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsIHUzMiB0YWcsCkBAIC0xMTUsOSArMTE1LDEzIEBACiBzdGF0aWMgaW50IGlvcF9pbnRyX2l0bChzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhKQogewogCXN0cnVjdCBocHRfaW9wbXVfaXRsIF9faW9tZW0gKmlvcCA9IGhiYS0+dS5pdGwuaW9wOworCXZvaWQgX19pb21lbSAqcGx4ID0gaGJhLT51Lml0bC5wbHg7CiAJdTMyIHN0YXR1czsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChwbHggJiYgcmVhZGwocGx4ICsgMHgxMUM1QykgJiAweGYpCisJCXdyaXRlbCgxLCBwbHggKyAweDExQzYwKTsKKwogCXN0YXR1cyA9IHJlYWRsKCZpb3AtPm91dGJvdW5kX2ludHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgSU9QTVVfT1VUQk9VTkRfSU5UX01TRzApIHsKQEAgLTQ2MCwxNSArNDY0LDI1IEBACiAKIHN0YXRpYyBpbnQgaHB0aW9wX21hcF9wY2lfYmFyX2l0bChzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhKQogeworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBoYmEtPnBjaWRldjsKIAloYmEtPnUuaXRsLmlvcCA9IGhwdGlvcF9tYXBfcGNpX2JhcihoYmEsIDApOwotCWlmIChoYmEtPnUuaXRsLmlvcCkKLQkJcmV0dXJuIDA7Ci0JZWxzZQorCWlmIChoYmEtPnUuaXRsLmlvcCA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CisJaWYgKChwY2lkZXYtPmRldmljZSAmIDB4ZmYwMCkgPT0gMHg0NDAwKSB7CisJCWhiYS0+dS5pdGwucGx4ID0gaGJhLT51Lml0bC5pb3A7CisJCWhiYS0+dS5pdGwuaW9wID0gaHB0aW9wX21hcF9wY2lfYmFyKGhiYSwgMik7CisJCWlmIChoYmEtPnUuaXRsLmlvcCA9PSBOVUxMKSB7CisJCQlpb3VubWFwKGhiYS0+dS5pdGwucGx4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaHB0aW9wX3VubWFwX3BjaV9iYXJfaXRsKHN0cnVjdCBocHRpb3BfaGJhICpoYmEpCiB7CisJaWYgKGhiYS0+dS5pdGwucGx4KQorCQlpb3VubWFwKGhiYS0+dS5pdGwucGx4KTsKIAlpb3VubWFwKGhiYS0+dS5pdGwuaW9wKTsKIH0KIApAQCAtMTIzOSwyMiArMTI1MywyMyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdGlvcF9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMyMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzMyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzQxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MTEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTIxKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4MzQxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTQwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MzApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzU0MCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTYwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MjEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQyMTEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzExKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzIyKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQ0MDApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzEyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX212X29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMxMjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9tdl9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzMDIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfbXZfb3BzIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmggYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmgKaW5kZXggYTAyODlmMi4uMGI4NzFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwdGlvcC5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBIaWdoUG9pbnQgUlIzeHh4LzR4eHggY29udHJvbGxlciBkcml2ZXIgZm9yIExpbnV4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMjgsNiArMjI4LDcgQEAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaHB0X2lvcG11X2l0bCBfX2lvbWVtICppb3A7CisJCQl2b2lkIF9faW9tZW0gKnBseDsKIAkJfSBpdGw7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaHB0X2lvcG12X3JlZ3MgKnJlZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggNWYwNDU1MC4uNzZkMjk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtNDE4OSw2ICs0MTg5LDI1IEBACiB9CiAKIC8qKgorICogaXByX2lzcl9laCAtIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZXJyb3IgaGFuZGxlcgorICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CisgKiBAbXNnOgltZXNzYWdlIHRvIGxvZworICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlub25lCisgKiovCitzdGF0aWMgdm9pZCBpcHJfaXNyX2VoKHN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZywgY2hhciAqbXNnKQoreworCWlvYV9jZmctPmVycm9yc19sb2dnZWQrKzsKKwlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICIlc1xuIiwgbXNnKTsKKworCWlmIChXQUlUX0ZPUl9EVU1QID09IGlvYV9jZmctPnNkdF9zdGF0ZSkKKwkJaW9hX2NmZy0+c2R0X3N0YXRlID0gR0VUX0RVTVA7CisKKwlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9OT05FKTsKK30KKworLyoqCiAgKiBpcHJfaXNyIC0gSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQogICogQGlycToJaXJxIG51bWJlcgogICogQGRldnA6CXBvaW50ZXIgdG8gaW9hIGNvbmZpZyBzdHJ1Y3QKQEAgLTQyMDMsNiArNDIyMiw3IEBACiAJdm9sYXRpbGUgdTMyIGludF9yZWcsIGludF9tYXNrX3JlZzsKIAl1MzIgaW9hc2M7CiAJdTE2IGNtZF9pbmRleDsKKwlpbnQgbnVtX2hycnEgPSAwOwogCXN0cnVjdCBpcHJfY21uZCAqaXByX2NtZDsKIAlpcnFyZXR1cm5fdCByYyA9IElSUV9OT05FOwogCkBAIC00MjMzLDEzICs0MjUzLDcgQEAKIAkJCQkgICAgIElQUl9IUlJRX1JFUV9SRVNQX0hBTkRMRV9NQVNLKSA+PiBJUFJfSFJSUV9SRVFfUkVTUF9IQU5ETEVfU0hJRlQ7CiAKIAkJCWlmICh1bmxpa2VseShjbWRfaW5kZXggPj0gSVBSX05VTV9DTURfQkxLUykpIHsKLQkJCQlpb2FfY2ZnLT5lcnJvcnNfbG9nZ2VkKys7Ci0JCQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAiSW52YWxpZCByZXNwb25zZSBoYW5kbGUgZnJvbSBJT0FcbiIpOwotCi0JCQkJaWYgKFdBSVRfRk9SX0RVTVAgPT0gaW9hX2NmZy0+c2R0X3N0YXRlKQotCQkJCQlpb2FfY2ZnLT5zZHRfc3RhdGUgPSBHRVRfRFVNUDsKLQotCQkJCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PTkUpOworCQkJCWlwcl9pc3JfZWgoaW9hX2NmZywgIkludmFsaWQgcmVzcG9uc2UgaGFuZGxlIGZyb20gSU9BIik7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCX0KQEAgLTQyNjYsOCArNDI4MCwxOCBAQAogCiAJCWlmIChpcHJfY21kICE9IE5VTEwpIHsKIAkJCS8qIENsZWFyIHRoZSBQQ0kgaW50ZXJydXB0ICovCi0JCQl3cml0ZWwoSVBSX1BDSUlfSFJSUV9VUERBVEVELCBpb2FfY2ZnLT5yZWdzLmNscl9pbnRlcnJ1cHRfcmVnKTsKLQkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWcpICYgfmludF9tYXNrX3JlZzsKKwkJCWRvIHsKKwkJCQl3cml0ZWwoSVBSX1BDSUlfSFJSUV9VUERBVEVELCBpb2FfY2ZnLT5yZWdzLmNscl9pbnRlcnJ1cHRfcmVnKTsKKwkJCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnKSAmIH5pbnRfbWFza19yZWc7CisJCQl9IHdoaWxlIChpbnRfcmVnICYgSVBSX1BDSUlfSFJSUV9VUERBVEVEICYmCisJCQkJCW51bV9ocnJxKysgPCBJUFJfTUFYX0hSUlFfUkVUUklFUyk7CisKKwkJCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSFJSUV9VUERBVEVEKSB7CisJCQkJaXByX2lzcl9laChpb2FfY2ZnLCAiRXJyb3IgY2xlYXJpbmcgSFJSUSIpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisKIAkJfSBlbHNlCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggMTYzMjQ1YS4uMTliYmNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTQ0LDYgKzE0NCw3IEBACiAjZGVmaW5lIElQUl9JT0FfTUFYX1NFQ1RPUlMJCQkJMzI3NjcKICNkZWZpbmUgSVBSX1ZTRVRfTUFYX1NFQ1RPUlMJCQkJNTEyCiAjZGVmaW5lIElQUl9NQVhfQ0RCX0xFTgkJCQkJMTYKKyNkZWZpbmUgSVBSX01BWF9IUlJRX1JFVFJJRVMJCQkJMwogCiAjZGVmaW5lIElQUl9ERUZBVUxUX0JVU19XSURUSAkJCQkxNgogI2RlZmluZSBJUFJfODBNQnNfU0NTSV9SQVRFCQkoKDgwICogMTApIC8gKElQUl9ERUZBVUxUX0JVU19XSURUSCAvIDgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDJiMWI4MzQuLmVkYzQ5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTgxMSw3ICs4MTEsNyBAQAogCQlnb3RvIGZyZWVfaG9zdDsKIAogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmaXNjc2lfc3dfdGNwX3RyYW5zcG9ydCwgc2hvc3QsCi0JCQkJCSAgY21kc19tYXgsCisJCQkJCSAgY21kc19tYXgsIDAsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV90Y3BfdGFzaykgKwogCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfc3dfdGNwX2hkcmJ1ZiksCiAJCQkJCSAgaW5pdGlhbF9jbWRzbiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IDhkYzczYzQuLmYxYTQyNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC0yNDM2LDcgKzI0MzYsNyBAQAogICovCiBzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKgogaXNjc2lfc2Vzc2lvbl9zZXR1cChzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICppc2NzaXQsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAotCQkgICAgdWludDE2X3QgY21kc19tYXgsIGludCBjbWRfdGFza19zaXplLAorCQkgICAgdWludDE2X3QgY21kc19tYXgsIGludCBkZF9zaXplLCBpbnQgY21kX3Rhc2tfc2l6ZSwKIAkJICAgIHVpbnQzMl90IGluaXRpYWxfY21kc24sIHVuc2lnbmVkIGludCBpZCkKIHsKIAlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKQEAgLTI0ODYsNyArMjQ4Niw4IEBACiAJc2NzaV9jbWRzID0gdG90YWxfY21kcyAtIElTQ1NJX01HTVRfQ01EU19NQVg7CiAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX2FsbG9jX3Nlc3Npb24oc2hvc3QsIGlzY3NpdCwKLQkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3Nlc3Npb24pKTsKKwkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3Nlc3Npb24pICsKKwkJCQkJICBkZF9zaXplKTsKIAlpZiAoIWNsc19zZXNzaW9uKQogCQlnb3RvIGRlY19zZXNzaW9uX2NvdW50OwogCXNlc3Npb24gPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKQEAgLTI1MDMsNiArMjUwNCw3IEBACiAJc2Vzc2lvbi0+bWF4X2NtZHNuID0gaW5pdGlhbF9jbWRzbiArIDE7CiAJc2Vzc2lvbi0+bWF4X3IydCA9IDE7CiAJc2Vzc2lvbi0+dHQgPSBpc2NzaXQ7CisJc2Vzc2lvbi0+ZGRfZGF0YSA9IGNsc19zZXNzaW9uLT5kZF9kYXRhICsgc2l6ZW9mKCpzZXNzaW9uKTsKIAltdXRleF9pbml0KCZzZXNzaW9uLT5laF9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnNlc3Npb24tPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwppbmRleCBiMzM4MTk1Li4zM2NmOTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKQEAgLTk2MCw3ICs5NjAsNiBAQAogCiAJCQl9CiAJCX0KLQkJcmVzID0gMDsKIAl9CiAKIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCA2MWQwODk3Li5jODhmNTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtNTYsOCArNTYsNiBAQAogCSJTQ1NJX1BST1RfV1JJVEVfSU5TRVJUIiwKIAkiU0NTSV9QUk9UX1JFQURfUEFTUyIsCiAJIlNDU0lfUFJPVF9XUklURV9QQVNTIiwKLQkiU0NTSV9QUk9UX1JFQURfQ09OVkVSVCIsCi0JIlNDU0lfUFJPVF9XUklURV9DT05WRVJUIgogfTsKIHN0YXRpYyB2b2lkCiBscGZjX3JlbGVhc2Vfc2NzaV9idWZfczQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqcHNiKTsKQEAgLTExMzEsMTMgKzExMjksMTEgQEAKIAkJCXJldF9wcm9mID0gTFBGQ19QUk9GX0ExOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1NJX1BST1RfUkVBRF9DT05WRVJUOgotCQljYXNlIFNDU0lfUFJPVF9XUklURV9DT05WRVJUOgorCQljYXNlIFNDU0lfUFJPVF9SRUFEX1BBU1M6CisJCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1BBU1M6CiAJCQlyZXRfcHJvZiA9IExQRkNfUFJPRl9BU1QxOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1NJX1BST1RfUkVBRF9QQVNTOgotCQljYXNlIFNDU0lfUFJPVF9XUklURV9QQVNTOgogCQljYXNlIFNDU0lfUFJPVF9OT1JNQUw6CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgIkJhZCBvcC9ndWFyZDolZC8lZCBjb21iaW5hdGlvblxuIiwKQEAgLTExNTcsOCArMTE1Myw2IEBACiAJCQlyZXRfcHJvZiA9IExQRkNfUFJPRl9DMTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgU0NTSV9QUk9UX1JFQURfQ09OVkVSVDoKLQkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVDoKIAkJY2FzZSBTQ1NJX1BST1RfUkVBRF9JTlNFUlQ6CiAJCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1NUUklQOgogCQljYXNlIFNDU0lfUFJPVF9OT1JNQUw6CkBAIC0xMjA5LDggKzEyMDMsNyBAQAogCXN0YXRpYyBpbnQgY250OwogCiAJaWYgKHByb3RjbnQgJiYgKG9wID09IFNDU0lfUFJPVF9XUklURV9TVFJJUCB8fAotCQkJCW9wID09IFNDU0lfUFJPVF9XUklURV9QQVNTIHx8Ci0JCQkJb3AgPT0gU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQpKSB7CisJCQkJb3AgPT0gU0NTSV9QUk9UX1dSSVRFX1BBU1MpKSB7CiAKIAkJY250Kys7CiAJCXNwdCA9IHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNjc2lfcHJvdF9zZ2xpc3Qoc2MpKSkgKwpAQCAtMTUwMSw4ICsxNDk0LDYgQEAKIAljYXNlIFNDU0lfUFJPVF9XUklURV9TVFJJUDoKIAljYXNlIFNDU0lfUFJPVF9SRUFEX1BBU1M6CiAJY2FzZSBTQ1NJX1BST1RfV1JJVEVfUEFTUzoKLQljYXNlIFNDU0lfUFJPVF9XUklURV9DT05WRVJUOgotCWNhc2UgU0NTSV9QUk9UX1JFQURfQ09OVkVSVDoKIAkJcmV0ID0gTFBGQ19QR19UWVBFX0RJRl9CVUY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZwppbmRleCA0YTg2ODU1Li43MGM0YzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAjIEtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBNUFQyU0FTCiAjCiAjIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCi0jIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogIyAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCmluZGV4IDdiYjJlY2UuLmY5ZjZjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaApAQCAtOCw3ICs4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgc2NhdHRlci9nYXRoZXIgZm9ybWF0cy4KICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMSwgMjAwNgogICoKLSAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjExCisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xMgogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTQ1LDYgKzQ1LDEzIEBACiAgKiAgMTAtMDItMDggIDAyLjAwLjEwICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgogICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgZnJvbSBtcGkyX2luaXQuaC4KICAqICAwMS0xOS0wOSAgMDIuMDAuMTEgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjEyICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgSW4gYWxsIHJlcXVlc3QgYW5kIHJlcGx5IGRlc2NyaXB0b3JzLCByZXBsYWNlZCBWRl9JRAorICogICAgICAgICAgICAgICAgICAgICAgZmllbGQgd2l0aCBNU0l4SW5kZXggZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIERldkhhbmRsZSBmaWVsZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIGFuZCBtYWRlIHRob3NlCisgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJBSUQgQWNjZWxlcmF0b3IgZnVuY3Rpb25hbGl0eS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTcwLDcgKzc3LDcgQEAKICNkZWZpbmUgTVBJMl9WRVJTSU9OXzAyXzAwICAgICAgICAgICAgICAgICAgKDB4MDIwMCkKIAogLyogdmVyc2lvbmluZyBmb3IgdGhpcyBNUEkgaGVhZGVyIHNldCAqLwotI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgwQikKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MEMpCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfTUFTSyAgICAgICAoMHhGRjAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfU0hJRlQgICAgICAoOCkKQEAgLTI1Nyw3ICsyNjQsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfREVGQVVMVF9SRVFVRVNUX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KICAgICBVMTYgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQ7ICAgIC8qIDB4MDYgKi8KQEAgLTI3MSw2ICsyNzgsNyBAQAogI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX1RBUkdFVCAgICAgICAgICAgICAoMHgwMikKICNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSElHSF9QUklPUklUWSAgICAgICAgICAgKDB4MDYpCiAjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0RFRkFVTFRfVFlQRSAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19SQUlEX0FDQ0VMRVJBVE9SICAgICAgICAoMHgwQSkKIAogI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19JT0NfRklGT19NQVJLRVIgKDB4MDEpCiAKQEAgLTI3OSw3ICsyODcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfSElHSF9QUklPUklUWV9SRVFVRVNUX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KICAgICBVMTYgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KQEAgLTI5Myw3ICszMDEsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KICAgICBVMTYgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KQEAgLTMwNiw3ICszMTQsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9UQVJHRVRfUkVRVUVTVF9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTE2ICAgICAgICAgICAgIElvSW5kZXg7ICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCkBAIC0zMTUsMTQgKzMyMywyOSBAQAogICBNcGkyU0NTSVRhcmdldFJlcXVlc3REZXNjcmlwdG9yX3QsCiAgIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lUYXJnZXRSZXF1ZXN0RGVzY3JpcHRvcl90OwogCisKKy8qIFJBSUQgQWNjZWxlcmF0b3IgUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUiB7CisgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCit9IE1QSTJfUkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTXBpMlJBSURBY2NlbGVyYXRvclJlcXVlc3REZXNjcmlwdG9yX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlJBSURBY2NlbGVyYXRvclJlcXVlc3REZXNjcmlwdG9yX3Q7CisKKwogLyogdW5pb24gb2YgUmVxdWVzdCBEZXNjcmlwdG9ycyAqLwogdHlwZWRlZiB1bmlvbiBfTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04KIHsKLSAgICBNUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgRGVmYXVsdDsKLSAgICBNUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SICAgSGlnaFByaW9yaXR5OwotICAgIE1QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICBTQ1NJSU87Ci0gICAgTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgIFNDU0lUYXJnZXQ7Ci0gICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmRzOworICAgIE1QSTJfREVGQVVMVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICAgICAgRGVmYXVsdDsKKyAgICBNUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgIEhpZ2hQcmlvcml0eTsKKyAgICBNUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgICAgIFNDU0lJTzsKKyAgICBNUEkyX1NDU0lfVEFSR0VUX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgIFNDU0lUYXJnZXQ7CisgICAgTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICBSQUlEQWNjZWxlcmF0b3I7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkczsKIH0gTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04sCiAgIE1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdDsKIApAQCAtMzMzLDE5ICszNTYsMjAgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDE7ICAgLyogMHgwMiAqLwogICAgIFUzMiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDI7ICAgLyogMHgwNCAqLwogfSBNUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUiwKICAgTXBpMkRlZmF1bHRSZXBseURlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRGVmYXVsdFJlcGx5RGVzY3JpcHRvcl90OwogCiAvKiBkZWZpbmVzIGZvciB0aGUgUmVwbHlGbGFncyBmaWVsZCAqLwotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0sgICAgICAgICAgICAgICAoMHgwRikKLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfU0NTSV9JT19TVUNDRVNTICAgICAgICAgKDB4MDApCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX0FERFJFU1NfUkVQTFkgICAgICAgICAgICgweDAxKQotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRBU1NJU1RfU1VDQ0VTUyAgICAoMHgwMikKLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUX0NPTU1BTkRfQlVGRkVSICAgKDB4MDMpCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU9fU1VDQ0VTUyAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRBU1NJU1RfU1VDQ0VTUyAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVF9DT01NQU5EX0JVRkZFUiAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTICAgICgweDA1KQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19VTlVTRUQgICAgICAgICAgICAgICAgICAgICAgKDB4MEYpCiAKIC8qIHZhbHVlcyBmb3IgbWFya2luZyBhIHJlcGx5IGRlc2NyaXB0b3IgYXMgdW51c2VkICovCiAjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX1VOVVNFRF9XT1JEMF9NQVJLICAgICAgICAgICAgICgweEZGRkZGRkZGKQpAQCAtMzU1LDcgKzM3OSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMzIgICAgICAgICAgICAgUmVwbHlGcmFtZUFkZHJlc3M7ICAgICAgICAgIC8qIDB4MDQgKi8KIH0gTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IsCkBAIC0zNjgsMTAgKzM5MiwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgVGFza1RhZzsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KLSAgICBVMTYgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVMTYgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KIH0gTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAogICBNcGkyU0NTSUlPU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90LApAQCAtMzgyLDcgKzQwNiw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTggICAgICAgICAgICAgIFNlcXVlbmNlTnVtYmVyOyAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTggICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA1ICovCkBAIC0zOTcsNyArNDIxLDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1RBUkdFVF9DT01NQU5EX0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTggICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTggICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCiAgICAgVTE2ICAgICAgICAgICAgIEluaXRpYXRvckRldkhhbmRsZTsgICAgICAgICAvKiAweDA0ICovCkBAIC00MTEsMTUgKzQzNSwyOCBAQAogI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9UQ0JfRkxBR1NfUEhZTlVNX01BU0sgICAgICgweDNGKQogCiAKKy8qIFJBSUQgQWNjZWxlcmF0b3IgU3VjY2VzcyBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiB7CisgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCit9IE1QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKKyAgTXBpMlJBSURBY2NlbGVyYXRvclN1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyUkFJREFjY2VsZXJhdG9yU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90OworCisKIC8qIHVuaW9uIG9mIFJlcGx5IERlc2NyaXB0b3JzICovCiB0eXBlZGVmIHVuaW9uIF9NUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OCiB7Ci0gICAgTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICBEZWZhdWx0OwotICAgIE1QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgQWRkcmVzc1JlcGx5OwotICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgU0NTSUlPU3VjY2VzczsKLSAgICBNUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgIFRhcmdldEFzc2lzdFN1Y2Nlc3M7Ci0gICAgTVBJMl9UQVJHRVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUiBUYXJnZXRDb21tYW5kQnVmZmVyOwotICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7CisgICAgTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgRGVmYXVsdDsKKyAgICBNUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICBBZGRyZXNzUmVwbHk7CisgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgU0NTSUlPU3VjY2VzczsKKyAgICBNUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICBUYXJnZXRBc3Npc3RTdWNjZXNzOworICAgIE1QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IgICAgIFRhcmdldENvbW1hbmRCdWZmZXI7CisgICAgTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiAgUkFJREFjY2VsZXJhdG9yU3VjY2VzczsKKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkczsKIH0gTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OLAogICBNcGkyUmVwbHlEZXNjcmlwdG9yc1VuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90OwogCkBAIC00NTgsNiArNDk1LDcgQEAKICNkZWZpbmUgTVBJMl9GVU5DVElPTl9ESUFHX1JFTEVBU0UgICAgICAgICAgICAgICAgICAoMHgxRSkgLyogRGlhZ25vc3RpYyBSZWxlYXNlICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX0NNRF9CVUZfQkFTRV9QT1NUICAgICAgKDB4MjQpIC8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBQb3N0IEJhc2UgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9MSVNUX1BPU1QgICAgICAoMHgyNSkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgTGlzdCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1JBSURfQUNDRUxFUkFUT1IgICAgICAgICAgICAgICgweDJDKSAvKiBSQUlEIEFjY2VsZXJhdG9yKi8KIAogCiAKQEAgLTU1NSwxMiArNTkzLDE3IEBACiAKICNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfRElBR05PU1RJQ19SRUxFQVNFRCAgICAgICAgICAoMHgwMEEwKQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgUkFJRCBBY2NlbGVyYXRvciB2YWx1ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfUkFJRF9BQ0NFTF9FUlJPUiAgICAgICAgICAgICAoMHgwMEIwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgSU9DU3RhdHVzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBsb2cgaW5mbyBpcyBhdmFpbGFibGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfRkxBR19MT0dfSU5GT19BVkFJTEFCTEUgICgweDgwMDApCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFICAgICAgKDB4ODAwMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIElPQ0xvZ0luZm8gVHlwZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaAppbmRleCAyZjI3Y2Y2Li5hYjQ3YzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgQ29uZmlndXJhdGlvbiBtZXNzYWdlcyBhbmQgcGFnZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgTm92ZW1iZXIgMTAsIDIwMDYKICAqCi0gKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTAKKyAqICAgIG1waTJfY25mZy5oIFZlcnNpb246ICAwMi4wMC4xMQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTk1LDYgKzk1LDExIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfREVWSUNFX0JMT0NLRUQgZGVmaW5lLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUG9ydEdyb3VwcywgRG1hR3JvdXAsIGFuZCBDb250cm9sR3JvdXAgZmllbGRzIHRvCiAgKiAgICAgICAgICAgICAgICAgICAgICBTQVMgRGV2aWNlIFBhZ2UgMC4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTEgIEFkZGVkIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA1IGFuZCBJTworICogICAgICAgICAgICAgICAgICAgICAgVW5pdCBQYWdlIDYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBleHBhbmRlciByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkgZGF0YSB0byBTQVMKKyAqICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQSFkgUGFnZSAyIGFuZCBTQVMgUEhZIFBhZ2UgMy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTcyMyw2ICs3MjgsNjUgQEAKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFM19HUElPX1NFVFRJTkdfT04gICAgICAgICAgICAgICAgKDB4MDAwMSkKIAogCisvKiBJTyBVbml0IFBhZ2UgNSAqLworCisvKgorICogVXBwZXIgbGF5ZXIgY29kZSAoZHJpdmVycywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5QYWdlTGVuZ3RoIG9yIE51bURtYUVuZ2luZXMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX0lPVU5JVFBBR0U1X0RNQUVOR0lORV9FTlRSSUVTCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BRU5HSU5FX0VOVFJJRVMgICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzUgeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsJCQkJLyogMHgwMCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJhaWRBY2NlbGVyYXRvckJ1ZmZlckJhc2VBZGRyZXNzOyAgLyogMHgwNCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJhaWRBY2NlbGVyYXRvckJ1ZmZlclNpemU7ICAgICAgICAgLyogMHgwQyAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJhaWRBY2NlbGVyYXRvckNvbnRyb2xCYXNlQWRkcmVzczsgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBQ29udHJvbFNpemU7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE51bURtYUVuZ2luZXM7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxRCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBTWluQ29udHJvbFNpemU7ICAgICAgICAgICAgICAgICAgLyogMHgxRSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBTWF4Q29udHJvbFNpemU7ICAgICAgICAgICAgICAgICAgLyogMHgxRiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERtYUVuZ2luZUNhcGFiaWxpdGllcworCQkJCVtNUEkyX0lPVU5JVFBBR0U1X0RNQUVOR0lORV9FTlRSSUVTXTsgLyogMHgyQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfNSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfNSwKKyAgTXBpMklPVW5pdFBhZ2U1X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPVW5pdFBhZ2U1X3Q7CisKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgKDB4MDApCisKKy8qIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA1IERtYUVuZ2luZUNhcGFiaWxpdGllcyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfTUFTS19NQVhfUkVRVUVTVFMgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfU0hJRlRfTUFYX1JFUVVFU1RTICAgICAoMTYpCisKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX0VFRFAgICAgICAgICAgICAgICAgICAgKDB4MDAwOCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX1BBUklUWV9HRU5FUkFUSU9OICAgICAgKDB4MDAwNCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX0hBU0hJTkcgICAgICAgICAgICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX0VOQ1JZUFRJT04gICAgICAgICAgICAgKDB4MDAwMSkKKworCisvKiBJTyBVbml0IFBhZ2UgNiAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzYgeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQUhvc3RDb250cm9sU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmFpZEFjY2VsZXJhdG9ySG9zdENvbnRyb2xCYXNlQWRkcmVzczsgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzYsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzYsCisgIE1waTJJT1VuaXRQYWdlNl90LCBNUEkyX1BPSU5URVIgcE1waTJJT1VuaXRQYWdlNl90OworCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTZfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDAwKQorCisvKiBkZWZpbmVzIGZvciBJTyBVbml0IFBhZ2UgNiBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U2X0ZMQUdTX0VOQUJMRV9SQUlEX0FDQ0VMRVJBVE9SICAoMHgwMDAxKQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgSU9DIENvbmZpZyBQYWdlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MDksMTAgKzE3NzMsMTQgQEAKICAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3RpdmVab25lTWFuYWdlclNBU0FkZHJlc3M7LyogMHgyQyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpvbmVMb2NrSW5hY3Rpdml0eUxpbWl0OyAgICAvKiAweDM0ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MzYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lVG9SZWR1Y2VkRnVuYzsgICAgICAgICAgLyogMHgzOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxUaW1lVG9SZWR1Y2VkRnVuYzsgICAvKiAweDM5ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UmVkdWNlZEZ1bmNUaW1lOyAgICAgICAgIC8qIDB4M0EgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgzQiAqLwogfSBNUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzAsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wLAogICBNcGkyRXhwYW5kZXJQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJFeHBhbmRlclBhZ2UwX3Q7CiAKLSNkZWZpbmUgTVBJMl9TQVNFWFBBTkRFUjBfUEFHRVZFUlNJT04gICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfU0FTRVhQQU5ERVIwX1BBR0VWRVJTSU9OICAgICAgICgweDA2KQogCiAvKiB2YWx1ZXMgZm9yIFNBUyBFeHBhbmRlciBQYWdlIDAgRGlzY292ZXJ5U3RhdHVzIGZpZWxkICovCiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19NQVhfRU5DTE9TVVJFU19FWENFRUQgICAgICAgICAoMHg4MDAwMDAwMCkKQEAgLTE3MzcsNiArMTgwNSw3IEBACiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19MT09QX0RFVEVDVEVEICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKIAogLyogdmFsdWVzIGZvciBTQVMgRXhwYW5kZXIgUGFnZSAwIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19SRURVQ0VEX0ZVTkNUSU9OQUxJVFkgICAgICAoMHgyMDAwKQogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfWk9ORV9MT0NLRUQgICAgICAgICAgICAgICAgKDB4MTAwMCkKICNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX1NVUFBPUlRFRF9QSFlTSUNBTF9QUkVTICAgICgweDA4MDApCiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19BU1NFUlRFRF9QSFlTSUNBTF9QUkVTICAgICAoMHgwNDAwKQpAQCAtMTk0NCw2ICsyMDEzLDEzMyBAQAogI2RlZmluZSBNUEkyX1NBU1BIWTFfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMSkKIAogCisvKiBTQVMgUEhZIFBhZ2UgMiAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQVNQSFkyX1BIWV9FVkVOVCB7CisgICAgVTggICAgICAgICAgUGh5RXZlbnRDb2RlOyAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgUGh5RXZlbnRJbmZvOyAgICAgICAvKiAweDA0ICovCit9IE1QSTJfU0FTUEhZMl9QSFlfRVZFTlQsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNQSFkyX1BIWV9FVkVOVCwKKyAgTXBpMlNhc1BoeTJQaHlFdmVudF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNQaHkyUGh5RXZlbnRfdDsKKworLyogdXNlIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFXyBmb3IgdGhlIFBoeUV2ZW50Q29kZSBmaWVsZCAqLworCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlFdmVudHMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX1NBU1BIWTJfUEhZX0VWRU5UX01BWAorI2RlZmluZSBNUEkyX1NBU1BIWTJfUEhZX0VWRU5UX01BWCAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMiB7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeUV2ZW50czsgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIE1QSTJfU0FTUEhZMl9QSFlfRVZFTlQgICAgICAgICAgICAgIFBoeUV2ZW50W01QSTJfU0FTUEhZMl9QSFlfRVZFTlRfTUFYXTsKKwkJCQkJCQkJLyogMHgxMCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMiwKKyAgTXBpMlNhc1BoeVBhZ2UyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeVBhZ2UyX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQSFkyX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCisKKworLyogU0FTIFBIWSBQYWdlIDMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FTUEhZM19QSFlfRVZFTlRfQ09ORklHIHsKKyAgICBVOCAgICAgICAgICBQaHlFdmVudENvZGU7ICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICBDb3VudGVyVHlwZTsgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICBUaHJlc2hvbGRXaW5kb3c7ICAgIC8qIDB4MDUgKi8KKyAgICBVOCAgICAgICAgICBUaW1lVW5pdHM7ICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVMzIgICAgICAgICBFdmVudFRocmVzaG9sZDsgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICBUaHJlc2hvbGRGbGFnczsgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MEUgKi8KK30gTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9DT05GSUcsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9DT05GSUcsCisgIE1waTJTYXNQaHkzUGh5RXZlbnRDb25maWdfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5M1BoeUV2ZW50Q29uZmlnX3Q7CisKKy8qIHZhbHVlcyBmb3IgUGh5RXZlbnRDb2RlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX05PX0VWRU5UICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfSU5WQUxJRF9EV09SRCAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SVU5OSU5HX0RJU1BBUklUWV9FUlJPUiAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0xPU1NfRFdPUkRfU1lOQyAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUEhZX1JFU0VUX1BST0JMRU0gICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9FTEFTVElDSVRZX0JVRl9PVkVSRkxPVyAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0VSUk9SICAgICAgICAgICAgICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQUREUl9GUkFNRV9FUlJPUiAgICAgICAgICgweDIwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9BQ19PUEVOX1JFSkVDVCAgICAgICAgICAgKDB4MjEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FDX09QRU5fUkVKRUNUICAgICAgICAgICAoMHgyMikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfUkNfT1BFTl9SRUpFQ1QgICAgICAgICAgICgweDIzKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9SQ19PUEVOX1JFSkVDVCAgICAgICAgICAgKDB4MjQpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FJUF9QQVJUSUFMX1dBSVRJTkdfT04gICAoMHgyNSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQUlQX0NPTk5FQ1RfV0FJVElOR19PTiAgICgweDI2KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9CUkVBSyAgICAgICAgICAgICAgICAgICAgKDB4MjcpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0JSRUFLICAgICAgICAgICAgICAgICAgICAoMHgyOCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfQlJFQUtfVElNRU9VVCAgICAgICAgICAgICAgICgweDI5KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9DT05ORUNUSU9OICAgICAgICAgICAgICAgICAgKDB4MkEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BFQUtUWF9QQVRIV0FZX0JMT0NLRUQgICAgICAoMHgyQikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUEVBS1RYX0FSQl9XQUlUX1RJTUUgICAgICAgICgweDJDKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9QRUFLX0FSQl9XQUlUX1RJTUUgICAgICAgICAgKDB4MkQpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BFQUtfQ09OTkVDVF9USU1FICAgICAgICAgICAoMHgyRSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfU1NQX0ZSQU1FUyAgICAgICAgICAgICAgICgweDQwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TU1BfRlJBTUVTICAgICAgICAgICAgICAgKDB4NDEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1NTUF9FUlJPUl9GUkFNRVMgICAgICAgICAoMHg0MikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU1NQX0VSUk9SX0ZSQU1FUyAgICAgICAgICgweDQzKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9DUkVESVRfQkxPQ0tFRCAgICAgICAgICAgKDB4NDQpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0NSRURJVF9CTE9DS0VEICAgICAgICAgICAoMHg0NSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfU0FUQV9GUkFNRVMgICAgICAgICAgICAgICgweDUwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TQVRBX0ZSQU1FUyAgICAgICAgICAgICAgKDB4NTEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1NBVEFfT1ZFUkZMT1cgICAgICAgICAgICAgICAoMHg1MikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfU01QX0ZSQU1FUyAgICAgICAgICAgICAgICgweDYwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TTVBfRlJBTUVTICAgICAgICAgICAgICAgKDB4NjEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX1NNUF9FUlJPUl9GUkFNRVMgICAgICAgICAoMHg2MykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfSE9UUExVR19USU1FT1VUICAgICAgICAgICAgICgweEQwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9NSVNBTElHTkVEX01VWF9QUklNSVRJVkUgICAgKDB4RDEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FJUCAgICAgICAgICAgICAgICAgICAgICAoMHhEMikKKworLyogdmFsdWVzIGZvciB0aGUgQ291bnRlclR5cGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0NPVU5URVJfVFlQRV9XUkFQUElORyAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfQ09VTlRFUl9UWVBFX1NBVFVSQVRJTkcgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19DT1VOVEVSX1RZUEVfUEVBS19WQUxVRSAgICAgICAgICAgICAgICAoMHgwMikKKworLyogdmFsdWVzIGZvciB0aGUgVGltZVVuaXRzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXzEwX01JQ1JPU0VDT05EUyAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RJTUVfVU5JVFNfMTAwX01JQ1JPU0VDT05EUyAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18xX01JTExJU0VDT05EICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXzEwX01JTExJU0VDT05EUyAgICAgICAgICAgICAoMHgwMykKKworLyogdmFsdWVzIGZvciB0aGUgVGhyZXNob2xkRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RGTEFHU19QSFlfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19URkxBR1NfRVZFTlRfTk9USUZZICAgICAgICAgICAgICAgICAgICAoMHgwMDAxKQorCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5RXZlbnRzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9NQVgKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9NQVggICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzMgeworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlFdmVudHM7ICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBNUEkyX1NBU1BIWTNfUEhZX0VWRU5UX0NPTkZJRyAgICAgICBQaHlFdmVudENvbmZpZworCQkJCQlbTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9NQVhdOyAvKiAweDEwICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8zLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8zLAorICBNcGkyU2FzUGh5UGFnZTNfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5UGFnZTNfdDsKKworI2RlZmluZSBNUEkyX1NBU1BIWTNfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMCkKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgIFNBUyBQb3J0IENvbmZpZyBQYWdlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0IGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmY2FhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0CkBAIC0wLDAgKzEsMzM0IEBACisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgRnVzaW9uLU1QVCBNUEkgMi4wIEhlYWRlciBGaWxlIENoYW5nZSBIaXN0b3J5CisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIZWFkZXIgU2V0IFJlbGVhc2UgVmVyc2lvbjogICAgMDIuMDAuMTIKKyBIZWFkZXIgU2V0IFJlbGVhc2UgRGF0ZTogICAgICAgMDUtMDYtMDkKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIEZpbGVuYW1lICAgICAgICAgICAgICAgQ3VycmVudCB2ZXJzaW9uICAgICBQcmlvciB2ZXJzaW9uCisgLS0tLS0tLS0tLSAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0KKyBtcGkyLmggICAgICAgICAgICAgICAgIDAyLjAwLjEyICAgICAgICAgICAgMDIuMDAuMTEKKyBtcGkyX2NuZmcuaCAgICAgICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTAKKyBtcGkyX2luaXQuaCAgICAgICAgICAgIDAyLjAwLjA3ICAgICAgICAgICAgMDIuMDAuMDYKKyBtcGkyX2lvYy5oICAgICAgICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTAKKyBtcGkyX3JhaWQuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDMKKyBtcGkyX3Nhcy5oICAgICAgICAgICAgIDAyLjAwLjAyICAgICAgICAgICAgMDIuMDAuMDIKKyBtcGkyX3RhcmcuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDMKKyBtcGkyX3Rvb2wuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDIKKyBtcGkyX3R5cGUuaCAgICAgICAgICAgIDAyLjAwLjAwICAgICAgICAgICAgMDIuMDAuMDAKKyBtcGkyX3JhLmggICAgICAgICAgICAgIDAyLjAwLjAwCisgbXBpMl9oaXN0b3J5LnR4dCAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEyCisKKworICogIERhdGUgICAgICBWZXJzaW9uICAgRGVzY3JpcHRpb24KKyAqICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA2LTI2LTA3ICAwMi4wMC4wMiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDMgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBSZXBseVBvc3RIb3N0SW5kZXggcmVnaXN0ZXIgdG8gb2Zmc2V0IDB4NkMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NZU1RFTV9JTlRFUkZBQ0VfUkVHUyBhbmQgbW9kaWZpZWQgdGhlIGRlZmluZSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfUkVQTFlfUE9TVF9IT1NUX0lOREVYX09GRlNFVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHVuaW9uIG9mIHJlcXVlc3QgZGVzY3JpcHRvcnMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB1bmlvbiBvZiByZXBseSBkZXNjcmlwdG9ycy4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDQgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgZm9yIE1QSTJfVkVSU0lPTl8wMl8wMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIHRoZSBzaXplIG9mIHRoZSBGdW5jdGlvbkRlcGVuZGVudDUgZmllbGQgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0RFRkFVTFRfUkVQTFkgc3RydWN0dXJlLgorICogIDEyLTE4LTA3ICAwMi4wMC4wNSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgdGhlIE1QSS1kZWZpbmVkIEZhdWx0IENvZGVzIGFuZCBleHRlbmRlZCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Qgc3BlY2lmaWMgY29kZXMgdXAgdG8gMHhFRkZGLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYSBzaXh0aCBrZXkgdmFsdWUgZm9yIHRoZSBXcml0ZVNlcXVlbmNlIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hhbmdlZCB0aGUgZmx1c2ggdmFsdWUgdG8gMHgwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbWVzc2FnZSBmdW5jdGlvbiBjb2RlcyBmb3IgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdAorICogICAgICAgICAgICAgICAgICAgICAgYW5kIERpYWduc290aWMgUmVsZWFzZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE5ldyBJT0NTdGF0dXMgZGVmaW5lOiBNUEkyX0lPQ1NUQVRVU19ESUFHTk9TVElDX1JFTEVBU0VECisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBNUEkyX1ZFUlNJT05fVU5JT04gZnJvbSBtcGkyX2lvYy5oLgorICogIDAyLTI5LTA4ICAwMi4wMC4wNiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwMy0wMy0wOCAgMDIuMDAuMDcgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDUtMjEtMDggIDAyLjAwLjA4ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgI2RlZmluZXMgZm9yIG1hcmtpbmcgYSByZXBseSBkZXNjcmlwdG9yIGFzIHVudXNlZC4KKyAqICAwNi0yNy0wOCAgMDIuMDAuMDkgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMTAtMDItMDggIDAyLjAwLjEwICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgZnJvbSBtcGkyX2luaXQuaC4KKyAqICAwMS0xOS0wOSAgMDIuMDAuMTEgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjEyICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgSW4gYWxsIHJlcXVlc3QgYW5kIHJlcGx5IGRlc2NyaXB0b3JzLCByZXBsYWNlZCBWRl9JRAorICogICAgICAgICAgICAgICAgICAgICAgZmllbGQgd2l0aCBNU0l4SW5kZXggZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIERldkhhbmRsZSBmaWVsZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIGFuZCBtYWRlIHRob3NlCisgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJBSUQgQWNjZWxlcmF0b3IgZnVuY3Rpb25hbGl0eS4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX2NuZmcuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwNi0wNC0wNyAgMDIuMDAuMDEgIEFkZGVkIGRlZmluZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMiBQaHlGbGFncy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1hbnVmYWN0dXJpbmcgUGFnZSAxMS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19DT05ORUNUT1JfRU5EX0RFVklDRQorICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgorICogIDA2LTI2LTA3ICAwMi4wMC4wMiAgQWRkaW5nIGdlbmVyaWMgc3RydWN0dXJlIGZvciBwcm9kdWN0LXNwZWNpZmljCisgKiAgICAgICAgICAgICAgICAgICAgICBNYW51ZmFjdHVyaW5nIHBhZ2VzOiBNUEkyX0NPTkZJR19QQUdFX01BTlVGQUNUVVJJTkdfUFMuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXdvcmsgb2YgQklPUyBQYWdlIDIgY29uZmlndXJhdGlvbiBwYWdlLgorICogICAgICAgICAgICAgICAgICAgICAgRml4ZWQgTVBJMl9CSU9TUEFHRTJfQk9PVF9ERVZJQ0UgdG8gYmUgYSB1bmlvbiBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgY29uZmlndXJhdGlvbiBwYWdlcyBJT0MgUGFnZSA4IGFuZCBEcml2ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIFBlcnNpc3RlbnQgTWFwcGluZyBQYWdlIDAuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAzICBNb2RpZmllZCBjb25maWd1cmF0aW9uIHBhZ2VzIGRlYWxpbmcgd2l0aCBJbnRlZ3JhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICBSQUlEIChNYW51ZmFjdHVyaW5nIFBhZ2UgNCwgUkFJRCBWb2x1bWUgUGFnZXMgMCBhbmQgMSwKKyAqICAgICAgICAgICAgICAgICAgICAgIFJBSUQgUGh5c2ljYWwgRGlzayBQYWdlcyAwIGFuZCAxLCBSQUlEIENvbmZpZ3VyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMCkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgdmFsdWUgZm9yIEFjY2Vzc1N0YXR1cyBmaWVsZCBvZiBTQVMgRGV2aWNlCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDAgKF9TQVRBX05FRURTX0lOSVRJQUxJWkFUSU9OKS4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDQgIEFkZGVkIG1pc3NpbmcgU0VQRGV2SGFuZGxlIGZpZWxkIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0NPTkZJR19QQUdFX1NBU19FTkNMT1NVUkVfMC4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDUgIE1vZGlmaWVkIElPIFVuaXQgUGFnZSAwIHRvIHVzZSAzMi1iaXQgdmVyc2lvbiBmaWVsZHMgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBOVkRBVEEuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBJT0MgUGFnZSA3IHRvIHVzZSBtYXNrcyBhbmQgYWRkZWQgZmllbGQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBTQVNCcm9hZGNhc3RQcmltaXRpdmVNYXNrcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfQ09ORklHX1BBR0VfQklPU180LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9DT05GSUdfUEFHRV9MT0dfMC4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDYgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgRGV2aWNlIElEcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZWQgSW50ZWdyYXRlZCBSQUlEIGNvbmZpZ3VyYXRpb24gcGFnZXMgaW5jbHVkaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICBNYW51ZmFjdHVyaW5nIFBhZ2UgNCwgSU9DIFBhZ2UgNiwgYW5kIFJBSUQgQ29uZmlndXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwLgorICogIDA1LTIxLTA4ICAwMi4wMC4wNyAgQWRkZWQgZGVmaW5lIE1QSTJfTUFOUEFHRTRfTUlYX1NTRF9TQVNfU0FUQS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBNUEkyX01BTlBBR0U0X1BIWVNESVNLXzEyOE1CX0NPRVJDSU9OLgorICogICAgICAgICAgICAgICAgICAgICAgRml4ZWQgZGVmaW5lIE1QSTJfSU9DUEFHRThfRkxBR1NfRU5DTE9TVVJFX1NMT1RfTUFQUElORy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG1pc3NpbmcgTWF4TnVtUm91dGVkU2FzQWRkcmVzc2VzIGZpZWxkIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUG9ydCBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBzdHJ1Y3R1cmUgbGF5b3V0IGZvcgorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9DT05GSUdfUEFHRV9EUklWRVJfTUFQUElOR18wLgorICogIDA2LTI3LTA4ICAwMi4wMC4wOCAgQ2hhbmdlZCBNUEkyX0NPTkZJR19QQUdFX1JEX1BESVNLXzEgdG8gdXNlCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1JBSURfUEhZU19ESVNLMV9QQVRIX01BWCB0byBzaXplIHRoZSBhcnJheS4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDkgIENoYW5nZWQgTVBJMl9SQUlEX1BHQURfQ09ORklHTlVNX01BU0sgZnJvbSAweDAwMDBGRkZGCisgKiAgICAgICAgICAgICAgICAgICAgICB0byAweDAwMDAwMEZGLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyB2YWx1ZXMgZm9yIHRoZSBQaHlzaWNhbCBEaXNrIENvZXJjaW9uIFNpemUKKyAqICAgICAgICAgICAgICAgICAgICAgIGJpdHMgaW4gdGhlIEZsYWdzIGZpZWxkIG9mIE1hbnVmYWN0dXJpbmcgUGFnZSA0LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgcHJvZHVjdC1zcGVjaWZpYyBNYW51ZmFjdHVyaW5nIHBhZ2VzIDE2IHRvIDMxLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgRmxhZ3MgYml0cyBmb3IgY29udHJvbGxpbmcgd3JpdGUgY2FjaGUgb24gU0FUQQorICogICAgICAgICAgICAgICAgICAgICAgZHJpdmVzIGluIElPIFVuaXQgUGFnZSAxLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IGJpdCB0byBBZGRpdGlvbmFsQ29udHJvbEZsYWdzIG9mIFNBUyBJTyBVbml0CisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDEgdG8gY29udHJvbCBJbnZhbGlkIFRvcG9sb2d5IENvcnJlY3Rpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTdXBwb3J0ZWRQaHlzRGlza3MgZmllbGQgdG8gUkFJRCBWb2x1bWUgUGFnZSAxIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgYWRkZWQgcmVsYXRlZCBkZWZpbmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYWRkaXRpb25hbCBkZWZpbmVzIGZvciBSQUlEIFZvbHVtZSBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZVN0YXR1c0ZsYWdzIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgbWVhbmluZyBvZiBSQUlEIFZvbHVtZSBQYWdlIDAgVm9sdW1lU2V0dGluZ3MKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBmb3IgYXV0by1jb25maWd1cmUgb2YgaG90LXN3YXAgZHJpdmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUGh5c0Rpc2tBdHRyaWJ1dGVzIGZpZWxkIChhbmQgcmVsYXRlZCBkZWZpbmVzKSB0bworICogICAgICAgICAgICAgICAgICAgICAgUkFJRCBQaHlzaWNhbCBEaXNrIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0FTX1BIWUlORk9fUEhZX1ZBQ0FOVCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0aHJlZSBuZXcgRGlzY292ZXJ5U3RhdHVzIGJpdHMgZm9yIFNBUyBJTyBVbml0CisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDAgYW5kIFNBUyBFeHBhbmRlciBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIG11bHRpcGxleGluZyBpbmZvcm1hdGlvbiBmcm9tIFNBUyBJTyBVbml0IHBhZ2VzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgQm9vdERldmljZVdhaXRUaW1lIGZpZWxkIHRvIFNBUyBJTyBVbml0IFBhZ2UgNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgWm9uZSBBZGRyZXNzIFJlc29sdmVkIGJpdCBmcm9tIFBoeUluZm8gYW5kIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIFBhZ2UgMCBGbGFncyBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgQWNjZXNzU3RhdHVzIHZhbHVlcyB0byBTQVMgRGV2aWNlIFBhZ2UgMAorICogICAgICAgICAgICAgICAgICAgICAgZm9yIGluZGljYXRpbmcgcm91dGluZyBwcm9ibGVtcy4gQWRkZWQgMyByZXNlcnZlZCB3b3JkcworICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhpcyBwYWdlLgorICogIDAxLTE5LTA5ICAwMi4wMC4xMCAgRml4ZWQgZGVmaW5lcyBmb3IgR1BJT1ZhbCBmaWVsZCBvZiBJTyBVbml0IFBhZ2UgMy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEluc2VydGVkIG1pc3NpbmcgcmVzZXJ2ZWQgZmllbGQgaW50byBzdHJ1Y3R1cmUgZm9yIElPQworICogICAgICAgICAgICAgICAgICAgICAgUGFnZSA2LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbW9yZSBwZW5kaW5nIHRhc2sgYml0cyB0byBSQUlEIFZvbHVtZSBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZVN0YXR1c0ZsYWdzIGRlZmluZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1BIWVNESVNLMF9TVEFUVVNfRkxBR19OT1RfQ0VSVElGSUVEIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGEgbmV3IERpc2NvdmVyeVN0YXR1cyBiaXQgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMAorICogICAgICAgICAgICAgICAgICAgICAgYW5kIFNBUyBFeHBhbmRlciBQYWdlIDAgdG8gZmxhZyBhIGRvd25zdHJlYW0gaW5pdGlhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICB3aGVuIGluIHNpbXBsaWZpZWQgcm91dGluZyBtb2RlLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBTQVRBIEluaXQgRmFpbHVyZSBkZWZpbmVzIGZvciBEaXNjb3ZlcnlTdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyBvZiBTQVMgSU8gVW5pdCBQYWdlIDAgYW5kIFNBUyBFeHBhbmRlciBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfREVWSUNFX0JMT0NLRUQgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUG9ydEdyb3VwcywgRG1hR3JvdXAsIGFuZCBDb250cm9sR3JvdXAgZmllbGRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBTQVMgRGV2aWNlIFBhZ2UgMC4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTEgIEFkZGVkIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA1IGFuZCBJTworICogICAgICAgICAgICAgICAgICAgICAgVW5pdCBQYWdlIDYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBleHBhbmRlciByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkgZGF0YSB0byBTQVMKKyAqICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQSFkgUGFnZSAyIGFuZCBTQVMgUEhZIFBhZ2UgMy4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX2luaXQuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDEgIEZpeGVkIG5hbWUgZm9yIHBNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90LgorICogIDEyLTE4LTA3ICAwMi4wMC4wMiAgTW9kaWZpZWQgVGFzayBNYW5hZ2VtZW50IFRhcmdldCBSZXNldCBNZXRob2QgZGVmaW5lcy4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDMgIEFkZGVkIFF1ZXJ5IFRhc2sgU2V0IGFuZCBRdWVyeSBVbml0IEF0dGVudGlvbi4KKyAqICAwMy0wMy0wOCAgMDIuMDAuMDQgIEZpeGVkIG5hbWUgb2Ygc3RydWN0IF9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFkuCisgKiAgMDUtMjEtMDggIDAyLjAwLjA1ICBGaXhlZCB0eXBvIGluIG5hbWUgb2YgTXBpMlNlcFJlcXVlc3RfdC4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDYgIFJlbW92ZWQgVW50YWdnZWQgYW5kIE5vIERpc2Nvbm5lY3QgdmFsdWVzIGZyb20gU0NTSSBJTworICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBmaWVsZCBUYXNrIEF0dHJpYnV0ZSBmbGFncy4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIHRvIG1waTIuaCBiZWNhc3VlIHRoZXkgYXJlCisgKiAgICAgICAgICAgICAgICAgICAgICBjb21tb24gdG8gbWFueSBzdHJ1Y3R1cmVzLgorICogIDA1LTA2LTA5ICAwMi4wMC4wNyAgQ2hhbmdlZCB0YXNrIG1hbmFnZW1lbnQgdHlwZSBvZiBRdWVyeSBVbml0IEF0dGVudGlvbiB0bworICogICAgICAgICAgICAgICAgICAgICAgUXVlcnkgQXN5bmNocm9ub3VzIEV2ZW50LgorICogICAgICAgICAgICAgICAgICAgICAgRGVmaW5lZCB0d28gbmV3IGJpdHMgaW4gdGhlIFNsb3RTdGF0dXMgZmllbGQgb2YgdGhlIFNDU0kKKyAqICAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZSBQcm9jZXNzb3IgUmVxdWVzdCBhbmQgUmVwbHkuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9pb2MuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwNi0wNC0wNyAgMDIuMDAuMDEgIEluIElPQ0ZhY3RzIFJlcGx5IHN0cnVjdHVyZSwgcmVuYW1lZCBNYXhEZXZpY2VzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBNYXhUYXJnZXRzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgVG90YWxJbWFnZVNpemUgZmllbGQgdG8gRldEb3dubG9hZCBSZXF1ZXN0LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgcmVzZXJ2ZWQgd29yZHMgdG8gRldVcGxvYWQgUmVxdWVzdC4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDIgIEFkZGVkIElSIENvbmZpZ3VyYXRpb24gQ2hhbmdlIExpc3QgRXZlbnQuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAzICBSZW1vdmVkIFN5c3RlbVJlcGx5UXVldWVEZXB0aCBmaWVsZCBmcm9tIHRoZSBJT0NJbml0CisgKiAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCByZXBsYWNlZCBpdCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aCBhbmQgUmVwbHlGcmVlUXVldWVEZXB0aC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIHRoZSBNaW5SZXBseVF1ZXVlRGVwdGggZmllbGQgb2YgdGhlIElPQ0ZhY3RzCisgKiAgICAgICAgICAgICAgICAgICAgICByZXBseSB3aXRoIE1heFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9SRFBRX0RFUFRIX01JTiBkZWZpbmUgdG8gc3BlY2lmeSB0aGUgbWluaW11bQorICogICAgICAgICAgICAgICAgICAgICAgZGVwdGggZm9yIHRoZSBSZXBseSBEZXNjcmlwdG9yIFBvc3QgUXVldWUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVNBZGRyZXNzIGZpZWxkIHRvIEluaXRpYXRvciBEZXZpY2UgVGFibGUKKyAqICAgICAgICAgICAgICAgICAgICAgIE92ZXJmbG93IEV2ZW50IGRhdGEuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjA0ICBBZGRlZCBSZWFzb25Db2RlIE1QSTJfRVZFTlRfU0FTX0lOSVRfUkNfTk9UX1JFU1BPTkRJTkcKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBTQVMgSW5pdGlhdG9yIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBSZWFzb24gQ29kZSBkZWZpbmVzIGZvciBTQVMgVG9wb2xvZ3kgQ2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgICBMaXN0IEV2ZW50IGRhdGEsIGluY2x1ZGluZyBhZGRpbmcgYSBiaXQgZm9yIFBIWSBWYWNhbnQKKyAqICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgYW5kIGFkZGluZyBhIG1hc2sgZm9yIHRoZSBSZWFzb24gQ29kZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfREVMQVlfTk9UX1JFU1BPTkRJTkcuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgZm9yIE1QSTJfRVhUX0lNQUdFX1RZUEVfTUVHQVJBSUQuCisgKiAgMTItMTgtMDcgIDAyLjAwLjA1ICBBZGRlZCBCb290IFN0YXR1cyBkZWZpbmVzIGZvciB0aGUgSU9DRXhjZXB0aW9ucyBmaWVsZCBvZgorICogICAgICAgICAgICAgICAgICAgICAgdGhlIElPQ0ZhY3RzIFJlcGx5LgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVhURU5ERURfQlVGRkVSIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIE1QSTJfVkVSU0lPTl9VTklPTiB0byBtcGkyLmguCisgKiAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkIE1QSTJfRVZFTlRfTk9USUZJQ0FUSU9OX1JFUVVFU1QgdG8gdXNlIG1hc2tzCisgKiAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGVuYWJsZXMsIGFuZCBhZGRlZCBTQVNCcm9hZGNhc3RQcmltaXRpdmVNYXNrcworICogICAgICAgICAgICAgICAgICAgICAgZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBMb2cgRW50cnkgQWRkZWQgRXZlbnQgYW5kIHJlbGF0ZWQgc3RydWN0dXJlLgorICogIDAyLTI5LTA4ICAwMi4wMC4wNiAgQWRkZWQgZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9JTlRFR1JBVEVEX1JBSUQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGRlZmluZSBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MX1NNUF9UQVJHRVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYXhWb2x1bWVzIGFuZCBNYXhQZXJzaXN0ZW50RW50cmllcyBmaWVsZHMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIElPQ0ZhY3RzIHJlcGx5LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUHJvdG9jYWxGbGFncyBhbmQgSU9DQ2FwYWJpbGl0aWVzIGZpZWxkcyB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9GV19JTUFHRV9IRUFERVIuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIE1QSTJfUE9SVEVOQUJMRV9GTEFHU19FTkFCTEVfU0lOR0xFX1BPUlQuCisgKiAgMDMtMDMtMDggIDAyLjAwLjA3ICBGaXhlZCBNUEkyX0ZXX0lNQUdFX0hFQURFUiBieSBjaGFuZ2luZyBSZXNlcnZlZDI2IHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBhIFUxNiAoZnJvbSBhIFUzMikuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGV4dHJhICdzJyBmcm9tIEV2ZW50TWFza3MgbmFtZS4KKyAqICAwNi0yNy0wOCAgMDIuMDAuMDggIEZpeGVkIGFuIG9mZnNldCBpbiBhIGNvbW1lbnQuCisgKiAgMTAtMDItMDggIDAyLjAwLjA5ICBSZW1vdmVkIFN5c3RlbVJlcGx5RnJhbWVTaXplIGZyb20gTVBJMl9JT0NfSU5JVF9SRVFVRVNULgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBDdXJSZXBseUZyYW1lU2l6ZSBmcm9tIE1QSTJfSU9DX0ZBQ1RTX1JFUExZIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCBNaW5SZXBseUZyYW1lU2l6ZSB0byBSZXBseUZyYW1lU2l6ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfRVhDRVBUX0lSX0ZPUkVJR05fQ09ORklHX01BWC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgUkFJRE9wZXJhdGlvbiB2YWx1ZXMgZm9yIEludGVncmF0ZWQgUkFJRAorICogICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9ucyBTdGF0dXMgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGZvdXIgbmV3IElSIENvbmZpZ3VyYXRpb24gQ2hhbmdlIExpc3QgRXZlbnQgZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgUmVhc29uQ29kZSB2YWx1ZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IFJlYXNvbkNvZGUgZGVmaW5lcyBmb3IgU0FTIERldmljZSBTdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdGhyZWUgbmV3IERpc2NvdmVyeVN0YXR1cyBiaXRzIGZvciB0aGUgU0FTCisgKiAgICAgICAgICAgICAgICAgICAgICBEaXNjb3ZlcnkgZXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE11bHRpcGxleGluZyBTdGF0dXMgQ2hhbmdlIGJpdCB0byB0aGUgUGh5U3RhdHVzCisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBvZiB0aGUgU0FTIFRvcG9sb2d5IENoYW5nZSBMaXN0IGV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGRlZmluZSBmb3IgTVBJMl9JTklUX0lNQUdFX0JPT1RGTEFHU19YTUVNQ09QWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEJvb3RGbGFncyBhcmUgbm93IHByb2R1Y3Qtc3BlY2lmaWMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmVzIGZvciB0aGUgaW5kaXZkdWFsIHNpZ25hdHVyZSBieXRlcworICogICAgICAgICAgICAgICAgICAgICAgZm9yIE1QSTJfSU5JVF9JTUFHRV9GT09URVIuCisgKiAgMDEtMTktMDkgIDAyLjAwLjEwICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVZFTlRfUkVQTEFZIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfRE9XTlNUUkVBTV9JTklUSUFUT1IKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NBVEFfSU5JVF9GQUlMVVJFCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfU0FUQV9JTklUX0ZBSUxVUkUgZGVmaW5lLgorICogIDA1LTA2LTA5ICAwMi4wMC4xMSAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1JBSURfQUNDRUxFUkFUT1IgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01TSV9YX0lOREVYIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgcmVhc29uIGNvZGVzIGZvciBTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IGV2ZW50OiBTQVMgUEhZIENvdW50ZXIuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9yYWlkLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAxICBNb2RpZmljYXRpb25zIHRvIFJBSUQgQWN0aW9uIHJlcXVlc3QgYW5kIHJlcGx5LAorICogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBBY3Rpb25zIGFuZCBBY3Rpb25EYXRhLgorICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgQWRkZWQgTVBJMl9SQUlEX0FDVElPTl9BREFUQV9ESVNBQkxfRlVMTF9SRUJVSUxELgorICogIDA1LTIxLTA4ICAwMi4wMC4wMyAgQWRkZWQgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9OVU1fUEhZU0RJU0tTIHNvIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBQaHlzRGlzayBhcnJheSBpbiBNUEkyX1JBSURfVk9MVU1FX0NSRUFUSU9OX1NUUlVDVAorICogICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHNpemVkIGJ5IHRoZSBidWlsZCBlbnZpcm9ubWVudC4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3Nhcy5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTI2LTA3ICAwMi4wMC4wMSAgQWRkZWQgQ2xlYXIgQWxsIFBlcnNpc3RlbnQgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0CisgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIFJlcXVlc3QuCisgKiAgMTAtMDItMDggIDAyLjAwLjAyICBBZGRlZCBTZXQgSU9DIFBhcmFtZXRlciBPcGVyYXRpb24gdG8gU0FTIElPIFVuaXQgQ29udHJvbAorICogICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3RhcmcuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDEgIEFkZGVkIENvbW1hbmQgQnVmZmVyIERhdGEgTG9jYXRpb24gQWRkcmVzcyBTcGFjZSBiaXRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJQb3N0RmxhZ3MgZmllbGQgb2YgQ29tbWFuZEJ1ZmZlclBvc3RCYXNlIFJlcXVlc3QuCisgKiAgMDItMjktMDggIDAyLjAwLjAyICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogIDEwLTAyLTA4ICAwMi4wMC4wMyAgUmVtb3ZlZCBOZXh0Q21kQnVmZmVyT2Zmc2V0IGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfVEFSR0VUX0NNRF9CVUZfUE9TVF9CQVNFX1JFUVVFU1QuCisgKiAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgU3RhdHVzIFNlbmQgUmVxdWVzdCBvbmx5IHRha2VzIGEgc2luZ2xlIFNHRSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIGRhdGEuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl90b29sLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMTItMTgtMDcgIDAyLjAwLjAxICBBZGRlZCBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IGFuZCBEaWFnbm9zdGljIFJlbGVhc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMuCisgKiAgMDItMjktMDggIDAyLjAwLjAyICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogIDA1LTA2LTA5ICAwMi4wMC4wMyAgQWRkZWQgSVNUV0kgUmVhZCBXcml0ZSBUb29sIGFuZCBEaWFnbm9zdGljIENMSSBUb29sLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfdHlwZS5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfcmEuaAorICogIDA1LTA2LTA5ICAwMi4wMC4wMCAgSW5pdGlhbCB2ZXJzaW9uLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfaGlzdG9yeS50eHQgICAgICAgICBQYXJ0cyBsaXN0IGhpc3RvcnkKKworRmlsZW5hbWUgICAgIDAyLjAwLjEyCistLS0tLS0tLS0tICAgLS0tLS0tLS0KK21waTIuaCAgICAgICAwMi4wMC4xMgorbXBpMl9jbmZnLmggIDAyLjAwLjExCittcGkyX2luaXQuaCAgMDIuMDAuMDcKK21waTJfaW9jLmggICAwMi4wMC4xMQorbXBpMl9yYWlkLmggIDAyLjAwLjAzCittcGkyX3Nhcy5oICAgMDIuMDAuMDIKK21waTJfdGFyZy5oICAwMi4wMC4wMworbXBpMl90b29sLmggIDAyLjAwLjAzCittcGkyX3R5cGUuaCAgMDIuMDAuMDAKK21waTJfcmEuaCAgICAwMi4wMC4wMAorCitGaWxlbmFtZSAgICAgMDIuMDAuMTEgIDAyLjAwLjEwICAwMi4wMC4wOSAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNgorLS0tLS0tLS0tLSAgIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0KK21waTIuaCAgICAgICAwMi4wMC4xMSAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA2CittcGkyX2NuZmcuaCAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA2ICAwMi4wMC4wNgorbXBpMl9pbml0LmggIDAyLjAwLjA2ICAwMi4wMC4wNiAgMDIuMDAuMDUgIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMKK21waTJfaW9jLmggICAwMi4wMC4xMCAgMDIuMDAuMDkgIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDcgIDAyLjAwLjA2CittcGkyX3JhaWQuaCAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMgorbXBpMl9zYXMuaCAgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEKK21waTJfdGFyZy5oICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyCittcGkyX3Rvb2wuaCAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMgorbXBpMl90eXBlLmggIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKKworRmlsZW5hbWUgICAgIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAKKy0tLS0tLS0tLS0gICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tCittcGkyLmggICAgICAgMDIuMDAuMDUgIDAyLjAwLjA0ICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMAorbXBpMl9jbmZnLmggIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAKK21waTJfaW5pdC5oICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX2lvYy5oICAgMDIuMDAuMDUgIDAyLjAwLjA0ICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMAorbXBpMl9yYWlkLmggIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfc2FzLmggICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3RhcmcuaCAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl90b29sLmggIDAyLjAwLjAxICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfdHlwZS5oICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAppbmRleCBmMTExNWYwLi41NjNlNTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCkBAIC0xLDEyICsxLDEyIEBACiAvKgotICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA4IExTSSBDb3Jwb3JhdGlvbi4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCiAgKgogICoKICAqICAgICAgICAgICBOYW1lOiAgbXBpMl9pbml0LmgKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIFNDU0kgaW5pdGlhdG9yIG1vZGUgbWVzc2FnZXMgYW5kIHN0cnVjdHVyZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMywgMjAwNgogICoKLSAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wNgorICogICAgbXBpMl9pbml0LmggVmVyc2lvbjogIDAyLjAwLjA3CiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMjMsNiArMjMsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgZmllbGQgVGFzayBBdHRyaWJ1dGUgZmxhZ3MuCiAgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBMVU4gZmllbGQgZGVmaW5lcyB0byBtcGkyLmggYmVjYXN1ZSB0aGV5IGFyZQogICogICAgICAgICAgICAgICAgICAgICAgY29tbW9uIHRvIG1hbnkgc3RydWN0dXJlcy4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMDcgIENoYW5nZWQgdGFzayBtYW5hZ2VtZW50IHR5cGUgb2YgUXVlcnkgVW5pdCBBdHRlbnRpb24gdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IEFzeW5jaHJvbm91cyBFdmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgdHdvIG5ldyBiaXRzIGluIHRoZSBTbG90U3RhdHVzIGZpZWxkIG9mIHRoZSBTQ1NJCisgKiAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcXVlc3QgYW5kIFJlcGx5LgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMjg5LDcgKzI5MywxMSBAQAogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RVUVSWV9UQVNLICAgICAgICAgICAoMHgwNykKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQ0xSX0FDQSAgICAgICAgICAgICAgKDB4MDgpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9UQVNLX1NFVCAgICAgICAgICgweDA5KQotI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RUllfVU5JVF9BVFRFTlRJT04gICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX0FTWU5DX0VWRU5UICAgICAgKDB4MEEpCisKKy8qIG9ic29sZXRlIFRhc2tUeXBlIG5hbWUgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX1VOSVRfQVRURU5USU9OCVwKKwkoTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX0FTWU5DX0VWRU5UKQogCiAvKiBNc2dGbGFncyBiaXRzICovCiAKQEAgLTM3NSw2ICszODMsOCBAQAogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19IT1RfU1BBUkUgICAgICAgICAgICAgICAoMHgwMDAwMDEwMCkKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfVU5DT05GSUdVUkVEICAgICAgICAgICAgKDB4MDAwMDAwODApCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX1BSRURJQ1RFRF9GQVVMVCAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19JTl9DUklUSUNBTF9BUlJBWSAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfSU5fRkFJTEVEX0FSUkFZICAgICAgICAgKDB4MDAwMDAwMDgpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0RFVl9SRUJVSUxESU5HICAgICAgICAgICgweDAwMDAwMDA0KQogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19ERVZfRkFVTFRZICAgICAgICAgICAgICAoMHgwMDAwMDAwMikKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfTk9fRVJST1IgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCkBAIC00MTAsNiArNDIwLDggQEAKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19IT1RfU1BBUkUgICAgICAgICAgICAgKDB4MDAwMDAxMDApCiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfVU5DT05GSUdVUkVEICAgICAgICAgICgweDAwMDAwMDgwKQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX1BSRURJQ1RFRF9GQVVMVCAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19JTl9DUklUSUNBTF9BUlJBWSAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfSU5fRkFJTEVEX0FSUkFZICAgICAgICgweDAwMDAwMDA4KQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0RFVl9SRUJVSUxESU5HICAgICAgICAoMHgwMDAwMDAwNCkKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19ERVZfRkFVTFRZICAgICAgICAgICAgKDB4MDAwMDAwMDIpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfTk9fRVJST1IgICAgICAgICAgICAgICgweDAwMDAwMDAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAppbmRleCA4YzVkODE4Li5jMjk0MTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIElPQywgUG9ydCwgRXZlbnQsIEZXIERvd25sb2FkLCBhbmQgRlcgVXBsb2FkIG1lc3NhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE9jdG9iZXIgMTEsIDIwMDYKICAqCi0gKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTAKKyAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4xMQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTc5LDYgKzc5LDExIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRQogICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgogICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX0VWRU5UX1NBU19ESVNDX0RTX1NBVEFfSU5JVF9GQUlMVVJFIGRlZmluZS4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTEgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9SQUlEX0FDQ0VMRVJBVE9SIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9NU0lfWF9JTkRFWCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IHJlYXNvbiBjb2RlcyBmb3IgU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgICBFdmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBldmVudDogU0FTIFBIWSBDb3VudGVyLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMjYxLDYgKzI2Niw4IEBACiAvKiBQcm9kdWN0SUQgZmllbGQgdXNlcyBNUEkyX0ZXX0hFQURFUl9QSURfICovCiAKIC8qIElPQ0NhcGFiaWxpdGllcyAqLworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfTVNJX1hfSU5ERVggICAgICAgICAgICAoMHgwMDAwODAwMCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1JBSURfQUNDRUxFUkFUT1IgICAgICAgKDB4MDAwMDQwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FVkVOVF9SRVBMQVkgICAgICAgICAgICgweDAwMDAyMDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlEICAgICAgICAoMHgwMDAwMTAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RMUiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA4MDApCkBAIC00NDAsNiArNDQ3LDcgQEAKICNkZWZpbmUgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLICAgICAgICAgICAgICAgICAoMHgwMDFGKQogI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1QgICAgICgweDAwMjApCiAjZGVmaW5lIE1QSTJfRVZFTlRfTE9HX0VOVFJZX0FEREVEICAgICAgICAgICAgICAgICAgKDB4MDAyMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfUEhZX0NPVU5URVIgICAgICAgICAgICAgICAgICAoMHgwMDIyKQogCiAKIC8qIExvZyBFbnRyeSBBZGRlZCBFdmVudCBkYXRhICovCkBAIC01MDIsMTcgKzUxMCwxOSBAQAogICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNEZXZpY2VTdGF0dXNDaGFuZ2VfdDsKIAogLyogU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEgUmVhc29uQ29kZSB2YWx1ZXMgKi8KLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQSAgICAgICAgICAgICAgICgweDA1KQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19VTlNVUFBPUlRFRCAgICAgICAgICAgICAgKDB4MDcpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0lOVEVSTkFMX0RFVklDRV9SRVNFVCAgICAoMHgwOCkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVEFTS19BQk9SVF9JTlRFUk5BTCAgICAgICgweDA5KQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BQk9SVF9UQVNLX1NFVF9JTlRFUk5BTCAgKDB4MEEpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NMRUFSX1RBU0tfU0VUX0lOVEVSTkFMICAoMHgwQikKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfUVVFUllfVEFTS19JTlRFUk5BTCAgICAgICgweDBDKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BU1lOQ19OT1RJRklDQVRJT04gICAgICAgKDB4MEQpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9JTlRFUk5BTF9ERVZfUkVTRVQgICAoMHgwRSkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX1RBU0tfQUJPUlRfSU5URVJOQUwgICgweDBGKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRSAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDA3KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQgICAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1RBU0tfQUJPUlRfSU5URVJOQUwgICAgICAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQUJPUlRfVEFTS19TRVRfSU5URVJOQUwgICAgICAgICAgICAgICgweDBBKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTEVBUl9UQVNLX1NFVF9JTlRFUk5BTCAgICAgICAgICAgICAgKDB4MEIpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1FVRVJZX1RBU0tfSU5URVJOQUwgICAgICAgICAgICAgICAgICAoMHgwQykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQVNZTkNfTk9USUZJQ0FUSU9OICAgICAgICAgICAgICAgICAgICgweDBEKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfSU5URVJOQUxfREVWX1JFU0VUICAgICAgICAgICAgICAgKDB4MEUpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9UQVNLX0FCT1JUX0lOVEVSTkFMICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19FWFBBTkRFUl9SRURVQ0VEX0ZVTkNUSU9OQUxJVFkgICAgICAgKDB4MTEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9FWFBBTkRFUl9SRURVQ0VEX0ZVTkNUSU9OQUxJVFkgICAoMHgxMikKIAogCiAvKiBJbnRlZ3JhdGVkIFJBSUQgT3BlcmF0aW9uIFN0YXR1cyBFdmVudCBkYXRhICovCkBAIC04MjIsNiArODMyLDM3IEBACiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0VOQ0xfUkNfTk9UX1JFU1BPTkRJTkcgICAgICAgKDB4MDIpCiAKIAorLyogU0FTIFBIWSBDb3VudGVyIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9TQVNfUEhZX0NPVU5URVIgeworICAgIFU2NCAgICAgICAgIFRpbWVTdGFtcDsgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgIFBoeUV2ZW50Q29kZTsgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgIFBoeU51bTsgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgIFBoeUV2ZW50SW5mbzsgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgIENvdW50ZXJUeXBlOyAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgIFRocmVzaG9sZFdpbmRvdzsgICAgLyogMHgxNSAqLworICAgIFU4ICAgICAgICAgIFRpbWVVbml0czsgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgxNyAqLworICAgIFUzMiAgICAgICAgIEV2ZW50VGhyZXNob2xkOyAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgIFRocmVzaG9sZEZsYWdzOyAgICAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgxRSAqLworfSBNUEkyX0VWRU5UX0RBVEFfU0FTX1BIWV9DT1VOVEVSLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9TQVNfUEhZX0NPVU5URVIsCisgIE1waTJFdmVudERhdGFTYXNQaHlDb3VudGVyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc1BoeUNvdW50ZXJfdDsKKworLyogdXNlIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFXyB2YWx1ZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgdGhlCisgKiBQaHlFdmVudENvZGUgZmllbGQKKyAqIHVzZSBNUEkyX1NBU1BIWTNfQ09VTlRFUl9UWVBFXyB2YWx1ZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgdGhlCisgKiBDb3VudGVyVHlwZSBmaWVsZAorICogdXNlIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXyB2YWx1ZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgdGhlCisgKiBUaW1lVW5pdHMgZmllbGQKKyAqIHVzZSBNUEkyX1NBU1BIWTNfVEZMQUdTXyB2YWx1ZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgdGhlCisgKiBUaHJlc2hvbGRGbGFncyBmaWVsZAorICogKi8KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgRXZlbnRBY2sgbWVzc2FnZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaAppbmRleCAyZmY0ZTkzLi4wMDdlOTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCkBAIC0xLDEyICsxLDEyIEBACiAvKgotICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA4IExTSSBDb3Jwb3JhdGlvbi4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCiAgKgogICoKICAqICAgICAgICAgICBOYW1lOiAgbXBpMl90b29sLmgKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIGRpYWdub3N0aWMgdG9vbCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucwogICogIENyZWF0aW9uIERhdGU6ICBNYXJjaCAyNiwgMjAwNwogICoKLSAqICAgIG1waTJfdG9vbC5oIFZlcnNpb246ICAwMi4wMC4wMgorICogICAgbXBpMl90b29sLmggVmVyc2lvbjogIDAyLjAwLjAzCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMTcsNiArMTcsNyBAQAogICogIDEyLTE4LTA3ICAwMi4wMC4wMSAgQWRkZWQgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdCBhbmQgRGlhZ25vc3RpYyBSZWxlYXNlCiAgKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzLgogICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMDMgIEFkZGVkIElTVFdJIFJlYWQgV3JpdGUgVG9vbCBhbmQgRGlhZ25vc3RpYyBDTEkgVG9vbC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTMyLDcgKzMzLDEwIEBACiAvKiBkZWZpbmVzIGZvciB0aGUgVG9vbHMgKi8KICNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX1RPT0wgICAgICAgICAgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9UT09MQk9YX01FTU9SWV9NT1ZFX1RPT0wgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0lTVFdJX1JFQURfV1JJVEVfVE9PTCAgICAgICAgICAoMHgwMykKICNkZWZpbmUgTVBJMl9UT09MQk9YX0JFQUNPTl9UT09MICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1RPT0wgICAgICAgICAgICAoMHgwNikKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgVG9vbGJveCByZXBseQpAQCAtMTEyLDYgKzExNiw3NyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUb29sYm94IElTVFdJIFJlYWQgV3JpdGUgVG9vbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVG9vbGJveCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wgcmVxdWVzdCBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX0lTVFdJX1JFQURfV1JJVEVfUkVRVUVTVCB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV2SW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBBY3Rpb247ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBUeERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJ4RGF0YUxlbmd0aDsgICAgICAgICAgICAgICAvKiAweDFBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ4OyAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDk7ICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTA7ICAgICAgICAgICAgICAgICAvKiAweDI0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxMTsgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDEyOyAgICAgICAgICAgICAgICAgLyogMHgyQyAqLworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDMwICovCit9IE1QSTJfVE9PTEJPWF9JU1RXSV9SRUFEX1dSSVRFX1JFUVVFU1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0lTVFdJX1JFQURfV1JJVEVfUkVRVUVTVCwKKyAgTXBpMlRvb2xib3hJc3R3aVJlYWRXcml0ZVJlcXVlc3RfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveElzdHdpUmVhZFdyaXRlUmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBBY3Rpb24gZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9SRUFEX0RBVEEgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9XUklURV9EQVRBICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9TRVFVRU5DRSAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9SRVNFUlZFX0JVUyAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9SRUxFQVNFX0JVUyAgICAgICAgICAoMHgxMSkKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9SRVNFVCAgICAgICAgICAgICAgICAoMHgxMikKKworLyogdmFsdWVzIGZvciBTR0xGbGFncyBmaWVsZCBhcmUgaW4gdGhlIFNHTCBzZWN0aW9uIG9mIG1waTIuaCAqLworCisKKy8qIFRvb2xib3ggSVNUV0kgUmVhZCBXcml0ZSBUb29sIHJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfSVNUV0lfUkVQTFkgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV2SW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBBY3Rpb247ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIElzdHdpU3RhdHVzOyAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBUeERhdGFDb3VudDsgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJ4RGF0YUNvdW50OyAgICAgICAgICAgICAgICAvKiAweDFBICovCit9IE1QSTJfVE9PTEJPWF9JU1RXSV9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1RPT0xCT1hfSVNUV0lfUkVQTFksCisgIE1waTJUb29sYm94SXN0d2lSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94SXN0d2lSZXBseV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBUb29sYm94IEJlYWNvbiBUb29sIHJlcXVlc3QKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEzOSw2ICsyMTQsNjEgQEAKICNkZWZpbmUgTVBJMl9UT09MQk9YX0ZMQUdTX0JFQUNPTk1PREVfT04gICAgICAgICgweDAxKQogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUb29sYm94IERpYWdub3N0aWMgQ0xJIFRvb2wKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0RJQUdfQ0xJX0NNRF9MRU5HVEggICAgKDB4NUMpCisKKy8qIFRvb2xib3ggRGlhZ25vc3RpYyBDTEkgVG9vbCByZXF1ZXN0IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfUkVRVUVTVCB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNDbGlDb21tYW5kCisJCVtNUEkyX1RPT0xCT1hfRElBR19DTElfQ01EX0xFTkdUSF07ICAgICAvKiAweDE0ICovCisgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgU0dMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4NzAgKi8KK30gTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUVVFU1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUVVFU1QsCisgIE1waTJUb29sYm94RGlhZ25vc3RpY0NsaVJlcXVlc3RfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveERpYWdub3N0aWNDbGlSZXF1ZXN0X3Q7CisKKy8qIHZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQgYXJlIGluIHRoZSBTR0wgc2VjdGlvbiBvZiBtcGkyLmggKi8KKworCisvKiBUb29sYm94IERpYWdub3N0aWMgQ0xJIFRvb2wgcmVwbHkgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVBMWSB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXR1cm5lZERhdGFMZW5ndGg7ICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfUkVQTFksCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0RJQUdfQ0xJX1JFUExZLAorICBNcGkyVG9vbGJveERpYWdub3N0aWNDbGlSZXBseV90LAorICBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94RGlhZ25vc3RpY0NsaVJlcGx5X3Q7CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqICAgICAgIERpYWdub3N0aWMgQnVmZmVyIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IGQ5NWQyZjIuLjY3MDI0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0zLDcgKzMsNyBAQAogICogZm9yIGFjY2VzcyB0byBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9iYXNlLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNjMsNyArNjMsNyBAQAogc3RhdGljIE1QVF9DQUxMQkFDSwltcHRfY2FsbGJhY2tzW01QVF9NQVhfQ0FMTEJBQ0tTXTsKIAogI2RlZmluZSBGQVVMVF9QT0xMSU5HX0lOVEVSVkFMIDEwMDAgLyogaW4gbWlsbGlzZWNvbmRzICovCi0jZGVmaW5lIE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUgNTAwIC8qIG1heGltdW0gY29udHJvbGxlciBxdWV1ZSBkZXB0aCAqLworI2RlZmluZSBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFIDYwMCAvKiBtYXhpbXVtIGNvbnRyb2xsZXIgcXVldWUgZGVwdGggKi8KIAogc3RhdGljIGludCBtYXhfcXVldWVfZGVwdGggPSAtMTsKIG1vZHVsZV9wYXJhbShtYXhfcXVldWVfZGVwdGgsIGludCwgMCk7CkBAIC01NDMsMTMgKzU0MywxMyBAQAogICogX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvIC0KICAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKK19iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAogICAgIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKQEAgLTU3MiwyMiArNTcyLDI0IEBACiAgKiBtcHQyc2FzX2Jhc2VfZG9uZSAtIGJhc2UgaW50ZXJuYWwgY29tbWFuZCBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkCi1tcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfYmFzZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJaWYgKG1waV9yZXBseSAmJiBtcGlfcmVwbHktPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fRVZFTlRfQUNLKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCiAJaWYgKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAogCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKIAlpZiAobXBpX3JlcGx5KSB7CkBAIC01OTYsMTggKzU5OCwyMCBAQAogCX0KIAlpb2MtPmJhc2VfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+YmFzZV9jbWRzLmRvbmUpOworCXJldHVybiAxOwogfQogCiAvKioKICAqIF9iYXNlX2FzeW5jX2V2ZW50IC0gbWFpbiBjYWxsYmFjayBoYW5kbGVyIGZvciBmaXJtd2FyZSBhc3luIGV2ZW50cwogICogQGlvYzogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQKLV9iYXNlX2FzeW5jX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSkKK3N0YXRpYyB1OAorX2Jhc2VfYXN5bmNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBtc2l4X2luZGV4LCB1MzIgcmVwbHkpCiB7CiAJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5OwogCU1waTJFdmVudEFja1JlcXVlc3RfdCAqYWNrX3JlcXVlc3Q7CkBAIC02MTUsOSArNjE5LDkgQEAKIAogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmICghbXBpX3JlcGx5KQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlmIChtcGlfcmVwbHktPkZ1bmN0aW9uICE9IE1QSTJfRlVOQ1RJT05fRVZFTlRfTk9USUZJQ0FUSU9OKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCV9iYXNlX2Rpc3BsYXlfZXZlbnRfZGF0YShpb2MsIG1waV9yZXBseSk7CiAjZW5kaWYKQEAgLTYzNSwxNiArNjM5LDQ3IEBACiAJYWNrX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9FVkVOVF9BQ0s7CiAJYWNrX3JlcXVlc3QtPkV2ZW50ID0gbXBpX3JlcGx5LT5FdmVudDsKIAlhY2tfcmVxdWVzdC0+RXZlbnRDb250ZXh0ID0gbXBpX3JlcGx5LT5FdmVudENvbnRleHQ7Ci0JYWNrX3JlcXVlc3QtPlZGX0lEID0gVkZfSUQ7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBWRl9JRCk7CisJYWNrX3JlcXVlc3QtPlZGX0lEID0gMDsgIC8qIFRPRE8gKi8KKwlhY2tfcmVxdWVzdC0+VlBfSUQgPSAwOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CiAKICBvdXQ6CiAKIAkvKiBzY3NpaCBjYWxsYmFjayBoYW5kbGVyICovCi0JbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhpb2MsIFZGX0lELCByZXBseSk7CisJbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhpb2MsIG1zaXhfaW5kZXgsIHJlcGx5KTsKIAogCS8qIGN0bCBjYWxsYmFjayBoYW5kbGVyICovCi0JbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soaW9jLCBWRl9JRCwgcmVwbHkpOworCW1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKGlvYywgbXNpeF9pbmRleCwgcmVwbHkpOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogX2Jhc2VfZ2V0X2NiX2lkeCAtIG9idGFpbiB0aGUgY2FsbGJhY2sgaW5kZXgKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm4gY2FsbGJhY2sgaW5kZXguCisgKi8KK3N0YXRpYyB1OAorX2Jhc2VfZ2V0X2NiX2lkeChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQoreworCWludCBpOworCXU4IGNiX2lkeCA9IDB4RkY7CisKKwlpZiAoc21pZCA+PSBpb2MtPmhpX3ByaW9yaXR5X3NtaWQpIHsKKwkJaWYgKHNtaWQgPCBpb2MtPmludGVybmFsX3NtaWQpIHsKKwkJCWkgPSBzbWlkIC0gaW9jLT5oaV9wcmlvcml0eV9zbWlkOworCQkJY2JfaWR4ID0gaW9jLT5ocHJfbG9va3VwW2ldLmNiX2lkeDsKKwkJfSBlbHNlIHsKKwkJCWkgPSBzbWlkIC0gaW9jLT5pbnRlcm5hbF9zbWlkOworCQkJY2JfaWR4ID0gaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0uY2JfaWR4OworCQl9CisJfSBlbHNlIHsKKwkJaSA9IHNtaWQgLSAxOworCQljYl9pZHggPSBpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeDsKKwl9CisJcmV0dXJuIGNiX2lkeDsKIH0KIAogLyoqCkBAIC02ODAsNyArNzE1LDYgQEAKIHsKIAl1MzIgaGltX3JlZ2lzdGVyOwogCi0Jd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOwogCWhpbV9yZWdpc3RlciA9IHJlYWRsKCZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRNYXNrKTsKIAloaW1fcmVnaXN0ZXIgJj0gfk1QSTJfSElNX1JJTTsKIAl3cml0ZWwoaGltX3JlZ2lzdGVyLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0TWFzayk7CkBAIC03MTIsOSArNzQ2LDEwIEBACiAJdTE2IHNtaWQ7CiAJdTggY2JfaWR4OwogCXUzMiByZXBseTsKLQl1OCBWRl9JRDsKKwl1OCBtc2l4X2luZGV4OwogCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IGJ1c19pZDsKIAlNcGkyUmVwbHlEZXNjcmlwdG9yc1VuaW9uX3QgKnJwZjsKKwl1OCByYzsKIAogCWlmIChpb2MtPm1hc2tfaW50ZXJydXB0cykKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtNzMzLDcgKzc2OCw3IEBACiAJCXJlcGx5ID0gMDsKIAkJY2JfaWR4ID0gMHhGRjsKIAkJc21pZCA9IGxlMTZfdG9fY3B1KHJwZi0+RGVmYXVsdC5EZXNjcmlwdG9yVHlwZURlcGVuZGVudDEpOwotCQlWRl9JRCA9IHJwZi0+RGVmYXVsdC5WRl9JRDsKKwkJbXNpeF9pbmRleCA9IHJwZi0+RGVmYXVsdC5NU0l4SW5kZXg7CiAJCWlmIChyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9PQogCQkgICAgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSkgewogCQkJcmVwbHkgPSBsZTMyX3RvX2NwdQpAQCAtNzQ1LDE2ICs3ODAsMTggQEAKIAkJICAgIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVEFTU0lTVF9TVUNDRVNTKQogCQkJZ290byBuZXh0OwogCQlpZiAoc21pZCkKLQkJCWNiX2lkeCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLmNiX2lkeDsKKwkJCWNiX2lkeCA9IF9iYXNlX2dldF9jYl9pZHgoaW9jLCBzbWlkKTsKIAkJaWYgKHNtaWQgJiYgY2JfaWR4ICE9IDB4RkYpIHsKLQkJCW1wdF9jYWxsYmFja3NbY2JfaWR4XShpb2MsIHNtaWQsIFZGX0lELCByZXBseSk7CisJCQlyYyA9IG1wdF9jYWxsYmFja3NbY2JfaWR4XShpb2MsIHNtaWQsIG1zaXhfaW5kZXgsCisJCQkgICAgcmVwbHkpOwogCQkJaWYgKHJlcGx5KQotCQkJCV9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhpb2MsIHNtaWQsIFZGX0lELAorCQkJCV9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhpb2MsIHNtaWQsIG1zaXhfaW5kZXgsCiAJCQkJICAgIHJlcGx5KTsKLQkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJCWlmIChyYykKKwkJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CiAJCX0KIAkJaWYgKCFzbWlkKQotCQkJX2Jhc2VfYXN5bmNfZXZlbnQoaW9jLCBWRl9JRCwgcmVwbHkpOworCQkJX2Jhc2VfYXN5bmNfZXZlbnQoaW9jLCBtc2l4X2luZGV4LCByZXBseSk7CiAKIAkJLyogcmVwbHkgZnJlZSBxdWV1ZSBoYW5kbGluZyAqLwogCQlpZiAocmVwbHkpIHsKQEAgLTExOTEsMTkgKzEyMjgsNiBAQAogfQogCiAvKioKLSAqIG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYSAtIG9idGFpbiByZXF1ZXN0IG1mIHBvaW50ZXIgcGh5cyBhZGRyCi0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4KHNtaWQgemVybyBpcyBpbnZhbGlkKQotICoKLSAqIFJldHVybnMgcGh5cyBwb2ludGVyIHRvIG1lc3NhZ2UgZnJhbWUuCi0gKi8KLWRtYV9hZGRyX3QKLW1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQotewotCXJldHVybiBpb2MtPnJlcXVlc3RfZG1hICsgKHNtaWQgKiBpb2MtPnJlcXVlc3Rfc3opOwotfQotCi0vKioKICAqIG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lIC0gb2J0YWluIHJlcXVlc3QgbWYgcG9pbnRlcgogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleChzbWlkIHplcm8gaXMgaW52YWxpZCkKQEAgLTEyNTgsNyArMTI4Miw3IEBACiB9CiAKIC8qKgotICogbXB0MnNhc19iYXNlX2dldF9zbWlkIC0gb2J0YWluIGEgZnJlZSBzbWlkCisgKiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQgLSBvYnRhaW4gYSBmcmVlIHNtaWQgZnJvbSBpbnRlcm5hbCBxdWV1ZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAY2JfaWR4OiBjYWxsYmFjayBpbmRleAogICoKQEAgLTEyNzIsNiArMTI5NiwzOSBAQAogCXUxNiBzbWlkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZpb2MtPmludGVybmFsX2ZyZWVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBzbWlkIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxdWVzdCA9IGxpc3RfZW50cnkoaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QubmV4dCwKKwkgICAgc3RydWN0IHJlcXVlc3RfdHJhY2tlciwgdHJhY2tlcl9saXN0KTsKKwlyZXF1ZXN0LT5jYl9pZHggPSBjYl9pZHg7CisJc21pZCA9IHJlcXVlc3QtPnNtaWQ7CisJbGlzdF9kZWwoJnJlcXVlc3QtPnRyYWNrZXJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHNtaWQ7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyAtIG9idGFpbiBhIGZyZWUgc21pZCBmcm9tIHNjc2lpbyBxdWV1ZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAY2JfaWR4OiBjYWxsYmFjayBpbmRleAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICoKKyAqIFJldHVybnMgc21pZCAoemVybyBpcyBpbnZhbGlkKQorICovCit1MTYKK21wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgsCisgICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKnJlcXVlc3Q7CisJdTE2IHNtaWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJmlvYy0+ZnJlZV9saXN0KSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHNtaWQgbm90IGF2YWlsYWJsZVxuIiwKQEAgLTEyODEsNiArMTMzOCwzNiBAQAogCiAJcmVxdWVzdCA9IGxpc3RfZW50cnkoaW9jLT5mcmVlX2xpc3QubmV4dCwKIAkgICAgc3RydWN0IHJlcXVlc3RfdHJhY2tlciwgdHJhY2tlcl9saXN0KTsKKwlyZXF1ZXN0LT5zY21kID0gc2NtZDsKKwlyZXF1ZXN0LT5jYl9pZHggPSBjYl9pZHg7CisJc21pZCA9IHJlcXVlc3QtPnNtaWQ7CisJbGlzdF9kZWwoJnJlcXVlc3QtPnRyYWNrZXJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHNtaWQ7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwciAtIG9idGFpbiBhIGZyZWUgc21pZCBmcm9tIGhpLXByaW9yaXR5IHF1ZXVlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CisgKgorICogUmV0dXJucyBzbWlkICh6ZXJvIGlzIGludmFsaWQpCisgKi8KK3UxNgorbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IGNiX2lkeCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKnJlcXVlc3Q7CisJdTE2IHNtaWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmlvYy0+aHByX2ZyZWVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGlvYy0+aHByX2ZyZWVfbGlzdC5uZXh0LAorCSAgICBzdHJ1Y3QgcmVxdWVzdF90cmFja2VyLCB0cmFja2VyX2xpc3QpOwogCXJlcXVlc3QtPmNiX2lkeCA9IGNiX2lkeDsKIAlzbWlkID0gcmVxdWVzdC0+c21pZDsKIAlsaXN0X2RlbCgmcmVxdWVzdC0+dHJhY2tlcl9saXN0KTsKQEAgLTEzMDAsMTAgKzEzODcsMzIgQEAKIG1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLmNiX2lkeCA9IDB4RkY7Ci0JbGlzdF9hZGRfdGFpbCgmaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0udHJhY2tlcl9saXN0LAorCWlmIChzbWlkID49IGlvYy0+aGlfcHJpb3JpdHlfc21pZCkgeworCQlpZiAoc21pZCA8IGlvYy0+aW50ZXJuYWxfc21pZCkgeworCQkJLyogaGktcHJpb3JpdHkgKi8KKwkJCWkgPSBzbWlkIC0gaW9jLT5oaV9wcmlvcml0eV9zbWlkOworCQkJaW9jLT5ocHJfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCQlsaXN0X2FkZF90YWlsKCZpb2MtPmhwcl9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkJICAgICZpb2MtPmhwcl9mcmVlX2xpc3QpOworCQl9IGVsc2UgeworCQkJLyogaW50ZXJuYWwgcXVldWUgKi8KKwkJCWkgPSBzbWlkIC0gaW9jLT5pbnRlcm5hbF9zbWlkOworCQkJaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKKwkJCSAgICAmaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogc2NzaWlvIHF1ZXVlICovCisJaSA9IHNtaWQgLSAxOworCWlvYy0+c2NzaV9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwlpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPSBOVUxMOworCWxpc3RfYWRkX3RhaWwoJmlvYy0+c2NzaV9sb29rdXBbaV0udHJhY2tlcl9saXN0LAogCSAgICAmaW9jLT5mcmVlX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCkBAIC0xMzUyLDIxICsxNDYxLDE5IEBACiAgKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyAtIHNlbmQgU0NTSV9JTyByZXF1ZXN0IHRvIGZpcm13YXJlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogdm9pZAotbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQsCi0gICAgdTE2IGhhbmRsZSkKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHUxNiBoYW5kbGUpCiB7CiAJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOwogCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKIAogCiAJZGVzY3JpcHRvci5TQ1NJSU8uUmVxdWVzdEZsYWdzID0gTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9JTzsKLQlkZXNjcmlwdG9yLlNDU0lJTy5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuU0NTSUlPLk1TSXhJbmRleCA9IDA7IC8qIFRPRE8gKi8KIAlkZXNjcmlwdG9yLlNDU0lJTy5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CiAJZGVzY3JpcHRvci5TQ1NJSU8uRGV2SGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKIAlkZXNjcmlwdG9yLlNDU0lJTy5MTUlEID0gMDsKQEAgLTEzNzksMjAgKzE0ODYsMTggQEAKICAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eSAtIHNlbmQgVGFzayBNYW5hZ21lbnQgcmVxdWVzdCB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHZvaWQKLW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAotICAgIHU4IHZmX2lkKQorbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7CiAJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOwogCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKIAogCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlJlcXVlc3RGbGFncyA9CiAJICAgIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0hJR0hfUFJJT1JJVFk7Ci0JZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuVkZfSUQgPSB2Zl9pZDsKKwlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5NU0l4SW5kZXggPSAwOyAvKiBUT0RPICovCiAJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOwogCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LkxNSUQgPSAwOwogCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlJlc2VydmVkMSA9IDA7CkBAIC0xNDA0LDE4ICsxNTA5LDE3IEBACiAgKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdCAtIERlZmF1bHQsIHByaW1hcmlseSB1c2VkIGZvciBjb25maWcgcGFnZXMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEB2Zl9pZDogdmlydHVhbCBmdW5jdGlvbiBpZAogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiB2b2lkCi1tcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCkKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7CiAJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOwogCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKIAogCWRlc2NyaXB0b3IuRGVmYXVsdC5SZXF1ZXN0RmxhZ3MgPSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ERUZBVUxUX1RZUEU7Ci0JZGVzY3JpcHRvci5EZWZhdWx0LlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5EZWZhdWx0Lk1TSXhJbmRleCA9IDA7IC8qIFRPRE8gKi8KIAlkZXNjcmlwdG9yLkRlZmF1bHQuU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOwogCWRlc2NyaXB0b3IuRGVmYXVsdC5MTUlEID0gMDsKIAlkZXNjcmlwdG9yLkRlZmF1bHQuRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQgPSAwOwpAQCAtMTQyNywyMSArMTUzMSwyMCBAQAogICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX3RhcmdldF9hc3Npc3QgLSBzZW5kIFRhcmdldCBBc3Npc3QvU3RhdHVzIHRvIGZpcm13YXJlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBpb19pbmRleDogdmFsdWUgdXNlZCB0byB0cmFjayB0aGUgSU8KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogdm9pZAogbXB0MnNhc19iYXNlX3B1dF9zbWlkX3RhcmdldF9hc3Npc3Qoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKLSAgICB1OCB2Zl9pZCwgdTE2IGlvX2luZGV4KQorICAgIHUxNiBpb19pbmRleCkKIHsKIAlNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90IGRlc2NyaXB0b3I7CiAJdTY0ICpyZXF1ZXN0ID0gKHU2NCAqKSZkZXNjcmlwdG9yOwogCiAJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LlJlcXVlc3RGbGFncyA9CiAJICAgIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfVEFSR0VUOwotCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5NU0l4SW5kZXggPSAwOyAvKiBUT0RPICovCiAJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKIAlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuTE1JRCA9IDA7CiAJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LklvSW5kZXggPSBjcHVfdG9fbGUxNihpb19pbmRleCk7CkBAIC0xNzE3LDYgKzE4MjAsOCBAQAogCX0KIAogCWtmcmVlKGlvYy0+c2NzaV9sb29rdXApOworCWtmcmVlKGlvYy0+aHByX2xvb2t1cCk7CisJa2ZyZWUoaW9jLT5pbnRlcm5hbF9sb29rdXApOwogfQogCiAKQEAgLTE3MzYsNyArMTg0MSw2IEBACiAJdTE2IG51bV9vZl9yZXBseV9mcmFtZXM7CiAJdTE2IGNoYWluc19uZWVkZWRfcGVyX2lvOwogCXUzMiBzeiwgdG90YWxfc3o7Ci0JdTE2IGk7CiAJdTMyIHJldHJ5X3N6OwogCXUxNiBtYXhfcmVxdWVzdF9jcmVkaXQ7CiAKQEAgLTE3NjQsNyArMTg2OCwxMCBAQAogCQkgICAgTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSkgPyBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFIDoKIAkJICAgIGZhY3RzLT5SZXF1ZXN0Q3JlZGl0OwogCX0KLQlpb2MtPnJlcXVlc3RfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQ7CisKKwlpb2MtPmhiYV9xdWV1ZV9kZXB0aCA9IG1heF9yZXF1ZXN0X2NyZWRpdDsKKwlpb2MtPmhpX3ByaW9yaXR5X2RlcHRoID0gZmFjdHMtPkhpZ2hQcmlvcml0eUNyZWRpdDsKKwlpb2MtPmludGVybmFsX2RlcHRoID0gaW9jLT5oaV9wcmlvcml0eV9kZXB0aCArIDU7CiAKIAkvKiByZXF1ZXN0IGZyYW1lIHNpemUgKi8KIAlpb2MtPnJlcXVlc3Rfc3ogPSBmYWN0cy0+SU9DUmVxdWVzdEZyYW1lU2l6ZSAqIDQ7CkBAIC0xODAyLDcgKzE5MDksNyBAQAogCWlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gPSBjaGFpbnNfbmVlZGVkX3Blcl9pbzsKIAogCS8qIHJlcGx5IGZyZWUgcXVldWUgc2l6aW5nIC0gdGFraW5nIGludG8gYWNjb3VudCBmb3IgZXZlbnRzICovCi0JbnVtX29mX3JlcGx5X2ZyYW1lcyA9IGlvYy0+cmVxdWVzdF9kZXB0aCArIDMyOworCW51bV9vZl9yZXBseV9mcmFtZXMgPSBpb2MtPmhiYV9xdWV1ZV9kZXB0aCArIDMyOwogCiAJLyogbnVtYmVyIG9mIHJlcGxpZXMgZnJhbWVzIGNhbid0IGJlIGEgbXVsdGlwbGUgb2YgMTYgKi8KIAkvKiBkZWNyZWFzZSBudW1iZXIgb2YgcmVwbHkgZnJhbWVzIGJ5IDEgKi8KQEAgLTE4MjMsNyArMTkzMCw3IEBACiAJICogZnJhbWVzCiAJICovCiAKLQlxdWV1ZV9zaXplID0gaW9jLT5yZXF1ZXN0X2RlcHRoICsgbnVtX29mX3JlcGx5X2ZyYW1lcyArIDE7CisJcXVldWVfc2l6ZSA9IGlvYy0+aGJhX3F1ZXVlX2RlcHRoICsgbnVtX29mX3JlcGx5X2ZyYW1lcyArIDE7CiAJLyogcm91bmQgdXAgdG8gMTYgYnl0ZSBib3VuZGFyeSAqLwogCWlmIChxdWV1ZV9zaXplICUgMTYpCiAJCXF1ZXVlX3NpemUgKz0gMTYgLSAocXVldWVfc2l6ZSAlIDE2KTsKQEAgLTE4MzcsNjAgKzE5NDQsODUgQEAKIAkJaWYgKHF1ZXVlX2RpZmYgJSAxNikKIAkJCXF1ZXVlX2RpZmYgKz0gMTYgLSAocXVldWVfZGlmZiAlIDE2KTsKIAotCQkvKiBhZGp1c3QgcmVxdWVzdF9kZXB0aCwgcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwKKwkJLyogYWRqdXN0IGhiYV9xdWV1ZV9kZXB0aCwgcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwKIAkJICogYW5kIHF1ZXVlX3NpemUKIAkJICovCi0JCWlvYy0+cmVxdWVzdF9kZXB0aCAtPSBxdWV1ZV9kaWZmOworCQlpb2MtPmhiYV9xdWV1ZV9kZXB0aCAtPSBxdWV1ZV9kaWZmOwogCQlpb2MtPnJlcGx5X2ZyZWVfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKIAkJcXVldWVfc2l6ZSAtPSBxdWV1ZV9kaWZmOwogCX0KIAlpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggPSBxdWV1ZV9zaXplOwogCi0JLyogbWF4IHNjc2kgaG9zdCBxdWV1ZSBkZXB0aCAqLwotCWlvYy0+c2hvc3QtPmNhbl9xdWV1ZSA9IGlvYy0+cmVxdWVzdF9kZXB0aCAtIElOVEVSTkFMX0NNRFNfQ09VTlQ7Ci0JZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NzaSBob3N0IHF1ZXVlOiBkZXB0aCIKLQkgICAgIiglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlKSk7Ci0KIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzY2F0dGVyIGdhdGhlcjogIgogCSAgICAic2dlX2luX21haW5fbXNnKCVkKSwgc2dlX3Blcl9jaGFpbiglZCksIHNnZV9wZXJfaW8oJWQpLCAiCiAJICAgICJjaGFpbnNfcGVyX2lvKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPm1heF9zZ2VzX2luX21haW5fbWVzc2FnZSwKIAkgICAgaW9jLT5tYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlLCBpb2MtPnNob3N0LT5zZ190YWJsZXNpemUsCiAJICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8pKTsKIAorCWlvYy0+c2NzaWlvX2RlcHRoID0gaW9jLT5oYmFfcXVldWVfZGVwdGggLQorCSAgICBpb2MtPmhpX3ByaW9yaXR5X2RlcHRoIC0gaW9jLT5pbnRlcm5hbF9kZXB0aDsKKworCS8qIHNldCB0aGUgc2NzaSBob3N0IGNhbl9xdWV1ZSBkZXB0aAorCSAqIHdpdGggc29tZSBpbnRlcm5hbCBjb21tYW5kcyB0aGF0IGNvdWxkIGJlIG91dHN0YW5kaW5nCisJICovCisJaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlID0gaW9jLT5zY3NpaW9fZGVwdGggLSAoMik7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NzaSBob3N0OiAiCisJICAgICJjYW5fcXVldWUgZGVwdGggKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNob3N0LT5jYW5fcXVldWUpKTsKKwogCS8qIGNvbnRpZ3VvdXMgcG9vbCBmb3IgcmVxdWVzdCBhbmQgY2hhaW5zLCAxNiBieXRlIGFsaWduLCBvbmUgZXh0cmEgIgogCSAqICJmcmFtZSBmb3Igc21pZD0wCiAJICovCi0JaW9jLT5jaGFpbl9kZXB0aCA9IGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gKiBpb2MtPnJlcXVlc3RfZGVwdGg7Ci0Jc3ogPSAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEgKyBpb2MtPmNoYWluX2RlcHRoKSAqIGlvYy0+cmVxdWVzdF9zeik7CisJaW9jLT5jaGFpbl9kZXB0aCA9IGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gKiBpb2MtPnNjc2lpb19kZXB0aDsKKwlzeiA9ICgoaW9jLT5zY3NpaW9fZGVwdGggKyAxICsgaW9jLT5jaGFpbl9kZXB0aCkgKiBpb2MtPnJlcXVlc3Rfc3opOworCisJLyogaGktcHJpb3JpdHkgcXVldWUgKi8KKwlzeiArPSAoaW9jLT5oaV9wcmlvcml0eV9kZXB0aCAqIGlvYy0+cmVxdWVzdF9zeik7CisKKwkvKiBpbnRlcm5hbCBxdWV1ZSAqLworCXN6ICs9IChpb2MtPmludGVybmFsX2RlcHRoICogaW9jLT5yZXF1ZXN0X3N6KTsKIAogCWlvYy0+cmVxdWVzdF9kbWFfc3ogPSBzejsKIAlpb2MtPnJlcXVlc3QgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBkZXYsIHN6LCAmaW9jLT5yZXF1ZXN0X2RtYSk7CiAJaWYgKCFpb2MtPnJlcXVlc3QpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVxdWVzdCBwb29sOiBwY2lfYWxsb2NfY29uc2lzdGVudCAiCi0JCSAgICAiZmFpbGVkOiByZXFfZGVwdGgoJWQpLCBjaGFpbnNfcGVyX2lvKCVkKSwgZnJhbWVfc3ooJWQpLCAiCi0JCSAgICAidG90YWwoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVxdWVzdF9kZXB0aCwKKwkJICAgICJmYWlsZWQ6IGhiYV9kZXB0aCglZCksIGNoYWluc19wZXJfaW8oJWQpLCBmcmFtZV9zeiglZCksICIKKwkJICAgICJ0b3RhbCglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5oYmFfcXVldWVfZGVwdGgsCiAJCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvLCBpb2MtPnJlcXVlc3Rfc3osIHN6LzEwMjQpOwotCQlpZiAoaW9jLT5yZXF1ZXN0X2RlcHRoIDwgTVBUMlNBU19TQVNfUVVFVUVfREVQVEgpCisJCWlmIChpb2MtPnNjc2lpb19kZXB0aCA8IE1QVDJTQVNfU0FTX1FVRVVFX0RFUFRIKQogCQkJZ290byBvdXQ7CiAJCXJldHJ5X3N6ICs9IDY0OwotCQlpb2MtPnJlcXVlc3RfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQgLSByZXRyeV9zejsKKwkJaW9jLT5oYmFfcXVldWVfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQgLSByZXRyeV9zejsKIAkJZ290byByZXRyeV9hbGxvY2F0aW9uOwogCX0KIAogCWlmIChyZXRyeV9zeikKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVxdWVzdCBwb29sOiBwY2lfYWxsb2NfY29uc2lzdGVudCAiCi0JCSAgICAic3VjY2VlZDogcmVxX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgotCQkgICAgInRvdGFsKCVkIGtiKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJCSAgICAic3VjY2VlZDogaGJhX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgorCQkgICAgInRvdGFsKCVkIGtiKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmhiYV9xdWV1ZV9kZXB0aCwKIAkJICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8sIGlvYy0+cmVxdWVzdF9zeiwgc3ovMTAyNCk7CiAKLQlpb2MtPmNoYWluID0gaW9jLT5yZXF1ZXN0ICsgKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxKSAqCisKKwkvKiBoaS1wcmlvcml0eSBxdWV1ZSAqLworCWlvYy0+aGlfcHJpb3JpdHkgPSBpb2MtPnJlcXVlc3QgKyAoKGlvYy0+c2NzaWlvX2RlcHRoICsgMSkgKgogCSAgICBpb2MtPnJlcXVlc3Rfc3opOwotCWlvYy0+Y2hhaW5fZG1hID0gaW9jLT5yZXF1ZXN0X2RtYSArICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKgorCWlvYy0+aGlfcHJpb3JpdHlfZG1hID0gaW9jLT5yZXF1ZXN0X2RtYSArICgoaW9jLT5zY3NpaW9fZGVwdGggKyAxKSAqCiAJICAgIGlvYy0+cmVxdWVzdF9zeik7CisKKwkvKiBpbnRlcm5hbCBxdWV1ZSAqLworCWlvYy0+aW50ZXJuYWwgPSBpb2MtPmhpX3ByaW9yaXR5ICsgKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCWlvYy0+aW50ZXJuYWxfZG1hID0gaW9jLT5oaV9wcmlvcml0eV9kbWEgKyAoaW9jLT5oaV9wcmlvcml0eV9kZXB0aCAqCisJICAgIGlvYy0+cmVxdWVzdF9zeik7CisKKwlpb2MtPmNoYWluID0gaW9jLT5pbnRlcm5hbCArIChpb2MtPmludGVybmFsX2RlcHRoICoKKwkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKKwlpb2MtPmNoYWluX2RtYSA9IGlvYy0+aW50ZXJuYWxfZG1hICsgKGlvYy0+aW50ZXJuYWxfZGVwdGggKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVxdWVzdCBwb29sKDB4JXApOiAiCiAJICAgICJkZXB0aCglZCksIGZyYW1lX3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsCi0JICAgIGlvYy0+cmVxdWVzdCwgaW9jLT5yZXF1ZXN0X2RlcHRoLCBpb2MtPnJlcXVlc3Rfc3osCi0JICAgICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKiBpb2MtPnJlcXVlc3Rfc3opLzEwMjQpKTsKKwkgICAgaW9jLT5yZXF1ZXN0LCBpb2MtPmhiYV9xdWV1ZV9kZXB0aCwgaW9jLT5yZXF1ZXN0X3N6LAorCSAgICAoaW9jLT5oYmFfcXVldWVfZGVwdGggKiBpb2MtPnJlcXVlc3Rfc3opLzEwMjQpKTsKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJjaGFpbiBwb29sKDB4JXApOiBkZXB0aCIKIAkgICAgIiglZCksIGZyYW1lX3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+Y2hhaW4sCiAJICAgIGlvYy0+Y2hhaW5fZGVwdGgsIGlvYy0+cmVxdWVzdF9zeiwgKChpb2MtPmNoYWluX2RlcHRoICoKQEAgLTE4OTksNyArMjAzMSw3IEBACiAJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW9jLT5yZXF1ZXN0X2RtYSkpOwogCXRvdGFsX3N6ICs9IHN6OwogCi0JaW9jLT5zY3NpX2xvb2t1cCA9IGtjYWxsb2MoaW9jLT5yZXF1ZXN0X2RlcHRoLAorCWlvYy0+c2NzaV9sb29rdXAgPSBrY2FsbG9jKGlvYy0+c2NzaWlvX2RlcHRoLAogCSAgICBzaXplb2Yoc3RydWN0IHJlcXVlc3RfdHJhY2tlciksIEdGUF9LRVJORUwpOwogCWlmICghaW9jLT5zY3NpX2xvb2t1cCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJzY3NpX2xvb2t1cDoga2NhbGxvYyBmYWlsZWRcbiIsCkBAIC0xOTA3LDEyICsyMDM5LDM4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCSAvKiBpbml0aWFsaXplIHNvbWUgYml0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykKLQkJaW9jLT5zY3NpX2xvb2t1cFtpXS5zbWlkID0gaSArIDE7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NzaWlvKDB4JXApOiAiCisJICAgICJkZXB0aCglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXF1ZXN0LAorCSAgICBpb2MtPnNjc2lpb19kZXB0aCkpOworCisJLyogaW5pdGlhbGl6ZSBoaS1wcmlvcml0eSBxdWV1ZSBzbWlkJ3MgKi8KKwlpb2MtPmhwcl9sb29rdXAgPSBrY2FsbG9jKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGgsCisJICAgIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF90cmFja2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPmhwcl9sb29rdXApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiaHByX2xvb2t1cDoga2NhbGxvYyBmYWlsZWRcbiIsCisJCSAgICBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT5oaV9wcmlvcml0eV9zbWlkID0gaW9jLT5zY3NpaW9fZGVwdGggKyAxOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImhpX3ByaW9yaXR5KDB4JXApOiAiCisJICAgICJkZXB0aCglZCksIHN0YXJ0IHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+aGlfcHJpb3JpdHksCisJICAgIGlvYy0+aGlfcHJpb3JpdHlfZGVwdGgsIGlvYy0+aGlfcHJpb3JpdHlfc21pZCkpOworCisJLyogaW5pdGlhbGl6ZSBpbnRlcm5hbCBxdWV1ZSBzbWlkJ3MgKi8KKwlpb2MtPmludGVybmFsX2xvb2t1cCA9IGtjYWxsb2MoaW9jLT5pbnRlcm5hbF9kZXB0aCwKKwkgICAgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYy0+aW50ZXJuYWxfbG9va3VwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImludGVybmFsX2xvb2t1cDoga2NhbGxvYyBmYWlsZWRcbiIsCisJCSAgICBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT5pbnRlcm5hbF9zbWlkID0gaW9jLT5oaV9wcmlvcml0eV9zbWlkICsgaW9jLT5oaV9wcmlvcml0eV9kZXB0aDsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpbnRlcm5hbCgweCVwKTogIgorCSAgICAiZGVwdGgoJWQpLCBzdGFydCBzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmludGVybmFsLAorCSAgICAgaW9jLT5pbnRlcm5hbF9kZXB0aCwgaW9jLT5pbnRlcm5hbF9zbWlkKSk7CiAKIAkvKiBzZW5zZSBidWZmZXJzLCA0IGJ5dGUgYWxpZ24gKi8KLQlzeiA9IGlvYy0+cmVxdWVzdF9kZXB0aCAqIFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKKwlzeiA9IGlvYy0+c2NzaWlvX2RlcHRoICogU0NTSV9TRU5TRV9CVUZGRVJTSVpFOwogCWlvYy0+c2Vuc2VfZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoInNlbnNlIHBvb2wiLCBpb2MtPnBkZXYsIHN6LCA0LAogCSAgICAwKTsKIAlpZiAoIWlvYy0+c2Vuc2VfZG1hX3Bvb2wpIHsKQEAgLTE5MjksNyArMjA4Nyw3IEBACiAJfQogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkgICAgInNlbnNlIHBvb2woMHglcCk6IGRlcHRoKCVkKSwgZWxlbWVudF9zaXplKCVkKSwgcG9vbF9zaXplIgotCSAgICAiKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNlbnNlLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJICAgICIoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2Vuc2UsIGlvYy0+c2NzaWlvX2RlcHRoLAogCSAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIHN6LzEwMjQpKTsKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzZW5zZV9kbWEoMHglbGx4KVxuIiwKIAkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWlvYy0+c2Vuc2VfZG1hKSk7CkBAIC0yMzA0LDcgKzI0NjIsNyBAQAogCSAgICAoKHJlcXVlc3RfYnl0ZXMvNCk8PE1QSTJfRE9PUkJFTExfQUREX0RXT1JEU19TSElGVCkpLAogCSAgICAmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CiAKLQlpZiAoKF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludChpb2MsIDUsIHNsZWVwX2ZsYWcpKSkgeworCWlmICgoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfaW50KGlvYywgNSwgTk9fU0xFRVApKSkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJkb29yYmVsbCBoYW5kc2hha2UgIgogCQkgICAiaW50IGZhaWxlZCAobGluZT0lZClcbiIsIGlvYy0+bmFtZSwgX19MSU5FX18pOwogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI0NTQsNyArMjYxMiw4IEBACiAJaWYgKG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0hBUkRfUkVTRVQgfHwKIAkgICAgbXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9PSBNUEkyX1NBU19PUF9QSFlfTElOS19SRVNFVCkKIAkJaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcyA9IDE7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwKIAkgICAgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOwogCWlmICgobXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9PSBNUEkyX1NBU19PUF9QSFlfSEFSRF9SRVNFVCB8fApAQCAtMjU1NSw3ICsyNzE0LDggQEAKIAlyZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKIAlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKIAltZW1jcHkocmVxdWVzdCwgbXBpX3JlcXVlc3QsIHNpemVvZihNcGkyU2VwUmVwbHlfdCkpOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+YmFzZV9jbWRzLmRvbmUsCiAJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKTsKIAlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKQEAgLTI3MDEsMTMgKzI4NjEsMTIgQEAKIC8qKgogICogX2Jhc2Vfc2VuZF9pb2NfaW5pdCAtIHNlbmQgaW9jX2luaXQgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotX2Jhc2Vfc2VuZF9pb2NfaW5pdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCBpbnQgc2xlZXBfZmxhZykKK19iYXNlX3NlbmRfaW9jX2luaXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKIHsKIAlNcGkySU9DSW5pdFJlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlNcGkySU9DSW5pdFJlcGx5X3QgbXBpX3JlcGx5OwpAQCAtMjcxOSw3ICsyODc4LDggQEAKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMklPQ0luaXRSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fSU9DX0lOSVQ7CiAJbXBpX3JlcXVlc3QuV2hvSW5pdCA9IE1QSTJfV0hPSU5JVF9IT1NUX0RSSVZFUjsKLQltcGlfcmVxdWVzdC5WRl9JRCA9IFZGX0lEOworCW1waV9yZXF1ZXN0LlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LlZQX0lEID0gMDsKIAltcGlfcmVxdWVzdC5Nc2dWZXJzaW9uID0gY3B1X3RvX2xlMTYoTVBJMl9WRVJTSU9OKTsKIAltcGlfcmVxdWVzdC5IZWFkZXJWZXJzaW9uID0gY3B1X3RvX2xlMTYoTVBJMl9IRUFERVJfVkVSU0lPTik7CiAKQEAgLTI3OTUsMTMgKzI5NTUsMTIgQEAKIC8qKgogICogX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZSAtIHNlbmQgcG9ydF9lbmFibGUoZGlzY292ZXJ5IHN0dWZmKSB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1fYmFzZV9zZW5kX3BvcnRfZW5hYmxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIGludCBzbGVlcF9mbGFnKQorX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnKQogewogCU1waTJQb3J0RW5hYmxlUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKIAl1MzIgaW9jX3N0YXRlOwpAQCAtMjgyOSw5ICsyOTg4LDExIEBACiAJaW9jLT5iYXNlX2NtZHMuc21pZCA9IHNtaWQ7CiAJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlBvcnRFbmFibGVSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1BPUlRfRU5BQkxFOwotCW1waV9yZXF1ZXN0LT5WRl9JRCA9IFZGX0lEOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCi0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBWRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLAogCSAgICAzMDAqSFopOwogCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgewpAQCAtMjg5MiwxMyArMzA1MywxMiBAQAogLyoqCiAgKiBfYmFzZV9ldmVudF9ub3RpZmljYXRpb24gLSBzZW5kIGV2ZW50IG5vdGlmaWNhdGlvbgogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1fYmFzZV9ldmVudF9ub3RpZmljYXRpb24oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgaW50IHNsZWVwX2ZsYWcpCitfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKIHsKIAlNcGkyRXZlbnROb3RpZmljYXRpb25SZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CkBAIC0yOTI2LDExICszMDg2LDEzIEBACiAJaW9jLT5iYXNlX2NtZHMuc21pZCA9IHNtaWQ7CiAJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9FVkVOVF9OT1RJRklDQVRJT047Ci0JbXBpX3JlcXVlc3QtPlZGX0lEID0gVkZfSUQ7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE1QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEUzsgaSsrKQogCQltcGlfcmVxdWVzdC0+RXZlbnRNYXNrc1tpXSA9CiAJCSAgICBsZTMyX3RvX2NwdShpb2MtPmV2ZW50X21hc2tzW2ldKTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIFZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+YmFzZV9jbWRzLmRvbmUsIDMwKkhaKTsKIAlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsCkBAIC0yOTgxLDcgKzMxNDMsNyBAQAogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZpb2MtPmJhc2VfY21kcy5tdXRleCk7Ci0JX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgMCwgQ0FOX1NMRUVQKTsKKwlfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oaW9jLCBDQU5fU0xFRVApOwogCW11dGV4X3VubG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOwogfQogCkBAIC0zMDA2LDcgKzMxNjgsNiBAQAogCiAJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJjbGVhciBpbnRlcnJ1cHRzXG4iLAogCSAgICBpb2MtPm5hbWUpKTsKLQl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CiAKIAljb3VudCA9IDA7CiAJZG8gewpAQCAtMzE2MCwzMCArMzMyMSw2MCBAQAogLyoqCiAgKiBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbCAtIHB1dCBjb250cm9sbGVyIGluIE9QRVJBVElPTkFMIHN0YXRlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAogICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKLV9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgaW50IHNsZWVwX2ZsYWcpCitfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnKQogewogCWludCByLCBpOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdTMyIHJlcGx5X2FkZHJlc3M7CisJdTE2IHNtaWQ7CisJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyLCAqZGVsYXllZF90cl9uZXh0OwogCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKKwkvKiBjbGVhbiB0aGUgZGVsYXllZCB0YXJnZXQgcmVzZXQgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZWxheWVkX3RyLCBkZWxheWVkX3RyX25leHQsCisJICAgICZpb2MtPmRlbGF5ZWRfdHJfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmZGVsYXllZF90ci0+bGlzdCk7CisJCWtmcmVlKGRlbGF5ZWRfdHIpOworCX0KKwogCS8qIGluaXRpYWxpemUgdGhlIHNjc2kgbG9va3VwIGZyZWUgbGlzdCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAlJTklUX0xJU1RfSEVBRCgmaW9jLT5mcmVlX2xpc3QpOwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCXNtaWQgPSAxOworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrLCBzbWlkKyspIHsKIAkJaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNtaWQgPSBzbWlkOworCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPSBOVUxMOwogCQlsaXN0X2FkZF90YWlsKCZpb2MtPnNjc2lfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKIAkJICAgICZpb2MtPmZyZWVfbGlzdCk7CiAJfQorCisJLyogaGktcHJpb3JpdHkgcXVldWUgKi8KKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5ocHJfZnJlZV9saXN0KTsKKwlzbWlkID0gaW9jLT5oaV9wcmlvcml0eV9zbWlkOworCWZvciAoaSA9IDA7IGkgPCBpb2MtPmhpX3ByaW9yaXR5X2RlcHRoOyBpKyssIHNtaWQrKykgeworCQlpb2MtPmhwcl9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwkJaW9jLT5ocHJfbG9va3VwW2ldLnNtaWQgPSBzbWlkOworCQlsaXN0X2FkZF90YWlsKCZpb2MtPmhwcl9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkgICAgJmlvYy0+aHByX2ZyZWVfbGlzdCk7CisJfQorCisJLyogaW50ZXJuYWwgcXVldWUgKi8KKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QpOworCXNtaWQgPSBpb2MtPmludGVybmFsX3NtaWQ7CisJZm9yIChpID0gMDsgaSA8IGlvYy0+aW50ZXJuYWxfZGVwdGg7IGkrKywgc21pZCsrKSB7CisJCWlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCWlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLnNtaWQgPSBzbWlkOworCQlsaXN0X2FkZF90YWlsKCZpb2MtPmludGVybmFsX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCisJCSAgICAmaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QpOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAogCS8qIGluaXRpYWxpemUgUmVwbHkgRnJlZSBRdWV1ZSAqLwpAQCAtMzE5Niw3ICszMzg3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoOyBpKyspCiAJCWlvYy0+cmVwbHlfcG9zdF9mcmVlW2ldLldvcmRzID0gVUxMT05HX01BWDsKIAotCXIgPSBfYmFzZV9zZW5kX2lvY19pbml0KGlvYywgVkZfSUQsIHNsZWVwX2ZsYWcpOworCXIgPSBfYmFzZV9zZW5kX2lvY19pbml0KGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0zMjA3LDE0ICszMzk4LDE0IEBACiAJd3JpdGVsKDAsICZpb2MtPmNoaXAtPlJlcGx5UG9zdEhvc3RJbmRleCk7CiAKIAlfYmFzZV91bm1hc2tfaW50ZXJydXB0cyhpb2MpOwotCXIgPSBfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oaW9jLCBWRl9JRCwgc2xlZXBfZmxhZyk7CisJciA9IF9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihpb2MsIHNsZWVwX2ZsYWcpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKIAkJX2Jhc2Vfc3RhdGljX2NvbmZpZ19wYWdlcyhpb2MpOwogCi0JciA9IF9iYXNlX3NlbmRfcG9ydF9lbmFibGUoaW9jLCBWRl9JRCwgc2xlZXBfZmxhZyk7CisJciA9IF9iYXNlX3NlbmRfcG9ydF9lbmFibGUoaW9jLCBzbGVlcF9mbGFnKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTMyNzgsNiArMzQ2OSwxNyBAQAogCWlmIChyKQogCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKIAorCWlvYy0+cGZhY3RzID0ga2NhbGxvYyhpb2MtPmZhY3RzLk51bWJlck9mUG9ydHMsCisJICAgIHNpemVvZihNcGkyUG9ydEZhY3RzUmVwbHlfdCksIEdGUF9LRVJORUwpOworCWlmICghaW9jLT5wZmFjdHMpCisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCisJZm9yIChpID0gMCA7IGkgPCBpb2MtPmZhY3RzLk51bWJlck9mUG9ydHM7IGkrKykgeworCQlyID0gX2Jhc2VfZ2V0X3BvcnRfZmFjdHMoaW9jLCBpLCBDQU5fU0xFRVApOworCQlpZiAocikKKwkJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCX0KKwogCXIgPSBfYmFzZV9hbGxvY2F0ZV9tZW1vcnlfcG9vbHMoaW9jLCBDQU5fU0xFRVApOwogCWlmIChyKQogCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKQEAgLTMyODYsNyArMzQ4OCw2IEBACiAKIAkvKiBiYXNlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLwogCW11dGV4X2luaXQoJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCWlvYy0+YmFzZV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKIAlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIApAQCAtMzI5NCw3ICszNDk1LDYgQEAKIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwogCW11dGV4X2luaXQoJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKIAogCS8qIHRhc2sgbWFuYWdlbWVudCBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KIAlpb2MtPnRtX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwpAQCAtMzMxMCw3ICszNTEwLDYgQEAKIAlpb2MtPmN0bF9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKIAlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwogCW11dGV4X2luaXQoJmlvYy0+Y3RsX2NtZHMubXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFM7IGkrKykKIAkJaW9jLT5ldmVudF9tYXNrc1tpXSA9IC0xOwpAQCAtMzMyNywxOCArMzUyNiw3IEBACiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfSVJfT1BFUkFUSU9OX1NUQVRVUyk7CiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTCk7CiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfTE9HX0VOVFJZX0FEREVEKTsKLQotCWlvYy0+cGZhY3RzID0ga2NhbGxvYyhpb2MtPmZhY3RzLk51bWJlck9mUG9ydHMsCi0JICAgIHNpemVvZihNcGkyUG9ydEZhY3RzUmVwbHlfdCksIEdGUF9LRVJORUwpOwotCWlmICghaW9jLT5wZmFjdHMpCi0JCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwotCi0JZm9yIChpID0gMCA7IGkgPCBpb2MtPmZhY3RzLk51bWJlck9mUG9ydHM7IGkrKykgewotCQlyID0gX2Jhc2VfZ2V0X3BvcnRfZmFjdHMoaW9jLCBpLCBDQU5fU0xFRVApOwotCQlpZiAocikKLQkJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwotCX0KLQlyID0gX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoaW9jLCAwLCBDQU5fU0xFRVApOworCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIENBTl9TTEVFUCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwogCkBAIC0zNDY2LDcgKzM2NTQsNyBAQAogCiAJLyogcGVuZGluZyBjb21tYW5kIGNvdW50ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zY3NpaW9fZGVwdGg7IGkrKykKIAkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uY2JfaWR4ICE9IDB4RkYpCiAJCQlpb2MtPnBlbmRpbmdfaW9fY291bnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKQEAgLTM0OTAsNyArMzY3OCw3IEBACiBtcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcsCiAgICAgZW51bSByZXNldF90eXBlIHR5cGUpCiB7Ci0JaW50IHIsIGk7CisJaW50IHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCkBAIC0zNTEzLDkgKzM3MDEsNyBAQAogCWlmIChyKQogCQlnb3RvIG91dDsKIAlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfQUZURVJfUkVTRVQpOwotCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpKyspCi0JCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIGlvYy0+cGZhY3RzW2ldLlZGX0lELAotCQkgICAgc2xlZXBfZmxhZyk7CisJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKCFyKQogCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfRE9ORV9SRVNFVCk7CiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAppbmRleCAyZmFhYjFlLi4wY2Y2YmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaApAQCAtMyw3ICszLDcgQEAKICAqIGZvciBhY2Nlc3MgdG8gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfYmFzZS5oCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTY5LDEwICs2OSwxMCBAQAogI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKICNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jwb3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCiAjZGVmaW5lIE1QVDJTQVNfREVTQ1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjAxLjEwMC4wNi4wMCIKLSNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwMQorI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDIuMTAwLjAzLjAwIgorI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTAyCiAjZGVmaW5lIE1QVDJTQVNfTUlOT1JfVkVSU0lPTgkJMTAwCi0jZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDYKKyNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwMwogI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDAKIAogLyoKQEAgLTI2NCw2ICsyNjQsMTMgQEAKICAqIFNBUyBUb3BvbG9neSBTdHJ1Y3R1cmVzCiAgKi8KIAorI2RlZmluZSBNUFRTQVNfU1RBVEVfVFJfU0VORAkJMHgwMDAxCisjZGVmaW5lIE1QVFNBU19TVEFURV9UUl9DT01QTEVURQkweDAwMDIKKyNkZWZpbmUgTVBUU0FTX1NUQVRFX0NOVFJMX1NFTkQJCTB4MDAwNAorI2RlZmluZSBNUFRTQVNfU1RBVEVfQ05UUkxfQ09NUExFVEUJMHgwMDA4CisKKyNkZWZpbmUgTVBUMlNBU19SRVFfU0FTX0NOVFJMCQkweDAwMTAKKwogLyoqCiAgKiBzdHJ1Y3QgX3Nhc19kZXZpY2UgLSBhdHRhY2hlZCBkZXZpY2UgaW5mb3JtYXRpb24KICAqIEBsaXN0OiBzYXMgZGV2aWNlIGxpc3QKQEAgLTMwMCw2ICszMDcsNyBAQAogCXUxNglzbG90OwogCXU4CWhpZGRlbl9yYWlkX2NvbXBvbmVudDsKIAl1OAlyZXNwb25kaW5nOworCXUxNglzdGF0ZTsKIH07CiAKIC8qKgpAQCAtNDM2LDYgKzQ0NCwxNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgdHJhY2tlcl9saXN0OwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgX3RyX2xpc3QgLSB0YXJnZXQgcmVzZXQgbGlzdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICogQHN0YXRlOiBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0cnVjdCBfdHJfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXUxNgloYW5kbGU7CisJdTE2CXN0YXRlOworfTsKKwogdHlwZWRlZiB2b2lkICgqTVBUX0FERF9TR0UpKHZvaWQgKnBhZGRyLCB1MzIgZmxhZ3NfbGVuZ3RoLCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKIAogLyoqCkBAIC01MTAsOCArNTI5LDkgQEAKICAqIEBjb25maWdfcGFnZV9zejogY29uZmlnIHBhZ2Ugc2l6ZQogICogQGNvbmZpZ19wYWdlOiByZXNlcnZlIG1lbW9yeSBmb3IgY29uZmlnIHBhZ2UgcGF5bG9hZAogICogQGNvbmZpZ19wYWdlX2RtYToKKyAqIEBoYmFfcXVldWVfZGVwdGg6IGhiYSByZXF1ZXN0IHF1ZXVlIGRlcHRoCiAgKiBAc2dlX3NpemU6IHNnIGVsZW1lbnQgc2l6ZSBmb3IgZWl0aGVyIDMyLzY0IGJpdAotICogQHJlcXVlc3RfZGVwdGg6IGhiYSByZXF1ZXN0IHF1ZXVlIGRlcHRoCisgKiBAc2NzaWlvX2RlcHRoOiBTQ1NJX0lPIHF1ZXVlIGRlcHRoCiAgKiBAcmVxdWVzdF9zejogcGVyIHJlcXVlc3QgZnJhbWUgc2l6ZQogICogQHJlcXVlc3Q6IHBvb2wgb2YgcmVxdWVzdCBmcmFtZXMKICAqIEByZXF1ZXN0X2RtYToKQEAgLTUyOCw2ICs1NDgsMTggQEAKICAqIEBjaGFpbnNfbmVlZGVkX3Blcl9pbzogbWF4IGNoYWlucyBwZXIgaW8KICAqIEBjaGFpbl9vZmZzZXRfdmFsdWVfZm9yX21haW5fbWVzc2FnZTogbG9jYXRpb24gMXN0IHNnIGluIG1haW4KICAqIEBjaGFpbl9kZXB0aDogdG90YWwgY2hhaW5zIGFsbG9jYXRlZAorICogQGhpX3ByaW9yaXR5X3NtaWQ6CisgKiBAaGlfcHJpb3JpdHk6CisgKiBAaGlfcHJpb3JpdHlfZG1hOgorICogQGhpX3ByaW9yaXR5X2RlcHRoOgorICogQGhwcl9sb29rdXA6CisgKiBAaHByX2ZyZWVfbGlzdDoKKyAqIEBpbnRlcm5hbF9zbWlkOgorICogQGludGVybmFsOgorICogQGludGVybmFsX2RtYToKKyAqIEBpbnRlcm5hbF9kZXB0aDoKKyAqIEBpbnRlcm5hbF9sb29rdXA6CisgKiBAaW50ZXJuYWxfZnJlZV9saXN0OgogICogQHNlbnNlOiBwb29sIG9mIHNlbnNlCiAgKiBAc2Vuc2VfZG1hOgogICogQHNlbnNlX2RtYV9wb29sOgpAQCAtNTk3LDYgKzYyOSw4IEBACiAJdTgJCWN0bF9jYl9pZHg7CiAJdTgJCWJhc2VfY2JfaWR4OwogCXU4CQljb25maWdfY2JfaWR4OworCXU4CQl0bV90cl9jYl9pZHg7CisJdTgJCXRtX3Nhc19jb250cm9sX2NiX2lkeDsKIAlzdHJ1Y3QgX2ludGVybmFsX2NtZCBiYXNlX2NtZHM7CiAJc3RydWN0IF9pbnRlcm5hbF9jbWQgdHJhbnNwb3J0X2NtZHM7CiAJc3RydWN0IF9pbnRlcm5hbF9jbWQgdG1fY21kczsKQEAgLTY0Myw5ICs2NzcsMTAgQEAKIAl2b2lkIAkJKmNvbmZpZ19wYWdlOwogCWRtYV9hZGRyX3QJY29uZmlnX3BhZ2VfZG1hOwogCi0JLyogcmVxdWVzdCAqLworCS8qIHNjc2lpbyByZXF1ZXN0ICovCisJdTE2CQloYmFfcXVldWVfZGVwdGg7CiAJdTE2CQlzZ2Vfc2l6ZTsKLQl1MTYgCQlyZXF1ZXN0X2RlcHRoOworCXUxNiAJCXNjc2lpb19kZXB0aDsKIAl1MTYJCXJlcXVlc3Rfc3o7CiAJdTgJCSpyZXF1ZXN0OwogCWRtYV9hZGRyX3QJcmVxdWVzdF9kbWE7CkBAIC02NjUsNiArNzAwLDIyIEBACiAJdTE2CQljaGFpbl9vZmZzZXRfdmFsdWVfZm9yX21haW5fbWVzc2FnZTsKIAl1MTYJCWNoYWluX2RlcHRoOwogCisJLyogaGktcHJpb3JpdHkgcXVldWUgKi8KKwl1MTYJCWhpX3ByaW9yaXR5X3NtaWQ7CisJdTgJCSpoaV9wcmlvcml0eTsKKwlkbWFfYWRkcl90CWhpX3ByaW9yaXR5X2RtYTsKKwl1MTYJCWhpX3ByaW9yaXR5X2RlcHRoOworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKmhwcl9sb29rdXA7CisJc3RydWN0IGxpc3RfaGVhZCBocHJfZnJlZV9saXN0OworCisJLyogaW50ZXJuYWwgcXVldWUgKi8KKwl1MTYJCWludGVybmFsX3NtaWQ7CisJdTgJCSppbnRlcm5hbDsKKwlkbWFfYWRkcl90CWludGVybmFsX2RtYTsKKwl1MTYJCWludGVybmFsX2RlcHRoOworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKmludGVybmFsX2xvb2t1cDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGludGVybmFsX2ZyZWVfbGlzdDsKKwogCS8qIHNlbnNlICovCiAJdTgJCSpzZW5zZTsKIAlkbWFfYWRkcl90CXNlbnNlX2RtYTsKQEAgLTY5MCw2ICs3NDEsOCBAQAogCXN0cnVjdCBkbWFfcG9vbCAqcmVwbHlfcG9zdF9mcmVlX2RtYV9wb29sOwogCXUzMgkJcmVwbHlfcG9zdF9ob3N0X2luZGV4OwogCisJc3RydWN0IGxpc3RfaGVhZCBkZWxheWVkX3RyX2xpc3Q7CisKIAkvKiBkaWFnIGJ1ZmZlciBzdXBwb3J0ICovCiAJdTgJCSpkaWFnX2J1ZmZlcltNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOwogCXUzMgkJZGlhZ19idWZmZXJfc3pbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKQEAgLTcwMSw3ICs3NTQsNyBAQAogCXUzMgkJZGlhZ25vc3RpY19mbGFnc1tNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOwogfTsKIAotdHlwZWRlZiB2b2lkICgqTVBUX0NBTExCQUNLKShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKK3R5cGVkZWYgdTggKCpNUFRfQ0FMTEJBQ0spKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCiAgICAgdTMyIHJlcGx5KTsKIAogCkBAIC03MjAsMjIgKzc3MywyOCBAQAogdm9pZCAqbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CiB2b2lkICptcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKIHZvaWQgbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHZvaWQgKnBhZGRyKTsKLWRtYV9hZGRyX3QgbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWVfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwotZG1hX2FkZHJfdCBtcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcl9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CitkbWFfYWRkcl90IG1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTE2IHNtaWQpOworCisvKiBoaS1wcmlvcml0eSBxdWV1ZSAqLwordTE2IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9ocHIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgpOwordTE2IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgsCisgICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCk7CiAKIHUxNiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgpOwogdm9pZCBtcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwotdm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCwKK3ZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKICAgICB1MTYgaGFuZGxlKTsKLXZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkKTsKK3ZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwogdm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfdGFyZ2V0X2Fzc2lzdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAotICAgIHU4IHZmX2lkLCB1MTYgaW9faW5kZXgpOwotdm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCk7CisgICAgdTE2IGlvX2luZGV4KTsKK3ZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CiB2b2lkIG1wdDJzYXNfYmFzZV9pbml0aWFsaXplX2NhbGxiYWNrX2hhbmRsZXIodm9pZCk7CiB1OCBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcihNUFRfQ0FMTEJBQ0sgY2JfZnVuYyk7CiB2b2lkIG1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodTggY2JfaWR4KTsKIAotdm9pZCBtcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfYmFzZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyIHBoeXNfYWRkcik7CiAKIHUzMiBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IGNvb2tlZCk7CkBAIC03NDksNiArODA4LDggQEAKIHZvaWQgbXB0MnNhc19iYXNlX3ZhbGlkYXRlX2V2ZW50X3R5cGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MzIgKmV2ZW50X3R5cGUpOwogCiAvKiBzY3NpaCBzaGFyZWQgQVBJICovCit1OCBtcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogdm9pZCBtcHQyc2FzX3Njc2loX2lzc3VlX3RtKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwgdWludCBsdW4sCiAgICAgdTggdHlwZSwgdTE2IHNtaWRfdGFzaywgdWxvbmcgdGltZW91dCk7CiB2b2lkIG1wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKTsKQEAgLTc2MCwxMSArODIxLDExIEBACiBzdHJ1Y3QgX3Nhc19kZXZpY2UgKm1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKAogICAgIHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzKTsKIAotdm9pZCBtcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSk7CiB2b2lkIG1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSk7CiAKIC8qIGNvbmZpZyBzaGFyZWQgQVBJICovCi12b2lkIG1wdDJzYXNfY29uZmlnX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX2NvbmZpZ19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggKm51bV9waHlzKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCAqY29uZmlnX3BhZ2UpOwpAQCAtODE3LDE0ICs4NzgsMTcgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0MnNhc19kZXZfYXR0cnNbXTsKIHZvaWQgbXB0MnNhc19jdGxfaW5pdCh2b2lkKTsKIHZvaWQgbXB0MnNhc19jdGxfZXhpdCh2b2lkKTsKLXZvaWQgbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogdm9pZCBtcHQyc2FzX2N0bF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKTsKLXZvaWQgbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogdm9pZCBtcHQyc2FzX2N0bF9hZGRfdG9fZXZlbnRfbG9nKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICBNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHkpOwogCiAvKiB0cmFuc3BvcnQgc2hhcmVkIEFQSSAqLwotdm9pZCBtcHQyc2FzX3RyYW5zcG9ydF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordTggbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiBzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3RyYW5zcG9ydF9wb3J0X2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgdTE2IGhhbmRsZSwgdTE2IHBhcmVudF9oYW5kbGUpOwogdm9pZCBtcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCBzYXNfYWRkcmVzcywKQEAgLTgzOCw2ICs5MDIsOCBAQAogZXh0ZXJuIHN0cnVjdCBzYXNfZnVuY3Rpb25fdGVtcGxhdGUgbXB0MnNhc190cmFuc3BvcnRfZnVuY3Rpb25zOwogZXh0ZXJuIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGU7CiBleHRlcm4gaW50IHNjc2lfaW50ZXJuYWxfZGV2aWNlX2Jsb2NrKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitleHRlcm4gdTggbXB0MnNhc19zdG1femVyb19zbWlkX2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSk7CiBleHRlcm4gaW50IHNjc2lfaW50ZXJuYWxfZGV2aWNlX3VuYmxvY2soc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIAogI2VuZGlmIC8qIE1QVDJTQVNfQkFTRV9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwppbmRleCBhYjhjNTYwLi41OTRhMzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjb21tb24gQVBJIGZvciBhY2Nlc3NpbmcgZmlybXdhcmUgY29uZmlndXJhdGlvbiBwYWdlcwogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMjcsMjMgKzIyNywyNSBAQAogICogbXB0MnNhc19jb25maWdfZG9uZSAtIGNvbmZpZyBwYWdlIGNvbXBsZXRpb24gcm91dGluZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICogQ29udGV4dDogbm9uZS4KICAqCiAgKiBUaGUgY2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIF9jb25maWdfcmVxdWVzdC4KICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkCi1tcHQyc2FzX2NvbmZpZ19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit1OAorbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKIAogCWlmIChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpZiAoaW9jLT5jb25maWdfY21kcy5zbWlkICE9IHNtaWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkpIHsKQEAgLTI1Nyw2ICsyNTksNyBAQAogI2VuZGlmCiAJaW9jLT5jb25maWdfY21kcy5zbWlkID0gVVNIT1JUX01BWDsKIAljb21wbGV0ZSgmaW9jLT5jb25maWdfY21kcy5kb25lKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0zMDMsNiArMzA2LDkgQEAKIAlyZXRyeV9jb3VudCA9IDA7CiAJbWVtc2V0KCZtZW0sIDAsIHNpemVvZihzdHJ1Y3QgY29uZmlnX3JlcXVlc3QpKTsKIAorCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOworCiAJaWYgKGNvbmZpZ19wYWdlKSB7CiAJCW1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKIAkJbXBpX3JlcXVlc3QtPkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKQEAgLTM4MCw3ICszODYsNyBAQAogCV9jb25maWdfZGlzcGxheV9zb21lX2RlYnVnKGlvYywgc21pZCwgImNvbmZpZ19yZXF1ZXN0IiwgTlVMTCk7CiAjZW5kaWYKIAlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBjb25maWdfcmVxdWVzdC0+VkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSwKIAkgICAgdGltZW91dCpIWik7CiAJaWYgKCEoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCmluZGV4IGMyYTUxMDEuLjU3ZDcyNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwpAQCAtMyw3ICszLDcgQEAKICAqIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfY3RsLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjE5LDIzICsyMTksMjUgQEAKICAqIG1wdDJzYXNfY3RsX2RvbmUgLSBjdGwgbW9kdWxlIGNvbXBsZXRpb24gcm91dGluZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICogQ29udGV4dDogbm9uZS4KICAqCiAgKiBUaGUgY2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIGlvYy0+Y3RsX2NiX2lkeC4KICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkCi1tcHQyc2FzX2N0bF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit1OAorbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorCXUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKIAogCWlmIChpb2MtPmN0bF9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpZiAoaW9jLT5jdGxfY21kcy5zbWlkICE9IHNtaWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaW9jLT5jdGxfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJaWYgKG1waV9yZXBseSkgewpAQCAtMjQ3LDYgKzI0OSw3IEBACiAjZW5kaWYKIAlpb2MtPmN0bF9jbWRzLnN0YXR1cyAmPSB+TVBUMl9DTURfUEVORElORzsKIAljb21wbGV0ZSgmaW9jLT5jdGxfY21kcy5kb25lKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0zMjgsMjIgKzMzMSwyNSBAQAogLyoqCiAgKiBtcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayAtIGZpcm13YXJlIGV2ZW50IGhhbmRsZXIgKGNhbGxlZCBhdCBJU1IgdGltZSkKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICogQ29udGV4dDogaW50ZXJydXB0LgogICoKICAqIFRoaXMgZnVuY3Rpb24gbWVyZWx5IGFkZHMgYSBuZXcgd29yayB0YXNrIGludG8gaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQuCiAgKiBUaGUgdGFza3MgYXJlIHdvcmtlZCBmcm9tIF9maXJtd2FyZV9ldmVudF93b3JrIGluIHVzZXIgY29udGV4dC4KICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkCi1tcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit1OAorbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBtc2l4X2luZGV4LAorCXUzMiByZXBseSkKIHsKIAlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHk7CiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAltcHQyc2FzX2N0bF9hZGRfdG9fZXZlbnRfbG9nKGlvYywgbXBpX3JlcGx5KTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC01MDcsNyArNTEzLDcgQEAKIAogCWhhbmRsZSA9IGxlMTZfdG9fY3B1KHRtX3JlcXVlc3QtPkRldkhhbmRsZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSAmJiAhZm91bmQ7IGktLSkgeworCWZvciAoaSA9IGlvYy0+c2NzaWlvX2RlcHRoOyBpICYmICFmb3VuZDsgaS0tKSB7CiAJCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW2kgLSAxXS5zY21kOwogCQlpZiAoc2NtZCA9PSBOVUxMIHx8IHNjbWQtPmRldmljZSA9PSBOVUxMIHx8CiAJCSAgICBzY21kLT5kZXZpY2UtPmhvc3RkYXRhID09IE5VTEwpCkBAIC02MTQsNyArNjIwLDcgQEAKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2MgaXMgb3BlcmF0aW9uYWxcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKIAotCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmN0bF9jYl9pZHgpOworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKGlvYywgaW9jLT5jdGxfY2JfaWR4LCBOVUxMKTsKIAlpZiAoIXNtaWQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CkBAIC03MzcsNyArNzQzLDcgQEAKIAkJICAgICh1MzIpbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hKGlvYywgc21pZCk7CiAJCXByaXZfc2Vuc2UgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcihpb2MsIHNtaWQpOwogCQltZW1zZXQocHJpdl9zZW5zZSwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLCAwLAorCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsCiAJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVxdWVzdC0+RnVuY3Rpb25EZXBlbmRlbnQxKSk7CiAJCWJyZWFrOwogCX0KQEAgLTc1OSw4ICs3NjUsNyBAQAogCQltdXRleF9sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOwogCQltcHQyc2FzX3Njc2loX3NldF90bV9mbGFnKGlvYywgbGUxNl90b19jcHUoCiAJCSAgICB0bV9yZXF1ZXN0LT5EZXZIYW5kbGUpKTsKLQkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KGlvYywgc21pZCwKLQkJICAgIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQpOwogCQlicmVhazsKIAl9CiAJY2FzZSBNUEkyX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSDoKQEAgLTc4MSw3ICs3ODYsNyBAQAogCQkJaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcyA9IDE7CiAJCQlpb2MtPmlnbm9yZV9sb2dpbmZvcyA9IDE7CiAJCX0KLQkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCQlicmVhazsKIAl9CiAJY2FzZSBNUEkyX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0w6CkBAIC03OTUsMTEgKzgwMCwxMSBAQAogCQkJaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcyA9IDE7CiAJCQlpb2MtPmlnbm9yZV9sb2dpbmZvcyA9IDE7CiAJCX0KLQkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKLQkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCQlicmVhazsKIAl9CiAKQEAgLTgwNyw2ICs4MTIsNyBAQAogCQl0aW1lb3V0ID0gTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQ7CiAJZWxzZQogCQl0aW1lb3V0ID0ga2FyZy50aW1lb3V0OworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAogCSAgICB0aW1lb3V0KkhaKTsKIAlpZiAobXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQpIHsKQEAgLTEzNzEsNiArMTM3Nyw4IEBACiAJbXBpX3JlcXVlc3QtPkZsYWdzID0gY3B1X3RvX2xlMzIoa2FyZy5kaWFnbm9zdGljX2ZsYWdzKTsKIAltcGlfcmVxdWVzdC0+QnVmZmVyQWRkcmVzcyA9IGNwdV90b19sZTY0KHJlcXVlc3RfZGF0YV9kbWEpOwogCW1waV9yZXF1ZXN0LT5CdWZmZXJMZW5ndGggPSBjcHVfdG9fbGUzMihyZXF1ZXN0X2RhdGFfc3opOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCiAJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGRpYWdfYnVmZmVyKDB4JXApLCAiCiAJICAgICJkbWEoMHglbGx4KSwgc3ooJWQpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCByZXF1ZXN0X2RhdGEsCkBAIC0xMzgwLDcgKzEzODgsOCBAQAogCQltcGlfcmVxdWVzdC0+UHJvZHVjdFNwZWNpZmljW2ldID0KIAkJCWNwdV90b19sZTMyKGlvYy0+cHJvZHVjdF9zcGVjaWZpY1tidWZmZXJfdHlwZV1baV0pOwogCi0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmN0bF9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmN0bF9jbWRzLmRvbmUsCiAJICAgIE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUKkhaKTsKIApAQCAtMTY0Myw4ICsxNjUyLDExIEBACiAKIAltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0RJQUdfUkVMRUFTRTsKIAltcGlfcmVxdWVzdC0+QnVmZmVyVHlwZSA9IGJ1ZmZlcl90eXBlOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCi0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmN0bF9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmN0bF9jbWRzLmRvbmUsCiAJICAgIE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUKkhaKTsKIApAQCAtMTkwMiw4ICsxOTE0LDExIEBACiAJZm9yIChpID0gMDsgaSA8IE1QVDJfUFJPRFVDVF9TUEVDSUZJQ19EV09SRFM7IGkrKykKIAkJbXBpX3JlcXVlc3QtPlByb2R1Y3RTcGVjaWZpY1tpXSA9CiAJCQljcHVfdG9fbGUzMihpb2MtPnByb2R1Y3Rfc3BlY2lmaWNbYnVmZmVyX3R5cGVdW2ldKTsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAogCSAgICBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCpIWik7CiAKQEAgLTIwNjksNiArMjA4NCw3IEBACiBfY3RsX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlsb25nIHJldDsKKwogCWxvY2tfa2VybmVsKCk7CiAJcmV0ID0gX2N0bF9pb2N0bF9tYWluKGZpbGUsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKIAl1bmxvY2tfa2VybmVsKCk7CkBAIC0yMTQzLDYgKzIxNTksNyBAQAogX2N0bF9pb2N0bF9jb21wYXQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbG9uZyByZXQ7CisKIAlsb2NrX2tlcm5lbCgpOwogCWlmIChjbWQgPT0gTVBUMkNPTU1BTkQzMikKIAkJcmV0ID0gX2N0bF9jb21wYXRfbXB0X2NvbW1hbmQoZmlsZSwgY21kLCBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKaW5kZXggNGRhMTE0My4uMjExZjI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCkBAIC0zLDcgKzMsNyBAQAogICogY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9jdGwuaAotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmgKaW5kZXggYWQzMjUwOS4uNTMwOGEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfZGVidWcuaApAQCAtMiw3ICsyLDcgQEAKICAqIExvZ2dpbmcgU3VwcG9ydCBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9kZWJ1Zy5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwppbmRleCA3NzRiMzQ1Li44NmFiMzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCkBAIC0yLDcgKzIsNyBAQAogICogU2NzaSBIb3N0IExheWVyIGZvciBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBiYXNlZCBjb250cm9sbGVycwogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX3Njc2loLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzksNiArNzksOSBAQAogc3RhdGljIHU4IGNvbmZpZ19jYl9pZHggPSAtMTsKIHN0YXRpYyBpbnQgbXB0X2lkczsKIAorc3RhdGljIHU4IHRtX3RyX2NiX2lkeCA9IC0xIDsKK3N0YXRpYyB1OCB0bV9zYXNfY29udHJvbF9jYl9pZHggPSAtMTsKKwogLyogY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KIHN0YXRpYyB1MzIgbG9nZ2luZ19sZXZlbDsKIE1PRFVMRV9QQVJNX0RFU0MobG9nZ2luZ19sZXZlbCwgIiBiaXRzIGZvciBlbmFibGluZyBhZGRpdGlvbmFsIGxvZ2dpbmcgaW5mbyAiCkBAIC0xMDksNiArMTEyLDcgQEAKICAqIEB3b3JrOiB3b3JrIG9iamVjdCAoaW9jLT5mYXVsdF9yZXNldF93b3JrX3EpCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQFZQX0lEOiB2aXJ0dWFsIHBvcnQgaWQKICAqIEBob3N0X3Jlc2V0X2hhbmRsaW5nOiBoYW5kbGluZyBldmVudHMgZHVyaW5nIGhvc3QgcmVzZXQKICAqIEBpZ25vcmU6IGZsYWcgbWVhbmluZyB0aGlzIGV2ZW50IGhhcyBiZWVuIG1hcmtlZCB0byBpZ25vcmUKICAqIEBldmVudDogZmlybXdhcmUgZXZlbnQgTVBJMl9FVkVOVF9YWFggZGVmaW5lZCBpbiBtcHQyX2lvYy5oCkBAIC0xMjEsNiArMTI1LDcgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CiAJdTgJCQlWRl9JRDsKKwl1OAkJCVZQX0lEOwogCXU4CQkJaG9zdF9yZXNldF9oYW5kbGluZzsKIAl1OAkJCWlnbm9yZTsKIAl1MTYJCQlldmVudDsKQEAgLTEzOCw4ICsxNDMsMTAgQEAKICAqIEBsdW46IGx1biBudW1iZXIKICAqIEBjZGJfbGVuZ3RoOiBjZGIgbGVuZ3RoCiAgKiBAY2RiOiBjZGIgY29udGVudHMKLSAqIEB2YWxpZF9yZXBseTogZmxhZyBzZXQgZm9yIHJlcGx5IG1lc3NhZ2UKICAqIEB0aW1lb3V0OiB0aW1lb3V0IGZvciB0aGlzIGNvbW1hbmQKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQFZQX0lEOiB2aXJ0dWFsIHBvcnQgaWQKKyAqIEB2YWxpZF9yZXBseTogZmxhZyBzZXQgZm9yIHJlcGx5IG1lc3NhZ2UKICAqIEBzZW5zZV9sZW5ndGg6IHNlbnNlIGxlbmd0aAogICogQGlvY19zdGF0dXM6IGlvYyBzdGF0dXMKICAqIEBzY3NpX3N0YXRlOiBzY3NpIHN0YXRlCkBAIC0xNjEsNiArMTY4LDggQEAKIAl1OAljZGJfbGVuZ3RoOwogCXU4CWNkYlszMl07CiAJdTgJdGltZW91dDsKKwl1OAlWRl9JRDsKKwl1OAlWUF9JRDsKIAl1OAl2YWxpZF9yZXBseTsKICAgLyogdGhlIGZvbGxvd2luZyBiaXRzIGFyZSBvbmx5IHZhbGlkIHdoZW4gJ3ZhbGlkX3JlcGx5ID0gMScgKi8KIAl1MzIJc2Vuc2VfbGVuZ3RoOwpAQCAtNzU2LDY2ICs3NjUsMTYgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0IC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBtcHRzY3NpaF9nZXRfc2NzaV9sb29rdXAgLSByZXR1cm5zIHNjbWQgZW50cnkKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2NzaV9sb29rdXBfbG9jay4KICAqCiAgKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICoKIF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKIHsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Ci0Jc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHNjbWQ7Ci19Ci0KLS8qKgotICogbXB0c2NzaWhfZ2V0Y2xlYXJfc2NzaV9sb29rdXAgLSByZXR1cm5zIHNjbWQgZW50cnkKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2NzaV9sb29rdXBfbG9jay4KLSAqCi0gKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIsIGFzIHdlbGwgYXMgY2xlYXJpbmcgdGhlIHNjbWQgcG9pbnRlci4KLSAqLwotc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKgotX3Njc2loX3Njc2lfbG9va3VwX2dldGNsZWFyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCi17Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOwotCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCXJldHVybiBzY21kOwotfQotCi0vKioKLSAqIF9zY3NpaF9zY3NpX2xvb2t1cF9zZXQgLSB1cGRhdGVzIHNjbWQgZW50cnkgaW4gbG9va3VwCi0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0Ci0gKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCi0gKgotICogVGhpcyB3aWxsIHNhdmUgc2NtZCBwb2ludGVyIGluIHRoZSBzY3NpX2xvb2t1cCBhcnJheS4KLSAqCi0gKiBSZXR1cm4gbm90aGluZy4KLSAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9zY3NpX2xvb2t1cF9zZXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Ci0JaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZCA9IHNjbWQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQ7CiB9CiAKIC8qKgpAQCAtODM4LDkgKzc5Nyw5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJc21pZCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyspIHsKIAkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCA9PSBzY21kKSB7Ci0JCQlzbWlkID0gaSArIDE7CisJCQlzbWlkID0gaW9jLT5zY3NpX2xvb2t1cFtpXS5zbWlkOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC04NjksNyArODI4LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAlmb3VuZCA9IDA7Ci0JZm9yIChpID0gMCA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5zY3NpaW9fZGVwdGg7IGkrKykgewogCQlpZiAoaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kICYmCiAJCSAgICAoaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kLT5kZXZpY2UtPmlkID09IGlkICYmCiAJCSAgICBpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQtPmRldmljZS0+Y2hhbm5lbCA9PSBjaGFubmVsKSkgewpAQCAtOTAzLDcgKzg2Miw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJZm91bmQgPSAwOwotCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyspIHsKIAkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCAmJgogCQkgICAgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5pZCA9PSBpZCAmJgogCQkgICAgaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kLT5kZXZpY2UtPmNoYW5uZWwgPT0gY2hhbm5lbCAmJgpAQCAtMTExMyw3ICsxMDcyLDcgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gY2hhbmdpbmcgZGV2aWNlIHF1ZXVlIHRhZyB0eXBlCisgKiBfc2NzaWhfY2hhbmdlX3F1ZXVlX3R5cGUgLSBjaGFuZ2luZyBkZXZpY2UgcXVldWUgdGFnIHR5cGUKICAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKICAqIEB0YWdfdHlwZTogcmVxdWVzdGVkIHRhZyB0eXBlCiAgKgpAQCAtMTY3OSwyMyArMTYzOCwyNCBAQAogICogX3Njc2loX3RtX2RvbmUgLSB0bSBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IG5vbmUuCiAgKgogICogVGhlIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBzY3NpaF9pc3N1ZV90bS4KICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZAotX3Njc2loX3RtX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSkKK3N0YXRpYyB1OAorX3Njc2loX3RtX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKGlvYy0+dG1fY21kcy5zbWlkICE9IHNtaWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaW9jLT50bV9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKIAltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJaWYgKG1waV9yZXBseSkgewpAQCAtMTcwNCw2ICsxNjY0LDcgQEAKIAl9CiAJaW9jLT50bV9jbWRzLnN0YXR1cyAmPSB+TVBUMl9DTURfUEVORElORzsKIAljb21wbGV0ZSgmaW9jLT50bV9jbWRzLmRvbmUpOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTE3OTAsNyArMTc1MSw2IEBACiAJdTE2IHNtaWQgPSAwOwogCXUzMiBpb2Nfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKLQl1OCBWRl9JRCA9IDA7CiAKIAlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgewogCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IHRtX2NtZCBidXN5ISEhXG4iLApAQCAtMTgxNyw3ICsxNzc3LDcgQEAKIAkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OwogCX0KIAotCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPnRtX2NiX2lkeCk7CisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9ocHIoaW9jLCBpb2MtPnRtX2NiX2lkeCk7CiAJaWYgKCFzbWlkKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwpAQCAtMTgyNSw3ICsxNzg1LDggQEAKIAl9CiAKIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2VuZGluZyB0bTogaGFuZGxlKDB4JTA0eCksIgotCSAgICAiIHRhc2tfdHlwZSgweCUwMngpLCBzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUsIHR5cGUsIHNtaWQpKTsKKwkgICAgIiB0YXNrX3R5cGUoMHglMDJ4KSwgc21pZCglZClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlLCB0eXBlLAorCSAgICBzbWlkX3Rhc2spKTsKIAlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKIAltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CiAJaW9jLT50bV9jbWRzLnNtaWQgPSBzbWlkOwpAQCAtMTgzNCwxMCArMTc5NSwxMiBAQAogCW1waV9yZXF1ZXN0LT5EZXZIYW5kbGUgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwogCW1waV9yZXF1ZXN0LT5UYXNrVHlwZSA9IHR5cGU7CiAJbXBpX3JlcXVlc3QtPlRhc2tNSUQgPSBjcHVfdG9fbGUxNihzbWlkX3Rhc2spOworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7ICAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsKIAlpbnRfdG9fc2NzaWx1bihsdW4sIChzdHJ1Y3Qgc2NzaV9sdW4gKiltcGlfcmVxdWVzdC0+TFVOKTsKIAltcHQyc2FzX3Njc2loX3NldF90bV9mbGFnKGlvYywgaGFuZGxlKTsKIAlpbml0X2NvbXBsZXRpb24oJmlvYy0+dG1fY21kcy5kb25lKTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkLCBWRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KGlvYywgc21pZCk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+dG1fY21kcy5kb25lLCB0aW1lb3V0KkhaKTsKIAltcHQyc2FzX3Njc2loX2NsZWFyX3RtX2ZsYWcoaW9jLCBoYW5kbGUpOwogCWlmICghKGlvYy0+dG1fY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKQEAgLTIwNzUsNyArMjAzOCw3IEBACiB9CiAKIC8qKgotICogX3Njc2loX2Fib3J0IC0gZWggdGhyZWFkcyBtYWluIGhvc3QgcmVzZXQgcm91dGluZQorICogX3Njc2loX2hvc3RfcmVzZXQgLSBlaCB0aHJlYWRzIG1haW4gaG9zdCByZXNldCByb3V0aW5lCiAgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CiAgKgogICogUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRApAQCAtMjM1NCw2ICsyMzE3LDIzMSBAQAogfQogCiAvKioKKyAqIF9zY3NpaF90bV90cl9zZW5kIC0gc2VuZCB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiBUaGlzIGNvZGUgaXMgdG8gaW5pdGlhdGUgdGhlIGRldmljZSByZW1vdmFsIGhhbmRzaGFrZSBwcm90b2NhbAorICogd2l0aCBjb250cm9sbGVyIGZpcm13YXJlLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGlzc3VlIHRhcmdldCByZXNldAorICogdXNpbmcgaGlnaCBwcmlvcml0eSByZXF1ZXN0IHF1ZXVlLiAgSXQgd2lsbCBzZW5kIGEgc2FzIGlvdW5pdAorICogY29udHJvbGwgcmVxdWVzdCAoTVBJMl9TQVNfT1BfUkVNT1ZFX0RFVklDRSkgZnJvbSB0aGlzIGNvbXBsZXRpb24uCisgKgorICogVGhpcyBpcyBkZXNpZ25lZCB0byBzZW5kIG11bGlwbGUgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QgYXQgdGhlIHNhbWUKKyAqIHRpbWUgdG8gdGhlIGZpZm8uIElmIHRoZSBmaWZvIGlzIGZ1bGwsIHdlIHdpbGwgYXBwZW5kIHRoZSByZXF1ZXN0LAorICogYW5kIHByb2Nlc3MgaXQgaW4gYSBmdXR1cmUgY29tcGxldGlvbi4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF90bV90cl9zZW5kKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXUxNiBzbWlkOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBfdHJfbGlzdCAqZGVsYXllZF90cjsKKworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCisJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJaWYgKCFzYXNfZGV2aWNlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZmluZGluZyBzYXNfZGV2aWNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCS8qIHNraXAgaXMgaGlkZGVuIHJhaWQgY29tcG9uZW50ICovCisJaWYgKHNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCkKKwkJcmV0dXJuOworCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9ocHIoaW9jLCBpb2MtPnRtX3RyX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCWRlbGF5ZWRfdHIgPSBremFsbG9jKHNpemVvZigqZGVsYXllZF90ciksIEdGUF9BVE9NSUMpOworCQlpZiAoIWRlbGF5ZWRfdHIpCisJCQlyZXR1cm47CisJCUlOSVRfTElTVF9IRUFEKCZkZWxheWVkX3RyLT5saXN0KTsKKwkJZGVsYXllZF90ci0+aGFuZGxlID0gaGFuZGxlOworCQlkZWxheWVkX3RyLT5zdGF0ZSA9IE1QVDJTQVNfUkVRX1NBU19DTlRSTDsKKwkJbGlzdF9hZGRfdGFpbCgmZGVsYXllZF90ci0+bGlzdCwKKwkJICAgICZpb2MtPmRlbGF5ZWRfdHJfbGlzdCk7CisJCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0KQorCQkJZGV3dHByaW50ayhpb2MsIHN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywKKwkJCSAgICBzYXNfZGV2aWNlLT5zdGFyZ2V0LCAiREVMQVlFRDp0cjpoYW5kbGUoMHglMDR4KSwgIgorCQkJICAgICIob3BlbilcbiIsIHNhc19kZXZpY2UtPmhhbmRsZSkpOworCQlyZXR1cm47CisJfQorCisJaWYgKHNhc19kZXZpY2UtPnN0YXJnZXQgJiYgc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGEpIHsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgPSAxOworCQlkZXd0cHJpbnRrKGlvYywgc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAorCQkgICAgInRyOmhhbmRsZSgweCUwNHgpLCAob3BlbilcbiIsIHNhc19kZXZpY2UtPmhhbmRsZSkpOworCX0KKworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVDsKKwltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKKwltcGlfcmVxdWVzdC0+VGFza1R5cGUgPSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9UQVJHRVRfUkVTRVQ7CisJc2FzX2RldmljZS0+c3RhdGUgfD0gTVBUU0FTX1NUQVRFX1RSX1NFTkQ7CisJc2FzX2RldmljZS0+c3RhdGUgfD0gTVBUMlNBU19SRVFfU0FTX0NOVFJMOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQpOworfQorCisKKworLyoqCisgKiBfc2NzaWhfc2FzX2NvbnRyb2xfY29tcGxldGUgLSBjb21wbGV0aW9uIHJvdXRpbmUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUworICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiBUaGlzIGlzIHRoZSBzYXMgaW91bml0IGNvbnRyb2xsIGNvbXBsZXRpb24gcm91dGluZS4KKyAqIFRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBjb2RlIHRvIGluaXRpYXRlIHRoZSBkZXZpY2UgcmVtb3ZhbAorICogaGFuZHNoYWtlIHByb3RvY2FsIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4KKyAqCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIHU4Citfc2NzaWhfc2FzX2NvbnRyb2xfY29tcGxldGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKKyAgICB1OCBtc2l4X2luZGV4LCB1MzIgcmVwbHkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaGFuZGxlOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QgKm1waV9yZXBseSA9CisJICAgIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCisJaGFuZGxlID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5EZXZIYW5kbGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlpZiAoIXNhc19kZXZpY2UpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBmaW5kaW5nIHNhc19kZXZpY2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDE7CisJfQorCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVFNBU19TVEFURV9DTlRSTF9DT01QTEVURTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaWYgKHNhc19kZXZpY2UtPnN0YXJnZXQpCisJCWRld3RwcmludGsoaW9jLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNhc19kZXZpY2UtPnN0YXJnZXQsCisJCSAgICAic2NfY29tcGxldGU6aGFuZGxlKDB4JTA0eCksICIKKwkJICAgICJpb2Nfc3RhdHVzKDB4JTA0eCksIGxvZ2luZm8oMHglMDh4KVxuIiwKKwkJICAgIGhhbmRsZSwgbGUxNl90b19jcHUobXBpX3JlcGx5LT5JT0NTdGF0dXMpLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5JT0NMb2dJbmZvKSkpOworCXJldHVybiAxOworfQorCisvKioKKyAqIF9zY3NpaF90bV90cl9jb21wbGV0ZSAtCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogVGhpcyBpcyB0aGUgdGFyZ2V0IHJlc2V0IGNvbXBsZXRpb24gcm91dGluZS4KKyAqIFRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBjb2RlIHRvIGluaXRpYXRlIHRoZSBkZXZpY2UgcmVtb3ZhbAorICogaGFuZHNoYWtlIHByb3RvY2FsIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4KKyAqIEl0IHdpbGwgc2VuZCBhIHNhcyBpb3VuaXQgY29udHJvbGwgcmVxdWVzdCAoTVBJMl9TQVNfT1BfUkVNT1ZFX0RFVklDRSkKKyAqCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIHU4Citfc2NzaWhfdG1fdHJfY29tcGxldGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaGFuZGxlOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCAqbXBpX3JlcGx5ID0KKwkgICAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCXUxNiBzbWlkX3Nhc19jdHJsOworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyOworCXU4IHJjOworCisJaGFuZGxlID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5EZXZIYW5kbGUpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJaWYgKCFzYXNfZGV2aWNlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZmluZGluZyBzYXNfZGV2aWNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAxOworCX0KKwlzYXNfZGV2aWNlLT5zdGF0ZSB8PSBNUFRTQVNfU1RBVEVfVFJfQ09NUExFVEU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0KQorCQlkZXd0cHJpbnRrKGlvYywgc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAorCQkgICAgInRyX2NvbXBsZXRlOmhhbmRsZSgweCUwNHgpLCAoJXMpIGlvY19zdGF0dXMoMHglMDR4KSwgIgorCQkgICAgImxvZ2luZm8oMHglMDh4KSwgY29tcGxldGVkKCVkKVxuIiwKKwkJICAgIHNhc19kZXZpY2UtPmhhbmRsZSwgKHNhc19kZXZpY2UtPnN0YXRlICYKKwkJICAgIE1QVDJTQVNfUkVRX1NBU19DTlRSTCkgPyAib3BlbiIgOiAiYWN0aXZlIiwKKwkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlRlcm1pbmF0aW9uQ291bnQpKSk7CisKKwlpZiAoc2FzX2RldmljZS0+c3RhcmdldCAmJiBzYXNfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YSkgeworCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhOworCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+dG1fYnVzeSA9IDA7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZpb2MtPmRlbGF5ZWRfdHJfbGlzdCkpIHsKKwkJZGVsYXllZF90ciA9IGxpc3RfZW50cnkoaW9jLT5kZWxheWVkX3RyX2xpc3QubmV4dCwKKwkJICAgIHN0cnVjdCBfdHJfbGlzdCwgbGlzdCk7CisJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJaWYgKGRlbGF5ZWRfdHItPnN0YXRlICYgTVBUMlNBU19SRVFfU0FTX0NOVFJMKQorCQkJX3Njc2loX3RtX3RyX3NlbmQoaW9jLCBkZWxheWVkX3RyLT5oYW5kbGUpOworCQlsaXN0X2RlbCgmZGVsYXllZF90ci0+bGlzdCk7CisJCWtmcmVlKGRlbGF5ZWRfdHIpOworCQlyYyA9IDA7IC8qIHRlbGxzIGJhc2VfaW50ZXJydXB0IG5vdCB0byBmcmVlIG1mICovCisJfSBlbHNlCisJCXJjID0gMTsKKworCisJaWYgKCEoc2FzX2RldmljZS0+c3RhdGUgJiBNUFQyU0FTX1JFUV9TQVNfQ05UUkwpKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybiByYzsKKwl9CisKKwlzbWlkX3Nhc19jdHJsID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT50bV9zYXNfY29udHJvbF9jYl9pZHgpOworCWlmICghc21pZF9zYXNfY3RybCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJjOworCX0KKworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkX3Nhc19jdHJsKTsKKwltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTDsKKwltcGlfcmVxdWVzdC0+T3BlcmF0aW9uID0gTVBJMl9TQVNfT1BfUkVNT1ZFX0RFVklDRTsKKwltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0gbXBpX3JlcGx5LT5EZXZIYW5kbGU7CisJc2FzX2RldmljZS0+c3RhdGUgfD0gTVBUU0FTX1NUQVRFX0NOVFJMX1NFTkQ7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkX3Nhc19jdHJsKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgogICogX3Njc2loX2NoZWNrX3RvcG9fZGVsZXRlX2V2ZW50cyAtIHNhbml0eSBjaGVjayBvbiB0b3BvIGV2ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAZXZlbnRfZGF0YTogdGhlIGV2ZW50IGRhdGEgcGF5bG9hZApAQCAtMjM3NSw2ICsyNTYzLDIxIEBACiAJdTE2IGV4cGFuZGVyX2hhbmRsZTsKIAlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgcmVhc29uX2NvZGU7CisJdTE2IGhhbmRsZTsKKworCWZvciAoaSA9IDAgOyBpIDwgZXZlbnRfZGF0YS0+TnVtRW50cmllczsgaSsrKSB7CisJCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKKwkJCWNvbnRpbnVlOworCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOworCQlpZiAoIWhhbmRsZSkKKwkJCWNvbnRpbnVlOworCQlyZWFzb25fY29kZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19NQVNLOworCQlpZiAocmVhc29uX2NvZGUgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19UQVJHX05PVF9SRVNQT05ESU5HKQorCQkJX3Njc2loX3RtX3RyX3NlbmQoaW9jLCBoYW5kbGUpOworCX0KIAogCWV4cGFuZGVyX2hhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkV4cGFuZGVyRGV2SGFuZGxlKTsKIAlpZiAoZXhwYW5kZXJfaGFuZGxlIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzKSB7CkBAIC0yNDMzLDggKzI2MzYsOCBAQAogCXUxNiBzbWlkOwogCXUxNiBjb3VudCA9IDA7CiAKLQlmb3IgKHNtaWQgPSAxOyBzbWlkIDw9IGlvYy0+cmVxdWVzdF9kZXB0aDsgc21pZCsrKSB7Ci0JCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0Y2xlYXIoaW9jLCBzbWlkKTsKKwlmb3IgKHNtaWQgPSAxOyBzbWlkIDw9IGlvYy0+c2NzaWlvX2RlcHRoOyBzbWlkKyspIHsKKwkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAkJaWYgKCFzY21kKQogCQkJY29udGludWU7CiAJCWNvdW50Kys7CkBAIC0yNjE2LDcgKzI4MTksNyBAQAogCWlmICgoc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICYgTVBUX0RFVklDRV9UTFJfT04pKQogCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9PTjsKIAotCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPnNjc2lfaW9fY2JfaWR4KTsKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhpb2MsIGlvYy0+c2NzaV9pb19jYl9pZHgsIHNjbWQpOwogCWlmICghc21pZCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKQEAgLTI2NDMsNyArMjg0Niw4IEBACiAJbXBpX3JlcXVlc3QtPlNHTE9mZnNldDAgPSBvZmZzZXRvZihNcGkyU0NTSUlPUmVxdWVzdF90LCBTR0wpIC8gNDsKIAltcGlfcmVxdWVzdC0+U0dMRmxhZ3MgPSBjcHVfdG9fbGUxNihNUEkyX1NDU0lJT19TR0xGTEFHU19UWVBFX01QSSArCiAJICAgIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1NZU1RFTV9BRERSKTsKLQorCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCWludF90b19zY3NpbHVuKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5sdW4sIChzdHJ1Y3Qgc2NzaV9sdW4gKikKIAkgICAgbXBpX3JlcXVlc3QtPkxVTik7CiAJbWVtY3B5KG1waV9yZXF1ZXN0LT5DREIuQ0RCMzIsIHNjbWQtPmNtbmQsIHNjbWQtPmNtZF9sZW4pOwpAQCAtMjY1Nyw4ICsyODYxLDcgQEAKIAkJfQogCX0KIAotCV9zY3NpaF9zY3NpX2xvb2t1cF9zZXQoaW9jLCBzbWlkLCBzY21kKTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsIDAsCisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLAogCSAgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlKTsKIAlyZXR1cm4gMDsKIApAQCAtMjk1NCwxNSArMzE1NywxNiBAQAogICogX3Njc2loX2lvX2RvbmUgLSBzY3NpIHJlcXVlc3QgY2FsbGJhY2sKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCi0gKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgc2NzaWhfcWNtZC4KKyAqIENhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBfc2NzaWhfcWNtZC4KICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZAotX3Njc2loX2lvX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSkKK3N0YXRpYyB1OAorX3Njc2loX2lvX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQogewogCU1waTJTQ1NJSU9SZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OwogCU1waTJTQ1NJSU9SZXBseV90ICptcGlfcmVwbHk7CkBAIC0yOTc2LDkgKzMxODAsOSBAQAogCXUzMiByZXNwb25zZV9jb2RlOwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7Ci0Jc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXRjbGVhcihpb2MsIHNtaWQpOworCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CiAJaWYgKHNjbWQgPT0gTlVMTCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAogCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKIApAQCAtMzEzNCw2ICszMzM4LDcgQEAKICBvdXQ6CiAJc2NzaV9kbWFfdW5tYXAoc2NtZCk7CiAJc2NtZC0+c2NzaV9kb25lKHNjbWQpOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTMzOTgsOSArMzYwMyw4IEBACiAJCX0KIAl9CiAKLQlzYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KGV4cGFuZGVyX3BnMC5TQVNBZGRyZXNzKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlzYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KGV4cGFuZGVyX3BnMC5TQVNBZGRyZXNzKTsKIAlzYXNfZXhwYW5kZXIgPSBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAogCSAgICBzYXNfYWRkcmVzcyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CkBAIC0zNjY2LDYgKzM4NzAsMTIgQEAKIAlpZiAoaW9jLT5yZW1vdmVfaG9zdCkKIAkJZ290byBvdXQ7CiAKKwlpZiAoKHNhc19kZXZpY2UtPnN0YXRlICYgTVBUU0FTX1NUQVRFX1RSX0NPTVBMRVRFKSkgeworCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIlx0c2tpcCAiCisJCSAgICJ0YXJnZXRfcmVzZXQgaGFuZGxlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlKSk7CisJCWdvdG8gc2tpcF90cjsKKwl9CisKIAkvKiBUYXJnZXQgUmVzZXQgdG8gZmx1c2ggb3V0IGFsbCB0aGUgb3V0c3RhbmRpbmcgSU8gKi8KIAlkZXZpY2VfaGFuZGxlID0gKHNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCkgPwogCSAgICBzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlIDogaGFuZGxlOwpAQCAtMzY4Miw2ICszODkyLDEzIEBACiAJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQogCQkJZ290byBvdXQ7CiAJfQorIHNraXBfdHI6CisKKwlpZiAoKHNhc19kZXZpY2UtPnN0YXRlICYgTVBUU0FTX1NUQVRFX0NOVFJMX0NPTVBMRVRFKSkgeworCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIlx0c2tpcCAiCisJCSAgICJzYXNfY250cmwgaGFuZGxlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlKSk7CisJCWdvdG8gb3V0OworCX0KIAogCS8qIFNBU19JT19VTklUX0NOVFIgLSBzZW5kIFJFTU9WRV9ERVZJQ0UgKi8KIAlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNhc19pb3VuaXQ6IGhhbmRsZSIKQEAgLTM2OTAsNyArMzkwNyw4IEBACiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0w7CiAJbXBpX3JlcXVlc3QuT3BlcmF0aW9uID0gTVBJMl9TQVNfT1BfUkVNT1ZFX0RFVklDRTsKIAltcGlfcmVxdWVzdC5EZXZIYW5kbGUgPSBoYW5kbGU7Ci0JbXBpX3JlcXVlc3QuVkZfSUQgPSAwOworCW1waV9yZXF1ZXN0LlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LlZQX0lEID0gMDsKIAlpZiAoKG1wdDJzYXNfYmFzZV9zYXNfaW91bml0X2NvbnRyb2woaW9jLCAmbXBpX3JlcGx5LAogCSAgICAmbXBpX3JlcXVlc3QpKSAhPSAwKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCkBAIC0zODAwLDE1ICs0MDE4LDEyIEBACiAvKioKICAqIF9zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIHRvcG9sb2d5IGNoYW5nZXMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAotICogZndfZXZlbnQ6CisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdCAqZXZlbnRfZGF0YSwKK19zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAJaW50IGk7CkBAIC0zODE4LDYgKzQwMzMsNyBAQAogCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGxpbmtfcmF0ZV87CisJTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKQEAgLTM4NTEsMTUgKzQwNjcsMTYgQEAKIAkJfQogCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKIAkJCXJldHVybjsKLQkJaWYgKGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgotCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlTVEFUVVNfVkFDQU5UKQorCQlwaHlfbnVtYmVyID0gZXZlbnRfZGF0YS0+U3RhcnRQaHlOdW0gKyBpOworCQlyZWFzb25fY29kZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19NQVNLOworCQlpZiAoKGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlTVEFUVVNfVkFDQU5UKSAmJiAocmVhc29uX2NvZGUgIT0KKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19OT1RfUkVTUE9ORElORykpCiAJCQljb250aW51ZTsKIAkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKIAkJaWYgKCFoYW5kbGUpCiAJCQljb250aW51ZTsKLQkJcGh5X251bWJlciA9IGV2ZW50X2RhdGEtPlN0YXJ0UGh5TnVtICsgaTsKLQkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKLQkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKIAkJbGlua19yYXRlXyA9IGV2ZW50X2RhdGEtPlBIWVtpXS5MaW5rUmF0ZSA+PiA0OwogCQlzd2l0Y2ggKHJlYXNvbl9jb2RlKSB7CiAJCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19QSFlfQ0hBTkdFRDoKQEAgLTM5NzEsMTkgKzQxODgsMTkgQEAKIC8qKgogICogX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudCAtIGhhbmRsZSBkZXZpY2Ugc3RhdHVzIGNoYW5nZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCi0JCV9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLCBldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsCisJCSAgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOwogI2VuZGlmCiB9CiAKQEAgLTQwMjYsMzQgKzQyNDMsMzMgQEAKIC8qKgogICogX3Njc2loX3Nhc19lbmNsb3N1cmVfZGV2X3N0YXR1c19jaGFuZ2VfZXZlbnQgLSBoYW5kbGUgZW5jbG9zdXJlIGV2ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKIF9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKLSAgICB1OCBWRl9JRCwgTXBpMkV2ZW50RGF0YVNhc0VuY2xEZXZTdGF0dXNDaGFuZ2VfdCAqZXZlbnRfZGF0YSkKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCiAJCV9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywKLQkJICAgICBldmVudF9kYXRhKTsKKwkJICAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CiAjZW5kaWYKIH0KIAogLyoqCiAgKiBfc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQgLSBoYW5kbGUgYnJvYWRjYXN0IGV2ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFTYXNCcm9hZGNhc3RQcmltaXRpdmVfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CiAJdTE2IHNtaWQsIGhhbmRsZTsKQEAgLTQwNjIsMTEgKzQyNzgsMTIgQEAKIAl1MzIgdGVybWluYXRpb25fY291bnQ7CiAJdTMyIHF1ZXJ5X2NvdW50OwogCU1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90ICptcGlfcmVwbHk7Ci0KKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKKyNlbmRpZgogCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImJyb2FkY2FzdCBwcmltYXRpdmU6ICIKIAkgICAgInBoeSBudW1iZXIoJWQpLCB3aWR0aCglZClcbiIsIGlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+UGh5TnVtLAogCSAgICBldmVudF9kYXRhLT5Qb3J0V2lkdGgpKTsKLQogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKQEAgLTQwNzQsNyArNDI5MSw3IEBACiAJdGVybWluYXRpb25fY291bnQgPSAwOwogCXF1ZXJ5X2NvdW50ID0gMDsKIAltcGlfcmVwbHkgPSBpb2MtPnRtX2NtZHMucmVwbHk7Ci0JZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnJlcXVlc3RfZGVwdGg7IHNtaWQrKykgeworCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5zY3NpaW9fZGVwdGg7IHNtaWQrKykgewogCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOwogCQlpZiAoIXNjbWQpCiAJCQljb250aW51ZTsKQEAgLTQxMjEsMjMgKzQzMzgsMjUgQEAKIC8qKgogICogX3Njc2loX3Nhc19kaXNjb3ZlcnlfZXZlbnQgLSBoYW5kbGUgZGlzY292ZXJ5IGV2ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YVNhc0Rpc2NvdmVyeV90ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19kaXNjb3ZlcnlfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKKwlNcGkyRXZlbnREYXRhU2FzRGlzY292ZXJ5X3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKKwogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKSB7CiAJCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiZGlzY292ZXJ5IGV2ZW50OiAoJXMpIiwgaW9jLT5uYW1lLAogCQkgICAgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgPT0gTVBJMl9FVkVOVF9TQVNfRElTQ19SQ19TVEFSVEVEKSA/CiAJCSAgICAic3RhcnQiIDogInN0b3AiKTsKIAlpZiAoZXZlbnRfZGF0YS0+RGlzY292ZXJ5U3RhdHVzKQotCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiwgZGlzY292ZXJ5X3N0YXR1cygweCUwOHgpIiwKLQkJICAgIGlvYy0+bmFtZSwgbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+RGlzY292ZXJ5U3RhdHVzKSk7CisJCXByaW50aygiZGlzY292ZXJ5X3N0YXR1cygweCUwOHgpIiwKKwkJICAgIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykpOwogCXByaW50aygiXG4iKTsKIAl9CiAjZW5kaWYKQEAgLTQ0ODgsMTkgKzQ3MDcsMTkgQEAKIC8qKgogICogX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIGlyIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFJckNvbmZpZ0NoYW5nZUxpc3RfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCU1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50OwogCWludCBpOwogCXU4IGZvcmVpZ25fY29uZmlnOworCU1waTJFdmVudERhdGFJckNvbmZpZ0NoYW5nZUxpc3RfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCkBAIC00NTQzLDE0ICs0NzYyLDE0IEBACiAvKioKICAqIF9zY3NpaF9zYXNfaXJfdm9sdW1lX2V2ZW50IC0gSVIgdm9sdW1lIGV2ZW50CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhSXJWb2x1bWVfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfaXJfdm9sdW1lX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAJdTY0IHd3aWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ1NTksNiArNDc3OCw3IEBACiAJdTMyIHN0YXRlOwogCWludCByYzsKIAlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCU1waTJFdmVudERhdGFJclZvbHVtZV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKIAlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPSBNUEkyX0VWRU5UX0lSX1ZPTFVNRV9SQ19TVEFURV9DSEFOR0VEKQogCQlyZXR1cm47CkBAIC00NjI4LDE0ICs0ODQ4LDE0IEBACiAvKioKICAqIF9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudCAtIFBEIGV2ZW50CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc19pcl9waHlzaWNhbF9kaXNrX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICBNcGkyRXZlbnREYXRhSXJQaHlzaWNhbERpc2tfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCXUxNiBoYW5kbGU7CiAJdTMyIHN0YXRlOwpAQCAtNDY0NCw2ICs0ODY0LDcgQEAKIAlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CiAJTXBpMlNhc0RldmljZVBhZ2UwX3Qgc2FzX2RldmljZV9wZzA7CiAJdTMyIGlvY19zdGF0dXM7CisJTXBpMkV2ZW50RGF0YUlyUGh5c2ljYWxEaXNrX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAogCWlmIChldmVudF9kYXRhLT5SZWFzb25Db2RlICE9IE1QSTJfRVZFTlRfSVJfUEhZU0RJU0tfUkNfU1RBVEVfQ0hBTkdFRCkKIAkJcmV0dXJuOwpAQCAtNDc0MywzMyArNDk2NCwzMyBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQgLSBoYW5kbGUgUkFJRCBvcGVyYXRpb24gZXZlbnRzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDoKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YUlyT3BlcmF0aW9uU3RhdHVzX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKLQkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudF9kZWJ1Zyhpb2MsCisJCSAgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOwogI2VuZGlmCiB9CiAKIC8qKgogICogX3Njc2loX3Rhc2tfc2V0X2Z1bGwgLSBoYW5kbGUgdGFzayBzZXQgZnVsbAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBUaHJvdHRsZSBiYWNrIHFkZXB0aC4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF90YXNrX3NldF9mdWxsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YVRhc2tTZXRGdWxsX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfdGFza19zZXRfZnVsbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBmd19ldmVudF93b3JrCisJKmZ3X2V2ZW50KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwpAQCAtNDc4MCw2ICs1MDAxLDcgQEAKIAl1MTYgaGFuZGxlOwogCWludCBpZCwgY2hhbm5lbDsKIAl1NjQgc2FzX2FkZHJlc3M7CisJTXBpMkV2ZW50RGF0YVRhc2tTZXRGdWxsX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAogCWN1cnJlbnRfZGVwdGggPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5DdXJyZW50RGVwdGgpOwogCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkRldkhhbmRsZSk7CkBAIC00ODY4LDYgKzUwOTAsMTAgQEAKIAkJaWYgKHNhc19kZXZpY2UtPnNhc19hZGRyZXNzID09IHNhc19hZGRyZXNzICYmCiAJCSAgICBzYXNfZGV2aWNlLT5zbG90ID09IHNsb3QgJiYgc2FzX2RldmljZS0+c3RhcmdldCkgewogCQkJc2FzX2RldmljZS0+cmVzcG9uZGluZyA9IDE7CisJCQlzYXNfZGV2aWNlLT5zdGF0ZSA9IDA7CisJCQlzdGFyZ2V0ID0gc2FzX2RldmljZS0+c3RhcmdldDsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc3RhcmdldC0+aG9zdGRhdGE7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+dG1fYnVzeSA9IDA7CiAJCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNhc19kZXZpY2UtPnN0YXJnZXQsCiAJCQkgICAgImhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpLCBlbmNsb3N1cmUgIgogCQkJICAgICJsb2dpY2FsIGlkKDB4JTAxNmxseCksIHNsb3QoJWQpXG4iLCBoYW5kbGUsCkBAIC00ODgwLDggKzUxMDYsNiBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiXHRoYW5kbGUgY2hhbmdlZCBmcm9tKDB4JTA0eCkhISFcbiIsCiAJCQkgICAgc2FzX2RldmljZS0+aGFuZGxlKTsKIAkJCXNhc19kZXZpY2UtPmhhbmRsZSA9IGhhbmRsZTsKLQkJCXN0YXJnZXQgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0OwotCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKIAkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5oYW5kbGUgPSBoYW5kbGU7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNTIyNyw0NCArNTQ1MSwzOCBAQAogCiAJc3dpdGNoIChmd19ldmVudC0+ZXZlbnQpIHsKIAljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNUOgotCQlfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhLCBmd19ldmVudCk7CisJCV9zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgotCQlfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50KGlvYywKKwkJICAgIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19ESVNDT1ZFUlk6Ci0JCV9zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChpb2MsCisJCSAgICBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9TQVNfQlJPQURDQVNUX1BSSU1JVElWRToKLQkJX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoaW9jLAorCQkgICAgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfU0FTX0VOQ0xfREVWSUNFX1NUQVRVU19DSEFOR0U6CiAJCV9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50KGlvYywKLQkJICAgIGZ3X2V2ZW50LT5WRl9JRCwgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQkgICAgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfSVJfQ09ORklHVVJBVElPTl9DSEFOR0VfTElTVDoKLQkJX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoaW9jLCBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9JUl9WT0xVTUU6Ci0JCV9zY3NpaF9zYXNfaXJfdm9sdW1lX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX1BIWVNJQ0FMX0RJU0s6Ci0JCV9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl9waHlzaWNhbF9kaXNrX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfSVJfT1BFUkFUSU9OX1NUQVRVUzoKLQkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQoaW9jLCBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9UQVNLX1NFVF9GVUxMOgotCQlfc2NzaWhfdGFza19zZXRfZnVsbChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Rhc2tfc2V0X2Z1bGwoaW9jLCBmd19ldmVudCk7CiAJCWJyZWFrOwogCX0KIAlfc2NzaWhfZndfZXZlbnRfZnJlZShpb2MsIGZ3X2V2ZW50KTsKQEAgLTUyNzMsMTcgKzU0OTEsMTkgQEAKIC8qKgogICogbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayAtIGZpcm13YXJlIGV2ZW50IGhhbmRsZXIgKGNhbGxlZCBhdCBJU1IgdGltZSkKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICogQ29udGV4dDogaW50ZXJydXB0LgogICoKICAqIFRoaXMgZnVuY3Rpb24gbWVyZWx5IGFkZHMgYSBuZXcgd29yayB0YXNrIGludG8gaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQuCiAgKiBUaGUgdGFza3MgYXJlIHdvcmtlZCBmcm9tIF9maXJtd2FyZV9ldmVudF93b3JrIGluIHVzZXIgY29udGV4dC4KICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkCi1tcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSkKK3U4CittcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKKwl1MzIgcmVwbHkpCiB7CiAJc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50OwogCU1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseTsKQEAgLTUyOTQsMTEgKzU1MTQsMTEgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CiAJaWYgKGlvYy0+ZndfZXZlbnRzX29mZiB8fCBpb2MtPnJlbW92ZV9ob3N0KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47CisJCXJldHVybiAxOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKIAotCW1waV9yZXBseSA9ICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKwltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlldmVudCA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXZlbnQpOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtNTMxMiw3ICs1NTMyLDcgQEAKIAkJaWYgKGJhZW5fZGF0YS0+UHJpbWl0aXZlICE9CiAJCSAgICBNUEkyX0VWRU5UX1BSSU1JVElWRV9BU1lOQ0hST05PVVNfRVZFTlQgfHwKIAkJICAgIGlvYy0+YnJvYWRjYXN0X2Flbl9idXN5KQotCQkJcmV0dXJuOworCQkJcmV0dXJuIDE7CiAJCWlvYy0+YnJvYWRjYXN0X2Flbl9idXN5ID0gMTsKIAkJYnJlYWs7CiAJfQpAQCAtNTMzNCwxNCArNTU1NCwxNCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6IC8qIGlnbm9yZSB0aGUgcmVzdCAqLwotCQlyZXR1cm47CisJCXJldHVybiAxOwogCX0KIAogCWZ3X2V2ZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ3X2V2ZW50X3dvcmspLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWZ3X2V2ZW50KSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwotCQlyZXR1cm47CisJCXJldHVybiAxOwogCX0KIAlmd19ldmVudC0+ZXZlbnRfZGF0YSA9CiAJICAgIGt6YWxsb2MobXBpX3JlcGx5LT5FdmVudERhdGFMZW5ndGgqNCwgR0ZQX0FUT01JQyk7CkBAIC01MzQ5LDE1ICs1NTY5LDE3IEBACiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwogCQlrZnJlZShmd19ldmVudCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJfQogCiAJbWVtY3B5KGZ3X2V2ZW50LT5ldmVudF9kYXRhLCBtcGlfcmVwbHktPkV2ZW50RGF0YSwKIAkgICAgbXBpX3JlcGx5LT5FdmVudERhdGFMZW5ndGgqNCk7CiAJZndfZXZlbnQtPmlvYyA9IGlvYzsKLQlmd19ldmVudC0+VkZfSUQgPSBWRl9JRDsKKwlmd19ldmVudC0+VkZfSUQgPSBtcGlfcmVwbHktPlZGX0lEOworCWZ3X2V2ZW50LT5WUF9JRCA9IG1waV9yZXBseS0+VlBfSUQ7CiAJZndfZXZlbnQtPmV2ZW50ID0gZXZlbnQ7CiAJX3Njc2loX2Z3X2V2ZW50X2FkZChpb2MsIGZ3X2V2ZW50KTsKKwlyZXR1cm4gMTsKIH0KIAogLyogc2hvc3QgdGVtcGxhdGUgKi8KQEAgLTU2MTcsNyArNTgzOSw3IEBACiB9CiAKIC8qKgotICogX3Njc2loX3Byb2JlX3NhcyAtIHJlcG9ydGluZyByYWlkIHZvbHVtZXMgdG8gc2FzIHRyYW5zcG9ydAorICogX3Njc2loX3Byb2JlX3NhcyAtIHJlcG9ydGluZyBzYXMgZGV2aWNlcyB0byBzYXMgdHJhbnNwb3J0CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqCiAgKiBDYWxsZWQgZHVyaW5nIGluaXRpYWwgbG9hZGluZyBvZiB0aGUgZHJpdmVyLgpAQCAtNTcxNCw2ICs1OTM2LDggQEAKIAlpb2MtPmJhc2VfY2JfaWR4ID0gYmFzZV9jYl9pZHg7CiAJaW9jLT50cmFuc3BvcnRfY2JfaWR4ID0gdHJhbnNwb3J0X2NiX2lkeDsKIAlpb2MtPmNvbmZpZ19jYl9pZHggPSBjb25maWdfY2JfaWR4OworCWlvYy0+dG1fdHJfY2JfaWR4ID0gdG1fdHJfY2JfaWR4OworCWlvYy0+dG1fc2FzX2NvbnRyb2xfY2JfaWR4ID0gdG1fc2FzX2NvbnRyb2xfY2JfaWR4OwogCWlvYy0+bG9nZ2luZ19sZXZlbCA9IGxvZ2dpbmdfbGV2ZWw7CiAJLyogbWlzYyBzZW1hcGhvcmVzIGFuZCBzcGluIGxvY2tzICovCiAJc3Bpbl9sb2NrX2luaXQoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2spOwpAQCAtNTcyOSw2ICs1OTUzLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmaW9jLT5md19ldmVudF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmaW9jLT5yYWlkX2RldmljZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmaW9jLT5zYXNfaGJhLnNhc19wb3J0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmRlbGF5ZWRfdHJfbGlzdCk7CiAKIAkvKiBpbml0IHNob3N0IHBhcmFtZXRlcnMgKi8KIAlzaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKQEAgLTU3NDUsNiArNTk3MCw3IEBACiAKIAlzY3NpX2hvc3Rfc2V0X3Byb3Qoc2hvc3QsIFNIT1NUX0RJRl9UWVBFMV9QUk9URUNUSU9OCiAJICAgIHwgU0hPU1RfRElGX1RZUEUzX1BST1RFQ1RJT04pOworCXNjc2lfaG9zdF9zZXRfZ3VhcmQoc2hvc3QsIFNIT1NUX0RJWF9HVUFSRF9DUkMpOwogCiAJLyogZXZlbnQgdGhyZWFkICovCiAJc25wcmludGYoaW9jLT5maXJtd2FyZV9ldmVudF9uYW1lLCBzaXplb2YoaW9jLT5maXJtd2FyZV9ldmVudF9uYW1lKSwKQEAgLTU4OTQsNiArNjEyMCwxMSBAQAogCS8qIGN0bCBtb2R1bGUgY2FsbGJhY2sgaGFuZGxlciAqLwogCWN0bF9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcihtcHQyc2FzX2N0bF9kb25lKTsKIAorCXRtX3RyX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKAorCSAgICBfc2NzaWhfdG1fdHJfY29tcGxldGUpOworCXRtX3Nhc19jb250cm9sX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKAorCSAgICBfc2NzaWhfc2FzX2NvbnRyb2xfY29tcGxldGUpOworCiAJbXB0MnNhc19jdGxfaW5pdCgpOwogCiAJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzY3NpaF9kcml2ZXIpOwpAQCAtNTkyNCw2ICs2MTU1LDkgQEAKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGNvbmZpZ19jYl9pZHgpOwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoY3RsX2NiX2lkeCk7CiAKKwltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX3RyX2NiX2lkeCk7CisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV9zYXNfY29udHJvbF9jYl9pZHgpOworCiAJbXB0MnNhc19jdGxfZXhpdCgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYwppbmRleCA3NDIzMjRhLi5lYjk4MTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKQEAgLTIsNyArMiw3IEBACiAgKiBTQVMgVHJhbnNwb3J0IExheWVyIGZvciBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBiYXNlZCBjb250cm9sbGVycwogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX3RyYW5zcG9ydC5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxMiwyNSArMjEyLDI2IEBACiAgKiBtcHQyc2FzX3RyYW5zcG9ydF9kb25lIC0gIGludGVybmFsIHRyYW5zcG9ydCBsYXllciBjYWxsYmFjayBoYW5kbGVyLgogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICoKICAqIENhbGxiYWNrIGhhbmRsZXIgd2hlbiBzZW5kaW5nIGludGVybmFsIGdlbmVyYXRlZCB0cmFuc3BvcnQgY21kcy4KICAqIFRoZSBjYWxsYmFjayBpbmRleCBwYXNzZWQgaXMgYGlvYy0+dHJhbnNwb3J0X2NiX2lkeGAKICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkCi1tcHQyc2FzX3RyYW5zcG9ydF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELAordTgKK21wdDJzYXNfdHJhbnNwb3J0X2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKICAgICB1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnNtaWQgIT0gc21pZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKIAlpZiAobXBpX3JlcGx5KSB7CiAJCW1lbWNweShpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5LCBtcGlfcmVwbHksCkBAIC0yMzksNiArMjQwLDcgQEAKIAl9CiAJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qIHJlcG9ydCBtYW51ZmFjdHVyZSByZXF1ZXN0IHN0cnVjdHVyZSAqLwpAQCAtMzY5LDYgKzM3MSw4IEBACiAJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g7CiAJbXBpX3JlcXVlc3QtPlBoeXNpY2FsUG9ydCA9IDB4RkY7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAJc2FzX2FkZHJlc3NfbGUgPSAodTY0ICopJm1waV9yZXF1ZXN0LT5TQVNBZGRyZXNzOwogCSpzYXNfYWRkcmVzc19sZSA9IGNwdV90b19sZTY0KHNhc19hZGRyZXNzKTsKIAltcGlfcmVxdWVzdC0+UmVxdWVzdERhdGFMZW5ndGggPSBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpOwpAQCAtMzk2LDcgKzQwMCw4IEBACiAJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAicmVwb3J0X21hbnVmYWN0dXJlIC0gIgogCSAgICAic2VuZCB0byBzYXNfYWRkcigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsCiAJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2FkZHJlc3MpKTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIDAgLyogVkZfSUQgKi8pOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUsCiAJICAgIDEwKkhaKTsKIApAQCAtMTEwNiw2ICsxMTExLDggQEAKIAltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSDsKIAltcGlfcmVxdWVzdC0+UGh5c2ljYWxQb3J0ID0gMHhGRjsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAkqKCh1NjQgKikmbXBpX3JlcXVlc3QtPlNBU0FkZHJlc3MpID0gKHJwaHkpID8KIAkgICAgY3B1X3RvX2xlNjQocnBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpIDoKIAkgICAgY3B1X3RvX2xlNjQoaW9jLT5zYXNfaGJhLnNhc19hZGRyZXNzKTsKQEAgLTExNDcsNyArMTE1NCw4IEBACiAJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXMgLSAiCiAJICAgICJzZW5kaW5nIHNtcCByZXF1ZXN0XG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIDAgLyogVkZfSUQgKi8pOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUsCiAJICAgIDEwKkhaKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmgKaW5kZXggZjhjYjlkZS4uMTg0OWRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaAorKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaWZuZGVmIF9NVl9ERUZTX0hfCiAjZGVmaW5lIF9NVl9ERUZTX0hfCiAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUkVDQV8xMzAwCTB4MTMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzEzMjAJMHgxMzIwCiAKIGVudW0gY2hpcF9mbGF2b3JzIHsKIAljaGlwXzYzMjAsCkBAIC0zMiw2ICszNCw4IEBACiAJY2hpcF82NDg1LAogCWNoaXBfOTQ4MCwKIAljaGlwXzkxODAsCisJY2hpcF8xMzAwLAorCWNoaXBfMTMyMAogfTsKIAogLyogZHJpdmVyIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwppbmRleCA4NjQ2YTE5Li5jNzkwZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKQEAgLTMyLDYgKzMyLDggQEAKIAlbY2hpcF82NDg1XSA9CXsgMSwgOCwgMHg4MDAsIDMzLCAzMiwgMTAsICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKIAlbY2hpcF85MTgwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKIAlbY2hpcF85NDgwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF8xMzAwXSA9CXsgMSwgNCwgMHg0MDAsIDE3LCAxNiwgIDksICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF8xMzIwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKIH07CiAKICNkZWZpbmUgU09DX1NBU19OVU0gMgpAQCAtNjUzLDYgKzY1NSw4IEBACiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDY0ODUpLCBjaGlwXzY0ODUgfSwKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4OTQ4MCksIGNoaXBfOTQ4MCB9LAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg5MTgwKSwgY2hpcF85MTgwIH0sCisJeyBQQ0lfVkRFVklDRShBUkVDQSwgUENJX0RFVklDRV9JRF9BUkVDQV8xMzAwKSwgY2hpcF8xMzAwIH0sCisJeyBQQ0lfVkRFVklDRShBUkVDQSwgUENJX0RFVklDRV9JRF9BUkVDQV8xMzIwKSwgY2hpcF8xMzIwIH0sCiAKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwppbmRleCA0MzAyZjA2Li4wYTk3YmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgpAQCAtNjg0LDcgKzY4NSw3IEBACiAJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCi0JZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJZGV2X2luZm8oJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAogCQkiQWRhcHRlciBiZWluZyByZXNldCBkdWUgdG8gY29tbWFuZCB0aW1lb3V0LlxuIik7CiAKIAkvKiBDb21tYW5kIHRpbWVvdXRzIHJlc3VsdCBpbiBoYXJkIHJlc2V0IHNlcXVlbmNlLiBUaGUgY29tbWFuZCB0aGF0IGdvdApAQCAtODE1LDggKzgxNiw5IEBACiAKIAlpZiAoUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpID4gMCkgewogCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfRVJST1IgPDwgMTYpOwotCQlwbWNyYWlkX2VycigiY29tbWFuZCBDREJbMF0gPSAleCBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLAotCQkJICAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwgaW9hc2MpOworCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjc2lfY21kLAorCQkJICAgICJjb21tYW5kIENEQlswXSA9ICV4IGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsCisJCQkgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sIGlvYXNjKTsKIAl9CiAKIAkvKiBpZiB3ZSBoYWQgYWxsb2NhdGVkIHNlbnNlIGJ1ZmZlcnMgZm9yIHJlcXVlc3Qgc2Vuc2UsIGNvcHkgdGhlIHNlbnNlCkBAIC0xMDY5LDcgKzEwNzEsNyBAQAogCiAJaW9hcmNiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJjYl9zaXplKTsKIAotCWlvYWRsWzBdLmZsYWdzIHw9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX1JFQURfTEFTVCk7CisJaW9hZGxbMF0uZmxhZ3MgfD0gSU9BRExfRkxBR1NfUkVBRF9MQVNUOwogCWlvYWRsWzBdLmRhdGFfbGVuID0gY3B1X3RvX2xlMzIocmNiX3NpemUpOwogCWlvYWRsWzBdLmFkZHJlc3MgPSBjcHVfdG9fbGUzMihkbWEpOwogCkBAIC0xNTQxLDEzICsxNTQzLDEzIEBACiAKIAlpZiAocGluc3RhbmNlLT5sZG4uaGNhbS0+bm90aWZpY2F0aW9uX2xvc3QgPT0KIAkgICAgSE9TVFJDQl9OT1RJRklDQVRJT05TX0xPU1QpCi0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRXJyb3Igbm90aWZpY2F0aW9ucyBsb3N0XG4iKTsKKwkJZGV2X2luZm8oJnBpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRXJyb3Igbm90aWZpY2F0aW9ucyBsb3N0XG4iKTsKIAogCWlvYXNjID0gbGUzMl90b19jcHUoaGNhbV9sZG4tPmVycm9yX2xvZy5mZF9pb2FzYyk7CiAKIAlpZiAoaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUIHx8CiAJCWlvYXNjID09IFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVF9CWV9PVEhFUikgewotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJZGV2X2luZm8oJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAogCQkJIlVuaXRBdHRlbnRpb24gZHVlIHRvIElPQSBCdXMgUmVzZXRcbiIpOwogCQlzY3NpX3JlcG9ydF9idXNfcmVzZXQoCiAJCQlwaW5zdGFuY2UtPmhvc3QsCkBAIC0xNTg0LDcgKzE1ODYsNyBAQAogCSAgICBhdG9taWNfcmVhZCgmcGluc3RhbmNlLT5jY24uaWdub3JlKSA9PSAxKSB7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKGlvYXNjKSB7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQlkZXZfaW5mbygmcGluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkiSG9zdCBSQ0IgKENDTikgZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwgaW9hc2MpOwogCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJCXBtY3JhaWRfc2VuZF9oY2FtKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSk7CkBAIC0xNjM0LDcgKzE2MzYsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCSJIb3N0IFJDQihMRE4pIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKIAl9CiAJLyogc2VuZCBuZXRsaW5rIG1lc3NhZ2UgZm9yIEhDQU0gbm90aWZpY2F0aW9uIGlmIGVuYWJsZWQgKi8KQEAgLTE4MjIsNyArMTgyNCw2IEBACiAJCQlzY3NpX2RtYV91bm1hcChzY3NpX2NtZCk7CiAJCQlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKIAotCiAJCQlwbWNyYWlkX2luZm8oImZhaWxpbmcoJWQpIENEQlswXSA9ICV4IHJlc3VsdDogJXhcbiIsCiAJCQkJICAgICBsZTMyX3RvX2NwdShyZXNwKSA+PiAyLAogCQkJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCkBAIC0yMjUwLDcgKzIyNTEsNyBAQAogCiAJaW9hZGwtPmFkZHJlc3MgPSBjcHVfdG9fbGU2NChjbWQtPnNlbnNlX2J1ZmZlcl9kbWEpOwogCWlvYWRsLT5kYXRhX2xlbiA9IGNwdV90b19sZTMyKFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JaW9hZGwtPmZsYWdzID0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfTEFTVF9ERVNDKTsKKwlpb2FkbC0+ZmxhZ3MgPSBJT0FETF9GTEFHU19MQVNUX0RFU0M7CiAKIAkvKiByZXF1ZXN0IHNlbnNlIG1pZ2h0IGJlIGNhbGxlZCBhcyBwYXJ0IG9mIGVycm9yIHJlc3BvbnNlIHByb2Nlc3NpbmcKIAkgKiB3aGljaCBydW5zIGluIHRhc2tsZXRzIGNvbnRleHQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgbWlkLWxheWVyIG1pZ2h0CkBAIC0yNTE0LDcgKzI1MTUsOCBAQAogCXJlcyA9IHNjc2lfY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCiAJaWYgKCFyZXMpIHsKLQkJcG1jcmFpZF9lcnIoInJlc2V0X2RldmljZTogTlVMTCByZXNvdXJjZSBwb2ludGVyXG4iKTsKKwkJc2Rldl9wcmludGsoS0VSTl9FUlIsIHNjc2lfY21kLT5kZXZpY2UsCisJCQkgICAgInJlc2V0X2RldmljZTogTlVMTCByZXNvdXJjZSBwb2ludGVyXG4iKTsKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CiAKQEAgLTI3NTIsOCArMjc1NCw4IEBACiAJcGluc3RhbmNlID0KIAkJKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopc2NzaV9jbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKLQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKLQkJIkkvTyBjb21tYW5kIHRpbWVkIG91dCwgYWJvcnRpbmcgaXQuXG4iKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjc2lfY21kLAorCQkgICAgIkkvTyBjb21tYW5kIHRpbWVkIG91dCwgYWJvcnRpbmcgaXQuXG4iKTsKIAogCXJlcyA9IHNjc2lfY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCkBAIC0yODI0LDcgKzI4MjYsOCBAQAogICovCiBzdGF0aWMgaW50IHBtY3JhaWRfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKIHsKLQlwbWNyYWlkX2VycigiRG9pbmcgZGV2aWNlIHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CisJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkgICAgInJlc2V0dGluZyBkZXZpY2UgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKIAlyZXR1cm4gcG1jcmFpZF9yZXNldF9kZXZpY2Uoc2NtZCwKIAkJCQkgICAgUE1DUkFJRF9JTlRFUk5BTF9USU1FT1VULAogCQkJCSAgICBSRVNFVF9ERVZJQ0VfTFVOKTsKQEAgLTI4MzIsNyArMjgzNSw4IEBACiAKIHN0YXRpYyBpbnQgcG1jcmFpZF9laF9idXNfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewotCXBtY3JhaWRfZXJyKCJEb2luZyBidXMgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCisJCSAgICAiRG9pbmcgYnVzIHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CiAJcmV0dXJuIHBtY3JhaWRfcmVzZXRfZGV2aWNlKHNjbWQsCiAJCQkJICAgIFBNQ1JBSURfUkVTRVRfQlVTX1RJTUVPVVQsCiAJCQkJICAgIFJFU0VUX0RFVklDRV9CVVMpOwpAQCAtMjg0MCw3ICsyODQ0LDggQEAKIAogc3RhdGljIGludCBwbWNyYWlkX2VoX3RhcmdldF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7Ci0JcG1jcmFpZF9lcnIoIkRvaW5nIHRhcmdldCByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJICAgICJEb2luZyB0YXJnZXQgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKIAlyZXR1cm4gcG1jcmFpZF9yZXNldF9kZXZpY2Uoc2NtZCwKIAkJCQkgICAgUE1DUkFJRF9JTlRFUk5BTF9USU1FT1VULAogCQkJCSAgICBSRVNFVF9ERVZJQ0VfVEFSR0VUKTsKQEAgLTI5ODgsMTEgKzI5OTMsMTEgQEAKIAluc2VnID0gc2NzaV9kbWFfbWFwKHNjc2lfY21kKTsKIAogCWlmIChuc2VnIDwgMCkgewotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgInNjc2lfbWFwX2RtYSBmYWlsZWQhXG4iKTsKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIHNjc2lfY21kLCAic2NzaV9tYXBfZG1hIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfSBlbHNlIGlmIChuc2VnID4gUE1DUkFJRF9NQVhfSU9BRExTKSB7CiAJCXNjc2lfZG1hX3VubWFwKHNjc2lfY21kKTsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZCwKIAkJCSJzZyBjb3VudCBpcyAoJWQpIG1vcmUgdGhhbiBhbGxvd2VkIVxuIiwgbnNlZyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zMDEyLDcgKzMwMTcsNyBAQAogCQlpb2FkbFtpXS5mbGFncyA9IDA7CiAJfQogCS8qIHNldHVwIGxhc3QgZGVzY3JpcHRvciAqLwotCWlvYWRsW2kgLSAxXS5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisJaW9hZGxbaSAtIDFdLmZsYWdzID0gSU9BRExfRkxBR1NfTEFTVF9ERVNDOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMzgyLDcgKzMzODcsNyBAQAogCX0KIAogCS8qIHNldHVwIHRoZSBsYXN0IGRlc2NyaXB0b3IgKi8KLQlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCWlvYWRsW2kgLSAxXS5mbGFncyA9IElPQURMX0ZMQUdTX0xBU1RfREVTQzsKIAogCXJldHVybiAwOwogfQpAQCAtNTA0MCw3ICs1MDQ1LDcgQEAKIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCiAJaWYgKHJjKSB7Ci0JCXBtY3JhaWRfZXJyKCJwbWNyYWlkOiBFbmFibGUgZGV2aWNlIGZhaWxlZFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlc3VtZTogRW5hYmxlIGRldmljZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC01MDU0LDcgKzUwNTksNyBAQAogCQlyYyA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAogCWlmIChyYyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgUENJIERNQSBtYXNrXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVzdW1lOiBGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CiAJCWdvdG8gZGlzYWJsZV9kZXZpY2U7CiAJfQogCkBAIC01MDYzLDcgKzUwNjgsOCBAQAogCXJjID0gcG1jcmFpZF9yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOwogCiAJaWYgKHJjKSB7Ci0JCXBtY3JhaWRfZXJyKCJyZXN1bWU6IGNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyc1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJyZXN1bWU6IGNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyc1xuIik7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byByZWxlYXNlX2hvc3Q7CiAJfQpAQCAtNTA4MCw3ICs1MDg2LDcgQEAKIAkgKiBzdGF0ZS4KIAkgKi8KIAlpZiAocG1jcmFpZF9yZXNldF9icmluZ3VwKHBpbnN0YW5jZSkpIHsKLQkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byByZWxlYXNlX3Rhc2tsZXRzOwogCX0KQEAgLTUxODcsNyArNTE5Myw3IEBACiAJTElTVF9IRUFEKG9sZF9yZXMpOwogCiAJaWYgKHBpbnN0YW5jZS0+Y2ZnX3RhYmxlLT5mbGFncyAmIE1JQ1JPQ09ERV9VUERBVEVfUkVRVUlSRUQpCi0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LCAiUmVxdWlyZSBtaWNyb2NvZGUgZG93bmxvYWRcbiIpOworCQlwbWNyYWlkX2VycigiSU9BIHJlcXVpcmVzIG1pY3JvY29kZSBkb3dubG9hZFxuIik7CiAKIAkvKiByZXNvdXJjZSBsaXN0IGlzIHByb3RlY3RlZCBieSBwaW5zdGFuY2UtPnJlc291cmNlX2xvY2suCiAJICogaW5pdF9yZXNfdGFibGUgY2FuIGJlIGNhbGxlZCBmcm9tIHByb2JlICh1c2VyLXRocmVhZCkgb3IgcnVudGltZQpAQCAtNTIyNCw4ICs1MjMwLDcgQEAKIAkJaWYgKCFmb3VuZCkgewogCiAJCQlpZiAobGlzdF9lbXB0eSgmcGluc3RhbmNlLT5mcmVlX3Jlc19xKSkgewotCQkJCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAotCQkJCQkiVG9vIG1hbnkgZGV2aWNlcyBhdHRhY2hlZFxuIik7CisJCQkJcG1jcmFpZF9lcnIoIlRvbyBtYW55IGRldmljZXMgYXR0YWNoZWRcbiIpOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC01MzA5LDcgKzUzMTQsNyBAQAogCQljcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlKSk7CiAKIAlpb2FkbCA9ICYoaW9hcmNiLT5hZGRfZGF0YS51LmlvYWRsWzBdKTsKLQlpb2FkbC0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCWlvYWRsLT5mbGFncyA9IElPQURMX0ZMQUdTX0xBU1RfREVTQzsKIAlpb2FkbC0+YWRkcmVzcyA9IGNwdV90b19sZTY0KHBpbnN0YW5jZS0+Y2ZnX3RhYmxlX2J1c19hZGRyKTsKIAlpb2FkbC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlKSk7CiAKQEAgLTU0NDIsNyArNTQ0Nyw3IEBACiAJcmMgPSBwbWNyYWlkX3JlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHBpbnN0YW5jZSk7CiAKIAlpZiAocmMpIHsKLQkJcG1jcmFpZF9lcnIoImNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOwogCQlnb3RvIG91dF9zY3NpX2hvc3RfcHV0OwogCX0KIApAQCAtNTQ2Niw3ICs1NDcxLDcgQEAKIAkgKi8KIAlwbWNyYWlkX2luZm8oInN0YXJ0aW5nIElPQSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZVxuIik7CiAJaWYgKHBtY3JhaWRfcmVzZXRfYnJpbmd1cChwaW5zdGFuY2UpKSB7Ci0JCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBpbml0aWFsaXplIElPQSBcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCBpbml0aWFsaXplIElPQSBcbiIpOwogCQlyYyA9IDE7CiAJCWdvdG8gb3V0X3JlbGVhc2VfYnVmczsKIAl9CkBAIC01NTM0LDcgKzU1MzksNiBAQAogCS5zaHV0ZG93biA9IHBtY3JhaWRfc2h1dGRvd24KIH07CiAKLQogLyoqCiAgKiBwbWNyYWlkX2luaXQgLSBtb2R1bGUgbG9hZCBlbnRyeSBwb2ludAogICovCkBAIC01NTY2LDcgKzU1NzAsNiBAQAogCQlnb3RvIG91dF91bnJlZ19jaHJkZXY7CiAJfQogCi0KIAllcnJvciA9IHBtY3JhaWRfbmV0bGlua19pbml0KCk7CiAKIAlpZiAoZXJyb3IpCkBAIC01NTg0LDYgKzU1ODcsNyBAQAogCiBvdXRfdW5yZWdfY2hyZGV2OgogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihwbWNyYWlkX21ham9yLCAwKSwgUE1DUkFJRF9NQVhfQURBUFRFUlMpOworCiBvdXRfaW5pdDoKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAppbmRleCA2MTRiM2E3Li4zNDQxYjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCmluZGV4IDQyYjc5OWEuLmUwN2IzNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKQEAgLTU2OCw3ICs1NjgsNyBAQAogCWlmIChyZXEgPT0gTlVMTCkgewogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IgogCQkJImZvciByZXF1ZXN0IHF1ZVxuIik7Ci0JCWdvdG8gcXVlX2ZhaWxlZDsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJcmVxLT5sZW5ndGggPSBSRVFVRVNUX0VOVFJZX0NOVF8yNFhYOwpAQCAtNjMyLDYgKzYzMiw3IEBACiAKIHF1ZV9mYWlsZWQ6CiAJcWxhMjV4eF9mcmVlX3JlcV9xdWUoYmFzZV92aGEsIHJlcSk7CitmYWlsZWQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1OSw3ICs2NjAsNyBAQAogCWlmIChyc3AgPT0gTlVMTCkgewogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciIKIAkJCQkiIHJlc3BvbnNlIHF1ZVxuIik7Ci0JCWdvdG8gcXVlX2ZhaWxlZDsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJcnNwLT5sZW5ndGggPSBSRVNQT05TRV9FTlRSWV9DTlRfTVE7CkBAIC03MjgsNiArNzI5LDcgQEAKIAogcXVlX2ZhaWxlZDoKIAlxbGEyNXh4X2ZyZWVfcnNwX3F1ZShiYXNlX3ZoYSwgcnNwKTsKK2ZhaWxlZDoKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKaW5kZXggYjZlMDMwNy4uZGQwOThjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCkBAIC0yNDEsMTAgKzI0MSw3IEBACiAgKi8KIHN0cnVjdCBzY3NpX2NtbmQgKl9fc2NzaV9nZXRfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0Jc3RydWN0IHNjc2lfY21uZCAqY21kOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotCWNtZCA9IHNjc2lfaG9zdF9hbGxvY19jb21tYW5kKHNob3N0LCBnZnBfbWFzayk7CisJc3RydWN0IHNjc2lfY21uZCAqY21kID0gc2NzaV9ob3N0X2FsbG9jX2NvbW1hbmQoc2hvc3QsIGdmcF9tYXNrKTsKIAogCWlmICh1bmxpa2VseSghY21kKSkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjU4LDkgKzI1NSwxNSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaG9zdC0+ZnJlZV9saXN0X2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoY21kKSB7CisJCQl2b2lkICpidWYsICpwcm90OworCiAJCQlidWYgPSBjbWQtPnNlbnNlX2J1ZmZlcjsKKwkJCXByb3QgPSBjbWQtPnByb3Rfc2RiOworCiAJCQltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOworCiAJCQljbWQtPnNlbnNlX2J1ZmZlciA9IGJ1ZjsKKwkJCWNtZC0+cHJvdF9zZGIgPSBwcm90OwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCBmYjlhZjIwLi5jNDEwM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KIAogI2luY2x1ZGUgInNkLmgiCiAjaW5jbHVkZSAic2NzaV9sb2dnaW5nLmgiCkBAIC02NCw2ICs2NSw3IEBACiAjZGVmaW5lIFBBUkFNRVRFUl9MSVNUX0xFTkdUSF9FUlIgMHgxYQogI2RlZmluZSBJTlZBTElEX09QQ09ERSAweDIwCiAjZGVmaW5lIEFERFJfT1VUX09GX1JBTkdFIDB4MjEKKyNkZWZpbmUgSU5WQUxJRF9DT01NQU5EX09QQ09ERSAweDIwCiAjZGVmaW5lIElOVkFMSURfRklFTERfSU5fQ0RCIDB4MjQKICNkZWZpbmUgSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNUIDB4MjYKICNkZWZpbmUgUE9XRVJPTl9SRVNFVCAweDI5CkBAIC0xODAsNyArMTgyLDcgQEAKICNkZWZpbmUgU0RFQlVHX1NFTlNFX0xFTiAzMgogCiAjZGVmaW5lIFNDU0lfREVCVUdfQ0FOUVVFVUUgIDI1NQotI2RlZmluZSBTQ1NJX0RFQlVHX01BWF9DTURfTEVOIDE2CisjZGVmaW5lIFNDU0lfREVCVUdfTUFYX0NNRF9MRU4gMzIKIAogc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDsKQEAgLTI5Niw5ICsyOTgsMjUgQEAKIH0KIAogc3RhdGljIHZvaWQgZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyh1bnNpZ25lZCBjaGFyICpjbWQsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsb25nICpsYmEsIHVuc2lnbmVkIGludCAqbnVtKQorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqbGJhLCB1bnNpZ25lZCBpbnQgKm51bSwKKwkJCQkgICB1MzIgKmVpX2xiYSkKIHsKKwkqZWlfbGJhID0gMDsKKwogCXN3aXRjaCAoKmNtZCkgeworCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKKwkJKmxiYSA9ICh1NjQpY21kWzE5XSB8ICh1NjQpY21kWzE4XSA8PCA4IHwKKwkJCSh1NjQpY21kWzE3XSA8PCAxNiB8ICh1NjQpY21kWzE2XSA8PCAyNCB8CisJCQkodTY0KWNtZFsxNV0gPDwgMzIgfCAodTY0KWNtZFsxNF0gPDwgNDAgfAorCQkJKHU2NCljbWRbMTNdIDw8IDQ4IHwgKHU2NCljbWRbMTJdIDw8IDU2OworCisJCSplaV9sYmEgPSAodTMyKWNtZFsyM10gfCAodTMyKWNtZFsyMl0gPDwgOCB8CisJCQkodTMyKWNtZFsyMV0gPDwgMTYgfCAodTMyKWNtZFsyMF0gPDwgMjQ7CisKKwkJKm51bSA9ICh1MzIpY21kWzMxXSB8ICh1MzIpY21kWzMwXSA8PCA4IHwgKHUzMiljbWRbMjldIDw8IDE2IHwKKwkJCSh1MzIpY21kWzI4XSA8PCAyNDsKKwkJYnJlYWs7CisKIAljYXNlIFdSSVRFXzE2OgogCWNhc2UgUkVBRF8xNjoKIAkJKmxiYSA9ICh1NjQpY21kWzldIHwgKHU2NCljbWRbOF0gPDwgOCB8CkBAIC0xNTg5LDcgKzE2MDcsNyBAQAogfQogCiBzdGF0aWMgaW50IHByb3RfdmVyaWZ5X3JlYWQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIHNlY3Rvcl90IHN0YXJ0X3NlYywKLQkJCSAgICB1bnNpZ25lZCBpbnQgc2VjdG9ycykKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2VjdG9ycywgdTMyIGVpX2xiYSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgcmVzaWQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2dsOwpAQCAtMTYzNiwxMyArMTY1NCwyMyBAQAogCQkJcmV0dXJuIDB4MDE7CiAJCX0KIAotCQlpZiAoc2NzaV9kZWJ1Z19kaWYgIT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04gJiYKKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OICYmCiAJCSAgICBiZTMyX3RvX2NwdShzZHRbaV0ucmVmX3RhZykgIT0gKHNlY3RvciAmIDB4ZmZmZmZmZmYpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSRUYgY2hlY2sgZmFpbGVkIG9uIHNlY3RvciAlbHVcbiIsCiAJCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKXNlY3Rvcik7CiAJCQlkaWZfZXJyb3JzKys7CiAJCQlyZXR1cm4gMHgwMzsKIAkJfQorCisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgYmUzMl90b19jcHUoc2R0W2ldLnJlZl90YWcpICE9IGVpX2xiYSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUkVGIGNoZWNrIGZhaWxlZCBvbiBzZWN0b3IgJWx1XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzZWN0b3IpOworCQkJZGlmX2Vycm9ycysrOworCQkJcmV0dXJuIDB4MDM7CisJCX0KKworCQllaV9sYmErKzsKIAl9CiAKIAlyZXNpZCA9IHNlY3RvcnMgKiA4OyAvKiBCeXRlcyBvZiBwcm90ZWN0aW9uIGRhdGEgdG8gY29weSBpbnRvIHNnbCAqLwpAQCAtMTY3MCw3ICsxNjk4LDggQEAKIH0KIAogc3RhdGljIGludCByZXNwX3JlYWQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyBsYmEsCi0JCSAgICAgdW5zaWduZWQgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCisJCSAgICAgdW5zaWduZWQgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXAsCisJCSAgICAgdTMyIGVpX2xiYSkKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAlpbnQgcmV0OwpAQCAtMTY5OSw3ICsxNzI4LDcgQEAKIAogCS8qIERJWCArIFQxMCBESUYgKi8KIAlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV9yZWFkKFNDcG50LCBsYmEsIG51bSk7CisJCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwogCiAJCWlmIChwcm90X3JldCkgewogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIHByb3RfcmV0KTsKQEAgLTE3MzUsNyArMTc2NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcHJvdF92ZXJpZnlfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIHNlY3Rvcl90IHN0YXJ0X3NlYywKLQkJCSAgICAgdW5zaWduZWQgaW50IHNlY3RvcnMpCisJCQkgICAgIHVuc2lnbmVkIGludCBzZWN0b3JzLCB1MzIgZWlfbGJhKQogewogCWludCBpLCBqLCByZXQ7CiAJc3RydWN0IHNkX2RpZl90dXBsZSAqc2R0OwpAQCAtMTc0OSwxMSArMTc3OCw2IEBACiAKIAlzZWN0b3IgPSBkb19kaXYodG1wX3NlYywgc2RlYnVnX3N0b3JlX3NlY3RvcnMpOwogCi0JaWYgKCgoU0NwbnQtPmNtbmRbMV0gPj4gNSkgJiA3KSAhPSAxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2lfZGVidWc6IFdSUFJPVEVDVCAhPSAxXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJQlVHX09OKHNjc2lfc2dfY291bnQoU0NwbnQpID09IDApOwogCUJVR19PTihzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpID09IDApOwogCkBAIC0xODA4LDcgKzE4MzIsNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCi0JCQlpZiAoc2NzaV9kZWJ1Z19kaWYgIT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04gJiYKKwkJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiAmJgogCQkJICAgIGJlMzJfdG9fY3B1KHNkdC0+cmVmX3RhZykKIAkJCSAgICAhPSAoc3RhcnRfc2VjICYgMHhmZmZmZmZmZikpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKQEAgLTE4MTksNiArMTg0MywxNiBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCisJCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKKwkJCSAgICBiZTMyX3RvX2NwdShzZHQtPnJlZl90YWcpICE9IGVpX2xiYSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IFJFRiBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdVxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKXNlY3Rvcik7CisJCQkJcmV0ID0gMHgwMzsKKwkJCQlkdW1wX3NlY3RvcihkYWRkciwgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKIAkJCS8qIFdvdWxkIGJlIGdyZWF0IHRvIGNvcHkgdGhpcyBpbiBiaWdnZXIKIAkJCSAqIGNodW5rcy4gIEhvd2V2ZXIsIGZvciB0aGUgc2FrZSBvZgogCQkJICogY29ycmVjdG5lc3Mgd2UgbmVlZCB0byB2ZXJpZnkgZWFjaCBzZWN0b3IKQEAgLTE4MzIsNiArMTg2Niw3IEBACiAJCQkJc2VjdG9yID0gMDsJLyogRm9yY2Ugd3JhcCAqLwogCiAJCQlzdGFydF9zZWMrKzsKKwkJCWVpX2xiYSsrOwogCQkJZGFkZHIgKz0gc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZTsKIAkJCXBwYWdlX29mZnNldCArPSBzaXplb2Yoc3RydWN0IHNkX2RpZl90dXBsZSk7CiAJCX0KQEAgLTE4NTMsNyArMTg4OCw4IEBACiB9CiAKIHN0YXRpYyBpbnQgcmVzcF93cml0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKLQkJICAgICAgdW5zaWduZWQgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCisJCSAgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwLAorCQkgICAgICB1MzIgZWlfbGJhKQogewogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCWludCByZXQ7CkBAIC0xODY0LDcgKzE5MDAsNyBAQAogCiAJLyogRElYICsgVDEwIERJRiAqLwogCWlmIChzY3NpX2RlYnVnX2RpeCAmJiBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKSB7Ci0JCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3dyaXRlKFNDcG50LCBsYmEsIG51bSk7CisJCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKIAogCQlpZiAocHJvdF9yZXQpIHsKIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULCAweDEwLCBwcm90X3JldCk7CkBAIC0yODcyLDExICsyOTA4LDEyIEBACiAKIAljYXNlIFNEX0RJRl9UWVBFMF9QUk9URUNUSU9OOgogCWNhc2UgU0RfRElGX1RZUEUxX1BST1RFQ1RJT046CisJY2FzZSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTjoKIAljYXNlIFNEX0RJRl9UWVBFM19QUk9URUNUSU9OOgogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAic2NzaV9kZWJ1Z19pbml0OiBkaWYgbXVzdCBiZSAwLCAxIG9yIDNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogZGlmIG11c3QgYmUgMCwgMSwgMiBvciAzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zMTIxLDYgKzMxNTgsNyBAQAogCWludCBsZW4sIGs7CiAJdW5zaWduZWQgaW50IG51bTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbGJhOworCXUzMiBlaV9sYmE7CiAJaW50IGVycnN0cyA9IDA7CiAJaW50IHRhcmdldCA9IFNDcG50LT5kZXZpY2UtPmlkOwogCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwID0gTlVMTDsKQEAgLTMyNTQsMTQgKzMyOTIsMzAgQEAKIAljYXNlIFJFQURfMTY6CiAJY2FzZSBSRUFEXzEyOgogCWNhc2UgUkVBRF8xMDoKKwkJLyogUkVBRHsxMCwxMiwxNn0gYW5kIERJRiBUeXBlIDIgYXJlIG5hdHVyYWwgZW5lbWllcyAqLworCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKKwkJICAgIGNtZFsxXSAmIDB4ZTApIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAorCQkJCQlJTlZBTElEX0NPTU1BTkRfT1BDT0RFLCAwKTsKKwkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gfHwKKwkJICAgICBzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTikgJiYKKwkJICAgIChjbWRbMV0gJiAweGUwKSA9PSAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKKworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFJFQURfNjoKK3JlYWQ6CiAJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOwogCQlpZiAoZXJyc3RzKQogCQkJYnJlYWs7CiAJCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCiAJCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0pOwotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7CisJCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtLCAmZWlfbGJhKTsKKwkJZXJyc3RzID0gcmVzcF9yZWFkKFNDcG50LCBsYmEsIG51bSwgZGV2aXAsIGVpX2xiYSk7CiAJCWlmIChpbmpfcmVjb3ZlcmVkICYmICgwID09IGVycnN0cykpIHsKIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgUkVDT1ZFUkVEX0VSUk9SLAogCQkJCQlUSFJFU0hPTERfRVhDRUVERUQsIDApOwpAQCAtMzI4OCwxNCArMzM0MiwzMCBAQAogCWNhc2UgV1JJVEVfMTY6CiAJY2FzZSBXUklURV8xMjoKIAljYXNlIFdSSVRFXzEwOgorCQkvKiBXUklURXsxMCwxMiwxNn0gYW5kIERJRiBUeXBlIDIgYXJlIG5hdHVyYWwgZW5lbWllcyAqLworCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKKwkJICAgIGNtZFsxXSAmIDB4ZTApIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAorCQkJCQlJTlZBTElEX0NPTU1BTkRfT1BDT0RFLCAwKTsKKwkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gfHwKKwkJICAgICBzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTikgJiYKKwkJICAgIChjbWRbMV0gJiAweGUwKSA9PSAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKKworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFdSSVRFXzY6Cit3cml0ZToKIAkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCk7CiAJCWlmIChlcnJzdHMpCiAJCQlicmVhazsKIAkJaWYgKHNjc2lfZGVidWdfZmFrZV9ydykKIAkJCWJyZWFrOwotCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSk7Ci0JCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7CisJCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtLCAmZWlfbGJhKTsKKwkJZXJyc3RzID0gcmVzcF93cml0ZShTQ3BudCwgbGJhLCBudW0sIGRldmlwLCBlaV9sYmEpOwogCQlpZiAoaW5qX3JlY292ZXJlZCAmJiAoMCA9PSBlcnJzdHMpKSB7CiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIFJFQ09WRVJFRF9FUlJPUiwKIAkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKQEAgLTMzNDEsMTUgKzM0MTEsMzggQEAKIAkJCWJyZWFrOwogCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQogCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtKTsKLQkJZXJyc3RzID0gcmVzcF9yZWFkKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSwgJmVpX2xiYSk7CisJCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwLCBlaV9sYmEpOwogCQlpZiAoZXJyc3RzKQogCQkJYnJlYWs7Ci0JCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7CisJCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCwgZWlfbGJhKTsKIAkJaWYgKGVycnN0cykKIAkJCWJyZWFrOwogCQllcnJzdHMgPSByZXNwX3hkd3JpdGVyZWFkKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOwogCQlicmVhazsKKwljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6CisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTikgeworCisJCQlpZiAoKGNtZFsxMF0gJiAweGUwKSA9PSAwKQorCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7CisKKwkJCWlmIChjbWRbOV0gPT0gUkVBRF8zMikgeworCQkJCUJVR19PTihTQ3BudC0+Y21kX2xlbiA8IDMyKTsKKwkJCQlnb3RvIHJlYWQ7CisJCQl9CisKKwkJCWlmIChjbWRbOV0gPT0gV1JJVEVfMzIpIHsKKwkJCQlCVUdfT04oU0NwbnQtPmNtZF9sZW4gPCAzMik7CisJCQkJZ290byB3cml0ZTsKKwkJCX0KKwkJfQorCisJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAorCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCiAJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBPcGNvZGU6IDB4JXggbm90ICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IDg3NzIwNGQuLjFiMDA2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtNzI1LDYgKzcyNSw5IEBACiAJCWNhc2UgTkVFRFNfUkVUUlk6CiAJCWNhc2UgRkFJTEVEOgogCQkJYnJlYWs7CisJCWNhc2UgQUREX1RPX01MUVVFVUU6CisJCQlydG4gPSBORUVEU19SRVRSWTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcnRuID0gRkFJTEVEOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggYzQ0NzgzOC4uMDU0N2E3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtMzE3LDYgKzMxNyw3IEBACiBvdXRfZGV2aWNlX2Rlc3Ryb3k6CiAJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfREVMKTsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2Rldik7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogb3V0OgogCWlmIChkaXNwbGF5X2ZhaWx1cmVfbXNnKQpAQCAtOTU3LDYgKzk1OCw3IEBACiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KQogCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveShzZGV2KTsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2Rldik7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBmZGU1NDUzLi41YzdlYjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTg2NCwxMCArODY0LDYgQEAKIAkJZ290byBjbGVhbl9kZXZpY2U7CiAJfQogCi0JLyogdGFrZSBhIHJlZmVyZW5jZSBmb3IgdGhlIHNkZXZfZGV2OyB0aGlzIGlzCi0JICogcmVsZWFzZWQgYnkgdGhlIHNkZXZfY2xhc3MgLnJlbGVhc2UgKi8KLQlnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0KIAkvKiBjcmVhdGUgcXVldWUgZmlsZXMsIHdoaWNoIG1heSBiZSB3cml0YWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBob3N0ICovCiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5jaGFuZ2VfcXVldWVfZGVwdGgpCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJnNkZXZfYXR0cl9xdWV1ZV9kZXB0aF9ydyk7CkBAIC05MTcsNiArOTEzLDcgQEAKIAogCWRldmljZV9kZWwoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2Rldik7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCiAJcmV0dXJuIGVycm9yOwpAQCAtMTA2NSw3ICsxMDYyLDcgQEAKIAkJICAgICBzZGV2LT5ob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuKTsKIAogCWRldmljZV9pbml0aWFsaXplKCZzZGV2LT5zZGV2X2Rldik7Ci0Jc2Rldi0+c2Rldl9kZXYucGFyZW50ID0gJnNkZXYtPnNkZXZfZ2VuZGV2OworCXNkZXYtPnNkZXZfZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAlzZGV2LT5zZGV2X2Rldi5jbGFzcyA9ICZzZGV2X2NsYXNzOwogCWRldl9zZXRfbmFtZSgmc2Rldi0+c2Rldl9kZXYsICIlZDolZDolZDolZCIsCiAJCSAgICAgc2Rldi0+aG9zdC0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1bik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IGI5ODg4NWQuLmM2ZjcwZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0zNTg2LDYgKzM1ODYsNyBAQAogCiAvKioKICAqIGZjX2JzZ19ob3N0X2Rpc3BhdGNoIC0gcHJvY2VzcyBmYyBob3N0IGJzZyByZXF1ZXN0cyBhbmQgZGlzcGF0Y2ggdG8gTExERAorICogQHE6CQlmYyBob3N0IHJlcXVlc3QgcXVldWUKICAqIEBzaG9zdDoJc2NzaSBob3N0IHJwb3J0IGF0dGFjaGVkIHRvCiAgKiBAam9iOglic2cgam9iIHRvIGJlIHByb2Nlc3NlZAogICovCkBAIC0zNjU1LDYgKzM2NTYsNyBAQAogZmFpbF9ob3N0X21zZzoKIAkvKiByZXR1cm4gdGhlIGVycm5vIGZhaWx1cmUgY29kZSBhcyB0aGUgb25seSBzdGF0dXMgKi8KIAlCVUdfT04oam9iLT5yZXBseV9sZW4gPCBzaXplb2YodWludDMyX3QpKTsKKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJldDsKIAlqb2ItPnJlcGx5X2xlbiA9IHNpemVvZih1aW50MzJfdCk7CiAJZmNfYnNnX2pvYmRvbmUoam9iKTsKQEAgLTM2OTMsNiArMzY5NSw3IEBACiAKIC8qKgogICogZmNfYnNnX3Jwb3J0X2Rpc3BhdGNoIC0gcHJvY2VzcyBycG9ydCBic2cgcmVxdWVzdHMgYW5kIGRpc3BhdGNoIHRvIExMREQKKyAqIEBxOgkJcnBvcnQgcmVxdWVzdCBxdWV1ZQogICogQHNob3N0OglzY3NpIGhvc3QgcnBvcnQgYXR0YWNoZWQgdG8KICAqIEBycG9ydDoJcnBvcnQgcmVxdWVzdCBkZXN0aW5lZCB0bwogICogQGpvYjoJYnNnIGpvYiB0byBiZSBwcm9jZXNzZWQKQEAgLTM3MzksNiArMzc0Miw3IEBACiBmYWlsX3Jwb3J0X21zZzoKIAkvKiByZXR1cm4gdGhlIGVycm5vIGZhaWx1cmUgY29kZSBhcyB0aGUgb25seSBzdGF0dXMgKi8KIAlCVUdfT04oam9iLT5yZXBseV9sZW4gPCBzaXplb2YodWludDMyX3QpKTsKKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJldDsKIAlqb2ItPnJlcGx5X2xlbiA9IHNpemVvZih1aW50MzJfdCk7CiAJZmNfYnNnX2pvYmRvbmUoam9iKTsKQEAgLTM3OTUsNiArMzc5OSw3IEBACiAJCS8qIGNoZWNrIGlmIHdlIGhhdmUgdGhlIG1zZ2NvZGUgdmFsdWUgYXQgbGVhc3QgKi8KIAkJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPCBzaXplb2YodWludDMyX3QpKSB7CiAJCQlCVUdfT04oam9iLT5yZXBseV9sZW4gPCBzaXplb2YodWludDMyX3QpKTsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSAtRU5PTVNHOwogCQkJam9iLT5yZXBseV9sZW4gPSBzaXplb2YodWludDMyX3QpOwogCQkJZmNfYnNnX2pvYmRvbmUoam9iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggOGRkOTZkYy4uOTA5M2M3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTExNiw2ICsxMTYsOSBAQAogICogb2JqZWN0IGFmdGVyIGxhc3QgcHV0KSAqLwogc3RhdGljIERFRklORV9NVVRFWChzZF9yZWZfbXV0ZXgpOwogCitzdHJ1Y3Qga21lbV9jYWNoZSAqc2RfY2RiX2NhY2hlOworbWVtcG9vbF90ICpzZF9jZGJfcG9vbDsKKwogc3RhdGljIGNvbnN0IGNoYXIgKnNkX2NhY2hlX3R5cGVzW10gPSB7CiAJIndyaXRlIHRocm91Z2giLCAibm9uZSIsICJ3cml0ZSBiYWNrIiwKIAkid3JpdGUgYmFjaywgbm8gcmVhZCAoZGFmdCkiCkBAIC0zNzAsNiArMzczLDMxIEBACiAJbXV0ZXhfdW5sb2NrKCZzZF9yZWZfbXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBzZF9wcm90X29wKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHVuc2lnbmVkIGludCBkaWYpCit7CisJdW5zaWduZWQgaW50IHByb3Rfb3AgPSBTQ1NJX1BST1RfTk9STUFMOworCXVuc2lnbmVkIGludCBkaXggPSBzY3NpX3Byb3Rfc2dfY291bnQoc2NtZCk7CisKKwlpZiAoc2NtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCWlmIChkaWYgJiYgZGl4KQorCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX1BBU1M7CisJCWVsc2UgaWYgKGRpZiAmJiAhZGl4KQorCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX1NUUklQOworCQllbHNlIGlmICghZGlmICYmIGRpeCkKKwkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9JTlNFUlQ7CisJfSBlbHNlIHsKKwkJaWYgKGRpZiAmJiBkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX1BBU1M7CisJCWVsc2UgaWYgKGRpZiAmJiAhZGl4KQorCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9XUklURV9JTlNFUlQ7CisJCWVsc2UgaWYgKCFkaWYgJiYgZGl4KQorCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9XUklURV9TVFJJUDsKKwl9CisKKwlzY3NpX3NldF9wcm90X29wKHNjbWQsIHByb3Rfb3ApOworCXNjc2lfc2V0X3Byb3RfdHlwZShzY21kLCBkaWYpOworfQorCiAvKioKICAqCXNkX2luaXRfY29tbWFuZCAtIGJ1aWxkIGEgc2NzaSAocmVhZCBvciB3cml0ZSkgY29tbWFuZCBmcm9tCiAgKglpbmZvcm1hdGlvbiBpbiB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUuCkBAIC0zODgsNiArNDE2LDcgQEAKIAlzZWN0b3JfdCB0aHJlc2hvbGQ7CiAJdW5zaWduZWQgaW50IHRoaXNfY291bnQgPSBibGtfcnFfc2VjdG9ycyhycSk7CiAJaW50IHJldCwgaG9zdF9kaWY7CisJdW5zaWduZWQgY2hhciBwcm90ZWN0OwogCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgewogCQlyZXQgPSBzY3NpX3NldHVwX2Jsa19wY19jbW5kKHNkcCwgcnEpOwpAQCAtNTIwLDEzICs1NDksNDkgQEAKIAkvKiBTZXQgUkRQUk9URUNUL1dSUFJPVEVDVCBpZiBkaXNrIGlzIGZvcm1hdHRlZCB3aXRoIERJRiAqLwogCWhvc3RfZGlmID0gc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlKTsKIAlpZiAoaG9zdF9kaWYpCi0JCVNDcG50LT5jbW5kWzFdID0gMSA8PCA1OworCQlwcm90ZWN0ID0gMSA8PCA1OwogCWVsc2UKLQkJU0NwbnQtPmNtbmRbMV0gPSAwOworCQlwcm90ZWN0ID0gMDsKIAotCWlmIChibG9jayA+IDB4ZmZmZmZmZmYpIHsKKwlpZiAoaG9zdF9kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04pIHsKKwkJU0NwbnQtPmNtbmQgPSBtZW1wb29sX2FsbG9jKHNkX2NkYl9wb29sLCBHRlBfQVRPTUlDKTsKKworCQlpZiAodW5saWtlbHkoU0NwbnQtPmNtbmQgPT0gTlVMTCkpIHsKKwkJCXJldCA9IEJMS1BSRVBfREVGRVI7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCVNDcG50LT5jbWRfbGVuID0gU0RfRVhUX0NEQl9TSVpFOworCQltZW1zZXQoU0NwbnQtPmNtbmQsIDAsIFNDcG50LT5jbWRfbGVuKTsKKwkJU0NwbnQtPmNtbmRbMF0gPSBWQVJJQUJMRV9MRU5HVEhfQ01EOworCQlTQ3BudC0+Y21uZFs3XSA9IDB4MTg7CisJCVNDcG50LT5jbW5kWzldID0gKHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEKSA/IFJFQURfMzIgOiBXUklURV8zMjsKKwkJU0NwbnQtPmNtbmRbMTBdID0gcHJvdGVjdCB8IChibGtfZnVhX3JxKHJxKSA/IDB4OCA6IDApOworCisJCS8qIExCQSAqLworCQlTQ3BudC0+Y21uZFsxMl0gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNTYpICYgMHhmZiA6IDA7CisJCVNDcG50LT5jbW5kWzEzXSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA0OCkgJiAweGZmIDogMDsKKwkJU0NwbnQtPmNtbmRbMTRdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDQwKSAmIDB4ZmYgOiAwOworCQlTQ3BudC0+Y21uZFsxNV0gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gMzIpICYgMHhmZiA6IDA7CisJCVNDcG50LT5jbW5kWzE2XSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gMjQpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMTddID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAxNikgJiAweGZmOworCQlTQ3BudC0+Y21uZFsxOF0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDgpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMTldID0gKHVuc2lnbmVkIGNoYXIpIGJsb2NrICYgMHhmZjsKKworCQkvKiBFeHBlY3RlZCBJbmRpcmVjdCBMQkEgKi8KKwkJU0NwbnQtPmNtbmRbMjBdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAyNCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFsyMV0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDE2KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzIyXSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gOCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFsyM10gPSAodW5zaWduZWQgY2hhcikgYmxvY2sgJiAweGZmOworCisJCS8qIFRyYW5zZmVyIGxlbmd0aCAqLworCQlTQ3BudC0+Y21uZFsyOF0gPSAodW5zaWduZWQgY2hhcikgKHRoaXNfY291bnQgPj4gMjQpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMjldID0gKHVuc2lnbmVkIGNoYXIpICh0aGlzX2NvdW50ID4+IDE2KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzMwXSA9ICh1bnNpZ25lZCBjaGFyKSAodGhpc19jb3VudCA+PiA4KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzMxXSA9ICh1bnNpZ25lZCBjaGFyKSB0aGlzX2NvdW50ICYgMHhmZjsKKwl9IGVsc2UgaWYgKGJsb2NrID4gMHhmZmZmZmZmZikgewogCQlTQ3BudC0+Y21uZFswXSArPSBSRUFEXzE2IC0gUkVBRF82OwotCQlTQ3BudC0+Y21uZFsxXSB8PSBibGtfZnVhX3JxKHJxKSA/IDB4OCA6IDA7CisJCVNDcG50LT5jbW5kWzFdID0gcHJvdGVjdCB8IChibGtfZnVhX3JxKHJxKSA/IDB4OCA6IDApOwogCQlTQ3BudC0+Y21uZFsyXSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA1NikgJiAweGZmIDogMDsKIAkJU0NwbnQtPmNtbmRbM10gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNDgpICYgMHhmZiA6IDA7CiAJCVNDcG50LT5jbW5kWzRdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDQwKSAmIDB4ZmYgOiAwOwpAQCAtNTQ3LDcgKzYxMiw3IEBACiAJCQl0aGlzX2NvdW50ID0gMHhmZmZmOwogCiAJCVNDcG50LT5jbW5kWzBdICs9IFJFQURfMTAgLSBSRUFEXzY7Ci0JCVNDcG50LT5jbW5kWzFdIHw9IGJsa19mdWFfcnEocnEpID8gMHg4IDogMDsKKwkJU0NwbnQtPmNtbmRbMV0gPSBwcm90ZWN0IHwgKGJsa19mdWFfcnEocnEpID8gMHg4IDogMCk7CiAJCVNDcG50LT5jbW5kWzJdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAyNCkgJiAweGZmOwogCQlTQ3BudC0+Y21uZFszXSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gMTYpICYgMHhmZjsKIAkJU0NwbnQtPmNtbmRbNF0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDgpICYgMHhmZjsKQEAgLTU3OCw4ICs2NDMsNyBAQAogCiAJLyogSWYgRElGIG9yIERJWCBpcyBlbmFibGVkLCB0ZWxsIEhCQSBob3cgdG8gaGFuZGxlIHJlcXVlc3QgKi8KIAlpZiAoaG9zdF9kaWYgfHwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkKLQkJc2RfZGlmX29wKFNDcG50LCBob3N0X2RpZiwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSwKLQkJCSAgc2RrcC0+cHJvdGVjdGlvbl90eXBlKTsKKwkJc2RfcHJvdF9vcChTQ3BudCwgaG9zdF9kaWYpOwogCiAJLyoKIAkgKiBXZSBzaG91bGRuJ3QgZGlzY29ubmVjdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2VjdG9yLCBzbyB3aXRoIGEgZHVtYgpAQCAtMTAyMyw2ICsxMDg3LDcgQEAKIAlpbnQgcmVzdWx0ID0gU0NwbnQtPnJlc3VsdDsKIAl1bnNpZ25lZCBpbnQgZ29vZF9ieXRlcyA9IHJlc3VsdCA/IDAgOiBzY3NpX2J1ZmZsZW4oU0NwbnQpOwogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gc2NzaV9kaXNrKFNDcG50LT5yZXF1ZXN0LT5ycV9kaXNrKTsKIAlpbnQgc2Vuc2VfdmFsaWQgPSAwOwogCWludCBzZW5zZV9kZWZlcnJlZCA9IDA7CiAKQEAgLTEwODQsNiArMTE0OSwxMCBAQAogCWlmIChycV9kYXRhX2RpcihTQ3BudC0+cmVxdWVzdCkgPT0gUkVBRCAmJiBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKQogCQlzZF9kaWZfY29tcGxldGUoU0NwbnQsIGdvb2RfYnl0ZXMpOwogCisJaWYgKHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZGtwLT5kZXZpY2UtPmhvc3QsIHNka3AtPnByb3RlY3Rpb25fdHlwZSkKKwkgICAgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYgU0NwbnQtPmNtbmQgIT0gU0NwbnQtPnJlcXVlc3QtPmNtZCkKKwkJbWVtcG9vbF9mcmVlKFNDcG50LT5jbW5kLCBzZF9jZGJfcG9vbCk7CisKIAlyZXR1cm4gZ29vZF9ieXRlczsKIH0KIApAQCAtMTIzOCwzNCArMTMwNywyOCBAQAogCXU4IHR5cGU7CiAKIAlpZiAoc2NzaV9kZXZpY2VfcHJvdGVjdGlvbihzZHApID09IDAgfHwgKGJ1ZmZlclsxMl0gJiAxKSA9PSAwKQotCQl0eXBlID0gMDsKLQllbHNlCi0JCXR5cGUgPSAoKGJ1ZmZlclsxMl0gPj4gMSkgJiA3KSArIDE7IC8qIFBfVFlQRSAwID0gVHlwZSAxICovCisJCXJldHVybjsKKworCXR5cGUgPSAoKGJ1ZmZlclsxMl0gPj4gMSkgJiA3KSArIDE7IC8qIFBfVFlQRSAwID0gVHlwZSAxICovCisKKwlpZiAodHlwZSA9PSBzZGtwLT5wcm90ZWN0aW9uX3R5cGUgfHwgIXNka3AtPmZpcnN0X3NjYW4pCisJCXJldHVybjsKIAogCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IHR5cGU7CiAKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFNEX0RJRl9UWVBFMF9QUk9URUNUSU9OOgotCWNhc2UgU0RfRElGX1RZUEUxX1BST1RFQ1RJT046Ci0JY2FzZSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTjoKLQkJYnJlYWs7Ci0KLQljYXNlIFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OOgotCQlzZF9wcmludGsoS0VSTl9FUlIsIHNka3AsICJmb3JtYXR0ZWQgd2l0aCBESUYgVHlwZSAyICIJXAotCQkJICAicHJvdGVjdGlvbiB3aGljaCBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuICIJXAotCQkJICAiRGlzYWJsaW5nIGRpc2shXG4iKTsKLQkJZ290byBkaXNhYmxlOwotCi0JZGVmYXVsdDoKLQkJc2RfcHJpbnRrKEtFUk5fRVJSLCBzZGtwLCAiZm9ybWF0dGVkIHdpdGggdW5rbm93biAiCVwKLQkJCSAgInByb3RlY3Rpb24gdHlwZSAlZC4gRGlzYWJsaW5nIGRpc2shXG4iLCB0eXBlKTsKLQkJZ290byBkaXNhYmxlOworCWlmICh0eXBlID4gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pIHsKKwkJc2RfcHJpbnRrKEtFUk5fRVJSLCBzZGtwLCAiZm9ybWF0dGVkIHdpdGggdW5zdXBwb3J0ZWQgIglcCisJCQkgICJwcm90ZWN0aW9uIHR5cGUgJXUuIERpc2FibGluZyBkaXNrIVxuIiwgdHlwZSk7CisJCXNka3AtPmNhcGFjaXR5ID0gMDsKKwkJcmV0dXJuOwogCX0KIAotCXJldHVybjsKLQotZGlzYWJsZToKLQlzZGtwLT5jYXBhY2l0eSA9IDA7CisJaWYgKHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZHAtPmhvc3QsIHR5cGUpKQorCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCQkgICJFbmFibGluZyBESUYgVHlwZSAldSBwcm90ZWN0aW9uXG4iLCB0eXBlKTsKKwllbHNlCisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCSAgIkRpc2FibGluZyBESUYgVHlwZSAldSBwcm90ZWN0aW9uXG4iLCB0eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVhZF9jYXBhY2l0eV9lcnJvcihzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCwKQEAgLTIzMDAsOCArMjM2MywyNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9jbGFzczsKIAorCXNkX2NkYl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJzZF9leHRfY2RiIiwgU0RfRVhUX0NEQl9TSVpFLAorCQkJCQkgMCwgMCwgTlVMTCk7CisJaWYgKCFzZF9jZGJfY2FjaGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzZDogY2FuJ3QgaW5pdCBleHRlbmRlZCBjZGIgY2FjaGVcbiIpOworCQlnb3RvIGVycl9vdXRfY2xhc3M7CisJfQorCisJc2RfY2RiX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woU0RfTUVNUE9PTF9TSVpFLCBzZF9jZGJfY2FjaGUpOworCWlmICghc2RfY2RiX3Bvb2wpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzZDogY2FuJ3QgaW5pdCBleHRlbmRlZCBjZGIgcG9vbFxuIik7CisJCWdvdG8gZXJyX291dF9jYWNoZTsKKwl9CisKIAlyZXR1cm4gMDsKIAorZXJyX291dF9jYWNoZToKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc2RfY2RiX2NhY2hlKTsKKwogZXJyX291dF9jbGFzczoKIAljbGFzc191bnJlZ2lzdGVyKCZzZF9kaXNrX2NsYXNzKTsKIGVycl9vdXQ6CkBAIC0yMzIxLDYgKzI0MDAsOSBAQAogCiAJU0NTSV9MT0dfSExRVUVVRSgzLCBwcmludGsoImV4aXRfc2Q6IGV4aXRpbmcgc2QgZHJpdmVyXG4iKSk7CiAKKwltZW1wb29sX2Rlc3Ryb3koc2RfY2RiX3Bvb2wpOworCWttZW1fY2FjaGVfZGVzdHJveShzZF9jZGJfY2FjaGUpOworCiAJc2NzaV91bnJlZ2lzdGVyX2RyaXZlcigmc2RfdGVtcGxhdGUuZ2VuZHJ2KTsKIAljbGFzc191bnJlZ2lzdGVyKCZzZF9kaXNrX2NsYXNzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmggYi9kcml2ZXJzL3Njc2kvc2QuaAppbmRleCA4NDc0YjViLi5lMzc0ODA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuaAorKysgYi9kcml2ZXJzL3Njc2kvc2QuaApAQCAtMzcsNiArMzcsMTEgQEAKICAqLwogI2RlZmluZSBTRF9MQVNUX0JVR0dZX1NFQ1RPUlMJOAogCitlbnVtIHsKKwlTRF9FWFRfQ0RCX1NJWkUgPSAzMiwJLyogRXh0ZW5kZWQgQ0RCIHNpemUgKi8KKwlTRF9NRU1QT09MX1NJWkUgPSAyLAkvKiBDREIgcG9vbCBzaXplICovCit9OworCiBzdHJ1Y3Qgc2NzaV9kaXNrIHsKIAlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRyaXZlcjsJLyogYWx3YXlzICZzZF90ZW1wbGF0ZSAqLwogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlOwpAQCAtMTAxLDE2ICsxMDYsMTIgQEAKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOVEVHUklUWQogCi1leHRlcm4gdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHNkX2RpZl9jb25maWdfaG9zdChzdHJ1Y3Qgc2NzaV9kaXNrICopOwogZXh0ZXJuIGludCBzZF9kaWZfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbXBsZXRlKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50KTsKIAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqY21kLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjKQotewotfQogc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9jb25maWdfaG9zdChzdHJ1Y3Qgc2NzaV9kaXNrICpkaXNrKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCmluZGV4IDgyZjE0YTkuLjg4ZGE5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYworKysgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKQEAgLTMyMCwxNSArMzIwLDYgQEAKIAkJZGlmID0gMDsgZGl4ID0gMTsKIAl9CiAKLQlpZiAodHlwZSkgewotCQlpZiAoZGlmKQotCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAotCQkJCSAgIkVuYWJsaW5nIERJRiBUeXBlICVkIHByb3RlY3Rpb25cbiIsIHR5cGUpOwotCQllbHNlCi0JCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCi0JCQkJICAiRGlzYWJsaW5nIERJRiBUeXBlICVkIHByb3RlY3Rpb25cbiIsIHR5cGUpOwotCX0KLQogCWlmICghZGl4KQogCQlyZXR1cm47CiAKQEAgLTM2MCw2MiArMzUxLDYgQEAKIH0KIAogLyoKLSAqIERJRiBETUEgb3BlcmF0aW9uIG1hZ2ljIGRlY29kZXIgcmluZy4KLSAqLwotdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZiwgdW5zaWduZWQgaW50IGRpeCwgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0JaW50IGNzdW1fY29udmVydCwgcHJvdF9vcDsKLQotCXByb3Rfb3AgPSAwOwotCi0JLyogQ29udmVydCBjaGVja3N1bT8gKi8KLQlpZiAoc2NzaV9ob3N0X2dldF9ndWFyZChzY21kLT5kZXZpY2UtPmhvc3QpICE9IFNIT1NUX0RJWF9HVUFSRF9DUkMpCi0JCWNzdW1fY29udmVydCA9IDE7Ci0JZWxzZQotCQljc3VtX2NvbnZlcnQgPSAwOwotCi0JQlVHX09OKGRpZiAmJiAoc2NtZC0+Y21uZFswXSA9PSBSRUFEXzYgfHwgc2NtZC0+Y21uZFswXSA9PSBXUklURV82KSk7Ci0KLQlzd2l0Y2ggKHNjbWQtPmNtbmRbMF0pIHsKLQljYXNlIFJFQURfNjoKLQljYXNlIFJFQURfMTA6Ci0JY2FzZSBSRUFEXzEyOgotCWNhc2UgUkVBRF8xNjoKLQkJaWYgKGRpZiAmJiBkaXgpCi0JCQlpZiAoY3N1bV9jb252ZXJ0KQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9DT05WRVJUOwotCQkJZWxzZQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9QQVNTOwotCQllbHNlIGlmIChkaWYgJiYgIWRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9TVFJJUDsKLQkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfSU5TRVJUOwotCi0JCWJyZWFrOwotCi0JY2FzZSBXUklURV82OgotCWNhc2UgV1JJVEVfMTA6Ci0JY2FzZSBXUklURV8xMjoKLQljYXNlIFdSSVRFXzE2OgotCQlpZiAoZGlmICYmIGRpeCkKLQkJCWlmIChjc3VtX2NvbnZlcnQpCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9XUklURV9DT05WRVJUOwotCQkJZWxzZQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfUEFTUzsKLQkJZWxzZSBpZiAoZGlmICYmICFkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX0lOU0VSVDsKLQkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX1NUUklQOwotCi0JCWJyZWFrOwotCX0KLQotCXNjc2lfc2V0X3Byb3Rfb3Aoc2NtZCwgcHJvdF9vcCk7Ci0JaWYgKGRpZikKLQkJc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIHR5cGUpOwotfQotCi0vKgogICogVGhlIHZpcnR1YWwgc3RhcnQgc2VjdG9yIGlzIHRoZSBvbmUgdGhhdCB3YXMgb3JpZ2luYWxseSBzdWJtaXR0ZWQKICAqIGJ5IHRoZSBibG9jayBsYXllci4JRHVlIHRvIHBhcnRpdGlvbmluZywgTUQvRE0gY2xvbmluZywgZXRjLiB0aGUKICAqIGFjdHVhbCBwaHlzaWNhbCBzdGFydCBzZWN0b3IgaXMgbGlrZWx5IHRvIGJlIGRpZmZlcmVudC4gIFJlbWFwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDg0OGI1OTQuLjA0MGY3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xMTg1LDcgKzExODUsNyBAQAogCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2dfbW1hcF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNnX21tYXBfdm1fb3BzID0gewogCS5mYXVsdCA9IHNnX3ZtYV9mYXVsdCwKIH07CiAKQEAgLTEzMTcsNyArMTMxNyw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkucmVhZCA9IHNnX3JlYWQsCiAJLndyaXRlID0gc2dfd3JpdGUsCkBAIC0xNzA4LDExICsxNzA4LDYgQEAKIAlTZ19zY2F0dGVyX2hvbGQgKnJlcV9zY2hwID0gJnNycC0+ZGF0YTsKIAogCVNDU0lfTE9HX1RJTUVPVVQoNCwgcHJpbnRrKCJzZ19maW5pc2hfcmVtX3JlcTogcmVzX3VzZWQ9JWRcbiIsIChpbnQpIHNycC0+cmVzX3VzZWQpKTsKLQlpZiAoc3JwLT5yZXNfdXNlZCkKLQkJc2dfdW5saW5rX3Jlc2VydmUoc2ZwLCBzcnApOwotCWVsc2UKLQkJc2dfcmVtb3ZlX3NjYXQocmVxX3NjaHApOwotCiAJaWYgKHNycC0+cnEpIHsKIAkJaWYgKHNycC0+YmlvKQogCQkJcmV0ID0gYmxrX3JxX3VubWFwX3VzZXIoc3JwLT5iaW8pOwpAQCAtMTcyMCw2ICsxNzE1LDExIEBACiAJCWJsa19wdXRfcmVxdWVzdChzcnAtPnJxKTsKIAl9CiAKKwlpZiAoc3JwLT5yZXNfdXNlZCkKKwkJc2dfdW5saW5rX3Jlc2VydmUoc2ZwLCBzcnApOworCWVsc2UKKwkJc2dfcmVtb3ZlX3NjYXQocmVxX3NjaHApOworCiAJc2dfcmVtb3ZlX3JlcXVlc3Qoc2ZwLCBzcnApOwogCiAJcmV0dXJuIHJldDsKQEAgLTIxOTQsOSArMjE5NCwxMSBAQAogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX2FkaW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIHNzaXplX3Qgc2dfcHJvY193cml0ZV9hZGlvKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWRpb19mb3BzID0gewotCS8qIC5vd25lciwgLnJlYWQgYW5kIC5sbHNlZWsgYWRkZWQgaW4gc2dfcHJvY19pbml0KCkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFkaW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fYWRpbywKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLndyaXRlID0gc2dfcHJvY193cml0ZV9hZGlvLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwpAQCAtMjIwNCwyMyArMjIwNiwzMiBAQAogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX2RyZXNzeihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgc3NpemVfdCBzZ19wcm9jX3dyaXRlX2RyZXNzeihzdHJ1Y3QgZmlsZSAqZmlscCwgCiAJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJlc3N6X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcmVzc3pfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fZHJlc3N6LAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkud3JpdGUgPSBzZ19wcm9jX3dyaXRlX2RyZXNzeiwKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBzZ19wcm9jX3NlcV9zaG93X3ZlcnNpb24oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19zaW5nbGVfb3Blbl92ZXJzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fdmVyc2lvbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgc2dfcHJvY19zZXFfc2hvd19kZXZoZHIoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19zaW5nbGVfb3Blbl9kZXZoZHIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2aGRyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZoZHJfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fZGV2aGRyLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIApAQCAtMjIyOSw4ICsyMjQwLDExIEBACiBzdGF0aWMgdm9pZCAqIGRldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcyk7CiBzdGF0aWMgdm9pZCAqIGRldl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKTsKIHN0YXRpYyB2b2lkIGRldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfb3Blbl9kZXYsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZXZfc2VxX29wcyA9IHsKQEAgLTIyNDIsOCArMjI1NiwxMSBAQAogCiBzdGF0aWMgaW50IHNnX3Byb2Nfc2VxX3Nob3dfZGV2c3RycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX29wZW5fZGV2c3RycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZzdHJzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZzdHJzX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBzZ19wcm9jX29wZW5fZGV2c3RycywKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldnN0cnNfc2VxX29wcyA9IHsKQEAgLTIyNTUsOCArMjI3MiwxMSBAQAogCiBzdGF0aWMgaW50IHNnX3Byb2Nfc2VxX3Nob3dfZGVidWcoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19vcGVuX2RlYnVnKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19vcGVuX2RlYnVnLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGVidWdfc2VxX29wcyA9IHsKQEAgLTIyNjksNyArMjI4OSw3IEBACiAKIHN0cnVjdCBzZ19wcm9jX2xlYWYgewogCWNvbnN0IGNoYXIgKiBuYW1lOwotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBmb3BzOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBmb3BzOwogfTsKIAogc3RhdGljIHN0cnVjdCBzZ19wcm9jX2xlYWYgc2dfcHJvY19sZWFmX2FycltdID0gewpAQCAtMjI5NSw5ICsyMzE1LDYgQEAKIAlmb3IgKGsgPSAwOyBrIDwgbnVtX2xlYXZlczsgKytrKSB7CiAJCWxlYWYgPSAmc2dfcHJvY19sZWFmX2FycltrXTsKIAkJbWFzayA9IGxlYWYtPmZvcHMtPndyaXRlID8gU19JUlVHTyB8IFNfSVdVU1IgOiBTX0lSVUdPOwotCQlsZWFmLT5mb3BzLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlsZWFmLT5mb3BzLT5yZWFkID0gc2VxX3JlYWQ7Ci0JCWxlYWYtPmZvcHMtPmxsc2VlayA9IHNlcV9sc2VlazsKIAkJcHJvY19jcmVhdGUobGVhZi0+bmFtZSwgbWFzaywgc2dfcHJvY19zZ3AsIGxlYWYtPmZvcHMpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggZWI2MWY3YS4uZDZmMzQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTY4NCwxNCArNjg0LDIwIEBACiAJCWNkLT5jYXBhY2l0eSA9IDB4MWZmZmZmOwogCQlzZWN0b3Jfc2l6ZSA9IDIwNDg7CS8qIEEgZ3Vlc3MsIGp1c3QgaW4gY2FzZSAqLwogCX0gZWxzZSB7Ci0jaWYgMAotCQlpZiAoY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbigmY2QtPmNkaSwKLQkJCQkJICAgJmNkLT5jYXBhY2l0eSkpCi0jZW5kaWYKLQkJCWNkLT5jYXBhY2l0eSA9IDEgKyAoKGJ1ZmZlclswXSA8PCAyNCkgfAotCQkJCQkJICAgIChidWZmZXJbMV0gPDwgMTYpIHwKLQkJCQkJCSAgICAoYnVmZmVyWzJdIDw8IDgpIHwKLQkJCQkJCSAgICBidWZmZXJbM10pOworCQlsb25nIGxhc3Rfd3JpdHRlbjsKKworCQljZC0+Y2FwYWNpdHkgPSAxICsgKChidWZmZXJbMF0gPDwgMjQpIHwgKGJ1ZmZlclsxXSA8PCAxNikgfAorCQkJCSAgICAoYnVmZmVyWzJdIDw8IDgpIHwgYnVmZmVyWzNdKTsKKwkJLyoKKwkJICogUkVBRF9DQVBBQ0lUWSBkb2Vzbid0IHJldHVybiB0aGUgY29ycmVjdCBzaXplIG9uCisJCSAqIGNlcnRhaW4gVURGIG1lZGlhLiAgSWYgbGFzdF93cml0dGVuIGlzIGxhcmdlciwgdXNlCisJCSAqIGl0IGluc3RlYWQuCisJCSAqCisJCSAqIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY4CisJCSAqLworCQlpZiAoIWNkcm9tX2dldF9sYXN0X3dyaXR0ZW4oJmNkLT5jZGksICZsYXN0X3dyaXR0ZW4pKQorCQkJY2QtPmNhcGFjaXR5ID0gbWF4X3QobG9uZywgY2QtPmNhcGFjaXR5LCBsYXN0X3dyaXR0ZW4pOworCiAJCXNlY3Rvcl9zaXplID0gKGJ1ZmZlcls0XSA8PCAyNCkgfAogCQkgICAgKGJ1ZmZlcls1XSA8PCAxNikgfCAoYnVmZmVyWzZdIDw8IDgpIHwgYnVmZmVyWzddOwogCQlzd2l0Y2ggKHNlY3Rvcl9zaXplKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IGIzM2QwNDIuLjEyZDU4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC0yODU5LDExICsyODU5LDggQEAKIAkJCWlvY3RsX3Jlc3VsdCA9IHN0X2ludF9pb2N0bChTVHAsIE1UQlNGLCAxKTsKIAogCQlpZiAoY21kX2luID09IE1UU0VUQkxLIHx8IGNtZF9pbiA9PSBTRVRfREVOU19BTkRfQkxLKSB7Ci0JCQlpbnQgb2xkX2Jsb2NrX3NpemUgPSBTVHAtPmJsb2NrX3NpemU7CiAJCQlTVHAtPmJsb2NrX3NpemUgPSBhcmcgJiBNVF9TVF9CTEtTSVpFX01BU0s7CiAJCQlpZiAoU1RwLT5ibG9ja19zaXplICE9IDApIHsKLQkJCQlpZiAob2xkX2Jsb2NrX3NpemUgPT0gMCkKLQkJCQkJbm9ybWFsaXplX2J1ZmZlcihTVHAtPmJ1ZmZlcik7CiAJCQkJKFNUcC0+YnVmZmVyKS0+YnVmZmVyX2Jsb2NrcyA9CiAJCQkJICAgIChTVHAtPmJ1ZmZlciktPmJ1ZmZlcl9zaXplIC8gU1RwLT5ibG9ja19zaXplOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDIyMDk2MjAuLjczN2I0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTY0LDYgKzY0LDggQEAKIAlyZXR1cm4gKHNlcmlhbDgyNTBfcmVnLm1pbm9yIC0gNjQpICsgcG9ydC0+bGluZTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBza2lwX3R4ZW5fdGVzdDsgLyogZm9yY2Ugc2tpcCBvZiB0eGVuIHRlc3QgYXQgaW5pdCB0aW1lICovCisKIC8qCiAgKiBEZWJ1Z2dpbmcuCiAgKi8KQEAgLTEwODcsNyArMTA4OSw3IEBACiAJaWYgKCF1cC0+cG9ydC5pb2Jhc2UgJiYgIXVwLT5wb3J0Lm1hcGJhc2UgJiYgIXVwLT5wb3J0Lm1lbWJhc2UpCiAJCXJldHVybjsKIAotCURFQlVHX0FVVE9DT05GKCJ0dHlTJWQ6IGF1dG9jb25mICgweCUwNHgsIDB4JXApOiAiLAorCURFQlVHX0FVVE9DT05GKCJ0dHlTJWQ6IGF1dG9jb25mICgweCUwNGx4LCAweCVwKTogIiwKIAkJICAgICAgIHNlcmlhbF9pbmRleCgmdXAtPnBvcnQpLCB1cC0+cG9ydC5pb2Jhc2UsIHVwLT5wb3J0Lm1lbWJhc2UpOwogCiAJLyoKQEAgLTIxMDgsNyArMjExMCw3IEBACiAJICAgaXMgdmFyaWFibGUuIFNvLCBsZXQncyBqdXN0IGRvbid0IHRlc3QgaWYgd2UgcmVjZWl2ZQogCSAgIFRYIGlycS4gVGhpcyB3YXksIHdlJ2xsIG5ldmVyIGVuYWJsZSBVQVJUX0JVR19UWEVOLgogCSAqLwotCWlmICh1cC0+cG9ydC5mbGFncyAmIFVQRl9OT19UWEVOX1RFU1QpCisJaWYgKHNraXBfdHhlbl90ZXN0IHx8IHVwLT5wb3J0LmZsYWdzICYgVVBGX05PX1RYRU5fVEVTVCkKIAkJZ290byBkb250X3Rlc3RfdHhfZW47CiAKIAkvKgpAQCAtMzI0OCw2ICszMjUwLDkgQEAKIG1vZHVsZV9wYXJhbShucl91YXJ0cywgdWludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5yX3VhcnRzLCAiTWF4aW11bSBudW1iZXIgb2YgVUFSVHMgc3VwcG9ydGVkLiAoMS0iIF9fTU9EVUxFX1NUUklORyhDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFMpICIpIik7CiAKK21vZHVsZV9wYXJhbShza2lwX3R4ZW5fdGVzdCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNraXBfdHhlbl90ZXN0LCAiU2tpcCBjaGVja2luZyBmb3IgdGhlIFRYRU4gYnVnIGF0IGluaXQgdGltZSIpOworCiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX1JTQQogbW9kdWxlX3BhcmFtX2FycmF5KHByb2JlX3JzYSwgdWxvbmcsICZwcm9iZV9yc2FfY291bnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwcm9iZV9yc2EsICJQcm9iZSBJL08gcG9ydHMgZm9yIFJTQSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggZTcxMDhlNy4uYjI4YWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC0xNTYxLDExICsxNTYxLDE2IEBACiAJcGJuX2V4YXJfWFIxN0MxNTIsCiAJcGJuX2V4YXJfWFIxN0MxNTQsCiAJcGJuX2V4YXJfWFIxN0MxNTgsCisJcGJuX2V4YXJfaWJtX3NhdHVybiwKIAlwYm5fcGFzZW1pXzE2ODJNLAogCXBibl9uaTg0MzBfMiwKIAlwYm5fbmk4NDMwXzQsCiAJcGJuX25pODQzMF84LAogCXBibl9uaTg0MzBfMTYsCisJcGJuX0FERElEQVRBX1BDSWVfMV8zOTA2MjUwLAorCXBibl9BRERJREFUQV9QQ0llXzJfMzkwNjI1MCwKKwlwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTAsCisJcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwLAogfTsKIAogLyoKQEAgLTIxNDYsNiArMjE1MSwxMyBAQAogCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAogCQkudWFydF9vZmZzZXQJPSAweDIwMCwKIAl9LAorCVtwYm5fZXhhcl9pYm1fc2F0dXJuXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJfSwKKwogCS8qCiAJICogUEEgU2VtaSBQV1JmaWNpZW50IFBBNlQtMTY4Mk0gb24tY2hpcCBVQVJUCiAJICovCkBAIC0yMTg1LDYgKzIxOTcsMzcgQEAKIAkJLnVhcnRfb2Zmc2V0CT0gMHgxMCwKIAkJLmZpcnN0X29mZnNldAk9IDB4ODAwLAogCX0sCisJLyoKKwkgKiBBRERJLURBVEEgR21iSCBQQ0ktRXhwcmVzcyBjb21tdW5pY2F0aW9uIGNhcmRzIDxpbmZvQGFkZGktZGF0YS5jb20+CisJICovCisJW3Bibl9BRERJREFUQV9QQ0llXzFfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDEsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAorCVtwYm5fQURESURBVEFfUENJZV8yXzM5MDYyNTBdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSAyLAorCQkuYmFzZV9iYXVkCT0gMzkwNjI1MCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAsCisJfSwKKwlbcGJuX0FERElEQVRBX1BDSWVfNF8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gNCwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDgsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNvZnRtb2RlbV9ibGFja2xpc3RbXSA9IHsKQEAgLTIzNDAsNyArMjM4Myw3IEBACiAJCQlicmVhazsKIAogI2lmZGVmIFNFUklBTF9ERUJVR19QQ0kKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNldHVwIFBDSSBwb3J0OiBwb3J0ICV4LCBpcnEgJWQsIHR5cGUgJWRcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICJTZXR1cCBQQ0kgcG9ydDogcG9ydCAlbHgsIGlycSAlZCwgdHlwZSAlZFxuIiwKIAkJICAgICAgIHNlcmlhbF9wb3J0LmlvYmFzZSwgc2VyaWFsX3BvcnQuaXJxLCBzZXJpYWxfcG9ydC5pb3R5cGUpOwogI2VuZGlmCiAKQEAgLTI2NDksNiArMjY5Miw5IEBACiAJCVBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNILAogCQlQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84XzQ4NSwgMCwgMCwKIAkJcGJuX2IwXzhfMTg0MzIwMF8yMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfRVhBUiwgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTUyLAorCQlQQ0lfVkVORE9SX0lEX0lCTSwgUENJX1NVQkRFVklDRV9JRF9JQk1fU0FUVVJOX1NFUklBTF9PTkVfUE9SVCwKKwkJMCwgMCwgcGJuX2V4YXJfaWJtX3NhdHVybiB9LAogCiAJewlQQ0lfVkVORE9SX0lEX1NFQUxFVkVMLCBQQ0lfREVWSUNFX0lEX1NFQUxFVkVMX1U1MzAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCkBAIC0zMDkzLDYgKzMxMzksMTIgQEAKIAl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCQlwYm5fYjBfYnRfMl8xMTUyMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwX2J0XzJfMTE1MjAwIH0sCisJewlQQ0lfVkVORE9SX0lEX0xBVkEsIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUVFJPX0IsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9iMF9idF8yXzExNTIwMCB9LAogCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19BLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCQlwYm5fYjBfYnRfNF80NjA4MDAgfSwKQEAgLTM1NTYsNiArMzYwOCwzOCBAQAogCQkwLAogCQlwYm5fYjBfOF8xMTUyMDAgfSwKIAorCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCB9LAorCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfQURESURBVEEsCisJCVBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAorCQkwLAorCQkwLAorCQlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MCB9LAorCiAJewlQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDI5OSwKIAkJMCwgMCwgcGJuX2IwX2J0XzJfMTE1MjAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCAwMzQyMmNlLi5lNTIyNTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTg2Miw3ICs4NjIsNyBAQAogCiBjb25maWcgU0VSSUFMX1VBUlRMSVRFCiAJdHJpc3RhdGUgIlhpbGlueCB1YXJ0bGl0ZSBzZXJpYWwgcG9ydCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRQorCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRSB8fCBNRkRfVElNQkVSREFMRQogCXNlbGVjdCBTRVJJQUxfQ09SRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBYaWxpbnggdWFydGxpdGUgc2VyaWFsIGNvbnRyb2xsZXIuCkBAIC0xNDU4LDQgKzE0NTgsMjMgQEAKIAktLS1oZWxwLS0tCiAJQWRkIHN1cHBvcnQgZm9yIFVBUlQgY29udHJvbGxlciBvbiB0aW1iZXJkYWxlLgogCitjb25maWcgU0VSSUFMX0JDTTYzWFgKKwl0cmlzdGF0ZSAiYmNtNjN4eCBzZXJpYWwgcG9ydCBzdXBwb3J0IgorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWRlcGVuZHMgb24gQkNNNjNYWAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgYmNtNjN4eCBDUFUsIHlvdSBjYW4gZW5hYmxlIGl0cyBvbmJvYXJkCisJICBzZXJpYWwgcG9ydCBieSBlbmFibGluZyB0aGlzIG9wdGlvbnMuCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmNtOTYzeHhfdWFydC4KKworY29uZmlnIFNFUklBTF9CQ002M1hYX0NPTlNPTEUKKwlib29sICJDb25zb2xlIG9uIGJjbTYzeHggc2VyaWFsIHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfQkNNNjNYWD15CisJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoZSBzZXJpYWwgcG9ydCBvbiB0aGUgYmNtNjN4eCBDUFUKKwkgIHlvdSBjYW4gbWFrZSBpdCB0aGUgY29uc29sZSBieSBhbnN3ZXJpbmcgWSB0byB0aGlzIG9wdGlvbi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCA5N2Y2ZmNjLi5kMjFkNWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9QWEEpICs9IHB4YS5vCiBvYmotJChDT05GSUdfU0VSSUFMX1BOWDhYWFgpICs9IHBueDh4eHhfdWFydC5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NBMTEwMCkgKz0gc2ExMTAwLm8KK29iai0kKENPTkZJR19TRVJJQUxfQkNNNjNYWCkgKz0gYmNtNjN4eF91YXJ0Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfQkZJTikgKz0gYmZpbl81eHgubwogb2JqLSQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSArPSBiZmluX3Nwb3J0X3VhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9TQU1TVU5HKSArPSBzYW1zdW5nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggMzU1MWM1Yy4uOWQ5NDhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAJdm9pZCAqZGF0YTsKIAlpbnQgcmV0OwogCi0JQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKEFUTUVMX1NFUklBTF9SSU5HU0laRSkpOworCUJVSUxEX0JVR19PTihBVE1FTF9TRVJJQUxfUklOR1NJWkUgJiAoQVRNRUxfU0VSSUFMX1JJTkdTSVpFIC0gMSkpOwogCiAJcG9ydCA9ICZhdG1lbF9wb3J0c1twZGV2LT5pZF07CiAJcG9ydC0+YmFja3VwX2ltciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL2JjbTYzeHhfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZGRhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYwpAQCAtMCwwICsxLDg5MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERlcml2ZWQgZnJvbSBtYW55IGRyaXZlcnMgdXNpbmcgZ2VuZXJpY19zZXJpYWwgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICoKKyAqICBTZXJpYWwgZHJpdmVyIGZvciBCQ002M3h4IGludGVncmF0ZWQgVUFSVC4KKyAqCisgKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgd2FzIF9ub3RfIHRlc3RlZCBzaW5jZSBJIG9ubHkgaGF2ZSBSWC9UWCBvbgorICogbXkgYm9hcmQuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CQ002M1hYX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQorI2RlZmluZSBTVVBQT1JUX1NZU1JRCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGJjbTYzeHhfY2xrLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pcnEuaD4KKyNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KKyNpbmNsdWRlIDxiY202M3h4X2lvLmg+CisKKyNkZWZpbmUgQkNNNjNYWF9OUl9VQVJUUwkxCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHBvcnRzW0JDTTYzWFhfTlJfVUFSVFNdOworCisvKgorICogcnggaW50ZXJydXB0IG1hc2sgLyBzdGF0CisgKgorICogbWFzazoKKyAqICAtIHJ4IGZpZm8gZnVsbAorICogIC0gcnggZmlmbyBhYm92ZSB0aHJlc2hvbGQKKyAqICAtIHJ4IGZpZm8gbm90IGVtcHR5IGZvciB0b28gbG9uZworICovCisjZGVmaW5lIFVBUlRfUlhfSU5UX01BU0sJKFVBUlRfSVJfTUFTSyhVQVJUX0lSX1JYT1ZFUikgfAkJXAorCQkJCVVBUlRfSVJfTUFTSyhVQVJUX0lSX1JYVEhSRVNIKSB8CVwKKwkJCQlVQVJUX0lSX01BU0soVUFSVF9JUl9SWFRJTUVPVVQpKQorCisjZGVmaW5lIFVBUlRfUlhfSU5UX1NUQVQJKFVBUlRfSVJfU1RBVChVQVJUX0lSX1JYT1ZFUikgfAkJXAorCQkJCVVBUlRfSVJfU1RBVChVQVJUX0lSX1JYVEhSRVNIKSB8CVwKKwkJCQlVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWFRJTUVPVVQpKQorCisvKgorICogdHggaW50ZXJydXB0IG1hc2sgLyBzdGF0CisgKgorICogbWFzazoKKyAqIC0gdHggZmlmbyBlbXB0eQorICogLSB0eCBmaWZvIGJlbG93IHRocmVzaG9sZAorICovCisjZGVmaW5lIFVBUlRfVFhfSU5UX01BU0sJKFVBUlRfSVJfTUFTSyhVQVJUX0lSX1RYRU1QVFkpIHwJXAorCQkJCVVBUlRfSVJfTUFTSyhVQVJUX0lSX1RYVFJFU0gpKQorCisjZGVmaW5lIFVBUlRfVFhfSU5UX1NUQVQJKFVBUlRfSVJfU1RBVChVQVJUX0lSX1RYRU1QVFkpIHwJXAorCQkJCVVBUlRfSVJfU1RBVChVQVJUX0lSX1RYVFJFU0gpKQorCisvKgorICogZXh0ZXJuYWwgaW5wdXQgaW50ZXJydXB0CisgKgorICogbWFzazogYW55IGVkZ2Ugb24gQ1RTLCBEQ0QKKyAqLworI2RlZmluZSBVQVJUX0VYVElOUF9JTlRfTUFTSwkoVUFSVF9FWFRJTlBfSVJNQVNLKFVBUlRfRVhUSU5QX0lSX0NUUykgfCBcCisJCQkJIFVBUlRfRVhUSU5QX0lSTUFTSyhVQVJUX0VYVElOUF9JUl9EQ0QpKQorCisvKgorICogaGFuZHkgdWFydCByZWdpc3RlciBhY2Nlc3NvcgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiY21fdWFydF9yZWFkbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCQkgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gYmNtX3JlYWRsKHBvcnQtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtX3VhcnRfd3JpdGVsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJICB1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJYmNtX3dyaXRlbCh2YWx1ZSwgcG9ydC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGNoZWNrIGlmIHVhcnQgdHggZmlmbyBpcyBlbXB0eQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGJjbV91YXJ0X3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwlyZXR1cm4gKHZhbCAmIFVBUlRfSVJfU1RBVChVQVJUX0lSX1RYRU1QVFkpKSA/IDEgOiAwOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBzZXQgUlRTIGFuZCBEVFIgcGluIHN0YXRlIGFuZCBsb29wYmFjayBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfTUNUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfTUNUTF9EVFJfTUFTSyB8IFVBUlRfTUNUTF9SVFNfTUFTSyk7CisJLyogaW52ZXJ0IG9mIHdyaXR0ZW4gdmFsdWUgaXMgcmVmbGVjdGVkIG9uIHRoZSBwaW4gKi8KKwlpZiAoIShtY3RybCAmIFRJT0NNX0RUUikpCisJCXZhbCB8PSBVQVJUX01DVExfRFRSX01BU0s7CisJaWYgKCEobWN0cmwgJiBUSU9DTV9SVFMpKQorCQl2YWwgfD0gVUFSVF9NQ1RMX1JUU19NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfTUNUTF9SRUcpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwlpZiAobWN0cmwgJiBUSU9DTV9MT09QKQorCQl2YWwgfD0gVUFSVF9DVExfTE9PUEJBQ0tfTUFTSzsKKwllbHNlCisJCXZhbCAmPSB+VUFSVF9DVExfTE9PUEJBQ0tfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byByZXR1cm4gUkksIENUUywgRENEIGFuZCBEU1IgcGluIHN0YXRlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmNtX3VhcnRfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWN0cmw7CisKKwltY3RybCA9IDA7CisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9FWFRJTlBfUkVHKTsKKwlpZiAodmFsICYgVUFSVF9FWFRJTlBfUklfTUFTSykKKwkJbWN0cmwgfD0gVElPQ01fUkk7CisJaWYgKHZhbCAmIFVBUlRfRVhUSU5QX0NUU19NQVNLKQorCQltY3RybCB8PSBUSU9DTV9DVFM7CisJaWYgKHZhbCAmIFVBUlRfRVhUSU5QX0RDRF9NQVNLKQorCQltY3RybCB8PSBUSU9DTV9DRDsKKwlpZiAodmFsICYgVUFSVF9FWFRJTlBfRFNSX01BU0spCisJCW1jdHJsIHw9IFRJT0NNX0RTUjsKKwlyZXR1cm4gbWN0cmw7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGRpc2FibGUgdHggQVNBUCAodXNlZCBmb3IgZmxvdyBjb250cm9sKQorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJdmFsICY9IH4oVUFSVF9DVExfVFhFTl9NQVNLKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCXZhbCAmPSB+VUFSVF9UWF9JTlRfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0lSX1JFRyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIChyZSllbmFibGUgdHgKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCXZhbCB8PSBVQVJUX1RYX0lOVF9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfSVJfUkVHKTsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJdmFsIHw9IFVBUlRfQ1RMX1RYRU5fTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBzdG9wIHJ4LCBjYWxsZWQgYmVmb3JlIHBvcnQgc2h1dGRvd24KKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJdmFsICY9IH5VQVJUX1JYX0lOVF9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfSVJfUkVHKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gZW5hYmxlIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgcmVwb3J0aW5nCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2VuYWJsZV9tcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJdmFsIHw9IFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0lSX1JFRyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHN0YXJ0L3N0b3AgZW1pdHRpbmcgYnJlYWsgY2hhcgorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGN0bCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwlpZiAoY3RsKQorCQl2YWwgfD0gVUFSVF9DVExfWE1JVEJSS19NQVNLOworCWVsc2UKKwkJdmFsICY9IH5VQVJUX0NUTF9YTUlUQlJLX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9DVExfUkVHKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIHJldHVybiBwb3J0IHR5cGUgaW4gc3RyaW5nIGZvcm1hdAorICovCitzdGF0aWMgY29uc3QgY2hhciAqYmNtX3VhcnRfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiAocG9ydC0+dHlwZSA9PSBQT1JUX0JDTTYzWFgpID8gImJjbTYzeHhfdWFydCIgOiBOVUxMOworfQorCisvKgorICogcmVhZCBhbGwgY2hhcnMgaW4gcnggZmlmbyBhbmQgc2VuZCB0aGVtIHRvIGNvcmUKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZG9fcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGludCBtYXhfY291bnQ7CisKKwkvKiBsaW1pdCBudW1iZXIgb2YgY2hhciByZWFkIGluIGludGVycnVwdCwgc2hvdWxkIG5vdCBiZQorCSAqIGhpZ2hlciB0aGFuIGZpZm8gc2l6ZSBhbnl3YXkgc2luY2Ugd2UncmUgbXVjaCBmYXN0ZXIgdGhhbgorCSAqIHNlcmlhbCBwb3J0ICovCisJbWF4X2NvdW50ID0gMzI7CisJdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJZG8geworCQl1bnNpZ25lZCBpbnQgaWVzdGF0LCBjLCBjc3RhdDsKKwkJY2hhciBmbGFnOworCisJCS8qIGdldCBvdmVycnVuL2ZpZm8gZW1wdHkgaW5mb3JtYXRpb24gZnJvbSBpZXIKKwkJICogcmVnaXN0ZXIgKi8KKwkJaWVzdGF0ID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCQlpZiAoIShpZXN0YXQgJiBVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWE5PVEVNUFRZKSkpCisJCQlicmVhazsKKworCQljc3RhdCA9IGMgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0ZJRk9fUkVHKTsKKwkJcG9ydC0+aWNvdW50LnJ4Kys7CisJCWZsYWcgPSBUVFlfTk9STUFMOworCQljICY9IDB4ZmY7CisKKwkJaWYgKHVubGlrZWx5KChjc3RhdCAmIFVBUlRfRklGT19BTllFUlJfTUFTSykpKSB7CisJCQkvKiBkbyBzdGF0cyBmaXJzdCAqLworCQkJaWYgKGNzdGF0ICYgVUFSVF9GSUZPX0JSS0RFVF9NQVNLKSB7CisJCQkJcG9ydC0+aWNvdW50LmJyaysrOworCQkJCWlmICh1YXJ0X2hhbmRsZV9icmVhayhwb3J0KSkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19QQVJFUlJfTUFTSykKKwkJCQlwb3J0LT5pY291bnQucGFyaXR5Kys7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fRlJBTUVFUlJfTUFTSykKKwkJCQlwb3J0LT5pY291bnQuZnJhbWUrKzsKKworCQkJLyogdXBkYXRlIGZsYWcgd3J0IHJlYWRfc3RhdHVzX21hc2sgKi8KKwkJCWNzdGF0ICY9IHBvcnQtPnJlYWRfc3RhdHVzX21hc2s7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fQlJLREVUX01BU0spCisJCQkJZmxhZyA9IFRUWV9CUkVBSzsKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19GUkFNRUVSUl9NQVNLKQorCQkJCWZsYWcgPSBUVFlfRlJBTUU7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fUEFSRVJSX01BU0spCisJCQkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCX0KKworCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh1bmxpa2VseShpZXN0YXQgJiBVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWE9WRVIpKSkgeworCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCQl9CisKKwkJaWYgKChjc3RhdCAmIHBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzaykgPT0gMCkKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgYywgZmxhZyk7CisKKwl9IHdoaWxlICgtLW1heF9jb3VudCk7CisKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworfQorCisvKgorICogZmlsbCB0eCBmaWZvIHdpdGggY2hhcnMgdG8gc2VuZCwgc3RvcCB3aGVuIGZpZm8gaXMgYWJvdXQgdG8gYmUgZnVsbAorICogb3Igd2hlbiBhbGwgY2hhcnMgaGF2ZSBiZWVuIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2RvX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0OworCXVuc2lnbmVkIGludCB2YWwsIG1heF9jb3VudDsKKworCWlmIChwb3J0LT54X2NoYXIpIHsKKwkJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHBvcnQtPnhfY2hhciwgVUFSVF9GSUZPX1JFRyk7CisJCXBvcnQtPmljb3VudC50eCsrOworCQlwb3J0LT54X2NoYXIgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHVhcnRfdHhfc3RvcHBlZChwb3J0KSkgeworCQliY21fdWFydF9zdG9wX3R4KHBvcnQpOworCQlyZXR1cm47CisJfQorCisJeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCWdvdG8gdHhxX2VtcHR5OworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9NQ1RMX1JFRyk7CisJdmFsID0gKHZhbCAmIFVBUlRfTUNUTF9UWEZJRk9GSUxMX01BU0spID4+IFVBUlRfTUNUTF9UWEZJRk9GSUxMX1NISUZUOworCW1heF9jb3VudCA9IHBvcnQtPmZpZm9zaXplIC0gdmFsOworCisJd2hpbGUgKG1heF9jb3VudC0tKSB7CisJCXVuc2lnbmVkIGludCBjOworCisJCWMgPSB4bWl0LT5idWZbeG1pdC0+dGFpbF07CisJCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBjLCBVQVJUX0ZJRk9fUkVHKTsKKwkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisJCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKKwkJZ290byB0eHFfZW1wdHk7CisJcmV0dXJuOworCit0eHFfZW1wdHk6CisJLyogbm90aGluZyB0byBzZW5kLCBkaXNhYmxlIHRyYW5zbWl0IGludGVycnVwdCAqLworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwl2YWwgJj0gflVBUlRfVFhfSU5UX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9JUl9SRUcpOworCXJldHVybjsKK30KKworLyoKKyAqIHByb2Nlc3MgdWFydCBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGlycXJldHVybl90IGJjbV91YXJ0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBpbnQgaXJxc3RhdDsKKworCXBvcnQgPSBkZXZfaWQ7CisJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKworCWlycXN0YXQgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJaWYgKGlycXN0YXQgJiBVQVJUX1JYX0lOVF9TVEFUKQorCQliY21fdWFydF9kb19yeChwb3J0KTsKKworCWlmIChpcnFzdGF0ICYgVUFSVF9UWF9JTlRfU1RBVCkKKwkJYmNtX3VhcnRfZG9fdHgocG9ydCk7CisKKwlpZiAoaXJxc3RhdCAmIFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKSkgeworCQl1bnNpZ25lZCBpbnQgZXN0YXQ7CisKKwkJZXN0YXQgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0VYVElOUF9SRUcpOworCQlpZiAoZXN0YXQgJiBVQVJUX0VYVElOUF9JUlNUQVQoVUFSVF9FWFRJTlBfSVJfQ1RTKSkKKwkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwKKwkJCQkJICAgICAgIGVzdGF0ICYgVUFSVF9FWFRJTlBfQ1RTX01BU0spOworCQlpZiAoZXN0YXQgJiBVQVJUX0VYVElOUF9JUlNUQVQoVUFSVF9FWFRJTlBfSVJfRENEKSkKKwkJCXVhcnRfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwKKwkJCQkJICAgICAgIGVzdGF0ICYgVUFSVF9FWFRJTlBfRENEX01BU0spOworCX0KKworCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBlbmFibGUgcnggJiB0eCBvcGVyYXRpb24gb24gdWFydAorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9lbmFibGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwl2YWwgfD0gKFVBUlRfQ1RMX0JSR0VOX01BU0sgfCBVQVJUX0NUTF9UWEVOX01BU0sgfCBVQVJUX0NUTF9SWEVOX01BU0spOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7Cit9CisKKy8qCisgKiBkaXNhYmxlIHJ4ICYgdHggb3BlcmF0aW9uIG9uIHVhcnQKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZGlzYWJsZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfQ1RMX0JSR0VOX01BU0sgfCBVQVJUX0NUTF9UWEVOX01BU0sgfAorCQkgVUFSVF9DVExfUlhFTl9NQVNLKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogY2xlYXIgYWxsIHVucmVhZCBkYXRhIGluIHJ4IGZpZm8gYW5kIHVuc2VudCBkYXRhIGluIHR4IGZpZm8KKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZmx1c2goc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogZW1wdHkgcnggYW5kIHR4IGZpZm8gKi8KKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCXZhbCB8PSBVQVJUX0NUTF9SU1RSWEZJRk9fTUFTSyB8IFVBUlRfQ1RMX1JTVFRYRklGT19NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7CisKKwkvKiByZWFkIGFueSBwZW5kaW5nIGNoYXIgdG8gbWFrZSBzdXJlIGFsbCBpcnEgc3RhdHVzIGFyZQorCSAqIGNsZWFyZWQgKi8KKwkodm9pZCliY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0ZJRk9fUkVHKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gaW5pdGlhbGl6ZSB1YXJ0IGFuZCBzdGFydCByeCBvcGVyYXRpb24KKyAqLworc3RhdGljIGludCBiY21fdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OworCisJLyogbWFzayBhbGwgaXJxIGFuZCBmbHVzaCBwb3J0ICovCisJYmNtX3VhcnRfZGlzYWJsZShwb3J0KTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgMCwgVUFSVF9JUl9SRUcpOworCWJjbV91YXJ0X2ZsdXNoKHBvcnQpOworCisJLyogY2xlYXIgYW55IHBlbmRpbmcgZXh0ZXJuYWwgaW5wdXQgaW50ZXJydXB0ICovCisJKHZvaWQpYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9FWFRJTlBfUkVHKTsKKworCS8qIHNldCByeC90eCBmaWZvIHRocmVzaCB0byBmaWZvIGhhbGYgc2l6ZSAqLworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfTUNUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfTUNUTF9SWEZJRk9USFJFU0hfTUFTSyB8IFVBUlRfTUNUTF9UWEZJRk9USFJFU0hfTUFTSyk7CisJdmFsIHw9IChwb3J0LT5maWZvc2l6ZSAvIDIpIDw8IFVBUlRfTUNUTF9SWEZJRk9USFJFU0hfU0hJRlQ7CisJdmFsIHw9IChwb3J0LT5maWZvc2l6ZSAvIDIpIDw8IFVBUlRfTUNUTF9UWEZJRk9USFJFU0hfU0hJRlQ7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9NQ1RMX1JFRyk7CisKKwkvKiBzZXQgcnggZmlmbyB0aW1lb3V0IHRvIDEgY2hhciB0aW1lICovCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwl2YWwgJj0gflVBUlRfQ1RMX1JYVE1PVVRDTlRfTUFTSzsKKwl2YWwgfD0gMSA8PCBVQVJUX0NUTF9SWFRNT1VUQ05UX1NISUZUOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7CisKKwkvKiByZXBvcnQgYW55IGVkZ2Ugb24gZGNkIGFuZCBjdHMgKi8KKwl2YWwgPSBVQVJUX0VYVElOUF9JTlRfTUFTSzsKKwl2YWwgfD0gVUFSVF9FWFRJTlBfRENEX05PU0VOU0VfTUFTSzsKKwl2YWwgfD0gVUFSVF9FWFRJTlBfQ1RTX05PU0VOU0VfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0VYVElOUF9SRUcpOworCisJLyogcmVnaXN0ZXIgaXJxIGFuZCBlbmFibGUgcnggaW50ZXJydXB0cyAqLworCXJldCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgYmNtX3VhcnRfaW50ZXJydXB0LCAwLAorCQkJICBiY21fdWFydF90eXBlKHBvcnQpLCBwb3J0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBVQVJUX1JYX0lOVF9NQVNLLCBVQVJUX0lSX1JFRyk7CisJYmNtX3VhcnRfZW5hYmxlKHBvcnQpOworCXJldHVybiAwOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBmbHVzaCAmIGRpc2FibGUgdWFydAorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCAwLCBVQVJUX0lSX1JFRyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJYmNtX3VhcnRfZGlzYWJsZShwb3J0KTsKKwliY21fdWFydF9mbHVzaChwb3J0KTsKKwlmcmVlX2lycShwb3J0LT5pcnEsIHBvcnQpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBjaGFuZ2UgY3VycmVudCB1YXJ0IHNldHRpbmcKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICpuZXcsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXVuc2lnbmVkIGludCBjdGwsIGJhdWQsIHF1b3QsIGllcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCS8qIGRpc2FibGUgdWFydCB3aGlsZSBjaGFuZ2luZyBzcGVlZCAqLworCWJjbV91YXJ0X2Rpc2FibGUocG9ydCk7CisJYmNtX3VhcnRfZmx1c2gocG9ydCk7CisKKwkvKiB1cGRhdGUgQ29udHJvbCByZWdpc3RlciAqLworCWN0bCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJY3RsICY9IH5VQVJUX0NUTF9CSVRTUEVSU1lNX01BU0s7CisKKwlzd2l0Y2ggKG5ldy0+Y19jZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCWN0bCB8PSAoMCA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCWN0bCB8PSAoMSA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWN0bCB8PSAoMiA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3RsIHw9ICgzIDw8IFVBUlRfQ1RMX0JJVFNQRVJTWU1fU0hJRlQpOworCQlicmVhazsKKwl9CisKKwljdGwgJj0gflVBUlRfQ1RMX1NUT1BCSVRTX01BU0s7CisJaWYgKG5ldy0+Y19jZmxhZyAmIENTVE9QQikKKwkJY3RsIHw9IFVBUlRfQ1RMX1NUT1BCSVRTXzI7CisJZWxzZQorCQljdGwgfD0gVUFSVF9DVExfU1RPUEJJVFNfMTsKKworCWN0bCAmPSB+KFVBUlRfQ1RMX1JYUEFSRU5fTUFTSyB8IFVBUlRfQ1RMX1RYUEFSRU5fTUFTSyk7CisJaWYgKG5ldy0+Y19jZmxhZyAmIFBBUkVOQikKKwkJY3RsIHw9IChVQVJUX0NUTF9SWFBBUkVOX01BU0sgfCBVQVJUX0NUTF9UWFBBUkVOX01BU0spOworCWN0bCAmPSB+KFVBUlRfQ1RMX1JYUEFSRVZFTl9NQVNLIHwgVUFSVF9DVExfVFhQQVJFVkVOX01BU0spOworCWlmIChuZXctPmNfY2ZsYWcgJiBQQVJPREQpCisJCWN0bCB8PSAoVUFSVF9DVExfUlhQQVJFVkVOX01BU0sgfCBVQVJUX0NUTF9UWFBBUkVWRU5fTUFTSyk7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIGN0bCwgVUFSVF9DVExfUkVHKTsKKworCS8qIHVwZGF0ZSBCYXVkd29yZCByZWdpc3RlciAqLworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgbmV3LCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsgLyAxNik7CisJcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCkgLSAxOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBxdW90LCBVQVJUX0JBVURfUkVHKTsKKworCS8qIHVwZGF0ZSBJbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKwlpZXIgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisKKwlpZXIgJj0gflVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKwlpZiAoVUFSVF9FTkFCTEVfTVMocG9ydCwgbmV3LT5jX2NmbGFnKSkKKwkJaWVyIHw9IFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBpZXIsIFVBUlRfSVJfUkVHKTsKKworCS8qIHVwZGF0ZSByZWFkL2lnbm9yZSBtYXNrICovCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IFVBUlRfRklGT19WQUxJRF9NQVNLOworCWlmIChuZXctPmNfaWZsYWcgJiBJTlBDSykgeworCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19GUkFNRUVSUl9NQVNLOworCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19QQVJFUlJfTUFTSzsKKwl9CisJaWYgKG5ldy0+Y19pZmxhZyAmIChCUktJTlQpKQorCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19CUktERVRfTUFTSzsKKworCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IDA7CisJaWYgKG5ldy0+Y19pZmxhZyAmIElHTlBBUikKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19QQVJFUlJfTUFTSzsKKwlpZiAobmV3LT5jX2lmbGFnICYgSUdOQlJLKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9GSUZPX0JSS0RFVF9NQVNLOworCWlmICghKG5ldy0+Y19jZmxhZyAmIENSRUFEKSkKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19WQUxJRF9NQVNLOworCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCBuZXctPmNfY2ZsYWcsIGJhdWQpOworCWJjbV91YXJ0X2VuYWJsZShwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGNsYWltIHVhcnQgaW9tZW0KKyAqLworc3RhdGljIGludCBiY21fdWFydF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCXNpemUgPSBSU0VUX1VBUlRfU0laRTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBzaXplLCAiYmNtNjN4eCIpKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiTWVtb3J5IHJlZ2lvbiBidXN5XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwb3J0LT5tZW1iYXNlID0gaW9yZW1hcChwb3J0LT5tYXBiYXNlLCBzaXplKTsKKwlpZiAoIXBvcnQtPm1lbWJhc2UpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJVbmFibGUgdG8gbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBzaXplKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHJlbGVhc2UgdWFydCBpb21lbQorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZWxlYXNlX21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgUlNFVF9VQVJUX1NJWkUpOworCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGRvIGFueSBwb3J0IHJlcXVpcmVkIGF1dG9jb25maWd1cmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFKSB7CisJCWlmIChiY21fdWFydF9yZXF1ZXN0X3BvcnQocG9ydCkpCisJCQlyZXR1cm47CisJCXBvcnQtPnR5cGUgPSBQT1JUX0JDTTYzWFg7CisJfQorfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBjaGVjayB0aGF0IHBvcnQgaW5mb3JtYXRpb24gaW4gc2VyaW5mbyBhcmUKKyAqIHN1aXRhYmxlCisgKi8KK3N0YXRpYyBpbnQgYmNtX3VhcnRfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyaW5mbykKK3sKKwlpZiAocG9ydC0+dHlwZSAhPSBQT1JUX0JDTTYzWFgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwb3J0LT5pcnEgIT0gc2VyaW5mby0+aXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9ydC0+aW90eXBlICE9IHNlcmluZm8tPmlvX3R5cGUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwb3J0LT5tYXBiYXNlICE9ICh1bnNpZ25lZCBsb25nKXNlcmluZm8tPmlvbWVtX2Jhc2UpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKiBzZXJpYWwgY29yZSBjYWxsYmFja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgYmNtX3VhcnRfb3BzID0geworCS50eF9lbXB0eQk9IGJjbV91YXJ0X3R4X2VtcHR5LAorCS5nZXRfbWN0cmwJPSBiY21fdWFydF9nZXRfbWN0cmwsCisJLnNldF9tY3RybAk9IGJjbV91YXJ0X3NldF9tY3RybCwKKwkuc3RhcnRfdHgJPSBiY21fdWFydF9zdGFydF90eCwKKwkuc3RvcF90eAk9IGJjbV91YXJ0X3N0b3BfdHgsCisJLnN0b3BfcngJPSBiY21fdWFydF9zdG9wX3J4LAorCS5lbmFibGVfbXMJPSBiY21fdWFydF9lbmFibGVfbXMsCisJLmJyZWFrX2N0bAk9IGJjbV91YXJ0X2JyZWFrX2N0bCwKKwkuc3RhcnR1cAk9IGJjbV91YXJ0X3N0YXJ0dXAsCisJLnNodXRkb3duCT0gYmNtX3VhcnRfc2h1dGRvd24sCisJLnNldF90ZXJtaW9zCT0gYmNtX3VhcnRfc2V0X3Rlcm1pb3MsCisJLnR5cGUJCT0gYmNtX3VhcnRfdHlwZSwKKwkucmVsZWFzZV9wb3J0CT0gYmNtX3VhcnRfcmVsZWFzZV9wb3J0LAorCS5yZXF1ZXN0X3BvcnQJPSBiY21fdWFydF9yZXF1ZXN0X3BvcnQsCisJLmNvbmZpZ19wb3J0CT0gYmNtX3VhcnRfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0CT0gYmNtX3VhcnRfdmVyaWZ5X3BvcnQsCit9OworCisKKworI2lmZGVmIENPTkZJR19TRVJJQUxfQkNNNjNYWF9DT05TT0xFCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfeG1pdHIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1vdXQ7CisKKwkvKiBXYWl0IHVwIHRvIDEwbXMgZm9yIHRoZSBjaGFyYWN0ZXIocykgdG8gYmUgc2VudC4gKi8KKwl0bW91dCA9IDEwMDAwOworCXdoaWxlICgtLXRtb3V0KSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCQlpZiAodmFsICYgVUFSVF9JUl9TVEFUKFVBUlRfSVJfVFhFTVBUWSkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCS8qIFdhaXQgdXAgdG8gMXMgZm9yIGZsb3cgY29udHJvbCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocG9ydC0+ZmxhZ3MgJiBVUEZfQ09OU19GTE9XKSB7CisJCXRtb3V0ID0gMTAwMDAwMDsKKwkJd2hpbGUgKC0tdG1vdXQpIHsKKwkJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfRVhUSU5QX1JFRyk7CisJCQlpZiAodmFsICYgVUFSVF9FWFRJTlBfQ1RTX01BU0spCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBvdXRwdXQgZ2l2ZW4gY2hhcgorICovCitzdGF0aWMgdm9pZCBiY21fY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwl3YWl0X2Zvcl94bWl0cihwb3J0KTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgY2gsIFVBUlRfRklGT19SRUcpOworfQorCisvKgorICogY29uc29sZSBjb3JlIHJlcXVlc3QgdG8gb3V0cHV0IGdpdmVuIHN0cmluZworICovCitzdGF0aWMgdm9pZCBiY21fY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBsb2NrZWQ7CisKKwlwb3J0ID0gJnBvcnRzW2NvLT5pbmRleF07CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHBvcnQtPnN5c3JxKSB7CisJCS8qIGJjbV91YXJ0X2ludGVycnVwdCgpIGFscmVhZHkgdG9vayB0aGUgbG9jayAqLworCQlsb2NrZWQgPSAwOworCX0gZWxzZSBpZiAob29wc19pbl9wcm9ncmVzcykgeworCQlsb2NrZWQgPSBzcGluX3RyeWxvY2soJnBvcnQtPmxvY2spOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CisJCWxvY2tlZCA9IDE7CisJfQorCisJLyogY2FsbCBoZWxwZXIgdG8gZGVhbCB3aXRoIFxyXG4gKi8KKwl1YXJ0X2NvbnNvbGVfd3JpdGUocG9ydCwgcywgY291bnQsIGJjbV9jb25zb2xlX3B1dGNoYXIpOworCisJLyogYW5kIHdhaXQgZm9yIGNoYXIgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwl3YWl0X2Zvcl94bWl0cihwb3J0KTsKKworCWlmIChsb2NrZWQpCisJCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBjb25zb2xlIGNvcmUgcmVxdWVzdCB0byBzZXR1cCBnaXZlbiBjb25zb2xlLCBmaW5kIG1hdGNoaW5nIHVhcnQKKyAqIHBvcnQgYW5kIHNldHVwIGl0LgorICovCitzdGF0aWMgaW50IGJjbV9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCWludCBiYXVkID0gOTYwMDsKKwlpbnQgYml0cyA9IDg7CisJaW50IHBhcml0eSA9ICduJzsKKwlpbnQgZmxvdyA9ICduJzsKKworCWlmIChjby0+aW5kZXggPCAwIHx8IGNvLT5pbmRleCA+PSBCQ002M1hYX05SX1VBUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwb3J0ID0gJnBvcnRzW2NvLT5pbmRleF07CisJaWYgKCFwb3J0LT5tZW1iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAob3B0aW9ucykKKwkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOworCisJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmNtX3VhcnRfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgYmNtNjN4eF9jb25zb2xlID0geworCS5uYW1lCQk9ICJ0dHlTIiwKKwkud3JpdGUJCT0gYmNtX2NvbnNvbGVfd3JpdGUsCisJLmRldmljZQkJPSB1YXJ0X2NvbnNvbGVfZGV2aWNlLAorCS5zZXR1cAkJPSBiY21fY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAkJPSAtMSwKKwkuZGF0YQkJPSAmYmNtX3VhcnRfZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtNjN4eF9jb25zb2xlX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9jb25zb2xlKCZiY202M3h4X2NvbnNvbGUpOworCXJldHVybiAwOworfQorCitjb25zb2xlX2luaXRjYWxsKGJjbTYzeHhfY29uc29sZV9pbml0KTsKKworI2RlZmluZSBCQ002M1hYX0NPTlNPTEUJKCZiY202M3h4X2NvbnNvbGUpCisjZWxzZQorI2RlZmluZSBCQ002M1hYX0NPTlNPTEUJTlVMTAorI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfQkNNNjNYWF9DT05TT0xFICovCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmNtX3VhcnRfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZHJpdmVyX25hbWUJPSAiYmNtNjN4eF91YXJ0IiwKKwkuZGV2X25hbWUJPSAidHR5UyIsCisJLm1ham9yCQk9IFRUWV9NQUpPUiwKKwkubWlub3IJCT0gNjQsCisJLm5yCQk9IDEsCisJLmNvbnMJCT0gQkNNNjNYWF9DT05TT0xFLAorfTsKKworLyoKKyAqIHBsYXRmb3JtIGRyaXZlciBwcm9iZS9yZW1vdmUgY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgYmNtX3VhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19tZW0sICpyZXNfaXJxOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwlpZiAocGRldi0+aWQgPCAwIHx8IHBkZXYtPmlkID49IEJDTTYzWFhfTlJfVUFSVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBvcnRzW3BkZXYtPmlkXS5tZW1iYXNlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmVzX21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXNfbWVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlc19pcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzX2lycSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwZXJpcGgiKTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiAtRU5PREVWOworCisJcG9ydCA9ICZwb3J0c1twZGV2LT5pZF07CisJbWVtc2V0KHBvcnQsIDAsIHNpemVvZigqcG9ydCkpOworCXBvcnQtPmlvdHlwZSA9IFVQSU9fTUVNOworCXBvcnQtPm1hcGJhc2UgPSByZXNfbWVtLT5zdGFydDsKKwlwb3J0LT5pcnEgPSByZXNfaXJxLT5zdGFydDsKKwlwb3J0LT5vcHMgPSAmYmNtX3VhcnRfb3BzOworCXBvcnQtPmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkY7CisJcG9ydC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwb3J0LT5maWZvc2l6ZSA9IDE2OworCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIDI7CisJY2xrX3B1dChjbGspOworCisJcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJmJjbV91YXJ0X2RyaXZlciwgcG9ydCk7CisJaWYgKHJldCkgeworCQlrZnJlZShwb3J0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcG9ydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGJjbV91YXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisKKwlwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdWFydF9yZW1vdmVfb25lX3BvcnQoJmJjbV91YXJ0X2RyaXZlciwgcG9ydCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJLyogbWFyayBwb3J0IGFzIGZyZWUgKi8KKwlwb3J0c1twZGV2LT5pZF0ubWVtYmFzZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwbGF0Zm9ybSBkcml2ZXIgc3R1ZmYKKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtX3VhcnRfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQk9IGJjbV91YXJ0X3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChiY21fdWFydF9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSAgPSAiYmNtNjN4eF91YXJ0IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtX3VhcnRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmYmNtX3VhcnRfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY21fdWFydF9wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChyZXQpCisJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJjbV91YXJ0X2RyaXZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmNtX3VhcnRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZiY21fdWFydF9wbGF0Zm9ybV9kcml2ZXIpOworCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJjbV91YXJ0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGJjbV91YXJ0X2luaXQpOworbW9kdWxlX2V4aXQoYmNtX3VhcnRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIDYzPHh4IGludGVncmF0ZWQgdWFydCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCA4ZDM0OWIyMy4uMzAwY2VhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJdTggKnA7CiAJaW50IGNvdW50OwogCXN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyA9IChzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqKXBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJLyogSGFuZGxlIHhvbi94b2ZmICovCiAJaWYgKHBvcnQtPnhfY2hhcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jIGIvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCmluZGV4IDdiZTUyZmUuLjMxZjE3MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMgYi9kcml2ZXJzL3NlcmlhbC9pY29tLmMKaW5kZXggMmQ3ZmVlYy4uMDAyOGI2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaWNvbS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJaWYgKHBvcnQgPCA0KSB7CiAJCXRlbXAgPSByZWFkbChzdG9wX3Byb2NbcG9ydF0uZ2xvYmFsX2NvbnRyb2xfcmVnKTsKIAkJdGVtcCA9Ci0JICAgIAkJKHRlbXAgJiB+c3RhcnRfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQpIHwgc3RvcF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZDsKKwkJCSh0ZW1wICYgfnN0YXJ0X3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkKSB8IHN0b3BfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQ7CiAJCXdyaXRlbCh0ZW1wLCBzdG9wX3Byb2NbcG9ydF0uZ2xvYmFsX2NvbnRyb2xfcmVnKTsKIAogCQkvKiB3cml0ZSBmbHVzaCAqLwpAQCAtMzM2LDcgKzMzNiw3IEBACiAJaWYgKHBvcnQgPCA0KSB7CiAJCXRlbXAgPSByZWFkbChzdGFydF9wcm9jW3BvcnRdLmdsb2JhbF9jb250cm9sX3JlZyk7CiAJCXRlbXAgPQotCSAgICAJCSh0ZW1wICYgfnN0b3BfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQpIHwgc3RhcnRfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQ7CisJCQkodGVtcCAmIH5zdG9wX3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkKSB8IHN0YXJ0X3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkOwogCQl3cml0ZWwodGVtcCwgc3RhcnRfcHJvY1twb3J0XS5nbG9iYWxfY29udHJvbF9yZWcpOwogCiAJCS8qIHdyaXRlIGZsdXNoICovCkBAIC01MDksOCArNTA5LDggQEAKIAkJZGV2X2VycigmaWNvbV9wb3J0LT5hZGFwdGVyLT5wY2lfZGV2LT5kZXYsIlBvcnQgbm90IG9wZXJ0aW9uYWxcbiIpOwogCX0KIAotICAgICAgaWYgKG5ld19wYWdlICE9IE5VTEwpCi0JICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIDQwOTYsIG5ld19wYWdlLCB0ZW1wX3BjaSk7CisJaWYgKG5ld19wYWdlICE9IE5VTEwpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCA0MDk2LCBuZXdfcGFnZSwgdGVtcF9wY2kpOwogfQogCiBzdGF0aWMgaW50IHN0YXJ0dXAoc3RydWN0IGljb21fcG9ydCAqaWNvbV9wb3J0KQpAQCAtMTQ5MywxNSArMTQ5MywxNSBAQAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IGluZGV4OwotICAgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9yZWc7Ci0gICAgICAgIGludCByZXR2YWw7Ci0gICAgICAgIHN0cnVjdCBpY29tX2FkYXB0ZXIgKmljb21fYWRhcHRlcjsKLSAgICAgICAgc3RydWN0IGljb21fcG9ydCAqaWNvbV9wb3J0OworCXVuc2lnbmVkIGludCBjb21tYW5kX3JlZzsKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBpY29tX2FkYXB0ZXIgKmljb21fYWRhcHRlcjsKKwlzdHJ1Y3QgaWNvbV9wb3J0ICppY29tX3BvcnQ7CiAKLSAgICAgICAgcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLSAgICAgICAgaWYgKHJldHZhbCkgeworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIkRldmljZSBlbmFibGUgRkFJTEVEXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAogCWlmICggKHJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAiaWNvbSIpKSkgewpAQCAtMTUxMCwyMyArMTUxMCwyMyBAQAogCQkgcmV0dXJuIHJldHZhbDsKIAkgfQogCi0gICAgICAgIHBjaV9zZXRfbWFzdGVyKGRldik7CisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKIAotICAgICAgICBpZiAoIChyZXR2YWwgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmRfcmVnKSkpIHsKKwlpZiAoIChyZXR2YWwgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmRfcmVnKSkpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJQQ0kgQ29uZmlnIHJlYWQgRkFJTEVEXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICB9CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELAogCQljb21tYW5kX3JlZyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUgogIAkJfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSKTsKIAotICAgICAgICBpZiAoZW50LT5kcml2ZXJfZGF0YSA9PSBBREFQVEVSX1YxKSB7CisJaWYgKGVudC0+ZHJpdmVyX2RhdGEgPT0gQURBUFRFUl9WMSkgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0NCwgMHg4MzAwODMwQSk7Ci0JIH0gZWxzZSB7CisJfSBlbHNlIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDQsIDB4NDIwMDQyMDApOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgMHg0MjAwNDIwMCk7Ci0gICAgICAgICB9CisJfQogCiAKIAlyZXR2YWwgPSBpY29tX2FsbG9jX2FkYXB0ZXIoJmljb21fYWRhcHRlcik7CkBAIC0xNTM2LDEwICsxNTM2LDEwIEBACiAJCSBnb3RvIHByb2JlX2V4aXQwOwogCX0KIAotCSBpY29tX2FkYXB0ZXItPmJhc2VfYWRkcl9wY2kgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKLQkgaWNvbV9hZGFwdGVyLT5wY2lfZGV2ID0gZGV2OwotCSBpY29tX2FkYXB0ZXItPnZlcnNpb24gPSBlbnQtPmRyaXZlcl9kYXRhOwotCSBpY29tX2FkYXB0ZXItPnN1YnN5c3RlbV9pZCA9IGVudC0+c3ViZGV2aWNlOworCWljb21fYWRhcHRlci0+YmFzZV9hZGRyX3BjaSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCWljb21fYWRhcHRlci0+cGNpX2RldiA9IGRldjsKKwlpY29tX2FkYXB0ZXItPnZlcnNpb24gPSBlbnQtPmRyaXZlcl9kYXRhOworCWljb21fYWRhcHRlci0+c3Vic3lzdGVtX2lkID0gZW50LT5zdWJkZXZpY2U7CiAKIAogCXJldHZhbCA9IGljb21faW5pdF9wb3J0cyhpY29tX2FkYXB0ZXIpOwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAKIAkJZ290byBwcm9iZV9leGl0MTsKIAl9CiAKLQkgaWNvbV9hZGFwdGVyLT5iYXNlX2FkZHIgPSBwY2lfaW9yZW1hcF9iYXIoZGV2LCAwKTsKKwlpY29tX2FkYXB0ZXItPmJhc2VfYWRkciA9IHBjaV9pb3JlbWFwX2JhcihkZXYsIDApOwogCiAJaWYgKCFpY29tX2FkYXB0ZXItPmJhc2VfYWRkcikKIAkJZ290byBwcm9iZV9leGl0MTsKQEAgLTE1NjIsNyArMTU2Miw3IEBACiAKIAlyZXR2YWwgPSBpY29tX2xvYWRfcG9ydHMoaWNvbV9hZGFwdGVyKTsKIAotICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBpY29tX2FkYXB0ZXItPm51bWJfcG9ydHM7IGluZGV4KyspIHsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBpY29tX2FkYXB0ZXItPm51bWJfcG9ydHM7IGluZGV4KyspIHsKIAkJaWNvbV9wb3J0ID0gJmljb21fYWRhcHRlci0+cG9ydF9pbmZvW2luZGV4XTsKIAogCQlpZiAoaWNvbV9wb3J0LT5zdGF0dXMgPT0gSUNPTV9QT1JUX0FDVElWRSkgewpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKIAkJCQlpY29tX3BvcnQtPnN0YXR1cyA9IElDT01fUE9SVF9PRkY7CiAJCQkJZGV2X2VycigmZGV2LT5kZXYsICJEZXZpY2UgYWRkIGZhaWxlZFxuIik7CiAJCQkgfSBlbHNlCi0JCQkgICAgICAgIGRldl9pbmZvKCZkZXYtPmRldiwgIkRldmljZSBhZGRlZFxuIik7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiRGV2aWNlIGFkZGVkXG4iKTsKIAkJfQogCX0KIApAQCAtMTU5NSw5ICsxNTk1LDcgQEAKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLQotCisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGljb21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IGQ3YmNkMDcuLjdjZTllOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03MDUsNyArNzA1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoKHNlci0+aXJxICE9IHBvcnQtPmlycSkgfHwKLQkgICAgKHNlci0+aW9fdHlwZSAhPSBTRVJJQUxfSU9fTUVNKSB8fAorCSAgICAoc2VyLT5pb190eXBlICE9IFVQSU9fTUVNKSB8fAogCSAgICAoc2VyLT5iYXVkX2Jhc2UgIT0gcG9ydC0+dWFydGNsaykgIHx8CiAJICAgIChzZXItPmlvbWVtX2Jhc2UgIT0gKHZvaWQgKilwb3J0LT5tYXBiYXNlKSB8fAogCSAgICAoc2VyLT5odWI2ICE9IDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCA2NDQzYjdmLi5iODYyOWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtNzI2LDkgKzcyNiwxMCBAQAogCS5jb25zCQk9IFBYQV9DT05TT0xFLAogfTsKIAotc3RhdGljIGludCBzZXJpYWxfcHhhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNlcmlhbF9weGFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisgICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3N1c3BlbmRfcG9ydCgmc2VyaWFsX3B4YV9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC03MzYsOSArNzM3LDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzZXJpYWxfcHhhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisgICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3Jlc3VtZV9wb3J0KCZzZXJpYWxfcHhhX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTc0Niw2ICs3NDcsMTIgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzZXJpYWxfcHhhX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNlcmlhbF9weGFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNlcmlhbF9weGFfcmVzdW1lLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IHNlcmlhbF9weGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydDsKQEAgLTgyNSwxMSArODMyLDEyIEBACiAgICAgICAgIC5wcm9iZSAgICAgICAgICA9IHNlcmlhbF9weGFfcHJvYmUsCiAgICAgICAgIC5yZW1vdmUgICAgICAgICA9IHNlcmlhbF9weGFfcmVtb3ZlLAogCi0JLnN1c3BlbmQJPSBzZXJpYWxfcHhhX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzZXJpYWxfcHhhX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkgICAgICAgIC5uYW1lCT0gInB4YTJ4eC11YXJ0IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZzZXJpYWxfcHhhX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCmluZGV4IDdmNWUyNjguLjIxOTlkODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCkBAIC02MzgsNyArNjM4LDcgQEAKIAlQUFNSIHw9IFBQQ19UWEQxIHwgUFBDX1RYRDM7CiB9CiAKLXZvaWQgX19pbml0IHNhMTEwMF9yZWdpc3Rlcl91YXJ0X2ZucyhzdHJ1Y3Qgc2ExMTAwX3BvcnRfZm5zICpmbnMpCit2b2lkIF9fZGV2aW5pdCBzYTExMDBfcmVnaXN0ZXJfdWFydF9mbnMoc3RydWN0IHNhMTEwMF9wb3J0X2ZucyAqZm5zKQogewogCWlmIChmbnMtPmdldF9tY3RybCkKIAkJc2ExMTAwX3BvcHMuZ2V0X21jdHJsID0gZm5zLT5nZXRfbWN0cmw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCAxNjg5YmRhLi5kY2M3MjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTEyNzAsNiArMTI3MCw5IEBACiAKIAlCVUdfT04oIWtlcm5lbF9sb2NrZWQoKSk7CiAKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm47CisKIAl1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAJcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIApAQCAtMTMxNiw5ICsxMzE5LDkgQEAKIAkgKi8KIAlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJdXBvcnQtPm9wcy0+c3RvcF9yeCh1cG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJLyoKIAkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKIAkJICogaGFzIGNvbXBsZXRlbHkgZHJhaW5lZDsgdGhpcyBpcyBlc3BlY2lhbGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwppbmRleCAwZjdjZjRjLi5jNTBlOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKQEAgLTIyMSwyMSArMjIxLDI2IEBACiAJCXNpb19vdXQodXAsIFRYWDlfU0lCR1IsIDB4ZmYgfCBUWFg5X1NJQkdSX0JDTEtfVDYpOwogfQogCitzdGF0aWMgc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp0b191YXJ0X3R4eDlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfdHh4OV9wb3J0LCBwb3J0KTsKK30KKwogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJc2lvX21hc2sodXAsIFRYWDlfU0lESUNSLCBUWFg5X1NJRElDUl9USUUpOwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJc2lvX3NldCh1cCwgVFhYOV9TSURJQ1IsIFRYWDlfU0lESUNSX1RJRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVwLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgJj0gflRYWDlfU0lESVNSX1JESVM7CiB9CiAKQEAgLTI0Niw3ICsyNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9pbml0aWFsaXplKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgdG1vdXQgPSAxMDAwMDsKIAogCXNpb19vdXQodXAsIFRYWDlfU0lGQ1IsIFRYWDlfU0lGQ1JfU1dSU1QpOwpAQCAtNDE0LDcgKzQxOSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsX3R4eDlfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHJldDsKIApAQCAtNDI3LDcgKzQzMiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsX3R4eDlfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCiAJLyogbm8gbW9kZW0gY29udHJvbCBsaW5lcyAqLwpAQCAtNDQwLDcgKzQ0NSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCWlmIChtY3RybCAmIFRJT0NNX1JUUykKIAkJc2lvX21hc2sodXAsIFRYWDlfU0lGTENSLCBUWFg5X1NJRkxDUl9SVFNTQyk7CkBAIC00NTAsNyArNDU1LDcgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfYnJlYWtfY3RsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwpAQCAtNDk0LDcgKzQ5OSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGllcjsKIAl1bnNpZ25lZCBjaGFyIGM7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCS8qCiAJICoJRmlyc3Qgc2F2ZSB0aGUgSUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cwpAQCAtNTIwLDcgKzUyNSw3IEBACiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9wdXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgYykKIHsKIAl1bnNpZ25lZCBpbnQgaWVyOwotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAKIAkvKgogCSAqCUZpcnN0IHNhdmUgdGhlIElFUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMKQEAgLTU1MSw3ICs1NTYsNyBAQAogCiBzdGF0aWMgaW50IHNlcmlhbF90eHg5X3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHZhbDsKIApAQCAtNTk2LDcgKzYwMSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3NodXRkb3duKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKQEAgLTYzNiw3ICs2NDEsNyBAQAogc2VyaWFsX3R4eDlfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAogCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgY3ZhbCwgZmNyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBiYXVkLCBxdW90OwpAQCAtODE0LDE5ICs4MTksMTkgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAlzZXJpYWxfdHh4OV9yZWxlYXNlX3Jlc291cmNlKHVwKTsKIH0KIAogc3RhdGljIGludCBzZXJpYWxfdHh4OV9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXJldHVybiBzZXJpYWxfdHh4OV9yZXF1ZXN0X3Jlc291cmNlKHVwKTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IHVmbGFncykKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCWludCByZXQ7CiAKIAkvKgpAQCAtODk3LDcgKzkwMiw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCXdhaXRfZm9yX3htaXRyKHVwKTsKIAlzaW9fb3V0KHVwLCBUWFg5X1NJVEZJRk8sIGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggODUxMTlmYi4uNjQ5OGJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTExNDMsNyArMTE0Myw3IEBACiAJd2hpbGUgKChzY2lfaW4ocG9ydCwgU0N4U1IpICYgYml0cykgIT0gYml0cykKIAkJY3B1X3JlbGF4KCk7CiAKLQlpZiAoc2NpX3BvcnQtPmRpc2FibGUpOworCWlmIChzY2lfcG9ydC0+ZGlzYWJsZSkKIAkJc2NpX3BvcnQtPmRpc2FibGUocG9ydCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCmluZGV4IGQzYjQ5NjguLmIyMDRhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMKKysrIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYwpAQCAtOTAsNyArOTAsMTEgQEAKICAqLwogc3RhdGljIHUzMiBzZmlfdXNlX2lvcmVtYXAgX19yZWFkX21vc3RseTsKIAotc3RhdGljIHZvaWQgX19pb21lbSAqc2ZpX21hcF9tZW1vcnkodTY0IHBoeXMsIHUzMiBzaXplKQorLyoKKyAqIHNmaV91bi9tYXBfbWVtb3J5IGNhbGxzIGVhcmx5X2lvcmVtYXAvaW91bm1hcCB3aGljaCBpcyBhIF9faW5pdCBmdW5jdGlvbgorICogYW5kIGludHJvZHVjZXMgc2VjdGlvbiBtaXNtYXRjaC4gU28gdXNlIF9fcmVmIHRvIG1ha2UgaXQgY2FsbS4KKyAqLworc3RhdGljIHZvaWQgX19pb21lbSAqIF9fcmVmIHNmaV9tYXBfbWVtb3J5KHU2NCBwaHlzLCB1MzIgc2l6ZSkKIHsKIAlpZiAoIXBoeXMgfHwgIXNpemUpCiAJCXJldHVybiBOVUxMOwpAQCAtMTAxLDcgKzEwNSw3IEBACiAJCXJldHVybiBlYXJseV9pb3JlbWFwKHBoeXMsIHNpemUpOwogfQogCi1zdGF0aWMgdm9pZCBzZmlfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgdTMyIHNpemUpCitzdGF0aWMgdm9pZCBfX3JlZiBzZmlfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgdTMyIHNpemUpCiB7CiAJaWYgKCF2aXJ0IHx8ICFzaXplKQogCQlyZXR1cm47CkBAIC0xMjUsNyArMTI5LDcgQEAKICAqIHNmaV92ZXJpZnlfdGFibGUoKQogICogU2FuaXR5IGNoZWNrIHRhYmxlIGxlbmdoLCBjYWxjdWxhdGUgY2hlY2tzdW0KICAqLwotc3RhdGljIF9faW5pdCBpbnQgc2ZpX3ZlcmlmeV90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpCitzdGF0aWMgaW50IHNmaV92ZXJpZnlfdGFibGUoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewogCiAJdTggY2hlY2tzdW0gPSAwOwpAQCAtMjEzLDEyICsyMTcsMTcgQEAKICAqICAgIHRoZSBtYXBwZWQgdmlydCBhZGRyZXNzIHdpbGwgYmUgcmV0dXJuZWQsIGFuZCB0aGUgdmlydCBzcGFjZQogICogICAgd2lsbCBiZSByZWxlYXNlZCBieSBjYWxsIHNmaV9wdXRfdGFibGUoKSBsYXRlcgogICoKKyAqIFRoaXMgdHdvIGNhc2VzIGFyZSBmcm9tIHR3byBkaWZmZXJlbnQgZnVuY3Rpb25zIHdpdGggdHdvIGRpZmZlcmVudAorICogc2VjdGlvbnMgYW5kIGNhdXNlcyBzZWN0aW9uIG1pc21hdGNoIHdhcm5pbmcuIFNvIHVzZSBfX3JlZiB0byB0ZWxsCisgKiBtb2Rwb3N0IG5vdCB0byBtYWtlIGFueSBub2lzZS4KKyAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKglOVUxMOgkJCXdoZW4gY2FuJ3QgZmluZCBhIHRhYmxlIG1hdGNoaW5nIHRoZSBrZXkKICAqCUVSUl9QVFIoZXJyb3IpOgkJZXJyb3IgdmFsdWUKICAqCXZpcnQgdGFibGUgYWRkcmVzczoJd2hlbiBhIG1hdGNoZWQgdGFibGUgaXMgZm91bmQKICAqLwotc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnNmaV9jaGVja190YWJsZSh1NjQgcGEsIHN0cnVjdCBzZmlfdGFibGVfa2V5ICprZXkpCitzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqCisgX19yZWYgc2ZpX2NoZWNrX3RhYmxlKHU2NCBwYSwgc3RydWN0IHNmaV90YWJsZV9rZXkgKmtleSkKIHsKIAlzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGg7CiAJdm9pZCAqcmV0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggNmQ3YTNmOC4uMjFhMTE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTE3LDcgKzE3LDcgQEAKIG9iai0kKENPTkZJR19TUElfQVUxNTUwKQkJKz0gYXUxNTUwX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0JVVFRFUkZMWSkJCSs9IHNwaV9idXR0ZXJmbHkubwogb2JqLSQoQ09ORklHX1NQSV9HUElPKQkJCSs9IHNwaV9ncGlvLm8KLW9iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IG14Y19zcGkubworb2JqLSQoQ09ORklHX1NQSV9JTVgpCQkJKz0gc3BpX2lteC5vCiBvYmotJChDT05GSUdfU1BJX0xNNzBfTExQKQkJKz0gc3BpX2xtNzBsbHAubwogb2JqLSQoQ09ORklHX1NQSV9QWEEyWFgpCQkrPSBweGEyeHhfc3BpLm8KIG9iai0kKENPTkZJR19TUElfT01BUF9VV0lSRSkJCSs9IG9tYXBfdXdpcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCmluZGV4IGMwZjk1MGEuLmZmNWJiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYworKysgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKQEAgLTUzMiw3ICs1MzIsNyBAQAogCUdFTl9NQVNLX0JJVFMoU1NQX0RBVEFfQklUU18xMiwgU1NQX0NSMF9NQVNLX0RTUywgMCkJfCBcCiAJR0VOX01BU0tfQklUUyhTU1BfTUlDUk9XSVJFX0NIQU5ORUxfRlVMTF9EVVBMRVgsIFNTUF9DUjBfTUFTS19IQUxGRFVQLCA1KSB8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9DTEtfUE9MX0lETEVfTE9XLCBTU1BfQ1IwX01BU0tfU1BPLCA2KSB8IFwKLQlHRU5fTUFTS19CSVRTKFNTUF9DTEtfRkFMTElOR19FREdFLCBTU1BfQ1IwX01BU0tfU1BILCA3KSB8IFwKKwlHRU5fTUFTS19CSVRTKFNTUF9DTEtfU0VDT05EX0VER0UsIFNTUF9DUjBfTUFTS19TUEgsIDcpIHwgXAogCUdFTl9NQVNLX0JJVFMoTk1ES19TU1BfREVGQVVMVF9DTEtSQVRFLCBTU1BfQ1IwX01BU0tfU0NSLCA4KSB8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9CSVRTXzgsIFNTUF9DUjBfTUFTS19DU1MsIDE2KQl8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9JTlRFUkZBQ0VfTU9UT1JPTEFfU1BJLCBTU1BfQ1IwX01BU0tfRlJGLCAyMSkgXApAQCAtMTI0Nyw4ICsxMjQ3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjaGlwX2luZm8tPmlmYWNlID09IFNTUF9JTlRFUkZBQ0VfTU9UT1JPTEFfU1BJKSB7Ci0JCWlmICgoY2hpcF9pbmZvLT5jbGtfcGhhc2UgIT0gU1NQX0NMS19SSVNJTkdfRURHRSkKLQkJICAgICYmIChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX0ZBTExJTkdfRURHRSkpIHsKKwkJaWYgKChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX0ZJUlNUX0VER0UpCisJCSAgICAmJiAoY2hpcF9pbmZvLT5jbGtfcGhhc2UgIT0gU1NQX0NMS19TRUNPTkRfRURHRSkpIHsKIAkJCWRldl9lcnIoY2hpcF9pbmZvLT5kZXYsCiAJCQkJIkNsb2NrIFBoYXNlIGlzIGNvbmZpZ3VyZWQgaW5jb3JyZWN0bHlcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQljaGlwX2luZm8tPmRhdGFfc2l6ZSA9IFNTUF9EQVRBX0JJVFNfMTI7CiAJCWNoaXBfaW5mby0+cnhfbGV2X3RyaWcgPSBTU1BfUlhfMV9PUl9NT1JFX0VMRU07CiAJCWNoaXBfaW5mby0+dHhfbGV2X3RyaWcgPSBTU1BfVFhfMV9PUl9NT1JFX0VNUFRZX0xPQzsKLQkJY2hpcF9pbmZvLT5jbGtfcGhhc2UgPSBTU1BfQ0xLX0ZBTExJTkdfRURHRTsKKwkJY2hpcF9pbmZvLT5jbGtfcGhhc2UgPSBTU1BfQ0xLX1NFQ09ORF9FREdFOwogCQljaGlwX2luZm8tPmNsa19wb2wgPSBTU1BfQ0xLX1BPTF9JRExFX0xPVzsKIAkJY2hpcF9pbmZvLT5jdHJsX2xlbiA9IFNTUF9CSVRTXzg7CiAJCWNoaXBfaW5mby0+d2FpdF9zdGF0ZSA9IFNTUF9NV0lSRV9XQUlUX1pFUk87CkBAIC0xODI2LDcgKzE4MjYsNyBAQAogCQkgKiBTVCBNaWNybyBkZXJpdmF0aXZlLCB0aGlzIGhhcyAzMmJpdCB3aWRlCiAJCSAqIGFuZCAzMiBsb2NhdGlvbnMgZGVlcCBUWC9SWCBGSUZPCiAJCSAqLwotCQkuaWQJPSAweDAwMTA4MDIyLAorCQkuaWQJPSAweDAxMDgwMDIyLAogCQkubWFzawk9IDB4ZmZmZmZmZmYsCiAJCS5kYXRhCT0gJnZlbmRvcl9zdCwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXhjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXhjX3NwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTQ0NzIzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3BpL214Y19zcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDY4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgotICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3NwaS5oPgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJzcGlfaW14IgotCi0jZGVmaW5lIE1YQ19DU1BJUlhEQVRBCQkweDAwCi0jZGVmaW5lIE1YQ19DU1BJVFhEQVRBCQkweDA0Ci0jZGVmaW5lIE1YQ19DU1BJQ1RSTAkJMHgwOAotI2RlZmluZSBNWENfQ1NQSUlOVAkJMHgwYwotI2RlZmluZSBNWENfUkVTRVQJCTB4MWMKLQotLyogZ2VuZXJpYyBkZWZpbmVzIHRvIGFic3RyYWN0IGZyb20gdGhlIGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXRzICovCi0jZGVmaW5lIE1YQ19JTlRfUlIJKDEgPDwgMCkgLyogUmVjZWl2ZSBkYXRhIHJlYWR5IGludGVycnVwdCAqLwotI2RlZmluZSBNWENfSU5UX1RFCSgxIDw8IDEpIC8qIFRyYW5zbWl0IEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCi0KLXN0cnVjdCBteGNfc3BpX2NvbmZpZyB7Ci0JdW5zaWduZWQgaW50IHNwZWVkX2h6OwotCXVuc2lnbmVkIGludCBicHc7Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0JaW50IGNzOwotfTsKLQotc3RydWN0IG14Y19zcGlfZGF0YSB7Ci0Jc3RydWN0IHNwaV9iaXRiYW5nIGJpdGJhbmc7Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbiB4ZmVyX2RvbmU7Ci0Jdm9pZCAqYmFzZTsKLQlpbnQgaXJxOwotCXN0cnVjdCBjbGsgKmNsazsKLQl1bnNpZ25lZCBsb25nIHNwaV9jbGs7Ci0JaW50ICpjaGlwc2VsZWN0OwotCi0JdW5zaWduZWQgaW50IGNvdW50OwotCXZvaWQgKCp0eCkoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKLQl2b2lkICgqcngpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7Ci0Jdm9pZCAqcnhfYnVmOwotCWNvbnN0IHZvaWQgKnR4X2J1ZjsKLQl1bnNpZ25lZCBpbnQgdHhmaWZvOyAvKiBudW1iZXIgb2Ygd29yZHMgcHVzaGVkIGluIHR4IEZJRk8gKi8KLQotCS8qIFNvQyBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KLQl2b2lkICgqaW50Y3RybCkoc3RydWN0IG14Y19zcGlfZGF0YSAqLCBpbnQpOwotCWludCAoKmNvbmZpZykoc3RydWN0IG14Y19zcGlfZGF0YSAqLCBzdHJ1Y3QgbXhjX3NwaV9jb25maWcgKik7Ci0Jdm9pZCAoKnRyaWdnZXIpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7Ci0JaW50ICgqcnhfYXZhaWxhYmxlKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICopOwotfTsKLQotI2RlZmluZSBNWENfU1BJX0JVRl9SWCh0eXBlKQkJCQkJCVwKLXN0YXRpYyB2b2lkIG14Y19zcGlfYnVmX3J4XyMjdHlwZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgdmFsID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJUlhEQVRBKTsJXAotCQkJCQkJCQkJXAotCWlmIChteGNfc3BpLT5yeF9idWYpIHsJCQkJCQlcCi0JCSoodHlwZSAqKW14Y19zcGktPnJ4X2J1ZiA9IHZhbDsJCQkJXAotCQlteGNfc3BpLT5yeF9idWYgKz0gc2l6ZW9mKHR5cGUpOwkJCVwKLQl9CQkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgTVhDX1NQSV9CVUZfVFgodHlwZSkJCQkJCQlcCi1zdGF0aWMgdm9pZCBteGNfc3BpX2J1Zl90eF8jI3R5cGUoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkJCVwKLXsJCQkJCQkJCQlcCi0JdHlwZSB2YWwgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKG14Y19zcGktPnR4X2J1ZikgewkJCQkJCVwKLQkJdmFsID0gKih0eXBlICopbXhjX3NwaS0+dHhfYnVmOwkJCQlcCi0JCW14Y19zcGktPnR4X2J1ZiArPSBzaXplb2YodHlwZSk7CQkJXAotCX0JCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlteGNfc3BpLT5jb3VudCAtPSBzaXplb2YodHlwZSk7CQkJCQlcCi0JCQkJCQkJCQlcCi0Jd3JpdGVsKHZhbCwgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJVFhEQVRBKTsJCQlcCi19Ci0KLU1YQ19TUElfQlVGX1JYKHU4KQotTVhDX1NQSV9CVUZfVFgodTgpCi1NWENfU1BJX0JVRl9SWCh1MTYpCi1NWENfU1BJX0JVRl9UWCh1MTYpCi1NWENfU1BJX0JVRl9SWCh1MzIpCi1NWENfU1BJX0JVRl9UWCh1MzIpCi0KLS8qIEZpcnN0IGVudHJ5IGlzIHJlc2VydmVkLCBzZWNvbmQgZW50cnkgaXMgdmFsaWQgb25seSBpZiBTREhDX1NQSUVOIGlzIHNldAotICogKHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdGhlIGNhc2UgaW4gdGhpcyBkcml2ZXIpCi0gKi8KLXN0YXRpYyBpbnQgbXhjX2Nsa2RpdnNbXSA9IHswLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDI0LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAxOTIsCi0JMjU2LCAzODQsIDUxMiwgNzY4LCAxMDI0fTsKLQotLyogTVgyMSwgTVgyNyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBteGNfc3BpX2Nsa2Rpdl8xKHVuc2lnbmVkIGludCBmaW4sCi0JCXVuc2lnbmVkIGludCBmc3BpKQotewotCWludCBpLCBtYXg7Ci0KLQlpZiAoY3B1X2lzX214MjEoKSkKLQkJbWF4ID0gMTg7Ci0JZWxzZQotCQltYXggPSAxNjsKLQotCWZvciAoaSA9IDI7IGkgPCBtYXg7IGkrKykKLQkJaWYgKGZzcGkgKiBteGNfY2xrZGl2c1tpXSA+PSBmaW4pCi0JCQlyZXR1cm4gaTsKLQotCXJldHVybiBtYXg7Ci19Ci0KLS8qIE1YMSwgTVgzMSwgTVgzNSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBteGNfc3BpX2Nsa2Rpdl8yKHVuc2lnbmVkIGludCBmaW4sCi0JCXVuc2lnbmVkIGludCBmc3BpKQotewotCWludCBpLCBkaXYgPSA0OwotCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQlpZiAoZnNwaSAqIGRpdiA+PSBmaW4pCi0JCQlyZXR1cm4gaTsKLQkJZGl2IDw8PSAxOwotCX0KLQotCXJldHVybiA3OwotfQotCi0jZGVmaW5lIE1YMzFfSU5UUkVHX1RFRU4JKDEgPDwgMCkKLSNkZWZpbmUgTVgzMV9JTlRSRUdfUlJFTgkoMSA8PCAzKQotCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDApCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDEpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfWENICSgxIDw8IDIpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUE9MCSgxIDw8IDQpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUEhBCSgxIDw8IDUpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfU1NDVEwJKDEgPDwgNikKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9TU1BPTAkoMSA8PCA3KQotI2RlZmluZSBNWDMxX0NTUElDVFJMX0JDX1NISUZUCTgKLSNkZWZpbmUgTVgzNV9DU1BJQ1RSTF9CTF9TSElGVAkyMAotI2RlZmluZSBNWDMxX0NTUElDVFJMX0NTX1NISUZUCTI0Ci0jZGVmaW5lIE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQJMTIKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9EUl9TSElGVAkxNgotCi0jZGVmaW5lIE1YMzFfQ1NQSVNUQVRVUwkJMHgxNAotI2RlZmluZSBNWDMxX1NUQVRVU19SUgkJKDEgPDwgMykKLQotLyogVGhlc2UgZnVuY3Rpb25zIGFsc28gd29yayBmb3IgdGhlIGkuTVgzNSwgYnV0IGJlIGF3YXJlIHRoYXQKLSAqIHRoZSBpLk1YMzUgaGFzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHJlZ2lzdGVyIGxheW91dCBmb3IgYml0cwotICogd2UgZG8gbm90IHVzZSBoZXJlLgotICovCi1zdGF0aWMgdm9pZCBteDMxX2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsID0gMDsKLQotCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQotCQl2YWwgfD0gTVgzMV9JTlRSRUdfVEVFTjsKLQlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKLQkJdmFsIHw9IE1YMzFfSU5UUkVHX1JSRU47Ci0KLQl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpOwotfQotCi1zdGF0aWMgdm9pZCBteDMxX3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0JcmVnIHw9IE1YMzFfQ1NQSUNUUkxfWENIOwotCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotfQotCi1zdGF0aWMgaW50IG14MzFfY29uZmlnKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksCi0JCXN0cnVjdCBteGNfc3BpX2NvbmZpZyAqY29uZmlnKQotewotCXVuc2lnbmVkIGludCByZWcgPSBNWDMxX0NTUElDVFJMX0VOQUJMRSB8IE1YMzFfQ1NQSUNUUkxfTUFTVEVSOwotCi0JcmVnIHw9IG14Y19zcGlfY2xrZGl2XzIobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKLQkJTVgzMV9DU1BJQ1RSTF9EUl9TSElGVDsKLQotCWlmIChjcHVfaXNfbXgzMSgpKQotCQlyZWcgfD0gKGNvbmZpZy0+YnB3IC0gMSkgPDwgTVgzMV9DU1BJQ1RSTF9CQ19TSElGVDsKLQllbHNlIGlmIChjcHVfaXNfbXgzNSgpKSB7Ci0JCXJlZyB8PSAoY29uZmlnLT5icHcgLSAxKSA8PCBNWDM1X0NTUElDVFJMX0JMX1NISUZUOwotCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9TU0NUTDsKLQl9Ci0KLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCi0JCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BIQTsKLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCi0JCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BPTDsKLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NTX0hJR0gpCi0JCXJlZyB8PSBNWDMxX0NTUElDVFJMX1NTUE9MOwotCWlmIChjb25maWctPmNzIDwgMCkgewotCQlpZiAoY3B1X2lzX214MzEoKSkKLQkJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDMxX0NTUElDVFJMX0NTX1NISUZUOwotCQllbHNlIGlmIChjcHVfaXNfbXgzNSgpKQotCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQ7Ci0JfQotCi0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDMxX3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVgzMV9DU1BJU1RBVFVTKSAmIE1YMzFfU1RBVFVTX1JSOwotfQotCi0jZGVmaW5lIE1YMjdfSU5UUkVHX1JSCQkoMSA8PCA0KQotI2RlZmluZSBNWDI3X0lOVFJFR19URUVOCSgxIDw8IDkpCi0jZGVmaW5lIE1YMjdfSU5UUkVHX1JSRU4JKDEgPDwgMTMpCi0KLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QT0wJKDEgPDwgNSkKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QSEEJKDEgPDwgNikKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9TU1BPTAkoMSA8PCA4KQotI2RlZmluZSBNWDI3X0NTUElDVFJMX1hDSAkoMSA8PCA5KQotI2RlZmluZSBNWDI3X0NTUElDVFJMX0VOQUJMRQkoMSA8PCAxMCkKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMTEpCi0jZGVmaW5lIE1YMjdfQ1NQSUNUUkxfRFJfU0hJRlQJMTQKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9DU19TSElGVAkxOQotCi1zdGF0aWMgdm9pZCBteDI3X2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsID0gMDsKLQotCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQotCQl2YWwgfD0gTVgyN19JTlRSRUdfVEVFTjsKLQlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKLQkJdmFsIHw9IE1YMjdfSU5UUkVHX1JSRU47Ci0KLQl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpOwotfQotCi1zdGF0aWMgdm9pZCBteDI3X3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0JcmVnIHw9IE1YMjdfQ1NQSUNUUkxfWENIOwotCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotfQotCi1zdGF0aWMgaW50IG14MjdfY29uZmlnKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksCi0JCXN0cnVjdCBteGNfc3BpX2NvbmZpZyAqY29uZmlnKQotewotCXVuc2lnbmVkIGludCByZWcgPSBNWDI3X0NTUElDVFJMX0VOQUJMRSB8IE1YMjdfQ1NQSUNUUkxfTUFTVEVSOwotCi0JcmVnIHw9IG14Y19zcGlfY2xrZGl2XzEobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKLQkJTVgyN19DU1BJQ1RSTF9EUl9TSElGVDsKLQlyZWcgfD0gY29uZmlnLT5icHcgLSAxOwotCi0JaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQotCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QSEE7Ci0JaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQotCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QT0w7Ci0JaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DU19ISUdIKQotCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9TU1BPTDsKLQlpZiAoY29uZmlnLT5jcyA8IDApCi0JCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDI3X0NTUElDVFJMX0NTX1NISUZUOwotCi0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDI3X3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpICYgTVgyN19JTlRSRUdfUlI7Ci19Ci0KLSNkZWZpbmUgTVgxX0lOVFJFR19SUgkJKDEgPDwgMykKLSNkZWZpbmUgTVgxX0lOVFJFR19URUVOCQkoMSA8PCA4KQotI2RlZmluZSBNWDFfSU5UUkVHX1JSRU4JCSgxIDw8IDExKQotCi0jZGVmaW5lIE1YMV9DU1BJQ1RSTF9QT0wJKDEgPDwgNCkKLSNkZWZpbmUgTVgxX0NTUElDVFJMX1BIQQkoMSA8PCA1KQotI2RlZmluZSBNWDFfQ1NQSUNUUkxfWENICSgxIDw8IDgpCi0jZGVmaW5lIE1YMV9DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgOSkKLSNkZWZpbmUgTVgxX0NTUElDVFJMX01BU1RFUgkoMSA8PCAxMCkKLSNkZWZpbmUgTVgxX0NTUElDVFJMX0RSX1NISUZUCTEzCi0KLXN0YXRpYyB2b2lkIG14MV9pbnRjdHJsKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksIGludCBlbmFibGUpCi17Ci0JdW5zaWduZWQgaW50IHZhbCA9IDA7Ci0KLQlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKLQkJdmFsIHw9IE1YMV9JTlRSRUdfVEVFTjsKLQlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKLQkJdmFsIHw9IE1YMV9JTlRSRUdfUlJFTjsKLQotCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MV90cmlnZ2VyKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCi17Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCXJlZyA9IHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotCXJlZyB8PSBNWDFfQ1NQSUNUUkxfWENIOwotCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotfQotCi1zdGF0aWMgaW50IG14MV9jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKLQkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCi17Ci0JdW5zaWduZWQgaW50IHJlZyA9IE1YMV9DU1BJQ1RSTF9FTkFCTEUgfCBNWDFfQ1NQSUNUUkxfTUFTVEVSOwotCi0JcmVnIHw9IG14Y19zcGlfY2xrZGl2XzIobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKLQkJTVgxX0NTUElDVFJMX0RSX1NISUZUOwotCXJlZyB8PSBjb25maWctPmJwdyAtIDE7Ci0KLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCi0JCXJlZyB8PSBNWDFfQ1NQSUNUUkxfUEhBOwotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKLQkJcmVnIHw9IE1YMV9DU1BJQ1RSTF9QT0w7Ci0KLQl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9yeF9hdmFpbGFibGUoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKLXsKLQlyZXR1cm4gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJSU5UKSAmIE1YMV9JTlRSRUdfUlI7Ci19Ci0KLXN0YXRpYyB2b2lkIG14Y19zcGlfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgaXNfYWN0aXZlKQotewotCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQl1bnNpZ25lZCBpbnQgY3MgPSAwOwotCWludCBncGlvID0gbXhjX3NwaS0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKLQlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgY29uZmlnOwotCi0JaWYgKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKQotCQljcyA9IDE7Ci0KLQlpZiAoaXNfYWN0aXZlID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKLQkJaWYgKGdwaW8gPj0gMCkKLQkJCWdwaW9fc2V0X3ZhbHVlKGdwaW8sICFjcyk7Ci0JCXJldHVybjsKLQl9Ci0KLQljb25maWcuYnB3ID0gc3BpLT5iaXRzX3Blcl93b3JkOwotCWNvbmZpZy5zcGVlZF9oeiA9IHNwaS0+bWF4X3NwZWVkX2h6OwotCWNvbmZpZy5tb2RlID0gc3BpLT5tb2RlOwotCWNvbmZpZy5jcyA9IG14Y19zcGktPmNoaXBzZWxlY3Rbc3BpLT5jaGlwX3NlbGVjdF07Ci0KLQlteGNfc3BpLT5jb25maWcobXhjX3NwaSwgJmNvbmZpZyk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBmdW5jdGlvbnMgZm9yIHRyYW5zZmVyICovCi0JaWYgKGNvbmZpZy5icHcgPD0gOCkgewotCQlteGNfc3BpLT5yeCA9IG14Y19zcGlfYnVmX3J4X3U4OwotCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3U4OwotCX0gZWxzZSBpZiAoY29uZmlnLmJwdyA8PSAxNikgewotCQlteGNfc3BpLT5yeCA9IG14Y19zcGlfYnVmX3J4X3UxNjsKLQkJbXhjX3NwaS0+dHggPSBteGNfc3BpX2J1Zl90eF91MTY7Ci0JfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDMyKSB7Ci0JCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTMyOwotCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3UzMjsKLQl9IGVsc2UKLQkJQlVHKCk7Ci0KLQlpZiAoZ3BpbyA+PSAwKQotCQlncGlvX3NldF92YWx1ZShncGlvLCBjcyk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIG14Y19zcGlfcHVzaChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXdoaWxlIChteGNfc3BpLT50eGZpZm8gPCA4KSB7Ci0JCWlmICghbXhjX3NwaS0+Y291bnQpCi0JCQlicmVhazsKLQkJbXhjX3NwaS0+dHgobXhjX3NwaSk7Ci0JCW14Y19zcGktPnR4ZmlmbysrOwotCX0KLQotCW14Y19zcGktPnRyaWdnZXIobXhjX3NwaSk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBteGNfc3BpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IGRldl9pZDsKLQotCXdoaWxlIChteGNfc3BpLT5yeF9hdmFpbGFibGUobXhjX3NwaSkpIHsKLQkJbXhjX3NwaS0+cngobXhjX3NwaSk7Ci0JCW14Y19zcGktPnR4Zmlmby0tOwotCX0KLQotCWlmIChteGNfc3BpLT5jb3VudCkgewotCQlteGNfc3BpX3B1c2gobXhjX3NwaSk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQlpZiAobXhjX3NwaS0+dHhmaWZvKSB7Ci0JCS8qIE5vIGRhdGEgbGVmdCB0byBwdXNoLCBidXQgc3RpbGwgd2FpdGluZyBmb3IgcnggZGF0YSwKLQkJICogZW5hYmxlIHJlY2VpdmUgZGF0YSBhdmFpbGFibGUgaW50ZXJydXB0LgotCQkgKi8KLQkJbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCBNWENfSU5UX1JSKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCW14Y19zcGktPmludGN0cmwobXhjX3NwaSwgMCk7Ci0JY29tcGxldGUoJm14Y19zcGktPnhmZXJfZG9uZSk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXhjX3NwaV9zZXR1cHhmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKLQkJCQkgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKLXsKLQlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0Jc3RydWN0IG14Y19zcGlfY29uZmlnIGNvbmZpZzsKLQotCWNvbmZpZy5icHcgPSB0ID8gdC0+Yml0c19wZXJfd29yZCA6IHNwaS0+Yml0c19wZXJfd29yZDsKLQljb25maWcuc3BlZWRfaHogID0gdCA/IHQtPnNwZWVkX2h6IDogc3BpLT5tYXhfc3BlZWRfaHo7Ci0JY29uZmlnLm1vZGUgPSBzcGktPm1vZGU7Ci0KLQlteGNfc3BpLT5jb25maWcobXhjX3NwaSwgJmNvbmZpZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteGNfc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCi0JCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIpCi17Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCi0JbXhjX3NwaS0+dHhfYnVmID0gdHJhbnNmZXItPnR4X2J1ZjsKLQlteGNfc3BpLT5yeF9idWYgPSB0cmFuc2Zlci0+cnhfYnVmOwotCW14Y19zcGktPmNvdW50ID0gdHJhbnNmZXItPmxlbjsKLQlteGNfc3BpLT50eGZpZm8gPSAwOwotCi0JaW5pdF9jb21wbGV0aW9uKCZteGNfc3BpLT54ZmVyX2RvbmUpOwotCi0JbXhjX3NwaV9wdXNoKG14Y19zcGkpOwotCi0JbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCBNWENfSU5UX1RFKTsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7Ci0KLQlyZXR1cm4gdHJhbnNmZXItPmxlbjsKLX0KLQotc3RhdGljIGludCBteGNfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JaWYgKCFzcGktPmJpdHNfcGVyX3dvcmQpCi0JCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7Ci0KLQlwcl9kZWJ1ZygiJXM6IG1vZGUgJWQsICV1IGJwdywgJWQgaHpcbiIsIF9fZnVuY19fLAotCQkgc3BpLT5tb2RlLCBzcGktPmJpdHNfcGVyX3dvcmQsIHNwaS0+bWF4X3NwZWVkX2h6KTsKLQotCW14Y19zcGlfY2hpcHNlbGVjdChzcGksIEJJVEJBTkdfQ1NfSU5BQ1RJVkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG14Y19zcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotfQotCi1zdGF0aWMgaW50IF9faW5pdCBteGNfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNwaV9pbXhfbWFzdGVyICpteGNfcGxhdGZvcm1faW5mbzsKLQlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwotCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGk7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IGksIHJldDsKLQotCW14Y19wbGF0Zm9ybV9pbmZvID0gKHN0cnVjdCBzcGlfaW14X21hc3RlciAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghbXhjX3BsYXRmb3JtX2luZm8pIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IHRoZSBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IG14Y19zcGlfZGF0YSkpOwotCWlmICghbWFzdGVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1hc3Rlcik7Ci0KLQltYXN0ZXItPmJ1c19udW0gPSBwZGV2LT5pZDsKLQltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gbXhjX3BsYXRmb3JtX2luZm8tPm51bV9jaGlwc2VsZWN0OwotCi0JbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlteGNfc3BpLT5iaXRiYW5nLm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7Ci0JbXhjX3NwaS0+Y2hpcHNlbGVjdCA9IG14Y19wbGF0Zm9ybV9pbmZvLT5jaGlwc2VsZWN0OwotCi0JZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykgewotCQlpZiAobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSA8IDApCi0JCQljb250aW51ZTsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG14Y19zcGktPmNoaXBzZWxlY3RbaV0sIERSSVZFUl9OQU1FKTsKLQkJaWYgKHJldCkgewotCQkJaS0tOwotCQkJd2hpbGUgKGkgPiAwKQotCQkJCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCi0JCQkJCWdwaW9fZnJlZShteGNfc3BpLT5jaGlwc2VsZWN0W2ktLV0pOwotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGNzIGdwaW9zIik7Ci0JCQlnb3RvIG91dF9tYXN0ZXJfcHV0OwotCQl9Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChteGNfc3BpLT5jaGlwc2VsZWN0W2ldLCAxKTsKLQl9Ci0KLQlteGNfc3BpLT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBteGNfc3BpX2NoaXBzZWxlY3Q7Ci0JbXhjX3NwaS0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IG14Y19zcGlfc2V0dXB4ZmVyOwotCW14Y19zcGktPmJpdGJhbmcudHhyeF9idWZzID0gbXhjX3NwaV90cmFuc2ZlcjsKLQlteGNfc3BpLT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgPSBteGNfc3BpX3NldHVwOwotCW14Y19zcGktPmJpdGJhbmcubWFzdGVyLT5jbGVhbnVwID0gbXhjX3NwaV9jbGVhbnVwOwotCi0JaW5pdF9jb21wbGV0aW9uKCZteGNfc3BpLT54ZmVyX2RvbmUpOwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgcGxhdGZvcm0gcmVzb3VyY2VcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9ncGlvX2ZyZWU7Ci0JfQotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dF9ncGlvX2ZyZWU7Ci0JfQotCi0JbXhjX3NwaS0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQlpZiAoIW14Y19zcGktPmJhc2UpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXRfcmVsZWFzZV9tZW07Ci0JfQotCi0JbXhjX3NwaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIW14Y19zcGktPmlycSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9pb3VubWFwOwotCX0KLQotCXJldCA9IHJlcXVlc3RfaXJxKG14Y19zcGktPmlycSwgbXhjX3NwaV9pc3IsIDAsIERSSVZFUl9OQU1FLCBteGNfc3BpKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpcnElZDogJWRcbiIsIG14Y19zcGktPmlycSwgcmV0KTsKLQkJZ290byBvdXRfaW91bm1hcDsKLQl9Ci0KLQlpZiAoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKSB7Ci0JCW14Y19zcGktPmludGN0cmwgPSBteDMxX2ludGN0cmw7Ci0JCW14Y19zcGktPmNvbmZpZyA9IG14MzFfY29uZmlnOwotCQlteGNfc3BpLT50cmlnZ2VyID0gbXgzMV90cmlnZ2VyOwotCQlteGNfc3BpLT5yeF9hdmFpbGFibGUgPSBteDMxX3J4X2F2YWlsYWJsZTsKLQl9IGVsc2UgIGlmIChjcHVfaXNfbXgyNygpIHx8IGNwdV9pc19teDIxKCkpIHsKLQkJbXhjX3NwaS0+aW50Y3RybCA9IG14MjdfaW50Y3RybDsKLQkJbXhjX3NwaS0+Y29uZmlnID0gbXgyN19jb25maWc7Ci0JCW14Y19zcGktPnRyaWdnZXIgPSBteDI3X3RyaWdnZXI7Ci0JCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MjdfcnhfYXZhaWxhYmxlOwotCX0gZWxzZSBpZiAoY3B1X2lzX214MSgpKSB7Ci0JCW14Y19zcGktPmludGN0cmwgPSBteDFfaW50Y3RybDsKLQkJbXhjX3NwaS0+Y29uZmlnID0gbXgxX2NvbmZpZzsKLQkJbXhjX3NwaS0+dHJpZ2dlciA9IG14MV90cmlnZ2VyOwotCQlteGNfc3BpLT5yeF9hdmFpbGFibGUgPSBteDFfcnhfYXZhaWxhYmxlOwotCX0gZWxzZQotCQlCVUcoKTsKLQotCW14Y19zcGktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihteGNfc3BpLT5jbGspKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgY2xvY2tcbiIpOwotCQlyZXQgPSBQVFJfRVJSKG14Y19zcGktPmNsayk7Ci0JCWdvdG8gb3V0X2ZyZWVfaXJxOwotCX0KLQotCWNsa19lbmFibGUobXhjX3NwaS0+Y2xrKTsKLQlteGNfc3BpLT5zcGlfY2xrID0gY2xrX2dldF9yYXRlKG14Y19zcGktPmNsayk7Ci0KLQlpZiAoIWNwdV9pc19teDMxKCkgfHwgIWNwdV9pc19teDM1KCkpCi0JCXdyaXRlbCgxLCBteGNfc3BpLT5iYXNlICsgTVhDX1JFU0VUKTsKLQotCW14Y19zcGktPmludGN0cmwobXhjX3NwaSwgMCk7Ci0KLQlyZXQgPSBzcGlfYml0YmFuZ19zdGFydCgmbXhjX3NwaS0+Yml0YmFuZyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJiaXRiYW5nIHN0YXJ0IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwotCQlnb3RvIG91dF9jbGtfcHV0OwotCX0KLQotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcm9iZWRcbiIpOwotCi0JcmV0dXJuIHJldDsKLQotb3V0X2Nsa19wdXQ6Ci0JY2xrX2Rpc2FibGUobXhjX3NwaS0+Y2xrKTsKLQljbGtfcHV0KG14Y19zcGktPmNsayk7Ci1vdXRfZnJlZV9pcnE6Ci0JZnJlZV9pcnEobXhjX3NwaS0+aXJxLCBteGNfc3BpKTsKLW91dF9pb3VubWFwOgotCWlvdW5tYXAobXhjX3NwaS0+YmFzZSk7Ci1vdXRfcmVsZWFzZV9tZW06Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci1vdXRfZ3Bpb19mcmVlOgotCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspCi0JCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCi0JCQlncGlvX2ZyZWUobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSk7Ci1vdXRfbWFzdGVyX3B1dDoKLQlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwotCWtmcmVlKG1hc3Rlcik7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2V4aXQgbXhjX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0JaW50IGk7Ci0KLQlzcGlfYml0YmFuZ19zdG9wKCZteGNfc3BpLT5iaXRiYW5nKTsKLQotCXdyaXRlbCgwLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQljbGtfZGlzYWJsZShteGNfc3BpLT5jbGspOwotCWNsa19wdXQobXhjX3NwaS0+Y2xrKTsKLQlmcmVlX2lycShteGNfc3BpLT5pcnEsIG14Y19zcGkpOwotCWlvdW5tYXAobXhjX3NwaS0+YmFzZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKQotCQlpZiAobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSA+PSAwKQotCQkJZ3Bpb19mcmVlKG14Y19zcGktPmNoaXBzZWxlY3RbaV0pOwotCi0Jc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKLQotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXhjX3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAgIH0sCi0JLnByb2JlID0gbXhjX3NwaV9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AobXhjX3NwaV9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgbXhjX3NwaV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXhjX3NwaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXhjX3NwaV9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14Y19zcGlfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQobXhjX3NwaV9pbml0KTsKLW1vZHVsZV9leGl0KG14Y19zcGlfZXhpdCk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiU1BJIE1hc3RlciBDb250cm9sbGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCmluZGV4IDMxZGQ1NmYuLmM4YzJiNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKQEAgLTE2NjgsMTAgKzE2NjgsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgcHhhMnh4X3NwaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBkcnZfZGF0YS0+c3NwOwogCWludCBzdGF0dXMgPSAwOwogCkBAIC0xNjg0LDkgKzE2ODMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9zcGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBkcnZfZGF0YS0+c3NwOwogCWludCBzdGF0dXMgPSAwOwogCkBAIC0xNzAzLDI2ICsxNzAyLDI5IEBACiAJLyogU3RhcnQgdGhlIHF1ZXVlIHJ1bm5pbmcgKi8KIAlzdGF0dXMgPSBzdGFydF9xdWV1ZShkcnZfZGF0YSk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gc3RhcnRpbmcgcXVldWUgKCVkKVxuIiwgc3RhdHVzKTsKKwkJZGV2X2VycihkZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHF1ZXVlICglZClcbiIsIHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBweGEyeHhfc3BpX3N1c3BlbmQgTlVMTAotI2RlZmluZSBweGEyeHhfc3BpX3Jlc3VtZSBOVUxMCi0jZW5kaWYgLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGEyeHhfc3BpX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YTJ4eF9zcGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YTJ4eF9zcGlfcmVzdW1lLAorfTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAicHhhMnh4LXNwaSIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJweGEyeHgtc3BpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGEyeHhfc3BpX3BtX29wcywKKyNlbmRpZgogCX0sCiAJLnJlbW92ZSA9IHB4YTJ4eF9zcGlfcmVtb3ZlLAogCS5zaHV0ZG93biA9IHB4YTJ4eF9zcGlfc2h1dGRvd24sCi0JLnN1c3BlbmQgPSBweGEyeHhfc3BpX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHB4YTJ4eF9zcGlfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMnh4X3NwaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljMjJlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpAQCAtMCwwICsxLDY4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAic3BpX2lteCIKKworI2RlZmluZSBNWENfQ1NQSVJYREFUQQkJMHgwMAorI2RlZmluZSBNWENfQ1NQSVRYREFUQQkJMHgwNAorI2RlZmluZSBNWENfQ1NQSUNUUkwJCTB4MDgKKyNkZWZpbmUgTVhDX0NTUElJTlQJCTB4MGMKKyNkZWZpbmUgTVhDX1JFU0VUCQkweDFjCisKKy8qIGdlbmVyaWMgZGVmaW5lcyB0byBhYnN0cmFjdCBmcm9tIHRoZSBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0cyAqLworI2RlZmluZSBNWENfSU5UX1JSCSgxIDw8IDApIC8qIFJlY2VpdmUgZGF0YSByZWFkeSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTVhDX0lOVF9URQkoMSA8PCAxKSAvKiBUcmFuc21pdCBGSUZPIGVtcHR5IGludGVycnVwdCAqLworCitzdHJ1Y3Qgc3BpX2lteF9jb25maWcgeworCXVuc2lnbmVkIGludCBzcGVlZF9oejsKKwl1bnNpZ25lZCBpbnQgYnB3OworCXVuc2lnbmVkIGludCBtb2RlOworCWludCBjczsKK307CisKK3N0cnVjdCBzcGlfaW14X2RhdGEgeworCXN0cnVjdCBzcGlfYml0YmFuZyBiaXRiYW5nOworCisJc3RydWN0IGNvbXBsZXRpb24geGZlcl9kb25lOworCXZvaWQgKmJhc2U7CisJaW50IGlycTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgbG9uZyBzcGlfY2xrOworCWludCAqY2hpcHNlbGVjdDsKKworCXVuc2lnbmVkIGludCBjb3VudDsKKwl2b2lkICgqdHgpKHN0cnVjdCBzcGlfaW14X2RhdGEgKik7CisJdm9pZCAoKnJ4KShzdHJ1Y3Qgc3BpX2lteF9kYXRhICopOworCXZvaWQgKnJ4X2J1ZjsKKwljb25zdCB2b2lkICp0eF9idWY7CisJdW5zaWduZWQgaW50IHR4ZmlmbzsgLyogbnVtYmVyIG9mIHdvcmRzIHB1c2hlZCBpbiB0eCBGSUZPICovCisKKwkvKiBTb0Mgc3BlY2lmaWMgZnVuY3Rpb25zICovCisJdm9pZCAoKmludGN0cmwpKHN0cnVjdCBzcGlfaW14X2RhdGEgKiwgaW50KTsKKwlpbnQgKCpjb25maWcpKHN0cnVjdCBzcGlfaW14X2RhdGEgKiwgc3RydWN0IHNwaV9pbXhfY29uZmlnICopOworCXZvaWQgKCp0cmlnZ2VyKShzdHJ1Y3Qgc3BpX2lteF9kYXRhICopOworCWludCAoKnJ4X2F2YWlsYWJsZSkoc3RydWN0IHNwaV9pbXhfZGF0YSAqKTsKK307CisKKyNkZWZpbmUgTVhDX1NQSV9CVUZfUlgodHlwZSkJCQkJCQlcCitzdGF0aWMgdm9pZCBzcGlfaW14X2J1Zl9yeF8jI3R5cGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IHZhbCA9IHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSVJYREFUQSk7CVwKKwkJCQkJCQkJCVwKKwlpZiAoc3BpX2lteC0+cnhfYnVmKSB7CQkJCQkJXAorCQkqKHR5cGUgKilzcGlfaW14LT5yeF9idWYgPSB2YWw7CQkJCVwKKwkJc3BpX2lteC0+cnhfYnVmICs9IHNpemVvZih0eXBlKTsJCQlcCisJfQkJCQkJCQkJXAorfQorCisjZGVmaW5lIE1YQ19TUElfQlVGX1RYKHR5cGUpCQkJCQkJXAorc3RhdGljIHZvaWQgc3BpX2lteF9idWZfdHhfIyN0eXBlKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCQlcCit7CQkJCQkJCQkJXAorCXR5cGUgdmFsID0gMDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzcGlfaW14LT50eF9idWYpIHsJCQkJCQlcCisJCXZhbCA9ICoodHlwZSAqKXNwaV9pbXgtPnR4X2J1ZjsJCQkJXAorCQlzcGlfaW14LT50eF9idWYgKz0gc2l6ZW9mKHR5cGUpOwkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJc3BpX2lteC0+Y291bnQgLT0gc2l6ZW9mKHR5cGUpOwkJCQkJXAorCQkJCQkJCQkJXAorCXdyaXRlbCh2YWwsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSVRYREFUQSk7CQkJXAorfQorCitNWENfU1BJX0JVRl9SWCh1OCkKK01YQ19TUElfQlVGX1RYKHU4KQorTVhDX1NQSV9CVUZfUlgodTE2KQorTVhDX1NQSV9CVUZfVFgodTE2KQorTVhDX1NQSV9CVUZfUlgodTMyKQorTVhDX1NQSV9CVUZfVFgodTMyKQorCisvKiBGaXJzdCBlbnRyeSBpcyByZXNlcnZlZCwgc2Vjb25kIGVudHJ5IGlzIHZhbGlkIG9ubHkgaWYgU0RIQ19TUElFTiBpcyBzZXQKKyAqICh3aGljaCBpcyBjdXJyZW50bHkgbm90IHRoZSBjYXNlIGluIHRoaXMgZHJpdmVyKQorICovCitzdGF0aWMgaW50IG14Y19jbGtkaXZzW10gPSB7MCwgMywgNCwgNiwgOCwgMTIsIDE2LCAyNCwgMzIsIDQ4LCA2NCwgOTYsIDEyOCwgMTkyLAorCTI1NiwgMzg0LCA1MTIsIDc2OCwgMTAyNH07CisKKy8qIE1YMjEsIE1YMjcgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BpX2lteF9jbGtkaXZfMSh1bnNpZ25lZCBpbnQgZmluLAorCQl1bnNpZ25lZCBpbnQgZnNwaSkKK3sKKwlpbnQgaSwgbWF4OworCisJaWYgKGNwdV9pc19teDIxKCkpCisJCW1heCA9IDE4OworCWVsc2UKKwkJbWF4ID0gMTY7CisKKwlmb3IgKGkgPSAyOyBpIDwgbWF4OyBpKyspCisJCWlmIChmc3BpICogbXhjX2Nsa2RpdnNbaV0gPj0gZmluKQorCQkJcmV0dXJuIGk7CisKKwlyZXR1cm4gbWF4OworfQorCisvKiBNWDEsIE1YMzEsIE1YMzUgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BpX2lteF9jbGtkaXZfMih1bnNpZ25lZCBpbnQgZmluLAorCQl1bnNpZ25lZCBpbnQgZnNwaSkKK3sKKwlpbnQgaSwgZGl2ID0gNDsKKworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJaWYgKGZzcGkgKiBkaXYgPj0gZmluKQorCQkJcmV0dXJuIGk7CisJCWRpdiA8PD0gMTsKKwl9CisKKwlyZXR1cm4gNzsKK30KKworI2RlZmluZSBNWDMxX0lOVFJFR19URUVOCSgxIDw8IDApCisjZGVmaW5lIE1YMzFfSU5UUkVHX1JSRU4JKDEgPDwgMykKKworI2RlZmluZSBNWDMxX0NTUElDVFJMX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZSBNWDMxX0NTUElDVFJMX01BU1RFUgkoMSA8PCAxKQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1hDSAkoMSA8PCAyKQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1BPTAkoMSA8PCA0KQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1BIQQkoMSA8PCA1KQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1NTQ1RMCSgxIDw8IDYpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfU1NQT0wJKDEgPDwgNykKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9CQ19TSElGVAk4CisjZGVmaW5lIE1YMzVfQ1NQSUNUUkxfQkxfU0hJRlQJMjAKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9DU19TSElGVAkyNAorI2RlZmluZSBNWDM1X0NTUElDVFJMX0NTX1NISUZUCTEyCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfRFJfU0hJRlQJMTYKKworI2RlZmluZSBNWDMxX0NTUElTVEFUVVMJCTB4MTQKKyNkZWZpbmUgTVgzMV9TVEFUVVNfUlIJCSgxIDw8IDMpCisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhbHNvIHdvcmsgZm9yIHRoZSBpLk1YMzUsIGJ1dCBiZSBhd2FyZSB0aGF0CisgKiB0aGUgaS5NWDM1IGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXQgZm9yIGJpdHMKKyAqIHdlIGRvIG5vdCB1c2UgaGVyZS4KKyAqLworc3RhdGljIHZvaWQgbXgzMV9pbnRjdHJsKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKKwkJdmFsIHw9IE1YMzFfSU5UUkVHX1RFRU47CisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfUlIpCisJCXZhbCB8PSBNWDMxX0lOVFJFR19SUkVOOworCisJd3JpdGVsKHZhbCwgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJSU5UKTsKK30KKworc3RhdGljIHZvaWQgbXgzMV90cmlnZ2VyKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCXJlZyB8PSBNWDMxX0NTUElDVFJMX1hDSDsKKwl3cml0ZWwocmVnLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKK30KKworc3RhdGljIGludCBteDMxX2NvbmZpZyhzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14LAorCQlzdHJ1Y3Qgc3BpX2lteF9jb25maWcgKmNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgcmVnID0gTVgzMV9DU1BJQ1RSTF9FTkFCTEUgfCBNWDMxX0NTUElDVFJMX01BU1RFUjsKKworCXJlZyB8PSBzcGlfaW14X2Nsa2Rpdl8yKHNwaV9pbXgtPnNwaV9jbGssIGNvbmZpZy0+c3BlZWRfaHopIDw8CisJCU1YMzFfQ1NQSUNUUkxfRFJfU0hJRlQ7CisKKwlpZiAoY3B1X2lzX214MzEoKSkKKwkJcmVnIHw9IChjb25maWctPmJwdyAtIDEpIDw8IE1YMzFfQ1NQSUNUUkxfQkNfU0hJRlQ7CisJZWxzZSBpZiAoY3B1X2lzX214MzUoKSkgeworCQlyZWcgfD0gKGNvbmZpZy0+YnB3IC0gMSkgPDwgTVgzNV9DU1BJQ1RSTF9CTF9TSElGVDsKKwkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfU1NDVEw7CisJfQorCisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQorCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9QSEE7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQorCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9QT0w7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DU19ISUdIKQorCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9TU1BPTDsKKwlpZiAoY29uZmlnLT5jcyA8IDApIHsKKwkJaWYgKGNwdV9pc19teDMxKCkpCisJCQlyZWcgfD0gKGNvbmZpZy0+Y3MgKyAzMikgPDwgTVgzMV9DU1BJQ1RSTF9DU19TSElGVDsKKwkJZWxzZSBpZiAoY3B1X2lzX214MzUoKSkKKwkJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDM1X0NTUElDVFJMX0NTX1NISUZUOworCX0KKworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXgzMV9yeF9hdmFpbGFibGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwlyZXR1cm4gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YMzFfQ1NQSVNUQVRVUykgJiBNWDMxX1NUQVRVU19SUjsKK30KKworI2RlZmluZSBNWDI3X0lOVFJFR19SUgkJKDEgPDwgNCkKKyNkZWZpbmUgTVgyN19JTlRSRUdfVEVFTgkoMSA8PCA5KQorI2RlZmluZSBNWDI3X0lOVFJFR19SUkVOCSgxIDw8IDEzKQorCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfUE9MCSgxIDw8IDUpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfUEhBCSgxIDw8IDYpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfU1NQT0wJKDEgPDwgOCkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9YQ0gJKDEgPDwgOSkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgMTApCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDExKQorI2RlZmluZSBNWDI3X0NTUElDVFJMX0RSX1NISUZUCTE0CisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfQ1NfU0hJRlQJMTkKKworc3RhdGljIHZvaWQgbXgyN19pbnRjdHJsKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKKwkJdmFsIHw9IE1YMjdfSU5UUkVHX1RFRU47CisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfUlIpCisJCXZhbCB8PSBNWDI3X0lOVFJFR19SUkVOOworCisJd3JpdGVsKHZhbCwgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJSU5UKTsKK30KKworc3RhdGljIHZvaWQgbXgyN190cmlnZ2VyKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCXJlZyB8PSBNWDI3X0NTUElDVFJMX1hDSDsKKwl3cml0ZWwocmVnLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKK30KKworc3RhdGljIGludCBteDI3X2NvbmZpZyhzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14LAorCQlzdHJ1Y3Qgc3BpX2lteF9jb25maWcgKmNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgcmVnID0gTVgyN19DU1BJQ1RSTF9FTkFCTEUgfCBNWDI3X0NTUElDVFJMX01BU1RFUjsKKworCXJlZyB8PSBzcGlfaW14X2Nsa2Rpdl8xKHNwaV9pbXgtPnNwaV9jbGssIGNvbmZpZy0+c3BlZWRfaHopIDw8CisJCU1YMjdfQ1NQSUNUUkxfRFJfU0hJRlQ7CisJcmVnIHw9IGNvbmZpZy0+YnB3IC0gMTsKKworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BIQSkKKwkJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfUEhBOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKKwkJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfUE9MOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1NfSElHSCkKKwkJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfU1NQT0w7CisJaWYgKGNvbmZpZy0+Y3MgPCAwKQorCQlyZWcgfD0gKGNvbmZpZy0+Y3MgKyAzMikgPDwgTVgyN19DU1BJQ1RSTF9DU19TSElGVDsKKworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXgyN19yeF9hdmFpbGFibGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwlyZXR1cm4gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJSU5UKSAmIE1YMjdfSU5UUkVHX1JSOworfQorCisjZGVmaW5lIE1YMV9JTlRSRUdfUlIJCSgxIDw8IDMpCisjZGVmaW5lIE1YMV9JTlRSRUdfVEVFTgkJKDEgPDwgOCkKKyNkZWZpbmUgTVgxX0lOVFJFR19SUkVOCQkoMSA8PCAxMSkKKworI2RlZmluZSBNWDFfQ1NQSUNUUkxfUE9MCSgxIDw8IDQpCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9QSEEJKDEgPDwgNSkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX1hDSAkoMSA8PCA4KQorI2RlZmluZSBNWDFfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDkpCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMTApCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9EUl9TSElGVAkxMworCitzdGF0aWMgdm9pZCBteDFfaW50Y3RybChzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14LCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfVEUpCisJCXZhbCB8PSBNWDFfSU5UUkVHX1RFRU47CisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfUlIpCisJCXZhbCB8PSBNWDFfSU5UUkVHX1JSRU47CisKKwl3cml0ZWwodmFsLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElJTlQpOworfQorCitzdGF0aWMgdm9pZCBteDFfdHJpZ2dlcihzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14KQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKwlyZWcgfD0gTVgxX0NTUElDVFJMX1hDSDsKKwl3cml0ZWwocmVnLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKK30KKworc3RhdGljIGludCBteDFfY29uZmlnKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsCisJCXN0cnVjdCBzcGlfaW14X2NvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCByZWcgPSBNWDFfQ1NQSUNUUkxfRU5BQkxFIHwgTVgxX0NTUElDVFJMX01BU1RFUjsKKworCXJlZyB8PSBzcGlfaW14X2Nsa2Rpdl8yKHNwaV9pbXgtPnNwaV9jbGssIGNvbmZpZy0+c3BlZWRfaHopIDw8CisJCU1YMV9DU1BJQ1RSTF9EUl9TSElGVDsKKwlyZWcgfD0gY29uZmlnLT5icHcgLSAxOworCisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQorCQlyZWcgfD0gTVgxX0NTUElDVFJMX1BIQTsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCisJCXJlZyB8PSBNWDFfQ1NQSUNUUkxfUE9MOworCisJd3JpdGVsKHJlZywgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDFfcnhfYXZhaWxhYmxlKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJcmV0dXJuIHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUlOVCkgJiBNWDFfSU5UUkVHX1JSOworfQorCitzdGF0aWMgdm9pZCBzcGlfaW14X2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJaW50IGdwaW8gPSBzcGlfaW14LT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOworCWludCBhY3RpdmUgPSBpc19hY3RpdmUgIT0gQklUQkFOR19DU19JTkFDVElWRTsKKwlpbnQgZGV2X2lzX2xvd2FjdGl2ZSA9ICEoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCisJaWYgKGdwaW8gPCAwKQorCQlyZXR1cm47CisKKwlncGlvX3NldF92YWx1ZShncGlvLCBkZXZfaXNfbG93YWN0aXZlIF4gYWN0aXZlKTsKK30KKworc3RhdGljIHZvaWQgc3BpX2lteF9wdXNoKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJd2hpbGUgKHNwaV9pbXgtPnR4ZmlmbyA8IDgpIHsKKwkJaWYgKCFzcGlfaW14LT5jb3VudCkKKwkJCWJyZWFrOworCQlzcGlfaW14LT50eChzcGlfaW14KTsKKwkJc3BpX2lteC0+dHhmaWZvKys7CisJfQorCisJc3BpX2lteC0+dHJpZ2dlcihzcGlfaW14KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNwaV9pbXhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gZGV2X2lkOworCisJd2hpbGUgKHNwaV9pbXgtPnJ4X2F2YWlsYWJsZShzcGlfaW14KSkgeworCQlzcGlfaW14LT5yeChzcGlfaW14KTsKKwkJc3BpX2lteC0+dHhmaWZvLS07CisJfQorCisJaWYgKHNwaV9pbXgtPmNvdW50KSB7CisJCXNwaV9pbXhfcHVzaChzcGlfaW14KTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmIChzcGlfaW14LT50eGZpZm8pIHsKKwkJLyogTm8gZGF0YSBsZWZ0IHRvIHB1c2gsIGJ1dCBzdGlsbCB3YWl0aW5nIGZvciByeCBkYXRhLAorCQkgKiBlbmFibGUgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSBpbnRlcnJ1cHQuCisJCSAqLworCQlzcGlfaW14LT5pbnRjdHJsKHNwaV9pbXgsIE1YQ19JTlRfUlIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJc3BpX2lteC0+aW50Y3RybChzcGlfaW14LCAwKTsKKwljb21wbGV0ZSgmc3BpX2lteC0+eGZlcl9kb25lKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzcGlfaW14X3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXggPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3Qgc3BpX2lteF9jb25maWcgY29uZmlnOworCisJY29uZmlnLmJwdyA9IHQgPyB0LT5iaXRzX3Blcl93b3JkIDogc3BpLT5iaXRzX3Blcl93b3JkOworCWNvbmZpZy5zcGVlZF9oeiAgPSB0ID8gdC0+c3BlZWRfaHogOiBzcGktPm1heF9zcGVlZF9oejsKKwljb25maWcubW9kZSA9IHNwaS0+bW9kZTsKKwljb25maWcuY3MgPSBzcGlfaW14LT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOworCisJaWYgKCFjb25maWcuc3BlZWRfaHopCisJCWNvbmZpZy5zcGVlZF9oeiA9IHNwaS0+bWF4X3NwZWVkX2h6OworCWlmICghY29uZmlnLmJwdykKKwkJY29uZmlnLmJwdyA9IHNwaS0+Yml0c19wZXJfd29yZDsKKwlpZiAoIWNvbmZpZy5zcGVlZF9oeikKKwkJY29uZmlnLnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisKKwkvKiBJbml0aWFsaXplIHRoZSBmdW5jdGlvbnMgZm9yIHRyYW5zZmVyICovCisJaWYgKGNvbmZpZy5icHcgPD0gOCkgeworCQlzcGlfaW14LT5yeCA9IHNwaV9pbXhfYnVmX3J4X3U4OworCQlzcGlfaW14LT50eCA9IHNwaV9pbXhfYnVmX3R4X3U4OworCX0gZWxzZSBpZiAoY29uZmlnLmJwdyA8PSAxNikgeworCQlzcGlfaW14LT5yeCA9IHNwaV9pbXhfYnVmX3J4X3UxNjsKKwkJc3BpX2lteC0+dHggPSBzcGlfaW14X2J1Zl90eF91MTY7CisJfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDMyKSB7CisJCXNwaV9pbXgtPnJ4ID0gc3BpX2lteF9idWZfcnhfdTMyOworCQlzcGlfaW14LT50eCA9IHNwaV9pbXhfYnVmX3R4X3UzMjsKKwl9IGVsc2UKKwkJQlVHKCk7CisKKwlzcGlfaW14LT5jb25maWcoc3BpX2lteCwgJmNvbmZpZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcGlfaW14X3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIpCit7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJc3BpX2lteC0+dHhfYnVmID0gdHJhbnNmZXItPnR4X2J1ZjsKKwlzcGlfaW14LT5yeF9idWYgPSB0cmFuc2Zlci0+cnhfYnVmOworCXNwaV9pbXgtPmNvdW50ID0gdHJhbnNmZXItPmxlbjsKKwlzcGlfaW14LT50eGZpZm8gPSAwOworCisJaW5pdF9jb21wbGV0aW9uKCZzcGlfaW14LT54ZmVyX2RvbmUpOworCisJc3BpX2lteF9wdXNoKHNwaV9pbXgpOworCisJc3BpX2lteC0+aW50Y3RybChzcGlfaW14LCBNWENfSU5UX1RFKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNwaV9pbXgtPnhmZXJfZG9uZSk7CisKKwlyZXR1cm4gdHJhbnNmZXItPmxlbjsKK30KKworc3RhdGljIGludCBzcGlfaW14X3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCWludCBncGlvID0gc3BpX2lteC0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKKworCXByX2RlYnVnKCIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCisJCSBzcGktPm1vZGUsIHNwaS0+Yml0c19wZXJfd29yZCwgc3BpLT5tYXhfc3BlZWRfaHopOworCisJaWYgKGdwaW8gPj0gMCkKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMCA6IDEpOworCisJc3BpX2lteF9jaGlwc2VsZWN0KHNwaSwgQklUQkFOR19DU19JTkFDVElWRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BpX2lteF9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNwaV9pbXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKm14Y19wbGF0Zm9ybV9pbmZvOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaSwgcmV0OworCisJbXhjX3BsYXRmb3JtX2luZm8gPSAoc3RydWN0IHNwaV9pbXhfbWFzdGVyICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFteGNfcGxhdGZvcm1faW5mbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgdGhlIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3Qgc3BpX2lteF9kYXRhKSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKKworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBteGNfcGxhdGZvcm1faW5mby0+bnVtX2NoaXBzZWxlY3Q7CisKKwlzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXNwaV9pbXgtPmJpdGJhbmcubWFzdGVyID0gc3BpX21hc3Rlcl9nZXQobWFzdGVyKTsKKwlzcGlfaW14LT5jaGlwc2VsZWN0ID0gbXhjX3BsYXRmb3JtX2luZm8tPmNoaXBzZWxlY3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKSB7CisJCWlmIChzcGlfaW14LT5jaGlwc2VsZWN0W2ldIDwgMCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBncGlvX3JlcXVlc3Qoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSwgRFJJVkVSX05BTUUpOworCQlpZiAocmV0KSB7CisJCQlpLS07CisJCQl3aGlsZSAoaSA+IDApCisJCQkJaWYgKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0gPj0gMCkKKwkJCQkJZ3Bpb19mcmVlKHNwaV9pbXgtPmNoaXBzZWxlY3RbaS0tXSk7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgY3MgZ3Bpb3MiKTsKKwkJCWdvdG8gb3V0X21hc3Rlcl9wdXQ7CisJCX0KKwl9CisKKwlzcGlfaW14LT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBzcGlfaW14X2NoaXBzZWxlY3Q7CisJc3BpX2lteC0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IHNwaV9pbXhfc2V0dXB4ZmVyOworCXNwaV9pbXgtPmJpdGJhbmcudHhyeF9idWZzID0gc3BpX2lteF90cmFuc2ZlcjsKKwlzcGlfaW14LT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgPSBzcGlfaW14X3NldHVwOworCXNwaV9pbXgtPmJpdGJhbmcubWFzdGVyLT5jbGVhbnVwID0gc3BpX2lteF9jbGVhbnVwOworCXNwaV9pbXgtPmJpdGJhbmcubWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0NTX0hJR0g7CisKKwlpbml0X2NvbXBsZXRpb24oJnNwaV9pbXgtPnhmZXJfZG9uZSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBwbGF0Zm9ybSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2dwaW9fZnJlZTsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X2dwaW9fZnJlZTsKKwl9CisKKwlzcGlfaW14LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghc3BpX2lteC0+YmFzZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9yZWxlYXNlX21lbTsKKwl9CisKKwlzcGlfaW14LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghc3BpX2lteC0+aXJxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoc3BpX2lteC0+aXJxLCBzcGlfaW14X2lzciwgMCwgRFJJVkVSX05BTUUsIHNwaV9pbXgpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGlycSVkOiAlZFxuIiwgc3BpX2lteC0+aXJxLCByZXQpOworCQlnb3RvIG91dF9pb3VubWFwOworCX0KKworCWlmIChjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpIHsKKwkJc3BpX2lteC0+aW50Y3RybCA9IG14MzFfaW50Y3RybDsKKwkJc3BpX2lteC0+Y29uZmlnID0gbXgzMV9jb25maWc7CisJCXNwaV9pbXgtPnRyaWdnZXIgPSBteDMxX3RyaWdnZXI7CisJCXNwaV9pbXgtPnJ4X2F2YWlsYWJsZSA9IG14MzFfcnhfYXZhaWxhYmxlOworCX0gZWxzZSAgaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MjEoKSkgeworCQlzcGlfaW14LT5pbnRjdHJsID0gbXgyN19pbnRjdHJsOworCQlzcGlfaW14LT5jb25maWcgPSBteDI3X2NvbmZpZzsKKwkJc3BpX2lteC0+dHJpZ2dlciA9IG14MjdfdHJpZ2dlcjsKKwkJc3BpX2lteC0+cnhfYXZhaWxhYmxlID0gbXgyN19yeF9hdmFpbGFibGU7CisJfSBlbHNlIGlmIChjcHVfaXNfbXgxKCkpIHsKKwkJc3BpX2lteC0+aW50Y3RybCA9IG14MV9pbnRjdHJsOworCQlzcGlfaW14LT5jb25maWcgPSBteDFfY29uZmlnOworCQlzcGlfaW14LT50cmlnZ2VyID0gbXgxX3RyaWdnZXI7CisJCXNwaV9pbXgtPnJ4X2F2YWlsYWJsZSA9IG14MV9yeF9hdmFpbGFibGU7CisJfSBlbHNlCisJCUJVRygpOworCisJc3BpX2lteC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHNwaV9pbXgtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBjbG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIoc3BpX2lteC0+Y2xrKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CisJfQorCisJY2xrX2VuYWJsZShzcGlfaW14LT5jbGspOworCXNwaV9pbXgtPnNwaV9jbGsgPSBjbGtfZ2V0X3JhdGUoc3BpX2lteC0+Y2xrKTsKKworCWlmICghY3B1X2lzX214MzEoKSB8fCAhY3B1X2lzX214MzUoKSkKKwkJd3JpdGVsKDEsIHNwaV9pbXgtPmJhc2UgKyBNWENfUkVTRVQpOworCisJc3BpX2lteC0+aW50Y3RybChzcGlfaW14LCAwKTsKKworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZzcGlfaW14LT5iaXRiYW5nKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImJpdGJhbmcgc3RhcnQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X2Nsa19wdXQ7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInByb2JlZFxuIik7CisKKwlyZXR1cm4gcmV0OworCitvdXRfY2xrX3B1dDoKKwljbGtfZGlzYWJsZShzcGlfaW14LT5jbGspOworCWNsa19wdXQoc3BpX2lteC0+Y2xrKTsKK291dF9mcmVlX2lycToKKwlmcmVlX2lycShzcGlfaW14LT5pcnEsIHNwaV9pbXgpOworb3V0X2lvdW5tYXA6CisJaW91bm1hcChzcGlfaW14LT5iYXNlKTsKK291dF9yZWxlYXNlX21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK291dF9ncGlvX2ZyZWU6CisJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykKKwkJaWYgKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0gPj0gMCkKKwkJCWdwaW9fZnJlZShzcGlfaW14LT5jaGlwc2VsZWN0W2ldKTsKK291dF9tYXN0ZXJfcHV0OgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJa2ZyZWUobWFzdGVyKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBzcGlfaW14X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlpbnQgaTsKKworCXNwaV9iaXRiYW5nX3N0b3AoJnNwaV9pbXgtPmJpdGJhbmcpOworCisJd3JpdGVsKDAsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCWNsa19kaXNhYmxlKHNwaV9pbXgtPmNsayk7CisJY2xrX3B1dChzcGlfaW14LT5jbGspOworCWZyZWVfaXJxKHNwaV9pbXgtPmlycSwgc3BpX2lteCk7CisJaW91bm1hcChzcGlfaW14LT5iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspCisJCWlmIChzcGlfaW14LT5jaGlwc2VsZWN0W2ldID49IDApCisJCQlncGlvX2ZyZWUoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSk7CisKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGlfaW14X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSBzcGlfaW14X3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChzcGlfaW14X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzcGlfaW14X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzcGlfaW14X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcGlfaW14X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3BpX2lteF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzcGlfaW14X2luaXQpOworbW9kdWxlX2V4aXQoc3BpX2lteF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTUEkgTWFzdGVyIENvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwppbmRleCBkODcxZGMyLi4yNTUyYmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNzLT5kb25lKTsKIAogCWlmICghYnVzeV93YWl0KHJlYWRsKHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKSAmIEJNX1NTUF9DVFJMMF9SVU4pKQotCQlzdGF0dXMgPSBFVElNRURPVVQ7CisJCXN0YXR1cyA9IC1FVElNRURPVVQ7CiAKIAlpZiAoIWRtYV9idWYpCiAJCWRtYV91bm1hcF9zaW5nbGUoc3MtPm1hc3Rlcl9kZXYsIHNwaV9idWZfZG1hLCBsZW4sIGRpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IGY5MjFiZDEuLjVkMjM5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC01MzcsNyArNTM3LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcGlkZXZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwaWRldl9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS8qIFJFVklTSVQgc3dpdGNoIHRvIGFpbyBwcmltaXRpdmVzLCBzbyB0aGF0IHVzZXJzcGFjZQogCSAqIGdldHMgbW9yZSBjb21wbGV0ZSBBUEkgY292ZXJhZ2UuICBJdCdsbCBzaW1wbGlmeSB0aGluZ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggOWE0ZGQ1OS4uZDIxYjM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTU5LDggKzU5LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcG9jaC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWciCkBAIC05NSw4ICs5Myw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9LY29uZmlnIgpAQCAtMTI5LDcgKzEyNSw1IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jb3dsb29wL0tjb25maWciCi0KIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggMTA0ZjJmOC4uOGNiZjFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNiBAQAogb2JqLSQoQ09ORklHX1BSSVNNMl9VU0IpCSs9IHdsYW4tbmcvCiBvYmotJChDT05GSUdfRUNITykJCSs9IGVjaG8vCiBvYmotJChDT05GSUdfUE9DSCkJCSs9IHBvY2gvCi1vYmotJChDT05GSUdfQUdOWCkJCSs9IGFnbngvCiBvYmotJChDT05GSUdfT1RVUykJCSs9IG90dXMvCiBvYmotJChDT05GSUdfUlQyODYwKQkJKz0gcnQyODYwLwogb2JqLSQoQ09ORklHX1JUMjg3MCkJCSs9IHJ0Mjg3MC8KQEAgLTMwLDcgKzI5LDYgQEAKIG9iai0kKENPTkZJR19BTkRST0lEKQkJKz0gZHJlYW0vCiBvYmotJChDT05GSUdfRFNUKQkJKz0gZHN0Lwogb2JqLSQoQ09ORklHX1BPSE1FTEZTKQkJKz0gcG9obWVsZnMvCi1vYmotJChDT05GSUdfU1RMQzQ1WFgpCQkrPSBzdGxjNDV4eC8KIG9iai0kKENPTkZJR19CM0RGRykJCSs9IGIzZGZnLwogb2JqLSQoQ09ORklHX0lERV9QSElTT04pCSs9IHBoaXNvbi8KIG9iai0kKENPTkZJR19QTEFOOUFVVEgpCQkrPSBwOWF1dGgvCkBAIC00Niw0ICs0NCwzIEBACiBvYmotJChDT05GSUdfUkFSX1JFR0lTVEVSKQkrPSByYXIvCiBvYmotJChDT05GSUdfRFhfU0VQKQkJKz0gc2VwLwogb2JqLSQoQ09ORklHX0lJTykJCSs9IGlpby8KLW9iai0kKENPTkZJR19DT1dMT09QKQkJKz0gY293bG9vcC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQzNTQ5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWNvbmZpZyBBR05YCi0JdHJpc3RhdGUgIldpcmVsZXNzIEFpcmdvIEFHTlggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdMQU5fODAyMTEgJiYgTUFDODAyMTEKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIEFpcmdvIEFHTlgwMCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIxNjU2NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotb2JqLSQoQ09ORklHX0FHTlgpCSs9IGFnbngubwotCi1hZ254LW9ianMgOj0JcmYubwlcCi0JCXBjaS5vCVwKLQkJeG1pdC5vCVwKLQkJdGFibGUubwlcCi0JCXN0YS5vCVwKLQkJcGh5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWJlYzc0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0yMDA4IDcvMTgKLQotVGhlIFJYIGhhcyBjYW4ndCByZWNlaXZlIE9GRE0gcGFja2V0IGNvcnJlY3RseSwKLUd1ZXNzIGl0IG5lZWQgYmUgZG8gUlggY2FsaWJyYXRlLgotCi0KLWJlZm9yZSAyMDA4IDMvMQotCi0xOiBUaGUgUlggZ2V0IHRvbyBtdWNoICJDUkMgZmFpbGVkIiBwYWtldHMsIGl0IG1ha2UgdGhlIGNhcmQgd29yayB2ZXJ5IHVuc3RhYmxlLAotMjogQWZ0ZXIgcnVubmluZyBhIHdoaWxlLCB0aGUgY2FyZCB3aWxsIGdldCBpbmZpbml0eSAiUlggRnJhbWUiIGFuZCAiRXJyb3IiCi1pbnRlcnJ1cHQsIG5vdCBrbm93IHRoZSByb290IHJlYXNvbiBzbyBmYXIsIHRyeSB0byBmaXggaXQKLTM6IFVzaW5nIHR3byB0eCBxdWV1ZSB0eGQgYW5kIHR4bSBidXQgbm90IG9ubHkgdHhtLgotNDogU2V0IHRoZSBoZHIgY29ycmVjdGx5LgotNTogVHJ5IHRvIGRvIHJlY2FsaWJyYXRlIGNvcnJldnRseQotNjogVG8gc3VwcG9ydCBHIG1vZGUgaW4gZnV0dXJlCi03OiBGaXggdGhlIG1hYyBhZGRyZXNzIGNhbid0IGJlIHJlYWRlZCBhbmQgc2V0IGNvcnJlY3RseSBpbiBCRSBtYWNoaW5lLgotODogRml4IGluY2x1ZGUgYW5kIGV4Y2x1ZGUgRkNTIGluIHByb21pc291cyBtb2RlIGFuZCBtYW5hZ2UgbW9kZQotOTogVXNpbmcgc3RhX25vdGlmeSB0byBub3RpY2Ugc3RhIGNoYW5nZQotMTA6IFR1cm4gb24gZnJhbWUgcmVjZXB0aW9uIGF0IHRoZSBlbmQgb2Ygc3RhcnQKLTExOiBHdWVzcyB0aGUgY2FyZCBzdXBwb3J0IEhXX01VTFRJQ0FTVF9GSUxURVIKLTEyOiBUaGUgdHggcHJvY2VzcyBzaG91bGQgYmUgaW1wbG1lbnQgYXRvbWljPwotMTM6IFVzaW5nIG1hYzgwMjExIGZ1bmN0aW9uIHRvIGNvbnRyb2wgdGhlIFRYJlJYIExFRC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2M2QyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9hZ254LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotI2lmbmRlZiBBR05YX0hfCi0jZGVmaW5lIEFHTlhfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJ4bWl0LmgiCi0KLSNkZWZpbmUgUEZYCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIKLQotc3RhdGljIGlubGluZSB1MzIgYWdueF9yZWFkMzIodm9pZCBfX2lvbWVtICptZW1fcmVnaW9uLCB1MzIgb2Zmc2V0KQotewotCXJldHVybiBpb3JlYWQzMihtZW1fcmVnaW9uICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfd3JpdGUzMih2b2lkIF9faW9tZW0gKm1lbV9yZWdpb24sIHUzMiBvZmZzZXQsIHUzMiB2YWwpCi17Ci0JaW93cml0ZTMyKHZhbCwgbWVtX3JlZ2lvbiArIG9mZnNldCk7Ci19Ci0KLS8qIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYWdueF9yYXRlc184MDIxMWJbXSA9IHsgKi8KLS8qIAl7IC5yYXRlID0gMTAsICovCi0vKiAJICAudmFsID0gMHhhLCAqLwotLyogCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLIH0sICovCi0vKiAJeyAucmF0ZSA9IDIwLCAqLwotLyogCSAgLnZhbCA9IDB4MTQsICovCi0vKiAJICAuaHdfdmFsdWUgPSAtMHgxNCwgKi8KLS8qIAkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDS18yIH0sICovCi0vKiAJeyAucmF0ZSA9IDU1LCAqLwotLyogCSAgLnZhbCA9IDB4MzcsICovCi0vKiAJICAudmFsMiA9IC0weDM3LCAqLwotLyogCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSwgKi8KLS8qIAl7IC5yYXRlID0gMTEwLCAqLwotLyogCSAgLnZhbCA9IDB4NmUsICovCi0vKiAJICAudmFsMiA9IC0weDZlLCAqLwotLyogCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSAqLwotLyogfTsgKi8KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGFnbnhfcmF0ZXNfODAyMTFnW10gPSB7Ci0vKiAJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAxLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwotLyogCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMiwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KLS8qIAl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDMsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sICovCi0vKiAJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gNCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KLQl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDEsIH0sCi0JeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAyLCB9LAotCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMywgfSwKLQl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSA0LH0sCi0KLQl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDB4QiwgfSwKLQl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDB4RiwgfSwKLQl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAweEEgfSwKLQl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAweEUsIH0sCi0vKgl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSAweGQsIH0sICovCi0JeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gMHhELCB9LAotCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDB4OCwgfSwKLQl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAweEMsIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFnbnhfY2hhbm5lbHNbXSA9IHsKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMywgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQzNywgLmh3X3ZhbHVlID0gNiwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLmh3X3ZhbHVlID0gOSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDY3LCAuaHdfdmFsdWUgPSAxMiwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NzIsIC5od192YWx1ZSA9IDEzLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQsIH0sCi19OwotCi0jZGVmaW5lIE5VTV9EUklWRV9NT0RFUwkyCi0vKiBBZ254IG9wZXJhdGUgbW9kZSAqLwotZW51bSB7Ci0JQUdOWF9NT0RFXzgwMjExQSwKLQlBR05YX01PREVfODAyMTFBX09PQiwKLQlBR05YX01PREVfODAyMTFBX01JTU8sCi0JQUdOWF9NT0RFXzgwMjExQl9TSE9SVCwKLQlBR05YX01PREVfODAyMTFCX0xPTkcsCi0JQUdOWF9NT0RFXzgwMjExRywKLQlBR05YX01PREVfODAyMTFHX09PQiwKLQlBR05YX01PREVfODAyMTFHX01JTU8sCi19OwotCi1lbnVtIHsKLQlBR05YX1VOSU5JVCwKLQlBR05YX1NUQVJULAotCUFHTlhfU1RPUCwKLX07Ci0KLXN0cnVjdCBhZ254X3ByaXYgewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCi0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBtdXRleCBtdXRleDsKLQl1bnNpZ25lZCBpbnQgaW5pdF9zdGF0dXM7Ci0KLQl2b2lkIF9faW9tZW0gKmN0bDsJLyogcG9pbnRlciB0byBiYXNlIHJhbSBhZGRyZXNzICovCi0Jdm9pZCBfX2lvbWVtICpkYXRhOwkvKiBwb2ludGVyIHRvIG1lbSByZWdpb24gIzIgKi8KLQotCXN0cnVjdCBhZ254X3Jpbmcgcng7Ci0Jc3RydWN0IGFnbnhfcmluZyB0eG07Ci0Jc3RydWN0IGFnbnhfcmluZyB0eGQ7Ci0KLQkvKiBOZWVkIHZvbGF0aWxlPyAqLwotCXUzMiBpcnFfc3RhdHVzOwotCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBwZXJpb2RpY193b3JrOyAvKiBQZXJpb2RpYyB0YXNrcyBsaWtlIHJlY2FsaWJyYXRlICovCi0Jc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgc3RhdHM7Ci0KLQkvKiB1bnNpZ25lZCBpbnQgcGh5bW9kZTsgKi8KLQlpbnQgbW9kZTsKLQlpbnQgY2hhbm5lbDsKLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0KLQl1OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0JdTggcmV2aWQ7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7Ci19OwotCi0KLSNkZWZpbmUgQUdOWF9DSEFJTlNfTUFYCTYKLSNkZWZpbmUgQUdOWF9QRVJJT0RJQ19ERUxBWSA2MDAwMCAvKiB1bml0OiBtcyAqLwotI2RlZmluZSBMT0NBTF9TVEFJRAkwCS8qIHRoZSBzdGF0aW9uIGVudHJ5IGZvciB0aGUgY2FyZCBpdHNlbGYgKi8KLSNkZWZpbmUgQlNTSURfU1RBSUQJMQkvKiB0aGUgc3RhdGlvbiBlbnRyeSBmb3IgdGhlIGJzc3NpZCBBUCAqLwotI2RlZmluZQlzcGlfZGVsYXkoKQl1ZGVsYXkoNDApCi0jZGVmaW5lIGVlcHJvbV9kZWxheSgpCXVkZWxheSg0MCkKLSNkZWZpbmUJcm91dGluZ190YWJsZV9kZWxheSgpCXVkZWxheSg1MCkKLQotLyogUERVIHBvb2wgTUVNIHJlZ2lvbiAjMiAqLwotI2RlZmluZSBBR05YX1BEVVBPT0wJCTB4NDAwMDAJLyogUERVIHBvb2wgKi8KLSNkZWZpbmUgQUdOWF9QRFVQT09MX1NJWkUJMHg4MDAwCS8qIFBEVSBwb29sIHNpemUqLwotI2RlZmluZSBBR05YX1BEVV9UWF9XUQkJMHg0MTAwMAkvKiBQRFUgbGlzdCBUWCB3b3JrcXVldWUgKi8KLSNkZWZpbmUgQUdOWF9QRFVfRlJFRQkJMHg0MTgwMAkvKiBGcmVlIFBvb2wgKi8KLSNkZWZpbmUgUERVX1NJWkUJCTB4ODAJLyogRnJlZSBQb29sIG5vZGUgc2l6ZSAqLwotI2RlZmluZSBQRFVfRlJFRV9DTlQJCTB4ZDAgLyogRnJlZSBwb29sIG5vZGUgY291bnQgKi8KLQotCi0vKiBSRiBzdHVmZnMgKi8KLWV4dGVybiB2b2lkIHJmX2NoaXBzX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBzcGlfcmNfd3JpdGUodm9pZCBfX2lvbWVtICptZW1fcmVnaW9uLCB1MzIgY2hpcF9pZHMsIHUzMiBzdyk7Ci1leHRlcm4gdm9pZCBjYWxpYnJhdGVfb3NjaWxsYXRvcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGRvX2NhbGlicmF0aW9uKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgYW50ZW5uYV9jYWxpYnJhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBfX2FudGVubmFfY2FsaWJyYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgcHJpbnRfb2Zmc2V0cyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgYWdueF9zZXRfY2hhbm5lbChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCk7Ci0KLQotI2VuZGlmIC8qIEFHTlhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9kZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTQ3ZjMyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotI2lmbmRlZiBBR05YX0RFQlVHX0hfCi0jZGVmaW5lIEFHTlhfREVCVUdfSF8KLQotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJwaHkuaCIKLSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJ4bWl0LmgiCi0KLSNkZWZpbmUgQUdOWF9UUkFDRSAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnVuY3Rpb246JXMgbGluZTolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKQotCi0jZGVmaW5lIFBSSU5US19MRTE2KHByZWZpeCwgdmFyKQlwcmludGsoS0VSTl9ERUJVRyBQRlggI3ByZWZpeCAiOiAiICN2YXIgIiAweCUuNHhcbiIsIGxlMTZfdG9fY3B1KHZhcikpCi0jZGVmaW5lIFBSSU5US19MRTMyKHByZWZpeCwgdmFyKQlwcmludGsoS0VSTl9ERUJVRyBQRlggI3ByZWZpeCAiOiAiICN2YXIgIiAweCUuOHhcbiIsIGxlMzJfdG9fY3B1KHZhcikpCi0jZGVmaW5lIFBSSU5US19VOChwcmVmaXgsIHZhcikgCQlwcmludGsoS0VSTl9ERUJVRyBQRlggI3ByZWZpeCAiOiAiICN2YXIgIiAweCUuMnhcbiIsIHZhcikKLSNkZWZpbmUgUFJJTlRLX0JFMTYocHJlZml4LCB2YXIpCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS40eFxuIiwgYmUxNl90b19jcHUodmFyKSkKLSNkZWZpbmUgUFJJTlRLX0JFMzIocHJlZml4LCB2YXIpCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS44eFxuIiwgYmUzMl90b19jcHUodmFyKSkKLSNkZWZpbmUgUFJJTlRLX0JJVFMocHJlZml4LCBmaWVsZCkgICAgCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI2ZpZWxkICI6IDB4JXhcbiIsIChyZWcgJiBmaWVsZCkgPj4gZmllbGQjI19TSElGVCkKLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfYnVnKGNoYXIgKnJlYXNvbikKLXsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlc1xuIiwgcmVhc29uKTsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfZGVzYyhzdHJ1Y3QgYWdueF9kZXNjICpkZXNjKQotewotCXUzMiByZWcgPSBiZTMyX3RvX2NwdShkZXNjLT5mcmFnKTsKLQotCVBSSU5US19CSVRTKERFU0MsIFBBQ0tFVF9MRU4pOwotCi0JaWYgKHJlZyAmIEZJUlNUX0ZSQUcpIHsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfUEFDS0VUX01BU0spOwotCQlQUklOVEtfQklUUyhERVNDLCBGSVJTVF9SRVNFUlYyKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfVEtJUF9FUlJPUik7Ci0JCVBSSU5US19CSVRTKERFU0MsIEZJUlNUX1RLSVBfUEFDS0VUKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfUkVTRVJWMSk7Ci0JCVBSSU5US19CSVRTKERFU0MsIEZJUlNUX0ZSQUdfTEVOKTsKLQl9IGVsc2UgewotCQlQUklOVEtfQklUUyhERVNDLCBTVUJfUkVTRVJWMik7Ci0JCVBSSU5US19CSVRTKERFU0MsIFNVQl9US0lQX0VSUk9SKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgU1VCX1RLSVBfUEFDS0VUKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgU1VCX1JFU0VSVjEpOwotCQlQUklOVEtfQklUUyhERVNDLCBTVUJfRlJBR19MRU4pOwotCX0KLQotCVBSSU5US19CSVRTKERFU0MsIEZJUlNUX0ZSQUcpOwotCVBSSU5US19CSVRTKERFU0MsIExBU1RfRlJBRyk7Ci0JUFJJTlRLX0JJVFMoREVTQywgT1dORVIpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2llZWU4MDIxMWJfcGh5X2hkcihfX2JlMzIgXzExYjAsIF9fYmUzMiBfMTFiMSkKLXsKLQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF9wcmludF9oZHIoc3RydWN0IGFnbnhfaGRyICpoZHIpCi17Ci0JdTMyIHJlZzsKLQlpbnQgaTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnMCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBSVFMpOwotCVBSSU5US19CSVRTKEhEUiwgTVVMVElDQVNUKTsKLQlQUklOVEtfQklUUyhIRFIsIEFDSyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBUTSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBSRUxBWSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBSRVZJU0VEX0ZDUyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBORVhUX0JVRkZFUl9BRERSKTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnMSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBNQUNfSERSX0xFTik7Ci0JUFJJTlRLX0JJVFMoSERSLCBEVVJBVElPTl9PVkVSSURFKTsKLQlQUklOVEtfQklUUyhIRFIsIFBIWV9IRFJfT1ZFUklERSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBDUkNfRkFJTCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBTRVFVRU5DRV9OVU1CRVIpOwotCVBSSU5US19CSVRTKEhEUiwgQlVGRl9IRUFEX0FERFIpOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWcyKTsKLQlQUklOVEtfQklUUyhIRFIsIFBEVV9DT1VOVCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBXRVBfS0VZKTsKLQlQUklOVEtfQklUUyhIRFIsIFVTRVNfV0VQX0tFWSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBLRUVQX0FMSVZFKTsKLQlQUklOVEtfQklUUyhIRFIsIEJVRkZfVEFJTF9BRERSKTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnMyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBDVFNfMTFHKTsKLQlQUklOVEtfQklUUyhIRFIsIFJUU18xMUcpOwotCVBSSU5US19CSVRTKEhEUiwgRlJBR19TSVpFKTsKLQlQUklOVEtfQklUUyhIRFIsIFBBWUxPQURfTEVOKTsKLQlQUklOVEtfQklUUyhIRFIsIEZSQUdfTlVNKTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnNCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBSRUxBWV9TVEFJRCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBTVEFUSU9OX0lEKTsKLQlQUklOVEtfQklUUyhIRFIsIFdPUktRVUVVRV9JRCk7Ci0KLQlyZWcgPSBiZTMyX3RvX2NwdShoZHItPnJlZzUpOwotCS8qIHByaW50ZiB0aGUgcm91dGUgZmxhZyAqLwotCVBSSU5US19CSVRTKEhEUiwgUk9VVEVfSE9TVCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9DQVJEX0NQVSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9FTkNSWVBUSU9OKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX1RYKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX1JYMSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9SWDIpOwotCVBSSU5US19CSVRTKEhEUiwgUk9VVEVfQ09NUFJFU1NJT04pOwotCi0JUFJJTlRLX0JFMzIoSERSLCBoZHItPl8xMWcwKTsKLQlQUklOVEtfQkUzMihIRFIsIGhkci0+XzExZzEpOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5fMTFiMCk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPl8xMWIxKTsKLQotCWR1bXBfaWVlZTgwMjExYl9waHlfaGRyKGhkci0+XzExYjAsIGhkci0+XzExYjEpOwotCi0JLyogRml4bWUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZHItPm1hY19oZHIpOyBpKyspIHsKLQkJaWYgKGkgPT0gMCkKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiSUVFRTgwMjExIEhEUjogIik7Ci0JCXByaW50aygiJS4yeCAiLCBoZHItPm1hY19oZHJbaV0pOwotCQlpZiAoaSArIDEgPT0gQVJSQVlfU0laRShoZHItPm1hY19oZHIpKQotCQkJcHJpbnRrKCJcbiIpOwotCX0KLQotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5ydHNfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5sYXN0X2R1cmF0aW9uKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+c2VjX2xhc3RfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5vdGhlcl9kdXJhdGlvbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnR4X290aGVyX2R1cmF0aW9uKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+bGFzdF8xMWdfbGVuKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+b3RoZXJfMTFnX2xlbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPmxhc3RfMTFiX2xlbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPm90aGVyXzExYl9sZW4pOwotCi0JLyogRklYTUUgKi8KLQlyZWcgPSBiZTE2X3RvX2NwdShoZHItPnJlZzYpOwotCVBSSU5US19CSVRTKEhEUiwgTUJGKTsKLQlQUklOVEtfQklUUyhIRFIsIFJTVkQ0KTsKLQotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5yeF9mcmFnX3N0YXQpOwotCi0JUFJJTlRLX0JFMzIoSERSLCBoZHItPnRpbWVfc3RhbXApOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5waHlfc3RhdHNfaGkpOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5waHlfc3RhdHNfbG8pOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5taWNfa2V5MCk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPm1pY19rZXkxKTsKLX0gLyogYWdueF9wcmludF9oZHIgKi8KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF9wcmludF9yeF9oZHIoc3RydWN0IGFnbnhfaGRyICpoZHIpCi17Ci0JYWdueF9wcmludF9oZHIoaGRyKTsKLQotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5yeC5yeF9wYWNrZXRfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5yeC5yZXBsYXlfY250KTsKLQotCVBSSU5US19VOChIRFIsIGhkci0+cnhfY2hhbm5lbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X3R4X2hkcihzdHJ1Y3QgYWdueF9oZHIgKmhkcikKLXsKLQlhZ254X3ByaW50X2hkcihoZHIpOwotCi0JUFJJTlRLX1U4KEhEUiwgaGRyLT50eC5sb25nX3JldHJ5X2xpbWl0KTsKLQlQUklOVEtfVTgoSERSLCBoZHItPnR4LnNob3J0X3JldHJ5X2xpbWl0KTsKLQlQUklOVEtfVTgoSERSLCBoZHItPnR4LmxvbmdfcmV0cnlfY250KTsKLQlQUklOVEtfVTgoSERSLCBoZHItPnR4LnNob3J0X3JldHJ5X2NudCk7Ci0KLQlQUklOVEtfVTgoSERSLCBoZHItPnJ4X2NoYW5uZWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXN0cnVjdCBhZ254X3N0YV9wb3dlciBwb3dlcjsKLQl1MzIgcmVnOwotCi0JZ2V0X3N0YV9wb3dlcihwcml2LCAmcG93ZXIsIHN0YV9pZHgpOwotCi0JcmVnID0gbGUzMl90b19jcHUocG93ZXIucmVnKTsKLQlQUklOVEtfQklUUyhTVEFfUE9XRVIsIFNJR05BTCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBSQVRFKTsKLQlQUklOVEtfQklUUyhTVEFfUE9XRVIsIFRJRlMpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgRURDRik7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBDSEFOTkVMX0JPTkQpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgUEhZX01PREUpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgUE9XRVJfTEVWRUwpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgTlVNX1RSQU5TTUlUVEVSUyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYWdueF9wcmludF9zdGFfdHhfd3Eoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHN0YV9pZHgsIHVuc2lnbmVkIGludCB3cV9pZHgpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3R4X3dxIHR4X3dxOwotCXUzMiByZWc7Ci0KLQlnZXRfc3RhX3R4X3dxKHByaXYsICZ0eF93cSwgc3RhX2lkeCwgd3FfaWR4KTsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHR4X3dxLnJlZzApOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgVEFJTF9QT0lOVEVSKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEhFQURfUE9JTlRFUl9MT1cpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHhfd3EucmVnMyk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBIRUFEX1BPSU5URVJfSElHSCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBBQ0tfUE9JTlRFUl9MT1cpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHhfd3EucmVnMSk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBBQ0tfUE9JTlRFUl9ISUdIKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEhFQURfVElNT1VUX1RBSUxfUEFDS19DTlQpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgQUNLX1RJTU9VVF9UQUlMX1BBQ0tfQ05UKTsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHR4X3dxLnJlZzIpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgSEVBRF9USU1PVVRfV0lOX0xJTV9CWVRFX0NOVCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBIRUFEX1RJTU9VVF9XSU5fTElNX0ZSQUdfQ05UKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIFdPUktfUVVFVUVfQUNLX1RZUEUpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgV09SS19RVUVVRV9WQUxJRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X3N0YV90cmFmZmljKHN0cnVjdCBhZ254X3N0YV90cmFmZmljICp0cmFmZmljKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBsZTMyX3RvX2NwdSh0cmFmZmljLT5yZWcwKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgQUNLX1RJTU9VVF9DTlQpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBUUkFGRklDX0FDS19UWVBFKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgTkVXX1BBQ0tFVCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFRSQUZGSUNfVkFMSUQpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBSWF9IRFJfREVTQ19QT0lOVEVSKTsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHRyYWZmaWMtPnJlZzEpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBSWF9QQUNLRVRfVElNRVNUQU1QKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgVFJBRkZJQ19SRVNFUlZFRCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFNWKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgUlhfU0VRVUVOQ0VfTlVNKTsKLQotCVBSSU5US19MRTMyKFNUQV9UUkFGRklDLCB0cmFmZmljLT50eF9yZXBsYXlfY250X2xvdyk7Ci0KLQlQUklOVEtfTEUxNihTVEFfVFJBRkZJQywgdHJhZmZpYy0+dHhfcmVwbGF5X2NudF9oaWdoKTsKLQlQUklOVEtfTEUxNihTVEFfVFJBRkZJQywgdHJhZmZpYy0+cnhfcmVwbGF5X2NudF9oaWdoKTsKLQotCVBSSU5US19MRTMyKFNUQV9UUkFGRklDLCB0cmFmZmljLT5yeF9yZXBsYXlfY250X2xvdyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X3N0YShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQlzdHJ1Y3QgYWdueF9zdGEgc3RhdGlvbjsKLQlzdHJ1Y3QgYWdueF9zdGEgKnN0YSA9ICZzdGF0aW9uOwotCXUzMiByZWc7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlnZXRfc3RhKHByaXYsIHN0YSwgc3RhX2lkeCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlQUklOVEtfTEUzMihTVEEsIHN0YS0+dHhfc2Vzc2lvbl9rZXlzW2ldKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlQUklOVEtfTEUzMihTVEEsIHN0YS0+cnhfc2Vzc2lvbl9rZXlzW2ldKTsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHN0YS0+cmVnKTsKLQlQUklOVEtfQklUUyhTVEEsIElEXzEpOwotCVBSSU5US19CSVRTKFNUQSwgSURfMCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBFTkFCTEVfQ09OQ0FURU5BVElPTik7Ci0JUFJJTlRLX0JJVFMoU1RBLCBFTkFCTEVfREVDT01QUkVTU0lPTik7Ci0JUFJJTlRLX0JJVFMoU1RBLCBTVEFfUkVTRVJWRUQpOwotCVBSSU5US19CSVRTKFNUQSwgRUFQKTsKLQlQUklOVEtfQklUUyhTVEEsIEVEX05VTEwpOwotCVBSSU5US19CSVRTKFNUQSwgRU5DUllQVElPTl9QT0xJQ1kpOwotCVBSSU5US19CSVRTKFNUQSwgREVGSU5FRF9LRVlfSUQpOwotCVBSSU5US19CSVRTKFNUQSwgRklYRURfS0VZKTsKLQlQUklOVEtfQklUUyhTVEEsIEtFWV9WQUxJRCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBTVEFUSU9OX1ZBTElEKTsKLQotCVBSSU5US19MRTMyKFNUQSwgc3RhLT50eF9hZXNfYmxrc191bmljYXN0KTsKLQlQUklOVEtfTEUzMihTVEEsIHN0YS0+cnhfYWVzX2Jsa3NfdW5pY2FzdCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWVzX2Zvcm1hdF9lcnJfdW5pY2FzdF9jbnQpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5hZXNfcmVwbGF5X3VuaWNhc3QpOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPmFlc19kZWNyeXB0X2Vycl91bmljYXN0KTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWVzX2RlY3J5cHRfZXJyX2RlZmF1bHQpOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnNpbmdsZV9yZXRyeV9wYWNrZXRzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+ZmFpbGVkX3R4X3BhY2tldHMpOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPm11dGlfcmV0cnlfcGFja2V0cyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPmFja190aW1lb3V0cyk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+ZnJhZ190eF9jbnQpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5ydHNfYnJxX3NlbnQpOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnR4X3BhY2tldHMpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5jdHNfYmFja190aW1lb3V0KTsKLQotCVBSSU5US19MRTMyKFNUQSwgc3RhLT5waHlfc3RhdHNfaGlnaCk7Ci0JUFJJTlRLX0xFMzIoU1RBLCBzdGEtPnBoeV9zdGF0c19sb3cpOwotCi0JLyogZm9yIChpID0gMDsgaSA8IDg7IGkrKykgKi8KLQlhZ254X3ByaW50X3N0YV90cmFmZmljKHN0YS0+dHJhZmZpYyArIDApOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MwX2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MxX2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MyX2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MzX2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3M0X2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3M1X2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3M2X2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3M3X2ZyYWdfc3VjY2Vzcyk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+bnVtX2ZyYWdfbm9uX3ByaW1lX3JhdGVzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWNrX3RpbWVvdXRfbm9uX3ByaW1lX3JhdGVzKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9pZWVlODAyMTFfaGRyKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIGNoYXIgKnRhZykKLXsKLQl1MTYgZmN0bDsKLQlpbnQgaGRybGVuOwotCi0JZmN0bCA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0Jc3dpdGNoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlwcmludGsoUEZYICIlcyBEQVRBICIsIHRhZyk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJcHJpbnRrKFBGWCAiJXMgQ1RMICIsIHRhZyk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6Ci0JCXByaW50ayhQRlggIiVzIE1HTVQgIiwgdGFnKTsKLQkJc3dpdGNoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBU1NPQ19SRVEgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKLQkJCXByaW50aygiU3ViVHlwZTogQVNTT0NfUkVTUCAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUToKLQkJCXByaW50aygiU3ViVHlwZTogUkVBU1NPQ19SRVEgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBSRUFTU09DX1JFU1AgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQkJcHJpbnRrKCJTdWJUeXBlOiBQUk9CRV9SRVEgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJCXByaW50aygiU3ViVHlwZTogUFJPQkVfUkVTUCAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JCQlwcmludGsoIlN1YlR5cGU6IEJFQUNPTiAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVElNOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBVElNICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBESVNBU1NPQyAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBVVRIICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKLQkJCXByaW50aygiU3ViVHlwZTogREVBVVRIICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKLQkJCXByaW50aygiU3ViVHlwZTogQUNUSU9OICIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoIlN1YlR5cGU6IFVua25vd1xuIik7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKFBGWCAiJXMgUGFja2V0IHR5cGU6IFVua25vd1xuIiwgdGFnKTsKLQl9Ci0KLQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjdGwpOwotCi0JaWYgKGhkcmxlbiA+PSA0KQotCQlwcmludGsoIkZDPTB4JTA0eCBEVVI9MHglMDR4IiwKLQkJICAgICAgIGZjdGwsIGxlMTZfdG9fY3B1KGhkci0+ZHVyYXRpb25faWQpKTsKLQlpZiAoaGRybGVuID49IDEwKQotCQlwcmludGsoIiBBMT0lcE0iLCBoZHItPmFkZHIxKTsKLQlpZiAoaGRybGVuID49IDE2KQotCQlwcmludGsoIiBBMj0lcE0iLCBoZHItPmFkZHIyKTsKLQlpZiAoaGRybGVuID49IDI0KQotCQlwcmludGsoIiBBMz0lcE0iLCBoZHItPmFkZHIzKTsKLQlpZiAoaGRybGVuID49IDMwKQotCQlwcmludGsoIiBBND0lcE0iLCBoZHItPmFkZHI0KTsKLQlwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3R4bV9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MWU4OyBpICs9IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiVFhNOiAleC0tLT4gMHglLjh4XG4iLCBpLCBpb3JlYWQzMihjdGwgKyBpKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9yeG1fcmVnaXN0ZXJzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8PSAweDEwODsgaSArPSA0KQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlJYTTogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgyMDAwICsgaSkpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGR1bXBfYm1fcmVnaXN0ZXJzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8PSAweDkwOyBpICs9IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQk06ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIDB4MmMwMCArIGkpKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2Npcl9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4Yjg7IGkgKz0gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVI6ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIDB4MzAwMCArIGkpKTsKLX0KLQotI2VuZGlmIC8qIEFHTlhfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYjU0ODkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MzUgKzAsMCBAQAotLyoqCi0gKiBBaXJnbyBNSU1PIHdpcmVsZXNzIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBMaSBZYW5CbyA8ZHJlYW1mbHkyODFAZ21haWwuY29tPgotCi0gKiBUaGFua3MgZm9yIEplZmYgV2lsbGlhbXMgPGFuZ2VsYmFuZUBnbWFpbC5jb20+IGRvIHJldmVyc2UgZW5naW5lZXIKLSAqIHdvcmtzIGFuZCBwdWJsaXNoZWQgdGhlIFNQRUNTIGF0IGh0dHA6Ly9haXJnby53ZHdjb25zdWx0aW5nLm5ldC9teW1vaW4KLQotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInhtaXQuaCIKLSNpbmNsdWRlICJwaHkuaCIKLQotTU9EVUxFX0FVVEhPUigiTGkgWWFuQm8gPGRyZWFtZmx5MjgxQGdtYWlsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQWlyZ28gTUlNTyBQQ0kgd2lyZWxlc3MgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ254X3BjaV9pZF90YmxbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX0RFVklDRSgweDE3Y2IsIDB4MDAwMSkgfSwJLyogQmVrbGluIEY1ZDgwMTAsIE5ldGdlYXIgV0dNNTExIGV0YyAqLwotCXsgUENJX0RFVklDRSgweDE3Y2IsIDB4MDAwMikgfSwJLyogTmV0Z2VhciBXcG50NTExICovCi0JeyAwIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ254X3BjaV9pZF90YmwpOwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X2ludGVycnVwdF9hY2soc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTMyICpyZWFzb24pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWlmICgqcmVhc29uICYgQUdOWF9TVEFUX1JYKSB7Ci0JCS8qIE1hcmsgY29tcGxldGUgUlggKi8KLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfUlhDVEwpOwotCQlyZWcgfD0gMHg0OwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci0JCS8qIGRpc2FibGUgUnggaW50ZXJydXB0ICovCi0JfQotCWlmICgqcmVhc29uICYgQUdOWF9TVEFUX1RYKSB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1RYRENUTCk7Ci0JCWlmIChyZWcgJiAweDQpIHsKLQkJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfQ0lSX1RYRENUTCk7Ci0JCQkqcmVhc29uIHw9IEFHTlhfU1RBVF9UWEQ7Ci0JCX0KLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfVFhNQ1RMKTsKLQkJaWYgKHJlZyAmIDB4NCkgewotCQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfVFhNQ1RMKTsKLQkJCSpyZWFzb24gfD0gQUdOWF9TVEFUX1RYTTsKLQkJfQotCX0KLSNpZiAwCi0JaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfWCkgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0JCS8qIEZJWE1FIHJlaW5pdCBpbnRlcnJ1cHQgbWFzayAqLwotCQlyZWcgPSAweGMzOTBiZjkgJiB+SVJRX1RYX0JFQUNPTjsKLQkJcmVnICY9IH5JUlFfVFhfRElTQUJMRTsKLQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCWlvd3JpdGUzMigweDgwMCwgY3RsICsgQUdOWF9DSVJfQkxLQ1RMKTsKLQl9Ci0jZW5kaWYKLX0gLyogYWdueF9pbnRlcnJ1cHRfYWNrICovCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBhZ254X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKLQl1MzIgaXJxX3JlYXNvbjsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0KLS8qCXByaW50ayhLRVJOX0VSUiBQRlggIkdldCBhIGludGVycnVwdCAlc1xuIiwgX19mdW5jX18pOyAqLwotCi0JaWYgKHByaXYtPmluaXRfc3RhdHVzICE9IEFHTlhfU1RBUlQpCi0JCWdvdG8gb3V0OwotCi0JLyogRmlYTUUgIEhlcmUgaGFzIG5vIGxvY2ssIElzIHRoaXMgd2lsbCBsZWFkIHRvIHJhY2U/ICovCi0JaXJxX3JlYXNvbiA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JaWYgKCEoaXJxX3JlYXNvbiAmIDB4NykpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gSVJRX0hBTkRMRUQ7Ci0JcHJpdi0+aXJxX3N0YXR1cyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX1NUQVQpOwotCi0vKglwcmludGsoUEZYICJJbnRlcnJ1cHQgcmVhc29uIGlzIDB4JXhcbiIsIGlycV9yZWFzb24pOyAqLwotCS8qIE1ha2Ugc3VyZSB0aGUgdHhtIGFuZCB0eGQgZmxhZ3MgZG9uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciB1bmtub3duCi0JICAgaW50ZXJydXB0IGZsYWcsIG1heWJlIGlzIG5vdCBuZWNlc3NhcnkgKi8KLQlpcnFfcmVhc29uICY9IDB4RjsKLQotCWRpc2FibGVfcnhfaW50ZXJydXB0KHByaXYpOwotCS8qIFRPRE8gTWFrZSBzdXJlIHRoZSBjYXJkIGZpbmlzaGVkIGluaXRpYWxpemVkICovCi0JYWdueF9pbnRlcnJ1cHRfYWNrKHByaXYsICZpcnFfcmVhc29uKTsKLQotCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1JYKQotCQloYW5kbGVfcnhfaXJxKHByaXYpOwotCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1RYRCkKLQkJaGFuZGxlX3R4ZF9pcnEocHJpdik7Ci0JaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfVFhNKQotCQloYW5kbGVfdHhtX2lycShwcml2KTsKLQlpZiAoaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9YKQotCQloYW5kbGVfb3RoZXJfaXJxKHByaXYpOwotCi0JZW5hYmxlX3J4X2ludGVycnVwdChwcml2KTsKLW91dDoKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0gLyogYWdueF9pbnRlcnJ1cHRfaGFuZGxlciAqLwotCi0KLS8qIEZJWE1FICovCi1zdGF0aWMgaW50IGFnbnhfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCUFHTlhfVFJBQ0U7Ci0JcmV0dXJuIF9hZ254X3R4KGRldi0+cHJpdiwgc2tiKTsKLX0gLyogYWdueF90eCAqLwotCi0KLXN0YXRpYyBpbnQgYWdueF9nZXRfbWFjX2FkZHJlc3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBBdHRlbnRpb24hIGRpcmVjdGx5IHJlYWQgdGhlIE1BQyBvciBvdGhlciBkYXRlIGZyb20gRUVQUk9NIHdpbGwKLQkgbGVhZCB0byBjYXJkYnVzKFdHTTUxMSkgbG9jayB1cCB3aGVuIHdyaXRlIHRvIFBNIFBMTCByZWdpc3RlciAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgzNTQ0KTsKLQl1ZGVsYXkoNDApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgzNTRjKTsKLQl1ZGVsYXkoNTApOwotCS8qIEdldCB0aGUgbWFjIGFkZHJlc3MgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4MzU0NCk7Ci0JdWRlbGF5KDQwKTsKLQotCS8qIEhBQ0sgKi8KLQlyZWcgPSBjcHVfdG9fbGUzMihyZWcpOwotCXByaXYtPm1hY19hZGRyWzBdID0gKCh1OCAqKSZyZWcpWzJdOwotCXByaXYtPm1hY19hZGRyWzFdID0gKCh1OCAqKSZyZWcpWzNdOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgzNTQ4KTsKLQl1ZGVsYXkoNTApOwotCSooKHUzMiAqKShwcml2LT5tYWNfYWRkciArIDIpKSA9IGNwdV90b19sZTMyKHJlZyk7Ci0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+bWFjX2FkZHIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJyZWFkIG1hYyAlcE1cbiIsIHByaXYtPm1hY19hZGRyKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkludmFsaWQgaHdhZGRyISBVc2luZyByYW5kb20gaHdhZGRyXG4iKTsKLQkJcmFuZG9tX2V0aGVyX2FkZHIocHJpdi0+bWFjX2FkZHIpOwotCX0KLQotCXJldHVybiAwOwotfSAvKiBhZ254X2dldF9tYWNfYWRkcmVzcyAqLwotCi1zdGF0aWMgaW50IGFnbnhfYWxsb2NfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBBbGxvY2F0ZSBSWC9UWE0vVFhEIHJpbmdzIGluZm8gKi8KLQlwcml2LT5yeC5zaXplID0gQUdOWF9SWF9SSU5HX1NJWkU7Ci0JcHJpdi0+dHhtLnNpemUgPSBBR05YX1RYTV9SSU5HX1NJWkU7Ci0JcHJpdi0+dHhkLnNpemUgPSBBR05YX1RYRF9SSU5HX1NJWkU7Ci0KLQlsZW4gPSBwcml2LT5yeC5zaXplICsgcHJpdi0+dHhtLnNpemUgKyBwcml2LT50eGQuc2l6ZTsKLQotLyoJcHJpdi0+cnguaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pICogbGVuLCBHRlBfS0VSTkVMKTsgKi8KLQlwcml2LT5yeC5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykgKiBsZW4sIEdGUF9BVE9NSUMpOwotCWlmICghcHJpdi0+cnguaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcHJpdi0+dHhtLmluZm8gPSBwcml2LT5yeC5pbmZvICsgcHJpdi0+cnguc2l6ZTsKLQlwcml2LT50eGQuaW5mbyA9IHByaXYtPnR4bS5pbmZvICsgcHJpdi0+dHhtLnNpemU7Ci0KLQkvKiBBbGxvY2F0ZSBSWC9UWE0vVFhEIGRlc2NyaXB0b3JzICovCi0JcHJpdi0+cnguZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemVvZihzdHJ1Y3QgYWdueF9kZXNjKSAqIGxlbiwKLQkJCQkJICAgICAmcHJpdi0+cnguZG1hKTsKLQlpZiAoIXByaXYtPnJ4LmRlc2MpIHsKLQkJa2ZyZWUocHJpdi0+cnguaW5mbyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXByaXYtPnR4bS5kZXNjID0gcHJpdi0+cnguZGVzYyArIHByaXYtPnJ4LnNpemU7Ci0JcHJpdi0+dHhtLmRtYSA9IHByaXYtPnJ4LmRtYSArIHNpemVvZihzdHJ1Y3QgYWdueF9kZXNjKSAqIHByaXYtPnJ4LnNpemU7Ci0JcHJpdi0+dHhkLmRlc2MgPSBwcml2LT50eG0uZGVzYyArIHByaXYtPnR4bS5zaXplOwotCXByaXYtPnR4ZC5kbWEgPSBwcml2LT50eG0uZG1hICsgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogcHJpdi0+dHhtLnNpemU7Ci0KLQlyZXR1cm4gMDsKLX0gLyogYWdueF9hbGxvY19yaW5ncyAqLwotCi1zdGF0aWMgdm9pZCByaW5nc19mcmVlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JdW5zaWduZWQgaW50IGxlbiA9IHByaXYtPnJ4LnNpemUgKyBwcml2LT50eG0uc2l6ZSArIHByaXYtPnR4ZC5zaXplOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0Ja2ZyZWUocHJpdi0+cnguaW5mbyk7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplb2Yoc3RydWN0IGFnbnhfZGVzYykgKiBsZW4sCi0JCQkgICAgcHJpdi0+cnguZGVzYywgcHJpdi0+cnguZG1hKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCBhZ254X3BlcmlvZGljX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWdueF9wcml2LCBwZXJpb2RpY193b3JrLndvcmspOwotLyoJdW5zaWduZWQgbG9uZyBmbGFnczsgKi8KLQl1bnNpZ25lZCBsb25nIGRlbGF5OwotCi0JLyogZml4bWU6IHVzaW5nIG11dGV4Pz8gKi8KLS8qCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7ICovCi0KLQkvKiBUT0RPIFJlY2FsaWJyYXRlKi8KLS8qCWNhbGlicmF0ZV9vc2NpbGxhdG9yKHByaXYpOyAqLwotLyoJYW50ZW5uYV9jYWxpYnJhdGUocHJpdik7ICovCi0vKglhZ254X3NlbmRfcGFja2V0KHByaXYsIDk5Nyk7ICovCi0JLyogRklYTUUgKi8KLS8qIAlpZiAoZGVidWcgPT0gMykgKi8KLS8qICAgICAgICAgICAgICAgICBkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoQUdOWF9QRVJJT0RJQ19ERUxBWSk7ICovCi0vKiAJZWxzZSAqLwotCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhBR05YX1BFUklPRElDX0RFTEFZKTsKLS8qCWRlbGF5ID0gcm91bmRfamlmZmllcyhIWiAqIDE1KTsgKi8KLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+cGVyaW9kaWNfd29yaywgZGVsYXkpOwotCi0vKglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7ICovCi19Ci0jZW5kaWYKLQotc3RhdGljIGludCBhZ254X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCS8qIHVuc2lnbmVkIGxvbmcgZGVsYXk7ICovCi0JaW50IGVyciA9IDA7Ci0JQUdOWF9UUkFDRTsKLQotCWVyciA9IGFnbnhfYWxsb2NfcmluZ3MocHJpdik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCBhbGxvYyBSWC9UWE0vVFhEIHJpbmdzXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJmFnbnhfaW50ZXJydXB0X2hhbmRsZXIsCi0JCQkgIElSUUZfU0hBUkVELCAiYWdueF9wY2kiLCBkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iKTsKLQkJcmluZ3NfZnJlZShwcml2KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0vKgltZGVsYXkoNTAwKTsgKi8KLQotCW1pZ2h0X3NsZWVwKCk7Ci0JYWdueF9od19pbml0KHByaXYpOwotCi0vKgltZGVsYXkoNTAwKTsgKi8KLQltaWdodF9zbGVlcCgpOwotCi0JcHJpdi0+aW5pdF9zdGF0dXMgPSBBR05YX1NUQVJUOwotLyogICAgICAgICBJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cGVyaW9kaWNfd29yaywgYWdueF9wZXJpb2RpY193b3JrX2hhbmRsZXIpOyAqLwotLyogCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhBR05YX1BFUklPRElDX0RFTEFZKTsgKi8KLS8qICAgICAgICAgcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5wZXJpb2RpY193b3JrLCBkZWxheSk7ICovCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0gLyogYWdueF9zdGFydCAqLwotCi1zdGF0aWMgdm9pZCBhZ254X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JQUdOWF9UUkFDRTsKLQotCXByaXYtPmluaXRfc3RhdHVzID0gQUdOWF9TVE9QOwotCS8qIG1ha2Ugc3VyZSBoYXJkd2FyZSB3aWxsIG5vdCBnZW5lcmF0ZSBpcnEgKi8KLQlhZ254X2h3X3Jlc2V0KHByaXYpOwotCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgZGV2KTsKLS8qCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5ody0+d29ya3F1ZXVlKTsgKi8KLS8qCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cGVyaW9kaWNfd29yayk7ICovCi0JdW5maWxsX3JpbmdzKHByaXYpOwotCXJpbmdzX2ZyZWUocHJpdik7Ci19Ci0KLXN0YXRpYyBpbnQgYWdueF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYtPmNvbmY7Ci0JaW50IGNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCS8qIEZJWE1FIG5lZWQgcHJpdiBsb2NrPyAqLwotCWlmIChjaGFubmVsICE9IHByaXYtPmNoYW5uZWwpIHsKLQkJcHJpdi0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JCWFnbnhfc2V0X2NoYW5uZWwocHJpdiwgcHJpdi0+Y2hhbm5lbCk7Ci0JfQotCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhZ254X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYsCi0JCQkJICB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLQlpZiAoIShjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCi0JaWYgKG1lbWNtcChjb25mLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkgewotCQlhZ254X3NldF9ic3NpZChwcml2LCBjb25mLT5ic3NpZCk7Ci0JCW1lbWNweShwcml2LT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJaGFzaF93cml0ZShwcml2LCBjb25mLT5ic3NpZCwgQlNTSURfU1RBSUQpOwotCQlzdGFfaW5pdChwcml2LCBCU1NJRF9TVEFJRCk7Ci0JCS8qIEZJWE1FIG5lZWRlZD8gKi8KLQkJc3RhX3Bvd2VyX2luaXQocHJpdiwgQlNTSURfU1RBSUQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX01UU00sIDB4ZmYgJiB+MHgxKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotfSAvKiBhZ254X2Jzc19pbmZvX2NoYW5nZWQgKi8KLQotCi1zdGF0aWMgdm9pZCBhZ254X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKLXsKLQl1bnNpZ25lZCBpbnQgbmV3X2ZsYWdzID0gMDsKLQotCSp0b3RhbF9mbGFncyA9IG5ld19mbGFnczsKLQkvKiBUT0RPICovCi19Ci0KLXN0YXRpYyBpbnQgYWdueF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JLyogRklYTUUgKi8KLQlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFnbnhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBUT0RPICovCi0JcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci19Ci0KLXN0YXRpYyBpbnQgYWdueF9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlBR05YX1RSQUNFOwotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JLyogVE9ETyAhISAqLwotCW1lbWNweShzdGF0cywgJnByaXYtPnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1NjQgYWdueF9nZXRfdHNmdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSAoKHN0cnVjdCBhZ254X3ByaXYgKilkZXYtPnByaXYpLT5jdGw7Ci0JdTMyIHRzZnRsOwotCXU2NCB0c2Z0OwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBGSVhNRSAqLwotCXRzZnRsID0gaW9yZWFkMzIoY3RsICsgQUdOWF9UWE1fVElNRVNUQU1QTE8pOwotCXRzZnQgPSBpb3JlYWQzMihjdGwgKyBBR05YX1RYTV9USU1FU1RBTVBISSk7Ci0JdHNmdCA8PD0gMzI7Ci0JdHNmdCB8PSB0c2Z0bDsKLQotCXJldHVybiB0c2Z0OwotfQotCi1zdGF0aWMgaW50IGFnbnhfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlBR05YX1RSQUNFOwotCi0JLyogRklYTUUgbm93IHdlIGp1c3QgdXNpbmcgdHhkIHF1ZXVlLCBidXQgc2hvdWxkIHVzaW5nIHR4bSBxdWV1ZSB0b28gKi8KLQlzdGF0c1swXS5sZW4gPSAocHJpdi0+dHhkLmlkeCAtIHByaXYtPnR4ZC5pZHhfc2VudCkgLyAyOwotCXN0YXRzWzBdLmxpbWl0ID0gcHJpdi0+dHhkLnNpemUgLSAyOwotCXN0YXRzWzBdLmNvdW50ID0gcHJpdi0+dHhkLmlkeCAvIDI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIGFnbnhfb3BzID0gewotCS50eAkJCT0gYWdueF90eCwKLQkuc3RhcnQJCQk9IGFnbnhfc3RhcnQsCi0JLnN0b3AJCQk9IGFnbnhfc3RvcCwKLQkuYWRkX2ludGVyZmFjZQkJPSBhZ254X2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UJPSBhZ254X3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZpZwkJCT0gYWdueF9jb25maWcsCi0JLmJzc19pbmZvX2NoYW5nZWQJPSBhZ254X2Jzc19pbmZvX2NoYW5nZWQsCi0JLmNvbmZpZ3VyZV9maWx0ZXIJPSBhZ254X2NvbmZpZ3VyZV9maWx0ZXIsCi0JLmdldF9zdGF0cwkJPSBhZ254X2dldF9zdGF0cywKLQkuZ2V0X3R4X3N0YXRzCQk9IGFnbnhfZ2V0X3R4X3N0YXRzLAotCS5nZXRfdHNmCQk9IGFnbnhfZ2V0X3RzZnQKLX07Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhZ254X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhZ254X3ByaXYgKnByaXY7Ci0JQUdOWF9UUkFDRTsKLQotCWlmICghZGV2KQotCQlyZXR1cm47Ci0JcHJpdiA9IGRldi0+cHJpdjsKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkZXYpOwotCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmN0bCk7Ci0JcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+ZGF0YSk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KLQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZ254X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2OwotCWludCBlcnI7Ci0KLQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBwY2kgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJhZ254LXBjaSIpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVzZXJ2ZSBQQ0kgcmVzb3VyY2VzXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSB8fAotCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX2ZyZWVfcmVnOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JZGV2ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqcHJpdiksICZhZ254X29wcyk7Ci0JaWYgKCFkZXYpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfcmVnOwotCX0KLQlwcml2ID0gZGV2LT5wcml2OwotCW1lbXNldChwcml2LCAwLCBzaXplb2YoKnByaXYpKTsKLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKLQlwcml2LT5wZGV2ID0gcGRldjsKLQlwcml2LT5odyA9IGRldjsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7Ci0JcHJpdi0+aW5pdF9zdGF0dXMgPSBBR05YX1VOSU5JVDsKLQotCXByaXYtPmN0bCA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKLS8qCWRldl9kYmcoJnBkZXYtPmRldiwgIk1FTTEgbWFwcGVkIGFkZHJlc3MgaXMgMHglcFxuIiwgcHJpdi0+Y3RsKTsgKi8KLQlpZiAoIXByaXYtPmN0bCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBtYXAgZGV2aWNlIG1lbW9yeVxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfZGV2OwotCX0KLQlwcml2LT5kYXRhID0gcGNpX2lvbWFwKHBkZXYsIDEsIDApOwotCWlmICghcHJpdi0+ZGF0YSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBtYXAgZGV2aWNlIG1lbW9yeVxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2lvdW5tYXAyOwotCX0KLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnByaXYtPnJldmlkKTsKLQotCXByaXYtPmJhbmQuY2hhbm5lbHMgICA9IChzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKilhZ254X2NoYW5uZWxzOwotCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoYWdueF9jaGFubmVscyk7Ci0JcHJpdi0+YmFuZC5iaXRyYXRlcyAgID0gKHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqKWFnbnhfcmF0ZXNfODAyMTFnOwotCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoYWdueF9yYXRlc184MDIxMWcpOwotCi0JLyogSW5pdCBpZWVlODAyLjExIGRldiAgKi8KLQlTRVRfSUVFRTgwMjExX0RFVihkZXYsICZwZGV2LT5kZXYpOwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwotCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFnbnhfaGRyKTsKLQotCS8qIEZJWE1FIEl0IG9ubHkgaW5jbHVkZSBGQ1MgaW4gcHJvbWlvdXMgbW9kZSBidXQgbm90IG1hbmFnZSBtb2RlICovCi0vKiAgICAgIGRldi0+ZmxhZ3MgPSAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsgKi8KLQlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOwotCWRldi0+bWF4X3NpZ25hbCA9IDEwMDsKLQkvKiBGSVhNRSAqLwotCWRldi0+cXVldWVzID0gMTsKLQotCWFnbnhfZ2V0X21hY19hZGRyZXNzKHByaXYpOwotCi0JU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBwcml2LT5tYWNfYWRkcik7Ci0KLS8qIAkvXCogRklYTUUgKlwvICovCi0vKiAJZm9yIChpID0gMTsgaSA8IE5VTV9EUklWRV9NT0RFUzsgaSsrKSB7ICovCi0vKiAJCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoZGV2LCAmcHJpdi0+bW9kZXNbaV0pOyAqLwotLyogCQlpZiAoZXJyKSB7ICovCi0vKiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCByZWdpc3RlciBod21vZGVcbiIpOyAqLwotLyogCQkJZ290byAgZXJyX2lvdW5tYXA7ICovCi0vKiAJCX0gKi8KLS8qIAl9ICovCi0KLQlwcml2LT5jaGFubmVsID0gMTsKLQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOwotCi0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZWdpc3RlciBoYXJkd2FyZVxuIik7Ci0JCWdvdG8gZXJyX2lvdW5tYXA7Ci0JfQotCi0JYWdueF9od19yZXNldChwcml2KTsKLQotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogaHdhZGRyICVwTSwgUmV2IDB4JTAyeFxuIiwKLQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKLQkJZGV2LT53aXBoeS0+cGVybV9hZGRyLCBwcml2LT5yZXZpZCk7Ci0JcmV0dXJuIDA7Ci0KLSBlcnJfaW91bm1hcDoKLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5kYXRhKTsKLQotIGVycl9pb3VubWFwMjoKLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5jdGwpOwotCi0gZXJyX2ZyZWVfZGV2OgotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwotCi0gZXJyX2ZyZWVfcmVnOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcmV0dXJuIGVycjsKLX0gLyogYWdueF9wY2lfcHJvYmUqLwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgYWdueF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlBR05YX1RSQUNFOwotCi0JaWVlZTgwMjExX3N0b3BfcXVldWVzKGRldik7Ci0JYWdueF9zdG9wKGRldik7Ci0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZ254X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCUFHTlhfVFJBQ0U7Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0KLQlhZ254X3N0YXJ0KGRldik7Ci0JaWVlZTgwMjExX3dha2VfcXVldWVzKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLQotI2RlZmluZSBhZ254X3BjaV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgYWdueF9wY2lfcmVzdW1lIE5VTEwKLQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ254X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImFnbngtcGNpIiwKLQkuaWRfdGFibGUJPSBhZ254X3BjaV9pZF90YmwsCi0JLnByb2JlCQk9IGFnbnhfcGNpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYWdueF9wY2lfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGFnbnhfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBhZ254X3BjaV9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBhZ254X3BjaV9pbml0KHZvaWQpCi17Ci0JQUdOWF9UUkFDRTsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYWdueF9wY2lfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFnbnhfcGNpX2V4aXQodm9pZCkKLXsKLQlBR05YX1RSQUNFOwotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYWdueF9wY2lfZHJpdmVyKTsKLX0KLQotCi1tb2R1bGVfaW5pdChhZ254X3BjaV9pbml0KTsKLW1vZHVsZV9leGl0KGFnbnhfcGNpX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxY2E4Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYworKysgL2Rldi9udWxsCkBAIC0xLDk2MCArMCwwIEBACi0vKioKLSAqIEFpcmdvIE1JTU8gd2lyZWxlc3MgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IExpIFlhbkJvIDxkcmVhbWZseTI4MUBnbWFpbC5jb20+Ci0KLSAqIFRoYW5rcyBmb3IgSmVmZiBXaWxsaWFtcyA8YW5nZWxiYW5lQGdtYWlsLmNvbT4gZG8gcmV2ZXJzZSBlbmdpbmVlcgotICogd29ya3MgYW5kIHB1Ymxpc2hlZCB0aGUgU1BFQ1MgYXQgaHR0cDovL2FpcmdvLndkd2NvbnN1bHRpbmcubmV0L215bW9pbgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInBoeS5oIgotI2luY2x1ZGUgInRhYmxlLmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAieG1pdC5oIgotCi11OCByZWFkX2Zyb21fZWVwcm9tKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUxNiBhZGRyZXNzKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXN0cnVjdCBhZ254X2VlcHJvbSBjbWQ7Ci0JdTMyIHJlZzsKLQotCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0JY21kLmNtZCA9IEVFUFJPTV9DTURfUkVBRCA8PCBBR05YX0VFUFJPTV9DT01NQU5EX1NISUZUOwotCWNtZC5hZGRyZXNzID0gYWRkcmVzczsKLQkvKiBWZXJpZnkgdGhhdCB0aGUgU3RhdHVzIGJpdCBpcyBjbGVhciAqLwotCS8qIFJlYWQgQ29tbWFuZCBhbmQgQWRkcmVzcyBhcmUgd3JpdHRlbiB0byB0aGUgU2VyaWFsIEludGVyZmFjZSAqLwotCWlvd3JpdGUzMigqKF9fbGUzMiAqKSZjbWQsIGN0bCArIEFHTlhfQ0lSX1NFUklBTElURik7Ci0JLyogV2FpdCBmb3IgdGhlIFN0YXR1cyBiaXQgdG8gY2xlYXIgYWdhaW4gKi8KLQllZXByb21fZGVsYXkoKTsKLQkvKiBSZWFkIGZyb20gRGF0YSAqLwotCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1NFUklBTElURik7Ci0KLQljbWQgPSAqKHN0cnVjdCBhZ254X2VlcHJvbSAqKSZyZWc7Ci0KLQlyZXR1cm4gY21kLmRhdGE7Ci19Ci0KLXN0YXRpYyBpbnQgY2FyZF9mdWxsX3Jlc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCwgMHg4MCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwpOwotCXJldHVybiAwOwotfQotCi1pbmxpbmUgdm9pZCBlbmFibGVfcG93ZXJfc2F2aW5nKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLX0KLQotaW5saW5lIHZvaWQgZGlzYWJsZV9wb3dlcl9zYXZpbmcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUE1DVEwsIHJlZyk7Ci19Ci0KLQotdm9pZCBkaXNhYmxlX3JlY2VpdmVyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEZJWE1FIERpc2FibGUgdGhlIHJlY2VpdmVyICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDApOwotCS8qIFNldCBnYWluIGNvbnRyb2wgcmVzZXQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCS8qIFJlc2V0IGdhaW4gY29udHJvbCByZXNldCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci19Ci0KLQotLyogRml4bWUgdGhpcyBzaG91bGUgYmUgZGlzYWJsZSBSWCwgYWJvdmUgaXMgZW5hYmxlIFJYICovCi12b2lkIGVuYWJsZV9yZWNlaXZlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBTZXQgYWRhcHRpdmUgZ2FpbiBjb250cm9sIGRpc2NvdmVyeSBtb2RlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCS8qIFNldCBnYWluIGNvbnRyb2wgcmVzZXQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCS8qIENsZWFyIGdhaW4gY29udHJvbCByZXNldCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hY19hZGRyZXNzX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXU4ICptYWNfYWRkciA9IHByaXYtPm1hY19hZGRyOwotCXUzMiByZWc7Ci0KLQkvKiBGSVhNRSAqLwotCXJlZyA9IChtYWNfYWRkclswXSA8PCAyNCkgfCAobWFjX2FkZHJbMV0gPDwgMTYpIHwgbWFjX2FkZHJbMl0gPDwgOCB8IG1hY19hZGRyWzNdOwotCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX01BQ0hJKTsKLQlyZWcgPSAobWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKLQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9NQUNMTyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlY2VpdmVyX2Jzc2lkX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci0JLyogRklYTUUgKi8KLQlyZWcgPSBic3NpZFswXSA8PCAyNCB8IChic3NpZFsxXSA8PCAxNikgfCAoYnNzaWRbMl0gPDwgOCkgfCBic3NpZFszXTsKLQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9CU1NJREhJKTsKLQlyZWcgPSAoYnNzaWRbNF0gPDwgOCkgfCBic3NpZFs1XTsKLQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9CU1NJRExPKTsKLQotCS8qIEVuYWJsZSB0aGUgcmVjZWl2ZXIgKi8KLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci0KLQkvKiBDbGVhciB0aGUgVFNGICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVFNGTE8sIDB4MCk7ICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVFNGSEksIDB4MCk7ICovCi0JLyogQ2xlYXIgdGhlIFRCVFQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UQlRUTE8sIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVEJUVEhJLCAweDApOwotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci19IC8qIHJlY2VpdmVyX2Jzc2lkX3NldCAqLwotCi1zdGF0aWMgdm9pZCBiYW5kX21hbmFnZW1lbnRfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0JdTMyIHJlZzsKLQlpbnQgaTsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9UWFdBRERSLCBBR05YX1BEVV9UWF9XUSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQUREUldJTiwgMHgwKTsKLQltZW1zZXRfaW8oZGF0YSArIEFHTlhfUERVUE9PTCwgMHgwLCBBR05YX1BEVVBPT0xfU0laRSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9CTUNUTCwgMHgyMDApOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DSVBEVVdDTlQsIDB4NDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fU1BQRFVXQ05ULCAweDIpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fUkZQUERVV0NOVCwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1JIUFBEVVdDTlQsIDB4MjIpOwotCi0JLyogRklYTUUgSW5pdGlhbGl6ZSB0aGUgRnJlZSBQb29sIExpbmtlZCBMaXN0ICovCi0JLyogICAgMS4gV3JpdGUgdGhlIEFkZHJlc3Mgb2YgdGhlIE5leHQgTm9kZSAoKDB4NDE4MDAgKyBub2RlKnNpemUpL3NpemUpCi0JICAgICAgdG8gdGhlIGZpcnN0IHdvcmQgb2YgZWFjaCBub2RlLiAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUERVX0ZSRUVfQ05UOyBpKyspIHsKLQkJaW93cml0ZTMyKChBR05YX1BEVV9GUkVFICsgKGkrMSkqUERVX1NJWkUpL1BEVV9TSVpFLAotCQkJICBkYXRhICsgQUdOWF9QRFVfRlJFRSArIChQRFVfU0laRSAqIGkpKTsKLQkJLyogVGhlIGxhc3Qgbm9kZSBzaG91bGQgYmUgc2V0IHRvIDB4MCAqLwotCQlpZiAoKGkgKyAxKSA9PSBQRFVfRlJFRV9DTlQpCi0JCQltZW1zZXRfaW8oZGF0YSArIEFHTlhfUERVX0ZSRUUgKyAoUERVX1NJWkUgKiBpKSwKLQkJCQkgIDB4MCwgUERVX1NJWkUpOwotCX0KLQotCS8qIEhlYWQgaXMgRmlyc3QgUG9vbCBhZGRyZXNzICgweDQxODAwKSAvIHNpemUgKDB4ODApICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9GUExIUCwgQUdOWF9QRFVfRlJFRS9QRFVfU0laRSk7Ci0JLyogVGFpbCBpcyBMYXN0IFBvb2wgQWRkcmVzcyAoMHg0N2Y4MCkgLyBzaXplICgweDgwKSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fRlBMVFAsIDB4NDdmODAvUERVX1NJWkUpOwotCS8qIENvdW50IGlzIE51bWJlciBvZiBOb2RlcyBpbiB0aGUgUG9vbCAoMHhkMCkgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0ZQQ05ULCBQRFVfRlJFRV9DTlQpOwotCi0JLyogU3RhcnQgYWxsIHdvcmtxdWV1ZSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fQ0lXUUNUTCwgMHg4MDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DUFVMV0NUTCwgMHg4MDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DUFVIV0NUTCwgMHg4MDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DUFVUWFdDVEwsIDB4ODAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fQ1BVUlhXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1NQUlhXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1NQVFhXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1JGUFdDVEwsIDB4ODAwMDApOwotCi0JLyogRW5hYmxlIHRoZSBCYW5kIE1hbmFnZW1lbnQgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQk1fQk1DVEwpOwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9CTUNUTCwgcmVnKTsKLX0gLyogYmFuZF9tYW5hZ21lbnRfaW5pdCAqLwotCi0KLXN0YXRpYyB2b2lkIHN5c3RlbV9pdGZfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9VVCwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1RFU1RQSFksIDB4MTFlMTQzYSk7Ci0KLQlpZiAocHJpdi0+cmV2aWQgPT0gMCkgewotCQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUpOwotCQlyZWcgfD0gMHgxMTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgcmVnKTsKLQl9Ci0JLyogPz8/IFdoYXQgaXMgdGhhdCBtZWFucz8gaXQgc2hvdWxkIGRpZmZlcmVuY2UgZm9yIGRpZmZlcmljZSB0eXBlCi0JIG9mIGNhcmRzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfU0VSSUFMSVRGLCAweGZmZjgxMDA2KTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9JTiwgMHgxZjAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9VVCwgMHg1KTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9JTik7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuY3J5cHRpb25faW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0VOQ1JZX1dFUEtFWTAsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9FTkNSWV9XRVBLRVkxLCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfRU5DUllfV0VQS0VZMiwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0VOQ1JZX1dFUEtFWTMsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9FTkNSWV9DQ01SRUNUTCwgMHg4KTsKLX0KLQotc3RhdGljIHZvaWQgdHhfbWFuYWdlbWVudF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBGaWxsIG91dCB0aGUgQ29tcHV0YXRpb25hbEVuZ2luZUxvb2t1cFRhYmxlCi0JICogc3RhcnRpbmcgYXQgbWVtb3J5ICMyIG9mZnNldCAweDgwMAotCSAqLwotCXR4X2VuZ2luZV9sb29rdXBfdGJsX2luaXQocHJpdik7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDEwMDAsIDAsIDB4ZmUwKTsKLQkvKiBFbmFibGUgVHJhbnNtaXNzaW9uIE1hbmFnZW1lbnQgRnVuY3Rpb25zICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRVRNRiwgMHgzZmYpOwotCS8qIFdyaXRlIDB4M2YgdG8gVHJhbnNtaXNzaW9uIFRlbXBsYXRlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVFhURU1QLCAweDNmKTsKLQotCWlmIChwcml2LT5yZXZpZCA+PSAyKQotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TSUZTUElGUywgMHgxZTE0MGEwYik7Ci0JZWxzZQotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TSUZTUElGUywgMHgxZTE5MGEwYik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTKTsKLQlyZWcgJj0gMHhmZjAwOwotCXJlZyB8PSAweGI7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUyk7Ci0JcmVnICY9IDB4ZmZmZjAwZmY7Ci0JcmVnIHw9IDB4YTAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTLCByZWcpOwotCS8qIEVuYWJsZSBUSUZTICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1RMLCAweDQwMDAwKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMpOwotCXJlZyAmPSAweGZmMDBmZmZmOwotCXJlZyB8PSAweDUxMDAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUywgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1BST0JERUxBWSk7Ci0JcmVnICY9IDB4ZmYwMGZmZmY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fUFJPQkRFTEFZLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMpOwotCXJlZyAmPSAweDAwZmZmZmZmOwotCXJlZyB8PSAweDFjMDAwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fUFJPQkRFTEFZKTsKLQlyZWcgJj0gMHgwMGZmZmZmZjsKLQlyZWcgfD0gMHgwMTAwMDAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVksIHJlZyk7Ci0KLQkvKiAjIFNldCBESUYgMC0xLDItMyw0LTUsNi03IHRvIGRlZmF1bHRzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRElGMDEsIDB4MzIxZDMyMWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0RJRjIzLCAweDMyMWQzMjFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9ESUY0NSwgMHgzMjFkMzIxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRElGNjcsIDB4MzIxZDMyMWQpOwotCi0JLyogTWF4IEFjayB0aW1lb3V0IGxpbWl0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fTUFYQUNLVElNLCAweDFlMTkpOwotCS8qIE1heCBSWCBEYXRhIFRpbWVvdXQgY291bnQsICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9NQVhSWFRJTUUpOwotCXJlZyAmPSAweGZmZmYwMDAwOwotCXJlZyB8PSAweGZmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX01BWFJYVElNRSwgcmVnKTsKLQotCS8qIENGIHBvbGwgUlggVGltZW91dCBjb3VudCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0pOwotCXJlZyAmPSAweGZmZmY7Ci0JcmVnIHw9IDB4ZmYwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NGUE9MTFJYVElNLCByZWcpOwotCi0JLyogTWF4IFRpbWVvdXQgRXhjZWVkZWQgY291bnQsICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9NQVhUSU1PVVQpOwotCXJlZyAmPSAweGZmMDBmZmZmOwotCXJlZyB8PSAweDE5MDAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9NQVhUSU1PVVQsIHJlZyk7Ci0KLQkvKiBDRiBhY2sgdGltZW91dCBsaW1pdCBmb3IgMTFiICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DRkFDS1QxMUIpOwotCXJlZyAmPSAweGZmMDA7Ci0JcmVnIHw9IDB4MWU7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZBQ0tUMTFCLCByZWcpOwotCi0JLyogTWF4IENGIFBvbGwgVGltZW91dCBDb3VudCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0pOwotCXJlZyAmPSAweGZmZmYwMDAwOwotCXJlZyB8PSAweDE5OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NGUE9MTFJYVElNLCByZWcpOwotCS8qIENGIFBvbGwgUlggVGltZW91dCBDb3VudCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0pOwotCXJlZyAmPSAweGZmZmYwMDAwOwotCXJlZyB8PSAweDFlOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NGUE9MTFJYVElNLCByZWcpOwotCi0JLyogIyB3cml0ZSBkZWZhdWx0IHRvICovCi0JLyogICAgMS4gU2NoZWR1bGUgRW1wdHkgQ291bnQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TQ0hFTVBDTlQsIDB4NSk7Ci0JLyogICAgMi4gQ0ZQIFBlcmlvZCBDb3VudCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NGUEVSQ05ULCAweDEpOwotCS8qICAgIDMuIENGUCBNRFYgICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQTURWLCAweDEwMDAwKTsKLQotCS8qIFByb2JlIERlbGF5ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVkpOwotCXJlZyAmPSAweGZmZmYwMDAwOwotCXJlZyB8PSAweDQwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVksIHJlZyk7Ci0KLQkvKiBNYXggQ0NBIGNvdW50IFNsb3QgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX01BWENDQUNOVFNMT1QpOwotCXJlZyAmPSAweGZmZmYwMGZmOwotCXJlZyB8PSAweDkwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9NQVhDQ0FDTlRTTE9ULCByZWcpOwotCi0JLyogU2xvdCBsaW1pdC8xIG1zZWMgTGltaXQgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1NMT1RMSU1JVCk7Ci0JcmVnICY9IDB4ZmYwMGZmZmY7Ci0JcmVnIHw9IDB4MTQwMDc3OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1NMT1RMSU1JVCwgcmVnKTsKLQotCS8qICMgU2V0IENXICMoMC03KSB0byBkZWZhdWx0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1cwLCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1cxLCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1cyLCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1czLCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1c0LCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1c1LCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1c2LCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1c3LCAweGZmMDAwNyk7Ci0KLQkvKiAjIFNldCBTaG9ydC9Mb25nIGxpbWl0ICMoMC03KSB0byBkZWZhdWx0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU0wLCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU0xLCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU0yLCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU0zLCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU00LCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU01LCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU02LCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU03LCAgMHhhMDAwYSk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX0NUTCk7Ci0JcmVnIHw9IDB4MTQwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIHJlZyk7Ci0JLyogV2FpdCBmb3IgYml0IDAgaW4gQ29udHJvbCBSZWcgdG8gY2xlYXIgICovCi0JdWRlbGF5KDgwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX0NUTCk7Ci0JLyogT3IgMHgxODAwMCB0byBDb250cm9sIHJlZyAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQlyZWcgfD0gMHgxODAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIHJlZyk7Ci0JLyogV2FpdCBmb3IgYml0IDAgaW4gQ29udHJvbCBSZWcgdG8gY2xlYXIgKi8KLQl1ZGVsYXkoODApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQotCS8qIFNldCBMaXN0ZW4gSW50ZXJ2YWwgQ291bnQgdG8gZGVmYXVsdCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0xJU0lOVEVSQ05ULCAweDEpOwotCS8qIFNldCBEVElNIHBlcmlvZCBjb3VudCB0byBkZWZhdWx0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRFRJTVBFUklDTlQsIDB4MjAwMCk7Ci19IC8qIHR4X21hbmFnZW1lbnRfaW5pdCAqLwotCi1zdGF0aWMgdm9pZCByeF9tYW5hZ2VtZW50X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlBR05YX1RSQUNFOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgUm91dGluZyBUYWJsZSAqLwotCXJvdXRpbmdfdGFibGVfaW5pdChwcml2KTsKLQotCWlmIChwcml2LT5yZXZpZCA+PSAzKSB7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3NCwgMHgxZjE3MTcxMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3OCwgMHgxMDEwMGQwZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3YywgMHgxMTExMTAxMCk7Ci0JfSBlbHNlIHsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fREVMQVkxMSwgMHgwKTsKLQl9Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHg4MTk1ZTAwKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBhZ254X3RpbWVyX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlBR05YX1RSQUNFOwotCi0vKiAJL1wqIFdyaXRlIDB4MjQ5ZjAwICh0aWNrIGR1cmF0aW9uPykgdG8gVGltZXIgMSAqXC8gKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RJTUNUTF9USU1FUjEsIDB4MjQ5ZjAwKTsgKi8KLS8qIAkvXCogV3JpdGUgMHhlMiB0byBUaW1lciAxIENvbnRyb2wgKlwvICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9USU1DVExfVElNMUNUTCwgMHhlMik7ICovCi0KLQkvKiBXcml0ZSAweDI0OWYwMCAodGljayBkdXJhdGlvbj8pIHRvIFRpbWVyIDEgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RJTUNUTF9USU1FUjEsIDB4MCk7Ci0JLyogV3JpdGUgMHhlMiB0byBUaW1lciAxIENvbnRyb2wgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RJTUNUTF9USU0xQ1RMLCAweDApOwotCi0JaW93cml0ZTMyKDB4RkZGRkZGRkYsIHByaXYtPmN0bCArIEFHTlhfVFhNX0JFQUNPTl9DVEwpOwotfQotCi1zdGF0aWMgdm9pZCBwb3dlcl9tYW5hZ2VfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fTUFDTVNXLCAweDFmKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1JGQ1RMLCAweDFmKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IDB4ZjAwZjsKLQlyZWcgfD0gMHhhMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotCi0JaWYgKHByaXYtPnJldmlkID49IDMpIHsKLQkJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QpOwotCQlyZWcgfD0gMHgxODsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCX0KLX0gLyogcG93ZXJfbWFuYWdlX2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBnYWluX2N0bGNudF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVFJBQ05UNSwgMHgxMTkpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RSQUNOVDYsIDB4MTE4KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9UUkFDTlQ3LCAweDExNyk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0FERFJXSU4sIDB4MCk7Ci0KLQkvKiBGSVhNRSBXcml0ZSB0aGUgaW5pdGlhbCBTdGF0aW9uIERlc2NyaXB0b3IgZm9yIHRoZSBjYXJkICovCi0Jc3RhX2luaXQocHJpdiwgTE9DQUxfU1RBSUQpOwotCXN0YV9pbml0KHByaXYsIEJTU0lEX1NUQUlEKTsKLQotCS8qIEVuYWJsZSBzdGFpb24gMCBhbmQgMSBjYW4gZG8gVFggKi8KLQkvKiBJdCBzZWVtZWQgaWYgd2Ugc2V0IG90aGVyIGJpdCB0byAxIHRoZSBiaXQgMCB3aWxsCi0JICAgYmUgYXV0byBjaGFuZ2UgdG8gMCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fVFhUT1BFRVIsIDB4MiB8IDB4MSk7Ci0vKglhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1RYVE9QRUVSLCAweDEpOyAqLwotfSAvKiBnYWluX2N0bGNudF9pbml0ICovCi0KLQotc3RhdGljIHZvaWQgcGh5X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIExvYWQgSW5pdGlhbEdhaW5UYWJsZSAqLwotCWdhaW5fdGFibGVfaW5pdChwcml2KTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0FERFJXSU4sIDB4MjAwMDAwMCk7Ci0KLQkvKiBDbGVhciB0aGUgZm9sbG93aW5nIG9mZnNldHMgaW4gTWVtb3J5IFJhbmdlICMyOiAqLwotCW1lbXNldF9pbyhkYXRhICsgMHg1MDQwLCAwLCAweGEgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4NTA4MCwgMCwgMHhhICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDUwYzAsIDAsIDB4YSAqIDQpOwotCW1lbXNldF9pbyhkYXRhICsgMHg1NDAwLCAwLCAweDgwICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDYwMDAsIDAsIDB4MjgwICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDcwMDAsIDAsIDB4MjgwICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDgwMDAsIDAsIDB4MjgwICogNCk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBGb2xsb3dpbmcgUmVnaXN0ZXJzIEFjY29yZGluZyB0byBQQ0kgUmV2aXNpb24gSUQgKi8KLQlpZiAocHJpdi0+cmV2aWQgPT0gMCkgewotCQkvKiBmaXhtZSB0aGUgcGFydCBoYXNuJ3QgYmVlbiB1cGRhdGUgYnV0IGJlbG93IGhhcyBiZWVuIHVwZGF0ZQotCQkgICBiYXNlZCBvbiBXR001MTEgKi8KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweGYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjEsIDB4MWQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0FJQ0NIQTBPVkUsIDB4MTEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9BSUNDSEExT1ZFLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQSwgMHg2NCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMHg0Yik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCLCAweDRiKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRFVOU0FULCAweDE0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRFNBVCwgMHgyNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RGSVJDQUwsIDB4OCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RHQ1RMMTFBLCAweDFhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfREdDVEwxMUIsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5JTklULCAweGQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USE5PU0lHLCAweDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT0FSU1RFUCwgMHg3KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lGU1QxMUEsIDB4MjgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUZTVDExQiwgMHgyOCk7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfQ1dERVRFQyk7Ci0JCXJlZyB8PSAweDE7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NXREVURUMsIHJlZyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMzgsIDB4MWUpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0FDVCwgMHgyNik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAweDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQMTFBLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUDExQiwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVBSWDExQSwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVBSWDExQiwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhMRVZEUk8sIDB4MTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9NQVhSWFRJTUUxMUEsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX01BWFJYVElNRTExQiwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ09SUlRJTUUsIDB4MTkwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHSFRILCAweDc4KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAweDFjKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ09SUkRST1AsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0QsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX01BWFBPV0RJRkYsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RFU1RCVVMsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0FOVENGRywgMHgxZik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RISlVNUCwgMHgxNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIUE9XRVIsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIUE9XQ0xJUCwgMHgzMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCVEZFU1QsIDB4MzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USFJYMTFCUE9XTUlOLCAweDE5KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgxNGMsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMTUwLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MDAsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQwYywgMHg2ZmYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MjgsIDB4YTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MzQsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwNCwgMHgxNSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwYywgMHg3Zik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMzNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhjMDAwLCAweDM4ZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTQwMTgsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTYwMDAsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDQsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1NCwgMHhhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzFjLCAweDUpOwotCX0gZWxzZSBpZiAocHJpdi0+cmV2aWQgPiAwKSB7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0xFTiwgMHhmKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDIxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIyLCAweDI3KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfQUlDQ0hBME9WRSwgMHgxMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0FJQ0NIQTFPVkUsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RVTlNBVCwgMHgxNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RTQVQsIDB4MjQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ERklSQ0FMLCAweDgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ER0NUTDExQSwgMHgxYSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RHQ1RMMTFCLCAweDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOSU5JVCwgMHhkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhOT1NJRywgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ09BUlNURVAsIDB4Nyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJRlNUMTFBLCAweDI4KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lGU1QxMUIsIDB4MjgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DV0RFVEVDLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDM4LCAweDFlKTsKLS8qCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0FDVCwgMHgyNik7Ki8KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQMTFBLCAweDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVAxMUIsIDB4MzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUFJYMTFBLCAweDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVBSWDExQiwgMHgzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RITEVWRFJPLCAweDEwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUlhUSU1FMTFBLCAweDFhZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX01BWFJYVElNRTExQiwgMHhhMTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT1JSVElNRSwgMHgxOTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT1JSRFJPUCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDRCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDUywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUE9XRElGRiwgMHg0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEVTVEJVUywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhKVU1QLCAweDFlKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhQT1dFUiwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhQT1dDTElQLCAweDJhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgMHgzYyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIUlgxMUJQT1dNSU4sIDB4MTkpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDE0YywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgxNTAsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfV0FUQ0hET0csIDB4MzcpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MDAsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQwYywgMHg2ZmYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MjgsIDB4YTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MzQsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwNCwgMHgxNSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwYywgMHg3Zik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMzNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhjMDAwLCAweDM4ZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTQwMTQsIDB4MTAwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTQwMTgsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTYwMDAsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDQsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1NCwgMHhhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzFjLCAweDUwKTsKLQl9IGVsc2UgaWYgKHByaXYtPnJldmlkID4gMSkgewotCQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4ZWMxOCk7Ci0JCXJlZyB8PSAweDg7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWMxOCwgcmVnKTsKLQl9Ci0KLQkvKiBXcml0ZSB0aGUgVFggRmlyIENvZWZmaWNpZW50IFRhYmxlICovCi0JdHhfZmlyX3RhYmxlX2luaXQocHJpdik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyAmPSB+MHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUE1DVEwsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BMTENUTCk7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BMTENUTCwgcmVnKTsKLQotLyogCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgxYTAzMCk7ICovCi0vKiAJcmVnICY9IH4weDQ7ICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgMHgxYTAzMCwgcmVnKTsgKi8KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RSQUNOVDQsIDB4MTEzKTsKLX0gLyogcGh5X2luaXQgKi8KLQotc3RhdGljIHZvaWQgY2hpcF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYmFuZF9tYW5hZ2VtZW50X2luaXQocHJpdik7Ci0KLQlyZl9jaGlwc19pbml0KHByaXYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUE1DVEwsIHJlZyk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBQSFkgKi8KLQlwaHlfaW5pdChwcml2KTsKLQotCWVuY3J5cHRpb25faW5pdChwcml2KTsKLQotCXR4X21hbmFnZW1lbnRfaW5pdChwcml2KTsKLQotCXJ4X21hbmFnZW1lbnRfaW5pdChwcml2KTsKLQotCXBvd2VyX21hbmFnZV9pbml0KHByaXYpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVGltZXJzICovCi0JYWdueF90aW1lcl9pbml0KHByaXYpOwotCi0JLyogV3JpdGUgMHhjMzkwYmY5IHRvIEludGVycnVwdCBNYXNrIChEaXNhYmxlIFRYKSAqLwotCXJlZyA9IDB4YzM5MGJmOSAmIH5JUlFfVFhfQkVBQ09OOwotCXJlZyAmPSB+SVJRX1RYX0RJU0FCTEU7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9JTlRfTUFTSywgcmVnKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfQkxLQ1RMKTsKLQlyZWcgfD0gMHg4MDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQkxLQ1RMLCByZWcpOwotCi0JLyogc2V0IGl0IHdoZW4gbmVlZCBnZXQgbXVsdGljYXN0IGVuYWJsZT8gKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX01UU00sIDB4ZmYpOwotfSAvKiBjaGlwX2luaXQgKi8KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Byb21pc19hbmRfbWFuYWdlZChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MTAgfCAweDIpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MTAgfCAweDIpOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9sZWFybl9tb2RlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHg4KTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2Nhbl9tb2RlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgyMCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQkvKiBhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDIxMCk7Ki8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDEwKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbWFuYWdlZF9tb2RlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgyKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYWRob2NfbW9kZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MCk7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCB1bmtub3dfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgwLCAweDNlKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NCwgMHhiMik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDgsIDB4MTQwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4YywgMHgxQzApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgxMCwgMHgxRkYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgxNCwgMHgxREQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgxOCwgMHgxNUYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgxYywgMHhBMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDIwLCAweDNFNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDI0LCAweDM2Qik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDI4LCAweDM0OCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDJjLCAweDM3RCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDMwLCAweDNERSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDM0LCAweDM2KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MzgsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgzYywgMHg1Nyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDQwLCAweDIzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NDQsIDB4M0VEKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NDgsIDB4M0M5KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NGMsIDB4M0NBKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NTAsIDB4M0U3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NTQsIDB4OCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDU4LCAweDFGKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NWMsIDB4MWEpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGNhcmRfaW50ZXJmYWNlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1OCBic3NpZFtFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0JdTMyIHJlZzsKLQl1bnNpZ25lZCBpbnQgaTsKLQlBR05YX1RSQUNFOwotCi0JbWlnaHRfc2xlZXAoKTsKLQkvKiBDbGVhciBSWCBDb250cm9sIGFuZCBFbmFibGUgUlggcXVldWVzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfUlhDVEwsIDB4OCk7Ci0KLQltaWdodF9zbGVlcCgpOwotCS8qIERvIGEgZnVsbCByZXNldCBvZiB0aGUgY2FyZCAqLwotCWNhcmRfZnVsbF9yZXNldChwcml2KTsKLQltaWdodF9zbGVlcCgpOwotCi0JLyogQ2hlY2sgYW5kIHNldCBDYXJkIEVuZGlhbm5lc3MgKi8KLQlyZWcgPSBpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9FTkRJQU4pOwotCS8qIFRPRE8gSWYgbm90IDB4QjNCMkIxQjAgc2V0IHRvIDB4QjNCMkIxQjAgKi8KLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQ0lSX0VORElBTiBpcyAleFxuIiwgcmVnKTsKLQotCi0JLyogQ29uZmlnIHRoZSBlZXByb20gKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYsIDB4NzAwMDA4Nik7Ci0JdWRlbGF5KDEwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURik7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fU09GVFJTVCwgMHg4MDAwMDAzMyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweGVjNTApOwotCXJlZyB8PSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fU09GVFJTVCwgMHgwKTsKLQotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NZU0lURl9HUElPSU4pOwotCXVkZWxheSgxMCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYpOwotCi0JLyogRHVtcCB0aGUgZWVwcm9tICovCi0JZG8gewotCQljaGFyIGVlcHJvbVsweDEwMDAwMC8weDEwMF07Ci0KLQkJZm9yIChpID0gMDsgaSA8IDB4MTAwMDAwOyBpICs9IDB4MTAwKSB7Ci0JCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYsIDB4MzAwMDAwMCArIGkpOwotCQkJdWRlbGF5KDEzKTsKLQkJCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQkJCXVkZWxheSg3MCk7Ci0JCQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURik7Ci0JCQllZXByb21baS8weDEwMF0gPSByZWcgJiAweEZGOwotCQkJdWRlbGF5KDEwKTsKLQkJfQotCQlwcmludF9oZXhfZHVtcF9ieXRlcyhQRlggIkVFUFJPTTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgZWVwcm9tLAotCQkJCSAgICAgQVJSQVlfU0laRShlZXByb20pKTsKLQl9IHdoaWxlICgwKTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwLCAweDI2KTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgc3lzdGVtIGludGVyZmFjZSAqLwotCXN5c3RlbV9pdGZfaW5pdChwcml2KTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogQ2hpcCBJbml0aWFsaXphdGlvbiAoUG9sYXJpcykgKi8KLQljaGlwX2luaXQocHJpdik7Ci0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIENhbGlicmF0ZSB0aGUgYW50ZW5uYWUgKi8KLQlhbnRlbm5hX2NhbGlicmF0ZShwcml2KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHhlYzUwKTsKLQlyZWcgJj0gfjB4NDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fU09GVFJTVCwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BMTENUTCwgMHgxKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9CTV9CTUNUTCk7Ci0JcmVnIHw9IDB4ODAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0JNQ1RMLCByZWcpOwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUpOwotCXJlZyB8PSAweDIwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCByZWcpOwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogSW5pdGlhbGl6ZSBHYWluIENvbnRyb2wgQ291bnRzICovCi0JZ2Fpbl9jdGxjbnRfaW5pdChwcml2KTsKLQotCS8qIFdyaXRlIEluaXRpYWwgU3RhdGlvbiBQb3dlciBUZW1wbGF0ZSBmb3IgdGhpcyBzdGF0aW9uKCMwKSAqLwotCXN0YV9wb3dlcl9pbml0KHByaXYsIExPQ0FMX1NUQUlEKTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogSW5pdGlhbGl6ZSB0aGUgcngsdGQsdG0gcmluZ3MsIGZvciBlYWNoIG5vZGUgaW4gdGhlIHJpbmcgKi8KLQlmaWxsX3JpbmdzKHByaXYpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDgwMDAwMDMzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIDB4Yyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDApOwotCi0JLyogRklYTUUgSW5pdGlhbGl6ZSB0aGUgdHJhbnNtaXQgY29udHJvbCByZWdpc3RlciAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NUTCwgMHgxOTRjMSk7Ci0KLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci0KLQltaWdodF9zbGVlcCgpOwotCS8qIEZJWE1FIFNldCB0aGUgUmVjZWl2ZSBDb250cm9sIE1hYyBBZGRyZXNzIHRvIGNhcmQgYWRkcmVzcyAqLwotCW1hY19hZGRyZXNzX3NldChwcml2KTsKLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIFNldCB0aGUgcmVjaWV2ZSByZXF1ZXN0IHJhdGUgKi8KLQkvKiBGSVhNRSBFbmFibGUgdGhlIHJlcXVlc3QgKi8KLQkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCi0JLyogU2V0IG1heGltdW0gcGFja2V0IGxlbmd0aCAqLwotLyoJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHg4ODE5NWUwMCk7ICovCi0vKgllbmFibGVfcmVjZWl2ZXIocHJpdik7ICovCi0KLQkvKiBTZXQgdGhlIFJlY2VpdmVyIEJTU0lEICovCi0JcmVjZWl2ZXJfYnNzaWRfc2V0KHByaXYsIGJzc2lkKTsKLQotCS8qIEZJWE1FIFNldCB0byBtYW5hZ2VkIG1vZGUgKi8KLQlzZXRfbWFuYWdlZF9tb2RlKHByaXYpOwotLyoJc2V0X3Byb21pc2N1b3VzX21vZGUocHJpdik7ICovCi0vKglzZXRfc2Nhbl9tb2RlKHByaXYpOyAqLwotLyoJc2V0X2xlYXJuX21vZGUocHJpdik7ICovCi0vKglzZXRfcHJvbWlzX2FuZF9tYW5hZ2VkKHByaXYpOyAqLwotLyoJc2V0X2FkaG9jX21vZGUocHJpdik7ICovCi0KLQkvKiBTZXQgdGhlIHJlY2lldmUgcmVxdWVzdCByYXRlICovCi0JLyogQ2hlY2sgcGFja2V0IGxlbmd0aCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIDB4MDgwMDAwMDApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSk7Ci0JLyogU2V0IG1heGltdW0gcGFja2V0IGxlbmd0aCAqLwotCXJlZyB8PSAweDAwMTk1ZTAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIHJlZyk7Ci0KLQkvKiBDb25maWd1cmUgdGhlIFJYIGFuZCBUWCBpbnRlcnJ1cHQgKi8KLQlyZWcgPSBFTkFCTEVfUlhfSU5URVJSVVBUIHwgUlhfQ0FDSEVfTElORSB8IEZSQUdfTEVOXzIwNDggfCBGUkFHX0JFOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1JYQ0ZHLCByZWcpOwotCS8qIEZJWE1FICovCi0JcmVnID0gRU5BQkxFX1RYX0lOVEVSUlVQVCB8IFRYX0NBQ0hFX0xJTkUgfCBGUkFHX0xFTl8yMDQ4IHwgRlJBR19CRTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWENGRywgcmVnKTsKLQotCS8qIEVuYWJsZSBSWCBUWCBJbnRlcnJ1cHRzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfUlhDVEwsIDB4ODApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYTUNUTCwgMHg4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhEQ1RMLCAweDgwKTsKLQotCS8qIEZJWE1FIFNldCB0aGUgbWFzdGVyIGNvbnRyb2wgaW50ZXJydXB0IGluIGJsb2NrIGNvbnRyb2wgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwsIDB4ODAwKTsKLQotCS8qIEVuYWJsZSBSWCBhbmQgVFggcXVldWVzICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9SWENUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENUTCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1RYTUNUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWE1DVEwsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9UWERDVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhEQ1RMLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDUpOwotCS8qIEZJWE1FICovCi0JLyogIHVua25vd19yZWdpc3Rlcl93cml0ZShwcml2KTsgKi8KLQkvKiBVcGRhdGUgbG9jYWwgY2FyZCBoYXNoIGVudHJ5ICovCi0JaGFzaF93cml0ZShwcml2LCBwcml2LT5tYWNfYWRkciwgTE9DQUxfU1RBSUQpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIEZJWE1FICovCi0JYWdueF9zZXRfY2hhbm5lbChwcml2LCAxKTsKLQltaWdodF9zbGVlcCgpOwotfSAvKiBhZ254X2NhcmRfaW50ZXJmYWNlX2luaXQgKi8KLQotCi12b2lkIGFnbnhfaHdfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCUFHTlhfVFJBQ0U7Ci0JbWlnaHRfc2xlZXAoKTsKLQljYXJkX2ludGVyZmFjZV9pbml0KHByaXYpOwotfQotCi1pbnQgYWdueF9od19yZXNldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXJldHVybiBjYXJkX2Z1bGxfcmVzZXQocHJpdik7Ci19Ci0KLWludCBhZ254X3NldF9zc2lkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCi17Ci0JQUdOWF9UUkFDRTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhZ254X3NldF9ic3NpZChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpCi17Ci0JcmVjZWl2ZXJfYnNzaWRfc2V0KHByaXYsIGJzc2lkKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NTVmMDUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDkgKzAsMCBAQAotI2lmbmRlZiBBR05YX1BIWV9IXwotI2RlZmluZSBBR05YX1BIWV9IXwotCi0jaW5jbHVkZSAiYWdueC5oIgotCi0vKiBUcmFuc21pc3Npb24gTWFuYWdtZW50IFJlZ2lzdGVycyAqLwotI2RlZmluZSBBR05YX1RYTV9CQVNFCQkweDAwMDAKLSNkZWZpbmUgQUdOWF9UWE1fQ1RMCQkweDAwMDAJLyogY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBBR05YX1RYTV9FVE1GCQkweDAwMDQgLyogZW5hYmxlIHRyYW5zbWlzc2lvbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwotI2RlZmluZSBBR05YX1RYTV9UWFRFTVAJCTB4MDAwOCAvKiB0cmFuc21pc3Npb24gdGVtcGxhdGUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fUkVUUllTVEFJRAkweDAwMGMgLyogUmV0cnkgU3RhdGlvbiBJRCAqLwotI2RlZmluZSBBR05YX1RYTV9USU1FU1RBTVBMTwkJMHgwMDEwCS8qIFRpbWVzdGFtcCBMbyAqLwotI2RlZmluZSBBR05YX1RYTV9USU1FU1RBTVBISQkJMHgwMDE0CS8qIFRpbWVzdGFtcCBIaSAqLwotI2RlZmluZSBBR05YX1RYTV9UWERFTEFZCTB4MDAxOCAgLyogdHggZGVsYXkgKi8KLSNkZWZpbmUgQUdOWF9UWE1fVEJUVExPCQkweDAwMjAJLyogdGJ0dCBMbyAqLwotI2RlZmluZSBBR05YX1RYTV9UQlRUSEkJCTB4MDAyNAkvKiB0YnR0IEhpICovCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUlOVEVSCTB4MDAyOCAvKiBCZWFjb24gSW50ZXJ2YWwgKi8KLSNkZWZpbmUgQUdOWF9UWE1fTkFWCQkweDAwMzAgLyogTkFWICovCi0jZGVmaW5lIEFHTlhfVFhNX0NGUE1EVgkJMHgwMDM0IC8qIENGUCBNRFYgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ0ZQRVJDTlQJMHgwMDM4IC8qIENGUCBwZXJpb2QgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fUFJPQkRFTEFZCTB4MDAzYyAvKiBwcm9iZSBkZWxheSAqLwotI2RlZmluZSBBR05YX1RYTV9MSVNJTlRFUkNOVAkweDAwNDAgLyogbGlzdGVuIGludGVydmFsIGNvdW50ICovCi0jZGVmaW5lIEFHTlhfVFhNX0RUSU1QRVJJQ05UCTB4MDA0YyAvKiBEVElNIHBlcmlvZCBjb3VudCAqLwotCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUNPTl9DVEwJMHgwMDVjIC8qIGJlYWNvbiBjb250cm9sICovCi0KLSNkZWZpbmUgQUdOWF9UWE1fU0NIRU1QQ05UCTB4MDA3YyAvKiBzY2hlZHVsZSBlbXB0eSBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhUSU1PVVQJMHgwMDg0IC8qIG1heCB0aW1lb3V0IGV4Y2VlZCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhDRlBUSU0JMHgwMDg4IC8qIG1heCBDRiBwb2xsIHRpbWVvdXQgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fTUFYUlhUSU1FCTB4MDA4YyAvKiBtYXggUlggdGltZW91dCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhBQ0tUSU0JMHgwMDkwCS8qIG1heCBBQ0sgdGltZW91dCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9ESUYwMQkJMHgwMGEwIC8qIERJRiAwLTEgKi8KLSNkZWZpbmUgQUdOWF9UWE1fRElGMjMJCTB4MDBhNCAvKiBESUYgMi0zICovCi0jZGVmaW5lIEFHTlhfVFhNX0RJRjQ1CQkweDAwYTggLyogRElGIDQtNSAqLwotI2RlZmluZSBBR05YX1RYTV9ESUY2NwkJMHgwMGFjIC8qIERJRiA2LTcgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0lGU1BJRlMJMHgwMGIwIC8qIFNJRlMvUElGUyAqLwotI2RlZmluZSBBR05YX1RYTV9USUZTRUlGUwkweDAwYjQgLyogVElGUy9FSUZTICovCi0jZGVmaW5lIEFHTlhfVFhNX01BWENDQUNOVFNMT1QJMHgwMGI4IC8qIG1heCBDQ0EgY291bnQgc2xvdCAqLwotI2RlZmluZSBBR05YX1RYTV9TTE9UTElNSVQJMHgwMGJjIC8qIHNsb3QgbGltaXQvMSBtc2VjIGxpbWl0ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NGUE9MTFJYVElNCTB4MDBmMCAvKiBDRiBwb2xsIFJYIHRpbWVvdXQgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ0ZBQ0tUMTFCCTB4MDBmNCAvKiBDRiBhY2sgdGltZW91dCBsaW1pdCBmb3IgMTFiICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMAkJMHgwMTAwIC8qIENXIDAgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0wCTB4MDEwOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAwICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMQkJMHgwMTIwIC8qIENXIDEgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0xCTB4MDEyOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAxICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMgkJMHgwMTQwIC8qIENXIDIgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0yCTB4MDE0OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAyICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMwkJMHgwMTYwIC8qIENXIDMgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0zCTB4MDE2OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAzICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNAkJMHgwMTgwIC8qIENXIDQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU00CTB4MDE4OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA0ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNQkJMHgwMWEwIC8qIENXIDUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU01CTB4MDFhOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA1ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNgkJMHgwMWMwIC8qIENXIDYgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU02CTB4MDFjOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA2ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNwkJMHgwMWUwIC8qIENXIDcgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU03CTB4MDFlOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA3ICovCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUNPTlRFTVAgICAgIDB4MTAwMAkvKiBiZWFjb24gdGVtcGxhdGUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU1RBUE9XVEVNUAkweDFhMDAgLyogIFN0YXRpb24gUG93ZXIgVGVtcGxhdGUgKi8KLQotLyogUmVjZWl2ZSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEFHTlhfUlhNX0JBU0UJCTB4MjAwMAotI2RlZmluZSBBR05YX1JYTV9SRVFSQVRFCTB4MjAwMAkvKiByZXF1ZXN0ZWQgcmF0ZSAqLwotI2RlZmluZSBBR05YX1JYTV9NQUNISQkJMHgyMDA0CS8qIGZpcnN0IDQgYnl0ZXMgb2YgbWFjIGFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9SWE1fTUFDTE8JCTB4MjAwOAkvKiBsYXN0IDIgYnl0ZXMgb2YgbWFjIGFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQlNTSURISQkweDIwMGMJLyogYnNzaWQgaGkgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQlNTSURMTwkweDIwMTAJLyogYnNzaWQgbG8gKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9DTURfRkxBRwkweDIwMTQJLyogRmxhZ3MgZm9yIHRoZSBSWCBIYXNoIENvbW1hbmQgRGVmYXVsdDowICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gJMHgyMDE4CS8qIFRoZSBIaWdoIGhhbGYgb2YgdGhlIEhhc2ggQ29tbWFuZCAqLwotI2RlZmluZSBBR05YX1JYTV9IQVNIX0NNRF9MT1cJMHgyMDFjCS8qIFRoZSBMb3cgaGFsZiBvZiB0aGUgSGFzaCBDb21tYW5kICovCi0jZGVmaW5lIEFHTlhfUlhNX1JPVVRBQgkJMHgyMDIwCS8qIHJvdXRpbmcgdGFibGUgKi8KLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1NISUZUCTI0Ci0jZGVmaW5lCQlST1VUQUJfVFlQRV9TSElGVAkyOAotI2RlZmluZQkJUk9VVEFCX1NUQVRVU19TSElGVAkzMAotI2RlZmluZQkJUk9VVEFCX1JXX1NISUZUCQkzMQotI2RlZmluZQkJUk9VVEFCX1JPVVRFX0RST1AJMHhmMDAwMDAgLyogRHJvcCAqLwotI2RlZmluZQkJUk9VVEFCX1JPVVRFX0NQVQkweDQwMDAwMCAvKiBDUFUgKi8KLSNkZWZpbmUJCVJPVVRBQl9ST1VURV9FTkNSWQkweDUwMDgwMCAvKiBFbmNyeXB0aW9uICovCi0jZGVmaW5lCQlST1VUQUJfUk9VVEVfUkZQCTB4ODAwMDAwIC8qIFJGUCAqLwotCi0jZGVmaW5lCQlST1VUQUJfVFlQRV9NQU5BRwkweDAgLyogTWFuYWdlbWVudCAqLwotI2RlZmluZQkJUk9VVEFCX1RZUEVfQ1RMCQkweDEgLyogQ29udHJvbCAqLwotI2RlZmluZQkJUk9VVEFCX1RZUEVfREFUQQkweDIgLyogRGF0YSAqLwotCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9EQVRBCQkweDAKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX0RBVEFBQ0sJCTB4MQotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfREFUQVBPTEwJCTB4MgotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfREFUQVBPTExBQ0sJMHgzCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMCQkweDQgLyogTlVMTCAqLwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfTlVMTEFDSwkJMHg1Ci0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMUE9MTAkJMHg2Ci0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMUE9MTEFDSwkweDcKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU0RBVEEJCTB4OCAvKiBRT1MgREFUQSAqLwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDSwkweDkKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU0RBVEFQT0xMCTB4YQotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDS1BPTEwJMHhiCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9RT1NOVUxMCQkweGMKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU05VTExBQ0sJMHhkCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9RT1NOVUxMUE9MTAkweGUKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMQUNLCTB4ZgotI2RlZmluZSBBR05YX1JYTV9ERUxBWTExCSAgIDB4MjAyNAkvKiBkZWxheSAxMShBQikgKi8KLSNkZWZpbmUgQUdOWF9SWE1fU09GX0NOVAkgICAweDIwMjgJLyogU09GIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0ZSQUdfQ05UCSAgIDB4MjAyYwkvKiBGcmFnbWVudCBDb3VudCovCi0jZGVmaW5lIEFHTlhfUlhNX0ZDU19DTlQJICAgMHgyMDMwCS8qIEZDUyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9CU1NJRF9NSVNTX0NOVAkgICAweDIwMzQJLyogQlNTSUQgTWlzcyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9QRFVfRVJSX0NOVAkgICAweDIwMzgJLyogUERVIEVycm9yIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0RFU1RfTUlTU19DTlQJICAgMHgyMDNDCS8qIERlc3RpbmF0aW9uIE1pc3MgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fRFJPUF9DTlQJICAgMHgyMDQwCS8qIERyb3AgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQUJPUlRfQ05UCSAgIDB4MjA0NAkvKiBBYm9ydCBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9SRUxBWV9DTlQJICAgMHgyMDQ4CS8qIFJlbGF5IENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfTUlTU19DTlQJICAgMHgyMDRjCS8qIEhhc2ggTWlzcyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9TQV9ISQkJICAgMHgyMDUwCS8qIEFkZHJlc3Mgb2YgcmVjZWl2ZWQgcGFja2V0IEhpICovCi0jZGVmaW5lIEFHTlhfUlhNX1NBX0xPCQkgICAweDIwNTQJLyogQWRkcmVzcyBvZiByZWNlaXZlZCBwYWNrZXQgTG8gKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9EVU1QX0xTVAkgICAweDIxMDAJLyogQ29udGFpbnMgSGFzaCBEYXRhICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfRFVNUF9NU1QJICAgMHgyMTA0CS8qIENvbnRhaW5zIEhhc2ggRGF0YSAqLwotI2RlZmluZSBBR05YX1JYTV9IQVNIX0RVTVBfREFUQSAgICAweDIxMDgJLyogVGhlIFN0YXRpb24gSUQgdG8gZHVtcCAqLwotCi0KLS8qIEVuY3J5cHRpb24gTWFuYWdtZW50ICovCi0jZGVmaW5lIEFHTlhfRU5DUllfQkFTRQkJMHgyNDAwCi0jZGVmaW5lIEFHTlhfRU5DUllfV0VQS0VZMAkweDI0NDAgLyogd2VwIGtleSAjMCAqLwotI2RlZmluZSBBR05YX0VOQ1JZX1dFUEtFWTEJMHgyNDQ0IC8qIHdlcCBrZXkgIzEgKi8KLSNkZWZpbmUgQUdOWF9FTkNSWV9XRVBLRVkyCTB4MjQ0OCAvKiB3ZXAga2V5ICMyICovCi0jZGVmaW5lIEFHTlhfRU5DUllfV0VQS0VZMwkweDI0NGMgLyogd2VwIGtleSAjMyAqLwotI2RlZmluZSBBR05YX0VOQ1JZX0NDTVJFQ1RMCTB4MjQ2MCAvKiBjY20gcmVwbGF5IGNvbnRyb2wgKi8KLQotCi0vKiBCYW5kIE1hbmFnZW1lbnQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEFHTlhfQk1fQkFTRQkJMHgyYzAwCi0jZGVmaW5lIEFHTlhfQk1fQk1DVEwJCTB4MmMwMCAgLyogYmFuZCBtYW5hZ2VtZW50IGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9UWFdBRERSCQkweDJjMTggIC8qIHR4IHdvcmtxdWV1ZSBhZGRyZXNzIHN0YXJ0ICovCi0jZGVmaW5lIEFHTlhfQk1fVFhUT1BFRVIJMHgyYzI0CS8qIHRyYW5zbWl0IHRvIHBlZXJzICovCi0jZGVmaW5lIEFHTlhfQk1fRlBMSFAJCTB4MmMyYyAgLyogZnJlZSBwb29sIGxpc3QgaGVhZCBwb2ludGVyICovCi0jZGVmaW5lIEFHTlhfQk1fRlBMVFAJCTB4MmMzMCAgLyogZnJlZSBwb29sIGxpc3QgdGFpbCBwb2ludGVyICovCi0jZGVmaW5lIEFHTlhfQk1fRlBDTlQJCTB4MmMzNCAgLyogZnJlZSBwb29sIGNvdW50ICovCi0jZGVmaW5lIEFHTlhfQk1fQ0lQRFVXQ05UCTB4MmMzOCAgLyogY2FyZCBpbnRlcmZhY2UgcGR1IHdvcmtxdWV1ZSBjb3VudCAqLwotI2RlZmluZSBBR05YX0JNX1NQUERVV0NOVAkweDJjM2MgIC8qIHNwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9SRlBQRFVXQ05UCTB4MmM0MCAgLyogcmZwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9SSFBQRFVXQ05UCTB4MmM0NCAgLyogcmhwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9DSVdRQ1RMCQkweDJjNDggLyogQ2FyZCBJbnRlcmZhY2UgV29ya1F1ZXVlIENvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVUWFdDVEwJMHgyYzUwICAvKiBjcHUgdHggd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVSWFdDVEwJMHgyYzU4ICAvKiBjcHUgcnggd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVMV0NUTAkweDJjNjAgLyogY3B1IGxvdyB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX0NQVUhXQ1RMCTB4MmM2OCAvKiBjcHUgaGlnaCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1NQVFhXQ1RMCTB4MmM3MCAvKiBzcCB0eCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1NQUlhXQ1RMCTB4MmM3OCAvKiBzcCByeCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1JGUFdDVEwJCTB4MmM4MCAvKiBSRlAgd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9NVFNNCQkweDJjOTAgLyogTXVsdGljYXN0IFRyYW5zbWl0IFN0YXRpb24gTWFzayAqLwotCi0vKiBDYXJkIEludGVyZmFjZSBSZWdpc3RlcnMgKDMyYml0cykgKi8KLSNkZWZpbmUgQUdOWF9DSVJfQkFTRQkJMHgzMDAwCi0jZGVmaW5lIEFHTlhfQ0lSX0JMS0NUTAkJMHgzMDAwCS8qIGJsb2NrIGNvbnRyb2wqLwotI2RlZmluZQkJQUdOWF9TVEFUX1RYCTB4MQotI2RlZmluZQkJQUdOWF9TVEFUX1JYCTB4MgotI2RlZmluZQkJQUdOWF9TVEFUX1gJMHg0Ci0vKiBCZWxvdyB0d28gaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgc2V0IGJ5IG91ciBidXQgbm90IENQVSBvciB0aGUgY2FyZCAqLwotI2RlZmluZQkJQUdOWF9TVEFUX1RYRAkweDEwCi0jZGVmaW5lCQlBR05YX1NUQVRfVFhNCTB4MjAKLQotI2RlZmluZSBBR05YX0NJUl9BRERSV0lOCTB4MzAwNAkvKiBBZGRyZXNzYWJsZSBXaW5kb3dzKi8KLSNkZWZpbmUgQUdOWF9DSVJfRU5ESUFOCQkweDMwMDggIC8qIGNhcmQgZW5kaWFubmVzcyAqLwotI2RlZmluZSBBR05YX0NJUl9TRVJJQUxJVEYJMHgzMDIwCS8qIHNlcmlhbCBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDRkcJCTB4MzA0MAkvKiByZWNlaXZlIGNvbmZpZyAqLwotI2RlZmluZQkJRU5BQkxFX1JYX0lOVEVSUlVQVCAweDIwCi0jZGVmaW5lCQlSWF9DQUNIRV9MSU5FCSAgICAweDgKLS8qIHRoZSBSWCBmcmFnbWVudCBsZW5ndGggKi8KLSNkZWZpbmUJCUZSQUdfTEVOXzI1NgkweDAgLyogMjU2QiAqLwotI2RlZmluZQkJRlJBR19MRU5fNTEyCTB4MQotI2RlZmluZQkJRlJBR19MRU5fMTAyNAkweDIKLSNkZWZpbmUJCUZSQUdfTEVOXzIwNDgJMHgzCi0jZGVmaW5lCQlGUkFHX0JFCQkweDEwCi0jZGVmaW5lIEFHTlhfQ0lSX1JYQ1RMCQkweDMwNTAJLyogcmVjZWl2ZSBjb250cm9sICovCi0vKiBtZW1vcnkgYWRkcmVzcywgY2hpcHNpZGUgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDTVNUQVJUCTB4MzA1NAkvKiByZWNlaXZlIGNsaWVudCBtZW1vcnkgc3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDTUVORAkweDMwNTgJLyogcmVjZWl2ZSBjbGllbnQgbWVtb3J5IGVuZCAqLwotLyogbWVtb3J5IGFkZHJlc3MsIHBjaSAqLwotI2RlZmluZSBBR05YX0NJUl9SWEhPU1RBRERSCTB4MzA2MAkvKiByZWNlaXZlIGhvc3RzaWRlIGFkZHJlc3MgKi8KLS8qIG1lbW9yeSBhZGRyZXNzLCBjaGlwc2lkZSAqLwotI2RlZmluZSBBR05YX0NJUl9SWENMSUFERFIJMHgzMDY0CS8qIHJlY2VpdmUgY2xpZW50c2lkZSBhZGRyZXNzICovCi0jZGVmaW5lIEFHTlhfQ0lSX1JYRE1BQ1RMCTB4MzA2OAkvKiByZWNlaXZlIGRtYSBjb250cm9sICovCi0jZGVmaW5lIEFHTlhfQ0lSX1RYQ0ZHCQkweDMwODAJLyogdHJhbnNtaXQgY29uZmlnICovCi0jZGVmaW5lIEFHTlhfQ0lSX1RYTUNUTAkJMHgzMDkwIC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgQ29udHJvbCAqLwotI2RlZmluZQkJRU5BQkxFX1RYX0lOVEVSUlVQVCAweDIwCi0jZGVmaW5lCQlUWF9DQUNIRV9MSU5FCSAgICAweDgKLSNkZWZpbmUgQUdOWF9DSVJfVFhNU1RBUlQJMHgzMDk0IC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgU3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhNRU5ECQkweDMwOTggLyogVHJhbnNtaXQgTWFuYWdlbWVudCBFbmQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhEQ1RMCQkweDMwYTAJLyogdHJhbnNtaXQgZGF0YSBjb250cm9sICovCi0vKiBtZW1lb3J5IGFkZHJlc3MsIGNoaXBzZXQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhEU1RBUlQJMHgzMGE0CS8qIHRyYW5zbWl0IGRhdGEgc3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhERU5ECQkweDMwYTgJLyogdHJhbnNtaXQgZGF0YSBlbmQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhNSEFERFIJMHgzMGIwIC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgSG9zdHNpZGUgQWRkcmVzcyAqLwotI2RlZmluZSBBR05YX0NJUl9UWE1DQUREUgkweDMwYjQgLyogVHJhbnNtaXQgTWFuYWdlbWVudCBDbGllbnRzaWRlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhETUFDVEwJMHgzMGI4CS8qIHRyYW5zbWl0IGRtYSBjb250cm9sICovCi0KLQotLyogUG93ZXIgTWFuYWdtZW50IFVuaXQgKi8KLSNkZWZpbmUgQUdOWF9QTV9CQVNFCQkweDNjMDAKLSNkZWZpbmUgQUdOWF9QTV9QTUNUTAkJMHgzYzAwCS8qIFBNIENvbnRyb2wqLwotI2RlZmluZSBBR05YX1BNX01BQ01TVwkJMHgzYzA4IC8qIE1BQyBNYW51YWwgU2xvdyBXb3JrIEVuYWJsZSAqLwotI2RlZmluZSBBR05YX1BNX1JGQ1RMCQkweDNjMGMgLyogUkYgQ29udHJvbCAqLwotI2RlZmluZSBBR05YX1BNX1BIWU1XCQkweDNjMTQJLyogUGh5IE1hbm5hbCBXb3JrICovCi0jZGVmaW5lIEFHTlhfUE1fU09GVFJTVAkJMHgzYzE4CS8qIFBNVSBTb2Z0IFJlc2V0ICovCi0jZGVmaW5lIEFHTlhfUE1fUExMQ1RMCQkweDNjMWMJLyogUE1VIFBMTCBjb250cm9sKi8KLSNkZWZpbmUgQUdOWF9QTV9URVNUUEhZCQkweDNjMjQgLyogUE1VIFRlc3QgUGh5ICovCi0KLQotLyogSW50ZXJydXB0IENvbnRyb2wgaW50ZXJmYWNlICovCi0jZGVmaW5lIEFHTlhfSU5UX0JBU0UJCTB4NDAwMAotI2RlZmluZSBBR05YX0lOVF9TVEFUCQkweDQwMDAJLyogaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSBBR05YX0lOVF9NQVNLCQkweDQwMGMJLyogaW50ZXJydXB0IG1hc2sgKi8KLS8qIEZJWE1FICovCi0jZGVmaW5lCQlJUlFfVFhfQkVBQ09OCTB4MQkvKiBUWCBCZWFjb24gKi8KLSNkZWZpbmUJCUlSUV9UWF9SRVRSWQkweDgJLyogVFggUmV0cnkgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfVFhfQUNUSVZJVFkJMHgxMAkvKiBUWCBBY3Rpdml0eSAqLwotI2RlZmluZQkJSVJRX1JYX0FDVElWSVRZCTB4MjAJLyogUlggQWN0aXZpdHkgKi8KLS8qIEZJWE1FIEkgZ3Vlc3MgdGhhdCBpbnN0ZWFkIFJYIGEgbm9uZSBleGlzdCBzdGFpb24ncyBwYWNrZXQgb3IKLSAgIHRoZSBzdGF0aW9uIGhhc24ndCBiZWVuIGluaXQgKi8KLSNkZWZpbmUJCUlSUV9SWF9YCTB4NDAKLSNkZWZpbmUJCUlSUV9SWF9ZCTB4ODAJLyogUlggPyAqLwotI2RlZmluZQkJSVJRX1JYX0hBU0hISVQJMHgxMDAJLyogUlggSGFzaCBIaXQgKi8KLSNkZWZpbmUJCUlSUV9SWF9GUkFNRQkweDIwMAkvKiBSWCBGcmFtZSAqLwotI2RlZmluZQkJSVJRX0VSUl9JTlQJMHg0MDAJLyogRXJyb3IgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfVFhfUVVFX0ZVTEwJMHg4MDAJLyogVFggV29ya3F1ZXVlIEZ1bGwgKi8KLSNkZWZpbmUJCUlSUV9CQU5ETUFOX0VSUgkweDEwMDAwCS8qIEJhbmR3aWR0aCBNYW5hZ2VtZW50IEVycm9yICovCi0jZGVmaW5lCQlJUlFfVFhfRElTQUJMRQkweDIwMDAwCS8qIFRYIERpc2FibGUgKi8KLSNkZWZpbmUJCUlSUV9SWF9JVkFTRVNLRVkgMHg4MDAwMCAvKiBSWCBJbnZhbGlkIFNlc3Npb24gS2V5ICovCi0jZGVmaW5lCQlJUlFfUlhfS0VZSURNSVMJMHgxMDAwMDAgLyogUlgga2V5IElEIE1pc21hdGNoICovCi0jZGVmaW5lCQlJUlFfUkVQX1RISElUCTB4MjAwMDAwIC8qIFJlcGxheSBUaHJlc2hvbGQgSGl0ICovCi0jZGVmaW5lCQlJUlFfVElNRVIxCTB4NDAwMDAwMCAvKiBUaW1lcjEgKi8KLSNkZWZpbmUJCUlSUV9USU1FUl9DTlQJMHgxMDAwMDAwMCAvKiBUaW1lciBDb3VudCAqLwotI2RlZmluZQkJSVJRX1BIWV9GQVNUSU5UIDB4MjAwMDAwMDAgLyogUGh5IEZhc3QgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfUEhZX1NMT1dJTlQJMHg0MDAwMDAwMCAvKiBQaHkgU2xvdyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUlSUV9PVEhFUgkweDgwMDAwMDAwIC8qIFVua25vdyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUFHTlhfSVJRX0FMTCAgIAkweGZmZmZmZmZmCi0KLS8qIFN5c3RlbSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9TWVNJVEZfQkFTRQkweDQ0MDAKLSNkZWZpbmUgQUdOWF9TWVNJVEZfU1lTTU9ERQkweDQ0MDAJLyogc3lzdGVtIG1vZGUgKi8KLSNkZWZpbmUgQUdOWF9TWVNJVEZfR1BJT0lOCTB4NDQxMCAvKiBHUElPIEluICovCi0vKiBQSU4gbGluZXMgZm9yIGxlZHM/ICovCi0jZGVmaW5lIEFHTlhfU1lTSVRGX0dQSU9VVAkweDQ0MTQJLyogR1BJTyBPdXQgKi8KLQotLyogVGltZXIgQ29udHJvbCAqLwotI2RlZmluZSBBR05YX1RJTUNUTF9USU1FUjEJMHg0ODAwIC8qIFRpbWVyIDEgKi8KLSNkZWZpbmUgQUdOWF9USU1DVExfVElNMUNUTAkweDQ4MDggLyogVGltZXIgMSBDb250cm9sICovCi0KLQotLyogQW50ZW5uYSBDYWxpYnJhdGlvbiBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfQkFTRQkJMHg1MDAwCi0jZGVmaW5lIEFHTlhfQUNJX01PREUJCTB4NTAwMCAvKiBNb2RlICovCi0jZGVmaW5lIEFHTlhfQUNJX01FQVNVUkUJMHg1MDA0IC8qIE1lYXN1cmUgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfU0VMQ0hBSU4JMHg1MDA4IC8qIFNlbGVjdCBDaGFpbiAqLwotI2RlZmluZSBBR05YX0FDSV9MRU4JCTB4NTAwYyAvKiBMZW5ndGggKi8KLSNkZWZpbmUgQUdOWF9BQ0lfVElNRVIxCQkweDUwMTggLyogVGltZXIgMSAqLwotI2RlZmluZSBBR05YX0FDSV9USU1FUjIJCTB4NTAxYyAvKiBUaW1lciAyICovCi0jZGVmaW5lIEFHTlhfQUNJX09GRlNFVAkJMHg1MDIwIC8qIE9mZnNldCAqLwotI2RlZmluZSBBR05YX0FDSV9TVEFUVVMJCTB4NTAzMCAvKiBTdGF0dXMgKi8KLSNkZWZpbmUJCUNBTElfSURMRQkweDAKLSNkZWZpbmUJCUNBTElfRE9ORQkweDEKLSNkZWZpbmUJCUNBTElfQlVTWQkweDIKLSNkZWZpbmUJCUNBTElfRVJSCTB4MwotI2RlZmluZSBBR05YX0FDSV9BSUNDSEEwT1ZFCTB4NTAzNCAvKiBBSUMgQ2hhbm5lbCAwIE92ZXJyaWRlICovCi0jZGVmaW5lIEFHTlhfQUNJX0FJQ0NIQTFPVkUJMHg1MDM4IC8qIEFJQyBDaGFubmVsIDEgT3ZlcnJpZGUgKi8KLQotLyogR2FpbiBDb250cm9sIFJlZ2lzdGVycyAqLwotI2RlZmluZSBBR05YX0dDUl9CQVNFCQkweDkwMDAKLS8qIHRocmVzaG9sZCBvZiBwcmltYXJ5IGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhEMEEJCTB4OTAwMAkvKiB0aHJlc2hvbGQ/IEQwIEEgKi8KLS8qIGxvdyB0aHJlc2hvbGQgb2YgcHJpbWFyeSBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIRDBBTAkJMHg5MDA0CS8qIHRocmVzaG9sZD8gRDAgQSBsb3cgKi8KLS8qIHRocmVzaG9sZCBvZiBzZWNvbmRhcnkgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9USEQwQgkJMHg5MDA4CS8qIHRocmVzaG9sZD8gRDBfQiAqLwotI2RlZmluZSBBR05YX0dDUl9EVU5TQVQJCTB4OTAwYyAvKiBkIHVuc2F0dXJhdGVkICovCi0jZGVmaW5lIEFHTlhfR0NSX0RTQVQJCTB4OTAxMCAvKiBkIHNhdHVyYXRlZCAqLwotI2RlZmluZSBBR05YX0dDUl9ERklSQ0FMCTB4OTAxNCAvKiBEIEZpci9DYWwgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfREdDVEwxMUEJMHg5MDE4IC8qIGQgZ2FpbiBjb250cm9sIDExYSAqLwotI2RlZmluZSBBR05YX0dDUl9ER0NUTDExQgkweDkwMWMgLyogZCBnYWluIGNvbnRyb2wgMTFiICovCi0vKiBzdHJlbmd0aCBvZiBnYWluICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5JTklUCTB4OTAyMAkvKiBnYWluIGluaXRpYWxpemF0aW9uICovCi0jZGVmaW5lIEFHTlhfR0NSX1RITk9TSUcJMHg5MDI0IC8qIHRocmVob2xkIG5vIHNpZ25hbCAqLwotI2RlZmluZSBBR05YX0dDUl9DT0FSU1RFUAkweDkwMjggLyogY29hcnNlIHN0ZXBwaW5nICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJRlNUMTFBCTB4OTAyYyAvKiBzaWZ4IHRpbWUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJRlNUMTFCCTB4OTAzMCAvKiBzaWZ4IHRpbWUgMTFiICovCi0jZGVmaW5lIEFHTlhfR0NSX0NXREVURUMJMHg5MDM0IC8qIGN3IGRldGVjdGlvbiAqLwotI2RlZmluZSBBR05YX0dDUl8wWDM4CQkweDkwMzggLyogPz8/PyAqLwotI2RlZmluZSBBR05YX0dDUl9CT0FDVAkJMHg5MDNjCS8qIEJPIEFjdGl2ZSAqLwotI2RlZmluZSBBR05YX0dDUl9CT0lOQUNUCTB4OTA0MAkvKiBCTyBJbmFjdGl2ZSAqLwotI2RlZmluZSBBR05YX0dDUl9CT0RZTkEJCTB4OTA0NAkvKiBCTyBkeW5hbWljICovCi0vKiA4MDIuMTEgbW9kZShhLGIsZykgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfRElTQ09WTU9ECTB4OTA0OAkvKiBkaXNjb3ZlcnkgbW9kZSAqLwotI2RlZmluZSBBR05YX0dDUl9OTElTVEFOVAkweDkwNGMJLyogbnVtYmVyIG9mIGxpc3RlbmluZyBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX05BQ1RJQU5UCTB4OTA1MAkvKiBudW1iZXIgb2YgYWN0aXZlIGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTk1FQVNBTlQJMHg5MDU0CS8qIG51bWJlciBvZiBtZWFzdXJpbmcgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9OQ0FQVEFOVAkweDkwNTgJLyogbnVtYmVyIG9mIGNhcHR1cmUgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9USENBUDExQQkweDkwNWMgLyogdGhyZXNob2xkIGNhcHR1cmUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIQ0FQMTFCCTB4OTA2MCAvKiB0aHJlc2hvbGQgY2FwdHVyZSAxMWIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDQVBSWDExQQkweDkwNjQgLyogdGhyZXNob2xkIGNhcHR1cmUgcnggMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIQ0FQUlgxMUIJMHg5MDY4IC8qIHRocmVzaG9sZCBjYXB0dXJlIHJ4IDExYiAqLwotI2RlZmluZSBBR05YX0dDUl9USExFVkRSTwkweDkwNmMgLyogdGhyZXNob2xkIGxldmVsIGRyb3AgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfR0FJTlNFVDAJMHg5MDcwIC8qIEdhaW5zZXQgMCAqLwotI2RlZmluZSBBR05YX0dDUl9HQUlOU0VUMQkweDkwNzQgLyogR2FpbnNldCAxICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5TRVQyCTB4OTA3OCAvKiBHYWluc2V0IDIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTUFYUlhUSU1FMTFBCTB4OTA3YyAvKiBtYXhpbXVtIHJ4IHRpbWUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX01BWFJYVElNRTExQgkweDkwODAgLyogbWF4aW11bSByeCB0aW1lIDExYiAqLwotI2RlZmluZSBBR05YX0dDUl9DT1JSVElNRQkweDkwODQgLyogY29ycmVjdGlvbiB0aW1lICovCi0vKiByZXNldCB0aGUgc3Vic3lzdGVtLCAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAqLwotI2RlZmluZSBBR05YX0dDUl9SU1RHQ1RMCTB4OTA4OAkvKiByZXNldCBnYWluIGNvbnRyb2wgKi8KLS8qIGNoYW5uZWwgcmVjZWl2aW5nICovCi0jZGVmaW5lIEFHTlhfR0NSX1JYQ0hBTkVMCTB4OTA4YwkvKiByZWNlaXZlIGNoYW5uZWwgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTk9JU0UwCQkweDkwOTAgLyogTm9pc2UgMCAqLwotI2RlZmluZSBBR05YX0dDUl9OT0lTRTEJCTB4OTA5NCAvKiBOb2lzZSAxICovCi0jZGVmaW5lIEFHTlhfR0NSX05PSVNFMgkJMHg5MDk4IC8qIE5vaXNlIDIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfU0lHSFRICQkweDkwOWMJLyogU2lnbmFsIEhpZ2ggVGhyZXNob2xkICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJR0xUSAkJMHg5MGEwCS8qIFNpZ25hbCBMb3cgVGhyZXNob2xkICovCi0jZGVmaW5lIEFHTlhfR0NSX0NPUlJEUk9QCTB4OTBhNCAvKiBjb3JyZWN0aW9uIGRyb3AgKi8KLS8qIHRocmVzaG9sZCBvZiB0ZXJ0aWF5IGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDRAkJMHg5MGE4CS8qIHRocmVzaG9sZD8gQ0QgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDUwkJMHg5MGFjCS8qIHRocmVzaG9sZD8gQ1MgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTUFYUE9XRElGRgkweDkwYjggLyogbWF4aW11bSBwb3dlciBkaWZmZXJlbmNlICovCi0jZGVmaW5lIEFHTlhfR0NSX1RSQUNOVDQJMHg5MGVjIC8qIFRyYW5zaXRpb24gQ291bnQgNCAqLwotI2RlZmluZSBBR05YX0dDUl9UUkFDTlQ1ICAgICAgCTB4OTBmMAkvKiB0cmFuc2l0aW9uIGNvdW50IDUgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVFJBQ05UNiAgICAgICAJMHg5MGY0CS8qIHRyYW5zaXRpb24gY291bnQgNiAqLwotI2RlZmluZSBBR05YX0dDUl9UUkFDTlQ3ICAgICAgIAkweDkwZjgJLyogdHJhbnNpdGlvbiBjb3V0biA3ICovCi0jZGVmaW5lIEFHTlhfR0NSX1RFU1RCVVMJMHg5MTFjIC8qIHRlc3QgYnVzICovCi0jZGVmaW5lIEFHTlhfR0NSX0NIQUlOTlVNCTB4OTEyMCAvKiBOdW1iZXIgb2YgQ2hhaW5zICovCi0jZGVmaW5lIEFHTlhfR0NSX0FOVENGRwkJMHg5MTI0CS8qIEFudGVubmEgQ29uZmlnICovCi0jZGVmaW5lIEFHTlhfR0NSX1RISlVNUAkJMHg5MTJjIC8qIHRocmVob2xkIGp1bXAgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhQT1dFUgkweDkxMzAgLyogdGhyZXNob2xkIHBvd2VyICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIUE9XQ0xJUAkweDkxMzQgLyogdGhyZXNob2xkIHBvd2VyIGNsaXAqLwotI2RlZmluZSBBR05YX0dDUl9GT1JDRUNUTENMSwkweDkxMzggLyogRm9yY2UgR2FpbiBDb250cm9sIENsb2NrICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5TRVRXUklURQkweDkxM2MgLyogR2FpbnNldCBXcml0ZSAqLwotI2RlZmluZSBBR05YX0dDUl9USEQwQlRGRVNUCTB4OTE0MAkvKiB0aHJlc2hvbGQgZDAgYiB0ZiBlc3RpbWF0ZSAqLwotI2RlZmluZSBBR05YX0dDUl9USFJYMTFCUE9XTUlOCTB4OTE0NAkvKiB0aHJlc2hvbGQgcnggMTFiIHBvd2VyIG1pbmltdW0gKi8KLSNkZWZpbmUgQUdOWF9HQ1JfMFgxNGMJCTB4OTE0YyAvKiA/PyAqLwotI2RlZmluZSBBR05YX0dDUl8wWDE1MAkJMHg5MTUwIC8qID8/ICovCi0jZGVmaW5lIEFHTlhfR0NSX1JYT1ZFUklERQkweDkxOTQJLyogcmVjaWV2ZSBvdmVycmlkZSAqLwotI2RlZmluZSBBR05YX0dDUl9XQVRDSERPRwkweDkxYjAJLyogd2F0Y2hkb2cgdGltZW91dCAqLwotCi0KLS8qIFNwaSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9TUElfQkFTRQkJMHhkYzAwCi0jZGVmaW5lIEFHTlhfU1BJX0NGRwkJMHhkYzAwIC8qIHNwaSBjb25maWd1cmF0aW9uICovCi0vKiBPbmx5IGFjY2VwdCAxNiBiaXRzICovCi0jZGVmaW5lIEFHTlhfU1BJX1dNU1cJCTB4ZGMwNAkvKiB3cml0ZSBtb3N0IHNpZ25pZmljYW50IHdvcmQgKi8KLS8qIE9ubHkgYWNjZXB0IDE2IGJpdHMgKi8KLSNkZWZpbmUgQUdOWF9TUElfV0xTVwkJMHhkYzA4CS8qIHdyaXRlIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgKi8KLSNkZWZpbmUgQUdOWF9TUElfQ1RMCQkweGRjMGMJLyogc3BpIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9TUElfUk1TVwkJMHhkYzEwIC8qIHJlYWQgbW9zdCBzaWduaWZpY2FudCB3b3JkICovCi0jZGVmaW5lIEFHTlhfU1BJX1JMU1cJCTB4ZGMxNCAvKiByZWFkIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgKi8KLS8qIFNQSSBDb250cm9sIE1hc2sgKi8KLSNkZWZpbmUJCVNQSV9SRUFEX0NUTAkJMHg0MDAwIC8qIHJlYWQgY29udHJvbCAqLwotI2RlZmluZQkJU1BJX0JVU1lfQ1RMCQkweDgwMDAgLyogYnVzeSBjb250cm9sICovCi0vKiBSRiBhbmQgc3ludGggY2hpcHMgaW4gc3BpICovCi0jZGVmaW5lCQlSRl9DSElQMAkweDQwMAotI2RlZmluZQkJUkZfQ0hJUDEJMHg4MDAKLSNkZWZpbmUJCVJGX0NISVAyCTB4MTAwMAotI2RlZmluZQkJU1lOVEhfQ0hJUAkweDIwMDAKLQotLyogVW5rbm93biByZWdpc3RlciAqLwotI2RlZmluZSBBR05YX1VOS05PV05fQkFTRQkweDc4MDAKLQotLyogRklYTUUgTW9uaXRvckdhaW4gKi8KLSNkZWZpbmUgQUdOWF9NT05HQ1JfQkFTRQkweDEyMDAwCi0KLS8qIEdhaW4gVGFibGUgKi8KLSNkZWZpbmUgQUdOWF9HQUlOX1RBQkxFCQkweDEyNDAwCi0KLS8qIFRoZSBpbml0aWFsIEZJUiBjb2VmZmljaWVudCB0YWJsZSAqLwotI2RlZmluZSBBR05YX0ZJUl9CQVNFCQkweDE5ODA0Ci0KLSNkZWZpbmUgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTAkweDgwMAotCi0vKiBlZXByb20gY29tbWFuZHMgKi8KLSNkZWZpbmUgRUVQUk9NX0NNRF9OVUxMCQkweDAgLyogTlVMTCAqLwotI2RlZmluZSBFRVBST01fQ01EX1dSSVRFCTB4MiAvKiB3cml0ZSAqLwotI2RlZmluZSBFRVBST01fQ01EX1JFQUQJCTB4MyAvKiByZWFkICovCi0jZGVmaW5lIEVFUFJPTV9DTURfU1RBVFVTUkVBRAkweDUgLyogc3RhdHVzIHJlZ2lzdGVyIHJlYWQgKi8KLSNkZWZpbmUgRUVQUk9NX0NNRF9XUklURUVOQUJMRQkweDYgLyogd3JpdGUgZW5hYmxlICovCi0jZGVmaW5lIEVFUFJPTV9DTURfQ09ORklHVVJFCTB4NyAvKiBjb25maWd1cmUgKi8KLQotI2RlZmluZSBFRVBST01fREFUQUZPUkNPRklHVVJFCTB4NiAvKiA/Pz8gKi8KLQotLyogZWVwcm9tIGFkZHJlc3MgKi8KLSNkZWZpbmUgRUVQUk9NX0FERFJfU1VCVklECTB4MCAvKiBTdWIgVmVuZG9yIElEICovCi0jZGVmaW5lIEVFUFJPTV9BRERSX1NVQlNJRAkweDIgLyogU3ViIFN5c3RlbSBJRCAqLwotI2RlZmluZSBFRVBST01fQUREUl9NQUNBRERSCTB4MTQ2IC8qIE1BQyBBZGRyZXNzICovCi0jZGVmaW5lIEVFUFJPTV9BRERSX0xPVFlQRQkweDE0ZiAvKiBMTyB0eXBlICovCi0KLXN0cnVjdCBhZ254X2VlcHJvbSB7Ci0JdTggZGF0YTsJLyogZGF0ZSAqLwotCXUxNiBhZGRyZXNzOwkvKiBhZGRyZXNzIGluIEVFUFJPTSAqLwotCXU4IGNtZDsJCS8qIGNvbW1hbmQsIHVua25vd24sIHN0YXR1cyAqLwotfSAgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0jZGVmaW5lIEFHTlhfRUVQUk9NX0NPTU1BTkRfU0hJRlQJNQotI2RlZmluZSBBR05YX0VFUFJPTV9DT01NQU5EX1NUQVQJMHgwMQotCi12b2lkIGRpc2FibGVfcmVjZWl2ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGVuYWJsZV9yZWNlaXZlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXU4IHJlYWRfZnJvbV9lZXByb20oc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTE2IGFkZHJlc3MpOwotdm9pZCBhZ254X2h3X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1pbnQgYWdueF9od19yZXNldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWludCBhZ254X3NldF9zc2lkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOwotdm9pZCBhZ254X3NldF9ic3NpZChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwotdm9pZCBlbmFibGVfcG93ZXJfc2F2aW5nKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBkaXNhYmxlX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgY2FsaWJyYXRlX2FudGVubmFfcGVyaW9kKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLSNlbmRpZiAvKiBBR05YX1BIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3JmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTQ1N2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYworKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKioKLSAqIEFpcmdvIE1JTU8gd2lyZWxlc3MgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IExpIFlhbkJvIDxkcmVhbWZseTI4MUBnbWFpbC5jb20+Ci0KLSAqIFRoYW5rcyBmb3IgSmVmZiBXaWxsaWFtcyA8YW5nZWxiYW5lQGdtYWlsLmNvbT4gZG8gcmV2ZXJzZSBlbmdpbmVlcgotICogd29ya3MgYW5kIHB1Ymxpc2hlZCB0aGUgU1BFQ1MgYXQgaHR0cDovL2FpcmdvLndkd2NvbnN1bHRpbmcubmV0L215bW9pbgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInBoeS5oIgotI2luY2x1ZGUgInRhYmxlLmgiCi0KLS8qIEZJWE1FISAqLwotc3RhdGljIGlubGluZSB2b2lkIHNwaV93cml0ZSh2b2lkIF9faW9tZW0gKnJlZ2lvbiwgdTMyIGNoaXBfaWRzLCB1MzIgc3csCi0JCSAgICAgIHUxNiBzaXplLCB1MzIgY29udHJvbCkKLXsKLQl1MzIgcmVnOwotCXUzMiBsc3cgPSBzdyAmIDB4ZmZmZjsJCS8qIGxvd2VyIDE2IGJpdHMgb2Ygc3cqLwotCXUzMiBtc3cgPSBzdyA+PiAxNjsJCS8qIGhpZ2ggMTYgYml0cyBvZiBzdyAqLwotCi0JLyogRklYTUUgV3JpdGUgTW9zdCBTaWduaWZpY2FudCBXb3JkIG9mIHRoZSAzMmJpdCBkYXRhIHRvIE1TVyAqLwotCS8qIEZJWE1FIEFuZCBMZWFzdCBTaWduaWZpY2FudCBXb3JkIHRvIExTVyAqLwotCWlvd3JpdGUzMigobHN3KSwgcmVnaW9uICsgQUdOWF9TUElfV0xTVyk7Ci0JaW93cml0ZTMyKChtc3cpLCByZWdpb24gKyBBR05YX1NQSV9XTVNXKTsKLQlyZWcgPSBjaGlwX2lkcyB8IHNpemUgfCBjb250cm9sOwotCS8qIFdyaXRlIGNoaXAgaWQocyksIHdyaXRlIHNpemUgYW5kIGJ1c3kgY29udHJvbCB0byBDb250cm9sIFJlZ2lzdGVyICovCi0JaW93cml0ZTMyKChyZWcpLCByZWdpb24gKyBBR05YX1NQSV9DVEwpOwotCS8qIFdhaXQgZm9yIEJ1c3kgY29udHJvbCB0byBjbGVhciAqLwotCXNwaV9kZWxheSgpOwotfQotCi0vKgotICogV3JpdGUgdG8gU1BJIFN5bnRoIHJlZ2lzdGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGlfc3lfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4MTUgaXMgYSBtYWdpYyB2YWx1ZSovCi0Jc3BpX3dyaXRlKHJlZ2lvbiwgY2hpcF9pZHMsIHN3LCAweDE1LCBTUElfQlVTWV9DVEwpOwotfQotCi0vKgotICogV3JpdGUgdG8gU1BJIFJGIHJlZ2lzdGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGlfcmZfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4ZCBpcyBhIG1hZ2ljIHZhbHVlKi8KLQlzcGlfd3JpdGUocmVnaW9uLCBjaGlwX2lkcywgc3csIDB4ZCwgU1BJX0JVU1lfQ1RMKTsKLX0gLyogc3BpX3JmX3dyaXRlICovCi0KLS8qCi0gKiBXcml0ZSB0byBTUEkgd2l0aCBSZWFkIENvbnRyb2wgYml0IHNldAotICovCi1pbmxpbmUgdm9pZCBzcGlfcmNfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4ZTUgaXMgYSBtYWdpYyB2YWx1ZSAqLwotCXNwaV93cml0ZShyZWdpb24sIGNoaXBfaWRzLCBzdywgMHhlNSwgU1BJX0JVU1lfQ1RMfFNQSV9SRUFEX0NUTCk7Ci19Ci0KLS8qIEdldCB0aGUgYWN0aXZlIGNoYWlucydzIGNvdW50ICovCi1zdGF0aWMgaW50IGdldF9hY3RpdmVfY2hhaW5zKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IG51bSA9IDA7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjEpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKHJlZyA9PSAxKQotCQludW0rKzsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAxLCAweDIxKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmIChyZWcgPT0gMSkKLQkJbnVtKys7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgyMSk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQlpZiAocmVnID09IDEpCi0JCW51bSsrOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjYpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKDB4MzMgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0KLQlyZXR1cm4gbnVtOwotfSAvKiBnZXRfYWN0aXZlX2NoYWlucyAqLwotCi12b2lkIHJmX2NoaXBzX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCWludCBudW07Ci0JQUdOWF9UUkFDRTsKLQotCWlmIChwcml2LT5yZXZpZCA9PSAxKSB7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VUKTsKLQkJcmVnIHw9IDB4ODsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCByZWcpOwotCX0KLQotCS8qIFNldCBTUEkgY2xvY2sgc3BlZWQgdG8gMjAwTlMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MzsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQkvKiBTZXQgU1BJIGNsb2NrIHNwZWVkIHRvIDUwTlMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMTAxKTsKLQotCW51bSA9IGdldF9hY3RpdmVfY2hhaW5zKHByaXYpOwotCXByaW50ayhLRVJOX0lORk8gUEZYICJBY3RpdmUgY2hhaW5zIGFyZSAlZFxuIiwgbnVtKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKLQlyZWcgJj0gfjB4RjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxOTA4KTsKLX0gLyogcmZfY2hpcHNfaW5pdCAqLwotCi0KLXN0YXRpYyB1MzIgY2hhbm5lbF90YmxbMTVdWzldID0gewotCXswLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCi0JezEsICAweDAwLCAweDAwLCAweDYyNCwgMHgwMCwgMHgxYTQsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsyLCAgMHgwMCwgMHgwMCwgMHg2MTUsIDB4MDAsIDB4MWFlLCAweDI4LCAweDAwLCAweDFlfSwKLQl7MywgIDB4MDAsIDB4MDAsIDB4NjFhLCAweDAwLCAweDFhZSwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezQsICAweDAwLCAweDAwLCAweDYxZiwgMHgwMCwgMHgxYWUsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXs1LCAgMHgwMCwgMHgwMCwgMHg2MjQsIDB4MDAsIDB4MWFlLCAweDI4LCAweDAwLCAweDFlfSwKLQl7NiwgIDB4MDAsIDB4MDAsIDB4NjFmLCAweDAwLCAweDFiMywgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezcsICAweDAwLCAweDAwLCAweDYyNCwgMHgwMCwgMHgxYjMsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXs4LCAgMHgwMCwgMHgwMCwgMHg2MjksIDB4MDAsIDB4MWIzLCAweDI4LCAweDAwLCAweDFlfSwKLQl7OSwgIDB4MDAsIDB4MDAsIDB4NjI0LCAweDAwLCAweDFiOCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezEwLCAweDAwLCAweDAwLCAweDYyOSwgMHgwMCwgMHgxYjgsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsxMSwgMHgwMCwgMHgwMCwgMHg2MmUsIDB4MDAsIDB4MWI4LCAweDI4LCAweDAwLCAweDFlfSwKLQl7MTIsIDB4MDAsIDB4MDAsIDB4NjMzLCAweDAwLCAweDFiOCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezEzLCAweDAwLCAweDAwLCAweDYyOCwgMHgwMCwgMHgxYjgsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsxNCwgMHgwMCwgMHgwMCwgMHg2NDQsIDB4MDAsIDB4MWI4LCAweDI4LCAweDAwLCAweDFlfSwKLX07Ci0KLQotc3RhdGljIGlubGluZSB2b2lkCi1jaGFubmVsX3RibF93cml0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHJlZ19udW0pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGNoYW5uZWxfdGJsW2NoYW5uZWxdW3JlZ19udW1dOwotCXJlZyA8PD0gNDsKLQlyZWcgfD0gcmVnX251bTsKLQlzcGlfc3lfd3JpdGUoY3RsLCBTWU5USF9DSElQLCByZWcpOwotfQotCi1zdGF0aWMgdm9pZCBzeW50aF9mcmVxX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQotCS8qIFNldCB0aGUgQ2xvY2sgYml0cyB0byA1ME5TICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9DRkcpOwotCXJlZyAmPSB+MHhGOwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TUElfQ0ZHLCByZWcpOwotCi0JLyogV3JpdGUgMHgwMGMwIHRvIExTVyBhbmQgMHgzIHRvIE1TVyBvZiBTeW50aCBDaGlwICovCi0Jc3BpX3N5X3dyaXRlKGN0bCwgU1lOVEhfQ0hJUCwgMHgzMDBjMCk7Ci0KLQlzcGlfc3lfd3JpdGUoY3RsLCBTWU5USF9DSElQLCAweDMyKTsKLQotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgMSBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDEpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgMyBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDMpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgNiBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDYpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgNSBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDUpOwotCS8qICMgV3JpdGUgdG8gcmVnaXN0ZXIgOCBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDgpOwotCi0JLyogRklYTUUgQ2xlYXIgdGhlIGNsb2NrIGJpdHMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TUElfQ0ZHLCByZWcpOwotfSAvKiBzeW50aF9jaGlwX2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBhbnRlbm5hX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgaW50IG51bV9hbnRlbm5hKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0Jc3dpdGNoIChudW1fYW50ZW5uYSkgewotCWNhc2UgMToKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDEpOwotCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0FOVENGRywgNyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAzNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPSU5BQ1QsIDM0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9EWU5BLCAzMCk7Ci0KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEEsIDEyNSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDkwKTsKLQotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCA4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0hUSCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAxNik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9BTlRDRkcsIDE1KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9BQ1QsIDM2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9JTkFDVCwgMzYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0RZTkEsIDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEEsIDEyMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgNzApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDEwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMzIpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05MSVNUQU5ULCAzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTk1FQVNBTlQsIDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQUNUSUFOVCwgMyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05DQVBUQU5ULCAzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQU5UQ0ZHLCAzMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAzNik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPSU5BQ1QsIDM2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9EWU5BLCAzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBLCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQUwsIDEwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCLCA3MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCVEZFU1QsIDcwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHSFRILCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDQ4KTsKLS8qCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDE2KTsgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vdyBhbnRlbm5hIG51bWJlclxuIik7Ci0JfQotfSAvKiBhbnRlbm5hX2luaXQgKi8KLQotc3RhdGljIHZvaWQgY2hhaW5fdXBkYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiBjaGFpbikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQotCWlmIChyZWcgPT0gMHg0KQotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgcmVnfDB4MTAwMCk7Ci0JZWxzZSBpZiAocmVnICE9IDB4MCkKLQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIHJlZ3wweDEwMDApOwotCWVsc2UgewotCQlpZiAoY2hhaW4gPT0gMyB8fCBjaGFpbiA9PSA2KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgcmVnfDB4MTAwMCk7Ci0JCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JCX0gZWxzZSBpZiAoY2hhaW4gPT0gMiB8fCBjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgcmVnfDB4MTAwMCk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgxMDA1KTsKLQkJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHg4MjQpOwotCQl9IGVsc2UgaWYgKGNoYWluID09IDEpIHsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwLCByZWd8MHgxMDAwKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDQpOwotCQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweGMzNik7Ci0JCX0KLQl9Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMik7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSAwOgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDA1KTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlpZiAoY2hhaW4gPT0gNiB8fCBjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAyKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEwMDUpOwotCQl9IGVsc2UgaWYgKGNoYWluIDwgMykgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMik7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMDA1KTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAoY2hhaW4gPT0gMykgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgxMjAxKTsKLQkJfSBlbHNlIGlmIChjaGFpbiA9PSAyKSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEyMDApOwotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDEsIDB4MTIwMSk7Ci0JCX0gZWxzZSBpZiAoY2hhaW4gPT0gMSkgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMjAwKTsKLQkJfSBlbHNlIGlmIChjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEyMDEpOwotCQl9IGVsc2UgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMjAxKTsKLQkJfQotCX0KLX0gLyogY2hhaW5fdXBkYXRlICovCi0KLXN0YXRpYyB2b2lkIGFudGVubmFfY29uZmlnKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JLyogV3JpdGUgMHgwIHRvIHRoZSBUWCBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgRW5hYmxlIGJpdCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQlyZWcgJj0gfjB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIHJlZyk7Ci0KLQkvKiBGSVhNRSAqLwotCS8qIFNldCBpbml0aWFsIHZhbHVlIGJhc2VkIG9uIG51bWJlciBvZiBBbnRlbm5hZSAqLwotCWFudGVubmFfaW5pdChwcml2LCAzKTsKLQotCS8qIEZJWE1FIFVwZGF0ZSBQb3dlciBUZW1wbGF0ZXMgZm9yIGN1cnJlbnQgdmFsaWQgU3RhdGlvbnMgKi8KLQkvKiBzdGFfcG93ZXJfaW5pdChwcml2LCAwKTsqLwotCi0JLyogRklYTUUgdGhlIG51bWJlciBvZiBjaGFpbnMgc2hvdWxkIGdldCBmcm9tIGVlcHJvbSovCi0JY2hhaW5fdXBkYXRlKHByaXYsIEFHTlhfQ0hBSU5TX01BWCk7Ci19IC8qIGFudGVubmFfY29uZmlnICovCi0KLXZvaWQgY2FsaWJyYXRlX29zY2lsbGF0b3Ioc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxKTsKLQlyZWcgfD0gMHgxMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgcmVnKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVRXUklURSwgMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMSwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIyLCAweDI3KTsKLQkvKiAoUmVzaWR1YWwgREMgQ2FsaWJyYXRpb24pIHRvIENhbGlicmF0aW9uIE1vZGUgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDIpOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTAwNCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweDNmZik7Ci0JLyogKFRYIExPIENhbGlicmF0aW9uKSB0byBDYWxpYnJhdGlvbiBNb2RlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHg0KTsKLQotCWRvIHsKLQkJdTMyICByZWcxLCByZWcyLCByZWczOwotCQkvKiBFbmFibGUgUG93ZXIgU2F2aW5nIENvbnRyb2wgKi8KLQkJZW5hYmxlX3Bvd2VyX3NhdmluZyhwcml2KTsKLQkJLyogU2F2ZSB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyB0byByZXN0b3JlICovCi0JCXJlZzEgPSBpb3JlYWQzMihjdGwgKyAweDExMDAwKTsKLQkJcmVnMiA9IGlvcmVhZDMyKGN0bCArIDB4ZWM1MCk7Ci0JCXJlZzMgPSBpb3JlYWQzMihjdGwgKyAweGVjNTQpOwotCQl3bWIoKTsKLQotCQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDAwLCAweGNmZGYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIDB4NzApOwotCQkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgKi8KLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwMCwgcmVnMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgcmVnMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1NCwgcmVnMyk7Ci0JCS8qIERpc2FibGUgUG93ZXIgU2F2aW5nIENvbnRyb2wgKi8KLQkJZGlzYWJsZV9wb3dlcl9zYXZpbmcocHJpdik7Ci0JfSB3aGlsZSAoMCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAwKTsKLX0gLyogY2FsaWJyYXRlX29zY2lsbGF0b3IgKi8KLQotCi1zdGF0aWMgdm9pZCByYWRpb19jaGFubmVsX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1bnNpZ25lZCBpbnQgZnJlcSA9IHByaXYtPmJhbmQuY2hhbm5lbHNbY2hhbm5lbCAtIDFdLmNlbnRlcl9mcmVxOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCS8qIFNldCBTUEkgQ2xvY2sgdG8gNTAgTnMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQkvKiBDbGVhciB0aGUgRGlzYWJsZSBUeCBpbnRlcnJ1cHQgYml0IGluIEludGVycnVwdCBNYXNrICovCi0vKiAJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0lOVF9NQVNLKTsgKi8KLS8qIAlyZWcgJj0gfklSUV9UWF9ESVNBQkxFOyAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfSU5UX01BU0ssIHJlZyk7ICovCi0KLQkvKiBCYW5kIFNlbGVjdGlvbiAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VUKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9VVCwgcmVnKTsKLQotCS8qIEZJWE1FIFNldCB0aGUgU2lMYWJzIENoaXAgRnJlcXVlbmN5ICovCi0Jc3ludGhfZnJlcV9zZXQocHJpdiwgY2hhbm5lbCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fU09GVFJTVCk7Ci0JcmVnIHw9IDB4ODAxMDAwMzA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTExDVEwpOwotCXJlZyB8PSAweDIwMDA5OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUExMQ1RMLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDUpOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTEwMCk7Ci0KLQkvKiBMb2FkIHRoZSBNb25pdG9yR2FpbiBUYWJsZSAqLwotCW1vbml0b3JfZ2Fpbl90YWJsZV9pbml0KHByaXYpOwotCi0JLyogTG9hZCB0aGUgVFggRmlyIHRhYmxlICovCi0JdHhfZmlyX3RhYmxlX2luaXQocHJpdik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDIyKTsKLQl1ZGVsYXkoODApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHhmZik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweGVjNTApOwotCXJlZyB8PSAweDRmOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgcmVnKTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDgsIDB4MSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwYywgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDA4LCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgMHhjKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMHgzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxMCwgMHg2ZSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxNCwgMHg2Yyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQotCS8qIENhbGlicmF0ZSB0aGUgQW50ZW5uYSAqLwotCS8qIGFudGVubmFfY2FsaWJyYXRlKHByaXYpOyAqLwotCS8qIENhbGlicmF0ZSB0aGUgVHhMb2NhbE9zY2lsbGF0b3IgKi8KLQljYWxpYnJhdGVfb3NjaWxsYXRvcihwcml2KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOSU5JVCwgMHhhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENELCAweDApOwotCi0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxOCwgMHhiKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4MCk7Ci0KLQkvKiBXcml0ZSBGcmVxdWVuY3kgdG8gR2FpbiBDb250cm9sIENoYW5uZWwgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWENIQU5FTCwgZnJlcSk7Ci0JLyogV3JpdGUgMHgxNDAwMDAvRnJlcSB0byAweDljMDggKi8KLQlyZWcgPSAweDE0MDAwMC9mcmVxOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwOCwgcmVnKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNUKTsKLQlyZWcgJj0gfjB4ODAxMDAwMzA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BMTENUTCk7Ci0JcmVnICY9IH4weDIwMDA5OwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTExDVEwsIHJlZyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDApOwotCi0vKiBGSVhNRSBBY2NvcmRpbmcgdG8gTnVtYmVyIG9mIENoYWluczogKi8KLQotLyogCQkJICAgMS4gMTogKi8KLS8qICAgICAgICAgIDEuIFdyaXRlIDB4MTIwMyB0byBSRiBDaGlwIDAgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwcyAxICsyICAqLwotLyogCQkJICAgMi4gMjogKi8KLS8qICAgICAgICAgIDEuIFdyaXRlIDB4MTIwMyB0byBSRiBDaGlwIDAgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwIDIgKi8KLS8qICAgICAgICAgIDMuIFdyaXRlIDB4MTIwMSB0byBSRiBDaGlwIDEgICovCi0vKiAJCQkgICAzLiAzOiAqLwotLyogICAgICAgICAgMS4gV3JpdGUgMHgxMjAzIHRvIFJGIENoaXAgMCAqLwotLyogICAgICAgICAgMi4gV3JpdGUgMHgxMjAxIHRvIFJGIENoaXAgMSArIDIgICovCi0vKiAJCQkgICA0LiA0OiAqLwotLyogICAgICAgICAgMS4gV3JpdGUgMHgxMjAzIHRvIFJGIENoaXAgMCArIDEgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwIDIgICovCi0KLS8qIAkJCSAgIDUuIDY6ICovCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTIwMyk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDIsIDB4MTIwMSk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0KLQkvKiBGSVhNRSBTZXQgdGhlIERpc2FibGUgVHggaW50ZXJydXB0IGJpdCBpbiBJbnRlcnJ1cHQgTWFzawotCSAgIChPciAweDIwMDAwIHRvIEludGVycnVwdCBNYXNrKSAqLwotLyogCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9JTlRfTUFTSyk7ICovCi0vKiAJcmVnIHw9IElSUV9UWF9ESVNBQkxFOyAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfSU5UX01BU0ssIHJlZyk7ICovCi0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci0KLQkvKiBDb25maWd1cmUgdGhlIEFudGVubmEgKi8KLQlhbnRlbm5hX2NvbmZpZyhwcml2KTsKLQotCS8qIFdyaXRlIDB4MCB0byBEaXNjb3ZlcnkgTW9kZSBFbmFibGUgZGV0ZWN0IEcsIEIsIEEgcGFja2V0PyAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUpOwotCXJlZyB8PSAweDgwMDAwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIHJlZyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDApOwotCi0JLyogZW5hYmxlIHJhZGlvIG9uIGFuZCB0aGUgcG93ZXIgTEVEICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQpOwotCXJlZyAmPSB+MHgxOwotCXJlZyB8PSAweDI7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DVEwpOwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1RMLCByZWcpOwotfSAvKiByYWRpb19jaGFubmVsX3NldCAqLwotCi1zdGF0aWMgdm9pZCBiYXNlX2JhbmRfZmlsdGVyX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTcwMCk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRk9SQ0VDVExDTEssIDB4MCk7Ci0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjcpOwotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAxLCAweDI3KTsKLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRk9SQ0VDVExDTEssIDB4MSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X29mZnNldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgY2hhaW4pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIG9mZnNldDsKLQotCWlvd3JpdGUzMigoY2hhaW4pLCBjdGwgKyBBR05YX0FDSV9TRUxDSEFJTik7Ci0JdWRlbGF5KDEwKTsKLQlvZmZzZXQgPSAoaW9yZWFkMzIoY3RsICsgQUdOWF9BQ0lfT0ZGU0VUKSk7Ci0JcHJpbnRrKFBGWCAiQ2hhaW4gaXMgMHgleCwgT2Zmc2V0IGlzIDB4JXhcbiIsIGNoYWluLCBvZmZzZXQpOwotfQotCi12b2lkIHByaW50X29mZnNldHMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQlwcmludF9vZmZzZXQocHJpdiwgMCk7Ci0JcHJpbnRfb2Zmc2V0KHByaXYsIDQpOwotCXByaW50X29mZnNldChwcml2LCAxKTsKLQlwcmludF9vZmZzZXQocHJpdiwgNSk7Ci0JcHJpbnRfb2Zmc2V0KHByaXYsIDIpOwotCXByaW50X29mZnNldChwcml2LCA2KTsKLX0KLQotCi1zdHJ1Y3QgY2hhaW5zIHsKLQl1MzIgY2FsaTsJCS8qIGNhbGlicmF0ZSAgdmFsdWUqLwotCi0jZGVmaW5lICBORUVEX0NBTElCUkFURQkJMAotI2RlZmluZSAgU1VDQ0VTU19DQUxJQlJBVEUJMQotCWludCBzdGF0dXM7Ci19OwotCi1zdGF0aWMgdm9pZCBjaGFpbl9jYWxpYnJhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGNoYWlucyAqY2hhaW5zLAotCQkJICAgIHVuc2lnbmVkIGludCBudW0pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIGNhbGlicmEgPSBjaGFpbnNbbnVtXS5jYWxpOwotCi0JaWYgKG51bSA8IDMpCi0JCWNhbGlicmEgfD0gMHgxNDAwOwotCWVsc2UKLQkJY2FsaWJyYSB8PSAweDE1MDA7Ci0KLQlzd2l0Y2ggKG51bSkgewotCWNhc2UgMDoKLQljYXNlIDQ6Ci0JCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwLCBjYWxpYnJhKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCWNhc2UgNToKLQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDEsIGNhbGlicmEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JY2FzZSA2OgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgY2FsaWJyYSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLX0gLyogY2hhaW5fY2FsaWJyYXRlICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY2FsaWJyZXRlX3ZhbHVlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBjaGFpbnMgKmNoYWlucywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IG51bSkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgb2Zmc2V0OwotCi0JaW93cml0ZTMyKChudW0pLCBjdGwgKyBBR05YX0FDSV9TRUxDSEFJTik7Ci0JLyogRklYTUUgKi8KLQl1ZGVsYXkoMTApOwotCW9mZnNldCA9IChpb3JlYWQzMihjdGwgKyBBR05YX0FDSV9PRkZTRVQpKTsKLQotCWlmIChvZmZzZXQgPCAweGYpIHsKLQkJY2hhaW5zW251bV0uc3RhdHVzID0gU1VDQ0VTU19DQUxJQlJBVEU7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobnVtID09IDAgfHwgbnVtID09IDEgfHwgbnVtID09IDIpIHsKLQkJaWYgKDAgPT0gY2hhaW5zW251bV0uY2FsaSkKLQkJCWNoYWluc1tudW1dLmNhbGkgPSAweGZmOwotCQllbHNlCi0JCQljaGFpbnNbbnVtXS5jYWxpLS07Ci0JfSBlbHNlCi0JCWNoYWluc1tudW1dLmNhbGkrKzsKLQotCWNoYWluc1tudW1dLnN0YXR1cyA9IE5FRURfQ0FMSUJSQVRFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FsaWJyYV9kZWxheShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JdW5zaWduZWQgaW50IGkgPSAxMDA7Ci0KLQl3bWIoKTsKLQl3aGlsZSAoLS1pKSB7Ci0JCXJlZyA9IChpb3JlYWQzMihjdGwgKyBBR05YX0FDSV9TVEFUVVMpKTsKLQkJaWYgKHJlZyA9PSAweDQwMDApCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwKTsKLQl9Ci0JaWYgKCFpKQotCQlwcmludGsoUEZYICJjYWxpYnJhdGlvbiBmYWlsZWRcbiIpOwotfQotCi12b2lkIGRvX2NhbGlicmF0aW9uKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jc3RydWN0IGNoYWlucyBjaGFpbnNbN107Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0JQUdOWF9UUkFDRTsKLQotCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJaWYgKGkgPT0gMykKLQkJCWNvbnRpbnVlOwotCi0JCWNoYWluc1tpXS5jYWxpID0gMHg3ZjsKLQkJY2hhaW5zW2ldLnN0YXR1cyA9IE5FRURfQ0FMSUJSQVRFOwotCX0KLQotCS8qIEZJWE1FIDB4MzAwIGlzIGEgbWFnaWMgbnVtYmVyICovCi0JZm9yIChqID0gMDsgaiA8IDB4MzAwOyBqKyspIHsKLQkJaWYgKGNoYWluc1swXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1sxXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1syXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s0XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s1XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s2XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUpCi0JCQlicmVhazsKLQotCQkvKiBBdHRlbnRpb24sIHRoZXJlIGlzIG5vIGNoYWluIDMgKi8KLQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQkJaWYgKGkgPT0gMykKLQkJCQljb250aW51ZTsKLQkJCWlmIChjaGFpbnNbaV0uc3RhdHVzID09IE5FRURfQ0FMSUJSQVRFKQotCQkJCWNoYWluX2NhbGlicmF0ZShwcml2LCBjaGFpbnMsIGkpOwotCQl9Ci0JCS8qIFdyaXRlIDB4MSB0byBDYWxpYnJhdGlvbiBNZWFzdXJlICovCi0JCWlvd3JpdGUzMigoMHgxKSwgY3RsICsgQUdOWF9BQ0lfTUVBU1VSRSk7Ci0JCWNhbGlicmFfZGVsYXkocHJpdik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQkJaWYgKGkgPT0gMykKLQkJCQljb250aW51ZTsKLQotCQkJZ2V0X2NhbGlicmV0ZV92YWx1ZShwcml2LCBjaGFpbnMsIGkpOwotCQl9Ci0JfQotCXByaW50ayhQRlggIkNsaWJyYXRlIHRpbWVzIGlzICVkXG4iLCBqKTsKLQlwcmludF9vZmZzZXRzKHByaXYpOwotfSAvKiBkb19jYWxpYnJhdGlvbiAqLwotCi12b2lkIGFudGVubmFfY2FsaWJyYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTk1FQVNBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkFDVElBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDB4Myk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9BTlRDRkcsIDB4MWYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0lOQUNULCAweDI0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0RZTkEsIDB4MjApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBLCAweDY0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQUwsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCLCAweDQ2KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCAweDNjKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMHgzMCk7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMCk7Ci0JLyogRml4bWUgKi8KLQl1ZGVsYXkoODApOwotCS8qICAgIDEuIFNob3VsZCByZWFkIDB4MCAgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmICgweDAgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMik7Ci0JdWRlbGF5KDgwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmICgweDAgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwNSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fU09GVFJTVCk7Ci0JcmVnIHw9IDB4MWMwMDAwMzI7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTExDVEwpOwotCXJlZyB8PSAweDAwMDNmMDc7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTExDVEwsIHJlZyk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4ZWM1MCk7Ci0JcmVnIHw9IDB4NDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweGZmOCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ0hBSU5OVU0sIDB4Nik7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxOTg3NCwgMHgwKTsKLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxNzAwKTsKLQotCS8qIENhbGlicmF0ZSB0aGUgQmFzZUJhbmRGaWx0ZXIgKi8KLQliYXNlX2JhbmRfZmlsdGVyX2NhbGlicmF0ZShwcml2KTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDIpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDAsIDB4MWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCAweDFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMiwgMHgxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMSwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIyLCAweDI3KTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE0MDApOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE1MDApOwotCi0JLyogTWVhc3VyZSBDYWxpYnJhdGlvbiAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX01FQVNVUkUsIDB4MSk7Ci0JY2FsaWJyYV9kZWxheShwcml2KTsKLQotCS8qIGRvIGNhbGlicmF0aW9uICovCi0JZG9fY2FsaWJyYXRpb24ocHJpdik7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDIxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0xFTiwgMHhmKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDApOwotCXJlZyAmPSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDAsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSk7Ci0JcmVnICY9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQyKTsKLQlyZWcgJj0gMHhmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQyLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDApOwotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci19IC8qIGFudGVubmFfY2FsaWJyYXRlICovCi0KLXZvaWQgX19hbnRlbm5hX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0KLQkvKiBDYWxpYnJhdGUgdGhlIEJhc2VCYW5kRmlsdGVyICovCi0JLyogYmFzZV9iYW5kX2ZpbHRlcl9jYWxpYnJhdGUocHJpdik7ICovCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMik7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQwLCAweDFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgMHgxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIsIDB4MWQpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDI3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE0MDApOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE1MDApOwotCS8qIE1lYXN1cmUgQ2FsaWJyYXRpb24gKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NRUFTVVJFLCAweDEpOwotCWNhbGlicmFfZGVsYXkocHJpdik7Ci0JZG9fY2FsaWJyYXRpb24ocHJpdik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweDApOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDIxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweGYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCk7Ci0JcmVnICY9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxKTsKLQlyZWcgJj0gMHhmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIpOwotCXJlZyAmPSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIsIHJlZyk7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVRXUklURSwgMHgwKTsKLQotCS8qIFdyaXRlIDB4MyBHYWluIENvbnRyb2wgRGlzY292ZXJ5IE1vZGUgKi8KLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci19Ci0KLWludCBhZ254X3NldF9jaGFubmVsKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCUFHTlhfVFJBQ0U7Ci0KLQlwcmludGsoS0VSTl9FUlIgUEZYICJDaGFubmVsIGlzICVkICVzXG4iLCBjaGFubmVsLCBfX2Z1bmNfXyk7Ci0JcmFkaW9fY2hhbm5lbF9zZXQocHJpdiwgY2hhbm5lbCk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTdkYjVlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSAicGh5LmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLQotdm9pZCBoYXNoX3JlYWQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTMyIHJlZ2hpLCB1MzIgcmVnbG8sIHU4IHN0YV9pZCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQotCXJlZ2xvICY9IDB4RkZGRjsKLQlyZWdsbyB8PSAweDMwMDAwMDAwOwotCXJlZ2xvIHw9IDB4NDAwMDAwMDA7CS8qIFNldCBzdGF0dXMgYnVzeSAqLwotCXJlZ2xvIHw9IHN0YV9pZCA8PCAxNjsKLQotCWlvd3JpdGUzMigwLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlpb3dyaXRlMzIocmVnaGksIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQotCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0JcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCXByaW50ayhQRlggIlJYIGhhc2ggY21kIGFyZSA6ICUuOHglLjh4XG4iLCByZWdoaSwgcmVnbG8pOwotfQotCi12b2lkIGhhc2hfd3JpdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBzdGFfaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZ2hpLCByZWdsbzsKLQotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVcGRhdGUgaGFzaCB0YWJsZTogSW52YWxpZCBod2FkZHIhXG4iKTsKLQotCXJlZ2hpID0gbWFjX2FkZHJbMF0gPDwgMjQgfCBtYWNfYWRkclsxXSA8PCAxNiB8IG1hY19hZGRyWzJdIDw8IDggfCBtYWNfYWRkclszXTsKLQlyZWdsbyA9IG1hY19hZGRyWzRdIDw8IDggfCBtYWNfYWRkcls1XTsKLQlyZWdsbyB8PSAweDEwMDAwMDAwOwkvKiBTZXQgaGFzaCBjb21tbWFuZCAqLwotCXJlZ2xvIHw9IDB4NDAwMDAwMDA7CS8qIFNldCBzdGF0dXMgYnVzeSAqLwotCXJlZ2xvIHw9IHN0YV9pZCA8PCAxNjsKLQotCWlvd3JpdGUzMigwLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlpb3dyaXRlMzIocmVnaGksIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQotCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQlpZiAoIShyZWdsbyAmIDB4ODAwMDAwMDApKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVXBkYXRlIGhhc2ggdGFibGUgZmFpbGVkXG4iKTsKLX0KLQotdm9pZCBoYXNoX2RlbGV0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgcmVnaGksIHUzMiByZWdsbywgdTggc3RhX2lkKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0JcmVnbG8gJj0gMHhGRkZGOwotCXJlZ2xvIHw9IDB4MjAwMDAwMDA7Ci0JcmVnbG8gfD0gMHg0MDAwMDAwMDsJLyogU2V0IHN0YXR1cyBidXN5ICovCi0JcmVnbG8gfD0gc3RhX2lkIDw8IDE2OwotCi0JaW93cml0ZTMyKDAsIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0ZMQUcpOwotCWlvd3JpdGUzMihyZWdoaSwgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0JaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0KLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7Ci0JcHJpbnRrKFBGWCAiUlggaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7Ci0KLX0KLQotdm9pZCBoYXNoX2R1bXAoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggc3RhX2lkKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWdoaSwgcmVnbG87Ci0KLQlyZWdsbyA9IDB4NDAwMDAwMDA7ICAJLyogc3RhdHVzIGJpdCAqLwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQlpb3dyaXRlMzIoc3RhX2lkIDw8IDE2LCBjdGwgKyBBR05YX1JYTV9IQVNIX0RVTVBfREFUQSk7Ci0KLQl1ZGVsYXkoODApOwotCi0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7Ci0JcHJpbnRrKFBGWCAiaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7Ci0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlwcmludGsoUEZYICJoYXNoIGZsYWcgaXMgOiAlLjh4XG4iLCByZWdoaSk7Ci0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0RVTVBfTVNUKTsKLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9MU1QpOwotCXByaW50ayhQRlggImhhc2ggZHVtcCBtc3QgbHN0OiAlLjh4JS44eFxuIiwgcmVnaGksIHJlZ2xvKTsKLQlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9EQVRBKTsKLQlwcmludGsoUEZYICJoYXNoIGR1bXAgZGF0YTogJS44eFxuIiwgcmVnaGkpOwotfQotCi12b2lkIGdldF9zdGFfcG93ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3Bvd2VyICpwb3dlciwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JbWVtY3B5X2Zyb21pbyhwb3dlciwgY3RsICsgQUdOWF9UWE1fU1RBUE9XVEVNUCArIHNpemVvZigqcG93ZXIpICogc3RhX2lkeCwKLQkJICAgICAgc2l6ZW9mKCpwb3dlcikpOwotfQotCi1pbmxpbmUgdm9pZAotc2V0X3N0YV9wb3dlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgKnBvd2VyLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQkvKiBGSVhNRSAgIDIuIFdyaXRlIFRlbXBsYXRlIHRvIG9mZnNldCArIHN0YXRpb24gbnVtYmVyICAqLwotCW1lbWNweV90b2lvKGN0bCArIEFHTlhfVFhNX1NUQVBPV1RFTVAgKyBzaXplb2YoKnBvd2VyKSAqIHN0YV9pZHgsCi0JCSAgICBwb3dlciwgc2l6ZW9mKCpwb3dlcikpOwotfQotCi0KLXZvaWQgZ2V0X3N0YV90eF93cShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfdHhfd3EgKnR4X3dxLAotCQkgICB1bnNpZ25lZCBpbnQgc3RhX2lkeCwgdW5zaWduZWQgaW50IHdxX2lkeCkKLXsKLQl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwotCW1lbWNweV9mcm9taW8odHhfd3EsIGRhdGEgKyBBR05YX1BEVV9UWF9XUSArIHNpemVvZigqdHhfd3EpICogU1RBX1RYX1dRX05VTSAqIHN0YV9pZHggKwotCQkgICAgICBzaXplb2YoKnR4X3dxKSAqIHdxX2lkeCwgIHNpemVvZigqdHhfd3EpKTsKLQotfQotCi1pbmxpbmUgdm9pZCBzZXRfc3RhX3R4X3dxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV90eF93cSAqdHhfd3EsCi0JCSAgIHVuc2lnbmVkIGludCBzdGFfaWR4LCB1bnNpZ25lZCBpbnQgd3FfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0JbWVtY3B5X3RvaW8oZGF0YSArIEFHTlhfUERVX1RYX1dRICsgc2l6ZW9mKCp0eF93cSkgKiBTVEFfVFhfV1FfTlVNICogc3RhX2lkeCArCi0JCSAgICBzaXplb2YoKnR4X3dxKSAqIHdxX2lkeCwgdHhfd3EsIHNpemVvZigqdHhfd3EpKTsKLX0KLQotCi12b2lkIGdldF9zdGEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhICpzdGEsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0KLQltZW1jcHlfZnJvbWlvKHN0YSwgZGF0YSArIEFHTlhfUERVUE9PTCArIHNpemVvZigqc3RhKSAqIHN0YV9pZHgsCi0JCSAgICAgIHNpemVvZigqc3RhKSk7Ci19Ci0KLWlubGluZSB2b2lkIHNldF9zdGEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhICpzdGEsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0KLQltZW1jcHlfdG9pbyhkYXRhICsgQUdOWF9QRFVQT09MICsgc2l6ZW9mKCpzdGEpICogc3RhX2lkeCwKLQkJICAgIHN0YSwgc2l6ZW9mKCpzdGEpKTsKLX0KLQotLyogRklYTUUgKi8KLXZvaWQgc3RhX3Bvd2VyX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3Bvd2VyIHBvd2VyOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCW1lbXNldCgmcG93ZXIsIDAsIHNpemVvZihwb3dlcikpOwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoRURDRiwgRURDRl9TSElGVCwgMHgxKTsKLQlwb3dlci5yZWcgPSBjcHVfdG9fbGUzMihyZWcpOwotCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBzdGFfaWR4KTsKLQl1ZGVsYXkoNDApOwotfSAvKiBhZGRfcG93ZXJfdGVtcGxhdGUgKi8KLQotCi0vKiBAbnVtOiBUaGUgI251bWJlciBvZiBzdGF0aW9uIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgY2FyZCAqLwotc3RhdGljIHZvaWQgc3RhX3R4X3dvcmtxdWV1ZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXN0cnVjdCBhZ254X3N0YV90eF93cSB0eF93cTsKLQl1MzIgcmVnOwotCXVuc2lnbmVkIGludCBpOwotCi0JbWVtc2V0KCZ0eF93cSwgMCwgc2l6ZW9mKHR4X3dxKSk7Ci0KLQlyZWcgPSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfVkFMSUQsIFdPUktfUVVFVUVfVkFMSURfU0hJRlQsIDEpOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfQUNLX1RZUEUsIFdPUktfUVVFVUVfQUNLX1RZUEVfU0hJRlQsIDEpOwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9BQ0tfVFlQRSwgV09SS19RVUVVRV9BQ0tfVFlQRV9TSElGVCwgMCk7ICovCi0JdHhfd3EucmVnMiB8PSBjcHVfdG9fbGUzMihyZWcpOwotCi0JLyogU3VwcG9zZSBhbGwgOCB0cmFmZmljIGNsYXNzIGFyZSB1c2VkICovCi0JZm9yIChpID0gMDsgaSA8IFNUQV9UWF9XUV9OVU07IGkrKykKLQkJc2V0X3N0YV90eF93cShwcml2LCAmdHhfd3EsIHN0YV9pZHgsIGkpOwotfSAvKiBzdGFfdHhfd29ya3F1ZXVlX2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBzdGFfdHJhZmZpY19pbml0KHN0cnVjdCBhZ254X3N0YV90cmFmZmljICp0cmFmZmljKQotewotCXUzMiByZWc7Ci0JbWVtc2V0KHRyYWZmaWMsIDAsIHNpemVvZigqdHJhZmZpYykpOwotCi0JcmVnID0gYWdueF9zZXRfYml0cyhORVdfUEFDS0VULCBORVdfUEFDS0VUX1NISUZULCAxKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhUUkFGRklDX1ZBTElELCBUUkFGRklDX1ZBTElEX1NISUZULCAxKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFRSQUZGSUNfQUNLX1RZUEUsIFRSQUZGSUNfQUNLX1RZUEVfU0hJRlQsIDEpOyAqLwotCXRyYWZmaWMtPnJlZzAgPSBjcHVfdG9fbGUzMihyZWcpOwotCi0JLyogCTMuIHNldHRpbmcgUlggU2VxdWVuY2UgTnVtYmVyIHRvIDQwOTUgKi8KLQlyZWcgPSBhZ254X3NldF9iaXRzKFJYX1NFUVVFTkNFX05VTSwgUlhfU0VRVUVOQ0VfTlVNX1NISUZULCA0MDk1KTsKLQl0cmFmZmljLT5yZWcxID0gY3B1X3RvX2xlMzIocmVnKTsKLX0KLQotCi0vKiBAbnVtOiBUaGUgI251bWJlciBvZiBzdGF0aW9uIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgY2FyZCAqLwotdm9pZCBzdGFfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQkvKiBGSVhNRSB0aGUgbGVuZ3RoIG9mIHN0YSBpcyAyNTYgYnl0ZXMgSXMgdGhhdAotCSAqIGRhbmdlcm91cyB0byBzdGFjayBvdmVyZmxvdz8gKi8KLQlzdHJ1Y3QgYWdueF9zdGEgc3RhOwotCXUzMiByZWc7Ci0JaW50IGk7Ci0KLQltZW1zZXQoJnN0YSwgMCwgc2l6ZW9mKHN0YSkpOwotCS8qIFNldCB2YWxpZCB0byAxICovCi0JcmVnID0gYWdueF9zZXRfYml0cyhTVEFUSU9OX1ZBTElELCBTVEFUSU9OX1ZBTElEX1NISUZULCAxKTsKLQkvKiBTZXQgRW5hYmxlIENvbmNhdGVuYXRpb24gdG8gMCAoPykgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhFTkFCTEVfQ09OQ0FURU5BVElPTiwgRU5BQkxFX0NPTkNBVEVOQVRJT05fU0hJRlQsIDApOwotCS8qIFNldCBFbmFibGUgRGVjb21wcmVzc2lvbiB0byAwICg/KSAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKEVOQUJMRV9ERUNPTVBSRVNTSU9OLCBFTkFCTEVfREVDT01QUkVTU0lPTl9TSElGVCwgMCk7Ci0Jc3RhLnJlZyA9IGNwdV90b19sZTMyKHJlZyk7Ci0KLQkvKiBJbml0aWFsaXplIGVhY2ggb2YgdGhlIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlcyBieTogKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlzdGFfdHJhZmZpY19pbml0KHN0YS50cmFmZmljICsgaSk7Ci0KLQlzZXRfc3RhKHByaXYsICZzdGEsIHN0YV9pZHgpOwotCXN0YV90eF93b3JrcXVldWVfaW5pdChwcml2LCBzdGFfaWR4KTsKLX0gLyogc3RhX2Rlc2NyaXB0b3JfaW5pdCAqLwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5oIGIvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNTA0ZTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotI2lmbmRlZiBBR05YX1NUQV9IXwotI2RlZmluZSBBR05YX1NUQV9IXwotCi0jZGVmaW5lIFNUQV9UWF9XUV9OVU0JOAkvKiBUaGUgbnVtYmVyIG9mIFRYIHdvcmtxdWV1ZSBvbmUgU1RBIGhhcyAqLwotCi1zdHJ1Y3QgYWdueF9oYXNoX2NtZCB7Ci0JX19iZTMyIGNtZGhpOwotI2RlZmluZSBNQUNMTwkJMHhGRkZGMDAwMAotI2RlZmluZSBNQUNMT19TSElGVAkxNgotI2RlZmluZSBTVEFfSUQJCTB4MDAwMEZGRjAKLSNkZWZpbmUgU1RBX0lEX1NISUZUCTQKLSNkZWZpbmUgQ01ECQkweDAwMDAwMDBDCi0jZGVmaW5lIENNRF9TSElGVAkyCi0jZGVmaW5lIFNUQVRVUwkJMHgwMDAwMDAwMgotI2RlZmluZSBTVEFUVVNfU0hJRlQJMQotI2RlZmluZSBQQVNTCQkweDAwMDAwMDAxCi0jZGVmaW5lIFBBU1NfU0hJRlQJMQotCV9fYmUzMiBjbWRsbzsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLS8qCi0gKiBTdGF0aW9uIFBvd2VyIFRlbXBsYXRlCi0gKiBGSVhNRSBKdXN0IGZvciBhZ24xMDAgeWV0Ci0gKi8KLXN0cnVjdCBhZ254X3N0YV9wb3dlciB7Ci0JX19sZTMyIHJlZzsKLSNkZWZpbmUgU0lHTkFMCQkJMHgwMDAwMDBGRiAvKiBzaWduYWwgKi8KLSNkZWZpbmUgU0lHTkFMX1NISUZUCQkwCi0jZGVmaW5lIFJBVEUJCQkweDAwMDAwRjAwCi0jZGVmaW5lIFJBVEVfU0hJRlQJCTgKLSNkZWZpbmUgVElGUwkJCTB4MDAwMDEwMDAKLSNkZWZpbmUgVElGU19TSElGVAkJMTIKLSNkZWZpbmUgRURDRgkJCTB4MDAwMDIwMDAKLSNkZWZpbmUgRURDRl9TSElGVAkJMTMKLSNkZWZpbmUgQ0hBTk5FTF9CT05ECQkweDAwMDA0MDAwCi0jZGVmaW5lIENIQU5ORUxfQk9ORF9TSElGVAkxNAotI2RlZmluZSBQSFlfTU9ERQkJMHgwMDAzODAwMAotI2RlZmluZSBQSFlfTU9ERV9TSElGVAkJMTUKLSNkZWZpbmUgUE9XRVJfTEVWRUwJCTB4MDA3QzAwMDAKLSNkZWZpbmUgUE9XRVJfTEVWRUxfU0hJRlQJMTgKLSNkZWZpbmUgTlVNX1RSQU5TTUlUVEVSUwkweDAwODAwMDAwCi0jZGVmaW5lIE5VTV9UUkFOU01JVFRFUlNfU0hJRlQJMjMKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0vKgotICogVFggV29ya3F1ZXVlIERlc2NyaXB0b3IKLSAqLwotc3RydWN0IGFnbnhfc3RhX3R4X3dxIHsKLQlfX2xlMzIgcmVnMDsKLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0xPVwkweEZGMDAwMDAwIC8qIEhlYWQgcG9pbnRlciBsb3cgKi8KLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0xPV19TSElGVAkyNAotI2RlZmluZSBUQUlMX1BPSU5URVIJCTB4MDBGRkZGRkYgLyogVGFpbCBwb2ludGVyICovCi0jZGVmaW5lIFRBSUxfUE9JTlRFUl9TSElGVAkwCi0KLQlfX2xlMzIgcmVnMzsKLSNkZWZpbmUgQUNLX1BPSU5URVJfTE9XCSAgICAgICAgMHhGRkZGMDAwMAkvKiBBQ0sgcG9pbnRlciBsb3cgKi8KLSNkZWZpbmUgQUNLX1BPSU5URVJfTE9XX1NISUZUCTE2Ci0jZGVmaW5lIEhFQURfUE9JTlRFUl9ISUdICTB4MDAwMEZGRkYJLyogSGVhZCBwb2ludGVyIGhpZ2ggKi8KLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0hJR0hfU0hJRlQJMAotCi0JX19sZTMyIHJlZzE7Ci0vKiBBQ0sgdGltZW91dCB0YWlsIHBhY2tldCBjb3VudCAqLwotI2RlZmluZSBBQ0tfVElNT1VUX1RBSUxfUEFDS19DTlQJMHhGRkYwMDAwMAotI2RlZmluZSBBQ0tfVElNT1VUX1RBSUxfUEFDS19DTlRfU0hJRlQJMjAKLS8qIEhlYWQgdGltZW91dCB0YWlsIHBhY2tldCBjb3VudCAqLwotI2RlZmluZSBIRUFEX1RJTU9VVF9UQUlMX1BBQ0tfQ05UCTB4MDAwRkZGMDAKLSNkZWZpbmUgSEVBRF9USU1PVVRfVEFJTF9QQUNLX0NOVF9TSElGVAk4Ci0jZGVmaW5lIEFDS19QT0lOVEVSX0hJR0gJICAgICAgICAweDAwMDAwMEZGIC8qIEFDSyBwb2ludGVyIGhpZ2ggKi8KLSNkZWZpbmUgQUNLX1BPSU5URVJfSElHSF9TSElGVAkJMAotCi0JX19sZTMyIHJlZzI7Ci0jZGVmaW5lIFdPUktfUVVFVUVfVkFMSUQJCTB4ODAwMDAwMDAgLyogdmFsaWQgKi8KLSNkZWZpbmUgV09SS19RVUVVRV9WQUxJRF9TSElGVAkJMzEKLSNkZWZpbmUgV09SS19RVUVVRV9BQ0tfVFlQRQkJMHg0MDAwMDAwMCAvKiBBQ0sgdHlwZSAqLwotI2RlZmluZSBXT1JLX1FVRVVFX0FDS19UWVBFX1NISUZUCTMwCi0vKiBIZWFkIHRpbWVvdXQgd2luZG93IGxpbWl0IGZyYWdtZW50YXRpb24gY291bnQgKi8KLSNkZWZpbmUgSEVBRF9USU1PVVRfV0lOX0xJTV9GUkFHX0NOVAkweDNGRkYwMDAwCi0jZGVmaW5lIEhFQURfVElNT1VUX1dJTl9MSU1fRlJBR19DTlRfU0hJRlQJMTYKLS8qIEhlYWQgdGltZW91dCB3aW5kb3cgbGltaXQgYnl0ZSBjb3VudCAqLwotI2RlZmluZSBIRUFEX1RJTU9VVF9XSU5fTElNX0JZVEVfQ05UCTB4MDAwMEZGRkYKLSNkZWZpbmUgSEVBRF9USU1PVVRfV0lOX0xJTV9CWVRFX0NOVF9TSElGVAkgMAotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotLyoKLSAqIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlCi0gKi8KLXN0cnVjdCBhZ254X3N0YV90cmFmZmljIHsKLQlfX2xlMzIgcmVnMDsKLSNkZWZpbmUgQUNLX1RJTU9VVF9DTlQJCTB4RkY4MDAwMDAgLyogQUNLIFRpbWVvdXQgQ291bnRzICovCi0jZGVmaW5lIEFDS19USU1PVVRfQ05UX1NISUZUCTIzCi0jZGVmaW5lIFRSQUZGSUNfQUNLX1RZUEUJMHgwMDYwMDAwMCAvKiBBQ0sgVHlwZSAqLwotI2RlZmluZSBUUkFGRklDX0FDS19UWVBFX1NISUZUCTIxCi0jZGVmaW5lIE5FV19QQUNLRVQJCTB4MDAxMDAwMDAgLyogTmV3IFBhY2tldCAgKi8KLSNkZWZpbmUgTkVXX1BBQ0tFVF9TSElGVAkyMAotI2RlZmluZSBUUkFGRklDX1ZBTElECQkweDAwMDgwMDAwIC8qIFZhbGlkICovCi0jZGVmaW5lIFRSQUZGSUNfVkFMSURfU0hJRlQJMTkKLSNkZWZpbmUgUlhfSERSX0RFU0NfUE9JTlRFUgkweDAwMDdGRkZGIC8qIFJYIEhlYWRlciBEZXNjcmlwdGVyIHBvaW50ZXIgKi8KLSNkZWZpbmUgUlhfSERSX0RFU0NfUE9JTlRFUl9TSElGVAkgMAotCi0JX19sZTMyIHJlZzE7Ci0jZGVmaW5lIFJYX1BBQ0tFVF9USU1FU1RBTVAJMHhGRkZGMDAwMCAvKiBSWCBQYWNrZXQgVGltZXN0YW1wICovCi0jZGVmaW5lIFJYX1BBQ0tFVF9USU1FU1RBTVBfU0hJRlQJMTYKLSNkZWZpbmUgVFJBRkZJQ19SRVNFUlZFRAkweDAwMDBFMDAwIC8qIFJlc2VydmVkICovCi0jZGVmaW5lIFRSQUZGSUNfUkVTRVJWRURfU0hJRlQgIDEzCi0jZGVmaW5lIFNWCQkJMHgwMDAwMTAwMCAvKiBzdiAqLwotI2RlZmluZSBTVl9TSElGVAkJMTIKLSNkZWZpbmUgUlhfU0VRVUVOQ0VfTlVNCQkweDAwMDAwRkZGIC8qIFJYIFNlcXVlbmNlIE51bWJlciAqLwotI2RlZmluZSBSWF9TRVFVRU5DRV9OVU1fU0hJRlQJMAotCi0JX19sZTMyIHR4X3JlcGxheV9jbnRfbG93OyAvKiBUWCBSZXBsYXkgQ291bnRlciBMb3cgKi8KLQotCV9fbGUxNiB0eF9yZXBsYXlfY250X2hpZ2g7IC8qIFRYIFJlcGxheSBDb3VudGVyIEhpZ2ggKi8KLQlfX2xlMTYgcnhfcmVwbGF5X2NudF9oaWdoOyAvKiBSWCBSZXBsYXkgQ291bnRlciBIaWdoICovCi0KLQlfX2JlMzIgcnhfcmVwbGF5X2NudF9sb3c7IC8qIFJYIFJlcGxheSBDb3VudGVyIExvdyAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLS8qCi0gKiBTdGF0aW9uIERlc2NyaXB0b3JzCi0gKi8KLXN0cnVjdCBhZ254X3N0YSB7Ci0JX19sZTMyIHR4X3Nlc3Npb25fa2V5c1s0XTsgLyogVHJhbnNtaXQgU2Vzc2lvbiBLZXkgKDAtMykgKi8KLQlfX2xlMzIgcnhfc2Vzc2lvbl9rZXlzWzRdOyAvKiBSZWNlaXZlIFNlc3Npb24gS2V5ICgwLTMpICovCi0KLQlfX2xlMzIgcmVnOwotI2RlZmluZSBJRF8xCQkJMHhDMDAwMDAwMCAvKiBpZCAxICovCi0jZGVmaW5lIElEXzFfU0hJRlQJCTMwCi0jZGVmaW5lIElEXzAJCQkweDMwMDAwMDAwIC8qIGlkIDAgKi8KLSNkZWZpbmUgSURfMF9TSElGVAkJMjgKLSNkZWZpbmUgRU5BQkxFX0NPTkNBVEVOQVRJT04JMHgwRkYwMDAwMCAvKiBFbmFibGUgY29uY2F0ZW5hdGlvbiAqLwotI2RlZmluZSBFTkFCTEVfQ09OQ0FURU5BVElPTl9TSElGVAkyMAotI2RlZmluZSBFTkFCTEVfREVDT01QUkVTU0lPTgkweDAwMEZGMDAwIC8qIEVuYWJsZSBkZWNvbXByZXNzaW9uICovCi0jZGVmaW5lIEVOQUJMRV9ERUNPTVBSRVNTSU9OX1NISUZUCTEyCi0jZGVmaW5lIFNUQV9SRVNFUlZFRAkJMHgwMDAwMEMwMCAvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBTVEFfUkVTRVJWRURfU0hJRlQJMTAKLSNkZWZpbmUgRUFQCQkJMHgwMDAwMDIwMCAvKiBFQVAgKi8KLSNkZWZpbmUgRUFQX1NISUZUCQk5Ci0jZGVmaW5lIEVEX05VTEwJCQkweDAwMDAwMTAwIC8qIEVEIE5VTEwgKi8KLSNkZWZpbmUgRURfTlVMTF9TSElGVAkJOAotI2RlZmluZSBFTkNSWVBUSU9OX1BPTElDWQkweDAwMDAwMEUwIC8qIEVuY3J5cHRpb24gUG9saWN5ICovCi0jZGVmaW5lIEVOQ1JZUFRJT05fUE9MSUNZX1NISUZUIDUKLSNkZWZpbmUgREVGSU5FRF9LRVlfSUQJCTB4MDAwMDAwMTggLyogRGVmaW5lZCBLZXkgSUQgKi8KLSNkZWZpbmUgREVGSU5FRF9LRVlfSURfU0hJRlQJMwotI2RlZmluZSBGSVhFRF9LRVkJCTB4MDAwMDAwMDQgLyogRml4ZWQgS2V5ICovCi0jZGVmaW5lIEZJWEVEX0tFWV9TSElGVAkJMgotI2RlZmluZSBLRVlfVkFMSUQJCTB4MDAwMDAwMDIgLyogS2V5IFZhbGlkICovCi0jZGVmaW5lIEtFWV9WQUxJRF9TSElGVAkJMQotI2RlZmluZSBTVEFUSU9OX1ZBTElECQkweDAwMDAwMDAxIC8qIFN0YXRpb24gVmFsaWQgKi8KLSNkZWZpbmUgU1RBVElPTl9WQUxJRF9TSElGVAkwCi0KLQlfX2xlMzIgdHhfYWVzX2Jsa3NfdW5pY2FzdDsgLyogVFggQUVTIEJsa3MgVW5pY2FzdCAqLwotCV9fbGUzMiByeF9hZXNfYmxrc191bmljYXN0OyAvKiBSWCBBRVMgQmxrcyBVbmljYXN0ICovCi0KLQlfX2xlMTYgYWVzX2Zvcm1hdF9lcnJfdW5pY2FzdF9jbnQ7IC8qIEFFUyBGb3JtYXQgRXJyb3IgVW5pY2FzdCBDb3VudHMgKi8KLQlfX2xlMTYgYWVzX3JlcGxheV91bmljYXN0OyAvKiBBRVMgUmVwbGF5IFVuaWNhc3QgKi8KLQotCV9fbGUxNiBhZXNfZGVjcnlwdF9lcnJfdW5pY2FzdDsJLyogQUVTIERlY3J5cHQgRXJyb3IgVW5pY2FzdCAqLwotCV9fbGUxNiBhZXNfZGVjcnlwdF9lcnJfZGVmYXVsdDsJLyogQUVTIERlY3J5cHQgRXJyb3IgZGVmYXVsdCAqLwotCi0JX19sZTE2IHNpbmdsZV9yZXRyeV9wYWNrZXRzOyAvKiBTaW5nbGUgUmV0cnkgUGFja2V0cyAqLwotCV9fbGUxNiBmYWlsZWRfdHhfcGFja2V0czsgLyogRmFpbGVkIFR4IFBhY2tldHMgKi8KLQotCV9fbGUxNiBtdXRpX3JldHJ5X3BhY2tldHM7IC8qIE11bHRpcGxlIFJldHJ5IFBhY2tldHMgKi8KLQlfX2xlMTYgYWNrX3RpbWVvdXRzOwkvKiBBQ0sgVGltZW91dHMgKi8KLQotCV9fbGUxNiBmcmFnX3R4X2NudDsJLyogRnJhZ21lbnQgVFggQ291bnRzICovCi0JX19sZTE2IHJ0c19icnFfc2VudDsJLyogUlRTIEJycSBTZW50ICovCi0KLQlfX2xlMTYgdHhfcGFja2V0czsJLyogVFggUGFja2V0cyAqLwotCV9fbGUxNiBjdHNfYmFja190aW1lb3V0OyAvKiBDVFMgQmFjayBUaW1lb3V0ICovCi0KLQlfX2xlMzIgcGh5X3N0YXRzX2hpZ2g7CS8qIFBIWSBTdGF0cyBIaWdoICovCi0JX19sZTMyIHBoeV9zdGF0c19sb3c7CS8qIFBIWSBTdGF0cyBMb3cgKi8KLQotCXN0cnVjdCBhZ254X3N0YV90cmFmZmljIHRyYWZmaWNbOF07CS8qIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlICg4KSAqLwotCi0JX19sZTE2IHRyYWZmaWNfY2xhc3MwX2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyAwIEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczFfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDEgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzMl9mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgMiBGcmFnbWVudCBTdWNjZXNzICovCi0JX19sZTE2IHRyYWZmaWNfY2xhc3MzX2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyAzIEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczRfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDQgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzNV9mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgNSBGcmFnbWVudCBTdWNjZXNzICovCi0JX19sZTE2IHRyYWZmaWNfY2xhc3M2X2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyA2IEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczdfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDcgRnJhZ21lbnQgU3VjY2VzcyAqLwotCi0JX19sZTE2IG51bV9mcmFnX25vbl9wcmltZV9yYXRlczsgLyogbnVtYmVyIG9mIEZyYWdtZW50cyBmb3Igbm9uLXByaW1lIHJhdGVzICovCi0JX19sZTE2IGFja190aW1lb3V0X25vbl9wcmltZV9yYXRlczsgLyogQUNLIFRpbWVvdXQgZm9yIG5vbi1wcmltZSByYXRlcyAqLwotCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi1zdHJ1Y3QgYWdueF9iZWFjb25faGRyIHsKLQlzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgcG93ZXI7IC8qIFR4IFN0YXRpb24gUG93ZXIgVGVtcGxhdGUgICovCi0JdTggcGh5X2hkcls2XTsJCS8qIFBIWSBIZHIgKi8KLQl1OCBmcmFtZV9sZW5fbG87CS8qIEZyYW1lIExlbmd0aCBMbyAqLwotCXU4IGZyYW1lX2xlbl9oaTsJLyogRnJhbWUgTGVuZ3RoIEhpICovCi0JdTggbWFjX2hkclsyNF07CQkvKiBNQUMgSGVhZGVyICovCi0JLyogRklYTUUgKi8KLQkvKiA4MDIuMTEoYWJnKSBiZWFjb24gKi8KLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi12b2lkIGhhc2hfd3JpdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBzdGFfaWQpOwotdm9pZCBoYXNoX2R1bXAoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggc3RhX2lkKTsKLXZvaWQgaGFzaF9yZWFkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiByZWdoaSwgdTMyIHJlZ2xvLCB1OCBzdGFfaWQpOwotdm9pZCBoYXNoX2RlbGV0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgcmVnaGksIHUzMiByZWdsbywgdTggc3RhX2lkKTsKLQotdm9pZCBnZXRfc3RhX3Bvd2VyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV9wb3dlciAqcG93ZXIsIHVuc2lnbmVkIGludCBzdGFfaWR4KTsKLXZvaWQgc2V0X3N0YV9wb3dlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgKnBvd2VyLAotCQkgICB1bnNpZ25lZCBpbnQgc3RhX2lkeCk7Ci12b2lkIGdldF9zdGFfdHhfd3Eoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3R4X3dxICp0eF93cSwKLQkJICAgdW5zaWduZWQgaW50IHN0YV9pZHgsIHVuc2lnbmVkIGludCB3cV9pZHgpOwotdm9pZCBzZXRfc3RhX3R4X3dxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV90eF93cSAqdHhfd3EsCi0JCSAgIHVuc2lnbmVkIGludCBzdGFfaWR4LCB1bnNpZ25lZCBpbnQgd3FfaWR4KTsKLXZvaWQgZ2V0X3N0YShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGEgKnN0YSwgdW5zaWduZWQgaW50IHN0YV9pZHgpOwotdm9pZCBzZXRfc3RhKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YSAqc3RhLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCk7Ci0KLXZvaWQgc3RhX3Bvd2VyX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG51bSk7Ci12b2lkIHN0YV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBudW0pOwotCi0jZW5kaWYgLyogQUdOWF9TVEFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTJmZWY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0KLXN0YXRpYyBjb25zdCB1MzIKLXR4X2Zpcl90YWJsZVtdID0geyAweDE5LCAweDVkLCAweGNlLCAweDE1MSwgMHgxYzMsIDB4MWZmLCAweDFlYSwgMHgxN2MsIDB4Y2YsCi0JCSAgIDB4MTksIDB4MzhlLCAweDM1MCwgMHgzNjIsIDB4M2FkLCAweDUsIDB4NDQsIDB4NTksIDB4NDksCi0JCSAgIDB4MjEsIDB4M2Y3LCAweDNlMCwgMHgzZTMsIDB4M2YzLCAweDAgfTsKLQotdm9pZCB0eF9maXJfdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHhfZmlyX3RhYmxlKTsgaSsrKQotCQlpb3dyaXRlMzIodHhfZmlyX3RhYmxlW2ldLCBjdGwgKyBBR05YX0ZJUl9CQVNFICsgaSo0KTsKLX0gLyogZmlyX3RhYmxlX3NldHVwICovCi0KLQotc3RhdGljIGNvbnN0IHUzMgotZ2Fpbl90YWJsZVtdID0geyAweDgsIDB4OCwgMHhmLCAweDEzLCAweDE3LCAweDFiLCAweDFmLCAweDIzLCAweDI3LCAweDJiLAotCQkgMHgyZiwgMHgzMywgMHgzNywgMHgzYiwgMHgzZiwgMHg0MywgMHg0NywgMHg0YiwgMHg0ZiwKLQkJIDB4NTMsIDB4NTcsIDB4NWIsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsCi0JCSAweDVmLCAweDVmLCAweDVmLCAweDVmIH07Ci0KLXZvaWQgZ2Fpbl90YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnYWluX3RhYmxlKTsgaSsrKSB7Ci0JCWlvd3JpdGUzMihnYWluX3RhYmxlW2ldLCBjdGwgKyBBR05YX0dBSU5fVEFCTEUgKyBpKjQpOwotCQlpb3dyaXRlMzIoZ2Fpbl90YWJsZVtpXSwgY3RsICsgQUdOWF9HQUlOX1RBQkxFICsgaSo0ICsgMHg4MCk7Ci0JfQotfSAvKiBnYWluX3RhYmxlX2luaXQgKi8KLQotdm9pZCBtb25pdG9yX2dhaW5fdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDB4NDQ7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHg2MSwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHg2MSwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotCWZvciAoaSA9IDB4NDQ7IGkgPCAweDY0OyBpICs9IDQpIHsKLQkJaW93cml0ZTMyKDB4NmUsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyBpKTsKLQkJaW93cml0ZTMyKDB4NmUsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyAweDIwMCArIGkpOwotCX0KLQlmb3IgKGkgPSAweDY0OyBpIDwgMHg5NDsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweDdhLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweDdhLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHg5NDsgaSA8IDB4ZGM7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHg4NywgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHg4NywgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotCWZvciAoaSA9IDB4ZGM7IGkgPCAweDE0ODsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweDk1LCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweDk1LCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHgxNDg7IGkgPCAweDFlODsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweGEyLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweGEyLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHgxZTg7IGkgPD0gMHgxZmM7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHhiMCwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHhiMCwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotfSAvKiBtb25pdG9yX2dhaW5fdGFibGVfaW5pdCAqLwotCi0KLXZvaWQgcm91dGluZ190YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdW5zaWduZWQgaW50IHR5cGUsIHN1YnR5cGU7Ci0JdTMyIHJlZzsKLQotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci0KLQlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgMHgzOyB0eXBlKyspIHsKLQkJZm9yIChzdWJ0eXBlID0gMDsgc3VidHlwZSA8IDB4MTA7IHN1YnR5cGUrKykgewotCQkJLyogMS4gU2V0IFJvdXRpbmcgdGFibGUgdG8gUi9XIGFuZCB0byBSZXR1cm4gc3RhdHVzIG9uIFJlYWQgKi8KLQkJCXJlZyA9ICh0eXBlIDw8IFJPVVRBQl9UWVBFX1NISUZUKSB8Ci0JCQkJKHN1YnR5cGUgPDwgUk9VVEFCX1NVQlRZUEVfU0hJRlQpOwotCQkJcmVnIHw9ICgxIDw8IFJPVVRBQl9SV19TSElGVCkgfCAoMSA8PCBST1VUQUJfU1RBVFVTX1NISUZUKTsKLQkJCWlmICh0eXBlID09IFJPVVRBQl9UWVBFX0RBVEEpIHsKLQkJCQkvKiBOVUxMIGdvZXMgdG8gUkZQICovCi0JCQkJaWYgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTCkKLS8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX1JGUDsgKi8KLQkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9DUFU7Ci0JCQkJLyogUU9TIE5VTEwgZ29lcyB0byBDUFUgKi8KLQkJCQllbHNlIGlmIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTEwpCi0JCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOwotCQkJCS8qIEFsbCBEYXRhIGFuZCBRT1MgZGF0YSBzdWJ0eXBlcyBnbyB0byBFbmNyeXB0aW9uICovCi0JCQkJZWxzZSBpZiAoKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfREFUQSkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX0RBVEFBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9EQVRBUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX0RBVEFQT0xMQUNLKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TREFUQSkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NEQVRBUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFBQ0tQT0xMKSkKLQkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9FTkNSWTsKLS8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsgKi8KLQkJCQkvKkRyb3AgTlVMTCBhbmQgUU9TIE5VTEwgYWNrLCBwb2xsIGFuZCBwb2xsIGFjayovCi0JCQkJZWxzZSBpZiAoKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTEFDSykgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTFBPTExBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NOVUxMUE9MTEFDSykpCi0vKgkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9EUk9QOyAqLwotCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVnIHw9IChST1VUQUJfUk9VVEVfQ1BVKTsKLQkJCX0KLQkJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX1JPVVRBQik7Ci0JCQkvKiBDaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgc3RhdHVzIGJpdCBjbGVhcmVkICovCi0JCQlyb3V0aW5nX3RhYmxlX2RlbGF5KCk7Ci0JCX0KLQl9Ci0JZW5hYmxlX3JlY2VpdmVyKHByaXYpOwotfSAvKiByb3V0aW5nX3RhYmxlX2luaXQgKi8KLQotdm9pZCB0eF9lbmdpbmVfbG9va3VwX3RibF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0gMjg7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4YjAwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQlmb3IgKGkgPSAzMjsgaSA8PSAxMjA7IGkgKz0gOCkgewotCQlpb3dyaXRlMzIoMHgxZTU4LCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCQlpb3dyaXRlMzIoMHhiMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkgKyA0KTsKLQl9Ci0KLQlmb3IgKGkgPSAxMjg7IGkgPD0gMTU2OyBpICs9IDQpCi0JCWlvd3JpdGUzMigweDk4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JZm9yIChpID0gMTYwOyBpIDw9IDI0ODsgaSArPSA4KSB7Ci0JCWlvd3JpdGUzMigweDE4NTgsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JCWlvd3JpdGUzMigweDk4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSArIDQpOwotCX0KLQotCWZvciAoaSA9IDI1NjsgaSA8PSAyODQ7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4OTgwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQlmb3IgKGkgPSAyODg7IGkgPD0gMzc2OyBpICs9IDgpIHsKLQkJaW93cml0ZTMyKDB4MWE1OCwgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQkJaW93cml0ZTMyKDB4MTg1OCwgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpICsgNCk7Ci0JfQotCi0JZm9yIChpID0gNTEyOyBpIDw9IDU0MDsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHhjMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCWZvciAoaSA9IDU0NDsgaSA8PSA2MzI7IGkgKz0gOCkgewotCQlpb3dyaXRlMzIoMHgyMDU4LCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCQlpb3dyaXRlMzIoMHhjMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkgKyA0KTsKLQl9Ci0KLQlmb3IgKGkgPSA2NDA7IGkgPD0gNjY4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigweGM4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JZm9yIChpID0gNjcyOyBpIDw9IDc2NDsgaSArPSA4KSB7Ci0JCWlvd3JpdGUzMigweDIyNTgsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JCWlvd3JpdGUzMigweGM4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSArIDQpOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjI2YjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgQUdOWF9UQUJMRV9IXwotI2RlZmluZSBBR05YX1RBQkxFX0hfCi0KLXZvaWQgdHhfZmlyX3RhYmxlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGdhaW5fdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgbW9uaXRvcl9nYWluX3RhYmxlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIHJvdXRpbmdfdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgdHhfZW5naW5lX2xvb2t1cF90YmxfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLQotI2VuZGlmIC8qIEFHTlhfVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJkYjQxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MzYgKzAsMCBAQAotLyoqCi0gKiBBaXJnbyBNSU1PIHdpcmVsZXNzIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBMaSBZYW5CbyA8ZHJlYW1mbHkyODFAZ21haWwuY29tPgotCi0gKiBUaGFua3MgZm9yIEplZmYgV2lsbGlhbXMgPGFuZ2VsYmFuZUBnbWFpbC5jb20+IGRvIHJldmVyc2UgZW5naW5lZXIKLSAqIHdvcmtzIGFuZCBwdWJsaXNoZWQgdGhlIFNQRUNTIGF0IGh0dHA6Ly9haXJnby53ZHdjb25zdWx0aW5nLm5ldC9teW1vaW4KLQotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlICJhZ254LmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKLQotdW5zaWduZWQgaW50IHJ4X2ZyYW1lX2NudDsKLS8qIHVuc2lnbmVkIGludCBsb2NhbF90eF9zZW50X2NudCA9IDA7ICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3J4X2VuZ2luZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWlvd3JpdGUzMigweDEwMCwgY3RsICsgQUdOWF9DSVJfUlhDVEwpOwotCS8qIFdhaXQgZm9yIFJYIENvbnRyb2wgdG8gaGF2ZSB0aGUgRGlzYWJsZSBSeCBJbnRlcnJ1cHQgKDB4MTAwKSBzZXQgKi8KLQlpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfcnhfZW5naW5lKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW93cml0ZTMyKDB4ODAsIGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKLQlpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci19Ci0KLWlubGluZSB2b2lkIGRpc2FibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWRpc2FibGVfcnhfZW5naW5lKHByaXYpOwotCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLQlyZWcgJj0gfjB4MjA7Ci0JaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotCWlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLX0KLQotaW5saW5lIHZvaWQgZW5hYmxlX3J4X2ludGVycnVwdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0KLQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENGRyk7Ci0JcmVnIHw9IDB4MjA7Ci0JaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotCWlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLQllbmFibGVfcnhfZW5naW5lKHByaXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnhfZGVzY19pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBpZHgpCi17Ci0Jc3RydWN0IGFnbnhfZGVzYyAqZGVzYyA9IHByaXYtPnJ4LmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnJ4LmluZm8gKyBpZHg7Ci0KLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0KLQlpbmZvLT5kbWFfbGVuID0gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEICsgc2l6ZW9mKHN0cnVjdCBhZ254X2hkcik7Ci0JaW5mby0+c2tiID0gZGV2X2FsbG9jX3NrYihpbmZvLT5kbWFfbGVuKTsKLQlpZiAoaW5mby0+c2tiID09IE5VTEwpCi0JCWFnbnhfYnVnKCJyZWZpbGwgZXJyIik7Ci0KLQlpbmZvLT5tYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiX3RhaWxfcG9pbnRlcihpbmZvLT5za2IpLAotCQkJCSAgICAgICBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGluZm8tPm1hcHBpbmcpOwotCS8qIFNldCB0aGUgb3duZXIgdG8gdGhlIGNhcmQgKi8KLQlkZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoYmUzMl90b19jcHUoZGVzYy0+ZnJhZykgfCBPV05FUik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByeF9kZXNjX3JlaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2luZm8gKmluZm8gPSBwcml2LT5yeC5pbmZvICsgaWR4OwotCi0JLyogQ2F1c2UgaWVlZTgwMjExIHdpbGwgZnJlZSB0aGUgc2tiIGJ1ZmZlciwgc28gd2UgbmVlZG4ndCB0byBmcmVlIGl0IGFnYWluPyEgKi8KLQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGluZm8tPm1hcHBpbmcsIGluZm8tPmRtYV9sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JcnhfZGVzY19pbml0KHByaXYsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByeF9kZXNjX3JldXNpbmcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+cnguZGVzYyArIGlkeDsKLQlzdHJ1Y3QgYWdueF9pbmZvICppbmZvID0gcHJpdi0+cnguaW5mbyArIGlkeDsKLQotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGluZm8tPm1hcHBpbmcpOwotCS8qIFNldCB0aGUgb3duZXIgdG8gdGhlIGNhcmQgKi8KLQlkZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoYmUzMl90b19jcHUoZGVzYy0+ZnJhZykgfCBPV05FUik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ4X2Rlc2NfZnJlZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2MgPSBwcml2LT5yeC5kZXNjICsgaWR4OwotCXN0cnVjdCBhZ254X2luZm8gKmluZm8gPSBwcml2LT5yeC5pbmZvICsgaWR4OwotCi0JQlVHX09OKCFkZXNjIHx8ICFpbmZvKTsKLQlpZiAoaW5mby0+bWFwcGluZykKLQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBpbmZvLT5tYXBwaW5nLCBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCWlmIChpbmZvLT5za2IpCi0JCWRldl9rZnJlZV9za2IoaW5mby0+c2tiKTsKLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0JbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX190eF9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBhZ254X2Rlc2MgKmRlc2MsIHN0cnVjdCBhZ254X2luZm8gKmluZm8pCi17Ci0JQlVHX09OKCFkZXNjIHx8ICFpbmZvKTsKLQkvKiBUT0RPIG1ha2Ugc3VyZSBtYXBwaW5nLCBza2IgYW5kIGxlbiBhcmUgY29uc2lzdGVuY3kgKi8KLQlpZiAoaW5mby0+bWFwcGluZykKLQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBpbmZvLT5tYXBwaW5nLAotCQkJCSBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpCi0JCWRldl9rZnJlZV9za2IoaW5mby0+c2tiKTsKLQotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4bV9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+dHhtLmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnR4bS5pbmZvICsgaWR4OwotCi0JX190eF9kZXNjX2ZyZWUocHJpdiwgZGVzYywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4ZF9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+dHhkLmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnR4ZC5pbmZvICsgaWR4OwotCi0JX190eF9kZXNjX2ZyZWUocHJpdiwgZGVzYywgaW5mbyk7Ci19Ci0KLWludCBmaWxsX3JpbmdzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JcHJpdi0+dHhkLmlkeF9zZW50ID0gcHJpdi0+dHhtLmlkeF9zZW50ID0gMDsKLQlwcml2LT5yeC5pZHggPSBwcml2LT50eG0uaWR4ID0gcHJpdi0+dHhkLmlkeCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnguc2l6ZTsgaSsrKQotCQlyeF9kZXNjX2luaXQocHJpdiwgaSk7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPnR4bS5zaXplOyBpKyspIHsKLQkJbWVtc2V0KHByaXYtPnR4bS5kZXNjICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpKTsKLQkJbWVtc2V0KHByaXYtPnR4bS5pbmZvICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPnR4ZC5zaXplOyBpKyspIHsKLQkJbWVtc2V0KHByaXYtPnR4ZC5kZXNjICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpKTsKLQkJbWVtc2V0KHByaXYtPnR4ZC5pbmZvICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pKTsKLQl9Ci0KLQkvKiBGSVhNRSBTZXQgdGhlIGNhcmQgUlggVFhNIGFuZCBUWEQgYWRkcmVzcyAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1JYQ01TVEFSVCwgcHJpdi0+cnguZG1hKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENNRU5ELCBwcml2LT50eG0uZG1hKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYTVNUQVJULCBwcml2LT50eG0uZG1hKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWE1FTkQsIHByaXYtPnR4ZC5kbWEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhEU1RBUlQsIHByaXYtPnR4ZC5kbWEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYREVORCwgcHJpdi0+dHhkLmRtYSArCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogcHJpdi0+dHhkLnNpemUpOwotCi0JLyogRklYTUUgUmVsaW5xdWlzaCBjb250cm9sIG9mIHJpbmdzIHRvIGNhcmQgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JcmVnICY9IH4weDgwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwsIHJlZyk7Ci0JcmV0dXJuIDA7Ci19IC8qIGZpbGxfcmluZ3MgKi8KLQotdm9pZCB1bmZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4LnNpemU7IGkrKykKLQkJcnhfZGVzY19mcmVlKHByaXYsIGkpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT50eG0uc2l6ZTsgaSsrKQotCQl0eG1fZGVzY19mcmVlKHByaXYsIGkpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT50eGQuc2l6ZTsgaSsrKQotCQl0eGRfZGVzY19mcmVlKHByaXYsIGkpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotfQotCi0vKiBFeHRyYWN0IHRoZSBiaXRyYXRlIG91dCBvZiBhIENDSyBQTENQIGhlYWRlci4KLSAgIGNvcHkgZnJvbSBiY200M3h4IGRyaXZlciAqLwotc3RhdGljIGlubGluZSB1OCBhZ254X3BsY3BfZ2V0X2JpdHJhdGVfY2NrKF9fYmUzMiAqcGh5aGRyXzExYikKLXsKLQkvKiBGSVhNRSAqLwotCXN3aXRjaCAoKih1OCAqKXBoeWhkcl8xMWIpIHsKLQljYXNlIDB4MEE6Ci0JCXJldHVybiAwOwotCWNhc2UgMHgxNDoKLQkJcmV0dXJuIDE7Ci0JY2FzZSAweDM3OgotCQlyZXR1cm4gMjsKLQljYXNlIDB4NkU6Ci0JCXJldHVybiAzOwotCX0KLQlhZ254X2J1ZygiV3JvbmcgcGxjcCByYXRlIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEZJWE1FICovCi1zdGF0aWMgaW5saW5lIHU4IGFnbnhfcGxjcF9nZXRfYml0cmF0ZV9vZmRtKF9fYmUzMiAqcGh5aGRyXzExZykKLXsKLQl1OCByYXRlID0gKih1OCAqKXBoeWhkcl8xMWcgJiAweEY7Ci0KLQlwcmludGsoUEZYICJHIG1vZGUgcmF0ZSBpcyAweCV4XG4iLCByYXRlKTsKLQlyZXR1cm4gcmF0ZTsKLX0KLQotLyogRklYTUUgKi8KLXN0YXRpYyB2b2lkIGdldF9yeF9zdGF0cyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9oZHIgKmhkciwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1OCAqcnNzaTsKLQl1MzIgbm9pc2U7Ci0JLyogRklYTUUganVzdCBmb3IgdGVzdCAqLwotCWludCBzbnIgPSA0MDsJCS8qIHNpZ25hbC10by1ub2lzZSByYXRpbyAqLwotCi0JbWVtc2V0KHN0YXQsIDAsIHNpemVvZigqc3RhdCkpOwotCS8qIFJTU0kgKi8KLQlyc3NpID0gKHU4ICopJmhkci0+cGh5X3N0YXRzX2xvOwotLyoJc3RhdC0+c3NpID0gKHJzc2lbMF0gKyByc3NpWzFdICsgcnNzaVsyXSkgLyAzOyAqLwotCS8qIE5vaXNlICovCi0Jbm9pc2UgPSBpb3JlYWQzMihjdGwgKyBBR05YX0dDUl9OT0lTRTApOwotCW5vaXNlICs9IGlvcmVhZDMyKGN0bCArIEFHTlhfR0NSX05PSVNFMSk7Ci0Jbm9pc2UgKz0gaW9yZWFkMzIoY3RsICsgQUdOWF9HQ1JfTk9JU0UyKTsKLQlzdGF0LT5ub2lzZSA9IG5vaXNlIC8gMzsKLQkvKiBTaWduYWwgcXVhbGl0eSAqLwotLyoJc25yID0gc3RhdC0+c3NpIC0gc3RhdC0+bm9pc2U7ICovCi0JaWYgKHNuciA+PSAwICYmIHNuciA8IDQwKQotCQlzdGF0LT5zaWduYWwgPSA1ICogc25yIC8gMjsKLQllbHNlIGlmIChzbnIgPj0gNDApCi0JCXN0YXQtPnNpZ25hbCA9IDEwMDsKLQllbHNlCi0JCXN0YXQtPnNpZ25hbCA9IDA7Ci0KLQotCWlmIChoZHItPl8xMWIwICYmICFoZHItPl8xMWcwKSB7Ci0JCXN0YXQtPnJhdGVfaWR4ID0gYWdueF9wbGNwX2dldF9iaXRyYXRlX2NjaygmaGRyLT5fMTFiMCk7Ci0JfSBlbHNlIGlmICghaGRyLT5fMTFiMCAmJiBoZHItPl8xMWcwKSB7Ci0JCXByaW50ayhQRlggIlJYOiBGb3VuZCBHIG1vZGUgcGFja2V0XG4iKTsKLQkJc3RhdC0+cmF0ZV9pZHggPSBhZ254X3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbSgmaGRyLT5fMTFnMCk7Ci0JfSBlbHNlCi0JCWFnbnhfYnVnKCJVbmtub3duIHBhY2tldHMgdHlwZSIpOwotCi0KLQlzdGF0LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQlzdGF0LT5mcmVxID0gYWdueF9jaGFubmVsc1twcml2LT5jaGFubmVsIC0gMV0uY2VudGVyX2ZyZXE7Ci0vKglzdGF0LT5hbnRlbm5hID0gMzsKLQlzdGF0LT5tYWN0aW1lID0gYmUzMl90b19jcHUoaGRyLT50aW1lX3N0YW1wKTsKLQlzdGF0LT5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbWJpbmVfaGRyX2ZyYWcoc3RydWN0IGllZWU4MDIxMV9oZHIgKmllZWVoZHIsCi0JCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdTE2IGZjdGw7Ci0JdW5zaWduZWQgaW50IGhkcmxlbjsKLQotCWZjdGwgPSBsZTE2X3RvX2NwdShpZWVlaGRyLT5mcmFtZV9jb250cm9sKTsKLQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjdGwpOwotCS8qIEZJWE1FICovCi0JaWYgKGhkcmxlbiA8ICgyKzIrNikvKm1pbmltdW0gaGRyKi8gfHwKLQkgICAgaGRybGVuID4gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaGRyIGxlbiBpcyAlZFxuIiwgaGRybGVuKTsKLQkJYWdueF9idWcoIldyb25nIGllZWU4MDIxMSBoZHIgZGV0ZWN0ZWQiKTsKLQl9Ci0Jc2tiX3B1c2goc2tiLCBoZHJsZW4pOwotCW1lbWNweShza2ItPmRhdGEsIGllZWVoZHIsIGhkcmxlbik7Ci19IC8qIGNvbWJpbmVfaGRyX2ZyYWcgKi8KLQotc3RhdGljIGlubGluZSBpbnQgYWdueF9wYWNrZXRfY2hlY2soc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfaGRyICphZ254aGRyLAotCQkJCSAgICB1bnNpZ25lZCBwYWNrZXRfbGVuKQotewotCWlmIChhZ254X2dldF9iaXRzKENSQ19GQUlMLCBDUkNfRkFJTF9TSElGVCwgYmUzMl90b19jcHUoYWdueGhkci0+cmVnMSkpID09IDEpIHsKLQkJcHJpbnRrKFBGWCAiUlg6IENSQyBjaGVjayBmYWlsXG4iKTsKLQkJZ290byBkcm9wOwotCX0KLQlpZiAocGFja2V0X2xlbiA+IDIwNDgpIHsKLQkJcHJpbnRrKFBGWCAiUlg6IFRvbyBsb25nIHBhY2tldCBkZXRlY3RlZFxuIik7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQkvKiBGSVhNRSBKdXN0IHVzYWJsZSBmb3IgUHJvbWlvdXMgTW9kZSwgZm9yIE1hbmFnZSBtb2RlIGV4Y2x1ZGUgRkNTICovCi0vKiAJaWYgKHBhY2tldF9sZW4gLSBzaXplb2YoKmFnbnhoZHIpIDwgRkNTX0xFTikgeyAqLwotLyogCQlwcmludGsoUEZYICJSWDogVG9vIHNob3J0IHBhY2tldCBkZXRlY3RlZFxuIik7ICovCi0vKiAJCWdvdG8gZHJvcDsgKi8KLS8qIAl9ICovCi0JcmV0dXJuIDA7Ci1kcm9wOgotCXByaXYtPnN0YXRzLmRvdDExRkNTRXJyb3JDb3VudCsrOwotCXJldHVybiAtMTsKLX0KLQotdm9pZCBoYW5kbGVfcnhfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGludCBsZW47Ci0vKglBR05YX1RSQUNFOyAqLwotCi0JZG8gewotCQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjOwotCQl1MzIgZnJhZzsKLQkJc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQkJc3RydWN0IGFnbnhfaGRyICpoZHI7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCXVuc2lnbmVkIGludCBpID0gcHJpdi0+cnguaWR4ICUgcHJpdi0+cnguc2l6ZTsKLQotCQlkZXNjID0gcHJpdi0+cnguZGVzYyArIGk7Ci0JCWZyYWcgPSBiZTMyX3RvX2NwdShkZXNjLT5mcmFnKTsKLQkJaWYgKGZyYWcgJiBPV05FUikKLQkJCWJyZWFrOwotCi0JCWluZm8gPSBwcml2LT5yeC5pbmZvICsgaTsKLQkJc2tiID0gaW5mby0+c2tiOwotCQloZHIgPSAoc3RydWN0IGFnbnhfaGRyICopKHNrYi0+ZGF0YSk7Ci0KLQkJbGVuID0gKGZyYWcgJiBQQUNLRVRfTEVOKSA+PiBQQUNLRVRfTEVOX1NISUZUOwotCQlpZiAoYWdueF9wYWNrZXRfY2hlY2socHJpdiwgaGRyLCBsZW4pID09IC0xKSB7Ci0JCQlyeF9kZXNjX3JldXNpbmcocHJpdiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlza2JfcHV0KHNrYiwgbGVuKTsKLQotCQlkbyB7Ci0JCQkJdTE2IGZjdGw7Ci0JCQlmY3RsID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciktPmZyYW1lX2NvbnRyb2wpOwotCQkJaWYgKChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpICE9IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pLyogJiYgIShmY3RsICYgSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpICovCi0JCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciwgIlJYIik7Ci0JCX0gd2hpbGUgKDApOwotCi0JCWlmIChoZHItPl8xMWIwICYmICFoZHItPl8xMWcwKSB7Ci0vKgkJCWludCBqOwotCQkJdTE2IGZjdGwgPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyKQotCQkJCQkgICAgICAgLT5mcmFtZV9jb250cm9sKTsKLQkJCWlmICggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gIElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7Ci0JCQkJYWdueF9wcmludF9yeF9oZHIoaGRyKTsKLQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7Ci0JCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIGopOwotCQkJfSAqLwotCi0JCQlnZXRfcnhfc3RhdHMocHJpdiwgaGRyLCAmc3RhdHVzKTsKLQkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJCWNvbWJpbmVfaGRyX2ZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyLCBza2IpOwotCQl9IGVsc2UgaWYgKCFoZHItPl8xMWIwICYmIGhkci0+XzExZzApIHsKLS8qCQkJaW50IGo7ICovCi0JCQlhZ254X3ByaW50X3J4X2hkcihoZHIpOwotCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOwotLyoJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIDApOwotCi0JCQlwcmludF9oZXhfZHVtcF9ieXRlcygiYWdueDogUlhfUEFDS0VUOiAiLCBEVU1QX1BSRUZJWF9OT05FLAotCQkJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4gKyA4KTsKLQotLyoJCQlpZiAoYWdueF9wbGNwX2dldF9iaXRyYXRlX29mZG0oJmhkci0+XzExZzApID09IDApICovCi0JCQlnZXRfcnhfc3RhdHMocHJpdiwgaGRyLCAmc3RhdHVzKTsKLQkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJCWNvbWJpbmVfaGRyX2ZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopCi0JCQkJCSAoKHZvaWQgKikmaGRyLT5tYWNfaGRyKSwgc2tiKTsKLS8qCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSwgIlJYIEciKTsgKi8KLQkJfSBlbHNlCi0JCQlhZ254X2J1ZygiVW5rbm93biBwYWNrZXRzIHR5cGUiKTsKLQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Ci0JCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBza2IpOwotCQlyeF9kZXNjX3JlaW5pdChwcml2LCBpKTsKLQotCX0gd2hpbGUgKHByaXYtPnJ4LmlkeCsrKTsKLX0gLyogaGFuZGxlX3J4X2lycSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX3R4X2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9yaW5nICpyaW5nKQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSByaW5nLT5pZHhfc2VudDsgaWR4IDwgcmluZy0+aWR4OyBpZHgrKykgewotCQl1bnNpZ25lZCBpbnQgaSA9IGlkeCAlIHJpbmctPnNpemU7Ci0JCXUzMiAgZnJhZzsKLQotCQlkZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JCWluZm8gPSByaW5nLT5pbmZvICsgaTsKLQotCQlmcmFnID0gYmUzMl90b19jcHUoZGVzYy0+ZnJhZyk7Ci0JCWlmIChmcmFnICYgT1dORVIpIHsKLQkJCWlmIChpbmZvLT50eXBlID09IEhFQURFUikKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQlhZ254X2J1ZygiVFggZXJyb3IiKTsKLQkJfQotCi0JCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgaW5mby0+bWFwcGluZywgaW5mby0+ZG1hX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJZG8gewotLyoJCQlpbnQgajsgKi8KLQkJCXNpemVfdCBsZW47Ci0JCQlsZW4gPSBpbmZvLT5za2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpICsgaW5mby0+aGRyX2xlbjsKLS8qCQkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KLS8qCQkJCWFnbnhfcHJpbnRfZGVzYyhkZXNjKTsgKi8KLQkJCQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpIHsKLS8qCQkJCQlhZ254X3ByaW50X3R4X2hkcigoc3RydWN0IGFnbnhfaGRyICopaW5mby0+c2tiLT5kYXRhKTsgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKgkJCQkJYWdueF9wcmludF9zdGEocHJpdiwgTE9DQUxfU1RBSUQpOyAqLwotLyoJCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKgkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgTE9DQUxfU1RBSUQsIDApOyAqLwotLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKgkJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgMCk7ICovCi0JCQkJfQotLyoJCQl9ICovCi0JCX0gd2hpbGUgKDApOwotCi0JCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLyoJCQlkdW1wX3R4bV9yZWdpc3RlcnMocHJpdik7Ci0JCQlkdW1wX3J4bV9yZWdpc3RlcnMocHJpdik7Ci0JCQlkdW1wX2JtX3JlZ2lzdGVycyhwcml2KTsKLQkJCWR1bXBfY2lyX3JlZ2lzdGVycyhwcml2KTsgKi8KLQkJfQotCi0JCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLyoJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOyAqLwotCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGkgPSBJRUVFODAyMTFfU0tCX0NCKGluZm8tPnNrYik7Ci0KLQkJCXNrYl9wdWxsKGluZm8tPnNrYiwgc2l6ZW9mKHN0cnVjdCBhZ254X2hkcikpOwotCQkJbWVtY3B5KHNrYl9wdXNoKGluZm8tPnNrYiwgaW5mby0+aGRyX2xlbiksICZpbmZvLT5oZHIsIGluZm8tPmhkcl9sZW4pOwotCi0vKgkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKilpbmZvLT5za2ItPmRhdGEsICJUWF9IQU5ETEUiKTsgKi8KLS8qIAkJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhZ254OiBUWF9IQU5ETEU6ICIsIERVTVBfUFJFRklYX05PTkUsICovCi0vKiAJCQkJCSAgICAgaW5mby0+c2tiLT5kYXRhLCBpbmZvLT5za2ItPmxlbik7ICovCi0KLQkJCWlmICghKHR4aS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpCi0JCQkJdHhpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0KLQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgaW5mby0+c2tiKTsKLQotCi0vKiAJCQkJaW5mby0+dHhfc3RhdHVzLnF1ZXVlX251bWJlciA9IChyaW5nLT5zaXplIC0gaSkgLyAyOyAqLwotLyogCQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgaW5mby0+c2tiLCAmKGluZm8tPnR4X3N0YXR1cykpOyAqLwotLyogCQkJfSBlbHNlICovCi0vKiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW5mby0+c2tiKTsgKi8KLQkJfQotCQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Ci0JCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQl9Ci0KLQlyaW5nLT5pZHhfc2VudCA9IGlkeDsKLQkvKiBUT0RPIGZpbGwgdGhlIHByaXYtPmxvd19sZXZlbF9zdGF0cyAqLwotCi0JLyogaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIDApOyAqLwotfQotCi12b2lkIGhhbmRsZV90eG1faXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JaGFuZGxlX3R4X2lycShwcml2LCAmcHJpdi0+dHhtKTsKLX0KLQotdm9pZCBoYW5kbGVfdHhkX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCWhhbmRsZV90eF9pcnEocHJpdiwgJnByaXYtPnR4ZCk7Ci19Ci0KLXZvaWQgaGFuZGxlX290aGVyX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotLyoJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7ICovCi0JdTMyIHN0YXR1cyA9IHByaXYtPmlycV9zdGF0dXM7Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWlmIChzdGF0dXMgJiBJUlFfVFhfQkVBQ09OKSB7Ci0JCWlvd3JpdGUzMihJUlFfVFhfQkVBQ09OLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBCZWFjb24gY29udHJvbCBpcyAwWCUuOFhcbiIsIGlvcmVhZDMyKGN0bCArIEFHTlhfVFhNX0JFQUNPTl9DVEwpKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBCZWFjb24gcnggZnJhbWUgbnVtOiAlZFxuIiwgcnhfZnJhbWVfY250KTsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9UWF9SRVRSWSkgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX1RYTV9SRVRSWVNUQUlEKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBSZXRyeSwgUkVUUlkgU1RBIElEIGlzICV4XG4iLCByZWcpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1RYX0FDVElWSVRZKQotCQlwcmludGsoUEZYICJJUlE6IFRYIEFjdGl2aXR5XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JYX0FDVElWSVRZKQotCQlwcmludGsoUEZYICJJUlE6IFJYIEFjdGl2aXR5XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JYX1gpCi0JCXByaW50ayhQRlggIklSUTogUlggWFxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9ZKSB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX01BU0spOwotCQlyZWcgJj0gfklSUV9SWF9ZOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKElSUV9SWF9ZLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBSWCBZXG4iKTsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9IQVNISElUKSAgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJcmVnICY9IH5JUlFfUlhfSEFTSEhJVDsKLQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCWlvd3JpdGUzMihJUlFfUlhfSEFTSEhJVCwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0JCXByaW50ayhQRlggIklSUTogUlggSGFzaCBIaXRcbiIpOwotCi0JfQotCWlmIChzdGF0dXMgJiBJUlFfUlhfRlJBTUUpIHsKLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCXJlZyAmPSB+SVJRX1JYX0ZSQU1FOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKElSUV9SWF9GUkFNRSwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0JCXByaW50ayhQRlggIklSUTogUlggRnJhbWVcbiIpOwotCQlyeF9mcmFtZV9jbnQrKzsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9FUlJfSU5UKSB7Ci0JCWlvd3JpdGUzMihJUlFfRVJSX0lOVCwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0vKgkJYWdueF9od19yZXNldChwcml2KTsgKi8KLQkJcHJpbnRrKFBGWCAiSVJROiBFcnJvciBJbnRlcnJ1cHRcbiIpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1RYX1FVRV9GVUxMKQotCQlwcmludGsoUEZYICJJUlE6IFRYIFdvcmtxdWV1ZSBGdWxsXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX0JBTkRNQU5fRVJSKQotCQlwcmludGsoUEZYICJJUlE6IEJhbmR3aWR0aCBNYW5hZ2VtZW50IEVycm9yXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1RYX0RJU0FCTEUpCi0JCXByaW50ayhQRlggIklSUTogVFggRGlzYWJsZVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9JVkFTRVNLRVkpCi0JCXByaW50ayhQRlggIklSUTogUlggSW52YWxpZCBTZXNzaW9uIEtleVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SRVBfVEhISVQpCi0JCXByaW50ayhQRlggIklSUTogUmVwbGF5IFRocmVzaG9sZCBIaXRcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfVElNRVIxKQotCQlwcmludGsoUEZYICJJUlE6IFRpbWVyMVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9USU1FUl9DTlQpCi0JCXByaW50ayhQRlggIklSUTogVGltZXIgQ291bnRcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfUEhZX0ZBU1RJTlQpCi0JCXByaW50ayhQRlggIklSUTogUGh5IEZhc3QgSW50ZXJydXB0XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1BIWV9TTE9XSU5UKQotCQlwcmludGsoUEZYICJJUlE6IFBoeSBTbG93IEludGVycnVwdFxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9PVEhFUikKLQkJcHJpbnRrKFBGWCAiSVJROiAweDgwMDAwMDAwXG4iKTsKLX0gLyogaGFuZGxlX290aGVyX2lycSAqLwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCByb3V0ZV9mbGFnX3NldChzdHJ1Y3QgYWdueF9oZHIgKnR4aGRyKQotewotLyoJdTMyIHJlZyA9IDA7ICovCi0KLQkvKiBGSVhNRSAqLwotLyoJcmVnID0gKDB4NyA8PCBST1VURV9DT01QUkVTU0lPTl9TSElGVCkgJiBST1VURV9DT01QUkVTU0lPTjsgKi8KLS8qCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIocmVnKTsgKi8KLQl0eGhkci0+cmVnNSA9ICgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCk7Ci0vKgl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKCgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCkpOyAqLwotLyoJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMigweDcgPDwgMHgwKTsgKi8KLX0KLQotLyogUmV0dXJuIDAgaWYgbm8gbWF0Y2ggKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9wb3dlcl9sZXZlbCh1bnNpZ25lZCBpbnQgcmF0ZSwgdW5zaWduZWQgaW50IGFudGVubmFzX251bSkKLXsKLQl1bnNpZ25lZCBpbnQgcG93ZXJfbGV2ZWw7Ci0KLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDEwOgotCWNhc2UgMjA6Ci0JY2FzZSA1NToKLQljYXNlIDYwOgotCWNhc2UgOTA6Ci0JY2FzZSAxMjA6Ci0JCXBvd2VyX2xldmVsID0gMjI7Ci0JCWJyZWFrOwotCi0JY2FzZSAxODA6Ci0JCXBvd2VyX2xldmVsID0gMTk7Ci0JCWJyZWFrOwotCi0JY2FzZSAyNDA6Ci0JCXBvd2VyX2xldmVsID0gMTg7Ci0JCWJyZWFrOwotCi0JY2FzZSAzNjA6Ci0JCXBvd2VyX2xldmVsID0gMTY7Ci0JCWJyZWFrOwotCi0JY2FzZSA0ODA6Ci0JCXBvd2VyX2xldmVsID0gMTU7Ci0JCWJyZWFrOwotCi0JY2FzZSA1NDA6Ci0JCXBvd2VyX2xldmVsID0gMTQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFnbnhfYnVnKCJFcnJvciByYXRlIHNldHRpbmdcbiIpOwotCX0KLQotCWlmIChwb3dlcl9sZXZlbCAmJiAoYW50ZW5uYXNfbnVtID09IDIpKQotCQlwb3dlcl9sZXZlbCAtPSAzOwotCi0JcmV0dXJuIHBvd2VyX2xldmVsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9hZ254X2hkcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9pbmZvICp0eF9pbmZvKQotewotCXN0cnVjdCBhZ254X2hkciAqdHhoZHIgPSAoc3RydWN0IGFnbnhfaGRyICopdHhfaW5mby0+c2tiLT5kYXRhOwotCXNpemVfdCBsZW47Ci0JdTE2IGZjID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikmdHhfaW5mby0+aGRyKTsKLQl1MzIgcmVnOwotCi0JbWVtc2V0KHR4aGRyLCAwLCBzaXplb2YoKnR4aGRyKSk7Ci0KLS8qCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgTE9DQUxfU1RBSUQpOyAqLwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgQlNTSURfU1RBSUQpOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktRVUVVRV9JRCwgV09SS1FVRVVFX0lEX1NISUZULCAwKTsKLQl0eGhkci0+cmVnNCA9IGNwdV90b19iZTMyKHJlZyk7Ci0KLQkvKiBTZXQgdGhlIEhhcmR3YXJlIFNlcXVlbmNlIE51bWJlciB0byAxPyAqLwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoU0VRVUVOQ0VfTlVNQkVSLCBTRVFVRU5DRV9OVU1CRVJfU0hJRlQsIDApOwotLyoJcmVnID0gYWdueF9zZXRfYml0cyhTRVFVRU5DRV9OVU1CRVIsIFNFUVVFTkNFX05VTUJFUl9TSElGVCwgMSk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoTUFDX0hEUl9MRU4sIE1BQ19IRFJfTEVOX1NISUZULCB0eF9pbmZvLT5oZHJfbGVuKTsKLQl0eGhkci0+cmVnMSA9IGNwdV90b19iZTMyKHJlZyk7Ci0JLyogU2V0IHRoZSBhZ254X2hkcidzIE1BQyBoZWFkZXIgKi8KLQltZW1jcHkodHhoZHItPm1hY19oZHIsICZ0eF9pbmZvLT5oZHIsIHR4X2luZm8tPmhkcl9sZW4pOwotCi0JcmVnID0gYWdueF9zZXRfYml0cyhBQ0ssIEFDS19TSElGVCwgMSk7Ci0vKglyZWcgPSBhZ254X3NldF9iaXRzKEFDSywgQUNLX1NISUZULCAwKTsgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMCk7Ci0vKglyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMSk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoUkVMQVksIFJFTEFZX1NISUZULCAwKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhUTSwgVE1fU0hJRlQsIDApOwotCXR4aGRyLT5yZWcwID0gY3B1X3RvX2JlMzIocmVnKTsKLQotCS8qIFNldCB0aGUgbG9uZyBhbmQgc2hvcnQgcmV0cnkgbGltaXRzICovCi0JdHhoZHItPnR4LnNob3J0X3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotCXR4aGRyLT50eC5sb25nX3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotCi0JLyogRklYTUUgKi8KLQlsZW4gPSB0eF9pbmZvLT5za2ItPmxlbiAtIHNpemVvZigqdHhoZHIpICsgdHhfaW5mby0+aGRyX2xlbiArIEZDU19MRU47Ci0JaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKQotCQlsZW4gKz0gODsKLQlsZW4gPSAyMzk4OwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoRlJBR19TSVpFLCBGUkFHX1NJWkVfU0hJRlQsIGxlbik7Ci0JbGVuID0gdHhfaW5mby0+c2tiLT5sZW4gLSBzaXplb2YoKnR4aGRyKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhQQVlMT0FEX0xFTiwgUEFZTE9BRF9MRU5fU0hJRlQsIGxlbik7Ci0JdHhoZHItPnJlZzMgPSBjcHVfdG9fYmUzMihyZWcpOwotCi0Jcm91dGVfZmxhZ19zZXQodHhoZHIpOwotfSAvKiBmaWxsX2hkciAqLwotCi1zdGF0aWMgdm9pZCB0eG1fcG93ZXJfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpKQotewotCXN0cnVjdCBhZ254X3N0YV9wb3dlciBwb3dlcjsKLQl1MzIgcmVnOwotCi0JLyogRklYTUUgKi8KLQlpZiAodHhpLT5jb250cm9sLnJhdGVzWzBdLmlkeCA8IDApIHsKLQkJLyogRm9yIEIgbW9kZSBTaG9ydCBQcmVhbWJsZSAqLwotCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExQl9TSE9SVCk7Ci0vKgkJY29udHJvbC0+dHhfcmF0ZSA9IC1jb250cm9sLT50eF9yYXRlOyAqLwotCX0gZWxzZQotCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExRyk7Ci0vKgkJcmVnID0gYWdueF9zZXRfYml0cyhQSFlfTU9ERSwgUEhZX01PREVfU0hJRlQsIEFHTlhfTU9ERV84MDIxMUJfTE9ORyk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoU0lHTkFMLCBTSUdOQUxfU0hJRlQsIDB4Qik7Ci0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoUkFURSwgUkFURV9TSElGVCwgMHhCKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMTUpOyAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMjApOwotCS8qIGlmIHJhdGUgPCAxMU0gc2V0IGl0IHRvIDAgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhOVU1fVFJBTlNNSVRURVJTLCBOVU1fVFJBTlNNSVRURVJTX1NISUZULCAxKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKEVEQ0YsIEVEQ0ZfU0hJRlQsIDEpOyAqLwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoVElGUywgVElGU19TSElGVCwgMSk7ICovCi0KLQlwb3dlci5yZWcgPSByZWc7Ci0vKglwb3dlci5yZWcgPSBjcHVfdG9fbGUzMihyZWcpOyAqLwotCi0vKglzZXRfc3RhX3Bvd2VyKHByaXYsICZwb3dlciwgTE9DQUxfU1RBSUQpOyAqLwotCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBCU1NJRF9TVEFJRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHR4X3BhY2tldF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXVuc2lnbmVkIGludCBpZWVlX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JaWYgKHNrYi0+bGVuID4gMjA0OCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJsZW5ndGggaXMgJWRcbiIsIHNrYi0+bGVuKTsKLQkJYWdueF9idWcoIlRvbyBsb25nIFRYIHNrYiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCS8qIEZJWE1FICovCi0JaWYgKHNrYi0+bGVuID09IGllZWVfbGVuKSB7Ci0JCXByaW50ayhQRlggIkEgc3RyYW5nZSBUWCBwYWNrZXRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JCS8qIHR4X2ZhaWxlX2lycXNhZmUoKTsgKi8KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19hZ254X3R4KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IGFnbnhfcmluZyAqcmluZykKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpoZHJfZGVzYywgKmZyYWdfZGVzYzsKLQlzdHJ1Y3QgYWdueF9pbmZvICpoZHJfaW5mbywgKmZyYWdfaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFRoZSBSWCBpbnRlcnJ1cHQgbmVlZCBiZSBEaXNhYmxlIHVudGlsIHRoaXMgVFggcGFja2V0Ci0JICAgaXMgaGFuZGxlZCBpbiB0aGUgbmV4dCB0eCBpbnRlcnJ1cHQgKi8KLQlkaXNhYmxlX3J4X2ludGVycnVwdChwcml2KTsKLQotCWkgPSByaW5nLT5pZHg7Ci0JcmluZy0+aWR4ICs9IDI7Ci0vKiAgIAlpZiAocHJpdi0+dHhtX2lkeCAtIHByaXYtPnR4bV9pZHhfc2VudCA9PSBBR05YX1RYTV9SSU5HX1NJWkUgLSAyKSAqLwotLyogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShwcml2LT5odywgMCk7ICovCi0KLQkvKiBTZXQgYWdueCBoZWFkZXIncyBpbmZvIGFuZCBkZXNjICovCi0JaSAlPSByaW5nLT5zaXplOwotCWhkcl9kZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JaGRyX2luZm8gPSByaW5nLT5pbmZvICsgaTsKLQloZHJfaW5mby0+aGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JbWVtY3B5KCZoZHJfaW5mby0+aGRyLCBza2ItPmRhdGEsIGhkcl9pbmZvLT5oZHJfbGVuKTsKLQotCS8qIEFkZCB0aGUgYWdueCBoZWFkZXIgdG8gdGhlIGZyb250IG9mIHRoZSBTS0IgKi8KLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpIC0gaGRyX2luZm8tPmhkcl9sZW4pOwotCi0JaGRyX2luZm8tPnR4aSA9IHR4aTsKLQloZHJfaW5mby0+ZG1hX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpOwotCWhkcl9pbmZvLT5za2IgPSBza2I7Ci0JaGRyX2luZm8tPnR5cGUgPSBIRUFERVI7Ci0JZmlsbF9hZ254X2hkcihwcml2LCBoZHJfaW5mbyk7Ci0JaGRyX2luZm8tPm1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCi0JCQkJCSAgIGhkcl9pbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlkbyB7Ci0JCXUzMiBmcmFnID0gMDsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKEZJUlNUX0ZSQUcsIEZJUlNUX0ZSQUdfU0hJRlQsIDEpOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoTEFTVF9GUkFHLCBMQVNUX0ZSQUdfU0hJRlQsIDApOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoUEFDS0VUX0xFTiwgUEFDS0VUX0xFTl9TSElGVCwgc2tiLT5sZW4pOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoRklSU1RfRlJBR19MRU4sIEZJUlNUX0ZSQUdfTEVOX1NISUZULCAxKTsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKE9XTkVSLCBPV05FUl9TSElGVCwgMSk7Ci0JCWhkcl9kZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoZnJhZyk7Ci0JfSB3aGlsZSAoMCk7Ci0JaGRyX2Rlc2MtPmRtYV9hZGRyID0gY3B1X3RvX2JlMzIoaGRyX2luZm8tPm1hcHBpbmcpOwotCi0KLQkvKiBTZXQgRnJhZydzIGluZm8gYW5kIGRlc2MgKi8KLQlpID0gKGkgKyAxKSAlIHJpbmctPnNpemU7Ci0JZnJhZ19kZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JZnJhZ19pbmZvID0gcmluZy0+aW5mbyArIGk7Ci0JbWVtY3B5KGZyYWdfaW5mbywgaGRyX2luZm8sIHNpemVvZihzdHJ1Y3QgYWdueF9pbmZvKSk7Ci0JZnJhZ19pbmZvLT50eXBlID0gUEFDS0VUOwotCWZyYWdfaW5mby0+ZG1hX2xlbiA9IHNrYi0+bGVuIC0gaGRyX2luZm8tPmRtYV9sZW47Ci0JZnJhZ19pbmZvLT5tYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhICsgaGRyX2luZm8tPmRtYV9sZW4sCi0JCQkJCSAgICBmcmFnX2luZm8tPmRtYV9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWRvIHsKLQkJdTMyIGZyYWcgPSAwOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoRklSU1RfRlJBRywgRklSU1RfRlJBR19TSElGVCwgMCk7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhMQVNUX0ZSQUcsIExBU1RfRlJBR19TSElGVCwgMSk7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhQQUNLRVRfTEVOLCBQQUNLRVRfTEVOX1NISUZULCBza2ItPmxlbik7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhTVUJfRlJBR19MRU4sIFNVQl9GUkFHX0xFTl9TSElGVCwgZnJhZ19pbmZvLT5kbWFfbGVuKTsKLQkJZnJhZ19kZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoZnJhZyk7Ci0JfSB3aGlsZSAoMCk7Ci0JZnJhZ19kZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGZyYWdfaW5mby0+bWFwcGluZyk7Ci0KLQl0eG1fcG93ZXJfc2V0KHByaXYsIHR4aSk7Ci0KLS8qCWRvIHsgKi8KLS8qCQlpbnQgajsgKi8KLS8qCQlzaXplX3QgbGVuOyAqLwotLyoJCWxlbiA9IHNrYi0+bGVuIC0gaGRyX2luZm8tPmRtYV9sZW4gKyBoZHJfaW5mby0+aGRyX2xlbjsgICovCi0vKgkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KLS8qCQkJYWdueF9wcmludF9kZXNjKGhkcl9kZXNjKTsgKi8KLS8qCQkJYWdueF9wcmludF9kZXNjKGZyYWdfZGVzYyk7ICovCi0vKgkJCWFnbnhfcHJpbnRfdHhfaGRyKChzdHJ1Y3QgYWdueF9oZHIgKilza2ItPmRhdGEpOyAqLwotLyoJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKgkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIExPQ0FMX1NUQUlELCBqKTsgKi8KLS8qCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgQlNTSURfU1RBSUQpOyAqLwotLyoJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKgkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKgkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgaik7ICovCi0vKgkJCX0gKi8KLS8qCX0gd2hpbGUgKDApOyAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JLyogRklYTUUgdWdseSBjb2RlICovCi0JLyogVHJpZ2dlciBUWE0gKi8KLQlkbyB7Ci0JCXUzMiByZWc7Ci0JCXJlZyA9IChpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9UWE1DVEwpKTsKLQkJcmVnIHw9IDB4ODsKLQkJaW93cml0ZTMyKChyZWcpLCBwcml2LT5jdGwgKyBBR05YX0NJUl9UWE1DVEwpOwotCX0gd2hpbGUgKDApOwotCi0JLyogVHJpZ2dlciBUWEQgKi8KLQlkbyB7Ci0JCXUzMiByZWc7Ci0JCXJlZyA9IChpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9UWERDVEwpKTsKLQkJcmVnIHw9IDB4ODsKLQkJaW93cml0ZTMyKChyZWcpLCBwcml2LT5jdGwgKyBBR05YX0NJUl9UWERDVEwpOwotCX0gd2hpbGUgKDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBfYWdueF90eChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXUxNiBmY3RsOwotCi0JaWYgKHR4X3BhY2tldF9jaGVjayhza2IpKQotCQlyZXR1cm4gMDsKLQotLyoJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFnbng6IFRYX1BBQ0tFVDogIiwgRFVNUF9QUkVGSVhfTk9ORSwgKi8KLS8qCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsgKi8KLQotCWZjdGwgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilza2ItPmRhdGEpKTsKLQotCWlmICgoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKLQkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eGQpOwotCWVsc2UKLQkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eG0pOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FjNDE1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0jaWZuZGVmIEFHTlhfWE1JVF9IXwotI2RlZmluZSBBR05YX1hNSVRfSF8KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi1zdHJ1Y3QgYWdueF9wcml2OwotCi1zdGF0aWMgaW5saW5lIHUzMiBhZ254X3NldF9iaXRzKHUzMiBtYXNrLCB1OCBzaGlmdCwgdTMyIHZhbHVlKQotewotCXJldHVybiAodmFsdWUgPDwgc2hpZnQpICYgbWFzazsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgYWdueF9nZXRfYml0cyh1MzIgbWFzaywgdTggc2hpZnQsIHUzMiB2YWx1ZSkKLXsKLQlyZXR1cm4gKHZhbHVlICYgbWFzaykgPj4gc2hpZnQ7Ci19Ci0KLQotc3RydWN0IGFnbnhfcnggewotCV9fYmUxNiByeF9wYWNrZXRfZHVyYXRpb247IC8qICBSWCBQYWNrZXQgRHVyYXRpb24gKi8KLQlfX2JlMTYgcmVwbGF5X2NudDsJLyogUmVwbGF5IENvdW50ICovCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi1zdHJ1Y3QgYWdueF90eCB7Ci0JdTggbG9uZ19yZXRyeV9saW1pdDsgLyogTG9uZyBSZXRyeSBMaW1pdCAqLwotCXU4IHNob3J0X3JldHJ5X2xpbWl0OyAvKiBTaG9ydCBSZXRyeSBMaW1pdCAqLwotCXU4IGxvbmdfcmV0cnlfY250OwkvKiBMb25nIFJldHJ5IENvdW50ICovCi0JdTggc2hvcnRfcmV0cnlfY250OyAvKiBTaG9ydCBSZXRyeSBDb3VudCAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotLyogQ29weSBmcm9tIGJjbTQzeHggKi8KLSNkZWZpbmUgUDREX0JZVDNTKG1hZ2ljLCBucl9ieXRlcykgICAgICB1OCBfX3A0ZGRpbmcjI21hZ2ljW25yX2J5dGVzXQotI2RlZmluZSBQNERfQllURVMobGluZSwgbnJfYnl0ZXMpICAgICAgIFA0RF9CWVQzUyhsaW5lLCBucl9ieXRlcykKLSNkZWZpbmUgUEFEX0JZVEVTKG5yX2J5dGVzKSAgICAgICAgICAgICBQNERfQllURVMoX19MSU5FX18sIG5yX2J5dGVzKQotCi0jZGVmaW5lIFA0RF9CSVQzUyhtYWdpYywgbnJfYml0cykgICAgICAgX19iZTMyIF9fcGFkZGluZyMjbWFnaWM6bnJfYml0cwotI2RlZmluZSBQNERfQklUUyhsaW5lLCBucl9iaXRzKSAgICAgICAgIFA0RF9CSVQzUyhsaW5lLCBucl9iaXRzKQotI2RlZmluZSBQQURfQklUUyhucl9iaXRzKQkgICAgICAgIFA0RF9CSVRTKF9fTElORV9fLCBucl9iaXRzKQotCi0KLXN0cnVjdCBhZ254X2hkciB7Ci0JX19iZTMyIHJlZzA7Ci0jZGVmaW5lIFJUUwkJICAgICAgICAweDgwMDAwMDAwIC8qIFJUUyAqLwotI2RlZmluZSBSVFNfU0hJRlQJCTMxCi0jZGVmaW5lIE1VTFRJQ0FTVAkgICAgICAgIDB4NDAwMDAwMDAgLyogbXVsdGljYXN0ICovCi0jZGVmaW5lIE1VTFRJQ0FTVF9TSElGVAkJMzAKLSNkZWZpbmUgQUNLCQkJMHgzMDAwMDAwMCAvKiBBQ0sgKi8KLSNkZWZpbmUgQUNLX1NISUZUCQkyOAotI2RlZmluZSBUTQkJCTB4MDgwMDAwMDAgLyogVE0gKi8KLSNkZWZpbmUgVE1fU0hJRlQJCTI3Ci0jZGVmaW5lIFJFTEFZCQkJMHgwNDAwMDAwMCAvKiBSZWxheSAqLwotI2RlZmluZSBSRUxBWV9TSElGVAkJMjYKLS8qIAlQQURfQklUUyg0KTsgKi8KLSNkZWZpbmUgUkVWSVNFRF9GQ1MJCTB4MDAzODAwMDAgLyogcmV2aXNlZCBGQ1MgKi8KLSNkZWZpbmUgUkVWSVNFRF9GQ1NfU0hJRlQJMTkKLSNkZWZpbmUgTkVYVF9CVUZGRVJfQUREUgkweDAwMDdGRkZGIC8qIE5leHQgQnVmZmVyIEFkZHJlc3MgKi8KLSNkZWZpbmUgTkVYVF9CVUZGRVJfQUREUl9TSElGVAkwCi0KLQlfX2JlMzIgcmVnMTsKLSNkZWZpbmUgTUFDX0hEUl9MRU4JCTB4RkMwMDAwMDAgLyogTUFDIEhlYWRlciBMZW5ndGggICovCi0jZGVmaW5lIE1BQ19IRFJfTEVOX1NISUZUCTI2Ci0jZGVmaW5lIERVUkFUSU9OX09WRVJJREUJMHgwMjAwMDAwMCAvKiBEdXJhdGlvbiBPdmVycmlkZSAqLwotI2RlZmluZSBEVVJBVElPTl9PVkVSSURFX1NISUZUCTI1Ci0jZGVmaW5lIFBIWV9IRFJfT1ZFUklERQkJMHgwMTAwMDAwMCAvKiBQSFkgSGVhZGVyIE92ZXJyaWRlICovCi0jZGVmaW5lIFBIWV9IRFJfT1ZFUklERV9TSElGVAkyNAotI2RlZmluZSBDUkNfRkFJTAkJMHgwMDgwMDAwMCAvKiBDUkMgZmFpbCAqLwotI2RlZmluZSBDUkNfRkFJTF9TSElGVAkJMjMKLS8qCVBBRF9CSVRTKDEpOyAqLwotI2RlZmluZSBTRVFVRU5DRV9OVU1CRVIJCTB4MDAyMDAwMDAgLyogU2VxdWVuY2UgTnVtYmVyICovCi0jZGVmaW5lIFNFUVVFTkNFX05VTUJFUl9TSElGVAkyMQotLyoJUEFEX0JJVFMoMik7ICovCi0jZGVmaW5lIEJVRkZfSEVBRF9BRERSCQkweDAwMDdGRkZGIC8qIEJ1ZmZlciBIZWFkIEFkZHJlc3MgKi8KLSNkZWZpbmUgQlVGRl9IRUFEX0FERFJfU0hJRlQJMAotCi0JX19iZTMyIHJlZzI7Ci0jZGVmaW5lIFBEVV9DT1VOVAkJMHhGQzAwMDAwMCAvKiBQRFUgQ291bnQgKi8KLSNkZWZpbmUgUERVX0NPVU5UX1NISUZUCQkyNgotLyogCVBBRF9CSVRTKDMpOyAqLwotI2RlZmluZSBXRVBfS0VZCQkJMHgwMDYwMDAwMCAvKiBXRVAgS2V5ICMgKi8KLSNkZWZpbmUgV0VQX0tFWV9TSElGVAkJMjEKLSNkZWZpbmUgVVNFU19XRVBfS0VZCQkweDAwMTAwMDAwIC8qIFVzZXMgV0VQIEtleSAqLwotI2RlZmluZSBVU0VTX1dFUF9LRVlfU0hJRlQJMjAKLSNkZWZpbmUgS0VFUF9BTElWRQkJMHgwMDA4MDAwMCAvKiBLZWVwIGFsaXZlICovCi0jZGVmaW5lIEtFRVBfQUxJVkVfU0hJRlQJMTkKLSNkZWZpbmUgQlVGRl9UQUlMX0FERFIJCTB4MDAwN0ZGRkYgLyogQnVmZmVyIFRhaWwgQWRkcmVzcyAqLwotI2RlZmluZSBCVUZGX1RBSUxfQUREUl9TSElGVAkwCi0KLQlfX2JlMzIgcmVnMzsKLSNkZWZpbmUgQ1RTXzExRwkJCTB4ODAwMDAwMDAJLyogQ1RTIGluIDExZyAqLwotI2RlZmluZSBDVFNfMTFHX1NISUZUCQkzMQotI2RlZmluZSBSVFNfMTFHCQkJMHg0MDAwMDAwMAkvKiBSVFMgaW4gMTFnICovCi0jZGVmaW5lIFJUU18xMUdfU0hJRlQJCTMwCi0vKiBQQURfQklUUygyKTsgKi8KLSNkZWZpbmUgRlJBR19TSVpFCQkweDBGRkYwMDAwCS8qIGZyYWdtZW50IHNpemUgKi8KLSNkZWZpbmUgRlJBR19TSVpFX1NISUZUCQkxNgotI2RlZmluZSBQQVlMT0FEX0xFTgkJMHgwMDAwRkZGMAkvKiBwYXlsb2FkIGxlbmd0aCAqLwotI2RlZmluZSBQQVlMT0FEX0xFTl9TSElGVAk0Ci0jZGVmaW5lIEZSQUdfTlVNCQkweDAwMDAwMDBGCS8qIG51bWJlciBvZiBmcmFncyAqLwotI2RlZmluZSBGUkFHX05VTV9TSElGVAkJMAotCi0JX19iZTMyIHJlZzQ7Ci0vKiAJUEFEX0JJVFMoNCk7ICovCi0jZGVmaW5lIFJFTEFZX1NUQUlECQkweDBGRkYwMDAwIC8qIHJlbGF5U3RhbGQgKi8KLSNkZWZpbmUgUkVMQVlfU1RBSURfU0hJRlQJMTYKLSNkZWZpbmUgU1RBVElPTl9JRAkJMHgwMDAwRkZGMCAvKiBTdGF0aW9uIElEICovCi0jZGVmaW5lIFNUQVRJT05fSURfU0hJRlQJNAotI2RlZmluZSBXT1JLUVVFVUVfSUQJCTB4MDAwMDAwMEYgLyogV29ya3F1ZXVlIElEICovCi0jZGVmaW5lIFdPUktRVUVVRV9JRF9TSElGVAkwCi0KLQkvKiBGSVhNRSB0aGlzIHJlZ2lzdGVyIG1heWJlIGlzIExFPyAqLwotCV9fYmUzMiByZWc1OwotLyogCVBBRF9CSVRTKDQpOyAqLwotI2RlZmluZSBST1VURV9IT1NUCQkweDBGMDAwMDAwCi0jZGVmaW5lIFJPVVRFX0hPU1RfU0hJRlQJMjQKLSNkZWZpbmUgUk9VVEVfQ0FSRF9DUFUJCTB4MDBGMDAwMDAKLSNkZWZpbmUgUk9VVEVfQ0FSRF9DUFVfU0hJRlQJMjAKLSNkZWZpbmUgUk9VVEVfRU5DUllQVElPTgkweDAwMEYwMDAwCi0jZGVmaW5lIFJPVVRFX0VOQ1JZUFRJT05fU0hJRlQJMTYKLSNkZWZpbmUgUk9VVEVfVFgJCTB4MDAwMEYwMDAKLSNkZWZpbmUgUk9VVEVfVFhfU0hJRlQJCTEyCi0jZGVmaW5lIFJPVVRFX1JYMQkJMHgwMDAwMEYwMAotI2RlZmluZSBST1VURV9SWDFfU0hJRlQJCTgKLSNkZWZpbmUgUk9VVEVfUlgyCQkweDAwMDAwMEYwCi0jZGVmaW5lIFJPVVRFX1JYMl9TSElGVAkJNAotI2RlZmluZSBST1VURV9DT01QUkVTU0lPTgkweDAwMDAwMDBGCi0jZGVmaW5lIFJPVVRFX0NPTVBSRVNTSU9OX1NISUZUIDAKLQotCV9fYmUzMiBfMTFnMDsJCQkvKiAxMWcgKi8KLQlfX2JlMzIgXzExZzE7CQkJLyogMTFnICovCi0JX19iZTMyIF8xMWIwOwkJCS8qIDExYiAqLwotCV9fYmUzMiBfMTFiMTsJCQkvKiAxMWIgKi8KLQl1OCBtYWNfaGRyWzMyXTsJCQkvKiBNQUMgaGVhZGVyICovCi0KLQlfX2JlMTYgcnRzX2R1cmF0aW9uOwkJLyogUlRTIGR1cmF0aW9uICovCi0JX19iZTE2IGxhc3RfZHVyYXRpb247CQkvKiBMYXN0IGR1cmF0aW9uICovCi0JX19iZTE2IHNlY19sYXN0X2R1cmF0aW9uOwkvKiBTZWNvbmQgdG8gTGFzdCBkdXJhdGlvbiAqLwotCV9fYmUxNiBvdGhlcl9kdXJhdGlvbjsJCS8qIE90aGVyIGR1cmF0aW9uICovCi0JX19iZTE2IHR4X2xhc3RfZHVyYXRpb247CS8qIFRYIExhc3QgZHVyYXRpb24gKi8KLQlfX2JlMTYgdHhfb3RoZXJfZHVyYXRpb247CS8qIFRYIE90aGVyIER1cmF0aW9uICovCi0JX19iZTE2IGxhc3RfMTFnX2xlbjsJCS8qIExlbmd0aCBvZiBsYXN0IDExZyAqLwotCV9fYmUxNiBvdGhlcl8xMWdfbGVuOwkJLyogTGVuZ2h0IG9mIG90aGVyIDExZyAqLwotCi0JX19iZTE2IGxhc3RfMTFiX2xlbjsJCS8qIExlbmd0aCBvZiBsYXN0IDExYiAqLwotCV9fYmUxNiBvdGhlcl8xMWJfbGVuOwkJLyogTGVuZ2h0IG9mIG90aGVyIDExYiAqLwotCi0KLQlfX2JlMTYgcmVnNjsKLSNkZWZpbmUgTUJGCQkJMHhGMDAwIC8qIG1iZiAqLwotI2RlZmluZSBNQkZfU0hJRlQJCTEyCi0jZGVmaW5lIFJTVkQ0CQkJMHgwRkZGIC8qIHJzdmQ0ICovCi0jZGVmaW5lIFJTVkQ0X1NISUZUCQkwCi0KLQlfX2JlMTYgcnhfZnJhZ19zdGF0OwkvKiBSWCBmcmFnbWVudGF0aW9uIHN0YXR1cyAqLwotCi0JX19iZTMyIHRpbWVfc3RhbXA7CS8qIFRpbWVTdGFtcCAqLwotCV9fYmUzMiBwaHlfc3RhdHNfaGk7CS8qIFBIWSBzdGF0cyBoaSAqLwotCV9fYmUzMiBwaHlfc3RhdHNfbG87CS8qIFBIWSBzdGF0cyBsbyAqLwotCV9fYmUzMiBtaWNfa2V5MDsJLyogTUlDIGtleSAwICovCi0JX19iZTMyIG1pY19rZXkxOwkvKiBNSUMga2V5IDEgKi8KLQotCXVuaW9uIHsJCQkvKiBSWC9UWCBVbmlvbiAqLwotCQlzdHJ1Y3QgYWdueF9yeCByeDsKLQkJc3RydWN0IGFnbnhfdHggdHg7Ci0JfTsKLQotCXU4IHJ4X2NoYW5uZWw7CQkvKiBSZWNpZXZlIENoYW5uZWwgKi8KLQlQQURfQllURVMoMyk7Ci0KLQl1OCByZXNlcnZlZFs0XTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLXN0cnVjdCBhZ254X2Rlc2MgewotI2RlZmluZSBQQUNLRVRfTEVOCQkweEZGRjAwMDAwCi0jZGVmaW5lIFBBQ0tFVF9MRU5fU0hJRlQJMjAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBGSVJTVF9QQUNLRVRfTUFTSwkweDAwMDgwMDAwCi0jZGVmaW5lIEZJUlNUX1BBQ0tFVF9NQVNLX1NISUZUCTE5Ci0jZGVmaW5lIEZJUlNUX1JFU0VSVjIJCTB4MDAwNDAwMDAKLSNkZWZpbmUgRklSU1RfUkVTRVJWMl9TSElGVAkxOAotI2RlZmluZSBGSVJTVF9US0lQX0VSUk9SCTB4MDAwMjAwMDAKLSNkZWZpbmUgRklSU1RfVEtJUF9FUlJPUl9TSElGVAkxNwotI2RlZmluZSBGSVJTVF9US0lQX1BBQ0tFVAkweDAwMDEwMDAwCi0jZGVmaW5lIEZJUlNUX1RLSVBfUEFDS0VUX1NISUZUCTE2Ci0jZGVmaW5lIEZJUlNUX1JFU0VSVjEJCTB4MDAwMEYwMDAKLSNkZWZpbmUgRklSU1RfUkVTRVJWMV9TSElGVAkxMgotI2RlZmluZSBGSVJTVF9GUkFHX0xFTgkJMHgwMDAwMEZGOAotI2RlZmluZSBGSVJTVF9GUkFHX0xFTl9TSElGVAkzCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgU1VCX1JFU0VSVjIJCTB4MDAwYzAwMDAKLSNkZWZpbmUgU1VCX1JFU0VSVjJfU0hJRlQJMTgKLSNkZWZpbmUgU1VCX1RLSVBfRVJST1IJCTB4MDAwMjAwMDAKLSNkZWZpbmUgU1VCX1RLSVBfRVJST1JfU0hJRlQJMTcKLSNkZWZpbmUgU1VCX1RLSVBfUEFDS0VUCQkweDAwMDEwMDAwCi0jZGVmaW5lIFNVQl9US0lQX1BBQ0tFVF9TSElGVAkxNgotI2RlZmluZSBTVUJfUkVTRVJWMQkJMHgwMDAwODAwMAotI2RlZmluZSBTVUJfUkVTRVJWMV9TSElGVAkxNQotI2RlZmluZSBTVUJfRlJBR19MRU4JCTB4MDAwMDdGRjgKLSNkZWZpbmUgU1VCX0ZSQUdfTEVOX1NISUZUCTMKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBGSVJTVF9GUkFHCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEZJUlNUX0ZSQUdfU0hJRlQJMgotI2RlZmluZSBMQVNUX0ZSQUcJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTEFTVF9GUkFHX1NISUZUCQkxCi0jZGVmaW5lIE9XTkVSCQkJMHgwMDAwMDAwMQotI2RlZmluZSBPV05FUl9TSElGVAkJMAotCV9fYmUzMiBmcmFnOwotCV9fYmUzMiBkbWFfYWRkcjsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi1lbnVtIHtIRUFERVIsIFBBQ0tFVH07Ci0KLXN0cnVjdCBhZ254X2luZm8gewotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotICAgICAgICBkbWFfYWRkcl90IG1hcHBpbmc7Ci0JdTMyIGRtYV9sZW47CQkvKiBkbWEgYnVmZmVyIGxlbiAgKi8KLQkvKiBCZWxvdyBmaWVsZHMgb25seSB1c2Z1bCBmb3IgdHggKi8KLQl1MzIgaGRyX2xlbjsJCS8qIGllZWU4MDIxMSBoZWFkZXIgbGVuZ3RoICovCi0JdW5zaWduZWQgaW50IHR5cGU7Ci0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpOwotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7Ci19OwotCi0KLXN0cnVjdCBhZ254X3JpbmcgewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7Ci0JZG1hX2FkZHJfdCBkbWE7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQkvKiBXaWxsIGxlYWQgdG8gb3ZlcmZsb3cgd2hlbiBzZW50IHBhY2tldCBudW1iZXIgZW5vdWdoPyAqLwotCXVuc2lnbmVkIGludCBpZHg7Ci0JdW5zaWduZWQgaW50IGlkeF9zZW50OwkJLyogb25seSB1c2Z1bCBmb3IgdHhkIGFuZCB0eG0gKi8KLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLX07Ci0KLSNkZWZpbmUgQUdOWF9SWF9SSU5HX1NJWkUJMTI4Ci0jZGVmaW5lIEFHTlhfVFhEX1JJTkdfU0laRQkyNTYKLSNkZWZpbmUgQUdOWF9UWE1fUklOR19TSVpFCTEyOAotCi12b2lkIGRpc2FibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBlbmFibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IGZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIHVuZmlsbF9yaW5ncyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX3J4X2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX3R4ZF9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGhhbmRsZV90eG1faXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBoYW5kbGVfb3RoZXJfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IF9hZ254X3R4KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwotI2VuZGlmIC8qIEFHTlhfWE1JVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKaW5kZXggMjQ3MTk0OS4uZWI2NzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCiBjb25maWcgQU5EUk9JRAogCWJvb2wgIkFuZHJvaWQgRHJpdmVycyIKKwlkZXBlbmRzIG9uIEJST0tFTgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB2YXJpb3VzIGRyaXZlcnMgbmVlZGVkIG9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCmluZGV4IDk0YzVkMjcuLmNkYTI2YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYjNkZmdfbmJ1ZiA9IDI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwppbmRleCBhZjcyM2NiLi5kNjNjODg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogY29uZmlnIENPTUVESQogCXRyaXN0YXRlICJEYXRhIGFjcXVpc2l0aW9uIHN1cHBvcnQgKGNvbWVkaSkiCiAJZGVmYXVsdCBOCi0JZGVwZW5kcyBvbiBtCisJZGVwZW5kcyBvbiBtICYmIChQQ0kgfHwgUENNQ0lBIHx8IFBDQ0FSRCB8fCBVU0IpCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIGRhdGEgYWNxdWlzaXRpb24gZGV2aWNlcwogCSAgZm9yIExpbnV4LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCmluZGV4IGY1NGJiOWIuLmFhYWQ3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKQEAgLTIzMzcsNyArMjMzNyw3IEBACiAJfQogCiAJRFBSSU5USygiY29tZWRpJWkgc3ViZCAlZCBidWZmZXIgcmVzaXplZCB0byAlaSBieXRlc1xuIiwKLQkJZGV2LT5taW5vciwgcyAtIGRldi0+c3ViZGV2aWNlcywgYXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKKwkJZGV2LT5taW5vciwgKGludCkocyAtIGRldi0+c3ViZGV2aWNlcyksIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKaW5kZXggMTJkMTJiNC4uODBjMGRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKQEAgLTc0NCw3ICs3NDQsNyBAQAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKi8KIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKaW5kZXggNGQxMGJjMy4uMDllNmUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYwpAQCAtNTMsNyArNTMsOCBAQAogICogU29tZSBkcml2ZXJzIHVzZSBhcnJheXMgc3VjaCBhcyB0aGlzLCBvdGhlciBkbyBub3QuCiAgKi8KIHN0cnVjdCBwY2lkaW9fYm9hcmQgewotCWNvbnN0IGNoYXIgKm5hbWU7CS8qICBhbm1lIG9mIHRoZSBib2FyZCAqLworCWNvbnN0IGNoYXIgKm5hbWU7CS8qICBuYW1lIG9mIHRoZSBib2FyZCAqLworCWludCBkZXZfaWQ7CiAJaW50IG5fODI1NTsJCS8qICBudW1iZXIgb2YgODI1NSBjaGlwcyBvbiBib2FyZCAqLwogCiAJLyogIGluZGljZXMgb2YgYmFzZSBhZGRyZXNzIHJlZ2lvbnMgKi8KQEAgLTY0LDE4ICs2NSwyMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lkaW9fYm9hcmQgcGNpZGlvX2JvYXJkc1tdID0gewogCXsKIAkgLm5hbWUgPSAicGNpLWRpbzI0IiwKKwkgLmRldl9pZCA9IDB4MDAyOCwKIAkgLm5fODI1NSA9IDEsCiAJIC5wY2ljb250cm9sZXJfYmFkcmluZGV4ID0gMSwKIAkgLmRpb3JlZ3NfYmFkcmluZGV4ID0gMiwKIAkgfSwKIAl7CiAJIC5uYW1lID0gInBjaS1kaW8yNGgiLAorCSAuZGV2X2lkID0gMHgwMDE0LAogCSAubl84MjU1ID0gMSwKIAkgLnBjaWNvbnRyb2xlcl9iYWRyaW5kZXggPSAxLAogCSAuZGlvcmVnc19iYWRyaW5kZXggPSAyLAogCSB9LAogCXsKIAkgLm5hbWUgPSAicGNpLWRpbzQ4aCIsCisJIC5kZXZfaWQgPSAweDAwMGIsCiAJIC5uXzgyNTUgPSAyLAogCSAucGNpY29udHJvbGVyX2JhZHJpbmRleCA9IDAsCiAJIC5kaW9yZWdzX2JhZHJpbmRleCA9IDEsCkBAIC0yMDYsNyArMjEwLDcgQEAKIAkJCWNvbnRpbnVlOwogCQkvKiAgbG9vcCB0aHJvdWdoIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAqLwogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBUlJBWV9TSVpFKHBjaWRpb19ib2FyZHMpOyBpbmRleCsrKSB7Ci0JCQlpZiAocGNpZGlvX3BjaV90YWJsZVtpbmRleF0uZGV2aWNlICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJaWYgKHBjaWRpb19ib2FyZHNbaW5kZXhdLmRldl9pZCAhPSBwY2lkZXYtPmRldmljZSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKaW5kZXggMTRiZjI5Yi4uMGQyYzJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCkBAIC01MTUsNiArNTE1LDcgQEAKIHsKIAlzdHJ1Y3QgcG9sbF9kZWxheV90IHJlc3VsdCA9IHBvbGxfZGVsYXlfbWluX21heCgxMDAwLCAyMDAwKTsKIAlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqcCA9IHMtPnByaXZhdGU7CisJaW50IGk7CiAKIAlpZiAocCkgewogCQl2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwgPSBwLT5jaGFubmVsOwpAQCAtNTcwLDE4ICs1NzEsMTEgQEAKIAkJCQkJICAgICAgIHAtPnNlcmlhbF9ubyk7CiAKIAkJCQkJLyogIFRyYW5zZm9ybWF0aW9uIGFsbCB6ZXJvcyAqLwotCQkJCQl0cmFuc2YubGlua1swXS5saW5rX3R5cGUgPQotCQkJCQkgICAgKGVudW0gbGlua190eXBlcykwOwotCQkJCQl0cmFuc2YubGlua1swXS5saW5rX2Ftb3VudCA9IDA7Ci0JCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfdHlwZSA9Ci0JCQkJCSAgICAoZW51bSBsaW5rX3R5cGVzKTA7Ci0JCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfYW1vdW50ID0gMDsKLQkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua190eXBlID0KLQkJCQkJICAgIChlbnVtIGxpbmtfdHlwZXMpMDsKLQkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua19hbW91bnQgPSAwOwotCQkJCQl0cmFuc2YubGlua1szXS5saW5rX3R5cGUgPQotCQkJCQkgICAgKGVudW0gbGlua190eXBlcykwOwotCQkJCQl0cmFuc2YubGlua1szXS5saW5rX2Ftb3VudCA9IDA7CisJCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRyYW5zZi5saW5rKTsgaSsrKSB7CisJCQkJCQl0cmFuc2YubGlua1tpXS5saW5rX3R5cGUgPQorCQkJCQkJCShlbnVtIGxpbmtfdHlwZXMpMDsKKwkJCQkJCXRyYW5zZi5saW5rW2ldLmxpbmtfYW1vdW50ID0gMDsKKwkJCQkJfQogCiAJCQkJCXNldF90cmFuc2Zvcm1zKGNoYW5uZWwsIHRyYW5zZiwgMCk7CiAJCQkJCXVzZV90cmFuc2Zvcm0oY2hhbm5lbCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggMmNkYTdhZC4uODBlMTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYwpAQCAtNTEsNiArNTEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKICNpbmNsdWRlICJjb21lZGlfcGNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYwppbmRleCA2YjExOGMxLi5iYmY3NWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKQEAgLTQxOCwxNSArNDE4LDE1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWJhc2VfYml0ZmllbGRfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCWZvciAoaiA9IDA7IGogPCBtYXhfcG9ydHNfcGVyX2JpdGZpZWxkOyArK2opIHsKKwkJY29uc3QgdW5zaWduZWQgcG9ydF9vZmZzZXQgPSBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbChiYXNlX2JpdGZpZWxkX2NoYW5uZWwpICsgajsKIAkJY29uc3QgdW5zaWduZWQgcG9ydCA9Ci0JCSAgICBzcHJpdmF0ZShzKS0+YmFzZV9wb3J0ICsKLQkJICAgIG5pXzY1eHhfcG9ydF9ieV9jaGFubmVsKGJhc2VfYml0ZmllbGRfY2hhbm5lbCkgKyBqOworCQkgICAgc3ByaXZhdGUocyktPmJhc2VfcG9ydCArIHBvcnRfb2Zmc2V0OwogCQl1bnNpZ25lZCBiYXNlX3BvcnRfY2hhbm5lbDsKIAkJdW5zaWduZWQgcG9ydF9tYXNrLCBwb3J0X2RhdGEsIHBvcnRfcmVhZF9iaXRzOwogCQlpbnQgYml0c2hpZnQ7CiAJCWlmIChwb3J0ID49IG5pXzY1eHhfdG90YWxfbnVtX3BvcnRzKGJvYXJkKGRldikpKQogCQkJYnJlYWs7Ci0JCWJhc2VfcG9ydF9jaGFubmVsID0gcG9ydCAqIG5pXzY1eHhfY2hhbm5lbHNfcGVyX3BvcnQ7CisJCWJhc2VfcG9ydF9jaGFubmVsID0gcG9ydF9vZmZzZXQgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OwogCQlwb3J0X21hc2sgPSBkYXRhWzBdOwogCQlwb3J0X2RhdGEgPSBkYXRhWzFdOwogCQliaXRzaGlmdCA9IGJhc2VfcG9ydF9jaGFubmVsIC0gYmFzZV9iaXRmaWVsZF9jaGFubmVsOwpAQCAtNDU3LDYgKzQ1NywxMiBAQAogCQlwb3J0X3JlYWRfYml0cyA9CiAJCSAgICByZWFkYihwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9EYXRhKHBvcnQpKTsKIC8qIHByaW50aygicmVhZCAweCV4IGZyb20gcG9ydCAlaVxuIiwgcG9ydF9yZWFkX2JpdHMsIHBvcnQpOyAqLworCQlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9ETyAmJiBib2FyZChkZXYpLT5pbnZlcnRfb3V0cHV0cykgeworCQkJLyogT3V0cHV0cyBpbnZlcnRlZCwgc28gaW52ZXJ0IHZhbHVlIHJlYWQgYmFjayBmcm9tCisJCQkgKiBETyBzdWJkZXZpY2UuICAoRG9lcyBub3QgYXBwbHkgdG8gYm9hcmRzIHdpdGggRElPCisJCQkgKiBzdWJkZXZpY2UuKSAqLworCQkJcG9ydF9yZWFkX2JpdHMgXj0gMHhGRjsKKwkJfQogCQlpZiAoYml0c2hpZnQgPiAwKSB7CiAJCQlwb3J0X3JlYWRfYml0cyA8PD0gYml0c2hpZnQ7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwppbmRleCA2YTc3OTc2Li5lYzMxYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKQEAgLTUyMCw3ICs1MjAsNyBAQAogCWxpbmstPnByaXYgPSBsb2NhbDsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwppbmRleCBiMDZlODFjLi4wNzAwYThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jCkBAIC0yNzEsNyArMjcxLDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCmluZGV4IDU3YWVjZmEuLmEzMDUzYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9GT1JDRURfUFVMU0U7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfRk9SQ0VEX1BVTFNFOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9JTkZPMl9WQUxJRCB8IElSUV9QVUxTRV9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCmluZGV4IGUzZmZiMDYuLjc1M2VlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpAQCAtNjIsNiArNjIsNyBAQAogLyogI2RlZmluZSBERUJVR19TVEFUVVNfQiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICI4MjU1LmgiCiAjaW5jbHVkZSAibWl0ZS5oIgogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCmluZGV4IGI3MzIyOTYuLjlhZWY4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogewogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggNTJiMmVjYS4uZDU0NDY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtNzAsNiArNzAsNyBAQAogLyogI2RlZmluZSBERUJVR19GTEFHUyAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAogI2luY2x1ZGUgIm1pdGUuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwppbmRleCAxOWQ4NzU1Li4yNGM4YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCkBAIC0yOSw3ICsyOSw3IEBACiAgIFBDSS1NSU8tMTZYRS0xMCwgUFhJLTYwMzBFLCBQQ0ktTUlPLTE2RS0xLCBQQ0ktTUlPLTE2RS00LCBQQ0ktNjAxNCwgUENJLTYwNDBFLAogICBQWEktNjA0MEUsIFBDSS02MDMwRSwgUENJLTYwMzFFLCBQQ0ktNjAzMkUsIFBDSS02MDMzRSwgUENJLTYwNzFFLCBQQ0ktNjAyM0UsCiAgIFBDSS02MDI0RSwgUENJLTYwMjVFLCBQWEktNjAyNUUsIFBDSS02MDM0RSwgUENJLTYwMzVFLCBQQ0ktNjA1MkUsCi0gIFBDSS02MTEwLCBQQ0ktNjExMSwgUENJLTYyMjAsIFBDSS02MjIxLCBQQ0ktNjIyNCwgUFhJLTYyMjQsIFBDSS02MjI1LAorICBQQ0ktNjExMCwgUENJLTYxMTEsIFBDSS02MjIwLCBQQ0ktNjIyMSwgUENJLTYyMjQsIFBYSS02MjI0LCBQQ0ktNjIyNSwgUFhJLTYyMjUsCiAgIFBDSS02MjI5LCBQQ0ktNjI1MCwgUENJLTYyNTEsIFBDSWUtNjI1MSwgUENJLTYyNTQsIFBDSS02MjU5LCBQQ0llLTYyNTksCiAgIFBDSS02MjgwLCBQQ0ktNjI4MSwgUFhJLTYyODEsIFBDSS02Mjg0LCBQQ0ktNjI4OSwKICAgUENJLTY3MTEsIFBYSS02NzExLCBQQ0ktNjcxMywgUFhJLTY3MTMsCkBAIC0xNzksNiArMTc5LDcgQEAKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBmMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEwZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE2YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKKwlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE2ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE3ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzFiYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE3ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKQEAgLTk1Myw2ICs5NTQsMjUgQEAKIAkgLmhhc184MjU1ID0gMCwKIAkgfSwKIAl7CisJIC5kZXZpY2VfaWQgPSAweDcxNmQsCisJIC5uYW1lID0gInB4aS02MjI1IiwKKwkgLm5fYWRjaGFuID0gODAsCisJIC5hZGJpdHMgPSAxNiwKKwkgLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCSAuZ2FpbmxrdXAgPSBhaV9nYWluXzYyMngsCisJIC5haV9zcGVlZCA9IDQwMDAsCisJIC5uX2FvY2hhbiA9IDIsCisJIC5hb2JpdHMgPSAxNiwKKwkgLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCSAuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjJ4X2FvLAorCSAucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkgLmFvX3VuaXBvbGFyID0gMCwKKwkgLmFvX3NwZWVkID0gMTIwMCwKKwkgLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkgLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJIC5oYXNfODI1NSA9IDAsCisJfSwKKwl7CiAJIC5kZXZpY2VfaWQgPSAweDcwYWEsCiAJIC5uYW1lID0gInBjaS02MjI5IiwKIAkgLm5fYWRjaGFuID0gMzIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKaW5kZXggZjYzYmRjMy4uMzQ0YjgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBkYXFwX2ludGVycnVwdDsKIAlsaW5rLT5pcnEuSW5zdGFuY2UgPSBsb2NhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCmluZGV4IGI4OWUxZWMuLjA3YzIxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYwpAQCAtNDMsNiArNDMsNyBAQAogCiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjZGVmaW5lIFM1MjZfU0laRSA2NAogCkBAIC0xMTMsNiArMTE0LDcgQEAKIH07CiAKIHN0cnVjdCBjb3VudGVyX21vZGVfcmVnaXN0ZXJfdCB7CisjaWYgZGVmaW5lZCAoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogCXVuc2lnbmVkIHNob3J0IGNvdXRTb3VyY2U6MTsKIAl1bnNpZ25lZCBzaG9ydCBjb3V0UG9sYXJpdHk6MTsKIAl1bnNpZ25lZCBzaG9ydCBhdXRvTG9hZFJlc2V0UmNhcDozOwpAQCAtMTI0LDEyICsxMjYsMjcgQEAKIAl1bnNpZ25lZCBzaG9ydCBvdXRwdXRSZWdMYXRjaEN0cmw6MTsKIAl1bnNpZ25lZCBzaG9ydCBwcmVsb2FkUmVnU2VsOjE7CiAJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ6MTsKKyAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDoxOworCXVuc2lnbmVkIHNob3J0IHByZWxvYWRSZWdTZWw6MTsKKwl1bnNpZ25lZCBzaG9ydCBvdXRwdXRSZWdMYXRjaEN0cmw6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3VudERpckN0cmw6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3VudERpcjoxOworCXVuc2lnbmVkIHNob3J0IGNsb2NrU291cmNlOjI7CisJdW5zaWduZWQgc2hvcnQgY3RFbmFibGVDdHJsOjI7CisJdW5zaWduZWQgc2hvcnQgaHdDdEVuYWJsZVNvdXJjZToyOworCXVuc2lnbmVkIHNob3J0IGF1dG9Mb2FkUmVzZXRSY2FwOjM7CisJdW5zaWduZWQgc2hvcnQgY291dFBvbGFyaXR5OjE7CisJdW5zaWduZWQgc2hvcnQgY291dFNvdXJjZToxOworI2Vsc2UKKyNlcnJvciBVbmtub3duIGJpdCBmaWVsZCBvcmRlcgorI2VuZGlmCiB9OwogCi11bmlvbiB7Cit1bmlvbiBjbVJlZyB7CiAJc3RydWN0IGNvdW50ZXJfbW9kZV9yZWdpc3Rlcl90IHJlZzsKIAl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKLX0gY21SZWc7Cit9OwogCiAjZGVmaW5lIE1BWF9HUENUX0NPTkZJR19EQVRBIDYKIApAQCAtMjg1LDYgKzMwMiw3IEBACiAJaW50IGksIG47CiAvKiBzaG9ydCB2YWx1ZTsgKi8KIC8qIGludCBzdWJkZXZfY2hhbm5lbCA9IDA7ICovCisJdW5pb24gY21SZWcgY21SZWc7CiAKIAlwcmludGsoImNvbWVkaSVkOiBzNTI2OiAiLCBkZXYtPm1pbm9yKTsKIApAQCAtMzc1LDcgKzM5Myw3IEBACiAJaWYgKHRoaXNib2FyZC0+aGF2ZV9kaW8pIHsKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKIAkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOwotCQlzLT5uX2NoYW4gPSAyOworCQlzLT5uX2NoYW4gPSA4OwogCQlzLT5tYXhkYXRhID0gMTsKIAkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAkJcy0+aW5zbl9iaXRzID0gczUyNl9kaW9faW5zbl9iaXRzOwpAQCAtNDM1LDExICs0NTMsMTEgQEAKIAl1ZGVsYXkoMTAwMCk7CiAJcHJpbnRrKCJSZWFkIGJhY2sgbW9kZSByZWc9MHglMDR4XG4iLCBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBuKSkpOwogCi0JLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGhpZ2ggd29yZCAqLworCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciBoaWdoIHdvcmQgKi8KIC8qIHZhbHVlID0gKHNob3J0KSAoMHg1NSk7ICovCiAvKiBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIG4pKTsgKi8KIAotCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZCAqLworCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciBsb3cgd29yZCAqLwogLyogdmFsdWUgPSAoc2hvcnQpKDB4YWE1NSk7ICovCiAvKiBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIG4pKTsgKi8KIApAQCAtNTE2LDYgKzUzNCw3IEBACiAJaW50IHN1YmRldl9jaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8qICBVbnBhY2sgY2hhbnNwZWMgKi8KIAlpbnQgaTsKIAlzaG9ydCB2YWx1ZTsKKwl1bmlvbiBjbVJlZyBjbVJlZzsKIAogLyogcHJpbnRrKCJzNTI2OiBHUENUX0lOU05fQ09ORklHOiBDb25maWd1cmluZyBDaGFubmVsICVkXG4iLCBzdWJkZXZfY2hhbm5lbCk7ICovCiAKQEAgLTU2OCwxOSArNTg3LDggQEAKIAogI2lmIDEKIAkJLyogIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIgKi8KLQkJY21SZWcucmVnLmNvdXRTb3VyY2UgPSAwOwkvKiAgb3V0IFJDQVAgKi8KLQkJY21SZWcucmVnLmNvdXRQb2xhcml0eSA9IDA7CS8qICBQb2xhcml0eSBpbnZlcnRlZCAqLwotCQljbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPSAwOwkvKiAgQXV0byBsb2FkIGRpc2FibGVkICovCi0JCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlID0gMjsJLyogIE5PVCBSQ0FQICovCi0JCWNtUmVnLnJlZy5jdEVuYWJsZUN0cmwgPSAxOwkvKiAgMTogU29mdHdhcmUsICA+MSA6IEhhcmR3YXJlICovCi0JCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDM7CS8qICB4NCAqLwotCQljbVJlZy5yZWcuY291bnREaXIgPSAwOwkvKiAgdXAgKi8KLQkJY21SZWcucmVnLmNvdW50RGlyQ3RybCA9IDA7CS8qICBxdWFkcmF0dXJlICovCi0JCWNtUmVnLnJlZy5vdXRwdXRSZWdMYXRjaEN0cmwgPSAwOwkvKiAgbGF0Y2ggb24gcmVhZCAqLwotCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8qICBQUjAgKi8KLQkJY21SZWcucmVnLnJlc2VydmVkID0gMDsKKwkJY21SZWcudmFsdWUgPSBpbnNuLT5kYXRhWzFdICYgMHhGRkZGOwogCi0JCS8qICBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyICovCiAvKiBwcmludGsoInM1MjY6IENvdW50ZXIgTW9kZSByZWdpc3Rlcj0leFxuIiwgY21SZWcudmFsdWUpOyAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKQEAgLTYxNSwxMSArNjIzLDExIEBACiAJCWNtUmVnLnZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzFdICYgMHhGRkZGKTsKIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBoaWdoIHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgbG93IHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbMl0gJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CiAKQEAgLTY1MywxMSArNjYxLDExIEBACiAJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLyogIFBSMCAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCkBAIC02NjYsMTcgKzY3NCwxNyBAQAogCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDE7CS8qICBQUjEgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIAogCQkvKiAgV3JpdGUgdGhlIENvdW50ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotCQlpZiAoaW5zbi0+ZGF0YVszXSAhPSAwKSB7Ci0JCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCWlmIChpbnNuLT5kYXRhWzRdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzRdICYgMHhGRkZGKTsKIAkJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsKIAkJfQogCQlicmVhazsKQEAgLTY5OCwxMSArNzA2LDExIEBACiAJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLyogIFBSMCAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCkBAIC03MTEsMTcgKzcxOSwxNyBAQAogCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDE7CS8qICBQUjEgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIAogCQkvKiAgV3JpdGUgdGhlIENvdW50ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotCQlpZiAoaW5zbi0+ZGF0YVszXSAhPSAwKSB7Ci0JCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCWlmIChpbnNuLT5kYXRhWzRdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzRdICYgMHhGRkZGKTsKIAkJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsKIAkJfQogCQlicmVhazsKQEAgLTc0MSw2ICs3NDksNyBAQAogewogCWludCBzdWJkZXZfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvKiAgVW5wYWNrIGNoYW5zcGVjICovCiAJc2hvcnQgdmFsdWU7CisJdW5pb24gY21SZWcgY21SZWc7CiAKIAlwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9XUklURSBvbiBjaGFubmVsICVkXG4iLCBzdWJkZXZfY2hhbm5lbCk7CiAJY21SZWcudmFsdWUgPSBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwpAQCAtNzc1LDkgKzc4NCw4IEBACiAJCQkoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0pLmRhdGFbMV0gPQogCQkJICAgIGluc24tPmRhdGFbMV07CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIiVkIFx0ICVkXG4iLCBpbnNuLT5kYXRhWzFdLCBpbnNuLT5kYXRhWzJdKTsKLQkJCXByaW50awotCQkJICAgICgiczUyNjogSU5TTl9XUklURTogUFRHOiBQcm9ibGVtIHdpdGggUHVsc2UgcGFyYW1zXG4iKTsKKwkJCXByaW50aygiczUyNjogSU5TTl9XUklURTogUFRHOiBQcm9ibGVtIHdpdGggUHVsc2UgcGFyYW1zIC0+ICVkICVkXG4iLAorCQkJCWluc24tPmRhdGFbMF0sIGluc24tPmRhdGFbMV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtOTQ5LDcgKzk1Nyw3IEBACiAJZGF0YVsxXSA9IGludyhBRERSX1JFRyhSRUdfRElPKSkgJiAweEZGOwkvKiAgbG93IDggYml0cyBhcmUgdGhlIGRhdGEgKi8KIAkvKiBvciB3ZSBjb3VsZCBqdXN0IHJldHVybiB0aGUgc29mdHdhcmUgY29weSBvZiB0aGUgb3V0cHV0IHZhbHVlcyBpZgogCSAqIGl0IHdhcyBhIHB1cmVseSBkaWdpdGFsIG91dHB1dCBzdWJkZXZpY2UgKi8KLQkvKiBkYXRhWzFdPXMtPnN0YXRlOyAqLworCS8qIGRhdGFbMV09cy0+c3RhdGUgJiAweEZGOyAqLwogCiAJcmV0dXJuIDI7CiB9CkBAIC05NTksMjggKzk2NywzMyBAQAogCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7Ci0Jc2hvcnQgdmFsdWU7CisJaW50IGdyb3VwLCBtYXNrOwogCiAJcHJpbnRrKCJTNTI2IERJTyBpbnNuX2NvbmZpZ1xuIik7CiAKLQlpZiAoaW5zbi0+biAhPSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZhbHVlID0gaW53KEFERFJfUkVHKFJFR19ESU8pKTsKLQogCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcwogCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKIAkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKIAkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KIAotCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpIHsKLQkJdmFsdWUgfD0gMSA8PCAoY2hhbiArIDEwKTsJLyogIGJpdCAxMC8xMSBzZXQgdGhlIGdyb3VwIDEvMidzIG1vZGUgKi8KLQkJcy0+aW9fYml0cyB8PSAoMHhGIDw8IGNoYW4pOwotCX0gZWxzZSB7Ci0JCXZhbHVlICY9IH4oMSA8PCAoY2hhbiArIDEwKSk7CS8qICAxIGlzIG91dHB1dCwgMCBpcyBpbnB1dC4gKi8KLQkJcy0+aW9fYml0cyAmPSB+KDB4RiA8PCBjaGFuKTsKKwlncm91cCA9IGNoYW4gPj4gMjsKKwltYXNrID0gMHhGIDw8IChncm91cCA8PCAyKTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPnN0YXRlIHw9IDEgPDwgKGdyb3VwICsgMTApOyAgLy8gYml0IDEwLzExIHNldCB0aGUgZ3JvdXAgMS8yJ3MgbW9kZQorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5zdGF0ZSAmPSB+KDEgPDwgKGdyb3VwICsgMTApKTsvLyAxIGlzIG91dHB1dCwgMCBpcyBpbnB1dC4KKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIG1hc2spID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW91dHcodmFsdWUsIEFERFJfUkVHKFJFR19ESU8pKTsKKwlvdXR3KHMtPnN0YXRlLCBBRERSX1JFRyhSRUdfRElPKSk7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCmluZGV4IGEyMTk2NzkuLjgyYWE4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThkMmEyMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotY29uZmlnIENPV0xPT1AKLQl0cmlzdGF0ZSAiY29weS1vbi13cml0ZSBwc2V1ZG8gQmxvY2sgRHJpdmVyIgotCWRlcGVuZHMgb24gQkxPQ0sKLQlkZWZhdWx0IG4KLQktLS1oZWxwLS0tCi0JICBDb3dsb29wIGlzIGEgImNvcHktb24td3JpdGUiIHBzZXVkbyBibG9jayBkcml2ZXIuIEl0IGNhbiBiZQotCSAgc3RhY2tlZCBvbiB0b3Agb2YgYSAicmVhbCIgYmxvY2sgZHJpdmVyLCBhbmQgY2F0Y2hlcyBhbGwgd3JpdGUKLQkgIG9wZXJhdGlvbnMgb24gdGhlaXIgd2F5IGZyb20gdGhlIGZpbGUgc3lzdGVtcyBsYXllciBhYm92ZSB0bwotCSAgdGhlIHJlYWwgZHJpdmVyIGJlbG93LCBlZmZlY3RpdmVseSBzaGllbGRpbmcgdGhlIGxvd2VyIGRyaXZlcgotCSAgZnJvbSB0aG9zZSB3cml0ZSBhY2Nlc3Nlcy4gVGhlIHJlcXVlc3RzIGFyZSB0aGVuIGRpdmVydGVkIHRvCi0JICBhbiBvcmRpbmFyeSBmaWxlLCBsb2NhdGVkIHNvbWV3aGVyZSBlbHNlIChjb25maWd1cmFibGUpLiBMYXRlcgotCSAgcmVhZCByZXF1ZXN0cyBhcmUgY2hlY2tlZCB0byBzZWUgd2hldGhlciB0aGV5IGNhbiBiZSBzZXJ2aWNlZAotCSAgYnkgdGhlICJyZWFsIiBibG9jayBkcml2ZXIgYmVsb3csIG9yIG11c3QgYmUgcHVsbGVkIGluIGZyb20KLQkgIHRoZSBkaXZlcnRlZCBsb2NhdGlvbi4gTW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlIHRvb2xzIHRvCi0JICB1c2UgdGhlIGRyaXZlciBhcmUgb24gdGhlIHByb2plY3QncyB3ZWJzaXRlCi0JICBodHRwOi8vd3d3LkFUQ29tcHV0aW5nLm5sL2Nvd2xvb3AvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjZiODFhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotb2JqLSQoQ09ORklHX0NPV0xPT1ApCSs9IGNvd2xvb3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOTlkMWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLVRPRE86Ci0JLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCi0JLSBydW4gc3BhcnNlIHRvIGVuc3VyZSBjbGVhbgotCS0gZml4IHVwIDMyLzY0Yml0IGlvY3RsIGlzc3VlcwotCS0gbW92ZSBwcm9jIGZpbGUgdXNhZ2UgdG8gZGVidWdmcwotCS0gYXVkaXQgaW9jdGxzCi0JLSBhZGQgZG9jdW1lbnRhdGlvbgotCS0gZ2V0IGxpbnV4LWZzZGV2ZWwgdG8gcmV2aWV3IGl0Ci0KLVBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gIkguSi4gVGhvbWFzc2VuIiA8aGp0QEFUQ29tcHV0aW5nLm5sPiBhbmQKLUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmMgYi9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MWM3NDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg0MiArMCwwIEBACi0vKgotKiogICAgICAgQ09XTE9PUCBibG9jayBkZXZpY2UgZHJpdmVyICgyLjYga2VybmVsIGNvbXBsaWFudCkKLSoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qKiBSZWFkLXdyaXRlIGxvb3AtZHJpdmVyIHdpdGggY29weS1vbi13cml0ZSBmdW5jdGlvbmFsaXR5LgotKioKLSoqIFN5bm9wc2lzOgotKioKLSoqICAgICBtb2Rwcm9iZSBjb3dsb29wIFttYXhjb3dzPS4uXSBbcmRvZmlsZT0uLi4uLiBjb3dmaWxlPS4uLi4gW29wdGlvbj1yXV0KLSoqCi0qKiBEZWZpbml0aW9uIG9mIG51bWJlciBvZiBjb25maWd1cmVkIGNvd2RldmljZXM6Ci0qKiAgIG1heGNvd3M9CW51bWJlciBvZiBjb25maWd1cmVkIGNvd2RldmljZXMgKGRlZmF1bHQ6IDE2KQotKiogKGRvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCBNQVhDT1dTOiBhYnNvbHV0ZSBtYXhpbXVtIGFzIGNvbXBpbGVkKQotKioKLSoqIE9uZSBwYWlyIG9mIGZpbGVuYW1lcyBjYW4gYmUgc3VwcGxpZWQgZHVyaW5nIGluc21vZC9tb2Rwcm9iZSB0byBvcGVuCi0qKiB0aGUgZmlyc3QgY293ZGV2aWNlOgotKiogICByZG9maWxlPQlyZWFkLW9ubHkgZmlsZSAob3IgZmlsZXN5c3RlbSkKLSoqICAgY293ZmlsZT0Jc3RvcmFnZS1zcGFjZSBmb3IgbW9kaWZpZWQgYmxvY2tzIG9mIHJlYWQtb25seSBmaWxlKHN5c3RlbSkKLSoqICAgb3B0aW9uPXIJcmVwYWlyIGNvd2ZpbGUgYXV0b21hdGljYWxseSBpZiBpdCBhcHBlYXJzIHRvIGJlIGRpcnR5Ci0qKgotKiogT3RoZXIgY293ZGV2aWNlcyBjYW4gYmUgYWN0aXZhdGVkIHZpYSB0aGUgY29tbWFuZCAiY293ZGV2IgotKiogd2hlbmV2ZXIgdGhlIGNvd2xvb3AtZHJpdmVyIGlzIGxvYWRlZC4KLSoqCi0qKiBUaGUgcmVhZC1vbmx5IGZpbGUgbWF5IGJlIG9mIHR5cGUgJ3JlZ3VsYXInIG9yICdibG9jay1kZXZpY2UnLgotKioKLSoqIFRoZSBjb3dmaWxlIG11c3QgYmUgb2YgdHlwZSAncmVndWxhcicuCi0qKiBJZiBhbiBleGlzdGluZyByZWd1bGFyIGZpbGUgaXMgdXNlZCBhcyBjb3dmaWxlLCBpdHMgY29udGVudHMgd2lsbCBiZQotKiogdXNlZCBhZ2FpbiBmb3IgdGhlIGN1cnJlbnQgcmVhZC1vbmx5IGZpbGUuIFdoZW4gdGhlIGNvd2ZpbGUgaGFzIG5vdCBiZWVuCi0qKiBjbG9zZWQgcHJvcGVybHkgZHVyaW5nIGEgcHJldmlvdXMgc2Vzc2lvbiAoaS5lLiBybW1vZCBjb3dsb29wKSwgdGhlCi0qKiBjb3dsb29wLWRyaXZlciByZWZ1c2VzIHRvIG9wZW4gaXQgdW5sZXNzIHRoZSBwYXJhbWV0ZXIgIm9wdGlvbj1yIiBpcwotKiogc3BlY2lmaWVkLgotKioKLSoqIExheW91dCBvZiBjb3dmaWxlOgotKioKLSoqIAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0qKgl8ICAgICAgIGNvdyBoZWFkIGJsb2NrICAgICAgICB8ICAgTUFQVU5JVCBieXRlcwotKioJfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotKioJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqCXwtLS0gICAgICAgICAgICAgICAgICAgICAgIC0tLXwKLSoqCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBNQVBVTklUIGJ5dGVzCi0qKgl8LS0tICAgICAgICAgICAgICAgICAgICAgICAtLS18Ci0qKgl8ICAgICAgdXNlZC1ibG9jayBiaXRtYXAgICAgICB8ICAgTUFQVU5JVCBieXRlcwotKioJfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotKioJfCAgZ2FwIHRvIGFsaWduIHN0YXJ0LW9mZnNldCAgfAotKioJfCAgICAgICAgdG8gNEsgbXVsdGlwbGUgICAgICAgfAotKioJfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgPC0tLS0gc3RhcnQtb2Zmc2V0IGNvdyBibG9ja3MKLSoqCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSoqICAgICAgfCAgICB3cml0dGVuIGNvdyBibG9ja3MgICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqICAgICAgfCAgICAgICAgICAuLi4uLiAgICAgICAgICAgICAgfAotKioKLSoqIAljb3doZWFkIGJsb2NrOgotKiogICAJICAtIGNvbnRhaW5zIGdlbmVyYWwgaW5mbyBhYm91dCB0aGUgcmRvZmlsZSB3aGljaCBpcyByZWxhdGVkCi0qKiAJICAgIHRvIHRoaXMgY293ZmlsZQotKioKLSoqIAl1c2VkLWJsb2NrIGJpdG1hcDoKLSoqIAkgIC0gY29udGFpbnMgb25lIGJpdCBwZXIgYmxvY2sgd2l0aCBhIHNpemUgb2YgTUFQVU5JVCBieXRlcwotKiogCSAgLSBiaXQtdmFsdWUgJzEnID0gYmxvY2sgaGFzIGJlZW4gd3JpdHRlbiBvbiBjb3cKLSoqIAkgICAgICAgICAgICAgICcwJyA9IGJsb2NrIHVudXNlZCBvbiBjb3cKLSoqIAkgIC0gdG90YWwgYml0bWFwIHJvdW5kZWQgdG8gbXVsdGlwbGVzIG9mIE1BUFVOSVQKLSoqCi0qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qKiBBdXRob3I6ICAgICAgICAgICAgIEdlcmxvZiBMYW5nZXZlbGQgLSBBVCBDb21wdXRpbmcgKE1hcmNoIDIwMDMpCi0qKiBDdXJyZW50IG1haW50YWluZXI6IEhlbmRyaWstSmFuIFRob21hc3NlbiAtIEFUIENvbXB1dGluZyAoU3VtbWVyIDIwMDYpCi0qKiBFbWFpbDogICAgICAgICAgICAgIGhqdEBBVENvbXB1dGluZy5ubAotKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDkgQVQgQ29uc3VsdGFuY3kKLSoqCi0qKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotKiogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0qKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0qKiBsYXRlciB2ZXJzaW9uLgotKioKLSoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSoqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSoqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSoqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoqCi0qKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKiogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSoqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKiBNYWpvciBtb2RpZmljYXRpb25zOgotKioKLSoqIAkyMDA0MDUJUG9ydGVkIHRvIGtlcm5lbC12ZXJzaW9uIDIuNgkJSGVuZHJpay1KYW4gVGhvbWFzc2VuCi0qKgkyMDA0MDUJQWRkZWQgY293aGVhZCB0byBjb3dmaWxlIHRvIGdhcmFudGVlCi0qKgkJY29uc2lzdGVuY3kgd2l0aCByZWFkLW9ubHkgZmlsZQkJR2VybG9mIExhbmdldmVsZAotKioJMjAwNDA1CVBvc3Rwb25lZCBmbHVzaGluZyBvZiBiaXRtYXBzIHRvIGltcHJvdmUKLSoqCQlwZXJmb3JtYW5jZS4gCQkJCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDQwNQlJbmxpbmUgcmVjb3ZlcnkgZm9yIGRpcnR5IGNvd2ZpbGVzLglHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA1MDIJUmVkZXNpZ24gdG8gc3VwcG9ydCBtb3JlIGNvd2RldmljZXMuCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDUwMglTdXBwb3J0IGRldmljZXMvZmlsZSA+IDIgR2J5dGVzLglHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA1MDcJQ2hlY2sgZm9yIGZyZWUgc3BhY2UgdG8gZXhwYW5kIGNvd2ZpbGUuCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDkwMiAgVXBncmFkZSBmb3Iga2VybmVsIDIuNi4yOCAgICAgICAgICAgICAgIEhlbmRyaWstSmFuIFRob21hc3NlbgotKioKLSoqIEluc3BpcmVkIGJ5Ci0qKiAgICBsb29wLmMgIGJ5IFRoZW9kb3JlIFRzJ28gYW5kCi0qKiAgICBjbG9vcC5jIGJ5IFBhdWwgYFJ1c3R5JyBSdXNzZWxsICYgS2xhdXMgS25vcHBlci4KLSoqCi0qKiBEZXNpZ24tY29uc2lkZXJhdGlvbnM6Ci0qKgotKiogICBGb3IgdGhlIGZpcnN0IGV4cGVyaW1lbnRzIHdpdGggdGhlIGNvd2xvb3AtZHJpdmVyLCB0aGUgcmVxdWVzdC1xdWV1ZQotKiogICBtYWRlIHVzZSBvZiB0aGUgZG9fZ2VuZXJpY19maWxlX3JlYWQoKSB3aGljaCB3b3JrZWQgZmluZSBleGNlcHQKLSoqICAgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgY2xvb3AtZHJpdmVyOyB0aGF0IGNvbWJpbmF0aW9uCi0qKiAgIHJlc3VsdGVkIGluIGEgbm9uLWludGVycnVwdGlibGUgaGFuZ3VwIG9mIHRoZSBzeXN0ZW0gZHVyaW5nCi0qKiAgIGhlYXZ5IGxvYWQuIE90aGVyIGV4cGVyaW1lbnRzIHVzaW5nIHRoZSBgbWFrZV9yZXF1ZXN0JyBpbnRlcmZhY2UgYWxzbwotKiogICByZXN1bHRlZCBpbiB1bnByZWRpY3RhYmxlIHN5c3RlbSBoYW5ndXBzICh3aXRoIHByb3BlciB1c2Ugb2Ygc3BpbmxvY2tzKS4KLSoqCi0qKiAgIFRvIG92ZXJjb21lIHRoZXNlIHByb2JsZW1zLCB0aGUgY293bG9vcC1kcml2ZXIgc3RhcnRzIGEga2VybmVsLXRocmVhZAotKiogICBmb3IgZXZlcnkgYWN0aXZlIGNvd2RldmljZS4KLSoqICAgQWxsIHJlYWQtIGFuZCB3cml0ZS1yZXF1ZXN0IG9uIHRoZSByZWFkLW9ubHkgZmlsZSBhbmQgY29weS1vbi13cml0ZSBmaWxlCi0qKiAgIGFyZSBoYW5kbGVkIGluIHRoZSBjb250ZXh0IG9mIHRoYXQgdGhyZWFkLgotKiogICBBIHNjaGVtZSBoYXMgYmVlbiBkZXNpZ25lZCB0byB3YWtldXAgdGhlIGtlcm5lbC10aHJlYWQgYXMKLSoqICAgc29vbiBhcyBJL08tcmVxdWVzdHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcmVxdWVzdC1xdWV1ZTsgdGhpcyB0aHJlYWQKLSoqICAgaGFuZGxlcyB0aGUgcmVxdWVzdHMgb25lLWJ5LW9uZSBieSBjYWxsaW5nIHRoZSBwcm9wZXIgcmVhZC0gb3IKLSoqICAgd3JpdGUtZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgb3BlbiByZWFkLW9ubHkgZmlsZSBvciBjb3B5LW9uLXdyaXRlIGZpbGUuCi0qKiAgIFdoZW4gYWxsIHBlbmRpbmcgcmVxdWVzdHMgaGF2ZSBiZWVuIGhhbmRsZWQsIHRoZSBrZXJuZWwtdGhyZWFkIGdvZXMKLSoqICAgYmFjayB0byBzbGVlcC1zdGF0ZS4KLSoqICAgVGhpcyBhcHByb2FjaCByZXF1aXJlcyBzb21lIGFkZGl0aW9uYWwgY29udGV4dC1zd2l0Y2hlczsgaG93ZXZlciB0aGUKLSoqICAgcGVyZm9ybWFuY2UgbG9zcyBkdXJpbmcgaGVhdnkgSS9PIGlzIGxlc3MgdGhhbiAzJS4KLSoqCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGNvd2xvb3AgcGFja2FnZSB2ZXJzaW9uIG51bWJlci4gSXQgbXVzdCBiZQotICAgaWRlbnRpY2FsIHRvIHRoZSBjb250ZW50IG9mIHRoZSBpbmNsdWRlLWZpbGUgInZlcnNpb24uaCIgdGhhdCBpcwotICAgdXNlZCBpbiBhbGwgc3VwcG9ydGluZyB1dGlsaXRpZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1jaGFyIHJldmlzaW9uW10gPSAiJFJldmlzaW9uOiAzLjEgJCI7IC8qIGNvd2xvX2luaXRfbW9kdWxlKCkgaGFzCi0JCQkgICAgIGFzc3VtcHRpb25zIGFib3V0IHRoaXMgc3RyaW5nJ3MgZm9ybWF0ICAgKi8KLQotLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgbnVtYmVycyBhcmUgKm5vdCogdGhlIGNvd2xvb3AgcGFja2FnZSB2ZXJzaW9uCi0gICBudW1iZXJzLCBidXQgc2VwYXJhdGUgcmV2aXNpb24gaGlzdG9yeSBudW1iZXJzIHRvIHRyYWNrIHRoZQotICAgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGU6ICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAkTG9nOiBjb3dsb29wLmMsdiAkCi0qKgotKiogUmV2aXNpb24gMS4zMCAgMjAwOS8wMi8wOCBoanQKLSoqIEludGVncmF0ZWQgZWFybGllciBmaXhlcwotKiogVXBncmFkZWQgdG8ga2VybmVsIDIuNi4yOCAodGhhbmtzIEplcm9tZSBQb3VsaW4pCi0qKgotKiogUmV2aXNpb24gMS4yOSAgMjAwNi8xMi8wMyAyMjoxMjowMCAgaGp0Ci0qKiBjaGFuZ2VkICdjb3dkZXZsb2NrJyBmcm9tIHNwaW5sb2NrIHRvIHNlbWFwaG9yZSwgdG8gYXZvaWQKLSoqICJzY2hlZHVsaW5nIHdoaWxlIGF0b21pYyIuIENvbnRyaWJ1dGVkIGJ5IEp1ZXJnZW4gQ2hyaXN0LgotKiogQWRkZWQgdmVyc2lvbi5oIGFnYWluCi0qKgotKiogUmV2aXNpb24gMS4yOCAgMjAwNi8wOC8xNiAxNjowMDowMCAgaGp0Ci0qKiBtYWxsb2MgZWFjaCBpbmRpdmlkdWFsIGNvd2xvb3BkZXZpY2Ugc3RydWN0IHNlcGFyYXRlbHkKLSoqCi0qKiBSZXZpc2lvbiAxLjI3ICAyMDA2LzAzLzE0IDE0OjU3OjAzICByb290Ci0qKiBSZW1vdmVkIGluY2x1ZGUgdmVyc2lvbi5oCi0qKgotKiogUmV2aXNpb24gMS4yNiAgMjAwNS8wOC8wOCAxMToyMjo0OCAgcm9vdAotKiogSW1wbGVtZW50IHBvc3NpYmlsaXR5IHRvIGNsb3NlIGEgY293IGZpbGUgb3IgcmVvcGVuIGEgY293ZmlsZSByZWFkLW9ubHkuCi0qKgotKiogUmV2aXNpb24gMS4yNSAgMjAwNS8wOC8wMyAxNDowMDozOSAgcm9vdAotKiogQWRkZWQgbW9kaW5mbyBpbmZvIHRvIGRyaXZlci4KLSoqCi0qKiBSZXZpc2lvbiAxLjI0ICAyMDA1LzA3LzIxIDA2OjE0OjUzICByb290Ci0qKiBDb3NtZXRpYyBjaGFuZ2VzIHNvdXJjZSBjb2RlLgotKioKLSoqIFJldmlzaW9uIDEuMjMgIDIwMDUvMDcvMjAgMTM6MDc6MzIgIHJvb3QKLSoqIFN1cHBseSBpb2N0bCB0byB3cml0ZSB3YXRjaGRvZyBwcm9ncmFtIHRvIHJlYWN0IG9uIGxhY2sgb2YgY293ZmlsZSBzcGFjZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjIyICAyMDA1LzA3LzIwIDA3OjUzOjM0ICByb290Ci0qKiBSZWd1bGFyIHZlcmlmaWNhdGlvbiBvZiBmcmVlIHNwYWNlIGluIGZpbGVzeXN0ZW0gaG9sZGluZyB0aGUgY293ZmlsZQotKiogKGdpdmUgd2FybmluZ3Mgd2hlbmV2ZXIgc3BhY2UgaXMgYWxtb3N0IGV4aGF1c3RlZCkuCi0qKiBUZXJtaW5vbG9neSBjaGFuZ2U6IGNoZWNrc3VtIHJlbmFtZWQgdG8gZmluZ2VycHJpbnQuCi0qKgotKiogUmV2aXNpb24gMS4yMSAgMjAwNS8wNy8xOSAwOToyMTo1MiAgcm9vdAotKiogUmVtb3ZpbmcgbWF4aW11bSBsaW1pdCBvZiAxNiBHYiBwZXIgY293ZGV2aWNlLgotKioKLSoqIFJldmlzaW9uIDEuMjAgIDIwMDUvMDcvMTkgMDc6NTA6MzMgIHJvb3QKLSoqIE1pbm9yIGJ1Z2ZpeGVzIGFuZCBjb3NtZXRpYyBjaGFuZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuMTkgIDIwMDUvMDYvMTAgMTI6Mjk6NTUgIHJvb3QKLSoqIFJlbW92ZWQgbG9jay91bmxvY2sgb3BlcmF0aW9uIGZyb20gY293bG9fb3BlbigpLgotKioKLSoqIFJldmlzaW9uIDEuMTggIDIwMDUvMDUvMDkgMTI6NTY6MjYgIHJvb3QKLSoqIEFsbG93IGEgY293ZGV2aWNlIHRvIGJlIG9wZW4gbW9yZSB0aGFuIG9uY2UKLSoqIChuZWVkZWQgZm9yIHN1cHBvcnQgb2YgUmVpc2VyRlMgYW5kIFhGUykuCi0qKgotKiogUmV2aXNpb24gMS4xNyAgMjAwNS8wMy8xNyAxNDozNjoxNiAgcm9vdAotKiogRml4ZWQgc29tZSBsaWNlbnNlIGlzc3Vlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjE2ICAyMDA1LzAzLzA3IDE0OjQyOjA1ICByb290Ci0qKiBPbmx5IGFsbG93IG9uZSBwYXJhbGxlbCBvcGVuIHBlciBjb3dkZXZpY2UuCi0qKgotKiogUmV2aXNpb24gMS4xNSAgMjAwNS8wMi8xOCAxMTo1MjowNCAgZ2VybG9mCi0qKiBSZWRlc2lnbiB0byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgY293ZGV2aWNlID4gMiBHYiBzcGFjZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjE0ICAyMDA0LzA4LzE3IDE0OjE5OjE2ICBnZXJsb2YKLSoqIE1vZGlmaWVkIG91dHB1dCBvZiAvcHJvYy9jb3dsb29wLgotKioKLSoqIFJldmlzaW9uIDEuMTMgIDIwMDQvMDgvMTYgMDc6MjE6MTAgIGdlcmxvZgotKiogU2VwYXJhdGUgc3RhdGlzdGljYWwgY291bnRlciBmb3IgcmVhZCBvbiByZG9maWxlIGFuZCBjb3dmaWxlLgotKioKLSoqIFJldmlzaW9uIDEuMTIgIDIwMDQvMDgvMTEgMDY6NTI6MTEgIGdlcmxvZgotKiogTW9kaWZpZWQgbWVzc2FnZXMuCi0qKgotKiogUmV2aXNpb24gMS4xMSAgMjAwNC8wOC8xMSAwNjo0NDoxMSAgZ2VybG9mCi0qKiBNb2RpZmllZCBsb2cgbWVzc2FnZXMuCi0qKgotKiogUmV2aXNpb24gMS4xMCAgMjAwNC8wOC8xMCAxMjoyNzoyNyAgZ2VybG9mCi0qKiBDb3NtZXRpYyBjaGFuZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuOSAgMjAwNC8wOC8wOSAxMTo0MzozNyAgZ2VybG9mCi0qKiBSZW1vdmVkIGRvdWJsZSBkZWZpbml0aW9uIG9mIG1ham9yIG51bWJlciAoQ09XTUFKT1IpLgotKioKLSoqIFJldmlzaW9uIDEuOCAgMjAwNC8wOC8wOSAwODowMzozOSAgZ2VybG9mCi0qKiBDbGVhbnVwIG9mIG1lc3NhZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuNyAgMjAwNC8wNS8yNyAwNjozNzozMyAgZ2VybG9mCi0qKiBNb2RpZmllZCAvcHJvYyBtZXNzYWdlLgotKioKLSoqIFJldmlzaW9uIDEuNiAgMjAwNC8wNS8yNiAyMToyMzoyOCAgZ2VybG9mCi0qKiBNb2RpZmllZCAvcHJvYyBvdXRwdXQuCi0qKgotKiogUmV2aXNpb24gMS41ICAyMDA0LzA1LzI2IDEzOjIzOjM0ICBnZXJsb2YKLSoqIFN1cHBvcnQgY293c3luYyB0byBmb3JjZSBmbHVzaGluZyB0aGUgYml0bWFwcyBhbmQgY293aGVhZC4KLSoqCi0qKiBSZXZpc2lvbiAxLjQgIDIwMDQvMDUvMjYgMTE6MTE6MTAgIGdlcmxvZgotKiogVXBkYXRlZCB0aGUgY29tbWVudCB0byB0aGUgYWN0dWFsIHNpdHVhdGlvbi4KLSoqCi0qKiBSZXZpc2lvbiAxLjMgIDIwMDQvMDUvMjYgMTA6NTA6MDAgIGdlcmxvZgotKiogSW1wbGVtZW50ZWQgcmVjb3Zlcnktb3B0aW9uLgotKioKLSoqIFJldmlzaW9uIDEuMiAgMjAwNC8wNS8yNSAxNToxNDo0MSAgZ2VybG9mCi0qKiBNb2RpZmllZCBiaXRtYXAgZmx1c2hpbmcgc3RyYXRlZ3kuCi0qKgotKi8KLQotI2RlZmluZSBDT1dNQUpPUgkyNDEKLQotLy8gI2RlZmluZSBDT1dERUJVRwotCi0jaWZkZWYgCUNPV0RFQlVHCi0jZGVmaW5lIERFQlVHUAkJcHJpbnRrCi0jZGVmaW5lIERDT1cJCUtFUk5fQUxFUlQKLSNlbHNlCi0jZGVmaW5lIERFQlVHUChmb3JtYXQsIHguLi4pCi0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KLSNpZm5kZWYgQVVUT0NPTkZfSU5DTFVERUQKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KLQotI2luY2x1ZGUgImNvd2xvb3AuaCIKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLyogTU9EVUxFX0FVVEhPUigiR2VybG9mIExhbmdldmVsZCA8Z2VybG9mQEFUQ29tcHV0aW5nLm5sPiIpOyAgICAgb2Jzb2xldGUgYWRkcmVzcyAqLwotTU9EVUxFX0FVVEhPUigiSGVuZHJpay1KYW4gVGhvbWFzc2VuIDxoanRAQVRDb21wdXRpbmcubmw+Iik7IC8qIGN1cnJlbnQgbWFpbnRhaW5lciAqLwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb3B5LW9uLXdyaXRlIGxvb3AgZHJpdmVyIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heGNvd3MsICIgTnVtYmVyIG9mIGNvbmZpZ3VyZWQgY293ZGV2aWNlcyAoZGVmYXVsdCAxNikiKTsKLU1PRFVMRV9QQVJNX0RFU0MocmRvZmlsZSwgIiBSZWFkLW9ubHkgZmlsZSBmb3IgL2Rldi9jb3cvMCIpOwotTU9EVUxFX1BBUk1fREVTQyhjb3dmaWxlLCAiIENvd2ZpbGUgZm9yIC9kZXYvY293LzAiKTsKLU1PRFVMRV9QQVJNX0RFU0Mob3B0aW9uLCAiICBSZXBhaXIgY293ZmlsZSBpZiBpbmNvbnNpc3RlbnQ6IG9wdGlvbj1yIik7Ci0KLSNkZWZpbmUgREVWSUNFX05BTUUJImNvdyIKLQotI2RlZmluZQlERkxDT1dTCQkxNgkJLyogZGVmYXVsdCBjb3dsb29wIGRldmljZXMJKi8KLQotc3RhdGljIGludCBtYXhjb3dzID0gREZMQ09XUzsKLW1vZHVsZV9wYXJhbShtYXhjb3dzLCBpbnQsIDApOwotc3RhdGljIGNoYXIgKnJkb2ZpbGUgPSAiIjsKLW1vZHVsZV9wYXJhbShyZG9maWxlLCBjaGFycCwgMCk7Ci1zdGF0aWMgY2hhciAqY293ZmlsZSA9ICIiOwotbW9kdWxlX3BhcmFtKGNvd2ZpbGUsIGNoYXJwLCAwKTsKLXN0YXRpYyBjaGFyICpvcHRpb24gPSAiIjsKLW1vZHVsZV9wYXJhbShvcHRpb24sIGNoYXJwLCAwKTsKLQotLyoKLSoqIHBlciBjb3dkZXZpY2Ugc2V2ZXJhbCBiaXRtYXAgY2h1bmtzIGFyZSBhbGxvd2VkIG9mIE1BUENIVU5LU1ogZWFjaAotKioKLSoqIGVhY2ggYml0bWFwIGNodW5rIGNhbiBkZXNjcmliZSBNQVBDSFVOS1NaICogOCAqIE1BUFVOSVQgYnl0ZXMgb2YgZGF0YQotKiogc3VwcG9zZToKLSoqCU1BUENIVU5LU1ogNDA5NiBhbmQgTUFQVU5JVCAxMDI0IC0tPiA0MDk2ICogOCAqIDEwMjQgPSAzMiBNYiBwZXIgY2h1bmsKLSovCi0jZGVmaW5lCU1BUENIVU5LU1oJNDA5NgkvKiAjYnl0ZXMgcGVyIGJpdG1hcCBjaHVuayAgKGRvIG5vdCBjaGFuZ2UpICAqLwotCi0jZGVmaW5lIFNQQ01JTkJMSwkxMDAJLyogc3BhY2UgdGhyZXNob2xkIHRvIGdpdmUgd2FybmluZyBtZXNzYWdlcyAgKi8KLSNkZWZpbmUgU1BDREZMSU5UVkwJMTYJLyogb25jZSBldmVyeSBTUENERkxJTlRWTCB3cml0ZXMgdG8gY293ZmlsZSwgKi8KLQkJCQkvKiBhdmFpbGFibGUgc3BhY2UgaW4gZmlsZXN5c3RlbSBpcyBjaGVja2VkICAqLwotCi0jZGVmaW5lCUNBTENNQVAoeCkJKCh4KS8oTUFQQ0hVTktTWio4KSkKLSNkZWZpbmUJQ0FMQ0JZVEUoeCkJKCgoeCklKE1BUENIVU5LU1oqOCkpPj4zKQotI2RlZmluZQlDQUxDQklUKHgpCSgoeCkmNykKLQotI2RlZmluZSBBTExDT1cJCTEKLSNkZWZpbmUgQUxMUkRPCQkyCi0jZGVmaW5lIE1JWEVEVVAJCTMKLQotc3RhdGljIGNoYXIJYWxsemVyb2VzW01BUFVOSVRdOwotCi0vKgotKiogYWRtaW5pc3RyYXRpb24gcGVyIGNvd2RldmljZSAocGFpciBvZiBjb3dmaWxlL3Jkb2ZpbGUpCi0qLwotCi0vKiBiaXQtdmFsdWVzIGZvciBzdGF0ZSAqLwotI2RlZmluZQlDT1dERVZPUEVOCTB4MDEJLyogY293ZGV2aWNlIG9wZW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQ09XUldDT1dPUEVOCTB4MDIJLyogY293ZmlsZSBvcGVuZWQgcmVhZC13cml0ZSAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQ09XUkRDT1dPUEVOCTB4MDQJLyogY293ZmlsZSBvcGVuZWQgcmVhZC1vbmx5ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQ09XV0FUQ0hET0cJMHgwOCAJLyogaW9jdGwgZm9yIHdhdGNoZG9nIGNvd2ZpbGUgc3BhY2UgYWN0aXZlICAgKi8KLQotI2RlZmluZQlDT1dDT1dPUEVOCShDT1dSV0NPV09QRU58Q09XUkRDT1dPUEVOKQotCi1zdHJ1Y3QgY293bG9vcF9kZXZpY2UKLXsKLQkvKgotCSoqIGN1cnJlbnQgc3RhdHVzCi0JKi8KLQlpbnQJCXN0YXRlOwkJCS8qIGJpdC12YWx1ZXMgKHNlZSBhYm92ZSkgICAgKi8KLQlpbnQJCW9wZW5jbnQ7CQkvKiAjIG9wZW5zIGZvciBjb3dkZXZpY2UgICAgICovCi0KLSAgICAgICAgLyoKLQkqKiBvcGVuIGZpbGUgcG9pbnRlcnMKLQkqLwotICAgICAgICBzdHJ1Y3QgZmlsZSAgCSpyZG9mcCwgICAqY293ZnA7CS8qIG9wZW4gZmlsZSBwb2ludGVycyAgICAgICAgKi8KLQljaGFyCQkqcmRvbmFtZSwgKmNvd25hbWU7CS8qIGZpbGUgbmFtZXMgICAgICAgICAgICAgICAgKi8KLQotCS8qCi0JKiogcmVxdWVzdCBxdWV1ZSBhZG1pbmlzdHJhdGlvbgotCSovCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUJKnJxdWV1ZTsKLQlzcGlubG9ja190CQlycWxvY2s7Ci0Jc3RydWN0IGdlbmRpc2sJCSpnZDsKLQotCS8qCi0JKiogYWRtaW5pc3RyYXRpb24gYWJvdXQgcmVhZC1vbmx5IGZpbGUKLQkqLwotCXVuc2lnbmVkIGludAkgICAgIG51bWJsb2NrczsJLyogIyBibG9ja3MgaW5wdXQgZmlsZSBpbiBNQVBVTklUICAgICovCi0JdW5zaWduZWQgaW50CSAgICAgYmxvY2tzejsgICAvKiBtaW5pbXVtIHVuaXQgdG8gYWNjZXNzIHRoaXMgZGV2ICAgKi8KLQl1bnNpZ25lZCBsb25nCSAgICAgZmluZ2VycHJpbnQ7IC8qIGZpbmdlcnByaW50IG9mIGN1cnJlbnQgcmRvZmlsZSAgKi8KLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICAqYmVsb3dkZXY7CS8qIGJsb2NrIGRldmljZSBiZWxvdyB1cyAgICAgICAgICAgICAqLwotCXN0cnVjdCBnZW5kaXNrICAgICAgICpiZWxvd2dkOyAgLyogZ2VuZGlzayBmb3IgYmxrIGRldiBiZWxvdyB1cyAgICAgICovCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKmJlbG93cTsJLyogcmVxLiBxdWV1ZSBvZiBibGsgZGV2IGJlbG93IHVzICAgICovCi0KLQkvKgotCSoqIGJpdG1hcCBhZG1pbmlzdHJhdGlvbiB0byByZWdpc3RlciB3aGljaCBibG9ja3MgYXJlIG1vZGlmaWVkCi0JKi8KLQlsb25nIGludAltYXBzaXplOwkvKiB0b3RhbCBzaXplIG9mIGJpdG1hcCAoYnl0ZXMpICAgICAgKi8KLQlsb25nIGludAltYXByZW1haW47CS8qIHJlbWFpbmluZyBieXRlcyBpbiBsYXN0IGJpdG1hcCAgICAqLwotCWludAkJbWFwY291bnQ7ICAgICAgIC8qIG51bWJlciBvZiBiaXRtYXBzIGluIHVzZSAgICAgICAgICAqLwotCWNoYXIgCQkqKm1hcGNhY2hlOwkvKiBhcmVhIHdpdGggcG9pbnRlcnMgdG8gYml0bWFwcyAgICAgKi8KLQotCWNoYXIJCSppb2J1ZjsJCS8qIGRhdGFidWZmZXIgb2YgTUFQVU5JVCBieXRlcyAgICAgICAqLwotCXN0cnVjdCBjb3doZWFkCSpjb3doZWFkOwkvKiBidWZmZXIgY29udGFpbmluZyBjb3doZWFkICAgICAgICAgKi8KLQotCS8qCi0JKiogYWRtaW5pc3RyYXRpb24gZm9yIGludGVyZmFjZSB3aXRoIHRoZSBrZXJuZWwtdGhyZWFkCi0JKi8KLQlpbnQJCXBpZDsJCS8qIHBpZD09MDogbm8gdGhyZWFkIGF2YWlsYWJsZSAgICAgICAqLwotCXN0cnVjdCByZXF1ZXN0CSpyZXE7CQkvKiByZXF1ZXN0IHRvIGJlIGhhbmRsZWQgbm93ICAgICAgICAgKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsJLyogd2FpdC1ROiB0aHJlYWQgd2FpdHMgZm9yIHdvcmsgICAgICovCi0JY2hhcgkJY2xvc2Vkb3duOwkvKiBib29sZWFuOiB0aHJlYWQgZXhpdCByZXF1aXJlZCAgICAgKi8KLQljaGFyCQlxZmlsbGVkOwkvKiBib29sZWFuOiBJL08gcmVxdWVzdCBwZW5kaW5nICAgICAgKi8KLQljaGFyCQlpb2J1c3k7CQkvKiBib29sZWFuOiByZXEgdW5kZXIgdHJlYXRtZW50ICAgICAgKi8KLQotCS8qCi0JKiogYWRtaW5pc3RyYXRpb24gdG8ga2VlcCB0cmFjayBvZiBmcmVlIHNwYWNlIGluIGNvd2ZpbGUgZmlsZXN5c3RlbQotCSovCi0JdW5zaWduZWQgbG9uZwlibGtzaXplOwkvKiBibG9jayBzaXplIG9mIGZzIChieXRlcykgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWJsa3RvdGFsOwkvKiByZWNlbnQgdG90YWwgc3BhY2UgaW4gZnMgKGJsb2NrcykgKi8KLQl1bnNpZ25lZCBsb25nCWJsa2F2YWlsOwkvKiByZWNlbnQgZnJlZSAgc3BhY2UgaW4gZnMgKGJsb2NrcykgKi8KLQotCXdhaXRfcXVldWVfaGVhZF90IHdhdGNocTsJLyogd2FpdC1ROiB3YXRjaGVyIGF3YWl0cyB0aHJlc2hvbGQgICovCi0JdW5zaWduZWQgbG9uZwl3YXRjaHRocmVzaDsJLyogdGhyZXNob2xkIG9mIHdhdGNoZXIgKGJsb2NrcykgICAgICovCi0KLQkvKgotCSoqIHN0YXRpc3RpY2FsIGNvdW50ZXJzCi0JKi8KLQl1bnNpZ25lZCBsb25nCXJkb3JlYWRzOwkvKiBudW1iZXIgb2YgIHJlYWQtYWN0aW9ucyByZG8gICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWNvd3JlYWRzOwkvKiBudW1iZXIgb2YgIHJlYWQtYWN0aW9ucyBjb3cgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWNvd3dyaXRlczsJLyogbnVtYmVyIG9mIHdyaXRlLWFjdGlvbnMgICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwlucmNvd2Jsb2NrczsJLyogbnVtYmVyIG9mIGJsb2NrcyBpbiB1c2Ugb24gY293ICAgICovCi19OwotCi1zdGF0aWMgc3RydWN0IGNvd2xvb3BfZGV2aWNlCSoqY293ZGV2YWxsOwkvKiBwdHIgdG8gcHRycyB0byBhbGwgY293ZGV2aWNlcyAqLwotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgCWNvd2RldmxvY2s7CS8qIGdlbmVyaWMgbG9jayBmb3IgY293ZGV2cyAgICAgICovCi0KLXN0YXRpYyBzdHJ1Y3QgZ2VuZGlzawkJKmNvd2N0bGdkOwkvKiBnZW5kaXNrIGNvbnRyb2wgY2hhbm5lbCAgICAgICAqLwotc3RhdGljIHNwaW5sb2NrX3QJCWNvd2N0bHJxbG9jazsgICAvKiBmb3IgcmVxLnEuIG9mIGN0cmwuIGNoYW5uZWwgICAqLwotCi0vKgotKiogcHJpdmF0ZSBkaXJlY3RvcnkgL3Byb2MvY293Ci0qLwotc3RydWN0IHByb2NfZGlyX2VudHJ5CSpjb3dsb19wcm9jZGlyOwotCi0vKgotKiogZnVuY3Rpb24gcHJvdG90eXBlcwotKi8KLXN0YXRpYyBsb25nIGludCBjb3dsb19kb19yZXF1ZXN0IChzdHJ1Y3QgcmVxdWVzdCAqcmVxKTsKLXN0YXRpYyB2b2lkCWNvd2xvX3N5bmMgICAgICAgKHZvaWQpOwotc3RhdGljIGludAljb3dsb19jaGVja2lvICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgICAgICAgICBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgaW50CWNvd2xvX3JlYWRtaXggICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBpbnQJY293bG9fd3JpdGVtaXggICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGxvbmcgaW50IGNvd2xvX3JlYWRyZG8gICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb19yZWFkY293ICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgbG9uZyBpbnQgY293bG9fcmVhZGNvd3JhdyAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGxvbmcgaW50IGNvd2xvX3dyaXRlY293ICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb193cml0ZWNvd3JhdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgaW50ICAgICAgY293bG9faW9jdGwgICAgICAoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LAotICAgICAgICAgICAJCQkgCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIGludAljb3dsb19tYWtlcGFpciAgICAoc3RydWN0IGNvd3BhaXIgX191c2VyICopOwotc3RhdGljIGludAljb3dsb19yZW1vdmVwYWlyICAodW5zaWduZWQgbG9uZyAgX191c2VyICopOwotc3RhdGljIGludAljb3dsb193YXRjaCAgICAgICAoc3RydWN0IGNvd3BhaXIgX191c2VyICopOwotc3RhdGljIGludAljb3dsb19jb3djdGwgICAgICAodW5zaWduZWQgbG9uZyAgX191c2VyICosIGludCk7Ci1zdGF0aWMgaW50CWNvd2xvX29wZW5wYWlyICAgIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQpOwotc3RhdGljIGludCAJY293bG9fY2xvc2VwYWlyICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqKTsKLXN0YXRpYyBpbnQJY293bG9fb3BlbnJkbyAgICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCBjaGFyICopOwotc3RhdGljIGludAljb3dsb19vcGVuY293ICAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIGNoYXIgKiwgaW50KTsKLXN0YXRpYyB2b2lkCWNvd2xvX3VuZG9fb3BlbnJkbyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZAljb3dsb191bmRvX29wZW5jb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICopOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBTeXN0ZW0gY2FsbCBoYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0qKiBoYW5kbGUgc3lzdGVtIGNhbGwgb3BlbigpL21vdW50KCkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50IGNvd2xvX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQotCWlmICghaW5vZGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGltYWpvcihpbm9kZSkgIT0gQ09XTUFKT1IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB1bmV4cGVjdGVkIG1ham9yICVkXG4iLCBpbWFqb3IoaW5vZGUpKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jc3dpdGNoIChpbWlub3IoaW5vZGUpKSB7Ci0JICAgY2FzZSBDT1dDVEw6Ci0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBvcGVuICVkIGNvbnRyb2xcbiIsIENPV0NUTCk7Ci0JCWJyZWFrOwotCi0JICAgZGVmYXVsdDoKLQkJREVCVUdQKERDT1ciY293bG9vcCAtIG9wZW4gbWlub3IgJWRcbiIsIGltaW5vcihpbm9kZSkpOwotCi0JCWlmICggaW1pbm9yKGlub2RlKSA+PSBtYXhjb3dzICkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCWlmICggISgoY293ZGV2YWxsW2ltaW5vcihpbm9kZSldKS0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkoY293ZGV2YWxsW2ltaW5vcihpbm9kZSldKS0+b3BlbmNudCsrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotKiogaGFuZGxlIHN5c3RlbSBjYWxsIGNsb3NlKCkvdW1vdW50KCkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSovCi1zdGF0aWMgaW50IGNvd2xvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmdkLCBmbW9kZV90IG1vZGUpCi17Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JYmRldiA9IGJkZ2V0X2Rpc2soZ2QsIDApOwotCWlub2RlID0gYmRldi0+YmRfaW5vZGU7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIDA7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVsZWFzZSAoY2xvc2UpIG1pbm9yICVkXG4iLCBpbWlub3IoaW5vZGUpKTsKLQotCWlmICggaW1pbm9yKGlub2RlKSAhPSBDT1dDVEwpCi0JCShjb3dkZXZhbGxbaW1pbm9yKGlub2RlKV0pLT5vcGVuY250LS07Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGhhbmRsZSBzeXN0ZW0gY2FsbCBpb2N0bCgpCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludCBjb3dsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgaGRfZ2VvbWV0cnkJZ2VvOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQotCURFQlVHUChEQ09XICJjb3dsb29wIC0gaW9jdGwgY21kICV4XG4iLCBjbWQpOwotCi0Jc3dpdGNoICggaW1pbm9yKGlub2RlKSApIHsKLQotCSAgIC8qCi0JICAgKiogYWxsb3dlZCB2aWEgY29udHJvbCBkZXZpY2Ugb25seQotCSAgICovCi0JICAgY2FzZSBDT1dDVEw6Ci0JCXN3aXRjaCAoY21kKSB7Ci0JCSAgIC8qCi0JCSAgICoqIHdyaXRlIGFsbCBiaXRtYXAgY2h1bmtzIGFuZCBjb3doZWFkZXJzIHRvIGNvd2ZpbGVzCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XU1lOQzoKLQkJCWRvd24oJmNvd2RldmxvY2spOwotCQkJY293bG9fc3luYygpOwotCQkJdXAoJmNvd2RldmxvY2spOwotCQkJcmV0dXJuIDA7Ci0KLQkJICAgLyoKLQkJICAgKiogb3BlbiBhIG5ldyBjb3dkZXZpY2UgKHBhaXIgb2YgcmRvZmlsZS9jb3dmaWxlKQotCQkgICAqLwotCQkgICBjYXNlIENPV01LUEFJUjoKLQkJCXJldHVybiBjb3dsb19tYWtlcGFpcigodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JCSAgIC8qCi0JCSAgICoqIGNsb3NlIGEgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dSTVBBSVI6Ci0JCQlyZXR1cm4gY293bG9fcmVtb3ZlcGFpcigodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JCSAgIC8qCi0JCSAgICoqIHdhdGNoIGZyZWUgc3BhY2Ugb2YgZmlsZXN5c3RlbSBjb250YWluaW5nIGNvd2ZpbGUKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dXQVRDSDoKLQkJCXJldHVybiBjb3dsb193YXRjaCgodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JCSAgIC8qCi0JCSAgICoqIGNsb3NlIGNvd2ZpbGUgZm9yIGFjdGl2ZSBkZXZpY2UKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dDTE9TRToKLQkJCXJldHVybiBjb3dsb19jb3djdGwoKHZvaWQgX191c2VyICopYXJnLCBDT1dDTE9TRSk7Ci0KLQkJICAgLyoKLQkJICAgKiogcmVvcGVuIGNvd2ZpbGUgcmVhZC1vbmx5IGZvciBhY3RpdmUgZGV2aWNlCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XUkRPUEVOOgotCQkJcmV0dXJuIGNvd2xvX2Nvd2N0bCgodm9pZCBfX3VzZXIgKilhcmcsIENPV1JET1BFTik7Ci0KLQkJICAgZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9IC8qIGVuZCBvZiBzd2l0Y2ggb24gY29tbWFuZCAqLwotCi0JICAgLyoKLQkgICAqKiBhbGxvd2VkIGZvciBhbnkgb3RoZXIgY293ZGV2aWNlCi0JICAgKi8KLQkgICBkZWZhdWx0OgotCQlzd2l0Y2ggKGNtZCkgewotCQkgICAvKgotCQkgICAqKiBIRElPX0dFVEdFTyBtdXN0IGJlIHN1cHBvcnRlZCBmb3IgZmRpc2ssIGV0YwotCQkgICAqLwotCQkgICBjYXNlIEhESU9fR0VUR0VPOgotCQkJZ2VvLmN5bGluZGVycyA9IDA7Ci0JCQlnZW8uaGVhZHMgICAgID0gMDsKLQkJCWdlby5zZWN0b3JzICAgPSAwOwotCi0JCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmdlbywgc2l6ZW9mIGdlbykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQotCQkgICBkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gLyogZW5kIG9mIHN3aXRjaCBvbiBpb2N0bC1jbWQgY29kZSBwYXJhbWV0ZXIgKi8KLQl9IC8qIGVuZCBvZiBzd2l0Y2ggb24gbWlub3IgbnVtYmVyICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgY293bG9fZm9wcyA9Ci17Ci0JLm93bmVyCSA9ICAgICBUSElTX01PRFVMRSwKLSAgICAgICAgLm9wZW4gICAgPSAgICAgY293bG9fb3BlbiwJLyogY2FsbGVkIHVwb24gb3BlbiAgKi8KLSAgICAgICAgLnJlbGVhc2UgPSAgICAgY293bG9fcmVsZWFzZSwJLyogY2FsbGVkIHVwb24gY2xvc2UgKi8KLSAgICAgICAgLmlvY3RsICAgPSAgICAgY293bG9faW9jdGwsICAgICAvKiBjYWxsZWQgdXBvbiBpb2N0bCAqLwotfTsKLQotLyoKLSoqIGhhbmRsZSBpb2N0bC1jb21tYW5kIENPV01LUEFJUjoKLSoqCW9wZW4gYSBuZXcgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkgb24tdGhlLWZseQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX21ha2VwYWlyKHN0cnVjdCBjb3dwYWlyIF9fdXNlciAqYXJnKQotewotCWludAkJaSwgcnY9MDsKLQlzdHJ1Y3QgY293cGFpcgljb3dwYWlyOwotCXVuc2lnbmVkIGNoYXIJKmNvd3BhdGg7Ci0JdW5zaWduZWQgY2hhcgkqcmRvcGF0aDsKLQotCS8qCi0JKiogcmV0cmlldmUgaW5mbyBhYm91dCBwYXRobmFtZXMKLQkqLwotCWlmICggY29weV9mcm9tX3VzZXIoJmNvd3BhaXIsIGFyZywgc2l6ZW9mIGNvd3BhaXIpICkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoIChNQUpPUihjb3dwYWlyLmRldmljZSkgIT0gQ09XTUFKT1IpICYmIChjb3dwYWlyLmRldmljZSAhPSBBTllERVYpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIChNSU5PUihjb3dwYWlyLmRldmljZSkgPj0gbWF4Y293cykgICYmIChjb3dwYWlyLmRldmljZSAhPSBBTllERVYpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSoqIHJldHJpZXZlIHBhdGhuYW1lIHN0cmluZ3MKLQkqLwotCWlmICggKGNvd3BhaXIuY293ZmxlbiA+IFBBVEhfTUFYKSB8fCAoY293cGFpci5yZG9mbGVuID4gUEFUSF9NQVgpICkKLQkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7Ci0KLQlpZiAoICEoY293cGF0aCA9IGttYWxsb2MoY293cGFpci5jb3dmbGVuKzEsIEdGUF9LRVJORUwpKSApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKCBjb3B5X2Zyb21fdXNlcihjb3dwYXRoLCAodm9pZCBfX3VzZXIgKiljb3dwYWlyLmNvd2ZpbGUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3dwYWlyLmNvd2ZsZW4pICkgewotCQlrZnJlZShjb3dwYXRoKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCSooY293cGF0aCtjb3dwYWlyLmNvd2ZsZW4pID0gMDsKLQotCWlmICggIShyZG9wYXRoID0ga21hbGxvYyhjb3dwYWlyLnJkb2ZsZW4rMSwgR0ZQX0tFUk5FTCkpICkgewotCQlrZnJlZShjb3dwYXRoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKCBjb3B5X2Zyb21fdXNlcihyZG9wYXRoLCAodm9pZCBfX3VzZXIgKiljb3dwYWlyLnJkb2ZpbGUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3dwYWlyLnJkb2ZsZW4pICkgewotCQlrZnJlZShyZG9wYXRoKTsKLQkJa2ZyZWUoY293cGF0aCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQkqKHJkb3BhdGgrY293cGFpci5yZG9mbGVuKSA9IDA7Ci0KLQkvKgotCSoqIG9wZW4gbmV3IGNvd2RldmljZQotCSovCi0JaWYgKCBjb3dwYWlyLmRldmljZSA9PSBBTllERVYpIHsKLQkJLyoKLQkJKiogc2VhcmNoIGZpcnN0IHVudXNlZCBtaW5vcgotCQkqLwotCQlmb3IgKGk9MCwgcnY9LUVCVVNZOyBpIDwgbWF4Y293czsgaSsrKSB7Ci0JCQlpZiAoICEoKGNvd2RldmFsbFtpXSktPnN0YXRlICYgQ09XREVWT1BFTikgKSB7Ci0JCQkJcnYgPSBjb3dsb19vcGVucGFpcihyZG9wYXRoLCBjb3dwYXRoLCAwLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChydikgeyAJCS8qIG9wZW4gZmFpbGVkPyAqLwotCQkJa2ZyZWUocmRvcGF0aCk7Ci0JCQlrZnJlZShjb3dwYXRoKTsKLQkJCXJldHVybiBydjsKLQkJfQotCi0JCS8qCi0JCSoqIHJldHVybiBuZXdseSBhbGxvY2F0ZWQgY293ZGV2aWNlIHRvIHVzZXIgc3BhY2UKLQkJKi8KLQkJY293cGFpci5kZXZpY2UgPSBNS0RFVihDT1dNQUpPUiwgaSk7Ci0KLQkJaWYgKCBjb3B5X3RvX3VzZXIoYXJnLCAmY293cGFpciwgc2l6ZW9mIGNvd3BhaXIpKSB7Ci0JCQlrZnJlZShyZG9wYXRoKTsKLQkJCWtmcmVlKGNvd3BhdGgpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UgeyAJCS8qIHNwZWNpZmljIG1pbm9yIHJlcXVlc3RlZCAqLwotCQlpZiAoIChydiA9IGNvd2xvX29wZW5wYWlyKHJkb3BhdGgsIGNvd3BhdGgsIDAsCi0JCQkJCQlNSU5PUihjb3dwYWlyLmRldmljZSkpKSkgewotCQkJa2ZyZWUocmRvcGF0aCk7Ci0JCQlrZnJlZShjb3dwYXRoKTsKLQkJCXJldHVybiBydjsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotKiogaGFuZGxlIGlvY3RsLWNvbW1hbmQgQ09XUk1QQUlSOgotKiogCWRlYWN0aXZhdGUgYW4gZXhpc3RpbmcgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkgb24tdGhlLWZseQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3JlbW92ZXBhaXIodW5zaWduZWQgbG9uZyBfX3VzZXIgKmFyZykKLXsKLQl1bnNpZ25lZCBsb25nCQljb3dkZXZpY2U7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXY7Ci0KLQkvKgotCSoqIHJldHJpZXZlIGluZm8gYWJvdXQgZGV2aWNlIHRvIGJlIHJlbW92ZWQKLQkqLwotCWlmICggY29weV9mcm9tX3VzZXIoJmNvd2RldmljZSwgYXJnLCBzaXplb2YgY293ZGV2aWNlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSoqIHZlcmlmeSBtYWpvci1taW5vciBudW1iZXIKLQkqLwotCWlmICggTUFKT1IoY293ZGV2aWNlKSAhPSBDT1dNQUpPUikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIE1JTk9SKGNvd2RldmljZSkgPj0gbWF4Y293cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljb3dkZXYgPSBjb3dkZXZhbGxbTUlOT1IoY293ZGV2aWNlKV07Ci0KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKgotCSoqIHN5bmNocm9uaXplIGJpdG1hcHMgYW5kIGNsb3NlIGNvd2RldmljZQotCSovCi0JaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4pIHsKLQkJZG93bigmY293ZGV2bG9jayk7Ci0JCWNvd2xvX3N5bmMoKTsKLQkJdXAoJmNvd2RldmxvY2spOwotCX0KLQotCXJldHVybiBjb3dsb19jbG9zZXBhaXIoY293ZGV2KTsKLX0KLQotLyoKLSoqIGhhbmRsZSBpb2N0bC1jb21tYW5kIENPV1dBVENIOgotKioJd2F0Y2ggdGhlIGZyZWUgc3BhY2Ugb2YgdGhlIGZpbGVzeXN0ZW0gY29udGFpbmluZyBhIGNvd2ZpbGUKLSoqICAgICAgb2YgYW4gb3BlbiBjb3dkZXZpY2UKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb193YXRjaChzdHJ1Y3QgY293cGFpciBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldjsKLQlzdHJ1Y3QgY293d2F0Y2gJCWNvd3dhdGNoOwotCi0JLyoKLQkqKiByZXRyaWV2ZSBzdHJ1Y3R1cmUgaG9sZGluZyBpbmZvCi0JKi8KLQlpZiAoIGNvcHlfZnJvbV91c2VyKCZjb3d3YXRjaCwgYXJnLCBzaXplb2YgY293d2F0Y2gpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qCi0JKiogdmVyaWZ5IGlmIGNvd2RldmljZSBleGlzdHMgYW5kIGlzIGN1cnJlbnRseSBvcGVuCi0JKi8KLQlpZiAoIE1JTk9SKGNvd3dhdGNoLmRldmljZSkgPj0gbWF4Y293cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljb3dkZXYgPSBjb3dkZXZhbGxbTUlOT1IoY293d2F0Y2guZGV2aWNlKV07Ci0KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKgotCSoqIGlmIHRoZSBXQVRDSFdBSVQtb3B0aW9uIGlzIHNldCwgd2FpdCB1bnRpbCB0aGUgaW5kaWNhdGVkCi0JKiogdGhyZXNob2xkIGlzIHJlYWNoZWQgKG9ubHkgb25lIHdhaXRlciBhbGxvd2VkKQotCSovCi0JaWYgKGNvd3dhdGNoLmZsYWdzICYgV0FUQ0hXQUlUKSB7Ci0JCS8qCi0JCSoqIGNoZWNrIGlmIGFscmVhZHkgYW5vdGhlciB3YWl0ZXIgYWN0aXZlCi0JCSoqIGZvciB0aGlzIGNvd2RldmljZQotCQkqLwotCQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV1dBVENIRE9HKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJY293ZGV2LT5zdGF0ZSB8PSBDT1dXQVRDSERPRzsKLQotCQljb3dkZXYtPndhdGNodGhyZXNoID0gKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJICAgICAgICAgICAgICAgICAgICAgIGNvd3dhdGNoLnRocmVzaG9sZCAvCi0JCQkJICAgICAgKGNvd2Rldi0+Ymxrc2l6ZSAvIDEwMjQpOwotCi0JCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY293ZGV2LT53YXRjaHEsCi0JCSAgICAgICAgICAgICAgICAgICAgY293ZGV2LT53YXRjaHRocmVzaCA+PSBjb3dkZXYtPmJsa2F2YWlsKSkgewotCQkJY293ZGV2LT5zdGF0ZSAmPSB+Q09XV0FUQ0hET0c7Ci0JCQlyZXR1cm4gRUlOVFI7Ci0JCX0KLQotCQljb3dkZXYtPnN0YXRlICY9IH5DT1dXQVRDSERPRzsKLQl9Ci0KLQljb3d3YXRjaC50b3RhbGtiID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljb3dkZXYtPmJsa3RvdGFsICoKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3dkZXYtPmJsa3NpemUgLyAxMDI0OwotCWNvd3dhdGNoLmF2YWlsa2IgPSAodW5zaWduZWQgbG9uZyBsb25nKWNvd2Rldi0+YmxrYXZhaWwgKgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvd2Rldi0+Ymxrc2l6ZSAvIDEwMjQ7Ci0KLQlpZiAoIGNvcHlfdG9fdXNlcihhcmcsICZjb3d3YXRjaCwgc2l6ZW9mIGNvd3dhdGNoKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGhhbmRsZSBpb2N0bC1jb21tYW5kcyBDT1dDTE9TRSBhbmQgQ09XUkRPUEVOOgotKioJQ09XQ0xPU0UgIC0gY2xvc2UgdGhlIGNvd2ZpbGUgd2hpbGUgdGhlIGNvd2RldmljZSByZW1haW5zIG9wZW47Ci0qKiAgICAgICAgICAgICAgICAgIHRoaXMgYWxsb3dzIGFuIHVubW91bnQgb2YgdGhlIGZpbGVzeXN0ZW0gb24gd2hpY2gKLSoqICAgICAgICAgICAgICAgICAgdGhlIGNvd2ZpbGUgcmVzaWRlcwotKioJQ09XUkRPUEVOIC0gY2xvc2UgdGhlIGNvd2ZpbGUgYW5kIHJlb3BlbiBpdCBmb3IgcmVhZC1vbmx5OwotKiogICAgICAgICAgICAgICAgICB0aGlzIGFsbG93cyBhIHJlbW91bnQgcmVhZC1vbnkgb2YgdGhlIGZpbGVzeXN0ZW0KLSoqICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGNvd2ZpbGUgcmVzaWRlcwotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX2Nvd2N0bCh1bnNpZ25lZCBsb25nIF9fdXNlciAqYXJnLCBpbnQgY21kKQotewotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCXVuc2lnbmVkIGxvbmcJCWNvd2RldmljZTsKLQotCS8qCi0JKiogcmV0cmlldmUgaW5mbyBhYm91dCBkZXZpY2UgdG8gYmUgcmVtb3ZlZAotCSovCi0JaWYgKCBjb3B5X2Zyb21fdXNlcigmY293ZGV2aWNlLCBhcmcsIHNpemVvZiBjb3dkZXZpY2UpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qCi0JKiogdmVyaWZ5IG1ham9yLW1pbm9yIG51bWJlcgotCSovCi0JaWYgKCBNQUpPUihjb3dkZXZpY2UpICE9IENPV01BSk9SKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICggTUlOT1IoY293ZGV2aWNlKSA+PSBtYXhjb3dzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNvd2RldiA9IGNvd2RldmFsbFtNSU5PUihjb3dkZXZpY2UpXTsKLQotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XREVWT1BFTikgKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JKiogc3luY2hyb25pemUgYml0bWFwcyBhbmQgY2xvc2UgY293ZmlsZQotCSovCi0JaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4pIHsKLQkJZG93bigmY293ZGV2bG9jayk7Ci0JCWNvd2xvX3N5bmMoKTsKLQkJdXAoJmNvd2RldmxvY2spOwotCX0KLQotCS8qCi0JKiogaGFuZGxlIHNwZWNpZmljIGlvY3RsLWNvbW1hbmQKLQkqLwotCXN3aXRjaCAoY21kKSB7Ci0JICAgY2FzZSBDT1dSRE9QRU46Ci0JCS8qCi0JCSoqIGlmIHRoZSBjb3dmaWxlIGlzIHN0aWxsIG9wZW5lZCByZWFkLXdyaXRlCi0JCSovCi0JCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSB7Ci0JCQkvKgotCQkJKiogY2xvc2UgdGhlIGNvd2ZpbGUKLQkJCSovCi0gIAkJCWlmIChjb3dkZXYtPmNvd2ZwKQotCQkgIAkJZmlscF9jbG9zZShjb3dkZXYtPmNvd2ZwLCAwKTsKLQotCQkJY293ZGV2LT5zdGF0ZSAmPSB+Q09XUldDT1dPUEVOOwotCi0JCQkvKgotCQkJKiogb3BlbiBhZ2FpbiBmb3IgcmVhZC1vbmx5Ci0JCQkqLwotCQkJY293ZGV2LT5jb3dmcCA9IGZpbHBfb3Blbihjb3dkZXYtPmNvd25hbWUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgT19SRE9OTFl8T19MQVJHRUZJTEUsIDA2MDApOwotCi0JCQlpZiAoIChjb3dkZXYtPmNvd2ZwID09IE5VTEwpIHx8IElTX0VSUihjb3dkZXYtPmNvd2ZwKSApIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICJjb3dsb29wIC0gZmFpbGVkIHRvIHJlb3BlbiBjb3dmaWxlICVzXG4iLAotCQkJCSAgICAgY293ZGV2LT5jb3duYW1lKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJLyoKLQkJCSoqIG1hcmsgY293ZmlsZSBvcGVuIGZvciByZWFkLW9ubHkKLQkJCSovCi0JCQljb3dkZXYtPnN0YXRlIHw9IENPV1JEQ09XT1BFTjsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCi0JICAgY2FzZSBDT1dDTE9TRToKLQkJLyoKLQkJKiogaWYgdGhlIGNvd2ZpbGUgaXMgc3RpbGwgb3BlbgotCQkqLwotCQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV0NPV09QRU4pIHsKLQkJCS8qCi0JCQkqKiBjbG9zZSB0aGUgY293ZmlsZQotCQkJKi8KLSAgCQkJaWYgKGNvd2Rldi0+Y293ZnApCi0JCSAgCQlmaWxwX2Nsb3NlKGNvd2Rldi0+Y293ZnAsIDApOwotCi0JCQljb3dkZXYtPnN0YXRlICY9IH5DT1dDT1dPUEVOOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSGFuZGxpbmcgb2YgSS9PLXJlcXVlc3RzIGZvciBhIGNvd2RldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IGNvcmUta2VybmVsIHRvIGhhbmRsZSB0aGUgSS9PLXJlcXVlc3RzCi0qKiBpbiB0aGUgcXVldWUKLSovCi1zdGF0aWMgdm9pZCBjb3dsb19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCXN0cnVjdCByZXF1ZXN0CQkqcmVxOwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCi0JREVCVUdQKERDT1cgImNvd2xvb3AgLSByZXF1ZXN0IGZ1bmN0aW9uIGNhbGxlZC4uLi5cbiIpOwotCi0Jd2hpbGUoKHJlcSA9IGJsa19wZWVrX3JlcXVlc3QocSkpICE9IE5VTEwpIHsKLQkJREVCVUdQKERDT1cgImNvd2xvb3AgLSBnb3QgbmV4dCByZXF1ZXN0XG4iKTsKLQotCQlpZiAoISBibGtfZnNfcmVxdWVzdChyZXEpKSB7Ci0gICAgICAgICAgICAgICAJCSAvKiB0aGlzIGlzIG5vdCBhIG5vcm1hbCBmaWxlIHN5c3RlbSByZXF1ZXN0ICovCi0gICAgICAgICAgICAgICAgCV9fYmxrX2VuZF9yZXF1ZXN0X2N1cihyZXEsIC1FSU8pOwotICAgICAgICAgICAgICAgIAljb250aW51ZTsKLSAgICAgICAgCX0KLQkJY293ZGV2ID0gcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQkJaWYgKGNvd2Rldi0+aW9idXN5KQotCQkJcmV0dXJuOwotCQllbHNlCi0JCQljb3dkZXYtPmlvYnVzeSA9IDE7Ci0KLQkJLyoKLQkJKiogd2hlbiBubyBrZXJuZWwtdGhyZWFkIGlzIGF2YWlsYWJsZSwgdGhlIHJlcXVlc3Qgd2lsbAotCQkqKiBwcm9kdWNlIGFuIEkvTy1lcnJvcgotCQkqLwotCQlpZiAoIWNvd2Rldi0+cGlkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIiY293bG9vcCAtIG5vIHRocmVhZCBhdmFpbGFibGVcbiIpOwotCQkJX19ibGtfZW5kX3JlcXVlc3RfY3VyKHJlcSwgLUVJTyk7CS8qIHJlcXVlc3QgZmFpbGVkICovCi0JCQljb3dkZXYtPmlvYnVzeQk9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSoqIGhhbmRsZSBJL08tcmVxdWVzdCBpbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsLXRocmVhZAotCQkqLwotCQljb3dkZXYtPnJlcSAJPSByZXE7Ci0JCWNvd2Rldi0+cWZpbGxlZAk9IDE7Ci0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJmNvd2Rldi0+d2FpdHEpOwotCi0JCS8qCi0JCSoqIGdldCBvdXQgb2YgdGhpcyBmdW5jdGlvbiBub3cgd2hpbGUgdGhlIEkvTy1yZXF1ZXN0IGlzCi0JCSoqIHVuZGVyIHRyZWF0bWVudCBvZiB0aGUga2VybmVsLXRocmVhZDsgdGhpcyBmdW5jdGlvbgotCQkqKiB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBhZnRlciB0aGUgY3VycmVudCBJL08tcmVxdWVzdCBoYXMKLQkJKiogYmVlbiBmaW5pc2hlZCBieSB0aGUgdGhyZWFkCi0JCSovCi0JCXJldHVybjsKLQl9Ci19Ci0KLS8qCi0qKiBkYWVtb24tcHJvY2VzcyAoa2VybmVsLXRocmVhZCkgZXhlY3V0ZXMgdGhpcyBmdW5jdGlvbgotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX2RhZW1vbihzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldikKLXsKLQlpbnQJcnY7Ci0JaW50ICAgICBtaW5vcjsKLQljaGFyCW15bmFtZVsxNl07Ci0KLQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0JCWlmIChjb3dkZXYgPT0gY293ZGV2YWxsW21pbm9yXSkgYnJlYWs7Ci0JfQotCXNwcmludGYobXluYW1lLCAiY293bG9vcGQlZCIsIG1pbm9yKTsKLQotICAgICAgICBkYWVtb25pemUobXluYW1lKTsKLQotCXdoaWxlICghY293ZGV2LT5jbG9zZWRvd24pIHsKLQkJLyoKLQkJKiogc2xlZXAgd2hpbGUgd2FpdGluZyBmb3IgYW4gSS9PIHJlcXVlc3Q7Ci0JCSoqIG5vdGUgdGhhdCBubyBub24taW50ZXJydXB0aWJsZSB3YWl0IGhhcyBiZWVuIHVzZWQKLQkJKiogYmVjYXVzZSB0aGUgbm9uLWludGVycnVwdGlibGUgdmVyc2lvbiBvZgotCQkqKiBhICpzeW5jaHJvbm91cyogd2FrZV91cCBkb2VzIG5vdCBleGlzdCAoYW55IG1vcmUpCi0JCSovCi0JCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY293ZGV2LT53YWl0cSwgY293ZGV2LT5xZmlsbGVkKSl7Ci0JCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOyAvKiBpZ25vcmUgc2lnbmFsLWJhc2VkIHdha2V1cCAqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoY293ZGV2LT5jbG9zZWRvd24pCQkvKiBtb2R1bGUgd2lsbCBiZSB1bmxvYWRlZCA/ICovewotCQkJY293ZGV2LT5waWQgPSAwOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKgotCQkqKiB3b2tlbiB1cCBieSB0aGUgSS9PLXJlcXVlc3QgaGFuZGxlcjoJdHJlYXQgcmVxdWVzdGVkIEkvTwotCQkqLwotCQljb3dkZXYtPnFmaWxsZWQgPSAwOwotCi0JCXJ2ID0gY293bG9fZG9fcmVxdWVzdChjb3dkZXYtPnJlcSk7Ci0KLQkJLyoKLQkJKiogcmVhY3F1aXJlIHRoZSBxdWV1ZS1zcGlubG9jayBmb3IgbWFuaXB1bGF0aW5nCi0JCSoqIHRoZSByZXF1ZXN0LXF1ZXVlIGFuZCBkZXF1ZXVlIHRoZSByZXF1ZXN0Ci0JCSovCi0JCXNwaW5fbG9ja19pcnEoJmNvd2Rldi0+cnFsb2NrKTsKLQotCQlfX2Jsa19lbmRfcmVxdWVzdF9jdXIoY293ZGV2LT5yZXEsIHJ2KTsKLQkJY293ZGV2LT5pb2J1c3kgPSAwOwotCi0JCS8qCi0JCSoqIGluaXRpYXRlIHRoZSBuZXh0IHJlcXVlc3QgZnJvbSB0aGUgcXVldWUKLQkJKi8KLQkJY293bG9fcmVxdWVzdChjb3dkZXYtPnJxdWV1ZSk7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxKCZjb3dkZXYtPnJxbG9jayk7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotKiogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwgdGhyZWFkCi0qKiB0byBoYW5kbGUgdGhlIHF1ZXVlZCBJL08tcmVxdWVzdHMKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIGZhaWwKLSoqICAgICAgMSAgIC0gc3VjY2VzcwotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fZG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxKQotewotCXVuc2lnbmVkIGxvbmcJCWxlbjsKLQlsb25nIGludAkJcnY7Ci0JbG9mZl90IAkJCW9mZnNldDsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldiA9IHJlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JLyoKLQkqKiBjYWxjdWxhdGUgc29tZSB2YXJpYWJsZXMgd2hpY2ggYXJlIG5lZWRlZCBsYXRlciBvbgotCSovCi0JbGVuICAgICA9ICAgICAgICAgIGJsa19ycV9jdXJfc2VjdG9ycyhyZXEpIDw8IDk7Ci0Jb2Zmc2V0ICA9IChsb2ZmX3QpIGJsa19ycV9wb3MocmVxKSAgICAgICAgIDw8IDk7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVxIGNtZD0lZCBvZmZzZXQ9JWxsZCBsZW49JWx1IGFkZHI9JXBcbiIsCi0JCQkJKihyZXEtPmNtZCksIG9mZnNldCwgbGVuLCByZXEtPmJ1ZmZlcik7Ci0KLQkvKgotCSoqIGhhbmRsZSBSRUFELSBvciBXUklURS1yZXF1ZXN0Ci0JKi8KLQlzd2l0Y2ggKHJxX2RhdGFfZGlyKHJlcSkpIHsKLQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkgICBjYXNlIFJFQUQ6Ci0JCXN3aXRjaCAoIGNvd2xvX2NoZWNraW8oY293ZGV2LCBsZW4sIG9mZnNldCkgKSB7Ci0JCSAgIGNhc2UgQUxMQ09XOgotCQkJcnYgPSBjb3dsb19yZWFkY293KGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwotCi0JCSAgIGNhc2UgQUxMUkRPOgotCQkJcnYgPSBjb3dsb19yZWFkcmRvKGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwotCi0JICAgCSAgIGNhc2UgTUlYRURVUDoKLQkJCXJ2ID0gY293bG9fcmVhZG1peChjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsKLQotCQkgICBkZWZhdWx0OgotCQkJcnYgPSAwOwkvKiBuZXZlciBoYXBwZW5zICovCi0JCX0KLQkJYnJlYWs7Ci0KLQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkgICBjYXNlIFdSSVRFOgotCQlzd2l0Y2ggKCBjb3dsb19jaGVja2lvKGNvd2RldiwgbGVuLCBvZmZzZXQpICkgewotCQkgICBjYXNlIEFMTENPVzoKLQkJCS8qCi0JCQkqKiBzdHJhaWdodC1mb3J3YXJkIHdyaXRlIHdpbGwgZG8uLi4KLQkJCSovCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gd3JpdGUgc3RyYWlnaHQgIik7Ci0KLQkJCXJ2ID0gY293bG9fd3JpdGVjb3coY293ZGV2LCByZXEtPmJ1ZmZlciwgbGVuLCBvZmZzZXQpOwotCQkJYnJlYWs7CS8qIGZyb20gc3dpdGNoICovCi0KLQkJICAgY2FzZSBBTExSRE86Ci0JCQlpZiAoIChsZW4gJiBNVU1BU0spID09IDApIHsKLQkJCQlERUJVR1AoRENPVyJjb3dsb29wIC0gd3JpdGUgc3RyYWlnaHQgIik7Ci0KLQkJCQlydiA9IGNvd2xvX3dyaXRlY293KGNvd2RldiwgcmVxLT5idWZmZXIsCi0JCQkJCQkJCWxlbiwgb2Zmc2V0KTsKLQkJCQlicmVhazsKLQkJCX0KLQotCSAgIAkgICBjYXNlIE1JWEVEVVA6Ci0JCQlydiA9IGNvd2xvX3dyaXRlbWl4KGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwotCi0JCSAgIGRlZmF1bHQ6Ci0JCQlydiA9IDA7CS8qIG5ldmVyIGhhcHBlbnMgKi8KLQkJfQotCQlicmVhazsKLQotCSAgIGRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSB1bnJlY29nbml6ZWQgY29tbWFuZCAlZFxuIiwgKihyZXEtPmNtZCkpOwotCQlydiA9IDA7Ci0JfQotCi0JcmV0dXJuIChydiA8PSAwID8gMCA6IDEpOwotfQotCi0vKgotKiogY2hlY2sgZm9yIGEgZ2l2ZW4gSS9PLXJlcXVlc3QgaWYgYWxsIHVuZGVybHlpbmcgYmxvY2tzCi0qKiAod2l0aCBzaXplIE1BUFVOSVQpIGFyZSBlaXRoZXIgaW4gdGhlIHJlYWQtb25seSBmaWxlIG9yIGluCi0qKiB0aGUgY293ZmlsZSAob3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvKQotKioKLSoqIHJldHVybnM6Ci0qKiAJQUxMUkRPICAtIGFsbCB1bmRlcmx5aW5nIGJsb2NrcyBpbiByZG9maWxlCi0qKiAgICAgIEFMTENPVyAgLSBhbGwgdW5kZXJseWluZyBibG9ja3MgaW4gY293ZmlsZQotKiogICAgICBNSVhFRFVQIC0gdW5kZXJseWluZyBibG9ja3MgcGFydGx5IGluIHJkb2ZpbGUgYW5kIHBhcnRseSBpbiBjb3dmaWxlCi0qLwotc3RhdGljIGludAotY293bG9fY2hlY2tpbyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nCW1hcG51bSwgYnl0ZW51bSwgYml0bnVtLCBibG9ja25yLCBwYXJ0bGVuOwotCWxvbmcgaW50CXRvdGNudCwgY293Y250OwotCWNoYXIJCSptYzsKLQotCS8qCi0JKiogbm90aWNlIHRoYXQgdGhlIHJlcXVlc3RlZCBibG9jayBtaWdodCBjcm9zcwotCSoqIGEgYmxvY2tzaXplIGJvdW5kYXJ5IHdoaWxlIG9uZSBvZiB0aGUgY29uY2VybmVkCi0JKiogYmxvY2tzIHJlc2lkZXMgaW4gdGhlIHJlYWQtb25seSBmaWxlIGFuZCBhbm90aGVyCi0JKiogb25lIGluIHRoZSBjb3B5LW9uLXdyaXRlIGZpbGU7IGluIHRoYXQgY2FzZSB0aGUKLSAgICAgICAgKiogcmVxdWVzdCB3aWxsIGJlIGJyb2tlbiB1cCBpbnRvIHBpZWNlcwotCSovCi0JaWYgKCAobGVuIDw9IE1BUFVOSVQpICYmCi0JICAgICAoTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spIDw9IGxlbikgKSB7Ci0JCS8qCi0JCSoqIGVhc3kgc2l0dWF0aW9uOgotCQkqKiByZXF1ZXN0ZWQgZGF0YS1ibG9jayBlbnRpcmVseSBmaXRzIHdpdGhpbgotCQkqKiB0aGUgbWFwdW5pdCB1c2VkIGZvciB0aGUgYml0bWFwCi0JCSoqIGNoZWNrIGlmIHRoYXQgYmxvY2sgaXMgbG9jYXRlZCBpbiByZG9maWxlIG9yCi0JCSoqIGNvd2ZpbGUKLQkJKi8KLQkJYmxvY2tuciA9IG9mZnNldCA+PiBNVVNISUZUOwotCi0JCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja25yKTsKLQkJYnl0ZW51bSA9IENBTENCWVRFKGJsb2NrbnIpOwotCQliaXRudW0gID0gQ0FMQ0JJVCAoYmxvY2tucik7Ci0KLQkJaWYgKCooKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkrYnl0ZW51bSkmKDE8PGJpdG51bSkpCi0JCQlyZXR1cm4gQUxMQ09XOwotCQllbHNlCi0JCQlyZXR1cm4gQUxMUkRPOwotCX0KLQotCS8qCi0JKiogbGVzcyBlYXN5IHNpdHVhdGlvbjoKLQkqKiB0aGUgcmVxdWVzdGVkIGRhdGEtYmxvY2sgZG9lcyBub3QgZml0IHdpdGhpbiB0aGUgbWFwdW5pdAotCSoqIHVzZWQgZm9yIHRoZSBiaXRtYXAKLQkqKiBjaGVjayBpZiAqYWxsKiB1bmRlcmx5aW5nIGJsb2NrcyBpbnZvbHZlZCByZXNpZGUgb24gdGhlIHJkb2ZpbGUKLSAgICAgICAJKiogb3IgdGhlIGNvd2ZpbGUgKHNvIHN0aWxsIG5vIGJyZWFrdXAgcmVxdWlyZWQpCi0JKi8KLQlmb3IgKGNvd2NudD10b3RjbnQ9MDsgbGVuID4gMDsgbGVuLT1wYXJ0bGVuLCBvZmZzZXQrPXBhcnRsZW4sIHRvdGNudCsrKXsKLQkJLyoKLQkJKiogY2FsY3VsYXRlIGJsb2NrbnIgb2YgaW52b2x2ZWQgYmxvY2sKLQkJKi8KLQkJYmxvY2tuciA9IG9mZnNldCA+PiBNVVNISUZUOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwYXJ0aWFsIGxlbmd0aCBmb3IgdGhpcyB0cmFuc2ZlcgotCQkqLwotCQlwYXJ0bGVuID0gTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spOwotCQlpZiAocGFydGxlbiA+IGxlbikKLQkJCXBhcnRsZW4gPSBsZW47Ci0KLQkJLyoKLQkJKiogaXMgdGhpcyBibG9jayBsb2NhdGVkIGluIHRoZSBjb3dmaWxlCi0JCSovCi0JCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja25yKTsKLQkJYnl0ZW51bSA9IENBTENCWVRFKGJsb2NrbnIpOwotCQliaXRudW0gID0gQ0FMQ0JJVCAoYmxvY2tucik7Ci0KLQkJbWMJPSAqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKTsKLQotCQlpZiAoKihtYytieXRlbnVtKSYoMTw8Yml0bnVtKSkKLQkJCWNvd2NudCsrOzsKLQotCQlERUJVR1AoRENPVwotCQkgICAgICAgImNvd2xvb3AgLSBjaGVjayAlbHUgLSBtYXAgJWx1LCBieXRlICVsdSwgYml0ICVsdSwgIgotCQkgICAgICAgImNvd2NudCAlbGQsIHRvdGNudCAlbGQgJTAyeCAlcFxuIiwKLQkJCWJsb2NrbnIsIG1hcG51bSwgYnl0ZW51bSwgYml0bnVtLCBjb3djbnQsIHRvdGNudCwKLQkJCSoobWMrYnl0ZW51bSksIG1jKTsKLQl9Ci0KLQlpZiAoY293Y250ID09IDApCS8qIGFsbCBpbnZvbHZlZCBibG9ja3Mgb24gcmRvZmlsZT8gKi8KLQkJcmV0dXJuIEFMTFJETzsKLQotCWlmIChjb3djbnQgPT0gdG90Y250KQkvKiBhbGwgaW52b2x2ZWQgYmxvY2tzIG9uIGNvd2ZpbGU/ICovCi0JCXJldHVybiBBTExDT1c7Ci0KLQkvKgotCSoqIHNpdHVhdGlvbiBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkOgotCSoqIGludm9sdmVkIHVuZGVybHlpbmcgYmxvY2tzIHNwcmVhZCBvdmVyIGJvdGggZmlsZXMKLQkqLwotCXJldHVybiBNSVhFRFVQOwotfQotCi0vKgotKiogcmVhZCByZXF1ZXN0ZWQgY2h1bmsgcGFydGx5IGZyb20gcmRvZmlsZSBhbmQgcGFydGx5IGZyb20gY293ZmlsZQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gZmFpbAotKiogICAgICAxICAgLSBzdWNjZXNzCi0qLwotc3RhdGljIGludAotY293bG9fcmVhZG1peChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2Rldiwgdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCXVuc2lnbmVkIGxvbmcJbWFwbnVtLCBieXRlbnVtLCBiaXRudW0sIGJsb2NrbnIsIHBhcnRsZW47Ci0JbG9uZyBpbnQJcnY7Ci0JY2hhcgkJKm1jOwotCi0JLyoKLQkqKiBjb21wbGljYXRlZCBhcHByb2FjaDogYnJlYWt1cCByZXF1aXJlZCBvZiByZWFkLXJlcXVlc3QKLQkqLwotCWZvciAocnY9MTsgbGVuID4gMDsgbGVuLT1wYXJ0bGVuLCBidWYrPXBhcnRsZW4sIG9mZnNldCs9cGFydGxlbikgewotCQkvKgotCQkqKiBjYWxjdWxhdGUgYmxvY2tuciBvZiBlbnRpcmUgYmxvY2sKLQkJKi8KLQkJYmxvY2tuciA9IG9mZnNldCA+PiBNVVNISUZUOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwYXJ0aWFsIGxlbmd0aCBmb3IgdGhpcyB0cmFuc2ZlcgotCQkqLwotCQlwYXJ0bGVuID0gTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spOwotCQlpZiAocGFydGxlbiA+IGxlbikKLQkJCXBhcnRsZW4gPSBsZW47Ci0KLQkJLyoKLQkJKiogaXMgdGhpcyBibG9jayBsb2NhdGVkIGluIHRoZSBjb3dmaWxlCi0JCSovCi0JCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja25yKTsKLQkJYnl0ZW51bSA9IENBTENCWVRFKGJsb2NrbnIpOwotCQliaXRudW0gID0gQ0FMQ0JJVCAoYmxvY2tucik7Ci0JCW1jCT0gKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSk7Ci0KLQkJaWYgKCoobWMrYnl0ZW51bSkmKDE8PGJpdG51bSkpIHsKLQkJCS8qCi0JCQkqKiByZWFkIChwYXJ0aWFsKSBibG9jayBmcm9tIGNvd2ZpbGUKLQkJCSovCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gc3BsaXQgcmVhZCAiCi0JCQkJImNvdyBwYXJ0bGVuPSVsZCBvZmY9JWxsZFxuIiwgcGFydGxlbiwgb2Zmc2V0KTsKLQotCQkJaWYgKGNvd2xvX3JlYWRjb3coY293ZGV2LCBidWYsIHBhcnRsZW4sIG9mZnNldCkgPD0gMCkKLQkJCQlydiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJKiogcmVhZCAocGFydGlhbCkgYmxvY2sgZnJvbSByZG9maWxlCi0JCQkqLwotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHNwbGl0IHJlYWQgIgotCQkJCSJyZG8gcGFydGxlbj0lbGQgb2ZmPSVsbGRcbiIsIHBhcnRsZW4sIG9mZnNldCk7Ci0KLQkJCWlmIChjb3dsb19yZWFkcmRvKGNvd2RldiwgYnVmLCBwYXJ0bGVuLCBvZmZzZXQpIDw9IDApCi0JCQkJcnYgPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogY2h1bmsgdG8gYmUgd3JpdHRlbiB0byB0aGUgY293ZmlsZSBuZWVkcyBwaWVjZXMgdG8gYmUKLSoqIHJlYWQgZnJvbSB0aGUgcmRvZmlsZQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gZmFpbAotKiogICAgICAxICAgLSBzdWNjZXNzCi0qLwotc3RhdGljIGludAotY293bG9fd3JpdGVtaXgoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nCW1hcG51bSwgYnl0ZW51bSwgYml0bnVtLCBibG9ja25yLCBwYXJ0bGVuOwotCWxvbmcgaW50CXJ2OwotCWNoYXIJCSptYzsKLQotCS8qCi0JKiogc29tZXdoYXQgbW9yZSBjb21wbGljYXRlZCBzdHVmZiBpcyByZXF1aXJlZDoKLQkqKiBpZiB0aGUgcmVxdWVzdCBpcyBsYXJnZXIgdGhhbiBvbmUgdW5kZXJseWluZwotCSoqIGJsb2NrIG9yIGlzIHNwcmVhZCBvdmVyIHR3byB1bmRlcmx5aW5nIGJsb2NrcywKLQkqKiBzcGxpdCB0aGUgcmVxdWVzdCBpbnRvIHBpZWNlczsgaWYgYSBibG9jayBkb2VzIG5vdAotCSoqIHN0YXJ0IGF0IGEgYmxvY2sgYm91bmRhcnksIHRha2UgY2FyZSB0aGF0Ci0JKiogc3Vycm91bmRpbmcgZGF0YSBpcyByZWFkIGZpcnN0IChpZiBuZWVkZWQpLAotCSoqIGZpdCB0aGUgbmV3IGRhdGEgaW4gYW5kIHdyaXRlIGl0IGFzIGEgZnVsbCBibG9jawotCSovCi0JZm9yIChydj0xOyBsZW4gPiAwOyBsZW4tPXBhcnRsZW4sIGJ1Zis9cGFydGxlbiwgb2Zmc2V0Kz1wYXJ0bGVuKSB7Ci0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwYXJ0aWFsIGxlbmd0aCBmb3IgdGhpcyB0cmFuc2ZlcgotCQkqLwotCQlwYXJ0bGVuID0gTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spOwotCQlpZiAocGFydGxlbiA+IGxlbikKLQkJCXBhcnRsZW4gPSBsZW47Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIGJsb2NrbnIgb2YgZW50aXJlIGJsb2NrCi0JCSovCi0JCWJsb2NrbnIgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQkvKgotCQkqKiBoYXMgdGhpcyBibG9jayBiZWVuIHdyaXR0ZW4gYmVmb3JlPwotCQkqLwotCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tucik7Ci0JCWJ5dGVudW0gPSBDQUxDQllURShibG9ja25yKTsKLQkJYml0bnVtICA9IENBTENCSVQgKGJsb2NrbnIpOwotCQltYwk9ICooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pOwotCi0JCWlmICgqKG1jK2J5dGVudW0pJigxPDxiaXRudW0pKSB7Ci0JCQkvKgotCQkJKiogYmxvY2sgaGFzIGJlZW4gd3JpdHRlbiBiZWZvcmU7Ci0JCQkqKiB3cml0ZSB0cmFuc3BhcmFudGx5IHRvIGNvd2ZpbGUKLQkJCSovCi0JCQlERUJVR1AoRENPVwotCQkJICAgICAgICJjb3dsb29wIC0gc3BsaXR3ciB0cmFuc3BcbiIpOwotCi0JCQlpZiAoY293bG9fd3JpdGVjb3coY293ZGV2LCBidWYsIHBhcnRsZW4sIG9mZnNldCkgPD0gMCkKLQkJCQlydiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJKiogYmxvY2sgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiBiZWZvcmUsCi0JCQkqKiBzbyByZWFkIGVudGlyZSBibG9jayBmcm9tCi0JCQkqKiByZWFkLW9ubHkgZmlsZSBmaXJzdCwgdW5sZXNzCi0JCQkqKiBhIGZ1bGwgYmxvY2sgaXMgcmVxdWVzdGVkIHRvCi0JCQkqKiBiZSB3cml0dGVuCi0JCQkqLwotCQkJaWYgKHBhcnRsZW4gPCBNQVBVTklUKSB7Ci0JCQkJaWYgKGNvd2xvX3JlYWRyZG8oY293ZGV2LCBjb3dkZXYtPmlvYnVmLAotCQkJCSAgICAgIE1BUFVOSVQsIChsb2ZmX3QpYmxvY2tuciA8PCBNVVNISUZUKSA8PSAwKQotCQkJCQlydiA9IDA7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkqKiB0cmFuc2ZlciBtb2RpZmllZCBwYXJ0IGludG8KLQkJCSoqIHRoZSBibG9jayBqdXN0IHJlYWQKLQkJCSovCi0JCQltZW1jcHkoY293ZGV2LT5pb2J1ZiArIChvZmZzZXQgJiBNVU1BU0spLCBidWYsIHBhcnRsZW4pOwotCi0JCQkvKgotCQkJKiogd3JpdGUgZW50aXJlIGJsb2NrIHRvIGNvd2ZpbGUKLQkJCSovCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gc3BsaXQgIgotCQkJCSJwYXJ0bGVuPSVsZCBvZmY9JWxsZFxuIiwKLQkJCQlwYXJ0bGVuLCAobG9mZl90KWJsb2NrbnIgPDwgTVVTSElGVCk7Ci0KLQkJCWlmIChjb3dsb193cml0ZWNvdyhjb3dkZXYsIGNvd2Rldi0+aW9idWYsIE1BUFVOSVQsCi0JCQkJCSAgICAgKGxvZmZfdClibG9ja25yIDw8IE1VU0hJRlQpIDw9IDApCi0JCQkJcnYgPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJ2OwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJL08tc3VwcG9ydCBmb3IgcmVhZC1vbmx5IGZpbGUgYW5kIGNvcHktb24td3JpdGUgZmlsZSAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0qKiByZWFkIGRhdGEgZnJvbSB0aGUgcmVhZC1vbmx5IGZpbGUKLSoqCi0qKiByZXR1cm4tdmFsdWU6IHNpbWlsYXIgdG8gdXNlci1tb2RlIHJlYWQKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3JlYWRyZG8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlsb25nIGludAlydjsKLQltbV9zZWdtZW50X3QJb2xkX2ZzOwotCWxvZmZfdAkJc2F2ZW9mZnNldCA9IG9mZnNldDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWFkcmRvIGNhbGxlZFxuIik7Ci0KLSAgICAgICAgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKCBnZXRfZHMoKSApOwotCXJ2ID0gY293ZGV2LT5yZG9mcC0+Zl9vcC0+cmVhZChjb3dkZXYtPnJkb2ZwLCBidWYsIGxlbiwgJm9mZnNldCk7Ci0gICAgICAgIHNldF9mcyhvbGRfZnMpOwotCi0JaWYgKHJ2IDwgbGVuKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNvd2xvb3AgLSByZWFkLWZhaWx1cmUgJWxkIG9uIHJkb2ZpbGUiCi0JCSAgICAgICAgICAgICAgICAgICAgIi0gb2Zmc2V0PSVsbGQgbGVuPSVkXG4iLAotCQkJCQlydiwgc2F2ZW9mZnNldCwgbGVuKTsKLQl9Ci0KLQljb3dkZXYtPnJkb3JlYWRzKys7Ci0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogcmVhZCBjb3dmaWxlIGZyb20gYSBtb2RpZmllZCBvZmZzZXQsIGkuZS4gc2tpcHBpbmcgdGhlIGJpdG1hcCBhbmQgY293aGVhZAotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgcmVhZAotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fcmVhZGNvdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2Rldiwgdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWFkY293IGNhbGxlZFxuIik7Ci0KLQlvZmZzZXQgKz0gY293ZGV2LT5jb3doZWFkLT5kb2Zmc2V0OwotCi0JcmV0dXJuIGNvd2xvX3JlYWRjb3dyYXcoY293ZGV2LCBidWYsIGxlbiwgb2Zmc2V0KTsKLX0KLQotLyoKLSoqIHJlYWQgY293ZmlsZSBmcm9tIGFuIGFic29sdXRlIG9mZnNldAotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgcmVhZAotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fcmVhZGNvd3JhdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwKLQkJCQkJdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCWxvbmcgaW50CXJ2OwotCW1tX3NlZ21lbnRfdAlvbGRfZnM7Ci0JbG9mZl90CQlzYXZlb2Zmc2V0ID0gb2Zmc2V0OwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlYWRjb3dyYXcgY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogYmUgc3VyZSB0aGF0IGNvd2ZpbGUgaXMgb3BlbmVkIGZvciByZWFkLXdyaXRlCi0JKi8KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0NPV09QRU4pICkgewotCQkgcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgICJjb3dsb29wIC0gcmVhZCByZXF1ZXN0IGZyb20gY293ZmlsZSByZWZ1c2VkXG4iKTsKLQotCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCS8qCi0JKiogaXNzdWUgbG93IGxldmVsIHJlYWQKLQkqLwotICAgICAgICBvbGRfZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoIGdldF9kcygpICk7Ci0JcnYgPSBjb3dkZXYtPmNvd2ZwLT5mX29wLT5yZWFkKGNvd2Rldi0+Y293ZnAsIGJ1ZiwgbGVuLCAmb2Zmc2V0KTsKLSAgICAgICAgc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAocnYgPCBsZW4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSByZWFkLWZhaWx1cmUgJWxkIG9uIGNvd2ZpbGUiCi0JCSAgICAgICAiLSBvZmZzZXQ9JWxsZCBsZW49JWRcbiIsIHJ2LCBzYXZlb2Zmc2V0LCBsZW4pOwotCX0KLQotCWNvd2Rldi0+Y293cmVhZHMrKzsKLQlyZXR1cm4gcnY7Ci19Ci0KLS8qCi0qKiB3cml0ZSBjb3dmaWxlIGZyb20gYSBtb2RpZmllZCBvZmZzZXQsIGkuZS4gc2tpcHBpbmcgdGhlIGJpdG1hcCBhbmQgY293aGVhZAotKioKLSoqIGlmIGEgYmxvY2sgaXMgd3JpdHRlbiBmb3IgdGhlIGZpcnN0IHRpbWUgd2hpbGUgaXRzIGNvbnRlbnRzIGNvbnNpc3RzCi0qKiBvZiBiaW5hcnkgemVyb2VzIG9ubHksIHRoZSBjb25jZXJuaW5nIGJpdG1hcCBpcyBmbHVzaGVkIHRvIHRoZSBjb3dmaWxlCi0qKgotKiogcmV0dXJuLXZhbHVlOiBzaW1pbGFyIHRvIHVzZXItbW9kZSB3cml0ZQotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fd3JpdGVjb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlsb25nIGludAlydjsKLQl1bnNpZ25lZCBsb25nCW1hcG51bT0wLCBtYXBieXRlPTAsIG1hcGJpdD0wLCBjb3dibG9jaz0wLCBwYXJ0bGVuOwotCWNoYXIJCSp0bXBwdHIsICAqbWFwcHRyID0gTlVMTDsKLQlsb2ZmX3QJCXRtcG9mZnNldCwgbWFwb2Zmc2V0ID0gMDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSB3cml0ZWNvdyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBiZSBzdXJlIHRoYXQgY293ZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWQtd3JpdGUKLQkqLwotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSApIHsKLQkJIHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAiY293bG9vcCAtIFdyaXRlIHJlcXVlc3QgdG8gY293ZmlsZSByZWZ1c2VkXG4iKTsKLQotCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCS8qCi0JKiogd3JpdGUgdGhlIGVudGlyZSBibG9jayB0byB0aGUgY293ZmlsZQotCSovCi0JdG1wb2Zmc2V0ID0gb2Zmc2V0ICsgY293ZGV2LT5jb3doZWFkLT5kb2Zmc2V0OwotCi0JcnYgPSBjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsIGJ1ZiwgbGVuLCB0bXBvZmZzZXQpOwotCi0JLyoKLQkqKiB2ZXJpZnkgaWYgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSBvbiBmaWxlc3lzdGVtIGhvbGRpbmcKLQkqKiB0aGUgY293ZmlsZQotCSoqICAgLSB3aGVuIHRoZSBsYXN0IHdyaXRlIGZhaWxlZCAobWlnaHQgYmUgY2F1c2VkIGJ5IGxhY2sgb2Ygc3BhY2UpCi0JKiogICAtIHdoZW4gYSB3YXRjaGVyIGlzIGFjdGl2ZSAodG8gcmVhY3QgYWRlcXVhdGx5KQotCSoqICAgLSB3aGVuIHRoZSBwcmV2aW91cyBjaGVjayBpbmRpY2F0ZWQgZnMgd2FzIGFsbW9zdCBmdWxsCi0JKiogICAtIHdpdGggcmVndWxhciBpbnRlcnZhbHMKLQkqLwotCWlmICggKHJ2IDw9IDApCQkJCSAgICAgICB8fAotCSAgICAgKGNvd2Rldi0+c3RhdGUgICAgICAgICYgQ09XV0FUQ0hET0cpICAgICAgfHwKLQkgICAgIChjb3dkZXYtPmJsa2F2YWlsIC8gMiA8IFNQQ0RGTElOVFZMKSAgICAgIHx8Ci0JICAgICAoY293ZGV2LT5jb3d3cml0ZXMgICAgJSBTUENERkxJTlRWTCA9PSAwKSApIHsKLQkJc3RydWN0IGtzdGF0ZnMJCWtzOwotCi0JCWlmICh2ZnNfc3RhdGZzKGNvd2Rldi0+Y293ZnAtPmZfZGVudHJ5LCAma3MpPT0wKXsKLQkJCWlmIChrcy5mX2JhdmFpbCA8PSBTUENNSU5CTEspIHsKLQkJCQlzd2l0Y2ggKGtzLmZfYmF2YWlsKSB7Ci0JCQkJICAgY2FzZSAwOgotCQkJCSAgIGNhc2UgMToKLQkJCQkgICBjYXNlIDI6Ci0JCQkJICAgY2FzZSAzOgotCQkJCQlwcmludGsoS0VSTl9BTEVSVAotCQkJCQkgICAgICAgImNvd2xvb3AgLSAiCi0JCQkJCSAgICAgICAiQUxFUlQ6IGNvd2ZpbGUgZnVsbCFcbiIpOwotCQkJCQlicmVhazsKLQotCQkJCSAgIGRlZmF1bHQ6Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkJICAgICAgICJjb3dsb29wIC0gY293ZmlsZSBhbG1vc3QgIgotCQkJCQkgICAgICAgImZ1bGwgKG9ubHkgJWxsdSBLYiBmcmVlKVxuIiwKLQkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcy5mX2JzaXplICoga3MuZl9iYXZhaWwgLzEwMjQpOwotCQkJCX0KLQkJCX0KLQotCQkJY293ZGV2LT5ibGt0b3RhbCA9IGtzLmZfYmxvY2tzOwotCQkJY293ZGV2LT5ibGthdmFpbCA9IGtzLmZfYmF2YWlsOwotCi0JCQkvKgotCQkJKiogd2FrZXVwIHdhdGNoZXIgaWYgdGhyZXNob2xkIGhhcyBiZWVuIHJlYWNoZWQKLQkJCSovCi0JCQlpZiAoIChjb3dkZXYtPnN0YXRlICYgQ09XV0FUQ0hET0cpICYmCi0JCQkgICAgKGNvd2Rldi0+d2F0Y2h0aHJlc2ggPj0gY293ZGV2LT5ibGthdmFpbCkgKSB7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb3dkZXYtPndhdGNocSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAocnYgPD0gMCkKLQkJcmV0dXJuIHJ2OwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGJsb2NrIHdyaXR0ZW5cbiIpOwotCi0JLyoKLQkqKiBjaGVjayBpZiBibG9jayhzKSBpcy9hcmUgd3JpdHRlbiB0byB0aGUgY293ZmlsZQotCSoqIGZvciB0aGUgZmlyc3QgdGltZTsgaWYgc28sIGFkYXB0IHRoZSBiaXRtYXAKLQkqLwotCWZvciAoOyBsZW4gPiAwOyBsZW4tPXBhcnRsZW4sIG9mZnNldCs9cGFydGxlbiwgYnVmKz1wYXJ0bGVuKSB7Ci0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwYXJ0aWFsIGxlbmd0aCBmb3IgdGhpcyB0cmFuc2ZlcgotCQkqLwotCQlwYXJ0bGVuID0gTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spOwotCQlpZiAocGFydGxlbiA+IGxlbikKLQkJCXBhcnRsZW4gPSBsZW47Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIGJpdG5yIG9mIHdyaXR0ZW4gY2h1bmsgb2YgY293YmxvY2sKLQkJKi8KLQkJY293YmxvY2sgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQltYXBudW0gICA9IENBTENNQVAgKGNvd2Jsb2NrKTsKLQkJbWFwYnl0ZSAgPSBDQUxDQllURShjb3dibG9jayk7Ci0JCW1hcGJpdCAgID0gQ0FMQ0JJVCAoY293YmxvY2spOwotCi0JCWlmICgqKCooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pK21hcGJ5dGUpICYgKDE8PG1hcGJpdCkpCi0JCQljb250aW51ZTsJLyogYWxyZWFkeSB3cml0dGVuIGJlZm9yZSAqLwotCi0JICAgICAgIAkvKgotCQkqKiBpZiB0aGUgYmxvY2sgaXMgd3JpdHRlbiBmb3IgdGhlIGZpcnN0IHRpbWUsCi0JCSoqIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBzaG91bGQgYmUgc2V0IGluIHRoZSBiaXRtYXAKLQkJKi8KLQkJKigqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKSttYXBieXRlKSB8PSAoMTw8bWFwYml0KTsKLQotCQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIGJpdHVwZGF0ZSBibGs9JWxkIG1hcD0lbGQgIgotCQkgICAgICAgICJieXRlPSVsZCBiaXQ9JWxkXG4iLAotCQkJY293YmxvY2ssIG1hcG51bSwgbWFwYnl0ZSwgbWFwYml0KTsKLQotCQkvKgotCQkqKiBjaGVjayBpZiB0aGUgY293aGVhZCBpbiB0aGUgY293ZmlsZSBpcyBjdXJyZW50bHkKLQkJKiogbWFya2VkIGNsZWFuOyBpZiBzbywgbWFyayBpdCBkaXJ0eSBhbmQgZmx1c2ggaXQKLQkJKi8KLQkJaWYgKCAhKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJj0gQ09XRElSVFkpKSB7Ci0JCQljb3dkZXYtPmNvd2hlYWQtPmZsYWdzCXw9IENPV0RJUlRZOwotCi0JCQljb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsIGNvd2Rldi0+Y293aGVhZCwKLQkJCQkJCQlNQVBVTklULCAobG9mZl90KTApOwotCQl9Ci0KLQkJLyoKLQkJKiogaWYgdGhlIHdyaXR0ZW4gZGF0YWJsb2NrIGNvbnRhaW5lZCBiaW5hcnkgemVyb2VzLAotCQkqKiB0aGUgYml0bWFwIGJsb2NrIHNob3VsZCBiZSBtYXJrZWQgdG8gYmUgZmx1c2hlZCB0byBkaXNrCi0JCSoqIChibG9ja3MgY29udGFpbmluZyBhbGwgemVyb2VzIGNhbm5vdCBiZSByZWNvdmVyZWQgYnkKLQkJKiogdGhlIGNvd3JlcGFpci1wcm9ncmFtIGxhdGVyIG9uIGlmIGNvd2xvb3AgaXMgbm90IHByb3Blcmx5Ci0JCSoqIHJlbW92ZWQgdmlhIHJtbW9kKQotCQkqLwotCQlpZiAoIG1lbWNtcChidWYsIGFsbHplcm9lcywgcGFydGxlbikgKSAvKiBub3QgYWxsIHplcm9lcz8gKi8KLQkJCWNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAvKiBubyBmbHVzaCBuZWVkZWQgKi8KLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgcG9zaXRpb25zIG9mIGJpdG1hcCBibG9jayB0byBiZSBmbHVzaGVkCi0JCSoqIC0gcG9pbnRlciBvZiBiaXRtYXAgYmxvY2sgaW4gbWVtb3J5Ci0JCSoqIC0gb2Zmc2V0ICBvZiBiaXRtYXAgYmxvY2sgaW4gY293ZmlsZQotCQkqLwotCQl0bXBwdHIgICAgPSAqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKSArIChtYXBieXRlICYgKH5NVU1BU0spKTsKLQkJdG1wb2Zmc2V0ID0gKGxvZmZfdCkgTUFQVU5JVCArIG1hcG51bSAqIE1BUENIVU5LU1ogKwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwYnl0ZSAmICh+TVVNQVNLKSk7Ci0KLQkJLyoKLQkJKiogZmx1c2ggYSBiaXRtYXAgYmxvY2sgYXQgdGhlIG1vbWVudCB0aGF0IGFsbCBiaXRzIGhhdmUKLQkJKiogYmVlbiBzZXQgaW4gdGhhdCBibG9jaywgaS5lLiBhdCB0aGUgbW9tZW50IHRoYXQgd2UKLQkJKiogc3dpdGNoIHRvIGFub3RoZXIgYml0bWFwIGJsb2NrCi0JCSovCi0JCWlmICggKG1hcG9mZnNldCAhPSAwKSAmJiAobWFwb2Zmc2V0ICE9IHRtcG9mZnNldCkgKSB7Ci0JCQlpZiAoY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBtYXBwdHIsIE1BUFVOSVQsCi0JCQkJCQkJbWFwb2Zmc2V0KSA8IDApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJjb3dsb29wIC0gd3JpdGUtZmFpbHVyZSBvbiBiaXRtYXAgLSAiCi0JCQkJICAgICAgICJibGs9JWxkIG1hcD0lbGQgYnl0ZT0lbGQgYml0PSVsZFxuIiwKLQkJCQkgIAljb3dibG9jaywgbWFwbnVtLCBtYXBieXRlLCBtYXBiaXQpOwotCQkJfQotCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gYml0bWFwIGJsayB3cml0dGVuICVsbGRcbiIsCi0JCQkJCQkJCW1hcG9mZnNldCk7Ci0JCX0KLQotCQkvKgotCQkqKiByZW1lbWJlciBvZmZzZXQgaW4gY293ZmlsZSBhbmQgb2Zmc2V0IGluIG1lbW9yeQotCQkqKiBmb3IgYml0bWFwIHRvIGJlIGZsdXNoZWQ7IGZsdXNoaW5nIHdpbGwgYmUgZG9uZQotCQkqKiBhcyBzb29uIGFzIGFsbCB1cGRhdGVzIGluIHRoaXMgYml0bWFwIGJsb2NrIGhhdmUKLQkJKiogYmVlbiBkb25lCi0JCSovCi0JCW1hcG9mZnNldCA9IHRtcG9mZnNldDsKLQkJbWFwcHRyICAgID0gdG1wcHRyOwotCX0KLQotCS8qCi0JKiogYW55IG5ldyBibG9jayB3cml0dGVuIGNvbnRhaW5pbmcgYmluYXJ5IHplcm9lcz8KLQkqLwotCWlmIChtYXBvZmZzZXQpIHsKLQkJaWYgKGNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgbWFwcHRyLCBNQVBVTklULCBtYXBvZmZzZXQpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjb3dsb29wIC0gd3JpdGUtZmFpbHVyZSBvbiBiaXRtYXAgLSAiCi0JCQkgICAgICAgImJsaz0lbGQgbWFwPSVsZCBieXRlPSVsZCBiaXQ9JWxkXG4iLAotCQkJICAgICAgIGNvd2Jsb2NrLCBtYXBudW0sIG1hcGJ5dGUsIG1hcGJpdCk7Ci0JCX0KLQotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gYml0bWFwIGJsb2NrIHdyaXR0ZW4gJWxsZFxuIiwgbWFwb2Zmc2V0KTsKLQl9Ci0KLQlyZXR1cm4gcnY7Ci19Ci0KLS8qCi0qKiB3cml0ZSBjb3dmaWxlIGZyb20gYW4gYWJzb2x1dGUgb2Zmc2V0Ci0qKgotKiogcmV0dXJuLXZhbHVlOiBzaW1pbGFyIHRvIHVzZXItbW9kZSB3cml0ZQotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fd3JpdGVjb3dyYXcoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsCi0JCQkJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlsb25nIGludAlydjsKLQltbV9zZWdtZW50X3QJb2xkX2ZzOwotCWxvZmZfdAkJc2F2ZW9mZnNldCA9IG9mZnNldDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSB3cml0ZWNvd3JhdyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBiZSBzdXJlIHRoYXQgY293ZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWQtd3JpdGUKLQkqLwotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSApIHsKLQkJIHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAiY293bG9vcCAtIHdyaXRlIHJlcXVlc3QgdG8gY293ZmlsZSByZWZ1c2VkXG4iKTsKLQotCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCS8qCi0JKiogaXNzdWUgbG93IGxldmVsIHdyaXRlCi0JKi8KLSAgICAgICAgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKCBnZXRfZHMoKSApOwotCXJ2ID0gY293ZGV2LT5jb3dmcC0+Zl9vcC0+d3JpdGUoY293ZGV2LT5jb3dmcCwgYnVmLCBsZW4sICZvZmZzZXQpOwotICAgICAgICBzZXRfZnMob2xkX2ZzKTsKLQotCWlmIChydiA8IGxlbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHdyaXRlLWZhaWx1cmUgJWxkIG9uIGNvd2ZpbGUiCi0JCSAgICAgICAiLSBvZmZzZXQ9JWxsZCBsZW49JWRcbiIsIHJ2LCBzYXZlb2Zmc2V0LCBsZW4pOwotCX0KLQotCWNvd2Rldi0+Y293d3JpdGVzKys7Ci0JcmV0dXJuIHJ2OwotfQotCi0KLS8qCi0qKiByZWFkcHJvYy1mdW5jdGlvbjogY2FsbGVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgL3Byb2MtZmlsZSBpcyByZWFkCi0qLwotc3RhdGljIGludAotY293bG9fcmVhZHByb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywgaW50IGNudCwgaW50ICplb2YsIHZvaWQgKnApCi17Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYgPSBwOwotCi0JcmV2aXNpb25bc2l6ZW9mIHJldmlzaW9uIC0gM10gPSAnXDAnOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLAotCQkiICAgY293bG9vcCB2ZXJzaW9uOiAlOXNcblxuIgotCQkiICAgICAgZGV2aWNlIHN0YXRlOiAlcyVzJXMlc1xuIgotCQkiICAgbnVtYmVyIG9mIG9wZW5zOiAlOWRcbiIKLQkJIiAgICAgcGlkIG9mIHRocmVhZDogJTlkXG5cbiIKLQkJIiAgICByZWFkLW9ubHkgZmlsZTogJTlzXG4iCi0JCSIgICAgICAgICAgcmRvcmVhZHM6ICU5bHVcblxuIgotCQkiY29weS1vbi13cml0ZSBmaWxlOiAlOXNcbiIKLQkJIiAgICAgc3RhdGUgY293ZmlsZTogJTlzXG4iCi0JCSIgICAgIGJpdG1hcC1ibG9ja3M6ICU5bHUgKG9mICVkIGJ5dGVzKVxuIgotCQkiICBjb3dibG9ja3MgaW4gdXNlOiAlOWx1IChvZiAlZCBieXRlcylcbiIKLQkJIiAgICAgICAgICBjb3dyZWFkczogJTlsdVxuIgotCQkiICAgICAgICAgY293d3JpdGVzOiAlOWx1XG4iLAotCQkJJnJldmlzaW9uWzExXSwKLQotCQkJY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4gICA/ICJkZXZvcGVuICIgICA6ICIiLAotCQkJY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTiA/ICJjb3dvcGVucncgIiA6ICIiLAotCQkJY293ZGV2LT5zdGF0ZSAmIENPV1JEQ09XT1BFTiA/ICJjb3dvcGVucm8gIiA6ICIiLAotCQkJY293ZGV2LT5zdGF0ZSAmIENPV1dBVENIRE9HICA/ICJ3YXRjaGRvZyAiICA6ICIiLAotCi0JCQljb3dkZXYtPm9wZW5jbnQsCi0JCQljb3dkZXYtPnBpZCwKLQkJCWNvd2Rldi0+cmRvbmFtZSwKLQkJCWNvd2Rldi0+cmRvcmVhZHMsCi0JCQljb3dkZXYtPmNvd25hbWUsCi0JCQljb3dkZXYtPmNvd2hlYWQtPmZsYWdzICYgQ09XRElSVFkgPyAiZGlydHkiOiJjbGVhbiIsCi0JCQljb3dkZXYtPm1hcHNpemUgPj4gTVVTSElGVCwgTUFQVU5JVCwKLQkJCWNvd2Rldi0+bnJjb3dibG9ja3MsIE1BUFVOSVQsCi0JCQljb3dkZXYtPmNvd3JlYWRzLAotCQkJY293ZGV2LT5jb3d3cml0ZXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBTZXR1cCBhbmQgZGVzdHJveSBjb3dkZXZpY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0qKiBvcGVuIGFuZCBwcmVwYXJlIGEgY293ZGV2aWNlIChyZG9maWxlIGFuZCBjb3dmaWxlKSBhbmQgYWxsb2NhdGUgYml0bWFwcwotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX29wZW5wYWlyKGNoYXIgKnJkb2YsIGNoYXIgKmNvd2YsIGludCBhdXRvcmVjb3ZlciwgaW50IG1pbm9yKQotewotCWxvbmcgaW50CQlydjsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldiA9IGNvd2RldmFsbFttaW5vcl07Ci0Jc3RydWN0IGtzdGF0ZnMJCWtzOwotCi0JZG93bigmY293ZGV2bG9jayk7Ci0KLQkvKgotCSoqIHJlcXVlc3RlZCBkZXZpY2UgZXhpc3RzPwotCSovCi0JaWYgKG1pbm9yID49IG1heGNvd3MpIHsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKgotCSoqIHJlcXVlc3RlZCBkZXZpY2UgYWxyZWFkeSBhc3NpZ25lZCB0byBjb3dkZXZpY2U/Ci0JKi8KLQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pIHsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCS8qCi0JKiogaW5pdGlhbGl6ZSBhZG1pbmlzdHJhdGlvbgotCSovCi0JbWVtc2V0KGNvd2RldiwgMCwgc2l6ZW9mICpjb3dkZXYpOwotCi0Jc3Bpbl9sb2NrX2luaXQgICAgICgmY293ZGV2LT5ycWxvY2spOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvd2Rldi0+d2FpdHEpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvd2Rldi0+d2F0Y2hxKTsKLQotCS8qCi0JKiogb3BlbiB0aGUgcmVhZC1vbmx5IGZpbGUKLQkqLwotCURFQlVHUChEQ09XImNvd2xvb3AgLSBjYWxsIG9wZW5yZG8uLi4uXG4iKTsKLQotCWlmICggKHJ2ID0gY293bG9fb3BlbnJkbyhjb3dkZXYsIHJkb2YpKSApIHsKLQkJY293bG9fdW5kb19vcGVucmRvKGNvd2Rldik7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIHJ2OwotCX0KLQotCS8qCi0JKiogb3BlbiB0aGUgY293ZmlsZQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGNhbGwgb3BlbmNvdy4uLi5cbiIpOwotCi0JaWYgKCAocnYgPSBjb3dsb19vcGVuY293KGNvd2RldiwgY293ZiwgYXV0b3JlY292ZXIpKSApIHsKLQkJY293bG9fdW5kb19vcGVucmRvKGNvd2Rldik7Ci0JCWNvd2xvX3VuZG9fb3BlbmNvdyhjb3dkZXYpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiBydjsKLQl9Ci0KLQkvKgotCSoqIGFkbWluaXN0ZXIgdG90YWwgYW5kIGF2YWlsYWJsZSBzaXplIG9mIGZpbGVzeXN0ZW0gaG9sZGluZyBjb3dmaWxlCi0JKi8KLQlpZiAodmZzX3N0YXRmcyhjb3dkZXYtPmNvd2ZwLT5mX2RlbnRyeSwgJmtzKT09MCkgewotCQljb3dkZXYtPmJsa3NpemUgID0ga3MuZl9ic2l6ZTsKLQkJY293ZGV2LT5ibGt0b3RhbCA9IGtzLmZfYmxvY2tzOwotCQljb3dkZXYtPmJsa2F2YWlsID0ga3MuZl9iYXZhaWw7Ci0JfSBlbHNlIHsKLQkJY293ZGV2LT5ibGtzaXplICA9IDEwMjQ7CS8qIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8gKi8KLQl9Ci0KLQkvKgotCSoqIGZsdXNoIHRoZSAocmVjb3ZlcmVkKSBiaXRtYXBzIGFuZCBjb3doZWFkIHRvIHRoZSBjb3dmaWxlCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gY2FsbCBjb3dzeW5jLi4uLlxuIik7Ci0KLQljb3dsb19zeW5jKCk7Ci0KLQkvKgotCSoqIGFsbG9jYXRlIGdlbmRpc2sgZm9yIHRoZSBjb3cgZGV2aWNlCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gYWxsb2MgZGlzay4uLi5cbiIpOwotCi0JaWYgKChjb3dkZXYtPmdkID0gYWxsb2NfZGlzaygxKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHVuYWJsZSB0byBhbGxvY19kaXNrIGZvciBjb3dsb29wXG4iKTsKLQotCQljb3dsb191bmRvX29wZW5yZG8oY293ZGV2KTsKLQkJY293bG9fdW5kb19vcGVuY293KGNvd2Rldik7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY293ZGV2LT5nZC0+bWFqb3IgICAgICAgID0gQ09XTUFKT1I7Ci0JY293ZGV2LT5nZC0+Zmlyc3RfbWlub3IgID0gbWlub3I7Ci0JY293ZGV2LT5nZC0+bWlub3JzICAgICAgID0gMTsKLQljb3dkZXYtPmdkLT5mb3BzICAgICAgICAgPSAmY293bG9fZm9wczsKLQljb3dkZXYtPmdkLT5wcml2YXRlX2RhdGEgPSBjb3dkZXY7Ci0Jc3ByaW50Zihjb3dkZXYtPmdkLT5kaXNrX25hbWUsICIlcyVkIiwgREVWSUNFX05BTUUsIG1pbm9yKTsKLQotCS8qIGluIC41IEtiIHVuaXRzICovCi0Jc2V0X2NhcGFjaXR5KGNvd2Rldi0+Z2QsIChjb3dkZXYtPm51bWJsb2NrcyooTUFQVU5JVC81MTIpKSk7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gaW5pdCByZXF1ZXN0IHF1ZXVlLi4uLlxuIik7Ci0KLQlpZiAoKGNvd2Rldi0+cnF1ZXVlID0gYmxrX2luaXRfcXVldWUoY293bG9fcmVxdWVzdCwgJmNvd2Rldi0+cnFsb2NrKSkKLQkJCQkJCQkJPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHVuYWJsZSB0byBnZXQgcmVxdWVzdCBxdWV1ZSBmb3IgY293bG9vcFxuIik7Ci0KLQkJZGVsX2dlbmRpc2soY293ZGV2LT5nZCk7Ci0JCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCQljb3dsb191bmRvX29wZW5jb3coY293ZGV2KTsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGNvd2Rldi0+cnF1ZXVlLCBjb3dkZXYtPmJsb2Nrc3opOwotCWNvd2Rldi0+Z2QtPnF1ZXVlID0gY293ZGV2LT5ycXVldWU7Ci0KLQkvKgotCSoqIHN0YXJ0IGtlcm5lbCB0aHJlYWQgdG8gaGFuZGxlIHJlcXVlc3RzCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0ga2lja29mZiBkYWVtb24uLi4uXG4iKTsKLQotCWNvd2Rldi0+cGlkID0ga2VybmVsX3RocmVhZCgoaW50ICgqKSh2b2lkICopKWNvd2xvX2RhZW1vbiwgY293ZGV2LCAwKTsKLQotCS8qCi0JKiogY3JlYXRlIGEgZmlsZSBiZWxvdyBkaXJlY3RvcnkgL3Byb2MvY293IGZvciB0aGlzIG5ldyBjb3dkZXZpY2UKLQkqLwotCWlmIChjb3dsb19wcm9jZGlyKSB7Ci0JCWNoYXIgCXRtcG5hbWVbNjRdOwotCi0JCXNwcmludGYodG1wbmFtZSwgIiVkIiwgbWlub3IpOwotCi0JCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkodG1wbmFtZSwgMCAsIGNvd2xvX3Byb2NkaXIsCi0JCQkJCQljb3dsb19yZWFkcHJvYywgY293ZGV2KTsKLQl9Ci0KLQljb3dkZXYtPnN0YXRlCXw9IENPV0RFVk9QRU47Ci0KLQljb3dkZXYtPnJkb25hbWUgPSByZG9mOwotCWNvd2Rldi0+Y293bmFtZSA9IGNvd2Y7Ci0KLQkvKgotCSoqIGVuYWJsZSB0aGUgbmV3IGRpc2s7IHRoaXMgdHJpZ2dlcnMgdGhlIGZpcnN0IHJlcXVlc3QhCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gY2FsbCBhZGRfZGlzay4uLi5cbiIpOwotCi0JYWRkX2Rpc2soY293ZGV2LT5nZCk7Ci0KLQl1cCgmY293ZGV2bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBjbG9zZSBhIGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpIGFuZCByZWxlYXNlIG1lbW9yeQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX2Nsb3NlcGFpcihzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldikKLXsKLQlpbnQgbWlub3I7Ci0KLQlkb3duKCZjb3dkZXZsb2NrKTsKLQotCS8qCi0JKiogaWYgY293ZGV2aWNlIGlzIG5vdCBhY3RpdmF0ZWQgYXQgYWxsLCByZWZ1c2UKLQkqLwotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XREVWT1BFTikgKSB7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKLQkqKiBpZiB0aGlzIGNvd2RldmljZSBpcyBzdGlsbCBvcGVuLCByZWZ1c2UKLQkqLwotCWlmIChjb3dkZXYtPm9wZW5jbnQgPiAwKSB7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQl1cCgmY293ZGV2bG9jayk7Ci0KLQkvKgotCSoqIHdha2V1cCB3YXRjaGVyIChpZiBhbnkpCi0JKi8KLQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV1dBVENIRE9HKSB7Ci0JCWNvd2Rldi0+d2F0Y2h0aHJlc2ggPSBjb3dkZXYtPmJsa2F2YWlsOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvd2Rldi0+d2F0Y2hxKTsKLQl9Ci0KLQkvKgotCSoqIHdha2V1cCBrZXJuZWwtdGhyZWFkIHRvIGJlIGFibGUgdG8gZXhpdAotCSoqIGFuZCB3YWl0IHVudGlsIGl0IGhhcyBleGl0ZWQKLQkqLwotCWNvd2Rldi0+Y2xvc2Vkb3duID0gMTsKLQljb3dkZXYtPnFmaWxsZWQgICA9IDE7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb3dkZXYtPndhaXRxKTsKLQotICAgICAgIAl3aGlsZSAoY293ZGV2LT5waWQpCi0gICAgICAgICAgICAgICAJc2NoZWR1bGUoKTsKLQotCWRlbF9nZW5kaXNrKGNvd2Rldi0+Z2QpOyAgLyogcmV2ZXJ0IHRoZSBhbGxvY19kaXNrKCkgKi8KLQlwdXRfZGlzayhjb3dkZXYtPmdkKTsgICAgIC8qIHJldmVydCB0aGUgYWRkX2Rpc2soKSAgICovCi0KLQlpZiAoY293bG9fcHJvY2RpcikgewotCQljaGFyIAl0bXBuYW1lWzY0XTsKLQotCQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0JCQlpZiAoY293ZGV2ID09IGNvd2RldmFsbFttaW5vcl0pIGJyZWFrOwotCQl9Ci0JCXNwcmludGYodG1wbmFtZSwgIiVkIiwgbWlub3IpOwotCi0JCXJlbW92ZV9wcm9jX2VudHJ5KHRtcG5hbWUsIGNvd2xvX3Byb2NkaXIpOwotCX0KLQotCWJsa19jbGVhbnVwX3F1ZXVlKGNvd2Rldi0+cnF1ZXVlKTsKLQotCS8qCi0JKiogcmVsZWFzZSBtZW1vcnkgZm9yIGZpbGVuYW1lcyBpZiB0aGVzZSBuYW1lcyBoYXZlCi0JKiogYmVlbiBhbGxvY2F0ZWQgZHluYW1pY2FsbHkKLQkqLwotCWlmICggKGNvd2Rldi0+Y293bmFtZSkgJiYgKGNvd2Rldi0+Y293bmFtZSAhPSBjb3dmaWxlKSkKLQkJa2ZyZWUoY293ZGV2LT5jb3duYW1lKTsKLQotCWlmICggKGNvd2Rldi0+cmRvbmFtZSkgJiYgKGNvd2Rldi0+cmRvbmFtZSAhPSByZG9maWxlKSkKLQkJa2ZyZWUoY293ZGV2LT5yZG9uYW1lKTsKLQotCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCWNvd2xvX3VuZG9fb3BlbmNvdyhjb3dkZXYpOwotCi0JY293ZGV2LT5zdGF0ZSAmPSB+Q09XREVWT1BFTjsKLQotCXJldHVybiAwOwotfQotCi0vKgotKiogb3BlbiB0aGUgcmVhZC1vbmx5IGZpbGUKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19vcGVucmRvKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCBjaGFyICpyZG9mKQotewotCXN0cnVjdCBmaWxlCSpmOwotCXN0cnVjdCBpbm9kZQkqaW5vZGU7Ci0JbG9uZyBpbnQJaSwgbnJ2YWw7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gb3BlbnJkbyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBvcGVuIHRoZSByZWFkLW9ubHkgZmlsZQotCSovCi0gICAgICAgIGlmKCpyZG9mID09ICdcMCcpIHsKLSAgICAgCSAgICAgCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSBzcGVjaWZ5IG5hbWUgZm9yIHJlYWQtb25seSBmaWxlXG5cbiIpOwotICAgICAgICAgCXJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLQlmID0gZmlscF9vcGVuKHJkb2YsIE9fUkRPTkxZfE9fTEFSR0VGSUxFLCAwKTsKLQotCWlmICggKGYgPT0gTlVMTCkgfHwgSVNfRVJSKGYpICkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gb3BlbiBvZiByZG9maWxlICVzIGZhaWxlZFxuIiwgcmRvZik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNvd2Rldi0+cmRvZnAgPSBmOwotCi0JaW5vZGUgPSBmLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQotCWlmICggIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYgIVNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSAlcyBub3QgcmVndWxhciBmaWxlIG9yIGJsb2NrZGV2XG4iLCByZG9mKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGRldGVybWluZSBzaXplIHJkby4uLi5cbiIpOwotCi0JLyoKLQkqKiBkZXRlcm1pbmUgYmxvY2stc2l6ZSBhbmQgdG90YWwgc2l6ZSBvZiByZWFkLW9ubHkgZmlsZQotCSovCi0JaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJLyoKLQkJKiogcmVhZC1vbmx5IGZpbGUgaXMgYSByZWd1bGFyIGZpbGUKLQkJKi8KLQkJY293ZGV2LT5ibG9ja3N6ICAgPSA1MTI7CS8qIG90aGVyIHZhbHVlIGZhaWxzICovCi0JCWNvd2Rldi0+bnVtYmxvY2tzID0gaW5vZGUtPmlfc2l6ZSA+PiBNVVNISUZUOwotCi0JCWlmIChpbm9kZS0+aV9zaXplICYgTVVNQVNLKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNvd2xvb3AgLSByZG9maWxlICVzIHRydW5jYXRlZCB0byBtdWx0aXBsZSAiCi0JCQkgICAgICAgIm9mICVkIGJ5dGVzXG4iLCByZG9mLCBNQVBVTklUKTsKLQkJfQotCi0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBSTz1yZWd1bGFyOiBudW1ibG9ja3M9JWQsIGJsb2Nrc3o9JWRcbiIsCi0JCQljb3dkZXYtPm51bWJsb2NrcywgY293ZGV2LT5ibG9ja3N6KTsKLQl9IGVsc2UgewotCQkvKgotCQkqKiByZWFkLW9ubHkgZmlsZSBpcyBhIGJsb2NrIGRldmljZQotCQkqLwotCQljb3dkZXYtPmJlbG93ZGV2ICA9IGlub2RlLT5pX2JkZXY7Ci0JCWNvd2Rldi0+YmVsb3dnZCAgID0gY293ZGV2LT5iZWxvd2Rldi0+YmRfZGlzazsgLyogZ2VuZGlzayAqLwotCi0JCWlmIChjb3dkZXYtPmJlbG93ZGV2LT5iZF9wYXJ0KSB7Ci0JCQljb3dkZXYtPm51bWJsb2NrcyA9IGNvd2Rldi0+YmVsb3dkZXYtPmJkX3BhcnQtPm5yX3NlY3RzCi0JCQkJCQkJCS8gKE1BUFVOSVQvNTEyKTsKLQkJfQotCi0JCWlmIChjb3dkZXYtPmJlbG93Z2QpIHsKLQkJCWNvd2Rldi0+YmVsb3dxID0gY293ZGV2LT5iZWxvd2dkLT5xdWV1ZTsKLQotCQkJaWYgKGNvd2Rldi0+bnVtYmxvY2tzID09IDApIHsKLQkJCQljb3dkZXYtPm51bWJsb2NrcyA9IGdldF9jYXBhY2l0eShjb3dkZXYtPmJlbG93Z2QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkvIChNQVBVTklULzUxMik7Ci0JCQl9Ci0JCX0KLQotCi0JCWlmIChjb3dkZXYtPmJlbG93cSkKLQkJCWNvd2Rldi0+YmxvY2tzeiA9IHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShjb3dkZXYtPmJlbG93cSk7Ci0KLQkJaWYgKGNvd2Rldi0+YmxvY2tzeiA9PSAwKQotCQkJY293ZGV2LT5ibG9ja3N6ID0gQkxPQ0tfU0laRTsgLyogZGVmYXVsdCAyXjEwICovCi0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIG51bWJsb2Nrcz0lZCwgIgotCQkgICAgICAgICAgICJibG9ja3N6PSVkLCBiZWxvd2dkPSVwLCBiZWxvd3E9JXBcbiIsCi0JCSAgCWNvd2Rldi0+bnVtYmxvY2tzLCBjb3dkZXYtPmJsb2Nrc3osCi0JCQljb3dkZXYtPmJlbG93Z2QsIGNvd2Rldi0+YmVsb3dxKTsKLQotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gYmVsb3dkZXYuYmRfYmxvY2tfc2l6ZT0lZFxuIiwKLQkJICAJY293ZGV2LT5iZWxvd2Rldi0+YmRfYmxvY2tfc2l6ZSk7Ci0JfQotCi0JaWYgKGNvd2Rldi0+bnVtYmxvY2tzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gJXMgaGFzIG5vIGNvbnRlbnRzXG4iLCByZG9mKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkqKiByZXNlcnZlIHNwYWNlIGluIG1lbW9yeSBhcyBnZW5lcmljIEkvTyBidWZmZXIKLQkqLwotCWNvd2Rldi0+aW9idWYgID0ga21hbGxvYyhNQVBVTklULCBHRlBfS0VSTkVMKTsKLQotCWlmICghY293ZGV2LT5pb2J1ZikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gY2Fubm90IGdldCBzcGFjZSBmb3IgYnVmZmVyICVkXG4iLCBNQVBVTklUKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGRldGVybWluZSBmaW5nZXJwcmludCByZG8uLi4uXG4iKTsKLQotCS8qCi0JKiogZGV0ZXJtaW5lIGZpbmdlcnByaW50IGZvciByZWFkLW9ubHkgZmlsZQotCSoqIAljYWxjdWxhdGUgZmluZ2VycHJpbnQgZnJvbSBmaXJzdCBmb3VyIGRhdGFibG9ja3MKLQkqKgl3aGljaCBkbyBub3QgY29udGFpbiBiaW5hcnkgemVyb2VzCi0JKi8KLQlmb3IgKGk9MCwgY293ZGV2LT5maW5nZXJwcmludD0wLCBucnZhbD0wOwotCQkJKG5ydmFsIDwgNCkmJihpIDwgY293ZGV2LT5udW1ibG9ja3MpOyBpKyspIHsKLQkJaW50IAkJajsKLQkJdW5zaWduZWQgY2hhcgljczsKLQotCQkvKgotCQkqKiByZWFkIG5leHQgYmxvY2sKLQkJKi8KLQkJaWYgKGNvd2xvX3JlYWRyZG8oY293ZGV2LCBjb3dkZXYtPmlvYnVmLCBNQVBVTklULAotCQkJCQkJKGxvZmZfdClpIDw8IE1VU0hJRlQpIDwgMSkKLQkJCWJyZWFrOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBmaW5nZXJwcmludCBieSBhZGRpbmcgYWxsIGJ5dGUtdmFsdWVzCi0JCSovCi0JCWZvciAoaj0wLCBjcz0wOyBqIDwgTUFQVU5JVDsgaisrKQotCQkJY3MgKz0gKihjb3dkZXYtPmlvYnVmK2opOwotCi0JCWlmIChjcyA9PSAwKQkvKiBibG9jayBwcm9iYWJseSBjb250YWluZWQgemVyb2VzICovCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkqKiBzaGlmdCBieXRlLXZhbHVlIHRvIHByb3BlciBwbGFjZSBpbiBmaW5hbCBmaW5nZXJwcmludAotCQkqLwotCQljb3dkZXYtPmZpbmdlcnByaW50IHw9IGNzIDw8IChucnZhbCo4KTsKLQkJbnJ2YWwrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIHVuZG8gbWVtb3J5IGFsbG9jcyBhbmQgZmlsZSBvcGVucyBpc3N1ZWQgc28gZmFyCi0qKiByZWxhdGVkIHRvIHRoZSByZWFkLW9ubHkgZmlsZQotKi8KLXN0YXRpYyB2b2lkCi1jb3dsb191bmRvX29wZW5yZG8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYpCi17Ci0JaWYoY293ZGV2LT5pb2J1Zik7Ci0JCWtmcmVlKGNvd2Rldi0+aW9idWYpOwotCi0JaWYgKGNvd2Rldi0+cmRvZnApCi0gIAkJZmlscF9jbG9zZShjb3dkZXYtPnJkb2ZwLCAwKTsKLX0KLQotLyoKLSoqIG9wZW4gdGhlIGNvd2ZpbGUKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19vcGVuY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCBjaGFyICpjb3dmLCBpbnQgYXV0b3JlY292ZXIpCi17Ci0JbG9uZyBpbnQJCWksIHJ2OwotCWludAkJCW1pbm9yOwotCXVuc2lnbmVkIGxvbmcJCW5iOwotCXN0cnVjdCBmaWxlCQkqZjsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsKLQlsb2ZmX3QJCQlvZmZzZXQ7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3d0bXA7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gb3BlbmNvdyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBvcGVuIGNvcHktb24td3JpdGUgZmlsZSAocmVhZC13cml0ZSkKLQkqLwotICAgICAgICBpZiAoY293ZlswXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgCXByaW50ayhLRVJOX0VSUgotICAgICAgICAgICAgICAgICAiY293bG9vcCAtIHNwZWNpZnkgbmFtZSBvZiBjb3B5LW9uLXdyaXRlIGZpbGVcblxuIik7Ci0gICAgICAgICAJcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotCWYgPSBmaWxwX29wZW4oY293ZiwgT19SRFdSfE9fTEFSR0VGSUxFLCAwNjAwKTsKLQotCWlmICggKGYgPT0gTlVMTCkgfHwgSVNfRVJSKGYpICkgewotCQkvKgotCQkqKiBub24tZXhpc3RpbmcgY293ZmlsZTogdHJ5IHRvIGNyZWF0ZQotCQkqLwotCQlmID0gZmlscF9vcGVuKGNvd2YsIE9fUkRXUnxPX0NSRUFUfE9fTEFSR0VGSUxFLCAwNjAwKTsKLQotCQlpZiAoIChmID09IE5VTEwpIHx8IElTX0VSUihmKSApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgCSAgImNvd2xvb3AgLSBmYWlsZWQgdG8gb3BlbiBmaWxlICVzIGZvciByZWFkLXdyaXRlXG5cbiIsCi0JCSAgICAgICAJCQkJCQljb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCSAJfQotCX0KLQotCWNvd2Rldi0+Y293ZnAgPSBmOwotCi0JaW5vZGUgPSBmLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQotCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNvd2xvb3AgLSAlcyBpcyBub3QgcmVndWxhciBmaWxlXG4iLCBjb3dmKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkqKiBjaGVjayBpZiB0aGlzIGNvd2ZpbGUgaXMgYWxyZWFkeSBpbiB1c2UgZm9yIGFub3RoZXIgY293ZGV2aWNlCi0JKi8KLQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0KLQkJY293dG1wID0gY293ZGV2YWxsW21pbm9yXTsKLQotCQlpZiAoICEoY293dG1wLT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjb3d0bXAgPT0gY293ZGV2KQotCQkJY29udGludWU7Ci0KLQkJaWYgKGNvd3RtcC0+Y293ZnAtPmZfZGVudHJ5LT5kX2lub2RlID09IGYtPmZfZGVudHJ5LT5kX2lub2RlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtICVzOiBhbHJlYWR5IGluIHVzZSBhcyBjb3dcbiIsIGNvd2YpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCX0KLQotCS8qCi0JKiogbWFyayBjb3dmaWxlIG9wZW4gZm9yIHJlYWQtd3JpdGUKLQkqLwotCWNvd2Rldi0+c3RhdGUgfD0gQ09XUldDT1dPUEVOOwotCi0JLyoKLQkqKiBjYWxjdWxhdGUgc2l6ZSAoaW4gYnl0ZXMpIGZvciB0b3RhbCBiaXRtYXAgaW4gY293ZmlsZTsKLQkqKiB3aGVuIHRoZSBzaXplIG9mIHRoZSBjb3doZWFkIGJsb2NrIGlzIGFkZGVkLCB0aGUgc3RhcnQtb2Zmc2V0Ci0JKiogZm9yIHRoZSBtb2RpZmllZCBkYXRhIGJsb2NrcyBjYW4gYmUgZm91bmQKLQkqLwotCW5iID0gY293ZGV2LT5udW1ibG9ja3M7Ci0KLQlpZiAobmIlOCkJCS8qIHRyYW5zZm9ybSAjYml0cyB0byAjYnl0ZXMgKi8KLQkJbmIrPTg7ICAJLyogcm91bmRlZCBpZiBuZWNlc3NhcnkgICAgICAqLwotCW5iIC89IDg7Ci0KLQlpZiAobmIgJiBNVU1BU0spCS8qIHJvdW5kIHVwICNieXRlcyB0byBNQVBVTklUIGNodW5rcyAqLwotCQljb3dkZXYtPm1hcHNpemUgPSAoIChuYj4+TVVTSElGVCkgKzEpIDw8IE1VU0hJRlQ7Ci0JZWxzZQotCQljb3dkZXYtPm1hcHNpemUgPSBuYjsKLQotCS8qCi0JKiogcmVzZXJ2ZSBzcGFjZSBpbiBtZW1vcnkgZm9yIHRoZSBjb3doZWFkCi0JKi8KLQljb3dkZXYtPmNvd2hlYWQgPSBrbWFsbG9jKE1BUFVOSVQsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFjb3dkZXYtPmNvd2hlYWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gY2Fubm90IGdldCBzcGFjZSBmb3IgY293aGVhZCAlZFxuIiwKLQkJCQkJCQkJICAgICBNQVBVTklUKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGNvd2Rldi0+Y293aGVhZCwgMCwgTUFQVU5JVCk7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcHJlcGFyZSBjb3doZWFkLi4uLlxuIik7Ci0KLQkvKgotCSoqIGNoZWNrIGlmIHRoZSBjb3dmaWxlIGV4aXN0cyBvciBzaG91bGQgYmUgY3JlYXRlZAotCSovCi0JaWYgKGlub2RlLT5pX3NpemUgIT0gMCkgewotCQkvKgotCQkqKiBleGlzdGluZyBjb3dmaWxlOiByZWFkIHRoZSBjb3cgaGVhZAotCQkqLwotCQlpZiAoaW5vZGUtPmlfc2l6ZSA8IE1BUFVOSVQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb3dsb29wIC0gZXhpc3RpbmcgY293ZmlsZSAlcyB0b28gc21hbGxcbiIsCi0JCQkJY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWNvd2xvX3JlYWRjb3dyYXcoY293ZGV2LCBjb3dkZXYtPmNvd2hlYWQsIE1BUFVOSVQsIChsb2ZmX3QpIDApOwotCi0JCS8qCi0JCSoqIHZlcmlmeSBpZiB0aGUgZXhpc3RpbmcgZmlsZSBpcyByZWFsbHkgYSBjb3dmaWxlCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPm1hZ2ljICE9IENPV01BR0lDKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgJXMgaGFzIGluY29ycmVjdCBmb3JtYXRcbiIsCi0JCQkJY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qCi0JCSoqIHZlcmlmeSB0aGUgY293aGVhZCB2ZXJzaW9uIG9mIHRoZSBjb3dmaWxlCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPnZlcnNpb24gPiBDT1dWRVJTSU9OKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgJXMgbmV3ZXIgdGhhbiB0aGlzIGRyaXZlclxuIiwKLQkJCQljb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJKiogbWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBub3QgYSBwYWNrZWQgY293ZmlsZQotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV1BBQ0tFRCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgImNvd2xvb3AgLSBwYWNrZWQgY293ZmlsZSAlcyBub3QgYWNjZXB0ZWRcbiIsIGNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkqKiB2ZXJpZnkgaWYgdGhlIGNvd2ZpbGUgaGFzIGJlZW4gcHJvcGVybHkgY2xvc2VkCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPmZsYWdzICYgQ09XRElSVFkpIHsKLQkJCS8qCi0JCQkqKiBjb3dmaWxlIHdhcyBub3QgcHJvcGVybHkgY2xvc2VkOwotCQkJKiogY2hlY2sgaWYgYXV0b21hdGljIHJlY292ZXJ5IGlzIHJlcXVpcmVkCi0JCQkqKiAoYWN0dWFsIHJlY292ZXJ5IHdpbGwgYmUgZG9uZSBsYXRlciBvbikKLQkJCSovCi0JCQlpZiAoIWF1dG9yZWNvdmVyKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb3dsb29wIC0gY293ZmlsZSAlcyBpcyBkaXJ0eSAiCi0JCQkJICAgICAgICIobm90IHByb3Blcmx5IGNsb3NlZCBieSBybW1vZD8pXG4iLAotCQkJCQljb3dmKTsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgImNvd2xvb3AgLSBydW4gY293cmVwYWlyIG9yIHNwZWNpZnkgIgotCQkJCSAgICAgICAiJ29wdGlvbj1yJyB0byByZWNvdmVyXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSoqIHZlcmlmeSBpZiB0aGUgY293ZmlsZSBpcyByZWFsbHkgcmVsYXRlZCB0byB0aGlzIHJkb2ZpbGUKLQkJKi8KLQkJaWYgKGNvd2Rldi0+Y293aGVhZC0+cmRvYmxvY2tzICE9IGNvd2Rldi0+bnVtYmxvY2tzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgIAkgICAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIChzaXplICVsbGQpIG5vdCByZWxhdGVkICIKLQkJICAgICAgIAkgICAgICAgInRvIHJkb2ZpbGUgKHNpemUgJWxsZClcbiIsCi0JCQkJY293ZiwKLQkJCQkobG9uZyBsb25nKWNvd2Rldi0+Y293aGVhZC0+cmRvYmxvY2tzIDw8TVVTSElGVCwKLQkJCQkobG9uZyBsb25nKWNvd2Rldi0+bnVtYmxvY2tzIDw8TVVTSElGVCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPnJkb2ZpbmdlcnByaW50ICE9IGNvd2Rldi0+ZmluZ2VycHJpbnQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgCSAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIG5vdCByZWxhdGVkIHRvIHJkb2ZpbGUgIgotCQkJICAgICAiIChmaW5nZXJwcmludCBlcnIgLSByZG9maWxlIG1vZGlmaWVkPylcbiIsIGNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkqKiBuZXcgY293ZmlsZTogZGV0ZXJtaW5lIHRoZSBtaW5pbWFsIHNpemUgKGNvd2hlYWQrYml0bWFwKQotCQkqLwotCQlvZmZzZXQgPSAobG9mZl90KSBNQVBVTklUICsgY293ZGV2LT5tYXBzaXplIC0gMTsKLQotCQlpZiAoIGNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgIiIsIDEsIG9mZnNldCkgPCAxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIGNhbm5vdCBzZXQgY293ZmlsZSB0byBzaXplICVsbGRcbiIsCi0JCQkJb2Zmc2V0KzEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkqKiBwcmVwYXJlIG5ldyBjb3doZWFkCi0JCSovCi0JCWNvd2Rldi0+Y293aGVhZC0+bWFnaWMJCT0gQ09XTUFHSUM7Ci0JCWNvd2Rldi0+Y293aGVhZC0+dmVyc2lvbgk9IENPV1ZFUlNJT047Ci0JCWNvd2Rldi0+Y293aGVhZC0+bWFwdW5pdAk9IE1BUFVOSVQ7Ci0JCWNvd2Rldi0+Y293aGVhZC0+bWFwc2l6ZQk9IGNvd2Rldi0+bWFwc2l6ZTsKLQkJY293ZGV2LT5jb3doZWFkLT5yZG9ibG9ja3MJPSBjb3dkZXYtPm51bWJsb2NrczsKLQkJY293ZGV2LT5jb3doZWFkLT5yZG9maW5nZXJwcmludAk9IGNvd2Rldi0+ZmluZ2VycHJpbnQ7Ci0JCWNvd2Rldi0+Y293aGVhZC0+Y293dXNlZAk9IDA7Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIHN0YXJ0IG9mZnNldCBvZiBkYXRhIGluIGNvd2ZpbGUsCi0JCSoqIHJvdW5kZWQgdXAgdG8gbXVsdGlwbGUgb2YgNEsgdG8gYXZvaWQKLQkJKiogdW5uZWNlc3NhcnkgZGlzay11c2FnZSBmb3Igd3JpdHRlbiBkYXRhYmxvY2tzIGluCi0JCSoqIHRoZSBzcGFyc2VkIGNvd2ZpbGUgb24gZS5nLiA0SyBmaWxlc3lzdGVtcwotCQkqLwotCQljb3dkZXYtPmNvd2hlYWQtPmRvZmZzZXQgPQotCQkJKChNQVBVTklUK2Nvd2Rldi0+bWFwc2l6ZSs0MDk1KT4+MTIpPDwxMjsKLQl9Ci0KLQljb3dkZXYtPmNvd2hlYWQtPmZsYWdzCT0gMDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZXNlcnZlIHNwYWNlIGJpdG1hcC4uLi5cbiIpOwotCi0JLyoKLQkqKiByZXNlcnZlIHNwYWNlIGluIG1lbW9yeSBmb3IgdGhlIGVudGlyZSBiaXRtYXAgYW5kCi0JKiogZmlsbCBpdCB3aXRoIHRoZSBiaXRtYXAtZGF0YSBmcm9tIGRpc2s7IHRoZSBlbnRpcmUKLQkqKiBiaXRtYXAgaXMgYWxsb2NhdGVkIGluIHNldmVyYWwgY2h1bmtzIGJlY2F1c2Uga21hbGxvYwotCSoqIGhhcyByZXN0cmljdGlvbnMgcmVnYXJkaW5nIHRoZSBhbGxvd2VkIHNpemUgcGVyIGttYWxsb2MKLQkqLwotCWNvd2Rldi0+bWFwY291bnQgPSAoY293ZGV2LT5tYXBzaXplK01BUENIVU5LU1otMSkvTUFQQ0hVTktTWjsKLQotCS8qCi0JKiogdGhlIHNpemUgb2YgZXZlcnkgYml0bWFwIGNodW5rIHdpbGwgYmUgTUFQQ0hVTktTWiBieXRlcywgZXhjZXB0IGZvcgotCSoqIHRoZSBsYXN0IGJpdG1hcCBjaHVuazogY2FsY3VsYXRlIHJlbWFpbmluZyBzaXplIGZvciB0aGlzIGNodW5rCi0JKi8KLQlpZiAoY293ZGV2LT5tYXBzaXplICUgTUFQQ0hVTktTWiA9PSAwKQotCQljb3dkZXYtPm1hcHJlbWFpbiA9IE1BUENIVU5LU1o7Ci0JZWxzZQotCQljb3dkZXYtPm1hcHJlbWFpbiA9IGNvd2Rldi0+bWFwc2l6ZSAlIE1BUENIVU5LU1o7Ci0KLQkvKgotCSoqIGFsbG9jYXRlIHNwYWNlIHRvIHN0b3JlIGFsbCBwb2ludGVycyBmb3IgdGhlIGJpdG1hcC1jaHVua3MKLQkqKiAoaW5pdGlhbGl6ZSBhcmVhIHdpdGggemVyb2VzIHRvIGFsbG93IHByb3BlciB1bmRvKQotCSovCi0JY293ZGV2LT5tYXBjYWNoZSA9IGttYWxsb2MoY293ZGV2LT5tYXBjb3VudCAqIHNpemVvZihjaGFyICopLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWNvd2Rldi0+bWFwY2FjaGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtIGNhbiBub3QgYWxsb2NhdGUgc3BhY2UgZm9yIGJpdG1hcCBwdHJzXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGNvd2Rldi0+bWFwY2FjaGUsIDAsIGNvd2Rldi0+bWFwY291bnQgKiBzaXplb2YoY2hhciAqKSk7Ci0KLQkvKgotCSoqIGFsbG9jYXRlIHNwYWNlIHRvIHN0b3JlIHRoZSBiaXRtYXAtY2h1bmtzIHRoZW1zZWx2ZXMKLQkqLwotCWZvciAoaT0wOyBpIDwgY293ZGV2LT5tYXBjb3VudDsgaSsrKSB7Ci0JCWlmIChpIDwgKGNvd2Rldi0+bWFwY291bnQtMSkpCi0JCQkqKGNvd2Rldi0+bWFwY2FjaGUraSkgPSBrbWFsbG9jKE1BUENIVU5LU1osIEdGUF9LRVJORUwpOwotCQllbHNlCi0JCQkqKGNvd2Rldi0+bWFwY2FjaGUraSkgPSBrbWFsbG9jKGNvd2Rldi0+bWFwcmVtYWluLAotCQkJCQkJICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCooY293ZGV2LT5tYXBjYWNoZStpKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNvd2xvb3AgLSBubyBzcGFjZSBmb3IgYml0bWFwY2h1bmsgJWxkIgotCQkJCQkiIHRvdG1hcHN6PSVsZCwgbWFwY250PSVkIG1hcHVuaXQ9JWRcbiIsCi0JCQkJCWksIGNvd2Rldi0+bWFwc2l6ZSwgY293ZGV2LT5tYXBjb3VudCwKLQkJCQkJTUFQVU5JVCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWFkIGJpdG1hcCBmcm9tIGNvdy4uLi5cbiIpOwotCi0JLyoKLQkqKiByZWFkIHRoZSBlbnRpcmUgYml0bWFwIGZyb20gdGhlIGNvd2ZpbGUgaW50byB0aGUgaW4tbWVtb3J5IGNhY2hlOwotCSoqIGNvdW50IHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgYXJlIGluIHVzZSBhbHJlYWR5Ci0JKiogKHN0YXRpc3RpY2FsIHB1cnBvc2VzKQotCSovCi0JZm9yIChpPTAsIG9mZnNldD1NQVBVTklUOyBpIDwgY293ZGV2LT5tYXBjb3VudDsKLQkJCQkJaSsrLCBvZmZzZXQrPU1BUENIVU5LU1opIHsKLQkJdW5zaWduZWQgbG9uZwludW1ieXRlczsKLQotCQlpZiAoaSA8IChjb3dkZXYtPm1hcGNvdW50LTEpKQotCQkJLyoKLQkJCSoqIGZ1bGwgYml0bWFwIGNodW5rCi0JCQkqLwotCQkJbnVtYnl0ZXMgPSBNQVBDSFVOS1NaOwotCQllbHNlCi0JCQkvKgotCQkJKiogbGFzdCBiaXRtYXAgY2h1bms6IG1pZ2h0IGJlIHBhcnRseSBmaWxsZWQKLQkJCSovCi0JCQludW1ieXRlcyA9IGNvd2Rldi0+bWFwcmVtYWluOwotCi0JCWNvd2xvX3JlYWRjb3dyYXcoY293ZGV2LCAqKGNvd2Rldi0+bWFwY2FjaGUraSksCi0JCQkJCQkJbnVtYnl0ZXMsIG9mZnNldCk7Ci0JfQotCi0JLyoKLQkqKiBpZiB0aGUgY293ZmlsZSB3YXMgZGlydHkgYW5kIGF1dG9tYXRpYyByZWNvdmVyeSBpcyByZXF1aXJlZCwKLQkqKiByZWNvbnN0cnVjdCBhIHByb3BlciBiaXRtYXAgaW4gbWVtb3J5IG5vdwotCSovCi0JaWYgKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJiBDT1dESVJUWSkgewotCQl1bnNpZ25lZCBsb25nIGxvbmcJYmxvY2tudW07Ci0JCWNoYXIJCQlkYXRhYnVmW01BUFVOSVRdOwotCQl1bnNpZ25lZCBsb25nCQltYXBudW0sIG1hcGJ5dGUsIG1hcGJpdDsKLQotCQlwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSByZWNvdmVyIGRpcnR5IGNvd2ZpbGUgJXMuLi4uXG4iLAotCQkJCQkJCWNvd2YpOwotCi0JCS8qCi0JCSoqIHJlYWQgYWxsIGRhdGEgYmxvY2tzCi0JCSovCi0JCWZvciAoYmxvY2tudW09MCwgcnY9MSwgb2Zmc2V0PTA7Ci0JCQljb3dsb19yZWFkY293KGNvd2RldiwgZGF0YWJ1ZiwgTUFQVU5JVCwgb2Zmc2V0KSA+IDA7Ci0JCQlibG9ja251bSsrLCBvZmZzZXQgKz0gTUFQVU5JVCkgewotCi0JCQkvKgotCQkJKiogaWYgdGhpcyBkYXRhYmxvY2sgY29udGFpbnMgcmVhbCBkYXRhIChub3QgYmluYXJ5Ci0JCQkqKiB6ZXJvZXMpLCBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBiaXRtYXAKLQkJCSovCi0JCQlpZiAoIG1lbWNtcChkYXRhYnVmLCBhbGx6ZXJvZXMsIE1BUFVOSVQpID09IDApCi0JCQkJY29udGludWU7Ci0KLQkJCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja251bSk7Ci0JCQltYXBieXRlID0gQ0FMQ0JZVEUoYmxvY2tudW0pOwotCQkJbWFwYml0ICA9IENBTENCSVQgKGJsb2NrbnVtKTsKLQotCQkJKigqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKSttYXBieXRlKSB8PSAoMTw8bWFwYml0KTsKLQkJfQotCi0JCXByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIGNvd2ZpbGUgcmVjb3ZlcnkgY29tcGxldGVkXG4iKTsKLQl9Ci0KLQkvKgotCSoqIGNvdW50IGFsbCBiaXRzIHNldCBpbiB0aGUgYml0bWFwcyBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMKLQkqLwotCWZvciAoaT0wLCBjb3dkZXYtPm5yY293YmxvY2tzID0gMDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7IGkrKykgewotCQlsb25nCW51bWJ5dGVzOwotCQljaGFyCSpwOwotCi0JCWlmIChpIDwgKGNvd2Rldi0+bWFwY291bnQtMSkpCi0JCQludW1ieXRlcyA9IE1BUENIVU5LU1o7Ci0JCWVsc2UKLQkJCW51bWJ5dGVzID0gY293ZGV2LT5tYXByZW1haW47Ci0KLQkJcCA9ICooY293ZGV2LT5tYXBjYWNoZStpKTsKLQotCQlmb3IgKG51bWJ5dGVzLS07IG51bWJ5dGVzID49IDA7IG51bWJ5dGVzLS0sIHArKykgewotCQkJLyoKLQkJCSoqIGZvciBvbmx5IGVpZ2h0IGNoZWNrcyB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdGlvbgotCQkJKiogaXMgZmFzdGVyIHRoYW4gYSBsb29wLWNvbnN0cnVjdGlvbgotCQkJKi8KLQkJCWlmICgoKnApICYgMHgwMSkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDAyKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4MDQpCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHgwOCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDEwKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4MjApCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHg0MCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDgwKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCX0KLQl9Ci0KLQkvKgotCSoqIGNvbnNpc3RlbmN5LWNoZWNrIGZvciBudW1iZXIgb2YgYml0cyBzZXQgaW4gYml0bWFwCi0JKi8KLQlpZiAoICEoY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV0RJUlRZKSAmJgotCSAgICAoY293ZGV2LT5jb3doZWFkLT5jb3d1c2VkICE9IGNvd2Rldi0+bnJjb3dibG9ja3MpICkgewotCQlwcmludGsoS0VSTl9FUlIgImNvd2xvb3AgLSBpbmNvbnNpc3RlbnQgY293ZmlsZSBhZG1pXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiB1bmRvIG1lbW9yeSBhbGxvY3MgYW5kIGZpbGUgb3BlbnMgaXNzdWVkIHNvIGZhcgotKiogcmVsYXRlZCB0byB0aGUgY293ZmlsZQotKi8KLXN0YXRpYyB2b2lkCi1jb3dsb191bmRvX29wZW5jb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYpCi17Ci0JaW50CWk7Ci0KLQlpZiAoY293ZGV2LT5tYXBjYWNoZSkgewotCQlmb3IgKGk9MDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7IGkrKykgewotCQkJaWYgKCooY293ZGV2LT5tYXBjYWNoZStpKSAhPSBOVUxMKQotCQkJCWtmcmVlKCAqKGNvd2Rldi0+bWFwY2FjaGUraSkgKTsKLQkJfQotCi0JCWtmcmVlKGNvd2Rldi0+bWFwY2FjaGUpOwotCX0KLQotCWlmIChjb3dkZXYtPmNvd2hlYWQpCi0JCWtmcmVlKGNvd2Rldi0+Y293aGVhZCk7Ci0KLQlpZiAoIChjb3dkZXYtPnN0YXRlICYgQ09XQ09XT1BFTikgJiYgKGNvd2Rldi0+Y293ZnApICkKLSAgCQlmaWxwX2Nsb3NlKGNvd2Rldi0+Y293ZnAsIDApOwotCi0JLyoKLQkqKiBtYXJrIGNvd2ZpbGUgY2xvc2VkCi0JKi8KLQljb3dkZXYtPnN0YXRlICY9IH5DT1dDT1dPUEVOOwotfQotCi0vKgotKiogZmx1c2ggdGhlIGVudGlyZSBiaXRtYXAgYW5kIHRoZSBjb3doZWFkIChjbGVhbikgdG8gdGhlIGNvd2ZpbGUKLSoqCi0qKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb3dkZXZpY2VzLWxvY2sgc2V0Ci0qLwotc3RhdGljIHZvaWQKLWNvd2xvX3N5bmModm9pZCkKLXsKLQlpbnQJCQlpLCBtaW5vcjsKLQlsb2ZmX3QJCQlvZmZzZXQ7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXY7Ci0KLQlmb3IgKG1pbm9yPTA7IG1pbm9yIDwgbWF4Y293czsgIG1pbm9yKyspIHsKLQkJY293ZGV2ID0gY293ZGV2YWxsW21pbm9yXTsKLQkJaWYgKCAhIChjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSApCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGk9MCwgb2Zmc2V0PU1BUFVOSVQ7IGkgPCBjb3dkZXYtPm1hcGNvdW50OwotCQkJCQlpKyssIG9mZnNldCArPSBNQVBDSFVOS1NaKSB7Ci0JCQl1bnNpZ25lZCBsb25nCW51bWJ5dGVzOwotCi0JCQlpZiAoaSA8IChjb3dkZXYtPm1hcGNvdW50LTEpKQotCQkJCS8qCi0JCQkJKiogZnVsbCBiaXRtYXAgY2h1bmsKLQkJCQkqLwotCQkJCW51bWJ5dGVzID0gTUFQQ0hVTktTWjsKLQkJCWVsc2UKLQkJCQkvKgotCQkJCSoqIGxhc3QgYml0bWFwIGNodW5rOiBtaWdodCBiZSBwYXJ0bHkgZmlsbGVkCi0JCQkJKi8KLQkJCQludW1ieXRlcyA9IGNvd2Rldi0+bWFwcmVtYWluOwotCi0JCQlERUJVR1AoRENPVwotCQkJICAgICAgICJjb3dsb29wIC0gZmx1c2hpbmcgYml0bWFwICUyZCAoJTNsZCBLYilcbiIsCi0JCQkJCQkJaSwgbnVtYnl0ZXMvMTAyNCk7Ci0KLQkJCWlmIChjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsICooY293ZGV2LT5tYXBjYWNoZStpKSwKLQkJCQkJCW51bWJ5dGVzLCBvZmZzZXQpIDwgbnVtYnl0ZXMpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSoqIGZsdXNoIGNsZWFuIHVwLXRvLWRhdGUgY293aGVhZCB0byBjb3dmaWxlCi0JCSovCi0JCWNvd2Rldi0+Y293aGVhZC0+Y293dXNlZAkgPSBjb3dkZXYtPm5yY293YmxvY2tzOwotCQljb3dkZXYtPmNvd2hlYWQtPmZsYWdzCQkmPSB+Q09XRElSVFk7Ci0KLQkJREVCVUdQKERDT1cgImNvd2xvb3AgLSBmbHVzaGluZyBjb3doZWFkICglM2QgS2IpXG4iLAotCQkJCQkJCU1BUFVOSVQvMTAyNCk7Ci0KLQkJY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBjb3dkZXYtPmNvd2hlYWQsIE1BUFVOSVQsIChsb2ZmX3QpIDApOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogY2FsbGVkIGR1cmluZyBpbnNtb2QvbW9kcHJvYmUKLSovCi1zdGF0aWMgaW50IF9faW5pdAotY293bG9faW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpbnQJcnY7Ci0JaW50CW1pbm9yLCB1cHRvY293czsKLQotICAgICAgICByZXZpc2lvbltzaXplb2YgcmV2aXNpb24gLSAzXSA9ICdcMCc7Ci0KLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gKEMpIDIwMDkgQVRDb21wdXRpbmcubmwgLSB2ZXJzaW9uOiAlc1xuIiwgJnJldmlzaW9uWzExXSk7Ci0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIGluZm86IHd3dy5BVENvbXB1dGluZy5ubC9jb3dsb29wXG4iKTsKLQotCW1lbXNldChhbGx6ZXJvZXMsIDAsIE1BUFVOSVQpOwotCi0JLyoKLQkqKiBTZXR1cCBhZG1pbmlzdHJhdGlvbiBmb3IgYWxsIHBvc3NpYmxlIGNvd2RldmljZXMuCi0gICAgICAgICoqIE5vdGUgdGhhdCB0aGVpciBtaW5vciBudW1iZXJzIGdvIGZyb20gMCB0byBNQVhDT1dTLTEgaW5jbHVzaXZlCi0gICAgICAgICoqIGFuZCBtaW5vciA9PSBNQVhDT1dTLTEgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBjb250cm9sIGRldmljZS4KLQkqLwotCWlmICgobWF4Y293cyA8IDEpIHx8IChtYXhjb3dzID4gTUFYQ09XUykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSBtYXhjb3dzIGV4Y2VlZHMgbWF4aW11bSBvZiAlZFxuIiwgTUFYQ09XUyk7Ci0KLSAgICAgICAgICAgICAgICBtYXhjb3dzID0gREZMQ09XUzsKLSAgICAgICAgfQotCi0JLyogYWxsb2NhdGUgcm9vbSBmb3IgYSB0YWJsZSB3aXRoIGEgcG9pbnRlciB0byBlYWNoIGNvd2xvb3BfZGV2aWNlOiAqLwotICAgICAgICBpZiAoIChjb3dkZXZhbGwgPSBrbWFsbG9jKG1heGNvd3MgKiBzaXplb2Yoc3RydWN0IGNvd2xvb3BfZGV2aWNlICopLAotCQkJCQkJCUdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAiY293bG9vcCAtIGNhbiBub3QgYWxsb2MgdGFibGUgZm9yICVkIGRldnNcbiIsIG1heGNvd3MpOwotCQl1cHRvY293cyA9IDA7Ci0JCXJ2ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9vdXQ7Ci0JfQotCW1lbXNldChjb3dkZXZhbGwsIDAsIG1heGNvd3MgKiBzaXplb2Yoc3RydWN0IGNvd2xvb3BfZGV2aWNlICopKTsKLQkvKiB0aGVuIGhvb2sgYW4gYWN0dWFsIGNvd2xvb3BfZGV2aWNlIHN0cnVjdCB0byBlYWNoIHBvaW50ZXI6ICovCi0JZm9yIChtaW5vcj0wOyBtaW5vciA8IG1heGNvd3M7IG1pbm9yKyspIHsKLQkJaWYgKChjb3dkZXZhbGxbbWlub3JdID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvd2xvb3BfZGV2aWNlKSwKLQkJCQkJCUdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgICAgImNvd2xvb3AgLSBjYW4gbm90IGFsbG9jIGFkbWluLXN0cnVjdCBmb3IgZGV2IG5vICVkXG4iLCBtaW5vcik7Ci0KLQkJCXVwdG9jb3dzID0gbWlub3I7IC8qIHRoaXMgaXMgaG93IGZhciB3ZSBnb3QuLi4uICovCi0JCQlydiA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycm9yX291dDsKLQkJfQotICAgICAgICAJbWVtc2V0KGNvd2RldmFsbFttaW5vcl0sIDAsIHNpemVvZihzdHJ1Y3QgY293bG9vcF9kZXZpY2UpKTsKLQl9Ci0JdXB0b2Nvd3MgPSBtYXhjb3dzOyAvKiB3ZSBnb3QgYWxsIGRldmljZXMgKi8KLQotCXNlbWFfaW5pdCgmY293ZGV2bG9jaywgMSk7Ci0KLQkvKgotCSoqIHJlZ2lzdGVyIGNvd2xvb3AgbW9kdWxlCi0JKi8KLQlpZiAoIHJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAiY293bG9vcCAtIHVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIGNvd2xvb3BcbiIsIENPV01BSk9SKTsKLQkJcnYgPSAtRUlPOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KLQkvKgotCSoqIGNyZWF0ZSBhIGRpcmVjdG9yeSBiZWxvdyAvcHJvYyB0byBhbGxvY2F0ZSBhIGZpbGUKLQkqKiBmb3IgZWFjaCBjb3dkZXZpY2UgdGhhdCBpcyBhbGxvY2F0ZWQgbGF0ZXIgb24KLQkqLwotCWNvd2xvX3Byb2NkaXIgPSBwcm9jX21rZGlyKCJjb3ciLCBOVUxMKTsKLQotCS8qCi0JKiogY2hlY2sgaWYgYSBjb3dkZXZpY2UgaGFzIHRvIGJlIG9wZW5lZCBkdXJpbmcgaW5zbW9kL21vZHByb2JlOwotCSoqIHR3byBwYXJhbWV0ZXJzIHNob3VsZCBiZSBzcGVjaWZpZWQgdGhlbjogcmRvZmlsZT0gYW5kIGNvd2ZpbGU9Ci0JKi8KLQlpZiggKHJkb2ZpbGVbMF0gIT0gJ1wwJykgJiYgKGNvd2ZpbGVbMF0gIT0gJ1wwJykgKSB7Ci0JCWNoYXIJKnBvID0gb3B0aW9uOwotCQlpbnQJd2FudHJlY292ZXIgPSAwOwotCi0JCS8qCi0JCSoqIGNoZWNrIGlmIGF1dG9tYXRpYyByZWNvdmVyeSBpcyB3YW50ZWQKLQkJKi8KLQkJd2hpbGUgKCpwbykgewotCQkJaWYgKCpwbyA9PSAncicpIHsKLQkJCQl3YW50cmVjb3ZlciA9IDE7Ci0JCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlwbysrOwotCQl9Ci0KLQkJLyoKLQkJKiogb3BlbiBuZXcgY293ZGV2aWNlIHdpdGggbWlub3IgbnVtYmVyIDAKLQkJKi8KLQkJaWYgKCAocnYgPSBjb3dsb19vcGVucGFpcihyZG9maWxlLCBjb3dmaWxlLCB3YW50cmVjb3ZlciwgMCkpKSB7Ci0JCQlyZW1vdmVfcHJvY19lbnRyeSgiY293IiwgTlVMTCk7Ci0JCQl1bnJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpOwotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCX0KLSAgICAgICAgfSBlbHNlIHsKLQkJLyoKLQkJKiogY2hlY2sgaWYgb25seSBvbmUgcGFyYW1ldGVyIGhhcyBiZWVuIHNwZWNpZmllZAotCQkqLwotCQlpZiggKHJkb2ZpbGVbMF0gIT0gJ1wwJykgfHwgKGNvd2ZpbGVbMF0gIT0gJ1wwJykgKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIG9ubHkgb25lIGZpbGVuYW1lIHNwZWNpZmllZFxuIik7Ci0JCQlyZW1vdmVfcHJvY19lbnRyeSgiY293IiwgTlVMTCk7Ci0JCQl1bnJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpOwotCQkJcnYgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCX0KLQl9Ci0KLQkvKgotCSoqIGFsbG9jYXRlIGZha2UgZGlzayBhcyBjb250cm9sIGNoYW5uZWwgdG8gaGFuZGxlIHRoZSByZXF1ZXN0cwotCSoqIHRvIGFjdGl2YXRlIGFuZCBkZWFjdGl2YXRlIGNvd2RldmljZXMgZHluYW1pY2FsbHkKLQkqLwotCWlmICghKGNvd2N0bGdkID0gYWxsb2NfZGlzaygxKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB1bmFibGUgdG8gYWxsb2NfZGlzayBmb3IgY293Y3RsXG4iKTsKLQotCQlyZW1vdmVfcHJvY19lbnRyeSgiY293IiwgTlVMTCk7Ci0JCSh2b2lkKSBjb3dsb19jbG9zZXBhaXIoY293ZGV2YWxsWzBdKTsKLQkJdW5yZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKTsKLQkJcnYgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KLQlzcGluX2xvY2tfaW5pdCgmY293Y3RscnFsb2NrKTsKLQljb3djdGxnZC0+bWFqb3IgICAgICAgID0gQ09XTUFKT1I7Ci0JY293Y3RsZ2QtPmZpcnN0X21pbm9yICA9IENPV0NUTDsKLQljb3djdGxnZC0+bWlub3JzICAgICAgID0gMTsKLQljb3djdGxnZC0+Zm9wcyAgICAgICAgID0gJmNvd2xvX2ZvcHM7Ci0JY293Y3RsZ2QtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JLyogdGhlIGRldmljZSBoYXMgY2FwYWNpdHkgMCwgc28gdGhlcmUgd2lsbCBiZSBubyBxLXJlcXVlc3RzICovCi0JY293Y3RsZ2QtPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoTlVMTCwgJmNvd2N0bHJxbG9jayk7Ci0Jc3ByaW50Zihjb3djdGxnZC0+ZGlza19uYW1lLCAiY293Y3RsIik7Ci0Jc2V0X2NhcGFjaXR5KGNvd2N0bGdkLCAwKTsKLQotCWFkZF9kaXNrKGNvd2N0bGdkKTsKLQotICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBudW1iZXIgb2YgY29uZmlndXJlZCBjb3dkZXZpY2VzOiAlZFxuIiwKLQkJCQkJCQkJbWF4Y293cyk7Ci0JaWYgKHJkb2ZpbGVbMF0gIT0gJ1wwJykgewotCSAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBpbml0aWFsaXplZCBvbiByZG9maWxlPSVzXG4iLAotCQkJCQkJCQlyZG9maWxlKTsKLQl9IGVsc2UgewotCSAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBpbml0aWFsaXplZCB3aXRob3V0IHJkb2ZpbGUgeWV0XG4iKTsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycm9yX291dDoKLQlmb3IgKG1pbm9yPTA7IG1pbm9yIDwgdXB0b2Nvd3MgOyBtaW5vcisrKSB7Ci0JCWtmcmVlKGNvd2RldmFsbFttaW5vcl0pOwotCX0KLQlrZnJlZShjb3dkZXZhbGwpOwotCXJldHVybiBydjsKLX0KLQotLyoKLSoqIGNhbGxlZCBkdXJpbmcgcm1tb2QKLSovCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWNvd2xvX2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JaW50CW1pbm9yOwotCi0JLyoKLQkqKiBmbHVzaCBiaXRtYXBzIGFuZCBjb3doZWFkcyB0byB0aGUgY293ZmlsZXMKLQkqLwotCWRvd24oJmNvd2RldmxvY2spOwotCWNvd2xvX3N5bmMoKTsKLQl1cCgmY293ZGV2bG9jayk7Ci0KLQkvKgotCSoqIGNsb3NlIGFsbCBjb3dkZXZpY2VzCi0JKi8KLQlmb3IgKG1pbm9yPTA7IG1pbm9yIDwgbWF4Y293czsgIG1pbm9yKyspCi0JCSh2b2lkKSBjb3dsb19jbG9zZXBhaXIoY293ZGV2YWxsW21pbm9yXSk7Ci0KLQl1bnJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpOwotCi0JLyoKLQkqKiBnZXQgcmlkIG9mIC9wcm9jL2NvdyBhbmQgdW5yZWdpc3RlciB0aGUgZHJpdmVyCi0JKi8KLQlyZW1vdmVfcHJvY19lbnRyeSgiY293IiwgTlVMTCk7Ci0KLQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0JCWtmcmVlKGNvd2RldmFsbFttaW5vcl0pOwotCX0KLQlrZnJlZShjb3dkZXZhbGwpOwotCi0JZGVsX2dlbmRpc2soY293Y3RsZ2QpOyAgLyogcmV2ZXJ0IHRoZSBhbGxvY19kaXNrKCkgKi8KLQlwdXRfZGlzayAgIChjb3djdGxnZCk7ICAvKiByZXZlcnQgdGhlIGFkZF9kaXNrKCkgICAqLwotCWJsa19jbGVhbnVwX3F1ZXVlKGNvd2N0bGdkLT5xdWV1ZSk7IC8qIGNsZWFudXAgdGhlIGVtcHR5IHF1ZXVlICovCi0KLQlwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSB1bmxvYWRlZFxuIik7Ci19Ci0KLW1vZHVsZV9pbml0KGNvd2xvX2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KGNvd2xvX2NsZWFudXBfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNGEzNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotKiogRE8gTk9UIE1PRElGWSBUSEVTRSBWQUxVRVMgKHdvdWxkIG1ha2Ugb2xkIGNvd2ZpbGVzIHVudXNhYmxlKQotKi8KLSNkZWZpbmUJTUFQVU5JVAkJMTAyNAkJLyogYmxvY2tzaXplIGZvciBiaXQgaW4gYml0bWFwICAgICAgICovCi0jZGVmaW5lCU1VU0hJRlQJCTEwCQkvKiBiaXRzaGlmdCAgZm9yIGJpdCBpbiBiaXRtYXAgICAgICAgKi8KLSNkZWZpbmUJTVVNQVNLCQkweDNmZgkJLyogYml0bWFzayAgIGZvciBiaXQgaW4gYml0bWFwICAgICAgICovCi0KLSNkZWZpbmUJQ09XTUFHSUMJMHg1NzRmNDM3ZgkvKiBieXRlLXN3YXBwZWQgJzdmIEMgTyBXJyAgICAgICAgICAgKi8KLSNkZWZpbmUJQ09XRElSVFkJMHgwMQotI2RlZmluZQlDT1dQQUNLRUQJMHgwMgotI2RlZmluZQlDT1dWRVJTSU9OCTEKLQotc3RydWN0IGNvd2hlYWQKLXsKLQlpbnQJCW1hZ2ljOwkJLyogaWRlbnRpZmllcyBhIGNvd2ZpbGUgICAgICAgICAgICAgICovCi0Jc2hvcnQJCXZlcnNpb247CS8qIHZlcnNpb24gb2YgY293aGVhZCAgICAgICAgICAgICAgICAqLwotCXNob3J0CQlmbGFnczsgICAgCS8qIGZsYWdzIGluZGljYXRpbmcgc3RhdHVzICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJbWFwdW5pdDsJLyogYmxvY2tzaXplIHBlciBiaXQgaW4gYml0bWFwICAgICAgICovCi0JdW5zaWduZWQgbG9uZwltYXBzaXplOwkvKiB0b3RhbCBzaXplIG9mIGJpdG1hcCAoYnl0ZXMpICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWRvZmZzZXQ7CS8qIHN0YXJ0LW9mZnNldCBkYXRhYmxvY2tzIGluIGNvdyAgICAqLwotCXVuc2lnbmVkIGxvbmcJcmRvYmxvY2tzOwkvKiBzaXplIG9mIHJlbGF0ZWQgcmVhZC1vbmx5IGZpbGUgICAgKi8KLQl1bnNpZ25lZCBsb25nCXJkb2ZpbmdlcnByaW50OwkvKiBmaW5nZXJwcmludCBvZiByZWFkLW9ubHkgZmlsZSAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWNvd3VzZWQ7CS8qIG51bWJlciBvZiBkYXRhYmxvY2tzIHVzZWQgaW4gY293ICAqLwotfTsKLQotI2RlZmluZSBDT1dERVZESVIJIi9kZXYvY293LyIKLSNkZWZpbmUgQ09XREVWSUNFCUNPV0RFVkRJUiAiJWxkIgotI2RlZmluZSBDT1dDT05UUk9MCUNPV0RFVkRJUiAiY3RsIgotCi0jZGVmaW5lIE1BWENPV1MJCTEwMjQKLSNkZWZpbmUgQ09XQ1RMCQkoTUFYQ09XUy0xKQkvKiBtaW5vciBudW1iZXIgb2YgL2Rldi9jb3cvY3RsICAgICAqLwotCi0jZGVmaW5lIENPV1BST0NESVIJIi9wcm9jL2Nvdy8iCi0jZGVmaW5lIENPV1BST0NGSUxFCUNPV1BST0NESVIgIiVkIgotCi0vKgotKiogaW9jdGwgcmVsYXRlZCBzdHVmZgotKi8KLSNkZWZpbmUgQU5ZREVWCQkoKHVuc2lnbmVkIGxvbmcpLTEpCi0KLXN0cnVjdCBjb3dwYWlyCi17Ci0JdW5zaWduZWQgY2hhcgkqcmRvZmlsZTsJLyogcGF0aG5hbWUgb2YgdGhlIHJkb2ZpbGUgICAgICAgICAgICovCi0JdW5zaWduZWQgY2hhcgkqY293ZmlsZTsJLyogcGF0aG5hbWUgb2YgdGhlIGNvd2ZpbGUgICAgICAgICAgICovCi0JdW5zaWduZWQgc2hvcnQJcmRvZmxlbjsJLyogbGVuZ3RoIG9mIHJkb2ZpbGUgcGF0aG5hbWUgICAgICAgICovCi0JdW5zaWduZWQgc2hvcnQJY293ZmxlbjsJLyogbGVuZ3RoIG9mIGNvd2ZpbGUgcGF0aG5hbWUgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwlkZXZpY2U7CQkvKiByZXF1ZXN0ZWQvcmV0dXJuZWQgZGV2aWNlIG51bWJlciAgKi8KLX07Ci0KLXN0cnVjdCBjb3d3YXRjaAotewotCWludCAgICAgIAlmbGFnczsJCS8qIHJlcXVlc3QgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJZGV2aWNlOwkJLyogcmVxdWVzdGVkIGRldmljZSBudW1iZXIgICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwl0aHJlc2hvbGQ7CS8qIGNvbnRpbnVlIGlmIGZyZWUgS2IgPCB0aHJlc2hvbGQgICAqLwotCXVuc2lnbmVkIGxvbmcJdG90YWxrYjsJLyogcmV0OiB0b3RhbCBmaWxlc3lzdGVtIHNpemUgKEtiKSAgICovCi0JdW5zaWduZWQgbG9uZwlhdmFpbGtiOwkvKiByZXQ6IGZyZWUgIGZpbGVzeXN0ZW0gc2l6ZSAoS2IpICAgKi8KLX07Ci0KLSNkZWZpbmUJV0FUQ0hXQUlUCTB4MDEJCS8qIGJsb2NrIHVudGlsIHRocmVzaG9sZCByZWFjaGVkICAgICAqLwotCi0jZGVmaW5lCUNPV1NZTkMJCV9JTyAgKCdDJywgMSkKLSNkZWZpbmUJQ09XTUtQQUlSCV9JT1cgKCdDJywgMiwgc3RydWN0IGNvd3BhaXIpCi0jZGVmaW5lCUNPV1JNUEFJUglfSU9XICgnQycsIDMsIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lCUNPV1dBVENICV9JT1cgKCdDJywgNCwgc3RydWN0IGNvd3dhdGNoKQotI2RlZmluZQlDT1dDTE9TRQlfSU9XICgnQycsIDUsIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lCUNPV1JET1BFTglfSU9XICgnQycsIDYsIHVuc2lnbmVkIGxvbmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKaW5kZXggZWUxNjAxMC4uYzI0ZTRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJc3RydWN0IGRzdF9ub2RlICpuID0gcS0+cXVldWVkYXRhOwogCWludCBlcnIgPSAtRUlPOwogCi0JaWYgKGJpb19lbXB0eV9iYXJyaWVyKGJpbykgJiYgIXEtPnByZXBhcmVfZGlzY2FyZF9mbikgeworCWlmIChiaW9fZW1wdHlfYmFycmllcihiaW8pICYmICFibGtfcXVldWVfZGlzY2FyZChxKSkgewogCQkvKgogCQkgKiBUaGlzIGlzIGEgZGlydHleV25pY2UgaGFjaywgYnV0IGlmIHdlIGNvbXBsZXRlIHRoaXMKIAkJICogb3BlcmF0aW9uIHdpdGggLUVPUE5PVFNVUFAgbGlrZSBpbnRlbmRlZCwgWEZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAppbmRleCA2Mjk0ZDM4Li4yYzNkNjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiBleHRlcm4gaW5saW5lIHZvaWQgYWRkXzEwYml0KHUzMiAqdiwgaW50IG4pCiB7Ci0JKnYgPSBJTkRFWDEwKCp2ICsgbik7CisJKnYgPSBJTkRFWDEwKCp2ICsgbikgfCAoKnYgJiBFVF9ETUExMF9XUkFQKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCmluZGV4IDhmMmU5MWYuLjEwZTIxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpAQCAtMTE3NywxMiArMTE3NywyMCBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBidW1wX2Zicih1MzIgKmZiciwgdTMyIGxpbWl0KQogewotCXUzMiB2ID0gKmZicjsKLQlhZGRfMTBiaXQoJnYsIDEpOwotCWlmICh2ID4gbGltaXQpCi0JCXYgPSAoKmZiciAmIH5FVF9ETUExMF9NQVNLKSBeIEVUX0RNQTEwX1dSQVA7Ci0JKmZiciA9IHY7Ci0JcmV0dXJuIHY7CisgICAgICAgIHUzMiB2ID0gKmZicjsKKyAgICAgICAgdisrOworICAgICAgICAvKiBUaGlzIHdvcmtzIGZvciBhbGwgY2FzZXMgd2hlcmUgbGltaXQgPCAxMDI0LiBUaGUgMTAyMyBjYXNlCisgICAgICAgICAgIHdvcmtzIGJlY2F1c2UgMTAyMysrIGlzIDEwMjQgd2hpY2ggbWVhbnMgdGhlIGlmIGNvbmRpdGlvbiBpcyBub3QKKyAgICAgICAgICAgdGFrZW4gYnV0IHRoZSBjYXJyeSBvZiB0aGUgYml0IGludG8gdGhlIHdyYXAgYml0IHRvZ2dsZXMgdGhlIHdyYXAKKyAgICAgICAgICAgdmFsdWUgY29ycmVjdGx5ICovCisgICAgICAgIGlmICgodiAmIEVUX0RNQTEwX01BU0spID4gbGltaXQpIHsKKyAgICAgICAgICAgICAgICB2ICY9IH5FVF9ETUExMF9NQVNLOworICAgICAgICAgICAgICAgIHYgXj0gRVRfRE1BMTBfV1JBUDsKKyAgICAgICAgfQorICAgICAgICAvKiBGb3IgdGhlIDEwMjMgY2FzZSAqLworICAgICAgICB2ICY9IChFVF9ETUExMF9NQVNLfEVUX0RNQTEwX1dSQVApOworICAgICAgICAqZmJyID0gdjsKKyAgICAgICAgcmV0dXJuIHY7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaAppbmRleCBhODM5ZDhmLi5mYTk3M2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBfQ0hBTk5FTF9NR01UX0hfCiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlICJSaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiVm1idXNDaGFubmVsSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiVm1idXNQYWNrZXRGb3JtYXQuaCIKQEAgLTU0LDcgKzU1LDcgQEAKIAlDaGFubmVsTWVzc2FnZVZpZXdSYW5nZVJlbW92ZQkJPSAxOCwKICNlbmRpZgogCUNoYW5uZWxNZXNzYWdlQ291bnQKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiBzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciB7CiAJZW51bSB2bWJ1c19jaGFubmVsX21lc3NhZ2VfdHlwZSBNZXNzYWdlVHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYwppbmRleCAxNjEwYjg0Li5kMzg0YzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5jCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmbmV0RGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCkpIHsKLQkJbGlzdF9tb3ZlX3RhaWwoJm5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QsICZsaXN0SGVhZCk7CisJCWxpc3RfbW92ZV90YWlsKG5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QubmV4dCwgJmxpc3RIZWFkKTsKIAkJaWYgKCsrY291bnQgPT0gdm14ZmVycGFnZVBhY2tldC0+UmFuZ2VDb3VudCArIDEpCiAJCQlicmVhazsKIAl9CkBAIC0xMDcxLDcgKzEwNzEsNyBAQAogCQkvKiBSZXR1cm4gaXQgdG8gdGhlIGZyZWVsaXN0ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQlmb3IgKGkgPSBjb3VudDsgaSAhPSAwOyBpLS0pIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZsaXN0SGVhZCwKKwkJCWxpc3RfbW92ZV90YWlsKGxpc3RIZWFkLm5leHQsCiAJCQkJICAgICAgICZuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywKQEAgLTEwODUsOCArMTA4NSw3IEBACiAJfQogCiAJLyogUmVtb3ZlIHRoZSAxc3QgcGFja2V0IHRvIHJlcHJlc2VudCB0aGUgeGZlciBwYWdlIHBhY2tldCBpdHNlbGYgKi8KLQl4ZmVycGFnZVBhY2tldCA9IGxpc3RfZW50cnkoJmxpc3RIZWFkLCBzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0LAotCQkJCSAgICBMaXN0RW50cnkpOworCXhmZXJwYWdlUGFja2V0ID0gKHN0cnVjdCB4ZmVycGFnZV9wYWNrZXQqKWxpc3RIZWFkLm5leHQ7CiAJbGlzdF9kZWwoJnhmZXJwYWdlUGFja2V0LT5MaXN0RW50cnkpOwogCiAJLyogVGhpcyBpcyBob3cgbXVjaCB3ZSBjYW4gc2F0aXNmeSAqLwpAQCAtMTEwMiw4ICsxMTAxLDcgQEAKIAogCS8qIEVhY2ggcmFuZ2UgcmVwcmVzZW50cyAxIFJORElTIHBrdCB0aGF0IGNvbnRhaW5zIDEgZXRoZXJuZXQgZnJhbWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKGNvdW50IC0gMSk7IGkrKykgewotCQluZXR2c2NQYWNrZXQgPSBsaXN0X2VudHJ5KCZsaXN0SGVhZCwgc3RydWN0IGh2X25ldHZzY19wYWNrZXQsCi0JCQkJCSAgTGlzdEVudHJ5KTsKKwkJbmV0dnNjUGFja2V0ID0gKHN0cnVjdCBodl9uZXR2c2NfcGFja2V0KilsaXN0SGVhZC5uZXh0OwogCQlsaXN0X2RlbCgmbmV0dnNjUGFja2V0LT5MaXN0RW50cnkpOwogCiAJCS8qIEluaXRpYWxpemUgdGhlIG5ldHZzYyBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KaW5kZXggNGQzOTBiMi4uZGJmYmRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KQEAgLTEsMTEgKzEsMTcgQEAKIFRPRE86CiAJLSBmaXggcmVtYWluaW5nIGNoZWNrcGF0Y2ggd2FybmluZ3MgYW5kIGVycm9ycworCS0gdXNlIG9mIC8qKiB3aGVuIGl0IGlzIG5vdCBhIGtlcm5lbGRvYyBoZWFkZXIKIAktIHJlbW92ZSBSaW5nQnVmZmVyLmMgdG8gdXMgaW4ta2VybmVsIHJpbmdidWZmZXIgZnVuY3Rpb25zIGluc3RlYWQuCiAJLSBhdWRpdCB0aGUgdm1idXMgdG8gdmVyaWZ5IGl0IGlzIHdvcmtpbmcgcHJvcGVybHkgd2l0aCB0aGUKIAkgIGRyaXZlciBtb2RlbAorCS0gY29udmVydCB2bWJ1cyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVzCisgICAgICAgICAgdG8gY29uc3RhbnQsIGEuay5hIHZtYnVzX29wcwogCS0gc2VlIGlmIHRoZSB2bWJ1cyBjYW4gYmUgbWVyZ2VkIHdpdGggdGhlIG90aGVyIHZpcnR1YWwgYnVzc2VzCiAJICBpbiB0aGUga2VybmVsCiAJLSBhdWRpdCB0aGUgbmV0d29yayBkcml2ZXIKKwkgIC0gdXNlIGV4aXN0aW5nIG5ldF9kZXZpY2Vfc3RhdHMgc3RydWN0IGluIG5ldHdvcmsgZGV2aWNlCisJICAtIGNoZWNraW5nIGZvciBjYXJyaWVyIGluc2lkZSBvcGVuIGlzIHdyb25nLCBuZXR3b3JrIGRldmljZSBBUEkKKyAgICAgICAgICAgIGNvbmZ1c2lvbj8/CiAJLSBhdWRpdCB0aGUgYmxvY2sgZHJpdmVyCiAJLSBhdWRpdCB0aGUgc2NzaSBkcml2ZXIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jCmluZGV4IDhmZTU0M2IuLjNhNDc5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oCmluZGV4IDk1MDQ2MDQuLmNlMDY0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpZm5kZWYgX09TRF9IXwogI2RlZmluZSBfT1NEX0hfCiAKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogLyogRGVmaW5lcyAqLwogI2RlZmluZSBBTElHTl9VUCh2YWx1ZSwgYWxpZ24pCSgoKHZhbHVlKSAmIChhbGlnbi0xKSkgPwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCmluZGV4IDU4MjMxOGYuLjg5NGVlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKQEAgLTUwNywxMiArNTA3LDEyIEBACiAKIAljaGlsZF9kZXZpY2Vfb2JqID0gJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9vYmo7CiAJY2hpbGRfZGV2aWNlX29iai0+Y29udGV4dCA9IGNvbnRleHQ7Ci0JbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VUeXBlLCAmdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7Ci0JbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VJbnN0YW5jZSwgJmluc3RhbmNlLAorCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlVHlwZSwgdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CisJbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VJbnN0YW5jZSwgaW5zdGFuY2UsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCi0JbWVtY3B5KCZjaGlsZF9kZXZpY2VfY3R4LT5jbGFzc19pZCwgJnR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCAmaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCBpbnN0YW5jZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CiAKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCkBAIC01MzcsMTggKzUzNyw3IEBACiAJRFBSSU5UX0RCRyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmluZyIsCiAJCSAgIGNoaWxkX2RldmljZV9jdHgpOwogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgcmVnaXN0ZXJlZCBhbHJlYWR5ICovCi0JaWYgKHN0cmxlbihkZXZfbmFtZSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKSkgIT0gMCkgewotCQlEUFJJTlRfRVJSKFZNQlVTX0RSViwKLQkJCSAgICJjaGlsZCBkZXZpY2UgKCVwKSBhbHJlYWR5IHJlZ2lzdGVyZWQgLSBidXNpZCAlcyIsCi0JCQkgICBjaGlsZF9kZXZpY2VfY3R4LAotCQkJICAgZGV2X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSkpOwotCi0JCXJldCA9IC0xOwotCQlnb3RvIENsZWFudXA7Ci0JfQotCi0JLyogU2V0IHRoZSBkZXZpY2UgYnVzIGlkLiBPdGhlcndpc2UsIGRldmljZV9yZWdpc3Rlcigpd2lsbCBmYWlsLiAqLworCS8qIFNldCB0aGUgZGV2aWNlIG5hbWUuIE90aGVyd2lzZSwgZGV2aWNlX3JlZ2lzdGVyKCkgd2lsbCBmYWlsLiAqLwogCWRldl9zZXRfbmFtZSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlLCAidm1idXNfMF8lZCIsCiAJCSAgICAgYXRvbWljX2luY19yZXR1cm4oJmRldmljZV9udW0pKTsKIApAQCAtNTczLDcgKzU2Miw2IEBACiAJCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIHJlZ2lzdGVyZWQiLAogCQkJICAgICZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2UpOwogCi1DbGVhbnVwOgogCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjIzLDggKzYxMSw2IEBACiBzdGF0aWMgaW50IHZtYnVzX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKLQlpbnQgaSA9IDA7Ci0JaW50IGxlbiA9IDA7CiAJaW50IHJldDsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwpAQCAtNjQ0LDggKzYzMCw2IEBACiAJCSAgICBkZXZpY2VfY3R4LT5jbGFzc19pZC5kYXRhWzE0XSwKIAkJICAgIGRldmljZV9jdHgtPmNsYXNzX2lkLmRhdGFbMTVdKTsKIAotCWVudi0+ZW52cF9pZHggPSBpOwotCWVudi0+YnVmbGVuID0gbGVuOwogCXJldCA9IGFkZF91ZXZlbnRfdmFyKGVudiwgIlZNQlVTX0RFVklDRV9DTEFTU19HVUlEPXsiCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKIAkJCSAgICAgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4fSIsCkBAIC02OTEsOCArNjc1LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZW52LT5lbnZwW2Vudi0+ZW52cF9pZHhdID0gTlVMTDsKLQogCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZwppbmRleCBiZWI5OWE1Li40NTg2NjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBtZW51Y29uZmlnIElJTwogCXRyaXN0YXRlICJJbmR1c3RyaWFsIEkvTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gIVMzOTAKIAktLS1oZWxwLS0tCiAJICBUaGUgaW5kdXN0cmlhbCBJL08gc3Vic3lzdGVtIHByb3ZpZGVzIGEgdW5pZmllZCBmcmFtZXdvcmsgZm9yCiAJICBkcml2ZXJzIGZvciBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBlbWJlZGRlZCBzZW5zb3JzIHVzaW5nIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwppbmRleCAxZmExOGYyLi43NjhmNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgImlpby5oIgogI2luY2x1ZGUgInRyaWdnZXJfY29uc3VtZXIuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYxLmMKaW5kZXggZWE4YTVlZi4uZmMyMTA3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYxLmMKQEAgLTIzOSwxMCArMjM5LDYgQEAKIAlyZXR1cm4gdHNsMjU2MV9wb3dlcmRvd24oY2xpZW50KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyOSwgMHgzOSwgMHg0OSwgSTJDX0NMSUVOVF9FTkQgfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0c2wyNTYxX2lkW10gPSB7CiAJeyAidHNsMjU2MSIsIDAgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCmluZGV4IGQ1NDlkMDguLmY2Y2MyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBPVFVTCiAJdHJpc3RhdGUgIkF0aGVyb3MgT1RVUyA4MDIuMTFuIFVTQiB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFdMQU5fODAyMTEgJiYgTUFDODAyMTEKKwlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOICYmIE1BQzgwMjExCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiBVU0IgaGFyZHdhcmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYwppbmRleCA5MTExZGNiLi44Y2NmZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCXVzZXJfYnVmX3J1bm5pbmcgPSBOVUxMOwogCWhhc2hfc3RyID0gTlVMTDsKIAlub2RlX3B0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXBfbm9kZSksIEdGUF9LRVJORUwpOwotCXVzZXJfYnVmID0ga3phbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJdXNlcl9idWYgPSBremFsbG9jKGNvdW50KzEsIEdGUF9LRVJORUwpOwogCWlmICghbm9kZV9wdHIgfHwgIXVzZXJfYnVmKQogCQlnb3RvIG91dDsKIApAQCAtMjA3LDYgKzIwNyw3IEBACiAJCWxpc3RfYWRkKCYobm9kZV9wdHItPmxpc3QpLCAmKGRldi0+aGVhZC0+bGlzdCkpOwogCQlub2RlX3B0ciA9IE5VTEw7CiAJfSBlbHNlIHsKKwkJY2hhciAqdG1wdTsKIAkJaWYgKCFjYXBfZGV2aWNlc1swXS5oZWFkIHx8CiAJCQkJbGlzdF9lbXB0eSgmKGNhcF9kZXZpY2VzWzBdLmhlYWQtPmxpc3QpKSkgewogCQkJcmV0dmFsID0gLUVJTlZBTDsKQEAgLTIxOCwxMCArMjE5LDEwIEBACiAJCSAqIG5lZWQgdG8gc3BsaXQgaXQgYW5kIGhhc2ggJ3VzZXIxQHVzZXIyJyB1c2luZyAncmFuZG9tc3RyaW5nJwogCQkgKiBhcyB0aGUga2V5LgogCQkgKi8KLQkJdXNlcl9idWZfcnVubmluZyA9IGtzdHJkdXAodXNlcl9idWYsIEdGUF9LRVJORUwpOwotCQlzb3VyY2VfdXNlciA9IHN0cnNlcCgmdXNlcl9idWZfcnVubmluZywgIkAiKTsKLQkJdGFyZ2V0X3VzZXIgPSBzdHJzZXAoJnVzZXJfYnVmX3J1bm5pbmcsICJAIik7Ci0JCXJhbmRfc3RyID0gc3Ryc2VwKCZ1c2VyX2J1Zl9ydW5uaW5nLCAiQCIpOworCQl0bXB1ID0gdXNlcl9idWZfcnVubmluZyA9IGtzdHJkdXAodXNlcl9idWYsIEdGUF9LRVJORUwpOworCQlzb3VyY2VfdXNlciA9IHN0cnNlcCgmdG1wdSwgIkAiKTsKKwkJdGFyZ2V0X3VzZXIgPSBzdHJzZXAoJnRtcHUsICJAIik7CisJCXJhbmRfc3RyID0gdG1wdTsKIAkJaWYgKCFzb3VyY2VfdXNlciB8fCAhdGFyZ2V0X3VzZXIgfHwgIXJhbmRfc3RyKSB7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CkBAIC0yMjksNyArMjMwLDggQEAKIAogCQkvKiBoYXNoIHRoZSBzdHJpbmcgdXNlcjFAdXNlcjIgd2l0aCByYW5kX3N0ciBhcyB0aGUga2V5ICovCiAJCWxlbiA9IHN0cmxlbihzb3VyY2VfdXNlcikgKyBzdHJsZW4odGFyZ2V0X3VzZXIpICsgMTsKLQkJaGFzaF9zdHIgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCS8qIHNyYywgQCwgbGVuLCBcMCAqLworCQloYXNoX3N0ciA9IGt6YWxsb2MobGVuKzEsIEdGUF9LRVJORUwpOwogCQlzdHJjYXQoaGFzaF9zdHIsIHNvdXJjZV91c2VyKTsKIAkJc3RyY2F0KGhhc2hfc3RyLCAiQCIpOwogCQlzdHJjYXQoaGFzaF9zdHIsIHRhcmdldF91c2VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKaW5kZXggZGQ3ZDNmZC4uNGNlMzk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKQEAgLTIwNzEsMTEgKzIwNzEsMTUgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChrZXlwYWRfZW5hYmxlZCAmJiBrZXlwYWRfaW5pdGlhbGl6ZWQpCisJaWYgKGtleXBhZF9lbmFibGVkICYmIGtleXBhZF9pbml0aWFsaXplZCkgewogCQltaXNjX2RlcmVnaXN0ZXIoJmtleXBhZF9kZXYpOworCQlrZXlwYWRfaW5pdGlhbGl6ZWQgPSAwOworCX0KIAotCWlmIChsY2RfZW5hYmxlZCAmJiBsY2RfaW5pdGlhbGl6ZWQpCisJaWYgKGxjZF9lbmFibGVkICYmIGxjZF9pbml0aWFsaXplZCkgewogCQltaXNjX2RlcmVnaXN0ZXIoJmxjZF9kZXYpOworCQlsY2RfaW5pdGlhbGl6ZWQgPSAwOworCX0KIAogCXBhcnBvcnRfcmVsZWFzZShwcHJ0KTsKIAlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKHBwcnQpOwpAQCAtMjIxMSwxMyArMjIxNSwxNiBAQAogCQlkZWxfdGltZXIoJnNjYW5fdGltZXIpOwogCiAJaWYgKHBwcnQgIT0gTlVMTCkgewotCQlpZiAoa2V5cGFkX2VuYWJsZWQpCisJCWlmIChrZXlwYWRfZW5hYmxlZCkgewogCQkJbWlzY19kZXJlZ2lzdGVyKCZrZXlwYWRfZGV2KTsKKwkJCWtleXBhZF9pbml0aWFsaXplZCA9IDA7CisJCX0KIAogCQlpZiAobGNkX2VuYWJsZWQpIHsKIAkJCXBhbmVsX2xjZF9wcmludCgiXHgwY0xDRCBkcml2ZXIgIiBQQU5FTF9WRVJTSU9OCiAJCQkJCSJcbnVubG9hZGVkLlx4MWJbTGNceDFiW0xiXHgxYltMLSIpOwogCQkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKKwkJCWxjZF9pbml0aWFsaXplZCA9IDA7CiAJCX0KIAogCQkvKiBUT0RPOiBmcmVlIGFsbCBpbnB1dCBzaWduYWxzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMKaW5kZXggMGQxMTFkZC4uMmViOGUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgInBvY2guaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCmluZGV4IDdmNDRlNWUuLmVmZTM4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUlQyODYwCiAJdHJpc3RhdGUgIlJhbGluayAyODYwIHdpcmVsZXNzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU5fODAyMTEKKwlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayAyODYwIHdpcmVsZXNzIGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKaW5kZXggZmIxNzM1NS4uODU3ZmY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYwpAQCAtMzYzLDYgKzM2Myw4IEBACiAJVUxPTkcJCQlTd0lkeCA9IHBBZC0+TWdtdFJpbmcuVHhDcHVJZHg7CiAKIAlwVHhEICA9IChQVFhEX1NUUlVDKSBwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLkFsbG9jVmE7CisJaWYgKCFwVHhEKQorCQlyZXR1cm4gMDsKIAogCXBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0ucE5kaXNQYWNrZXQgPSBwUGFja2V0OwogCXBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCmluZGV4IDlkNTg5YzIuLjAxOWNjNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgogCiBJTlQJU2hvd19TU0lEX1Byb2MoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKaW5kZXggYjM5NmE5Yi4uZWQyN2I4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJydF9jb25maWcuaCIKIAogVUxPTkcJUlREZWJ1Z0xldmVsID0gUlRfREVCVUdfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKaW5kZXggNzY4NDFmNi4uYWVhNWM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBSVDI4NzAKIAl0cmlzdGF0ZSAiUmFsaW5rIDI4NzAvMzA3MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBVU0IgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgeHg3MCB3aXJlbGVzcyBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZwppbmRleCAyNTVlOGVhLi4yYjNmNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFJUMzA5MAogCXRyaXN0YXRlICJSYWxpbmsgMzA5MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMzA5MCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMKaW5kZXggNWJlMDcxNC4uM2U1MWU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL2NvbW1vbi9jbW1faW5mby5jCkBAIC0zNCw2ICszNCw3IEBACiAgICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYwppbmRleCBkMjI0MWVjLi45Yjk0YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9ydF9saW51eC5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgogCiBVTE9ORwlSVERlYnVnTGV2ZWwgPSBSVF9ERUJVR19FUlJPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwppbmRleCAyMzZlNDI3Li4yMDNjNzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxODdTRQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxODdTRSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggMDEzYzNlMS4uNGM1ZDYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTUzLDEwICs1Myw4IEBACiAKIAkJbGlzdF9kZWwocHRyKTsKIAotCQlpZiAoZW50cnktPm9wcykgeworCQlpZiAoZW50cnktPm9wcykKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+cHJpdik7Ci0JCQltb2R1bGVfcHV0KGVudHJ5LT5vcHMtPm93bmVyKTsKLQkJfQogCQlrZnJlZShlbnRyeSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IDZmYmU0ODkuLjE4MzkyZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTE4OSwxMCArMTg5LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0ID0gaWVlZS0+Y3J5cHRbaV07CiAJCWlmIChjcnlwdCkgewotCQkJaWYgKGNyeXB0LT5vcHMpIHsKKwkJCWlmIChjcnlwdC0+b3BzKQogCQkJCWNyeXB0LT5vcHMtPmRlaW5pdChjcnlwdC0+cHJpdik7Ci0JCQkJbW9kdWxlX3B1dChjcnlwdC0+b3BzLT5vd25lcik7Ci0JCQl9CiAJCQlrZnJlZShjcnlwdCk7CiAJCQlpZWVlLT5jcnlwdFtpXSA9IE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDU5YjJhYjQuLjMzNGU0YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMjgzOSwxNiArMjgzOSwxMiBAQAogCQlnb3RvIHNraXBfaG9zdF9jcnlwdDsKIAogCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF90a2lwIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X2NjbXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0KIAlpZiAob3BzID09IE5VTEwpIHsKIAkJcHJpbnRrKCJ1bmtub3duIGNyeXB0byBhbGcgJyVzJ1xuIiwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSUVFRV9DUllQVF9FUlJfVU5LTk9XTl9BTEc7CkBAIC0yODY5LDcgKzI4NjUsNyBAQAogCQl9CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPQogCQkJCW5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggOGQ4YmRkMC4uYTA4Yjk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTMzMSwxMiArMzMxLDEwIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCWlmICghbmV3X2NyeXB0LT5vcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJCWlmICghbmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCX0KIAotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoa2V5KTsKIAogCQlpZiAoIW5ld19jcnlwdC0+b3BzIHx8ICFuZXdfY3J5cHQtPnByaXYpIHsKQEAgLTQ4Myw3ICs0ODEsNyBAQAogICAgICAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAgICAgICAgIGludCBpLCBpZHgsIHJldCA9IDA7CiAgICAgICAgIGludCBncm91cF9rZXkgPSAwOwotICAgICAgICBjb25zdCBjaGFyICphbGcsICptb2R1bGU7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsZzsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHM7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0OwogCkBAIC01MzksMTUgKzUzNywxMiBAQAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIldFUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF93ZXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiVEtJUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF90a2lwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIkNDTVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfY2NtcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLApAQCAtNTU4LDEwICs1NTMsOCBAQAogLy8JcHJpbnRrKCI4LTA5LTA4LTk9PT09PT4lcywgYWxnIG5hbWU6JXNcbiIsX19mdW5jX18sIGFsZyk7CiAKIAkgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKG1vZHVsZSk7CisgICAgICAgIGlmIChvcHMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgfQogICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZXh0LT5hbGcpOwpAQCAtNTgxLDcgKzU3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+b3BzID0gb3BzOwotICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcykKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGlkeCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+cHJpdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShuZXdfY3J5cHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZwppbmRleCAzMTAwYWE1Li4zN2U0ZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTkyRQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxOTJFIFdpcmVsZXNzIExBTiBOSUMgZHJpdmVyIgotCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggMWE4ZWE4YS4uYjFjNTQ5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC01MywxNCArNTMsOCBAQAogCiAJCWxpc3RfZGVsKHB0cik7CiAKLQkJaWYgKGVudHJ5LT5vcHMpIHsKKwkJaWYgKGVudHJ5LT5vcHMpCiAJCQllbnRyeS0+b3BzLT5kZWluaXQoZW50cnktPnByaXYpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJCW1vZHVsZV9wdXQoZW50cnktPm9wcy0+b3duZXIpOwotI2Vsc2UKLQkJCV9fTU9EX0RFQ19VU0VfQ09VTlQoZW50cnktPm9wcy0+b3duZXIpOwotI2VuZGlmCi0JCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggMTYyNTZhMy4uMTJjMmExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTI0MiwxNCArMjQyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0ID0gaWVlZS0+Y3J5cHRbaV07CiAJCWlmIChjcnlwdCkgewotCQkJaWYgKGNyeXB0LT5vcHMpIHsKKwkJCWlmIChjcnlwdC0+b3BzKQogCQkJCWNyeXB0LT5vcHMtPmRlaW5pdChjcnlwdC0+cHJpdik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQkJCW1vZHVsZV9wdXQoY3J5cHQtPm9wcy0+b3duZXIpOwotI2Vsc2UKLQkJCQlfX01PRF9ERUNfVVNFX0NPVU5UKGNyeXB0LT5vcHMtPm93bmVyKTsKLSNlbmRpZgotCQkJfQogCQkJa2ZyZWUoY3J5cHQpOwogCQkJaWVlZS0+Y3J5cHRbaV0gPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggMmZjMDRkZi4uZWFlN2M0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMzI4NCwxNyArMzI4NCwxNCBAQAogCQlnb3RvIHNraXBfaG9zdF9jcnlwdDsKIAogCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JCS8vc2V0IFdFUDQwIGZpcnN0LCBpdCB3aWxsIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBXRVAxMDQgb3IgV0VQNDAgYXQgb3RoZXIgcGxhY2UKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3RraXAiKTsKKwkJLyogc2V0IFdFUDQwIGZpcnN0LCBpdCB3aWxsIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBXRVAxMDQgb3IKKwkJICogV0VQNDAgYXQgb3RoZXIgcGxhY2UgKi8KKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfY2NtcCIpOworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfQogCWlmIChvcHMgPT0gTlVMTCkgewogCQlwcmludGsoInVua25vd24gY3J5cHRvIGFsZyAnJXMnXG4iLCBwYXJhbS0+dS5jcnlwdC5hbGcpOwogCQlwYXJhbS0+dS5jcnlwdC5lcnIgPSBJRUVFX0NSWVBUX0VSUl9VTktOT1dOX0FMRzsKQEAgLTMzMTUsMTEgKzMzMTIsNyBAQAogCQl9CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbHNlCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfaW5jX21vZF9jb3VudChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2VuZGlmCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9CiAJCQkJbmV3X2NyeXB0LT5vcHMtPmluaXQocGFyYW0tPnUuY3J5cHQuaWR4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggMjIzNDgzMS4uNGUzNGExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC00ODIsMTUgKzQ4Miw5IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCWlmICghbmV3X2NyeXB0LT5vcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJCWlmICghbmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCX0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2Vsc2UKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9pbmNfbW9kX2NvdW50KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZW5kaWYKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoa2V5KTsKIAogCQlpZiAoIW5ld19jcnlwdC0+b3BzIHx8ICFuZXdfY3J5cHQtPnByaXYpIHsKQEAgLTY0NCw3ICs2MzgsNyBAQAogICAgICAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAgICAgICAgIGludCBpLCBpZHg7CiAgICAgICAgIGludCBncm91cF9rZXkgPSAwOwotICAgICAgICBjb25zdCBjaGFyICphbGcsICptb2R1bGU7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsZzsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHM7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0OwogCkBAIC03MTEsMTUgKzcwNSwxMiBAQAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIldFUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF93ZXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiVEtJUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF90a2lwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIkNDTVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfY2NtcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLApAQCAtNzMwLDEwICs3MjEsOCBAQAogCXByaW50aygiYWxnIG5hbWU6JXNcbiIsYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUobW9kdWxlKTsKKyAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICB9CiAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBleHQtPmFsZyk7CkBAIC03NTgsNyArNzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoaWR4KTsKICAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5wcml2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKG5ld19jcnlwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCmluZGV4IGQ0ZmE2NTQuLmIwODAyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCkBAIC00Niw2ICs0Niw3IEBACiAjdW5kZWYgREVCVUdfVFhfREVTQwogCiAvLyNkZWZpbmUgQ09ORklHX1JUTDgxOTJfSU9fTUFQCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAicjgxOTJFX2h3LmgiCiAjaW5jbHVkZSAicjgxOTJFLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKaW5kZXggNzcwZjQxMi4uYjhjOTVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTkyU1UKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyU1UgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJZGVwZW5kcyBvbiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IGQ3NmE1NGQuLjUyMWU3YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC01MywxMCArNTMsOCBAQAogCiAJCWxpc3RfZGVsKHB0cik7CiAKLQkJaWYgKGVudHJ5LT5vcHMpIHsKKwkJaWYgKGVudHJ5LT5vcHMpCiAJCQllbnRyeS0+b3BzLT5kZWluaXQoZW50cnktPnByaXYpOwotCQkJbW9kdWxlX3B1dChlbnRyeS0+b3BzLT5vd25lcik7Ci0JCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCA2OGRjOGZhLi5jMzM4M2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC0yMTYsMTAgKzIxNiw4IEBACiAJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9IGllZWUtPmNyeXB0W2ldOwogCQlpZiAoY3J5cHQpIHsKLQkJCWlmIChjcnlwdC0+b3BzKSB7CisJCQlpZiAoY3J5cHQtPm9wcykKIAkJCQljcnlwdC0+b3BzLT5kZWluaXQoY3J5cHQtPnByaXYpOwotCQkJCW1vZHVsZV9wdXQoY3J5cHQtPm9wcy0+b3duZXIpOwotCQkJfQogCQkJa2ZyZWUoY3J5cHQpOwogCQkJaWVlZS0+Y3J5cHRbaV0gPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCBjNjRhZTAzLi5mZDhlMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTMwMjYsMTcgKzMwMjYsMTQgQEAKIAkJZ290byBza2lwX2hvc3RfY3J5cHQ7CiAKIAlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCQkvL3NldCBXRVA0MCBmaXJzdCwgaXQgd2lsbCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gV0VQMTA0IG9yIFdFUDQwIGF0IG90aGVyIHBsYWNlCi0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF90a2lwIik7CisJCS8qIHNldCBXRVA0MCBmaXJzdCwgaXQgd2lsbCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gV0VQMTA0IG9yCisJCSAqIFdFUDQwIGF0IG90aGVyIHBsYWNlICovCisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X2NjbXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0KIAlpZiAob3BzID09IE5VTEwpIHsKIAkJcHJpbnRrKCJ1bmtub3duIGNyeXB0byBhbGcgJyVzJ1xuIiwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSUVFRV9DUllQVF9FUlJfVU5LTk9XTl9BTEc7CkBAIC0zMDU4LDcgKzMwNTUsNyBAQAogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gb3BzOwogCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPQogCQkJCW5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggMTA3NzU5MC4uNjE0NmM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTM1OCwxMSArMzU4LDkgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJaWYgKCFuZXdfY3J5cHQtPm9wcykgewotCQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwkJaWYgKCFuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJfQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoa2V5KTsKIAogCQlpZiAoIW5ld19jcnlwdC0+b3BzIHx8ICFuZXdfY3J5cHQtPnByaXYpIHsKQEAgLTUwNyw3ICs1MDUsNyBAQAogICAgICAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAgICAgICAgIGludCBpLCBpZHg7CiAgICAgICAgIGludCBncm91cF9rZXkgPSAwOwotICAgICAgICBjb25zdCBjaGFyICphbGcsICptb2R1bGU7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsZzsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHM7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0OwogCkBAIC01NzAsMTUgKzU2OCwxMiBAQAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIldFUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF93ZXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiVEtJUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF90a2lwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIkNDTVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfY2NtcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLApAQCAtNTg5LDEwICs1ODQsOCBAQAogCXByaW50aygiYWxnIG5hbWU6JXNcbiIsYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUoIiVzIiwgbW9kdWxlKTsKKyAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICB9CiAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBleHQtPmFsZyk7CkBAIC02MTIsNyArNjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoaWR4KTsKICAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5wcml2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKG5ld19jcnlwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCmluZGV4IDg3ZjhhMTEuLmY4OTBhMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW9jdGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0N2ZiNzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWNvbmZpZyBTVExDNDVYWAotCXRyaXN0YXRlICJzdGxjNDU1MC80NTYwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFNQSV9NQVNURVIgJiYgR0VORVJJQ19IQVJESVJRUwotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHN0bGM0NTUwIGFuZCBzdGxjNDU2MCBjaGlwc2V0cy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgc3RsYzQ1eHguICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWUzMjkwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai0kKENPTkZJR19TVExDNDVYWCkJKz0gc3RsYzQ1eHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5OWViMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYworKysgL2Rldi9udWxsCkBAIC0xLDI1OTQgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN0bGM0NXh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJzdGxjNDV4eC5oIgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotCi0jaW5jbHVkZSAic3RsYzQ1eHhfbG1hYy5oIgotCi0vKgotICogZ3Bpb3Mgc2hvdWxkIGJlIGhhbmRsZWQgaW4gYm9hcmQgZmlsZXMgYW5kIHByb3ZpZGVkIHZpYSBwbGF0Zm9ybSBkYXRhLAotICogYnV0IGJlY2F1c2UgaXQncyBjdXJyZW50bHkgaW1wb3NzaWJsZSBmb3Igc3RsYzQ1eHggdG8gaGF2ZSBhIGhlYWRlciBmaWxlCi0gKiBpbiBpbmNsdWRlL2xpbnV4LCBsZXQncyB1c2UgbW9kdWxlIHBhcmFtYXRlcnMgZm9yIG5vdwotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X2dwaW9fcG93ZXIgPSA5NzsKLW1vZHVsZV9wYXJhbShzdGxjNDV4eF9ncGlvX3Bvd2VyLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzdGxjNDV4eF9ncGlvX3Bvd2VyLCAic3RsYzQ1eHggZ3BpbyBudW1iZXIgZm9yIHBvd2VyIGxpbmUiKTsKLQotc3RhdGljIGludCBzdGxjNDV4eF9ncGlvX2lycSA9IDg3OwotbW9kdWxlX3BhcmFtKHN0bGM0NXh4X2dwaW9faXJxLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzdGxjNDV4eF9ncGlvX2lycSwgInN0bGM0NXh4IGdwaW8gbnVtYmVyIGZvciBpcnEgbGluZSIpOwotCi1zdGF0aWMgY29uc3QgdTggZGVmYXVsdF9jYWxfY2hhbm5lbHNbXSA9IHsKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDksCi0JMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwKLQkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGUwLCAweDAwLCAweGUwLCAweDAwLAotCTB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKLQkweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksCi0JMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsCi0JMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLAotCTB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LAotCTB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwKLQkweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKLQkweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsCi0JMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsCi0JMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLAotCTB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLAotCTB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwKLQkweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwKLQkweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAotCTB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsCi0JMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LAotCTB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLAotCTB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwKLQkweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwKLQkweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsCi0JMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLAotCTB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKLQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLAotCTB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLAotCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwKLQkweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwKLQkweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsCi0JMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsCi0JMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsCi0JMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLAotCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwKLQkweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwKLQkweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsCi0JMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsCi0JMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsCi0JMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwKLQkweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAotCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwKLQkweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwKLQkweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsCi0JMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsCi0JMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsCi0JMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLAotCTB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4YSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLAotCTB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCi0JMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwKLQkweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsCi0JMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsCi0JMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsCi0JMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLAotCTB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLAotCTB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDksIDB4MDAsIDB4MDAsCi0JMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwKLQkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAotCTB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsCi0JMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsCi0JMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsCi0JMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLAotCTB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LAotCTB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywKLQkweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKLQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsCi0JMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsCi0JMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLAotCTB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLAotCTB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwKLQkweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwKLQkweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDA5LCAweDAwLAotCTB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsCi0JMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAotCTB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsCi0JMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLAotCTB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLAotCTB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwKLQkweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwKLQkweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsCi0JMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCi0JMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwKLQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLAotCTB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLAotCTB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwKLQkweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwKLQkweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksCi0JMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsCi0JMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1OCBkZWZhdWx0X2NhbF9yc3NpW10gPSB7Ci0JMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwKLQkweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwKLQkweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsCi0JMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9lZGNmKHN0cnVjdCBzdGxjNDV4eCAqc3RsYyk7Ci1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9zZXR1cChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2NhbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfcHNtKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBlbmFibGUpOwotc3RhdGljIGludCBzdGxjNDV4eF90eF9udWxsZnVuYyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKTsKLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfcHNwb2xsKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpOwotCi1zdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9yc3NpKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbGVuID0gUEFHRV9TSVpFOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmNhbF9yc3NpKQotCQloZXhfZHVtcF90b19idWZmZXIoc3RsYy0+Y2FsX3Jzc2ksIFJTU0lfQ0FMX0FSUkFZX0xFTiwgMTYsCi0JCQkJICAgMiwgYnVmLCBsZW4sIDApOwotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JbGVuID0gc3RybGVuKGJ1Zik7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfcnNzaShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoY291bnQgIT0gUlNTSV9DQUxfQVJSQVlfTEVOKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJpbnZhbGlkIGNhbF9yc3NpIGxlbmd0aDogJXp1IiwgY291bnQpOwotCQljb3VudCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlrZnJlZShzdGxjLT5jYWxfcnNzaSk7Ci0KLQlzdGxjLT5jYWxfcnNzaSA9IGttZW1kdXAoYnVmLCBSU1NJX0NBTF9BUlJBWV9MRU4sIEdGUF9LRVJORUwpOwotCi0JaWYgKCFzdGxjLT5jYWxfcnNzaSkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2FsX3Jzc2kiKTsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0gb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3NpemVfdCBsZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlsZW4gPSBQQUdFX1NJWkU7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoc3RsYy0+Y2FsX2NoYW5uZWxzKQotCQloZXhfZHVtcF90b19idWZmZXIoc3RsYy0+Y2FsX2NoYW5uZWxzLCBDSEFOTkVMX0NBTF9BUlJBWV9MRU4sCi0JCQkJICAgMTYsIDIsIGJ1ZiwgbGVuLCAwKTsKLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JbGVuID0gc3RybGVuKGJ1Zik7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKGNvdW50ICE9IENIQU5ORUxfQ0FMX0FSUkFZX0xFTikgewotCQlzdGxjNDV4eF9lcnJvcigiaW52YWxpZCBjYWxfY2hhbm5lbHMgc2l6ZTogJXp1ICIsIGNvdW50KTsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0Ja2ZyZWUoc3RsYy0+Y2FsX2NoYW5uZWxzKTsKLQotCXN0bGMtPmNhbF9jaGFubmVscyA9IGttZW1kdXAoYnVmLCBjb3VudCwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXN0bGMtPmNhbF9jaGFubmVscykgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2FsX2NoYW5uZWxzIik7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd190eF9idWYoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCXNzaXplX3QgbGVuID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnN0bGMtPnR4X3NlbnQsIHR4X2xpc3QpIHsKLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMHgleDogMHgleC0weCV4XG4iLAotCQkJICAgICAgIGVudHJ5LT5oYW5kbGUsIGVudHJ5LT5zdGFydCwKLQkJCSAgICAgICBlbnRyeS0+ZW5kKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihjYWxfcnNzaSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX3Jzc2ksCi0JCSAgIHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9yc3NpKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihjYWxfY2hhbm5lbHMsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9jaGFubmVscywKLQkJICAgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX2NoYW5uZWxzKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0eF9idWYsIFNfSVJVR08sIHN0bGM0NXh4X3N5c2ZzX3Nob3dfdHhfYnVmLCBOVUxMKTsKLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfc3BpX3JlYWQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0WzJdOwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCi0JLyogV2UgZmlyc3QgcHVzaCB0aGUgYWRkcmVzcyAqLwotCWFkZHIgPSAoYWRkciA8PCA4KSB8IEFERFJfUkVBRF9CSVRfMTU7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKLQotCXRbMF0udHhfYnVmID0gJmFkZHI7Ci0JdFswXS5sZW4gPSAyOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7Ci0KLQl0WzFdLnJ4X2J1ZiA9IGJ1ZjsKLQl0WzFdLmxlbiA9IGxlbjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOwotCi0Jc3BpX3N5bmMoc3RsYy0+c3BpLCAmbSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfc3BpX3dyaXRlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTE2IGxhc3Rfd29yZDsKLQotCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KLQlhZGRyID0gYWRkciA8PCA4OwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7Ci0KLQl0WzBdLnR4X2J1ZiA9ICZhZGRyOwotCXRbMF0ubGVuID0gMjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCi0JdFsxXS50eF9idWYgPSBidWY7Ci0JdFsxXS5sZW4gPSBsZW47Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKLQotCWlmIChsZW4gJSAyKSB7Ci0JCWxhc3Rfd29yZCA9ICgodTggKilidWYpW2xlbiAtIDFdOwotCi0JCXRbMl0udHhfYnVmID0gJmxhc3Rfd29yZDsKLQkJdFsyXS5sZW4gPSAyOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOwotCX0KLQotCXNwaV9zeW5jKHN0bGMtPnNwaSwgJm0pOwotfQotCi1zdGF0aWMgdTE2IHN0bGM0NXh4X3JlYWQxNihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl1MTYgdmFsOwotCi0Jc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIHUzMiBzdGxjNDV4eF9yZWFkMzIoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdTMyIHZhbDsKLQotCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3dyaXRlMTYoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiB2YWwpCi17Ci0Jc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd3JpdGUzMihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHZhbCkKLXsKLQlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotfQotCi1zdHJ1Y3Qgc3RsYzQ1eHhfc3BpX3JlZyB7Ci0JdTE2IGFkZHJlc3M7Ci0JdTE2IGxlbmd0aDsKLQljaGFyICpuYW1lOwotfTsKLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eGJ1ZmZlcl9kdW1wKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyOwotCWNoYXIgKmJ1ZiwgKnBvczsKLQlpbnQgYnVmX2xlbiwgbCwgY291bnQ7Ci0KLQlpZiAoIShERUJVR19MRVZFTCAmIERFQlVHX1RYQlVGRkVSKSkKLQkJcmV0dXJuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQlidWZfbGVuID0gNTAwOwotCWJ1ZiA9IGttYWxsb2MoYnVmX2xlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFidWYpCi0JCXJldHVybjsKLQotCXBvcyA9IGJ1ZjsKLQljb3VudCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4YnVmZmVyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7Ci0JCWwgPSBzbnByaW50Zihwb3MsIGJ1Zl9sZW4sICIweCV4LTB4JXgsIiwKLQkJCSAgICAgdHhidWZmZXItPnN0YXJ0LCB0eGJ1ZmZlci0+ZW5kKTsKLQkJLyogZHJvcCB0aGUgbnVsbCBieXRlICovCi0JCXBvcyArPSBsOwotCQlidWZfbGVuIC09IGw7Ci0JCWNvdW50Kys7Ci0JfQotCi0JaWYgKGNvdW50ID09IDApCi0JCSpwb3MgPSAnXDAnOwotCWVsc2UKLQkJKi0tcG9zID0gJ1wwJzsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGluIGJ1ZmZlciAlZCByZWdpb25zOiAlcyIsCi0JCSAgICAgICBjb3VudCwgYnVmKTsKLQotCWtmcmVlKGJ1Zik7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIGludCBzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyOwotCWludCBwb3M7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKLQotCXBvcyA9IEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUOwotCi0JaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4YnVmZmVyKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIHRoZSBlbnRyaWVzIGluIHR4YnVmZmVyIG11c3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBhcmUgaW4KLQkgKiB0aGUgcmVhbCBidWZmZXIKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4YnVmZmVyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7Ci0JCWlmIChwb3MgKyBsZW4gPCB0eGJ1ZmZlci0+c3RhcnQpCi0JCQlicmVhazsKLQkJcG9zID0gQUxJR04odHhidWZmZXItPmVuZCArIDEsIDQpOwotCX0KLQotCWlmIChwb3MgKyBsZW4gPiBGSVJNV0FSRV9UWEJVRkZFUl9FTkQpCi0JCS8qIG5vdCBlbm91Z2ggcm9vbSAqLwotCQlwb3MgPSAtMTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGZpbmQgJXp1IEI6IDB4JXgiLCBsZW4sIHBvcyk7Ci0KLW91dDoKLQlyZXR1cm4gcG9zOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4YnVmZmVyX2FkZChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsCi0JCQkJIHN0cnVjdCB0eGJ1ZmZlciAqdHhidWZmZXIpCi17Ci0Jc3RydWN0IHR4YnVmZmVyICpyLCAqcHJldiA9IE5VTEw7Ci0KLQlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhidWZmZXIpKSB7Ci0JCWxpc3RfYWRkKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZzdGxjLT50eGJ1ZmZlcik7Ci0JCXJldHVybiAwOwotCX0KLQotCXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdGxjLT50eGJ1ZmZlciwgc3RydWN0IHR4YnVmZmVyLCBidWZmZXJfbGlzdCk7Ci0KLQlpZiAodHhidWZmZXItPnN0YXJ0IDwgci0+c3RhcnQpIHsKLQkJLyogYWRkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgKi8KLQkJbGlzdF9hZGQoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnN0bGMtPnR4YnVmZmVyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJldiA9IE5VTEw7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7Ci0JCS8qIHNraXAgZmlyc3QgZW50cnksIHdlIGNoZWNrZWQgZm9yIHRoYXQgYWJvdmUgKi8KLQkJaWYgKCFwcmV2KSB7Ci0JCQlwcmV2ID0gcjsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogZG91YmxlLWNoZWNrIG92ZXJsYXBzICovCi0JCVdBUk5fT05fT05DRSh0eGJ1ZmZlci0+c3RhcnQgPj0gci0+c3RhcnQgJiYKLQkJCSAgICAgdHhidWZmZXItPnN0YXJ0IDw9IHItPmVuZCk7Ci0JCVdBUk5fT05fT05DRSh0eGJ1ZmZlci0+ZW5kID49IHItPnN0YXJ0ICYmCi0JCQkgICAgIHR4YnVmZmVyLT5lbmQgPD0gci0+ZW5kKTsKLQotCQlpZiAocHJldi0+ZW5kIDwgdHhidWZmZXItPnN0YXJ0ICYmCi0JCSAgICB0eGJ1ZmZlci0+ZW5kIDwgci0+c3RhcnQpIHsKLQkJCS8qIGluc2VydCBhdCB0aGlzIHNwb3QgKi8KLQkJCWxpc3RfYWRkX3RhaWwoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnItPmJ1ZmZlcl9saXN0KTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcHJldiA9IHI7Ci0JfQotCi0JLyogbm90IGZvdW5kICovCi0JbGlzdF9hZGRfdGFpbCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmc3RsYy0+dHhidWZmZXIpOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgc3RydWN0IHR4YnVmZmVyICpzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsCi0JCQkJCQkgc2l6ZV90IGZyYW1lX2xlbikKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5ID0gTlVMTDsKLQlzaXplX3QgbGVuOwotCWludCBwb3M7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKLQotCWxlbiA9IEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUiArIGZyYW1lX2xlbiArIEZJUk1XQVJFX1RYQlVGRkVSX1RSQUlMRVI7Ci0JcG9zID0gc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdGxjLCBsZW4pOwotCi0JaWYgKHBvcyA8IDApCi0JCXJldHVybiBOVUxMOwotCi0JV0FSTl9PTl9PTkNFKHBvcyArIGxlbiA+IEZJUk1XQVJFX1RYQlVGRkVSX0VORCk7Ci0JV0FSTl9PTl9PTkNFKHBvcyA8IEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUKTsKLQotCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7Ci0JZW50cnktPnN0YXJ0ID0gcG9zOwotCWVudHJ5LT5mcmFtZV9zdGFydCA9IHBvcyArIEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUjsKLQllbnRyeS0+ZW5kID0gZW50cnktPnN0YXJ0ICsgbGVuIC0gMTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGFsbG9jYXRlZCAweCV4LTB4JXgiLAotCQkgICAgICAgZW50cnktPnN0YXJ0LCBlbnRyeS0+ZW5kKTsKLQotCXN0bGM0NXh4X3R4YnVmZmVyX2FkZChzdGxjLCBlbnRyeSk7Ci0KLQlzdGxjNDV4eF90eGJ1ZmZlcl9kdW1wKHN0bGMpOwotCi0JcmV0dXJuIGVudHJ5OwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RydWN0IHN0bGM0NXh4ICpzdGxjLAotCQkJCSAgIHN0cnVjdCB0eGJ1ZmZlciAqdHhidWZmZXIpCi17Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBmcmVlZCAweCV4LTB4JXgiLAotCQkgICAgICAgdHhidWZmZXItPnN0YXJ0LCB0eGJ1ZmZlci0+ZW5kKTsKLQotCWxpc3RfZGVsKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QpOwotCWtmcmVlKHR4YnVmZmVyKTsKLX0KLQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3dhaXRfYml0KHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTE2IHJlZywgdTMyIG1hc2ssCi0JCQkgICAgIHUzMiBleHBlY3RlZCkKLXsKLQlpbnQgaTsKLQljaGFyIGJ1ZmZlcls0XTsKLQotCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKLQkJc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgcmVnLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLQkJaWYgKCgoKih1MzIgKilidWZmZXIpICYgbWFzaykgPT0gZXhwZWN0ZWQpCi0JCQlyZXR1cm4gMTsKLQkJbXNsZWVwKDEpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JaW50IHJldDsKLQotCS8qIEZJWE1FOiBzaG91bGQgZHJpdmVyIHVzZSBpdCdzIG93biBzdHJ1Y3QgZGV2aWNlPyAqLwotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAiMzgyNi5hcm0iLCAmc3RsYy0+c3BpLT5kZXYpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoInJlcXVlc3RfZmlybXdhcmUoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoZnctPnNpemUgJSA0KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMmJpdDogJXp1IiwKLQkJCSAgICAgICBmdy0+c2l6ZSk7Ci0JCXJldHVybiAtRUlMU0VROyAvKiBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgICovOwotCX0KLQotCWlmIChmdy0+c2l6ZSA8IDEwMDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZpcm13YXJlIGlzIHRvbyBzbWFsbDogJXp1IiwgZnctPnNpemUpOwotCQlyZXR1cm4gLUVJTFNFUTsKLQl9Ci0KLQlzdGxjLT5mdyA9IGttZW1kdXAoZnctPmRhdGEsIGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0bGMtPmZ3KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaXJtd2FyZSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzdGxjLT5md19sZW4gPSBmdy0+c2l6ZTsKLQotCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19kbWFfcmVncyBkbWFfcmVnczsKLQl1bnNpZ25lZCBsb25nIGZ3X2xlbiwgZndfYWRkcjsKLQlsb25nIF9md19sZW47Ci0JaW50IHJldDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWlmICghc3RsYy0+ZncpIHsKLQkJcmV0ID0gc3RsYzQ1eHhfcmVxdWVzdF9maXJtd2FyZShzdGxjKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHN0b3AgdGhlIGRldmljZSAqLwotCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKLQkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQKLQkJCSB8IFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEKTsKLQotCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7Ci0KLQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCi0JCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFCi0JCQkgfCBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCk7Ci0KLQltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOwotCi0JZndfYWRkciA9IEZJUk1XQVJFX0FERFJFU1M7Ci0JZndfbGVuID0gc3RsYy0+ZndfbGVuOwotCi0Jd2hpbGUgKGZ3X2xlbiA+IDApIHsKLQkJX2Z3X2xlbiA9IChmd19sZW4gPiBTUElfTUFYX1BBQ0tFVF9TSVpFKQotCQkJPyBTUElfTUFYX1BBQ0tFVF9TSVpFIDogZndfbGVuOwotCQlkbWFfcmVncy5jbWQgPSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFOwotCQlkbWFfcmVncy5sZW4gPSBjcHVfdG9fbGUxNihfZndfbGVuKTsKLQkJZG1hX3JlZ3MuYWRkciA9IGNwdV90b19sZTMyKGZ3X2FkZHIpOwotCi0JCWZ3X2xlbiAtPSBfZndfbGVuOwotCQlmd19hZGRyICs9IF9md19sZW47Ci0KLQkJc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgZG1hX3JlZ3MuY21kKTsKLQotCQlpZiAoc3RsYzQ1eHhfd2FpdF9iaXQoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsCi0JCQkJICAgICAgSE9TVF9BTExPV0VELCBIT1NUX0FMTE9XRUQpID09IDApIHsKLQkJCXN0bGM0NXh4X2Vycm9yKCJmd191cGxvYWQgbm90IGFsbG93ZWQgdG8gRE1BIHdyaXRlIik7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCi0JCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiwgZG1hX3JlZ3MubGVuKTsKLQkJc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQkFTRSwgZG1hX3JlZ3MuYWRkcik7Ci0KLQkJc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBLCBzdGxjLT5mdywgX2Z3X2xlbik7Ci0KLQkJLyogRklYTUU6IEkgdGhpbmsgdGhpcyBkb2Vzbid0IHdvcmsgaWYgZmlybXdhcmUgaXMgbGFyZ2UsCi0JCSAqIHRoaXMgbG9vcCBnb2VzIHRvIHNlY29uZCByb3VuZC4gZnctPmRhdGEgaXMgbm90Ci0JCSAqIGluY3JlYXNlZCBhdCBhbGwhICovCi0JfQotCi0JQlVHX09OKGZ3X2xlbiAhPSAwKTsKLQotCS8qIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLCBTUElfSE9TVF9JTlRTX0RFRkFVTFQpOwotCi0JLyogYm9vdCB0aGUgZGV2aWNlICovCi0Jc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAotCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVAotCQkJIHwgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCk7Ci0KLQltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOwotCi0Jc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAotCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpOwotCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9jaGVja190eHNlbnQoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnksICpuOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuLCAmc3RsYy0+dHhfc2VudCwgdHhfbGlzdCkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBlbnRyeS0+bGlmZXRpbWUpKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXN0bGM0NXh4X3dhcm5pbmcoImZyYW1lIDB4JXggbGlmZXRpbWUgZXhjZWVkZWQiLAotCQkJCQkJIGVudHJ5LT5zdGFydCk7Ci0JCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOwotCQkJc2tiX3B1bGwoZW50cnktPnNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhzdGxjLT5odywgZW50cnktPnNrYik7Ci0JCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlkaXNhYmxlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSkpOwotCWdwaW9fc2V0X3ZhbHVlKHN0bGM0NXh4X2dwaW9fcG93ZXIsIDApOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9wb3dlcl9vbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgMSk7Ci0JZW5hYmxlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSkpOwotCi0JLyoKLQkgKiBuZWVkIHRvIHdhaXQgYSB3aGlsZSBiZWZvcmUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCwgdGhlIGxlbmd0aAotCSAqIGlzIGp1c3QgYSBndWVzcwotCSAqLwotCW1zbGVlcCgxMCk7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfZmx1c2hfcXVldWVzKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSkgewotCQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJnN0bGMtPnR4X3NlbnQsCi0JCQkJCSBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOwotCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOwotCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOwotCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQl9Ci0KLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSk7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3BlbmRpbmcpKSB7Ci0JCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeSgmc3RsYy0+dHhfcGVuZGluZywKLQkJCQkJIHN0cnVjdCB0eGJ1ZmZlciwgdHhfbGlzdCk7Ci0JCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7Ci0JCWRldl9rZnJlZV9za2IoZW50cnktPnNrYik7Ci0JCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOwotCX0KLQotCVdBUk5fT04oIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3BlbmRpbmcpKTsKLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eGJ1ZmZlcikpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LAotCQkJCQkgICAgIHdvcmtfcmVzZXQpOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFU0VUKQotCQlnb3RvIG91dDsKLQotCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JLyogd2FpdCB0aGF0IGFsbCB3b3JrX3N0cnVjdHMgaGF2ZSBmaW5pc2hlZCwgd2UgY2FuJ3QgaG9sZAotCSAqIHN0bGMtPm11dGV4IHRvIGF2b2lkIGRlYWRsb2NrICovCi0JY2FuY2VsX3dvcmtfc3luYygmc3RsYy0+d29yayk7Ci0KLQkvKiBGSVhNRTogZmluZCBvdXQgZ29vZCB2YWx1ZSB0byB3YWl0IGZvciBjaGlwIHBvd2VyIGRvd24gKi8KLQltc2xlZXAoMTAwKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCS8qIEZJWE1FOiB3ZSBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgaWYgdGhlIHN0YXRlIGhhcyBjaGFuZ2VkCi0JICogYWZ0ZXIgcmUtYWNxdWlyaW5nIG11dGV4ICovCi0JV0FSTl9PTihzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRVNFVCk7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCXN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdGxjKTsKLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX1JFU0VUVElORzsKLQotCXN0bGM0NXh4X3Bvd2VyX29uKHN0bGMpOwotCXN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdGxjKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4ICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9yZXNldChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RsYzQ1eHhfd2FybmluZygicmVzZXR0aW5nIGZpcm13YXJlIik7Ci0Jc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRVNFVDsKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc3RsYy0+aHcpOwotCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmtfcmVzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrX3R4X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3RsYzQ1eHgsCi0JCQkJCSAgICAgd29ya190eF90aW1lb3V0LndvcmspOwotCi0Jc3RsYzQ1eHhfd2FybmluZygidHggdGltZW91dCIpOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQotCQlnb3RvIG91dDsKLQotCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X2ludF9hY2soc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1MzIgdmFsKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRfQUNLLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93YWtldXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQl1MzIgaW50czsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCS8qIHdha2UgdGhlIGNoaXAgKi8KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLCBTUElfVEFSR0VUX0lOVF9XQUtFVVApOwotCi0JLyogQW5kIHdhaXQgZm9yIHRoZSBSRUFEWSBpbnRlcnJ1cHQgKi8KLQl0aW1lb3V0ID0gamlmZmllcyArIEhaOwotCi0JaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQotCQkJCWdvdG8gb3V0OwotCQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0JfQotCi0Jc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfUkVBRFkpOwotCi1vdXQ6Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9zbGVlcChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19BUk1fSU5URVJSVVBUUywgU1BJX1RBUkdFVF9JTlRfU0xFRVApOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9pbnRfcmVhZHkoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRfRU4sCi0JCQkgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpOwotCi0Jc3dpdGNoIChzdGxjLT5md19zdGF0ZSkgewotCWNhc2UgRldfU1RBVEVfQk9PVElORzoKLQkJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKLQkJY29tcGxldGUoJnN0bGMtPmZ3X2NvbXApOwotCQlicmVhazsKLQljYXNlIEZXX1NUQVRFX1JFU0VUVElORzoKLQkJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKLQotCQlzdGxjNDV4eF90eF9zY2FuKHN0bGMpOwotCQlzdGxjNDV4eF90eF9zZXR1cChzdGxjKTsKLQkJc3RsYzQ1eHhfdHhfZWRjZihzdGxjKTsKLQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc3RsYy0+aHcpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfdHhhY2soc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb190eCAqdHg7Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQlpbnQgZm91bmQgPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JY29udHJvbCA9IChzdHJ1Y3Qgc19sbV9jb250cm9sICopIHNrYi0+ZGF0YTsKLQl0eCA9IChzdHJ1Y3Qgc19sbW9fdHggKikgKGNvbnRyb2wgKyAxKTsKLQotCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygibm8gZnJhbWVzIHdhaXRpbmcgZm9yICIKLQkJCQkJICJhY2tub3dsZWRnZW1lbnQiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzdGxjLT50eF9zZW50LCB0eF9saXN0KSB7Ci0JCWlmIChjb250cm9sLT5oYW5kbGUgPT0gZW50cnktPmhhbmRsZSkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJjb3VsZG4ndCBmaW5kIGZyYW1lIGZvciB0eCBhY2sgMHgleCIsCi0JCQkJCSBjb250cm9sLT5oYW5kbGUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJUWCBBQ0sgMHgleCIsIGVudHJ5LT5oYW5kbGUpOwotCi0JaWYgKGVudHJ5LT5zdGF0dXNfbmVlZGVkKSB7Ci0JCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOwotCi0JCWlmICghKHR4LT5mbGFncyAmIExNX1RYX0ZBSUxFRCkpIHsKLQkJCS8qIGZyYW1lIHdhcyBhY2tlZCAqLwotCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwotCQkJaW5mby0+c3RhdHVzLmFja19zaWduYWwgPSB0eC0+cmNwaSAvIDIgLSAxMTA7Ci0JCX0KLQotCQlza2JfcHVsbChlbnRyeS0+c2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQkJaWVlZTgwMjExX3R4X3N0YXR1cyhzdGxjLT5odywgZW50cnktPnNrYik7Ci0JfQotCi0JbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKLQotCXN0bGM0NXh4X2NoZWNrX3R4c2VudChzdGxjKTsKLQlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpCi0JCS8qIHRoZXJlIGFyZSBubyBwZW5kaW5nIGZyYW1lcywgd2UgY2FuIHN0b3AgdGhlIHR4IHRpbWVvdXQKLQkJICogdGltZXIgKi8KLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmc3RsYy0+d29ya190eF90aW1lb3V0KTsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQotCWlmIChzdGxjLT50eF9xdWV1ZV9zdG9wcGVkICYmCi0JICAgIHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgTUFYX0ZSQU1FX0xFTikgIT0gLTEpIHsKLQkJc3RsYzQ1eHhfZGVidWcoREVCVUdfUVVFVUUsICJyb29tIGluIHR4IGJ1ZmZlciwgd2FraW5nIHF1ZXVlcyIpOwotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc3RsYy0+aHcpOwotCQlzdGxjLT50eF9xdWV1ZV9zdG9wcGVkID0gMDsKLQl9Ci0KLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9yeF9jb250cm9sKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCWludCByZXQgPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JY29udHJvbCA9IChzdHJ1Y3Qgc19sbV9jb250cm9sICopIHNrYi0+ZGF0YTsKLQotCXN3aXRjaCAoY29udHJvbC0+b2lkKSB7Ci0JY2FzZSBMTV9PSURfVFg6Ci0JCXJldCA9IHN0bGM0NXh4X3J4X3R4YWNrKHN0bGMsIHNrYik7Ci0JCWJyZWFrOwotCWNhc2UgTE1fT0lEX1NFVFVQOgotCWNhc2UgTE1fT0lEX1NDQU46Ci0JY2FzZSBMTV9PSURfVFJBUDoKLQljYXNlIExNX09JRF9FRENGOgotCWNhc2UgTE1fT0lEX0tFWUNBQ0hFOgotCWNhc2UgTE1fT0lEX1BTTToKLQljYXNlIExNX09JRF9TVEFUUzoKLQljYXNlIExNX09JRF9MRUQ6Ci0JZGVmYXVsdDoKLQkJc3RsYzQ1eHhfd2FybmluZygidW5oYW5kbGVkIHJ4IGNvbnRyb2wgb2lkICVkXG4iLAotCQkJCSBjb250cm9sLT5vaWQpOwotCQlicmVhazsKLQl9Ci0KLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBjb3BpZWQgZnJvbSBtYWM4MDIxMSAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAotCQkJCSBzdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltICoqdGltLAotCQkJCSBzaXplX3QgKnRpbV9sZW4pCi17Ci0Jc2l6ZV90IGxlZnQgPSBsZW47Ci0JdTggKnBvcyA9IHN0YXJ0OwotCi0Jd2hpbGUgKGxlZnQgPj0gMikgewotCQl1OCBpZCwgZWxlbjsKLQotCQlpZCA9ICpwb3MrKzsKLQkJZWxlbiA9ICpwb3MrKzsKLQkJbGVmdCAtPSAyOwotCi0JCWlmIChlbGVuID4gbGVmdCkKLQkJCXJldHVybjsKLQotCQlzd2l0Y2ggKGlkKSB7Ci0JCWNhc2UgV0xBTl9FSURfVElNOgotCQkJKnRpbSA9IChzdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltICopIHBvczsKLQkJCSp0aW1fbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQlsZWZ0IC09IGVsZW47Ci0JCXBvcyArPSBlbGVuOwotCX0KLX0KLQotLyoKLSAqIG1hYzgwMjExIGRvZXNuJ3QgaGF2ZSBzdXBwb3J0IGZvciBhc2tpbmcgZnJhbWVzIHdpdGggUFMtUG9sbCwgc28gbGV0J3MKLSAqIGltcGxlbWVudCBpbiB0aGUgZHJpdmVyIGZvciBub3cuIFdlIGhhdmUgdG8gYWRkIHN1cHBvcnQgdG8gbWFjODAyMTEKLSAqIGxhdGVyLgotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X2NoZWNrX21vcmVfZGF0YShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHNfbG1fZGF0YV9pbiAqZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX2luICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXNpemVfdCBsZW47Ci0JdTE2IGZjOwotCi0JaGRyID0gKHZvaWQgKikgc2tiLT5kYXRhICsgc2l6ZW9mKCpkYXRhKTsKLQlsZW4gPSBza2ItPmxlbiAtIHNpemVvZigqZGF0YSk7Ci0KLQkvKiBtaW5pbXVtIGZyYW1lIGxlbmd0aCBpcyB0aGUgbnVsbCBmcmFtZSBsZW5ndGggMjQgYnl0ZXMgKi8KLQlpZiAobGVuIDwgMjQpIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiaW52YWxpZCBmcmFtZSBsZW5ndGggd2hlbiBjaGVja2luZyBmb3IgIgotCQkJCSAibW9yZSBkYXRhIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykpCi0JCS8qIHRoaXMgaXMgbm90IGZyb20gRFMgKi8KLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjEsIHN0bGMtPm1hY19hZGRyKSAhPSAwKQotCQkvKiB0aGUgZnJhbWUgd2FzIG5vdCBmb3IgdXMgKi8KLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKSkgewotCQkvKiBBUCBoYXMgbm8gbW9yZSBmcmFtZXMgYnVmZmVyZWQgZm9yIHVzICovCi0JCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgImFsbCBidWZmZXJlZCBmcmFtZXMgcmV0cmlldmVkIik7Ci0JCXN0bGMtPnBzcG9sbGluZyA9IGZhbHNlOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBNT1JFREFUQSBiaXQgaXMgc2V0LCBsZXQncyBhc2sgZm9yIGEgbmV3IGZyYW1lIGZyb20gdGhlIEFQICovCi0Jc3RsYzQ1eHhfdHhfcHNwb2xsKHN0bGMsIHN0bGMtPnBzbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIG1hYzgwMjExIGNhbm5vdCByZWFkIFRJTSBmcm9tIGJlYWNvbnMsIHNvIGxldCdzIGFkZCBhIGhhY2sgdG8gdGhlCi0gKiBkcml2ZXIuIFdlIGhhdmUgdG8gYWRkIHN1cHBvcnQgdG8gbWFjODAyMTEgbGF0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfZGF0YV9iZWFjb24oc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7Ci0Jc2l6ZV90IGxlbiA9IHNrYi0+bGVuLCB0aW1fbGVuID0gMCwgYmFzZWxlbiwgcHZibWFwX2xlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0Jc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqdGltID0gTlVMTDsKLQlpbnQgYm1hcF9vZmZzZXQsIGluZGV4LCBhaWRfYml0OwotCi0JbWdtdCA9ICh2b2lkICopIHNrYi0+ZGF0YSArIHNpemVvZigqZGF0YSk7Ci0KLQliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7Ci0JaWYgKGJhc2VsZW4gPiBsZW4pIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiaW52YWxpZCBiYXNlbGVuIGluIGJlYWNvbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzdGxjNDV4eF9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJnRpbSwKLQkJCSAgICAgJnRpbV9sZW4pOwotCi0JaWYgKCF0aW0pIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiZGlkbid0IGZpbmQgdGltIGZyb20gYSBiZWFjb24iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYm1hcF9vZmZzZXQgPSB0aW0tPmJtYXBfY29udHJvbCAmIDB4ZmU7Ci0JaW5kZXggPSBzdGxjLT5haWQgLyA4IC0gYm1hcF9vZmZzZXQ7Ci0KLQlwdmJtYXBfbGVuID0gdGltX2xlbiAtIDM7Ci0JaWYgKGluZGV4ID4gcHZibWFwX2xlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhaWRfYml0ID0gISEodGltLT5wdmJtYXBbaW5kZXhdICYgKDEgPDwgc3RsYy0+YWlkICUgOCkpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAiZmMgMHgleCBkdXJhdGlvbiAlZCBzZXEgJWQgZHRpbSAldSAiCi0JCSAgICAgICAiYm1hcF9jb250cm9sIDB4JXggYWlkX2JpdCAlZCIsCi0JCSAgICAgICBtZ210LT5mcmFtZV9jb250cm9sLCBtZ210LT5kdXJhdGlvbiwgbWdtdC0+c2VxX2N0cmwgPj4gNCwKLQkJICAgICAgIHRpbS0+ZHRpbV9jb3VudCwgdGltLT5ibWFwX2NvbnRyb2wsIGFpZF9iaXQpOwotCi0JaWYgKCFhaWRfYml0KQotCQlyZXR1cm4gMDsKLQotCXN0bGMtPnBzcG9sbGluZyA9IHRydWU7Ci0Jc3RsYzQ1eHhfdHhfcHNwb2xsKHN0bGMsIHN0bGMtPnBzbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9yeF9kYXRhKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IHNfbG1fZGF0YV9pbiAqZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX2luICopIHNrYi0+ZGF0YTsKLQlpbnQgYWxpZ24gPSAwOwotCXU4ICpwLCBhbGlnbl9sZW47Ci0JdTE2IGxlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWlmIChzdGxjLT5wc20pIHsKLQkJaWYgKGRhdGEtPmZsYWdzICYgTE1fSU5fQkVBQ09OKQotCQkJc3RsYzQ1eHhfcnhfZGF0YV9iZWFjb24oc3RsYywgc2tiKTsKLQkJZWxzZSBpZiAoc3RsYy0+cHNwb2xsaW5nICYmIChkYXRhLT5mbGFncyAmIExNX0lOX0RBVEEpKQotCQkJc3RsYzQ1eHhfY2hlY2tfbW9yZV9kYXRhKHN0bGMsIHNrYik7Ci0JfQotCi0JbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKLQotCXN0YXR1cy5mcmVxID0gZGF0YS0+ZnJlcXVlbmN5OwotCXN0YXR1cy5zaWduYWwgPSBkYXRhLT5yY3BpIC8gMiAtIDExMDsKLQotCS8qIGxldCdzIGFzc3VtZSB0aGF0IG1heGltdW0gcmNwaSB2YWx1ZSBpcyAxNDAgKD0gMzUgZEJtKSAqLwotCXN0YXR1cy5xdWFsID0gZGF0YS0+cmNwaSAqIDEwMCAvIDE0MDsKLQotCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQotCS8qCi0JICogRklYTUU6IHRoaXMgZ2l2ZXMgd2FybmluZyBmcm9tIF9faWVlZTgwMjExX3J4KCkKLQkgKgotCSAqIHN0YXR1cy5yYXRlX2lkeCA9IGRhdGEtPnJhdGU7Ci0JICovCi0KLQlsZW4gPSBkYXRhLT5sZW5ndGg7Ci0KLQlpZiAoZGF0YS0+ZmxhZ3MgJiBMTV9GTEFHX0FMSUdOKQotCQlhbGlnbiA9IDE7Ci0KLQlza2JfcHVsbChza2IsIHNpemVvZigqZGF0YSkpOwotCi0JaWYgKGFsaWduKSB7Ci0JCXAgPSBza2ItPmRhdGE7Ci0JCWFsaWduX2xlbiA9ICpwOwotCQlza2JfcHVsbChza2IsIGFsaWduX2xlbik7Ci0JfQotCi0Jc2tiX3RyaW0oc2tiLCBsZW4pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUlgsICJyeCBkYXRhIDB4JXAgJWQgQiIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfUlhfQ09OVEVOVCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKLQlpZWVlODAyMTFfcngoc3RsYy0+aHcsIHNrYik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcngoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcmV0OwotCXUxNiBsZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF93YWtldXAoc3RsYyk7Ci0KLQkvKiBkdW1teSByZWFkIHRvIGZsdXNoIFNQSSBETUEgY29udHJvbGxlciBidWcgKi8KLQlzdGxjNDV4eF9yZWFkMTYoc3RsYywgU1BJX0FEUlNfR0VOX1BVUlBfMSk7Ci0KLQlsZW4gPSBzdGxjNDV4eF9yZWFkMTYoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEpOwotCi0JaWYgKGxlbiA9PSAwKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoInJ4IHJlcXVlc3Qgb2YgemVybyBieXRlcyIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7Ci0JaWYgKCFza2IpIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiY291bGQgbm90IGFsbG9jIHNrYiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCBTUElfQURSU19ETUFfREFUQSwgc2tiX3B1dChza2IsIGxlbiksIGxlbik7Ci0KLQlzdGxjNDV4eF9zbGVlcChzdGxjKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1JYLCAicnggZnJhbWUgMHglcCAlZCBCIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19SWF9DT05URU5ULCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQotCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7Ci0KLQlpZiAoY29udHJvbC0+ZmxhZ3MgJiBMTV9GTEFHX0NPTlRST0wpCi0JCXJldCA9IHN0bGM0NXh4X3J4X2NvbnRyb2woc3RsYywgc2tiKTsKLQllbHNlCi0JCXJldCA9IHN0bGM0NXh4X3J4X2RhdGEoc3RsYywgc2tiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGlycXJldHVybl90IHN0bGM0NXh4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpjb25maWcpCi17Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbmZpZzsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0lSUSwgIklSUSIpOwotCi0JcXVldWVfd29yayhzdGxjLT5ody0+d29ya3F1ZXVlLCAmc3RsYy0+d29yayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfZnJhbWUoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1MzIgYWRkcmVzcywKLQkJCSAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBzX2RtYV9yZWdzIGRtYV9yZWdzOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlpbnQgcmV0ID0gMDsKLQl1MzIgaW50czsKLQotCXN0bGMtPnR4X2ZyYW1lcysrOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBmcmFtZSAweCVwICV6dSBCIiwgYnVmLCBsZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgYnVmLCBsZW4pOwotCi0Jc3RsYzQ1eHhfd2FrZXVwKHN0bGMpOwotCi0JZG1hX3JlZ3MuY21kICA9IFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEU7Ci0JZG1hX3JlZ3MubGVuICA9IGNwdV90b19sZTE2KGxlbik7Ci0JZG1hX3JlZ3MuYWRkciA9IGNwdV90b19sZTMyKGFkZHJlc3MpOwotCi0Jc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLCAmZG1hX3JlZ3MsCi0JCQkgICBzaXplb2YoZG1hX3JlZ3MpKTsKLQotCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfREFUQSwgYnVmLCBsZW4pOwotCi0JdGltZW91dCA9IGppZmZpZXMgKyAyICogSFo7Ci0JaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfV1JfUkVBRFkpKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlzdGxjNDV4eF93YXJuaW5nKCJXUl9SRUFEWSB0aW1lb3V0Iik7Ci0JCQlyZXQgPSAtMTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQl9Ci0KLQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSk7Ci0KLQlzdGxjNDV4eF9zbGVlcChzdGxjKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfd3FfdHgoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSkgewotCQllbnRyeSA9IGxpc3RfZW50cnkoc3RsYy0+dHhfcGVuZGluZy5uZXh0LAotCQkJCSAgIHN0cnVjdCB0eGJ1ZmZlciwgdHhfbGlzdCk7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmZW50cnktPnR4X2xpc3QpOwotCi0JCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCQlyZXQgPSBzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+ZnJhbWVfc3RhcnQsCi0JCQkJCWVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmxlbik7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCQlpZiAocmV0IDwgMCkgewotCQkJLyogZnJhbWUgdHJhbnNmZXIgdG8gZmlybXdhcmUgYnVmZmVyIGZhaWxlZCAqLwotCQkJLyogRklYTUU6IHJlcG9ydCB0aGlzIHRvIG1hYzgwMjExICovCi0JCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOwotCQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWxpc3RfYWRkKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3NlbnQpOwotCQlxdWV1ZV9kZWxheWVkX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwKLQkJCQkgICAmc3RsYy0+d29ya190eF90aW1lb3V0LAotCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoVFhfVElNRU9VVCkpOwotCX0KLQotb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LCB3b3JrKTsKLQl1MzIgaW50czsKLQlpbnQgcmV0OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmZ3X3N0YXRlID09IEZXX1NUQVRFX09GRiAmJgotCSAgICBzdGxjLT5md19zdGF0ZSA9PSBGV19TVEFURV9SRVNFVCkKLQkJZ290byBvdXQ7Ci0KLQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfQkgsICJiZWdpbiBob3N0X2ludHMgMHglMDh4IiwgaW50cyk7Ci0KLQlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9SRUFEWSkgewotCQlzdGxjNDV4eF9pbnRfcmVhZHkoc3RsYyk7Ci0JCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1JFQURZKTsKLQl9Ci0KLQlpZiAoc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGludHMgJiBTUElfSE9TVF9JTlRfVVBEQVRFKSB7Ci0JCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1VQREFURSk7Ci0JCXJldCA9IHN0bGM0NXh4X3J4KHN0bGMpOwotCQlpZiAocmV0IDwgMCkgewotCQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9TV19VUERBVEUpIHsKLQkJc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKTsKLQkJcmV0ID0gc3RsYzQ1eHhfcngoc3RsYyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlzdGxjNDV4eF9yZXNldChzdGxjKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JcmV0ID0gc3RsYzQ1eHhfd3FfdHgoc3RsYyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19CSCwgImVuZCBob3N0X2ludHMgMHglMDh4IiwgaW50cyk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfZWRjZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fZWRjZiAqZWRjZjsKLQlzaXplX3QgbGVuLCBlZGNmX2xlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWVkY2ZfbGVuID0gc2l6ZW9mKCplZGNmKTsKLQlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgZWRjZl9sZW47Ci0JY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQllZGNmID0gKHN0cnVjdCBzX2xtb19lZGNmICopIChjb250cm9sICsgMSk7Ci0KLQljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7Ci0JY29udHJvbC0+bGVuZ3RoID0gZWRjZl9sZW47Ci0JY29udHJvbC0+b2lkID0gTE1fT0lEX0VEQ0Y7Ci0KLQllZGNmLT5zbG90dGltZSA9IDB4MTQ7Ci0JZWRjZi0+c2lmcyA9IDEwOwotCWVkY2YtPmVvZnBhZCA9IDY7Ci0JZWRjZi0+bWF4YnVyc3QgPSAxNTAwOwotCi0JZWRjZi0+cXVldWVzWzBdLmFpZnMgPSAyOwotCWVkY2YtPnF1ZXVlc1swXS5wYWQwID0gMTsKLQllZGNmLT5xdWV1ZXNbMF0uY3dtaW4gPSAzOwotCWVkY2YtPnF1ZXVlc1swXS5jd21heCA9IDc7Ci0JZWRjZi0+cXVldWVzWzBdLnR4b3AgPSA0NzsKLQllZGNmLT5xdWV1ZXNbMV0uYWlmcyA9IDI7Ci0JZWRjZi0+cXVldWVzWzFdLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1sxXS5jd21pbiA9IDc7Ci0JZWRjZi0+cXVldWVzWzFdLmN3bWF4ID0gMTU7Ci0JZWRjZi0+cXVldWVzWzFdLnR4b3AgPSA5NDsKLQllZGNmLT5xdWV1ZXNbMl0uYWlmcyA9IDM7Ci0JZWRjZi0+cXVldWVzWzJdLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1syXS5jd21pbiA9IDE1OwotCWVkY2YtPnF1ZXVlc1syXS5jd21heCA9IDEwMjM7Ci0JZWRjZi0+cXVldWVzWzJdLnR4b3AgPSAwOwotCWVkY2YtPnF1ZXVlc1szXS5haWZzID0gNzsKLQllZGNmLT5xdWV1ZXNbM10ucGFkMCA9IDA7Ci0JZWRjZi0+cXVldWVzWzNdLmN3bWluID0gMTU7Ci0JZWRjZi0+cXVldWVzWzNdLmN3bWF4ID0gMTAyMzsKLQllZGNmLT5xdWV1ZXNbM10udHhvcCA9IDA7Ci0JZWRjZi0+cXVldWVzWzRdLmFpZnMgPSAxMzsKLQllZGNmLT5xdWV1ZXNbNF0ucGFkMCA9IDk5OwotCWVkY2YtPnF1ZXVlc1s0XS5jd21pbiA9IDM0Mzc7Ci0JZWRjZi0+cXVldWVzWzRdLmN3bWF4ID0gNTEyOwotCWVkY2YtPnF1ZXVlc1s0XS50eG9wID0gMTI7Ci0JZWRjZi0+cXVldWVzWzVdLmFpZnMgPSAxNDI7Ci0JZWRjZi0+cXVldWVzWzVdLnBhZDAgPSAxMDk7Ci0JZWRjZi0+cXVldWVzWzVdLmN3bWluID0gODc1NjsKLQllZGNmLT5xdWV1ZXNbNV0uY3dtYXggPSA2OwotCWVkY2YtPnF1ZXVlc1s1XS50eG9wID0gMDsKLQllZGNmLT5xdWV1ZXNbNl0uYWlmcyA9IDQ7Ci0JZWRjZi0+cXVldWVzWzZdLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1s2XS5jd21pbiA9IDA7Ci0JZWRjZi0+cXVldWVzWzZdLmN3bWF4ID0gNTg3MDU7Ci0JZWRjZi0+cXVldWVzWzZdLnR4b3AgPSAyNTcxNjsKLQllZGNmLT5xdWV1ZXNbN10uYWlmcyA9IDA7Ci0JZWRjZi0+cXVldWVzWzddLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1s3XS5jd21pbiA9IDA7Ci0JZWRjZi0+cXVldWVzWzddLmN3bWF4ID0gMDsKLQllZGNmLT5xdWV1ZXNbN10udHhvcCA9IDA7Ci0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7Ci0KLQlrZnJlZShjb250cm9sKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2V0dXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNfbG1vX3NldHVwICpzZXR1cDsKLQlzaXplX3QgbGVuLCBzZXR1cF9sZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzZXR1cF9sZW4gPSBzaXplb2YoKnNldHVwKTsKLQlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgc2V0dXBfbGVuOwotCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0Jc2V0dXAgPSAoc3RydWN0IHNfbG1vX3NldHVwICopIChjb250cm9sICsgMSk7Ci0KLQljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7Ci0JY29udHJvbC0+bGVuZ3RoID0gc2V0dXBfbGVuOwotCWNvbnRyb2wtPm9pZCA9IExNX09JRF9TRVRVUDsKLQotCXNldHVwLT5mbGFncyA9IExNX1NFVFVQX0lORlJBOwotCXNldHVwLT5hbnRlbm5hID0gMjsKLQlzZXR1cC0+cnhfYWxpZ24gPSAwOwotCXNldHVwLT5yeF9idWZmZXIgPSBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVDsKLQlzZXR1cC0+cnhfbXR1ID0gRklSTVdBUkVfTVRVOwotCXNldHVwLT5mcm9udGVuZCA9IDU7Ci0Jc2V0dXAtPnRpbWVvdXQgPSAwOwotCXNldHVwLT50cnVuY2F0ZSA9IDQ4ODk2OwotCXNldHVwLT5icmF0ZW1hc2sgPSAweGZmZmZmZmZmOwotCXNldHVwLT5yZWZfY2xvY2sgPSA2NDQyNDUwOTQ7Ci0Jc2V0dXAtPmxwZl9iYW5kd2lkdGggPSA2NTUzNTsKLQlzZXR1cC0+b3NjX3N0YXJ0X2RlbGF5ID0gNjU1MzU7Ci0KLQltZW1jcHkoc2V0dXAtPm1hY2FkZHIsIHN0bGMtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHNldHVwLT5ic3NpZCwgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKLQotCWtmcmVlKGNvbnRyb2wpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9zY2FuKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb19zY2FuICpzY2FuOwotCXNpemVfdCBsZW4sIHNjYW5fbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc2Nhbl9sZW4gPSBzaXplb2YoKnNjYW4pOwotCWxlbiA9IHNpemVvZigqY29udHJvbCkgKyBzY2FuX2xlbjsKLQljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCXNjYW4gPSAoc3RydWN0IHNfbG1vX3NjYW4gKikgKGNvbnRyb2wgKyAxKTsKLQotCWNvbnRyb2wtPmZsYWdzID0gTE1fRkxBR19DT05UUk9MIHwgTE1fQ1RSTF9PUFNFVDsKLQljb250cm9sLT5sZW5ndGggPSBzY2FuX2xlbjsKLQljb250cm9sLT5vaWQgPSBMTV9PSURfU0NBTjsKLQotCXNjYW4tPmZsYWdzID0gTE1fU0NBTl9FWElUOwotCXNjYW4tPmJyYXRlbWFzayA9IDB4MTVmOwotCXNjYW4tPmFsb2Z0WzBdID0gMzsKLQlzY2FuLT5hbG9mdFsxXSA9IDM7Ci0Jc2Nhbi0+YWxvZnRbMl0gPSAxOwotCXNjYW4tPmFsb2Z0WzNdID0gMDsKLQlzY2FuLT5hbG9mdFs0XSA9IDA7Ci0Jc2Nhbi0+YWxvZnRbNV0gPSAwOwotCXNjYW4tPmFsb2Z0WzZdID0gMDsKLQlzY2FuLT5hbG9mdFs3XSA9IDA7Ci0KLQltZW1jcHkoJnNjYW4tPnJzc2ljYWwsICZzdGxjLT5jYWxfcnNzaVsoc3RsYy0+Y2hhbm5lbCAtIDEpICoKLQkJCQkJICAgICAgIFJTU0lfQ0FMX0xFTl0sCi0JICAgICAgIFJTU0lfQ0FMX0xFTik7Ci0JbWVtY3B5KCZzY2FuLT5jaGFubmVsLCAmc3RsYy0+Y2FsX2NoYW5uZWxzWyhzdGxjLT5jaGFubmVsIC0gMSkgKgotCQkJCQkJICAgQ0hBTk5FTF9DQUxfTEVOXSwKLQkgICAgICAgQ0hBTk5FTF9DQUxfTEVOKTsKLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKLQotCWtmcmVlKGNvbnRyb2wpOwotfQotCi0vKgotICogY2FsbGVyIG11c3QgaG9sZCBtdXRleAotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X3BzcG9sbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwc3BvbGw7Ci0JaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOwotCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOwotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQljaGFyICpwYXlsb2FkOwotCXUxNiBmYzsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tICsgMTYpOwotCWlmICghc2tiKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImZhaWxlZCB0byBhbGxvY2F0ZSBwc3BvbGwgZnJhbWUiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCXBzcG9sbCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMTYpOwotCW1lbXNldChwc3BvbGwsIDAsIDE2KTsKLQlmYyA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMOwotCWlmIChwb3dlcnNhdmUpCi0JCWZjIHw9IElFRUU4MDIxMV9GQ1RMX1BNOwotCXBzcG9sbC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKLQlwc3BvbGwtPmR1cmF0aW9uX2lkID0gY3B1X3RvX2xlMTYoc3RsYy0+YWlkKTsKLQotCS8qIGFpZCBpbiBQUy1Qb2xsIGhhcyBpdHMgdHdvIE1TQnMgZWFjaCBzZXQgdG8gMSAqLwotCXBzcG9sbC0+ZHVyYXRpb25faWQgfD0gY3B1X3RvX2xlMTYoMSA8PCAxNSkgfCBjcHVfdG9fbGUxNigxIDw8IDE0KTsKLQotCW1lbWNweShwc3BvbGwtPmFkZHIxLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShwc3BvbGwtPmFkZHIyLCBzdGxjLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBQUy1Qb2xsIGZyYW1lIHRvICVwTSAocG93ZXJzYXZlICVkLCAiCi0JCSAgICAgICAiZmMgMHgleCwgYWlkICVkKSIsIHBzcG9sbC0+YWRkcjEsCi0JCSAgICAgICBwb3dlcnNhdmUsIGZjLCBzdGxjLT5haWQpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWVudHJ5ID0gc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RsYywgc2tiLT5sZW4pOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JaWYgKCFlbnRyeSkgewotCQkvKgotCQkgKiBUaGUgcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIHRoZSBmaXJtd2FyZSBidWZmZXIKLQkJICogaXMgZnVsbCwgc28gZmlybXdhcmUgYnVmZmVyIHNob3VsZCBhbHdheXMgaGF2ZSBlbm91Z2gKLQkJICogc3BhY2UuCi0JCSAqCi0JCSAqIEJ1dCBJJ20gdG9vIGxhenkgYW5kIG9taXQgaXQgZm9yIG5vdy4KLQkJICovCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJmaXJtd2FyZSB0eCBidWZmZXIgZnVsbCBpcyBmdWxsICIKLQkJCQkJICJmb3IgbnVsbCBmcmFtZSIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlwYXlsb2FkID0gc2tiLT5kYXRhOwotCXBheWxvYWRfbGVuID0gc2tiLT5sZW47Ci0JcGFkZGluZyA9IChpbnQpIChza2ItPmRhdGEgLSBzaXplb2YoKmRhdGEpKSAmIDM7Ci0JZW50cnktPmhlYWRlcl9sZW4gPSBzaXplb2YoKmRhdGEpICsgcGFkZGluZzsKLQotCWVudHJ5LT5za2IgPSBza2I7Ci0JZW50cnktPnN0YXR1c19uZWVkZWQgPSBmYWxzZTsKLQllbnRyeS0+aGFuZGxlID0gKHUzMikgc2tiOwotCWVudHJ5LT5saWZldGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRYX0ZSQU1FX0xJRkVUSU1FKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZGF0YSAweCV4ICgweCVwIHBheWxvYWQgJWQgQiAiCi0JCSAgICAgICAicGFkZGluZyAlZCBoZWFkZXJfbGVuICVkKSIsCi0JCSAgICAgICBlbnRyeS0+aGFuZGxlLCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgcGFkZGluZywKLQkJICAgICAgIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKLQotCWRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9vdXQgKikgc2tiX3B1c2goc2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQltZW1zZXQoZGF0YSwgMCwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JaWYgKHBhZGRpbmcpCi0JCWRhdGEtPmZsYWdzID0gTE1fRkxBR19BTElHTjsKLQotCWRhdGEtPmZsYWdzID0gTE1fT1VUX0JVUlNUOwotCWRhdGEtPmxlbmd0aCA9IHBheWxvYWRfbGVuOwotCWRhdGEtPmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7Ci0JZGF0YS0+YWlkID0gMTsKLQlkYXRhLT5ydHNfcmV0cmllcyA9IDc7Ci0JZGF0YS0+cmV0cmllcyA9IDc7Ci0JZGF0YS0+YWxvZnRfY3RybCA9IDA7Ci0JZGF0YS0+Y3J5cHRfb2Zmc2V0ID0gNTg7Ci0JZGF0YS0+a2V5dHlwZSA9IDA7Ci0JZGF0YS0+a2V5bGVuID0gMDsKLQlkYXRhLT5xdWV1ZSA9IExNX1FVRVVFX0RBVEEzOwotCWRhdGEtPmJhY2tsb2cgPSAzMjsKLQlkYXRhLT5hbnRlbm5hID0gMjsKLQlkYXRhLT5jdHMgPSAzOwotCWRhdGEtPnBvd2VyID0gMTI3OwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJZGF0YS0+YWxvZnRbaV0gPSAwOwotCi0JLyoKLQkgKiBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0eCBidWZmZXIKLQkgKgotCSAqIEZJWE1FOiBpZ25vcmVkIGZvciBub3cKLQkgKi8KLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIGVudHJ5LT5zdGFydCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogY2FsbGVyIG11c3QgaG9sZCBtdXRleAotICoKLSAqIHNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIG1hYzgwMjExL2llZWU4MDIxMV9zZW5kX251bGxmdW5jCi0gKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqbnVsbGZ1bmM7Ci0JaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOwotCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOwotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQljaGFyICpwYXlsb2FkOwotCXUxNiBmYzsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOwotCWlmICghc2tiKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGwgZnJhbWVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBzdGxjLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKLQlmYyA9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKLQkgICAgIElFRUU4MDIxMV9GQ1RMX1RPRFM7Ci0KLQlpZiAocG93ZXJzYXZlKQotCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKLQotCW51bGxmdW5jLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc3RsYy0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIzLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBOdWxsIGZyYW1lIHRvICVwTSAocG93ZXJzYXZlICVkLCAiCi0JCSAgICAgICAiZmMgMHgleCkiLCBudWxsZnVuYy0+YWRkcjEsIHBvd2Vyc2F2ZSwgZmMpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWVudHJ5ID0gc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RsYywgc2tiLT5sZW4pOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JaWYgKCFlbnRyeSkgewotCQkvKgotCQkgKiBUaGUgcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIHRoZSBmaXJtd2FyZSBidWZmZXIKLQkJICogaXMgZnVsbCwgc28gZmlybXdhcmUgYnVmZmVyIHNob3VsZCBhbHdheXMgaGF2ZSBlbm91Z2gKLQkJICogc3BhY2UuCi0JCSAqCi0JCSAqIEJ1dCBJJ20gdG9vIGxhenkgYW5kIG9taXQgaXQgZm9yIG5vdy4KLQkJICovCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJmaXJtd2FyZSB0eCBidWZmZXIgZnVsbCBpcyBmdWxsICIKLQkJCQkJICJmb3IgbnVsbCBmcmFtZSIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlwYXlsb2FkID0gc2tiLT5kYXRhOwotCXBheWxvYWRfbGVuID0gc2tiLT5sZW47Ci0JcGFkZGluZyA9IChpbnQpIChza2ItPmRhdGEgLSBzaXplb2YoKmRhdGEpKSAmIDM7Ci0JZW50cnktPmhlYWRlcl9sZW4gPSBzaXplb2YoKmRhdGEpICsgcGFkZGluZzsKLQotCWVudHJ5LT5za2IgPSBza2I7Ci0JZW50cnktPnN0YXR1c19uZWVkZWQgPSBmYWxzZTsKLQllbnRyeS0+aGFuZGxlID0gKHUzMikgc2tiOwotCWVudHJ5LT5saWZldGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRYX0ZSQU1FX0xJRkVUSU1FKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZGF0YSAweCV4ICgweCVwIHBheWxvYWQgJWQgQiAiCi0JCSAgICAgICAicGFkZGluZyAlZCBoZWFkZXJfbGVuICVkKSIsCi0JCSAgICAgICBlbnRyeS0+aGFuZGxlLCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgcGFkZGluZywKLQkJICAgICAgIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKLQotCWRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9vdXQgKikgc2tiX3B1c2goc2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQltZW1zZXQoZGF0YSwgMCwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JaWYgKHBhZGRpbmcpCi0JCWRhdGEtPmZsYWdzID0gTE1fRkxBR19BTElHTjsKLQotCWRhdGEtPmZsYWdzID0gTE1fT1VUX0JVUlNUOwotCWRhdGEtPmxlbmd0aCA9IHBheWxvYWRfbGVuOwotCWRhdGEtPmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7Ci0JZGF0YS0+YWlkID0gMTsKLQlkYXRhLT5ydHNfcmV0cmllcyA9IDc7Ci0JZGF0YS0+cmV0cmllcyA9IDc7Ci0JZGF0YS0+YWxvZnRfY3RybCA9IDA7Ci0JZGF0YS0+Y3J5cHRfb2Zmc2V0ID0gNTg7Ci0JZGF0YS0+a2V5dHlwZSA9IDA7Ci0JZGF0YS0+a2V5bGVuID0gMDsKLQlkYXRhLT5xdWV1ZSA9IExNX1FVRVVFX0RBVEEzOwotCWRhdGEtPmJhY2tsb2cgPSAzMjsKLQlkYXRhLT5hbnRlbm5hID0gMjsKLQlkYXRhLT5jdHMgPSAzOwotCWRhdGEtPnBvd2VyID0gMTI3OwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJZGF0YS0+YWxvZnRbaV0gPSAwOwotCi0JLyoKLQkgKiBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0eCBidWZmZXIKLQkgKgotCSAqIEZJWE1FOiBpZ25vcmVkIGZvciBub3cKLQkgKi8KLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIGVudHJ5LT5zdGFydCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4ICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9wc20oc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb19wc20gKnBzbTsKLQlzaXplX3QgbGVuLCBwc21fbGVuOwotCi0JV0FSTl9PTighc3RsYy0+YXNzb2NpYXRlZCk7Ci0JV0FSTl9PTihzdGxjLT5haWQgPCAxKTsKLQlXQVJOX09OKHN0bGMtPmFpZCA+IDIwMDcpOwotCi0JcHNtX2xlbiA9IHNpemVvZigqcHNtKTsKLQlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgcHNtX2xlbjsKLQljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCXBzbSA9IChzdHJ1Y3Qgc19sbW9fcHNtICopIChjb250cm9sICsgMSk7Ci0KLQljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7Ci0JY29udHJvbC0+bGVuZ3RoID0gcHNtX2xlbjsKLQljb250cm9sLT5vaWQgPSBMTV9PSURfUFNNOwotCi0JaWYgKGVuYWJsZSkKLQkJcHNtLT5mbGFncyB8PSBMTV9QU007Ci0KLQlwc20tPmFpZCA9IHN0bGMtPmFpZDsKLQotCXBzbS0+YmVhY29uX3JjcGlfc2tpcF9tYXggPSA2MDsKLQotCXBzbS0+aW50ZXJ2YWxzWzBdLmludGVydmFsID0gMTsKLQlwc20tPmludGVydmFsc1swXS5wZXJpb2RzID0gMTsKLQlwc20tPmludGVydmFsc1sxXS5pbnRlcnZhbCA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMV0ucGVyaW9kcyA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMl0uaW50ZXJ2YWwgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzJdLnBlcmlvZHMgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzNdLmludGVydmFsID0gMTsKLQlwc20tPmludGVydmFsc1szXS5wZXJpb2RzID0gMTsKLQotCXBzbS0+bnIgPSAwOwotCXBzbS0+ZXhjbHVkZVswXSA9IDA7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJzZW5kaW5nIExNX09JRF9QU00gKGFpZCAlZCwgaW50ZXJ2YWwgJWQpIiwKLQkJICAgICAgIHBzbS0+YWlkLCBwc20tPmludGVydmFsc1swXS5pbnRlcnZhbCk7Ci0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7Ci0KLQlrZnJlZShjb250cm9sKTsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwotCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKLQlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCWNoYXIgKnBheWxvYWQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JZW50cnkgPSBzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdGxjLCBza2ItPmxlbik7Ci0JaWYgKCFlbnRyeSkgewotCQkvKiB0aGUgcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIHRoZSBmaXJtd2FyZSBidWZmZXIKLQkJICogaXMgZnVsbCwgc28gZmlybXdhcmUgYnVmZmVyIHNob3VsZCBhbHdheXMgaGF2ZSBlbm91Z2gKLQkJICogc3BhY2UgKi8KLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXN0bGM0NXh4X3dhcm5pbmcoImZpcm13YXJlIGJ1ZmZlciBmdWxsIik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQlwYXlsb2FkID0gc2tiLT5kYXRhOwotCXBheWxvYWRfbGVuID0gc2tiLT5sZW47Ci0JcGFkZGluZyA9IChpbnQpIChza2ItPmRhdGEgLSBzaXplb2YoKmRhdGEpKSAmIDM7Ci0JZW50cnktPmhlYWRlcl9sZW4gPSBzaXplb2YoKmRhdGEpICsgcGFkZGluZzsKLQotCWVudHJ5LT5za2IgPSBza2I7Ci0JZW50cnktPnN0YXR1c19uZWVkZWQgPSB0cnVlOwotCWVudHJ5LT5oYW5kbGUgPSAodTMyKSBza2I7Ci0JZW50cnktPmxpZmV0aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVFhfRlJBTUVfTElGRVRJTUUpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBkYXRhIDB4JXggKDB4JXAgcGF5bG9hZCAlZCBCICIKLQkJICAgICAgICJwYWRkaW5nICVkIGhlYWRlcl9sZW4gJWQpIiwKLQkJICAgICAgIGVudHJ5LT5oYW5kbGUsIHBheWxvYWQsIHBheWxvYWRfbGVuLCBwYWRkaW5nLAotCQkgICAgICAgZW50cnktPmhlYWRlcl9sZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOwotCi0JZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX291dCAqKSBza2JfcHVzaChza2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCW1lbXNldChkYXRhLCAwLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQlpZiAocGFkZGluZykKLQkJZGF0YS0+ZmxhZ3MgPSBMTV9GTEFHX0FMSUdOOwotCi0JZGF0YS0+ZmxhZ3MgPSBMTV9PVVRfQlVSU1Q7Ci0JZGF0YS0+bGVuZ3RoID0gcGF5bG9hZF9sZW47Ci0JZGF0YS0+aGFuZGxlID0gZW50cnktPmhhbmRsZTsKLQlkYXRhLT5haWQgPSAxOwotCWRhdGEtPnJ0c19yZXRyaWVzID0gNzsKLQlkYXRhLT5yZXRyaWVzID0gNzsKLQlkYXRhLT5hbG9mdF9jdHJsID0gMDsKLQlkYXRhLT5jcnlwdF9vZmZzZXQgPSA1ODsKLQlkYXRhLT5rZXl0eXBlID0gMDsKLQlkYXRhLT5rZXlsZW4gPSAwOwotCWRhdGEtPnF1ZXVlID0gMjsKLQlkYXRhLT5iYWNrbG9nID0gMzI7Ci0JZGF0YS0+YW50ZW5uYSA9IDI7Ci0JZGF0YS0+Y3RzID0gMzsKLQlkYXRhLT5wb3dlciA9IDEyNzsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJcmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShzdGxjLT5odywgaW5mbyk7Ci0JCWRhdGEtPmFsb2Z0W2ldID0gcmF0ZS0+aHdfdmFsdWU7Ci0JfQotCi0JbGlzdF9hZGRfdGFpbCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9wZW5kaW5nKTsKLQotCS8qIGNoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIHNwYWNlIGluIHR4IGJ1ZmZlciAqLwotCWlmIChzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0bGMsIE1BWF9GUkFNRV9MRU4pID09IC0xKSB7Ci0JCXN0bGM0NXh4X2RlYnVnKERFQlVHX1FVRVVFLCAidHggYnVmZmVyIGZ1bGwsIHN0b3BwaW5nIHF1ZXVlcyIpOwotCQlzdGxjLT50eF9xdWV1ZV9zdG9wcGVkID0gMTsKLQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHN0bGMtPmh3KTsKLQl9Ci0KLQlxdWV1ZV93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsICZzdGxjLT53b3JrKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXJldHVybiBORVRERVZfVFhfT0s7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCWludCByZXQgPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0Jc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9CT09USU5HOwotCXN0bGMtPmNoYW5uZWwgPSAxOwotCi0Jc3RsYzQ1eHhfcG93ZXJfb24oc3RsYyk7Ci0KLQlyZXQgPSBzdGxjNDV4eF91cGxvYWRfZmlybXdhcmUoc3RsYyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0Jc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDA7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDIwMDApOwotCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmc3RsYy0+ZndfY29tcCwKLQkJCQkJCQkgICAgdGltZW91dCk7Ci0JaWYgKCF0aW1lb3V0KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBib290IGZhaWxlZCIpOwotCQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7Ci0JCXJldCA9IC0xOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19CT09ULCAiZmlybXdhcmUgYm9vdGVkIik7Ci0KLQkvKiBGSVhNRTogc2hvdWxkIHdlIHRha2UgbXV0ZXgganVzdCBhZnRlciB3YWl0X2Zvcl9jb21wbGV0aW9uKCk/ICovCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JV0FSTl9PTihzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSk7Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JV0FSTl9PTihzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSk7Ci0KLQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7Ci0KLQkvKiBGSVhNRTogbWFrZSBzdXJlIHRoYXQgYWxsIHdvcmtfc3RydWN0cyBoYXZlIGNvbXBsZXRlZCAqLwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQlzdGxjNDV4eF9mbHVzaF9xdWV1ZXMoc3RsYyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0Jc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9PRkY7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQltZW1jcHkoc3RsYy0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0Jc3RsYy0+Y2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWwtPmh3X3ZhbHVlOwotCXN0bGM0NXh4X3R4X3NjYW4oc3RsYyk7Ci0Jc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7Ci0Jc3RsYzQ1eHhfdHhfZWRjZihzdGxjKTsKLQotCWlmICgoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgIT0gc3RsYy0+cHNtKSB7Ci0JCXN0bGMtPnBzbSA9IGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFM7Ci0JCWlmIChzdGxjLT5hc3NvY2lhdGVkKSB7Ci0JCQlzdGxjNDV4eF90eF9wc20oc3RsYywgc3RsYy0+cHNtKTsKLQkJCXN0bGM0NXh4X3R4X251bGxmdW5jKHN0bGMsIHN0bGMtPnBzbSk7Ci0JCX0KLQl9Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgICAgaW50IG1jX2NvdW50LAotCQkJCSAgICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQotewotCSp0b3RhbF9mbGFncyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKLQkJCQkJIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCW1lbWNweShzdGxjLT5ic3NpZCwgaW5mby0+YnNzaWQsIEVUSF9BTEVOKTsKLQlzdGxjNDV4eF90eF9zZXR1cChzdGxjKTsKLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQlzdGxjLT5hc3NvY2lhdGVkID0gaW5mby0+YXNzb2M7Ci0JCWlmIChpbmZvLT5hc3NvYykKLQkJCXN0bGMtPmFpZCA9IGluZm8tPmFpZDsKLQkJZWxzZQotCQkJc3RsYy0+YWlkID0gLTE7Ci0KLQkJaWYgKHN0bGMtPnBzbSkgewotCQkJc3RsYzQ1eHhfdHhfcHNtKHN0bGMsIHN0bGMtPnBzbSk7Ci0JCQlzdGxjNDV4eF90eF9udWxsZnVuYyhzdGxjLCBzdGxjLT5wc20pOwotCQl9Ci0JfQotfQotCi0KLS8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBzdGxjNDV4eF9yYXRlc1tdID0gewotCXsgLmJpdHJhdGUgPSAxMCwgIC5od192YWx1ZSA9IDAsICAgIC5od192YWx1ZV9zaG9ydCA9IDAsIH0sCi0JeyAuYml0cmF0ZSA9IDIwLCAgLmh3X3ZhbHVlID0gMSwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMSwgfSwKLQl7IC5iaXRyYXRlID0gNTUsICAuaHdfdmFsdWUgPSAyLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAyLCB9LAotCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsICAgIC5od192YWx1ZV9zaG9ydCA9IDMsIH0sCi0JeyAuYml0cmF0ZSA9IDYwLCAgLmh3X3ZhbHVlID0gNCwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNCwgfSwKLQl7IC5iaXRyYXRlID0gOTAsICAuaHdfdmFsdWUgPSA1LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA1LCB9LAotCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDYsICAgIC5od192YWx1ZV9zaG9ydCA9IDYsIH0sCi0JeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gNywgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNywgfSwKLQl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA4LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA4LCB9LAotCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDksICAgIC5od192YWx1ZV9zaG9ydCA9IDksIH0sCi0JeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMTAsICAgLmh3X3ZhbHVlX3Nob3J0ID0gMTAsIH0sCi0JeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTEsICAgLmh3X3ZhbHVlX3Nob3J0ID0gMTEsIH0sCi19OwotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgc3RsYzQ1eHhfY2hhbm5lbHNbXSA9IHsKLQl7IC5od192YWx1ZSA9IDEsIC5jZW50ZXJfZnJlcSA9IDI0MTJ9LAotCXsgLmh3X3ZhbHVlID0gMiwgLmNlbnRlcl9mcmVxID0gMjQxN30sCi0JeyAuaHdfdmFsdWUgPSAzLCAuY2VudGVyX2ZyZXEgPSAyNDIyfSwKLQl7IC5od192YWx1ZSA9IDQsIC5jZW50ZXJfZnJlcSA9IDI0Mjd9LAotCXsgLmh3X3ZhbHVlID0gNSwgLmNlbnRlcl9mcmVxID0gMjQzMn0sCi0JeyAuaHdfdmFsdWUgPSA2LCAuY2VudGVyX2ZyZXEgPSAyNDM3fSwKLQl7IC5od192YWx1ZSA9IDcsIC5jZW50ZXJfZnJlcSA9IDI0NDJ9LAotCXsgLmh3X3ZhbHVlID0gOCwgLmNlbnRlcl9mcmVxID0gMjQ0N30sCi0JeyAuaHdfdmFsdWUgPSA5LCAuY2VudGVyX2ZyZXEgPSAyNDUyfSwKLQl7IC5od192YWx1ZSA9IDEwLCAuY2VudGVyX2ZyZXEgPSAyNDU3fSwKLQl7IC5od192YWx1ZSA9IDExLCAuY2VudGVyX2ZyZXEgPSAyNDYyfSwKLQl7IC5od192YWx1ZSA9IDEyLCAuY2VudGVyX2ZyZXEgPSAyNDY3fSwKLQl7IC5od192YWx1ZSA9IDEzLCAuY2VudGVyX2ZyZXEgPSAyNDcyfSwKLX07Ci0KLS8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc3RsYzQ1eHhfYmFuZF8yZ2h6ID0gewotCS5jaGFubmVscyA9IHN0bGM0NXh4X2NoYW5uZWxzLAotCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShzdGxjNDV4eF9jaGFubmVscyksCi0JLmJpdHJhdGVzID0gc3RsYzQ1eHhfcmF0ZXMsCi0JLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHN0bGM0NXh4X3JhdGVzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBzdGxjNDV4eF9vcHMgPSB7Ci0JLnN0YXJ0ID0gc3RsYzQ1eHhfb3Bfc3RhcnQsCi0JLnN0b3AgPSBzdGxjNDV4eF9vcF9zdG9wLAotCS5hZGRfaW50ZXJmYWNlID0gc3RsYzQ1eHhfb3BfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZSA9IHN0bGM0NXh4X29wX3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZpZyA9IHN0bGM0NXh4X29wX2NvbmZpZywKLQkuY29uZmlndXJlX2ZpbHRlciA9IHN0bGM0NXh4X29wX2NvbmZpZ3VyZV9maWx0ZXIsCi0JLnR4ID0gc3RsYzQ1eHhfb3BfdHgsCi0JLmJzc19pbmZvX2NoYW5nZWQgPSBzdGxjNDV4eF9vcF9ic3NfaW5mb19jaGFuZ2VkLAotfTsKLQotc3RhdGljIGludCBzdGxjNDV4eF9yZWdpc3Rlcl9tYWM4MDIxMShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0JLyogRklYTUU6IFNFVF9JRUVFODAyMTFfUEVSTV9BRERSKCkgcmVxdWlyZXMgZGVmYXVsdF9tYWNfYWRkcgotCSAgIHRvIGJlIG5vbi1jb25zdCBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbiAqLwotCXN0YXRpYyB1OCBkZWZhdWx0X21hY19hZGRyW0VUSF9BTEVOXSA9IHsKLQkJMHgwMCwgMHgwMiwgMHhlZSwgMHhjMCwgMHhmZiwgMHhlZQotCX07Ci0JaW50IHJldDsKLQotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHN0bGMtPmh3LCBkZWZhdWx0X21hY19hZGRyKTsKLQotCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhzdGxjLT5odyk7Ci0JaWYgKHJldCkgewotCQlzdGxjNDV4eF9lcnJvcigidW5hYmxlIHRvIHJlZ2lzdGVyIG1hYzgwMjExIGh3OiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdGxjNDV4eF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInN0bGM0NXh4IiwKLQkuaWQJCT0gLTEsCi0KLQkvKiBkZXZpY2UgbW9kZWwgaW5zaXN0cyB0byBoYXZlIGEgcmVsZWFzZSBmdW5jdGlvbiAqLwotCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnJlbGVhc2UgPSBzdGxjNDV4eF9kZXZpY2VfcmVsZWFzZSwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgc3RsYzQ1eHhfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGM7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JaW50IHJldDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCS8qIG1hYzgwMjExIGFsbG9jICovCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpzdGxjKSwgJnN0bGM0NXh4X29wcyk7Ci0JaWYgKCFodykgewotCQlzdGxjNDV4eF9lcnJvcigiY291bGQgbm90IGFsbG9jIGllZWU4MDIxMV9odyIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBtYWM4MDIxMSBjbGVhcnMgaHctPnByaXYgKi8KLQlzdGxjID0gaHctPnByaXY7Ci0KLQlzdGxjLT5odyA9IGh3OwotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHN0bGMpOwotCXN0bGMtPnNwaSA9IHNwaTsKLQotCXNwaS0+Yml0c19wZXJfd29yZCA9IDE2OwotCXNwaS0+bWF4X3NwZWVkX2h6ID0gMjQwMDAwMDA7Ci0KLQlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKLQlpZiAocmV0IDwgMCkKLQkJc3RsYzQ1eHhfZXJyb3IoInNwaV9zZXR1cCBmYWlsZWQiKTsKLQotCXJldCA9IGdwaW9fcmVxdWVzdChzdGxjNDV4eF9ncGlvX3Bvd2VyLCAic3RsYzQ1eHggcG93ZXIiKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigicG93ZXIgR1BJTyByZXF1ZXN0IGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IGdwaW9fcmVxdWVzdChzdGxjNDV4eF9ncGlvX2lycSwgInN0bGM0NXh4IGlycSIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJpcnEgR1BJTyByZXF1ZXN0IGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgMCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RsYzQ1eHhfZ3Bpb19pcnEpOwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpLAotCQkJICBzdGxjNDV4eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJzdGxjNDV4eCIsCi0JCQkgIHN0bGMtPnNwaSk7Ci0JaWYgKHJldCA8IDApCi0JCS8qIEZJWE1FOiBoYW5kbGUgdGhlIGVycm9yICovCi0JCXN0bGM0NXh4X2Vycm9yKCJyZXF1ZXN0X2lycSgpIGZhaWxlZCIpOwotCi0Jc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSwKLQkJICAgICBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0KLQlkaXNhYmxlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSkpOwotCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzdGxjNDV4eF9kZXZpY2UpOwotCWlmIChyZXQpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoIkNvdWxkbid0IHJlZ2lzdGVyIHdsYW5fb21hcCBkZXZpY2UuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCWRldl9zZXRfZHJ2ZGF0YSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgc3RsYyk7Ci0KLQlJTklUX1dPUksoJnN0bGMtPndvcmssIHN0bGM0NXh4X3dvcmspOwotCUlOSVRfV09SSygmc3RsYy0+d29ya19yZXNldCwgc3RsYzQ1eHhfd29ya19yZXNldCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnN0bGMtPndvcmtfdHhfdGltZW91dCwgc3RsYzQ1eHhfd29ya190eF90aW1lb3V0KTsKLQltdXRleF9pbml0KCZzdGxjLT5tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZzdGxjLT5md19jb21wKTsKLQlzcGluX2xvY2tfaW5pdCgmc3RsYy0+dHhfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnN0bGMtPnR4YnVmZmVyKTsKLQlJTklUX0xJU1RfSEVBRCgmc3RsYy0+dHhfcGVuZGluZyk7Ci0JSU5JVF9MSVNUX0hFQUQoJnN0bGMtPnR4X3NlbnQpOwotCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKLQkJSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKLQkvKiBmb3VyIGJ5dGVzIGZvciBwYWRkaW5nICovCi0JaHctPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBzX2xtX2RhdGFfb3V0KSArIDQ7Ci0KLQkvKiB1bml0IHVzICovCi0JaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOwotCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7Ci0JaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZzdGxjNDV4eF9iYW5kXzJnaHo7Ci0KLQlTRVRfSUVFRTgwMjExX0RFVihodywgJnNwaS0+ZGV2KTsKLQotCUJVSUxEX0JVR19PTihzaXplb2YoZGVmYXVsdF9jYWxfcnNzaSkgIT0gUlNTSV9DQUxfQVJSQVlfTEVOKTsKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKGRlZmF1bHRfY2FsX2NoYW5uZWxzKSAhPSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4pOwotCi0Jc3RsYy0+Y2FsX3Jzc2kgPSBrbWVtZHVwKGRlZmF1bHRfY2FsX3Jzc2ksIFJTU0lfQ0FMX0FSUkFZX0xFTiwKLQkJCQkgR0ZQX0tFUk5FTCk7Ci0Jc3RsYy0+Y2FsX2NoYW5uZWxzID0ga21lbWR1cChkZWZhdWx0X2NhbF9jaGFubmVscywKLQkJCQkgICAgIENIQU5ORUxfQ0FMX0FSUkFZX0xFTiwKLQkJCQkgICAgIEdGUF9LRVJORUwpOwotCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCAmZGV2X2F0dHJfY2FsX3Jzc2kpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgY2FsX3Jzc2kiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCAmZGV2X2F0dHJfY2FsX2NoYW5uZWxzKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIGNhbF9jaGFubmVscyIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnN0bGM0NXh4X2RldmljZS5kZXYsICZkZXZfYXR0cl90eF9idWYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgdHhfYnVmIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IHN0bGM0NXh4X3JlZ2lzdGVyX21hYzgwMjExKHN0bGMpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXN0bGM0NXh4X2luZm8oInYiIERSSVZFUl9WRVJTSU9OICIgbG9hZGVkIik7Ci0KLQlzdGxjNDV4eF9pbmZvKCJjb25maWcgYnVmZmVyIDB4JXgtMHgleCIsCi0JCSAgICAgIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgRklSTVdBUkVfQ09ORklHX0VORCk7Ci0Jc3RsYzQ1eHhfaW5mbygidHggMHgleC0weCV4LCByeCAweCV4LTB4JXgiLAotCQkgICAgICBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCwgRklSTVdBUkVfVFhCVUZGRVJfRU5ELAotCQkgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCwgRklSTVdBUkVfUlhCVUZGRVJfRU5EKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHN0bGM0NXh4X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnN0bGM0NXh4X2RldmljZSk7Ci0KLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhzdGxjLT5odyk7Ci0KLQlmcmVlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSksIHNwaSk7Ci0KLQlncGlvX2ZyZWUoc3RsYzQ1eHhfZ3Bpb19wb3dlcik7Ci0JZ3Bpb19mcmVlKHN0bGM0NXh4X2dwaW9faXJxKTsKLQotCS8qIEZJWE1FOiBmcmVlIGNhbF9jaGFubmVscyBhbmQgY2FsX3Jzc2k/ICovCi0KLQlrZnJlZShzdGxjLT5mdyk7Ci0KLQltdXRleF9kZXN0cm95KCZzdGxjLT5tdXRleCk7Ci0KLQkvKiBmcmVlcyBhbHNvIHN0bGMgKi8KLQlpZWVlODAyMTFfZnJlZV9odyhzdGxjLT5odyk7Ci0Jc3RsYyA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgc3RsYzQ1eHhfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkvKiB1c2UgY3gzMTEweCBuYW1lIGJlY2F1c2UgYm9hcmQtbjgwMC5jIHVzZXMgdGhhdCBmb3IgdGhlCi0JCSAqIFNQSSBwb3J0ICovCi0JCS5uYW1lCQk9ICJjeDMxMTB4IiwKLQkJLmJ1cwkJPSAmc3BpX2J1c190eXBlLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQotCS5wcm9iZQkJPSBzdGxjNDV4eF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHN0bGM0NXh4X3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzdGxjNDV4eF9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnN0bGM0NXh4X3NwaV9kcml2ZXIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gcmVnaXN0ZXIgU1BJIGRyaXZlcjogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc3RsYzQ1eHhfZXhpdCh2b2lkKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmc3RsYzQ1eHhfc3BpX2RyaXZlcik7Ci0KLQlzdGxjNDV4eF9pbmZvKCJ1bmxvYWRlZCIpOwotfQotCi1tb2R1bGVfaW5pdChzdGxjNDV4eF9pbml0KTsKLW1vZHVsZV9leGl0KHN0bGM0NXh4X2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4iKTsKLU1PRFVMRV9BTElBUygic3BpOmN4MzExMHgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5oIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjOTZiYmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN0bGM0NXh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgInN0bGM0NXh4X2xtYWMuaCIKLQotI2RlZmluZSBEUklWRVJfTkFNRSAic3RsYzQ1eHgiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjEuMyIKLQotI2RlZmluZSBEUklWRVJfUFJFRklYIERSSVZFUl9OQU1FICI6ICIKLQotZW51bSB7Ci0JREVCVUdfTk9ORSA9IDAsCi0JREVCVUdfRlVOQyA9IDEgPDwgMCwKLQlERUJVR19JUlEgPSAxIDw8IDEsCi0JREVCVUdfQkggPSAxIDw8IDIsCi0JREVCVUdfUlggPSAxIDw8IDMsCi0JREVCVUdfUlhfQ09OVEVOVCA9IDEgPDwgNSwKLQlERUJVR19UWCA9IDEgPDwgNiwKLQlERUJVR19UWF9DT05URU5UID0gMSA8PCA4LAotCURFQlVHX1RYQlVGRkVSID0gMSA8PCA5LAotCURFQlVHX1FVRVVFID0gMSA8PCAxMCwKLQlERUJVR19CT09UID0gMSA8PCAxMSwKLQlERUJVR19QU00gPSAxIDw8IDEyLAotCURFQlVHX0FMTCA9IH4wLAotfTsKLQotI2RlZmluZSBERUJVR19MRVZFTCBERUJVR19OT05FCi0vKiAjZGVmaW5lIERFQlVHX0xFVkVMIERFQlVHX0FMTCAqLwotLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfVFggfCBERUJVR19SWCB8IERFQlVHX0lSUSkgKi8KLS8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX1RYIHwgREVCVUdfTUVNUkVHSU9OIHwgREVCVUdfUVVFVUUpICovCi0vKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19NRU1SRUdJT04gfCBERUJVR19RVUVVRSkgKi8KLQotI2RlZmluZSBzdGxjNDV4eF9lcnJvcihmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0VSUiBEUklWRVJfUFJFRklYICJFUlJPUiAiIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSBzdGxjNDV4eF93YXJuaW5nKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfUFJFRklYICJXQVJOSU5HICIgZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHN0bGM0NXh4X2luZm8oZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHN0bGM0NXh4X2RlYnVnKGxldmVsLCBmbXQsIGFyZy4uLikgXAotCWRvIHsgXAotCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzdGxjNDV4eF9kdW1wKGxldmVsLCBidWYsIGxlbikJCVwKLQlkbyB7IFwKLQkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKLQkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIFwKLQkJCQkgICAgICAgMTYsIDEsIGJ1ZiwgbGVuLCAxKTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIE1BQzJTVFIoYSkgKChhKVswXSwgKGEpWzFdLCAoYSlbMl0sIChhKVszXSwgKGEpWzRdLCAoYSlbNV0pCi0jZGVmaW5lIE1BQ1NUUiAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0KLS8qIEJpdCAxNSBpcyByZWFkL3dyaXRlIGJpdDsgT04gPSBSRUFELCBPRkYgPSBXUklURSAqLwotI2RlZmluZSBBRERSX1JFQURfQklUXzE1ICAweDgwMDAKLQotI2RlZmluZSBTUElfQURSU19BUk1fSU5URVJSVVBUUyAgICAgMHgwMAotI2RlZmluZSBTUElfQURSU19BUk1fSU5UX0VOCSAgICAweDA0Ci0KLSNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTICAgIDB4MDgKLSNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfRU4JICAgIDB4MGMKLSNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfQUNLCSAgICAweDEwCi0KLSNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMSAgIAkgICAgMHgxNAotI2RlZmluZSBTUElfQURSU19HRU5fUFVSUF8yICAgCSAgICAweDE4Ci0KLS8qIGhpZ2ggd29yZCAqLwotI2RlZmluZSBTUElfQURSU19ERVZfQ1RSTF9TVEFUICAgICAgMHgyNgotCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9EQVRBICAgICAgCSAgICAweDI4Ci0KLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwgICAgIDB4MmMKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiAgICAgIDB4MmUKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UgICAgIDB4MzAKLQotI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9DVFJMICAgICAgMHgzNAotI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9MRU4gICAgICAgMHgzNgotI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9CQVNFICAgICAgMHgzOAotCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSAweDgwMDAKLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQgIDB4NDAwMAotI2RlZmluZSBTUElfQ1RSTF9TVEFUX1JBTV9CT09UICAgICAgMHgyMDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVCAgICAweDEwMDAKLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX0NQVV9FTiAgIDB4MDgwMAotCi0jZGVmaW5lIFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEUgICAweDAwMDEKLSNkZWZpbmUgU1BJX0RNQV9SRUFEX0NUUkxfRU5BQkxFICAgIDB4MDAwMQotI2RlZmluZSBIT1NUX0FMTE9XRUQgICAgICAgICAgICAgICAgKDEgPDwgNykKLQotI2RlZmluZSBGSVJNV0FSRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMAotCi0jZGVmaW5lIFNQSV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAgICAgICAgICAvKiBtc2VjICovCi0KLSNkZWZpbmUgU1BJX01BWF9UWF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgIDMyCi0KLSNkZWZpbmUgU1BJX01BWF9QQUNLRVRfU0laRSAgICAgICAgICAgICAgICAgICAgIDMyNzY3Ci0KLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfV0FLRVVQICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfU0xFRVAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfUkRET05FICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLQotI2RlZmluZSBTUElfVEFSR0VUX0lOVF9DVFMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBTUElfVEFSR0VUX0lOVF9EUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9SRUFEWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9TV19VUERBVEUgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFNQSV9IT1NUX0lOVF9VUERBVEUgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0KLS8qIGNsZWFyIHRvIHNlbmQgKi8KLSNkZWZpbmUgU1BJX0hPU1RfSU5UX0NUUwkgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotCi0vKiBkYXRhIHJlYWR5ICovCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9EUgkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0KLSNkZWZpbmUgU1BJX0hPU1RfSU5UU19ERUZBVUxUIFwKLQkoU1BJX0hPU1RfSU5UX1JFQURZIHwgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpCi0KLSNkZWZpbmUgVEFSR0VUX0JPT1RfU0xFRVAgNTAKLQotLyogVGhlIGZpcm13YXJlIGJ1ZmZlciBpcyBkaXZpZGVkIGludG8gdGhyZWUgYXJlYXM6Ci0gKgotICogbyBjb25maWcgYXJlYSAoZm9yIGNvbnRyb2wgY29tbWFuZHMpCi0gKiBvIHR4IGJ1ZmZlcgotICogbyByeCBidWZmZXIKLSAqLwotI2RlZmluZSBGSVJNV0FSRV9CVUZGRVJfU1RBUlQgMHgyMDIwMAotI2RlZmluZSBGSVJNV0FSRV9CVUZGRVJfRU5EIDB4MjdjNjAKLSNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX0xFTiAoRklSTVdBUkVfQlVGRkVSX0VORCAtIEZJUk1XQVJFX0JVRkZFUl9TVEFSVCkKLSNkZWZpbmUgRklSTVdBUkVfTVRVIDMyNDAKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX1BBWUxPQURfTEVOIDEwMjQKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX1NUQVJUIEZJUk1XQVJFX0JVRkZFUl9TVEFSVAotI2RlZmluZSBGSVJNV0FSRV9DT05GSUdfTEVOIChzaXplb2Yoc3RydWN0IHNfbG1fY29udHJvbCkgKyBcCi0JCQkgICAgIEZJUk1XQVJFX0NPTkZJR19QQVlMT0FEX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX0VORCAoRklSTVdBUkVfQ09ORklHX1NUQVJUICsgRklSTVdBUkVfQ09ORklHX0xFTiAtIDEpCi0jZGVmaW5lIEZJUk1XQVJFX1JYQlVGRkVSX0xFTiAoNSAqIEZJUk1XQVJFX01UVSArIDEwMjQpCi0jZGVmaW5lIEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJUIChGSVJNV0FSRV9CVUZGRVJfRU5EIC0gRklSTVdBUkVfUlhCVUZGRVJfTEVOKQotI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9FTkQgKEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJUICsgXAotCQkJICAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX0xFTiAtIDEpCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUIChGSVJNV0FSRV9CVUZGRVJfU1RBUlQgKyBGSVJNV0FSRV9DT05GSUdfTEVOKQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9MRU4gKEZJUk1XQVJFX0JVRkZFUl9MRU4gLSBGSVJNV0FSRV9DT05GSUdfTEVOIC0gXAotCQkJICAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfRU5EIChGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCArIFwKLQkJCSAgICAgICBGSVJNV0FSRV9UWEJVRkZFUl9MRU4gLSAxKQotCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUiAxMDAKLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfVFJBSUxFUiA0Ci0KLS8qIEZJWE1FOiBjb21lIHVwIHdpdGggYSBwcm9wZXIgdmFsdWUgKi8KLSNkZWZpbmUgTUFYX0ZSQU1FX0xFTiAyNTAwCi0KLS8qIHVuaXQgaXMgbXMgKi8KLSNkZWZpbmUgVFhfRlJBTUVfTElGRVRJTUUgMjAwMAotI2RlZmluZSBUWF9USU1FT1VUIDQwMDAKLQotI2RlZmluZSBTVVBQT1JURURfQ0hBTk5FTFMgMTMKLQotLyogRklYTUUgKi8KLS8qICNkZWZpbmUgQ0hBTk5FTF9DQUxfTEVOIG9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCBicmF0ZW1hc2spIC0gXCAqLwotLyogCW9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCBjaGFubmVsKSAqLwotI2RlZmluZSBDSEFOTkVMX0NBTF9MRU4gMjkyCi0jZGVmaW5lIENIQU5ORUxfQ0FMX0FSUkFZX0xFTiAoU1VQUE9SVEVEX0NIQU5ORUxTICogQ0hBTk5FTF9DQUxfTEVOKQotLyogRklYTUUgKi8KLS8qICNkZWZpbmUgUlNTSV9DQUxfTEVOIHNpemVvZihzdHJ1Y3Qgc19sbW9fc2NhbikgLSBcICovCi0vKiAJb2Zmc2V0b2Yoc3RydWN0IHNfbG1vX3NjYW4sIHJzc2ljYWwpICovCi0jZGVmaW5lIFJTU0lfQ0FMX0xFTiA4Ci0jZGVmaW5lIFJTU0lfQ0FMX0FSUkFZX0xFTiAoU1VQUE9SVEVEX0NIQU5ORUxTICogUlNTSV9DQUxfTEVOKQotCi1zdHJ1Y3Qgc19kbWFfcmVncyB7Ci0JdW5zaWduZWQgc2hvcnQgY21kOwotCXVuc2lnbmVkIHNob3J0IGxlbjsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci19OwotCi1zdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltIHsKLQl1OCBkdGltX2NvdW50OwotCXU4IGR0aW1fcGVyaW9kOwotCXU4IGJtYXBfY29udHJvbDsKLQl1OCBwdmJtYXBbMjUxXTsKLX07Ci0KLXN0cnVjdCB0eGJ1ZmZlciB7Ci0JLyogY2FuIGJlIHJlbW92ZWQgd2hlbiBzd2l0Y2hlZCB0byBza2IgcXVldWUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2xpc3Q7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZlcl9saXN0OwotCi0JaW50IHN0YXJ0OwotCWludCBmcmFtZV9zdGFydDsKLQlpbnQgZW5kOwotCi0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgaGFuZGxlOwotCi0JYm9vbCBzdGF0dXNfbmVlZGVkOwotCi0JaW50IGhlYWRlcl9sZW47Ci0KLQkvKiB1bml0IGppZmZpZXMgKi8KLQl1bnNpZ25lZCBsb25nIGxpZmV0aW1lOwotfTsKLQotZW51bSBmd19zdGF0ZSB7Ci0JRldfU1RBVEVfT0ZGLAotCUZXX1NUQVRFX0JPT1RJTkcsCi0JRldfU1RBVEVfUkVBRFksCi0JRldfU1RBVEVfUkVTRVQsCi0JRldfU1RBVEVfUkVTRVRUSU5HLAotfTsKLQotc3RydWN0IHN0bGM0NXh4IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3Jlc2V0OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgd29ya190eF90aW1lb3V0OwotCXN0cnVjdCBtdXRleCBtdXRleDsKLQlzdHJ1Y3QgY29tcGxldGlvbiBmd19jb21wOwotCi0KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCWludCBjaGFubmVsOwotCi0JdTggKmNhbF9yc3NpOwotCXU4ICpjYWxfY2hhbm5lbHM7Ci0KLQllbnVtIGZ3X3N0YXRlIGZ3X3N0YXRlOwotCi0Jc3BpbmxvY2tfdCB0eF9sb2NrOwotCi0JLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4YnVmZmVyOwotCi0JLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4X3BlbmRpbmc7Ci0KLQkvKiBwcm90ZWN0ZWQgYnkgdHhfbG9jayAqLwotCWludCB0eF9xdWV1ZV9zdG9wcGVkOwotCi0JLyogcHJvdGVjdGVkIGJ5IG11dGV4ICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eF9zZW50OwotCi0JaW50IHR4X2ZyYW1lczsKLQotCXU4ICpmdzsKLQlpbnQgZndfbGVuOwotCi0JYm9vbCBwc207Ci0JYm9vbCBhc3NvY2lhdGVkOwotCWludCBhaWQ7Ci0JYm9vbCBwc3BvbGxpbmc7Ci19OwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eF9sbWFjLmggYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjVkYjgwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eF9sbWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgVGhpcyBpcyB0aGUgTE1BQyBBUEkgaW50ZXJmYWNlIGhlYWRlciBmaWxlIGZvciBTVExDNDU2MC4gICAgICAgIAkqCi0qICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29uZXhhbnQgU3lzdGVtcywgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAgICAqCi0qICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgICAqCi0qICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgkqCi0qICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqCi0qICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgkqCi0qICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqCi0qICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqCi0qICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fbG1hY19oX18KLSNkZWZpbmUgX19sbWFjX2hfXwotCi0jZGVmaW5lIExNX1RPUF9WQVJJQU5UICAgICAgMHgwNTA2Ci0jZGVmaW5lIExNX0JPVFRPTV9WQVJJQU5UICAgMHgwNTA2Ci0KLS8qCi0gKiBMTUFDIC0gVU1BQyBpbnRlcmZhY2UgZGVmaW5pdGlvbjoKLSAqLwotCi0jZGVmaW5lIExNX0ZMQUdfQ09OVFJPTCAgICAgMHg4MDAwCi0jZGVmaW5lIExNX0ZMQUdfQUxJR04gICAgICAgMHg0MDAwCi0KLSNkZWZpbmUgTE1fQ1RSTF9PUFNFVCAgICAgICAweDAwMDEKLQotI2RlZmluZSBMTV9PVVRfUFJPTUlTQyAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9PVVRfVElNRVNUQU1QICAgIDB4MDAwMgotI2RlZmluZSBMTV9PVVRfU0VRTlIgICAgICAgIDB4MDAwNAotI2RlZmluZSBMTV9PVVRfQlVSU1QgICAgICAgIDB4MDAxMAotI2RlZmluZSBMTV9PVVRfTk9DQU5DRUwgICAgIDB4MDAyMAotI2RlZmluZSBMTV9PVVRfQ0xFQVJUSU0gICAgIDB4MDA0MAotI2RlZmluZSBMTV9PVVRfSElUQ0hISUtFICAgIDB4MDA4MAotI2RlZmluZSBMTV9PVVRfQ09NUFJFU1MgICAgIDB4MDEwMAotI2RlZmluZSBMTV9PVVRfQ09OQ0FUICAgICAgIDB4MDIwMAotI2RlZmluZSBMTV9PVVRfUENTX0FDQ0VQVCAgIDB4MDQwMAotI2RlZmluZSBMTV9PVVRfV0FJVEVPU1AgICAgIDB4MDgwMAotCi0KLSNkZWZpbmUgTE1fQUxPRlRfU1AgICAgICAgICAweDEwCi0jZGVmaW5lIExNX0FMT0ZUX0NUUyAgICAgICAgMHgyMAotI2RlZmluZSBMTV9BTE9GVF9SVFMgICAgICAgIDB4NDAKLSNkZWZpbmUgTE1fQUxPRlRfTUFTSyAgICAgICAweDFmCi0jZGVmaW5lIExNX0FMT0ZUX1JBVEUgICAgICAgMHgwZgotCi0jZGVmaW5lIExNX0lOX0ZDU19HT09EICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX0lOX01BVENIX01BQyAgICAgMHgwMDAyCi0jZGVmaW5lIExNX0lOX01DQkMgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIExNX0lOX0JFQUNPTiAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIExNX0lOX01BVENIX0JTUyAgICAgMHgwMDEwCi0jZGVmaW5lIExNX0lOX0JDQVNUX0JTUyAgICAgMHgwMDIwCi0jZGVmaW5lIExNX0lOX0RBVEEgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIExNX0lOX1RSVU5DQVRFRCAgICAgMHgwMDgwCi0KLSNkZWZpbmUgTE1fSU5fVFJBTlNQQVJFTlQgICAweDAyMDAKLQotI2RlZmluZSBMTV9RVUVVRV9CRUFDT04gICAgIDAKLSNkZWZpbmUgTE1fUVVFVUVfU0NBTiAgICAgICAxCi0jZGVmaW5lIExNX1FVRVVFX01HVCAgICAgICAgMgotI2RlZmluZSBMTV9RVUVVRV9NQ0JDICAgICAgIDMKLSNkZWZpbmUgTE1fUVVFVUVfREFUQSAgICAgICA0Ci0jZGVmaW5lIExNX1FVRVVFX0RBVEEwICAgICAgNAotI2RlZmluZSBMTV9RVUVVRV9EQVRBMSAgICAgIDUKLSNkZWZpbmUgTE1fUVVFVUVfREFUQTIgICAgICA2Ci0jZGVmaW5lIExNX1FVRVVFX0RBVEEzICAgICAgNwotCi0jZGVmaW5lIExNX1NFVFVQX0lORlJBICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9TRVRVUF9JQlNTICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgTE1fU0VUVVBfVFJBTlNQQVJFTlQgICAgMHgwMDA4Ci0jZGVmaW5lIExNX1NFVFVQX1BST01JU0NVT1VTICAgIDB4MDAxMAotI2RlZmluZSBMTV9TRVRVUF9ISUJFUk5BVEUgICAgICAweDAwMjAKLSNkZWZpbmUgTE1fU0VUVVBfTk9BQ0sgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIExNX1NFVFVQX1JYX0RJU0FCTEVEICAgIDB4MDA4MAotCi0jZGVmaW5lIExNX0FOVEVOTkFfMCAgICAgICAgICAgIDAKLSNkZWZpbmUgTE1fQU5URU5OQV8xICAgICAgICAgICAgMQotI2RlZmluZSBMTV9BTlRFTk5BX0RJVkVSU0lUWSAgICAyCi0KLSNkZWZpbmUgTE1fVFhfRkFJTEVEICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX1RYX1BTTSAgICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBMTV9UWF9QU01fQ0FOQ0VMTEVECTB4MDAwNAotCi0jZGVmaW5lIExNX1NDQU5fRVhJVCAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9TQ0FOX1RSQVAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgTE1fU0NBTl9BQ1RJVkUgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIExNX1NDQU5fRklMVEVSICAgICAgICAgIDB4MDAwOAotCi0jZGVmaW5lIExNX1BTTSAgICAgICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9QU01fRFRJTSAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgTE1fUFNNX01DQkMgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIExNX1BTTV9DSEVDS1NVTSAgICAgICAgIDB4MDAwOAotI2RlZmluZSBMTV9QU01fU0tJUF9NT1JFX0RBVEEgICAweDAwMTAKLSNkZWZpbmUgTE1fUFNNX0JFQUNPTl9USU1FT1VUICAgMHgwMDIwCi0jZGVmaW5lIExNX1BTTV9IRk9TTEVFUCAgICAgICAgIDB4MDA0MAotI2RlZmluZSBMTV9QU01fQVVUT1NXSVRDSF9TTEVFUCAweDAwODAKLSNkZWZpbmUJTE1fUFNNX0xQSVQJCTB4MDEwMAotI2RlZmluZSBMTV9QU01fQkZfVUNBU1RfU0tJUCAgICAweDAyMDAKLSNkZWZpbmUgTE1fUFNNX0JGX01DQVNUX1NLSVAgICAgMHgwNDAwCi0KLS8qIGhmb3NsZWVwICovCi0jZGVmaW5lIExNX1BTTV9TTEVFUF9PUFRJT05fTUFTSyAoTE1fUFNNX0FVVE9TV0lUQ0hfU0xFRVAgfCBMTV9QU01fSEZPU0xFRVApCi0jZGVmaW5lIExNX1BTTV9TTEVFUF9PUFRJT05fU0hJRlQgICAgICAgNgotLyogaGZvc2xlZXBlbmQgKi8KLSNkZWZpbmUgTE1fUFNNX0JGX09QVElPTl9NQVNLIChMTV9QU01fQkZfTUNBU1RfU0tJUCB8IExNX1BTTV9CRl9VQ0FTVF9TS0lQKQotI2RlZmluZSBMTV9QU01fQkZfT1BUSU9OX1NISUZUICA5Ci0KLQotI2RlZmluZSBMTV9QUklWQUNDX1dFUCAgICAgICAgICAweDAxCi0jZGVmaW5lIExNX1BSSVZBQ0NfVEtJUCAgICAgICAgIDB4MDIKLSNkZWZpbmUgTE1fUFJJVkFDQ19NSUNIQUVMICAgICAgMHgwNAotI2RlZmluZSBMTV9QUklWQUNDX0NDWF9LUCAgICAgICAweDA4Ci0jZGVmaW5lIExNX1BSSVZBQ0NfQ0NYX01JQyAgICAgIDB4MTAKLSNkZWZpbmUgTE1fUFJJVkFDQ19BRVNfQ0NNUCAgICAgMHgyMAotCi0vKiBzaXplIG9mIHNfbG1fZGVzY3IgaW4gd29yZHMgKi8KLSNkZWZpbmUgTE1fREVTQ1JfU0laRV9XT1JEUyAgICAgMTEKLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLWVudW0gewotICAgIExNX01PREVfQ0xJRU5UID0gMCwKLSAgICBMTV9NT0RFX0FQCi19OwotCi1zdHJ1Y3Qgc19sbV9kZXNjciB7Ci0gICAgdWludDE2X3QgbW9kZXM7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDMyX3QgYnVmZmVyX3N0YXJ0OwotICAgIHVpbnQzMl90IGJ1ZmZlcl9lbmQ7Ci0gICAgdWludDhfdCBoZWFkZXI7Ci0gICAgdWludDhfdCB0cmFpbGVyOwotICAgIHVpbnQ4X3QgdHhfcXVldWVzOwotICAgIHVpbnQ4X3QgdHhfZGVwdGg7Ci0gICAgdWludDhfdCBwcml2YWN5OwotICAgIHVpbnQ4X3Qgcnhfa2V5Y2FjaGU7Ci0gICAgdWludDhfdCB0aW1fc2l6ZTsKLSAgICB1aW50OF90IHBhZDE7Ci0gICAgdWludDhfdCByYXRlc1sxNl07Ci0gICAgdWludDMyX3QgbGluazsKLQl1aW50MTZfdCBtdHU7Ci19OwotCi0KLXN0cnVjdCBzX2xtX2NvbnRyb2wgewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IGxlbmd0aDsKLSAgICB1aW50MzJfdCBoYW5kbGU7Ci0gICAgdWludDE2X3Qgb2lkOwotICAgIHVpbnQxNl90IHBhZDsKLSAgICAvKiB1aW50OF90IGRhdGFbXTsgKi8KLX07Ci0KLWVudW0gewotICAgIExNX1BSSVZfTk9ORSA9IDAsCi0gICAgTE1fUFJJVl9XRVAsCi0gICAgTE1fUFJJVl9US0lQLAotICAgIExNX1BSSVZfVEtJUE1JQ0hBRUwsCi0gICAgTE1fUFJJVl9DQ1hfV0VQTUlDLAotICAgIExNX1BSSVZfQ0NYX0tQTUlDLAotICAgIExNX1BSSVZfQ0NYX0tQLAotICAgIExNX1BSSVZfQUVTX0NDTVAKLX07Ci0KLWVudW0gewotICAgIExNX0RFQ1JZUFRfTk9ORSwKLSAgICBMTV9ERUNSWVBUX09LLAotICAgIExNX0RFQ1JZUFRfTk9LRVksCi0gICAgTE1fREVDUllQVF9OT01JQ0hBRUwsCi0gICAgTE1fREVDUllQVF9OT0NLSVBNSUMsCi0gICAgTE1fREVDUllQVF9GQUlMX1dFUCwKLSAgICBMTV9ERUNSWVBUX0ZBSUxfVEtJUCwKLSAgICBMTV9ERUNSWVBUX0ZBSUxfTUlDSEFFTCwKLSAgICBMTV9ERUNSWVBUX0ZBSUxfQ0tJUEtQLAotICAgIExNX0RFQ1JZUFRfRkFJTF9DS0lQTUlDLAotICAgIExNX0RFQ1JZUFRfRkFJTF9BRVNDQ01QCi19OwotCi1zdHJ1Y3Qgc19sbV9kYXRhX291dCB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgbGVuZ3RoOwotICAgIHVpbnQzMl90IGhhbmRsZTsKLSAgICB1aW50MTZfdCBhaWQ7Ci0gICAgdWludDhfdCBydHNfcmV0cmllczsKLSAgICB1aW50OF90IHJldHJpZXM7Ci0gICAgdWludDhfdCBhbG9mdFs4XTsKLSAgICB1aW50OF90IGFsb2Z0X2N0cmw7Ci0gICAgdWludDhfdCBjcnlwdF9vZmZzZXQ7Ci0gICAgdWludDhfdCBrZXl0eXBlOwotICAgIHVpbnQ4X3Qga2V5bGVuOwotICAgIHVpbnQ4X3Qga2V5WzE2XTsKLSAgICB1aW50OF90IHF1ZXVlOwotICAgIHVpbnQ4X3QgYmFja2xvZzsKLSAgICB1aW50MTZfdCBkdXJhdGlvbnNbNF07Ci0gICAgdWludDhfdCBhbnRlbm5hOwotICAgIHVpbnQ4X3QgY3RzOwotICAgIGludDE2X3QgcG93ZXI7Ci0gICAgdWludDhfdCBwYWRbMl07Ci0gICAgLyp1aW50OF90IGRhdGFbXTsqLwotfTsKLQotI2RlZmluZSBMTV9SQ1BJX0lOVkFMSUQgICAgICAgICAoMHhmZikKLQotc3RydWN0IHNfbG1fZGF0YV9pbiB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgbGVuZ3RoOwotICAgIHVpbnQxNl90IGZyZXF1ZW5jeTsKLSAgICB1aW50OF90IGFudGVubmE7Ci0gICAgdWludDhfdCByYXRlOwotICAgIHVpbnQ4X3QgcmNwaTsKLSAgICB1aW50OF90IHNxOwotICAgIHVpbnQ4X3QgZGVjcnlwdDsKLSAgICB1aW50OF90IHJzc2lfcmF3OwotICAgIHVpbnQzMl90IGNsb2NrWzJdOwotICAgIC8qdWludDhfdCBkYXRhW107Ki8KLX07Ci0KLXVuaW9uIHVfbG1fZGF0YSB7Ci0gICAgc3RydWN0IHNfbG1fZGF0YV9vdXQgb3V0OwotICAgIHN0cnVjdCBzX2xtX2RhdGFfaW4gaW47Ci19OwotCi1lbnVtIHsKLSAgICBMTV9PSURfU0VUVVAJPSAwLAotICAgIExNX09JRF9TQ0FOCQk9IDEsCi0gICAgTE1fT0lEX1RSQVAJCT0gMiwKLSAgICBMTV9PSURfRURDRgkJPSAzLAotICAgIExNX09JRF9LRVlDQUNIRQk9IDQsCi0gICAgTE1fT0lEX1BTTQkJPSA2LAotICAgIExNX09JRF9UWENBTkNFTAk9IDcsCi0gICAgTE1fT0lEX1RYCQk9IDgsCi0gICAgTE1fT0lEX0JVUlNUCT0gOSwKLSAgICBMTV9PSURfU1RBVFMJPSAxMCwKLSAgICBMTV9PSURfTEVECQk9IDEzLAotICAgIExNX09JRF9USU1FUgk9IDE1LAotICAgIExNX09JRF9OQVYJCT0gMjAsCi0gICAgTE1fT0lEX1BDUwkJPSAyMiwKLSAgICBMTV9PSURfQlRfQkFMQU5DRVIgID0gMjgsCi0gICAgTE1fT0lEX0dST1VQX0FERFJFU1NfVEFCTEUJPSAzMCwKLSAgICBMTV9PSURfQVJQVEFCTEUgICAgID0gMzEsCi0gICAgTE1fT0lEX0JUX09QVElPTlMgPSAzNQotfTsKLQotZW51bSB7Ci0gICAgTE1fRlJPTlRFTkRfVU5LTk9XTiA9IDAsCi0gICAgTE1fRlJPTlRFTkRfRFVFVFRFMywKLSAgICBMTV9GUk9OVEVORF9EVUVUVEUyLAotICAgIExNX0ZST05URU5EX0ZSSVNCRUUsCi0gICAgTE1fRlJPTlRFTkRfQ1JPU1NCT1csCi0gICAgTE1fRlJPTlRFTkRfTE9OR0JPVwotfTsKLQotCi0jZGVmaW5lIElOVkFMSURfTFBGX0JBTkRXSURUSCAgIDB4ZmZmZgotI2RlZmluZSBJTlZBTElEX09TQ19TVEFSVF9ERUxBWSAweGZmZmYKLQotc3RydWN0IHNfbG1vX3NldHVwIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50OF90ICBtYWNhZGRyWzZdOwotICAgIHVpbnQ4X3QgIGJzc2lkWzZdOwotICAgIHVpbnQ4X3QgIGFudGVubmE7Ci0gICAgdWludDhfdCAgcnhfYWxpZ247Ci0gICAgdWludDMyX3QgcnhfYnVmZmVyOwotICAgIHVpbnQxNl90IHJ4X210dTsKLSAgICB1aW50MTZfdCBmcm9udGVuZDsKLSAgICB1aW50MTZfdCB0aW1lb3V0OwotICAgIHVpbnQxNl90IHRydW5jYXRlOwotICAgIHVpbnQzMl90IGJyYXRlbWFzazsKLSAgICB1aW50OF90ICBzYnNzX29mZnNldDsKLSAgICB1aW50OF90ICBtY2FzdF93aW5kb3c7Ci0gICAgdWludDhfdCAgcnhfcnNzaV90aHJlc2hvbGQ7Ci0gICAgdWludDhfdCAgcnhfZWRfdGhyZXNob2xkOwotICAgIHVpbnQzMl90IHJlZl9jbG9jazsKLSAgICB1aW50MTZfdCBscGZfYmFuZHdpZHRoOwotICAgIHVpbnQxNl90IG9zY19zdGFydF9kZWxheTsKLX07Ci0KLQotc3RydWN0IHNfbG1vX3NjYW4gewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IGR3ZWxsOwotICAgIHVpbnQ4X3QgY2hhbm5lbFsyOTJdOwotICAgIHVpbnQzMl90IGJyYXRlbWFzazsKLSAgICB1aW50OF90ICBhbG9mdFs4XTsKLSAgICB1aW50OF90ICByc3NpY2FsWzhdOwotfTsKLQotCi1lbnVtIHsKLSAgICBMTV9UUkFQX1NDQU4gPSAwLAotICAgIExNX1RSQVBfVElNRVIsCi0gICAgTE1fVFJBUF9CRUFDT05fVFgsCi0gICAgTE1fVFJBUF9GQUFfUkFESU9fT04sCi0gICAgTE1fVFJBUF9GQUFfUkFESU9fT0ZGLAotICAgIExNX1RSQVBfUkFEQVIsCi0gICAgTE1fVFJBUF9OT19CRUFDT04sCi0gICAgTE1fVFJBUF9UQlRULAotICAgIExNX1RSQVBfU0NPX0VOVEVSLAotICAgIExNX1RSQVBfU0NPX0VYSVQKLX07Ci0KLXN0cnVjdCBzX2xtb190cmFwIHsKLSAgICB1aW50MTZfdCBldmVudDsKLSAgICB1aW50MTZfdCBmcmVxdWVuY3k7Ci19OwotCi1zdHJ1Y3Qgc19sbW9fdGltZXIgewotICAgIHVpbnQzMl90IGludGVydmFsOwotfTsKLQotc3RydWN0IHNfbG1vX25hdiB7Ci0gICAgdWludDMyX3QgcGVyaW9kOwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fZWRjZl9xdWV1ZTsKLQotc3RydWN0IHNfbG1vX2VkY2YgewotICAgIHVpbnQ4X3QgIGZsYWdzOwotICAgIHVpbnQ4X3QgIHNsb3R0aW1lOwotICAgIHVpbnQ4X3QgIHNpZnM7Ci0gICAgdWludDhfdCAgZW9mcGFkOwotICAgIHN0cnVjdCBzX2xtb19lZGNmX3F1ZXVlIHsKLQkgICAgdWludDhfdCAgYWlmczsKLQkgICAgdWludDhfdCAgcGFkMDsKLQkgICAgdWludDE2X3QgY3dtaW47Ci0JICAgIHVpbnQxNl90IGN3bWF4OwotCSAgICB1aW50MTZfdCB0eG9wOwotICAgIH0gcXVldWVzWzhdOwotICAgIHVpbnQ4X3QgIG1hcHBpbmdbNF07Ci0gICAgdWludDE2X3QgbWF4YnVyc3Q7Ci0gICAgdWludDE2X3Qgcm91bmRfdHJpcF9kZWxheTsKLX07Ci0KLXN0cnVjdCBzX2xtb19rZXljYWNoZSB7Ci0gICAgdWludDhfdCBlbnRyeTsKLSAgICB1aW50OF90IGtleWlkOwotICAgIHVpbnQ4X3QgYWRkcmVzc1s2XTsKLSAgICB1aW50OF90IHBhZFsyXTsKLSAgICB1aW50OF90IGtleXR5cGU7Ci0gICAgdWludDhfdCBrZXlsZW47Ci0gICAgdWludDhfdCBrZXlbMjRdOwotfTsKLQotCi1zdHJ1Y3Qgc19sbV9pbnRlcnZhbDsKLQotc3RydWN0IHNfbG1vX3BzbSB7Ci0gICAgdWludDE2X3QgICAgZmxhZ3M7Ci0gICAgdWludDE2X3QgICAgYWlkOwotICAgIHN0cnVjdCBzX2xtX2ludGVydmFsIHsKLQkgICAgdWludDE2X3QgaW50ZXJ2YWw7Ci0JICAgIHVpbnQxNl90IHBlcmlvZHM7Ci0gICAgfSBpbnRlcnZhbHNbNF07Ci0gICAgLyogdWludDE2X3QgICAgcGFkOyAqLwotICAgIHVpbnQ4X3QgICAgIGJlYWNvbl9yY3BpX3NraXBfbWF4OwotICAgIHVpbnQ4X3QgICAgIHJjcGlfZGVsdGFfdGhyZXNob2xkOwotICAgIHVpbnQ4X3QgICAgIG5yOwotICAgIHVpbnQ4X3QgICAgIGV4Y2x1ZGVbMV07Ci19OwotCi0jZGVmaW5lIE1DX0ZJTFRFUl9BRERSRVNTX05VTSAgIDQKLQotc3RydWN0IHNfbG1vX2dyb3VwX2FkZHJlc3NfdGFibGUgewotICAgIHVpbnQxNl90ICAgIGZpbHRlcl9lbmFibGU7Ci0gICAgdWludDE2X3QgICAgbnVtX2FkZHJlc3M7Ci0gICAgdWludDhfdCAgICAgbWFjYWRkcl9saXN0W01DX0ZJTFRFUl9BRERSRVNTX05VTV1bNl07Ci19OwotCi1zdHJ1Y3Qgc19sbW9fdHhjYW5jZWwgewotICAgIHVpbnQzMl90IGFkZHJlc3NbMV07Ci19OwotCi0KLXN0cnVjdCBzX2xtb190eCB7Ci0gICAgdWludDhfdCAgZmxhZ3M7Ci0gICAgdWludDhfdCAgcmV0cmllczsKLSAgICB1aW50OF90ICByY3BpOwotICAgIHVpbnQ4X3QgIHNxOwotICAgIHVpbnQxNl90IHNlcWN0cmw7Ci0gICAgdWludDhfdCAgYW50ZW5uYTsKLSAgICB1aW50OF90ICBwYWQ7Ci19OwotCi1zdHJ1Y3Qgc19sbW9fYnVyc3QgewotICAgIHVpbnQ4X3QgIGZsYWdzOwotICAgIHVpbnQ4X3QgIHF1ZXVlOwotICAgIHVpbnQ4X3QgIGJhY2tsb2c7Ci0gICAgdWludDhfdCAgcGFkOwotICAgIHVpbnQxNl90IGR1cmF0aW9uc1szMl07Ci19OwotCi1zdHJ1Y3Qgc19sbW9fc3RhdHMgewotICAgIHVpbnQzMl90IHZhbGlkOwotICAgIHVpbnQzMl90IGZjczsKLSAgICB1aW50MzJfdCBhYm9ydDsKLSAgICB1aW50MzJfdCBwaHlhYm9ydDsKLSAgICB1aW50MzJfdCBydHNfc3VjY2VzczsKLSAgICB1aW50MzJfdCBydHNfZmFpbDsKLSAgICB1aW50MzJfdCB0aW1lc3RhbXA7Ci0gICAgdWludDMyX3QgdGltZV90eDsKLSAgICB1aW50MzJfdCBub2lzZWZsb29yOwotICAgIHVpbnQzMl90IHNhbXBsZV9ub2lzZVs4XTsKLSAgICB1aW50MzJfdCBzYW1wbGVfY2NhOwotICAgIHVpbnQzMl90IHNhbXBsZV90eDsKLX07Ci0KLQotc3RydWN0IHNfbG1vX2xlZCB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgbWFza1syXTsKLSAgICB1aW50MTZfdCBkZWxheS8qWzJdKi87Ci19OwotCi0KLXN0cnVjdCBzX2xtb19idF9iYWxhbmNlciB7Ci0gICAgdWludDE2X3QgcHJpb190aHJlc2g7Ci0gICAgdWludDE2X3QgYWNsX3RocmVzaDsKLX07Ci0KLQotc3RydWN0IHNfbG1vX2FycF90YWJsZSB7Ci0gICAgdWludDE2X3QgICAgZmlsdGVyX2VuYWJsZTsKLSAgICB1aW50MzJfdCAgICBpcGFkZHI7Ci19OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX19sbWFjX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCmluZGV4IDNkMmE4NGMuLmUxMzllYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCmluZGV4IDg5NjBmYTkuLjAwZmUwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwppbmRleCA3Zjk2YmNhLi4wNTE4NjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCkBAIC0xMzMyLDcgKzEzMzIsNiBAQAogICAgICAgICBmcmVlX25ldGRldihwRGV2aWNlLT5kZXYpOwogICAgIH0KIAotCWtmcmVlKHBEZXZpY2UpOwogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9kaXNjb25uZWN0My4uIFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCmluZGV4IDk0MDQ2MGMuLjEzMjY3MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBXMzVVTkQKIAl0cmlzdGF0ZSAiSVM4OUMzNSBXTEFOIFVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFVTQiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU4gJiYgVVNCICYmIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIFdpbmJvbmQgV0lGSSBjYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKaW5kZXggODk1MDcyNC4uMDY3MDgyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCkBAIC01MSwxMCArNTEsMjYgQEAKIAkubl9iaXRyYXRlcwk9IEFSUkFZX1NJWkUod2Jzb2Z0X3JhdGVzKSwKIH07CiAKK3N0YXRpYyB2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZChzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgdTE2IGJlYWNvbl9wZXJpb2QpCit7CisJdTMyIHRtcDsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuOworCisJcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gYmVhY29uX3BlcmlvZDsKKwl0bXAgPSBwSHdEYXRhLT5CZWFjb25QZXJpb2QgPDwgMTY7CisJdG1wIHw9IHBId0RhdGEtPlByb2JlRGVsYXk7CisJV2IzNVJlZ19Xcml0ZShwSHdEYXRhLCAweDA4NDgsIHRtcCk7Cit9CisKIHN0YXRpYyBpbnQgd2Jzb2Z0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXByaW50aygid2Jzb2Z0X2FkZCBpbnRlcmZhY2UgY2FsbGVkXG4iKTsKKwlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwloYWxfc2V0X2JlYWNvbl9wZXJpb2QoJnByaXYtPnNId0RhdGEsIGNvbmYtPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODMsMTAgKzk5LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgd2Jzb2Z0X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgbWNfY291bnQsCisJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXJldHVybiBtY19jb3VudDsKK30KKwogc3RhdGljIHZvaWQgd2Jzb2Z0X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCSAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKKwkJCQkgICAgdTY0IG11bHRpY2FzdCkKIHsKIAl1bnNpZ25lZCBpbnQgbmV3X2ZsYWdzOwogCkBAIC05NCw3ICsxMTYsNyBAQAogCiAJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykKIAkJbmV3X2ZsYWdzIHw9IEZJRl9QUk9NSVNDX0lOX0JTUzsKLQllbHNlIGlmICgoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB8fCAobWNfY291bnQgPiAzMikpCisJZWxzZSBpZiAoKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSkgfHwgKG11bHRpY2FzdCA+IDMyKSkKIAkJbmV3X2ZsYWdzIHw9IEZJRl9BTExNVUxUSTsKIAogCWRldi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1M7CkBAIC0xMzgsMTkgKzE2MCw2IEBACiAJV2IzNVJlZ19Xcml0ZShwSHdEYXRhLCAweDA4MjQsIHJlZy0+TTI0X01hY0NvbnRyb2wpOwogfQogCi1zdGF0aWMgdm9pZCBoYWxfc2V0X2JlYWNvbl9wZXJpb2Qoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIHUxNiBiZWFjb25fcGVyaW9kKQotewotCXUzMiB0bXA7Ci0KLQlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCi0JCXJldHVybjsKLQotCXBId0RhdGEtPkJlYWNvblBlcmlvZCA9IGJlYWNvbl9wZXJpb2Q7Ci0JdG1wID0gcEh3RGF0YS0+QmVhY29uUGVyaW9kIDw8IDE2OwotCXRtcCB8PSBwSHdEYXRhLT5Qcm9iZURlbGF5OwotCVdiMzVSZWdfV3JpdGUocEh3RGF0YSwgMHgwODQ4LCB0bXApOwotfQotCiBzdGF0aWMgdm9pZAogaGFsX3NldF9jdXJyZW50X2NoYW5uZWxfZXgoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIENoYW5JbmZvIGNoYW5uZWwpCiB7CkBAIC0yNDQsNyArMjUzLDYgQEAKIHN0YXRpYyBpbnQgd2Jzb2Z0X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiBjaGFuZ2VkKQogewogCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmZGV2LT5jb25mOwogCUNoYW5JbmZvIGNoOwogCiAJcHJpbnRrKCJ3YnNvZnRfY29uZmlnIGNhbGxlZFxuIik7CkBAIC0yNTQsNyArMjYyLDYgQEAKIAljaC5DaGFuTm8gPSAxOwogCiAJaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoJnByaXYtPnNId0RhdGEsIGNoKTsKLQloYWxfc2V0X2JlYWNvbl9wZXJpb2QoJnByaXYtPnNId0RhdGEsIGNvbmYtPmJlYWNvbl9pbnQpOwogCWhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCgmcHJpdi0+c0h3RGF0YSwgMSk7CiAJaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMoJnByaXYtPnNId0RhdGEsIDEpOwogCWhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCgmcHJpdi0+c0h3RGF0YSwgMSk7CkBAIC0yNzcsNiArMjg0LDcgQEAKIAkuYWRkX2ludGVyZmFjZQkJPSB3YnNvZnRfYWRkX2ludGVyZmFjZSwKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHdic29mdF9yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHdic29mdF9jb25maWcsCisJLnByZXBhcmVfbXVsdGljYXN0CT0gd2Jzb2Z0X3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gd2Jzb2Z0X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSB3YnNvZnRfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gd2Jzb2Z0X2dldF90eF9zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCmluZGV4IDk5NTliNjUuLmY0NDI5NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBQUklTTTJfVVNCCiAJdHJpc3RhdGUgIlByaXNtMi41LzMgVVNCIGRyaXZlciIKLQlkZXBlbmRzIG9uIFdMQU5fODAyMTEgJiYgVVNCICYmIFdJUkVMRVNTX0VYVAorCWRlcGVuZHMgb24gV0xBTiAmJiBVU0IgJiYgV0lSRUxFU1NfRVhUCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgd2xhbi1uZyBwcmlzbSAyLjUvMyBVU0IgZHJpdmVyIGZvciBhIHdpZGUgcmFuZ2Ugb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKaW5kZXggNGU4M2MyOS4uNmY4ZDhmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKQEAgLTE4MCwxNSArMTgwLDE1IEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFRIRVJNQUxfVFJJUF9DUklUSUNBTDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiY3JpdGljYWwiKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiY3JpdGljYWxcbiIpOwogCWNhc2UgVEhFUk1BTF9UUklQX0hPVDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiaG90Iik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImhvdFxuIik7CiAJY2FzZSBUSEVSTUFMX1RSSVBfUEFTU0lWRToKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAicGFzc2l2ZSIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJwYXNzaXZlXG4iKTsKIAljYXNlIFRIRVJNQUxfVFJJUF9BQ1RJVkU6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFjdGl2ZSIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJhY3RpdmVcbiIpOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgInVua25vd24iKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93blxuIik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW8uYyBiL2RyaXZlcnMvdWlvL3Vpby5jCmluZGV4IDAzZWZiMDYuLmU5NDEzNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpby5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpby5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CkBAIC02NTgsNyArNjU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fdm1fb3BzID0gewogCS5vcGVuID0gdWlvX3ZtYV9vcGVuLAogCS5jbG9zZSA9IHVpb192bWFfY2xvc2UsCiAJLmZhdWx0ID0gdWlvX3ZtYV9mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2X2dlbmlycS5jIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKaW5kZXggMDIzNDdjNS4uYWE1M2RiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKKysrIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCXJldHVybiAwOwogIGJhZDE6CiAJa2ZyZWUocHJpdik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogIGJhZDA6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBlMzg2MWIyLi5lNGVjYTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC02MDksOSArNjA5LDkgQEAKIAogCWFjbS0+dGhyb3R0bGUgPSAwOwogCi0JdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiAJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZhY20tPnBvcnQuZmxhZ3MpOwogCXJ2ID0gdHR5X3BvcnRfYmxvY2tfdGlsX3JlYWR5KCZhY20tPnBvcnQsIHR0eSwgZmlscCk7CisJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiBkb25lOgogCW11dGV4X3VubG9jaygmYWNtLT5tdXRleCk7CiBlcnJfb3V0OgpAQCAtNjg2LDE1ICs2ODYsMjEgQEAKIAogCS8qIFBlcmZvcm0gdGhlIGNsb3NpbmcgcHJvY2VzcyBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZG8gdGhlIGhhcmR3YXJlCiAJICAgc2h1dGRvd24gKi8KLQlpZiAoIWFjbSB8fCB0dHlfcG9ydF9jbG9zZV9zdGFydCgmYWNtLT5wb3J0LCB0dHksIGZpbHApID09IDApCisJaWYgKCFhY20pCiAJCXJldHVybjsKKwlpZiAodHR5X3BvcnRfY2xvc2Vfc3RhcnQoJmFjbS0+cG9ydCwgdHR5LCBmaWxwKSA9PSAwKSB7CisJCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOworCQlpZiAoIWFjbS0+ZGV2KSB7CisJCQl0dHlfcG9ydF90dHlfc2V0KCZhY20tPnBvcnQsIE5VTEwpOworCQkJYWNtX3R0eV91bnJlZ2lzdGVyKGFjbSk7CisJCQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJfQorCQltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOworCQlyZXR1cm47CisJfQogCWFjbV9wb3J0X2Rvd24oYWNtLCAwKTsKIAl0dHlfcG9ydF9jbG9zZV9lbmQoJmFjbS0+cG9ydCwgdHR5KTsKLQltdXRleF9sb2NrKCZvcGVuX211dGV4KTsKIAl0dHlfcG9ydF90dHlfc2V0KCZhY20tPnBvcnQsIE5VTEwpOwotCWlmICghYWNtLT5kZXYpCi0JCWFjbV90dHlfdW5yZWdpc3RlcihhY20pOwotCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgYWNtX3R0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCAzMzNlZTAyLi4yNDczY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBVU0JUTUNfU0laRV9JT0JVRkZFUgkyMDQ4CiAKIC8qIERlZmF1bHQgVVNCIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgKi8KLSNkZWZpbmUgVVNCVE1DX1RJTUVPVVQJCTEwCisjZGVmaW5lIFVTQlRNQ19USU1FT1VUCQk1MDAwCiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiByZWFkIGN5Y2xlcyB0byBlbXB0eSBidWxrIGluIGVuZHBvaW50IGR1cmluZyBDTEVBUiBhbmQKQEAgLTk5Myw3ICs5OTMsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSB1c2J0bWNfcmVhZCwKIAkud3JpdGUJCT0gdXNidG1jX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCAzMzM1MTMxLi5hMThlM2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjIzLDYgKzIyMyw3IEBACiBjb25maWcgVVNCX0dBREdFVF9QWEEyNVgKIAlib29sZWFuICJQWEEgMjV4IG9yIElYUCA0eHgiCiAJZGVwZW5kcyBvbiAoQVJDSF9QWEEgJiYgUFhBMjV4KSB8fCBBUkNIX0lYUDRYWAorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgIEludGVsJ3MgUFhBIDI1eCBzZXJpZXMgWFNjYWxlIEFSTS01VEUgcHJvY2Vzc29ycyBpbmNsdWRlCiAJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBUaGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggZjM3ZGUyOC4uMTY3Y2IyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTYxLDExICs2MSw2IEBACiAgKiBzaW1wbGVyLCBNaWNyb3NvZnQgcHVzaGVzIHRoZWlyIG93biBhcHByb2FjaDogUk5ESVMuICBUaGUgcHVibGlzaGVkCiAgKiBSTkRJUyBzcGVjcyBhcmUgYW1iaWd1b3VzIGFuZCBhcHBlYXIgdG8gYmUgaW5jb21wbGV0ZSwgYW5kIGFyZSBhbHNvCiAgKiBuZWVkbGVzc2x5IGNvbXBsZXguICBUaGV5IGJvcnJvdyBtb3JlIGZyb20gQ0RDIEFDTSB0aGFuIENEQyBFQ00uCi0gKgotICogV2hpbGUgQ0RDIEVDTSwgQ0RDIFN1YnNldCwgYW5kIFJORElTIGFyZSBkZXNpZ25lZCB0byBleHRlbmQgdGhlIGV0aGVybmV0Ci0gKiBpbnRlcmZhY2UgdG8gdGhlIHRhcmdldCwgQ0RDIEVFTSB3YXMgZGVzaWduZWQgdG8gdXNlIGV0aGVybmV0IG92ZXIgdGhlIFVTQgotICogbGluayBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0YXJnZXQuICBDREMgRUVNIGlzIGltcGxlbWVudGVkIGFzIGFuIGFsdGVybmF0aXZlCi0gKiB0byB0aG9zZSBvdGhlciBwcm90b2NvbHMgd2hlbiB0aGF0IGNvbW11bmljYXRpb24gbW9kZWwgaXMgbW9yZSBhcHByb3ByaWF0ZQogICovCiAKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJFdGhlcm5ldCBHYWRnZXQiCkBAIC0xNTcsOCArMTUyLDggQEAKICNkZWZpbmUgUk5ESVNfUFJPRFVDVF9OVU0JMHhhNGEyCS8qIEV0aGVybmV0L1JORElTIEdhZGdldCAqLwogCiAvKiBGb3IgRUVNIGdhZGdldHMgKi8KLSNkZWZpbmUgRUVNX1ZFTkRPUl9OVU0JMHgwNTI1CS8qIElOVkFMSUQgLSBORUVEUyBUTyBCRSBBTExPQ0FURUQgKi8KLSNkZWZpbmUgRUVNX1BST0RVQ1RfTlVNCTB4YTRhMQkvKiBJTlZBTElEIC0gTkVFRFMgVE8gQkUgQUxMT0NBVEVEICovCisjZGVmaW5lIEVFTV9WRU5ET1JfTlVNCQkweDFkNmIJLyogTGludXggRm91bmRhdGlvbiAqLworI2RlZmluZSBFRU1fUFJPRFVDVF9OVU0JCTB4MDEwMgkvKiBFRU0gR2FkZ2V0ICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwppbmRleCA0MmE3NGI4Li5mYTNkMTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCkBAIC0yMTM5LDcgKzIxMzksNyBAQAogc3RhdGljIHZvaWQgZnNsX3VkY19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAljb21wbGV0ZSh1ZGNfY29udHJvbGxlci0+ZG9uZSk7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCB1ZGNfY29udHJvbGxlci0+ZXBfcWhfc2l6ZSwKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYtPnBhcmVudCwgdWRjX2NvbnRyb2xsZXItPmVwX3FoX3NpemUsCiAJCQl1ZGNfY29udHJvbGxlci0+ZXBfcWgsIHVkY19jb250cm9sbGVyLT5lcF9xaF9kbWEpOwogCWtmcmVlKHVkY19jb250cm9sbGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCmluZGV4IGM1MmE2ODEuLjAxZWUwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwpAQCAtMTQwMiw3ICsxNDAyLDggQEAKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCByZXQgPSAwOwotCWludCBpLCByZXNfc2l6ZTsKKwlpbnQgaTsKKwlyZXNvdXJjZV9zaXplX3QgcmVzX3NpemU7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CkBAIC0xNDE2LDcgKzE0MTcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXNfc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJcmVzX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUsIHJlcy0+bmFtZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2NhdGUgJWQgYnl0ZXMgYXQgJWQgYWRkcmVzc1xuIiwKIAkJCXJlc19zaXplLCByZXMtPnN0YXJ0KTsKQEAgLTE1MjcsOCArMTUyOCw3IEBACiAJY2xrX2Rpc2FibGUoaW14X3VzYi0+Y2xrKTsKIAlpb3VubWFwKGlteF91c2ItPmJhc2UpOwogCi0JcmVsZWFzZV9tZW1fcmVnaW9uKGlteF91c2ItPnJlcy0+c3RhcnQsCi0JCWlteF91c2ItPnJlcy0+ZW5kIC0gaW14X3VzYi0+cmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbXhfdXNiLT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlteF91c2ItPnJlcykpOwogCiAJaWYgKHBkYXRhLT5leGl0KQogCQlwZGF0YS0+ZXhpdCgmcGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggYzQ0MzY3Zi4uYmYwZjY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggMjk1MDAxNS4uMmQ4NjdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC04NzUsNyArODc1LDcgQEAKIH0KIAogLyogdXNlZCBhZnRlciBlbmRwb2ludCBjb25maWd1cmF0aW9uICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcmludGVyX2lvX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcmludGVyX2lvX29wZXJhdGlvbnMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm9wZW4gPQkJcHJpbnRlcl9vcGVuLAogCS5yZWFkID0JCXByaW50ZXJfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuaAppbmRleCAwMzA4N2U3Li45YTUzN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5oCkBAIC0xMzEsMzEgKzEzMSw0OCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcjhhNjY1OTdfcmVhZF9maWZvKHN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHUxNiAqYnVmLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCQkgICAgICBpbnQgbGVuKQogeworCXVuc2lnbmVkIGxvbmcgZmlmb2FkZHIgPSByOGE2NjU5Ny0+cmVnICsgb2Zmc2V0OworCXVuc2lnbmVkIGludCBkYXRhOworCWludCBpOworCiAJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkgewotCQl1bnNpZ25lZCBsb25nIGZpZm9hZGRyID0gcjhhNjY1OTctPnJlZyArIG9mZnNldDsKLQkJdW5zaWduZWQgbG9uZyBjb3VudDsKLQkJdW5pb24gewotCQkJdW5zaWduZWQgbG9uZyBkd29yZDsKLQkJCXVuc2lnbmVkIGNoYXIgYnl0ZVs0XTsKLQkJfSBkYXRhOwotCQl1bnNpZ25lZCBjaGFyICpwYjsKLQkJaW50IGk7CisJCS8qIDMyLWJpdCBhY2Nlc3NlcyBmb3Igb25fY2hpcCBjb250cm9sbGVycyAqLwogCi0JCWNvdW50ID0gbGVuIC8gNDsKLQkJaW5zbChmaWZvYWRkciwgYnVmLCBjb3VudCk7CisJCS8qIGFsaWduZWQgYnVmIGNhc2UgKi8KKwkJaWYgKGxlbiA+PSA0ICYmICEoKHVuc2lnbmVkIGxvbmcpYnVmICYgMHgwMykpIHsKKwkJCWluc2woZmlmb2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCQlidWYgKz0gbGVuICYgfjB4MDM7CisJCQlsZW4gJj0gMHgwMzsKKwkJfQogCi0JCWlmIChsZW4gJiAweDAwMDAwMDAzKSB7Ci0JCQlkYXRhLmR3b3JkID0gaW5sKGZpZm9hZGRyKTsKLQkJCXBiID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyBjb3VudCAqIDQ7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKGxlbiAmIDB4MDAwMDAwMDMpOyBpKyspCi0JCQkJcGJbaV0gPSBkYXRhLmJ5dGVbaV07CisJCS8qIHVuYWxpZ25lZCBidWYgY2FzZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWlmICghKGkgJiAweDAzKSkKKwkJCQlkYXRhID0gaW5sKGZpZm9hZGRyKTsKKworCQkJYnVmW2ldID0gKGRhdGEgPj4gKChpICYgMHgwMykgKiA4KSkgJiAweGZmOwogCQl9CiAJfSBlbHNlIHsKLQkJbGVuID0gKGxlbiArIDEpIC8gMjsKLQkJaW5zdyhyOGE2NjU5Ny0+cmVnICsgb2Zmc2V0LCBidWYsIGxlbik7CisJCS8qIDE2LWJpdCBhY2Nlc3NlcyBmb3IgZXh0ZXJuYWwgY29udHJvbGxlcnMgKi8KKworCQkvKiBhbGlnbmVkIGJ1ZiBjYXNlICovCisJCWlmIChsZW4gPj0gMiAmJiAhKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MDEpKSB7CisJCQlpbnN3KGZpZm9hZGRyLCBidWYsIGxlbiAvIDIpOworCQkJYnVmICs9IGxlbiAmIH4weDAxOworCQkJbGVuICY9IDB4MDE7CisJCX0KKworCQkvKiB1bmFsaWduZWQgYnVmIGNhc2UgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQlpZiAoIShpICYgMHgwMSkpCisJCQkJZGF0YSA9IGludyhmaWZvYWRkcik7CisKKwkJCWJ1ZltpXSA9IChkYXRhID4+ICgoaSAmIDB4MDEpICogOCkpICYgMHhmZjsKKwkJfQogCX0KIH0KIApAQCAtMTY2LDM4ICsxODMsNDAgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHI4YTY2NTk3X3dyaXRlX2ZpZm8oc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHUxNiAqYnVmLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJCSAgICAgICBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZmlmb2FkZHIgPSByOGE2NjU5Ny0+cmVnICsgb2Zmc2V0OworCWludCBhZGogPSAwOworCWludCBpOwogCiAJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkgewotCQl1bnNpZ25lZCBsb25nIGNvdW50OwotCQl1bnNpZ25lZCBjaGFyICpwYjsKLQkJaW50IGk7Ci0KLQkJY291bnQgPSBsZW4gLyA0OwotCQlvdXRzbChmaWZvYWRkciwgYnVmLCBjb3VudCk7Ci0KLQkJaWYgKGxlbiAmIDB4MDAwMDAwMDMpIHsKLQkJCXBiID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyBjb3VudCAqIDQ7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKGxlbiAmIDB4MDAwMDAwMDMpOyBpKyspIHsKLQkJCQlpZiAocjhhNjY1OTdfcmVhZChyOGE2NjU5NywgQ0ZJRk9TRUwpICYgQklHRU5EKQotCQkJCQlvdXRiKHBiW2ldLCBmaWZvYWRkciArIGkpOwotCQkJCWVsc2UKLQkJCQkJb3V0YihwYltpXSwgZmlmb2FkZHIgKyAzIC0gaSk7Ci0JCQl9CisJCS8qIDMyLWJpdCBhY2Nlc3Mgb25seSBpZiBidWYgaXMgMzItYml0IGFsaWduZWQgKi8KKwkJaWYgKGxlbiA+PSA0ICYmICEoKHVuc2lnbmVkIGxvbmcpYnVmICYgMHgwMykpIHsKKwkJCW91dHNsKGZpZm9hZGRyLCBidWYsIGxlbiAvIDQpOworCQkJYnVmICs9IGxlbiAmIH4weDAzOworCQkJbGVuICY9IDB4MDM7CiAJCX0KIAl9IGVsc2UgewotCQlpbnQgb2RkID0gbGVuICYgMHgwMDAxOwotCi0JCWxlbiA9IGxlbiAvIDI7Ci0JCW91dHN3KGZpZm9hZGRyLCBidWYsIGxlbik7Ci0JCWlmICh1bmxpa2VseShvZGQpKSB7Ci0JCQlidWYgPSAmYnVmW2xlbl07Ci0JCQlvdXRiKCh1bnNpZ25lZCBjaGFyKSpidWYsIGZpZm9hZGRyKTsKKwkJLyogMTYtYml0IGFjY2VzcyBvbmx5IGlmIGJ1ZiBpcyAxNi1iaXQgYWxpZ25lZCAqLworCQlpZiAobGVuID49IDIgJiYgISgodW5zaWduZWQgbG9uZylidWYgJiAweDAxKSkgeworCQkJb3V0c3coZmlmb2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCQlidWYgKz0gbGVuICYgfjB4MDE7CisJCQlsZW4gJj0gMHgwMTsKIAkJfQogCX0KKworCS8qIGFkanVzdCBmaWZvIGFkZHJlc3MgaW4gdGhlIGxpdHRsZSBlbmRpYW4gY2FzZSAqLworCWlmICghKHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIENGSUZPU0VMKSAmIEJJR0VORCkpIHsKKwkJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkKKwkJCWFkaiA9IDB4MDM7IC8qIDMyLWJpdCB3aWRlICovCisJCWVsc2UKKwkJCWFkaiA9IDB4MDE7IC8qIDE2LWJpdCB3aWRlICovCisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlvdXRiKGJ1ZltpXSwgZmlmb2FkZHIgKyBhZGogLSAoaSAmIGFkaikpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcjhhNjY1OTdfbWRmeShzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwppbmRleCAzZWEwNTkzLi5iMjVjZGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtMTQwMCw2ICsxNDAwLDEwIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlwZXJpb2QgPSB1cmItPmludGVydmFsOworCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCisJCXBlcmlvZCA8PD0gMzsKKwogCW5vdyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KSAlIG1vZDsKIAogCS8qIHdoZW4ncyB0aGUgbGFzdCB1ZnJhbWUgdGhpcyB1cmIgY291bGQgc3RhcnQ/ICovCkBAIC0xNDE3LDE0ICsxNDIxLDE1IEBACiAKIAkJLyogRmVsbCBiZWhpbmQgKGJ5IHVwIHRvIHR3aWNlIHRoZSBzbG9wIGFtb3VudCk/ICovCiAJCWlmIChzdGFydCA+PSBtYXggLSAyICogOCAqIFNDSEVEVUxFX1NMT1ApCi0JCQlzdGFydCArPSBzdHJlYW0tPmludGVydmFsICogRElWX1JPVU5EX1VQKAotCQkJCQltYXggLSBzdGFydCwgc3RyZWFtLT5pbnRlcnZhbCkgLSBtb2Q7CisJCQlzdGFydCArPSBwZXJpb2QgKiBESVZfUk9VTkRfVVAoCisJCQkJCW1heCAtIHN0YXJ0LCBwZXJpb2QpIC0gbW9kOwogCiAJCS8qIFRyaWVkIHRvIHNjaGVkdWxlIHRvbyBmYXIgaW50byB0aGUgZnV0dXJlPyAqLwogCQlpZiAodW5saWtlbHkoKHN0YXJ0ICsgc2NoZWQtPnNwYW4pID49IG1heCkpIHsKIAkJCXN0YXR1cyA9IC1FRkJJRzsKIAkJCWdvdG8gZmFpbDsKIAkJfQorCQlzdHJlYW0tPm5leHRfdWZyYW1lID0gc3RhcnQ7CiAJCWdvdG8gcmVhZHk7CiAJfQogCkBAIC0xNDQwLDEwICsxNDQ1LDYgQEAKIAogCS8qIE5PVEU6ICBhc3N1bWVzIFVSQl9JU09fQVNBUCwgdG8gbGltaXQgY29tcGxleGl0eS9idWdzICovCiAKLQlwZXJpb2QgPSB1cmItPmludGVydmFsOwotCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCi0JCXBlcmlvZCA8PD0gMzsKLQogCS8qIGZpbmQgYSB1ZnJhbWUgc2xvdCB3aXRoIGVub3VnaCBiYW5kd2lkdGggKi8KIAlmb3IgKDsgc3RhcnQgPCAoc3RyZWFtLT5uZXh0X3VmcmFtZSArIHBlcmlvZCk7IHN0YXJ0KyspIHsKIAkJaW50CQllbm91Z2hfc3BhY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKaW5kZXggZTM1ZDgyOC4uNWM3NzRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpAQCAtMjI4NCwxMCArMjI4NCwxMCBAQAogCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiSVNQMTM2MiBNZW1vcnkgdXNhZ2U6XG4iKTsKIAlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSVNUTDogICAgMiAqICU0ZDogICAgICU0ZCBAICQlMDR4OiQlMDR4XG4iLAogCQkgaXN0bF9zaXplIC8gMiwgaXN0bF9zaXplLCAwLCBpc3RsX3NpemUgLyAyKTsKLQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSU5UTDogJTRkICogKCUzdSs4KTogICU0ZCBAICQlMDR4XG4iLAorCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBJTlRMOiAlNGQgKiAoJTNsdSs4KTogICU0ZCBAICQlMDR4XG4iLAogCQkgSVNQMTM2Ml9JTlRMX0JVRkZFUlMsIGludGxfYmxrc2l6ZSAtIFBURF9IRUFERVJfU0laRSwKIAkJIGludGxfc2l6ZSwgaXN0bF9zaXplKTsKLQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgQVRMIDogJTRkICogKCUzdSs4KTogICU0ZCBAICQlMDR4XG4iLAorCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBBVEwgOiAlNGQgKiAoJTNsdSs4KTogICU0ZCBAICQlMDR4XG4iLAogCQkgYXRsX2J1ZmZlcnMsIGF0bF9ibGtzaXplIC0gUFREX0hFQURFUl9TSVpFLAogCQkgYXRsX3NpemUsIGlzdGxfc2l6ZSArIGludGxfc2l6ZSk7CiAJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIFVTRUQvRlJFRTogICAlNGQgICAgICAlNGRcbiIsIHRvdGFsLApAQCAtMjY3NywxMiArMjY3NywxMiBAQAogCURCRygwLCAiJXM6IFJlbW92aW5nIEhDRFxuIiwgX19mdW5jX18pOwogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgKHUzMilpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICVwXG4iLCBfX2Z1bmNfXywKKwkgICAgaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKIAlpb3VubWFwKGlzcDEzNjJfaGNkLT5kYXRhX3JlZyk7CiAKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgKHUzMilpc3AxMzYyX2hjZC0+YWRkcl9yZWcpOworCURCRygwLCAiJXM6IFVubWFwcGluZyBhZGRyX3JlZyBAICVwXG4iLCBfX2Z1bmNfXywKKwkgICAgaXNwMTM2Ml9oY2QtPmFkZHJfcmVnKTsKIAlpb3VubWFwKGlzcDEzNjJfaGNkLT5hZGRyX3JlZyk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwpAQCAtMjgxMCwxNiArMjgxMCwxNiBAQAogCXJldHVybiAwOwogCiAgZXJyNjoKLQlEQkcoMCwgIiVzOiBGcmVlaW5nIGRldiAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilpc3AxMzYyX2hjZCk7CisJREJHKDAsICIlczogRnJlZWluZyBkZXYgJXBcbiIsIF9fZnVuY19fLCBpc3AxMzYyX2hjZCk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKICBlcnI1OgotCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICUwOHhcbiIsIF9fZnVuY19fLCAodTMyKWRhdGFfcmVnKTsKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlcFxuIiwgX19mdW5jX18sIGRhdGFfcmVnKTsKIAlpb3VubWFwKGRhdGFfcmVnKTsKICBlcnI0OgogCURCRygwLCAiJXM6IFJlbGVhc2luZyBtZW0gcmVnaW9uICUwOGx4XG4iLCBfX2Z1bmNfXywgKGxvbmcgdW5zaWduZWQgaW50KWRhdGEtPnN0YXJ0KTsKIAlyZWxlYXNlX21lbV9yZWdpb24oZGF0YS0+c3RhcnQsIHJlc291cmNlX2xlbihkYXRhKSk7CiAgZXJyMzoKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilhZGRyX3JlZyk7CisJREJHKDAsICIlczogVW5tYXBwaW5nIGFkZHJfcmVnIEAgJXBcbiIsIF9fZnVuY19fLCBhZGRyX3JlZyk7CiAJaW91bm1hcChhZGRyX3JlZyk7CiAgZXJyMjoKIAlEQkcoMCwgIiVzOiBSZWxlYXNpbmcgbWVtIHJlZ2lvbiAlMDhseFxuIiwgX19mdW5jX18sIChsb25nIHVuc2lnbmVkIGludClhZGRyLT5zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCmluZGV4IGZlNjBmNjIuLjFhMjUzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCkBAIC01ODAsNyArNTgwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIEFMSUdOU1RBVChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB2b2lkICpwdHIpCiB7Ci0JdW5zaWduZWQgcCA9ICh1bnNpZ25lZClwdHI7CisJdW5zaWduZWQgbG9uZyBwID0gKHVuc2lnbmVkIGxvbmcpcHRyOwogCWlmICghKHAgJiAweGYpKQogCQlpc3AxMzYyX2hjZC0+c3RhdDE2Kys7CiAJZWxzZSBpZiAoIShwICYgMHg3KSkKQEAgLTc3MCw3ICs3NzAsNyBAQAogCWlmICghbGVuKQogCQlyZXR1cm47CiAKLQlpZiAoKHVuc2lnbmVkKWRwICYgMHgxKSB7CisJaWYgKCh1bnNpZ25lZCBsb25nKWRwICYgMHgxKSB7CiAJCS8qIG5vdCBhbGlnbmVkICovCiAJCWZvciAoOyBsZW4gPiAxOyBsZW4gLT0gMikgewogCQkJZGF0YSA9ICpkcCsrOwpAQCAtOTYyLDggKzk2Miw4IEBACiAKIAlpc3AxMzYyX3dyaXRlX2RpcmFkZHIoaXNwMTM2Ml9oY2QsIG9mZnNldCwgbGVuKTsKIAotCURCRygzLCAiJXM6IFJlYWRpbmcgJWQgYnl0ZSBmcm9tIGJ1ZmZlciBAJTA0eCB0byBtZW1vcnkgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgbGVuLCBvZmZzZXQsICh1MzIpYnVmKTsKKwlEQkcoMywgIiVzOiBSZWFkaW5nICVkIGJ5dGUgZnJvbSBidWZmZXIgQCUwNHggdG8gbWVtb3J5IEAgJXBcbiIsCisJICAgIF9fZnVuY19fLCBsZW4sIG9mZnNldCwgYnVmKTsKIAogCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQsIEhDdVBJTlRfRU9UKTsKIAlfV0FSTl9PTigoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfRU9UKSk7CkBAIC05ODIsOCArOTgyLDggQEAKIAogCWlzcDEzNjJfd3JpdGVfZGlyYWRkcihpc3AxMzYyX2hjZCwgb2Zmc2V0LCBsZW4pOwogCi0JREJHKDMsICIlczogV3JpdGluZyAlZCBieXRlIHRvIGJ1ZmZlciBAJTA0eCBmcm9tIG1lbW9yeSBAICUwOHhcbiIsIF9fZnVuY19fLAotCSAgICBsZW4sIG9mZnNldCwgKHUzMilidWYpOworCURCRygzLCAiJXM6IFdyaXRpbmcgJWQgYnl0ZSB0byBidWZmZXIgQCUwNHggZnJvbSBtZW1vcnkgQCAlcFxuIiwKKwkgICAgX19mdW5jX18sIGxlbiwgb2Zmc2V0LCBidWYpOwogCiAJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgSEN1UElOVF9FT1QpOwogCV9XQVJOX09OKChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCA3OGJiNzcxLi4yNGViNzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC04Nyw2ICs4Nyw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHZvaWQgcXVpcmtfYW1kX3BsbChpbnQgc3RhdGUpOwogc3RhdGljIHZvaWQgYW1kX2lzb19kZXZfcHV0KHZvaWQpOworc3RhdGljIHZvaWQgc2I4MDBfcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpLCBpbnQgb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBxdWlya19hbWRfcGxsKGludCBzdGF0ZSkKIHsKQEAgLTk2LDYgKzk3LDEwIEBACiB7CiAJcmV0dXJuOwogfQorc3RhdGljIGlubGluZSB2b2lkIHNiODAwX3ByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IG9uKQoreworCXJldHVybjsKK30KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwppbmRleCBkMmJhMDRkLi5iOGExMTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCkBAIC0xNzcsNiArMTc3LDEzIEBACiAJCXJldHVybiAwOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKKworCS8qIFNCODAwIG5lZWRzIHByZS1mZXRjaCBmaXggKi8KKwlpZiAoKHJldiA+PSAweDQwKSAmJiAocmV2IDw9IDB4NGYpKSB7CisJCW9oY2ktPmZsYWdzIHw9IE9IQ0lfUVVJUktfQU1EX1BSRUZFVENIOworCQlvaGNpX2RiZyhvaGNpLCAiZW5hYmxlZCBBTUQgcHJlZmV0Y2ggcXVpcmtcbiIpOworCX0KKwogCWlmICgocmV2ID4gMHgzYikgfHwgKHJldiA8IDB4MzApKSB7CiAJCXBjaV9kZXZfcHV0KGFtZF9zbWJ1c19kZXYpOwogCQlhbWRfc21idXNfZGV2ID0gTlVMTDsKQEAgLTI2Miw2ICsyNjksMTkgQEAKIAogfQogCitzdGF0aWMgdm9pZCBzYjgwMF9wcmVmZXRjaChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBvbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1MTYgbWlzYzsKKworCXBkZXYgPSB0b19wY2lfZGV2KG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsICZtaXNjKTsKKwlpZiAob24gPT0gMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsIG1pc2MgJiAweGZjZmYpOworCWVsc2UKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsIG1pc2MgfCAweDAzMDApOworfQorCiAvKiBMaXN0IG9mIHF1aXJrcyBmb3IgT0hDSSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9oY2lfcGNpX3F1aXJrc1tdID0gewogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBiNTI5NGE5Li5mMWMwNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC00ODEsMzggKzQ4MSw0NyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYJQ09ORklHX1BNCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgcHhhMjd4X29oY2kgKm9oY2kgPSB0b19weGEyN3hfb2hjaShoY2QpOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm9oY2kubmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKIAlvaGNpLT5vaGNpLm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOwogCi0JcHhhMjd4X3N0b3BfaGMob2hjaSwgJnBkZXYtPmRldik7CisJcHhhMjd4X3N0b3BfaGMob2hjaSwgZGV2KTsKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHB4YTI3eF9vaGNpICpvaGNpID0gdG9fcHhhMjd4X29oY2koaGNkKTsKKwlzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhICppbmYgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJaW50IHN0YXR1czsKIAogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5vaGNpLm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CiAJb2hjaS0+b2hjaS5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKIAotCWlmICgoc3RhdHVzID0gcHhhMjd4X3N0YXJ0X2hjKG9oY2ksICZwZGV2LT5kZXYpKSA8IDApCisJaWYgKChzdGF0dXMgPSBweGEyN3hfc3RhcnRfaGMob2hjaSwgZGV2KSkgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCisJLyogU2VsZWN0IFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAqLworCXB4YTI3eF9vaGNpX3NlbGVjdF9wbW0ob2hjaSwgaW5mLT5wb3J0X21vZGUpOworCiAJb2hjaV9maW5pc2hfY29udHJvbGxlcl9yZXN1bWUoaGNkKTsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG9oY2lfaGNkX3B4YTI3eF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwKK307CiAjZW5kaWYKIAogLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCkBAIC01MjIsMTMgKzUzMSwxMiBAQAogCS5wcm9iZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUsCiAJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLAotI2VuZGlmCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTI3eC1vaGNpIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZvaGNpX2hjZF9weGEyN3hfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCmluZGV4IDE2ZmVjYjguLjM1Mjg4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwpAQCAtNDksOSArNDksMTIgQEAKIAlzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgewogCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKIAkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOwotCQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwCi0JCQkJJiYgcXVpcmtfYW1kaXNvKG9oY2kpKQotCQkJcXVpcmtfYW1kX3BsbCgxKTsKKwkJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMCkgeworCQkJaWYgKHF1aXJrX2FtZGlzbyhvaGNpKSkKKwkJCQlxdWlya19hbWRfcGxsKDEpOworCQkJaWYgKHF1aXJrX2FtZHByZWZldGNoKG9oY2kpKQorCQkJCXNiODAwX3ByZWZldGNoKG9oY2ksIDApOworCQl9CiAJCWJyZWFrOwogCWNhc2UgUElQRV9JTlRFUlJVUFQ6CiAJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOwpAQCAtNjgwLDkgKzY4MywxMiBAQAogCQkJCWRhdGEgKyB1cmItPmlzb19mcmFtZV9kZXNjIFtjbnRdLm9mZnNldCwKIAkJCQl1cmItPmlzb19mcmFtZV9kZXNjIFtjbnRdLmxlbmd0aCwgdXJiLCBjbnQpOwogCQl9Ci0JCWlmIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDAKLQkJCQkmJiBxdWlya19hbWRpc28ob2hjaSkpCi0JCQlxdWlya19hbWRfcGxsKDApOworCQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwKSB7CisJCQlpZiAocXVpcmtfYW1kaXNvKG9oY2kpKQorCQkJCXF1aXJrX2FtZF9wbGwoMCk7CisJCQlpZiAocXVpcmtfYW1kcHJlZmV0Y2gob2hjaSkpCisJCQkJc2I4MDBfcHJlZmV0Y2gob2hjaSwgMSk7CisJCX0KIAkJcGVyaW9kaWMgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKysgPT0gMAogCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzID09IDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAppbmRleCAyMjIwMTFmLi41YmYxNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaApAQCAtNDAyLDYgKzQwMiw3IEBACiAjZGVmaW5lCU9IQ0lfUVVJUktfRlJBTUVfTk8JMHg4MAkJCS8qIG5vIGJpZyBlbmRpYW4gZnJhbWVfbm8gc2hpZnQgKi8KICNkZWZpbmUJT0hDSV9RVUlSS19IVUJfUE9XRVIJMHgxMDAJCQkvKiBkaXN0cnVzdCBmaXJtd2FyZSBwb3dlci9vYyBzZXR1cCAqLwogI2RlZmluZQlPSENJX1FVSVJLX0FNRF9JU08JMHgyMDAJCQkvKiBJU08gdHJhbnNmZXJzKi8KKyNkZWZpbmUJT0hDSV9RVUlSS19BTURfUFJFRkVUQ0gJMHg0MDAJCQkvKiBwcmUtZmV0Y2ggZm9yIElTTyB0cmFuc2ZlciAqLwogCS8vIHRoZXJlIGFyZSBhbHNvIGNoaXAgcXVpcmtzL2J1Z3MgaW4gaW5pdCBsb2dpYwogCiAJc3RydWN0IHdvcmtfc3RydWN0CW5lY193b3JrOwkvKiBXb3JrZXIgZm9yIE5FQyBxdWlyayAqLwpAQCAtNDMzLDYgKzQzNCwxMCBAQAogewogCXJldHVybiBvaGNpLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1EX0lTTzsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHF1aXJrX2FtZHByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlyZXR1cm4gb2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRF9QUkVGRVRDSDsKK30KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBxdWlya19uZWMoc3RydWN0IG9oY2lfaGNkICpvaGNpKQogewpAQCAtNDQ2LDYgKzQ1MSwxMCBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBpbnQgcXVpcmtfYW1kcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCXJldHVybiAwOworfQogI2VuZGlmCiAKIC8qIGNvbnZlcnQgYmV0d2VlbiBhbiBoY2QgcG9pbnRlciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb2hjaV9oY2QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggMjNjZjNiZC4uODNiNWY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTQ3NSw0ICs0NzUsNCBAQAogCWVsc2UgaWYgKHBkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCX1hIQ0kpCiAJCXF1aXJrX3VzYl9oYW5kb2ZmX3hoY2kocGRldik7CiB9Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKaW5kZXggNzQ5YjUzNy4uZTMzZDM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCkBAIC0xMDAzLDE5ICsxMDAzLDIwIEBACiAJaWYgKHN5c3N0cyA9PSBTRTApIHsKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5BVFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwogCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBBVFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKLQkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmIChzeXNzdHMgPT0gRlNfSlNUUykKKwkJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOworCQllbHNlIGlmIChzeXNzdHMgPT0gTFNfSlNUUykKKwkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOworCisJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOworCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBEVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCisJCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogCX0KIAotCWlmIChzeXNzdHMgPT0gRlNfSlNUUykKLQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7Ci0JZWxzZSBpZiAoc3lzc3RzID09IExTX0pTVFMpCi0JCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOwotCi0JcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5EVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7Ci0JcjhhNjY1OTdfYnNldChyOGE2NjU5NywgRFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKLQotCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKLQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyhyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwpAQCAtMTAyNCw2ICsxMDI1LDggQEAKIAl1MTYgc3BlZWQgPSBnZXRfcmhfdXNiX3NwZWVkKHI4YTY2NTk3LCBwb3J0KTsKIAlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKIAorCXJoLT5wb3J0ICY9IH4oKDEgPDwgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpIHwKKwkJICAgICAgKDEgPDwgVVNCX1BPUlRfRkVBVF9MT1dTUEVFRCkpOwogCWlmIChzcGVlZCA9PSBIU01PREUpCiAJCXJoLT5wb3J0IHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKTsKIAllbHNlIGlmIChzcGVlZCA9PSBMU01PREUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKaW5kZXggYzYzMjQzNy4uNTYyZWJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYwpAQCAtMTE1LDYgKzExNSwxMCBAQAogCQlpZiAoc3RhdHVzICYgUVREX1NUU19IQUxURUQpIHsKIAkJCS8qIFVnLCBhbiBlcnJvci4gKi8KIAkJCXByb2Nlc3NfaGFsdGVkX3F0ZCh3aGMsIHFzZXQsIHRkKTsKKwkJCS8qIEEgaGFsdGVkIHFURCBhbHdheXMgdHJpZ2dlcnMgYW4gdXBkYXRlCisJCQkgICBiZWNhdXNlIHRoZSBxc2V0IHdhcyBlaXRoZXIgcmVtb3ZlZCBvcgorCQkJICAgcmVhY3RpdmF0ZWQuICovCisJCQl1cGRhdGUgfD0gV0hDX1VQREFURV9VUERBVEVEOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTMwNSw2ICszMDksNyBAQAogCXN0cnVjdCB3aGNfdXJiICp3dXJiID0gdXJiLT5oY3ByaXY7CiAJc3RydWN0IHdoY19xc2V0ICpxc2V0ID0gd3VyYi0+cXNldDsKIAlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKwlib29sIGhhc19xdGQgPSBmYWxzZTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTMxNSwxNyArMzIwLDIxIEBACiAJCWdvdG8gb3V0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0ZCwgdCwgJnFzZXQtPnN0ZHMsIGxpc3Rfbm9kZSkgewotCQlpZiAoc3RkLT51cmIgPT0gdXJiKQorCQlpZiAoc3RkLT51cmIgPT0gdXJiKSB7CisJCQlpZiAoc3RkLT5xdGQpCisJCQkJaGFzX3F0ZCA9IHRydWU7CiAJCQlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCXN0ZC0+cXRkID0gTlVMTDsgLyogc28gdGhpcyBzdGQgaXMgcmUtYWRkZWQgd2hlbiB0aGUgcXNldCBpcyAqLwogCX0KIAotCWFzbF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOwotCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKLQl3dXJiLT5pc19hc3luYyA9IHRydWU7Ci0JcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7Ci0KKwlpZiAoaGFzX3F0ZCkgeworCQlhc2xfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJd3VyYi0+c3RhdHVzID0gc3RhdHVzOworCQl3dXJiLT5pc19hc3luYyA9IHRydWU7CisJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOworCX0gZWxzZQorCQlxc2V0X3JlbW92ZV91cmIod2hjLCBxc2V0LCB1cmIsIHN0YXR1cyk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9kZWJ1Zy5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKaW5kZXggY2YyZDQ1OS4uMjI3M2M4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwemxfcHJpbnQsIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGlfZm9wcyA9IHsKIAkub3BlbiAgICA9IGRpX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKQEAgLTE0Miw3ICsxNDIsNyBAQAogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhc2xfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzbF9mb3BzID0gewogCS5vcGVuICAgID0gYXNsX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKQEAgLTE1MCw3ICsxNTAsNyBAQAogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwemxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB6bF9mb3BzID0gewogCS5vcGVuICAgID0gcHpsX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwppbmRleCBhOWUwNWJhLi4wZGIzZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCkBAIC0xMjEsNiArMTIxLDEwIEBACiAJCWlmIChzdGF0dXMgJiBRVERfU1RTX0hBTFRFRCkgewogCQkJLyogVWcsIGFuIGVycm9yLiAqLwogCQkJcHJvY2Vzc19oYWx0ZWRfcXRkKHdoYywgcXNldCwgdGQpOworCQkJLyogQSBoYWx0ZWQgcVREIGFsd2F5cyB0cmlnZ2VycyBhbiB1cGRhdGUKKwkJCSAgIGJlY2F1c2UgdGhlIHFzZXQgd2FzIGVpdGhlciByZW1vdmVkIG9yCisJCQkgICByZWFjdGl2YXRlZC4gKi8KKwkJCXVwZGF0ZSB8PSBXSENfVVBEQVRFX1VQREFURUQ7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMzMzLDYgKzMzNyw3IEBACiAJc3RydWN0IHdoY191cmIgKnd1cmIgPSB1cmItPmhjcHJpdjsKIAlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQgPSB3dXJiLT5xc2V0OwogCXN0cnVjdCB3aGNfc3RkICpzdGQsICp0OworCWJvb2wgaGFzX3F0ZCA9IGZhbHNlOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzQzLDE3ICszNDgsMjIgQEAKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RkLCB0LCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7Ci0JCWlmIChzdGQtPnVyYiA9PSB1cmIpCisJCWlmIChzdGQtPnVyYiA9PSB1cmIpIHsKKwkJCWlmIChzdGQtPnF0ZCkKKwkJCQloYXNfcXRkID0gdHJ1ZTsKIAkJCXFzZXRfZnJlZV9zdGQod2hjLCBzdGQpOwotCQllbHNlCisJCX0gZWxzZQogCQkJc3RkLT5xdGQgPSBOVUxMOyAvKiBzbyB0aGlzIHN0ZCBpcyByZS1hZGRlZCB3aGVuIHRoZSBxc2V0IGlzICovCiAJfQogCi0JcHpsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7Ci0Jd3VyYi0+c3RhdHVzID0gc3RhdHVzOwotCXd1cmItPmlzX2FzeW5jID0gZmFsc2U7Ci0JcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7Ci0KKwlpZiAoaGFzX3F0ZCkgeworCQlwemxfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJdXBkYXRlX3B6bF9od192aWV3KHdoYyk7CisJCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKKwkJd3VyYi0+aXNfYXN5bmMgPSBmYWxzZTsKKwkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7CisJfSBlbHNlCisJCXFzZXRfcmVtb3ZlX3VyYih3aGMsIHFzZXQsIHVyYiwgc3RhdHVzKTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCmluZGV4IDk5OTExZTcuLjkzMmY5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKQEAgLTMzNSw2ICszMzUsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOwogCXhoY2lfZGJnKHhoY2ksICJvcCByZWcgc3RhdHVzID0gMHgleFxuIiwgdGVtcCk7CisJaWYgKHRlbXAgPT0gMHhmZmZmZmZmZikgeworCQl4aGNpX2RiZyh4aGNpLCAiSFcgZGllZCwgcG9sbGluZyBzdG9wcGVkLlxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAl4aGNpX2RiZyh4aGNpLCAiaXJfc2V0IDAgcGVuZGluZyA9IDB4JXhcbiIsIHRlbXApOwogCXhoY2lfZGJnKHhoY2ksICJOby1vcCBjb21tYW5kcyBoYW5kbGVkID0gJWRcbiIsIHhoY2ktPm5vb3BzX2hhbmRsZWQpOwpAQCAtNzc2LDYgKzc4Miw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OworCXUzMiB0ZW1wOwogCXN0cnVjdCB4aGNpX2hjZCAqeGhjaTsKIAlzdHJ1Y3QgeGhjaV90ZCAqdGQ7CiAJdW5zaWduZWQgaW50IGVwX2luZGV4OwpAQCAtNzg4LDYgKzc5NSwxNyBAQAogCXJldCA9IHVzYl9oY2RfY2hlY2tfdW5saW5rX3VyYihoY2QsIHVyYiwgc3RhdHVzKTsKIAlpZiAocmV0IHx8ICF1cmItPmhjcHJpdikKIAkJZ290byBkb25lOworCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOworCWlmICh0ZW1wID09IDB4ZmZmZmZmZmYpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIkhXIGRpZWQsIGZyZWVpbmcgVEQuXG4iKTsKKwkJdGQgPSAoc3RydWN0IHhoY2lfdGQgKikgdXJiLT5oY3ByaXY7CisKKwkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHhoY2lfdG9faGNkKHhoY2kpLCB1cmIsIC1FU0hVVERPV04pOworCQlrZnJlZSh0ZCk7CisJCXJldHVybiByZXQ7CisJfQogCiAJeGhjaV9kYmcoeGhjaSwgIkNhbmNlbCBVUkIgJXBcbiIsIHVyYik7CiAJeGhjaV9kYmcoeGhjaSwgIkV2ZW50IHJpbmc6XG4iKTsKQEAgLTg3Nyw3ICs4OTUsNyBAQAogCWN0cmxfY3R4LT5kcm9wX2ZsYWdzIHw9IGRyb3BfZmxhZzsKIAluZXdfZHJvcF9mbGFncyA9IGN0cmxfY3R4LT5kcm9wX2ZsYWdzOwogCi0JY3RybF9jdHgtPmFkZF9mbGFncyA9IH5kcm9wX2ZsYWc7CisJY3RybF9jdHgtPmFkZF9mbGFncyAmPSB+ZHJvcF9mbGFnOwogCW5ld19hZGRfZmxhZ3MgPSBjdHJsX2N0eC0+YWRkX2ZsYWdzOwogCiAJbGFzdF9jdHggPSB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQoY3RybF9jdHgtPmFkZF9mbGFncyk7CkBAIC0xNDEwLDExICsxNDI4LDIwIEBACiB7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdGF0ZTsKIAogCWlmICh1ZGV2LT5zbG90X2lkID09IDApCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJLyogRG9uJ3QgZGlzYWJsZSB0aGUgc2xvdCBpZiB0aGUgaG9zdCBjb250cm9sbGVyIGlzIGRlYWQuICovCisJc3RhdGUgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOworCWlmIChzdGF0ZSA9PSAweGZmZmZmZmZmKSB7CisJCXhoY2lfZnJlZV92aXJ0X2RldmljZSh4aGNpLCB1ZGV2LT5zbG90X2lkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHhoY2lfcXVldWVfc2xvdF9jb250cm9sKHhoY2ksIFRSQl9ESVNBQkxFX1NMT1QsIHVkZXYtPnNsb3RfaWQpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FOiBhbGxvY2F0ZSBhIGNvbW1hbmQgcmluZyBzZWdtZW50XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCAxZGI0ZmVhLi5iOGZkMjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC04MDIsOSArODAyLDExIEBACiAJaW50IGk7CiAKIAkvKiBGcmVlIHRoZSBFdmVudCBSaW5nIFNlZ21lbnQgVGFibGUgYW5kIHRoZSBhY3R1YWwgRXZlbnQgUmluZyAqLwotCXhoY2lfd3JpdGVsKHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3Rfc2l6ZSk7Ci0JeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2Jhc2UpOwotCXhoY2lfd3JpdGVfNjQoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9kZXF1ZXVlKTsKKwlpZiAoeGhjaS0+aXJfc2V0KSB7CisJCXhoY2lfd3JpdGVsKHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3Rfc2l6ZSk7CisJCXhoY2lfd3JpdGVfNjQoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9iYXNlKTsKKwkJeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOworCX0KIAlzaXplID0gc2l6ZW9mKHN0cnVjdCB4aGNpX2Vyc3RfZW50cnkpKih4aGNpLT5lcnN0Lm51bV9lbnRyaWVzKTsKIAlpZiAoeGhjaS0+ZXJzdC5lbnRyaWVzKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemUsCkBAIC04NDEsOSArODQzLDkgQEAKIAkJCQl4aGNpLT5kY2JhYSwgeGhjaS0+ZGNiYWEtPmRtYSk7CiAJeGhjaS0+ZGNiYWEgPSBOVUxMOwogCisJc2NyYXRjaHBhZF9mcmVlKHhoY2kpOwogCXhoY2ktPnBhZ2Vfc2l6ZSA9IDA7CiAJeGhjaS0+cGFnZV9zaGlmdCA9IDA7Ci0Jc2NyYXRjaHBhZF9mcmVlKHhoY2kpOwogfQogCiBpbnQgeGhjaV9tZW1faW5pdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IGZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggMTczYzM5Yy4uODIxYjdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC04NjQsOSArODY0LDExIEBACiAJY3VyX3NlZyA9IHN0YXJ0X3NlZzsKIAogCWRvIHsKKwkJaWYgKHN0YXJ0X2RtYSA9PSAwKQorCQkJcmV0dXJuIDA7CiAJCS8qIFdlIG1heSBnZXQgYW4gZXZlbnQgZm9yIGEgTGluayBUUkIgaW4gdGhlIG1pZGRsZSBvZiBhIFREICovCiAJCWVuZF9zZWdfZG1hID0geGhjaV90cmJfdmlydF90b19kbWEoY3VyX3NlZywKLQkJCQkmc3RhcnRfc2VnLT50cmJzW1RSQlNfUEVSX1NFR01FTlQgLSAxXSk7CisJCQkJJmN1cl9zZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVCAtIDFdKTsKIAkJLyogSWYgdGhlIGVuZCBUUkIgaXNuJ3QgaW4gdGhpcyBzZWdtZW50LCB0aGlzIGlzIHNldCB0byAwICovCiAJCWVuZF90cmJfZG1hID0geGhjaV90cmJfdmlydF90b19kbWEoY3VyX3NlZywgZW5kX3RyYik7CiAKQEAgLTg5Myw4ICs4OTUsOSBAQAogCQl9CiAJCWN1cl9zZWcgPSBjdXJfc2VnLT5uZXh0OwogCQlzdGFydF9kbWEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYShjdXJfc2VnLCAmY3VyX3NlZy0+dHJic1swXSk7Ci0JfSB3aGlsZSAoMSk7CisJfSB3aGlsZSAoY3VyX3NlZyAhPSBzdGFydF9zZWcpOwogCisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwppbmRleCBkNjQ1ZjM4Li4zMmQwMTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKQEAgLTQyOSw4ICs0MjksNyBAQAogCXJldHVybiByZWFkX2NvdW50OwogfQogCi1zdGF0aWMgc3RydWN0Ci1maWxlX29wZXJhdGlvbnMgdXNiX3Jpb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX3Jpb19mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkID0JCXJlYWRfcmlvLAogCS53cml0ZSA9CXdyaXRlX3JpbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jCmluZGV4IDI3M2RlNWQuLjBhYjk5MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAKICNpbmNsdWRlICJzaXN1c2IuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKaW5kZXggMjkwOTJiOC4uNGZiMTIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCkBAIC0zMTMsNyArMzEzLDggQEAKIAogCWlmIChsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSAweDAwMDEpIHsKIAkJZGV2X3dhcm4oJmludGVyZmFjZS0+ZGV2LCAiVVNCTENEIG1vZGVsIG5vdCBzdXBwb3J0ZWQuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CiAJfQogCQogCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCmluZGV4IGRmZGM0M2UuLjEwZjMyMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwpAQCAtMzQ4LDEyICszNDgsMTIgQEAKIAogLyoKICAqIFJldHVybiBhIGZldyAoa2lsby0pYnl0ZXMgdG8gdGhlIGhlYWQgb2YgdGhlIGJ1ZmZlci4KLSAqIFRoaXMgaXMgdXNlZCBpZiBhIERNQSBmZXRjaCBmYWlscy4KKyAqIFRoaXMgaXMgdXNlZCBpZiBhIGRhdGEgZmV0Y2ggZmFpbHMuCiAgKi8KIHN0YXRpYyB2b2lkIG1vbl9idWZmX2FyZWFfc2hyaW5rKHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsIHVuc2lnbmVkIGludCBzaXplKQogewogCi0Jc2l6ZSA9IChzaXplICsgUEtUX0FMSUdOLTEpICYgfihQS1RfQUxJR04tMSk7CisJLyogc2l6ZSAmPSB+KFBLVF9BTElHTi0xKTsgIC0tIHdlJ3JlIGNhbGxlZCB3aXRoIGFsaWduZWQgc2l6ZSAqLwogCXJwLT5iX2NudCAtPSBzaXplOwogCWlmIChycC0+Yl9pbiA8IHNpemUpCiAJCXJwLT5iX2luICs9IHJwLT5iX3NpemU7CkBAIC00MzMsNiArNDMzLDcgQEAKIAl1bnNpZ25lZCBpbnQgdXJiX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IGRlbHRhOwogCXVuc2lnbmVkIGludCBuZGVzYywgbGVuZGVzYzsKIAl1bnNpZ25lZCBjaGFyIGRpcjsKIAlzdHJ1Y3QgbW9uX2Jpbl9oZHIgKmVwOwpAQCAtNTM3LDggKzUzOCwxMCBAQAogCWlmIChsZW5ndGggIT0gMCkgewogCQllcC0+ZmxhZ19kYXRhID0gbW9uX2Jpbl9nZXRfZGF0YShycCwgb2Zmc2V0LCB1cmIsIGxlbmd0aCk7CiAJCWlmIChlcC0+ZmxhZ19kYXRhICE9IDApIHsJLyogWWVzLCBpdCdzIDB4MDAsIG5vdCAnMCcgKi8KLQkJCWVwLT5sZW5fY2FwID0gMDsKLQkJCW1vbl9idWZmX2FyZWFfc2hyaW5rKHJwLCBsZW5ndGgpOworCQkJZGVsdGEgPSAoZXAtPmxlbl9jYXAgKyBQS1RfQUxJR04tMSkgJiB+KFBLVF9BTElHTi0xKTsKKwkJCWVwLT5sZW5fY2FwIC09IGxlbmd0aDsKKwkJCWRlbHRhIC09IChlcC0+bGVuX2NhcCArIFBLVF9BTElHTi0xKSAmIH4oUEtUX0FMSUdOLTEpOworCQkJbW9uX2J1ZmZfYXJlYV9zaHJpbmsocnAsIGRlbHRhKTsKIAkJfQogCX0gZWxzZSB7CiAJCWVwLT5mbGFnX2RhdGEgPSBkYXRhX3RhZzsKQEAgLTExNzQsNyArMTE3Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW9uX2Jpbl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1vbl9iaW5fdm1fb3BzID0gewogCS5vcGVuID0gICAgIG1vbl9iaW5fdm1hX29wZW4sCiAJLmNsb3NlID0gICAgbW9uX2Jpbl92bWFfY2xvc2UsCiAJLmZhdWx0ID0gICAgbW9uX2Jpbl92bWFfZmF1bHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggODAzYWRjYi4uYjg0YWJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtOCw4ICs4LDggQEAKIAogIyAoTSlIRFJDID0gKE11bHRpcG9pbnQpIEhpZ2hzcGVlZCBEdWFsLVJvbGUgQ29udHJvbGxlcgogY29uZmlnIFVTQl9NVVNCX0hEUkMKLQlkZXBlbmRzIG9uIChVU0IgfHwgVVNCX0dBREdFVCkgJiYgSEFWRV9DTEsKLQlkZXBlbmRzIG9uICFTVVBFUkgKKwlkZXBlbmRzIG9uIChVU0IgfHwgVVNCX0dBREdFVCkKKwlkZXBlbmRzIG9uIChBUk0gfHwgQkxBQ0tGSU4pCiAJc2VsZWN0IE5PUF9VU0JfWENFSVYgaWYgQVJDSF9EQVZJTkNJCiAJc2VsZWN0IFRXTDQwMzBfVVNCIGlmIE1BQ0hfT01BUF8zNDMwU0RQCiAJc2VsZWN0IE5PUF9VU0JfWENFSVYgaWYgTUFDSF9PTUFQM0VWTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCmluZGV4IGYyZjY2ZWIuLmZjZWM4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggMzgxZDY0OC4uNmFhNWYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC05NSw2ICs5NSwxMyBAQAogI2VuZGlmCiAjZW5kaWYJLyogbmVlZCBNVVNCIGdhZGdldCBzZWxlY3Rpb24gKi8KIAorI2lmbmRlZiBDT05GSUdfSEFWRV9DTEsKKy8qIER1bW15IHN0dWIgZm9yIGNsayBmcmFtZXdvcmsgKi8KKyNkZWZpbmUgY2xrX2dldChkZXYsIGlkKQlOVUxMCisjZGVmaW5lIGNsa19wdXQoY2xvY2spCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xrX2VuYWJsZShjbG9jaykJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGNsa19kaXNhYmxlKGNsb2NrKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKaW5kZXggZmJmZDNmZC4uY2MxZDcxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCkBAIC00MzksMTUgKzQzOSw2IEBACiAvKiBOb3QgaW1wbGVtZW50ZWQgLSBIVyBoYXMgc2VwZXJhdGUgVHgvUnggRklGTyAqLwogI2RlZmluZSBNVVNCX1RYQ1NSX01PREUJCQkweDAwMDAKIAotLyoKLSAqIER1bW15IHN0dWIgZm9yIGNsayBmcmFtZXdvcmssIGl0IHdpbGwgYmUgcmVtb3ZlZAotICogdW50aWwgQmxhY2tmaW4gc3VwcG9ydHMgY2xrIGZyYW1ld29yawotICovCi0jZGVmaW5lIGNsa19nZXQoZGV2LCBpZCkJTlVMTAotI2RlZmluZSBjbGtfcHV0KGNsb2NrKQkJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGNsa19lbmFibGUoY2xvY2spCWRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBjbGtfZGlzYWJsZShjbG9jaykJZG8ge30gd2hpbGUgKDApCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3dyaXRlX3R4Zmlmb3N6KHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGNfc2l6ZSkKIHsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKaW5kZXggMmNiZmFiMy4uYjEwYWM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKQEAgLTU1NCwxMyArNTU0LDEyIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPnJ4X2xvY2spOwogCXByaXYtPnJ4X2ZsYWdzIHw9IFRIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5yeF9sb2NrKTsKIH0KIAogLyogQmFzZWQgb24gZnRkaV9zaW8uYyB1bnRocm90dGxlICovCkBAIC01NjksMTQgKzU2OCwxMyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBhaXJjYWJsZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPnJ4X2xvY2spOwogCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwogCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5yeF9sb2NrKTsKIAogCWlmIChhY3R1YWxseV90aHJvdHRsZWQpCiAJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJ4X3dvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCmluZGV4IDRhMjA4ZmUuLmJkMjU0ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTUwLDYgKzUwLDggQEAKIHN0YXRpYyB2b2lkIGNwMjEweF9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgaW50KTsKIHN0YXRpYyBpbnQgY3AyMTB4X3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKik7CiBzdGF0aWMgdm9pZCBjcDIxMHhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKK3N0YXRpYyB2b2lkIGNwMjEweF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnAsIGludCBvbik7CitzdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKTsKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtMTEzLDYgKzExNSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTY2QSwgMHgwMzAzKSB9LCAvKiBDbGlwc2FsIDU1MDBQQ1UgQy1CdXMgVVNCIGludGVyZmFjZSAqLwogCXsgVVNCX0RFVklDRSgweDE2RDYsIDB4MDAwMSkgfSwgLyogSmFibG90cm9uIHNlcmlhbCBpbnRlcmZhY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxOEVGLCAweEUwMEYpIH0sIC8qIEVMViBVU0ItSTJDLUludGVyZmFjZSAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4OTUwMCkgfSwgLyogRFc3MDAgR1BTIFVTQiBpbnRlcmZhY2UgKi8KIAl7IH0gLyogVGVybWluYXRpbmcgRW50cnkgKi8KIH07CiAKQEAgLTE0Miw2ICsxNDUsOCBAQAogCS50aW9jbXNldAkJPSBjcDIxMHhfdGlvY21zZXQsCiAJLmF0dGFjaAkJCT0gY3AyMTB4X3N0YXJ0dXAsCiAJLmRpc2Nvbm5lY3QJCT0gY3AyMTB4X2Rpc2Nvbm5lY3QsCisJLmR0cl9ydHMJCT0gY3AyMTB4X2R0cl9ydHMsCisJLmNhcnJpZXJfcmFpc2VkCQk9IGNwMjEweF9jYXJyaWVyX3JhaXNlZAogfTsKIAogLyogQ29uZmlnIHJlcXVlc3QgdHlwZXMgKi8KQEAgLTc0NSw2ICs3NTAsMTQgQEAKIAlyZXR1cm4gY3AyMTB4X3NldF9jb25maWcocG9ydCwgQ1AyMTBYX1NFVF9NSFMsICZjb250cm9sLCAyKTsKIH0KIAorc3RhdGljIHZvaWQgY3AyMTB4X2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCwgaW50IG9uKQoreworCWlmIChvbikKKwkJY3AyMTB4X3Rpb2Ntc2V0X3BvcnQocCwgTlVMTCwgIFRJT0NNX0RUUnxUSU9DTV9SVFMsIDApOworCWVsc2UKKwkJY3AyMTB4X3Rpb2Ntc2V0X3BvcnQocCwgTlVMTCwgIDAsIFRJT0NNX0RUUnxUSU9DTV9SVFMpOworfQorCiBzdGF0aWMgaW50IGNwMjEweF90aW9jbWdldCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CkBAIC03NjcsNiArNzgwLDE1IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludCBjcDIxMHhfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbDsKKwljcDIxMHhfZ2V0X2NvbmZpZyhwLCBDUDIxMFhfR0VUX01ETVNUUywgJmNvbnRyb2wsIDEpOworCWlmIChjb250cm9sICYgQ09OVFJPTF9EQ0QpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBjcDIxMHhfYnJlYWtfY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwppbmRleCBlMGE4YjcxLi5hNTkxZWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTExNTUsMTMgKzExNTUsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT5yeF9mbGFncyA9IFRIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIH0KIAogCkBAIC0xMTcwLDE0ICsxMTY5LDEzIEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgYWN0dWFsbHlfdGhyb3R0bGVkLCByZXN1bHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwogCXByaXYtPnJ4X2ZsYWdzID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAogCWlmICghcHJpdi0+Y29tbV9pc19vaykKIAkJcmV0dXJuOwpAQCAtMTE4NSw3ICsxMTgzLDcgQEAKIAlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKSB7CiAJCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCi0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJlc3VsdCkgewogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgIgogCQkJCQkiZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCmluZGV4IGFiM2RkOTkuLjY4ZTgwYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKQEAgLTg5OCwxNiArODk4LDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAKLQkvKiB0dXJuIHRocm90dGxlIG9mZiAqLwotCXByaXYtPmRwX3Rocm90dGxlZCA9IDA7Ci0JcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCA9IDA7Ci0KIAkvKiByZXN0YXJ0IHJlYWQgY2hhaW4gKi8KIAlpZiAocHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCkgewogCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAl9CiAKKwkvKiB0dXJuIHRocm90dGxlIG9mZiAqLworCXByaXYtPmRwX3Rocm90dGxlZCA9IDA7CisJcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCA9IDA7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCmluZGV4IDMzYzllOWMuLjdkZDBlM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKIAkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCA0Zjg4M2IxLi45YzYwZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNzYsMTMgKzc2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfZHRyX3J0czsJLyogc2F2ZWQgbW9kZW0gY29udHJvbCBvdXRwdXRzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KIAljaGFyIHByZXZfc3RhdHVzLCBkaWZmX3N0YXR1czsgICAgICAgIC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KLQlfX3U4IHJ4X2ZsYWdzOwkJLyogcmVjZWl2ZSBzdGF0ZSBmbGFncyAodGhyb3R0bGluZykgKi8KLQlzcGlubG9ja190IHJ4X2xvY2s7CS8qIHNwaW5sb2NrIGZvciByZWNlaXZlIHN0YXRlICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayByeF93b3JrOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7Ci0JaW50IHJ4X3Byb2Nlc3NlZDsKLQl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOwotCiAJX191MTYgaW50ZXJmYWNlOwkvKiBGVDIyMzJDLCBGVDIyMzJIIG9yIEZUNDIzMkggcG9ydCBpbnRlcmZhY2UKIAkJCQkgICAoMCBmb3IgRlQyMzIvMjQ1KSAqLwogCkBAIC03MzcsMTAgKzczMSw2IEBACiAvKiBDb25zdGFudHMgZm9yIHJlYWQgdXJiIGFuZCB3cml0ZSB1cmIgKi8KICNkZWZpbmUgQlVGU1ogNTEyCiAKLS8qIHJ4X2ZsYWdzICovCi0jZGVmaW5lIFRIUk9UVExFRAkJMHgwMQotI2RlZmluZSBBQ1RVQUxMWV9USFJPVFRMRUQJMHgwMgotCiAvKiBVc2VkIGZvciBUSU9DTUlXQUlUICovCiAjZGVmaW5lIEZURElfU1RBVFVTX0IwX01BU0sJKEZURElfUlMwX0NUUyB8IEZURElfUlMwX0RTUiB8IEZURElfUlMwX1JJIHwgRlRESV9SUzBfUkxTRCkKICNkZWZpbmUgRlRESV9TVEFUVVNfQjFfTUFTSwkoRlRESV9SU19CSSkKQEAgLTc2Myw3ICs3NTMsNyBAQAogc3RhdGljIGludCAgZnRkaV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBmdGRpX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CiBzdGF0aWMgaW50ICBmdGRpX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKQEAgLTEyMzQsNyArMTIyNCw2IEBACiAJCQkJCShuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfRkxBR1MpKTsKIAlwcml2LT5jdXN0b21fZGl2aXNvciA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7CiAKLQl0dHktPmxvd19sYXRlbmN5ID0gKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAJd3JpdGVfbGF0ZW5jeV90aW1lcihwb3J0KTsKIAogY2hlY2tfYW5kX2V4aXQ6CkBAIC0xNTI3LDcgKzE1MTYsNiBAQAogCX0KIAogCWtyZWZfaW5pdCgmcHJpdi0+a3JlZik7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJLyogVGhpcyB3aWxsIHB1c2ggdGhlIGNoYXJhY3RlcnMgdGhyb3VnaCBpbW1lZGlhdGVseSByYXRoZXIKQEAgLTE1NDksNyArMTUzNyw2IEBACiAJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gQlVGU1o7CiAJfQogCi0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnJ4X3dvcmssIGZ0ZGlfcHJvY2Vzc19yZWFkKTsKIAlwcml2LT5wb3J0ID0gcG9ydDsKIAogCS8qIEZyZWUgcG9ydCdzIGV4aXN0aW5nIHdyaXRlIHVyYiBhbmQgdHJhbnNmZXIgYnVmZmVyLiAqLwpAQCAtMTY4Niw2ICsxNjczLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZnRkaV9zdWJtaXRfcmVhZF91cmIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHBvcnQtPnJlYWRfdXJiOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdDsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgbWVtX2ZsYWdzKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIGludCBmdGRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsgLyogZnRkaV9vcGVuICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwpAQCAtMTcwMCwxMiArMTcwNyw2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKIAlwcml2LT50eF9ieXRlcyA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfYnl0ZXMgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQotCWlmICh0dHkpCi0JCXR0eS0+bG93X2xhdGVuY3kgPSAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKIAogCXdyaXRlX2xhdGVuY3lfdGltZXIocG9ydCk7CiAKQEAgLTE3MjUsMjMgKzE3MjYsMTQgQEAKIAkJZnRkaV9zZXRfdGVybWlvcyh0dHksIHBvcnQsIHR0eS0+dGVybWlvcyk7CiAKIAkvKiBOb3QgdGhyb3R0bGVkICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQlwcml2LT5yeF9mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJcG9ydC0+dGhyb3R0bGVkID0gMDsKKwlwb3J0LT50aHJvdHRsZV9yZXEgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JcHJpdi0+cnhfcHJvY2Vzc2VkID0gMDsKLQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgZGV2LAotCQkJdXNiX3JjdmJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAotCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JZWxzZQorCXJlc3VsdCA9IGZ0ZGlfc3VibWl0X3JlYWRfdXJiKHBvcnQsIEdGUF9LRVJORUwpOworCWlmICghcmVzdWx0KQogCQlrcmVmX2dldCgmcHJpdi0+a3JlZik7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTc4NywxMCArMTc3OSw2IEBACiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCi0KLQkvKiBjYW5jZWwgYW55IHNjaGVkdWxlZCByZWFkaW5nICovCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5yeF93b3JrKTsKLQogCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWQgKi8KIAl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwogCWtyZWZfcHV0KCZwcml2LT5rcmVmLCBmdGRpX3Npb19wcml2X3JlbGVhc2UpOwpAQCAtMjAxMywyNzEgKzIwMDEsMTIxIEBACiAJcmV0dXJuIGJ1ZmZlcmVkOwogfQogCitzdGF0aWMgaW50IGZ0ZGlfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiwKKwkJY2hhciAqcGFja2V0LCBpbnQgbGVuKQoreworCWludCBpOworCWNoYXIgc3RhdHVzOworCWNoYXIgZmxhZzsKKwljaGFyICpjaDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAobGVuIDwgMikgeworCQlkYmcoIm1hbGZvcm1lZCBwYWNrZXQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ29tcGFyZSBuZXcgbGluZSBzdGF0dXMgdG8gdGhlIG9sZCBvbmUsIHNpZ25hbCBpZiBkaWZmZXJlbnQvCisJICAgTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCisJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLworCXN0YXR1cyA9IHBhY2tldFswXSAmIEZURElfU1RBVFVTX0IwX01BU0s7CisJaWYgKHN0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgeworCQlwcml2LT5kaWZmX3N0YXR1cyB8PSBzdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCXByaXYtPnByZXZfc3RhdHVzID0gc3RhdHVzOworCX0KKworCS8qCisJICogQWx0aG91Z2ggdGhlIGRldmljZSB1c2VzIGEgYml0bWFzayBhbmQgaGVuY2UgY2FuIGhhdmUgbXVsdGlwbGUKKwkgKiBlcnJvcnMgb24gYSBwYWNrZXQgLSB0aGUgb3JkZXIgaGVyZSBzZXRzIHRoZSBwcmlvcml0eSB0aGUgZXJyb3IgaXMKKwkgKiByZXR1cm5lZCB0byB0aGUgdHR5IGxheWVyLgorCSAqLworCWZsYWcgPSBUVFlfTk9STUFMOworCWlmIChwYWNrZXRbMV0gJiBGVERJX1JTX09FKSB7CisJCWZsYWcgPSBUVFlfT1ZFUlJVTjsKKwkJZGJnKCJPVkVSUlJVTiBlcnJvciIpOworCX0KKwlpZiAocGFja2V0WzFdICYgRlRESV9SU19CSSkgeworCQlmbGFnID0gVFRZX0JSRUFLOworCQlkYmcoIkJSRUFLIHJlY2VpdmVkIik7CisJCXVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKHBvcnQpOworCX0KKwlpZiAocGFja2V0WzFdICYgRlRESV9SU19QRSkgeworCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJZGJnKCJQQVJJVFkgZXJyb3IiKTsKKwl9CisJaWYgKHBhY2tldFsxXSAmIEZURElfUlNfRkUpIHsKKwkJZmxhZyA9IFRUWV9GUkFNRTsKKwkJZGJnKCJGUkFNSU5HIGVycm9yIik7CisJfQorCisJbGVuIC09IDI7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOwkvKiBzdGF0dXMgb25seSAqLworCWNoID0gcGFja2V0ICsgMjsKKworCWlmICghKHBvcnQtPmNvbnNvbGUgJiYgcG9ydC0+c3lzcnEpICYmIGZsYWcgPT0gVFRZX05PUk1BTCkKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGNoLCBsZW4pOworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIGNoKyspIHsKKwkJCWlmICghdXNiX3NlcmlhbF9oYW5kbGVfc3lzcnFfY2hhcih0dHksIHBvcnQsICpjaCkpCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAqY2gsIGZsYWcpOworCQl9CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVyYiAqdXJiID0gcG9ydC0+cmVhZF91cmI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWNoYXIgKmRhdGEgPSAoY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBpOworCWludCBsZW47CisJaW50IGNvdW50ID0gMDsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpICs9IHByaXYtPm1heF9wYWNrZXRfc2l6ZSkgeworCQlsZW4gPSBtaW5fdChpbnQsIHVyYi0+YWN0dWFsX2xlbmd0aCAtIGksIHByaXYtPm1heF9wYWNrZXRfc2l6ZSk7CisJCWNvdW50ICs9IGZ0ZGlfcHJvY2Vzc19wYWNrZXQodHR5LCBwb3J0LCBwcml2LCAmZGF0YVtpXSwgbGVuKTsKKwl9CisKKwlpZiAoY291bnQpCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisKIHN0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKLQl1bnNpZ25lZCBsb25nIGNvdW50cmVhZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQotCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gMCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICVkICIKLQkJCSJhY3R1YWxfbGVuZ3RoICVkIG51bWJlciBvZiBwYWNrZXRzICVkXG4iLCBfX2Z1bmNfXywKLQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHRyYW5zZmVyX2ZsYWdzICV4XG4iLCBfX2Z1bmNfXywKLQkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MpOwotCX0KLQotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQlpZiAocG9ydC0+cG9ydC5jb3VudCA8PSAwKQotCQlyZXR1cm47Ci0KLQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKLQlpZiAoIXR0eSkgewotCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaWYgKCFwcml2KSB7Ci0JCWRiZygiJXMgLSBiYWQgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh1cmIgIT0gcG9ydC0+cmVhZF91cmIpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gTm90IG15IHVyYiFcbiIsIF9fZnVuY19fKTsKLQotCWlmIChzdGF0dXMpIHsKLQkJLyogVGhpcyB3aWxsIGhhcHBlbiBhdCBjbG9zZSBldmVyeSB0aW1lIHNvIGl0IGlzIGEgZGJnIG5vdCBhbgotCQkgICBlcnIgKi8KLQkJZGJnKCIodGhpcyBpcyBvayBvbiBjbG9zZSkgbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIHN0YXR1cyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNvdW50IGRhdGEgYnl0ZXMsIGJ1dCBub3Qgc3RhdHVzIGJ5dGVzICovCi0JY291bnRyZWFkID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCWNvdW50cmVhZCAtPSAyICogRElWX1JPVU5EX1VQKGNvdW50cmVhZCwgcHJpdi0+bWF4X3BhY2tldF9zaXplKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCXByaXYtPnJ4X2J5dGVzICs9IGNvdW50cmVhZDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0KLQlmdGRpX3Byb2Nlc3NfcmVhZCgmcHJpdi0+cnhfd29yay53b3JrKTsKLW91dDoKLQl0dHlfa3JlZl9wdXQodHR5KTsKLX0gLyogZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KLQotCi1zdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17IC8qIGZ0ZGlfcHJvY2Vzc19yZWFkICovCi0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnRkaV9wcml2YXRlLCByeF93b3JrLndvcmspOwotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBwcml2LT5wb3J0OwotCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCWNoYXIgZXJyb3JfZmxhZzsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCi0JaW50IGk7Ci0JaW50IHJlc3VsdDsKLQlpbnQgbmVlZF9mbGlwOwotCWludCBwYWNrZXRfb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgPD0gMCkKLQkJcmV0dXJuOwotCi0JdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7CisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQkJCV9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKLQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWlmICghcHJpdikgewotCQlkYmcoIiVzIC0gYmFkIHBvcnQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgLSBleGl0aW5nIiwgX19mdW5jX18pOwotCQlnb3RvIG91dDsKLQl9CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlmdGRpX3Byb2Nlc3NfcmVhZChwb3J0KTsKIAotCXVyYiA9IHBvcnQtPnJlYWRfdXJiOwotCWlmICghdXJiKSB7Ci0JCWRiZygiJXMgLSBiYWQgcmVhZF91cmIgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQotCWlmIChwcml2LT5yeF9wcm9jZXNzZWQpIHsKLQkJZGJnKCIlcyAtIGFscmVhZHkgcHJvY2Vzc2VkOiAlZCBieXRlcywgJWQgcmVtYWluIiwgX19mdW5jX18sCi0JCQkJcHJpdi0+cnhfcHJvY2Vzc2VkLAotCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCAtIHByaXYtPnJ4X3Byb2Nlc3NlZCk7Ci0JfSBlbHNlIHsKLQkJLyogVGhlIGZpcnN0IHR3byBieXRlcyBvZiBldmVyeSByZWFkIHBhY2tldCBhcmUgc3RhdHVzICovCi0JCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAyKQotCQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKLQkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7Ci0JCWVsc2UKLQkJCWRiZygiU3RhdHVzIG9ubHk6ICUwM29vICUwM29vIiwgZGF0YVswXSwgZGF0YVsxXSk7Ci0JfQotCi0KLQkvKiBUTyBETyAtLSBjaGVjayBmb3IgaHVuZyB1cCBsaW5lIGFuZCBoYW5kbGUgYXBwcm9wcmlhdGVseTogKi8KLQkvKiAgIHNlbmQgaGFuZ3VwICAqLwotCS8qIFNlZSBhY20uYyAtIHlvdSBkbyBhIHR0eV9oYW5ndXAgIC0gZWcgdHR5X2hhbmd1cCh0dHkpICovCi0JLyogaWYgQ0QgaXMgZHJvcHBlZCBhbmQgdGhlIGxpbmUgaXMgbm90IENMT0NBTCB0aGVuIHdlIHNob3VsZCBoYW5ndXAgKi8KLQotCW5lZWRfZmxpcCA9IDA7Ci0JZm9yIChwYWNrZXRfb2Zmc2V0ID0gcHJpdi0+cnhfcHJvY2Vzc2VkOwotCQlwYWNrZXRfb2Zmc2V0IDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBwYWNrZXRfb2Zmc2V0ICs9IHByaXYtPm1heF9wYWNrZXRfc2l6ZSkgewotCQlpbnQgbGVuZ3RoOwotCi0JCS8qIENvbXBhcmUgbmV3IGxpbmUgc3RhdHVzIHRvIHRoZSBvbGQgb25lLCBzaWduYWwgaWYgZGlmZmVyZW50LwotCQkgICBOLkIuIHBhY2tldCBtYXkgYmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBvbmNlLCBidXQgZGlmZmVyZW5jZXMKLQkJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLwotCQljaGFyIG5ld19zdGF0dXMgPSBkYXRhW3BhY2tldF9vZmZzZXQgKyAwXSAmCi0JCQkJCQlGVERJX1NUQVRVU19CMF9NQVNLOwotCQlpZiAobmV3X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgewotCQkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0KLQkJCQluZXdfc3RhdHVzIF4gcHJpdi0+cHJldl9zdGF0dXM7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKLQkJCXByaXYtPnByZXZfc3RhdHVzID0gbmV3X3N0YXR1czsKLQkJfQotCi0JCWxlbmd0aCA9IG1pbl90KHUzMiwgcHJpdi0+bWF4X3BhY2tldF9zaXplLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKLQkJaWYgKGxlbmd0aCA8IDApIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIHBhY2tldCBsZW5ndGg6ICVkXG4iLAotCQkJCV9fZnVuY19fLCBsZW5ndGgrMik7Ci0JCQlsZW5ndGggPSAwOwotCQl9Ci0KLQkJaWYgKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKSB7Ci0JCQlkYmcoIiVzIC0gdGhyb3R0bGVkIiwgX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuZ3RoKSA8IGxlbmd0aCkgewotCQkJLyogYnJlYWsgb3V0ICYgd2FpdCBmb3IgdGhyb3R0bGluZy91bnRocm90dGxpbmcgdG8KLQkJCSAgIGhhcHBlbiAqLwotCQkJZGJnKCIlcyAtIHJlY2VpdmUgcm9vbSBsb3ciLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEhhbmRsZSBlcnJvcnMgYW5kIGJyZWFrICovCi0JCWVycm9yX2ZsYWcgPSBUVFlfTk9STUFMOwotCQkvKiBBbHRob3VnaCB0aGUgZGV2aWNlIHVzZXMgYSBiaXRtYXNrIGFuZCBoZW5jZSBjYW4gaGF2ZQotCQkgICBtdWx0aXBsZSBlcnJvcnMgb24gYSBwYWNrZXQgLSB0aGUgb3JkZXIgaGVyZSBzZXRzIHRoZQotCQkgICBwcmlvcml0eSB0aGUgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHR0eSBsYXllciAgKi8KLQotCQlpZiAoZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19PRSkgewotCQkJZXJyb3JfZmxhZyA9IFRUWV9PVkVSUlVOOwotCQkJZGJnKCJPVkVSUlJVTiBlcnJvciIpOwotCQl9Ci0JCWlmIChkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX0JJKSB7Ci0JCQllcnJvcl9mbGFnID0gVFRZX0JSRUFLOwotCQkJZGJnKCJCUkVBSyByZWNlaXZlZCIpOwotCQkJdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsocG9ydCk7Ci0JCX0KLQkJaWYgKGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfUEUpIHsKLQkJCWVycm9yX2ZsYWcgPSBUVFlfUEFSSVRZOwotCQkJZGJnKCJQQVJJVFkgZXJyb3IiKTsKLQkJfQotCQlpZiAoZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19GRSkgewotCQkJZXJyb3JfZmxhZyA9IFRUWV9GUkFNRTsKLQkJCWRiZygiRlJBTUlORyBlcnJvciIpOwotCQl9Ci0JCWlmIChsZW5ndGggPiAwKSB7Ci0JCQlmb3IgKGkgPSAyOyBpIDwgbGVuZ3RoKzI7IGkrKykgewotCQkJCS8qIE5vdGUgdGhhdCB0aGUgZXJyb3IgZmxhZyBpcyBkdXBsaWNhdGVkIGZvcgotCQkJCSAgIGV2ZXJ5IGNoYXJhY3RlciByZWNlaXZlZCBzaW5jZSB3ZSBkb24ndCBrbm93Ci0JCQkJICAgd2hpY2ggY2hhcmFjdGVyIGl0IGFwcGxpZWQgdG8gKi8KLQkJCQlpZiAoIXVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIodHR5LCBwb3J0LAotCQkJCQkJZGF0YVtwYWNrZXRfb2Zmc2V0ICsgaV0pKQotCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksCi0JCQkJCQlkYXRhW3BhY2tldF9vZmZzZXQgKyBpXSwKLQkJCQkJCWVycm9yX2ZsYWcpOwotCQkJfQotCQkJbmVlZF9mbGlwID0gMTsKLQkJfQotCi0jaWZkZWYgTk9UX0NPUlJFQ1RfQlVUX0tFRVBJTkdfSVRfRk9SX05PVwotCQkvKiBpZiBhIHBhcml0eSBlcnJvciBpcyBkZXRlY3RlZCB5b3UgZ2V0IHN0YXR1cyBwYWNrZXRzIGZvcmV2ZXIKLQkJICAgdW50aWwgYSBjaGFyYWN0ZXIgaXMgc2VudCB3aXRob3V0IGEgcGFyaXR5IGVycm9yLgotCQkgICBUaGlzIGRvZXNuJ3Qgd29yayB3ZWxsIHNpbmNlIHRoZSBhcHBsaWNhdGlvbiByZWNlaXZlcyBhCi0JCSAgIG5ldmVyIGVuZGluZyBzdHJlYW0gb2YgYmFkIGRhdGEgLSBldmVuIHRob3VnaCBuZXcgZGF0YQotCQkgICBoYXNuJ3QgYmVlbiBzZW50LiBUaGVyZWZvcmUgSSAoYmlsbCkgaGF2ZSB0YWtlbiB0aGlzIG91dC4KLQkJICAgSG93ZXZlciAtIHRoaXMgbWlnaHQgbWFrZSBzZW5zZSBmb3IgZnJhbWluZyBlcnJvcnMgYW5kIHNvIG9uCi0JCSAgIHNvIEkgYW0gbGVhdmluZyB0aGUgY29kZSBpbiBmb3Igbm93LgotCQkqLwotCQllbHNlIHsKLQkJCWlmIChlcnJvcl9mbGFnICE9IFRUWV9OT1JNQUwpIHsKLQkJCQlkYmcoImVycm9yX2ZsYWcgaXMgbm90IG5vcm1hbCIpOwotCQkJCS8qIEluIHRoaXMgY2FzZSBpdCBpcyBqdXN0IHN0YXR1cyAtIGlmIHRoYXQgaXMKLQkJCQkgICBhbiBlcnJvciBzZW5kIGEgYmFkIGNoYXJhY3RlciAqLwotCQkJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkKLQkJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDB4ZmYsIGVycm9yX2ZsYWcpOwotCQkJCW5lZWRfZmxpcCA9IDE7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0gLyogImZvcihwYWNrZXRfb2Zmc2V0PTAuLi4iICovCi0KLQkvKiBMb3cgbGF0ZW5jeSAqLwotCWlmIChuZWVkX2ZsaXApCi0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0KLQlpZiAocGFja2V0X29mZnNldCA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkvKiBub3QgY29tcGxldGVseSBwcm9jZXNzZWQgLSByZWNvcmQgcHJvZ3Jlc3MgKi8KLQkJcHJpdi0+cnhfcHJvY2Vzc2VkID0gcGFja2V0X29mZnNldDsKLQkJZGJnKCIlcyAtIGluY29tcGxldGUsICVkIGJ5dGVzIHByb2Nlc3NlZCwgJWQgcmVtYWluIiwKLQkJCQlfX2Z1bmNfXywgcGFja2V0X29mZnNldCwKLQkJCQl1cmItPmFjdHVhbF9sZW5ndGggLSBwYWNrZXRfb2Zmc2V0KTsKLQkJLyogY2hlY2sgaWYgd2Ugd2VyZSB0aHJvdHRsZWQgd2hpbGUgcHJvY2Vzc2luZyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCQlpZiAocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpIHsKLQkJCXByaXYtPnJ4X2ZsYWdzIHw9IEFDVFVBTExZX1RIUk9UVExFRDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQkJCWRiZygiJXMgLSBkZWZlcnJpbmcgcmVtYWluZGVyIHVudGlsIHVudGhyb3R0bGVkIiwKLQkJCQkJX19mdW5jX18pOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCQkvKiBpZiB0aGUgcG9ydCBpcyBjbG9zZWQgc3RvcCB0cnlpbmcgdG8gcmVhZCAqLwotCQlpZiAocG9ydC0+cG9ydC5jb3VudCA+IDApCi0JCQkvKiBkZWxheSBwcm9jZXNzaW5nIG9mIHJlbWFpbmRlciAqLwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5yeF93b3JrLCAxKTsKLQkJZWxzZQotCQkJZGJnKCIlcyAtIHBvcnQgaXMgY2xvc2VkIiwgX19mdW5jX18pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiB1cmIgaXMgY29tcGxldGVseSBwcm9jZXNzZWQgKi8KLQlwcml2LT5yeF9wcm9jZXNzZWQgPSAwOwotCi0JLyogaWYgdGhlIHBvcnQgaXMgY2xvc2VkIHN0b3AgdHJ5aW5nIHRvIHJlYWQgKi8KLQlpZiAocG9ydC0+cG9ydC5jb3VudCA+IDApIHsKLQkJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwotCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKLQotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyZXN1bHQpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JfQotb3V0OgotCXR0eV9rcmVmX3B1dCh0dHkpOwotfSAvKiBmdGRpX3Byb2Nlc3NfcmVhZCAqLwotCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlwb3J0LT50aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZV9yZXE7CisJaWYgKCFwb3J0LT50aHJvdHRsZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlmdGRpX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworfQogCiBzdGF0aWMgdm9pZCBmdGRpX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CkBAIC0yNjA5LDMzICsyNDQ3LDMxIEBACiBzdGF0aWMgdm9pZCBmdGRpX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXBvcnQtPnRocm90dGxlX3JlcSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCi0KLXN0YXRpYyB2b2lkIGZ0ZGlfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQordm9pZCBmdGRpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWludCBhY3R1YWxseV90aHJvdHRsZWQ7CisJaW50IHdhc190aHJvdHRsZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwotCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwl3YXNfdGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVkOworCXBvcnQtPnRocm90dGxlZCA9IHBvcnQtPnRocm90dGxlX3JlcSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5yeF93b3JrLCAwKTsKKwkvKiBSZXN1Ym1pdCB1cmIgaWYgdGhyb3R0bGVkIGFuZCBvcGVuLiAqLworCWlmICh3YXNfdGhyb3R0bGVkICYmIHRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPnBvcnQuZmxhZ3MpKQorCQlmdGRpX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZnRkaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwppbmRleCAyMDQzMmQzLi41YWM5MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKQEAgLTEzOTAsMTQgKzEzOTAsMTMgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAJLyogc2V0IGZsYWcsIGRhdGEgcmVjZWl2ZWQgd2lsbCBiZSBwdXQgaW50byBhIHF1ZXVlCiAJICAgZm9yIGxhdGVyIHByb2Nlc3NpbmcgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1FVRVVJTkd8RkxBR1NfVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogfQogCiAKQEAgLTE0MDUsMTMgKzE0MDQsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19USFJPVFRMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmZ2FybWluX2RhdGFfcC0+bG9jayk7CiAKIAkvKiBpbiBuYXRpdmUgbW9kZSBzZW5kIHF1ZXVlZCBkYXRhIHRvIHR0eSwgaW4KIAkgICBzZXJpYWwgbW9kZSBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSAqLwpAQCAtMTQxOSw3ICsxNDE3LDcgQEAKIAkJZ2FybWluX2ZsdXNoX3F1ZXVlKGdhcm1pbl9kYXRhX3ApOwogCiAJaWYgKDAgIT0gKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfQlVMS19JTl9BQ1RJVkUpKSB7Ci0JCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAoc3RhdHVzKQogCQkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggZGViYTA4Yy4uYmJlMDA1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC01NDYsNyArNTQ2LDcgQEAKIAogCWlmICh3YXNfdGhyb3R0bGVkKSB7CiAJCS8qIFJlc3VtZSByZWFkaW5nIGZyb20gZGV2aWNlICovCi0JCXVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfS0VSTkVMKTsKKwkJZmx1c2hfYW5kX3Jlc3VibWl0X3JlYWRfdXJiKHBvcnQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKaW5kZXggMjRmY2M2NC4uZDYyMzFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCkBAIC05NjYsNiArOTY2LDE1IEBACiBzdGF0aWMgaW50IGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwkvKiBTb21lIG9mIHRoZSBkZXZpY2VzIGluIGlwYXFfaWRfdGFibGVbXSBhcmUgY29tcG9zaXRlLCBhbmQgd2UKKwkgKiBzaG91bGRuJ3QgYmluZCB0byBhbGwgdGhlIGludGVyZmFjZXMuICBUaGlzIHRlc3Qgd2lsbCBydWxlIG91dAorCSAqIHNvbWUgb2J2aW91c2x5IGludmFsaWQgcG9zc2liaWxpdGllcy4KKwkgKi8KKwlpZiAoc2VyaWFsLT5udW1fYnVsa19pbiA8IHNlcmlhbC0+bnVtX3BvcnRzIHx8CisJCQlzZXJpYWwtPm51bV9idWxrX291dCA8IHNlcmlhbC0+bnVtX3BvcnRzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewogCQkvKgogCQkgKiBGSVhNRTogSFAgaVBhcSByeDM3MTUsIHBvc3NpYmx5IG90aGVycywgaGF2ZSAxIGNvbmZpZyB0aGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCmluZGV4IDI1N2MxNmMuLjEyOTZhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkvKiBqdXN0IHJlc3RhcnQgdGhlIHJlY2VpdmUgaW50ZXJydXB0IFVSQiAqLwogCWRiZygia2V5c3Bhbl9wZGFfcnhfdW50aHJvdHRsZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlpZiAodXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQykpCisJaWYgKHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpKQogCQlkYmcoIiB1c2Jfc3VibWl0X3VyYihyZWFkIHVyYikgZmFpbGVkIik7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKaW5kZXggZjczNzMzNy4uM2E3ODczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCkBAIC05NTEsNyArOTUxLDcgQEAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKIAkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCBhZDQ5OThiLi5jZDAwOWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtNzc3LDIwICs3NzcsMTkgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOwogCWlmIChDX0NSVFNDVFModHR5KSkgewogCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH5USU9DTV9SVFM7CiAJCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJCSh2b2lkKSBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChwb3J0LT5zZXJpYWwsIGNvbnRyb2xfc3RhdGUpOwogCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAl9CiB9CiAKQEAgLTc5OSwyMCArNzk4LDE5IEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCWlmICgocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpICYmIENfQ1JUU0NUUyh0dHkpKSB7CiAJCXByaXYtPnJ4X2ZsYWdzICY9IH5USFJPVFRMRUQ7CiAJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUlRTOwogCQljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCQkodm9pZCkgbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwocG9ydC0+c2VyaWFsLCBjb250cm9sX3N0YXRlKTsKIAl9IGVsc2UgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwppbmRleCAxMDg1YTU3Li44MGY1OWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKQEAgLTMxNCwyMSArMzE0LDI0IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXN1bHQ7CisJaW50IHJlc3VsdCwgd2FzX3Rocm90dGxlZDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPnRocm90dGxlZCA9IGZhbHNlOworCXdhc190aHJvdHRsZWQgPSBwcml2LT5hY3R1YWxseV90aHJvdHRsZWQ7CiAJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+YnVsa19yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+YnVsa19yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCWlmICh3YXNfdGhyb3R0bGVkKSB7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmJ1bGtfcmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgb3B0aWNvbl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBmNjZlMzk4Li4zMTlhYWY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMTY1LDYgKzE2NSw3IEBACiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNECQkJMHgxNDNECiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNFCQkJMHgxNDNFCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNGCQkJMHgxNDNGCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNEFDCQkJMHgxNEFDCiAKICNkZWZpbmUgUVVBTlRBX1ZFTkRPUl9JRAkJCTB4MDQwOAogI2RlZmluZSBRVUFOVEFfUFJPRFVDVF9RMTAxCQkJMHhFQTAyCkBAIC0zMDcsNiArMzA4LDcgQEAKIAogI2RlZmluZSBETElOS19WRU5ET1JfSUQJCQkJMHgxMTg2CiAjZGVmaW5lIERMSU5LX1BST0RVQ1RfRFdNXzY1MgkJCTB4M2UwNAorI2RlZmluZSBETElOS19QUk9EVUNUX0RXTV82NTJfVTUJCTB4Y2UxNgogCiAjZGVmaW5lIFFJU0RBX1ZFTkRPUl9JRAkJCQkweDFkYTUKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjFfNDUxMgkJCTB4NDUxMgpAQCAtMzE0LDEwICszMTYsMTQgQEAKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjBfNDUxNQkJCTB4NDUxNQogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMF80NTE5CQkJMHg0NTE5CiAKKy8qIFRMQVlURUNIIFBST0RVQ1RTICovCisjZGVmaW5lIFRMQVlURUNIX1ZFTkRPUl9JRAkJCTB4MjBCOQorI2RlZmluZSBUTEFZVEVDSF9QUk9EVUNUX1RFVTgwMAkJCTB4MTY4MgogCiAvKiBUT1NISUJBIFBST0RVQ1RTICovCiAjZGVmaW5lIFRPU0hJQkFfVkVORE9SX0lECQkJMHgwOTMwCiAjZGVmaW5lIFRPU0hJQkFfUFJPRFVDVF9IU0RQQV9NSU5JQ0FSRAkJMHgxMzAyCisjZGVmaW5lIFRPU0hJQkFfUFJPRFVDVF9HNDUwCQkJMHgwZDQ1CiAKICNkZWZpbmUgQUxJTktfVkVORE9SX0lECQkJCTB4MWUwZQogI2RlZmluZSBBTElOS19QUk9EVUNUXzNHVQkJCTB4OTIwMApAQCAtMzI2LDYgKzMzMiw5IEBACiAjZGVmaW5lIEFMQ0FURUxfVkVORE9SX0lECQkJMHgxYmJiCiAjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9YMDYwUwkJCTB4MDAwMAogCisvKiBBaXJwbHVzIHByb2R1Y3RzICovCisjZGVmaW5lIEFJUlBMVVNfVkVORE9SX0lECQkJMHgxMDExCisjZGVmaW5lIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTAJCQkweDMxOTgKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKQEAgLTQyNCw2ICs0MzMsNyBAQAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0M0QsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzRSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDNGLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTRBQykgfSwKIAl7IFVTQl9ERVZJQ0UoQU1PSV9WRU5ET1JfSUQsIEFNT0lfUFJPRFVDVF85NTA4KSB9LAogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9WNjQwKSB9LCAvKiBOb3ZhdGVsIE1lcmxpbiBWNjQwL1hWNjIwICovCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y2MjApIH0sIC8qIE5vdmF0ZWwgTWVybGluIFY2MjAvUzYyMCAqLwpAQCAtNTc3LDE0ICs1ODcsMTggQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDMjcyNiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0UoQkVOUV9WRU5ET1JfSUQsIEJFTlFfUFJPRFVDVF9IMTApIH0sCiAJeyBVU0JfREVWSUNFKERMSU5LX1ZFTkRPUl9JRCwgRExJTktfUFJPRFVDVF9EV01fNjUyKSB9LAorCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1Ml9VNSkgfSwgLyogWWVzLCBBTElOS19WRU5ET1JfSUQgKi8KIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMV80NTEyKSB9LAogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIxXzQ1MjMpIH0sCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjBfNDUxNSkgfSwKIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMF80NTE5KSB9LAorCXsgVVNCX0RFVklDRShUT1NISUJBX1ZFTkRPUl9JRCwgVE9TSElCQV9QUk9EVUNUX0c0NTApIH0sCiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfSFNEUEFfTUlOSUNBUkQgKSB9LCAvKiBUb3NoaWJhIDNHIEhTRFBBID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NzBEIE1pbmlDYXJkICovCiAJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgMHg5MDAwKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oQUxJTktfVkVORE9SX0lELCBBTElOS19QUk9EVUNUXzNHVSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0UoQUxDQVRFTF9WRU5ET1JfSUQsIEFMQ0FURUxfUFJPRFVDVF9YMDYwUykgfSwKKwl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCisJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggMGY0YTcwY2UuLmM2NDRlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAKIAlkYmcoIiVzKCk6IHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiIsIF9fZnVuY19fKTsKIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0ICE9IDApIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiCiAJCQkJIiB3aXRoIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKQEAgLTMzNSw3ICszMzUsNyBAQAogCiAJCWRiZygiJXMoKTogc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19mdW5jX18pOwogCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9OT0lPKTsKIAkJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiB1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCIKIAkJCQkiIHdpdGggZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAKIAlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKIAlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfTk9JTyk7CiAJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkIgogCQkJICAgICAgICIgd2l0aCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggMTEyOGUwMS4uOWVjMWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtMTA0NiwxMyArMTA0NiwxNSBAQAogCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAlpZiAobGluZV9zdGF0dXMgJiBVQVJUX09WRVJSVU5fRVJST1IpCiAJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwotCWlmIChwb3J0LT5jb25zb2xlICYmIHBvcnQtPnN5c3JxKSB7CisKKwlpZiAodHR5X2ZsYWcgPT0gVFRZX05PUk1BTCAmJiAhKHBvcnQtPmNvbnNvbGUgJiYgcG9ydC0+c3lzcnEpKQorCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwllbHNlIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGg7ICsraSkKIAkJCWlmICghdXNiX3NlcmlhbF9oYW5kbGVfc3lzcnFfY2hhcih0dHksIHBvcnQsIGRhdGFbaV0pKQogCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgdHR5X2ZsYWcpOwotCX0gZWxzZQotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9CiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IDhjMDc1YjIuLjUwMTkzMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgV2hvbSBiYXNlZCBoaXMgb24gdGhlIEtleXNwYW4gZHJpdmVyIGJ5IEh1Z2ggQmxlbWluZ3MgPGh1Z2hAYmxlbWluZ3Mub3JnPgogKi8KIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidi4xLjMuNyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYuMS4zLjgiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIktldmluIExsb3lkLCBFbGluYSBQYXNoZXZhLCBNYXR0aGV3IFNhZmFyLCBSb3J5IEZpbGVyIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIERyaXZlciBmb3IgU2llcnJhIFdpcmVsZXNzIFVTQiBtb2RlbXMiCiAKQEAgLTI5Niw3ICsyOTYsNiBAQAogCWludCBkc3Jfc3RhdGU7CiAJaW50IGRjZF9zdGF0ZTsKIAlpbnQgcmlfc3RhdGU7Ci0KIAl1bnNpZ25lZCBpbnQgb3BlbmVkOjE7CiB9OwogCkBAIC0zMDYsNiArMzA1LDggQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJX191MTYgaW50ZXJmYWNlID0gMDsKIAlpbnQgdmFsID0gMDsKKwlpbnQgZG9fc2VuZCA9IDA7CisJaW50IHJldHZhbDsKIAogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTMyNCwxMCArMzI1LDcgQEAKIAkJICovCiAJCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CiAJCQkvKiBzZW5kIGNvbnRyb2wgbWVzc2FnZSAqLwotCQkJcmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCQl1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQkJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLAotCQkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJCWRvX3NlbmQgPSAxOwogCQl9CiAJfQogCkBAIC0zMzksMTIgKzMzNywxOCBAQAogCQkJaW50ZXJmYWNlID0gMTsKIAkJZWxzZSBpZiAocG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID09IDUpCiAJCQlpbnRlcmZhY2UgPSAyOwotCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAotCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLAotCQkJTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJCWRvX3NlbmQgPSAxOwogCX0KLQlyZXR1cm4gMDsKKwlpZiAoIWRvX3NlbmQpCisJCXJldHVybiAwOworCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIHNpZXJyYV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtNzczLDggKzc3NywxMSBAQAogCiAJaWYgKHNlcmlhbC0+ZGV2KSB7CiAJCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7Ci0JCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpCisJCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKKwkJCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwkJCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAJCQlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKKwkJfQogCQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCQlwb3J0ZGF0YS0+b3BlbmVkID0gMDsKQEAgLTc4OCw4ICs3OTUsNiBAQAogCQkJc2llcnJhX3JlbGVhc2VfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2ldKTsKIAkJCXBvcnRkYXRhLT5pbl91cmJzW2ldID0gTlVMTDsKIAkJfQotCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwotCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJfQogfQogCkBAIC04MjcsNiArODMyLDggQEAKIAlpZiAoZXJyKSB7CiAJCS8qIGdldCByaWQgb2YgZXZlcnl0aGluZyBhcyBpbiBjbG9zZSAqLwogCQlzaWVycmFfY2xvc2UocG9ydCk7CisJCS8qIHJlc3RvcmUgYmFsYW5jZSBmb3IgYXV0b3BtICovCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAJCXJldHVybiBlcnI7CiAJfQogCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOwpAQCAtOTE1LDcgKzkyMiw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBzdG9wX3JlYWRfd3JpdGVfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewotCWludCBpLCBqOworCWludCBpOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCkBAIC05MjMsOCArOTMwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspCi0JCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPmluX3VyYnNbal0pOworCQlzaWVycmFfc3RvcF9yeF91cmJzKHBvcnQpOwogCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwb3J0ZGF0YS0+YWN0aXZlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKaW5kZXggY2I3ZTk1Zi4uYjI4MmMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpAQCAtMTY1LDM0ICsxNjUsMzYgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT50aHJvdHRsZWQgPSB0cnVlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzeW1ib2xfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXN1bHQ7CisJYm9vbCB3YXNfdGhyb3R0bGVkOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJd2FzX3Rocm90dGxlZCA9IHByaXYtPmFjdHVhbGx5X3Rocm90dGxlZDsKIAlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSBmYWxzZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAogCXByaXYtPmludF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmludF91cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwlpZiAod2FzX3Rocm90dGxlZCkgeworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJfQogfQogCiBzdGF0aWMgaW50IHN5bWJvbF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCBmZjc1YTM1Li5iZDNmYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTE1Niw3ICsxNTYsOCBAQAogCWlmIChzZXJpYWwtPm1pbm9yICE9IFNFUklBTF9UVFlfTk9fTUlOT1IpCiAJCXJldHVybl9zZXJpYWwoc2VyaWFsKTsKIAotCXNlcmlhbC0+dHlwZS0+cmVsZWFzZShzZXJpYWwpOworCWlmIChzZXJpYWwtPmF0dGFjaGVkKQorCQlzZXJpYWwtPnR5cGUtPnJlbGVhc2Uoc2VyaWFsKTsKIAogCS8qIE5vdyB0aGF0IG5vdGhpbmcgaXMgdXNpbmcgdGhlIHBvcnRzLCB0aGV5IGNhbiBiZSBmcmVlZCAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpIHsKQEAgLTE5Miw3ICsxOTMsNyBAQAogICogVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgYSBuZXcgdHR5IGdldHMgdXNlZC4gIEhlbmNlIHRoaXMgaXMgd2hlcmUgd2UKICAqIGFjcXVpcmUgcmVmZXJlbmNlcyB0byB0aGUgdXNiX3NlcmlhbCBzdHJ1Y3R1cmUgYW5kIHRoZSBkcml2ZXIgbW9kdWxlLAogICogd2hlcmUgd2Ugc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBwb3J0LCBhbmQgd2hlcmUgd2UgZG8gYW4gYXV0b3Jlc3VtZS4KLSAqIEFsbCB0aGVzZSBhY3Rpb25zIGFyZSByZXZlcnNlZCBpbiBzZXJpYWxfcmVsZWFzZSgpLgorICogQWxsIHRoZXNlIGFjdGlvbnMgYXJlIHJldmVyc2VkIGluIHNlcmlhbF9jbGVhbnVwKCkuCiAgKi8KIHN0YXRpYyBpbnQgc2VyaWFsX2luc3RhbGwoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKQEAgLTMzOSwxNSArMzQwLDE2IEBACiB9CiAKIC8qKgotICogc2VyaWFsX3JlbGVhc2UgLSBmcmVlIHJlc291cmNlcyBwb3N0IGNsb3NlL2hhbmd1cAorICogc2VyaWFsX2NsZWFudXAgLSBmcmVlIHJlc291cmNlcyBwb3N0IGNsb3NlL2hhbmd1cAogICogQHBvcnQ6IHBvcnQgdG8gZnJlZSB1cAogICoKICAqIERvIHRoZSByZXNvdXJjZSBmcmVlaW5nIGFuZCByZWZjb3VudCBkcm9wcGluZyBmb3IgdGhlIHBvcnQuCiAgKiBBdm9pZCBmcmVlaW5nIHRoZSBjb25zb2xlLgogICoKLSAqIENhbGxlZCB3aGVuIHRoZSBsYXN0IHR0eSBrcmVmIGlzIGRyb3BwZWQuCisgKiBDYWxsZWQgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgdGhlIGxhc3QgdHR5IGtyZWYgaXMgZHJvcHBlZCwKKyAqIGFuZCB0aGUgdHR5IGxheWVyIGhhcyBhbHJlYWR5IGRvbmUgdGhlIHR0eV9zaHV0ZG93bih0dHkpOwogICovCi1zdGF0aWMgdm9pZCBzZXJpYWxfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgc2VyaWFsX2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwpAQCAtMzYxLDkgKzM2Myw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JLyogU3RhbmRhcmQgc2h1dGRvd24gcHJvY2Vzc2luZyAqLwotCXR0eV9zaHV0ZG93bih0dHkpOwotCiAJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAKIAlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CkBAIC0xMDYxLDEyICsxMDYwLDE1IEBACiAJCW1vZHVsZV9wdXQodHlwZS0+ZHJpdmVyLm93bmVyKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlnb3RvIHByb2JlX2Vycm9yOworCQlzZXJpYWwtPmF0dGFjaGVkID0gMTsKIAkJaWYgKHJldHZhbCA+IDApIHsKIAkJCS8qIHF1aWV0bHkgYWNjZXB0IHRoaXMgZGV2aWNlLCBidXQgZG9uJ3QgYmluZCB0byBhCiAJCQkgICBzZXJpYWwgcG9ydCBhcyBpdCdzIGFib3V0IHRvIGRpc2FwcGVhciAqLwogCQkJc2VyaWFsLT5udW1fcG9ydHMgPSAwOwogCQkJZ290byBleGl0OwogCQl9CisJfSBlbHNlIHsKKwkJc2VyaWFsLT5hdHRhY2hlZCA9IDE7CiAJfQogCiAJaWYgKGdldF9mcmVlX3NlcmlhbChzZXJpYWwsIG51bV9wb3J0cywgJm1pbm9yKSA9PSBOVUxMKSB7CkBAIC0xMTY2LDggKzExNjgsMTAgQEAKIAogCWlmIChzZXJpYWwtPnR5cGUtPnN1c3BlbmQpIHsKIAkJciA9IHNlcmlhbC0+dHlwZS0+c3VzcGVuZChzZXJpYWwsIG1lc3NhZ2UpOwotCQlpZiAociA8IDApCisJCWlmIChyIDwgMCkgeworCQkJc2VyaWFsLT5zdXNwZW5kaW5nID0gMDsKIAkJCWdvdG8gZXJyX291dDsKKwkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CkBAIC0xMjEwLDcgKzEyMTQsNyBAQAogCS5jaGFyc19pbl9idWZmZXIgPQlzZXJpYWxfY2hhcnNfaW5fYnVmZmVyLAogCS50aW9jbWdldCA9CQlzZXJpYWxfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0JCXNlcmlhbF90aW9jbXNldCwKLQkuc2h1dGRvd24gPSAJCXNlcmlhbF9yZWxlYXNlLAorCS5jbGVhbnVwID0gCQlzZXJpYWxfY2xlYW51cCwKIAkuaW5zdGFsbCA9IAkJc2VyaWFsX2luc3RhbGwsCiAJLnByb2NfZm9wcyA9CQkmc2VyaWFsX3Byb2NfZm9wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IDFhYTVkMjAuLmFkMWY5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC01MTMsNyArNTEzLDggQEAKIAkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JCXByaXYtPmJ5dGVzX2luICs9IGF2YWlsYWJsZV9yb29tOworCQlpZiAodHR5KQorCQkJcHJpdi0+Ynl0ZXNfaW4gKz0gYXZhaWxhYmxlX3Jvb207CiAKIAl9IGVsc2UgewogCQlzcGluX2xvY2soJnByaXYtPmxvY2spOwpAQCAtNTgyLDEyICs1ODMsMTEgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnRocm90dGxlZCA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiB9CiAKIApAQCAtNTk1LDIxICs1OTUsMjMgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXN1bHQ7CisJaW50IHJlc3VsdCwgd2FzX3Rocm90dGxlZDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT50aHJvdHRsZWQgPSAwOworCXdhc190aHJvdHRsZWQgPSBwcml2LT5hY3R1YWxseV90aHJvdHRsZWQ7CiAJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAotCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCWlmICh3YXNfdGhyb3R0bGVkKSB7CisJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgcGFsbV9vc18zX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggNjI0MjRlZS4uMTA5M2QyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtOTQ5LDEzICs5NDksMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmluZm8tPmxvY2spOwogCWluZm8tPmZsYWdzIHw9IFRIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpbmZvLT5sb2NrKTsKIAogCXJldHVybjsKIH0KQEAgLTk2NiwxNCArOTY1LDEzIEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmluZm8tPmxvY2spOwogCWFjdHVhbGx5X3Rocm90dGxlZCA9IGluZm8tPmZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwogCWluZm8tPmZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpbmZvLT5sb2NrKTsKIAogCWlmIChhY3R1YWxseV90aHJvdHRsZWQpCiAJCXJ4X2RhdGFfc29mdGludCgmaW5mby0+cnhfd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCBlMjBkYzUyLi41ODlmNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCQkvKiBkZXZpY2Ugc3VwcG9ydHMgYW5kIG5lZWRzIGJpZ2dlciBzZW5zZSBidWZmZXIgKi8KIAkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9TQU5FX1NFTlNFKQogCQkJc2Vuc2Vfc2l6ZSA9IH4wOwotCitSZXRyeV9TZW5zZToKIAkJVVNfREVCVUdQKCJJc3N1aW5nIGF1dG8tUkVRVUVTVF9TRU5TRVxuIik7CiAKIAkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCBzZW5zZV9zaXplKTsKQEAgLTcyMCw2ICs3MjAsMjEgQEAKIAkJCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQkJZ290byBIYW5kbGVfRXJyb3JzOwogCQl9CisKKwkJLyogU29tZSBkZXZpY2VzIGNsYWltIHRvIHN1cHBvcnQgbGFyZ2VyIHNlbnNlIGJ1dCBmYWlsIHdoZW4KKwkJICogdHJ5aW5nIHRvIHJlcXVlc3QgaXQuIFdoZW4gYSB0cmFuc3BvcnQgZmFpbHVyZSBoYXBwZW5zCisJCSAqIHVzaW5nIFVTX0ZTX1NBTkVfU0VOU0UsIHdlIGFsd2F5cyByZXRyeSB3aXRoIGEgc3RhbmRhcmQKKwkJICogKHNtYWxsKSBzZW5zZSByZXF1ZXN0LiBUaGlzIGZpeGVzIHNvbWUgVVNCIEdTTSBtb2RlbXMKKwkJICovCisJCWlmICh0ZW1wX3Jlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEICYmCisJCSAgICAodXMtPmZmbGFncyAmIFVTX0ZMX1NBTkVfU0VOU0UpICYmCisJCSAgICBzZW5zZV9zaXplICE9IFVTX1NFTlNFX1NJWkUpIHsKKwkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlLCByZXRyeSBzbWFsbCBzZW5zZVxuIik7CisJCQlzZW5zZV9zaXplID0gVVNfU0VOU0VfU0laRTsKKwkJCWdvdG8gUmV0cnlfU2Vuc2U7CisJCX0KKworCQkvKiBPdGhlciBmYWlsdXJlcyAqLwogCQlpZiAodGVtcF9yZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKIAkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlXG4iKTsKIApAQCAtNzY4LDE3ICs3ODMsMzIgQEAKIAkJLyogc2V0IHRoZSByZXN1bHQgc28gdGhlIGhpZ2hlciBsYXllcnMgZXhwZWN0IHRoaXMgZGF0YSAqLwogCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAotCQkvKiBJZiB0aGluZ3MgYXJlIHJlYWxseSBva2F5LCB0aGVuIGxldCdzIHNob3cgdGhhdC4gIFplcm8KLQkJICogb3V0IHRoZSBzZW5zZSBidWZmZXIgc28gdGhlIGhpZ2hlciBsYXllcnMgd29uJ3QgcmVhbGl6ZQotCQkgKiB3ZSBkaWQgYW4gdW5zb2xpY2l0ZWQgYXV0by1zZW5zZS4gKi8KLQkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCAmJgotCQkJLyogRmlsZW1hcmsgMCwgaWdub3JlIEVPTSwgSUxJIDAsIG5vIHNlbnNlICovCisJCS8qIFdlIG9mdGVuIGdldCBlbXB0eSBzZW5zZSBkYXRhLiAgVGhpcyBjb3VsZCBpbmRpY2F0ZSB0aGF0CisJCSAqIGV2ZXJ5dGhpbmcgd29ya2VkIG9yIHRoYXQgdGhlcmUgd2FzIGFuIHVuc3BlY2lmaWVkCisJCSAqIHByb2JsZW0uICBXZSBoYXZlIHRvIGRlY2lkZSB3aGljaC4KKwkJICovCisJCWlmICgJLyogRmlsZW1hcmsgMCwgaWdub3JlIEVPTSwgSUxJIDAsIG5vIHNlbnNlICovCiAJCQkJKHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhhZikgPT0gMCAmJgogCQkJLyogTm8gQVNDIG9yIEFTQ1EgKi8KIAkJCQlzcmItPnNlbnNlX2J1ZmZlclsxMl0gPT0gMCAmJgogCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzEzXSA9PSAwKSB7Ci0JCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7Ci0JCQlzcmItPnNlbnNlX2J1ZmZlclswXSA9IDB4MDsKKworCQkJLyogSWYgdGhpbmdzIGFyZSByZWFsbHkgb2theSwgdGhlbiBsZXQncyBzaG93IHRoYXQuCisJCQkgKiBaZXJvIG91dCB0aGUgc2Vuc2UgYnVmZmVyIHNvIHRoZSBoaWdoZXIgbGF5ZXJzCisJCQkgKiB3b24ndCByZWFsaXplIHdlIGRpZCBhbiB1bnNvbGljaXRlZCBhdXRvLXNlbnNlLgorCQkJICovCisJCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzBdID0gMHgwOworCisJCQkvKiBJZiB0aGVyZSB3YXMgYSBwcm9ibGVtLCByZXBvcnQgYW4gdW5zcGVjaWZpZWQKKwkJCSAqIGhhcmR3YXJlIGVycm9yIHRvIHByZXZlbnQgdGhlIGhpZ2hlciBsYXllcnMgZnJvbQorCQkJICogZW50ZXJpbmcgYW4gaW5maW5pdGUgcmV0cnkgbG9vcC4KKwkJCSAqLworCQkJfSBlbHNlIHsKKwkJCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCQlzcmItPnNlbnNlX2J1ZmZlclsyXSA9IEhBUkRXQVJFX0VSUk9SOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCAwNzlhZTBmLi5kNGYwMzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTE4MjMsNiArMTgyMywxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKIAorLyogUmVwb3J0ZWQgYnkgU2VyZ2V5IFBpbmFldiA8ZGZvQGFudGV4LnJ1PiAqLworVU5VU1VBTF9ERVYoICAweDQxMDIsIDB4MTA1OSwgMHgwMDAwLCAgMHgwMDAwLAorICAgICAgICAgICAgICAgImlSaXZlciIsCisgICAgICAgICAgICAgICAiUDdLIiwKKyAgICAgICAgICAgICAgIFVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorICAgICAgICAgICAgICAgVVNfRkxfTUFYX1NFQ1RPUlNfNjQgKSwKKwogLyoKICAqIERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+CiAgKiBUaGUga2V5IG1ha2VzIHRoZSBTQ1NJIHN0YWNrIHByaW50IGNvbmZ1c2luZyAoYnV0IGhhcm1sZXNzKSBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKaW5kZXggYjJmMTQ5Zi4uNDUxNmMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCkBAIC0yMDAsMzUgKzIwMCw0MCBAQAogewogCWludCByZXN1bHQsIGJ5dGVzLCBzZWNkX3NpemU7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVzYl9kZXYtPmRldjsKLQlzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3Igc2VjZDsKKwlzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IgKnNlY2Q7CiAJY29uc3Qgc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgKmV0ZCwgKmNjbTFfZXRkID0gTlVMTDsKLQl2b2lkICpzZWNkX2J1ZjsKIAljb25zdCB2b2lkICppdHIsICp0b3A7CiAJY2hhciBidWZbNjRdOwogCisJc2VjZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciksIEdGUF9LRVJORUwpOworCWlmIChzZWNkID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9TRUNVUklUWSwKLQkJCQkgICAgMCwgJnNlY2QsIHNpemVvZihzZWNkKSk7CisJCQkJICAgIDAsIHNlY2QsIHNpemVvZihzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IpKTsKIAlpZiAocmVzdWx0IDwgc2l6ZW9mKHNlY2QpKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKIAkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOwotCQlnb3RvIGVycm9yX3NlY2Q7CisJCWdvdG8gb3V0OwogCX0KLQlzZWNkX3NpemUgPSBsZTE2X3RvX2NwdShzZWNkLndUb3RhbExlbmd0aCk7Ci0Jc2VjZF9idWYgPSBrbWFsbG9jKHNlY2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNlY2RfYnVmID09IE5VTEwpIHsKKwlzZWNkX3NpemUgPSBsZTE2X3RvX2NwdShzZWNkLT53VG90YWxMZW5ndGgpOworCXNlY2QgPSBrcmVhbGxvYyhzZWNkLCBzZWNkX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChzZWNkID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3Igc2VjdXJpdHkgZGVzY3JpcHRvcnNcbiIpOwotCQlnb3RvIGVycm9yX3NlY2RfYWxsb2M7CisJCWdvdG8gb3V0OwogCX0KIAlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX1NFQ1VSSVRZLAotCQkJCSAgICAwLCBzZWNkX2J1Ziwgc2VjZF9zaXplKTsKKwkJCQkgICAgMCwgc2VjZCwgc2VjZF9zaXplKTsKIAlpZiAocmVzdWx0IDwgc2VjZF9zaXplKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKIAkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOwotCQlnb3RvIGVycm9yX3NlY2RfYWxsOworCQlnb3RvIG91dDsKIAl9CiAJYnl0ZXMgPSAwOwotCWl0ciA9IHNlY2RfYnVmICsgc2l6ZW9mKHNlY2QpOwotCXRvcCA9IHNlY2RfYnVmICsgcmVzdWx0OworCWl0ciA9ICZzZWNkWzFdOworCXRvcCA9ICh2b2lkICopc2VjZCArIHJlc3VsdDsKIAl3aGlsZSAoaXRyIDwgdG9wKSB7CiAJCWV0ZCA9IGl0cjsKIAkJaWYgKHRvcCAtIGl0ciA8IHNpemVvZigqZXRkKSkgewpAQCAtMjU5LDI0ICsyNjQsMTYgQEAKIAkJZGV2X2VycihkZXYsICJXVVNCIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgQ0NNMSBlbmNyeXB0aW9uLCAiCiAJCQkiY2FuJ3QgdXNlIVxuIik7CiAJCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3Jfbm9fY2NtMTsKKwkJZ290byBvdXQ7CiAJfQogCXd1c2JfZGV2LT5jY20xX2V0ZCA9ICpjY20xX2V0ZDsKIAlkZXZfZGJnKGRldiwgInN1cHBvcnRlZCBlbmNyeXB0aW9uOiAlczsgdXNpbmcgJXMgKDB4JTAyeC8lMDJ4KVxuIiwKIAkJYnVmLCB3dXNiX2V0X25hbWUoY2NtMV9ldGQtPmJFbmNyeXB0aW9uVHlwZSksCiAJCWNjbTFfZXRkLT5iRW5jcnlwdGlvblZhbHVlLCBjY20xX2V0ZC0+YkF1dGhLZXlJbmRleCk7CiAJcmVzdWx0ID0gMDsKLQlrZnJlZShzZWNkX2J1Zik7CiBvdXQ6CisJa2ZyZWUoc2VjZCk7CiAJcmV0dXJuIHJlc3VsdDsKLQotCi1lcnJvcl9ub19jY20xOgotZXJyb3Jfc2VjZF9hbGw6Ci0Ja2ZyZWUoc2VjZF9idWYpOwotZXJyb3Jfc2VjZF9hbGxvYzoKLWVycm9yX3NlY2Q6Ci0JZ290byBvdXQ7CiB9CiAKIHZvaWQgd3VzYl9kZXZfc2VjX3JtKHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91d2ItZGVidWcuYyBiL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCmluZGV4IDRhNDI5OTMuLjJlZWNlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IGxlbjsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29tbWFuZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29tbWFuZF9mb3BzID0gewogCS5vcGVuICAgPSBjb21tYW5kX29wZW4sCiAJLndyaXRlICA9IGNvbW1hbmRfd3JpdGUsCiAJLnJlYWQgICA9IE5VTEwsCkBAIC0yNTUsNyArMjU1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcmVzZXJ2YXRpb25zX3ByaW50LCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVzZXJ2YXRpb25zX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXNlcnZhdGlvbnNfZm9wcyA9IHsKIAkub3BlbiAgICA9IHJlc2VydmF0aW9uc19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZHJwX2F2YWlsX3ByaW50LCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJwX2F2YWlsX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcnBfYXZhaWxfZm9wcyA9IHsKIAkub3BlbiAgICA9IGRycF9hdmFpbF9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi93aGMtcmMuYyBiL2RyaXZlcnMvdXdiL3doYy1yYy5jCmluZGV4IDFkOWE2ZjUuLjAxOTUwYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3doYy1yYy5jCisrKyBiL2RyaXZlcnMvdXdiL3doYy1yYy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCA5YmJiMjg1Li4xODhlMWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC0yMTIxLDcgKzIxMjEsNyBAQAogCiBjb25maWcgRkJfUFJFX0lOSVRfRkIKIAlib29sICJEb24ndCByZWluaXRpYWxpemUsIHVzZSBib290bG9hZGVyJ3MgR0RDL0Rpc3BsYXkgY29uZmlndXJhdGlvbiIKLQlkZXBlbmRzIG9uIEZCX01CODYyWFhfTElNRQorCWRlcGVuZHMgb24gRkIgJiYgRkJfTUI4NjJYWF9MSU1FCiAJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIGRpc3BsYXkgY29udGVudHMgc2hvdWxkIGJlIGluaGVyaXRlZCBhcyBzZXQgYnkKIAkgIHRoZSBib290bG9hZGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdGFmYi5jIGIvZHJpdmVycy92aWRlby9hdGFmYi5jCmluZGV4IDhjZDI3OWIuLjM3NjI0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKQEAgLTMyOSwxMiArMzI5LDYgQEAKICAqCiAgKgkqIHBlcmZvcm0gZmIgc3BlY2lmaWMgbW1hcCAqCiAgKglpbnQgKCpmYl9tbWFwKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotICoKLSAqCSogc2F2ZSBjdXJyZW50IGhhcmR3YXJlIHN0YXRlICoKLSAqCXZvaWQgKCpmYl9zYXZlX3N0YXRlKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0gKgotICoJKiByZXN0b3JlIHNhdmVkIHN0YXRlICoKLSAqCXZvaWQgKCpmYl9yZXN0b3JlX3N0YXRlKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAgKiB9IDsKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKaW5kZXggMjgzMGZmZC4uZDVlODAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYwpAQCAtNDg0LDYgKzQ4NCw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGNsa192YWx1ZV9raHo7CiAJdW5zaWduZWQgbG9uZyBiaXRzX3Blcl9saW5lOworCXVuc2lnbmVkIGxvbmcgcGl4X2ZhY3RvciA9IDI7CiAKIAltaWdodF9zbGVlcCgpOwogCkBAIC01MTYsMjAgKzUxNywyNCBAQAogCS8qIE5vdywgdGhlIExDREMgY29yZS4uLiAqLwogCiAJLyogU2V0IHBpeGVsIGNsb2NrICovCisJaWYgKGNwdV9pc19hdDkxc2FtOWc0NSgpICYmICFjcHVfaXNfYXQ5MXNhbTlnNDVlcygpKQorCQlwaXhfZmFjdG9yID0gMTsKKwogCWNsa192YWx1ZV9raHogPSBjbGtfZ2V0X3JhdGUoc2luZm8tPmxjZGNfY2xrKSAvIDEwMDA7CiAKIAl2YWx1ZSA9IERJVl9ST1VORF9VUChjbGtfdmFsdWVfa2h6LCBQSUNPUzJLSFooaW5mby0+dmFyLnBpeGNsb2NrKSk7CiAKLQlpZiAodmFsdWUgPCAyKSB7CisJaWYgKHZhbHVlIDwgcGl4X2ZhY3RvcikgewogCQlkZXZfbm90aWNlKGluZm8tPmRldmljZSwgIkJ5cGFzc2luZyBwaXhlbCBjbG9jayBkaXZpZGVyXG4iKTsKIAkJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfTENEQ09OMSwgQVRNRUxfTENEQ19CWVBBU1MpOwogCX0gZWxzZSB7Ci0JCXZhbHVlID0gKHZhbHVlIC8gMikgLSAxOworCQl2YWx1ZSA9ICh2YWx1ZSAvIHBpeF9mYWN0b3IpIC0gMTsKIAkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgICogcHJvZ3JhbW1pbmcgQ0xLVkFMID0gMHglMDhseFxuIiwKIAkJCQl2YWx1ZSk7CiAJCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0xDRENPTjEsCiAJCQkJdmFsdWUgPDwgQVRNRUxfTENEQ19DTEtWQUxfT0ZGU0VUKTsKLQkJaW5mby0+dmFyLnBpeGNsb2NrID0gS0haMlBJQ09TKGNsa192YWx1ZV9raHogLyAoMiAqICh2YWx1ZSArIDEpKSk7CisJCWluZm8tPnZhci5waXhjbG9jayA9CisJCQlLSFoyUElDT1MoY2xrX3ZhbHVlX2toeiAvIChwaXhfZmFjdG9yICogKHZhbHVlICsgMSkpKTsKIAkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgIHVwZGF0ZWQgcGl4Y2xrOiAgICAgJWx1IEtIelxuIiwKIAkJCQkJUElDT1MyS0haKGluZm8tPnZhci5waXhjbG9jaykpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IDkwODYxY2QuLjA5YmZhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtMzEsNiArMzEsMTMgQEAKIAkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgTENEIHBhbmVscyB1c3VhbGx5IGZvdW5kIG9uIFNIQVJQCiAJICBjb3JnaSAoQzd4MCkgYW5kIHNwaXR6IChDeHgwMCkgbW9kZWxzLgogCitjb25maWcgTENEX0xNUzI4M0dGMDUKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBMTVMyODNHRjA1IExDRCIKKwlkZXBlbmRzIG9uIExDRF9DTEFTU19ERVZJQ0UgJiYgU1BJX01BU1RFUiAmJiBHRU5FUklDX0dQSU8KKwloZWxwCisJICBTUEkgZHJpdmVyIGZvciBTYW1zdW5nIExNUzI4M0dGMDUuIFRoaXMgcHJvdmlkZXMgYmFzaWMgc3VwcG9ydAorCSAgZm9yIHBvd2VyaW5nIHRoZSBMQ0QgdXAvZG93biB0aHJvdWdoIGEgc3lzZnMgaW50ZXJmYWNlLgorCiBjb25maWcgTENEX0xUVjM1MFFWCiAJdHJpc3RhdGUgIlNhbXN1bmcgTFRWMzUwUVYgTENEIFBhbmVsIgogCWRlcGVuZHMgb24gTENEX0NMQVNTX0RFVklDRSAmJiBTUElfTUFTVEVSCkBAIC0yMjksMyArMjM2LDI5IEBACiAJaGVscAogCSAgSWYgeW91IGhhdmUgYSBUYWJsZXRraW9zayBTYWhhcmEgVG91Y2gtaVQsIHNheSB5IHRvIGVuYWJsZSB0aGUKIAkgIGJhY2tsaWdodCBkcml2ZXIuCisKK2NvbmZpZyBCQUNLTElHSFRfV004MzFYCisJdHJpc3RhdGUgIldNODMxeCBQTUlDIEJhY2tsaWdodCBEcml2ZXIiCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIE1GRF9XTTgzMVgKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIGJhY2tsaWdodCBkcml2ZW4gYnkgdGhlIElTSU5LIGFuZCBEQ0RDIG9mIGEKKwkgIFdNODMxeCBQTUlDIHNheSB5IHRvIGVuYWJsZSB0aGUgYmFja2xpZ2h0IGRyaXZlciBmb3IgaXQuCisKK2NvbmZpZyBCQUNLTElHSFRfQURYCisJdHJpc3RhdGUgIkF2aW9uaWMgRGVzaWduIFhhbnRob3MgQmFja2xpZ2h0IERyaXZlciIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgQVJDSF9QWEFfQURYCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IFkgdG8gZW5hYmxlIHRoZSBiYWNrbGlnaHQgZHJpdmVyIG9uIEF2aW9uaWMgRGVzaWduIFhhbnRob3MtYmFzZWQKKwkgIGJvYXJkcy4KKworY29uZmlnIEJBQ0tMSUdIVF9BRFA1NTIwCisJdHJpc3RhdGUgIkJhY2tsaWdodCBEcml2ZXIgZm9yIEFEUDU1MjAvQURQNTUwMSB1c2luZyBXTEVEIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBQTUlDX0FEUDU1MjAKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgY29ubmVjdGVkIHRvIHRoZSBCU1QvQkxfU05LIG91dHB1dCBvZgorCSAgQURQNTUyMCBvciBBRFA1NTAxLCBzYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgYWRwNTUyMF9ibC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQppbmRleCA0ZWIxNzhjLi45YTQwNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKIG9iai0kKENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFKSAgICAgKz0gbGNkLm8KIG9iai0kKENPTkZJR19MQ0RfQ09SR0kpCQkgICArPSBjb3JnaV9sY2Qubwogb2JqLSQoQ09ORklHX0xDRF9IUDcwMCkJCSAgICs9IGpvcm5hZGE3MjBfbGNkLm8KK29iai0kKENPTkZJR19MQ0RfTE1TMjgzR0YwNSkJICAgKz0gbG1zMjgzZ2YwNS5vCiBvYmotJChDT05GSUdfTENEX0xUVjM1MFFWKQkgICArPSBsdHYzNTBxdi5vCiBvYmotJChDT05GSUdfTENEX0lMSTkzMjApCSAgICs9IGlsaTkzMjAubwogb2JqLSQoQ09ORklHX0xDRF9QTEFURk9STSkJICAgKz0gcGxhdGZvcm1fbGNkLm8KQEAgLTI0LDQgKzI1LDcgQEAKIG9iai0kKENPTkZJR19CQUNLTElHSFRfTUJQX05WSURJQSkgKz0gbWJwX252aWRpYV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX1RPU0EpCSs9IHRvc2FfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9TQUhBUkEpCSs9IGtiMzg4Nl9ibC5vCitvYmotJChDT05GSUdfQkFDS0xJR0hUX1dNODMxWCkJKz0gd204MzF4X2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfQURYKSAgICArPSBhZHhfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BRFA1NTIwKQkrPSBhZHA1NTIwX2JsLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDVkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBCYWNrbGlnaHQgZHJpdmVyIGZvciBBbmFsb2cgRGV2aWNlcyBBRFA1NTIwL0FEUDU1MDEgTUZEIFBNSUNzCisgKgorICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2FkcDU1MjAuaD4KKworc3RydWN0IGFkcDU1MjBfYmwgeworCXN0cnVjdCBkZXZpY2UgKm1hc3RlcjsKKwlzdHJ1Y3QgYWRwNTUyMF9iYWNrbGlnaHRfcGxhdGZyb21fZGF0YSAqcGRhdGE7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdW5zaWduZWQgbG9uZyBjYWNoZWRfZGF5bGlnaHRfbWF4OworCWludCBpZDsKKwlpbnQgY3VycmVudF9icmlnaHRuZXNzOworfTsKKworc3RhdGljIGludCBhZHA1NTIwX2JsX3NldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwsIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCBkZXZpY2UgKm1hc3RlciA9IGRhdGEtPm1hc3RlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYXRhLT5wZGF0YS0+ZW5fYW1ibF9zZW5zKSB7CisJCWlmICgoYnJpZ2h0bmVzcyA+IDApICYmIChicmlnaHRuZXNzIDwgQURQNTAyMF9NQVhfQlJJR0hUTkVTUykpIHsKKwkJCS8qIERpc2FibGUgQW1iaWVudCBMaWdodCBhdXRvIGFkanVzdCAqLworCQkJcmV0IHw9IGFkcDU1MjBfY2xyX2JpdHMobWFzdGVyLCBCTF9DT05UUk9MLAorCQkJCQlCTF9BVVRPX0FESik7CisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgYnJpZ2h0bmVzcyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTUFYX0JSSUdIVE5FU1MgLT4gRW5hYmxlIEFtYmllbnQgTGlnaHQgYXV0byBhZGp1c3QKKwkJCSAqIHJlc3RvcmUgZGF5bGlnaHQgbDMgc3lzZnMgYnJpZ2h0bmVzcworCQkJICovCisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwKKwkJCQkJIGRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXgpOworCQkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMobWFzdGVyLCBCTF9DT05UUk9MLAorCQkJCQkgQkxfQVVUT19BREopOworCQl9CisJfSBlbHNlIHsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9NQVgsIGJyaWdodG5lc3MpOworCX0KKworCWlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgYnJpZ2h0bmVzcyA9PSAwKQorCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsCisJCQkJTU9ERV9TVEFUVVMsIERJTV9FTik7CisJZWxzZSBpZiAoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID09IDAgJiYgYnJpZ2h0bmVzcykKKwkJcmV0IHw9IGFkcDU1MjBfY2xyX2JpdHMobWFzdGVyLAorCQkJCU1PREVfU1RBVFVTLCBESU1fRU4pOworCisJaWYgKCFyZXQpCisJCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBhZHA1NTIwX2JsX3NldChibCwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTUyMF9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJaW50IGVycm9yOworCXVpbnQ4X3QgcmVnX3ZhbDsKKworCWVycm9yID0gYWRwNTUyMF9yZWFkKGRhdGEtPm1hc3RlciwgQkxfVkFMVUUsICZyZWdfdmFsKTsKKworCXJldHVybiBlcnJvciA/IGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA6IHJlZ192YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHA1NTIwX2JsX29wcyA9IHsKKwkudXBkYXRlX3N0YXR1cwk9IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MJPSBhZHA1NTIwX2JsX2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCBhZHA1NTIwX2JsX3NldHVwKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIgPSBkYXRhLT5tYXN0ZXI7CisJc3RydWN0IGFkcDU1MjBfYmFja2xpZ2h0X3BsYXRmcm9tX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgcGRhdGEtPmwxX2RheWxpZ2h0X21heCk7CisJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9ESU0sIHBkYXRhLT5sMV9kYXlsaWdodF9kaW0pOworCisJaWYgKHBkYXRhLT5lbl9hbWJsX3NlbnMpIHsKKwkJZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCA9IHBkYXRhLT5sMV9kYXlsaWdodF9tYXg7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgT0ZGSUNFX01BWCwgcGRhdGEtPmwyX29mZmljZV9tYXgpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIE9GRklDRV9ESU0sIHBkYXRhLT5sMl9vZmZpY2VfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVJLX01BWCwgcGRhdGEtPmwzX2RhcmtfbWF4KTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVJLX0RJTSwgcGRhdGEtPmwzX2RhcmtfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBMMl9UUklQLCBwZGF0YS0+bDJfdHJpcCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDJfSFlTLCBwZGF0YS0+bDJfaHlzdCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDNfVFJJUCwgcGRhdGEtPmwzX3RyaXApOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEwzX0hZUywgcGRhdGEtPmwzX2h5c3QpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFMU19DTVBSX0NGRywKKwkJCUFMU19DTVBSX0NGR19WQUwocGRhdGEtPmFibWxfZmlsdCwgTDNfRU4pKTsKKwl9CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEJMX0NPTlRST0wsCisJCQlCTF9DVFJMX1ZBTChwZGF0YS0+ZmFkZV9sZWRfbGF3LCBwZGF0YS0+ZW5fYW1ibF9zZW5zKSk7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEJMX0ZBREUsIEZBREVfVkFMKHBkYXRhLT5mYWRlX2luLAorCQkJcGRhdGEtPmZhZGVfb3V0KSk7CisKKwlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsIE1PREVfU1RBVFVTLCBCTF9FTiB8IERJTV9FTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCByZWcpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA1NTIwX3JlYWQoZGF0YS0+bWFzdGVyLCByZWcsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHJlZ192YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJYWRwNTUyMF93cml0ZShkYXRhLT5tYXN0ZXIsIHJlZywgdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBUktfTUFYKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIERBUktfTUFYKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihkYXJrX21heCwgMDY2NCwgYWRwNTUyMF9ibF9kYXJrX21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9kYXJrX21heF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgT0ZGSUNFX01BWCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIE9GRklDRV9NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9tYXgsIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9vZmZpY2VfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBWUxJR0hUX01BWCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCk7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X21heCwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc2hvdywKKwkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX2RpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFSS19ESU0pOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVJLX0RJTSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGFya19kaW0sIDA2NjQsIGFkcDU1MjBfYmxfZGFya19kaW1fc2hvdywKKwkJCWFkcDU1MjBfYmxfZGFya19kaW1fc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIE9GRklDRV9ESU0pOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIE9GRklDRV9ESU0pOworfQorc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9kaW0sIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX2RpbV9zaG93LAorCQkJYWRwNTUyMF9ibF9vZmZpY2VfZGltX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBWUxJR0hUX0RJTSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9ESU0pOworfQorc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X2RpbSwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdywKKwkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkcDU1MjBfYmxfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9kYXJrX21heC5hdHRyLAorCSZkZXZfYXR0cl9kYXJrX2RpbS5hdHRyLAorCSZkZXZfYXR0cl9vZmZpY2VfbWF4LmF0dHIsCisJJmRldl9hdHRyX29mZmljZV9kaW0uYXR0ciwKKwkmZGV2X2F0dHJfZGF5bGlnaHRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2RheWxpZ2h0X2RpbS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkcDU1MjBfYmxfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBhZHA1NTIwX2JsX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2JsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsOworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhOworCWludCByZXQgPSAwOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT5tYXN0ZXIgPSBwZGV2LT5kZXYucGFyZW50OworCWRhdGEtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoZGF0YS0+cGRhdGEgID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRhdGEtPmlkID0gcGRldi0+aWQ7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCisJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsIGRhdGEtPm1hc3RlciwKKwkJCWRhdGEsICZhZHA1NTIwX2JsX29wcyk7CisJaWYgKElTX0VSUihibCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gUFRSX0VSUihibCk7CisJfQorCisJYmwtPnByb3BzLm1heF9icmlnaHRuZXNzID0KKwkJYmwtPnByb3BzLmJyaWdodG5lc3MgPSBBRFA1MDIwX01BWF9CUklHSFRORVNTOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmYmwtPmRldi5rb2JqLAorCQkJJmFkcDU1MjBfYmxfYXR0cl9ncm91cCk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBzeXNmc1xuIik7CisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibCk7CisJCWtmcmVlKGRhdGEpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsKTsKKwlyZXQgfD0gYWRwNTUyMF9ibF9zZXR1cChibCk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWRwNTUyMF9ibF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKworCWFkcDU1MjBfY2xyX2JpdHMoZGF0YS0+bWFzdGVyLCBNT0RFX1NUQVRVUywgQkxfRU4pOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmYmwtPmRldi5rb2JqLAorCQkJCSZhZHA1NTIwX2JsX2F0dHJfZ3JvdXApOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJcmV0dXJuIGFkcDU1MjBfYmxfc2V0KGJsLCAwKTsKK30KKworc3RhdGljIGludCBhZHA1NTIwX2JsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYWRwNTUyMF9ibF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYWRwNTUyMF9ibF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkcDU1MjBfYmxfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhZHA1NTIwLWJhY2tsaWdodCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGFkcDU1MjBfYmxfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZHA1NTIwX2JsX3JlbW92ZSksCisJLnN1c3BlbmQJPSBhZHA1NTIwX2JsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZHA1NTIwX2JsX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkcDU1MjBfYmxfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFkcDU1MjBfYmxfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDU1MjBfYmxfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHA1NTIwX2JsX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWRwNTUyMF9ibF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwNTUyMF9ibF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURQNTUyMCgwMSkgQmFja2xpZ2h0IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphZHA1NTIwLWJhY2tsaWdodCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNiZGZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHguYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBdmlvbmljIERlc2lnbiBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBXcml0dGVuIGJ5IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBBRFhfQkFDS0xJR0hUX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUgQURYX0JBQ0tMSUdIVF9DT05UUk9MX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0JSSUdIVE5FU1MJMHgwOAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX1NUQVRVUwkJMHgxMAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0VSUk9SCQkweDE4CisKK3N0cnVjdCBhZHhibCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworfTsKKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2KQoreworCXN0cnVjdCBhZHhibCAqYmwgPSBibF9nZXRfZGF0YShibGRldik7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBibGRldi0+cHJvcHMuYnJpZ2h0bmVzczsKKwl3cml0ZWwodmFsdWUsIGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9CUklHSFRORVNTKTsKKworCXZhbHVlID0gcmVhZGwoYmwtPmJhc2UgKyBBRFhfQkFDS0xJR0hUX0NPTlRST0wpOworCisJaWYgKGJsZGV2LT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykKKwkJdmFsdWUgJj0gfkFEWF9CQUNLTElHSFRfQ09OVFJPTF9FTkFCTEU7CisJZWxzZQorCQl2YWx1ZSB8PSBBRFhfQkFDS0xJR0hUX0NPTlRST0xfRU5BQkxFOworCisJd3JpdGVsKHZhbHVlLCBibC0+YmFzZSArIEFEWF9CQUNLTElHSFRfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldikKK3sKKwlzdHJ1Y3QgYWR4YmwgKmJsID0gYmxfZ2V0X2RhdGEoYmxkZXYpOworCXUzMiBicmlnaHRuZXNzOworCisJYnJpZ2h0bmVzcyA9IHJlYWRsKGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9CUklHSFRORVNTKTsKKwlyZXR1cm4gYnJpZ2h0bmVzcyAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9jaGVja19mYihzdHJ1Y3QgZmJfaW5mbyAqZmIpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHhfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucyA9IDAsCisJLnVwZGF0ZV9zdGF0dXMgPSBhZHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzID0gYWR4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKKwkuY2hlY2tfZmIgPSBhZHhfYmFja2xpZ2h0X2NoZWNrX2ZiLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWR4X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgYWR4YmwgKmJsOworCWludCByZXQgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlibCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmJsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlibC0+YmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghYmwtPmJhc2UpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlibGRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2X25hbWUoJnBkZXYtPmRldiksICZwZGV2LT5kZXYsIGJsLAorCQkJJmFkeF9iYWNrbGlnaHRfb3BzKTsKKwlpZiAoIWJsZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJsZGV2LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmxkZXYtPnByb3BzLmJyaWdodG5lc3MgPSAweGZmOworCWJsZGV2LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibGRldik7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHhfYmFja2xpZ2h0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKKwlpbnQgcmV0ID0gMDsKKworCWJsZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJYmxkZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwlibGRldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmxkZXYpOworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkeF9iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGFkeF9iYWNrbGlnaHRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGFkeF9iYWNrbGlnaHRfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHhfYmFja2xpZ2h0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBhZHhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZHhfYmFja2xpZ2h0X3JlbW92ZSksCisJLnN1c3BlbmQgPSBhZHhfYmFja2xpZ2h0X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFkeF9iYWNrbGlnaHRfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFkeC1iYWNrbGlnaHQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWR4X2JhY2tsaWdodF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWR4X2JhY2tsaWdodF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWR4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFkeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWR4X2JhY2tsaWdodF9pbml0KTsKK21vZHVsZV9leGl0KGFkeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBCYWNrbGlnaHQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCmluZGV4IDE1NzA1N2MuLjY2MTVhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCkBAIC03Myw2ICs3MywyNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19GQiAqLwogCitzdGF0aWMgdm9pZCBiYWNrbGlnaHRfZ2VuZXJhdGVfZXZlbnQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJCSAgICAgZW51bSBiYWNrbGlnaHRfdXBkYXRlX3JlYXNvbiByZWFzb24pCit7CisJY2hhciAqZW52cFsyXTsKKworCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBCQUNLTElHSFRfVVBEQVRFX1NZU0ZTOgorCQllbnZwWzBdID0gIlNPVVJDRT1zeXNmcyI7CisJCWJyZWFrOworCWNhc2UgQkFDS0xJR0hUX1VQREFURV9IT1RLRVk6CisJCWVudnBbMF0gPSAiU09VUkNFPWhvdGtleSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVudnBbMF0gPSAiU09VUkNFPXVua25vd24iOworCQlicmVhazsKKwl9CisJZW52cFsxXSA9IE5VTEw7CisJa29iamVjdF91ZXZlbnRfZW52KCZiZC0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKKwlzeXNmc19ub3RpZnkoJmJkLT5kZXYua29iaiwgTlVMTCwgImFjdHVhbF9icmlnaHRuZXNzIik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsY2hhciAqYnVmKQogewpAQCAtMTQyLDYgKzE2Myw4IEBACiAJfQogCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKIAorCWJhY2tsaWdodF9nZW5lcmF0ZV9ldmVudChiZCwgQkFDS0xJR0hUX1VQREFURV9TWVNGUyk7CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIxNCw2ICsyMzcsMjUgQEAKIH07CiAKIC8qKgorICogYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZSAtIHRlbGwgdGhlIGJhY2tsaWdodCBzdWJzeXN0ZW0gdGhhdCBoYXJkd2FyZSBzdGF0ZQorICogICBoYXMgY2hhbmdlZAorICogQGJkOiB0aGUgYmFja2xpZ2h0IGRldmljZSB0byB1cGRhdGUKKyAqCisgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYmFja2xpZ2h0IGluIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQsCisgKiBhbmQgZ2VuZXJhdGUgYSB1ZXZlbnQgdG8gbm90aWZ5IHVzZXJzcGFjZQorICovCit2b2lkIGJhY2tsaWdodF9mb3JjZV91cGRhdGUoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJICAgIGVudW0gYmFja2xpZ2h0X3VwZGF0ZV9yZWFzb24gcmVhc29uKQoreworCW11dGV4X2xvY2soJmJkLT5vcHNfbG9jayk7CisJaWYgKGJkLT5vcHMgJiYgYmQtPm9wcy0+Z2V0X2JyaWdodG5lc3MpCisJCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gYmQtPm9wcy0+Z2V0X2JyaWdodG5lc3MoYmQpOworCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKKwliYWNrbGlnaHRfZ2VuZXJhdGVfZXZlbnQoYmQsIHJlYXNvbik7Cit9CitFWFBPUlRfU1lNQk9MKGJhY2tsaWdodF9mb3JjZV91cGRhdGUpOworCisvKioKICAqIGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIgLSBjcmVhdGUgYW5kIHJlZ2lzdGVyIGEgbmV3IG9iamVjdCBvZgogICogICBiYWNrbGlnaHRfZGV2aWNlIGNsYXNzLgogICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBuZXcgb2JqZWN0KG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCmluZGV4IDIyMTFhODUuLjk2Nzc0OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCkBAIC00MzMsOCArNDMzLDkgQEAKIAogCWlmIChjb3JnaWJsX2ZsYWdzICYgQ09SR0lCTF9TVVNQRU5ERUQpCiAJCWludGVuc2l0eSA9IDA7Ci0JaWYgKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX0JBVFRMT1cpCi0JCWludGVuc2l0eSAmPSBsY2QtPmxpbWl0X21hc2s7CisKKwlpZiAoKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX0JBVFRMT1cpICYmIGludGVuc2l0eSA+IGxjZC0+bGltaXRfbWFzaykKKwkJaW50ZW5zaXR5ID0gbGNkLT5saW1pdF9tYXNrOwogCiAJcmV0dXJuIGNvcmdpX2JsX3NldF9pbnRlbnNpdHkobGNkLCBpbnRlbnNpdHkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwppbmRleCA5M2JiNDM0Li43MDFhMTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwpAQCAtMTU0LDM0ICsxNTQsMzggQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlyZXR1cm4gZGE5MDN4X2JhY2tsaWdodF9zZXQoYmwsIDApOwogfQogCi1zdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQJTlVMTAotI2RlZmluZSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZQkJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZGE5MDN4X2JhY2tsaWdodF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGE5MDN4X2JhY2tsaWdodF9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImRhOTAzeC1iYWNrbGlnaHQiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJmRhOTAzeF9iYWNrbGlnaHRfcG1fb3BzLAorI2VuZGlmCiAJfSwKIAkucHJvYmUJCT0gZGE5MDN4X2JhY2tsaWdodF9wcm9iZSwKIAkucmVtb3ZlCQk9IGRhOTAzeF9iYWNrbGlnaHRfcmVtb3ZlLAotCS5zdXNwZW5kCT0gZGE5MDN4X2JhY2tsaWdodF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gZGE5MDN4X2JhY2tsaWdodF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkYTkwM3hfYmFja2xpZ2h0X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCmluZGV4IDViZTU1YTIuLjdmYjRlZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJLnVwZGF0ZV9zdGF0dXMgID0gaHA2ODBibF9zZXRfaW50ZW5zaXR5LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwppbmRleCBiNjQ0OTQ3Li5hNDgyZGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwpAQCAtNTYsNyArNTYsNyBAQAogCiBzdGF0aWMgaW50IGxjZF9yZWdpc3Rlcl9mYihzdHJ1Y3QgbGNkX2RldmljZSAqbGQpCiB7Ci0JbWVtc2V0KCZsZC0+ZmJfbm90aWYsIDAsIHNpemVvZigmbGQtPmZiX25vdGlmKSk7CisJbWVtc2V0KCZsZC0+ZmJfbm90aWYsIDAsIHNpemVvZihsZC0+ZmJfbm90aWYpKTsKIAlsZC0+ZmJfbm90aWYubm90aWZpZXJfY2FsbCA9IGZiX25vdGlmaWVyX2NhbGxiYWNrOwogCXJldHVybiBmYl9yZWdpc3Rlcl9jbGllbnQoJmxkLT5mYl9ub3RpZik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbXMyODNnZjA1LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbXMyODNnZjA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3YjU0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtczI4M2dmMDUuYwpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIGxtczI4M2dmMDUuYyAtLSBzdXBwb3J0IGZvciBTYW1zdW5nIExNUzI4M0dGMDUgTENECisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGNkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2xtczI4M2dmMDUuaD4KKworc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgeworCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CisJc3RydWN0IGxjZF9kZXZpY2UJKmxkOworfTsKKworc3RydWN0IGxtczI4M2dmMDVfc2VxIHsKKwl1bnNpZ25lZCBjaGFyCQlyZWc7CisJdW5zaWduZWQgc2hvcnQJCXZhbHVlOworCXVuc2lnbmVkIGNoYXIJCWRlbGF5OworfTsKKworLyogTWFnaWMgc2VxdWVuY2VzIHN1cHBsaWVkIGJ5IG1hbnVmYWN0dXJlciwgZm9yIGRldGFpbHMgcmVmZXIgdG8gZGF0YXNoZWV0ICovCitzdGF0aWMgc3RydWN0IGxtczI4M2dmMDVfc2VxIGRpc3BfaW5pdHNlcVtdID0geworCS8qIFJFRywgVkFMVUUsIERFTEFZICovCisJeyAweDA3LCAweDAwMDAsIDAgfSwKKwl7IDB4MTMsIDB4MDAwMCwgMTAgfSwKKworCXsgMHgxMSwgMHgzMDA0LCAwIH0sCisJeyAweDE0LCAweDIwMEYsIDAgfSwKKwl7IDB4MTAsIDB4MWEyMCwgMCB9LAorCXsgMHgxMywgMHgwMDQwLCA1MCB9LAorCisJeyAweDEzLCAweDAwNjAsIDAgfSwKKwl7IDB4MTMsIDB4MDA3MCwgMjAwIH0sCisKKwl7IDB4MDEsIDB4MDEyNywgMCB9LAorCXsgMHgwMiwJMHgwNzAwLCAwIH0sCisJeyAweDAzLCAweDEwMzAsIDAgfSwKKwl7IDB4MDgsIDB4MDIwOCwgMCB9LAorCXsgMHgwQiwgMHgwNjIwLCAwIH0sCisJeyAweDBDLCAweDAxMTAsIDAgfSwKKwl7IDB4MzAsIDB4MDEyMCwgMCB9LAorCXsgMHgzMSwgMHgwMTI3LCAwIH0sCisJeyAweDMyLCAweDAwMDAsIDAgfSwKKwl7IDB4MzMsIDB4MDUwMywgMCB9LAorCXsgMHgzNCwgMHgwNzI3LCAwIH0sCisJeyAweDM1LCAweDAxMjQsIDAgfSwKKwl7IDB4MzYsIDB4MDcwNiwgMCB9LAorCXsgMHgzNywgMHgwNzAxLCAwIH0sCisJeyAweDM4LCAweDBGMDAsIDAgfSwKKwl7IDB4MzksIDB4MEYwMCwgMCB9LAorCXsgMHg0MCwgMHgwMDAwLCAwIH0sCisJeyAweDQxLCAweDAwMDAsIDAgfSwKKwl7IDB4NDIsIDB4MDEzZiwgMCB9LAorCXsgMHg0MywgMHgwMDAwLCAwIH0sCisJeyAweDQ0LCAweDAxM2YsIDAgfSwKKwl7IDB4NDUsIDB4MDAwMCwgMCB9LAorCXsgMHg0NiwgMHhlZjAwLCAwIH0sCisJeyAweDQ3LCAweDAxM2YsIDAgfSwKKwl7IDB4NDgsIDB4MDAwMCwgMCB9LAorCXsgMHgwNywgMHgwMDE1LCAzMCB9LAorCisJeyAweDA3LCAweDAwMTcsIDAgfSwKKworCXsgMHgyMCwgMHgwMDAwLCAwIH0sCisJeyAweDIxLCAweDAwMDAsIDAgfSwKKwl7IDB4MjIsIDB4MDAwMCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGxtczI4M2dmMDVfc2VxIGRpc3BfcGR3bnNlcVtdID0geworCXsgMHgwNywgMHgwMDE2LCAzMCB9LAorCisJeyAweDA3LCAweDAwMDQsIDAgfSwKKwl7IDB4MTAsIDB4MDIyMCwgMjAgfSwKKworCXsgMHgxMywgMHgwMDYwLCA1MCB9LAorCisJeyAweDEzLCAweDAwNDAsIDUwIH0sCisKKwl7IDB4MTMsIDB4MDAwMCwgMCB9LAorCXsgMHgxMCwgMHgwMDAwLCAwIH0KK307CisKKworc3RhdGljIHZvaWQgbG1zMjgzZ2YwNV9yZXNldCh1bnNpZ25lZCBsb25nIGdwaW8sIGJvb2wgaW52ZXJ0ZWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgIWludmVydGVkKTsKKwltZGVsYXkoMTAwKTsKKwlncGlvX3NldF92YWx1ZShncGlvLCBpbnZlcnRlZCk7CisJbWRlbGF5KDIwKTsKKwlncGlvX3NldF92YWx1ZShncGlvLCAhaW52ZXJ0ZWQpOworCW1kZWxheSgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxtczI4M2dmMDVfdG9nZ2xlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQlzdHJ1Y3QgbG1zMjgzZ2YwNV9zZXEgKnNlcSwgaW50IHN6KQoreworCWNoYXIgYnVmWzNdOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKwkJYnVmWzBdID0gMHg3NDsKKwkJYnVmWzFdID0gMHgwMDsKKwkJYnVmWzJdID0gc2VxW2ldLnJlZzsKKwkJc3BpX3dyaXRlKHNwaSwgYnVmLCAzKTsKKworCQlidWZbMF0gPSAweDc2OworCQlidWZbMV0gPSBzZXFbaV0udmFsdWUgPj4gODsKKwkJYnVmWzJdID0gc2VxW2ldLnZhbHVlICYgMHhmZjsKKwkJc3BpX3dyaXRlKHNwaSwgYnVmLCAzKTsKKworCQltZGVsYXkoc2VxW2ldLmRlbGF5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbG1zMjgzZ2YwNV9wb3dlcl9zZXQoc3RydWN0IGxjZF9kZXZpY2UgKmxkLCBpbnQgcG93ZXIpCit7CisJc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgKnN0ID0gbGNkX2dldF9kYXRhKGxkKTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gc3QtPnNwaTsKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBvd2VyKSB7CisJCWlmIChwZGF0YSkKKwkJCWxtczI4M2dmMDVfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8sCisJCQkJCXBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJCWxtczI4M2dmMDVfdG9nZ2xlKHNwaSwgZGlzcF9pbml0c2VxLCBBUlJBWV9TSVpFKGRpc3BfaW5pdHNlcSkpOworCX0gZWxzZSB7CisJCWxtczI4M2dmMDVfdG9nZ2xlKHNwaSwgZGlzcF9wZHduc2VxLCBBUlJBWV9TSVpFKGRpc3BfcGR3bnNlcSkpOworCQlpZiAocGRhdGEpCisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+cmVzZXRfZ3BpbywKKwkJCQkJcGRhdGEtPnJlc2V0X2ludmVydGVkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGxtc19vcHMgPSB7CisJLnNldF9wb3dlcgk9IGxtczI4M2dmMDVfcG93ZXJfc2V0LAorCS5nZXRfcG93ZXIJPSBOVUxMLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbG1zMjgzZ2YwNV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsbXMyODNnZjA1X3N0YXRlICpzdDsKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBsY2RfZGV2aWNlICpsZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwZGF0YSAhPSBOVUxMKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+cmVzZXRfZ3BpbywgIkxNUzI4NUdGMDUgUkVTRVQiKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5yZXNldF9ncGlvLAorCQkJCQkJIXBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbXMyODNnZjA1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0ID09IE5VTEwpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJObyBtZW1vcnkgZm9yIGRldmljZSBzdGF0ZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWxkID0gbGNkX2RldmljZV9yZWdpc3RlcigibG1zMjgzZ2YwNSIsICZzcGktPmRldiwgc3QsICZsbXNfb3BzKTsKKwlpZiAoSVNfRVJSKGxkKSkgeworCQlyZXQgPSBQVFJfRVJSKGxkKTsKKwkJZ290byBlcnIyOworCX0KKworCXN0LT5zcGkgPSBzcGk7CisJc3QtPmxkID0gbGQ7CisKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBzdCk7CisKKwkvKiBraWNrIGluIHRoZSBMQ0QgKi8KKwlpZiAocGRhdGEpCisJCWxtczI4M2dmMDVfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8sIHBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJbG1zMjgzZ2YwNV90b2dnbGUoc3BpLCBkaXNwX2luaXRzZXEsIEFSUkFZX1NJWkUoZGlzcF9pbml0c2VxKSk7CisKKwlyZXR1cm4gMDsKKworZXJyMjoKKwlrZnJlZShzdCk7CitlcnI6CisJaWYgKHBkYXRhICE9IE5VTEwpCisJCWdwaW9fZnJlZShwZGF0YS0+cmVzZXRfZ3Bpbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbXMyODNnZjA1X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsbXMyODNnZjA1X3N0YXRlICpzdCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCXN0cnVjdCBsbXMyODNnZjA1X3BkYXRhICpwZGF0YSA9IHN0LT5zcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJbGNkX2RldmljZV91bnJlZ2lzdGVyKHN0LT5sZCk7CisKKwlpZiAocGRhdGEgIT0gTlVMTCkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5yZXNldF9ncGlvKTsKKworCWtmcmVlKHN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbG1zMjgzZ2YwNV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibG1zMjgzZ2YwNSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGxtczI4M2dmMDVfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChsbXMyODNnZjA1X3JlbW92ZSksCit9OworCitzdGF0aWMgX19pbml0IGludCBsbXMyODNnZjA1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbG1zMjgzZ2YwNV9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgbG1zMjgzZ2YwNV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZsbXMyODNnZjA1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGxtczI4M2dmMDVfaW5pdCk7Cittb2R1bGVfZXhpdChsbXMyODNnZjA1X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMQ0QyODNHRjA1IExDRCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCmluZGV4IDNiYjRjMGEuLjllZGI4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKQEAgLTE2Niw2ICsxNjYsMTUgQEAKIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rQWlyIDEsMSIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rQWlyMSwxIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJmludGVsX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rIDUsMSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApAQCAtMTc1LDYgKzE4NCwxNSBAQAogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2sgNSwyIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2s1LDIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rQWlyIDIsMSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApAQCAtMTkxLDYgKzIwOSwyNCBAQAogCQl9LAogCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAogCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSwyIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81LDIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rUHJvIDUsNSIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNSw1IiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3YmRiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQmFja2xpZ2h0IGRyaXZlciBmb3IgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODMxeCBQTUlDcworICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdG9uaWNzIHBsYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvcmVndWxhdG9yLmg+CisKK3N0cnVjdCB3bTgzMXhfYmFja2xpZ2h0X2RhdGEgeworCXN0cnVjdCB3bTgzMXggKndtODMxeDsKKwlpbnQgaXNpbmtfcmVnOworCWludCBjdXJyZW50X2JyaWdodG5lc3M7Cit9OworCitzdGF0aWMgaW50IHdtODMxeF9iYWNrbGlnaHRfc2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCwgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkYXRhLT53bTgzMXg7CisJaW50IHBvd2VyX3VwID0gIWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyAmJiBicmlnaHRuZXNzOworCWludCBwb3dlcl9kb3duID0gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzICYmICFicmlnaHRuZXNzOworCWludCByZXQ7CisKKwlpZiAocG93ZXJfdXApIHsKKwkJLyogRW5hYmxlIHRoZSBJU0lOSyAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkJICAgICAgV004MzFYX0NTMV9FTkEsIFdNODMxWF9DUzFfRU5BKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBFbmFibGUgdGhlIERDLURDICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQ0RDX0VOQUJMRSwKKwkJCQkgICAgICBXTTgzMVhfREM0X0VOQSwgV004MzFYX0RDNF9FTkEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChwb3dlcl9kb3duKSB7CisJCS8qIERDREMgZmlyc3QgKi8KKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLAorCQkJCSAgICAgIFdNODMxWF9EQzRfRU5BLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBJU0lOSyAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkJICAgICAgV004MzFYX0NTMV9EUklWRSB8IFdNODMxWF9DUzFfRU5BLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKwl9CisKKwkvKiBTZXQgdGhlIG5ldyBicmlnaHRuZXNzICovCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgZGF0YS0+aXNpbmtfcmVnLAorCQkJICAgICAgV004MzFYX0NTMV9JU0VMX01BU0ssIGJyaWdodG5lc3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCWlmIChwb3dlcl91cCkgeworCQkvKiBEcml2ZSBjdXJyZW50IHRocm91Z2ggdGhlIElTSU5LICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywKKwkJCQkgICAgICBXTTgzMVhfQ1MxX0RSSVZFLCBXTTgzMVhfQ1MxX0RSSVZFKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCS8qIElmIHdlIHdlcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHBvd2VyIHRyYW5zaXRpb24gYWx3YXlzIHNodXQgZG93bgorCSAqIGZvciBzYWZldHkuCisJICovCisJaWYgKHBvd2VyX3VwIHx8IHBvd2VyX2Rvd24pIHsKKwkJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLCBXTTgzMVhfREM0X0VOQSwgMCk7CisJCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywgV004MzFYX0NTMV9FTkEsIDApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlpbnQgYnJpZ2h0bmVzcyA9IGJsLT5wcm9wcy5icmlnaHRuZXNzOworCisJaWYgKGJsLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCWlmIChibC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlpZiAoYmwtPnByb3BzLnN0YXRlICYgQkxfQ09SRV9TVVNQRU5ERUQpCisJCWJyaWdodG5lc3MgPSAwOworCisJcmV0dXJuIHdtODMxeF9iYWNrbGlnaHRfc2V0KGJsLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXJldHVybiBkYXRhLT5jdXJyZW50X2JyaWdodG5lc3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB3bTgzMXhfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucyA9IEJMX0NPUkVfU1VTUEVORFJFU1VNRSwKKwkudXBkYXRlX3N0YXR1cwk9IHdtODMxeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MJPSB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXhfcGRhdGEgKndtODMxeF9wZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9wZGF0YSAqcGRhdGE7CisJc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisJaW50IHJldCwgaSwgbWF4X2lzZWwsIGlzaW5rX3JlZywgZGNkY19jZmc7CisKKwkvKiBXZSBuZWVkIHBsYXRmb3JtIGRhdGEgKi8KKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQl3bTgzMXhfcGRhdGEgPSBwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCQlwZGF0YSA9IHdtODMxeF9wZGF0YS0+YmFja2xpZ2h0OworCX0gZWxzZSB7CisJCXBkYXRhID0gTlVMTDsKKwl9CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGaWd1cmUgb3V0IHRoZSBtYXhpbXVtIGN1cnJlbnQgd2UgY2FuIHVzZSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTgzMVhfSVNJTktfTUFYX0lTRUw7IGkrKykgeworCQlpZiAod204MzF4X2lzaW5rdl92YWx1ZXNbaV0gPiBwZGF0YS0+bWF4X3VBKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIG1heF91QTogJWR1QVxuIiwgcGRhdGEtPm1heF91QSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltYXhfaXNlbCA9IGkgLSAxOworCisJaWYgKHBkYXRhLT5tYXhfdUEgIT0gd204MzF4X2lzaW5rdl92YWx1ZXNbbWF4X2lzZWxdKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJICJNYXhpbXVtIGN1cnJlbnQgaXMgJWR1QSBub3QgJWR1QSBhcyByZXF1ZXN0ZWRcbiIsCisJCQkgd204MzF4X2lzaW5rdl92YWx1ZXNbbWF4X2lzZWxdLCBwZGF0YS0+bWF4X3VBKTsKKworCXN3aXRjaCAocGRhdGEtPmlzaW5rKSB7CisJY2FzZSAxOgorCQlpc2lua19yZWcgPSBXTTgzMVhfQ1VSUkVOVF9TSU5LXzE7CisJCWRjZGNfY2ZnID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpc2lua19yZWcgPSBXTTgzMVhfQ1VSUkVOVF9TSU5LXzI7CisJCWRjZGNfY2ZnID0gV004MzFYX0RDNF9GQlNSQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBJU0lOSyAlZFxuIiwgcGRhdGEtPmlzaW5rKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29uZmlndXJlIHRoZSBJU0lOSyB0byB1c2UgZm9yIGZlZWRiYWNrICovCisJcmV0ID0gd204MzF4X3JlZ191bmxvY2sod204MzF4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQzRfQ09OVFJPTCwgV004MzFYX0RDNF9GQlNSQywKKwkJCSAgICAgIGRjZGNfY2ZnKTsKKworCXdtODMxeF9yZWdfbG9jayh3bTgzMXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT53bTgzMXggPSB3bTgzMXg7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKwlkYXRhLT5pc2lua19yZWcgPSBpc2lua19yZWc7CisKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIndtODMxeCIsICZwZGV2LT5kZXYsCisJCQlkYXRhLCAmd204MzF4X2JhY2tsaWdodF9vcHMpOworCWlmIChJU19FUlIoYmwpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRcbiIpOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIFBUUl9FUlIoYmwpOworCX0KKworCWJsLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9pc2VsOworCWJsLT5wcm9wcy5icmlnaHRuZXNzID0gbWF4X2lzZWw7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibCk7CisKKwkvKiBEaXNhYmxlIHRoZSBEQ0RDIGlmIGl0IHdhcyBzdGFydGVkIHNvIHdlIGNhbiBib290c3RyYXAgKi8KKwl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfRENEQ19FTkFCTEUsIFdNODMxWF9EQzRfRU5BLCAwKTsKKworCisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204MzF4X2JhY2tsaWdodF9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIndtODMxeC1iYWNrbGlnaHQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB3bTgzMXhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUJCT0gd204MzF4X2JhY2tsaWdodF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTgzMXhfYmFja2xpZ2h0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzMXhfYmFja2xpZ2h0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTgzMXhfYmFja2xpZ2h0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204MzF4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODMxeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODMxeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQmFja2xpZ2h0IERyaXZlciBmb3IgV004MzF4IFBNSUNzIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTgzMXgtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDVhNjg2Y2UuLjM2ODFjNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0yMzExLDE0ICsyMzExLDExIEBACiAJCW9wcy0+Z3JhcGhpY3MgPSAxOwogCiAJCWlmICghYmxhbmspIHsKLQkJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZSkKLQkJCQlpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZShpbmZvKTsKIAkJCXZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVyB8IEZCX0FDVElWQVRFX0ZPUkNFOwogCQkJZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJCW9wcy0+Z3JhcGhpY3MgPSAwOwogCQkJb3BzLT52YXIgPSBpbmZvLT52YXI7Ci0JCX0gZWxzZSBpZiAoaW5mby0+ZmJvcHMtPmZiX3Jlc3RvcmVfc3RhdGUpCi0JCQlpbmZvLT5mYm9wcy0+ZmJfcmVzdG9yZV9zdGF0ZShpbmZvKTsKKwkJfQogCX0KIAogIAlpZiAoIWZiY29uX2lzX2luYWN0aXZlKHZjLCBpbmZvKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCmluZGV4IDQyZTEwMDUuLjAzNWQ1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8dmlkZW8vZGE4eHgtZmIuaD4KQEAgLTcwNSw3ICs3MDQsNyBAQAogCiAJaWYgKGkgPT0gQVJSQVlfU0laRShrbm93bl9sY2RfcGFuZWxzKSkgewogCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgIkdMQ0Q6IE5vIHZhbGlkIHBhbmVsIGZvdW5kXG4iKTsKLQkJcmV0ID0gRU5PREVWOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKIAl9IGVsc2UKIAkJZGV2X2luZm8oJmRldmljZS0+ZGV2LCAiR0xDRDogRm91bmQgJXMgcGFuZWxcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKaW5kZXggMGE3YTY2Ny4uYzI3YWIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZmJfZGVmZXJyZWRfaW9fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBmYl9kZWZlcnJlZF9pb192bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZiX2RlZmVycmVkX2lvX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBmYl9kZWZlcnJlZF9pb19ta3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCBhMWYyZTdjLi45OWJiZDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogIAkJZ2xvYmFsID0gMTsKICAJfQogCi0gCWlmICghZ2xvYmFsICYmICFzdHJzdHIob3B0aW9ucywgImZiOiIpKSB7CisgCWlmICghZ2xvYmFsICYmICFzdHJjaHIob3B0aW9ucywgJzonKSkgewogIAkJZmJfbW9kZV9vcHRpb24gPSBvcHRpb25zOwogIAkJZ2xvYmFsID0gMTsKICAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCmluZGV4IGYyZGU1YTEuLjQ3NDQyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKQEAgLTI0LDExICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KICNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgogI2luY2x1ZGUgIm1kZGlfaHcuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jCmluZGV4IDljNzgwNTAuLmM5ZTkzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMKaW5kZXggODBkMGY1Zi4uNzEwNDhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwppbmRleCA5OTYzNmEyLi42YzUxOWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwpAQCAtMjIsOSArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotI2luY2x1ZGUgPGxpbnV4L2FuZHJvaWRfcG1lbS5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KIAogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CkBAIC0yNjIsMTEgKzI1OSw2IEBACiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJdW5zaWduZWQgbG9uZyB2c3RhcnQ7CiAKLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0JaWYgKCFnZXRfcG1lbV9maWxlKGltZy0+bWVtb3J5X2lkLCBzdGFydCwgJnZzdGFydCwgbGVuLCBmaWxlcCkpCi0JCXJldHVybiAwOwotI2VuZGlmCi0KIAlmaWxlID0gZmdldF9saWdodChpbWctPm1lbW9yeV9pZCwgJnB1dF9uZWVkZWQpOwogCWlmIChmaWxlID09IE5VTEwpCiAJCXJldHVybiAtMTsKQEAgLTI4MywxMiArMjc1LDYgQEAKIAogdm9pZCBwdXRfaW1nKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgc3RydWN0IGZpbGUgKmRzdF9maWxlKQogewotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQlpZiAoc3JjX2ZpbGUpCi0JCXB1dF9wbWVtX2ZpbGUoc3JjX2ZpbGUpOwotCWlmIChkc3RfZmlsZSkKLQkJcHV0X3BtZW1fZmlsZShkc3RfZmlsZSk7Ci0jZW5kaWYKIH0KIAogaW50IG1kcF9ibGl0KHN0cnVjdCBtZHBfZGV2aWNlICptZHBfZGV2LCBzdHJ1Y3QgZmJfaW5mbyAqZmIsCkBAIC0zMjAsOSArMzA2LDYgQEAKIAlpZiAodW5saWtlbHkoZ2V0X2ltZygmcmVxLT5kc3QsIGZiLCAmZHN0X3N0YXJ0LCAmZHN0X2xlbiwgJmRzdF9maWxlKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtcGRfcHBwOiBjb3VsZCBub3QgcmV0cmlldmUgZHN0IGltYWdlIGZyb20gIgogCQkJCSJtZW1vcnlcbiIpOwotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQkJcHV0X3BtZW1fZmlsZShzcmNfZmlsZSk7Ci0jZW5kaWYKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW11dGV4X2xvY2soJm1kcF9tdXRleCk7CkBAIC00OTksNyArNDgyLDYgQEAKIAkvKiByZWdpc3RlciBtZHAgZGV2aWNlICovCiAJbWRwLT5tZHBfZGV2LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCW1kcC0+bWRwX2Rldi5kZXYuY2xhc3MgPSBtZHBfY2xhc3M7Ci0Jc25wcmludGYobWRwLT5tZHBfZGV2LmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAibWRwJWQiLCBwZGV2LT5pZCk7CiAKIAkvKiBpZiB5b3UgY2FuIHJlbW92ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIHlvdSdkIGhhdmUgdG8gaW1wbGVtZW50CiAJICogdGhpczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYwppbmRleCBiYTJjNDY3Li40ZmYwMDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXNtX21kcC5oPgotI2luY2x1ZGUgPGxpbnV4L2FuZHJvaWRfcG1lbS5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAKICNpbmNsdWRlICJtZHBfaHcuaCIKQEAgLTU3OSwyNSArNTc4LDYgQEAKIHN0YXRpYyB2b2lkIGZsdXNoX2ltZ3Moc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLCBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MsCiAJCSAgICAgICBzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSkKIHsKLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0JdWludDMyX3Qgc3JjMF9sZW4sIHNyYzFfbGVuLCBkc3QwX2xlbiwgZHN0MV9sZW47Ci0KLQkvKiBmbHVzaCBzcmMgaW1hZ2VzIHRvIG1lbW9yeSBiZWZvcmUgZG1hIHRvIG1kcCAqLwotCWdldF9sZW4oJnJlcS0+c3JjLCAmcmVxLT5zcmNfcmVjdCwgcmVncy0+c3JjX2JwcCwgJnNyYzBfbGVuLAotCQkmc3JjMV9sZW4pOwotCWZsdXNoX3BtZW1fZmlsZShzcmNfZmlsZSwgcmVxLT5zcmMub2Zmc2V0LCBzcmMwX2xlbik7Ci0JaWYgKElTX1BTRVVET1BMTlIocmVxLT5zcmMuZm9ybWF0KSkKLQkJZmx1c2hfcG1lbV9maWxlKHNyY19maWxlLCByZXEtPnNyYy5vZmZzZXQgKyBzcmMwX2xlbiwKLQkJCQlzcmMxX2xlbik7Ci0KLQkvKiBmbHVzaCBkc3QgaW1hZ2VzICovCi0JZ2V0X2xlbigmcmVxLT5kc3QsICZyZXEtPmRzdF9yZWN0LCByZWdzLT5kc3RfYnBwLCAmZHN0MF9sZW4sCi0JCSZkc3QxX2xlbik7Ci0JZmx1c2hfcG1lbV9maWxlKGRzdF9maWxlLCByZXEtPmRzdC5vZmZzZXQsIGRzdDBfbGVuKTsKLQlpZiAoSVNfUFNFVURPUExOUihyZXEtPmRzdC5mb3JtYXQpKQotCQlmbHVzaF9wbWVtX2ZpbGUoZHN0X2ZpbGUsIHJlcS0+ZHN0Lm9mZnNldCArIGRzdDBfbGVuLAotCQkJCWRzdDFfbGVuKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBnZXRfY2hyb21hX2FkZHIoc3RydWN0IG1kcF9pbWcgKmltZywgc3RydWN0IG1kcF9yZWN0ICpyZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2JsaXp6YXJkLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwppbmRleCBkNWU1OTU1Li43MGRhZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwpAQCAtOTMsNyArOTMsNyBAQAogfTsKIAogLyogVGhlc2UgbmVlZCB0byBiZSBzYXZlZCAvIHJlc3RvcmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcmVzdC4gKi8KLXN0YXRpYyBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfcGxsX3JlZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfcGxsX3JlZ3NbXSA9IHsKIAl7CiAJCS5zdGFydAk9IDB4MDQsCQkvKiBEb24ndCBzYXZlIFBMTCBjdHJsICgweDBDKSAqLwogCQkuZW5kCT0gMHgwYSwKQEAgLTEwNCw3ICsxMDQsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0IGJsaXp6YXJkX2dlbl9yZWdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0IGJsaXp6YXJkX2dlbl9yZWdzW10gPSB7CiAJewogCQkuc3RhcnQJPSAweDE4LAkJLyogU0RSQU0gY29udHJvbCAqLwogCQkuZW5kCT0gMHgyMCwKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAJc3RydWN0IG9tYXBmYl9kZXZpY2UJKmZiZGV2OwogCXN0cnVjdCBsY2RfY3RybF9leHRpZgkqZXh0aWY7Ci0Jc3RydWN0IGxjZF9jdHJsCQkqaW50X2N0cmw7CisJY29uc3Qgc3RydWN0IGxjZF9jdHJsCSppbnRfY3RybDsKIAogCXZvaWQJCQkoKnBvd2VyX3VwKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCXZvaWQJCQkoKnBvd2VyX2Rvd24pKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCQkJICAgKDEgPDwgT01BUEZCX0NPTE9SX1lVVjQyMCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9zYXZlX3JlZ3Moc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0ICpsaXN0LCBpbnQgY250KQorc3RhdGljIHZvaWQgX3NhdmVfcmVncyhjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgKmxpc3QsIGludCBjbnQpCiB7CiAJaW50IGk7CiAKQEAgLTEzODMsNyArMTM4Myw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfcmVzdG9yZV9yZWdzKHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCAqbGlzdCwgaW50IGNudCkKK3N0YXRpYyB2b2lkIF9yZXN0b3JlX3JlZ3MoY29uc3Qgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0ICpsaXN0LCBpbnQgY250KQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCmluZGV4IDgwYTExZDAuLmYxNmU0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCkBAIC0xMDM1LDcgKzEwMzUsNyBAQAogCWF0b21pY19kZWMoJmRpc3BjLm1hcF9jb3VudFtwbGFuZV0pOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfdXNlcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfdXNlcl9vcHMgPSB7CiAJLm9wZW4gPSBtbWFwX3VzZXJfb3BlbiwKIAkuY2xvc2UgPSBtbWFwX3VzZXJfY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwppbmRleCAxMjVlNjA1Li4wZDBjOGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAgKiBTZXQgZmJfaW5mby5maXggZmllbGRzIGFuZCBhbHNvIHVwZGF0ZXMgZmJkZXYuCiAgKiBXaGVuIGNhbGxpbmcgdGhpcyBmYl9pbmZvLnZhciBtdXN0IGJlIHNldCB1cCBhbHJlYWR5LgogICovCi1zdGF0aWMgdm9pZCBzZXRfZmJfZml4KHN0cnVjdCBmYl9pbmZvICpmYmkpCitzdGF0aWMgdm9pZCBzZXRfZmJfZml4KHN0cnVjdCBmYl9pbmZvICpmYmksIGludCBmcm9tX2luaXQpCiB7CiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CkBAIC00MDMsMTAgKzQwMywxNiBAQAogCiAJcmcgPSAmcGxhbmUtPmZiZGV2LT5tZW1fZGVzYy5yZWdpb25bcGxhbmUtPmlkeF07CiAJZmJpLT5zY3JlZW5fYmFzZQk9IHJnLT52YWRkcjsKLQltdXRleF9sb2NrKCZmYmktPm1tX2xvY2spOwotCWZpeC0+c21lbV9zdGFydAkJPSByZy0+cGFkZHI7Ci0JZml4LT5zbWVtX2xlbgkJPSByZy0+c2l6ZTsKLQltdXRleF91bmxvY2soJmZiaS0+bW1fbG9jayk7CisKKwlpZiAoIWZyb21faW5pdCkgeworCQltdXRleF9sb2NrKCZmYmktPm1tX2xvY2spOworCQlmaXgtPnNtZW1fc3RhcnQJCT0gcmctPnBhZGRyOworCQlmaXgtPnNtZW1fbGVuCQk9IHJnLT5zaXplOworCQltdXRleF91bmxvY2soJmZiaS0+bW1fbG9jayk7CisJfSBlbHNlIHsKKwkJZml4LT5zbWVtX3N0YXJ0CQk9IHJnLT5wYWRkcjsKKwkJZml4LT5zbWVtX2xlbgkJPSByZy0+c2l6ZTsKKwl9CiAKIAlmaXgtPnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAJYnBwID0gdmFyLT5iaXRzX3Blcl9waXhlbDsKQEAgLTcwNCw3ICs3MTAsNyBAQAogCWludCByID0gMDsKIAogCW9tYXBmYl9ycXVldWVfbG9jayhmYmRldik7Ci0Jc2V0X2ZiX2ZpeChmYmkpOworCXNldF9mYl9maXgoZmJpLCAwKTsKIAlyID0gY3RybF9jaGFuZ2VfbW9kZShmYmkpOwogCW9tYXBmYl9ycXVldWVfdW5sb2NrKGZiZGV2KTsKIApAQCAtOTA0LDcgKzkxMCw3IEBACiAJCWlmIChvbGRfc2l6ZSAhPSBzaXplKSB7CiAJCQlpZiAoc2l6ZSkgewogCQkJCW1lbWNweSgmZmJpLT52YXIsIG5ld192YXIsIHNpemVvZihmYmktPnZhcikpOwotCQkJCXNldF9mYl9maXgoZmJpKTsKKwkJCQlzZXRfZmJfZml4KGZiaSwgMCk7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJICogU2V0IHRoZXNlIGV4cGxpY2l0bHkgdG8gaW5kaWNhdGUgdGhhdCB0aGUKQEAgLTE1MDQsNyArMTUxMCw3IEBACiAJdmFyLT5iaXRzX3Blcl9waXhlbCA9IGZiZGV2LT5wYW5lbC0+YnBwOwogCiAJc2V0X2ZiX3ZhcihpbmZvLCB2YXIpOwotCXNldF9mYl9maXgoaW5mbyk7CisJc2V0X2ZiX2ZpeChpbmZvLCAxKTsKIAogCXIgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAxNiwgMCk7CiAJaWYgKHIgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCA2NTA2MTE3Li4xODIwYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC0xNjM4LDI0ICsxNjM4LDI2IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0RJU0FCTEVfUE0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YWZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YWZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19FTkFCTEVfUE0pOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgcHhhZmJfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHB4YWZiX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGFmYl9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGFmYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhZmJfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBweGFmYl9pbml0X3ZpZGVvX21lbW9yeShzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpKQpAQCAtMjA4MSw2ICsyMDgzLDkgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCisJaWYgKGNwdV9pc19weGEzeHgoKSAmJiBpbmYtPmFjY2VsZXJhdGlvbl9lbmFibGVkKQorCQlmYmktPmZiLmZpeC5hY2NlbCA9IEZCX0FDQ0VMX1BYQTNYWDsKKwogCWZiaS0+YmFja2xpZ2h0X3Bvd2VyID0gaW5mLT5weGFmYl9iYWNrbGlnaHRfcG93ZXI7CiAJZmJpLT5sY2RfcG93ZXIgPSBpbmYtPnB4YWZiX2xjZF9wb3dlcjsKIApAQCAtMjA5MSwxNCArMjA5NiwxNCBAQAogCQlnb3RvIGZhaWxlZF9mYmk7CiAJfQogCi0JciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxLCBkZXYtPm5hbWUpOworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIGRldi0+bmFtZSk7CiAJaWYgKHIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbGVkX2ZiaTsKIAl9CiAKLQlmYmktPm1taW9fYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJZmJpLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAoZmJpLT5tbWlvX2Jhc2UgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgSS9PIG1lbW9yeVxuIik7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTIxOTcsNyArMjIwMiw3IEBACiBmYWlsZWRfZnJlZV9pbzoKIAlpb3VubWFwKGZiaS0+bW1pb19iYXNlKTsKIGZhaWxlZF9mcmVlX3JlczoKLQlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIGZhaWxlZF9mYmk6CiAJY2xrX3B1dChmYmktPmNsayk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKQEAgLTIyMzcsNyArMjI0Miw3IEBACiAJaW91bm1hcChmYmktPm1taW9fYmFzZSk7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCiAJY2xrX3B1dChmYmktPmNsayk7CiAJa2ZyZWUoZmJpKTsKQEAgLTIyNDgsMTEgKzIyNTMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YWZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhZmJfcHJvYmUsCiAJLnJlbW92ZSAJPSBfX2RldmV4aXRfcChweGFmYl9yZW1vdmUpLAotCS5zdXNwZW5kCT0gcHhhZmJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHB4YWZiX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gInB4YTJ4eC1mYiIsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGFmYl9wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCAzN2IxMzVkLi44NDJkMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtMTU2NSw3ICsxNTY1LDcgQEAKIAkJdmdhX291dDgoMHgzYzUsIHNyOCwgcGFyKTsKIAkJdmdhX291dDgoMHgzYzQsIDB4MGQsIHBhcik7CiAJCXNyZCA9IHZnYV9pbjgoMHgzYzUsIHBhcik7Ci0JCXNyZCAmPSAweDAzOworCQlzcmQgJj0gMHg1MDsKIAogCQlzd2l0Y2ggKGJsYW5rKSB7CiAJCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKQEAgLTE2MDYsMjIgKzE2MDYsNiBAQAogCXJldHVybiAoYmxhbmsgPT0gRkJfQkxBTktfTk9STUFMKSA/IDEgOiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYXZhZ2VmYl9zYXZlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQotCXNhdmFnZV9nZXRfZGVmYXVsdF9wYXIocGFyLCAmcGFyLT5zYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgc2F2YWdlZmJfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0KLQlzYXZhZ2VmYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIGluZm8pOwotCXNhdmFnZV9zZXRfZGVmYXVsdF9wYXIocGFyLCAmcGFyLT5zYXZlKTsKLQlzYXZhZ2VmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKLX0KLQogc3RhdGljIGludCBzYXZhZ2VmYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKIHsKIAlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CkBAIC0xNjY3LDggKzE2NTEsNiBAQAogCS5mYl9zZXRjb2xyZWcgICA9IHNhdmFnZWZiX3NldGNvbHJlZywKIAkuZmJfcGFuX2Rpc3BsYXkgPSBzYXZhZ2VmYl9wYW5fZGlzcGxheSwKIAkuZmJfYmxhbmsgICAgICAgPSBzYXZhZ2VmYl9ibGFuaywKLQkuZmJfc2F2ZV9zdGF0ZSAgPSBzYXZhZ2VmYl9zYXZlX3N0YXRlLAotCS5mYl9yZXN0b3JlX3N0YXRlID0gc2F2YWdlZmJfcmVzdG9yZV9zdGF0ZSwKICNpZiBkZWZpbmVkKENPTkZJR19GQl9TQVZBR0VfQUNDRUwpCiAJLmZiX2ZpbGxyZWN0ICAgID0gc2F2YWdlZmJfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhICAgID0gc2F2YWdlZmJfY29weWFyZWEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCmluZGV4IGUzNTIzMmEuLjU0ZmJiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCkBAIC0xNDExLDIzICsxNDExLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdXZlc2FmYl9zYXZlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0JaWYgKHBhci0+dmJlX3N0YXRlX3NhdmVkKQotCQlrZnJlZShwYXItPnZiZV9zdGF0ZV9zYXZlZCk7Ci0KLQlwYXItPnZiZV9zdGF0ZV9zYXZlZCA9IHV2ZXNhZmJfdmJlX3N0YXRlX3NhdmUocGFyKTsKLX0KLQotc3RhdGljIHZvaWQgdXZlc2FmYl9yZXN0b3JlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0JdXZlc2FmYl92YmVfc3RhdGVfcmVzdG9yZShwYXIsIHBhci0+dmJlX3N0YXRlX3NhdmVkKTsKLX0KLQogc3RhdGljIHN0cnVjdCBmYl9vcHMgdXZlc2FmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5mYl9vcGVuCT0gdXZlc2FmYl9vcGVuLApAQCAtMTQ0MSw4ICsxNDI0LDYgQEAKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfY2hlY2tfdmFyCT0gdXZlc2FmYl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIJPSB1dmVzYWZiX3NldF9wYXIsCi0JLmZiX3NhdmVfc3RhdGUJPSB1dmVzYWZiX3NhdmVfc3RhdGUsCi0JLmZiX3Jlc3RvcmVfc3RhdGUgPSB1dmVzYWZiX3Jlc3RvcmVfc3RhdGUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdXZlc2FmYl9pbml0X2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8sCkBAIC0xNDU5LDE1ICsxNDQwLDYgQEAKIAlpbmZvLT5maXgueXBhbnN0ZXAgPSBwYXItPnlwYW4gPyAxIDogMDsKIAlpbmZvLT5maXgueXdyYXBzdGVwID0gKHBhci0+eXBhbiA+IDEpID8gMSA6IDA7CiAKLQkvKgotCSAqIElmIHdlIHdlcmUgdW5hYmxlIHRvIGdldCB0aGUgc3RhdGUgYnVmZmVyIHNpemUsIGRpc2FibGUKLQkgKiBmdW5jdGlvbnMgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZSBoYXJkd2FyZSBzdGF0ZS4KLQkgKi8KLQlpZiAocGFyLT52YmVfc3RhdGVfc2l6ZSA9PSAwKSB7Ci0JCWluZm8tPmZib3BzLT5mYl9zYXZlX3N0YXRlID0gTlVMTDsKLQkJaW5mby0+ZmJvcHMtPmZiX3Jlc3RvcmVfc3RhdGUgPSBOVUxMOwotCX0KLQogCS8qIERpc2FibGUgYmxhbmtpbmcgaWYgdGhlIHVzZXIgcmVxdWVzdGVkIHNvLiAqLwogCWlmICghYmxhbmspCiAJCWluZm8tPmZib3BzLT5mYl9ibGFuayA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwppbmRleCAyMDBjMjJmLi45ZGQ1ODgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogLy8jZGVmaW5lIERFQlVHCiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19iYWxsb29uLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KQEAgLTI0OCw3ICsyNDcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHZpcnRiYWxsb29uX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2aXJ0YmFsbG9vbl9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YiA9IHZkZXYtPnByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCA0YTFmMWViLi4yOGQ5Y2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC01MzAsMTkgKzUzMCwyMiBAQAogCQkJZXJyID0gUFRSX0VSUih2cXNbaV0pOwogCQkJZ290byBlcnJvcl9maW5kOwogCQl9CisKKwkJaWYgKCF2cF9kZXYtPnBlcl92cV92ZWN0b3JzIHx8IG1zaXhfdmVjID09IFZJUlRJT19NU0lfTk9fVkVDVE9SKQorCQkJY29udGludWU7CisKIAkJLyogYWxsb2NhdGUgcGVyLXZxIGlycSBpZiBhdmFpbGFibGUgYW5kIG5lY2Vzc2FyeSAqLwotCQlpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycykgewotCQkJc25wcmludGYodnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKLQkJCQkgc2l6ZW9mICp2cF9kZXYtPm1zaXhfbmFtZXMsCi0JCQkJICIlcy0lcyIsCi0JCQkJIGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KSwgbmFtZXNbaV0pOwotCQkJZXJyID0gcmVxdWVzdF9pcnEobXNpeF92ZWMsIHZyaW5nX2ludGVycnVwdCwgMCwKLQkJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAotCQkJCQkgIHZxc1tpXSk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJdnBfZGVsX3ZxKHZxc1tpXSk7Ci0JCQkJZ290byBlcnJvcl9maW5kOwotCQkJfQorCQlzbnByaW50Zih2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJIHNpemVvZiAqdnBfZGV2LT5tc2l4X25hbWVzLAorCQkJICIlcy0lcyIsCisJCQkgZGV2X25hbWUoJnZwX2Rldi0+dmRldi5kZXYpLCBuYW1lc1tpXSk7CisJCWVyciA9IHJlcXVlc3RfaXJxKHZwX2Rldi0+bXNpeF9lbnRyaWVzW21zaXhfdmVjXS52ZWN0b3IsCisJCQkJICB2cmluZ19pbnRlcnJ1cHQsIDAsCisJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJCSAgdnFzW2ldKTsKKwkJaWYgKGVycikgeworCQkJdnBfZGVsX3ZxKHZxc1tpXSk7CisJCQlnb3RvIGVycm9yX2ZpbmQ7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBmNTM2MDA1Li5mYmQyZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTI4NSw2ICsyODUsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKiBPbmx5IGdldCB1c2VkIGFycmF5IGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBob3N0LiAqLworCXJtYigpOworCiAJaSA9IHZxLT52cmluZy51c2VkLT5yaW5nW3ZxLT5sYXN0X3VzZWRfaWR4JXZxLT52cmluZy5udW1dLmlkOwogCSpsZW4gPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYwppbmRleCBkZjUyY2IzLi40MDZjYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDgyLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jCkBAIC0yNCwxOSArMjQsNiBAQAogI2luY2x1ZGUgIi4uL3cxX2ludC5oIgogCiAvKioKLSAqIEFkZHJlc3MgaXMgc2VsZWN0ZWQgdXNpbmcgMiBwaW5zLCByZXN1bHRpbmcgaW4gNCBwb3NzaWJsZSBhZGRyZXNzZXMuCi0gKiAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYgotICogSG93ZXZlciwgdGhlIGNoaXAgY2Fubm90IGJlIGRldGVjdGVkIHdpdGhvdXQgZG9pbmcgYW4gaTJjIHdyaXRlLAotICogc28gdXNlIHRoZSBmb3JjZSBtb2R1bGUgcGFyYW1ldGVyLgotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKioKLSAqIEluc21vZCBwYXJhbWV0ZXJzCi0gKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEoZHMyNDgyKTsKLQotLyoqCiAgKiBUaGUgRFMyNDgyIHJlZ2lzdGVycyAtIHRoZXJlIGFyZSAzIHJlZ2lzdGVycyB0aGF0IGFyZSBhZGRyZXNzZWQgYnkgYSByZWFkCiAgKiBwb2ludGVyLiBUaGUgcmVhZCBwb2ludGVyIGlzIHNldCBieSB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgogICoKQEAgLTk2LDggKzgzLDYgQEAKIAogc3RhdGljIGludCBkczI0ODJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGRzMjQ4Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgZHMyNDgyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogCkBAIC0xMTcsOCArMTAyLDYgQEAKIAkucHJvYmUJCT0gZHMyNDgyX3Byb2JlLAogCS5yZW1vdmUJCT0gZHMyNDgyX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBkczI0ODJfaWQsCi0JLmRldGVjdAkJPSBkczI0ODJfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogLyoKQEAgLTQyNSwxOSArNDA4LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRzMjQ4Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAotCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBIHwKLQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX0JZVEUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImRzMjQ4MiIsIEkyQ19OQU1FX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZHMyNDgyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CkBAIC00NDYsNiArNDE2LDExIEBACiAJaW50IHRlbXAxOwogCWludCBpZHg7CiAKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSB8CisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzMjQ4Ml9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBmZjNlYjhmLi4zNzExYjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC0yODIsNiArMjgyLDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBudWM5MDBfd2R0LgogCitjb25maWcgQURYX1dBVENIRE9HCisJdHJpc3RhdGUgIkF2aW9uaWMgRGVzaWduIFhhbnRob3Mgd2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBBUkNIX1BYQV9BRFgKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBvbiBBdmlvbmljCisJICBEZXNpZ24gWGFudGhvcyBib2FyZHMuCisKICMgQVZSMzIgQXJjaGl0ZWN0dXJlCiAKIGNvbmZpZyBBVDMyQVA3MDBYX1dEVApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggMzQ4YjNiOC4uNjk5MTk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC00NSw2ICs0NSw3IEBACiBvYmotJChDT05GSUdfQ09IOTAxMzI3X1dBVENIRE9HKSArPSBjb2g5MDEzMjdfd2R0Lm8KIG9iai0kKENPTkZJR19TVE1QM1hYWF9XQVRDSERPRykgKz0gc3RtcDN4eHhfd2R0Lm8KIG9iai0kKENPTkZJR19OVUM5MDBfV0FUQ0hET0cpICs9IG51YzkwMF93ZHQubworb2JqLSQoQ09ORklHX0FEWF9XQVRDSERPRykgKz0gYWR4X3dkdC5vCiAKICMgQVZSMzIgQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdfQVQzMkFQNzAwWF9XRFQpICs9IGF0MzJhcDcwMHhfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhZmIwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQXZpb25pYyBEZXNpZ24gR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKworI2RlZmluZSBXQVRDSERPR19OQU1FICJhZHgtd2R0IgorCisvKiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lCUFEWF9XRFRfQ09OVFJPTAkJMHgwMAorI2RlZmluZQlBRFhfV0RUX0NPTlRST0xfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lCUFEWF9XRFRfQ09OVFJPTF9uUkVTRVQJKDEgPDwgMSkKKyNkZWZpbmUJQURYX1dEVF9USU1FT1VUCQkweDA4CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphZHhfd2R0X2RldjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRyaXZlcl9vcGVuOworCisjZGVmaW5lCVdEVF9TVEFURV9TVE9QCTAKKyNkZWZpbmUJV0RUX1NUQVRFX1NUQVJUCTEKKworc3RydWN0IGFkeF93ZHQgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXVuc2lnbmVkIGludCB3YWtlOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBhZHhfd2R0X2luZm8gPSB7CisJLmlkZW50aXR5ID0gIkF2aW9uaWMgRGVzaWduIFhhbnRob3MgV2F0Y2hkb2ciLAorCS5vcHRpb25zID0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCit9OworCitzdGF0aWMgdm9pZCBhZHhfd2R0X3N0YXJ0X2xvY2tlZChzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXUzMiBjdHJsOworCisJY3RybCA9IHJlYWRsKHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJY3RybCB8PSBBRFhfV0RUX0NPTlRST0xfRU5BQkxFOworCXdyaXRlbChjdHJsLCB3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCXdkdC0+c3RhdGUgPSBXRFRfU1RBVEVfU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc3RhcnQoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkdC0+bG9jaywgZmxhZ3MpOworCWFkeF93ZHRfc3RhcnRfbG9ja2VkKHdkdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc3RvcF9sb2NrZWQoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1MzIgY3RybDsKKworCWN0cmwgPSByZWFkbCh3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCWN0cmwgJj0gfkFEWF9XRFRfQ09OVFJPTF9FTkFCTEU7CisJd3JpdGVsKGN0cmwsIHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJd2R0LT5zdGF0ZSA9IFdEVF9TVEFURV9TVE9QOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X3N0b3Aoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkdC0+bG9jaywgZmxhZ3MpOworCWFkeF93ZHRfc3RvcF9sb2NrZWQod2R0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zZXRfdGltZW91dChzdHJ1Y3QgYWR4X3dkdCAqd2R0LCB1bnNpZ25lZCBsb25nIHNlY29uZHMpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gc2Vjb25kcyAqIDEwMDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0LT5sb2NrLCBmbGFncyk7CisJc3RhdGUgPSB3ZHQtPnN0YXRlOworCWFkeF93ZHRfc3RvcF9sb2NrZWQod2R0KTsKKwl3cml0ZWwodGltZW91dCwgd2R0LT5iYXNlICsgQURYX1dEVF9USU1FT1VUKTsKKworCWlmIChzdGF0ZSA9PSBXRFRfU1RBVEVfU1RBUlQpCisJCWFkeF93ZHRfc3RhcnRfbG9ja2VkKHdkdCk7CisKKwl3ZHQtPnRpbWVvdXQgPSB0aW1lb3V0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X2dldF90aW1lb3V0KHN0cnVjdCBhZHhfd2R0ICp3ZHQsIHVuc2lnbmVkIGxvbmcgKnNlY29uZHMpCit7CisJKnNlY29uZHMgPSB3ZHQtPnRpbWVvdXQgLyAxMDAwOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X2tlZXBhbGl2ZShzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0LT5sb2NrLCBmbGFncyk7CisJd3JpdGVsKHdkdC0+dGltZW91dCwgd2R0LT5iYXNlICsgQURYX1dEVF9USU1FT1VUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhZHhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGFkeF93ZHRfZGV2KTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZkcml2ZXJfb3BlbikpCisJCXJldHVybiAtRUJVU1k7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB3ZHQ7CisJYWR4X3dkdF9zZXRfdGltZW91dCh3ZHQsIDMwKTsKKwlhZHhfd2R0X3N0YXJ0KHdkdCk7CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgYWR4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlhZHhfd2R0X3N0b3Aod2R0KTsKKwljbGVhcl9iaXQoMCwgJmRyaXZlcl9vcGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBhZHhfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXVuc2lnbmVkIGxvbmcgX191c2VyICpwID0gYXJncDsKKwl1bnNpZ25lZCBsb25nIHNlY29uZHMgPSAwOworCXVuc2lnbmVkIGludCBvcHRpb25zOworCWxvbmcgcmV0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZhZHhfd2R0X2luZm8sIHNpemVvZihhZHhfd2R0X2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllbHNlCisJCQlyZXR1cm4gMDsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCWFkeF93ZHRfa2VlcGFsaXZlKHdkdCk7CisJCXJldHVybiAwOworCisJY2FzZSBXRElPQ19TRVRUSU1FT1VUOgorCQlpZiAoZ2V0X3VzZXIoc2Vjb25kcywgcCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlhZHhfd2R0X3NldF90aW1lb3V0KHdkdCwgc2Vjb25kcyk7CisKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCWFkeF93ZHRfZ2V0X3RpbWVvdXQod2R0LCAmc2Vjb25kcyk7CisJCXJldHVybiBwdXRfdXNlcihzZWNvbmRzLCBwKTsKKworCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZvcHRpb25zLCBhcmdwLCBzaXplb2Yob3B0aW9ucykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKG9wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkgeworCQkJYWR4X3dkdF9zdG9wKHdkdCk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJaWYgKG9wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7CisJCQlhZHhfd2R0X3N0YXJ0KHdkdCk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJcmV0dXJuIHJldDsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PVFRZOworfQorCitzdGF0aWMgc3NpemVfdCBhZHhfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAobGVuKQorCQlhZHhfd2R0X2tlZXBhbGl2ZSh3ZHQpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWR4X3dkdF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBub19sbHNlZWssCisJLm9wZW4gPSBhZHhfd2R0X29wZW4sCisJLnJlbGVhc2UgPSBhZHhfd2R0X3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gYWR4X3dkdF9pb2N0bCwKKwkud3JpdGUgPSBhZHhfd2R0X3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGFkeF93ZHRfbWlzY2RldiA9IHsKKwkubWlub3IgPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZSA9ICJ3YXRjaGRvZyIsCisJLmZvcHMgPSAmYWR4X3dkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWR4X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBhZHhfd2R0ICp3ZHQ7CisJaW50IHJldCA9IDA7CisJdTMyIGN0cmw7CisKKwl3ZHQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp3ZHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdkdCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgV0RUIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ3ZHQtPmxvY2spOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIEkvTyBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXMgPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBJL08gbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJd2R0LT5iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghd2R0LT5iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBJL08gbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogZGlzYWJsZSB3YXRjaGRvZyBhbmQgcmVib290IG9uIHRpbWVvdXQgKi8KKwljdHJsID0gcmVhZGwod2R0LT5iYXNlICsgQURYX1dEVF9DT05UUk9MKTsKKwljdHJsICY9IH5BRFhfV0RUX0NPTlRST0xfRU5BQkxFOworCWN0cmwgJj0gfkFEWF9XRFRfQ09OVFJPTF9uUkVTRVQ7CisJd3JpdGVsKGN0cmwsIHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3ZHQpOworCWFkeF93ZHRfZGV2ID0gcGRldjsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmFkeF93ZHRfbWlzY2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vciAlZCAiCisJCQkJIihlcnI9JWQpXG4iLCBXQVRDSERPR19NSU5PUiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWR4X3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltaXNjX2RlcmVnaXN0ZXIoJmFkeF93ZHRfbWlzY2Rldik7CisJYWR4X3dkdF9zdG9wKHdkdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlhZHhfd2R0X3N0b3Aod2R0KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhZHhfd2R0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl3ZHQtPndha2UgPSAod2R0LT5zdGF0ZSA9PSBXRFRfU1RBVEVfU1RBUlQpID8gMSA6IDA7CisJYWR4X3dkdF9zdG9wKHdkdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhfd2R0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICh3ZHQtPndha2UpCisJCWFkeF93ZHRfc3RhcnQod2R0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWR4X3dkdF9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBhZHhfd2R0X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFkeF93ZHRfcmVzdW1lLAorfTsKKworIyAgZGVmaW5lIEFEWF9XRFRfUE1fT1BTCSgmYWR4X3dkdF9wbV9vcHMpCisjZWxzZQorIyAgZGVmaW5lIEFEWF9XRFRfUE1fT1BTCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHhfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBhZHhfd2R0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZHhfd2R0X3JlbW92ZSksCisJLnNodXRkb3duID0gYWR4X3dkdF9zaHV0ZG93biwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IFdBVENIRE9HX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSBBRFhfV0RUX1BNX09QUywKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWR4X3dkdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWR4X3dkdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWR4X3dkdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFkeF93ZHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWR4X3dkdF9pbml0KTsKK21vZHVsZV9leGl0KGFkeF93ZHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBXYXRjaGRvZyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4iKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwppbmRleCAxZThmMDJmLi5kM2M4MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgcCk7CiAJcmlvd2RfZGV2aWNlID0gcDsKLQllcnIgPSAwOworCXJldHVybiAwOwogCiBvdXRfaW91bm1hcDoKIAlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIHAtPnJlZ3MsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jCmluZGV4IDg1MmNhMTkuLjkxNDMwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2ZpdHBjMl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCX0KIAogCWVyciA9IG1pc2NfcmVnaXN0ZXIoJmZpdHBjMl93ZHRfbWlzY2Rldik7Ci0JaWYgKCFlcnIpIHsKKwlpZiAoZXJyKSB7CiAJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQkJCQkJV0FUQ0hET0dfTUlOT1IsIGVycik7CiAJCWdvdG8gZXJyX21hcmdpbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jIGIvZHJpdmVycy94ZW4veGVuZnMveGVuYnVzLmMKaW5kZXggYTk1OTJkOS4uNmM0MjY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuZnMveGVuYnVzLmMKKysrIGIvZHJpdmVycy94ZW4veGVuZnMveGVuYnVzLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kaXIuYyBiL2ZzLzlwL3Zmc19kaXIuYwppbmRleCA4NzNjZDMxLi4xNWNjZTUzIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGlyLmMKKysrIGIvZnMvOXAvdmZzX2Rpci5jCkBAIC00MCw2ICs0MCwyNCBAQAogI2luY2x1ZGUgImZpZC5oIgogCiAvKioKKyAqIHN0cnVjdCBwOV9yZGlyIC0gcmVhZGRpciBhY2NvdW50aW5nCisgKiBAbXV0ZXg6IG11dGV4IHByb3RlY3RpbmcgcmVhZGRpcgorICogQGhlYWQ6IHN0YXJ0IG9mZnNldCBvZiBjdXJyZW50IGRpcnJlYWQgYnVmZmVyCisgKiBAdGFpbDogZW5kIG9mZnNldCBvZiBjdXJyZW50IGRpcnJlYWQgYnVmZmVyCisgKiBAYnVmOiBkaXJyZWFkIGJ1ZmZlcgorICoKKyAqIHByaXZhdGUgc3RydWN0dXJlIGZvciBrZWVwaW5nIHRyYWNrIG9mIHJlYWRkaXIKKyAqIGFsbG9jYXRlZCBvbiBkZW1hbmQKKyAqLworCitzdHJ1Y3QgcDlfcmRpciB7CisJc3RydWN0IG11dGV4IG11dGV4OworCWludCBoZWFkOworCWludCB0YWlsOworCXVpbnQ4X3QgKmJ1ZjsKK307CisKKy8qKgogICogZHRfdHlwZSAtIHJldHVybiBmaWxlIHR5cGUKICAqIEBtaXN0YXQ6IG1pc3RhdCBzdHJ1Y3R1cmUKICAqCkBAIC03MCw1NiArODgsNzkgQEAKIHsKIAlpbnQgb3ZlcjsKIAlzdHJ1Y3QgcDlfd3N0YXQgc3Q7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAJaW50IGJ1ZmxlbjsKLQljaGFyICpzdGF0YnVmOwotCWludCBuLCBpID0gMDsKKwlpbnQgcmVjbGVuID0gMDsKKwlzdHJ1Y3QgcDlfcmRpciAqcmRpcjsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCWZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAogCWJ1ZmxlbiA9IGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCXN0YXRidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdGF0YnVmKQotCQlyZXR1cm4gLUVOT01FTTsKIAotCXdoaWxlICgxKSB7Ci0JCWVyciA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCBzdGF0YnVmLCBOVUxMLCBidWZsZW4sCi0JCQkJCQkJCWZpZC0+cmRpcl9mcG9zKTsKLQkJaWYgKGVyciA8PSAwKQotCQkJYnJlYWs7CisJLyogYWxsb2NhdGUgcmRpciBvbiBkZW1hbmQgKi8KKwlpZiAoIWZpZC0+cmRpcikgeworCQlyZGlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3JkaXIpICsgYnVmbGVuLCBHRlBfS0VSTkVMKTsKIAotCQluID0gZXJyOwotCQl3aGlsZSAoaSA8IG4pIHsKLQkJCWVyciA9IHA5c3RhdF9yZWFkKHN0YXRidWYgKyBpLCBidWZsZW4taSwgJnN0LAotCQkJCQkJCWZpZC0+Y2xudC0+ZG90dSk7CisJCWlmIChyZGlyID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJc3Bpbl9sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9sb2NrKTsKKwkJaWYgKCFmaWQtPnJkaXIpIHsKKwkJCXJkaXItPmJ1ZiA9ICh1aW50OF90ICopcmRpciArIHNpemVvZihzdHJ1Y3QgcDlfcmRpcik7CisJCQltdXRleF9pbml0KCZyZGlyLT5tdXRleCk7CisJCQlyZGlyLT5oZWFkID0gcmRpci0+dGFpbCA9IDA7CisJCQlmaWQtPnJkaXIgPSAodm9pZCAqKSByZGlyOworCQkJcmRpciA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2soJmZpbHAtPmZfZGVudHJ5LT5kX2xvY2spOworCQlrZnJlZShyZGlyKTsKKwl9CisJcmRpciA9IChzdHJ1Y3QgcDlfcmRpciAqKSBmaWQtPnJkaXI7CisKKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJkaXItPm11dGV4KTsKKwl3aGlsZSAoZXJyID09IDApIHsKKwkJaWYgKHJkaXItPnRhaWwgPT0gcmRpci0+aGVhZCkgeworCQkJZXJyID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIHJkaXItPmJ1ZiwgTlVMTCwKKwkJCQkJCQlidWZsZW4sIGZpbHAtPmZfcG9zKTsKKwkJCWlmIChlcnIgPD0gMCkKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKworCQkJcmRpci0+aGVhZCA9IDA7CisJCQlyZGlyLT50YWlsID0gZXJyOworCQl9CisKKwkJd2hpbGUgKHJkaXItPmhlYWQgPCByZGlyLT50YWlsKSB7CisJCQllcnIgPSBwOXN0YXRfcmVhZChyZGlyLT5idWYgKyByZGlyLT5oZWFkLAorCQkJCQkJYnVmbGVuIC0gcmRpci0+aGVhZCwgJnN0LAorCQkJCQkJZmlkLT5jbG50LT5kb3R1KTsKIAkJCWlmIChlcnIpIHsKIAkJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInJldHVybmVkICVkXG4iLCBlcnIpOwogCQkJCWVyciA9IC1FSU87CiAJCQkJcDlzdGF0X2ZyZWUoJnN0KTsKLQkJCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0KLQkJCWkgKz0gc3Quc2l6ZSsyOwotCQkJZmlkLT5yZGlyX2Zwb3MgKz0gc3Quc2l6ZSsyOworCQkJcmVjbGVuID0gc3Quc2l6ZSsyOwogCiAJCQlvdmVyID0gZmlsbGRpcihkaXJlbnQsIHN0Lm5hbWUsIHN0cmxlbihzdC5uYW1lKSwKIAkJCSAgICBmaWxwLT5mX3Bvcywgdjlmc19xaWQyaW5vKCZzdC5xaWQpLCBkdF90eXBlKCZzdCkpOwogCi0JCQlmaWxwLT5mX3BvcyArPSBzdC5zaXplKzI7Ci0KIAkJCXA5c3RhdF9mcmVlKCZzdCk7CiAKIAkJCWlmIChvdmVyKSB7CiAJCQkJZXJyID0gMDsKLQkJCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CisJCQlyZGlyLT5oZWFkICs9IHJlY2xlbjsKKwkJCWZpbHAtPmZfcG9zICs9IHJlY2xlbjsKIAkJfQogCX0KIAotZnJlZV9hbmRfZXhpdDoKLQlrZnJlZShzdGF0YnVmKTsKK3VubG9ja19hbmRfZXhpdDoKKwltdXRleF91bmxvY2soJnJkaXItPm11dGV4KTsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA1OTQ3NjI4Li4xOGY3NGVjIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtOTk0LDggKzk5NCw3IEBACiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCiAJCSIlcyAtPiAlcyAoJXMpXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lLCBzdC0+ZXh0ZW5zaW9uLCBidWZmZXIpOwogCi0JcmV0dmFsID0gYnVmbGVuOwotCisJcmV0dmFsID0gc3RybmxlbihidWZmZXIsIGJ1Zmxlbik7CiBkb25lOgogCWtmcmVlKHN0KTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTA2Miw3ICsxMDYxLDcgQEAKIAkJCV9fcHV0bmFtZShsaW5rKTsKIAkJCWxpbmsgPSBFUlJfUFRSKGxlbik7CiAJCX0gZWxzZQotCQkJbGlua1tsZW5dID0gMDsKKwkJCWxpbmtbbWluKGxlbiwgUEFUSF9NQVgtMSldID0gMDsKIAl9CiAJbmRfc2V0X2xpbmsobmQsIGxpbmspOwogCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBkNGJmOGNhLi42NGQ0NGVmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTEzNSw4ICsxMzUsOCBAQAogCiBjb25maWcgSFVHRVRMQkZTCiAJYm9vbCAiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gWDg2IHx8IElBNjQgfHwgUFBDNjQgfHwgU1BBUkM2NCB8fCAoU1VQRVJIICYmIE1NVSkgfHwgXAotCQkgICAoUzM5MCAmJiA2NEJJVCkgfHwgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyB8fCBCUk9LRU4KKwlkZXBlbmRzIG9uIFg4NiB8fCBJQTY0IHx8IFNQQVJDNjQgfHwgKFMzOTAgJiYgNjRCSVQpIHx8IFwKKwkJICAgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyB8fCBCUk9LRU4KIAloZWxwCiAJICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uCiAJICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkCmRpZmYgLS1naXQgYS9mcy9hZnMvY2FjaGUuaCBiL2ZzL2Fmcy9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzRmNmI0Li4wMDAwMDAwCi0tLSBhL2ZzL2Fmcy9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotLyogQUZTIGxvY2FsIGNhY2hlIG1hbmFnZW1lbnQgaW50ZXJmYWNlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLmg+CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDEwNmJlNjYuLjZlY2UyYTEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0xOCwxMCArMTgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzY2FjaGUuaD4KIAogI2luY2x1ZGUgImFmcy5oIgogI2luY2x1ZGUgImFmc192bC5oIgotI2luY2x1ZGUgImNhY2hlLmgiCiAKICNkZWZpbmUgQUZTX0NFTExfTUFYX0FERFJTIDE1CiAKZGlmZiAtLWdpdCBhL2ZzL2Fub25faW5vZGVzLmMgYi9mcy9hbm9uX2lub2Rlcy5jCmluZGV4IGQxMWM1MWYuLjJjYTdhN2MgMTAwNjQ0Ci0tLSBhL2ZzL2Fub25faW5vZGVzLmMKKysrIGIvZnMvYW5vbl9pbm9kZXMuYwpAQCAtOCw4ICs4LDEwIEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jcmVkLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggNzY3MzgwMC4uMTJkYTVkYiAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTI0OSw2ICsyNDksNyBAQAogCiAJbWVtcG9vbF9mcmVlKHAsIGJzLT5iaW9fcG9vbCk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19mcmVlKTsKIAogdm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC0yNTcsNiArMjU4LDcgQEAKIAliaW8tPmJpX2NvbXBfY3B1ID0gLTE7CiAJYXRvbWljX3NldCgmYmlvLT5iaV9jbnQsIDEpOwogfQorRVhQT1JUX1NZTUJPTChiaW9faW5pdCk7CiAKIC8qKgogICogYmlvX2FsbG9jX2Jpb3NldCAtIGFsbG9jYXRlIGEgYmlvIGZvciBJL08KQEAgLTMxMSw2ICszMTMsNyBAQAogCW1lbXBvb2xfZnJlZShwLCBicy0+YmlvX3Bvb2wpOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChiaW9fYWxsb2NfYmlvc2V0KTsKIAogc3RhdGljIHZvaWQgYmlvX2ZzX2Rlc3RydWN0b3Ioc3RydWN0IGJpbyAqYmlvKQogewpAQCAtMzIyLDggKzMyNSwxNiBAQAogICoJQGdmcF9tYXNrOiBhbGxvY2F0aW9uIG1hc2sgdG8gdXNlCiAgKglAbnJfaW92ZWNzOiBudW1iZXIgb2YgaW92ZWNzCiAgKgotICoJQWxsb2NhdGUgYSBuZXcgYmlvIHdpdGggQG5yX2lvdmVjcyBidmVjcy4gIElmIEBnZnBfbWFzawotICoJY29udGFpbnMgX19HRlBfV0FJVCwgdGhlIGFsbG9jYXRpb24gaXMgZ3VhcmFudGVlZCB0byBzdWNjZWVkLgorICoJYmlvX2FsbG9jIHdpbGwgYWxsb2NhdGUgYSBiaW8gYW5kIGFzc29jaWF0ZWQgYmlvX3ZlYyBhcnJheSB0aGF0IGNhbiBob2xkCisgKglhdCBsZWFzdCBAbnJfaW92ZWNzIGVudHJpZXMuIEFsbG9jYXRpb25zIHdpbGwgYmUgZG9uZSBmcm9tIHRoZQorICoJZnNfYmlvX3NldC4gQWxzbyBzZWUgQGJpb19hbGxvY19iaW9zZXQgYW5kIEBiaW9fa21hbGxvYy4KKyAqCisgKglJZiAlX19HRlBfV0FJVCBpcyBzZXQsIHRoZW4gYmlvX2FsbG9jIHdpbGwgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUKKyAqCWEgYmlvLiBUaGlzIGlzIGR1ZSB0byB0aGUgbWVtcG9vbCBndWFyYW50ZWVzLiBUbyBtYWtlIHRoaXMgd29yaywgY2FsbGVycworICoJbXVzdCBuZXZlciBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gYXQgYSB0aW1lIGZyb20gdGhpcyBwb29sLiBDYWxsZXJzCisgKgl0aGF0IG5lZWQgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIDEgYmlvIG11c3QgYWx3YXlzIHN1Ym1pdCB0aGUgcHJldmlvdXNseQorICoJYWxsb2NhdGVkIGJpbyBmb3IgSU8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gYWxsb2NhdGUgYSBuZXcgb25lLiBGYWlsdXJlIHRvCisgKglkbyBzbyBjYW4gY2F1c2UgbGl2ZWxvY2tzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KICAqCiAgKglSRVRVUk5TOgogICoJUG9pbnRlciB0byBuZXcgYmlvIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KQEAgLTMzNyw2ICszNDgsNyBAQAogCiAJcmV0dXJuIGJpbzsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2FsbG9jKTsKIAogc3RhdGljIHZvaWQgYmlvX2ttYWxsb2NfZGVzdHJ1Y3RvcihzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC0zNDYsMjEgKzM1OCwxMyBAQAogfQogCiAvKioKLSAqIGJpb19hbGxvYyAtIGFsbG9jYXRlIGEgYmlvIGZvciBJL08KKyAqIGJpb19rbWFsbG9jIC0gYWxsb2NhdGUgYSBiaW8gZm9yIEkvTyB1c2luZyBrbWFsbG9jKCkKICAqIEBnZnBfbWFzazogICB0aGUgR0ZQXyBtYXNrIGdpdmVuIHRvIHRoZSBzbGFiIGFsbG9jYXRvcgogICogQG5yX2lvdmVjczoJbnVtYmVyIG9mIGlvdmVjcyB0byBwcmUtYWxsb2NhdGUKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqICAgYmlvX2FsbG9jIHdpbGwgYWxsb2NhdGUgYSBiaW8gYW5kIGFzc29jaWF0ZWQgYmlvX3ZlYyBhcnJheSB0aGF0IGNhbiBob2xkCi0gKiAgIGF0IGxlYXN0IEBucl9pb3ZlY3MgZW50cmllcy4gQWxsb2NhdGlvbnMgd2lsbCBiZSBkb25lIGZyb20gdGhlCi0gKiAgIGZzX2Jpb19zZXQuIEFsc28gc2VlIEBiaW9fYWxsb2NfYmlvc2V0LgotICoKLSAqICAgSWYgJV9fR0ZQX1dBSVQgaXMgc2V0LCB0aGVuIGJpb19hbGxvYyB3aWxsIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlCi0gKiAgIGEgYmlvLiBUaGlzIGlzIGR1ZSB0byB0aGUgbWVtcG9vbCBndWFyYW50ZWVzLiBUbyBtYWtlIHRoaXMgd29yaywgY2FsbGVycwotICogICBtdXN0IG5ldmVyIGFsbG9jYXRlIG1vcmUgdGhhbiAxIGJpbyBhdCBhIHRpbWUgZnJvbSB0aGlzIHBvb2wuIENhbGxlcnMKLSAqICAgdGhhdCBuZWVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiAxIGJpbyBtdXN0IGFsd2F5cyBzdWJtaXQgdGhlIHByZXZpb3VzbHkKLSAqICAgYWxsb2NhdGVkIGJpbyBmb3IgSU8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gYWxsb2NhdGUgYSBuZXcgb25lLiBGYWlsdXJlIHRvCi0gKiAgIGRvIHNvIGNhbiBjYXVzZSBsaXZlbG9ja3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgorICogICBBbGxvY2F0ZSBhIG5ldyBiaW8gd2l0aCBAbnJfaW92ZWNzIGJ2ZWNzLiAgSWYgQGdmcF9tYXNrIGNvbnRhaW5zCisgKiAgICVfX0dGUF9XQUlULCB0aGUgYWxsb2NhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCiAgKgogICoqLwogc3RydWN0IGJpbyAqYmlvX2ttYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIGludCBucl9pb3ZlY3MpCkBAIC0zODAsNiArMzg0LDcgQEAKIAogCXJldHVybiBiaW87CiB9CitFWFBPUlRfU1lNQk9MKGJpb19rbWFsbG9jKTsKIAogdm9pZCB6ZXJvX2ZpbGxfYmlvKHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTQwMiw3ICs0MDcsNyBAQAogICoKICAqIERlc2NyaXB0aW9uOgogICogICBQdXQgYSByZWZlcmVuY2UgdG8gYSAmc3RydWN0IGJpbywgZWl0aGVyIG9uZSB5b3UgaGF2ZSBnb3R0ZW4gd2l0aAotICogICBiaW9fYWxsb2Mgb3IgYmlvX2dldC4gVGhlIGxhc3QgcHV0IG9mIGEgYmlvIHdpbGwgZnJlZSBpdC4KKyAqICAgYmlvX2FsbG9jLCBiaW9fZ2V0IG9yIGJpb19jbG9uZS4gVGhlIGxhc3QgcHV0IG9mIGEgYmlvIHdpbGwgZnJlZSBpdC4KICAqKi8KIHZvaWQgYmlvX3B1dChzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC00MTYsNiArNDIxLDcgQEAKIAkJYmlvLT5iaV9kZXN0cnVjdG9yKGJpbyk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChiaW9fcHV0KTsKIAogaW5saW5lIGludCBiaW9fcGh5c19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQogewpAQCAtNDI0LDYgKzQzMCw3IEBACiAKIAlyZXR1cm4gYmlvLT5iaV9waHlzX3NlZ21lbnRzOwogfQorRVhQT1JUX1NZTUJPTChiaW9fcGh5c19zZWdtZW50cyk7CiAKIC8qKgogICogCV9fYmlvX2Nsb25lCS0JY2xvbmUgYSBiaW8KQEAgLTQ1MSw2ICs0NTgsNyBAQAogCWJpby0+Ymlfc2l6ZSA9IGJpb19zcmMtPmJpX3NpemU7CiAJYmlvLT5iaV9pZHggPSBiaW9fc3JjLT5iaV9pZHg7CiB9CitFWFBPUlRfU1lNQk9MKF9fYmlvX2Nsb25lKTsKIAogLyoqCiAgKgliaW9fY2xvbmUJLQljbG9uZSBhIGJpbwpAQCAtNDgyLDYgKzQ5MCw3IEBACiAKIAlyZXR1cm4gYjsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2Nsb25lKTsKIAogLyoqCiAgKgliaW9fZ2V0X25yX3ZlY3MJCS0gcmV0dXJuIGFwcHJveCBudW1iZXIgb2YgdmVjcwpAQCAtNTA1LDYgKzUxNCw3IEBACiAKIAlyZXR1cm4gbnJfcGFnZXM7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19nZXRfbnJfdmVjcyk7CiAKIHN0YXRpYyBpbnQgX19iaW9fYWRkX3BhZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IHBhZ2UKIAkJCSAgKnBhZ2UsIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCkBAIC02MzUsNiArNjQ1LDcgQEAKIAlyZXR1cm4gX19iaW9fYWRkX3BhZ2UocSwgYmlvLCBwYWdlLCBsZW4sIG9mZnNldCwKIAkJCSAgICAgIHF1ZXVlX21heF9od19zZWN0b3JzKHEpKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2FkZF9wY19wYWdlKTsKIAogLyoqCiAgKgliaW9fYWRkX3BhZ2UJLQlhdHRlbXB0IHRvIGFkZCBwYWdlIHRvIGJpbwpAQCAtNjU1LDYgKzY2Niw3IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiaW8tPmJpX2JkZXYpOwogCXJldHVybiBfX2Jpb19hZGRfcGFnZShxLCBiaW8sIHBhZ2UsIGxlbiwgb2Zmc2V0LCBxdWV1ZV9tYXhfc2VjdG9ycyhxKSk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19hZGRfcGFnZSk7CiAKIHN0cnVjdCBiaW9fbWFwX2RhdGEgewogCXN0cnVjdCBiaW9fdmVjICppb3ZlY3M7CkBAIC03NzYsNiArNzg4LDcgQEAKIAliaW9fcHV0KGJpbyk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX3VuY29weV91c2VyKTsKIAogLyoqCiAgKgliaW9fY29weV91c2VyX2lvdgktCWNvcHkgdXNlciBkYXRhIHRvIGJpbwpAQCAtOTIwLDYgKzkzMyw3IEBACiAKIAlyZXR1cm4gYmlvX2NvcHlfdXNlcl9pb3YocSwgbWFwX2RhdGEsICZpb3YsIDEsIHdyaXRlX3RvX3ZtLCBnZnBfbWFzayk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19jb3B5X3VzZXIpOwogCiBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJCSAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCkBAIC0xMDUwLDYgKzEwNjQsNyBAQAogCiAJcmV0dXJuIGJpb19tYXBfdXNlcl9pb3YocSwgYmRldiwgJmlvdiwgMSwgd3JpdGVfdG9fdm0sIGdmcF9tYXNrKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX21hcF91c2VyKTsKIAogLyoqCiAgKgliaW9fbWFwX3VzZXJfaW92IC0gbWFwIHVzZXIgc2dfaW92ZWMgdGFibGUgaW50byBiaW8KQEAgLTExMTcsMTMgKzExMzIsMTMgQEAKIAlfX2Jpb191bm1hcF91c2VyKGJpbyk7CiAJYmlvX3B1dChiaW8pOwogfQorRVhQT1JUX1NZTUJPTChiaW9fdW5tYXBfdXNlcik7CiAKIHN0YXRpYyB2b2lkIGJpb19tYXBfa2Vybl9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCiB7CiAJYmlvX3B1dChiaW8pOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgYmlvICpfX2Jpb19tYXBfa2VybihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdm9pZCAqZGF0YSwKIAkJCQkgIHVuc2lnbmVkIGludCBsZW4sIGdmcF90IGdmcF9tYXNrKQogewpAQCAtMTE4OSw2ICsxMjA0LDcgQEAKIAliaW9fcHV0KGJpbyk7CiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19tYXBfa2Vybik7CiAKIHN0YXRpYyB2b2lkIGJpb19jb3B5X2tlcm5fZW5kaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQogewpAQCAtMTI1MCw2ICsxMjY2LDcgQEAKIAogCXJldHVybiBiaW87CiB9CitFWFBPUlRfU1lNQk9MKGJpb19jb3B5X2tlcm4pOwogCiAvKgogICogYmlvX3NldF9wYWdlc19kaXJ0eSgpIGFuZCBiaW9fY2hlY2tfcGFnZXNfZGlydHkoKSBhcmUgc3VwcG9ydCBmdW5jdGlvbnMKQEAgLTE0MDAsNiArMTQxNyw3IEBACiAJaWYgKGJpby0+YmlfZW5kX2lvKQogCQliaW8tPmJpX2VuZF9pbyhiaW8sIGVycm9yKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2VuZGlvKTsKIAogdm9pZCBiaW9fcGFpcl9yZWxlYXNlKHN0cnVjdCBiaW9fcGFpciAqYnApCiB7CkBAIC0xNDEwLDYgKzE0MjgsNyBAQAogCQltZW1wb29sX2ZyZWUoYnAsIGJwLT5iaW8yLmJpX3ByaXZhdGUpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woYmlvX3BhaXJfcmVsZWFzZSk7CiAKIHN0YXRpYyB2b2lkIGJpb19wYWlyX2VuZF8xKHN0cnVjdCBiaW8gKmJpLCBpbnQgZXJyKQogewpAQCAtMTQ3Nyw2ICsxNDk2LDcgQEAKIAogCXJldHVybiBicDsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX3NwbGl0KTsKIAogLyoqCiAgKiAgICAgIGJpb19zZWN0b3Jfb2Zmc2V0IC0gRmluZCBoYXJkd2FyZSBzZWN0b3Igb2Zmc2V0IGluIGJpbwpAQCAtMTU0Nyw2ICsxNTY3LDcgQEAKIAogCWtmcmVlKGJzKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvc2V0X2ZyZWUpOwogCiAvKioKICAqIGJpb3NldF9jcmVhdGUgIC0gQ3JlYXRlIGEgYmlvX3NldApAQCAtMTU5Miw2ICsxNjEzLDcgQEAKIAliaW9zZXRfZnJlZShicyk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGJpb3NldF9jcmVhdGUpOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgYmlvdmVjX2luaXRfc2xhYnModm9pZCkKIHsKQEAgLTE2MzYsMjkgKzE2NTgsNCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbChpbml0X2Jpbyk7Ci0KLUVYUE9SVF9TWU1CT0woYmlvX2FsbG9jKTsKLUVYUE9SVF9TWU1CT0woYmlvX2ttYWxsb2MpOwotRVhQT1JUX1NZTUJPTChiaW9fcHV0KTsKLUVYUE9SVF9TWU1CT0woYmlvX2ZyZWUpOwotRVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pOwotRVhQT1JUX1NZTUJPTChiaW9faW5pdCk7Ci1FWFBPUlRfU1lNQk9MKF9fYmlvX2Nsb25lKTsKLUVYUE9SVF9TWU1CT0woYmlvX2Nsb25lKTsKLUVYUE9SVF9TWU1CT0woYmlvX3BoeXNfc2VnbWVudHMpOwotRVhQT1JUX1NZTUJPTChiaW9fYWRkX3BhZ2UpOwotRVhQT1JUX1NZTUJPTChiaW9fYWRkX3BjX3BhZ2UpOwotRVhQT1JUX1NZTUJPTChiaW9fZ2V0X25yX3ZlY3MpOwotRVhQT1JUX1NZTUJPTChiaW9fbWFwX3VzZXIpOwotRVhQT1JUX1NZTUJPTChiaW9fdW5tYXBfdXNlcik7Ci1FWFBPUlRfU1lNQk9MKGJpb19tYXBfa2Vybik7Ci1FWFBPUlRfU1lNQk9MKGJpb19jb3B5X2tlcm4pOwotRVhQT1JUX1NZTUJPTChiaW9fcGFpcl9yZWxlYXNlKTsKLUVYUE9SVF9TWU1CT0woYmlvX3NwbGl0KTsKLUVYUE9SVF9TWU1CT0woYmlvX2NvcHlfdXNlcik7Ci1FWFBPUlRfU1lNQk9MKGJpb191bmNvcHlfdXNlcik7Ci1FWFBPUlRfU1lNQk9MKGJpb3NldF9jcmVhdGUpOwotRVhQT1JUX1NZTUJPTChiaW9zZXRfZnJlZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19hbGxvY19iaW9zZXQpOwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCA5Y2Y0YjkyLi44YmVkMDU1IDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTI0OCw4ICsxMjQ4LDggQEAKIAkJCWJkX3NldF9zaXplKGJkZXYsIChsb2ZmX3QpYmRldi0+YmRfcGFydC0+bnJfc2VjdHMgPDwgOSk7CiAJCX0KIAl9IGVsc2UgewotCQlwdXRfZGlzayhkaXNrKTsKIAkJbW9kdWxlX3B1dChkaXNrLT5mb3BzLT5vd25lcik7CisJCXB1dF9kaXNrKGRpc2spOwogCQlkaXNrID0gTlVMTDsKIAkJaWYgKGJkZXYtPmJkX2NvbnRhaW5zID09IGJkZXYpIHsKIAkJCWlmIChiZGV2LT5iZF9kaXNrLT5mb3BzLT5vcGVuKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IGYxMjg0MjcuLjM2MTYwNDIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiYnRyZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgogCi0jaWZkZWYgQ09ORklHX0ZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAogc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKmJ0cmZzX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCiB7CkBAIC0zMTMsNyArMzEzLDcgQEAKIAkuc2V0CT0gYnRyZnNfeGF0dHJfYWNsX2FjY2Vzc19zZXQsCiB9OwogCi0jZWxzZSAvKiBDT05GSUdfRlNfUE9TSVhfQUNMICovCisjZWxzZSAvKiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMICovCiAKIGludCBidHJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTMyNSw0ICszMjUsNCBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0ZTX1BPU0lYX0FDTCAqLworI2VuZGlmIC8qIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgKi8KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FzeW5jLXRocmVhZC5jIGIvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmMKaW5kZXggMjgyY2EwOC4uYzA4NjFlNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmMKKysrIGIvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmMKQEAgLTY0LDYgKzY0LDUxIEBACiB9OwogCiAvKgorICogYnRyZnNfc3RhcnRfd29ya2VycyB1c2VzIGt0aHJlYWRfcnVuLCB3aGljaCBjYW4gYmxvY2sgd2FpdGluZyBmb3IgbWVtb3J5CisgKiBmb3IgYSB2ZXJ5IGxvbmcgdGltZS4gIEl0IHdpbGwgYWN0dWFsbHkgdGhyb3R0bGUgb24gcGFnZSB3cml0ZWJhY2ssCisgKiBhbmQgc28gaXQgbWF5IG5vdCBtYWtlIHByb2dyZXNzIHVudGlsIGFmdGVyIG91ciBidHJmcyB3b3JrZXIgdGhyZWFkcworICogcHJvY2VzcyBhbGwgb2YgdGhlIHBlbmRpbmcgd29yayBzdHJ1Y3RzIGluIHRoZWlyIHF1ZXVlCisgKgorICogVGhpcyBtZWFucyB3ZSBjYW4ndCB1c2UgYnRyZnNfc3RhcnRfd29ya2VycyBmcm9tIGluc2lkZSBhIGJ0cmZzIHdvcmtlcgorICogdGhyZWFkIHRoYXQgaXMgdXNlZCBhcyBwYXJ0IG9mIGNsZWFuaW5nIGRpcnR5IG1lbW9yeSwgd2hpY2ggcHJldHR5IG11Y2gKKyAqIGludm9sdmVzIGFsbCBvZiB0aGUgd29ya2VyIHRocmVhZHMuCisgKgorICogSW5zdGVhZCB3ZSBoYXZlIGEgaGVscGVyIHF1ZXVlIHdobyBuZXZlciBoYXMgbW9yZSB0aGFuIG9uZSB0aHJlYWQKKyAqIHdoZXJlIHdlIHNjaGVkdWxlciB0aHJlYWQgc3RhcnQgb3BlcmF0aW9ucy4gIFRoaXMgd29ya2VyX3N0YXJ0IHN0cnVjdAorICogaXMgdXNlZCB0byBjb250YWluIHRoZSB3b3JrIGFuZCBob2xkIGEgcG9pbnRlciB0byB0aGUgcXVldWUgdGhhdCBuZWVkcworICogYW5vdGhlciB3b3JrZXIuCisgKi8KK3N0cnVjdCB3b3JrZXJfc3RhcnQgeworCXN0cnVjdCBidHJmc193b3JrIHdvcms7CisJc3RydWN0IGJ0cmZzX3dvcmtlcnMgKnF1ZXVlOworfTsKKworc3RhdGljIHZvaWQgc3RhcnRfbmV3X3dvcmtlcl9mdW5jKHN0cnVjdCBidHJmc193b3JrICp3b3JrKQoreworCXN0cnVjdCB3b3JrZXJfc3RhcnQgKnN0YXJ0OworCXN0YXJ0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3b3JrZXJfc3RhcnQsIHdvcmspOworCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoc3RhcnQtPnF1ZXVlLCAxKTsKKwlrZnJlZShzdGFydCk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfbmV3X3dvcmtlcihzdHJ1Y3QgYnRyZnNfd29ya2VycyAqcXVldWUpCit7CisJc3RydWN0IHdvcmtlcl9zdGFydCAqc3RhcnQ7CisJaW50IHJldDsKKworCXN0YXJ0ID0ga3phbGxvYyhzaXplb2YoKnN0YXJ0KSwgR0ZQX05PRlMpOworCWlmICghc3RhcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhcnQtPndvcmsuZnVuYyA9IHN0YXJ0X25ld193b3JrZXJfZnVuYzsKKwlzdGFydC0+cXVldWUgPSBxdWV1ZTsKKwlyZXQgPSBidHJmc19xdWV1ZV93b3JrZXIocXVldWUtPmF0b21pY193b3JrZXJfc3RhcnQsICZzdGFydC0+d29yayk7CisJaWYgKHJldCkKKwkJa2ZyZWUoc3RhcnQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gbW92ZSBhIHRocmVhZCBvbnRvIHRoZSBpZGxlIGxpc3QgYWZ0ZXIgaXQKICAqIGhhcyBmaW5pc2hlZCBzb21lIHJlcXVlc3RzLgogICovCkBAIC0xMTgsMTEgKzE2MywxMyBAQAogCQlnb3RvIG91dDsKIAogCXdvcmtlcnMtPmF0b21pY19zdGFydF9wZW5kaW5nID0gMDsKLQlpZiAod29ya2Vycy0+bnVtX3dvcmtlcnMgPj0gd29ya2Vycy0+bWF4X3dvcmtlcnMpCisJaWYgKHdvcmtlcnMtPm51bV93b3JrZXJzICsgd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcgPj0KKwkgICAgd29ya2Vycy0+bWF4X3dvcmtlcnMpCiAJCWdvdG8gb3V0OwogCisJd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcgKz0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrZXJzLT5sb2NrLCBmbGFncyk7Ci0JYnRyZnNfc3RhcnRfd29ya2Vycyh3b3JrZXJzLCAxKTsKKwlzdGFydF9uZXdfd29ya2VyKHdvcmtlcnMpOwogCXJldHVybjsKIAogb3V0OgpAQCAtMzkwLDkgKzQzNywxMSBAQAogLyoKICAqIHNpbXBsZSBpbml0IG9uIHN0cnVjdCBidHJmc193b3JrZXJzCiAgKi8KLXZvaWQgYnRyZnNfaW5pdF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBjaGFyICpuYW1lLCBpbnQgbWF4KQordm9pZCBidHJmc19pbml0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGNoYXIgKm5hbWUsIGludCBtYXgsCisJCQlzdHJ1Y3QgYnRyZnNfd29ya2VycyAqYXN5bmNfaGVscGVyKQogewogCXdvcmtlcnMtPm51bV93b3JrZXJzID0gMDsKKwl3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJndvcmtlcnMtPndvcmtlcl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmd29ya2Vycy0+aWRsZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmd29ya2Vycy0+b3JkZXJfbGlzdCk7CkBAIC00MDQsMTQgKzQ1MywxNSBAQAogCXdvcmtlcnMtPm5hbWUgPSBuYW1lOwogCXdvcmtlcnMtPm9yZGVyZWQgPSAwOwogCXdvcmtlcnMtPmF0b21pY19zdGFydF9wZW5kaW5nID0gMDsKLQl3b3JrZXJzLT5hdG9taWNfd29ya2VyX3N0YXJ0ID0gMDsKKwl3b3JrZXJzLT5hdG9taWNfd29ya2VyX3N0YXJ0ID0gYXN5bmNfaGVscGVyOwogfQogCiAvKgogICogc3RhcnRzIG5ldyB3b3JrZXIgdGhyZWFkcy4gIFRoaXMgZG9lcyBub3QgZW5mb3JjZSB0aGUgbWF4IHdvcmtlcgogICogY291bnQgaW4gY2FzZSB5b3UgbmVlZCB0byB0ZW1wb3JhcmlseSBnbyBwYXN0IGl0LgogICovCi1pbnQgYnRyZnNfc3RhcnRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgaW50IG51bV93b3JrZXJzKQorc3RhdGljIGludCBfX2J0cmZzX3N0YXJ0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsCisJCQkJIGludCBudW1fd29ya2VycykKIHsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VyX3RocmVhZCAqd29ya2VyOwogCWludCByZXQgPSAwOwpAQCAtNDQ0LDYgKzQ5NCw4IEBACiAJCWxpc3RfYWRkX3RhaWwoJndvcmtlci0+d29ya2VyX2xpc3QsICZ3b3JrZXJzLT5pZGxlX2xpc3QpOwogCQl3b3JrZXItPmlkbGUgPSAxOwogCQl3b3JrZXJzLT5udW1fd29ya2VycysrOworCQl3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZy0tOworCQlXQVJOX09OKHdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nIDwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmd29ya2Vycy0+bG9jayk7CiAJfQogCXJldHVybiAwOwpAQCAtNDUyLDYgKzUwNCwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBidHJmc19zdGFydF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBpbnQgbnVtX3dvcmtlcnMpCit7CisJc3Bpbl9sb2NrX2lycSgmd29ya2Vycy0+bG9jayk7CisJd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcgKz0gbnVtX3dvcmtlcnM7CisJc3Bpbl91bmxvY2tfaXJxKCZ3b3JrZXJzLT5sb2NrKTsKKwlyZXR1cm4gX19idHJmc19zdGFydF93b3JrZXJzKHdvcmtlcnMsIG51bV93b3JrZXJzKTsKK30KKwogLyoKICAqIHJ1biB0aHJvdWdoIHRoZSBsaXN0IGFuZCBmaW5kIGEgd29ya2VyIHRocmVhZCB0aGF0IGRvZXNuJ3QgaGF2ZSBhIGxvdAogICogdG8gZG8gcmlnaHQgbm93LiAgVGhpcyBjYW4gcmV0dXJuIG51bGwgaWYgd2UgYXJlbid0IHlldCBhdCB0aGUgdGhyZWFkCkBAIC00NjEsNyArNTIxLDEwIEBACiB7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcl90aHJlYWQgKndvcmtlcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0OwotCWludCBlbmZvcmNlX21pbiA9IHdvcmtlcnMtPm51bV93b3JrZXJzIDwgd29ya2Vycy0+bWF4X3dvcmtlcnM7CisJaW50IGVuZm9yY2VfbWluOworCisJZW5mb3JjZV9taW4gPSAod29ya2Vycy0+bnVtX3dvcmtlcnMgKyB3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZykgPAorCQl3b3JrZXJzLT5tYXhfd29ya2VyczsKIAogCS8qCiAJICogaWYgd2UgZmluZCBhbiBpZGxlIHRocmVhZCwgZG9uJ3QgbW92ZSBpdCB0byB0aGUgZW5kIG9mIHRoZQpAQCAtNTA5LDE1ICs1NzIsMTcgQEAKIAl3b3JrZXIgPSBuZXh0X3dvcmtlcih3b3JrZXJzKTsKIAogCWlmICghd29ya2VyKSB7Ci0JCWlmICh3b3JrZXJzLT5udW1fd29ya2VycyA+PSB3b3JrZXJzLT5tYXhfd29ya2VycykgeworCQlpZiAod29ya2Vycy0+bnVtX3dvcmtlcnMgKyB3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyA+PQorCQkgICAgd29ya2Vycy0+bWF4X3dvcmtlcnMpIHsKIAkJCWdvdG8gZmFsbGJhY2s7CiAJCX0gZWxzZSBpZiAod29ya2Vycy0+YXRvbWljX3dvcmtlcl9zdGFydCkgewogCQkJd29ya2Vycy0+YXRvbWljX3N0YXJ0X3BlbmRpbmcgPSAxOwogCQkJZ290byBmYWxsYmFjazsKIAkJfSBlbHNlIHsKKwkJCXdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nKys7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrZXJzLT5sb2NrLCBmbGFncyk7CiAJCQkvKiB3ZSdyZSBiZWxvdyB0aGUgbGltaXQsIHN0YXJ0IGFub3RoZXIgd29ya2VyICovCi0JCQlidHJmc19zdGFydF93b3JrZXJzKHdvcmtlcnMsIDEpOworCQkJX19idHJmc19zdGFydF93b3JrZXJzKHdvcmtlcnMsIDEpOwogCQkJZ290byBhZ2FpbjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FzeW5jLXRocmVhZC5oIGIvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmgKaW5kZXggZmMwODliOS4uNTA3Nzc0NiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmgKKysrIGIvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmgKQEAgLTY0LDYgKzY0LDggQEAKIAkvKiBjdXJyZW50IG51bWJlciBvZiBydW5uaW5nIHdvcmtlcnMgKi8KIAlpbnQgbnVtX3dvcmtlcnM7CiAKKwlpbnQgbnVtX3dvcmtlcnNfc3RhcnRpbmc7CisKIAkvKiBtYXggbnVtYmVyIG9mIHdvcmtlcnMgYWxsb3dlZC4gIGNoYW5nZWQgYnkgYnRyZnNfc3RhcnRfd29ya2VycyAqLwogCWludCBtYXhfd29ya2VyczsKIApAQCAtNzgsOSArODAsMTAgQEAKIAogCS8qCiAJICogYXJlIHdlIGFsbG93ZWQgdG8gc2xlZXAgd2hpbGUgc3RhcnRpbmcgd29ya2VycyBvciBhcmUgd2UgcmVxdWlyZWQKLQkgKiB0byBzdGFydCB0aGVtIGF0IGEgbGF0ZXIgdGltZT8KKwkgKiB0byBzdGFydCB0aGVtIGF0IGEgbGF0ZXIgdGltZT8gIElmIHdlIGNhbid0IHNsZWVwLCB0aGlzIGluZGljYXRlcworCSAqIHdoaWNoIHF1ZXVlIHdlIG5lZWQgdG8gdXNlIHRvIHNjaGVkdWxlIHRocmVhZCBjcmVhdGlvbi4KIAkgKi8KLQlpbnQgYXRvbWljX3dvcmtlcl9zdGFydDsKKwlzdHJ1Y3QgYnRyZnNfd29ya2VycyAqYXRvbWljX3dvcmtlcl9zdGFydDsKIAogCS8qIGxpc3Qgd2l0aCBhbGwgdGhlIHdvcmsgdGhyZWFkcy4gIFRoZSB3b3JrZXJzIG9uIHRoZSBpZGxlIHRocmVhZAogCSAqIG1heSBiZSBhY3RpdmVseSBzZXJ2aWNpbmcgam9icywgYnV0IHRoZXkgaGF2ZW4ndCB5ZXQgaGl0IHRoZQpAQCAtMTA5LDcgKzExMiw4IEBACiBpbnQgYnRyZnNfcXVldWVfd29ya2VyKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBzdHJ1Y3QgYnRyZnNfd29yayAqd29yayk7CiBpbnQgYnRyZnNfc3RhcnRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgaW50IG51bV93b3JrZXJzKTsKIGludCBidHJmc19zdG9wX3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMpOwotdm9pZCBidHJmc19pbml0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGNoYXIgKm5hbWUsIGludCBtYXgpOwordm9pZCBidHJmc19pbml0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGNoYXIgKm5hbWUsIGludCBtYXgsCisJCQlzdHJ1Y3QgYnRyZnNfd29ya2VycyAqYXN5bmNfc3RhcnRlcik7CiBpbnQgYnRyZnNfcmVxdWV1ZV93b3JrKHN0cnVjdCBidHJmc193b3JrICp3b3JrKTsKIHZvaWQgYnRyZnNfc2V0X3dvcmtfaGlnaF9wcmlvKHN0cnVjdCBidHJmc193b3JrICp3b3JrKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaCBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKaW5kZXggODJlZTU2Yi4uZjY3ODNhNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAorKysgYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCkBAIC04Niw2ICs4NiwxMiBAQAogCSAqIHRyYW5zaWQgb2YgdGhlIHRyYW5zX2hhbmRsZSB0aGF0IGxhc3QgbW9kaWZpZWQgdGhpcyBpbm9kZQogCSAqLwogCXU2NCBsYXN0X3RyYW5zOworCisJLyoKKwkgKiBsb2cgdHJhbnNpZCB3aGVuIHRoaXMgaW5vZGUgd2FzIGxhc3QgbW9kaWZpZWQKKwkgKi8KKwl1NjQgbGFzdF9zdWJfdHJhbnM7CisKIAkvKgogCSAqIHRyYW5zaWQgdGhhdCBsYXN0IGxvZ2dlZCB0aGlzIGlub2RlCiAJICovCkBAIC0xMjgsNiArMTM0LDE2IEBACiAJdTY0IGxhc3RfdW5saW5rX3RyYW5zOwogCiAJLyoKKwkgKiBDb3VudGVycyB0byBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgZXh0ZW50IGl0ZW0ncyB3ZSBtYXkgdXNlIGR1ZQorCSAqIHRvIGRlbGFsbG9jIGFuZCBzdWNoLiAgb3V0c3RhbmRpbmdfZXh0ZW50cyBpcyB0aGUgbnVtYmVyIG9mIGV4dGVudAorCSAqIGl0ZW1zIHdlIHRoaW5rIHdlJ2xsIGVuZCB1cCB1c2luZywgYW5kIHJlc2VydmVkX2V4dGVudHMgaXMgdGhlIG51bWJlcgorCSAqIG9mIGV4dGVudCBpdGVtcyB3ZSd2ZSByZXNlcnZlZCBtZXRhZGF0YSBmb3IuCisJICovCisJc3BpbmxvY2tfdCBhY2NvdW50aW5nX2xvY2s7CisJaW50IHJlc2VydmVkX2V4dGVudHM7CisJaW50IG91dHN0YW5kaW5nX2V4dGVudHM7CisKKwkvKgogCSAqIG9yZGVyZWRfZGF0YV9jbG9zZSBpcyBzZXQgYnkgdHJ1bmNhdGUgd2hlbiBhIGZpbGUgdGhhdCB1c2VkCiAJICogdG8gaGF2ZSBnb29kIGRhdGEgaGFzIGJlZW4gdHJ1bmNhdGVkIHRvIHplcm8uICBXaGVuIGl0IGlzIHNldAogCSAqIHRoZSBidHJmcyBmaWxlIHJlbGVhc2UgY2FsbCB3aWxsIGFkZCB0aGlzIGlub2RlIHRvIHRoZQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggODA1OTliNC4uNDQ0YjNlOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC02NzUsMjEgKzY3NSwyOCBAQAogCQkJCSAgIGN1cnJlbnQgYWxsb2NhdGlvbnMgKi8KIAl1NjQgYnl0ZXNfcmVhZG9ubHk7CS8qIHRvdGFsIGJ5dGVzIHRoYXQgYXJlIHJlYWQgb25seSAqLwogCXU2NCBieXRlc19zdXBlcjsJLyogdG90YWwgYnl0ZXMgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciBibG9ja3MgKi8KLQotCS8qIGRlbGFsbG9jIGFjY291bnRpbmcgKi8KLQl1NjQgYnl0ZXNfZGVsYWxsb2M7CS8qIG51bWJlciBvZiBieXRlcyByZXNlcnZlZCBmb3IgYWxsb2NhdGlvbiwKLQkJCQkgICB0aGlzIHNwYWNlIGlzIG5vdCBuZWNlc3NhcmlseSByZXNlcnZlZCB5ZXQKLQkJCQkgICBieSB0aGUgYWxsb2NhdG9yICovCisJdTY0IGJ5dGVzX3Jvb3Q7CQkvKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byBjb21taXQgYQorCQkJCSAgIHRyYW5zYWN0aW9uICovCiAJdTY0IGJ5dGVzX21heV91c2U7CS8qIG51bWJlciBvZiBieXRlcyB0aGF0IG1heSBiZSB1c2VkIGZvcgotCQkJCSAgIGRlbGFsbG9jICovCisJCQkJICAgZGVsYWxsb2MvYWxsb2NhdGlvbnMgKi8KKwl1NjQgYnl0ZXNfZGVsYWxsb2M7CS8qIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgcmVzZXJ2ZWQgZm9yCisJCQkJICAgZGVsYXllZCBhbGxvY2F0aW9uICovCiAKIAlpbnQgZnVsbDsJCS8qIGluZGljYXRlcyB0aGF0IHdlIGNhbm5vdCBhbGxvY2F0ZSBhbnkgbW9yZQogCQkJCSAgIGNodW5rcyBmb3IgdGhpcyBzcGFjZSAqLwogCWludCBmb3JjZV9hbGxvYzsJLyogc2V0IGlmIHdlIG5lZWQgdG8gZm9yY2UgYSBjaHVuayBhbGxvYyBmb3IKIAkJCQkgICB0aGlzIHNwYWNlICovCisJaW50IGZvcmNlX2RlbGFsbG9jOwkvKiBtYWtlIHBlb3BsZSBzdGFydCBkb2luZyBmaWxlbWFwX2ZsdXNoIHVudGlsCisJCQkJICAgd2UncmUgdW5kZXIgYSB0aHJlc2hvbGQgKi8KIAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAorCS8qIGZvciBjb250cm9sbGluZyBob3cgd2UgZnJlZSB1cCBzcGFjZSBmb3IgYWxsb2NhdGlvbnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBhbGxvY2F0ZV93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IGZsdXNoX3dhaXQ7CisJaW50IGFsbG9jYXRpbmdfY2h1bms7CisJaW50IGZsdXNoaW5nOworCiAJLyogZm9yIGJsb2NrIGdyb3VwcyBpbiBvdXIgc2FtZSB0eXBlICovCiAJc3RydWN0IGxpc3RfaGVhZCBibG9ja19ncm91cHM7CiAJc3BpbmxvY2tfdCBsb2NrOwpAQCAtOTAzLDYgKzkxMCw3IEBACiAJICogQSB0aGlyZCBwb29sIGRvZXMgc3VibWl0X2JpbyB0byBhdm9pZCBkZWFkbG9ja2luZyB3aXRoIHRoZSBvdGhlcgogCSAqIHR3bwogCSAqLworCXN0cnVjdCBidHJmc193b3JrZXJzIGdlbmVyaWNfd29ya2VyOwogCXN0cnVjdCBidHJmc193b3JrZXJzIHdvcmtlcnM7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZGVsYWxsb2Nfd29ya2VyczsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBlbmRpb193b3JrZXJzOwpAQCAtOTEwLDYgKzkxOCw3IEBACiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzOwogCXN0cnVjdCBidHJmc193b3JrZXJzIGVuZGlvX3dyaXRlX3dvcmtlcnM7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgc3VibWl0X3dvcmtlcnM7CisJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZW5vc3BjX3dvcmtlcnM7CiAJLyoKIAkgKiBmaXh1cCB3b3JrZXJzIHRha2UgZGlydHkgcGFnZXMgdGhhdCBkaWRuJ3QgcHJvcGVybHkgZ28gdGhyb3VnaAogCSAqIHRoZSBjb3cgbWVjaGFuaXNtIGFuZCBtYWtlIHRoZW0gc2FmZSB0byB3cml0ZS4gIEl0IGhhcHBlbnMKQEAgLTEwMDAsNyArMTAwOSwxMCBAQAogCWF0b21pY190IGxvZ193cml0ZXJzOwogCWF0b21pY190IGxvZ19jb21taXRbMl07CiAJdW5zaWduZWQgbG9uZyBsb2dfdHJhbnNpZDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfbG9nX2NvbW1pdDsKIAl1bnNpZ25lZCBsb25nIGxvZ19iYXRjaDsKKwlwaWRfdCBsb2dfc3RhcnRfcGlkOworCWJvb2wgbG9nX211bHRpcGxlX3BpZHM7CiAKIAl1NjQgb2JqZWN0aWQ7CiAJdTY0IGxhc3RfdHJhbnM7CkBAIC0xMTQxLDYgKzExNTMsNyBAQAogI2RlZmluZSBCVFJGU19NT1VOVF9GTFVTSE9OQ09NTUlUICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIEJUUkZTX01PVU5UX1NTRF9TUFJFQUQJCSgxIDw8IDgpCiAjZGVmaW5lIEJUUkZTX01PVU5UX05PU1NECQkoMSA8PCA5KQorI2RlZmluZSBCVFJGU19NT1VOVF9ESVNDQVJECQkoMSA8PCAxMCkKIAogI2RlZmluZSBidHJmc19jbGVhcl9vcHQobywgb3B0KQkJKChvKSAmPSB+QlRSRlNfTU9VTlRfIyNvcHQpCiAjZGVmaW5lIGJ0cmZzX3NldF9vcHQobywgb3B0KQkJKChvKSB8PSBCVFJGU19NT1VOVF8jI29wdCkKQEAgLTIwMjIsNyArMjAzNSwxMiBAQAogdm9pZCBidHJmc19zZXRfaW5vZGVfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppb25kZSk7CiB2b2lkIGJ0cmZzX2NsZWFyX3NwYWNlX2luZm9fZnVsbChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CiAKLWludCBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKK2ludCBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbnVtX2l0ZW1zKTsKK2ludCBidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpOworaW50IGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Moc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG51bV9pdGVtcyk7CitpbnQgYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Moc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBudW1faXRlbXMpOwogaW50IGJ0cmZzX2NoZWNrX2RhdGFfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQl1NjQgYnl0ZXMpOwogdm9pZCBidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCkBAIC0yMzE0LDcgKzIzMzIsNyBAQAogdm9pZCBidHJmc19vcnBoYW5fY2xlYW51cChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CiBpbnQgYnRyZnNfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpOwogaW50IGJ0cmZzX2ludmFsaWRhdGVfaW5vZGVzKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zOwogCiAvKiBpb2N0bC5jICovCiBsb25nIGJ0cmZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CkBAIC0yMzI2LDcgKzIzNDQsNyBAQAogaW50IGJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJCSAgICBpbnQgc2tpcF9waW5uZWQpOwogaW50IGJ0cmZzX2NoZWNrX2ZpbGUoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9vcGVyYXRpb25zOwogaW50IGJ0cmZzX2Ryb3BfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgbG9ja2VkX2VuZCwKQEAgLTIzNTcsNyArMjM3NSw3IEBACiBpbnQgYnRyZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7CiAKIC8qIGFjbC5jICovCi0jaWZkZWYgQ09ORklHX0ZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIGludCBidHJmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwogI2Vsc2UKICNkZWZpbmUgYnRyZnNfY2hlY2tfYWNsIE5VTEwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCA2NDRlNzk2Li4wMmI2YWZiIDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC04MjIsMTQgKzgyMiwxNCBAQAogCiBpbnQgYnRyZnNfd3JpdGVfdHJlZV9ibG9jayhzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmKQogewotCXJldHVybiBidHJmc19mZGF0YXdyaXRlX3JhbmdlKGJ1Zi0+Zmlyc3RfcGFnZS0+bWFwcGluZywgYnVmLT5zdGFydCwKLQkJCQkgICAgICBidWYtPnN0YXJ0ICsgYnVmLT5sZW4gLSAxLCBXQl9TWU5DX0FMTCk7CisJcmV0dXJuIGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShidWYtPmZpcnN0X3BhZ2UtPm1hcHBpbmcsIGJ1Zi0+c3RhcnQsCisJCQkJCWJ1Zi0+c3RhcnQgKyBidWYtPmxlbiAtIDEpOwogfQogCiBpbnQgYnRyZnNfd2FpdF90cmVlX2Jsb2NrX3dyaXRlYmFjayhzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmKQogewotCXJldHVybiBidHJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlKGJ1Zi0+Zmlyc3RfcGFnZS0+bWFwcGluZywKLQkJCQkgIGJ1Zi0+c3RhcnQsIGJ1Zi0+c3RhcnQgKyBidWYtPmxlbiAtIDEpOworCXJldHVybiBmaWxlbWFwX2ZkYXRhd2FpdF9yYW5nZShidWYtPmZpcnN0X3BhZ2UtPm1hcHBpbmcsCisJCQkJICAgICAgIGJ1Zi0+c3RhcnQsIGJ1Zi0+c3RhcnQgKyBidWYtPmxlbiAtIDEpOwogfQogCiBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcmVhZF90cmVlX2Jsb2NrKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLApAQCAtOTE3LDYgKzkxNyw3IEBACiAJYXRvbWljX3NldCgmcm9vdC0+bG9nX3dyaXRlcnMsIDApOwogCXJvb3QtPmxvZ19iYXRjaCA9IDA7CiAJcm9vdC0+bG9nX3RyYW5zaWQgPSAwOworCXJvb3QtPmxhc3RfbG9nX2NvbW1pdCA9IDA7CiAJZXh0ZW50X2lvX3RyZWVfaW5pdCgmcm9vdC0+ZGlydHlfbG9nX3BhZ2VzLAogCQkJICAgICBmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAKQEAgLTEwODcsNiArMTA4OCw3IEBACiAJV0FSTl9PTihyb290LT5sb2dfcm9vdCk7CiAJcm9vdC0+bG9nX3Jvb3QgPSBsb2dfcm9vdDsKIAlyb290LT5sb2dfdHJhbnNpZCA9IDA7CisJcm9vdC0+bGFzdF9sb2dfY29tbWl0ID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYzMCw3ICsxNjMyLDcgQEAKIAlmc19pbmZvLT5zYiA9IHNiOwogCWZzX2luZm8tPm1heF9leHRlbnQgPSAodTY0KS0xOwogCWZzX2luZm8tPm1heF9pbmxpbmUgPSA4MTkyICogMTAyNDsKLQlmc19pbmZvLT5tZXRhZGF0YV9yYXRpbyA9IDg7CisJZnNfaW5mby0+bWV0YWRhdGFfcmF0aW8gPSAwOwogCiAJZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsCiAJCQkJCSAgbnVtX29ubGluZV9jcHVzKCkgKyAyLCA4KTsKQEAgLTE3NDYsMjEgKzE3NDgsMjUgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBmYWlsX2lwdXQ7CiAJfQotcHJpbnRrKCJ0aHJlYWQgcG9vbCBpcyAlZFxuIiwgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSk7Ci0JLyoKLQkgKiB3ZSBuZWVkIHRvIHN0YXJ0IGFsbCB0aGUgZW5kX2lvIHdvcmtlcnMgdXAgZnJvbnQgYmVjYXVzZSB0aGUKLQkgKiBxdWV1ZSB3b3JrIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGF0IGludGVycnVwdCB0aW1lLCBhbmQgc28gaXQKLQkgKiBjYW5ub3QgZHluYW1pY2FsbHkgZ3Jvdy4KLQkgKi8KKworCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIsCisJCQkgICAiZ2Vud29yayIsIDEsIE5VTEwpOworCiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT53b3JrZXJzLCAid29ya2VyIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPmRlbGFsbG9jX3dvcmtlcnMsICJkZWxhbGxvYyIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5zdWJtaXRfd29ya2VycywgInN1Ym1pdCIsCiAJCQkgICBtaW5fdCh1NjQsIGZzX2RldmljZXMtPm51bV9kZXZpY2VzLAotCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSkpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSksCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOworCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZW5vc3BjX3dvcmtlcnMsICJlbm9zcGMiLAorCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAKIAkvKiBhIGhpZ2hlciBpZGxlIHRocmVzaCBvbiB0aGUgc3VibWl0IHdvcmtlcnMgbWFrZXMgaXQgbXVjaCBtb3JlCiAJICogbGlrZWx5IHRoYXQgYmlvcyB3aWxsIGJlIHNlbmQgZG93biBpbiBhIHNhbmUgb3JkZXIgdG8gdGhlCkBAIC0xNzc0LDE1ICsxNzgwLDIwIEBACiAJZnNfaW5mby0+ZGVsYWxsb2Nfd29ya2Vycy5pZGxlX3RocmVzaCA9IDI7CiAJZnNfaW5mby0+ZGVsYWxsb2Nfd29ya2Vycy5vcmRlcmVkID0gMTsKIAotCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+Zml4dXBfd29ya2VycywgImZpeHVwIiwgMSk7CisJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5maXh1cF93b3JrZXJzLCAiZml4dXAiLCAxLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX3dvcmtlcnMsICJlbmRpbyIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fbWV0YV93b3JrZXJzLCAiZW5kaW8tbWV0YSIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzLAotCQkJICAgImVuZGlvLW1ldGEtd3JpdGUiLCBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgICJlbmRpby1tZXRhLXdyaXRlIiwgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzLCAiZW5kaW8td3JpdGUiLAotCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSk7CisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAogCS8qCiAJICogZW5kaW9zIGFyZSBsYXJnZWx5IHBhcmFsbGVsIGFuZCBzaG91bGQgaGF2ZSBhIHZlcnkKQEAgLTE3OTQsMTIgKzE4MDUsOCBAQAogCWZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMuaWRsZV90aHJlc2ggPSAyOwogCWZzX2luZm8tPmVuZGlvX21ldGFfd3JpdGVfd29ya2Vycy5pZGxlX3RocmVzaCA9IDI7CiAKLQlmc19pbmZvLT5lbmRpb193b3JrZXJzLmF0b21pY193b3JrZXJfc3RhcnQgPSAxOwotCWZzX2luZm8tPmVuZGlvX21ldGFfd29ya2Vycy5hdG9taWNfd29ya2VyX3N0YXJ0ID0gMTsKLQlmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzLmF0b21pY193b3JrZXJfc3RhcnQgPSAxOwotCWZzX2luZm8tPmVuZGlvX21ldGFfd3JpdGVfd29ya2Vycy5hdG9taWNfd29ya2VyX3N0YXJ0ID0gMTsKLQogCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMsIDEpOworCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5zdWJtaXRfd29ya2VycywgMSk7CiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+ZGVsYWxsb2Nfd29ya2VycywgMSk7CiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+Zml4dXBfd29ya2VycywgMSk7CkBAIC0xODA3LDYgKzE4MTQsNyBAQAogCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX21ldGFfd29ya2VycywgMSk7CiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzLCAxKTsKKwlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5lbm9zcGNfd29ya2VycywgMSk7CiAKIAlmc19pbmZvLT5iZGkucmFfcGFnZXMgKj0gYnRyZnNfc3VwZXJfbnVtX2RldmljZXMoZGlza19zdXBlcik7CiAJZnNfaW5mby0+YmRpLnJhX3BhZ2VzID0gbWF4KGZzX2luZm8tPmJkaS5yYV9wYWdlcywKQEAgLTIwMTIsNiArMjAyMCw3IEBACiAJZnJlZV9leHRlbnRfYnVmZmVyKGNodW5rX3Jvb3QtPm5vZGUpOwogCWZyZWVfZXh0ZW50X2J1ZmZlcihjaHVua19yb290LT5jb21taXRfcm9vdCk7CiBmYWlsX3NiX2J1ZmZlcjoKKwlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmZpeHVwX3dvcmtlcnMpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+ZGVsYWxsb2Nfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT53b3JrZXJzKTsKQEAgLTIwMjAsNiArMjAyOSw3IEBACiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fd3JpdGVfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5zdWJtaXRfd29ya2Vycyk7CisJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbm9zcGNfd29ya2Vycyk7CiBmYWlsX2lwdXQ6CiAJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoZnNfaW5mby0+YnRyZWVfaW5vZGUtPmlfbWFwcGluZyk7CiAJaXB1dChmc19pbmZvLT5idHJlZV9pbm9kZSk7CkBAIC0yNDM3LDYgKzI0NDcsNyBAQAogCiAJaXB1dChmc19pbmZvLT5idHJlZV9pbm9kZSk7CiAKKwlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmZpeHVwX3dvcmtlcnMpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+ZGVsYWxsb2Nfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT53b3JrZXJzKTsKQEAgLTI0NDUsNiArMjQ1Niw3IEBACiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fd3JpdGVfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5zdWJtaXRfd29ya2Vycyk7CisJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbm9zcGNfd29ya2Vycyk7CiAKIAlidHJmc19jbG9zZV9kZXZpY2VzKGZzX2luZm8tPmZzX2RldmljZXMpOwogCWJ0cmZzX21hcHBpbmdfdHJlZV9mcmVlKCZmc19pbmZvLT5tYXBwaW5nX3RyZWUpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggOTkzZjkzZi4uOTQ2MjdjNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC02OCw2ICs2OCw4IEBACiAJCQkgIHN0cnVjdCBleHRlbnRfYnVmZmVyICoqbXVzdF9jbGVhbik7CiBzdGF0aWMgaW50IGZpbmRfbmV4dF9rZXkoc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIGludCBsZXZlbCwKIAkJCSBzdHJ1Y3QgYnRyZnNfa2V5ICprZXkpOworc3RhdGljIHZvaWQgZHVtcF9zcGFjZV9pbmZvKHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvLCB1NjQgYnl0ZXMsCisJCQkgICAgaW50IGR1bXBfYmxvY2tfZ3JvdXBzKTsKIAogc3RhdGljIG5vaW5saW5lIGludAogYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKQpAQCAtMTU2NiwyMyArMTU2OCwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBCSU9fUldfRElTQ0FSRAogc3RhdGljIHZvaWQgYnRyZnNfaXNzdWVfZGlzY2FyZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCQkJCXU2NCBzdGFydCwgdTY0IGxlbikKIHsKIAlibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCA+PiA5LCBsZW4gPj4gOSwgR0ZQX0tFUk5FTCwKIAkJCSAgICAgRElTQ0FSRF9GTF9CQVJSSUVSKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50IGJ0cmZzX2Rpc2NhcmRfZXh0ZW50KHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAogCQkJCXU2NCBudW1fYnl0ZXMpCiB7Ci0jaWZkZWYgQklPX1JXX0RJU0NBUkQKIAlpbnQgcmV0OwogCXU2NCBtYXBfbGVuZ3RoID0gbnVtX2J5dGVzOwogCXN0cnVjdCBidHJmc19tdWx0aV9iaW8gKm11bHRpID0gTlVMTDsKIAorCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgRElTQ0FSRCkpCisJCXJldHVybiAwOworCiAJLyogVGVsbCB0aGUgYmxvY2sgZGV2aWNlKHMpIHRoYXQgdGhlIHNlY3RvcnMgY2FuIGJlIGRpc2NhcmRlZCAqLwogCXJldCA9IGJ0cmZzX21hcF9ibG9jaygmcm9vdC0+ZnNfaW5mby0+bWFwcGluZ190cmVlLCBSRUFELAogCQkJICAgICAgYnl0ZW5yLCAmbWFwX2xlbmd0aCwgJm11bHRpLCAwKTsKQEAgLTE2MDIsOSArMTYwNCw2IEBACiAJfQogCiAJcmV0dXJuIHJldDsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogaW50IGJ0cmZzX2luY19leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMjc2NSw2NyArMjc2NCw0NDggQEAKIAkJCQkJCSAgICAgICBhbGxvY190YXJnZXQpOwogfQogCitzdGF0aWMgdTY0IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpCit7CisJdTY0IG51bV9ieXRlczsKKwlpbnQgbGV2ZWw7CisKKwlsZXZlbCA9IEJUUkZTX01BWF9MRVZFTCAtIDI7CisJLyoKKwkgKiBOT1RFOiB0aGVzZSBjYWxjdWxhdGlvbnMgYXJlIGFic29sdXRlbHkgdGhlIHdvcnN0IHBvc3NpYmxlIGNhc2UuCisJICogVGhpcyBhc3N1bWVzIHRoYXQgX2V2ZXJ5XyBpdGVtIHdlIGluc2VydCB3aWxsIHJlcXVpcmUgYSBuZXcgbGVhZiwgYW5kCisJICogdGhhdCB0aGUgdHJlZSBoYXMgZ3Jvd24gdG8gaXRzIG1heGltdW0gbGV2ZWwgc2l6ZS4KKwkgKi8KKworCS8qCisJICogZm9yIGV2ZXJ5IGl0ZW0gd2UgaW5zZXJ0IHdlIGNvdWxkIGluc2VydCBib3RoIGFuIGV4dGVudCBpdGVtIGFuZCBhCisJICogZXh0ZW50IHJlZiBpdGVtLiAgVGhlbiBmb3IgZXZlciBpdGVtIHdlIGluc2VydCwgd2Ugd2lsbCBuZWVkIHRvIGNvdworCSAqIGJvdGggdGhlIG9yaWdpbmFsIGxlYWYsIHBsdXMgdGhlIGxlYWYgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIGl0LgorCSAqCisJICogVW5sZXNzIHdlIGFyZSB0YWxraW5nIGFib3V0IHRoZSBleHRlbnQgcm9vdCwgdGhlbiB3ZSBqdXN0IHdhbnQgdGhlCisJICogbnVtYmVyIG9mIGl0ZW1zICogMiwgc2luY2Ugd2UganVzdCBuZWVkIHRoZSBleHRlbnQgaXRlbSBwbHVzIGl0cyByZWYuCisJICovCisJaWYgKHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QpCisJCW51bV9ieXRlcyA9IG51bV9pdGVtcyAqIDI7CisJZWxzZQorCQludW1fYnl0ZXMgPSAobnVtX2l0ZW1zICsgKDIgKiBudW1faXRlbXMpKSAqIDM7CisKKwkvKgorCSAqIG51bV9ieXRlcyBpcyB0b3RhbCBudW1iZXIgb2YgbGVhdmVzIHdlIGNvdWxkIG5lZWQgdGltZXMgdGhlIGxlYWYKKwkgKiBzaXplLCBhbmQgdGhlbiBmb3IgZXZlcnkgbGVhZiB3ZSBjb3VsZCBlbmQgdXAgY293J2luZyAyIG5vZGVzIHBlcgorCSAqIGxldmVsLCBkb3duIHRvIHRoZSBsZWFmIGxldmVsLgorCSAqLworCW51bV9ieXRlcyA9IChudW1fYnl0ZXMgKiByb290LT5sZWFmc2l6ZSkgKworCQkobnVtX2J5dGVzICogKGxldmVsICogMikpICogcm9vdC0+bm9kZXNpemU7CisKKwlyZXR1cm4gbnVtX2J5dGVzOworfQorCiAvKgotICogZm9yIG5vdyB0aGlzIGp1c3QgbWFrZXMgc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IDUlIG9mIG91ciBtZXRhZGF0YSBzcGFjZSBmcmVlCi0gKiBmb3IgdXNlLgorICogVW5yZXNlcnZlIG1ldGFkYXRhIHNwYWNlIGZvciBkZWxhbGxvYy4gIElmIHdlIGhhdmUgbGVzcyByZXNlcnZlZCBjcmVkaXRzIHRoYW4KKyAqIHdlIGhhdmUgZXh0ZW50cywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCiAgKi8KLWludCBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290KQoraW50IGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Moc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG51bV9pdGVtcykKIHsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKm1ldGFfc2luZm87Ci0JdTY0IGFsbG9jX3RhcmdldCwgdGhyZXNoOwotCWludCBjb21taXR0ZWQgPSAwLCByZXQ7CisJdTY0IG51bV9ieXRlczsKKwl1NjQgYWxsb2NfdGFyZ2V0OworCWJvb2wgYnVnID0gZmFsc2U7CiAKIAkvKiBnZXQgdGhlIHNwYWNlIGluZm8gZm9yIHdoZXJlIHRoZSBtZXRhZGF0YSB3aWxsIGxpdmUgKi8KIAlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAwKTsKIAltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywgYWxsb2NfdGFyZ2V0KTsKLQlpZiAoIW1ldGFfc2luZm8pCi0JCWdvdG8gYWxsb2M7CiAKKwludW1fYnl0ZXMgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAorCQkJCQkgICBudW1faXRlbXMpOworCisJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCWlmIChCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfZXh0ZW50cyA8PQorCSAgICBCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cykgeworCQlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKworCUJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9leHRlbnRzLS07CisJQlVHX09OKEJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9leHRlbnRzIDwgMCk7CisKKwlpZiAobWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgPCBudW1fYnl0ZXMpIHsKKwkJYnVnID0gdHJ1ZTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgPSAwOworCX0gZWxzZSB7CisJCW1ldGFfc2luZm8tPmJ5dGVzX2RlbGFsbG9jIC09IG51bV9ieXRlczsKKwl9CisJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOworCisJQlVHX09OKGJ1Zyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZm9yY2VfZGVsYWxsb2Moc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKm1ldGFfc2luZm8pCit7CisJdTY0IHRocmVzaDsKKworCXRocmVzaCA9IG1ldGFfc2luZm8tPmJ5dGVzX3VzZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZXNlcnZlZCArCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCArIG1ldGFfc2luZm8tPmJ5dGVzX3JlYWRvbmx5ICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfc3VwZXIgKyBtZXRhX3NpbmZvLT5ieXRlc19yb290ICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZTsKKworCXRocmVzaCA9IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzIC0gdGhyZXNoOworCXRocmVzaCAqPSA4MDsKKwlkb19kaXYodGhyZXNoLCAxMDApOworCWlmICh0aHJlc2ggPD0gbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MpCisJCW1ldGFfc2luZm8tPmZvcmNlX2RlbGFsbG9jID0gMTsKKwllbHNlCisJCW1ldGFfc2luZm8tPmZvcmNlX2RlbGFsbG9jID0gMDsKK30KKworc3RydWN0IGFzeW5jX2ZsdXNoIHsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfd29yayB3b3JrOworfTsKKworc3RhdGljIG5vaW5saW5lIHZvaWQgZmx1c2hfZGVsYWxsb2NfYXN5bmMoc3RydWN0IGJ0cmZzX3dvcmsgKndvcmspCit7CisJc3RydWN0IGFzeW5jX2ZsdXNoICphc3luYzsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbzsKKworCWFzeW5jID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhc3luY19mbHVzaCwgd29yayk7CisJcm9vdCA9IGFzeW5jLT5yb290OworCWluZm8gPSBhc3luYy0+aW5mbzsKKworCWJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290KTsKKwl3YWtlX3VwKCZpbmZvLT5mbHVzaF93YWl0KTsKKwlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwKTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJaW5mby0+Zmx1c2hpbmcgPSAwOworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwl3YWtlX3VwKCZpbmZvLT5mbHVzaF93YWl0KTsKKworCWtmcmVlKGFzeW5jKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9vbl9mbHVzaChzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbykKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwl1NjQgdXNlZDsKKworCXdoaWxlICgxKSB7CisJCXByZXBhcmVfdG9fd2FpdCgmaW5mby0+Zmx1c2hfd2FpdCwgJndhaXQsCisJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzcGluX2xvY2soJmluZm8tPmxvY2spOworCQlpZiAoIWluZm8tPmZsdXNoaW5nKSB7CisJCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCisJCXVzZWQgPSBpbmZvLT5ieXRlc191c2VkICsgaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKworCQkJaW5mby0+Ynl0ZXNfcGlubmVkICsgaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQkJaW5mby0+Ynl0ZXNfc3VwZXIgKyBpbmZvLT5ieXRlc19yb290ICsKKwkJCWluZm8tPmJ5dGVzX21heV91c2UgKyBpbmZvLT5ieXRlc19kZWxhbGxvYzsKKwkJaWYgKHVzZWQgPCBpbmZvLT50b3RhbF9ieXRlcykgeworCQkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCQkJYnJlYWs7CisJCX0KKwkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCQlzY2hlZHVsZSgpOworCX0KKwlmaW5pc2hfd2FpdCgmaW5mby0+Zmx1c2hfd2FpdCwgJndhaXQpOworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8pCit7CisJc3RydWN0IGFzeW5jX2ZsdXNoICphc3luYzsKKwlib29sIHdhaXQgPSBmYWxzZTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAoIWluZm8tPmZsdXNoaW5nKSB7CisJCWluZm8tPmZsdXNoaW5nID0gMTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Zmx1c2hfd2FpdCk7CisJfSBlbHNlIHsKKwkJd2FpdCA9IHRydWU7CisJfQorCisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCisJaWYgKHdhaXQpIHsKKwkJd2FpdF9vbl9mbHVzaChpbmZvKTsKKwkJcmV0dXJuOworCX0KKworCWFzeW5jID0ga3phbGxvYyhzaXplb2YoKmFzeW5jKSwgR0ZQX05PRlMpOworCWlmICghYXN5bmMpCisJCWdvdG8gZmx1c2g7CisKKwlhc3luYy0+cm9vdCA9IHJvb3Q7CisJYXN5bmMtPmluZm8gPSBpbmZvOworCWFzeW5jLT53b3JrLmZ1bmMgPSBmbHVzaF9kZWxhbGxvY19hc3luYzsKKworCWJ0cmZzX3F1ZXVlX3dvcmtlcigmcm9vdC0+ZnNfaW5mby0+ZW5vc3BjX3dvcmtlcnMsCisJCQkgICAmYXN5bmMtPndvcmspOworCXdhaXRfb25fZmx1c2goaW5mbyk7CisJcmV0dXJuOworCitmbHVzaDoKKwlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCk7CisJYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCk7CisKKwlzcGluX2xvY2soJmluZm8tPmxvY2spOworCWluZm8tPmZsdXNoaW5nID0gMDsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJd2FrZV91cCgmaW5mby0+Zmx1c2hfd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgbWF5YmVfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJIHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBidHJmc19zdXBlcl9ibG9jayAqZGlza19zdXBlciA9ICZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5OworCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOworCWJvb2wgd2FpdCA9IGZhbHNlOworCWludCByZXQgPSAwOworCXU2NCBtaW5fbWV0YWRhdGE7CisJdTY0IGZyZWVfc3BhY2U7CisKKwlmcmVlX3NwYWNlID0gYnRyZnNfc3VwZXJfdG90YWxfYnl0ZXMoZGlza19zdXBlcik7CisJLyoKKwkgKiB3ZSBhbGxvdyB0aGUgbWV0YWRhdGEgdG8gZ3JvdyB0byBhIG1heCBvZiBlaXRoZXIgMTBnYiBvciA1JSBvZiB0aGUKKwkgKiBzcGFjZSBpbiB0aGUgdm9sdW1lLgorCSAqLworCW1pbl9tZXRhZGF0YSA9IG1pbigodTY0KTEwICogMTAyNCAqIDEwMjQgKiAxMDI0LAorCQkJICAgICBkaXY2NF91NjQoZnJlZV9zcGFjZSAqIDUsIDEwMCkpOworCWlmIChpbmZvLT50b3RhbF9ieXRlcyA+PSBtaW5fbWV0YWRhdGEpIHsKKwkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaW5mby0+ZnVsbCkgeworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXJldHVybiAwOworCX0KKworCWlmICghaW5mby0+YWxsb2NhdGluZ19jaHVuaykgeworCQlpbmZvLT5mb3JjZV9hbGxvYyA9IDE7CisJCWluZm8tPmFsbG9jYXRpbmdfY2h1bmsgPSAxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5hbGxvY2F0ZV93YWl0KTsKKwl9IGVsc2UgeworCQl3YWl0ID0gdHJ1ZTsKKwl9CisKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAod2FpdCkgeworCQl3YWl0X2V2ZW50KGluZm8tPmFsbG9jYXRlX3dhaXQsCisJCQkgICAhaW5mby0+YWxsb2NhdGluZ19jaHVuayk7CisJCXJldHVybiAxOworCX0KKworCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKCF0cmFucykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCisJCQkgICAgIDQwOTYgKyAyICogMTAyNCAqIDEwMjQsCisJCQkgICAgIGluZm8tPmZsYWdzLCAwKTsKKwlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0Oworb3V0OgorCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJaW5mby0+YWxsb2NhdGluZ19jaHVuayA9IDA7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXdha2VfdXAoJmluZm8tPmFsbG9jYXRlX3dhaXQpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZXNlcnZlIG1ldGFkYXRhIHNwYWNlIGZvciBkZWxhbGxvYy4KKyAqLworaW50IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnVtX2l0ZW1zKQoreworCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbzsKKwl1NjQgbnVtX2J5dGVzOworCXU2NCB1c2VkOworCXU2NCBhbGxvY190YXJnZXQ7CisJaW50IGZsdXNoZWQgPSAwOworCWludCBmb3JjZV9kZWxhbGxvYzsKKworCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLworCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOworCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOworCisJbnVtX2J5dGVzID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKKwkJCQkJICAgbnVtX2l0ZW1zKTsKIGFnYWluOgogCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7Ci0JaWYgKCFtZXRhX3NpbmZvLT5mdWxsKQotCQl0aHJlc2ggPSBtZXRhX3NpbmZvLT50b3RhbF9ieXRlcyAqIDgwOwotCWVsc2UKLQkJdGhyZXNoID0gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMgKiA5NTsKIAotCWRvX2Rpdih0aHJlc2gsIDEwMCk7CisJZm9yY2VfZGVsYWxsb2MgPSBtZXRhX3NpbmZvLT5mb3JjZV9kZWxhbGxvYzsKIAotCWlmIChtZXRhX3NpbmZvLT5ieXRlc191c2VkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKwotCSAgICBtZXRhX3NpbmZvLT5ieXRlc19waW5uZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZWFkb25seSArCi0JICAgIG1ldGFfc2luZm8tPmJ5dGVzX3N1cGVyID4gdGhyZXNoKSB7Ci0JCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCQlpZiAoIW1ldGFfc2luZm8tPmZ1bGwpIHsKLQkJCW1ldGFfc2luZm8tPmZvcmNlX2FsbG9jID0gMTsKKwlpZiAodW5saWtlbHkoIW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QpKQorCQltZXRhX3NpbmZvLT5ieXRlc19yb290ID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LCA2KTsKKworCWlmICghZmx1c2hlZCkKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgKz0gbnVtX2J5dGVzOworCisJdXNlZCA9IG1ldGFfc2luZm8tPmJ5dGVzX3VzZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZXNlcnZlZCArCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCArIG1ldGFfc2luZm8tPmJ5dGVzX3JlYWRvbmx5ICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfc3VwZXIgKyBtZXRhX3NpbmZvLT5ieXRlc19yb290ICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSArIG1ldGFfc2luZm8tPmJ5dGVzX2RlbGFsbG9jOworCisJaWYgKHVzZWQgPiBtZXRhX3NpbmZvLT50b3RhbF9ieXRlcykgeworCQlmbHVzaGVkKys7CisKKwkJaWYgKGZsdXNoZWQgPT0gMSkgeworCQkJaWYgKG1heWJlX2FsbG9jYXRlX2NodW5rKHJvb3QsIG1ldGFfc2luZm8pKQorCQkJCWdvdG8gYWdhaW47CisJCQlmbHVzaGVkKys7CisJCX0gZWxzZSB7CiAJCQlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7Ci1hbGxvYzoKLQkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlpZiAoIXRyYW5zKQotCQkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKLQkJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKLQkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGFsbG9jX3RhcmdldCwgMCk7Ci0JCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQkJaWYgKCFtZXRhX3NpbmZvKSB7Ci0JCQkJbWV0YV9zaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKGluZm8sCi0JCQkJCQkJICAgICAgIGFsbG9jX3RhcmdldCk7Ci0JCQl9CisJCWlmIChmbHVzaGVkID09IDIpIHsKKwkJCWZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7CisJCQlnb3RvIGFnYWluOworCQl9IGVsc2UgaWYgKGZsdXNoZWQgPT0gMykgeworCQkJZmx1c2hfZGVsYWxsb2Mocm9vdCwgbWV0YV9zaW5mbyk7CiAJCQlnb3RvIGFnYWluOwogCQl9CisJCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisJCW1ldGFfc2luZm8tPmJ5dGVzX2RlbGFsbG9jIC09IG51bV9ieXRlczsKIAkJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOwotCi0JCWlmICghY29tbWl0dGVkKSB7Ci0JCQljb21taXR0ZWQgPSAxOwotCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCQkJaWYgKCF0cmFucykKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCQlnb3RvIGFnYWluOwotCQl9CisJCXByaW50ayhLRVJOX0VSUiAiZW5vc3BjLCBoYXMgJWQsIHJlc2VydmVkICVkXG4iLAorCQkgICAgICAgQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMsCisJCSAgICAgICBCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfZXh0ZW50cyk7CisJCWR1bXBfc3BhY2VfaW5mbyhtZXRhX3NpbmZvLCAwLCAwKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQorCisJQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2V4dGVudHMrKzsKKwljaGVja19mb3JjZV9kZWxhbGxvYyhtZXRhX3NpbmZvKTsKKwlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlpZiAoIWZsdXNoZWQgJiYgZm9yY2VfZGVsYWxsb2MpCisJCWZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHVucmVzZXJ2ZSBudW1faXRlbXMgbnVtYmVyIG9mIGl0ZW1zIHdvcnRoIG9mIG1ldGFkYXRhIHNwYWNlLiAgVGhpcyBuZWVkcyB0bworICogYmUgcGFpcmVkIHdpdGggYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZS4KKyAqCisgKiBOT1RFOiBpZiB5b3UgaGF2ZSB0aGUgb3B0aW9uLCBydW4gdGhpcyBfQUZURVJfIHlvdSBkbyBhCisgKiBidHJmc19lbmRfdHJhbnNhY3Rpb24sIHNpbmNlIGJ0cmZzX2VuZF90cmFuc2FjdGlvbiB3aWxsIHJ1biBkZWxheWVkIHJlZgorICogb3ByYXRpb25zIHdoaWNoIHdpbGwgcmVzdWx0IGluIG1vcmUgdXNlZCBtZXRhZGF0YSwgc28gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UKKyAqIGNhbiBkbyB0aGF0IHdpdGhvdXQgaXNzdWUuCisgKi8KK2ludCBidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICptZXRhX3NpbmZvOworCXU2NCBudW1fYnl0ZXM7CisJdTY0IGFsbG9jX3RhcmdldDsKKwlib29sIGJ1ZyA9IGZhbHNlOworCisJLyogZ2V0IHRoZSBzcGFjZSBpbmZvIGZvciB3aGVyZSB0aGUgbWV0YWRhdGEgd2lsbCBsaXZlICovCisJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMCk7CisJbWV0YV9zaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKGluZm8sIGFsbG9jX3RhcmdldCk7CisKKwludW1fYnl0ZXMgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QsIG51bV9pdGVtcyk7CisKKwlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCWlmIChtZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlIDwgbnVtX2J5dGVzKSB7CisJCWJ1ZyA9IHRydWU7CisJCW1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgPSAwOworCX0gZWxzZSB7CisJCW1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgLT0gbnVtX2J5dGVzOworCX0KKwlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlCVUdfT04oYnVnKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVzZXJ2ZSBzb21lIG1ldGFkYXRhIHNwYWNlIGZvciB1c2UuICBXZSdsbCBjYWxjdWxhdGUgdGhlIHdvcnN0ZSBjYXNlIG51bWJlcgorICogb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gbW9kaWZ5IG51bV9pdGVtcyBudW1iZXIgb2YgaXRlbXMuICBJZiB3ZQorICogaGF2ZSBzcGFjZSwgZmFudGFzdGljLCBpZiBub3QsIHlvdSBnZXQgLUVOT1NQQy4gIFBsZWFzZSBjYWxsCisgKiBidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Ugd2hlbiB5b3UgYXJlIGRvbmUgZm9yIHRoZSBfU0FNRV8gbnVtYmVyIG9mCisgKiBpdGVtcyB5b3UgcmVzZXJ2ZWQsIHNpbmNlIHdoYXRldmVyIG1ldGFkYXRhIHlvdSBuZWVkZWQgc2hvdWxkIGhhdmUgYWxyZWFkeQorICogYmVlbiBhbGxvY2F0ZWQuCisgKgorICogVGhpcyB3aWxsIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24gdG8gbWFrZSBtb3JlIHNwYWNlIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoCisgKiBtZXRhZGF0YSBzcGFjZS4gIFRIZSBvbmx5IHRpbWUgd2UgZG9uJ3QgZG8gdGhpcyBpcyBpZiB3ZSdyZSByZXNlcnZpbmcgc3BhY2UKKyAqIGluc2lkZSBvZiBhIHRyYW5zYWN0aW9uLCB0aGVuIHdlIHdpbGwganVzdCByZXR1cm4gLUVOT1NQQyBhbmQgaXQgaXMgdGhlCisgKiBjYWxsZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGhhbmRsZSBpdCBwcm9wZXJseS4KKyAqLworaW50IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICptZXRhX3NpbmZvOworCXU2NCBudW1fYnl0ZXM7CisJdTY0IHVzZWQ7CisJdTY0IGFsbG9jX3RhcmdldDsKKwlpbnQgcmV0cmllcyA9IDA7CisKKwkvKiBnZXQgdGhlIHNwYWNlIGluZm8gZm9yIHdoZXJlIHRoZSBtZXRhZGF0YSB3aWxsIGxpdmUgKi8KKwlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAwKTsKKwltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywgYWxsb2NfdGFyZ2V0KTsKKworCW51bV9ieXRlcyA9IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQocm9vdCwgbnVtX2l0ZW1zKTsKK2FnYWluOgorCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlpZiAodW5saWtlbHkoIW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QpKQorCQltZXRhX3NpbmZvLT5ieXRlc19yb290ID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LCA2KTsKKworCWlmICghcmV0cmllcykKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSArPSBudW1fYnl0ZXM7CisKKwl1c2VkID0gbWV0YV9zaW5mby0+Ynl0ZXNfdXNlZCArIG1ldGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfcGlubmVkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQltZXRhX3NpbmZvLT5ieXRlc19zdXBlciArIG1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgKworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICsgbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2M7CisKKwlpZiAodXNlZCA+IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzKSB7CisJCXJldHJpZXMrKzsKKwkJaWYgKHJldHJpZXMgPT0gMSkgeworCQkJaWYgKG1heWJlX2FsbG9jYXRlX2NodW5rKHJvb3QsIG1ldGFfc2luZm8pKQorCQkJCWdvdG8gYWdhaW47CisJCQlyZXRyaWVzKys7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisJCX0KKworCQlpZiAocmV0cmllcyA9PSAyKSB7CisJCQlmbHVzaF9kZWxhbGxvYyhyb290LCBtZXRhX3NpbmZvKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSAtPSBudW1fYnl0ZXM7CisJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCQlkdW1wX3NwYWNlX2luZm8obWV0YV9zaW5mbywgMCwgMCk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCWNoZWNrX2ZvcmNlX2RlbGFsbG9jKG1ldGFfc2luZm8pOwogCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMjg4OCw3ICszMjY4LDcgQEAKIAkJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogCiAJCS8qIGNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgdHJ5IGFnYWluICovCi0JCWlmICghY29tbWl0dGVkKSB7CisJCWlmICghY29tbWl0dGVkICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB7CiAJCQljb21taXR0ZWQgPSAxOwogCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCQkJaWYgKCF0cmFucykKQEAgLTI5MTYsNyArMzI5Niw3IEBACiAJQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2J5dGVzICs9IGJ5dGVzOwogCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKIAotCXJldHVybiBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzAxNSwxNyArMzM5NSwxNSBAQAogCUJVR19PTighc3BhY2VfaW5mbyk7CiAKIAlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwotCWlmIChzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYykgeworCWlmIChzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYykKIAkJZm9yY2UgPSAxOwotCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDA7Ci0JfQogCWlmIChzcGFjZV9pbmZvLT5mdWxsKSB7CiAJCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJdGhyZXNoID0gc3BhY2VfaW5mby0+dG90YWxfYnl0ZXMgLSBzcGFjZV9pbmZvLT5ieXRlc19yZWFkb25seTsKLQl0aHJlc2ggPSBkaXZfZmFjdG9yKHRocmVzaCwgNik7CisJdGhyZXNoID0gZGl2X2ZhY3Rvcih0aHJlc2gsIDgpOwogCWlmICghZm9yY2UgJiYKIAkgICAoc3BhY2VfaW5mby0+Ynl0ZXNfdXNlZCArIHNwYWNlX2luZm8tPmJ5dGVzX3Bpbm5lZCArCiAJICAgIHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkICsgYWxsb2NfYnl0ZXMpIDwgdGhyZXNoKSB7CkBAIC0zMDM5LDcgKzM0MTcsNyBAQAogCSAqIHdlIGtlZXAgYSByZWFzb25hYmxlIG51bWJlciBvZiBtZXRhZGF0YSBjaHVua3MgYWxsb2NhdGVkIGluIHRoZQogCSAqIEZTIGFzIHdlbGwuCiAJICovCi0JaWYgKGZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSkgeworCWlmIChmbGFncyAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEgJiYgZnNfaW5mby0+bWV0YWRhdGFfcmF0aW8pIHsKIAkJZnNfaW5mby0+ZGF0YV9jaHVua19hbGxvY2F0aW9ucysrOwogCQlpZiAoIShmc19pbmZvLT5kYXRhX2NodW5rX2FsbG9jYXRpb25zICUKIAkJICAgICAgZnNfaW5mby0+bWV0YWRhdGFfcmF0aW8pKQpAQCAtMzA0Nyw4ICszNDI1LDExIEBACiAJfQogCiAJcmV0ID0gYnRyZnNfYWxsb2NfY2h1bmsodHJhbnMsIGV4dGVudF9yb290LCBmbGFncyk7CisJc3Bpbl9sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKIAlpZiAocmV0KQogCQlzcGFjZV9pbmZvLT5mdWxsID0gMTsKKwlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDA7CisJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogb3V0OgogCW11dGV4X3VubG9jaygmZXh0ZW50X3Jvb3QtPmZzX2luZm8tPmNodW5rX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtMzMwNiw2ICszNjg3LDE0IEBACiAJaWYgKGlzX2RhdGEpCiAJCWdvdG8gcGluaXQ7CiAKKwkvKgorCSAqIGRpc2NhcmQgaXMgc2xvb29vdywgYW5kIHNvIHRyaWdnZXJpbmcgZGlzY2FyZHMgb24KKwkgKiBpbmRpdmlkdWFsIGJ0cmVlIGJsb2NrcyBpc24ndCBhIGdvb2QgcGxhbi4gIEp1c3QKKwkgKiBwaW4gZXZlcnl0aGluZyBpbiBkaXNjYXJkIG1vZGUuCisJICovCisJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIERJU0NBUkQpKQorCQlnb3RvIHBpbml0OworCiAJYnVmID0gYnRyZnNfZmluZF90cmVlX2Jsb2NrKHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzKTsKIAlpZiAoIWJ1ZikKIAkJZ290byBwaW5pdDsKQEAgLTM3MTMsNyArNDEwMiw3IEBACiB9CiAKIGVudW0gYnRyZnNfbG9vcF90eXBlIHsKLQlMT09QX0NBQ0hFRF9PTkxZID0gMCwKKwlMT09QX0ZJTkRfSURFQUwgPSAwLAogCUxPT1BfQ0FDSElOR19OT1dBSVQgPSAxLAogCUxPT1BfQ0FDSElOR19XQUlUID0gMiwKIAlMT09QX0FMTE9DX0NIVU5LID0gMywKQEAgLTM3NDIsMTEgKzQxMzEsMTUgQEAKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwID0gTlVMTDsKIAlpbnQgZW1wdHlfY2x1c3RlciA9IDIgKiAxMDI0ICogMTAyNDsKIAlpbnQgYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7CisJaW50IGRvbmVfY2h1bmtfYWxsb2MgPSAwOwogCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvOwogCWludCBsYXN0X3B0cl9sb29wID0gMDsKIAlpbnQgbG9vcCA9IDA7CiAJYm9vbCBmb3VuZF91bmNhY2hlZF9iZyA9IGZhbHNlOwogCWJvb2wgZmFpbGVkX2NsdXN0ZXJfcmVmaWxsID0gZmFsc2U7CisJYm9vbCBmYWlsZWRfYWxsb2MgPSBmYWxzZTsKKwl1NjQgaWRlYWxfY2FjaGVfcGVyY2VudCA9IDA7CisJdTY0IGlkZWFsX2NhY2hlX29mZnNldCA9IDA7CiAKIAlXQVJOX09OKG51bV9ieXRlcyA8IHJvb3QtPnNlY3RvcnNpemUpOwogCWJ0cmZzX3NldF9rZXlfdHlwZShpbnMsIEJUUkZTX0VYVEVOVF9JVEVNX0tFWSk7CkBAIC0zNzgyLDE0ICs0MTc1LDE5IEBACiAJCWVtcHR5X2NsdXN0ZXIgPSAwOwogCiAJaWYgKHNlYXJjaF9zdGFydCA9PSBoaW50X2J5dGUpIHsKK2lkZWFsX2NhY2hlOgogCQlibG9ja19ncm91cCA9IGJ0cmZzX2xvb2t1cF9ibG9ja19ncm91cChyb290LT5mc19pbmZvLAogCQkJCQkJICAgICAgIHNlYXJjaF9zdGFydCk7CiAJCS8qCiAJCSAqIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBibG9jayBncm91cCBpZiBpdCBkb2Vzbid0IG1hdGNoIG91cgogCQkgKiBhbGxvY2F0aW9uIGJpdHMsIG9yIGlmIGl0cyBub3QgY2FjaGVkLgorCQkgKgorCQkgKiBIb3dldmVyIGlmIHdlIGFyZSByZS1zZWFyY2hpbmcgd2l0aCBhbiBpZGVhbCBibG9jayBncm91cAorCQkgKiBwaWNrZWQgb3V0IHRoZW4gd2UgZG9uJ3QgY2FyZSB0aGF0IHRoZSBibG9jayBncm91cCBpcyBjYWNoZWQuCiAJCSAqLwogCQlpZiAoYmxvY2tfZ3JvdXAgJiYgYmxvY2tfZ3JvdXBfYml0cyhibG9ja19ncm91cCwgZGF0YSkgJiYKLQkJICAgIGJsb2NrX2dyb3VwX2NhY2hlX2RvbmUoYmxvY2tfZ3JvdXApKSB7CisJCSAgICAoYmxvY2tfZ3JvdXAtPmNhY2hlZCAhPSBCVFJGU19DQUNIRV9OTyB8fAorCQkgICAgIHNlYXJjaF9zdGFydCA9PSBpZGVhbF9jYWNoZV9vZmZzZXQpKSB7CiAJCQlkb3duX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCQkJaWYgKGxpc3RfZW1wdHkoJmJsb2NrX2dyb3VwLT5saXN0KSB8fAogCQkJICAgIGJsb2NrX2dyb3VwLT5ybykgewpAQCAtMzgwMSwxMyArNDE5OSwxMyBAQAogCQkJCSAqLwogCQkJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCQkJdXBfcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSB7CiAJCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQkJfQogCQl9IGVsc2UgaWYgKGJsb2NrX2dyb3VwKSB7CiAJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQl9CiAJfQotCiBzZWFyY2g6CiAJZG93bl9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsb2NrX2dyb3VwLCAmc3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBzLCBsaXN0KSB7CkBAIC0zODE5LDI4ICs0MjE3LDQ1IEBACiAKIGhhdmVfYmxvY2tfZ3JvdXA6CiAJCWlmICh1bmxpa2VseShibG9ja19ncm91cC0+Y2FjaGVkID09IEJUUkZTX0NBQ0hFX05PKSkgeworCQkJdTY0IGZyZWVfcGVyY2VudDsKKworCQkJZnJlZV9wZXJjZW50ID0gYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmYmxvY2tfZ3JvdXAtPml0ZW0pOworCQkJZnJlZV9wZXJjZW50ICo9IDEwMDsKKwkJCWZyZWVfcGVyY2VudCA9IGRpdjY0X3U2NChmcmVlX3BlcmNlbnQsCisJCQkJCQkgYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQpOworCQkJZnJlZV9wZXJjZW50ID0gMTAwIC0gZnJlZV9wZXJjZW50OworCQkJaWYgKGZyZWVfcGVyY2VudCA+IGlkZWFsX2NhY2hlX3BlcmNlbnQgJiYKKwkJCSAgICBsaWtlbHkoIWJsb2NrX2dyb3VwLT5ybykpIHsKKwkJCQlpZGVhbF9jYWNoZV9vZmZzZXQgPSBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkOworCQkJCWlkZWFsX2NhY2hlX3BlcmNlbnQgPSBmcmVlX3BlcmNlbnQ7CisJCQl9CisKIAkJCS8qCi0JCQkgKiB3ZSB3YW50IHRvIHN0YXJ0IGNhY2hpbmcga3RocmVhZHMsIGJ1dCBub3QgdG9vIG1hbnkKLQkJCSAqIHJpZ2h0IG9mZiB0aGUgYmF0IHNvIHdlIGRvbid0IG92ZXJ3aGVsbSB0aGUgc3lzdGVtLAotCQkJICogc28gb25seSBzdGFydCB0aGVtIGlmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMiBhbmQgd2UncmUKLQkJCSAqIGluIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gcGhhc2UuCisJCQkgKiBXZSBvbmx5IHdhbnQgdG8gc3RhcnQga3RocmVhZCBjYWNoaW5nIGlmIHdlIGFyZSBhdAorCQkJICogdGhlIHBvaW50IHdoZXJlIHdlIHdpbGwgd2FpdCBmb3IgY2FjaGluZyB0byBtYWtlCisJCQkgKiBwcm9ncmVzcywgb3IgaWYgb3VyIGlkZWFsIHNlYXJjaCBpcyBvdmVyIGFuZCB3ZSd2ZQorCQkJICogZm91bmQgc29tZWJvZHkgdG8gc3RhcnQgY2FjaGluZy4KIAkJCSAqLwogCQkJaWYgKGxvb3AgPiBMT09QX0NBQ0hJTkdfTk9XQUlUIHx8Ci0JCQkgICAgYXRvbWljX3JlYWQoJnNwYWNlX2luZm8tPmNhY2hpbmdfdGhyZWFkcykgPCAyKSB7CisJCQkgICAgKGxvb3AgPiBMT09QX0ZJTkRfSURFQUwgJiYKKwkJCSAgICAgYXRvbWljX3JlYWQoJnNwYWNlX2luZm8tPmNhY2hpbmdfdGhyZWFkcykgPCAyKSkgewogCQkJCXJldCA9IGNhY2hlX2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJCQlCVUdfT04ocmV0KTsKIAkJCX0KKwkJCWZvdW5kX3VuY2FjaGVkX2JnID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIElmIGxvb3AgaXMgc2V0IGZvciBjYWNoZWQgb25seSwgdHJ5IHRoZSBuZXh0IGJsb2NrCisJCQkgKiBncm91cC4KKwkJCSAqLworCQkJaWYgKGxvb3AgPT0gTE9PUF9GSU5EX0lERUFMKQorCQkJCWdvdG8gbG9vcDsKIAkJfQogCiAJCWNhY2hlZCA9IGJsb2NrX2dyb3VwX2NhY2hlX2RvbmUoYmxvY2tfZ3JvdXApOwotCQlpZiAodW5saWtlbHkoIWNhY2hlZCkpIHsKKwkJaWYgKHVubGlrZWx5KCFjYWNoZWQpKQogCQkJZm91bmRfdW5jYWNoZWRfYmcgPSB0cnVlOwogCi0JCQkvKiBpZiB3ZSBvbmx5IHdhbnQgY2FjaGVkIGJncywgbG9vcCAqLwotCQkJaWYgKGxvb3AgPT0gTE9PUF9DQUNIRURfT05MWSkKLQkJCQlnb3RvIGxvb3A7Ci0JCX0KLQogCQlpZiAodW5saWtlbHkoYmxvY2tfZ3JvdXAtPnJvKSkKIAkJCWdvdG8gbG9vcDsKIApAQCAtMzk1MSwxNCArNDM2NiwyMyBAQAogCiAJCW9mZnNldCA9IGJ0cmZzX2ZpbmRfc3BhY2VfZm9yX2FsbG9jKGJsb2NrX2dyb3VwLCBzZWFyY2hfc3RhcnQsCiAJCQkJCQkgICAgbnVtX2J5dGVzLCBlbXB0eV9zaXplKTsKLQkJaWYgKCFvZmZzZXQgJiYgKGNhY2hlZCB8fCAoIWNhY2hlZCAmJgotCQkJCQkgICBsb29wID09IExPT1BfQ0FDSElOR19OT1dBSVQpKSkgewotCQkJZ290byBsb29wOwotCQl9IGVsc2UgaWYgKCFvZmZzZXQgJiYgKCFjYWNoZWQgJiYKLQkJCQkgICAgICAgbG9vcCA+IExPT1BfQ0FDSElOR19OT1dBSVQpKSB7CisJCS8qCisJCSAqIElmIHdlIGRpZG4ndCBmaW5kIGEgY2h1bmssIGFuZCB3ZSBoYXZlbid0IGZhaWxlZCBvbiB0aGlzCisJCSAqIGJsb2NrIGdyb3VwIGJlZm9yZSwgYW5kIHRoaXMgYmxvY2sgZ3JvdXAgaXMgaW4gdGhlIG1pZGRsZSBvZgorCQkgKiBjYWNoaW5nIGFuZCB3ZSBhcmUgb2sgd2l0aCB3YWl0aW5nLCB0aGVuIGdvIGFoZWFkIGFuZCB3YWl0CisJCSAqIGZvciBwcm9ncmVzcyB0byBiZSBtYWRlLCBhbmQgc2V0IGZhaWxlZF9hbGxvYyB0byB0cnVlLgorCQkgKgorCQkgKiBJZiBmYWlsZWRfYWxsb2MgaXMgdHJ1ZSB0aGVuIHdlJ3ZlIGFscmVhZHkgd2FpdGVkIG9uIHRoaXMKKwkJICogYmxvY2sgZ3JvdXAgb25jZSBhbmQgc2hvdWxkIG1vdmUgb24gdG8gdGhlIG5leHQgYmxvY2sgZ3JvdXAuCisJCSAqLworCQlpZiAoIW9mZnNldCAmJiAhZmFpbGVkX2FsbG9jICYmICFjYWNoZWQgJiYKKwkJICAgIGxvb3AgPiBMT09QX0NBQ0hJTkdfTk9XQUlUKSB7CiAJCQl3YWl0X2Jsb2NrX2dyb3VwX2NhY2hlX3Byb2dyZXNzKGJsb2NrX2dyb3VwLAotCQkJCQludW1fYnl0ZXMgKyBlbXB0eV9zaXplKTsKKwkJCQkJCW51bV9ieXRlcyArIGVtcHR5X3NpemUpOworCQkJZmFpbGVkX2FsbG9jID0gdHJ1ZTsKIAkJCWdvdG8gaGF2ZV9ibG9ja19ncm91cDsKKwkJfSBlbHNlIGlmICghb2Zmc2V0KSB7CisJCQlnb3RvIGxvb3A7CiAJCX0KIGNoZWNrczoKIAkJc2VhcmNoX3N0YXJ0ID0gc3RyaXBlX2FsaWduKHJvb3QsIG9mZnNldCk7CkBAIC00MDA2LDEzICs0NDMwLDE2IEBACiAJCWJyZWFrOwogbG9vcDoKIAkJZmFpbGVkX2NsdXN0ZXJfcmVmaWxsID0gZmFsc2U7CisJCWZhaWxlZF9hbGxvYyA9IGZhbHNlOwogCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCX0KIAl1cF9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKIAotCS8qIExPT1BfQ0FDSEVEX09OTFksIG9ubHkgc2VhcmNoIGZ1bGx5IGNhY2hlZCBibG9jayBncm91cHMKLQkgKiBMT09QX0NBQ0hJTkdfTk9XQUlULCBzZWFyY2ggcGFydGlhbGx5IGNhY2hlZCBibG9jayBncm91cHMsIGJ1dAotCSAqCQkJZG9udCB3YWl0IGZvUiB0aGVtIHRvIGZpbmlzaCBjYWNoaW5nCisJLyogTE9PUF9GSU5EX0lERUFMLCBvbmx5IHNlYXJjaCBjYWNoaW5nL2NhY2hlZCBiZydzLCBhbmQgZG9uJ3Qgd2FpdCBmb3IKKwkgKgkJCWZvciB0aGVtIHRvIG1ha2UgY2FjaGluZyBwcm9ncmVzcy4gIEFsc28KKwkgKgkJCWRldGVybWluZSB0aGUgYmVzdCBwb3NzaWJsZSBiZyB0byBjYWNoZQorCSAqIExPT1BfQ0FDSElOR19OT1dBSVQsIHNlYXJjaCBwYXJ0aWFsbHkgY2FjaGVkIGJsb2NrIGdyb3Vwcywga2lja2luZworCSAqCQkJY2FjaGluZyBrdGhyZWFkcyBhcyB3ZSBtb3ZlIGFsb25nCiAJICogTE9PUF9DQUNISU5HX1dBSVQsIHNlYXJjaCBldmVyeXRoaW5nLCBhbmQgd2FpdCBpZiBvdXIgYmcgaXMgY2FjaGluZwogCSAqIExPT1BfQUxMT0NfQ0hVTkssIGZvcmNlIGEgY2h1bmsgYWxsb2NhdGlvbiBhbmQgdHJ5IGFnYWluCiAJICogTE9PUF9OT19FTVBUWV9TSVpFLCBzZXQgZW1wdHlfc2l6ZSBhbmQgZW1wdHlfY2x1c3RlciB0byAwIGFuZCB0cnkKQEAgLTQwMjEsMTIgKzQ0NDgsNDcgQEAKIAlpZiAoIWlucy0+b2JqZWN0aWQgJiYgbG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSAmJgogCSAgICAoZm91bmRfdW5jYWNoZWRfYmcgfHwgZW1wdHlfc2l6ZSB8fCBlbXB0eV9jbHVzdGVyIHx8CiAJICAgICBhbGxvd2VkX2NodW5rX2FsbG9jKSkgewotCQlpZiAoZm91bmRfdW5jYWNoZWRfYmcpIHsKKwkJaWYgKGxvb3AgPT0gTE9PUF9GSU5EX0lERUFMICYmIGZvdW5kX3VuY2FjaGVkX2JnKSB7CiAJCQlmb3VuZF91bmNhY2hlZF9iZyA9IGZhbHNlOwotCQkJaWYgKGxvb3AgPCBMT09QX0NBQ0hJTkdfV0FJVCkgewotCQkJCWxvb3ArKzsKKwkJCWxvb3ArKzsKKwkJCWlmICghaWRlYWxfY2FjaGVfcGVyY2VudCAmJgorCQkJICAgIGF0b21pY19yZWFkKCZzcGFjZV9pbmZvLT5jYWNoaW5nX3RocmVhZHMpKQogCQkJCWdvdG8gc2VhcmNoOwotCQkJfQorCisJCQkvKgorCQkJICogMSBvZiB0aGUgZm9sbG93aW5nIDIgdGhpbmdzIGhhdmUgaGFwcGVuZWQgc28gZmFyCisJCQkgKgorCQkJICogMSkgV2UgZm91bmQgYW4gaWRlYWwgYmxvY2sgZ3JvdXAgZm9yIGNhY2hpbmcgdGhhdAorCQkJICogaXMgbW9zdGx5IGZ1bGwgYW5kIHdpbGwgY2FjaGUgcXVpY2tseSwgc28gd2UgbWlnaHQKKwkJCSAqIGFzIHdlbGwgd2FpdCBmb3IgaXQuCisJCQkgKgorCQkJICogMikgV2Ugc2VhcmNoZWQgZm9yIGNhY2hlZCBvbmx5IGFuZCB3ZSBkaWRuJ3QgZmluZAorCQkJICogYW55dGhpbmcsIGFuZCB3ZSBkaWRuJ3Qgc3RhcnQgYW55IGNhY2hpbmcga3RocmVhZHMKKwkJCSAqIGVpdGhlciwgc28gY2hhbmNlcyBhcmUgd2Ugd2lsbCBsb29wIHRocm91Z2ggYW5kCisJCQkgKiBzdGFydCBhIGNvdXBsZSBjYWNoaW5nIGt0aHJlYWRzLCBhbmQgdGhlbiBjb21lIGJhY2sKKwkJCSAqIGFyb3VuZCBhbmQganVzdCB3YWl0IGZvciB0aGVtLiAgVGhpcyB3aWxsIGJlIHNsb3dlcgorCQkJICogYmVjYXVzZSB3ZSB3aWxsIGhhdmUgMiBjYWNoaW5nIGt0aHJlYWRzIHJlYWRpbmcgYXQKKwkJCSAqIHRoZSBzYW1lIHRpbWUgd2hlbiB3ZSBjb3VsZCBoYXZlIGp1c3Qgc3RhcnRlZCBvbmUKKwkJCSAqIGFuZCB3YWl0ZWQgZm9yIGl0IHRvIGdldCBmYXIgZW5vdWdoIHRvIGdpdmUgdXMgYW4KKwkJCSAqIGFsbG9jYXRpb24sIHNvIGdvIGFoZWFkIGFuZCBnbyB0byB0aGUgd2FpdCBjYWNoaW5nCisJCQkgKiBsb29wLgorCQkJICovCisJCQlsb29wID0gTE9PUF9DQUNISU5HX1dBSVQ7CisJCQlzZWFyY2hfc3RhcnQgPSBpZGVhbF9jYWNoZV9vZmZzZXQ7CisJCQlpZGVhbF9jYWNoZV9wZXJjZW50ID0gMDsKKwkJCWdvdG8gaWRlYWxfY2FjaGU7CisJCX0gZWxzZSBpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwpIHsKKwkJCS8qCisJCQkgKiBEaWRuJ3QgZmluZCBhIHVuY2FjaGVkIGJnLCB3YWl0IG9uIGFueXRoaW5nIHdlIGZpbmQKKwkJCSAqIG5leHQuCisJCQkgKi8KKwkJCWxvb3AgPSBMT09QX0NBQ0hJTkdfV0FJVDsKKwkJCWdvdG8gc2VhcmNoOworCQl9CisKKwkJaWYgKGxvb3AgPCBMT09QX0NBQ0hJTkdfV0FJVCkgeworCQkJbG9vcCsrOworCQkJZ290byBzZWFyY2g7CiAJCX0KIAogCQlpZiAobG9vcCA9PSBMT09QX0FMTE9DX0NIVU5LKSB7CkBAIC00MDM4LDcgKzQ1MDAsOCBAQAogCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCiAJCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAxKTsKIAkJCWFsbG93ZWRfY2h1bmtfYWxsb2MgPSAwOwotCQl9IGVsc2UgeworCQkJZG9uZV9jaHVua19hbGxvYyA9IDE7CisJCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MpIHsKIAkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMTsKIAkJfQogCkBAIC00MDYzLDIxICs0NTI2LDMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZHVtcF9zcGFjZV9pbmZvKHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvLCB1NjQgYnl0ZXMpCitzdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcywKKwkJCSAgICBpbnQgZHVtcF9ibG9ja19ncm91cHMpCiB7CiAJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZTsKIAorCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CiAJcHJpbnRrKEtFUk5fSU5GTyAic3BhY2VfaW5mbyBoYXMgJWxsdSBmcmVlLCBpcyAlc2Z1bGxcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKGluZm8tPnRvdGFsX2J5dGVzIC0gaW5mby0+Ynl0ZXNfdXNlZCAtCi0JCQkJICAgIGluZm8tPmJ5dGVzX3Bpbm5lZCAtIGluZm8tPmJ5dGVzX3Jlc2VydmVkKSwKKwkJCQkgICAgaW5mby0+Ynl0ZXNfcGlubmVkIC0gaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgLQorCQkJCSAgICBpbmZvLT5ieXRlc19zdXBlciksCiAJICAgICAgIChpbmZvLT5mdWxsKSA/ICIiIDogIm5vdCAiKTsKIAlwcmludGsoS0VSTl9JTkZPICJzcGFjZV9pbmZvIHRvdGFsPSVsbHUsIHBpbm5lZD0lbGx1LCBkZWxhbGxvYz0lbGx1LCIKLQkgICAgICAgIiBtYXlfdXNlPSVsbHUsIHVzZWQ9JWxsdVxuIiwKKwkgICAgICAgIiBtYXlfdXNlPSVsbHUsIHVzZWQ9JWxsdSwgcm9vdD0lbGx1LCBzdXBlcj0lbGx1LCByZXNlcnZlZD0lbGx1IgorCSAgICAgICAiXG4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPnRvdGFsX2J5dGVzLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3Bpbm5lZCwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmZvLT5ieXRlc19kZWxhbGxvYywKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmZvLT5ieXRlc19tYXlfdXNlLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3VzZWQpOworCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3VzZWQsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfcm9vdCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmZvLT5ieXRlc19zdXBlciwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmZvLT5ieXRlc19yZXNlcnZlZCk7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCisJaWYgKCFkdW1wX2Jsb2NrX2dyb3VwcykKKwkJcmV0dXJuOwogCiAJZG93bl9yZWFkKCZpbmZvLT5ncm91cHNfc2VtKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlLCAmaW5mby0+YmxvY2tfZ3JvdXBzLCBsaXN0KSB7CkBAIC00MTQ1LDcgKzQ2MTksNyBAQAogCQlwcmludGsoS0VSTl9FUlIgImJ0cmZzIGFsbG9jYXRpb24gZmFpbGVkIGZsYWdzICVsbHUsICIKIAkJICAgICAgICJ3YW50ZWQgJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylkYXRhLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyludW1fYnl0ZXMpOwotCQlkdW1wX3NwYWNlX2luZm8oc2luZm8sIG51bV9ieXRlcyk7CisJCWR1bXBfc3BhY2VfaW5mbyhzaW5mbywgbnVtX2J5dGVzLCAxKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDUwNiw2ICs0OTgwLDcgQEAKIAl1NjQgYnl0ZW5yOwogCXU2NCBnZW5lcmF0aW9uOwogCXU2NCByZWZzOworCXU2NCBmbGFnczsKIAl1NjQgbGFzdCA9IDA7CiAJdTMyIG5yaXRlbXM7CiAJdTMyIGJsb2Nrc2l6ZTsKQEAgLTQ1NDMsMTUgKzUwMTgsMTkgQEAKIAkJICAgIGdlbmVyYXRpb24gPD0gcm9vdC0+cm9vdF9rZXkub2Zmc2V0KQogCQkJY29udGludWU7CiAKKwkJLyogV2UgZG9uJ3QgbG9jayB0aGUgdHJlZSBibG9jaywgaXQncyBPSyB0byBiZSByYWN5IGhlcmUgKi8KKwkJcmV0ID0gYnRyZnNfbG9va3VwX2V4dGVudF9pbmZvKHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKKwkJCQkJICAgICAgICZyZWZzLCAmZmxhZ3MpOworCQlCVUdfT04ocmV0KTsKKwkJQlVHX09OKHJlZnMgPT0gMCk7CisKIAkJaWYgKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSkgewotCQkJcmV0ID0gYnRyZnNfbG9va3VwX2V4dGVudF9pbmZvKHRyYW5zLCByb290LAotCQkJCQkJYnl0ZW5yLCBibG9ja3NpemUsCi0JCQkJCQkmcmVmcywgTlVMTCk7Ci0JCQlCVUdfT04ocmV0KTsKLQkJCUJVR19PTihyZWZzID09IDApOwogCQkJaWYgKHJlZnMgPT0gMSkKIAkJCQlnb3RvIHJlYWRhOwogCisJCQlpZiAod2MtPmxldmVsID09IDEgJiYKKwkJCSAgICAoZmxhZ3MgJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQkJY29udGludWU7CiAJCQlpZiAoIXdjLT51cGRhdGVfcmVmIHx8CiAJCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQkJY29udGludWU7CkBAIC00NTYwLDYgKzUwMzksMTAgQEAKIAkJCQkJCSAgJndjLT51cGRhdGVfcHJvZ3Jlc3MpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAod2MtPmxldmVsID09IDEgJiYKKwkJCSAgICAoZmxhZ3MgJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQkJY29udGludWU7CiAJCX0KIHJlYWRhOgogCQlyZXQgPSByZWFkYWhlYWRfdHJlZV9ibG9jayhyb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKQEAgLTQ1ODMsNyArNTA2Niw3IEBACiBzdGF0aWMgbm9pbmxpbmUgaW50IHdhbGtfZG93bl9wcm9jKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAotCQkJCSAgIHN0cnVjdCB3YWxrX2NvbnRyb2wgKndjKQorCQkJCSAgIHN0cnVjdCB3YWxrX2NvbnRyb2wgKndjLCBpbnQgbG9va3VwX2luZm8pCiB7CiAJaW50IGxldmVsID0gd2MtPmxldmVsOwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICplYiA9IHBhdGgtPm5vZGVzW2xldmVsXTsKQEAgLTQ1OTgsOCArNTA4MSw5IEBACiAJICogd2hlbiByZWZlcmVuY2UgY291bnQgb2YgdHJlZSBibG9jayBpcyAxLCBpdCB3b24ndCBpbmNyZWFzZQogCSAqIGFnYWluLiBvbmNlIGZ1bGwgYmFja3JlZiBmbGFnIGlzIHNldCwgd2UgbmV2ZXIgY2xlYXIgaXQuCiAJICovCi0JaWYgKCh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UgJiYgd2MtPnJlZnNbbGV2ZWxdICE9IDEpIHx8Ci0JICAgICh3Yy0+c3RhZ2UgPT0gVVBEQVRFX0JBQ0tSRUYgJiYgISh3Yy0+ZmxhZ3NbbGV2ZWxdICYgZmxhZykpKSB7CisJaWYgKGxvb2t1cF9pbmZvICYmCisJICAgICgod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFICYmIHdjLT5yZWZzW2xldmVsXSAhPSAxKSB8fAorCSAgICAgKHdjLT5zdGFnZSA9PSBVUERBVEVfQkFDS1JFRiAmJiAhKHdjLT5mbGFnc1tsZXZlbF0gJiBmbGFnKSkpKSB7CiAJCUJVR19PTighcGF0aC0+bG9ja3NbbGV2ZWxdKTsKIAkJcmV0ID0gYnRyZnNfbG9va3VwX2V4dGVudF9pbmZvKHRyYW5zLCByb290LAogCQkJCQkgICAgICAgZWItPnN0YXJ0LCBlYi0+bGVuLApAQCAtNDY2MCw3ICs1MTQ0LDcgQEAKIHN0YXRpYyBub2lubGluZSBpbnQgZG9fd2Fsa19kb3duKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJIHN0cnVjdCB3YWxrX2NvbnRyb2wgKndjKQorCQkJCSBzdHJ1Y3Qgd2Fsa19jb250cm9sICp3YywgaW50ICpsb29rdXBfaW5mbykKIHsKIAl1NjQgYnl0ZW5yOwogCXU2NCBnZW5lcmF0aW9uOwpAQCAtNDY4MCw4ICs1MTY0LDEwIEBACiAJICogZm9yIHRoZSBzdWJ0cmVlCiAJICovCiAJaWYgKHdjLT5zdGFnZSA9PSBVUERBVEVfQkFDS1JFRiAmJgotCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkKKwkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpIHsKKwkJKmxvb2t1cF9pbmZvID0gMTsKIAkJcmV0dXJuIDE7CisJfQogCiAJYnl0ZW5yID0gYnRyZnNfbm9kZV9ibG9ja3B0cihwYXRoLT5ub2Rlc1tsZXZlbF0sIHBhdGgtPnNsb3RzW2xldmVsXSk7CiAJYmxvY2tzaXplID0gYnRyZnNfbGV2ZWxfc2l6ZShyb290LCBsZXZlbCAtIDEpOwpAQCAtNDY5NCwxNCArNTE4MCwxOSBAQAogCWJ0cmZzX3RyZWVfbG9jayhuZXh0KTsKIAlidHJmc19zZXRfbG9ja19ibG9ja2luZyhuZXh0KTsKIAotCWlmICh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UpIHsKLQkJcmV0ID0gYnRyZnNfbG9va3VwX2V4dGVudF9pbmZvKHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKLQkJCQkJICAgICAgICZ3Yy0+cmVmc1tsZXZlbCAtIDFdLAotCQkJCQkgICAgICAgJndjLT5mbGFnc1tsZXZlbCAtIDFdKTsKLQkJQlVHX09OKHJldCk7Ci0JCUJVR19PTih3Yy0+cmVmc1tsZXZlbCAtIDFdID09IDApOworCXJldCA9IGJ0cmZzX2xvb2t1cF9leHRlbnRfaW5mbyh0cmFucywgcm9vdCwgYnl0ZW5yLCBibG9ja3NpemUsCisJCQkJICAgICAgICZ3Yy0+cmVmc1tsZXZlbCAtIDFdLAorCQkJCSAgICAgICAmd2MtPmZsYWdzW2xldmVsIC0gMV0pOworCUJVR19PTihyZXQpOworCUJVR19PTih3Yy0+cmVmc1tsZXZlbCAtIDFdID09IDApOworCSpsb29rdXBfaW5mbyA9IDA7CiAKKwlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7CiAJCWlmICh3Yy0+cmVmc1tsZXZlbCAtIDFdID4gMSkgeworCQkJaWYgKGxldmVsID09IDEgJiYKKwkJCSAgICAod2MtPmZsYWdzWzBdICYgQlRSRlNfQkxPQ0tfRkxBR19GVUxMX0JBQ0tSRUYpKQorCQkJCWdvdG8gc2tpcDsKKwogCQkJaWYgKCF3Yy0+dXBkYXRlX3JlZiB8fAogCQkJICAgIGdlbmVyYXRpb24gPD0gcm9vdC0+cm9vdF9rZXkub2Zmc2V0KQogCQkJCWdvdG8gc2tpcDsKQEAgLTQ3MTUsMTIgKzUyMDYsMTcgQEAKIAkJCXdjLT5zdGFnZSA9IFVQREFURV9CQUNLUkVGOwogCQkJd2MtPnNoYXJlZF9sZXZlbCA9IGxldmVsIC0gMTsKIAkJfQorCX0gZWxzZSB7CisJCWlmIChsZXZlbCA9PSAxICYmCisJCSAgICAod2MtPmZsYWdzWzBdICYgQlRSRlNfQkxPQ0tfRkxBR19GVUxMX0JBQ0tSRUYpKQorCQkJZ290byBza2lwOwogCX0KIAogCWlmICghYnRyZnNfYnVmZmVyX3VwdG9kYXRlKG5leHQsIGdlbmVyYXRpb24pKSB7CiAJCWJ0cmZzX3RyZWVfdW5sb2NrKG5leHQpOwogCQlmcmVlX2V4dGVudF9idWZmZXIobmV4dCk7CiAJCW5leHQgPSBOVUxMOworCQkqbG9va3VwX2luZm8gPSAxOwogCX0KIAogCWlmICghbmV4dCkgewpAQCAtNDc0MywyMSArNTIzOSwyMiBAQAogc2tpcDoKIAl3Yy0+cmVmc1tsZXZlbCAtIDFdID0gMDsKIAl3Yy0+ZmxhZ3NbbGV2ZWwgLSAxXSA9IDA7CisJaWYgKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSkgeworCQlpZiAod2MtPmZsYWdzW2xldmVsXSAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSB7CisJCQlwYXJlbnQgPSBwYXRoLT5ub2Rlc1tsZXZlbF0tPnN0YXJ0OworCQl9IGVsc2UgeworCQkJQlVHX09OKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkICE9CisJCQkgICAgICAgYnRyZnNfaGVhZGVyX293bmVyKHBhdGgtPm5vZGVzW2xldmVsXSkpOworCQkJcGFyZW50ID0gMDsKKwkJfQogCi0JaWYgKHdjLT5mbGFnc1tsZXZlbF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikgewotCQlwYXJlbnQgPSBwYXRoLT5ub2Rlc1tsZXZlbF0tPnN0YXJ0OwotCX0gZWxzZSB7Ci0JCUJVR19PTihyb290LT5yb290X2tleS5vYmplY3RpZCAhPQotCQkgICAgICAgYnRyZnNfaGVhZGVyX293bmVyKHBhdGgtPm5vZGVzW2xldmVsXSkpOwotCQlwYXJlbnQgPSAwOworCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnl0ZW5yLCBibG9ja3NpemUsIHBhcmVudCwKKwkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsIC0gMSwgMCk7CisJCUJVR19PTihyZXQpOwogCX0KLQotCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgcGFyZW50LAotCQkJCXJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLCBsZXZlbCAtIDEsIDApOwotCUJVR19PTihyZXQpOwotCiAJYnRyZnNfdHJlZV91bmxvY2sobmV4dCk7CiAJZnJlZV9leHRlbnRfYnVmZmVyKG5leHQpOworCSpsb29rdXBfaW5mbyA9IDE7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ4NzEsNiArNTM2OCw3IEBACiAJCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCiB7CiAJaW50IGxldmVsID0gd2MtPmxldmVsOworCWludCBsb29rdXBfaW5mbyA9IDE7CiAJaW50IHJldDsKIAogCXdoaWxlIChsZXZlbCA+PSAwKSB7CkBAIC00ODc4LDE0ICs1Mzc2LDE0IEBACiAJCSAgICBidHJmc19oZWFkZXJfbnJpdGVtcyhwYXRoLT5ub2Rlc1tsZXZlbF0pKQogCQkJYnJlYWs7CiAKLQkJcmV0ID0gd2Fsa19kb3duX3Byb2ModHJhbnMsIHJvb3QsIHBhdGgsIHdjKTsKKwkJcmV0ID0gd2Fsa19kb3duX3Byb2ModHJhbnMsIHJvb3QsIHBhdGgsIHdjLCBsb29rdXBfaW5mbyk7CiAJCWlmIChyZXQgPiAwKQogCQkJYnJlYWs7CiAKIAkJaWYgKGxldmVsID09IDApCiAJCQlicmVhazsKIAotCQlyZXQgPSBkb193YWxrX2Rvd24odHJhbnMsIHJvb3QsIHBhdGgsIHdjKTsKKwkJcmV0ID0gZG9fd2Fsa19kb3duKHRyYW5zLCByb290LCBwYXRoLCB3YywgJmxvb2t1cF9pbmZvKTsKIAkJaWYgKHJldCA+IDApIHsKIAkJCXBhdGgtPnNsb3RzW2xldmVsXSsrOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uYyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCmluZGV4IDBjYjg4ZjguLjk2NTc3ZTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCkBAIC0yODAsNiArMjgwLDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIG1lcmdlX2NiKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm90aGVyKQoreworCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5tZXJnZV9leHRlbnRfaG9vaykKKwkJdHJlZS0+b3BzLT5tZXJnZV9leHRlbnRfaG9vayh0cmVlLT5tYXBwaW5nLT5ob3N0LCBuZXcsCisJCQkJCSAgICAgb3RoZXIpOworfQorCiAvKgogICogdXRpbGl0eSBmdW5jdGlvbiB0byBsb29rIGZvciBtZXJnZSBjYW5kaWRhdGVzIGluc2lkZSBhIGdpdmVuIHJhbmdlLgogICogQW55IGV4dGVudHMgd2l0aCBtYXRjaGluZyBzdGF0ZSBhcmUgbWVyZ2VkIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUKQEAgLTMwMyw2ICszMTEsNyBAQAogCQlvdGhlciA9IHJiX2VudHJ5KG90aGVyX25vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUsIHJiX25vZGUpOwogCQlpZiAob3RoZXItPmVuZCA9PSBzdGF0ZS0+c3RhcnQgLSAxICYmCiAJCSAgICBvdGhlci0+c3RhdGUgPT0gc3RhdGUtPnN0YXRlKSB7CisJCQltZXJnZV9jYih0cmVlLCBzdGF0ZSwgb3RoZXIpOwogCQkJc3RhdGUtPnN0YXJ0ID0gb3RoZXItPnN0YXJ0OwogCQkJb3RoZXItPnRyZWUgPSBOVUxMOwogCQkJcmJfZXJhc2UoJm90aGVyLT5yYl9ub2RlLCAmdHJlZS0+c3RhdGUpOwpAQCAtMzE0LDMzICszMjMsMzcgQEAKIAkJb3RoZXIgPSByYl9lbnRyeShvdGhlcl9ub2RlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlLCByYl9ub2RlKTsKIAkJaWYgKG90aGVyLT5zdGFydCA9PSBzdGF0ZS0+ZW5kICsgMSAmJgogCQkgICAgb3RoZXItPnN0YXRlID09IHN0YXRlLT5zdGF0ZSkgeworCQkJbWVyZ2VfY2IodHJlZSwgc3RhdGUsIG90aGVyKTsKIAkJCW90aGVyLT5zdGFydCA9IHN0YXRlLT5zdGFydDsKIAkJCXN0YXRlLT50cmVlID0gTlVMTDsKIAkJCXJiX2VyYXNlKCZzdGF0ZS0+cmJfbm9kZSwgJnRyZWUtPnN0YXRlKTsKIAkJCWZyZWVfZXh0ZW50X3N0YXRlKHN0YXRlKTsKKwkJCXN0YXRlID0gTlVMTDsKIAkJfQogCX0KKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc3RhdGVfY2Ioc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAorc3RhdGljIGludCBzZXRfc3RhdGVfY2Ioc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAogCQkJIHVuc2lnbmVkIGxvbmcgYml0cykKIHsKIAlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+c2V0X2JpdF9ob29rKSB7Ci0JCXRyZWUtPm9wcy0+c2V0X2JpdF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIHN0YXRlLT5zdGFydCwKLQkJCQkJc3RhdGUtPmVuZCwgc3RhdGUtPnN0YXRlLCBiaXRzKTsKKwkJcmV0dXJuIHRyZWUtPm9wcy0+c2V0X2JpdF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsCisJCQkJCSAgICAgICBzdGF0ZS0+c3RhcnQsIHN0YXRlLT5lbmQsCisJCQkJCSAgICAgICBzdGF0ZS0+c3RhdGUsIGJpdHMpOwogCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9zdGF0ZV9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgYml0cykKIHsKLQlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+Y2xlYXJfYml0X2hvb2spIHsKLQkJdHJlZS0+b3BzLT5jbGVhcl9iaXRfaG9vayh0cmVlLT5tYXBwaW5nLT5ob3N0LCBzdGF0ZS0+c3RhcnQsCi0JCQkJCSAgc3RhdGUtPmVuZCwgc3RhdGUtPnN0YXRlLCBiaXRzKTsKLQl9CisJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPmNsZWFyX2JpdF9ob29rKQorCQl0cmVlLT5vcHMtPmNsZWFyX2JpdF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIHN0YXRlLCBiaXRzKTsKIH0KIAogLyoKQEAgLTM1OCw2ICszNzEsNyBAQAogCQkJaW50IGJpdHMpCiB7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJaW50IHJldDsKIAogCWlmIChlbmQgPCBzdGFydCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ0cmZzIGVuZCA8IHN0YXJ0ICVsbHUgJWxsdVxuIiwKQEAgLTM2NSwxMSArMzc5LDE0IEBACiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXN0YXJ0KTsKIAkJV0FSTl9PTigxKTsKIAl9Ci0JaWYgKGJpdHMgJiBFWFRFTlRfRElSVFkpCi0JCXRyZWUtPmRpcnR5X2J5dGVzICs9IGVuZCAtIHN0YXJ0ICsgMTsKIAlzdGF0ZS0+c3RhcnQgPSBzdGFydDsKIAlzdGF0ZS0+ZW5kID0gZW5kOwotCXNldF9zdGF0ZV9jYih0cmVlLCBzdGF0ZSwgYml0cyk7CisJcmV0ID0gc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJpdHMgJiBFWFRFTlRfRElSVFkpCisJCXRyZWUtPmRpcnR5X2J5dGVzICs9IGVuZCAtIHN0YXJ0ICsgMTsKIAlzdGF0ZS0+c3RhdGUgfD0gYml0czsKIAlub2RlID0gdHJlZV9pbnNlcnQoJnRyZWUtPnN0YXRlLCBlbmQsICZzdGF0ZS0+cmJfbm9kZSk7CiAJaWYgKG5vZGUpIHsKQEAgLTM4Nyw2ICs0MDQsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzcGxpdF9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsCisJCSAgICAgdTY0IHNwbGl0KQoreworCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5zcGxpdF9leHRlbnRfaG9vaykKKwkJcmV0dXJuIHRyZWUtPm9wcy0+c3BsaXRfZXh0ZW50X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwKKwkJCQkJCSAgICBvcmlnLCBzcGxpdCk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBzcGxpdCBhIGdpdmVuIGV4dGVudCBzdGF0ZSBzdHJ1Y3QgaW4gdHdvLCBpbnNlcnRpbmcgdGhlIHByZWFsbG9jYXRlZAogICogc3RydWN0ICdwcmVhbGxvYycgYXMgdGhlIG5ld2x5IGNyZWF0ZWQgc2Vjb25kIGhhbGYuICAnc3BsaXQnIGluZGljYXRlcyBhbgpAQCAtNDA1LDYgKzQzMSw5IEBACiAJCSAgICAgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpwcmVhbGxvYywgdTY0IHNwbGl0KQogewogCXN0cnVjdCByYl9ub2RlICpub2RlOworCisJc3BsaXRfY2IodHJlZSwgb3JpZywgc3BsaXQpOworCiAJcHJlYWxsb2MtPnN0YXJ0ID0gb3JpZy0+c3RhcnQ7CiAJcHJlYWxsb2MtPmVuZCA9IHNwbGl0IC0gMTsKIAlwcmVhbGxvYy0+c3RhdGUgPSBvcmlnLT5zdGF0ZTsKQEAgLTQzMSw3ICs0NjAsOCBAQAogCQkJICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCBpbnQgYml0cywgaW50IHdha2UsCiAJCQkgICAgaW50IGRlbGV0ZSkKIHsKLQlpbnQgcmV0ID0gc3RhdGUtPnN0YXRlICYgYml0czsKKwlpbnQgYml0c190b19jbGVhciA9IGJpdHMgJiB+RVhURU5UX0RPX0FDQ09VTlRJTkc7CisJaW50IHJldCA9IHN0YXRlLT5zdGF0ZSAmIGJpdHNfdG9fY2xlYXI7CiAKIAlpZiAoKGJpdHMgJiBFWFRFTlRfRElSVFkpICYmIChzdGF0ZS0+c3RhdGUgJiBFWFRFTlRfRElSVFkpKSB7CiAJCXU2NCByYW5nZSA9IHN0YXRlLT5lbmQgLSBzdGF0ZS0+c3RhcnQgKyAxOwpAQCAtNDM5LDcgKzQ2OSw3IEBACiAJCXRyZWUtPmRpcnR5X2J5dGVzIC09IHJhbmdlOwogCX0KIAljbGVhcl9zdGF0ZV9jYih0cmVlLCBzdGF0ZSwgYml0cyk7Ci0Jc3RhdGUtPnN0YXRlICY9IH5iaXRzOworCXN0YXRlLT5zdGF0ZSAmPSB+Yml0c190b19jbGVhcjsKIAlpZiAod2FrZSkKIAkJd2FrZV91cCgmc3RhdGUtPndxKTsKIAlpZiAoZGVsZXRlIHx8IHN0YXRlLT5zdGF0ZSA9PSAwKSB7CkBAIC01NDIsOCArNTcyLDggQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlpZiAoc3RhdGUtPmVuZCA8PSBlbmQpIHsKLQkJCXNldCB8PSBjbGVhcl9zdGF0ZV9iaXQodHJlZSwgc3RhdGUsIGJpdHMsCi0JCQkJCXdha2UsIGRlbGV0ZSk7CisJCQlzZXQgfD0gY2xlYXJfc3RhdGVfYml0KHRyZWUsIHN0YXRlLCBiaXRzLCB3YWtlLAorCQkJCQkgICAgICAgZGVsZXRlKTsKIAkJCWlmIChsYXN0X2VuZCA9PSAodTY0KS0xKQogCQkJCWdvdG8gb3V0OwogCQkJc3RhcnQgPSBsYXN0X2VuZCArIDE7CkBAIC01NjEsMTIgKzU5MSwxMSBAQAogCQkJcHJlYWxsb2MgPSBhbGxvY19leHRlbnRfc3RhdGUoR0ZQX0FUT01JQyk7CiAJCWVyciA9IHNwbGl0X3N0YXRlKHRyZWUsIHN0YXRlLCBwcmVhbGxvYywgZW5kICsgMSk7CiAJCUJVR19PTihlcnIgPT0gLUVFWElTVCk7Ci0KIAkJaWYgKHdha2UpCiAJCQl3YWtlX3VwKCZzdGF0ZS0+d3EpOwogCi0JCXNldCB8PSBjbGVhcl9zdGF0ZV9iaXQodHJlZSwgcHJlYWxsb2MsIGJpdHMsCi0JCQkJICAgICAgIHdha2UsIGRlbGV0ZSk7CisJCXNldCB8PSBjbGVhcl9zdGF0ZV9iaXQodHJlZSwgcHJlYWxsb2MsIGJpdHMsIHdha2UsIGRlbGV0ZSk7CisKIAkJcHJlYWxsb2MgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CkBAIC02NjcsMTYgKzY5NiwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc3RhdGVfYml0cyhzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCitzdGF0aWMgaW50IHNldF9zdGF0ZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAogCQkJICAgaW50IGJpdHMpCiB7CisJaW50IHJldDsKKworCXJldCA9IHNldF9zdGF0ZV9jYih0cmVlLCBzdGF0ZSwgYml0cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWlmICgoYml0cyAmIEVYVEVOVF9ESVJUWSkgJiYgIShzdGF0ZS0+c3RhdGUgJiBFWFRFTlRfRElSVFkpKSB7CiAJCXU2NCByYW5nZSA9IHN0YXRlLT5lbmQgLSBzdGF0ZS0+c3RhcnQgKyAxOwogCQl0cmVlLT5kaXJ0eV9ieXRlcyArPSByYW5nZTsKIAl9Ci0Jc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKIAlzdGF0ZS0+c3RhdGUgfD0gYml0czsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjYWNoZV9zdGF0ZShzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwKQEAgLTc1OCw3ICs3OTQsMTAgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc2V0X3N0YXRlX2JpdHModHJlZSwgc3RhdGUsIGJpdHMpOworCQllcnIgPSBzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwogCQljYWNoZV9zdGF0ZShzdGF0ZSwgY2FjaGVkX3N0YXRlKTsKIAkJbWVyZ2Vfc3RhdGUodHJlZSwgc3RhdGUpOwogCQlpZiAobGFzdF9lbmQgPT0gKHU2NCktMSkKQEAgLTgwNSw3ICs4NDQsOSBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJCWlmIChzdGF0ZS0+ZW5kIDw9IGVuZCkgewotCQkJc2V0X3N0YXRlX2JpdHModHJlZSwgc3RhdGUsIGJpdHMpOworCQkJZXJyID0gc2V0X3N0YXRlX2JpdHModHJlZSwgc3RhdGUsIGJpdHMpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKIAkJCWNhY2hlX3N0YXRlKHN0YXRlLCBjYWNoZWRfc3RhdGUpOwogCQkJbWVyZ2Vfc3RhdGUodHJlZSwgc3RhdGUpOwogCQkJaWYgKGxhc3RfZW5kID09ICh1NjQpLTEpCkBAIC04MjksMTEgKzg3MCwxMyBAQAogCQkJdGhpc19lbmQgPSBsYXN0X3N0YXJ0IC0gMTsKIAkJZXJyID0gaW5zZXJ0X3N0YXRlKHRyZWUsIHByZWFsbG9jLCBzdGFydCwgdGhpc19lbmQsCiAJCQkJICAgYml0cyk7CisJCUJVR19PTihlcnIgPT0gLUVFWElTVCk7CisJCWlmIChlcnIpIHsKKwkJCXByZWFsbG9jID0gTlVMTDsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWNhY2hlX3N0YXRlKHByZWFsbG9jLCBjYWNoZWRfc3RhdGUpOwogCQlwcmVhbGxvYyA9IE5VTEw7Ci0JCUJVR19PTihlcnIgPT0gLUVFWElTVCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKIAkJc3RhcnQgPSB0aGlzX2VuZCArIDE7CiAJCWdvdG8gc2VhcmNoX2FnYWluOwogCX0KQEAgLTg1Miw3ICs4OTUsMTEgQEAKIAkJZXJyID0gc3BsaXRfc3RhdGUodHJlZSwgc3RhdGUsIHByZWFsbG9jLCBlbmQgKyAxKTsKIAkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKIAotCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBwcmVhbGxvYywgYml0cyk7CisJCWVyciA9IHNldF9zdGF0ZV9iaXRzKHRyZWUsIHByZWFsbG9jLCBiaXRzKTsKKwkJaWYgKGVycikgeworCQkJcHJlYWxsb2MgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KIAkJY2FjaGVfc3RhdGUocHJlYWxsb2MsIGNhY2hlZF9zdGF0ZSk7CiAJCW1lcmdlX3N0YXRlKHRyZWUsIHByZWFsbG9jKTsKIAkJcHJlYWxsb2MgPSBOVUxMOwpAQCAtOTEwLDcgKzk1Nyw4IEBACiAJCSAgICAgICBnZnBfdCBtYXNrKQogewogCXJldHVybiBjbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsCi0JCQkJRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DLCAwLCAwLAorCQkJCUVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8CisJCQkJRVhURU5UX0RPX0FDQ09VTlRJTkcsIDAsIDAsCiAJCQkJTlVMTCwgbWFzayk7CiB9CiAKQEAgLTEzNTUsMTIgKzE0MDMsNyBAQAogaW50IGV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgZW5kLCBzdHJ1Y3QgcGFnZSAqbG9ja2VkX3BhZ2UsCi0JCQkJaW50IHVubG9ja19wYWdlcywKLQkJCQlpbnQgY2xlYXJfdW5sb2NrLAotCQkJCWludCBjbGVhcl9kZWxhbGxvYywgaW50IGNsZWFyX2RpcnR5LAotCQkJCWludCBzZXRfd3JpdGViYWNrLAotCQkJCWludCBlbmRfd3JpdGViYWNrLAotCQkJCWludCBzZXRfcHJpdmF0ZTIpCisJCQkJdW5zaWduZWQgbG9uZyBvcCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBwYWdlICpwYWdlc1sxNl07CkBAIC0xMzcwLDE3ICsxNDEzLDIxIEBACiAJaW50IGk7CiAJaW50IGNsZWFyX2JpdHMgPSAwOwogCi0JaWYgKGNsZWFyX3VubG9jaykKKwlpZiAob3AgJiBFWFRFTlRfQ0xFQVJfVU5MT0NLKQogCQljbGVhcl9iaXRzIHw9IEVYVEVOVF9MT0NLRUQ7Ci0JaWYgKGNsZWFyX2RpcnR5KQorCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9ESVJUWSkKIAkJY2xlYXJfYml0cyB8PSBFWFRFTlRfRElSVFk7CiAKLQlpZiAoY2xlYXJfZGVsYWxsb2MpCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0RFTEFMTE9DKQogCQljbGVhcl9iaXRzIHw9IEVYVEVOVF9ERUxBTExPQzsKIAorCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9BQ0NPVU5USU5HKQorCQljbGVhcl9iaXRzIHw9IEVYVEVOVF9ET19BQ0NPVU5USU5HOworCiAJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBzdGFydCwgZW5kLCBjbGVhcl9iaXRzLCAxLCAwLCBOVUxMLCBHRlBfTk9GUyk7Ci0JaWYgKCEodW5sb2NrX3BhZ2VzIHx8IGNsZWFyX2RpcnR5IHx8IHNldF93cml0ZWJhY2sgfHwgZW5kX3dyaXRlYmFjayB8fAotCSAgICAgIHNldF9wcml2YXRlMikpCisJaWYgKCEob3AgJiAoRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwgRVhURU5UX0NMRUFSX0RJUlRZIHwKKwkJICAgIEVYVEVOVF9TRVRfV1JJVEVCQUNLIHwgRVhURU5UX0VORF9XUklURUJBQ0sgfAorCQkgICAgRVhURU5UX1NFVF9QUklWQVRFMikpKQogCQlyZXR1cm4gMDsKIAogCXdoaWxlIChucl9wYWdlcyA+IDApIHsKQEAgLTEzODksMjAgKzE0MzYsMjAgQEAKIAkJCQkgICAgIG5yX3BhZ2VzLCBBUlJBWV9TSVpFKHBhZ2VzKSksIHBhZ2VzKTsKIAkJZm9yIChpID0gMDsgaSA8IHJldDsgaSsrKSB7CiAKLQkJCWlmIChzZXRfcHJpdmF0ZTIpCisJCQlpZiAob3AgJiBFWFRFTlRfU0VUX1BSSVZBVEUyKQogCQkJCVNldFBhZ2VQcml2YXRlMihwYWdlc1tpXSk7CiAKIAkJCWlmIChwYWdlc1tpXSA9PSBsb2NrZWRfcGFnZSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tpXSk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAoY2xlYXJfZGlydHkpCisJCQlpZiAob3AgJiBFWFRFTlRfQ0xFQVJfRElSVFkpCiAJCQkJY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8ocGFnZXNbaV0pOwotCQkJaWYgKHNldF93cml0ZWJhY2spCisJCQlpZiAob3AgJiBFWFRFTlRfU0VUX1dSSVRFQkFDSykKIAkJCQlzZXRfcGFnZV93cml0ZWJhY2socGFnZXNbaV0pOwotCQkJaWYgKGVuZF93cml0ZWJhY2spCisJCQlpZiAob3AgJiBFWFRFTlRfRU5EX1dSSVRFQkFDSykKIAkJCQllbmRfcGFnZV93cml0ZWJhY2socGFnZXNbaV0pOwotCQkJaWYgKHVubG9ja19wYWdlcykKKwkJCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSkKIAkJCQl1bmxvY2tfcGFnZShwYWdlc1tpXSk7CiAJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZXNbaV0pOwogCQl9CkBAIC0yNjY4LDcgKzI3MTUsOCBAQAogCWxvY2tfZXh0ZW50KHRyZWUsIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKIAl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCWNsZWFyX2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwKLQkJCSBFWFRFTlRfTE9DS0VEIHwgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DLAorCQkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfAorCQkJIEVYVEVOVF9ET19BQ0NPVU5USU5HLAogCQkJIDEsIDEsIE5VTEwsIEdGUF9OT0ZTKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5oIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmgKaW5kZXggMTRlZDE2Zi4uMzZkZTI1MCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmgKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgRVhURU5UX0JVRkZFUl9GSUxMRUQgKDEgPDwgOCkKICNkZWZpbmUgRVhURU5UX0JPVU5EQVJZICgxIDw8IDkpCiAjZGVmaW5lIEVYVEVOVF9OT0RBVEFTVU0gKDEgPDwgMTApCisjZGVmaW5lIEVYVEVOVF9ET19BQ0NPVU5USU5HICgxIDw8IDExKQogI2RlZmluZSBFWFRFTlRfSU9CSVRTIChFWFRFTlRfTE9DS0VEIHwgRVhURU5UX1dSSVRFQkFDSykKIAogLyogZmxhZ3MgZm9yIGJpbyBzdWJtaXNzaW9uICovCkBAIC0yNSw2ICsyNiwxNiBAQAogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0JMT0NLSU5HIDEKICNkZWZpbmUgRVhURU5UX0JVRkZFUl9ESVJUWSAyCiAKKy8qIHRoZXNlIGFyZSBmbGFncyBmb3IgZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyAqLworI2RlZmluZSBFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgMHgxCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9VTkxPQ0sJIDB4MgorI2RlZmluZSBFWFRFTlRfQ0xFQVJfREVMQUxMT0MJIDB4NAorI2RlZmluZSBFWFRFTlRfQ0xFQVJfRElSVFkJIDB4OAorI2RlZmluZSBFWFRFTlRfU0VUX1dSSVRFQkFDSwkgMHgxMAorI2RlZmluZSBFWFRFTlRfRU5EX1dSSVRFQkFDSwkgMHgyMAorI2RlZmluZSBFWFRFTlRfU0VUX1BSSVZBVEUyCSAweDQwCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9BQ0NPVU5USU5HICAweDgwCisKIC8qCiAgKiBwYWdlLT5wcml2YXRlIHZhbHVlcy4gIEV2ZXJ5IHBhZ2UgdGhhdCBpcyBjb250cm9sbGVkIGJ5IHRoZSBleHRlbnQKICAqIG1hcCBoYXMgcGFnZS0+cHJpdmF0ZSBzZXQgdG8gb25lLgpAQCAtNjAsOCArNzEsMTMgQEAKIAkJCQkgICAgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwgaW50IHVwdG9kYXRlKTsKIAlpbnQgKCpzZXRfYml0X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBiaXRzKTsKLQlpbnQgKCpjbGVhcl9iaXRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGJpdHMpOworCWludCAoKmNsZWFyX2JpdF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYml0cyk7CisJaW50ICgqbWVyZ2VfZXh0ZW50X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBleHRlbnRfc3RhdGUgKm5ldywKKwkJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3RoZXIpOworCWludCAoKnNwbGl0X2V4dGVudF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvcmlnLCB1NjQgc3BsaXQpOwogCWludCAoKndyaXRlX2NhY2hlX3BhZ2VzX2xvY2tfaG9vaykoc3RydWN0IHBhZ2UgKnBhZ2UpOwogfTsKIApAQCAtNzksMTAgKzk1LDE0IEBACiAJdTY0IHN0YXJ0OwogCXU2NCBlbmQ7IC8qIGluY2x1c2l2ZSAqLwogCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7CisKKwkvKiBBREQgTkVXIEVMRU1FTlRTIEFGVEVSIFRISVMgKi8KIAlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWU7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CiAJYXRvbWljX3QgcmVmczsKIAl1bnNpZ25lZCBsb25nIHN0YXRlOworCXU2NCBzcGxpdF9zdGFydDsKKwl1NjQgc3BsaXRfZW5kOwogCiAJLyogZm9yIHVzZSBieSB0aGUgRlMgKi8KIAl1NjQgcHJpdmF0ZTsKQEAgLTI3OSwxMCArMjk5LDUgQEAKIGludCBleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJCXU2NCBzdGFydCwgdTY0IGVuZCwgc3RydWN0IHBhZ2UgKmxvY2tlZF9wYWdlLAotCQkJCWludCB1bmxvY2tfcGFnZSwKLQkJCQlpbnQgY2xlYXJfdW5sb2NrLAotCQkJCWludCBjbGVhcl9kZWxhbGxvYywgaW50IGNsZWFyX2RpcnR5LAotCQkJCWludCBzZXRfd3JpdGViYWNrLAotCQkJCWludCBlbmRfd3JpdGViYWNrLAotCQkJCWludCBzZXRfcHJpdmF0ZTIpOworCQkJCXVuc2lnbmVkIGxvbmcgb3ApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfbWFwLmMgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKaW5kZXggMmM3MjZiNy4uY2NiZGNiNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJd3JpdGVfbG9jaygmdHJlZS0+bG9jayk7CiAJZW0gPSBsb29rdXBfZXh0ZW50X21hcHBpbmcodHJlZSwgc3RhcnQsIGxlbik7CiAKLQlXQVJOX09OKGVtLT5zdGFydCAhPSBzdGFydCB8fCAhZW0pOworCVdBUk5fT04oIWVtIHx8IGVtLT5zdGFydCAhPSBzdGFydCk7CiAKIAlpZiAoIWVtKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCA1NzFhZDNjLi4wNjU1MGFmIDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC0xMjMsNyArMTIzLDEwIEBACiAJCSAgICByb290LT5zZWN0b3JzaXplIC0gMSkgJiB+KCh1NjQpcm9vdC0+c2VjdG9yc2l6ZSAtIDEpOwogCiAJZW5kX29mX2xhc3RfYmxvY2sgPSBzdGFydF9wb3MgKyBudW1fYnl0ZXMgLSAxOwotCWJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHN0YXJ0X3BvcywgZW5kX29mX2xhc3RfYmxvY2spOworCWVyciA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHN0YXJ0X3BvcywgZW5kX29mX2xhc3RfYmxvY2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlc1tpXTsKIAkJU2V0UGFnZVVwdG9kYXRlKHApOwpAQCAtODc1LDcgKzg3OCw4IEBACiAJCQlidHJmc19wdXRfb3JkZXJlZF9leHRlbnQob3JkZXJlZCk7CiAKIAkJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydF9wb3MsCi0JCQkJICBsYXN0X3BvcyAtIDEsIEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQywKKwkJCQkgIGxhc3RfcG9zIC0gMSwgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKKwkJCQkgIEVYVEVOVF9ET19BQ0NPVU5USU5HLAogCQkJCSAgR0ZQX05PRlMpOwogCQl1bmxvY2tfZXh0ZW50KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKIAkJCSAgICAgIHN0YXJ0X3BvcywgbGFzdF9wb3MgLSAxLCBHRlBfTk9GUyk7CkBAIC05MTcsMjEgKzkyMSwzNSBAQAogCXN0YXJ0X3BvcyA9IHBvczsKIAogCXZmc19jaGVja19mcm96ZW4oaW5vZGUtPmlfc2IsIFNCX0ZSRUVaRV9XUklURSk7CisKKwkvKiBkbyB0aGUgcmVzZXJ2ZSBiZWZvcmUgdGhlIG11dGV4IGxvY2sgaW4gY2FzZSB3ZSBoYXZlIHRvIGRvIHNvbWUKKwkgKiBmbHVzaGluZy4gIFdlIHdvdWxkbid0IGRlYWRsb2NrLCBidXQgdGhpcyBpcyBtb3JlIHBvbGl0ZS4KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfbm9sb2NrOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCiAJY3VycmVudC0+YmFja2luZ19kZXZfaW5mbyA9IGlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CiAJZXJyID0gZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgJnBvcywgJmNvdW50LCBTX0lTQkxLKGlub2RlLT5pX21vZGUpKTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dF9ub2xvY2s7CisJCWdvdG8gb3V0OworCiAJaWYgKGNvdW50ID09IDApCi0JCWdvdG8gb3V0X25vbG9jazsKKwkJZ290byBvdXQ7CiAKIAllcnIgPSBmaWxlX3JlbW92ZV9zdWlkKGZpbGUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X25vbG9jazsKKwkJZ290byBvdXQ7CisKIAlmaWxlX3VwZGF0ZV90aW1lKGZpbGUpOwogCiAJcGFnZXMgPSBrbWFsbG9jKG5ycHRycyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CiAKLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJLyogZ2VuZXJpY193cml0ZV9jaGVja3MgY2FuIGNoYW5nZSBvdXIgcG9zICovCisJc3RhcnRfcG9zID0gcG9zOworCiAJQlRSRlNfSShpbm9kZSktPnNlcXVlbmNlKys7CiAJZmlyc3RfaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlsYXN0X2luZGV4ID0gKHBvcyArIGNvdW50KSA+PiBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtMTAwNSw5ICsxMDIzLDggQEAKIAkJfQogCiAJCWlmICh3aWxsX3dyaXRlKSB7Ci0JCQlidHJmc19mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHBvcywKLQkJCQkJICAgICAgIHBvcyArIHdyaXRlX2J5dGVzIC0gMSwKLQkJCQkJICAgICAgIFdCX1NZTkNfQUxMKTsKKwkJCWZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBwb3MsCisJCQkJCQkgcG9zICsgd3JpdGVfYnl0ZXMgLSAxKTsKIAkJfSBlbHNlIHsKIAkJCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIoaW5vZGUtPmlfbWFwcGluZywKIAkJCQkJCQkgICBudW1fcGFnZXMpOwpAQCAtMTAyOCw2ICsxMDQ1LDcgQEAKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAocmV0KQogCQllcnIgPSByZXQ7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAKIG91dF9ub2xvY2s6CiAJa2ZyZWUocGFnZXMpOwpAQCAtMTA2OCw4ICsxMDg2LDEwIEBACiAJCQkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJCQkJZWxzZQogCQkJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQkJfSBlbHNlIHsKKwkJCX0gZWxzZSBpZiAocmV0ICE9IEJUUkZTX05PX0xPR19TWU5DKSB7CiAJCQkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCX0gZWxzZSB7CisJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCX0KIAkJfQogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSB7CkBAIC0xMTE5LDYgKzExMzksMTMgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAorCisJLyogd2Ugd2FpdCBmaXJzdCwgc2luY2UgdGhlIHdyaXRlYmFjayBtYXkgY2hhbmdlIHRoZSBpbm9kZSAqLworCXJvb3QtPmxvZ19iYXRjaCsrOworCS8qIHRoZSBWRlMgY2FsbGVkIGZpbGVtYXBfZmRhdGF3cml0ZSBmb3IgdXMgKi8KKwlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIDAsICh1NjQpLTEpOworCXJvb3QtPmxvZ19iYXRjaCsrOworCiAJLyoKIAkgKiBjaGVjayB0aGUgdHJhbnNhY3Rpb24gdGhhdCBsYXN0IG1vZGlmaWVkIHRoaXMgaW5vZGUKIAkgKiBhbmQgc2VlIGlmIGl0cyBhbHJlYWR5IGJlZW4gY29tbWl0dGVkCkBAIC0xMTI2LDYgKzExNTMsMTEgQEAKIAlpZiAoIUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogaWYgdGhlIGxhc3QgdHJhbnNhY3Rpb24gdGhhdCBjaGFuZ2VkIHRoaXMgZmlsZSB3YXMgYmVmb3JlCisJICogdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHdlIGNhbiBiYWlsIG91dCBub3cgd2l0aG91dCBhbnkKKwkgKiBzeW5jaW5nCisJICovCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWlmIChCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA8PQogCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCkgewpAQCAtMTEzNSwxMyArMTE2Nyw2IEBACiAJfQogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCi0Jcm9vdC0+bG9nX2JhdGNoKys7Ci0JZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwotCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7Ci0Jcm9vdC0+bG9nX2JhdGNoKys7Ci0KLQlpZiAoZGF0YXN5bmMgJiYgIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfUEFHRVMpKQotCQlnb3RvIG91dDsKIAkvKgogCSAqIG9rIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHRoZSB0cmFuc2FjdGlvbiB5ZXQsIGxldHMgZG8gYSBjb21taXQKIAkgKi8KQEAgLTExNzAsMjEgKzExOTUsMjUgQEAKIAkgKi8KIAltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0ID4gMCkgewotCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCX0gZWxzZSB7Ci0JCXJldCA9IGJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQkJZWxzZQorCWlmIChyZXQgIT0gQlRSRlNfTk9fTE9HX1NZTkMpIHsKKwkJaWYgKHJldCA+IDApIHsKIAkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBidHJmc19zeW5jX2xvZyh0cmFucywgcm9vdCk7CisJCQlpZiAocmV0ID09IDApCisJCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9CiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIG91dDoKIAlyZXR1cm4gcmV0ID4gMCA/IEVJTyA6IHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBidHJmc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnRyZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IGJ0cmZzX3BhZ2VfbWt3cml0ZSwKIH07CkBAIC0xMTk2LDcgKzEyMjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkICAgICAgID0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IDVjMmNhYWQuLmNiMjg0OWYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTEyOTYsNyArMTI5Niw3IEBACiAJCQl3aW5kb3dfc3RhcnQgPSBlbnRyeS0+b2Zmc2V0OwogCQkJd2luZG93X2ZyZWUgPSBlbnRyeS0+Ynl0ZXM7CiAJCQlsYXN0ID0gZW50cnk7Ci0JCQltYXhfZXh0ZW50ID0gMDsKKwkJCW1heF9leHRlbnQgPSBlbnRyeS0+Ynl0ZXM7CiAJCX0gZWxzZSB7CiAJCQlsYXN0ID0gbmV4dDsKIAkJCXdpbmRvd19mcmVlICs9IG5leHQtPmJ5dGVzOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggZTliNzZiYy4uYjNhZDE2OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC02Miw3ICs2Miw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfYW9wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfYW9wczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9maWxlX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19kaXJfZmlsZV9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBleHRlbnRfaW9fb3BzIGJ0cmZzX2V4dGVudF9pb19vcHM7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYnRyZnNfaW5vZGVfY2FjaGVwOwpAQCAtNDI0LDkgKzQyNCwxMiBAQAogCQkJICogYW5kIGZyZWUgdXAgb3VyIHRlbXAgcGFnZXMuCiAJCQkgKi8KIAkJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwgMSwgMCwKLQkJCQkJCSAgICAgMCwgMSwgMSwgMSwgMCk7CisJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKKwkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwKKwkJCSAgICAgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwgRVhURU5UX0NMRUFSX0RJUlRZIHwKKwkJCSAgICAgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCSAgICAgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcgfAorCQkJICAgICBFWFRFTlRfU0VUX1dSSVRFQkFDSyB8IEVYVEVOVF9FTkRfV1JJVEVCQUNLKTsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIGZyZWVfcGFnZXNfb3V0OwogCQl9CkBAIC01MzUsNyArNTM4LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBleHRlbnRfbWFwX3RyZWUgKmVtX3RyZWUgPSAmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlOwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqaW9fdHJlZTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaWYgKGxpc3RfZW1wdHkoJmFzeW5jX2Nvdy0+ZXh0ZW50cykpCiAJCXJldHVybiAwOwpAQCAtNTQ5LDYgKzU1Miw3IEBACiAKIAkJaW9fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZTsKIAorcmV0cnk6CiAJCS8qIGRpZCB0aGUgY29tcHJlc3Npb24gY29kZSBmYWxsIGJhY2sgdG8gdW5jb21wcmVzc2VkIElPPyAqLwogCQlpZiAoIWFzeW5jX2V4dGVudC0+cGFnZXMpIHsKIAkJCWludCBwYWdlX3N0YXJ0ZWQgPSAwOwpAQCAtNTU5LDExICs1NjMsMTEgQEAKIAkJCQkgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsIEdGUF9OT0ZTKTsKIAogCQkJLyogYWxsb2NhdGUgYmxvY2tzICovCi0JCQljb3dfZmlsZV9yYW5nZShpbm9kZSwgYXN5bmNfY293LT5sb2NrZWRfcGFnZSwKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCwKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJICAgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAotCQkJCSAgICAgICAmcGFnZV9zdGFydGVkLCAmbnJfd3JpdHRlbiwgMCk7CisJCQlyZXQgPSBjb3dfZmlsZV9yYW5nZShpbm9kZSwgYXN5bmNfY293LT5sb2NrZWRfcGFnZSwKKwkJCQkJICAgICBhc3luY19leHRlbnQtPnN0YXJ0LAorCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKworCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAorCQkJCQkgICAgICZwYWdlX3N0YXJ0ZWQsICZucl93cml0dGVuLCAwKTsKIAogCQkJLyoKIAkJCSAqIGlmIHBhZ2Vfc3RhcnRlZCwgY293X2ZpbGVfcmFuZ2UgaW5zZXJ0ZWQgYW4KQEAgLTU3MSw3ICs1NzUsNyBAQAogCQkJICogYW5kIElPIGZvciB1cy4gIE90aGVyd2lzZSwgd2UgbmVlZCB0byBzdWJtaXQKIAkJCSAqIGFsbCB0aG9zZSBwYWdlcyBkb3duIHRvIHRoZSBkcml2ZS4KIAkJCSAqLwotCQkJaWYgKCFwYWdlX3N0YXJ0ZWQpCisJCQlpZiAoIXBhZ2Vfc3RhcnRlZCAmJiAhcmV0KQogCQkJCWV4dGVudF93cml0ZV9sb2NrZWRfcmFuZ2UoaW9fdHJlZSwKIAkJCQkJCSAgaW5vZGUsIGFzeW5jX2V4dGVudC0+c3RhcnQsCiAJCQkJCQkgIGFzeW5jX2V4dGVudC0+c3RhcnQgKwpAQCAtNTk5LDcgKzYwMywyMSBAQAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKIAkJCQkJICAgMCwgYWxsb2NfaGludCwKIAkJCQkJICAgKHU2NCktMSwgJmlucywgMSk7Ci0JCUJVR19PTihyZXQpOworCQlpZiAocmV0KSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhc3luY19leHRlbnQtPm5yX3BhZ2VzOyBpKyspIHsKKwkJCQlXQVJOX09OKGFzeW5jX2V4dGVudC0+cGFnZXNbaV0tPm1hcHBpbmcpOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShhc3luY19leHRlbnQtPnBhZ2VzW2ldKTsKKwkJCX0KKwkJCWtmcmVlKGFzeW5jX2V4dGVudC0+cGFnZXMpOworCQkJYXN5bmNfZXh0ZW50LT5ucl9wYWdlcyA9IDA7CisJCQlhc3luY19leHRlbnQtPnBhZ2VzID0gTlVMTDsKKwkJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKKwkJCQkgICAgICBhc3luY19leHRlbnQtPnN0YXJ0ICsKKwkJCQkgICAgICBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwgR0ZQX05PRlMpOworCQkJZ290byByZXRyeTsKKwkJfQorCiAJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CiAJCWVtLT5zdGFydCA9IGFzeW5jX2V4dGVudC0+c3RhcnQ7CiAJCWVtLT5sZW4gPSBhc3luY19leHRlbnQtPnJhbV9zaXplOwpAQCAtNjM3LDExICs2NTUsMTQgQEAKIAkJICogY2xlYXIgZGlydHksIHNldCB3cml0ZWJhY2sgYW5kIHVubG9jayB0aGUgcGFnZXMuCiAJCSAqLwogCQlleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jKGlub2RlLAotCQkJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJICAgICBhc3luY19leHRlbnQtPnN0YXJ0LAotCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKwotCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAotCQkJCQkgICAgIE5VTEwsIDEsIDEsIDAsIDEsIDEsIDAsIDApOworCQkJCSZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKKwkJCQlhc3luY19leHRlbnQtPnN0YXJ0LAorCQkJCWFzeW5jX2V4dGVudC0+c3RhcnQgKworCQkJCWFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAorCQkJCU5VTEwsIEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSB8CisJCQkJRVhURU5UX0NMRUFSX1VOTE9DSyB8CisJCQkJRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCQlFWFRFTlRfQ0xFQVJfRElSVFkgfCBFWFRFTlRfU0VUX1dSSVRFQkFDSyk7CiAKIAkJcmV0ID0gYnRyZnNfc3VibWl0X2NvbXByZXNzZWRfd3JpdGUoaW5vZGUsCiAJCQkJICAgIGFzeW5jX2V4dGVudC0+c3RhcnQsCkBAIC03MTIsOSArNzMzLDE1IEBACiAJCQkJCSAgICBzdGFydCwgZW5kLCAwLCBOVUxMKTsKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQlleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jKGlub2RlLAotCQkJCQkJICAgICAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCi0JCQkJCQkgICAgIHN0YXJ0LCBlbmQsIE5VTEwsIDEsIDEsCi0JCQkJCQkgICAgIDEsIDEsIDEsIDEsIDApOworCQkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAorCQkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSB8CisJCQkJICAgICBFWFRFTlRfQ0xFQVJfVU5MT0NLIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9ERUxBTExPQyB8CisJCQkJICAgICBFWFRFTlRfQ0xFQVJfQUNDT1VOVElORyB8CisJCQkJICAgICBFWFRFTlRfQ0xFQVJfRElSVFkgfAorCQkJCSAgICAgRVhURU5UX1NFVF9XUklURUJBQ0sgfAorCQkJCSAgICAgRVhURU5UX0VORF9XUklURUJBQ0spOwogCQkJKm5yX3dyaXR0ZW4gPSAqbnJfd3JpdHRlbiArCiAJCQkgICAgIChlbmQgLSBzdGFydCArIFBBR0VfQ0FDSEVfU0laRSkgLyBQQUdFX0NBQ0hFX1NJWkU7CiAJCQkqcGFnZV9zdGFydGVkID0gMTsKQEAgLTczMSwxMyArNzU4LDI5IEBACiAJZW0gPSBzZWFyY2hfZXh0ZW50X21hcHBpbmcoJkJUUkZTX0koaW5vZGUpLT5leHRlbnRfdHJlZSwKIAkJCQkgICBzdGFydCwgbnVtX2J5dGVzKTsKIAlpZiAoZW0pIHsKLQkJYWxsb2NfaGludCA9IGVtLT5ibG9ja19zdGFydDsKLQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJLyoKKwkJICogaWYgYmxvY2sgc3RhcnQgaXNuJ3QgYW4gYWN0dWFsIGJsb2NrIG51bWJlciB0aGVuIGZpbmQgdGhlCisJCSAqIGZpcnN0IGJsb2NrIGluIHRoaXMgaW5vZGUgYW5kIHVzZSB0aGF0IGFzIGEgaGludC4gIElmIHRoYXQKKwkJICogYmxvY2sgaXMgYWxzbyBib2d1cyB0aGVuIGp1c3QgZG9uJ3Qgd29ycnkgYWJvdXQgaXQuCisJCSAqLworCQlpZiAoZW0tPmJsb2NrX3N0YXJ0ID49IEVYVEVOVF9NQVBfTEFTVF9CWVRFKSB7CisJCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQkJZW0gPSBzZWFyY2hfZXh0ZW50X21hcHBpbmcoZW1fdHJlZSwgMCwgMCk7CisJCQlpZiAoZW0gJiYgZW0tPmJsb2NrX3N0YXJ0IDwgRVhURU5UX01BUF9MQVNUX0JZVEUpCisJCQkJYWxsb2NfaGludCA9IGVtLT5ibG9ja19zdGFydDsKKwkJCWlmIChlbSkKKwkJCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQl9IGVsc2UgeworCQkJYWxsb2NfaGludCA9IGVtLT5ibG9ja19zdGFydDsKKwkJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCX0KIAl9CiAJcmVhZF91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5leHRlbnRfdHJlZS5sb2NrKTsKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIHN0YXJ0ICsgbnVtX2J5dGVzIC0gMSwgMCk7CiAKIAl3aGlsZSAoZGlza19udW1fYnl0ZXMgPiAwKSB7CisJCXVuc2lnbmVkIGxvbmcgb3A7CisKIAkJY3VyX2FsbG9jX3NpemUgPSBtaW4oZGlza19udW1fYnl0ZXMsIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpOwogCQlyZXQgPSBidHJmc19yZXNlcnZlX2V4dGVudCh0cmFucywgcm9vdCwgY3VyX2FsbG9jX3NpemUsCiAJCQkJCSAgIHJvb3QtPnNlY3RvcnNpemUsIDAsIGFsbG9jX2hpbnQsCkBAIC03ODksMTAgKzgzMiwxMyBAQAogCQkgKiBEbyBzZXQgdGhlIFByaXZhdGUyIGJpdCBzbyB3ZSBrbm93IHRoaXMgcGFnZSB3YXMgcHJvcGVybHkKIAkJICogc2V0dXAgZm9yIHdyaXRlcGFnZQogCQkgKi8KKwkJb3AgPSB1bmxvY2sgPyBFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgOiAwOworCQlvcCB8PSBFWFRFTlRfQ0xFQVJfVU5MT0NLIHwgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCUVYVEVOVF9TRVRfUFJJVkFURTI7CisKIAkJZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhpbm9kZSwgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAogCQkJCQkgICAgIHN0YXJ0LCBzdGFydCArIHJhbV9zaXplIC0gMSwKLQkJCQkJICAgICBsb2NrZWRfcGFnZSwgdW5sb2NrLCAxLAotCQkJCQkgICAgIDEsIDAsIDAsIDAsIDEpOworCQkJCQkgICAgIGxvY2tlZF9wYWdlLCBvcCk7CiAJCWRpc2tfbnVtX2J5dGVzIC09IGN1cl9hbGxvY19zaXplOwogCQludW1fYnl0ZXMgLT0gY3VyX2FsbG9jX3NpemU7CiAJCWFsbG9jX2hpbnQgPSBpbnMub2JqZWN0aWQgKyBpbnMub2Zmc2V0OwpAQCAtODY0LDggKzkxMCw4IEBACiAJdTY0IGN1cl9lbmQ7CiAJaW50IGxpbWl0ID0gMTAgKiAxMDI0ICogMTA0MjsKIAotCWNsZWFyX2V4dGVudF9iaXQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydCwgZW5kLCBFWFRFTlRfTE9DS0VEIHwKLQkJCSBFWFRFTlRfREVMQUxMT0MsIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKKwljbGVhcl9leHRlbnRfYml0KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgc3RhcnQsIGVuZCwgRVhURU5UX0xPQ0tFRCwKKwkJCSAxLCAwLCBOVUxMLCBHRlBfTk9GUyk7CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCWFzeW5jX2NvdyA9IGttYWxsb2Moc2l6ZW9mKCphc3luY19jb3cpLCBHRlBfTk9GUyk7CiAJCWFzeW5jX2Nvdy0+aW5vZGUgPSBpbm9kZTsKQEAgLTEwMDYsNiArMTA1Miw3IEBACiAKIAkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPiBjdXJfb2Zmc2V0KSB7CiAJCQlleHRlbnRfZW5kID0gZm91bmRfa2V5Lm9mZnNldDsKKwkJCWV4dGVudF90eXBlID0gMDsKIAkJCWdvdG8gb3V0X2NoZWNrOwogCQl9CiAKQEAgLTExMTIsOCArMTE1OSwxMCBAQAogCQlCVUdfT04ocmV0KTsKIAogCQlleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jKGlub2RlLCAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCi0JCQkJCWN1cl9vZmZzZXQsIGN1cl9vZmZzZXQgKyBudW1fYnl0ZXMgLSAxLAotCQkJCQlsb2NrZWRfcGFnZSwgMSwgMSwgMSwgMCwgMCwgMCwgMSk7CisJCQkJY3VyX29mZnNldCwgY3VyX29mZnNldCArIG51bV9ieXRlcyAtIDEsCisJCQkJbG9ja2VkX3BhZ2UsIEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSB8CisJCQkJRVhURU5UX0NMRUFSX1VOTE9DSyB8IEVYVEVOVF9DTEVBUl9ERUxBTExPQyB8CisJCQkJRVhURU5UX1NFVF9QUklWQVRFMik7CiAJCWN1cl9vZmZzZXQgPSBleHRlbnRfZW5kOwogCQlpZiAoY3VyX29mZnNldCA+IGVuZCkKIAkJCWJyZWFrOwpAQCAtMTE1OSw2ICsxMjA4LDg5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBidHJmc19zcGxpdF9leHRlbnRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvcmlnLCB1NjQgc3BsaXQpCit7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKwl1NjQgc2l6ZTsKKworCWlmICghKG9yaWctPnN0YXRlICYgRVhURU5UX0RFTEFMTE9DKSkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gb3JpZy0+ZW5kIC0gb3JpZy0+c3RhcnQgKyAxOworCWlmIChzaXplID4gcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCkgeworCQl1NjQgbnVtX2V4dGVudHM7CisJCXU2NCBuZXdfc2l6ZTsKKworCQluZXdfc2l6ZSA9IG9yaWctPmVuZCAtIHNwbGl0ICsgMTsKKwkJbnVtX2V4dGVudHMgPSBkaXY2NF91NjQoc2l6ZSArIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQgLSAxLAorCQkJCQlyb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KTsKKworCQkvKgorCQkgKiBpZiB3ZSBicmVhayBhIGxhcmdlIGV4dGVudCB1cCB0aGVuIGxlYXZlIG91c3RhbmRpbmdfZXh0ZW50cworCQkgKiBiZSwgc2luY2Ugd2UndmUgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIHRoZSBsYXJnZSBleHRlbnQuCisJCSAqLworCQlpZiAoZGl2NjRfdTY0KG5ld19zaXplICsgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCAtIDEsCisJCQkgICAgICByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSA8IG51bV9leHRlbnRzKQorCQkJcmV0dXJuIDA7CisJfQorCisJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwlCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cysrOworCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogZXh0ZW50X2lvLmMgbWVyZ2VfZXh0ZW50X2hvb2ssIHVzZWQgdG8gdHJhY2sgbWVyZ2VkIGRlbGF5ZWQgYWxsb2NhdGlvbgorICogZXh0ZW50cyBzbyB3ZSBjYW4ga2VlcCB0cmFjayBvZiBuZXcgZXh0ZW50cyB0aGF0IGFyZSBqdXN0IG1lcmdlZCBvbnRvIG9sZAorICogZXh0ZW50cywgc3VjaCBhcyB3aGVuIHdlIGFyZSBkb2luZyBzZXF1ZW50aWFsIHdyaXRlcywgc28gd2UgY2FuIHByb3Blcmx5CisgKiBhY2NvdW50IGZvciB0aGUgbWV0YWRhdGEgc3BhY2Ugd2UnbGwgbmVlZC4KKyAqLworc3RhdGljIGludCBidHJmc19tZXJnZV9leHRlbnRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm5ldywKKwkJCQkgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvdGhlcikKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCXU2NCBuZXdfc2l6ZSwgb2xkX3NpemU7CisJdTY0IG51bV9leHRlbnRzOworCisJLyogbm90IGRlbGFsbG9jLCBpZ25vcmUgaXQgKi8KKwlpZiAoIShvdGhlci0+c3RhdGUgJiBFWFRFTlRfREVMQUxMT0MpKQorCQlyZXR1cm4gMDsKKworCW9sZF9zaXplID0gb3RoZXItPmVuZCAtIG90aGVyLT5zdGFydCArIDE7CisJaWYgKG5ldy0+c3RhcnQgPCBvdGhlci0+c3RhcnQpCisJCW5ld19zaXplID0gb3RoZXItPmVuZCAtIG5ldy0+c3RhcnQgKyAxOworCWVsc2UKKwkJbmV3X3NpemUgPSBuZXctPmVuZCAtIG90aGVyLT5zdGFydCArIDE7CisKKwkvKiB3ZSdyZSBub3QgYmlnZ2VyIHRoYW4gdGhlIG1heCwgdW5yZXNlcnZlIHRoZSBzcGFjZSBhbmQgZ28gKi8KKwlpZiAobmV3X3NpemUgPD0gcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCkgeworCQlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCQlCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cy0tOworCQlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgd2UgZ3JldyBieSBhbm90aGVyIG1heF9leHRlbnQsIGp1c3QgcmV0dXJuLCB3ZSB3YW50IHRvIGtlZXAgdGhhdAorCSAqIHJlc2VydmVkIGFtb3VudC4KKwkgKi8KKwludW1fZXh0ZW50cyA9IGRpdjY0X3U2NChvbGRfc2l6ZSArIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQgLSAxLAorCQkJCXJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpOworCWlmIChkaXY2NF91NjQobmV3X3NpemUgKyByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50IC0gMSwKKwkJICAgICAgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCkgPiBudW1fZXh0ZW50cykKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzLS07CisJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBleHRlbnRfaW8uYyBzZXRfYml0X2hvb2ssIHVzZWQgdG8gdHJhY2sgZGVsYXllZCBhbGxvY2F0aW9uCiAgKiBieXRlcyBpbiB0aGlzIGZpbGUsIGFuZCB0byBtYWludGFpbiB0aGUgbGlzdCBvZiBpbm9kZXMgdGhhdApAQCAtMTE2Nyw2ICsxMjk5LDcgQEAKIHN0YXRpYyBpbnQgYnRyZnNfc2V0X2JpdF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGJpdHMpCiB7CisKIAkvKgogCSAqIHNldF9iaXQgYW5kIGNsZWFyIGJpdCBob29rcyBub3JtYWxseSByZXF1aXJlIF9pcnFzYXZlL3Jlc3RvcmUKIAkgKiBidXQgaW4gdGhpcyBjYXNlLCB3ZSBhcmUgb25seSB0ZXN0ZWluZyBmb3IgdGhlIERFTEFMTE9DCkBAIC0xMTc0LDYgKzEzMDcsMTAgQEAKIAkgKi8KIAlpZiAoIShvbGQgJiBFWFRFTlRfREVMQUxMT0MpICYmIChiaXRzICYgRVhURU5UX0RFTEFMTE9DKSkgewogCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCisJCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKys7CisJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKIAkJYnRyZnNfZGVsYWxsb2NfcmVzZXJ2ZV9zcGFjZShyb290LCBpbm9kZSwgZW5kIC0gc3RhcnQgKyAxKTsKIAkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5kZWxhbGxvY19sb2NrKTsKIAkJQlRSRlNfSShpbm9kZSktPmRlbGFsbG9jX2J5dGVzICs9IGVuZCAtIHN0YXJ0ICsgMTsKQEAgLTExOTAsMjIgKzEzMjcsMzEgQEAKIC8qCiAgKiBleHRlbnRfaW8uYyBjbGVhcl9iaXRfaG9vaywgc2VlIHNldF9iaXRfaG9vayBmb3Igd2h5CiAgKi8KLXN0YXRpYyBpbnQgYnRyZnNfY2xlYXJfYml0X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGJpdHMpCitzdGF0aWMgaW50IGJ0cmZzX2NsZWFyX2JpdF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGxvbmcgYml0cykKIHsKIAkvKgogCSAqIHNldF9iaXQgYW5kIGNsZWFyIGJpdCBob29rcyBub3JtYWxseSByZXF1aXJlIF9pcnFzYXZlL3Jlc3RvcmUKIAkgKiBidXQgaW4gdGhpcyBjYXNlLCB3ZSBhcmUgb25seSB0ZXN0ZWluZyBmb3IgdGhlIERFTEFMTE9DCiAJICogYml0LCB3aGljaCBpcyBvbmx5IHNldCBvciBjbGVhcmVkIHdpdGggaXJxcyBvbgogCSAqLwotCWlmICgob2xkICYgRVhURU5UX0RFTEFMTE9DKSAmJiAoYml0cyAmIEVYVEVOVF9ERUxBTExPQykpIHsKKwlpZiAoKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ERUxBTExPQykgJiYgKGJpdHMgJiBFWFRFTlRfREVMQUxMT0MpKSB7CiAJCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAKKwkJaWYgKGJpdHMgJiBFWFRFTlRfRE9fQUNDT1VOVElORykgeworCQkJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzLS07CisJCQlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwkJfQorCiAJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7Ci0JCWlmIChlbmQgLSBzdGFydCArIDEgPiByb290LT5mc19pbmZvLT5kZWxhbGxvY19ieXRlcykgeworCQlpZiAoc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDEgPgorCQkgICAgcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzIHdhcm5pbmc6IGRlbGFsbG9jIGFjY291bnQgIgogCQkJICAgICAgICIlbGx1ICVsbHVcbiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllbmQgLSBzdGFydCArIDEsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgICAgICBzdGF0ZS0+ZW5kIC0gc3RhdGUtPnN0YXJ0ICsgMSwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQogCQkJICAgICAgIHJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzKTsKIAkJCWJ0cmZzX2RlbGFsbG9jX2ZyZWVfc3BhY2Uocm9vdCwgaW5vZGUsICh1NjQpLTEpOwpAQCAtMTIxMyw5ICsxMzU5LDEyIEBACiAJCQlCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgPSAwOwogCQl9IGVsc2UgewogCQkJYnRyZnNfZGVsYWxsb2NfZnJlZV9zcGFjZShyb290LCBpbm9kZSwKLQkJCQkJCSAgZW5kIC0gc3RhcnQgKyAxKTsKLQkJCXJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzIC09IGVuZCAtIHN0YXJ0ICsgMTsKLQkJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyAtPSBlbmQgLSBzdGFydCArIDE7CisJCQkJCQkgIHN0YXRlLT5lbmQgLQorCQkJCQkJICBzdGF0ZS0+c3RhcnQgKyAxKTsKKwkJCXJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzIC09IHN0YXRlLT5lbmQgLQorCQkJCXN0YXRlLT5zdGFydCArIDE7CisJCQlCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgLT0gc3RhdGUtPmVuZCAtCisJCQkJc3RhdGUtPnN0YXJ0ICsgMTsKIAkJfQogCQlpZiAoQlRSRlNfSShpbm9kZSktPmRlbGFsbG9jX2J5dGVzID09IDAgJiYKIAkJICAgICFsaXN0X2VtcHR5KCZCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfaW5vZGVzKSkgewpAQCAtMjM1NCw3ICsyNTAzLDE5IEBACiAKIAlyb290ID0gQlRSRlNfSShkaXIpLT5yb290OwogCisJLyoKKwkgKiA1IGl0ZW1zIGZvciB1bmxpbmsgaW5vZGUKKwkgKiAxIGZvciBvcnBoYW4KKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KIAogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIApAQCAtMjM2OSw2ICsyNTMwLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yNDQ5LDcgKzI2MTEsMTYgQEAKIAkgICAgaW5vZGUtPmlfaW5vID09IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKKwl9CisKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAlpZiAodW5saWtlbHkoaW5vZGUtPmlfaW5vID09IEJUUkZTX0VNUFRZX1NVQlZPTF9ESVJfT0JKRUNUSUQpKSB7CkBAIC0yNDcyLDYgKzI2NDMsNyBAQAogb3V0OgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCiAJaWYgKHJldCAmJiAhZXJyKQpAQCAtMjkxMiwxMiArMzA4NCwyMiBAQAogCiAJaWYgKChvZmZzZXQgJiAoYmxvY2tzaXplIC0gMSkpID09IDApCiAJCWdvdG8gb3V0OworCXJldCA9IGJ0cmZzX2NoZWNrX2RhdGFfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAogCXJldCA9IC1FTk9NRU07CiBhZ2FpbjoKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4KTsKLQlpZiAoIXBhZ2UpCisJaWYgKCFwYWdlKSB7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAJCWdvdG8gb3V0OworCX0KIAogCXBhZ2Vfc3RhcnQgPSBwYWdlX29mZnNldChwYWdlKTsKIAlwYWdlX2VuZCA9IHBhZ2Vfc3RhcnQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxOwpAQCAtMjk1MCw3ICszMTMyLDE2IEBACiAJCWdvdG8gYWdhaW47CiAJfQogCi0JYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpOworCWNsZWFyX2V4dGVudF9iaXRzKCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsCisJCQkgIEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8IEVYVEVOVF9ET19BQ0NPVU5USU5HLAorCQkJICBHRlBfTk9GUyk7CisKKwlyZXQgPSBidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisJaWYgKHJldCkgeworCQl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKIAlyZXQgPSAwOwogCWlmIChvZmZzZXQgIT0gUEFHRV9DQUNIRV9TSVpFKSB7CiAJCWthZGRyID0ga21hcChwYWdlKTsKQEAgLTI5NjMsNiArMzE1NCw5IEBACiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgorCWlmIChyZXQpCisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiBvdXQ6CkBAIC0yOTgxLDE3ICszMTc1LDE1IEBACiAJdTY0IGxhc3RfYnl0ZTsKIAl1NjQgY3VyX29mZnNldDsKIAl1NjQgaG9sZV9zaXplOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAlpZiAoc2l6ZSA8PSBob2xlX3N0YXJ0KQogCQlyZXR1cm4gMDsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJZXJyID0gYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKLQogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZDsKIAkJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBob2xlX3N0YXJ0LApAQCAtMzAyNCwxMiArMzIxNiwxOCBAQAogCQkJCQkJIGN1cl9vZmZzZXQsICZoaW50X2J5dGUsIDEpOwogCQkJaWYgKGVycikKIAkJCQlicmVhazsKKworCQkJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxKTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisKIAkJCWVyciA9IGJ0cmZzX2luc2VydF9maWxlX2V4dGVudCh0cmFucywgcm9vdCwKIAkJCQkJaW5vZGUtPmlfaW5vLCBjdXJfb2Zmc2V0LCAwLAogCQkJCQkwLCBob2xlX3NpemUsIDAsIGhvbGVfc2l6ZSwKIAkJCQkJMCwgMCwgMCk7CiAJCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgaG9sZV9zdGFydCwKIAkJCQkJbGFzdF9ieXRlIC0gMSwgMCk7CisJCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7CiAJCX0KIAkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJY3VyX29mZnNldCA9IGxhc3RfYnl0ZTsKQEAgLTMzNTMsNiArMzU1MSw3IEBACiAJYmktPmdlbmVyYXRpb24gPSAwOwogCWJpLT5zZXF1ZW5jZSA9IDA7CiAJYmktPmxhc3RfdHJhbnMgPSAwOworCWJpLT5sYXN0X3N1Yl90cmFucyA9IDA7CiAJYmktPmxvZ2dlZF90cmFucyA9IDA7CiAJYmktPmRlbGFsbG9jX2J5dGVzID0gMDsKIAliaS0+cmVzZXJ2ZWRfYnl0ZXMgPSAwOwpAQCAtMzUwMywxMiArMzcwMiwxNCBAQAogewogCXN0cnVjdCBidHJmc19yb290ICpyb290OwogCi0JaWYgKCFkZW50cnktPmRfaW5vZGUpCi0JCXJldHVybiAwOworCWlmICghZGVudHJ5LT5kX2lub2RlICYmICFJU19ST09UKGRlbnRyeSkpCisJCWRlbnRyeSA9IGRlbnRyeS0+ZF9wYXJlbnQ7CiAKLQlyb290ID0gQlRSRlNfSShkZW50cnktPmRfaW5vZGUpLT5yb290OwotCWlmIChidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgPT0gMCkKLQkJcmV0dXJuIDE7CisJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgeworCQlyb290ID0gQlRSRlNfSShkZW50cnktPmRfaW5vZGUpLT5yb290OworCQlpZiAoYnRyZnNfcm9vdF9yZWZzKCZyb290LT5yb290X2l0ZW0pID09IDApCisJCQlyZXR1cm4gMTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5OTAsMTEgKzQxOTEsMTggQEAKIAlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDIgZm9yIGlub2RlIGl0ZW0gYW5kIHJlZgorCSAqIDIgZm9yIGRpciBpdGVtcworCSAqIDEgZm9yIHhhdHRyIGlmIHNlbGludXggaXMgb24KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKKwkJcmV0dXJuIGVycjsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKCF0cmFucykKKwkJZ290byBmYWlsOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9vYmplY3RpZCh0cmFucywgcm9vdCwgZGlyLT5pX2lubywgJm9iamVjdGlkKTsKQEAgLTQwMzIsNiArNDI0MCw3IEBACiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKIGZhaWw6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChkcm9wX2lub2RlKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC00MDUyLDEwICs0MjYxLDE4IEBACiAJdTY0IG9iamVjdGlkOwogCXU2NCBpbmRleCA9IDA7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMiBmb3IgaW5vZGUgaXRlbSBhbmQgcmVmCisJICogMiBmb3IgZGlyIGl0ZW1zCisJICogMSBmb3IgeGF0dHIgaWYgc2VsaW51eCBpcyBvbgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlyZXR1cm4gZXJyOworCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoIXRyYW5zKQorCQlnb3RvIGZhaWw7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHRyYW5zLCByb290LCBkaXItPmlfaW5vLCAmb2JqZWN0aWQpOwpAQCAtNDA5Niw2ICs0MzEzLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogZmFpbDoKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGRyb3BfaW5vZGUpIHsKIAkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKQEAgLTQxMTgsMTAgKzQzMzYsMTYgQEAKIAlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlidHJmc19pbmNfbmxpbmsoaW5vZGUpOwotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAxIGl0ZW0gZm9yIGlub2RlIHJlZgorCSAqIDIgaXRlbXMgZm9yIGRpciBpdGVtcworCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMyk7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlyZXR1cm4gZXJyOworCisJYnRyZnNfaW5jX25saW5rKGlub2RlKTsKKwogCWVyciA9IGJ0cmZzX3NldF9pbm9kZV9pbmRleChkaXIsICZpbmRleCk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwpAQCAtNDE0NSw2ICs0MzY5LDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogZmFpbDoKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMyk7CiAJaWYgKGRyb3BfaW5vZGUpIHsKIAkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKQEAgLTQxNjQsMTcgKzQzODksMjEgQEAKIAl1NjQgaW5kZXggPSAwOwogCXVuc2lnbmVkIGxvbmcgbnIgPSAxOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDIgaXRlbXMgZm9yIGlub2RlIGFuZCByZWYKKwkgKiAyIGl0ZW1zIGZvciBkaXIgaXRlbXMKKwkgKiAxIGZvciB4YXR0ciBpZiBzZWxpbnV4IGlzIG9uCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dF91bmxvY2s7CisJCXJldHVybiBlcnI7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKLQotCWlmIChJU19FUlIodHJhbnMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodHJhbnMpOworCWlmICghdHJhbnMpIHsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KKwlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAllcnIgPSBidHJmc19maW5kX2ZyZWVfb2JqZWN0aWQodHJhbnMsIHJvb3QsIGRpci0+aV9pbm8sICZvYmplY3RpZCk7CiAJaWYgKGVycikgewpAQCAtNDIyMyw2ICs0NDUyLDcgQEAKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogCiBvdXRfdW5sb2NrOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZHJvcF9vbl9lcnIpCiAJCWlwdXQoaW5vZGUpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwpAQCAtNDY4NCw3ICs0OTE0LDggQEAKIAkJICovCiAJCWNsZWFyX2V4dGVudF9iaXQodHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsCiAJCQkJIEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8Ci0JCQkJIEVYVEVOVF9MT0NLRUQsIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKKwkJCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ET19BQ0NPVU5USU5HLCAxLCAwLAorCQkJCSBOVUxMLCBHRlBfTk9GUyk7CiAJCS8qCiAJCSAqIHdob2V2ZXIgY2xlYXJlZCB0aGUgcHJpdmF0ZSBiaXQgaXMgcmVzcG9uc2libGUKIAkJICogZm9yIHRoZSBmaW5pc2hfb3JkZXJlZF9pbwpAQCAtNDY5Nyw4ICs0OTI4LDggQEAKIAkJbG9ja19leHRlbnQodHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKIAl9CiAJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKLQkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsCi0JCSAxLCAxLCBOVUxMLCBHRlBfTk9GUyk7CisJCSBFWFRFTlRfTE9DS0VEIHwgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKKwkJIEVYVEVOVF9ET19BQ0NPVU5USU5HLCAxLCAxLCBOVUxMLCBHRlBfTk9GUyk7CiAJX19idHJmc19yZWxlYXNlcGFnZShwYWdlLCBHRlBfTk9GUyk7CiAKIAlDbGVhclBhZ2VDaGVja2VkKHBhZ2UpOwpAQCAtNDc0Nyw2ICs0OTc4LDEzIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwlpZiAocmV0KSB7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXQgPSBWTV9GQVVMVF9OT1BBR0U7IC8qIG1ha2UgdGhlIFZNIHJldHJ5IHRoZSBmYXVsdCAqLwogYWdhaW46CiAJbG9ja19wYWdlKHBhZ2UpOwpAQCAtNDc3OCw3ICs1MDE2LDI0IEBACiAJCWdvdG8gYWdhaW47CiAJfQogCi0JYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpOworCS8qCisJICogWFhYIC0gcGFnZV9ta3dyaXRlIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHBhZ2UgaXMgZGlydGllZCwgZXZlbgorCSAqIGlmIGl0IHdhcyBhbHJlYWR5IGRpcnR5LCBzbyBmb3Igc3BhY2UgYWNjb3VudGluZyByZWFzb25zIHdlIG5lZWQgdG8KKwkgKiBjbGVhciBhbnkgZGVsYWxsb2MgYml0cyBmb3IgdGhlIHJhbmdlIHdlIGFyZSBmaXhpbmcgdG8gc2F2ZS4gIFRoZXJlCisJICogaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMsIGJ1dCBmb3Igbm93IGtlZXAgY29uc2lzdGVudCB3aXRoCisJICogcHJlcGFyZV9wYWdlcyBpbiB0aGUgbm9ybWFsIHdyaXRlIHBhdGguCisJICovCisJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKKwkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsCisJCQkgIEdGUF9OT0ZTKTsKKworCXJldCA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKKwlpZiAocmV0KSB7CisJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKKwkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOworCQlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uocm9vdCwgaW5vZGUsIFBBR0VfQ0FDSEVfU0laRSk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAJcmV0ID0gMDsKIAogCS8qIHBhZ2UgaXMgd2hvbGx5IG9yIHBhcnRpYWxseSBpbnNpZGUgRU9GICovCkBAIC00Nzk3LDEwICs1MDUyLDEzIEBACiAJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCi0JQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uICsgMTsKKwlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb247CisJQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPmxvZ190cmFuc2lkOworCiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOwogCWlmICghcmV0KQogCQlyZXR1cm4gVk1fRkFVTFRfTE9DS0VEOwogCXVubG9ja19wYWdlKHBhZ2UpOwpAQCAtNDgyMSw3ICs1MDc5LDkgQEAKIAlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQogCQlyZXR1cm47CiAKLQlidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOworCXJldCA9IGJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuOwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSAmICh+bWFzayksICh1NjQpLTEpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKQEAgLTQ5MTYsNyArNTE3NiwxMiBAQAogCWlmICghZWkpCiAJCXJldHVybiBOVUxMOwogCWVpLT5sYXN0X3RyYW5zID0gMDsKKwllaS0+bGFzdF9zdWJfdHJhbnMgPSAwOwogCWVpLT5sb2dnZWRfdHJhbnMgPSAwOworCWVpLT5vdXRzdGFuZGluZ19leHRlbnRzID0gMDsKKwllaS0+cmVzZXJ2ZWRfZXh0ZW50cyA9IDA7CisJZWktPnJvb3QgPSBOVUxMOworCXNwaW5fbG9ja19pbml0KCZlaS0+YWNjb3VudGluZ19sb2NrKTsKIAlidHJmc19vcmRlcmVkX2lub2RlX3RyZWVfaW5pdCgmZWktPm9yZGVyZWRfdHJlZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX29ycGhhbik7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5vcmRlcmVkX29wZXJhdGlvbnMpOwpAQCAtNDkzMiw2ICs1MTk3LDE0IEBACiAJV0FSTl9PTihpbm9kZS0+aV9kYXRhLm5ycGFnZXMpOwogCiAJLyoKKwkgKiBUaGlzIGNhbiBoYXBwZW4gd2hlcmUgd2UgY3JlYXRlIGFuIGlub2RlLCBidXQgc29tZWJvZHkgZWxzZSBhbHNvCisJICogY3JlYXRlZCB0aGUgc2FtZSBpbm9kZSBhbmQgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBvbmUgd2UgYWxyZWFkeQorCSAqIGNyZWF0ZWQuCisJICovCisJaWYgKCFyb290KQorCQlnb3RvIGZyZWU7CisKKwkvKgogCSAqIE1ha2Ugc3VyZSB3ZSdyZSBwcm9wZXJseSByZW1vdmVkIGZyb20gdGhlIG9yZGVyZWQgb3BlcmF0aW9uCiAJICogbGlzdHMuCiAJICovCkBAIC00OTY2LDYgKzUyMzksNyBAQAogCX0KIAlpbm9kZV90cmVlX2RlbChpbm9kZSk7CiAJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIDAsICh1NjQpLTEsIDApOworZnJlZToKIAlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfaW5vZGVfY2FjaGVwLCBCVFJGU19JKGlub2RlKSk7CiB9CiAKQEAgLTUwNzAsNyArNTM0NCwxNSBAQAogCSAgICBuZXdfaW5vZGUtPmlfc2l6ZSA+IEJUUkZTX0VNUFRZX0RJUl9TSVpFKQogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiBXZSB3YW50IHRvIHJlc2VydmUgdGhlIGFic29sdXRlIHdvcnN0IGNhc2UgYW1vdW50IG9mIGl0ZW1zLiAgU28gaWYKKwkgKiBib3RoIGlub2RlcyBhcmUgc3Vidm9scyBhbmQgd2UgbmVlZCB0byB1bmxpbmsgdGhlbSB0aGVuIHRoYXQgd291bGQKKwkgKiByZXF1aXJlIDQgaXRlbSBtb2RpZmljYXRpb25zLCBidXQgaWYgdGhleSBhcmUgYm90aCBub3JtYWwgaW5vZGVzIGl0CisJICogd291bGQgcmVxdWlyZSA1IGl0ZW0gbW9kaWZpY2F0aW9ucywgc28gd2UnbGwgYXNzdW1lIHRoZWlyIG5vcm1hbAorCSAqIGlub2Rlcy4gIFNvIDUgKiAyIGlzIDEwLCBwbHVzIDEgZm9yIHRoZSBuZXcgbGluaywgc28gMTEgdG90YWwgaXRlbXMKKwkgKiBzaG91bGQgY292ZXIgdGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mIGl0ZW1zIHdlJ2xsIG1vZGlmeS4KKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDExKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC01MTg1LDYgKzU0NjcsOCBAQAogCiAJaWYgKG9sZF9pbm9kZS0+aV9pbm8gPT0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkKIAkJdXBfcmVhZCgmcm9vdC0+ZnNfaW5mby0+c3Vidm9sX3NlbSk7CisKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMTEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTUyNTYsMTEgKzU1NDAsMTggQEAKIAlpZiAobmFtZV9sZW4gPiBCVFJGU19NQVhfSU5MSU5FX0RBVEFfU0laRShyb290KSkKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMiBpdGVtcyBmb3IgaW5vZGUgaXRlbSBhbmQgcmVmCisJICogMiBpdGVtcyBmb3IgZGlyIGl0ZW1zCisJICogMSBpdGVtIGZvciB4YXR0ciBpZiBzZWxpbnV4IGlzIG9uCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dF9mYWlsOworCQlyZXR1cm4gZXJyOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoIXRyYW5zKQorCQlnb3RvIG91dF9mYWlsOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9vYmplY3RpZCh0cmFucywgcm9vdCwgZGlyLT5pX2lubywgJm9iamVjdGlkKTsKQEAgLTUzNDEsNiArNTYzMiw3IEBACiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKIG91dF9mYWlsOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZHJvcF9pbm9kZSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNTM2Miw2ICs1NjU0LDExIEBACiAKIAl3aGlsZSAobnVtX2J5dGVzID4gMCkgewogCQlhbGxvY19zaXplID0gbWluKG51bV9ieXRlcywgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCk7CisKKwkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LCBhbGxvY19zaXplLAogCQkJCQkgICByb290LT5zZWN0b3JzaXplLCAwLCBhbGxvY19oaW50LAogCQkJCQkgICAodTY0KS0xLCAmaW5zLCAxKTsKQEAgLTUzODEsNiArNTY3OCw3IEBACiAJCW51bV9ieXRlcyAtPSBpbnMub2Zmc2V0OwogCQljdXJfb2Zmc2V0ICs9IGlucy5vZmZzZXQ7CiAJCWFsbG9jX2hpbnQgPSBpbnMub2JqZWN0aWQgKyBpbnMub2Zmc2V0OworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7CiAJfQogb3V0OgogCWlmIChjdXJfb2Zmc2V0ID4gc3RhcnQpIHsKQEAgLTU1NDQsNyArNTg0Miw3IEBACiAJLnBlcm1pc3Npb24JPSBidHJmc19wZXJtaXNzaW9uLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBidHJmc19yZWFsX3JlYWRkaXIsCkBAIC01NTY2LDYgKzU4NjQsOCBAQAogCS5yZWFkcGFnZV9pb19mYWlsZWRfaG9vayA9IGJ0cmZzX2lvX2ZhaWxlZF9ob29rLAogCS5zZXRfYml0X2hvb2sgPSBidHJmc19zZXRfYml0X2hvb2ssCiAJLmNsZWFyX2JpdF9ob29rID0gYnRyZnNfY2xlYXJfYml0X2hvb2ssCisJLm1lcmdlX2V4dGVudF9ob29rID0gYnRyZnNfbWVyZ2VfZXh0ZW50X2hvb2ssCisJLnNwbGl0X2V4dGVudF9ob29rID0gYnRyZnNfc3BsaXRfZXh0ZW50X2hvb2ssCiB9OwogCiAvKgpAQCAtNTYzMiw2ICs1OTMyLDYgQEAKIAkucmVtb3ZleGF0dHIJPSBidHJmc19yZW1vdmV4YXR0ciwKIH07CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBidHJmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBidHJmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kZWxldGUJPSBidHJmc19kZW50cnlfZGVsZXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IGE4NTc3YTcuLmNkYmIwNTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtMjM5LDcgKzIzOSwxMyBAQAogCXU2NCBpbmRleCA9IDA7CiAJdW5zaWduZWQgbG9uZyBuciA9IDE7CiAKLQlyZXQgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMSAtIGlub2RlIGl0ZW0KKwkgKiAyIC0gcmVmcworCSAqIDEgLSByb290IGl0ZW0KKwkgKiAyIC0gZGlyIGl0ZW1zCisJICovCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0zNDAsNiArMzQ2LDkgQEAKIAllcnIgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCWlmIChlcnIgJiYgIXJldCkKIAkJcmV0ID0gZXJyOworCisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOworCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM1NSwxOSArMzY0LDI3IEBACiAJaWYgKCFyb290LT5yZWZfY293cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMSAtIGlub2RlIGl0ZW0KKwkgKiAyIC0gcmVmcworCSAqIDEgLSByb290IGl0ZW0KKwkgKiAyIC0gZGlyIGl0ZW1zCisJICovCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxfdW5sb2NrOwogCiAJcGVuZGluZ19zbmFwc2hvdCA9IGt6YWxsb2Moc2l6ZW9mKCpwZW5kaW5nX3NuYXBzaG90KSwgR0ZQX05PRlMpOwogCWlmICghcGVuZGluZ19zbmFwc2hvdCkgewogCQlyZXQgPSAtRU5PTUVNOworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCXBlbmRpbmdfc25hcHNob3QtPm5hbWUgPSBrbWFsbG9jKG5hbWVsZW4gKyAxLCBHRlBfTk9GUyk7CiAJaWYgKCFwZW5kaW5nX3NuYXBzaG90LT5uYW1lKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWtmcmVlKHBlbmRpbmdfc25hcHNob3QpOworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCW1lbWNweShwZW5kaW5nX3NuYXBzaG90LT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKQEAgLTgxMyw2ICs4MzAsNyBAQAogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAoIWVycikgeworCQlzaHJpbmtfZGNhY2hlX3NiKHJvb3QtPmZzX2luZm8tPnNiKTsKIAkJYnRyZnNfaW52YWxpZGF0ZV9pbm9kZXMoZGVzdCk7CiAJCWRfZGVsZXRlKGRlbnRyeSk7CiAJfQpAQCAtMTEwNSw4ICsxMTIzLDEwIEBACiAJCQkJCWRhdGFvICs9IG9mZiAtIGtleS5vZmZzZXQ7CiAJCQkJCWRhdGFsIC09IG9mZiAtIGtleS5vZmZzZXQ7CiAJCQkJfQotCQkJCWlmIChrZXkub2Zmc2V0ICsgZGF0YW8gKyBkYXRhbCA+IG9mZiArIGxlbikKLQkJCQkJZGF0YWwgPSBvZmYgKyBsZW4gLSBrZXkub2Zmc2V0IC0gZGF0YW87CisKKwkJCQlpZiAoa2V5Lm9mZnNldCArIGRhdGFsID4gb2ZmICsgbGVuKQorCQkJCQlkYXRhbCA9IG9mZiArIGxlbiAtIGtleS5vZmZzZXQ7CisKIAkJCQkvKiBkaXNrbyA9PSAwIG1lYW5zIGl0J3MgYSBob2xlICovCiAJCQkJaWYgKCFkaXNrbykKIAkJCQkJZGF0YW8gPSAwOwpAQCAtMTIxNSwxNSArMTIzNSwxNSBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmZGVudHJ5KGZpbGUpLT5kX2lub2RlOwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAorCXJldCA9IC1FUEVSTTsKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKSB7Ci0JCXJldCA9IC1FSU5QUk9HUkVTUzsKIAkJZ290byBvdXQ7Ci0JfQorCisJcmV0ID0gLUVJTlBST0dSRVNTOworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpCisJCWdvdG8gb3V0OwogCiAJcmV0ID0gbW50X3dhbnRfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CiAJaWYgKHJldCkKQEAgLTEyMzMsMTIgKzEyNTMsMTkgQEAKIAlyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKys7CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKKwlyZXQgPSAtRU5PTUVNOwogCXRyYW5zID0gYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JaWYgKHRyYW5zKQotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSB0cmFuczsKLQllbHNlCi0JCXJldCA9IC1FTk9NRU07Ci0JLypwcmludGsoS0VSTl9JTkZPICJidHJmc19pb2N0bF90cmFuc19zdGFydCBvbiAlcFxuIiwgZmlsZSk7Ki8KKwlpZiAoIXRyYW5zKQorCQlnb3RvIG91dF9kcm9wOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdHJhbnM7CisJcmV0dXJuIDA7CisKK291dF9kcm9wOgorCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zLS07CisJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJbW50X2Ryb3Bfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyNTQsMjQgKzEyODEsMjAgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmRlbnRyeShmaWxlKS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCWludCByZXQgPSAwOwogCiAJdHJhbnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaWYgKCF0cmFucykgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwlpZiAoIXRyYW5zKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCisJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zLS07CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAltbnRfZHJvcF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKLQotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIGxvbmcgYnRyZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYwppbmRleCBiNWQ2ZDI0Li41Nzk5YmM0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYworKysgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYwpAQCAtMzA2LDYgKzMwNiwxMiBAQAogCXRyZWUtPmxhc3QgPSBOVUxMOwogCXNldF9iaXQoQlRSRlNfT1JERVJFRF9DT01QTEVURSwgJmVudHJ5LT5mbGFncyk7CiAKKwlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzLS07CisJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2MoQlRSRlNfSShpbm9kZSktPnJvb3QsCisJCQkJCSAgICAgIGlub2RlLCAxKTsKKwogCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOwogCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5yb290X2V4dGVudF9saXN0KTsKIApAQCAtNDU4LDcgKzQ2NCw3IEBACiAJICogc3RhcnQgSU8gb24gYW55IGRpcnR5IG9uZXMgc28gdGhlIHdhaXQgZG9lc24ndCBzdGFsbCB3YWl0aW5nCiAJICogZm9yIHBkZmx1c2ggdG8gZmluZCB0aGVtCiAJICovCi0JYnRyZnNfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgZW5kLCBXQl9TWU5DX0FMTCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBlbmQpOwogCWlmICh3YWl0KSB7CiAJCXdhaXRfZXZlbnQoZW50cnktPndhaXQsIHRlc3RfYml0KEJUUkZTX09SREVSRURfQ09NUExFVEUsCiAJCQkJCQkgJmVudHJ5LT5mbGFncykpOwpAQCAtNDg4LDE3ICs0OTQsMTUgQEAKIAkvKiBzdGFydCBJTyBhY3Jvc3MgdGhlIHJhbmdlIGZpcnN0IHRvIGluc3RhbnRpYXRlIGFueSBkZWxhbGxvYwogCSAqIGV4dGVudHMKIAkgKi8KLQlidHJmc19mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBvcmlnX2VuZCwgV0JfU1lOQ19BTEwpOworCWZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgb3JpZ19lbmQpOwogCiAJLyogVGhlIGNvbXByZXNzaW9uIGNvZGUgd2lsbCBsZWF2ZSBwYWdlcyBsb2NrZWQgYnV0IHJldHVybiBmcm9tCiAJICogd3JpdGVwYWdlIHdpdGhvdXQgc2V0dGluZyB0aGUgcGFnZSB3cml0ZWJhY2suICBTdGFydGluZyBhZ2FpbgogCSAqIHdpdGggV0JfU1lOQ19BTEwgd2lsbCBlbmQgdXAgd2FpdGluZyBmb3IgdGhlIElPIHRvIGFjdHVhbGx5IHN0YXJ0LgogCSAqLwotCWJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kLCBXQl9TWU5DX0FMTCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBvcmlnX2VuZCk7CiAKLQlidHJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsCi0JCQkJCSAgIHN0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQsCi0JCQkJCSAgIG9yaWdfZW5kID4+IFBBR0VfQ0FDSEVfU0hJRlQpOworCWZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBvcmlnX2VuZCk7CiAKIAllbmQgPSBvcmlnX2VuZDsKIAlmb3VuZCA9IDA7CkBAIC03MTYsODkgKzcyMCw2IEBACiB9CiAKIAotLyoqCi0gKiB0YWtlbiBmcm9tIG1tL2ZpbGVtYXAuYyBiZWNhdXNlIGl0IGlzbid0IGV4cG9ydGVkCi0gKgotICogX19maWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UgLSBzdGFydCB3cml0ZWJhY2sgb24gbWFwcGluZyBkaXJ0eSBwYWdlcyBpbiByYW5nZQotICogQG1hcHBpbmc6CWFkZHJlc3Mgc3BhY2Ugc3RydWN0dXJlIHRvIHdyaXRlCi0gKiBAc3RhcnQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2Ugc3RhcnRzCi0gKiBAZW5kOglvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIGVuZHMgKGluY2x1c2l2ZSkKLSAqIEBzeW5jX21vZGU6CWVuYWJsZSBzeW5jaHJvbm91cyBvcGVyYXRpb24KLSAqCi0gKiBTdGFydCB3cml0ZWJhY2sgYWdhaW5zdCBhbGwgb2YgYSBtYXBwaW5nJ3MgZGlydHkgcGFnZXMgdGhhdCBsaWUKLSAqIHdpdGhpbiB0aGUgYnl0ZSBvZmZzZXRzIDxzdGFydCwgZW5kPiBpbmNsdXNpdmUuCi0gKgotICogSWYgc3luY19tb2RlIGlzIFdCX1NZTkNfQUxMIHRoZW4gdGhpcyBpcyBhICJkYXRhIGludGVncml0eSIgb3BlcmF0aW9uLCBhcwotICogb3Bwb3NlZCB0byBhIHJlZ3VsYXIgbWVtb3J5IGNsZWFuc2luZyB3cml0ZWJhY2suICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuCi0gKiB0aGVzZSB0d28gb3BlcmF0aW9ucyBpcyB0aGF0IGlmIGEgZGlydHkgcGFnZS9idWZmZXIgaXMgZW5jb3VudGVyZWQsIGl0IG11c3QKLSAqIGJlIHdhaXRlZCB1cG9uLCBhbmQgbm90IGp1c3Qgc2tpcHBlZCBvdmVyLgotICovCi1pbnQgYnRyZnNfZmRhdGF3cml0ZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LAotCQkJICAgbG9mZl90IGVuZCwgaW50IHN5bmNfbW9kZSkKLXsKLQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkuc3luY19tb2RlID0gc3luY19tb2RlLAotCQkubnJfdG9fd3JpdGUgPSBtYXBwaW5nLT5ucnBhZ2VzICogMiwKLQkJLnJhbmdlX3N0YXJ0ID0gc3RhcnQsCi0JCS5yYW5nZV9lbmQgPSBlbmQsCi0JfTsKLQlyZXR1cm4gYnRyZnNfd3JpdGVwYWdlcyhtYXBwaW5nLCAmd2JjKTsKLX0KLQotLyoqCi0gKiB0YWtlbiBmcm9tIG1tL2ZpbGVtYXAuYyBiZWNhdXNlIGl0IGlzbid0IGV4cG9ydGVkCi0gKgotICogd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZSAtIHdhaXQgZm9yIHdyaXRlYmFjayB0byBjb21wbGV0ZQotICogQG1hcHBpbmc6CXRhcmdldCBhZGRyZXNzX3NwYWNlCi0gKiBAc3RhcnQ6CWJlZ2lubmluZyBwYWdlIGluZGV4Ci0gKiBAZW5kOgllbmRpbmcgcGFnZSBpbmRleAotICoKLSAqIFdhaXQgZm9yIHdyaXRlYmFjayB0byBjb21wbGV0ZSBhZ2FpbnN0IHBhZ2VzIGluZGV4ZWQgYnkgc3RhcnQtPmVuZAotICogaW5jbHVzaXZlCi0gKi8KLWludCBidHJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCSAgICAgICBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCkKLXsKLQlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwotCWludCBucl9wYWdlczsKLQlpbnQgcmV0ID0gMDsKLQlwZ29mZl90IGluZGV4OwotCi0JaWYgKGVuZCA8IHN0YXJ0KQotCQlyZXR1cm4gMDsKLQotCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7Ci0JaW5kZXggPSBzdGFydDsKLQl3aGlsZSAoKGluZGV4IDw9IGVuZCkgJiYKLQkJCShucl9wYWdlcyA9IHBhZ2V2ZWNfbG9va3VwX3RhZygmcHZlYywgbWFwcGluZywgJmluZGV4LAotCQkJUEFHRUNBQ0hFX1RBR19XUklURUJBQ0ssCi0JCQltaW4oZW5kIC0gaW5kZXgsIChwZ29mZl90KVBBR0VWRUNfU0laRS0xKSArIDEpKSAhPSAwKSB7Ci0JCXVuc2lnbmVkIGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKLQotCQkJLyogdW50aWwgcmFkaXggdHJlZSBsb29rdXAgYWNjZXB0cyBlbmRfaW5kZXggKi8KLQkJCWlmIChwYWdlLT5pbmRleCA+IGVuZCkKLQkJCQljb250aW51ZTsKLQotCQkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKLQkJCWlmIChQYWdlRXJyb3IocGFnZSkpCi0JCQkJcmV0ID0gLUVJTzsKLQkJfQotCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0KLQkvKiBDaGVjayBmb3Igb3V0c3RhbmRpbmcgd3JpdGUgZXJyb3JzICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBU19FTk9TUEMsICZtYXBwaW5nLT5mbGFncykpCi0JCXJldCA9IC1FTk9TUEM7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBU19FSU8sICZtYXBwaW5nLT5mbGFncykpCi0JCXJldCA9IC1FSU87Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogYWRkIGEgZ2l2ZW4gaW5vZGUgdG8gdGhlIGxpc3Qgb2YgaW5vZGVzIHRoYXQgbXVzdCBiZSBmdWxseSBvbgogICogZGlzayBiZWZvcmUgYSB0cmFuc2FjdGlvbiBjb21taXQgZmluaXNoZXMuCmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuaCBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCmluZGV4IDk5M2E3ZWEuLmY4MmU4NzQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCkBAIC0xNTMsMTAgKzE1Myw2IEBACiBpbnQgYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkKTsKIGludCBidHJmc19maW5kX29yZGVyZWRfc3VtKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBvZmZzZXQsIHU2NCBkaXNrX2J5dGVuciwgdTMyICpzdW0pOwotaW50IGJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICAgICAgIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kKTsKLWludCBidHJmc19mZGF0YXdyaXRlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsCi0JCQkgICBsb2ZmX3QgZW5kLCBpbnQgc3luY19tb2RlKTsKIGludCBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG5vY293X29ubHkpOwogaW50IGJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCB3YWl0KTsKIGludCBidHJmc19hZGRfb3JkZXJlZF9vcGVyYXRpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKaW5kZXggMzYxYWQzMi4uY2ZjYzkzYyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwpAQCAtMzUxOCw3ICszNTE4LDcgQEAKIAlCVUdfT04oIXJjLT5ibG9ja19ncm91cCk7CiAKIAlidHJmc19pbml0X3dvcmtlcnMoJnJjLT53b3JrZXJzLCAicmVsb2NhdGUiLAotCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSk7CisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLCBOVUxMKTsKIAogCXJjLT5leHRlbnRfcm9vdCA9IGV4dGVudF9yb290OwogCWJ0cmZzX3ByZXBhcmVfYmxvY2tfZ3JvdXBfcmVsb2NhdGlvbihleHRlbnRfcm9vdCwgcmMtPmJsb2NrX2dyb3VwKTsKQEAgLTM3MDEsNyArMzcwMSw3IEBACiAJbWFwcGluZ190cmVlX2luaXQoJnJjLT5yZWxvY19yb290X3RyZWUpOwogCUlOSVRfTElTVF9IRUFEKCZyYy0+cmVsb2Nfcm9vdHMpOwogCWJ0cmZzX2luaXRfd29ya2VycygmcmMtPndvcmtlcnMsICJyZWxvY2F0ZSIsCi0JCQkgICByb290LT5mc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIHJvb3QtPmZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsIE5VTEwpOwogCXJjLT5leHRlbnRfcm9vdCA9IHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290OwogCiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcm9vdC10cmVlLmMgYi9mcy9idHJmcy9yb290LXRyZWUuYwppbmRleCA5MzUxNDI4Li42N2ZhMmQyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yb290LXRyZWUuYworKysgYi9mcy9idHJmcy9yb290LXRyZWUuYwpAQCAtMTU5LDcgKzE1OSw2IEBACiAJd3JpdGVfZXh0ZW50X2J1ZmZlcihsLCBpdGVtLCBwdHIsIHNpemVvZigqaXRlbSkpOwogCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHBhdGgtPm5vZGVzWzBdKTsKIG91dDoKLQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zMzIsNyArMzMxLDYgQEAKIAlCVUdfT04ocmVmcyAhPSAwKTsKIAlyZXQgPSBidHJmc19kZWxfaXRlbSh0cmFucywgcm9vdCwgcGF0aCk7CiBvdXQ6Ci0JYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggNjcwMzUzOC4uNzUyYTU0NiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC02Niw3ICs2Niw4IEBACiAJT3B0X2RlZ3JhZGVkLCBPcHRfc3Vidm9sLCBPcHRfZGV2aWNlLCBPcHRfbm9kYXRhc3VtLCBPcHRfbm9kYXRhY293LAogCU9wdF9tYXhfZXh0ZW50LCBPcHRfbWF4X2lubGluZSwgT3B0X2FsbG9jX3N0YXJ0LCBPcHRfbm9iYXJyaWVyLAogCU9wdF9zc2QsIE9wdF9ub3NzZCwgT3B0X3NzZF9zcHJlYWQsIE9wdF90aHJlYWRfcG9vbCwgT3B0X25vYWNsLAotCU9wdF9jb21wcmVzcywgT3B0X25vdHJlZWxvZywgT3B0X3JhdGlvLCBPcHRfZmx1c2hvbmNvbW1pdCwgT3B0X2VyciwKKwlPcHRfY29tcHJlc3MsIE9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsCisJT3B0X2Rpc2NhcmQsIE9wdF9lcnIsCiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC04OCw2ICs4OSw3IEBACiAJe09wdF9ub3RyZWVsb2csICJub3RyZWVsb2cifSwKIAl7T3B0X2ZsdXNob25jb21taXQsICJmbHVzaG9uY29tbWl0In0sCiAJe09wdF9yYXRpbywgIm1ldGFkYXRhX3JhdGlvPSVkIn0sCisJe09wdF9kaXNjYXJkLCAiZGlzY2FyZCJ9LAogCXtPcHRfZXJyLCBOVUxMfSwKIH07CiAKQEAgLTI1Nyw2ICsyNTksOSBAQAogCQkJCSAgICAgICBpbmZvLT5tZXRhZGF0YV9yYXRpbyk7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZGlzY2FyZDoKKwkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBESVNDQVJEKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KQEAgLTM0NCw3ICszNDksOSBAQAogCXNiLT5zX2V4cG9ydF9vcCA9ICZidHJmc19leHBvcnRfb3BzOwogCXNiLT5zX3hhdHRyID0gYnRyZnNfeGF0dHJfaGFuZGxlcnM7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKKyNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCiAJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisjZW5kaWYKIAogCXRyZWVfcm9vdCA9IG9wZW5fY3RyZWUoc2IsIGZzX2RldmljZXMsIChjaGFyICopZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IDg4Zjg2NmYuLmMyMDdlOGMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMTYzLDggKzE2MywxNCBAQAogCX0KIH0KIAorZW51bSBidHJmc190cmFuc190eXBlIHsKKwlUUkFOU19TVEFSVCwKKwlUUkFOU19KT0lOLAorCVRSQU5TX1VTRVJTUEFDRSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpzdGFydF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJICAgICBpbnQgbnVtX2Jsb2NrcywgaW50IHdhaXQpCisJCQkJCSAgICAgaW50IG51bV9ibG9ja3MsIGludCB0eXBlKQogewogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmggPQogCQlrbWVtX2NhY2hlX2FsbG9jKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIEdGUF9OT0ZTKTsKQEAgLTE3Miw3ICsxNzgsOCBAQAogCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWlmICghcm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfcmVjb3ZlcmluZyAmJgotCSAgICAoKHdhaXQgPT0gMSAmJiAhcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucykgfHwgd2FpdCA9PSAyKSkKKwkgICAgKCh0eXBlID09IFRSQU5TX1NUQVJUICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB8fAorCSAgICAgdHlwZSA9PSBUUkFOU19VU0VSU1BBQ0UpKQogCQl3YWl0X2N1cnJlbnRfdHJhbnMocm9vdCk7CiAJcmV0ID0gam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlCVUdfT04ocmV0KTsKQEAgLTE4Niw2ICsxOTMsOSBAQAogCWgtPmFsbG9jX2V4Y2x1ZGVfc3RhcnQgPSAwOwogCWgtPmRlbGF5ZWRfcmVmX3VwZGF0ZXMgPSAwOwogCisJaWYgKCFjdXJyZW50LT5qb3VybmFsX2luZm8gJiYgdHlwZSAhPSBUUkFOU19VU0VSU1BBQ0UpCisJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IGg7CisKIAlyb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uLT51c2VfY291bnQrKzsKIAlyZWNvcmRfcm9vdF9pbl90cmFucyhoLCByb290KTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKQEAgLTE5NSwxOCArMjA1LDE4IEBACiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19zdGFydF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkJCSAgIGludCBudW1fYmxvY2tzKQogewotCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1fYmxvY2tzLCAxKTsKKwlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgbnVtX2Jsb2NrcywgVFJBTlNfU1RBUlQpOwogfQogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfam9pbl90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkJCSAgIGludCBudW1fYmxvY2tzKQogewotCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1fYmxvY2tzLCAwKTsKKwlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgbnVtX2Jsb2NrcywgVFJBTlNfSk9JTik7CiB9CiAKIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X2lvY3RsX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyLAogCQkJCQkJCSBpbnQgbnVtX2Jsb2NrcykKIHsKLQlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ociwgbnVtX2Jsb2NrcywgMik7CisJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHIsIG51bV9ibG9ja3MsIFRSQU5TX1VTRVJTUEFDRSk7CiB9CiAKIC8qIHdhaXQgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IHRvIGJlIGZ1bGx5IGNvbXBsZXRlICovCkBAIC0zMTcsNiArMzI3LDkgQEAKIAkJd2FrZV91cCgmY3VyX3RyYW5zLT53cml0ZXJfd2FpdCk7CiAJcHV0X3RyYW5zYWN0aW9uKGN1cl90cmFucyk7CiAJbXV0ZXhfdW5sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CisKKwlpZiAoY3VycmVudC0+am91cm5hbF9pbmZvID09IHRyYW5zKQorCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOwogCW1lbXNldCh0cmFucywgMCwgc2l6ZW9mKCp0cmFucykpOwogCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCB0cmFucyk7CiAKQEAgLTMzOCwxMCArMzUxLDEwIEBACiAvKgogICogd2hlbiBidHJlZSBibG9ja3MgYXJlIGFsbG9jYXRlZCwgdGhleSBoYXZlIHNvbWUgY29ycmVzcG9uZGluZyBiaXRzIHNldCBmb3IKICAqIHRoZW0gaW4gb25lIG9mIHR3byBleHRlbnRfaW8gdHJlZXMuICBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIGFsbCBvZgotICogdGhvc2UgZXh0ZW50cyBhcmUgb24gZGlzayBmb3IgdHJhbnNhY3Rpb24gb3IgbG9nIGNvbW1pdAorICogdGhvc2UgZXh0ZW50cyBhcmUgc2VudCB0byBkaXNrIGJ1dCBkb2VzIG5vdCB3YWl0IG9uIHRoZW0KICAqLwotaW50IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKQoraW50IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCiB7CiAJaW50IHJldDsKIAlpbnQgZXJyID0gMDsKQEAgLTM4OCw2ICs0MDEsMjkgQEAKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJfQogCX0KKwlpZiAoZXJyKQorCQl3ZXJyID0gZXJyOworCXJldHVybiB3ZXJyOworfQorCisvKgorICogd2hlbiBidHJlZSBibG9ja3MgYXJlIGFsbG9jYXRlZCwgdGhleSBoYXZlIHNvbWUgY29ycmVzcG9uZGluZyBiaXRzIHNldCBmb3IKKyAqIHRoZW0gaW4gb25lIG9mIHR3byBleHRlbnRfaW8gdHJlZXMuICBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIGFsbCBvZgorICogdGhvc2UgZXh0ZW50cyBhcmUgb24gZGlzayBmb3IgdHJhbnNhY3Rpb24gb3IgbG9nIGNvbW1pdC4gIFdlIHdhaXQKKyAqIG9uIGFsbCB0aGUgcGFnZXMgYW5kIGNsZWFyIHRoZW0gZnJvbSB0aGUgZGlydHkgcGFnZXMgc3RhdGUgdHJlZQorICovCitpbnQgYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgICAgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCit7CisJaW50IHJldDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgd2VyciA9IDA7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGlub2RlICpidHJlZV9pbm9kZSA9IHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlOworCXU2NCBzdGFydCA9IDA7CisJdTY0IGVuZDsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KGRpcnR5X3BhZ2VzLCAwLCAmc3RhcnQsICZlbmQsCiAJCQkJCSAgICBFWFRFTlRfRElSVFkpOwpAQCAtNDE4LDYgKzQ1NCwyMiBAQAogCXJldHVybiB3ZXJyOwogfQogCisvKgorICogd2hlbiBidHJlZSBibG9ja3MgYXJlIGFsbG9jYXRlZCwgdGhleSBoYXZlIHNvbWUgY29ycmVzcG9uZGluZyBiaXRzIHNldCBmb3IKKyAqIHRoZW0gaW4gb25lIG9mIHR3byBleHRlbnRfaW8gdHJlZXMuICBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIGFsbCBvZgorICogdGhvc2UgZXh0ZW50cyBhcmUgb24gZGlzayBmb3IgdHJhbnNhY3Rpb24gb3IgbG9nIGNvbW1pdAorICovCitpbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCit7CisJaW50IHJldDsKKwlpbnQgcmV0MjsKKworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzKTsKKwlyZXQyID0gYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhyb290LCBkaXJ0eV9wYWdlcyk7CisJcmV0dXJuIHJldCB8fCByZXQyOworfQorCiBpbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKQEAgLTc0Myw2ICs3OTUsNyBAQAogCW1lbWNweSgmcGVuZGluZy0+cm9vdF9rZXksICZrZXksIHNpemVvZihrZXkpKTsKIGZhaWw6CiAJa2ZyZWUobmV3X3Jvb3RfaXRlbSk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwNTksNiArMTExMiw5IEBACiAKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAorCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8gPT0gdHJhbnMpCisJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CisKIAlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfdHJhbnNfaGFuZGxlX2NhY2hlcCwgdHJhbnMpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5oIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaAppbmRleCA2NjNjNjc0Li5kNGUzZTdhIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5oCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKQEAgLTc5LDYgKzc5LDcgQEAKIAkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHRyYW5zLT50cmFuc2FjdGlvbi0+dHJhbnNpZDsKKwlCVFJGU19JKGlub2RlKS0+bGFzdF9zdWJfdHJhbnMgPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+bG9nX3RyYW5zaWQ7CiB9CiAKIGludCBidHJmc19lbmRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0xMDcsNSArMTA4LDkgQEAKIAkJCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CiBpbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOworaW50IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKTsKK2ludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKTsKIGludCBidHJmc190cmFuc2FjdGlvbl9pbl9jb21taXQoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5jIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwppbmRleCA3ODI3ODQxLi43NDE2NjZhIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5jCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKQEAgLTEzNywxMSArMTM3LDIwIEBACiAKIAltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCWlmIChyb290LT5sb2dfcm9vdCkgeworCQlpZiAoIXJvb3QtPmxvZ19zdGFydF9waWQpIHsKKwkJCXJvb3QtPmxvZ19zdGFydF9waWQgPSBjdXJyZW50LT5waWQ7CisJCQlyb290LT5sb2dfbXVsdGlwbGVfcGlkcyA9IGZhbHNlOworCQl9IGVsc2UgaWYgKHJvb3QtPmxvZ19zdGFydF9waWQgIT0gY3VycmVudC0+cGlkKSB7CisJCQlyb290LT5sb2dfbXVsdGlwbGVfcGlkcyA9IHRydWU7CisJCX0KKwogCQlyb290LT5sb2dfYmF0Y2grKzsKIAkJYXRvbWljX2luYygmcm9vdC0+bG9nX3dyaXRlcnMpOwogCQltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7CiAJCXJldHVybiAwOwogCX0KKwlyb290LT5sb2dfbXVsdGlwbGVfcGlkcyA9IGZhbHNlOworCXJvb3QtPmxvZ19zdGFydF9waWQgPSBjdXJyZW50LT5waWQ7CiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJlZV9sb2dfbXV0ZXgpOwogCWlmICghcm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfdHJlZSkgewogCQlyZXQgPSBidHJmc19pbml0X2xvZ19yb290X3RyZWUodHJhbnMsIHJvb3QtPmZzX2luZm8pOwpAQCAtMTk3MSw2ICsxOTgwLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBidHJmc19yb290ICpsb2cgPSByb290LT5sb2dfcm9vdDsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqbG9nX3Jvb3RfdHJlZSA9IHJvb3QtPmZzX2luZm8tPmxvZ19yb290X3RyZWU7CisJdTY0IGxvZ190cmFuc2lkID0gMDsKIAogCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CiAJaW5kZXgxID0gcm9vdC0+bG9nX3RyYW5zaWQgJSAyOwpAQCAtMTk4NywxMCArMTk5NywxMSBAQAogCiAJd2hpbGUgKDEpIHsKIAkJdW5zaWduZWQgbG9uZyBiYXRjaCA9IHJvb3QtPmxvZ19iYXRjaDsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKLQorCQlpZiAocm9vdC0+bG9nX211bHRpcGxlX3BpZHMpIHsKKwkJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCQkJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwkJfQogCQl3YWl0X2Zvcl93cml0ZXIodHJhbnMsIHJvb3QpOwogCQlpZiAoYmF0Y2ggPT0gcm9vdC0+bG9nX2JhdGNoKQogCQkJYnJlYWs7CkBAIC0yMDAzLDE0ICsyMDE0LDE5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKKwkvKiB3ZSBzdGFydCBJTyBvbiAgYWxsIHRoZSBtYXJrZWQgZXh0ZW50cyBoZXJlLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKwkgKiB3YWl0IGZvciB0aGVtIHVudGlsIGxhdGVyLgorCSAqLworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAlCVUdfT04ocmV0KTsKIAogCWJ0cmZzX3NldF9yb290X25vZGUoJmxvZy0+cm9vdF9pdGVtLCBsb2ctPm5vZGUpOwogCiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKKwlsb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ190cmFuc2lkKys7CiAJbG9nLT5sb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOworCXJvb3QtPmxvZ19zdGFydF9waWQgPSAwOwogCXNtcF9tYigpOwogCS8qCiAJICogbG9nIHRyZWUgaGFzIGJlZW4gZmx1c2hlZCB0byBkaXNrLCBuZXcgbW9kaWZpY2F0aW9ucyBvZgpAQCAtMjAzNiw2ICsyMDUyLDcgQEAKIAogCWluZGV4MiA9IGxvZ19yb290X3RyZWUtPmxvZ190cmFuc2lkICUgMjsKIAlpZiAoYXRvbWljX3JlYWQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSkpIHsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CiAJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKIAkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKQEAgLTIwNTUsNiArMjA3Miw3IEBACiAJICogY2hlY2sgdGhlIGZ1bGwgY29tbWl0IGZsYWcgYWdhaW4KIAkgKi8KIAlpZiAocm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgPT0gdHJhbnMtPnRyYW5zaWQpIHsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKIAkJcmV0ID0gLUVBR0FJTjsKIAkJZ290byBvdXRfd2FrZV9sb2dfcm9vdDsKQEAgLTIwNjMsNiArMjA4MSw3IEBACiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nX3Jvb3RfdHJlZSwKIAkJCQkmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzKTsKIAlCVUdfT04ocmV0KTsKKwlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAogCWJ0cmZzX3NldF9zdXBlcl9sb2dfcm9vdCgmcm9vdC0+ZnNfaW5mby0+c3VwZXJfZm9yX2NvbW1pdCwKIAkJCQlsb2dfcm9vdF90cmVlLT5ub2RlLT5zdGFydCk7CkBAIC0yMDgyLDkgKzIxMDEsMTQgQEAKIAkgKiB0aGUgcnVubmluZyB0cmFuc2FjdGlvbiBvcGVuLCBzbyBhIGZ1bGwgY29tbWl0IGNhbid0IGhvcAogCSAqIGluIGFuZCBjYXVzZSBwcm9ibGVtcyBlaXRoZXIuCiAJICovCi0Jd3JpdGVfY3RyZWVfc3VwZXIodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwgMik7CisJd3JpdGVfY3RyZWVfc3VwZXIodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwgMSk7CiAJcmV0ID0gMDsKIAorCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJaWYgKHJvb3QtPmxhc3RfbG9nX2NvbW1pdCA8IGxvZ190cmFuc2lkKQorCQlyb290LT5sYXN0X2xvZ19jb21taXQgPSBsb2dfdHJhbnNpZDsKKwltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7CisKIG91dF93YWtlX2xvZ19yb290OgogCWF0b21pY19zZXQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSwgMCk7CiAJc21wX21iKCk7CkBAIC0yODUyLDYgKzI4NzYsMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGlub2RlX2luX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJaWYgKEJUUkZTX0koaW5vZGUpLT5sb2dnZWRfdHJhbnMgPT0gdHJhbnMtPnRyYW5zaWQgJiYKKwkgICAgQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zIDw9IHJvb3QtPmxhc3RfbG9nX2NvbW1pdCkKKwkJcmV0ID0gMTsKKwltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCiAvKgogICogaGVscGVyIGZ1bmN0aW9uIGFyb3VuZCBidHJmc19sb2dfaW5vZGUgdG8gbWFrZSBzdXJlIG5ld2x5IGNyZWF0ZWQKICAqIHBhcmVudCBkaXJlY3RvcmllcyBhbHNvIGVuZCB1cCBpbiB0aGUgbG9nLiAgQSBtaW5pbWFsIGlub2RlIGFuZCBiYWNrcmVmCkBAIC0yODkxLDYgKzI5MzAsMTEgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVuZF9ub190cmFuczsKIAorCWlmIChpbm9kZV9pbl9sb2codHJhbnMsIGlub2RlKSkgeworCQlyZXQgPSBCVFJGU19OT19MT0dfU1lOQzsKKwkJZ290byBlbmRfbm9fdHJhbnM7CisJfQorCiAJc3RhcnRfbG9nX3RyYW5zKHRyYW5zLCByb290KTsKIAogCXJldCA9IGJ0cmZzX2xvZ19pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlX29ubHkpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuaCBiL2ZzL2J0cmZzL3RyZWUtbG9nLmgKaW5kZXggZDA5Yzc2MC4uMDc3NmVhYyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuaAorKysgYi9mcy9idHJmcy90cmVlLWxvZy5oCkBAIC0xOSw2ICsxOSw5IEBACiAjaWZuZGVmIF9fVFJFRV9MT0dfCiAjZGVmaW5lIF9fVFJFRV9MT0dfCiAKKy8qIHJldHVybiB2YWx1ZSBmb3IgYnRyZnNfbG9nX2RlbnRyeV9zYWZlIHRoYXQgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byBsb2cgaXQgYXQgYWxsICovCisjZGVmaW5lIEJUUkZTX05PX0xPR19TWU5DIDI1NgorCiBpbnQgYnRyZnNfc3luY19sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCSAgIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19mcmVlX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IDIzZTdkMzYuLjdlZGE0ODMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTQ0Niw4ICs0NDYsMTAgQEAKIAkJCWdvdG8gZXJyb3I7CiAKIAkJZGV2aWNlLT5uYW1lID0ga3N0cmR1cChvcmlnX2Rldi0+bmFtZSwgR0ZQX05PRlMpOwotCQlpZiAoIWRldmljZS0+bmFtZSkKKwkJaWYgKCFkZXZpY2UtPm5hbWUpIHsKKwkJCWtmcmVlKGRldmljZSk7CiAJCQlnb3RvIGVycm9yOworCQl9CiAKIAkJZGV2aWNlLT5kZXZpZCA9IG9yaWdfZGV2LT5kZXZpZDsKIAkJZGV2aWNlLT53b3JrLmZ1bmMgPSBwZW5kaW5nX2Jpb3NfZm47CmRpZmYgLS1naXQgYS9mcy9idHJmcy94YXR0ci5jIGIvZnMvYnRyZnMveGF0dHIuYwppbmRleCBhOWQzYmY0Li5iNmRkNTk2IDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5jCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogICogYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBkaXJlY3RseS4KICAqLwogc3RydWN0IHhhdHRyX2hhbmRsZXIgKmJ0cmZzX3hhdHRyX2hhbmRsZXJzW10gPSB7Ci0jaWZkZWYgQ09ORklHX0ZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAkmYnRyZnNfeGF0dHJfYWNsX2FjY2Vzc19oYW5kbGVyLAogCSZidHJmc194YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IDI0YWZkNzQuLjZmYTUzMDIgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC0yODAsNyArMjgwLDcgQEAKIEVYUE9SVF9TWU1CT0woaW52YWxpZGF0ZV9iZGV2KTsKIAogLyoKLSAqIEtpY2sgcGRmbHVzaCB0aGVuIHRyeSB0byBmcmVlIHVwIHNvbWUgWk9ORV9OT1JNQUwgbWVtb3J5LgorICogS2ljayB0aGUgd3JpdGViYWNrIHRocmVhZHMgdGhlbiB0cnkgdG8gZnJlZSB1cCBzb21lIFpPTkVfTk9STUFMIG1lbW9yeS4KICAqLwogc3RhdGljIHZvaWQgZnJlZV9tb3JlX21lbW9yeSh2b2lkKQogewpAQCAtMTcwOSw5ICsxNzA5LDkgQEAKIAkJLyoKIAkJICogSWYgaXQncyBhIGZ1bGx5IG5vbi1ibG9ja2luZyB3cml0ZSBhdHRlbXB0IGFuZCB3ZSBjYW5ub3QKIAkJICogbG9jayB0aGUgYnVmZmVyIHRoZW4gcmVkaXJ0eSB0aGUgcGFnZS4gIE5vdGUgdGhhdCB0aGlzIGNhbgotCQkgKiBwb3RlbnRpYWxseSBjYXVzZSBhIGJ1c3ktd2FpdCBsb29wIGZyb20gcGRmbHVzaCBhbmQga3N3YXBkCi0JCSAqIGFjdGl2aXR5LCBidXQgdGhvc2UgY29kZSBwYXRocyBoYXZlIHRoZWlyIG93biBoaWdoZXItbGV2ZWwKLQkJICogdGhyb3R0bGluZy4KKwkJICogcG90ZW50aWFsbHkgY2F1c2UgYSBidXN5LXdhaXQgbG9vcCBmcm9tIHdyaXRlYmFjayB0aHJlYWRzCisJCSAqIGFuZCBrc3dhcGQgYWN0aXZpdHksIGJ1dCB0aG9zZSBjb2RlIHBhdGhzIGhhdmUgdGhlaXIgb3duCisJCSAqIGhpZ2hlci1sZXZlbCB0aHJvdHRsaW5nLgogCQkgKi8KIAkJaWYgKHdiYy0+c3luY19tb2RlICE9IFdCX1NZTkNfTk9ORSB8fCAhd2JjLT5ub25ibG9ja2luZykgewogCQkJbG9ja19idWZmZXIoYmgpOwpAQCAtMzIwOCw3ICszMjA4LDcgQEAKICAqIHN0aWxsIHJ1bm5pbmcgb2Jzb2xldGUgZmx1c2ggZGFlbW9ucywgc28gd2UgdGVybWluYXRlIHRoZW0gaGVyZS4KICAqCiAgKiBVc2Ugb2YgYmRmbHVzaCgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwuCi0gKiBUaGUgYHBkZmx1c2gnIGtlcm5lbCB0aHJlYWRzIGZ1bGx5IHJlcGxhY2UgYmRmbHVzaCBkYWVtb25zIGFuZCB0aGlzIGNhbGwuCisgKiBUaGUgYGZsdXNoLVgnIGtlcm5lbCB0aHJlYWRzIGZ1bGx5IHJlcGxhY2UgYmRmbHVzaCBkYWVtb25zIGFuZCB0aGlzIGNhbGwuCiAgKi8KIFNZU0NBTExfREVGSU5FMihiZGZsdXNoLCBpbnQsIGZ1bmMsIGxvbmcsIGRhdGEpCiB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKaW5kZXggNjk5NGEwZi4uODBmMzUyNSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9LY29uZmlnCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAl0cmlzdGF0ZSAiQ0lGUyBzdXBwb3J0IChhZHZhbmNlZCBuZXR3b3JrIGZpbGVzeXN0ZW0sIFNNQkZTIHN1Y2Nlc3NvcikiCiAJZGVwZW5kcyBvbiBJTkVUCiAJc2VsZWN0IE5MUworCXNlbGVjdCBTTE9XX1dPUksKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQogCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCA5MGM1YjM5Li45YTVlNGY1IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTY0LDkgKzY0LDYgQEAKIHVuc2lnbmVkIGludCBleHRlbmRlZF9zZWN1cml0eSA9IENJRlNTRUNfREVGOwogLyogdW5zaWduZWQgaW50IG50bG12Ml9zdXBwb3J0ID0gMDsgKi8KIHVuc2lnbmVkIGludCBzaWduX0NJRlNfUERVcyA9IDE7Ci1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpvcGxvY2tUaHJlYWQ7IC8qIHJlbW92ZSBzcGFyc2Ugd2FybmluZyAqLwotc3RydWN0IHRhc2tfc3RydWN0ICpvcGxvY2tUaHJlYWQgPSBOVUxMOwotLyogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGRub3RpZnlUaHJlYWQ7IHJlbW92ZSBzcGFyc2Ugd2FybmluZyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNpZnNfc3VwZXJfb3BzOwogdW5zaWduZWQgaW50IENJRlNNYXhCdWZTaXplID0gQ0lGU19NQVhfTVNHU0laRTsKIG1vZHVsZV9wYXJhbShDSUZTTWF4QnVmU2l6ZSwgaW50LCAwKTsKQEAgLTk3Miw4OSArOTY5LDEyIEBACiAJa21lbV9jYWNoZV9kZXN0cm95KGNpZnNfb3Bsb2NrX2NhY2hlcCk7CiB9CiAKLXN0YXRpYyBpbnQgY2lmc19vcGxvY2tfdGhyZWFkKHZvaWQgKmR1bW15YXJnKQotewotCXN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqb3Bsb2NrX2l0ZW07Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlfX3UxNiAgbmV0ZmlkOwotCWludCByYywgd2FpdHJjID0gMDsKLQotCXNldF9mcmVlemFibGUoKTsKLQlkbyB7Ci0JCWlmICh0cnlfdG9fZnJlZXplKCkpCi0JCQljb250aW51ZTsKLQotCQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCQlpZiAobGlzdF9lbXB0eSgmY2lmc19vcGxvY2tfbGlzdCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0KDM5KkhaKTsKLQkJfSBlbHNlIHsKLQkJCW9wbG9ja19pdGVtID0gbGlzdF9lbnRyeShjaWZzX29wbG9ja19saXN0Lm5leHQsCi0JCQkJCQlzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnksIHFoZWFkKTsKLQkJCWNGWUkoMSwgKCJmb3VuZCBvcGxvY2sgaXRlbSB0byB3cml0ZSBvdXQiKSk7Ci0JCQlwVGNvbiA9IG9wbG9ja19pdGVtLT50Y29uOwotCQkJaW5vZGUgPSBvcGxvY2tfaXRlbS0+cGlub2RlOwotCQkJbmV0ZmlkID0gb3Bsb2NrX2l0ZW0tPm5ldGZpZDsKLQkJCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQkJCURlbGV0ZU9wbG9ja1FFbnRyeShvcGxvY2tfaXRlbSk7Ci0JCQkvKiBjYW4gbm90IGdyYWIgaW5vZGUgc2VtIGhlcmUgc2luY2UgaXQgd291bGQKLQkJCQlkZWFkbG9jayB3aGVuIG9wbG9jayByZWNlaXZlZCBvbiBkZWxldGUKLQkJCQlzaW5jZSB2ZnNfdW5saW5rIGhvbGRzIHRoZSBpX211dGV4IGFjcm9zcwotCQkJCXRoZSBjYWxsICovCi0JCQkvKiBtdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ki8KLQkJCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCi0JCQkJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlQWxsID09IDApCi0JCQkJCWJyZWFrX2xlYXNlKGlub2RlLCBGTU9ERV9SRUFEKTsKLQkJCQllbHNlIGlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkKLQkJCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1dSSVRFKTsKLSNlbmRpZgotCQkJCXJjID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwotCQkJCWlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkgewotCQkJCQl3YWl0cmMgPSBmaWxlbWFwX2ZkYXRhd2FpdCgKLQkJCQkJCQkgICAgICBpbm9kZS0+aV9tYXBwaW5nKTsKLQkJCQkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoaW5vZGUpOwotCQkJCX0KLQkJCQlpZiAocmMgPT0gMCkKLQkJCQkJcmMgPSB3YWl0cmM7Ci0JCQl9IGVsc2UKLQkJCQlyYyA9IDA7Ci0JCQkvKiBtdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsqLwotCQkJaWYgKHJjKQotCQkJCUNJRlNfSShpbm9kZSktPndyaXRlX2JlaGluZF9yYyA9IHJjOwotCQkJY0ZZSSgxLCAoIk9wbG9jayBmbHVzaCBpbm9kZSAlcCByYyAlZCIsCi0JCQkJaW5vZGUsIHJjKSk7Ci0KLQkJCQkvKiByZWxlYXNpbmcgc3RhbGUgb3Bsb2NrIGFmdGVyIHJlY2VudCByZWNvbm5lY3QKLQkJCQlvZiBzbWIgc2Vzc2lvbiB1c2luZyBhIG5vdyBpbmNvcnJlY3QgZmlsZQotCQkJCWhhbmRsZSBpcyBub3QgYSBkYXRhIGludGVncml0eSBpc3N1ZSBidXQgZG8KLQkJCQlub3QgYm90aGVyIHNlbmRpbmcgYW4gb3Bsb2NrIHJlbGVhc2UgaWYgc2Vzc2lvbgotCQkJCXRvIHNlcnZlciBzdGlsbCBpcyBkaXNjb25uZWN0ZWQgc2luY2Ugb3Bsb2NrCi0JCQkJYWxyZWFkeSByZWxlYXNlZCBieSB0aGUgc2VydmVyIGluIHRoYXQgY2FzZSAqLwotCQkJaWYgKCFwVGNvbi0+bmVlZF9yZWNvbm5lY3QpIHsKLQkJCQlyYyA9IENJRlNTTUJMb2NrKDAsIHBUY29uLCBuZXRmaWQsCi0JCQkJCQkwIC8qIGxlbiAqLyAsIDAgLyogb2Zmc2V0ICovLCAwLAotCQkJCQkJMCwgTE9DS0lOR19BTkRYX09QTE9DS19SRUxFQVNFLAotCQkJCQkJZmFsc2UgLyogd2FpdCBmbGFnICovKTsKLQkJCQljRllJKDEsICgiT3Bsb2NrIHJlbGVhc2UgcmMgPSAlZCIsIHJjKSk7Ci0JCQl9Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJc2NoZWR1bGVfdGltZW91dCgxKTsgIC8qIHlpZWxkIGluIGNhc2UgcSB3ZXJlIGNvcnJ1cHQgKi8KLQkJfQotCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0CiBpbml0X2NpZnModm9pZCkKIHsKIAlpbnQgcmMgPSAwOwogCWNpZnNfcHJvY19pbml0KCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNpZnNfdGNwX3Nlc19saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmY2lmc19vcGxvY2tfbGlzdCk7CiAjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiAJSU5JVF9MSVNUX0hFQUQoJkdsb2JhbERub3RpZnlSZXFMaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmR2xvYmFsRG5vdGlmeVJzcF9RKTsKQEAgLTEwODMsNyArMTAwMyw2IEBACiAJcndsb2NrX2luaXQoJkdsb2JhbFNNQlNlc2xvY2spOwogCXJ3bG9ja19pbml0KCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJkdsb2JhbE1pZF9Mb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmY2lmc19vcGxvY2tfbG9jayk7CiAKIAlpZiAoY2lmc19tYXhfcGVuZGluZyA8IDIpIHsKIAkJY2lmc19tYXhfcGVuZGluZyA9IDI7CkBAIC0xMTE4LDE2ICsxMDM3LDEzIEBACiAJaWYgKHJjKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX2tleV90eXBlOwogI2VuZGlmCi0Jb3Bsb2NrVGhyZWFkID0ga3RocmVhZF9ydW4oY2lmc19vcGxvY2tfdGhyZWFkLCBOVUxMLCAiY2lmc29wbG9ja2QiKTsKLQlpZiAoSVNfRVJSKG9wbG9ja1RocmVhZCkpIHsKLQkJcmMgPSBQVFJfRVJSKG9wbG9ja1RocmVhZCk7Ci0JCWNFUlJPUigxLCAoImVycm9yICVkIGNyZWF0ZSBvcGxvY2sgdGhyZWFkIiwgcmMpKTsKLQkJZ290byBvdXRfdW5yZWdpc3Rlcl9kZnNfa2V5X3R5cGU7Ci0JfQorCXJjID0gc2xvd193b3JrX3JlZ2lzdGVyX3VzZXIoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcmVzb2x2ZXJfa2V5OwogCiAJcmV0dXJuIDA7CiAKLSBvdXRfdW5yZWdpc3Rlcl9kZnNfa2V5X3R5cGU6Cisgb3V0X3VucmVnaXN0ZXJfcmVzb2x2ZXJfa2V5OgogI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKIAl1bnJlZ2lzdGVyX2tleV90eXBlKCZrZXlfdHlwZV9kbnNfcmVzb2x2ZXIpOwogIG91dF91bnJlZ2lzdGVyX2tleV90eXBlOgpAQCAtMTE2NCw3ICsxMDgwLDYgQEAKIAljaWZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOwogCWNpZnNfZGVzdHJveV9taWRzKCk7CiAJY2lmc19kZXN0cm95X3JlcXVlc3RfYnVmcygpOwotCWt0aHJlYWRfc3RvcChvcGxvY2tUaHJlYWQpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJTdGV2ZSBGcmVuY2ggPHNmcmVuY2hAdXMuaWJtLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCA2Y2ZjODFhLi41ZDBmZGUxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgogI2luY2x1ZGUgImNpZnNfZnNfc2IuaCIKICNpbmNsdWRlICJjaWZzYWNsLmgiCiAvKgpAQCAtMzQ2LDE0ICszNDcsMTYgQEAKIAkvKiBsb2NrIHNjb3BlIGlkICgwIGlmIG5vbmUpICovCiAJc3RydWN0IGZpbGUgKnBmaWxlOyAvKiBuZWVkZWQgZm9yIHdyaXRlcGFnZSAqLwogCXN0cnVjdCBpbm9kZSAqcElub2RlOyAvKiBuZWVkZWQgZm9yIG9wbG9jayBicmVhayAqLworCXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCXN0cnVjdCBtdXRleCBsb2NrX211dGV4OwogCXN0cnVjdCBsaXN0X2hlYWQgbGxpc3Q7IC8qIGxpc3Qgb2YgYnl0ZSByYW5nZSBsb2NrcyB3ZSBoYXZlLiAqLwogCWJvb2wgY2xvc2VQZW5kOjE7CS8qIGZpbGUgaXMgbWFya2VkIHRvIGNsb3NlICovCiAJYm9vbCBpbnZhbGlkSGFuZGxlOjE7CS8qIGZpbGUgY2xvc2VkIHZpYSBzZXNzaW9uIGFiZW5kICovCi0JYm9vbCBtZXNzYWdlTW9kZToxOwkvKiBmb3IgcGlwZXM6IG1lc3NhZ2UgdnMgYnl0ZSBtb2RlICovCisJYm9vbCBvcGxvY2tfYnJlYWtfY2FuY2VsbGVkOjE7CiAJYXRvbWljX3QgY291bnQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KIAlzdHJ1Y3QgbXV0ZXggZmhfbXV0ZXg7IC8qIHByZXZlbnRzIHJlb3BlbiByYWNlIGFmdGVyIGRlYWQgc2VzKi8KIAlzdHJ1Y3QgY2lmc19zZWFyY2hfaW5mbyBzcmNoX2luZjsKKwlzdHJ1Y3Qgc2xvd193b3JrIG9wbG9ja19icmVhazsgLyogc2xvd193b3JrIGpvYiBmb3Igb3Bsb2NrIGJyZWFrcyAqLwogfTsKIAogLyogVGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgZmlsZSBwcml2YXRlIGRhdGEgKi8KQEAgLTM2NSw4ICszNjgsMTAgQEAKIC8qIFJlbGVhc2UgYSByZWZlcmVuY2Ugb24gdGhlIGZpbGUgcHJpdmF0ZSBkYXRhICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2lmc0ZpbGVJbmZvX3B1dChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjaWZzX2ZpbGUpCiB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNpZnNfZmlsZS0+Y291bnQpKQorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjaWZzX2ZpbGUtPmNvdW50KSkgeworCQlpcHV0KGNpZnNfZmlsZS0+cElub2RlKTsKIAkJa2ZyZWUoY2lmc19maWxlKTsKKwl9CiB9CiAKIC8qCkBAIC0zODIsNyArMzg3LDYgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWU7CS8qIGppZmZpZXMgb2YgbGFzdCB1cGRhdGUvY2hlY2sgb2YgaW5vZGUgKi8KIAlib29sIGNsaWVudENhbkNhY2hlUmVhZDoxOwkvKiByZWFkIG9wbG9jayAqLwogCWJvb2wgY2xpZW50Q2FuQ2FjaGVBbGw6MTsJLyogcmVhZCBhbmQgd3JpdGViZWhpbmQgb3Bsb2NrICovCi0JYm9vbCBvcGxvY2tQZW5kaW5nOjE7CiAJYm9vbCBkZWxldGVfcGVuZGluZzoxOwkJLyogREVMRVRFX09OX0NMT1NFIGlzIHNldCAqLwogCXU2NCAgc2VydmVyX2VvZjsJCS8qIGN1cnJlbnQgZmlsZSBzaXplIG9uIHNlcnZlciAqLwogCXU2NCAgdW5pcXVlaWQ7CQkJLyogc2VydmVyIGlub2RlIG51bWJlciAqLwpAQCAtNTg1LDkgKzU4OSw5IEBACiAjZGVmaW5lICAgQ0lGU1NFQ19NVVNUX0xBTk1BTgkweDEwMDEwCiAjZGVmaW5lICAgQ0lGU1NFQ19NVVNUX1BMTlRYVAkweDIwMDIwCiAjaWZkZWYgQ09ORklHX0NJRlNfVVBDQUxMCi0jZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QUYwQUYgLyogYWxsb3dzIHdlYWsgc2VjdXJpdHkgYnV0IGFsc28ga3JiNSAqLworI2RlZmluZSAgIENJRlNTRUNfTUFTSyAgICAgICAgICAweEJGMEJGIC8qIGFsbG93cyB3ZWFrIHNlY3VyaXR5IGJ1dCBhbHNvIGtyYjUgKi8KICNlbHNlCi0jZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QTcwQTcgLyogY3VycmVudCBmbGFncyBzdXBwb3J0ZWQgaWYgd2VhayAqLworI2RlZmluZSAgIENJRlNTRUNfTUFTSyAgICAgICAgICAweEI3MEI3IC8qIGN1cnJlbnQgZmxhZ3Mgc3VwcG9ydGVkIGlmIHdlYWsgKi8KICNlbmRpZiAvKiBVUENBTEwgKi8KICNlbHNlIC8qIGRvIG5vdCBhbGxvdyB3ZWFrIHB3IGhhc2ggKi8KICNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKQEAgLTY2OSwxMiArNjczLDYgQEAKICAqLwogR0xPQkFMX0VYVEVSTiByd2xvY2tfdCBHbG9iYWxTTUJTZXNsb2NrOwogCi0vKiBHbG9iYWwgbGlzdCBvZiBvcGxvY2tzICovCi1HTE9CQUxfRVhURVJOIHN0cnVjdCBsaXN0X2hlYWQgY2lmc19vcGxvY2tfbGlzdDsKLQotLyogUHJvdGVjdHMgdGhlIGNpZnNfb3Bsb2NrX2xpc3QgKi8KLUdMT0JBTF9FWFRFUk4gc3BpbmxvY2tfdCBjaWZzX29wbG9ja19sb2NrOwotCiAvKiBPdXRzdGFuZGluZyBkaXIgbm90aWZ5IHJlcXVlc3RzICovCiBHTE9CQUxfRVhURVJOIHN0cnVjdCBsaXN0X2hlYWQgR2xvYmFsRG5vdGlmeVJlcUxpc3Q7CiAvKiBEaXJOb3RpZnkgcmVzcG9uc2UgcXVldWUgKi8KQEAgLTcyNSwzICs3MjMsNCBAQAogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgY2lmc19taW5fc21hbGw7ICAvKiBtaW4gc2l6ZSBvZiBzbWFsbCBidWYgcG9vbCAqLwogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgY2lmc19tYXhfcGVuZGluZzsgLyogTUFYIHJlcXVlc3RzIGF0IG9uY2UgdG8gc2VydmVyKi8KIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGNpZnNfb3Bsb2NrX2JyZWFrX29wczsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IGRhOGZiZjUuLjU2NDY3MjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtODYsMTggKzg2LDE3IEBACiAJCQkgICAgIGNvbnN0IGludCBzdGFnZSwKIAkJCSAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NwKTsKIGV4dGVybiBfX3UxNiBHZXROZXh0TWlkKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcik7Ci1leHRlcm4gc3RydWN0IG9wbG9ja19xX2VudHJ5ICpBbGxvY09wbG9ja1FFbnRyeShzdHJ1Y3QgaW5vZGUgKiwgdTE2LAotCQkJCQkJIHN0cnVjdCBjaWZzVGNvbkluZm8gKik7Ci1leHRlcm4gdm9pZCBEZWxldGVPcGxvY2tRRW50cnkoc3RydWN0IG9wbG9ja19xX2VudHJ5ICopOwotZXh0ZXJuIHZvaWQgRGVsZXRlVGNvbk9wbG9ja1FFbnRyaWVzKHN0cnVjdCBjaWZzVGNvbkluZm8gKik7CiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIGNpZnNfTlR0aW1lVG9Vbml4KF9fbGU2NCB1dGNfbmFub3NlY29uZHNfc2luY2VfMTYwMSk7CiBleHRlcm4gdTY0IGNpZnNfVW5peFRpbWVUb05UKHN0cnVjdCB0aW1lc3BlYyk7CiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIGNudnJ0RG9zVW5peFRtKF9fbGUxNiBsZV9kYXRlLCBfX2xlMTYgbGVfdGltZSwKIAkJCQkgICAgICBpbnQgb2Zmc2V0KTsKIAorZXh0ZXJuIHN0cnVjdCBjaWZzRmlsZUluZm8gKmNpZnNfbmV3X2ZpbGVpbmZvKHN0cnVjdCBpbm9kZSAqbmV3aW5vZGUsCisJCQkJX191MTYgZmlsZUhhbmRsZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJc3RydWN0IHZmc21vdW50ICptbnQsIHVuc2lnbmVkIGludCBvZmxhZ3MpOwogZXh0ZXJuIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCi0JCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKLQkJCSAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOworCQkJICAgc3RydWN0IHZmc21vdW50ICptbnQsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAorCQkJICAgX191MzIgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKTsKIGV4dGVybiB2b2lkIGNpZnNfdW5peF9iYXNpY190b19mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsCiAJCQkJICAgICBGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mbywKIAkJCQkgICAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwpAQCAtMzg5LDQgKzM4OCw1IEBACiAJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwogZXh0ZXJuIGludCBDSUZTR2V0RXh0QXR0cihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgaW50IG5ldGZpZCwgX191NjQgKnBFeHRBdHRyQml0cywgX191NjQgKnBNYXNrKTsKK2V4dGVybiB2b2lkIGNpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwogI2VuZGlmCQkJLyogX0NJRlNQUk9UT19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDMwMWUzMDcuLjk0MTQ0MWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC05NCw2ICs5NCw3IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMSwgJnBUY29uLT5vcGVuRmlsZUxpc3QpIHsKIAkJb3Blbl9maWxlID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzRmlsZUluZm8sIHRsaXN0KTsKIAkJb3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlID0gdHJ1ZTsKKwkJb3Blbl9maWxlLT5vcGxvY2tfYnJlYWtfY2FuY2VsbGVkID0gdHJ1ZTsKIAl9CiAJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkvKiBCQiBBZGQgY2FsbCB0byBpbnZhbGlkYXRlX2lub2RlcyhzYikgZm9yIGFsbCBzdXBlcmJsb2NrcyBtb3VudGVkCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGQ0OTY4MjQuLjYzZWE4M2YgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0xNTc3LDcgKzE1NzcsOCBAQAogCiBvdXRfZXJyOgogCWlmICh0Y3Bfc2VzKSB7Ci0JCWtmcmVlKHRjcF9zZXMtPmhvc3RuYW1lKTsKKwkJaWYgKCFJU19FUlIodGNwX3Nlcy0+aG9zdG5hbWUpKQorCQkJa2ZyZWUodGNwX3Nlcy0+aG9zdG5hbWUpOwogCQlpZiAodGNwX3Nlcy0+c3NvY2tldCkKIAkJCXNvY2tfcmVsZWFzZSh0Y3Bfc2VzLT5zc29ja2V0KTsKIAkJa2ZyZWUodGNwX3Nlcyk7CkBAIC0xNjcwLDcgKzE2NzEsNiBAQAogCUNJRlNTTUJURGlzKHhpZCwgdGNvbik7CiAJX0ZyZWVYaWQoeGlkKTsKIAotCURlbGV0ZVRjb25PcGxvY2tRRW50cmllcyh0Y29uKTsKIAl0Y29uSW5mb0ZyZWUodGNvbik7CiAJY2lmc19wdXRfc21iX3NlcyhzZXMpOwogfQpAQCAtMjIyMCwxNiArMjIyMCw4IEBACiAJCSAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsIGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCkKIHsKIAlpbnQgcmM7Ci0JX191NjQgaW5vZGVfbnVtOwogCUZJTEVfQUxMX0lORk8gKnBmaWxlX2luZm87CiAKLQlyYyA9IENJRlNHZXRTcnZJbm9kZU51bWJlcih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgJmlub2RlX251bSwKLQkJCQkgICBjaWZzX3NiLT5sb2NhbF9ubHMsCi0JCQkJICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgotCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwotCWlmIChyYyAhPSAtRU9QTk9UU1VQUCkKLQkJcmV0dXJuIHJjOwotCiAJcGZpbGVfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKEZJTEVfQUxMX0lORk8pLCBHRlBfS0VSTkVMKTsKIAlpZiAocGZpbGVfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IGE2NDI0Y2YuLjYyN2E2MGEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgImNpZnNmcy5oIgogI2luY2x1ZGUgImNpZnNwZHUuaCIKICNpbmNsdWRlICJjaWZzZ2xvYi5oIgpAQCAtMTI5LDQ0ICsxMzAsNDUgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi1zdGF0aWMgdm9pZAotY2lmc19maWxsX2ZpbGVpbmZvKHN0cnVjdCBpbm9kZSAqbmV3aW5vZGUsIF9fdTE2IGZpbGVIYW5kbGUsCi0JCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBib29sIHdyaXRlX29ubHkpCitzdHJ1Y3QgY2lmc0ZpbGVJbmZvICoKK2NpZnNfbmV3X2ZpbGVpbmZvKHN0cnVjdCBpbm9kZSAqbmV3aW5vZGUsIF9fdTE2IGZpbGVIYW5kbGUsCisJCSAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2ZnNtb3VudCAqbW50LCB1bnNpZ25lZCBpbnQgb2ZsYWdzKQogewogCWludCBvcGxvY2sgPSAwOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihtbnQtPm1udF9zYik7CiAKIAlwQ2lmc0ZpbGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSwgR0ZQX0tFUk5FTCk7Ci0KIAlpZiAocENpZnNGaWxlID09IE5VTEwpCi0JCXJldHVybjsKKwkJcmV0dXJuIHBDaWZzRmlsZTsKIAogCWlmIChvcGxvY2tFbmFibGVkKQogCQlvcGxvY2sgPSBSRVFfT1BMT0NLOwogCiAJcENpZnNGaWxlLT5uZXRmaWQgPSBmaWxlSGFuZGxlOwogCXBDaWZzRmlsZS0+cGlkID0gY3VycmVudC0+dGdpZDsKLQlwQ2lmc0ZpbGUtPnBJbm9kZSA9IG5ld2lub2RlOworCXBDaWZzRmlsZS0+cElub2RlID0gaWdyYWIobmV3aW5vZGUpOworCXBDaWZzRmlsZS0+bW50ID0gbW50OworCXBDaWZzRmlsZS0+cGZpbGUgPSBmaWxlOwogCXBDaWZzRmlsZS0+aW52YWxpZEhhbmRsZSA9IGZhbHNlOwogCXBDaWZzRmlsZS0+Y2xvc2VQZW5kID0gZmFsc2U7CiAJbXV0ZXhfaW5pdCgmcENpZnNGaWxlLT5maF9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmcENpZnNGaWxlLT5sb2NrX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmcENpZnNGaWxlLT5sbGlzdCk7CiAJYXRvbWljX3NldCgmcENpZnNGaWxlLT5jb3VudCwgMSk7CisJc2xvd193b3JrX2luaXQoJnBDaWZzRmlsZS0+b3Bsb2NrX2JyZWFrLCAmY2lmc19vcGxvY2tfYnJlYWtfb3BzKTsKIAotCS8qIHNldCB0aGUgZm9sbG93aW5nIGluIG9wZW4gbm93Ci0JCQlwQ2lmc0ZpbGUtPnBmaWxlID0gZmlsZTsgKi8KIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnRjb24tPm9wZW5GaWxlTGlzdCk7CisJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZjaWZzX3NiLT50Y29uLT5vcGVuRmlsZUxpc3QpOwogCXBDaWZzSW5vZGUgPSBDSUZTX0kobmV3aW5vZGUpOwogCWlmIChwQ2lmc0lub2RlKSB7CiAJCS8qIGlmIHJlYWRhYmxlIGZpbGUgaW5zdGFuY2UgcHV0IGZpcnN0IGluIGxpc3QqLwotCQlpZiAod3JpdGVfb25seSkKKwkJaWYgKG9mbGFncyAmIEZNT0RFX1JFQUQpCisJCQlsaXN0X2FkZCgmcENpZnNGaWxlLT5mbGlzdCwgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7CisJCWVsc2UKIAkJCWxpc3RfYWRkX3RhaWwoJnBDaWZzRmlsZS0+Zmxpc3QsCiAJCQkJICAgICAgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7Ci0JCWVsc2UKLQkJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LCAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKIAogCQlpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX0VYQ0xVU0lWRSkgewogCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSB0cnVlOwpAQCAtMTc2LDE4ICsxNzgsMTggQEAKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSB0cnVlOwogCX0KIAl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCisJcmV0dXJuIHBDaWZzRmlsZTsKIH0KIAogaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKLQkJICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAotCQkgICAgaW50ICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCkKKwkJICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgbW9kZSwgaW50IG9mbGFncywKKwkJICAgIF9fdTMyICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCkKIHsKIAlpbnQgcmM7Ci0JX191MzIgb3Bsb2NrOwotCWJvb2wgd3JpdGVfb25seSA9IGZhbHNlOwogCUZJTEVfVU5JWF9CQVNJQ19JTkZPICpwcmVzcF9kYXRhOwogCV9fdTMyIHBvc2l4X2ZsYWdzID0gMDsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihzYik7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IobW50LT5tbnRfc2IpOwogCXN0cnVjdCBjaWZzX2ZhdHRyIGZhdHRyOwogCiAJY0ZZSSgxLCAoInBvc2l4IG9wZW4gJXMiLCBmdWxsX3BhdGgpKTsKQEAgLTIyMywxMiArMjI1LDkgQEAKIAlpZiAob2ZsYWdzICYgT19ESVJFQ1QpCiAJCXBvc2l4X2ZsYWdzIHw9IFNNQl9PX0RJUkVDVDsKIAotCWlmICghKG9mbGFncyAmIEZNT0RFX1JFQUQpKQotCQl3cml0ZV9vbmx5ID0gdHJ1ZTsKLQogCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAlyYyA9IENJRlNQT1NJWENyZWF0ZSh4aWQsIGNpZnNfc2ItPnRjb24sIHBvc2l4X2ZsYWdzLCBtb2RlLAotCQkJcG5ldGZpZCwgcHJlc3BfZGF0YSwgJm9wbG9jaywgZnVsbF9wYXRoLAorCQkJcG5ldGZpZCwgcHJlc3BfZGF0YSwgcG9wbG9jaywgZnVsbF9wYXRoLAogCQkJY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAlpZiAocmMpCkBAIC0yNDQsNyArMjQzLDcgQEAKIAogCS8qIGdldCBuZXcgaW5vZGUgYW5kIHNldCBpdCB1cCAqLwogCWlmICgqcGlub2RlID09IE5VTEwpIHsKLQkJKnBpbm9kZSA9IGNpZnNfaWdldChzYiwgJmZhdHRyKTsKKwkJKnBpbm9kZSA9IGNpZnNfaWdldChtbnQtPm1udF9zYiwgJmZhdHRyKTsKIAkJaWYgKCEqcGlub2RlKSB7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIHBvc2l4X29wZW5fcmV0OwpAQCAtMjUzLDcgKzI1Miw3IEBACiAJCWNpZnNfZmF0dHJfdG9faW5vZGUoKnBpbm9kZSwgJmZhdHRyKTsKIAl9CiAKLQljaWZzX2ZpbGxfZmlsZWluZm8oKnBpbm9kZSwgKnBuZXRmaWQsIGNpZnNfc2ItPnRjb24sIHdyaXRlX29ubHkpOworCWNpZnNfbmV3X2ZpbGVpbmZvKCpwaW5vZGUsICpwbmV0ZmlkLCBOVUxMLCBtbnQsIG9mbGFncyk7CiAKIHBvc2l4X29wZW5fcmV0OgogCWtmcmVlKHByZXNwX2RhdGEpOwpAQCAtMjgwLDcgKzI3OSw3IEBACiAJaW50IHJjID0gLUVOT0VOVDsKIAlpbnQgeGlkOwogCWludCBjcmVhdGVfb3B0aW9ucyA9IENSRUFURV9OT1RfRElSOwotCWludCBvcGxvY2sgPSAwOworCV9fdTMyIG9wbG9jayA9IDA7CiAJaW50IG9mbGFnczsKIAlib29sIHBvc2l4X2NyZWF0ZSA9IGZhbHNlOwogCS8qCkBAIC0yOTgsNyArMjk3LDYgQEAKIAlGSUxFX0FMTF9JTkZPICpidWYgPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqbmV3aW5vZGUgPSBOVUxMOwogCWludCBkaXNwb3NpdGlvbiA9IEZJTEVfT1ZFUldSSVRFX0lGOwotCWJvb2wgd3JpdGVfb25seSA9IGZhbHNlOwogCiAJeGlkID0gR2V0WGlkKCk7CiAKQEAgLTMyMyw3ICszMjEsNyBAQAogCWlmICh0Y29uLT51bml4X2V4dCAmJiAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgJiYKIAkgICAgKENJRlNfVU5JWF9QT1NJWF9QQVRIX09QU19DQVAgJgogCQkJbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKLQkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmbmV3aW5vZGUsIGlub2RlLT5pX3NiLAorCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZuZXdpbm9kZSwgbmQtPnBhdGgubW50LAogCQkJCSAgICAgbW9kZSwgb2ZsYWdzLCAmb3Bsb2NrLCAmZmlsZUhhbmRsZSwgeGlkKTsKIAkJLyogRUlPIGNvdWxkIGluZGljYXRlIHRoYXQgKHBvc2l4IG9wZW4pIG9wZXJhdGlvbiBpcyBub3QKIAkJICAgc3VwcG9ydGVkLCBkZXNwaXRlIHdoYXQgc2VydmVyIGNsYWltZWQgaW4gY2FwYWJpbGl0eQpAQCAtMzUxLDExICszNDksOCBAQAogCQlkZXNpcmVkQWNjZXNzID0gMDsKIAkJaWYgKG9mbGFncyAmIEZNT0RFX1JFQUQpCiAJCQlkZXNpcmVkQWNjZXNzIHw9IEdFTkVSSUNfUkVBRDsgLyogaXMgdGhpcyB0b28gbGl0dGxlPyAqLwotCQlpZiAob2ZsYWdzICYgRk1PREVfV1JJVEUpIHsKKwkJaWYgKG9mbGFncyAmIEZNT0RFX1dSSVRFKQogCQkJZGVzaXJlZEFjY2VzcyB8PSBHRU5FUklDX1dSSVRFOwotCQkJaWYgKCEob2ZsYWdzICYgRk1PREVfUkVBRCkpCi0JCQkJd3JpdGVfb25seSA9IHRydWU7Ci0JCX0KIAogCQlpZiAoKG9mbGFncyAmIChPX0NSRUFUIHwgT19FWENMKSkgPT0gKE9fQ1JFQVQgfCBPX0VYQ0wpKQogCQkJZGlzcG9zaXRpb24gPSBGSUxFX0NSRUFURTsKQEAgLTQ3MCw4ICs0NjUsOCBAQAogCQkvKiBta25vZCBjYXNlIC0gZG8gbm90IGxlYXZlIGZpbGUgb3BlbiAqLwogCQlDSUZTU01CQ2xvc2UoeGlkLCB0Y29uLCBmaWxlSGFuZGxlKTsKIAl9IGVsc2UgaWYgKCEocG9zaXhfY3JlYXRlKSAmJiAobmV3aW5vZGUpKSB7Ci0JCQljaWZzX2ZpbGxfZmlsZWluZm8obmV3aW5vZGUsIGZpbGVIYW5kbGUsCi0JCQkJCWNpZnNfc2ItPnRjb24sIHdyaXRlX29ubHkpOworCQkJY2lmc19uZXdfZmlsZWluZm8obmV3aW5vZGUsIGZpbGVIYW5kbGUsIE5VTEwsCisJCQkJCQluZC0+cGF0aC5tbnQsIG9mbGFncyk7CiAJfQogY2lmc19jcmVhdGVfb3V0OgogCWtmcmVlKGJ1Zik7CkBAIC02MTEsNyArNjA2LDcgQEAKIHsKIAlpbnQgeGlkOwogCWludCByYyA9IDA7IC8qIHRvIGdldCBhcm91bmQgc3B1cmlvdXMgZ2NjIHdhcm5pbmcsIHNldCB0byB6ZXJvIGhlcmUgKi8KLQlpbnQgb3Bsb2NrID0gMDsKKwlfX3UzMiBvcGxvY2sgPSAwOwogCV9fdTE2IGZpbGVIYW5kbGUgPSAwOwogCWJvb2wgcG9zaXhfb3BlbiA9IGZhbHNlOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CkBAIC02ODMsOCArNjc4LDcgQEAKIAkJaWYgKCEobmQtPmZsYWdzICYgKExPT0tVUF9QQVJFTlQgfCBMT09LVVBfRElSRUNUT1JZKSkgJiYKIAkJICAgICAobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pICYmICFwVGNvbi0+YnJva2VuX3Bvc2l4X29wZW4gJiYKIAkJICAgICAobmQtPmludGVudC5vcGVuLmZsYWdzICYgT19DUkVBVCkpIHsKLQkJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJm5ld0lub2RlLAotCQkJCQlwYXJlbnRfZGlyX2lub2RlLT5pX3NiLAorCQkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmbmV3SW5vZGUsIG5kLT5wYXRoLm1udCwKIAkJCQkJbmQtPmludGVudC5vcGVuLmNyZWF0ZV9tb2RlLAogCQkJCQluZC0+aW50ZW50Lm9wZW4uZmxhZ3MsICZvcGxvY2ssCiAJCQkJCSZmaWxlSGFuZGxlLCB4aWQpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBmYTdiZWFjLi40MjkzMzdlIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiY2lmc2ZzLmgiCiAjaW5jbHVkZSAiY2lmc3BkdS5oIgpAQCAtMzksMjcgKzQwLDYgQEAKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjaWZzRmlsZUluZm8gKmNpZnNfaW5pdF9wcml2YXRlKAotCXN0cnVjdCBjaWZzRmlsZUluZm8gKnByaXZhdGVfZGF0YSwgc3RydWN0IGlub2RlICppbm9kZSwKLQlzdHJ1Y3QgZmlsZSAqZmlsZSwgX191MTYgbmV0ZmlkKQotewotCW1lbXNldChwcml2YXRlX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSk7Ci0JcHJpdmF0ZV9kYXRhLT5uZXRmaWQgPSBuZXRmaWQ7Ci0JcHJpdmF0ZV9kYXRhLT5waWQgPSBjdXJyZW50LT50Z2lkOwotCW11dGV4X2luaXQoJnByaXZhdGVfZGF0YS0+ZmhfbXV0ZXgpOwotCW11dGV4X2luaXQoJnByaXZhdGVfZGF0YS0+bG9ja19tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnByaXZhdGVfZGF0YS0+bGxpc3QpOwotCXByaXZhdGVfZGF0YS0+cGZpbGUgPSBmaWxlOyAvKiBuZWVkZWQgZm9yIHdyaXRlcGFnZSAqLwotCXByaXZhdGVfZGF0YS0+cElub2RlID0gaW5vZGU7Ci0JcHJpdmF0ZV9kYXRhLT5pbnZhbGlkSGFuZGxlID0gZmFsc2U7Ci0JcHJpdmF0ZV9kYXRhLT5jbG9zZVBlbmQgPSBmYWxzZTsKLQkvKiBJbml0aWFsaXplIHJlZmVyZW5jZSBjb3VudCB0byBvbmUuICBUaGUgcHJpdmF0ZSBkYXRhIGlzCi0JZnJlZWQgb24gdGhlIHJlbGVhc2Ugb2YgdGhlIGxhc3QgcmVmZXJlbmNlICovCi0JYXRvbWljX3NldCgmcHJpdmF0ZV9kYXRhLT5jb3VudCwgMSk7Ci0KLQlyZXR1cm4gcHJpdmF0ZV9kYXRhOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBjaWZzX2NvbnZlcnRfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKQogewogCWlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKQpAQCAtMTIzLDkgKzEwMywxMSBAQAogfQogCiAvKiBhbGwgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBpbiBjYWxsZXIgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwKLQkJCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSwgaW50IG9wbG9jaywgdTE2IG5ldGZpZCkKK3N0YXRpYyBpbmxpbmUgaW50CitjaWZzX3Bvc2l4X29wZW5faW5vZGVfaGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICBzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwKKwkJCSAgICAgc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLCBfX3UzMiBvcGxvY2ssCisJCQkgICAgIHUxNiBuZXRmaWQpCiB7CiAKIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKQEAgLTIxOSwxNyArMjAxLDYgQEAKIAlzdHJ1Y3QgdGltZXNwZWMgdGVtcDsKIAlpbnQgcmM7CiAKLQkvKiB3YW50IGhhbmRsZXMgd2UgY2FuIHVzZSB0byByZWFkIHdpdGggZmlyc3QKLQkgICBpbiB0aGUgbGlzdCBzbyB3ZSBkbyBub3QgaGF2ZSB0byB3YWxrIHRoZQotCSAgIGxpc3QgdG8gc2VhcmNoIGZvciBvbmUgaW4gd3JpdGVfYmVnaW4gKi8KLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJnBDaWZzRmlsZS0+Zmxpc3QsCi0JCQkgICAgICAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKLQl9IGVsc2UgewotCQlsaXN0X2FkZCgmcENpZnNGaWxlLT5mbGlzdCwKLQkJCSAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKLQl9Ci0Jd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAlpZiAocENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKSB7CiAJCS8qIHdlIGhhdmUgdGhlIGlub2RlIG9wZW4gc29tZXdoZXJlIGVsc2UKIAkJICAgbm8gbmVlZCB0byBkaXNjYXJkIGNhY2hlIGRhdGEgKi8KQEAgLTI3OSw3ICsyNTAsOCBAQAogaW50IGNpZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgcmMgPSAtRUFDQ0VTOwotCWludCB4aWQsIG9wbG9jazsKKwlpbnQgeGlkOworCV9fdTMyIG9wbG9jazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwpAQCAtMzI0LDcgKzI5Niw3IEBACiAJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgewogCQlpbnQgb2ZsYWdzID0gKGludCkgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCQkvKiBjYW4gbm90IHJlZnJlc2ggaW5vZGUgaW5mbyBzaW5jZSBzaXplIGNvdWxkIGJlIHN0YWxlICovCi0JCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJmlub2RlLCBpbm9kZS0+aV9zYiwKKwkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmaW5vZGUsIGZpbGUtPmZfcGF0aC5tbnQsCiAJCQkJICAgICBjaWZzX3NiLT5tbnRfZmlsZV9tb2RlIC8qIGlnbm9yZWQgKi8sCiAJCQkJICAgICBvZmxhZ3MsICZvcGxvY2ssICZuZXRmaWQsIHhpZCk7CiAJCWlmIChyYyA9PSAwKSB7CkBAIC00MTQsMjQgKzM4NiwxNyBAQAogCQljRllJKDEsICgiY2lmc19vcGVuIHJldHVybmVkIDB4JXgiLCByYykpOwogCQlnb3RvIG91dDsKIAl9Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0KLQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGNpZnNGaWxlSW5mbyksIEdGUF9LRVJORUwpOworCisJcENpZnNGaWxlID0gY2lmc19uZXdfZmlsZWluZm8oaW5vZGUsIG5ldGZpZCwgZmlsZSwgZmlsZS0+Zl9wYXRoLm1udCwKKwkJCQkJZmlsZS0+Zl9mbGFncyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcENpZnNGaWxlOwogCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQlwQ2lmc0ZpbGUgPSBjaWZzX2luaXRfcHJpdmF0ZShmaWxlLT5wcml2YXRlX2RhdGEsIGlub2RlLCBmaWxlLCBuZXRmaWQpOwotCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmdGNvbi0+b3BlbkZpbGVMaXN0KTsKIAotCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKHBDaWZzSW5vZGUpIHsKLQkJcmMgPSBjaWZzX29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLAotCQkJCQkgICAgcENpZnNGaWxlLCB0Y29uLAotCQkJCQkgICAgJm9wbG9jaywgYnVmLCBmdWxsX3BhdGgsIHhpZCk7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQl9CisJcmMgPSBjaWZzX29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLCBwQ2lmc0ZpbGUsIHRjb24sCisJCQkJICAgICZvcGxvY2ssIGJ1ZiwgZnVsbF9wYXRoLCB4aWQpOwogCiAJaWYgKG9wbG9jayAmIENJRlNfQ1JFQVRFX0FDVElPTikgewogCQkvKiB0aW1lIHRvIHNldCBtb2RlIHdoaWNoIHdlIGNhbiBub3Qgc2V0IGVhcmxpZXIgZHVlIHRvCkBAIC00NzQsNyArNDM5LDggQEAKIHN0YXRpYyBpbnQgY2lmc19yZW9wZW5fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgYm9vbCBjYW5fZmx1c2gpCiB7CiAJaW50IHJjID0gLUVBQ0NFUzsKLQlpbnQgeGlkLCBvcGxvY2s7CisJaW50IHhpZDsKKwlfX3UzMiBvcGxvY2s7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKQEAgLTU0Myw3ICs1MDksNyBAQAogCQkJbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKIAkJaW50IG9mbGFncyA9IChpbnQpIGNpZnNfcG9zaXhfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKIAkJLyogY2FuIG5vdCByZWZyZXNoIGlub2RlIGluZm8gc2luY2Ugc2l6ZSBjb3VsZCBiZSBzdGFsZSAqLwotCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsIE5VTEwsIGlub2RlLT5pX3NiLAorCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsIE5VTEwsIGZpbGUtPmZfcGF0aC5tbnQsCiAJCQkJICAgICBjaWZzX3NiLT5tbnRfZmlsZV9tb2RlIC8qIGlnbm9yZWQgKi8sCiAJCQkJICAgICBvZmxhZ3MsICZvcGxvY2ssICZuZXRmaWQsIHhpZCk7CiAJCWlmIChyYyA9PSAwKSB7CkBAIC0yMzA4LDYgKzIyNzQsNzMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkCitjaWZzX29wbG9ja19icmVhayhzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCisJCQkJCQkgIG9wbG9ja19icmVhayk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNmaWxlLT5wSW5vZGU7CisJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpbm9kZSA9IENJRlNfSShpbm9kZSk7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoY2ZpbGUtPm1udC0+bW50X3NiKTsKKwlpbnQgcmMsIHdhaXRyYyA9IDA7CisKKwlpZiAoaW5vZGUgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorCQlpZiAoY2lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9PSAwKQorCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1JFQUQpOworCQllbHNlIGlmIChjaW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9PSAwKQorCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1dSSVRFKTsKKyNlbmRpZgorCQlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKwkJaWYgKGNpbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID09IDApIHsKKwkJCXdhaXRyYyA9IGZpbGVtYXBfZmRhdGF3YWl0KGlub2RlLT5pX21hcHBpbmcpOworCQkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoaW5vZGUpOworCQl9CisJCWlmICghcmMpCisJCQlyYyA9IHdhaXRyYzsKKwkJaWYgKHJjKQorCQkJY2lub2RlLT53cml0ZV9iZWhpbmRfcmMgPSByYzsKKwkJY0ZZSSgxLCAoIk9wbG9jayBmbHVzaCBpbm9kZSAlcCByYyAlZCIsIGlub2RlLCByYykpOworCX0KKworCS8qCisJICogcmVsZWFzaW5nIHN0YWxlIG9wbG9jayBhZnRlciByZWNlbnQgcmVjb25uZWN0IG9mIHNtYiBzZXNzaW9uIHVzaW5nCisJICogYSBub3cgaW5jb3JyZWN0IGZpbGUgaGFuZGxlIGlzIG5vdCBhIGRhdGEgaW50ZWdyaXR5IGlzc3VlIGJ1dCBkbworCSAqIG5vdCBib3RoZXIgc2VuZGluZyBhbiBvcGxvY2sgcmVsZWFzZSBpZiBzZXNzaW9uIHRvIHNlcnZlciBzdGlsbCBpcworCSAqIGRpc2Nvbm5lY3RlZCBzaW5jZSBvcGxvY2sgYWxyZWFkeSByZWxlYXNlZCBieSB0aGUgc2VydmVyCisJICovCisJaWYgKCFjZmlsZS0+Y2xvc2VQZW5kICYmICFjZmlsZS0+b3Bsb2NrX2JyZWFrX2NhbmNlbGxlZCkgeworCQlyYyA9IENJRlNTTUJMb2NrKDAsIGNpZnNfc2ItPnRjb24sIGNmaWxlLT5uZXRmaWQsIDAsIDAsIDAsIDAsCisJCQkJIExPQ0tJTkdfQU5EWF9PUExPQ0tfUkVMRUFTRSwgZmFsc2UpOworCQljRllJKDEsICgiT3Bsb2NrIHJlbGVhc2UgcmMgPSAlZCIsIHJjKSk7CisJfQorfQorCitzdGF0aWMgaW50CitjaWZzX29wbG9ja19icmVha19nZXQoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2lmc0ZpbGVJbmZvLAorCQkJCQkJICBvcGxvY2tfYnJlYWspOworCW1udGdldChjZmlsZS0+bW50KTsKKwljaWZzRmlsZUluZm9fZ2V0KGNmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2NpZnNfb3Bsb2NrX2JyZWFrX3B1dChzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCisJCQkJCQkgIG9wbG9ja19icmVhayk7CisJbW50cHV0KGNmaWxlLT5tbnQpOworCWNpZnNGaWxlSW5mb19wdXQoY2ZpbGUpOworfQorCitjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBjaWZzX29wbG9ja19icmVha19vcHMgPSB7CisJLmdldF9yZWYJPSBjaWZzX29wbG9ja19icmVha19nZXQsCisJLnB1dF9yZWYJPSBjaWZzX29wbG9ja19icmVha19wdXQsCisJLmV4ZWN1dGUJPSBjaWZzX29wbG9ja19icmVhaywKK307CisKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY2lmc19hZGRyX29wcyA9IHsKIAkucmVhZHBhZ2UgPSBjaWZzX3JlYWRwYWdlLAogCS5yZWFkcGFnZXMgPSBjaWZzX3JlYWRwYWdlcywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA1ZTI0OTI1Li5jYWJhYmQ4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC01MTIsMTMgKzUxMiwxMCBAQAogCQkJCQljaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKLQkJCWlmIChyYzEpIHsKKwkJCWlmIChyYzEgfHwgIWZhdHRyLmNmX3VuaXF1ZWlkKSB7CiAJCQkJY0ZZSSgxLCAoIkdldFNydklub2RlTnVtIHJjICVkIiwgcmMxKSk7CiAJCQkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpdW5pcXVlKHNiLCBST09UX0kpOwotCQkJCS8qIGRpc2FibGUgc2VydmVyaW5vIGlmIGNhbGwgbm90IHN1cHBvcnRlZCAqLwotCQkJCWlmIChyYzEgPT0gLUVJTlZBTCkKLQkJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJj0KLQkJCQkJCQl+Q0lGU19NT1VOVF9TRVJWRVJfSU5VTTsKKwkJCQljaWZzX2F1dG9kaXNhYmxlX3NlcnZlcmlubyhjaWZzX3NiKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWZhdHRyLmNmX3VuaXF1ZWlkID0gaXVuaXF1ZShzYiwgUk9PVF9JKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggZTA3OWE5MS4uZDI3ZDRlYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19zbV9yZXFfcG9vbHA7CiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3JlcV9wb29scDsKLWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9wbG9ja1RocmVhZDsKIAogLyogVGhlIHhpZCBzZXJ2ZXMgYXMgYSB1c2VmdWwgaWRlbnRpZmllciBmb3IgZWFjaCBpbmNvbWluZyB2ZnMgcmVxdWVzdCwKICAgIGluIGEgc2ltaWxhciB3YXkgdG8gdGhlIG1pZCB3aGljaCBpcyB1c2VmdWwgdG8gdHJhY2sgZWFjaCBzZW50IHNtYiwKQEAgLTUwMCw2ICs0OTksNyBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqbmV0ZmlsZTsKKwlpbnQgcmM7CiAKIAljRllJKDEsICgiQ2hlY2tpbmcgZm9yIG9wbG9jayBicmVhayBvciBkbm90aWZ5IHJlc3BvbnNlIikpOwogCWlmICgocFNNQi0+aGRyLkNvbW1hbmQgPT0gU01CX0NPTV9OVF9UUkFOU0FDVCkgJiYKQEAgLTU2MiwzMCArNTYyLDQwIEBACiAJCQkJY29udGludWU7CiAKIAkJCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fb3Bsb2NrX2Jya3MpOwotCQkJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQlyZWFkX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQkJbGlzdF9mb3JfZWFjaCh0bXAyLCAmdGNvbi0+b3BlbkZpbGVMaXN0KSB7CiAJCQkJbmV0ZmlsZSA9IGxpc3RfZW50cnkodG1wMiwgc3RydWN0IGNpZnNGaWxlSW5mbywKIAkJCQkJCSAgICAgdGxpc3QpOwogCQkJCWlmIChwU01CLT5GaWQgIT0gbmV0ZmlsZS0+bmV0ZmlkKQogCQkJCQljb250aW51ZTsKIAotCQkJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JCQkJcmVhZF91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKKwkJCQkvKgorCQkJCSAqIGRvbid0IGRvIGFueXRoaW5nIGlmIGZpbGUgaXMgYWJvdXQgdG8gYmUKKwkJCQkgKiBjbG9zZWQgYW55d2F5LgorCQkJCSAqLworCQkJCWlmIChuZXRmaWxlLT5jbG9zZVBlbmQpIHsKKwkJCQkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJCQlyZWFkX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisKIAkJCQljRllJKDEsICgiZmlsZSBpZCBtYXRjaCwgb3Bsb2NrIGJyZWFrIikpOwogCQkJCXBDaWZzSW5vZGUgPSBDSUZTX0kobmV0ZmlsZS0+cElub2RlKTsKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IGZhbHNlOwogCQkJCWlmIChwU01CLT5PcGxvY2tMZXZlbCA9PSAwKQogCQkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBmYWxzZTsKLQkJCQlwQ2lmc0lub2RlLT5vcGxvY2tQZW5kaW5nID0gdHJ1ZTsKLQkJCQlBbGxvY09wbG9ja1FFbnRyeShuZXRmaWxlLT5wSW5vZGUsCi0JCQkJCQkgIG5ldGZpbGUtPm5ldGZpZCwgdGNvbik7Ci0JCQkJY0ZZSSgxLCAoImFib3V0IHRvIHdha2UgdXAgb3Bsb2NrIHRocmVhZCIpKTsKLQkJCQlpZiAob3Bsb2NrVGhyZWFkKQotCQkJCQl3YWtlX3VwX3Byb2Nlc3Mob3Bsb2NrVGhyZWFkKTsKLQorCQkJCXJjID0gc2xvd193b3JrX2VucXVldWUoJm5ldGZpbGUtPm9wbG9ja19icmVhayk7CisJCQkJaWYgKHJjKSB7CisJCQkJCWNFUlJPUigxLCAoImZhaWxlZCB0byBlbnF1ZXVlIG9wbG9jayAiCisJCQkJCQkgICAiYnJlYWs6ICVkXG4iLCByYykpOworCQkJCX0gZWxzZSB7CisJCQkJCW5ldGZpbGUtPm9wbG9ja19icmVha19jYW5jZWxsZWQgPSBmYWxzZTsKKwkJCQl9CisJCQkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJCXJlYWRfdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9Ci0JCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQkJcmVhZF91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAkJCWNGWUkoMSwgKCJObyBtYXRjaGluZyBmaWxlIGZvciBvcGxvY2sgYnJlYWsiKSk7CiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTcwNSwzICs3MTUsMTcgQEAKIGN0b1VDU19vdXQ6CiAJcmV0dXJuIGk7CiB9CisKK3ZvaWQKK2NpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCit7CisJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkgeworCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmPSB+Q0lGU19NT1VOVF9TRVJWRVJfSU5VTTsKKwkJY0VSUk9SKDEsICgiQXV0b2Rpc2FibGluZyB0aGUgdXNlIG9mIHNlcnZlciBpbm9kZSBudW1iZXJzIG9uICIKKwkJCSAgICIlcy4gVGhpcyBzZXJ2ZXIgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdGhlbSAiCisJCQkgICAicHJvcGVybHkuIEhhcmRsaW5rcyB3aWxsIG5vdCBiZSByZWNvZ25pemVkIG9uIHRoaXMgIgorCQkJICAgIm1vdW50LiBDb25zaWRlciBtb3VudGluZyB3aXRoIHRoZSBcIm5vc2VydmVyaW5vXCIgIgorCQkJICAgIm9wdGlvbiB0byBzaWxlbmNlIHRoaXMgbWVzc2FnZS4iLAorCQkJICAgY2lmc19zYi0+dGNvbi0+dHJlZU5hbWUpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3JlYWRkaXIuYyBiL2ZzL2NpZnMvcmVhZGRpci5jCmluZGV4IGY4MjNhNGEuLmY4NDA2MmYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvcmVhZGRpci5jCisrKyBiL2ZzL2NpZnMvcmVhZGRpci5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBjaWZzX2Rpcl9pbmZvX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0ciwgRklMRV9ESVJFQ1RPUllfSU5GTyAqaW5mbywKIAkJICAgICAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCiB7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAljaWZzX2ZpbGxfY29tbW9uX2luZm8oZmF0dHIsIGNpZnNfc2IpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogY2lmc19zdGRfaW5mb190b19mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsIEZJTkRfRklMRV9TVEFOREFSRF9JTkZPICppbmZvLAogCQkgICAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYikKIHsKQEAgLTcyNywxMSArNzI3LDEyIEBACiAJCWNpZnNfZGlyX2luZm9fdG9fZmF0dHIoJmZhdHRyLCAoRklMRV9ESVJFQ1RPUllfSU5GTyAqKQogCQkJCQlwZmluZEVudHJ5LCBjaWZzX3NiKTsKIAotCS8qIEZJWE1FOiBtYWtlIF90b19mYXR0ciBmdW5jdGlvbnMgZmlsbCB0aGlzIG91dCAqLwotCWlmIChwQ2lmc0YtPnNyY2hfaW5mLmluZm9fbGV2ZWwgPT0gU01CX0ZJTkRfRklMRV9JRF9GVUxMX0RJUl9JTkZPKQorCWlmIChpbnVtICYmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pKSB7CiAJCWZhdHRyLmNmX3VuaXF1ZWlkID0gaW51bTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpdW5pcXVlKHNiLCBST09UX0kpOworCQljaWZzX2F1dG9kaXNhYmxlX3NlcnZlcmlubyhjaWZzX3NiKTsKKwl9CiAKIAlpbm8gPSBjaWZzX3VuaXF1ZWlkX3RvX2lub190KGZhdHRyLmNmX3VuaXF1ZWlkKTsKIAl0bXBfZGVudHJ5ID0gY2lmc19yZWFkZGlyX2xvb2t1cChmaWxlLT5mX2RlbnRyeSwgJnFzdHJpbmcsICZmYXR0cik7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3RyYW5zcG9ydC5jIGIvZnMvY2lmcy90cmFuc3BvcnQuYwppbmRleCAxZGE0YWIyLi4wN2I4ZTcxIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTEwMyw1NiArMTAzLDYgQEAKIAltZW1wb29sX2ZyZWUobWlkRW50cnksIGNpZnNfbWlkX3Bvb2xwKTsKIH0KIAotc3RydWN0IG9wbG9ja19xX2VudHJ5ICoKLUFsbG9jT3Bsb2NrUUVudHJ5KHN0cnVjdCBpbm9kZSAqcGlub2RlLCBfX3UxNiBmaWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24pCi17Ci0Jc3RydWN0IG9wbG9ja19xX2VudHJ5ICp0ZW1wOwotCWlmICgocGlub2RlID09IE5VTEwpIHx8ICh0Y29uID09IE5VTEwpKSB7Ci0JCWNFUlJPUigxLCAoIk51bGwgcGFybXMgcGFzc2VkIHRvIEFsbG9jT3Bsb2NrUUVudHJ5IikpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JdGVtcCA9IChzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKikga21lbV9jYWNoZV9hbGxvYyhjaWZzX29wbG9ja19jYWNoZXAsCi0JCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKHRlbXAgPT0gTlVMTCkKLQkJcmV0dXJuIHRlbXA7Ci0JZWxzZSB7Ci0JCXRlbXAtPnBpbm9kZSA9IHBpbm9kZTsKLQkJdGVtcC0+dGNvbiA9IHRjb247Ci0JCXRlbXAtPm5ldGZpZCA9IGZpZDsKLQkJc3Bpbl9sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmdGVtcC0+cWhlYWQsICZjaWZzX29wbG9ja19saXN0KTsKLQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCX0KLQlyZXR1cm4gdGVtcDsKLX0KLQotdm9pZCBEZWxldGVPcGxvY2tRRW50cnkoc3RydWN0IG9wbG9ja19xX2VudHJ5ICpvcGxvY2tFbnRyeSkKLXsKLQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotICAgIC8qIHNob3VsZCB3ZSBjaGVjayBpZiBsaXN0IGVtcHR5IGZpcnN0PyAqLwotCWxpc3RfZGVsKCZvcGxvY2tFbnRyeS0+cWhlYWQpOwotCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQlrbWVtX2NhY2hlX2ZyZWUoY2lmc19vcGxvY2tfY2FjaGVwLCBvcGxvY2tFbnRyeSk7Ci19Ci0KLQotdm9pZCBEZWxldGVUY29uT3Bsb2NrUUVudHJpZXMoc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikKLXsKLQlzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKnRlbXA7Ci0KLQlpZiAodGNvbiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcCwgJmNpZnNfb3Bsb2NrX2xpc3QsIHFoZWFkKSB7Ci0JCWlmICgodGVtcC0+dGNvbikgJiYgKHRlbXAtPnRjb24gPT0gdGNvbikpIHsKLQkJCWxpc3RfZGVsKCZ0ZW1wLT5xaGVhZCk7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUoY2lmc19vcGxvY2tfY2FjaGVwLCB0ZW1wKTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci19Ci0KIHN0YXRpYyBpbnQKIHNtYl9zZW5kdihzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBrdmVjICppb3YsIGludCBuX3ZlYykKIHsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvcHNkZXYuYyBiL2ZzL2NvZGEvcHNkZXYuYwppbmRleCAwMzc2YWM2Li5iZTQzOTJjIDEwMDY0NAotLS0gYS9mcy9jb2RhL3BzZGV2LmMKKysrIGIvZnMvY29kYS9wc2Rldi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggZDU3NmI1NS4uNmMxOTA0MCAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTE1MzIsNiArMTUzMiw4IEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0OwogCisJY3VycmVudC0+c3RhY2tfc3RhcnQgPSBjdXJyZW50LT5tbS0+c3RhcnRfc3RhY2s7CisKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCiAJY3VycmVudC0+ZnMtPmluX2V4ZWMgPSAwOwogCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IGY5MWZkNTEuLmQ4NGU3MDUgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogLyoganVzdCBhY2NvdW50IGZvciBkaWZmZXJlbnQgYWxpZ25tZW50ICovCiBzdGF0aWMgaW50IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAJc3RydWN0IHNwYWNlX3Jlc3YJX191c2VyICpwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7CiAKIAlpZiAoY29weV9pbl91c2VyKCZwLT5sX3R5cGUsCSZwMzItPmxfdHlwZSwJc2l6ZW9mKHMxNikpIHx8CkBAIC0yODAyLDcgKzI4MDIsNyBAQAogI2Vsc2UKIAljYXNlIEZTX0lPQ19SRVNWU1A6CiAJY2FzZSBGU19JT0NfUkVTVlNQNjQ6Ci0JCWVycm9yID0gaW9jdGxfcHJlYWxsb2NhdGUoZmlscCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJZXJyb3IgPSBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBjb21wYXRfcHRyKGFyZykpOwogCQlnb3RvIG91dF9mcHV0OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMjQwY2VmMS4uNzA3MzZlYiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTMxNiw2ICszMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwogCisJLyogd2l0aCBzY3RwIHRoZXJlJ3Mgbm8gY29ubmVjdGluZyB3aXRob3V0IHNlbmRpbmcgKi8KKwlpZiAoZGxtX2NvbmZpZy5jaV9wcm90b2NvbCAhPSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChub2RlaWQgPT0gZGxtX291cl9ub2RlaWQoKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ1NSw5ICs0NTksOSBAQAogCQkJaW50IHByaW1fbGVuLCByZXQ7CiAJCQlpbnQgYWRkcl9sZW47CiAJCQlzdHJ1Y3QgY29ubmVjdGlvbiAqbmV3X2NvbjsKLQkJCXN0cnVjdCBmaWxlICpmaWxlOwogCQkJc2N0cF9wZWVsb2ZmX2FyZ190IHBhcmc7CiAJCQlpbnQgcGFyZ2xlbiA9IHNpemVvZihwYXJnKTsKKwkJCWludCBlcnI7CiAKIAkJCS8qCiAJCQkgKiBXZSBnZXQgdGhpcyBiZWZvcmUgYW55IGRhdGEgZm9yIGFuIGFzc29jaWF0aW9uLgpAQCAtNTEyLDE5ICs1MTYsMjIgQEAKIAkJCXJldCA9IGtlcm5lbF9nZXRzb2Nrb3B0KGNvbi0+c29jaywgSVBQUk9UT19TQ1RQLAogCQkJCQkJU0NUUF9TT0NLT1BUX1BFRUxPRkYsCiAJCQkJCQkodm9pZCAqKSZwYXJnLCAmcGFyZ2xlbik7Ci0JCQlpZiAocmV0KSB7CisJCQlpZiAocmV0IDwgMCkgewogCQkJCWxvZ19wcmludCgiQ2FuJ3QgcGVlbCBvZmYgYSBzb2NrZXQgZm9yICIKLQkJCQkJICAiY29ubmVjdGlvbiAlZCB0byBub2RlICVkOiBlcnI9JWRcbiIsCisJCQkJCSAgImNvbm5lY3Rpb24gJWQgdG8gbm9kZSAlZDogZXJyPSVkIiwKIAkJCQkJICBwYXJnLmFzc29jaWQsIG5vZGVpZCwgcmV0KTsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlmaWxlID0gZmdldChwYXJnLnNkKTsKLQkJCW5ld19jb24tPnNvY2sgPSBTT0NLRVRfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQluZXdfY29uLT5zb2NrID0gc29ja2ZkX2xvb2t1cChwYXJnLnNkLCAmZXJyKTsKKwkJCWlmICghbmV3X2Nvbi0+c29jaykgeworCQkJCWxvZ19wcmludCgic29ja2ZkX2xvb2t1cCBlcnJvciAlZCIsIGVycik7CisJCQkJcmV0dXJuOworCQkJfQogCQkJYWRkX3NvY2sobmV3X2Nvbi0+c29jaywgbmV3X2Nvbik7Ci0JCQlmcHV0KGZpbGUpOwotCQkJcHV0X3VudXNlZF9mZChwYXJnLnNkKTsKKwkJCXNvY2tmZF9wdXQobmV3X2Nvbi0+c29jayk7CiAKLQkJCWxvZ19wcmludCgiZ290IG5ldy9yZXN0YXJ0ZWQgYXNzb2NpYXRpb24gJWQgbm9kZWlkICVkIiwKLQkJCQkgKGludClzbi0+c25fYXNzb2NfY2hhbmdlLnNhY19hc3NvY19pZCwgbm9kZWlkKTsKKwkJCWxvZ19wcmludCgiY29ubmVjdGluZyB0byAlZCBzY3RwIGFzc29jaWF0aW9uICVkIiwKKwkJCQkgbm9kZWlkLCAoaW50KXNuLT5zbl9hc3NvY19jaGFuZ2Uuc2FjX2Fzc29jX2lkKTsKIAogCQkJLyogU2VuZCBhbnkgcGVuZGluZyB3cml0ZXMgKi8KIAkJCWNsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZuZXdfY29uLT5mbGFncyk7CkBAIC04MzcsOCArODQ0LDYgQEAKIAlpZiAoY29uLT5yZXRyaWVzKysgPiBNQVhfQ09OTkVDVF9SRVRSSUVTKQogCQlyZXR1cm47CiAKLQlsb2dfcHJpbnQoIkluaXRpYXRpbmcgYXNzb2NpYXRpb24gd2l0aCBub2RlICVkIiwgY29uLT5ub2RlaWQpOwotCiAJaWYgKG5vZGVpZF90b19hZGRyKGNvbi0+bm9kZWlkLCAoc3RydWN0IHNvY2thZGRyICopJnJlbV9hZGRyKSkgewogCQlsb2dfcHJpbnQoIm5vIGFkZHJlc3MgZm9yIG5vZGVpZCAlZCIsIGNvbi0+bm9kZWlkKTsKIAkJcmV0dXJuOwpAQCAtODU1LDExICs4NjAsMTQgQEAKIAlvdXRtZXNzYWdlLm1zZ19mbGFncyA9IE1TR19FT1I7CiAKIAlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKLQllID0gbGlzdF9lbnRyeShjb24tPndyaXRlcXVldWUubmV4dCwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksCi0JCSAgICAgICBsaXN0KTsKIAotCUJVR19PTigoc3RydWN0IGxpc3RfaGVhZCAqKSBlID09ICZjb24tPndyaXRlcXVldWUpOworCWlmIChsaXN0X2VtcHR5KCZjb24tPndyaXRlcXVldWUpKSB7CisJCXNwaW5fdW5sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7CisJCWxvZ19wcmludCgid3JpdGVxdWV1ZSBlbXB0eSBmb3Igbm9kZWlkICVkIiwgY29uLT5ub2RlaWQpOworCQlyZXR1cm47CisJfQogCisJZSA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbi0+d3JpdGVxdWV1ZSwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksIGxpc3QpOwogCWxlbiA9IGUtPmxlbjsKIAlvZmZzZXQgPSBlLT5vZmZzZXQ7CiAJc3Bpbl91bmxvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL0tjb25maWcgYi9mcy9lY3J5cHRmcy9LY29uZmlnCmluZGV4IDBjNzU0ZTYuLjFjZDZkOWQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL0tjb25maWcKKysrIGIvZnMvZWNyeXB0ZnMvS2NvbmZpZwpAQCAtMSw2ICsxLDkgQEAKIGNvbmZpZyBFQ1JZUFRfRlMKIAl0cmlzdGF0ZSAiZUNyeXB0IGZpbGVzeXN0ZW0gbGF5ZXIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBLRVlTICYmIENSWVBUTyAmJiBORVQKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBLRVlTICYmIENSWVBUTworCXNlbGVjdCBDUllQVE9fRUNCCisJc2VsZWN0IENSWVBUT19DQkMKKwlzZWxlY3QgQ1JZUFRPX01ENQogCWhlbHAKIAkgIEVuY3J5cHRlZCBmaWxlc3lzdGVtIHRoYXQgb3BlcmF0ZXMgb24gdGhlIFZGUyBsYXllci4gIFNlZQogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lY3J5cHRmcy50eHQ+IHRvIGxlYXJuIG1vcmUgYWJvdXQKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jIGIvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKaW5kZXggYjkxODUxZi4uZmJiNmU1ZSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKKysrIGIvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKQEAgLTI0NSwxMyArMjQ1LDExIEBACiAJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihjcnlwdF9zdGF0LT50Zm0pOwogCWlmIChjcnlwdF9zdGF0LT5oYXNoX3RmbSkKIAkJY3J5cHRvX2ZyZWVfaGFzaChjcnlwdF9zdGF0LT5oYXNoX3RmbSk7Ci0JbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXlfc2lnLCBrZXlfc2lnX3RtcCwKIAkJCQkgJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0LCBjcnlwdF9zdGF0X2xpc3QpIHsKIAkJbGlzdF9kZWwoJmtleV9zaWctPmNyeXB0X3N0YXRfbGlzdCk7CiAJCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19rZXlfc2lnX2NhY2hlLCBrZXlfc2lnKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdF9tdXRleCk7CiAJbWVtc2V0KGNyeXB0X3N0YXQsIDAsIHNpemVvZihzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCkpOwogfQogCkBAIC01MTEsMTMgKzUwOSwxNCBAQAogCQkJCSAgKyBleHRlbnRfb2Zmc2V0KSwgY3J5cHRfc3RhdCk7CiAJCXJjID0gZWNyeXB0ZnNfd3JpdGVfbG93ZXIoZWNyeXB0ZnNfaW5vZGUsIGVuY19leHRlbnRfdmlydCwKIAkJCQkJICBvZmZzZXQsIGNyeXB0X3N0YXQtPmV4dGVudF9zaXplKTsKLQkJaWYgKHJjKSB7CisJCWlmIChyYyA8IDApIHsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGF0dGVtcHRpbmcgIgogCQkJCQkidG8gd3JpdGUgbG93ZXIgcGFnZTsgcmMgPSBbJWRdIgogCQkJCQkiXG4iLCByYyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KKwlyYyA9IDA7CiBvdXQ6CiAJaWYgKGVuY19leHRlbnRfcGFnZSkgewogCQlrdW5tYXAoZW5jX2V4dGVudF9wYWdlKTsKQEAgLTYzMyw3ICs2MzIsNyBAQAogCQlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXIoZW5jX2V4dGVudF92aXJ0LCBvZmZzZXQsCiAJCQkJCSBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkJIGVjcnlwdGZzX2lub2RlKTsKLQkJaWYgKHJjKSB7CisJCWlmIChyYyA8IDApIHsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGF0dGVtcHRpbmcgIgogCQkJCQkidG8gcmVhZCBsb3dlciBwYWdlOyByYyA9IFslZF0iCiAJCQkJCSJcbiIsIHJjKTsKQEAgLTc5Nyw2ICs3OTYsNyBAQAogCWtmcmVlKGZ1bGxfYWxnX25hbWUpOwogCWlmIChJU19FUlIoY3J5cHRfc3RhdC0+dGZtKSkgewogCQlyYyA9IFBUUl9FUlIoY3J5cHRfc3RhdC0+dGZtKTsKKwkJY3J5cHRfc3RhdC0+dGZtID0gTlVMTDsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiY3J5cHRmczogaW5pdF9jcnlwdF9jdHgoKTogIgogCQkJCSJFcnJvciBpbml0aWFsaXppbmcgY2lwaGVyIFslc11cbiIsCiAJCQkJY3J5cHRfc3RhdC0+Y2lwaGVyKTsKQEAgLTkyNSw3ICs5MjUsOSBAQAogCXN0cnVjdCBlY3J5cHRmc19nbG9iYWxfYXV0aF90b2sgKmdsb2JhbF9hdXRoX3RvazsKIAlpbnQgcmMgPSAwOwogCisJbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOwogCW11dGV4X2xvY2soJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0X211dGV4KTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2xvYmFsX2F1dGhfdG9rLAogCQkJICAgICZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdCwKIAkJCSAgICBtb3VudF9jcnlwdF9zdGF0X2xpc3QpIHsKQEAgLTkzNCwxMyArOTM2LDEzIEBACiAJCXJjID0gZWNyeXB0ZnNfYWRkX2tleXNpZyhjcnlwdF9zdGF0LCBnbG9iYWxfYXV0aF90b2stPnNpZyk7CiAJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhZGRpbmcga2V5c2lnOyByYyA9IFslZF1cbiIsIHJjKTsKLQkJCW11dGV4X3VubG9jaygKLQkJCQkmbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2F1dGhfdG9rX2xpc3RfbXV0ZXgpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdF9tdXRleCk7CisKIG91dDoKKwltdXRleF91bmxvY2soJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0X211dGV4KTsKKwltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0X211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEyMTIsMTQgKzEyMTQsMTUgQEAKIAkJY3J5cHRfc3RhdC0+ZXh0ZW50X3NpemUgPSBFQ1JZUFRGU19ERUZBVUxUX0VYVEVOVF9TSVpFOwogCXJjID0gZWNyeXB0ZnNfcmVhZF9sb3dlcihkYXRhLCAwLCBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkgZWNyeXB0ZnNfaW5vZGUpOwotCWlmIChyYykgeworCWlmIChyYyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgcmVhZGluZyBoZWFkZXIgcmVnaW9uOyByYyA9IFslZF1cbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKCFjb250YWluc19lY3J5cHRmc19tYXJrZXIoZGF0YSArIEVDUllQVEZTX0ZJTEVfU0laRV9CWVRFUykpIHsKIAkJcmMgPSAtRUlOVkFMOwotCX0KKwl9IGVsc2UKKwkJcmMgPSAwOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTEzMTQsMTAgKzEzMTcsMTEgQEAKIAogCXJjID0gZWNyeXB0ZnNfd3JpdGVfbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlLCB2aXJ0LAogCQkJCSAgMCwgdmlydF9sZW4pOwotCWlmIChyYykKKwlpZiAocmMgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXB0aW5nIHRvIHdyaXRlIGhlYWRlciAiCi0JCSAgICAgICAiaW5mb3JtYXRpb24gdG8gbG93ZXIgZmlsZTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIHJjKTsKKwkJICAgICAgICJpbmZvcm1hdGlvbiB0byBsb3dlciBmaWxlOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CisJZWxzZQorCQlyYyA9IDA7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNTk3LDcgKzE2MDEsNyBAQAogCX0KIAlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXIocGFnZV92aXJ0LCAwLCBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkgZWNyeXB0ZnNfaW5vZGUpOwotCWlmICghcmMpCisJaWYgKHJjID49IDApCiAJCXJjID0gZWNyeXB0ZnNfcmVhZF9oZWFkZXJzX3ZpcnQocGFnZV92aXJ0LCBjcnlwdF9zdGF0LAogCQkJCQkJZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQkJRUNSWVBURlNfVkFMSURBVEVfSEVBREVSX1NJWkUpOwpAQCAtMTcwMiw3ICsxNzA2LDcgQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyBzdXBwb3J0IGZvciByZXF1ZXN0ZWQgZmlsZW5hbWUgIgogCQkgICAgICAgImVuY3J5cHRpb24gbWV0aG9kIGluIHRoaXMgcmVsZWFzZVxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogb3V0OgpAQCAtMTc2Myw3ICsxNzY3LDcgQEAKIAlpZiAoSVNfRVJSKCprZXlfdGZtKSkgewogCQlyYyA9IFBUUl9FUlIoKmtleV90Zm0pOwogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBjcnlwdG8gY2lwaGVyIHdpdGggbmFtZSAiCi0JCSAgICAgICAiWyVzXTsgcmMgPSBbJWRdXG4iLCBjaXBoZXJfbmFtZSwgcmMpOworCQkgICAgICAgIlslc107IHJjID0gWyVkXVxuIiwgZnVsbF9hbGdfbmFtZSwgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJY3J5cHRvX2Jsa2NpcGhlcl9zZXRfZmxhZ3MoKmtleV90Zm0sIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKTsKQEAgLTE3NzYsNyArMTc4MCw4IEBACiAJcmMgPSBjcnlwdG9fYmxrY2lwaGVyX3NldGtleSgqa2V5X3RmbSwgZHVtbXlfa2V5LCAqa2V5X3NpemUpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGF0dGVtcHRpbmcgdG8gc2V0IGtleSBvZiBzaXplIFslemRdIGZvciAiCi0JCSAgICAgICAiY2lwaGVyIFslc107IHJjID0gWyVkXVxuIiwgKmtleV9zaXplLCBjaXBoZXJfbmFtZSwgcmMpOworCQkgICAgICAgImNpcGhlciBbJXNdOyByYyA9IFslZF1cbiIsICprZXlfc2l6ZSwgZnVsbF9hbGdfbmFtZSwKKwkJICAgICAgIHJjKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTY2LDcgKzIxNzEsNyBAQAogCQkJKCplbmNvZGVkX25hbWUpWygqZW5jb2RlZF9uYW1lX3NpemUpXSA9ICdcMCc7CiAJCQkoKmVuY29kZWRfbmFtZV9zaXplKSsrOwogCQl9IGVsc2UgewotCQkJcmMgPSAtRU5PVFNVUFA7CisJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQl9CiAJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBlbmNvZGUgIgpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggMmYwOTQ1ZC4uMDU2ZmVkNjIgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmMKKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwpAQCAtNDc2LDYgKzQ3Niw3IEBACiAJc3RydWN0IGlub2RlICpsb3dlcl9kaXJfaW5vZGUgPSBlY3J5cHRmc19pbm9kZV90b19sb3dlcihkaXIpOwogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnk7CiAKKwlkZ2V0KGxvd2VyX2RlbnRyeSk7CiAJbG93ZXJfZGlyX2RlbnRyeSA9IGxvY2tfcGFyZW50KGxvd2VyX2RlbnRyeSk7CiAJcmMgPSB2ZnNfdW5saW5rKGxvd2VyX2Rpcl9pbm9kZSwgbG93ZXJfZGVudHJ5KTsKIAlpZiAocmMpIHsKQEAgLTQ4OSw2ICs0OTAsNyBAQAogCWRfZHJvcChkZW50cnkpOwogb3V0X3VubG9jazoKIAl1bmxvY2tfZGlyKGxvd2VyX2Rpcl9kZW50cnkpOworCWRwdXQobG93ZXJfZGVudHJ5KTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCmluZGV4IDI1OTUyNWMuLmEwYTc4NDcgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKKysrIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwpAQCAtNDE2LDcgKzQxNiw5IEBACiAJCQkgICAgJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0LAogCQkJICAgIG1vdW50X2NyeXB0X3N0YXRfbGlzdCkgewogCQlpZiAobWVtY21wKHdhbGtlci0+c2lnLCBzaWcsIEVDUllQVEZTX1NJR19TSVpFX0hFWCkgPT0gMCkgewotCQkJKCpnbG9iYWxfYXV0aF90b2spID0gd2Fsa2VyOworCQkJcmMgPSBrZXlfdmFsaWRhdGUod2Fsa2VyLT5nbG9iYWxfYXV0aF90b2tfa2V5KTsKKwkJCWlmICghcmMpCisJCQkJKCpnbG9iYWxfYXV0aF90b2spID0gd2Fsa2VyOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC02MTIsNyArNjE0LDEyIEBACiAJfQogCS8qIFRPRE86IFN1cHBvcnQgb3RoZXIga2V5IG1vZHVsZXMgdGhhbiBwYXNzcGhyYXNlIGZvcgogCSAqIGZpbGVuYW1lIGVuY3J5cHRpb24gKi8KLQlCVUdfT04ocy0+YXV0aF90b2stPnRva2VuX3R5cGUgIT0gRUNSWVBURlNfUEFTU1dPUkQpOworCWlmIChzLT5hdXRoX3Rvay0+dG9rZW5fdHlwZSAhPSBFQ1JZUFRGU19QQVNTV09SRCkgeworCQlyYyA9IC1FT1BOT1RTVVBQOworCQlwcmludGsoS0VSTl9JTkZPICIlczogRmlsZW5hbWUgZW5jcnlwdGlvbiBvbmx5IHN1cHBvcnRzICIKKwkJICAgICAgICJwYXNzd29yZCB0b2tlbnNcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXRfZnJlZV91bmxvY2s7CisJfQogCXNnX2luaXRfb25lKAogCQkmcy0+aGFzaF9zZywKIAkJKHU4ICopcy0+YXV0aF90b2stPnRva2VuLnBhc3N3b3JkLnNlc3Npb25fa2V5X2VuY3J5cHRpb25fa2V5LApAQCAtOTEwLDcgKzkxNywxMiBAQAogCX0KIAkvKiBUT0RPOiBTdXBwb3J0IG90aGVyIGtleSBtb2R1bGVzIHRoYW4gcGFzc3BocmFzZSBmb3IKIAkgKiBmaWxlbmFtZSBlbmNyeXB0aW9uICovCi0JQlVHX09OKHMtPmF1dGhfdG9rLT50b2tlbl90eXBlICE9IEVDUllQVEZTX1BBU1NXT1JEKTsKKwlpZiAocy0+YXV0aF90b2stPnRva2VuX3R5cGUgIT0gRUNSWVBURlNfUEFTU1dPUkQpIHsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpbGVuYW1lIGVuY3J5cHRpb24gb25seSBzdXBwb3J0cyAiCisJCSAgICAgICAicGFzc3dvcmQgdG9rZW5zXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZyZWVfdW5sb2NrOworCX0KIAlyYyA9IGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KAogCQlzLT5kZXNjLnRmbSwKIAkJcy0+YXV0aF90b2stPnRva2VuLnBhc3N3b3JkLnNlc3Npb25fa2V5X2VuY3J5cHRpb25fa2V5LApAQCAtMTMxNiw4ICsxMzI4LDEwIEBACiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZnJlZTsKIAl9Ci0JZWNyeXB0ZnNfY2lwaGVyX2NvZGVfdG9fc3RyaW5nKGNyeXB0X3N0YXQtPmNpcGhlciwKLQkJCQkgICAgICAgKHUxNilkYXRhWygqcGFja2V0X3NpemUpXSk7CisJcmMgPSBlY3J5cHRmc19jaXBoZXJfY29kZV90b19zdHJpbmcoY3J5cHRfc3RhdC0+Y2lwaGVyLAorCQkJCQkgICAgKHUxNilkYXRhWygqcGFja2V0X3NpemUpXSk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOwogCS8qIEEgbGl0dGxlIGV4dHJhIHdvcmsgdG8gZGlmZmVyZW50aWF0ZSBhbW9uZyB0aGUgQUVTIGtleQogCSAqIHNpemVzOyBzZWUgUkZDMjQ0MCAqLwogCXN3aXRjaChkYXRhWygqcGFja2V0X3NpemUpKytdKSB7CkBAIC0xMzI4LDcgKzEzNDIsOSBAQAogCQljcnlwdF9zdGF0LT5rZXlfc2l6ZSA9CiAJCQkoKm5ld19hdXRoX3RvayktPnNlc3Npb25fa2V5LmVuY3J5cHRlZF9rZXlfc2l6ZTsKIAl9Ci0JZWNyeXB0ZnNfaW5pdF9jcnlwdF9jdHgoY3J5cHRfc3RhdCk7CisJcmMgPSBlY3J5cHRmc19pbml0X2NyeXB0X2N0eChjcnlwdF9zdGF0KTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CiAJaWYgKHVubGlrZWx5KGRhdGFbKCpwYWNrZXRfc2l6ZSkrK10gIT0gMHgwMykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiT25seSBTMksgSUQgMyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkXG4iKTsKIAkJcmMgPSAtRU5PU1lTOwpAQCAtMjM2NiwyMSArMjM4MiwxOCBAQAogaW50IGVjcnlwdGZzX2FkZF9rZXlzaWcoc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQsIGNoYXIgKnNpZykKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfa2V5X3NpZyAqbmV3X2tleV9zaWc7Ci0JaW50IHJjID0gMDsKIAogCW5ld19rZXlfc2lnID0ga21lbV9jYWNoZV9hbGxvYyhlY3J5cHRmc19rZXlfc2lnX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19rZXlfc2lnKSB7Ci0JCXJjID0gLUVOT01FTTsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiRXJyb3IgYWxsb2NhdGluZyBmcm9tIGVjcnlwdGZzX2tleV9zaWdfY2FjaGVcbiIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbWNweShuZXdfa2V5X3NpZy0+a2V5c2lnLCBzaWcsIEVDUllQVEZTX1NJR19TSVpFX0hFWCk7Ci0JbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOworCS8qIENhbGxlciBtdXN0IGhvbGQga2V5c2lnX2xpc3RfbXV0ZXggKi8KIAlsaXN0X2FkZCgmbmV3X2tleV9zaWctPmNyeXB0X3N0YXRfbGlzdCwgJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0KTsKLQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0X211dGV4KTsKLW91dDoKLQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGttZW1fY2FjaGUgKmVjcnlwdGZzX2dsb2JhbF9hdXRoX3Rva19jYWNoZTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYyBiL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYwppbmRleCBjNmQ3YTRkLi5lMTRjZjdlIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rdGhyZWFkLmMKKysrIGIvZnMvZWNyeXB0ZnMva3RocmVhZC5jCkBAIC0xMzYsNiArMTM2LDcgQEAKIAkJCSAgICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCiB7CiAJc3RydWN0IGVjcnlwdGZzX29wZW5fcmVxICpyZXE7CisJaW50IGZsYWdzID0gT19MQVJHRUZJTEU7CiAJaW50IHJjID0gMDsKIAogCS8qIENvcnJlc3BvbmRpbmcgZHB1dCgpIGFuZCBtbnRwdXQoKSBhcmUgZG9uZSB3aGVuIHRoZQpAQCAtMTQzLDEwICsxNDQsMTQgQEAKIAkgKiBkZXN0cm95ZWQuICovCiAJZGdldChsb3dlcl9kZW50cnkpOwogCW1udGdldChsb3dlcl9tbnQpOwotCSgqbG93ZXJfZmlsZSkgPSBkZW50cnlfb3Blbihsb3dlcl9kZW50cnksIGxvd2VyX21udCwKLQkJCQkgICAgKE9fUkRXUiB8IE9fTEFSR0VGSUxFKSwgY3JlZCk7CisJZmxhZ3MgfD0gSVNfUkRPTkxZKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSkgPyBPX1JET05MWSA6IE9fUkRXUjsKKwkoKmxvd2VyX2ZpbGUpID0gZGVudHJ5X29wZW4obG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIGZsYWdzLCBjcmVkKTsKIAlpZiAoIUlTX0VSUigqbG93ZXJfZmlsZSkpCiAJCWdvdG8gb3V0OworCWlmIChmbGFncyAmIE9fUkRPTkxZKSB7CisJCXJjID0gUFRSX0VSUigoKmxvd2VyX2ZpbGUpKTsKKwkJZ290byBvdXQ7CisJfQogCXJlcSA9IGttZW1fY2FjaGVfYWxsb2MoZWNyeXB0ZnNfb3Blbl9yZXFfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghcmVxKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTE4MCwyMSArMTg1LDggQEAKIAkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlpZiAoSVNfRVJSKCpyZXEtPmxvd2VyX2ZpbGUpKSB7CisJaWYgKElTX0VSUigqcmVxLT5sb3dlcl9maWxlKSkKIAkJcmMgPSBQVFJfRVJSKCpyZXEtPmxvd2VyX2ZpbGUpOwotCQlkZ2V0KGxvd2VyX2RlbnRyeSk7Ci0JCW1udGdldChsb3dlcl9tbnQpOwotCQkoKmxvd2VyX2ZpbGUpID0gZGVudHJ5X29wZW4obG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsCi0JCQkJCSAgICAoT19SRE9OTFkgfCBPX0xBUkdFRklMRSksIGNyZWQpOwotCQlpZiAoSVNfRVJSKCpsb3dlcl9maWxlKSkgewotCQkJcmMgPSBQVFJfRVJSKCpyZXEtPmxvd2VyX2ZpbGUpOwotCQkJKCpsb3dlcl9maWxlKSA9IE5VTEw7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgYXR0ZW1wdGluZyBwcml2aWxlZ2VkICIKLQkJCSAgICAgICAib3BlbiBvZiBsb3dlciBmaWxlIHdpdGggZWl0aGVyIFJXIG9yIFJPICIKLQkJCSAgICAgICAicGVybXM7IHJjID0gWyVkXS4gR2l2aW5nIHVwLlxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOwotCQl9Ci0JfQogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJnJlcS0+bXV4KTsKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWFpbi5jIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCmluZGV4IDlmMGFhOTguLmM2YWM4NWQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21haW4uYworKysgYi9mcy9lY3J5cHRmcy9tYWluLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9mc19zdGFjay5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgImVjcnlwdGZzX2tlcm5lbC5oIgogCiAvKioKQEAgLTExOCw2ICsxMTksNyBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm8gPQogCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7CisJaW50IG9wZW5lZF9sb3dlcl9maWxlID0gMDsKIAlpbnQgcmMgPSAwOwogCiAJbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CkBAIC0xMjksMTUgKzEzMSwxNyBAQAogCQlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZWNyeXB0ZnNfZGVudHJ5KTsKIAkJcmMgPSBlY3J5cHRmc19wcml2aWxlZ2VkX29wZW4oJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUsCiAJCQkJCSAgICAgIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCBjcmVkKTsKLQkJaWYgKHJjIHx8IElTX0VSUihpbm9kZV9pbmZvLT5sb3dlcl9maWxlKSkgeworCQlpZiAocmMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb3BlbmluZyBsb3dlciBwZXJzaXN0ZW50IGZpbGUgIgogCQkJICAgICAgICJmb3IgbG93ZXJfZGVudHJ5IFsweCVwXSBhbmQgbG93ZXJfbW50IFsweCVwXTsgIgogCQkJICAgICAgICJyYyA9IFslZF1cbiIsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCByYyk7Ci0JCQlyYyA9IFBUUl9FUlIoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CiAJCQlpbm9kZV9pbmZvLT5sb3dlcl9maWxlID0gTlVMTDsKLQkJfQorCQl9IGVsc2UKKwkJCW9wZW5lZF9sb3dlcl9maWxlID0gMTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwlpZiAob3BlbmVkX2xvd2VyX2ZpbGUpCisJCWltYV9jb3VudHNfZ2V0KGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbW1hcC5jIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCmluZGV4IDA1NzcyYWUuLmRmNGNlOTkgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21tYXAuYworKysgYi9mcy9lY3J5cHRmcy9tbWFwLmMKQEAgLTM5Niw5ICszOTYsMTEgQEAKIAlyYyA9IGVjcnlwdGZzX3dyaXRlX2xvd2VyKGVjcnlwdGZzX2lub2RlLCBmaWxlX3NpemVfdmlydCwgMCwKIAkJCQkgIHNpemVvZih1NjQpKTsKIAlrZnJlZShmaWxlX3NpemVfdmlydCk7Ci0JaWYgKHJjKQorCWlmIChyYyA8IDApCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHdyaXRpbmcgZmlsZSBzaXplIHRvIGhlYWRlcjsgIgogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKKwllbHNlCisJCXJjID0gMDsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMgYi9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMKaW5kZXggYTEzN2M2ZS4uMGNjNGZhZiAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL2VjcnlwdGZzL3JlYWRfd3JpdGUuYwpAQCAtMzQsMTUgKzM0LDE0IEBACiAgKgogICogV3JpdGUgZGF0YSB0byB0aGUgbG93ZXIgZmlsZS4KICAqCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb24gZXJyb3IKKyAqIFJldHVybnMgYnl0ZXMgd3JpdHRlbiBvbiBzdWNjZXNzOyBsZXNzIHRoYW4gemVybyBvbiBlcnJvcgogICovCiBpbnQgZWNyeXB0ZnNfd3JpdGVfbG93ZXIoc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSwgY2hhciAqZGF0YSwKIAkJCSBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKLQlzc2l6ZV90IG9jdGV0c193cml0dGVuOwogCW1tX3NlZ21lbnRfdCBmc19zYXZlOwotCWludCByYyA9IDA7CisJc3NpemVfdCByYzsKIAogCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2lub2RlKTsKIAltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKQEAgLTUwLDE0ICs0OSw5IEBACiAJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CiAJZnNfc2F2ZSA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7Ci0Jb2N0ZXRzX3dyaXR0ZW4gPSB2ZnNfd3JpdGUoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSwgZGF0YSwgc2l6ZSwKLQkJCQkgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MpOworCXJjID0gdmZzX3dyaXRlKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCisJCSAgICAgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MpOwogCXNldF9mcyhmc19zYXZlKTsKLQlpZiAob2N0ZXRzX3dyaXR0ZW4gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG9jdGV0c193cml0dGVuID0gWyV0ZF07ICIKLQkJICAgICAgICJleHBlY3RlZCBbJXRkXVxuIiwgX19mdW5jX18sIG9jdGV0c193cml0dGVuLCBzaXplKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0KIAltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwogCW1hcmtfaW5vZGVfZGlydHlfc3luYyhlY3J5cHRmc19pbm9kZSk7CiAJcmV0dXJuIHJjOwpAQCAtOTEsNiArODUsOCBAQAogCQkgICsgb2Zmc2V0X2luX3BhZ2UpOwogCXZpcnQgPSBrbWFwKHBhZ2VfZm9yX2xvd2VyKTsKIAlyYyA9IGVjcnlwdGZzX3dyaXRlX2xvd2VyKGVjcnlwdGZzX2lub2RlLCB2aXJ0LCBvZmZzZXQsIHNpemUpOworCWlmIChyYyA+IDApCisJCXJjID0gMDsKIAlrdW5tYXAocGFnZV9mb3JfbG93ZXIpOwogCXJldHVybiByYzsKIH0KQEAgLTIyOSwzMCArMjI1LDI0IEBACiAgKiBSZWFkIEBzaXplIGJ5dGVzIG9mIGRhdGEgYXQgYnl0ZSBvZmZzZXQgQG9mZnNldCBmcm9tIHRoZSBsb3dlcgogICogaW5vZGUgaW50byBtZW1vcnkgbG9jYXRpb24gQGRhdGEuCiAgKgotICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IG5vbi16ZXJvIG9uIGVycm9yCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzczsgMCBvbiBFT0Y7IGxlc3MgdGhhbiB6ZXJvIG9uIGVycm9yCiAgKi8KIGludCBlY3J5cHRmc19yZWFkX2xvd2VyKGNoYXIgKmRhdGEsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplLAogCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbyA9CiAJCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfaW5vZGUpOwotCXNzaXplX3Qgb2N0ZXRzX3JlYWQ7CiAJbW1fc2VnbWVudF90IGZzX3NhdmU7Ci0JaW50IHJjID0gMDsKKwlzc2l6ZV90IHJjOwogCiAJbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CiAJQlVHX09OKCFpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKIAlpbm9kZV9pbmZvLT5sb3dlcl9maWxlLT5mX3BvcyA9IG9mZnNldDsKIAlmc19zYXZlID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKGdldF9kcygpKTsKLQlvY3RldHNfcmVhZCA9IHZmc19yZWFkKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCi0JCQkgICAgICAgJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUtPmZfcG9zKTsKKwlyYyA9IHZmc19yZWFkKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCisJCSAgICAgICZpbm9kZV9pbmZvLT5sb3dlcl9maWxlLT5mX3Bvcyk7CiAJc2V0X2ZzKGZzX3NhdmUpOwotCWlmIChvY3RldHNfcmVhZCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb2N0ZXRzX3JlYWQgPSBbJXRkXTsgIgotCQkgICAgICAgImV4cGVjdGVkIFsldGRdXG4iLCBfX2Z1bmNfXywgb2N0ZXRzX3JlYWQsIHNpemUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JfQogCW11dGV4X3VubG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjg0LDYgKzI3NCw4IEBACiAJb2Zmc2V0ID0gKCgoKGxvZmZfdClwYWdlX2luZGV4KSA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIG9mZnNldF9pbl9wYWdlKTsKIAl2aXJ0ID0ga21hcChwYWdlX2Zvcl9lY3J5cHRmcyk7CiAJcmMgPSBlY3J5cHRmc19yZWFkX2xvd2VyKHZpcnQsIG9mZnNldCwgc2l6ZSwgZWNyeXB0ZnNfaW5vZGUpOworCWlmIChyYyA+IDApCisJCXJjID0gMDsKIAlrdW5tYXAocGFnZV9mb3JfZWNyeXB0ZnMpOwogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfZm9yX2VjcnlwdGZzKTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9zdXBlci5jIGIvZnMvZWNyeXB0ZnMvc3VwZXIuYwppbmRleCAxMmQ2NDk2Li5iMTVhNDNhIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9zdXBlci5jCisrKyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKQEAgLTc3LDcgKzc3LDYgQEAKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKIAogCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKTsKLQltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKIAlpZiAoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPQogCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9kZW50cnk7CkBAIC04OSw3ICs4OCw2IEBACiAJCQlkX2Ryb3AobG93ZXJfZGVudHJ5KTsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwogCWVjcnlwdGZzX2Rlc3Ryb3lfY3J5cHRfc3RhdCgmaW5vZGVfaW5mby0+Y3J5cHRfc3RhdCk7CiAJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2lub2RlX2luZm9fY2FjaGUsIGlub2RlX2luZm8pOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGQ0OWJlNmIuLmJhMTEyYmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTYyNCwxMCArNjI0LDggQEAKIAkvKiBNb3ZlIHN0YWNrIHBhZ2VzIGRvd24gaW4gbWVtb3J5LiAqLwogCWlmIChzdGFja19zaGlmdCkgewogCQlyZXQgPSBzaGlmdF9hcmdfcGFnZXModm1hLCBzdGFja19zaGlmdCk7Ci0JCWlmIChyZXQpIHsKLQkJCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCkBAIC02NDEsNyArNjM5LDcgQEAKIAogb3V0X3VubG9jazoKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpOwogCmRpZmYgLS1naXQgYS9mcy9leHQzL2ZzeW5jLmMgYi9mcy9leHQzL2ZzeW5jLmMKaW5kZXggNDUxZDE2Ni4uODIwOWYyNiAxMDA2NDQKLS0tIGEvZnMvZXh0My9mc3luYy5jCisrKyBiL2ZzL2V4dDMvZnN5bmMuYwpAQCAtNDYsMTkgKzQ2LDIxIEBACiBpbnQgZXh0M19zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKKwlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19qb3VybmFsOwogCWludCByZXQgPSAwOworCXRpZF90IGNvbW1pdF90aWQ7CisKKwlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybiAwOwogCiAJSl9BU1NFUlQoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkgPT0gTlVMTCk7CiAKIAkvKgotCSAqIGRhdGE9d3JpdGViYWNrOgorCSAqIGRhdGE9d3JpdGViYWNrLG9yZGVyZWQ6CiAJICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS4KLQkgKiAgc3luY19pbm9kZSgpIHdpbGwgc3luYyB0aGUgbWV0YWRhdGEKLQkgKgotCSAqIGRhdGE9b3JkZXJlZDoKLQkgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpIHdpbGwgd3JpdGUgdGhlIGRhdGEgYW5kCi0JICogIHN5bmNfaW5vZGUoKSB3aWxsIHdyaXRlIHRoZSBpbm9kZSBpZiBpdCBpcyBkaXJ0eS4gIFRoZW4gdGhlIGNhbGxlcidzCi0JICogIGZpbGVtYXBfZmRhdGF3YWl0KCkgd2lsbCB3YWl0IG9uIHRoZSBwYWdlcy4KKwkgKiAgTWV0YWRhdGEgaXMgaW4gdGhlIGpvdXJuYWwsIHdlIHdhaXQgZm9yIGEgcHJvcGVyIHRyYW5zYWN0aW9uCisJICogIHRvIGNvbW1pdCBoZXJlLgogCSAqCiAJICogZGF0YT1qb3VybmFsOgogCSAqICBmaWxlbWFwX2ZkYXRhd3JpdGUgd29uJ3QgZG8gYW55dGhpbmcgKHRoZSBidWZmZXJzIGFyZSBjbGVhbikuCkBAIC03MywyMiArNzUsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGRhdGFzeW5jICYmICEoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZX0RBVEFTWU5DKSkKLQkJZ290byBmbHVzaDsKKwlpZiAoZGF0YXN5bmMpCisJCWNvbW1pdF90aWQgPSBhdG9taWNfcmVhZCgmZWktPmlfZGF0YXN5bmNfdGlkKTsKKwllbHNlCisJCWNvbW1pdF90aWQgPSBhdG9taWNfcmVhZCgmZWktPmlfc3luY190aWQpOwogCi0JLyoKLQkgKiBUaGUgVkZTIGhhcyB3cml0dGVuIHRoZSBmaWxlIGRhdGEuICBJZiB0aGUgaW5vZGUgaXMgdW5hbHRlcmVkCi0JICogdGhlbiB3ZSBuZWVkIG5vdCBzdGFydCBhIGNvbW1pdC4KLQkgKi8KLQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9ESVJUWV9TWU5DfElfRElSVFlfREFUQVNZTkMpKSB7Ci0JCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCi0JCQkubnJfdG9fd3JpdGUgPSAwLCAvKiBzeXNfZnN5bmMgZGlkIHRoaXMgKi8KLQkJfTsKLQkJcmV0ID0gc3luY19pbm9kZShpbm9kZSwgJndiYyk7CisJaWYgKGxvZ19zdGFydF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCkpIHsKKwkJbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpOwogCQlnb3RvIG91dDsKIAl9Ci1mbHVzaDoKKwogCS8qCiAJICogSW4gY2FzZSB3ZSBkaWRuJ3QgY29tbWl0IGEgdHJhbnNhY3Rpb24sIHdlIGhhdmUgdG8gZmx1c2gKIAkgKiBkaXNrIGNhY2hlcyBtYW51YWxseSBzbyB0aGF0IGRhdGEgcmVhbGx5IGlzIG9uIHBlcnNpc3RlbnQKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBhY2YxYjE0Li4zNTRlZDNiIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC02OTksOCArNjk5LDkgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZXh0M19ibG9ja19hbGxvY19pbmZvICpibG9ja19pOwogCWV4dDNfZnNibGtfdCBjdXJyZW50X2Jsb2NrOworCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKIAotCWJsb2NrX2kgPSBFWFQzX0koaW5vZGUpLT5pX2Jsb2NrX2FsbG9jX2luZm87CisJYmxvY2tfaSA9IGVpLT5pX2Jsb2NrX2FsbG9jX2luZm87CiAJLyoKIAkgKiBJZiB3ZSdyZSBzcGxpY2luZyBpbnRvIGEgW3RkXWluZGlyZWN0IGJsb2NrIChhcyBvcHBvc2VkIHRvIHRoZQogCSAqIGlub2RlKSB0aGVuIHdlIG5lZWQgdG8gZ2V0IHdyaXRlIGFjY2VzcyB0byB0aGUgW3RkXWluZGlyZWN0IGJsb2NrCkBAIC03NDEsNiArNzQyLDggQEAKIAogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisJLyogZXh0M19tYXJrX2lub2RlX2RpcnR5IGFscmVhZHkgdXBkYXRlZCBpX3N5bmNfdGlkICovCisJYXRvbWljX3NldCgmZWktPmlfZGF0YXN5bmNfdGlkLCBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKTsKIAogCS8qIGhhZCB3ZSBzcGxpY2VkIGl0IG9udG8gaW5kaXJlY3QgYmxvY2s/ICovCiAJaWYgKHdoZXJlLT5iaCkgewpAQCAtMTczNSw2ICsxNzM4LDcgQEAKIAlzc2l6ZV90IHJldDsKIAlpbnQgb3JwaGFuID0gMDsKIAlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaW50IHJldHJpZXMgPSAwOwogCiAJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CkBAIC0xNzU3LDkgKzE3NjEsMTIgQEAKIAkJfQogCX0KIAorcmV0cnk6CiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDNfZ2V0X2Jsb2NrLCBOVUxMKTsKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKKwkJZ290byByZXRyeTsKIAogCWlmIChvcnBoYW4pIHsKIAkJaW50IGVycjsKQEAgLTI3NTAsNiArMjc1Nyw4IEBACiAJc3RydWN0IGV4dDNfaW5vZGVfaW5mbyAqZWk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWw7CisJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247CiAJbG9uZyByZXQ7CiAJaW50IGJsb2NrOwogCkBAIC0yODI3LDYgKzI4MzYsMzAgQEAKIAkJZWktPmlfZGF0YVtibG9ja10gPSByYXdfaW5vZGUtPmlfYmxvY2tbYmxvY2tdOwogCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9vcnBoYW4pOwogCisJLyoKKwkgKiBTZXQgdHJhbnNhY3Rpb24gaWQncyBvZiB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIHRvIGJlIGNvbW1pdHRlZAorCSAqIHRvIGZpbmlzaCBmW2RhdGFdc3luYy4gV2Ugc2V0IHRoZW0gdG8gY3VycmVudGx5IHJ1bm5pbmcgdHJhbnNhY3Rpb24KKwkgKiBhcyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGF0IHRoZSBpbm9kZSBvciBzb21lIG9mIGl0cyBtZXRhZGF0YSBpc24ndAorCSAqIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uIC0gdGhlIGlub2RlIGNvdWxkIGhhdmUgYmVlbiByZWNsYWltZWQgYW5kCisJICogbm93IGl0IGlzIHJlcmVhZCBmcm9tIGRpc2suCisJICovCisJaWYgKGpvdXJuYWwpIHsKKwkJdGlkX3QgdGlkOworCisJCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJaWYgKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikKKwkJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uOworCQllbHNlCisJCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKKwkJaWYgKHRyYW5zYWN0aW9uKQorCQkJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOworCQllbHNlCisJCQl0aWQgPSBqb3VybmFsLT5qX2NvbW1pdF9zZXF1ZW5jZTsKKwkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCB0aWQpOworCQlhdG9taWNfc2V0KCZlaS0+aV9kYXRhc3luY190aWQsIHRpZCk7CisJfQorCiAJaWYgKGlub2RlLT5pX2lubyA+PSBFWFQzX0ZJUlNUX0lOTyhpbm9kZS0+aV9zYikgKyAxICYmCiAJICAgIEVYVDNfSU5PREVfU0laRShpbm9kZS0+aV9zYikgPiBFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUpIHsKIAkJLyoKQEAgLTMwMTEsNiArMzA0NCw3IEBACiAJCWVyciA9IHJjOwogCWVpLT5pX3N0YXRlICY9IH5FWFQzX1NUQVRFX05FVzsKIAorCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKTsKIG91dF9icmVsc2U6CiAJYnJlbHNlIChiaCk7CiAJZXh0M19zdGRfZXJyb3IoaW5vZGUtPmlfc2IsIGVycik7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggNzI3NDNkMy4uNDI3NDk2YyAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNDY2LDYgKzQ2Niw4IEBACiAJCXJldHVybiBOVUxMOwogCWVpLT5pX2Jsb2NrX2FsbG9jX2luZm8gPSBOVUxMOwogCWVpLT52ZnNfaW5vZGUuaV92ZXJzaW9uID0gMTsKKwlhdG9taWNfc2V0KCZlaS0+aV9kYXRhc3luY190aWQsIDApOworCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCAwKTsKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTIzMjEsNyArMjMyMywxOCBAQAogCiAJaWYgKCFzYmgpCiAJCXJldHVybiBlcnJvcjsKLQllcy0+c193dGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOworCS8qCisJICogSWYgdGhlIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQgcmVhZC1vbmx5LCBkb24ndCB1cGRhdGUgdGhlCisJICogc3VwZXJibG9jayB3cml0ZSB0aW1lLiAgVGhpcyBhdm9pZHMgdXBkYXRpbmcgdGhlIHN1cGVyYmxvY2sKKwkgKiB3cml0ZSB0aW1lIHdoZW4gd2UgYXJlIG1vdW50aW5nIHRoZSByb290IGZpbGUgc3lzdGVtCisJICogcmVhZC9vbmx5IGJ1dCB3ZSBuZWVkIHRvIHJlcGxheSB0aGUgam91cm5hbDsgYXQgdGhhdCBwb2ludCwKKwkgKiBmb3IgcGVvcGxlIHdobyBhcmUgZWFzdCBvZiBHTVQgYW5kIHdobyBtYWtlIHRoZWlyIGNsb2NrCisJICogdGljayBpbiBsb2NhbHRpbWUgZm9yIFdpbmRvd3MgYnVnLWZvci1idWcgY29tcGF0aWJpbGl0eSwKKwkgKiB0aGUgY2xvY2sgaXMgc2V0IGluIHRoZSBmdXR1cmUsIGFuZCB0aGlzIHdpbGwgY2F1c2UgZTJmc2NrCisJICogdG8gY29tcGxhaW4gYW5kIGZvcmNlIGEgZnVsbCBmaWxlIHN5c3RlbSBjaGVjay4KKwkgKi8KKwlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCisJCWVzLT5zX3d0aW1lID0gY3B1X3RvX2xlMzIoZ2V0X3NlY29uZHMoKSk7CiAJZXMtPnNfZnJlZV9ibG9ja3NfY291bnQgPSBjcHVfdG9fbGUzMihleHQzX2NvdW50X2ZyZWVfYmxvY2tzKHNiKSk7CiAJZXMtPnNfZnJlZV9pbm9kZXNfY291bnQgPSBjcHVfdG9fbGUzMihleHQzX2NvdW50X2ZyZWVfaW5vZGVzKHNiKSk7CiAJQlVGRkVSX1RSQUNFKHNiaCwgIm1hcmtpbmcgZGlydHkiKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvS2NvbmZpZyBiL2ZzL2V4dDQvS2NvbmZpZwppbmRleCBkNWMwZWEyLi45ZjJkNDVkIDEwMDY0NAotLS0gYS9mcy9leHQ0L0tjb25maWcKKysrIGIvZnMvZXh0NC9LY29uZmlnCkBAIC0yNiwyMCArMjYsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgRVhUNERFVl9DT01QQVQKLQlib29sICJFbmFibGUgZXh0NGRldiBjb21wYXRpYmlsaXR5IgotCWRlcGVuZHMgb24gRVhUNF9GUwotCWhlbHAKLQkgIFN0YXJ0aW5nIHdpdGggMi42LjI4LCB0aGUgbmFtZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdhcwotCSAgcmVuYW1lZCBmcm9tIGV4dDRkZXYgdG8gZXh0NC4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIHNvbWUKLQkgIGxlZ2FjeSB1c2Vyc3BhY2UgcHJvZ3JhbXMgKHN1Y2ggYXMga2xpYmMncyBmc3R5cGUpIGhhdmUKLQkgICJleHQ0ZGV2IiBoYXJkY29kZWQuCi0KLQkgIFRvIGVuYWJsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzbyB0aGF0IHN5c3RlbXMgdGhhdCBhcmUKLQkgIHN0aWxsIGV4cGVjdGluZyB0byBtb3VudCBleHQ0IGZpbGVzeXN0ZW1zIHVzaW5nIGV4dDRkZXYsCi0JICBjaG9vc2UgWSBoZXJlLiAgIFRoaXMgZmVhdHVyZSB3aWxsIGdvIGF3YXkgYnkgMi42LjMxLCBzbwotCSAgcGxlYXNlIGFycmFuZ2UgdG8gZ2V0IHlvdXIgdXNlcnNwYWNlIHByb2dyYW1zIGZpeGVkIQotCiBjb25maWcgRVhUNF9GU19YQVRUUgogCWJvb2wgIkV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcyIKIAlkZXBlbmRzIG9uIEVYVDRfRlMKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggZTIyN2VlYS4uODgyNTUxNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTY1LDYgKzY1LDEyIEBACiAvKiBkYXRhIHR5cGUgZm9yIGJsb2NrIGdyb3VwIG51bWJlciAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZXh0NF9ncm91cF90OwogCisvKgorICogRmxhZ3MgdXNlZCBpbiBtYmFsbG9jJ3MgYWxsb2NhdGlvbl9jb250ZXh0IGZsYWdzIGZpZWxkLiAgCisgKgorICogQWxzbyB1c2VkIHRvIHNob3cgd2hhdCdzIGdvaW5nIG9uIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgd2hlbiB0aGUKKyAqIGZsYWcgZmllbGQgaXMgZXhwb3J0ZWQgdmlhIHRoZSB0cmFjZXBvcnQgaW50ZXJmYWNlCisgKi8KIAogLyogcHJlZmVyIGdvYWwgYWdhaW4uIGxlbmd0aCAqLwogI2RlZmluZSBFWFQ0X01CX0hJTlRfTUVSR0UJCTB4MDAwMQpAQCAtMTI3LDYgKzEzMywxNiBAQAogCWludCBwYWdlc193cml0dGVuOwogCWludCByZXR2YWw7CiB9OworI2RlZmluZQlESU9fQUlPX1VOV1JJVFRFTgkweDEKK3R5cGVkZWYgc3RydWN0IGV4dDRfaW9fZW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBwZXItZmlsZSBmaW5pc2hlZCBBSU8gbGlzdCAqLworCXN0cnVjdCBpbm9kZQkJKmlub2RlOwkJLyogZmlsZSBiZWluZyB3cml0dGVuIHRvICovCisJdW5zaWduZWQgaW50CQlmbGFnOwkJLyogdW53cml0dGVuIG9yIG5vdCAqLworCWludAkJCWVycm9yOwkJLyogSS9PIGVycm9yIGNvZGUgKi8KKwlleHQ0X2xibGtfdAkJb2Zmc2V0OwkJLyogb2Zmc2V0IGluIHRoZSBmaWxlICovCisJc2l6ZV90CQkJc2l6ZTsJCS8qIHNpemUgb2YgdGhlIGV4dGVudCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwkJLyogZGF0YSB3b3JrIHF1ZXVlICovCit9IGV4dDRfaW9fZW5kX3Q7CiAKIC8qCiAgKiBTcGVjaWFsIGlub2RlcyBudW1iZXJzCkBAIC0zMDYsNiArMzIyLDcgQEAKICNkZWZpbmUgRVhUNF9TVEFURV9OT19FWFBBTkQJCTB4MDAwMDAwMDggLyogTm8gc3BhY2UgZm9yIGV4cGFuc2lvbiAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFCTB4MDAwMDAwMTAgLyogQWxsb2MgREEgYmxrcyBvbiBjbG9zZSAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFCQkweDAwMDAwMDIwIC8qIElub2RlIGlzIG1pZ3JhdGluZyAqLworI2RlZmluZSBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU4JMHgwMDAwMDA0MCAvKiBuZWVkIGNvbnZlcnQgb24gZGlvIGRvbmUqLwogCiAvKiBVc2VkIHRvIHBhc3MgZ3JvdXAgZGVzY3JpcHRvciBkYXRhIHdoZW4gb25saW5lIHJlc2l6ZSBpcyBkb25lICovCiBzdHJ1Y3QgZXh0NF9uZXdfZ3JvdXBfaW5wdXQgewpAQCAtMzQ3LDcgKzM2NCwxNiBAQAogCS8qIENhbGwgZXh0NF9kYV91cGRhdGVfcmVzZXJ2ZV9zcGFjZSgpIGFmdGVyIHN1Y2Nlc3NmdWxseSAKIAkgICBhbGxvY2F0aW5nIHRoZSBibG9ja3MgKi8KICNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX1VQREFURV9SRVNFUlZFX1NQQUNFCTB4MDAwOAotCisJLyogY2FsbGVyIGlzIGZyb20gdGhlIGRpcmVjdCBJTyBwYXRoLCByZXF1ZXN0IHRvIGNyZWF0aW9uIG9mIGFuCisJdW5pdGlhbGl6ZWQgZXh0ZW50cyBpZiBub3QgYWxsb2NhdGVkLCBzcGxpdCB0aGUgdW5pbml0aWFsaXplZAorCWV4dGVudCBpZiBibG9ja3MgaGFzIGJlZW4gcHJlYWxsb2NhdGVkIGFscmVhZHkqLworI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfRElPCQkJMHgwMDEwCisjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19DT05WRVJUCQkJMHgwMDIwCisjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVAkJKEVYVDRfR0VUX0JMT0NLU19ESU98XAorCQkJCQkgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9VTklOSVRfRVhUKQorCS8qIENvbnZlcnQgZXh0ZW50IHRvIGluaXRpYWxpemVkIGFmdGVyIGRpcmVjdCBJTyBjb21wbGV0ZSAqLworI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NPTlZFUlRfRVhUCQkoRVhUNF9HRVRfQkxPQ0tTX0NPTlZFUlR8XAorCQkJCQkgRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQogCiAvKgogICogaW9jdGwgY29tbWFuZHMKQEAgLTUwMCw4ICs1MjYsOCBAQAogc3RhdGljIGlubGluZSBfX2xlMzIgZXh0NF9lbmNvZGVfZXh0cmFfdGltZShzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpCiB7CiAgICAgICAgcmV0dXJuIGNwdV90b19sZTMyKChzaXplb2YodGltZS0+dHZfc2VjKSA+IDQgPwotCQkJICAgdGltZS0+dHZfc2VjID4+IDMyIDogMCkgfAotCQkJICAgKCh0aW1lLT50dl9uc2VjIDw8IDIpICYgRVhUNF9OU0VDX01BU0spKTsKKwkJCSAgICh0aW1lLT50dl9zZWMgPj4gMzIpICYgRVhUNF9FUE9DSF9NQVNLIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHRpbWUtPnR2X25zZWMgPDwgRVhUNF9FUE9DSF9CSVRTKSAmIEVYVDRfTlNFQ19NQVNLKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2RlY29kZV9leHRyYV90aW1lKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgX19sZTMyIGV4dHJhKQpAQCAtNTA5LDcgKzUzNSw3IEBACiAgICAgICAgaWYgKHNpemVvZih0aW1lLT50dl9zZWMpID4gNCkKIAkgICAgICAgdGltZS0+dHZfc2VjIHw9IChfX3U2NCkobGUzMl90b19jcHUoZXh0cmEpICYgRVhUNF9FUE9DSF9NQVNLKQogCQkJICAgICAgIDw8IDMyOwotICAgICAgIHRpbWUtPnR2X25zZWMgPSAobGUzMl90b19jcHUoZXh0cmEpICYgRVhUNF9OU0VDX01BU0spID4+IDI7CisgICAgICAgdGltZS0+dHZfbnNlYyA9IChsZTMyX3RvX2NwdShleHRyYSkgJiBFWFQ0X05TRUNfTUFTSykgPj4gRVhUNF9FUE9DSF9CSVRTOwogfQogCiAjZGVmaW5lIEVYVDRfSU5PREVfU0VUX1hUSU1FKHh0aW1lLCBpbm9kZSwgcmF3X2lub2RlKQkJCSAgICAgICBcCkBAIC02NzIsNiArNjk4LDExIEBACiAJX191MTYgaV9leHRyYV9pc2l6ZTsKIAogCXNwaW5sb2NrX3QgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrOworCisJLyogY29tcGxldGVkIGFzeW5jIERJT3MgdGhhdCBtaWdodCBuZWVkIHVud3JpdHRlbiBleHRlbnRzIGhhbmRsaW5nICovCisJc3RydWN0IGxpc3RfaGVhZCBpX2Fpb19kaW9fY29tcGxldGVfbGlzdDsKKwkvKiBjdXJyZW50IGlvX2VuZCBzdHJ1Y3R1cmUgZm9yIGFzeW5jIERJTyB3cml0ZSovCisJZXh0NF9pb19lbmRfdCAqY3VyX2Fpb19kaW87CiB9OwogCiAvKgpAQCAtNzEzLDYgKzc0NCw3IEBACiAjZGVmaW5lIEVYVDRfTU9VTlRfUVVPVEEJCTB4ODAwMDAgLyogU29tZSBxdW90YSBvcHRpb24gc2V0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfVVNSUVVPVEEJCTB4MTAwMDAwIC8qICJvbGQiIHVzZXIgcXVvdGEgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9HUlBRVU9UQQkJMHgyMDAwMDAgLyogIm9sZCIgZ3JvdXAgcXVvdGEgKi8KKyNkZWZpbmUgRVhUNF9NT1VOVF9KT1VSTkFMX0NIRUNLU1VNCTB4ODAwMDAwIC8qIEpvdXJuYWwgY2hlY2tzdW1zICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSk9VUk5BTF9BU1lOQ19DT01NSVQJMHgxMDAwMDAwIC8qIEpvdXJuYWwgQXN5bmMgQ29tbWl0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSV9WRVJTSU9OICAgICAgICAgICAgMHgyMDAwMDAwIC8qIGlfdmVyc2lvbiBzdXBwb3J0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfREVMQUxMT0MJCTB4ODAwMDAwMCAvKiBEZWxhbGxvYyBzdXBwb3J0ICovCkBAIC05NDIsMTggKzk3NCwxMSBAQAogCXVuc2lnbmVkIGludCBzX21iX3N0YXRzOwogCXVuc2lnbmVkIGludCBzX21iX29yZGVyMl9yZXFzOwogCXVuc2lnbmVkIGludCBzX21iX2dyb3VwX3ByZWFsbG9jOworCXVuc2lnbmVkIGludCBzX21heF93cml0ZWJhY2tfbWJfYnVtcDsKIAkvKiB3aGVyZSBsYXN0IGFsbG9jYXRpb24gd2FzIGRvbmUgLSBmb3Igc3RyZWFtIGFsbG9jYXRpb24gKi8KIAl1bnNpZ25lZCBsb25nIHNfbWJfbGFzdF9ncm91cDsKIAl1bnNpZ25lZCBsb25nIHNfbWJfbGFzdF9zdGFydDsKIAotCS8qIGhpc3RvcnkgdG8gZGVidWcgcG9saWN5ICovCi0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqc19tYl9oaXN0b3J5OwotCWludCBzX21iX2hpc3RvcnlfY3VyOwotCWludCBzX21iX2hpc3RvcnlfbWF4OwotCWludCBzX21iX2hpc3RvcnlfbnVtOwotCXNwaW5sb2NrX3Qgc19tYl9oaXN0b3J5X2xvY2s7Ci0JaW50IHNfbWJfaGlzdG9yeV9maWx0ZXI7Ci0KIAkvKiBzdGF0cyBmb3IgYnVkZHkgYWxsb2NhdG9yICovCiAJc3BpbmxvY2tfdCBzX21iX3BhX2xvY2s7CiAJYXRvbWljX3Qgc19iYWxfcmVxczsJLyogbnVtYmVyIG9mIHJlcXMgd2l0aCBsZW4gPiAxICovCkBAIC05ODAsNiArMTAwNSw5IEBACiAKIAl1bnNpZ25lZCBpbnQgc19sb2dfZ3JvdXBzX3Blcl9mbGV4OwogCXN0cnVjdCBmbGV4X2dyb3VwcyAqc19mbGV4X2dyb3VwczsKKworCS8qIHdvcmtxdWV1ZSBmb3IgZGlvIHVud3JpdHRlbiAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkaW9fdW53cml0dGVuX3dxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpFWFQ0X1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0xMzk3LDcgKzE0MjUsNyBAQAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGZyb20pOwogZXh0ZXJuIGludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogZXh0ZXJuIHFzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7Ci0KK2V4dGVybiBpbnQgZmx1c2hfYWlvX2Rpb19jb21wbGV0ZWRfSU8oc3RydWN0IGlub2RlICppbm9kZSk7CiAvKiBpb2N0bC5jICovCiBleHRlcm4gbG9uZyBleHQ0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gbG9uZyBleHQ0X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwpAQCAtMTY5OSw2ICsxNzI3LDggQEAKIGV4dGVybiB2b2lkIGV4dDRfZXh0X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogZXh0ZXJuIGxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJCQkgIGxvZmZfdCBsZW4pOworZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKKwkJCSAgbG9mZl90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfZ2V0X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgc2VjdG9yX3QgYmxvY2ssIHVuc2lnbmVkIGludCBtYXhfYmxvY2tzLAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGZsYWdzKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmggYi9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCmluZGV4IDYxNjUyZjEuLjJjYTY4NjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKKysrIGIvZnMvZXh0NC9leHQ0X2V4dGVudHMuaApAQCAtMjIwLDYgKzIyMCwxMSBAQAogCQkobGUxNl90b19jcHUoZXh0LT5lZV9sZW4pIC0gRVhUX0lOSVRfTUFYX0xFTikpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfbWFya19pbml0aWFsaXplZChzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4dCkKK3sKKwlleHQtPmVlX2xlbiA9IGNwdV90b19sZTE2KGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4dCkpOworfQorCiBleHRlcm4gaW50IGV4dDRfZXh0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9ja3MpOwogZXh0ZXJuIGV4dDRfZnNibGtfdCBleHRfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgpOwogZXh0ZXJuIGV4dDRfZnNibGtfdCBpZHhfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudF9pZHggKik7CkBAIC0yMzUsNyArMjQwLDcgQEAKIAkJCQkgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCiAJCQkJIHN0cnVjdCBleHQ0X2V4dGVudCAqKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dDRfZXh0ZW50ICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICopOwotZXh0ZXJuIGludCBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKik7CitleHRlcm4gaW50IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICosIHN0cnVjdCBleHQ0X2V4dGVudCAqLCBpbnQpOwogZXh0ZXJuIGludCBleHQ0X2V4dF93YWxrX3NwYWNlKHN0cnVjdCBpbm9kZSAqLCBleHQ0X2xibGtfdCwgZXh0NF9sYmxrX3QsCiAJCQkJCQkJZXh0X3ByZXBhcmVfY2FsbGJhY2ssIHZvaWQgKik7CiBleHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZXh0X2ZpbmRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqLCBleHQ0X2xibGtfdCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmggYi9mcy9leHQ0L2V4dDRfamJkMi5oCmluZGV4IDEzOWZiOGMuLmEyODY1OTggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmgKKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuaApAQCAtMTYxLDExICsxNjEsMTMgQEAKIGhhbmRsZV90ICpleHQ0X2pvdXJuYWxfc3RhcnRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG5ibG9ja3MpOwogaW50IF9fZXh0NF9qb3VybmFsX3N0b3AoY29uc3QgY2hhciAqd2hlcmUsIGhhbmRsZV90ICpoYW5kbGUpOwogCi0jZGVmaW5lIEVYVDRfTk9KT1VSTkFMX0hBTkRMRQkoKGhhbmRsZV90ICopIDB4MSkKKyNkZWZpbmUgRVhUNF9OT0pPVVJOQUxfTUFYX1JFRl9DT1VOVCAoKHVuc2lnbmVkIGxvbmcpIDQwOTYpCiAKKy8qIE5vdGU6ICBEbyBub3QgdXNlIHRoaXMgZm9yIE5VTEwgaGFuZGxlcy4gIFRoaXMgaXMgb25seSB0byBkZXRlcm1pbmUgaWYKKyAqIGEgcHJvcGVybHkgYWxsb2NhdGVkIGhhbmRsZSBpcyB1c2luZyBhIGpvdXJuYWwgb3Igbm90LiAqLwogc3RhdGljIGlubGluZSBpbnQgZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlX3QgKmhhbmRsZSkKIHsKLQlpZiAoaGFuZGxlID09IEVYVDRfTk9KT1VSTkFMX0hBTkRMRSkKKwlpZiAoKHVuc2lnbmVkIGxvbmcpaGFuZGxlIDwgRVhUNF9OT0pPVVJOQUxfTUFYX1JFRl9DT1VOVCkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDdhMzgzMjUuLjcxNTI2NGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC03MjMsNyArNzIzLDcgQEAKICAqIGluc2VydCBuZXcgaW5kZXggW0Bsb2dpY2FsO0BwdHJdIGludG8gdGhlIGJsb2NrIGF0IEBjdXJwOwogICogY2hlY2sgd2hlcmUgdG8gaW5zZXJ0OiBiZWZvcmUgQGN1cnAgb3IgYWZ0ZXIgQGN1cnAKICAqLwotc3RhdGljIGludCBleHQ0X2V4dF9pbnNlcnRfaW5kZXgoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBleHQ0X2V4dF9pbnNlcnRfaW5kZXgoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqY3VycCwKIAkJCQlpbnQgbG9naWNhbCwgZXh0NF9mc2Jsa190IHB0cikKIHsKQEAgLTE1ODYsNyArMTU4Niw3IEBACiAgKi8KIGludCBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCi0JCQkJc3RydWN0IGV4dDRfZXh0ZW50ICpuZXdleHQpCisJCQkJc3RydWN0IGV4dDRfZXh0ZW50ICpuZXdleHQsIGludCBmbGFnKQogewogCXN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIgKmVoOwogCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgsICpmZXg7CkBAIC0xNjAyLDcgKzE2MDIsOCBAQAogCUJVR19PTihwYXRoW2RlcHRoXS5wX2hkciA9PSBOVUxMKTsKIAogCS8qIHRyeSB0byBpbnNlcnQgYmxvY2sgaW50byBmb3VuZCBleHRlbnQgYW5kIHJldHVybiAqLwotCWlmIChleCAmJiBleHQ0X2Nhbl9leHRlbnRzX2JlX21lcmdlZChpbm9kZSwgZXgsIG5ld2V4dCkpIHsKKwlpZiAoZXggJiYgKGZsYWcgIT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQorCQkmJiBleHQ0X2Nhbl9leHRlbnRzX2JlX21lcmdlZChpbm9kZSwgZXgsIG5ld2V4dCkpIHsKIAkJZXh0X2RlYnVnKCJhcHBlbmQgWyVkXSVkIGJsb2NrIHRvICVkOlslZF0lZCAoZnJvbSAlbGx1KVxuIiwKIAkJCQlleHQ0X2V4dF9pc191bmluaXRpYWxpemVkKG5ld2V4dCksCiAJCQkJZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4obmV3ZXh0KSwKQEAgLTE3MjIsNyArMTcyMyw4IEBACiAKIG1lcmdlOgogCS8qIHRyeSB0byBtZXJnZSBleHRlbnRzIHRvIHRoZSByaWdodCAqLwotCWV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgbmVhcmV4KTsKKwlpZiAoZmxhZyAhPSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpCisJCWV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgbmVhcmV4KTsKIAogCS8qIHRyeSB0byBtZXJnZSBleHRlbnRzIHRvIHRoZSBsZWZ0ICovCiAKQEAgLTIzNzgsNiArMjM4MCw3IEBACiAJICovCiAKIAlpZiAoRVhUNF9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpKSB7CisjaWYgZGVmaW5lZChBR0dSRVNTSVZFX1RFU1QpIHx8IGRlZmluZWQoQ0hFQ0tfQklOU0VBUkNIKSB8fCBkZWZpbmVkKEVYVEVOVFNfU1RBVFMpCiAJCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IGZpbGUgZXh0ZW50cyBlbmFibGVkIik7CiAjaWZkZWYgQUdHUkVTU0lWRV9URVNUCiAJCXByaW50aygiLCBhZ2dyZXNzaXZlIHRlc3RzIik7CkBAIC0yMzg5LDYgKzIzOTIsNyBAQAogCQlwcmludGsoIiwgc3RhdHMiKTsKICNlbmRpZgogCQlwcmludGsoIlxuIik7CisjZW5kaWYKICNpZmRlZiBFWFRFTlRTX1NUQVRTCiAJCXNwaW5fbG9ja19pbml0KCZFWFQ0X1NCKHNiKS0+c19leHRfc3RhdHNfbG9jayk7CiAJCUVYVDRfU0Ioc2IpLT5zX2V4dF9taW4gPSAxIDw8IDMwOwpAQCAtMjQ5MCw3ICsyNDk0LDYgQEAKIH0KIAogI2RlZmluZSBFWFQ0X0VYVF9aRVJPX0xFTiA3Ci0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9nZXRfYmxvY2tzKCkgaWYgc29tZW9uZSB0cmllcyB0byB3cml0ZQogICogdG8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQuIEl0IG1heSByZXN1bHQgaW4gc3BsaXR0aW5nIHRoZSB1bmluaXRpYWxpemVkCkBAIC0yNTgzLDcgKzI1ODYsOCBAQAogCQkJZXgzLT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGlibG9jayk7CiAJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgzLCBuZXdibG9jayk7CiAJCQlleDMtPmVlX2xlbiA9IGNwdV90b19sZTE2KGFsbG9jYXRlZCk7Ci0JCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIGV4Myk7CisJCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsCisJCQkJCQkJZXgzLCAwKTsKIAkJCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQkJCWVyciA9ICBleHQ0X2V4dF96ZXJvb3V0KGlub2RlLCAmb3JpZ19leCk7CiAJCQkJaWYgKGVycikKQEAgLTI2MzksNyArMjY0Myw3IEBACiAJCWV4dDRfZXh0X3N0b3JlX3BibG9jayhleDMsIG5ld2Jsb2NrICsgbWF4X2Jsb2Nrcyk7CiAJCWV4My0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoYWxsb2NhdGVkIC0gbWF4X2Jsb2Nrcyk7CiAJCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleDMpOwotCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIGV4Myk7CisJCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgZXgzLCAwKTsKIAkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CiAJCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOwogCQkJaWYgKGVycikKQEAgLTI3NTcsNyArMjc2MSw3IEBACiAJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKIAlnb3RvIG91dDsKIGluc2VydDoKLQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCk7CisJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgsIDApOwogCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOwogCQlpZiAoZXJyKQpAQCAtMjc4NSw2ICsyNzg5LDMzMSBAQAogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfZ2V0X2Jsb2NrcygpIGZyb20KKyAqIGV4dDRfZ2V0X2Jsb2Nrc19kaW9fd3JpdGUoKSB3aGVuIERJTyB0byB3cml0ZQorICogdG8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQuCisgKgorICogV3JpdGluZyB0byBhbiB1bmluaXRpemVkIGV4dGVudCBtYXkgcmVzdWx0IGluIHNwbGl0dGluZyB0aGUgdW5pbml0aWFsaXplZAorICogZXh0ZW50IGludG8gbXVsdGlwbGUgL2ludGlhbGl6ZWQgdW5pbnRpYWxpemVkIGV4dGVudHMgKHVwIHRvIHRocmVlKQorICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXM6CisgKiAgIGE+IFRoZXJlIGlzIG5vIHNwbGl0IHJlcXVpcmVkOiBFbnRpcmUgZXh0ZW50IHNob3VsZCBiZSB1bmluaXRpYWxpemVkCisgKiAgIGI+IFNwbGl0cyBpbiB0d28gZXh0ZW50czogV3JpdGUgaXMgaGFwcGVuaW5nIGF0IGVpdGhlciBlbmQgb2YgdGhlIGV4dGVudAorICogICBjPiBTcGxpdHMgaW4gdGhyZWUgZXh0ZW50czogU29tb25lIGlzIHdyaXRpbmcgaW4gbWlkZGxlIG9mIHRoZSBleHRlbnQKKyAqCisgKiBPbmUgb2YgbW9yZSBpbmRleCBibG9ja3MgbWF5YmUgbmVlZGVkIGlmIHRoZSBleHRlbnQgdHJlZSBncm93IGFmdGVyCisgKiB0aGUgdW5pbnRpYWxpemVkIGV4dGVudCBzcGxpdC4gVG8gcHJldmVudCBFTk9TUEMgb2NjdXIgYXQgdGhlIElPCisgKiBjb21wbGV0ZSwgd2UgbmVlZCB0byBzcGxpdCB0aGUgdW5pbml0aWFsaXplZCBleHRlbnQgYmVmb3JlIERJTyBzdWJtaXQKKyAqIHRoZSBJTy4gVGhlIHVuaW5pdGlsaXplZCBleHRlbnQgY2FsbGVkIGF0IHRoaXMgdGltZSB3aWxsIGJlIHNwbGl0CisgKiBpbnRvIHRocmVlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50KGF0IG1vc3QpLiBBZnRlciBJTyBjb21wbGV0ZSwgdGhlIHBhcnQKKyAqIGJlaW5nIGZpbGxlZCB3aWxsIGJlIGNvbnZlcnQgdG8gaW5pdGlhbGl6ZWQgYnkgdGhlIGVuZF9pbyBjYWxsYmFjayBmdW5jdGlvbgorICogdmlhIGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cygpLgorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdW5pbml0aWFsaXplZCBleHRlbnQgdG8gYmUgd3JpdHRlbiBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCisJCQkJCWV4dDRfbGJsa190IGlibG9jaywKKwkJCQkJdW5zaWduZWQgaW50IG1heF9ibG9ja3MsCisJCQkJCWludCBmbGFncykKK3sKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4LCBuZXdleCwgb3JpZ19leDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4MSA9IE5VTEw7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDIgPSBOVUxMOworCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgzID0gTlVMTDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKKwlleHQ0X2xibGtfdCBlZV9ibG9jazsKKwl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkLCBlZV9sZW4sIGRlcHRoOworCWV4dDRfZnNibGtfdCBuZXdibG9jazsKKwlpbnQgZXJyID0gMDsKKworCWV4dF9kZWJ1ZygiZXh0NF9zcGxpdF91bndyaXR0ZW5fZXh0ZW50czogaW5vZGUgJWx1LCIKKwkJICAiaWJsb2NrICVsbHUsIG1heF9ibG9ja3MgJXVcbiIsIGlub2RlLT5pX2lubywKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWlibG9jaywgbWF4X2Jsb2Nrcyk7CisJZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCWVoID0gcGF0aFtkZXB0aF0ucF9oZHI7CisJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKKwllZV9ibG9jayA9IGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayk7CisJZWVfbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpOworCWFsbG9jYXRlZCA9IGVlX2xlbiAtIChpYmxvY2sgLSBlZV9ibG9jayk7CisJbmV3YmxvY2sgPSBpYmxvY2sgLSBlZV9ibG9jayArIGV4dF9wYmxvY2soZXgpOworCWV4MiA9IGV4OworCW9yaWdfZXguZWVfYmxvY2sgPSBleC0+ZWVfYmxvY2s7CisJb3JpZ19leC5lZV9sZW4gICA9IGNwdV90b19sZTE2KGVlX2xlbik7CisJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZvcmlnX2V4LCBleHRfcGJsb2NrKGV4KSk7CisKKwkvKgorIAkgKiBJZiB0aGUgdW5pbml0aWFsaXplZCBleHRlbnQgYmVnaW5zIGF0IHRoZSBzYW1lIGxvZ2ljYWwKKyAJICogYmxvY2sgd2hlcmUgdGhlIHdyaXRlIGJlZ2lucywgYW5kIHRoZSB3cml0ZSBjb21wbGV0ZWx5CisgCSAqIGNvdmVycyB0aGUgZXh0ZW50LCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gc3BsaXQgaXQuCisgCSAqLworCWlmICgoaWJsb2NrID09IGVlX2Jsb2NrKSAmJiAoYWxsb2NhdGVkIDw9IG1heF9ibG9ja3MpKQorCQlyZXR1cm4gYWxsb2NhdGVkOworCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIGV4MTogZWVfYmxvY2sgdG8gaWJsb2NrIC0gMSA6IHVuaW5pdGlhbGl6ZWQgKi8KKwlpZiAoaWJsb2NrID4gZWVfYmxvY2spIHsKKwkJZXgxID0gZXg7CisJCWV4MS0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoaWJsb2NrIC0gZWVfYmxvY2spOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgxKTsKKwkJZXgyID0gJm5ld2V4OworCX0KKwkvKgorCSAqIGZvciBzYW5pdHksIHVwZGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBleDIgZXh0ZW50IGJlZm9yZQorCSAqIHdlIGluc2VydCBleDMsIGlmIGV4MSBpcyBOVUxMLiBUaGlzIGlzIHRvIGF2b2lkIHRlbXBvcmFyeQorCSAqIG92ZXJsYXAgb2YgYmxvY2tzLgorCSAqLworCWlmICghZXgxICYmIGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpCisJCWV4Mi0+ZWVfbGVuID0gY3B1X3RvX2xlMTYobWF4X2Jsb2Nrcyk7CisJLyogZXgzOiB0byBlZV9ibG9jayArIGVlX2xlbiA6IHVuaW5pdGlhbGlzZWQgKi8KKwlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykgeworCQl1bnNpZ25lZCBpbnQgbmV3ZGVwdGg7CisJCWV4MyA9ICZuZXdleDsKKwkJZXgzLT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGlibG9jayArIG1heF9ibG9ja3MpOworCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgzLCBuZXdibG9jayArIG1heF9ibG9ja3MpOworCQlleDMtPmVlX2xlbiA9IGNwdV90b19sZTE2KGFsbG9jYXRlZCAtIG1heF9ibG9ja3MpOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgzKTsKKwkJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBleDMsIGZsYWdzKTsKKwkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CisJCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGZpeF9leHRlbnRfbGVuOworCQkJLyogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFuZCBtYXJrIGFzIGluaXRpYWxpemVkICovCisJCQlleC0+ZWVfYmxvY2sgPSBvcmlnX2V4LmVlX2Jsb2NrOworCQkJZXgtPmVlX2xlbiAgID0gb3JpZ19leC5lZV9sZW47CisJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dF9wYmxvY2soJm9yaWdfZXgpKTsKKwkJCWV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCQkvKiB6ZXJvZWQgdGhlIGZ1bGwgZXh0ZW50ICovCisJCQkvKiBibG9ja3MgYXZhaWxhYmxlIGZyb20gaWJsb2NrICovCisJCQlyZXR1cm4gYWxsb2NhdGVkOworCisJCX0gZWxzZSBpZiAoZXJyKQorCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJLyoKKwkJICogVGhlIGRlcHRoLCBhbmQgaGVuY2UgZWggJiBleCBtaWdodCBjaGFuZ2UKKwkJICogYXMgcGFydCBvZiB0aGUgaW5zZXJ0IGFib3ZlLgorCQkgKi8KKwkJbmV3ZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCQkvKgorCQkgKiB1cGRhdGUgdGhlIGV4dGVudCBsZW5ndGggYWZ0ZXIgc3VjY2Vzc2Z1bCBpbnNlcnQgb2YgdGhlCisJCSAqIHNwbGl0IGV4dGVudAorCQkgKi8KKwkJb3JpZ19leC5lZV9sZW4gPSBjcHVfdG9fbGUxNihlZV9sZW4gLQorCQkJCQkJZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgzKSk7CisJCWRlcHRoID0gbmV3ZGVwdGg7CisJCWV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTsKKwkJcGF0aCA9IGV4dDRfZXh0X2ZpbmRfZXh0ZW50KGlub2RlLCBpYmxvY2ssIHBhdGgpOworCQlpZiAoSVNfRVJSKHBhdGgpKSB7CisJCQllcnIgPSBQVFJfRVJSKHBhdGgpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwkJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKKwkJaWYgKGV4MiAhPSAmbmV3ZXgpCisJCQlleDIgPSBleDsKKworCQllcnIgPSBleHQ0X2V4dF9nZXRfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlhbGxvY2F0ZWQgPSBtYXhfYmxvY2tzOworCX0KKwkvKgorCSAqIElmIHRoZXJlIHdhcyBhIGNoYW5nZSBvZiBkZXB0aCBhcyBwYXJ0IG9mIHRoZQorCSAqIGluc2VydGlvbiBvZiBleDMgYWJvdmUsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsZW5ndGgKKwkgKiBvZiB0aGUgZXgxIGV4dGVudCBhZ2FpbiBoZXJlCisJICovCisJaWYgKGV4MSAmJiBleDEgIT0gZXgpIHsKKwkJZXgxID0gZXg7CisJCWV4MS0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoaWJsb2NrIC0gZWVfYmxvY2spOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgxKTsKKwkJZXgyID0gJm5ld2V4OworCX0KKwkvKgorCSAqIGV4MjogaWJsb2NrIHRvIGlibG9jayArIG1heGJsb2Nrcy0xIDogdG8gYmUgZGlyZWN0IElPIHdyaXR0ZW4sCisJICogdW5pbml0aWFsaXNlZCBzdGlsbC4KKwkgKi8KKwlleDItPmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoaWJsb2NrKTsKKwlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgyLCBuZXdibG9jayk7CisJZXgyLT5lZV9sZW4gPSBjcHVfdG9fbGUxNihhbGxvY2F0ZWQpOworCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleDIpOworCWlmIChleDIgIT0gZXgpCisJCWdvdG8gaW5zZXJ0OworCS8qIE1hcmsgbW9kaWZpZWQgZXh0ZW50IGFzIGRpcnR5ICovCisJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwlleHRfZGVidWcoIm91dCBoZXJlXG4iKTsKKwlnb3RvIG91dDsKK2luc2VydDoKKwllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCwgZmxhZ3MpOworCWlmIChlcnIgPT0gLUVOT1NQQykgeworCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOworCQlpZiAoZXJyKQorCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJLyogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFuZCBtYXJrIGFzIGluaXRpYWxpemVkICovCisJCWV4LT5lZV9ibG9jayA9IG9yaWdfZXguZWVfYmxvY2s7CisJCWV4LT5lZV9sZW4gICA9IG9yaWdfZXguZWVfbGVuOworCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dF9wYmxvY2soJm9yaWdfZXgpKTsKKwkJZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwkJLyogemVybyBvdXQgdGhlIGZpcnN0IGhhbGYgKi8KKwkJcmV0dXJuIGFsbG9jYXRlZDsKKwl9IGVsc2UgaWYgKGVycikKKwkJZ290byBmaXhfZXh0ZW50X2xlbjsKK291dDoKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCXJldHVybiBlcnIgPyBlcnIgOiBhbGxvY2F0ZWQ7CisKK2ZpeF9leHRlbnRfbGVuOgorCWV4LT5lZV9ibG9jayA9IG9yaWdfZXguZWVfYmxvY2s7CisJZXgtPmVlX2xlbiAgID0gb3JpZ19leC5lZV9sZW47CisJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBleHRfcGJsb2NrKCZvcmlnX2V4KSk7CisJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKGV4KTsKKwlleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCXJldHVybiBlcnI7Cit9CitzdGF0aWMgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19kaW8oaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCit7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKKwlpbnQgZGVwdGg7CisJaW50IGVyciA9IDA7CisJaW50IHJldCA9IDA7CisKKwlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OworCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIGZpcnN0IG1hcmsgdGhlIGV4dGVudCBhcyBpbml0aWFsaXplZCAqLworCWV4dDRfZXh0X21hcmtfaW5pdGlhbGl6ZWQoZXgpOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIHNlZSBpZiBpdCBjYW4gYmUgbWVyZ2VkIHdpdGggdGhlIGV4dGVudAorCSAqIG9uIHRoZSBsZWZ0LgorCSAqLworCWlmIChleCA+IEVYVF9GSVJTVF9FWFRFTlQoZWgpKSB7CisJCS8qCisJCSAqIFRvIG1lcmdlIGxlZnQsIHBhc3MgImV4IC0gMSIgdG8gdHJ5X3RvX21lcmdlKCksCisJCSAqIHNpbmNlIGl0IG1lcmdlcyB0b3dhcmRzIHJpZ2h0IF9vbmx5Xy4KKwkJICovCisJCXJldCA9IGV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgZXggLSAxKTsKKwkJaWYgKHJldCkgeworCQkJZXJyID0gZXh0NF9leHRfY29ycmVjdF9pbmRleGVzKGhhbmRsZSwgaW5vZGUsIHBhdGgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKwkJCWRlcHRoID0gZXh0X2RlcHRoKGlub2RlKTsKKwkJCWV4LS07CisJCX0KKwl9CisJLyoKKwkgKiBUcnkgdG8gTWVyZ2UgdG93YXJkcyByaWdodC4KKwkgKi8KKwlyZXQgPSBleHQ0X2V4dF90cnlfdG9fbWVyZ2UoaW5vZGUsIHBhdGgsIGV4KTsKKwlpZiAocmV0KSB7CisJCWVyciA9IGV4dDRfZXh0X2NvcnJlY3RfaW5kZXhlcyhoYW5kbGUsIGlub2RlLCBwYXRoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJfQorCS8qIE1hcmsgbW9kaWZpZWQgZXh0ZW50IGFzIGRpcnR5ICovCisJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKK291dDoKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK2V4dDRfZXh0X2hhbmRsZV91bmluaXRpYWxpemVkX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCWV4dDRfbGJsa190IGlibG9jaywgdW5zaWduZWQgaW50IG1heF9ibG9ja3MsCisJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwgaW50IGZsYWdzLAorCQkJdW5zaWduZWQgaW50IGFsbG9jYXRlZCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsCisJCQlleHQ0X2ZzYmxrX3QgbmV3YmxvY2spCit7CisJaW50IHJldCA9IDA7CisJaW50IGVyciA9IDA7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbzsKKworCWV4dF9kZWJ1ZygiZXh0NF9leHRfaGFuZGxlX3VuaW5pdGlhbGl6ZWRfZXh0ZW50czogaW5vZGUgJWx1LCBsb2dpY2FsIgorCQkgICJibG9jayAlbGx1LCBtYXhfYmxvY2tzICV1LCBmbGFncyAlZCwgYWxsb2NhdGVkICV1IiwKKwkJICBpbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpaWJsb2NrLCBtYXhfYmxvY2tzLAorCQkgIGZsYWdzLCBhbGxvY2F0ZWQpOworCWV4dDRfZXh0X3Nob3dfbGVhZihpbm9kZSwgcGF0aCk7CisKKwkvKiBESU8gZ2V0X2Jsb2NrKCkgYmVmb3JlIHN1Ym1pdCB0aGUgSU8sIHNwbGl0IHRoZSBleHRlbnQgKi8KKwlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKSB7CisJCXJldCA9IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLAorCQkJCQkJaW5vZGUsIHBhdGgsIGlibG9jaywKKwkJCQkJCW1heF9ibG9ja3MsIGZsYWdzKTsKKwkJLyoKKwkJICogRmxhZyB0aGUgaW5vZGUobm9uIGFpbyBjYXNlKSBvciBlbmRfaW8gc3RydWN0IChhaW8gY2FzZSkKKwkJICogdGhhdCB0aGlzIElPIG5lZWRzIHRvIGNvbnZlcnRpb24gdG8gd3JpdHRlbiB3aGVuIElPIGlzCisJCSAqIGNvbXBsZXRlZAorCQkgKi8KKwkJaWYgKGlvKQorCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJZWxzZQorCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU47CisJCWdvdG8gb3V0OworCX0KKwkvKiBhc3luYyBESU8gZW5kX2lvIGNvbXBsZXRlLCBjb252ZXJ0IHRoZSBmaWxsZWQgZXh0ZW50IHRvIHdyaXR0ZW4gKi8KKwlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DT05WRVJUX0VYVCkgeworCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZGlvKGhhbmRsZSwgaW5vZGUsCisJCQkJCQkJcGF0aCk7CisJCWdvdG8gb3V0MjsKKwl9CisJLyogYnVmZmVyZWQgSU8gY2FzZSAqLworCS8qCisJICogcmVwZWF0IGZhbGxvY2F0ZSBjcmVhdGlvbiByZXF1ZXN0CisJICogd2UgYWxyZWFkeSBoYXZlIGFuIHVud3JpdHRlbiBleHRlbnQKKwkgKi8KKwlpZiAoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfVU5JTklUX0VYVCkKKwkJZ290byBtYXBfb3V0OworCisJLyogYnVmZmVyZWQgUkVBRCBvciBidWZmZXJlZCB3cml0ZV9iZWdpbigpIGxvb2t1cCAqLworCWlmICgoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSA9PSAwKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgYmxvY2tzIHJlc2VydmVkIGFscmVhZHkuICBXZQorCQkgKiByZXR1cm4gYWxsb2NhdGVkIGJsb2NrcyBzbyB0aGF0IGRlbGFsbG9jCisJCSAqIHdvbid0IGRvIGJsb2NrIHJlc2VydmF0aW9uIGZvciB1cy4gIEJ1dAorCQkgKiB0aGUgYnVmZmVyIGhlYWQgd2lsbCBiZSB1bm1hcHBlZCBzbyB0aGF0CisJCSAqIGEgcmVhZCBmcm9tIHRoZSBibG9jayByZXR1cm5zIDBzLgorCQkgKi8KKwkJc2V0X2J1ZmZlcl91bndyaXR0ZW4oYmhfcmVzdWx0KTsKKwkJZ290byBvdXQxOworCX0KKworCS8qIGJ1ZmZlcmVkIHdyaXRlLCB3cml0ZXBhZ2UgdGltZSwgY29udmVydCovCisJcmV0ID0gZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGUsIGlub2RlLAorCQkJCQkJcGF0aCwgaWJsb2NrLAorCQkJCQkJbWF4X2Jsb2Nrcyk7CitvdXQ6CisJaWYgKHJldCA8PSAwKSB7CisJCWVyciA9IHJldDsKKwkJZ290byBvdXQyOworCX0gZWxzZQorCQlhbGxvY2F0ZWQgPSByZXQ7CisJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKK21hcF9vdXQ6CisJc2V0X2J1ZmZlcl9tYXBwZWQoYmhfcmVzdWx0KTsKK291dDE6CisJaWYgKGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpCisJCWFsbG9jYXRlZCA9IG1heF9ibG9ja3M7CisJZXh0NF9leHRfc2hvd19sZWFmKGlub2RlLCBwYXRoKTsKKwliaF9yZXN1bHQtPmJfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7CisJYmhfcmVzdWx0LT5iX2Jsb2NrbnIgPSBuZXdibG9jazsKK291dDI6CisJaWYgKHBhdGgpIHsKKwkJZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpOworCQlrZnJlZShwYXRoKTsKKwl9CisJcmV0dXJuIGVyciA/IGVyciA6IGFsbG9jYXRlZDsKK30KKy8qCiAgKiBCbG9jayBhbGxvY2F0aW9uL21hcC9wcmVhbGxvY2F0aW9uIHJvdXRpbmUgZm9yIGV4dGVudHMgYmFzZWQgZmlsZXMKICAqCiAgKgpAQCAtMjgxNCw2ICszMTQzLDcgQEAKIAlpbnQgZXJyID0gMCwgZGVwdGgsIHJldCwgY2FjaGVfdHlwZTsKIAl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkID0gMDsKIAlzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbzsKIAogCV9fY2xlYXJfYml0KEJIX05ldywgJmJoX3Jlc3VsdC0+Yl9zdGF0ZSk7CiAJZXh0X2RlYnVnKCJibG9ja3MgJXUvJXUgcmVxdWVzdGVkIGZvciBpbm9kZSAlbHVcbiIsCkBAIC0yODg5LDMzICszMjE5LDEwIEBACiAJCQkJCQkJRVhUNF9FWFRfQ0FDSEVfRVhURU5UKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19VTklOSVRfRVhUKQotCQkJCWdvdG8gb3V0OwotCQkJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpID09IDApIHsKLQkJCQlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykKLQkJCQkJYWxsb2NhdGVkID0gbWF4X2Jsb2NrczsKLQkJCQkvKgotCQkJCSAqIFdlIGhhdmUgYmxvY2tzIHJlc2VydmVkIGFscmVhZHkuICBXZQotCQkJCSAqIHJldHVybiBhbGxvY2F0ZWQgYmxvY2tzIHNvIHRoYXQgZGVsYWxsb2MKLQkJCQkgKiB3b24ndCBkbyBibG9jayByZXNlcnZhdGlvbiBmb3IgdXMuICBCdXQKLQkJCQkgKiB0aGUgYnVmZmVyIGhlYWQgd2lsbCBiZSB1bm1hcHBlZCBzbyB0aGF0Ci0JCQkJICogYSByZWFkIGZyb20gdGhlIGJsb2NrIHJldHVybnMgMHMuCi0JCQkJICovCi0JCQkJc2V0X2J1ZmZlcl91bndyaXR0ZW4oYmhfcmVzdWx0KTsKLQkJCQliaF9yZXN1bHQtPmJfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7Ci0JCQkJYmhfcmVzdWx0LT5iX2Jsb2NrbnIgPSBuZXdibG9jazsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9Ci0KLQkJCXJldCA9IGV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlLCBpbm9kZSwKLQkJCQkJCQkJcGF0aCwgaWJsb2NrLAotCQkJCQkJCQltYXhfYmxvY2tzKTsKLQkJCWlmIChyZXQgPD0gMCkgewotCQkJCWVyciA9IHJldDsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9IGVsc2UKLQkJCQlhbGxvY2F0ZWQgPSByZXQ7Ci0JCQlnb3RvIG91dG5ldzsKKwkJCXJldCA9IGV4dDRfZXh0X2hhbmRsZV91bmluaXRpYWxpemVkX2V4dGVudHMoaGFuZGxlLAorCQkJCQlpbm9kZSwgaWJsb2NrLCBtYXhfYmxvY2tzLCBwYXRoLAorCQkJCQlmbGFncywgYWxsb2NhdGVkLCBiaF9yZXN1bHQsIG5ld2Jsb2NrKTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTI5ODYsOSArMzI5MywyNyBAQAogCS8qIHRyeSB0byBpbnNlcnQgbmV3IGV4dGVudCBpbnRvIGZvdW5kIGxlYWYgYW5kIHJldHVybiAqLwogCWV4dDRfZXh0X3N0b3JlX3BibG9jaygmbmV3ZXgsIG5ld2Jsb2NrKTsKIAluZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pOwotCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19VTklOSVRfRVhUKSAgLyogTWFyayB1bmluaXRpYWxpemVkICovCisJLyogTWFyayB1bmluaXRpYWxpemVkICovCisJaWYgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1VOSU5JVF9FWFQpewogCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoJm5ld2V4KTsKLQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCk7CisJCS8qCisJCSAqIGlvX2VuZCBzdHJ1Y3R1cmUgd2FzIGNyZWF0ZWQgZm9yIGV2ZXJ5IGFzeW5jCisJCSAqIGRpcmVjdCBJTyB3cml0ZSB0byB0aGUgbWlkZGxlIG9mIHRoZSBmaWxlLgorCQkgKiBUbyBhdm9pZCB1bmVjZXNzYXJ5IGNvbnZlcnRpb24gZm9yIGV2ZXJ5IGFpbyBkaW8gcmV3cml0ZQorCQkgKiB0byB0aGUgbWlkIG9mIGZpbGUsIGhlcmUgd2UgZmxhZyB0aGUgSU8gdGhhdCBpcyByZWFsbHkKKwkJICogbmVlZCB0aGUgY29udmVydGlvbi4KKwkJICogRm9yIG5vbiBhc3ljbiBkaXJlY3QgSU8gY2FzZSwgZmxhZyB0aGUgaW5vZGUgc3RhdGUKKwkJICogdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gY29udmVydGlvbiB3aGVuIElPIGlzIGRvbmUuCisJCSAqLworCQlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKSB7CisJCQlpZiAoaW8pCisJCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJCWVsc2UKKwkJCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlIHw9CisJCQkJCUVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTjs7CisJCX0KKwl9CisJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgsIGZsYWdzKTsKIAlpZiAoZXJyKSB7CiAJCS8qIGZyZWUgZGF0YSBibG9ja3Mgd2UganVzdCBhbGxvY2F0ZWQgKi8KIAkJLyogbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgZGlzY2FyZCBoZXJlIGRpcmVjdGx5LApAQCAtMzAwMiw3ICszMzI3LDYgQEAKIAkvKiBwcmV2aW91cyByb3V0aW5lIGNvdWxkIHVzZSBibG9jayB3ZSBhbGxvY2F0ZWQgKi8KIAluZXdibG9jayA9IGV4dF9wYmxvY2soJm5ld2V4KTsKIAlhbGxvY2F0ZWQgPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbigmbmV3ZXgpOwotb3V0bmV3OgogCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CiAKIAkvKiBDYWNoZSBvbmx5IHdoZW4gaXQgaXMgX25vdF8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQgKi8KQEAgLTMyMDEsNiArMzUyNSw2NCBAQAogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0IGEgcmFuZ2Ugb2YgYmxvY2tzIHRvIHdyaXR0ZW4gZXh0ZW50cworICogVGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFzcyB0aGUgc3RhcnQgb2Zmc2V0IGFuZCB0aGUgc2l6ZS4KKyAqIGFsbCB1bndyaXR0ZW4gZXh0ZW50cyB3aXRoaW4gdGhpcyByYW5nZSB3aWxsIGJlIGNvbnZlcnRlZCB0bworICogd3JpdHRlbiBleHRlbnRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGRpcmVjdCBJTyBlbmQgaW8gY2FsbCBiYWNrCisgKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCisJCQkJICAgIGxvZmZfdCBsZW4pCit7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlleHQ0X2xibGtfdCBibG9jazsKKwl1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0MiA9IDA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkIG1hcF9iaDsKKwl1bnNpZ25lZCBpbnQgY3JlZGl0cywgYmxrYml0cyA9IGlub2RlLT5pX2Jsa2JpdHM7CisKKwlibG9jayA9IG9mZnNldCA+PiBibGtiaXRzOworCS8qCisJICogV2UgY2FuJ3QganVzdCBjb252ZXJ0IGxlbiB0byBtYXhfYmxvY2tzIGJlY2F1c2UKKwkgKiBJZiBibG9ja3NpemUgPSA0MDk2IG9mZnNldCA9IDMwNzIgYW5kIGxlbiA9IDIwNDgKKwkgKi8KKwltYXhfYmxvY2tzID0gKEVYVDRfQkxPQ0tfQUxJR04obGVuICsgb2Zmc2V0LCBibGtiaXRzKSA+PiBibGtiaXRzKQorCQkJCQkJCS0gYmxvY2s7CisJLyoKKwkgKiBjcmVkaXRzIHRvIGluc2VydCAxIGV4dGVudCBpbnRvIGV4dGVudCB0cmVlCisJICovCisJY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKKwl3aGlsZSAocmV0ID49IDAgJiYgcmV0IDwgbWF4X2Jsb2NrcykgeworCQlibG9jayA9IGJsb2NrICsgcmV0OworCQltYXhfYmxvY2tzID0gbWF4X2Jsb2NrcyAtIHJldDsKKwkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBjcmVkaXRzKTsKKwkJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCQlicmVhazsKKwkJfQorCQltYXBfYmguYl9zdGF0ZSA9IDA7CisJCXJldCA9IGV4dDRfZ2V0X2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBibG9jaywKKwkJCQkgICAgICBtYXhfYmxvY2tzLCAmbWFwX2JoLAorCQkJCSAgICAgIEVYVDRfR0VUX0JMT0NLU19ESU9fQ09OVkVSVF9FWFQpOworCQlpZiAocmV0IDw9IDApIHsKKwkJCVdBUk5fT04ocmV0IDw9IDApOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXh0NF9leHRfZ2V0X2Jsb2NrcyAiCisJCQkJICAgICJyZXR1cm5lZCBlcnJvciBpbm9kZSMlbHUsIGJsb2NrPSV1LCAiCisJCQkJICAgICJtYXhfYmxvY2tzPSV1IiwgX19mdW5jX18sCisJCQkJICAgIGlub2RlLT5pX2lubywgYmxvY2ssIG1heF9ibG9ja3MpOworCQl9CisJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKKwkJcmV0MiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJCWlmIChyZXQgPD0gMCB8fCByZXQyICkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0ID4gMCA/IHJldDIgOiByZXQ7Cit9CisvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIGV4dGVudCB0byBnYXRoZXIgRklFTUFQIGluZm9ybWF0aW9uLgogICovCiBzdGF0aWMgaW50IGV4dDRfZXh0X2ZpZW1hcF9jYihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggNWNhM2VjYS4uOTYzMDU4MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlICAgPSBleHQ0X3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmMKaW5kZXggMDc0NzU3NC4uMmIxNTMxMiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mc3luYy5jCisrKyBiL2ZzL2V4dDQvZnN5bmMuYwpAQCAtNDQsNiArNDQsOCBAQAogICoKICAqIFdoYXQgd2UgZG8gaXMganVzdCBraWNrIG9mZiBhIGNvbW1pdCBhbmQgd2FpdCBvbiBpdC4gIFRoaXMgd2lsbCBzbmFwc2hvdCB0aGUKICAqIGlub2RlIHRvIGRpc2suCisgKgorICogaV9tdXRleCBsb2NrIGlzIGhlbGQgd2hlbiBlbnRlcmluZyBhbmQgZXhpdGluZyB0aGlzIGZ1bmN0aW9uCiAgKi8KIAogaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKQEAgLTU2LDYgKzU4LDkgQEAKIAogCXRyYWNlX2V4dDRfc3luY19maWxlKGZpbGUsIGRlbnRyeSwgZGF0YXN5bmMpOwogCisJcmV0ID0gZmx1c2hfYWlvX2Rpb19jb21wbGV0ZWRfSU8oaW5vZGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAkvKgogCSAqIGRhdGE9d3JpdGViYWNrOgogCSAqICBUaGUgY2FsbGVyJ3MgZmlsZW1hcF9mZGF0YXdyaXRlKCkvd2FpdCB3aWxsIHN5bmMgdGhlIGRhdGEuCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggMDY0NzQ2Zi4uMmM4Y2FhNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlICJleHQ0X2piZDIuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgpAQCAtMTkyLDcgKzE5Myw3IEBACiAgKiBzbyBiZWZvcmUgd2UgY2FsbCBoZXJlIGV2ZXJ5dGhpbmcgbXVzdCBiZSBjb25zaXN0ZW50bHkgZGlydGllZCBhZ2FpbnN0CiAgKiB0aGlzIHRyYW5zYWN0aW9uLgogICovCi0gaW50IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSBpbnQgbmJsb2NrcykKIHsKIAlpbnQgcmV0OwpAQCAtMjA4LDYgKzIwOSw3IEBACiAJdXBfd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOwogCXJldCA9IGV4dDRfam91cm5hbF9yZXN0YXJ0KGhhbmRsZSwgYmxvY2tzX2Zvcl90cnVuY2F0ZShpbm9kZSkpOwogCWRvd25fd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOworCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE0NSw2ICsxMTQ3LDY0IEBACiB9CiAKIC8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjb250aWd1b3VzIGRpcnR5IHBhZ2VzIGluIGEgZ2l2ZW4gaW5vZGUKKyAqIHN0YXJ0aW5nIGF0IHBhZ2UgZnJhbWUgaWR4LgorICovCitzdGF0aWMgcGdvZmZfdCBleHQ0X251bV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGlkeCwKKwkJCQkgICAgdW5zaWduZWQgaW50IG1heF9wYWdlcykKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJcGdvZmZfdAlpbmRleDsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXBnb2ZmX3QgbnVtID0gMDsKKwlpbnQgaSwgbnJfcGFnZXMsIGRvbmUgPSAwOworCisJaWYgKG1heF9wYWdlcyA9PSAwKQorCQlyZXR1cm4gMDsKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCXdoaWxlICghZG9uZSkgeworCQlpbmRleCA9IGlkeDsKKwkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cF90YWcoJnB2ZWMsIG1hcHBpbmcsICZpbmRleCwKKwkJCQkJICAgICAgUEFHRUNBQ0hFX1RBR19ESVJUWSwKKwkJCQkJICAgICAgKHBnb2ZmX3QpUEFHRVZFQ19TSVpFKTsKKwkJaWYgKG5yX3BhZ2VzID09IDApCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKKwkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpoZWFkOworCisJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQlpZiAodW5saWtlbHkocGFnZS0+bWFwcGluZyAhPSBtYXBwaW5nKSB8fAorCQkJICAgICFQYWdlRGlydHkocGFnZSkgfHwKKwkJCSAgICBQYWdlV3JpdGViYWNrKHBhZ2UpIHx8CisJCQkgICAgcGFnZS0+aW5kZXggIT0gaWR4KSB7CisJCQkJZG9uZSA9IDE7CisJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgeworCQkJCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwkJCQlkbyB7CisJCQkJCWlmICghYnVmZmVyX2RlbGF5KGJoKSAmJgorCQkJCQkgICAgIWJ1ZmZlcl91bndyaXR0ZW4oYmgpKQorCQkJCQkJZG9uZSA9IDE7CisJCQkJCWJoID0gYmgtPmJfdGhpc19wYWdlOworCQkJCX0gd2hpbGUgKCFkb25lICYmIChiaCAhPSBoZWFkKSk7CisJCQl9CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCWlmIChkb25lKQorCQkJCWJyZWFrOworCQkJaWR4Kys7CisJCQludW0rKzsKKwkJCWlmIChudW0gPj0gbWF4X3BhZ2VzKQorCQkJCWJyZWFrOworCQl9CisJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJfQorCXJldHVybiBudW07Cit9CisKKy8qCiAgKiBUaGUgZXh0NF9nZXRfYmxvY2tzKCkgZnVuY3Rpb24gdHJpZXMgdG8gbG9vayB1cCB0aGUgcmVxdWVzdGVkIGJsb2NrcywKICAqIGFuZCByZXR1cm5zIGlmIHRoZSBibG9ja3MgYXJlIGFscmVhZHkgbWFwcGVkLgogICoKQEAgLTExNzUsNiArMTIzNSw5IEBACiAJY2xlYXJfYnVmZmVyX21hcHBlZChiaCk7CiAJY2xlYXJfYnVmZmVyX3Vud3JpdHRlbihiaCk7CiAKKwlleHRfZGVidWcoImV4dDRfZ2V0X2Jsb2NrcygpOiBpbm9kZSAlbHUsIGZsYWcgJWQsIG1heF9ibG9ja3MgJXUsIgorCQkgICJsb2dpY2FsIGJsb2NrICVsdVxuIiwgaW5vZGUtPmlfaW5vLCBmbGFncywgbWF4X2Jsb2NrcywKKwkJICAodW5zaWduZWQgbG9uZylibG9jayk7CiAJLyoKIAkgKiBUcnkgdG8gc2VlIGlmIHdlIGNhbiBnZXQgdGhlIGJsb2NrIHdpdGhvdXQgcmVxdWVzdGluZyBhIG5ldwogCSAqIGZpbGUgc3lzdGVtIGJsb2NrLgpAQCAtMTc5NiwxMSArMTg1OSwxMSBAQAogCiAJaWYgKGV4dDRfY2xhaW1fZnJlZV9ibG9ja3Moc2JpLCB0b3RhbCkpIHsKIAkJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCB0b3RhbCk7CiAJCWlmIChleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKSB7CiAJCQl5aWVsZCgpOwogCQkJZ290byByZXBlYXQ7CiAJCX0KLQkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHRvdGFsKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKz0gbnJibG9ja3M7CkBAIC0yMDkyLDE4ICsyMTU1LDE4IEBACiBzdGF0aWMgdm9pZCBleHQ0X3ByaW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlRvdGFsIGZyZWUgYmxvY2tzIGNvdW50ICVsbGRcbiIsCi0JCQlleHQ0X2NvdW50X2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiKSk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIkZyZWUvRGlydHkgYmxvY2sgZGV0YWlsc1xuIik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImZyZWVfYmxvY2tzPSVsbGRcbiIsCi0JCQkobG9uZyBsb25nKXBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlcikpOwotCXByaW50ayhLRVJOX0VNRVJHICJkaXJ0eV9ibG9ja3M9JWxsZFxuIiwKLQkJCShsb25nIGxvbmcpcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlcikpOwotCXByaW50ayhLRVJOX0VNRVJHICJCbG9jayByZXNlcnZhdGlvbiBkZXRhaWxzXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiaV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcz0ldVxuIiwKLQkJCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpOwotCXByaW50ayhLRVJOX0VNRVJHICJpX3Jlc2VydmVkX21ldGFfYmxvY2tzPSV1XG4iLAotCQkJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcyk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiVG90YWwgZnJlZSBibG9ja3MgY291bnQgJWxsZFxuIiwKKwkgICAgICAgZXh0NF9jb3VudF9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYikpOworCXByaW50ayhLRVJOX0NSSVQgIkZyZWUvRGlydHkgYmxvY2sgZGV0YWlsc1xuIik7CisJcHJpbnRrKEtFUk5fQ1JJVCAiZnJlZV9ibG9ja3M9JWxsZFxuIiwKKwkgICAgICAgKGxvbmcgbG9uZykgcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyKSk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiZGlydHlfYmxvY2tzPSVsbGRcbiIsCisJICAgICAgIChsb25nIGxvbmcpIHBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIpKTsKKwlwcmludGsoS0VSTl9DUklUICJCbG9jayByZXNlcnZhdGlvbiBkZXRhaWxzXG4iKTsKKwlwcmludGsoS0VSTl9DUklUICJpX3Jlc2VydmVkX2RhdGFfYmxvY2tzPSV1XG4iLAorCSAgICAgICBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKTsKKwlwcmludGsoS0VSTl9DUklUICJpX3Jlc2VydmVkX21ldGFfYmxvY2tzPSV1XG4iLAorCSAgICAgICBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzKTsKIAlyZXR1cm47CiB9CiAKQEAgLTIxODksMTQgKzIyNTIsMTQgQEAKIAkJICogd3JpdGVwYWdlIGFuZCB3cml0ZXBhZ2VzIHdpbGwgYWdhaW4gdHJ5IHRvIHdyaXRlCiAJCSAqIHRoZSBzYW1lLgogCQkgKi8KLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkIGZvciBpbm9kZSAlbHUgIgotCQkJCSAgImF0IGxvZ2ljYWwgb2Zmc2V0ICVsbHUgd2l0aCBtYXggYmxvY2tzICIKLQkJCQkgICIlemQgd2l0aCBlcnJvciAlZFxuIiwKLQkJCQkgIF9fZnVuY19fLCBtcGQtPmlub2RlLT5pX2lubywKLQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV4dCwKLQkJCQkgIG1wZC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0cywgZXJyKTsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uISEgIgotCQkJCQkiRGF0YSB3aWxsIGJlIGxvc3RcbiIpOworCQlleHQ0X21zZyhtcGQtPmlub2RlLT5pX3NiLCBLRVJOX0NSSVQsCisJCQkgImRlbGF5ZWQgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIGlub2RlICVsdSBhdCAiCisJCQkgImxvZ2ljYWwgb2Zmc2V0ICVsbHUgd2l0aCBtYXggYmxvY2tzICV6ZCB3aXRoICIKKwkJCSAiZXJyb3IgJWRcbiIsIG1wZC0+aW5vZGUtPmlfaW5vLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIG5leHQsCisJCQkgbXBkLT5iX3NpemUgPj4gbXBkLT5pbm9kZS0+aV9ibGtiaXRzLCBlcnIpOworCQlwcmludGsoS0VSTl9DUklUICJUaGlzIHNob3VsZCBub3QgaGFwcGVuISEgICIKKwkJICAgICAgICJEYXRhIHdpbGwgYmUgbG9zdFxuIik7CiAJCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQkJZXh0NF9wcmludF9mcmVlX2Jsb2NrcyhtcGQtPmlub2RlKTsKIAkJfQpAQCAtMjc0Myw4ICsyODA2LDEwIEBACiAJaW50IG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOwogCWludCBwYWdlc193cml0dGVuID0gMDsKIAlsb25nIHBhZ2VzX3NraXBwZWQ7CisJdW5zaWduZWQgaW50IG1heF9wYWdlczsKIAlpbnQgcmFuZ2VfY3ljbGljLCBjeWNsZWQgPSAxLCBpb19kb25lID0gMDsKLQlpbnQgbmVlZGVkX2Jsb2NrcywgcmV0ID0gMCwgbnJfdG9fd3JpdGVidW1wID0gMDsKKwlpbnQgbmVlZGVkX2Jsb2NrcywgcmV0ID0gMDsKKwlsb25nIGRlc2lyZWRfbnJfdG9fd3JpdGUsIG5yX3RvX3dyaXRlYnVtcCA9IDA7CiAJbG9mZl90IHJhbmdlX3N0YXJ0ID0gd2JjLT5yYW5nZV9zdGFydDsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKG1hcHBpbmctPmhvc3QtPmlfc2IpOwogCkBAIC0yNzcxLDE2ICsyODM2LDYgQEAKIAlpZiAodW5saWtlbHkoc2JpLT5zX21vdW50X2ZsYWdzICYgRVhUNF9NRl9GU19BQk9SVEVEKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAotCS8qCi0JICogTWFrZSBzdXJlIG5yX3RvX3dyaXRlIGlzID49IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdAotCSAqIFRoaXMgbWFrZSBzdXJlIHNtYWxsIGZpbGVzIGJsb2NrcyBhcmUgYWxsb2NhdGVkIGluCi0JICogc2luZ2xlIGF0dGVtcHQuIFRoaXMgZW5zdXJlIHRoYXQgc21hbGwgZmlsZXMKLQkgKiBnZXQgbGVzcyBmcmFnbWVudGVkLgotCSAqLwotCWlmICh3YmMtPm5yX3RvX3dyaXRlIDwgc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0KSB7Ci0JCW5yX3RvX3dyaXRlYnVtcCA9IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCAtIHdiYy0+bnJfdG9fd3JpdGU7Ci0JCXdiYy0+bnJfdG9fd3JpdGUgPSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3Q7Ci0JfQogCWlmICh3YmMtPnJhbmdlX3N0YXJ0ID09IDAgJiYgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKQogCQlyYW5nZV93aG9sZSA9IDE7CiAKQEAgLTI3OTUsNiArMjg1MCwzNiBAQAogCX0gZWxzZQogCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAorCS8qCisJICogVGhpcyB3b3JrcyBhcm91bmQgdHdvIGZvcm1zIG9mIHN0dXBpZGl0eS4gIFRoZSBmaXJzdCBpcyBpbgorCSAqIHRoZSB3cml0ZWJhY2sgY29kZSwgd2hpY2ggY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKKwkgKiB3cml0dGVuIHRvIGJlIDEwMjQgcGFnZXMuICBUaGlzIGlzIHdyb25nIG9uIG11bHRpcGxlCisJICogbGV2ZWxzOyBkaWZmZXJlbnQgYXJjaGl0ZWN0dWVzIGhhdmUgYSBkaWZmZXJlbnQgcGFnZSBzaXplLAorCSAqIHdoaWNoIGNoYW5nZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgd2hpY2ggZ2V0cworCSAqIHdyaXR0ZW4uICBTZWNvbmRseSwgNCBtZWdhYnl0ZXMgaXMgd2F5IHRvbyBzbWFsbC4gIFhGUworCSAqIGZvcmNlcyB0aGlzIHZhbHVlIHRvIGJlIDE2IG1lZ2FieXRlcyBieSBtdWx0aXBseWluZworCSAqIG5yX3RvX3dyaXRlIHBhcmFtZXRlciBieSBmb3VyLCBhbmQgdGhlbiByZWxpZXMgb24gaXRzCisJICogYWxsb2NhdG9yIHRvIGFsbG9jYXRlIGxhcmdlciBleHRlbnRzIHRvIG1ha2UgdGhlbQorCSAqIGNvbnRpZ3VvdXMuICBVbmZvcnR1bmF0ZWx5IHRoaXMgYnJpbmdzIHVzIHRvIHRoZSBzZWNvbmQKKwkgKiBzdHVwaWRpdHksIHdoaWNoIGlzIHRoYXQgZXh0NCdzIG1iYWxsb2MgY29kZSBvbmx5IGFsbG9jYXRlcworCSAqIGF0IG1vc3QgMjA0OCBibG9ja3MuICBTbyB3ZSBmb3JjZSBjb250aWd1b3VzIHdyaXRlcyB1cCB0bworCSAqIHRoZSBudW1iZXIgb2YgZGlydHkgYmxvY2tzIGluIHRoZSBpbm9kZSwgb3IKKwkgKiBzYmktPm1heF93cml0ZWJhY2tfbWJfYnVtcCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKwkgKi8KKwltYXhfcGFnZXMgPSBzYmktPnNfbWF4X3dyaXRlYmFja19tYl9idW1wIDw8ICgyMCAtIFBBR0VfQ0FDSEVfU0hJRlQpOworCWlmICghcmFuZ2VfY3ljbGljICYmIHJhbmdlX3dob2xlKQorCQlkZXNpcmVkX25yX3RvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZSAqIDg7CisJZWxzZQorCQlkZXNpcmVkX25yX3RvX3dyaXRlID0gZXh0NF9udW1fZGlydHlfcGFnZXMoaW5vZGUsIGluZGV4LAorCQkJCQkJCSAgIG1heF9wYWdlcyk7CisJaWYgKGRlc2lyZWRfbnJfdG9fd3JpdGUgPiBtYXhfcGFnZXMpCisJCWRlc2lyZWRfbnJfdG9fd3JpdGUgPSBtYXhfcGFnZXM7CisKKwlpZiAod2JjLT5ucl90b193cml0ZSA8IGRlc2lyZWRfbnJfdG9fd3JpdGUpIHsKKwkJbnJfdG9fd3JpdGVidW1wID0gZGVzaXJlZF9ucl90b193cml0ZSAtIHdiYy0+bnJfdG9fd3JpdGU7CisJCXdiYy0+bnJfdG9fd3JpdGUgPSBkZXNpcmVkX25yX3RvX3dyaXRlOworCX0KKwogCW1wZC53YmMgPSB3YmM7CiAJbXBkLmlub2RlID0gbWFwcGluZy0+aG9zdDsKIApAQCAtMjgyMiwxMCArMjkwNyw5IEBACiAJCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgbmVlZGVkX2Jsb2Nrcyk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGpiZDJfc3RhcnQ6ICIKKwkJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX0NSSVQsICIlczogamJkMl9zdGFydDogIgogCQkJICAgICAgICIlbGQgcGFnZXMsIGlubyAlbHU7IGVyciAlZFxuIiwgX19mdW5jX18sCiAJCQkJd2JjLT5ucl90b193cml0ZSwgaW5vZGUtPmlfaW5vLCByZXQpOwotCQkJZHVtcF9zdGFjaygpOwogCQkJZ290byBvdXRfd3JpdGVwYWdlczsKIAkJfQogCkBAIC0yODk3LDkgKzI5ODEsMTAgQEAKIAkJZ290byByZXRyeTsKIAl9CiAJaWYgKHBhZ2VzX3NraXBwZWQgIT0gd2JjLT5wYWdlc19za2lwcGVkKQotCQlwcmludGsoS0VSTl9FTUVSRyAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZWF2aW5nICVzICIKLQkJCQkid2l0aCBucl90b193cml0ZSA9ICVsZCByZXQgPSAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgd2JjLT5ucl90b193cml0ZSwgcmV0KTsKKwkJZXh0NF9tc2coaW5vZGUtPmlfc2IsIEtFUk5fQ1JJVCwKKwkJCSAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZWF2aW5nICVzICIKKwkJCSAid2l0aCBucl90b193cml0ZSA9ICVsZCByZXQgPSAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgd2JjLT5ucl90b193cml0ZSwgcmV0KTsKIAogCS8qIFVwZGF0ZSBpbmRleCAqLwogCWluZGV4ICs9IHBhZ2VzX3dyaXR0ZW47CkBAIC0yOTE0LDcgKzI5OTksOCBAQAogb3V0X3dyaXRlcGFnZXM6CiAJaWYgKCFub19ucndyaXRlX2luZGV4X3VwZGF0ZSkKIAkJd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IDA7Ci0Jd2JjLT5ucl90b193cml0ZSAtPSBucl90b193cml0ZWJ1bXA7CisJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPiBucl90b193cml0ZWJ1bXApCisJCXdiYy0+bnJfdG9fd3JpdGUgLT0gbnJfdG9fd3JpdGVidW1wOwogCXdiYy0+cmFuZ2Vfc3RhcnQgPSByYW5nZV9zdGFydDsKIAl0cmFjZV9leHQ0X2RhX3dyaXRlcGFnZXNfcmVzdWx0KGlub2RlLCB3YmMsIHJldCwgcGFnZXNfd3JpdHRlbik7CiAJcmV0dXJuIHJldDsKQEAgLTMyNzIsNiArMzM1OCw4IEBACiB9CiAKIC8qCisgKiBPX0RJUkVDVCBmb3IgZXh0MyAob3IgaW5kaXJlY3QgbWFwKSBiYXNlZCBmaWxlcworICoKICAqIElmIHRoZSBPX0RJUkVDVCB3cml0ZSB3aWxsIGV4dGVuZCB0aGUgZmlsZSB0aGVuIGFkZCB0aGlzIGlub2RlIHRvIHRoZQogICogb3JwaGFuIGxpc3QuICBTbyByZWNvdmVyeSB3aWxsIHRydW5jYXRlIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNpemUKICAqIGlmIHRoZSBtYWNoaW5lIGNyYXNoZXMgZHVyaW5nIHRoZSB3cml0ZS4KQEAgLTMyODAsNyArMzM2OCw3IEBACiAgKiBjcmFzaGVzIHRoZW4gc3RhbGUgZGlzayBkYXRhIF9tYXlfIGJlIGV4cG9zZWQgaW5zaWRlIHRoZSBmaWxlLiBCdXQgY3VycmVudAogICogVkZTIGNvZGUgZmFsbHMgYmFjayBpbnRvIGJ1ZmZlcmVkIHBhdGggaW4gdGhhdCBjYXNlIHNvIHdlIGFyZSBzYWZlLgogICovCi1zdGF0aWMgc3NpemVfdCBleHQ0X2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKK3N0YXRpYyBzc2l6ZV90IGV4dDRfaW5kX2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzKQogewpAQCAtMzI5MSw2ICszMzc5LDcgQEAKIAlzc2l6ZV90IHJldDsKIAlpbnQgb3JwaGFuID0gMDsKIAlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaW50IHJldHJpZXMgPSAwOwogCiAJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CkBAIC0zMzEzLDkgKzM0MDIsMTIgQEAKIAkJfQogCX0KIAorcmV0cnk6CiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDRfZ2V0X2Jsb2NrLCBOVUxMKTsKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKKwkJZ290byByZXRyeTsKIAogCWlmIChvcnBoYW4pIHsKIAkJaW50IGVycjsKQEAgLTMzNTQsNiArMzQ0NiwzNjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoreworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIG1heF9ibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOworCWludCBkaW9fY3JlZGl0czsKKworCWV4dDRfZGVidWcoImV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZTogaW5vZGUgJWx1LCBjcmVhdGUgZmxhZyAlZFxuIiwKKwkJICAgaW5vZGUtPmlfaW5vLCBjcmVhdGUpOworCS8qCisJICogRElPIFZGUyBjb2RlIHBhc3NlcyBjcmVhdGUgPSAwIGZsYWcgZm9yIHdyaXRlIHRvCisJICogdGhlIG1pZGRsZSBvZiBmaWxlLiBJdCBkb2VzIHRoaXMgdG8gYXZvaWQgYmxvY2sKKwkgKiBhbGxvY2F0aW9uIGZvciBob2xlcywgdG8gcHJldmVudCBleHBvc2Ugc3RhbGUgZGF0YQorCSAqIG91dCB3aGVuIHRoZXJlIGlzIHBhcmFsbGVsIGJ1ZmZlcmVkIHJlYWQgKHdoaWNoIGRvZXMKKwkgKiBub3QgaG9sZCB0aGUgaV9tdXRleCBsb2NrKSB3aGlsZSBkaXJlY3QgSU8gd3JpdGUgaGFzCisJICogbm90IGNvbXBsZXRlZC4gRElPIHJlcXVlc3Qgb24gaG9sZXMgZmluYWxseSBmYWxscyBiYWNrCisJICogdG8gYnVmZmVyZWQgSU8gZm9yIHRoaXMgcmVhc29uLgorCSAqCisJICogRm9yIGV4dDQgZXh0ZW50IGJhc2VkIGZpbGUsIHNpbmNlIHdlIHN1cHBvcnQgZmFsbG9jYXRlLAorCSAqIG5ldyBhbGxvY2F0ZWQgZXh0ZW50IGFzIHVuaW5pdGlhbGl6ZWQsIGZvciBob2xlcywgd2UKKwkgKiBjb3VsZCBmYWxsb2NhdGUgYmxvY2tzIGZvciBob2xlcywgdGh1cyBwYXJhbGxlbAorCSAqIGJ1ZmZlcmVkIElPIHJlYWQgd2lsbCB6ZXJvIG91dCB0aGUgcGFnZSB3aGVuIHJlYWQgb24KKwkgKiBhIGhvbGUgd2hpbGUgcGFyYWxsZWwgRElPIHdyaXRlIHRvIHRoZSBob2xlIGhhcyBub3QgY29tcGxldGVkLgorCSAqCisJICogd2hlbiB3ZSBjb21lIGhlcmUsIHdlIGtub3cgaXQncyBhIGRpcmVjdCBJTyB3cml0ZSB0bworCSAqIHRvIHRoZSBtaWRkbGUgb2YgZmlsZSAoPGlfc2l6ZSkKKwkgKiBzbyBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUgdGhlIGNyZWF0ZSBmbGFnIGZyb20gVkZTLgorCSAqLworCWNyZWF0ZSA9IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVDsKKworCWlmIChtYXhfYmxvY2tzID4gRElPX01BWF9CTE9DS1MpCisJCW1heF9ibG9ja3MgPSBESU9fTUFYX0JMT0NLUzsKKwlkaW9fY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKKwloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGRpb19jcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gZXh0NF9nZXRfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGlibG9jaywgbWF4X2Jsb2NrcywgYmhfcmVzdWx0LAorCQkJICAgICAgY3JlYXRlKTsKKwlpZiAocmV0ID4gMCkgeworCQliaF9yZXN1bHQtPmJfc2l6ZSA9IChyZXQgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJCXJldCA9IDA7CisJfQorCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZXh0NF9mcmVlX2lvX2VuZChleHQ0X2lvX2VuZF90ICppbykKK3sKKwlCVUdfT04oIWlvKTsKKwlpcHV0KGlvLT5pbm9kZSk7CisJa2ZyZWUoaW8pOworfQorc3RhdGljIHZvaWQgZHVtcF9haW9fZGlvX2xpc3Qoc3RydWN0IGlub2RlICogaW5vZGUpCit7CisjaWZkZWYJRVhUNF9ERUJVRworCXN0cnVjdCBsaXN0X2hlYWQgKmN1ciwgKmJlZm9yZSwgKmFmdGVyOworCWV4dDRfaW9fZW5kX3QgKmlvLCAqaW8wLCAqaW8xOworCisJaWYgKGxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7CisJCWV4dDRfZGVidWcoImlub2RlICVsdSBhaW8gZGlvIGxpc3QgaXMgZW1wdHlcbiIsIGlub2RlLT5pX2lubyk7CisJCXJldHVybjsKKwl9CisKKwlleHQ0X2RlYnVnKCJEdW1wIGlub2RlICVsdSBhaW9fZGlvX2NvbXBsZXRlZF9JTyBsaXN0IFxuIiwgaW5vZGUtPmlfaW5vKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvLCAmRVhUNF9JKGlub2RlKS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QsIGxpc3QpeworCQljdXIgPSAmaW8tPmxpc3Q7CisJCWJlZm9yZSA9IGN1ci0+cHJldjsKKwkJaW8wID0gY29udGFpbmVyX29mKGJlZm9yZSwgZXh0NF9pb19lbmRfdCwgbGlzdCk7CisJCWFmdGVyID0gY3VyLT5uZXh0OworCQlpbzEgPSBjb250YWluZXJfb2YoYWZ0ZXIsIGV4dDRfaW9fZW5kX3QsIGxpc3QpOworCisJCWV4dDRfZGVidWcoImlvIDB4JXAgZnJvbSBpbm9kZSAlbHUscHJldiAweCVwLG5leHQgMHglcFxuIiwKKwkJCSAgICBpbywgaW5vZGUtPmlfaW5vLCBpbzAsIGlvMSk7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBjaGVjayBhIHJhbmdlIG9mIHNwYWNlIGFuZCBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9lbmRfYWlvX2Rpb19ub2xvY2soZXh0NF9pb19lbmRfdCAqaW8pCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKKwlsb2ZmX3Qgb2Zmc2V0ID0gaW8tPm9mZnNldDsKKwlzaXplX3Qgc2l6ZSA9IGlvLT5zaXplOworCWludCByZXQgPSAwOworCisJZXh0NF9kZWJ1ZygiZW5kX2Fpb19kaW9fb25sb2NrOiBpbyAweCVwIGZyb20gaW5vZGUgJWx1LGxpc3QtPm5leHQgMHglcCwiCisJCSAgICJsaXN0LT5wcmV2IDB4JXBcbiIsCisJICAgICAgICAgICBpbywgaW5vZGUtPmlfaW5vLCBpby0+bGlzdC5uZXh0LCBpby0+bGlzdC5wcmV2KTsKKworCWlmIChsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoaW8tPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4pCisJCXJldHVybiByZXQ7CisKKwlpZiAob2Zmc2V0ICsgc2l6ZSA8PSBpX3NpemVfcmVhZChpbm9kZSkpCisJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhpbm9kZSwgb2Zmc2V0LCBzaXplKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICIlczogZmFpbGVkIHRvIGNvbnZlcnQgdW53cml0dGVuIgorCQkJImV4dGVudHMgdG8gd3JpdHRlbiBleHRlbnRzLCBlcnJvciBpcyAlZCIKKwkJCSIgaW8gaXMgc3RpbGwgb24gaW5vZGUgJWx1IGFpbyBkaW8gbGlzdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJldCwgaW5vZGUtPmlfaW5vKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBjbGVhciB0aGUgRElPIEFJTyB1bndyaXR0ZW4gZmxhZyAqLworCWlvLT5mbGFnID0gMDsKKwlyZXR1cm4gcmV0OworfQorLyoKKyAqIHdvcmsgb24gY29tcGxldGVkIGFpbyBkaW8gSU8sIHRvIGNvbnZlcnQgdW53cml0dGVuIGV4dGVudHMgdG8gZXh0ZW50cworICovCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9haW9fZGlvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWV4dDRfaW9fZW5kX3QgKmlvICA9IGNvbnRhaW5lcl9vZih3b3JrLCBleHQ0X2lvX2VuZF90LCB3b3JrKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW8tPmlub2RlOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKGlvKTsKKwlpZiAocmV0ID49IDApIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCQlsaXN0X2RlbF9pbml0KCZpby0+bGlzdCk7CisJCWV4dDRfZnJlZV9pb19lbmQoaW8pOworCX0KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKK30KKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGV4dDRfc3luY19maWxlKCkuCisgKgorICogV2hlbiBBSU8gRElPIElPIGlzIGNvbXBsZXRlZCwgdGhlIHdvcmsgdG8gY29udmVydCB1bndyaXR0ZW4KKyAqIGV4dGVudHMgdG8gd3JpdHRlbiBpcyBxdWV1ZWQgb24gd29ya3F1ZXVlIGJ1dCBtYXkgbm90IGdldCBpbW1lZGlhdGVseQorICogc2NoZWR1bGVkLiBXaGVuIGZzeW5jIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlCisgKiBjb252ZXJzaW9uIGlzIGNvbXBsZXRlIGJlZm9yZSBmc3luYyByZXR1cm5zLgorICogVGhlIGlub2RlIGtlZXBzIHRyYWNrIG9mIGEgbGlzdCBvZiBjb21wbGV0ZWQgQUlPIGZyb20gRElPIHBhdGgKKyAqIHRoYXQgbWlnaHQgbmVlZHMgdG8gZG8gdGhlIGNvbnZlcnNpb24uIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhyb3VnaAorICogdGhlIGxpc3QgYW5kIGNvbnZlcnQgdGhlIHJlbGF0ZWQgdW53cml0dGVuIGV4dGVudHMgdG8gd3JpdHRlbi4KKyAqLworaW50IGZsdXNoX2Fpb19kaW9fY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJZXh0NF9pb19lbmRfdCAqaW87CisJaW50IHJldCA9IDA7CisJaW50IHJldDIgPSAwOworCisJaWYgKGxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSkKKwkJcmV0dXJuIHJldDsKKworCWR1bXBfYWlvX2Rpb19saXN0KGlub2RlKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7CisJCWlvID0gbGlzdF9lbnRyeShFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdC5uZXh0LAorCQkJCWV4dDRfaW9fZW5kX3QsIGxpc3QpOworCQkvKgorCQkgKiBDYWxsaW5nIGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKCkgdG8gY29udmVydCBjb21wbGV0ZWQKKwkJICogSU8gdG8gd3JpdHRlbi4KKwkJICoKKwkJICogV2hlbiBleHQ0X3N5bmNfZmlsZSgpIGlzIGNhbGxlZCwgcnVuX3F1ZXVlKCkgbWF5IGFscmVhZHkKKwkJICogYWJvdXQgdG8gZmx1c2ggdGhlIHdvcmsgY29ycmVzcG9uZGluZyB0byB0aGlzIGlvIHN0cnVjdHVyZS4KKwkJICogSXQgd2lsbCBiZSB1cHNldCBpZiBpdCBmb3VuZHMgdGhlIGlvIHN0cnVjdHVyZSByZWxhdGVkCisJCSAqIHRvIHRoZSB3b3JrLXRvLWJlIHNjaGVkdWxlIGlzIGZyZWVkLgorCQkgKgorCQkgKiBUaHVzIHdlIG5lZWQgdG8ga2VlcCB0aGUgaW8gc3RydWN0dXJlIHN0aWxsIHZhbGlkIGhlcmUgYWZ0ZXIKKwkJICogY29udmVydGlvbiBmaW5pc2hlZC4gVGhlIGlvIHN0cnVjdHVyZSBoYXMgYSBmbGFnIHRvCisJCSAqIGF2b2lkIGRvdWJsZSBjb252ZXJ0aW5nIGZyb20gYm90aCBmc3luYyBhbmQgYmFja2dyb3VuZCB3b3JrCisJCSAqIHF1ZXVlIHdvcmsuCisJCSAqLworCQlyZXQgPSBleHQ0X2VuZF9haW9fZGlvX25vbG9jayhpbyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0MiA9IHJldDsKKwkJZWxzZQorCQkJbGlzdF9kZWxfaW5pdCgmaW8tPmxpc3QpOworCX0KKwlyZXR1cm4gKHJldDIgPCAwKSA/IHJldDIgOiAwOworfQorCitzdGF0aWMgZXh0NF9pb19lbmRfdCAqZXh0NF9pbml0X2lvX2VuZCAoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlleHQ0X2lvX2VuZF90ICppbyA9IE5VTEw7CisKKwlpbyA9IGttYWxsb2Moc2l6ZW9mKCppbyksIEdGUF9OT0ZTKTsKKworCWlmIChpbykgeworCQlpZ3JhYihpbm9kZSk7CisJCWlvLT5pbm9kZSA9IGlub2RlOworCQlpby0+ZmxhZyA9IDA7CisJCWlvLT5vZmZzZXQgPSAwOworCQlpby0+c2l6ZSA9IDA7CisJCWlvLT5lcnJvciA9IDA7CisJCUlOSVRfV09SSygmaW8tPndvcmssIGV4dDRfZW5kX2Fpb19kaW9fd29yayk7CisJCUlOSVRfTElTVF9IRUFEKCZpby0+bGlzdCk7CisJfQorCisJcmV0dXJuIGlvOworfQorCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9pb19kaW8oc3RydWN0IGtpb2NiICppb2NiLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgIHNzaXplX3Qgc2l6ZSwgdm9pZCAqcHJpdmF0ZSkKK3sKKyAgICAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kID0gaW9jYi0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisKKwkvKiBpZiBub3QgYXN5bmMgZGlyZWN0IElPIG9yIGRpbyB3aXRoIDAgYnl0ZXMgd3JpdGUsIGp1c3QgcmV0dXJuICovCisJaWYgKCFpb19lbmQgfHwgIXNpemUpCisJCXJldHVybjsKKworCWV4dF9kZWJ1ZygiZXh0NF9lbmRfaW9fZGlvKCk6IGlvX2VuZCAweCVwIgorCQkgICJmb3IgaW5vZGUgJWx1LCBpb2NiIDB4JXAsIG9mZnNldCAlbGx1LCBzaXplICVsbHVcbiIsCisgCQkgIGlvY2ItPnByaXZhdGUsIGlvX2VuZC0+aW5vZGUtPmlfaW5vLCBpb2NiLCBvZmZzZXQsCisJCSAgc2l6ZSk7CisKKwkvKiBpZiBub3QgYWlvIGRpbyB3aXRoIHVud3JpdHRlbiBleHRlbnRzLCBqdXN0IGZyZWUgaW8gYW5kIHJldHVybiAqLworCWlmIChpb19lbmQtPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4peworCQlleHQ0X2ZyZWVfaW9fZW5kKGlvX2VuZCk7CisJCWlvY2ItPnByaXZhdGUgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJaW9fZW5kLT5vZmZzZXQgPSBvZmZzZXQ7CisJaW9fZW5kLT5zaXplID0gc2l6ZTsKKwl3cSA9IEVYVDRfU0IoaW9fZW5kLT5pbm9kZS0+aV9zYiktPmRpb191bndyaXR0ZW5fd3E7CisKKwkvKiBxdWV1ZSB0aGUgd29yayB0byBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4gKi8KKwlxdWV1ZV93b3JrKHdxLCAmaW9fZW5kLT53b3JrKTsKKworCS8qIEFkZCB0aGUgaW9fZW5kIHRvIHBlci1pbm9kZSBjb21wbGV0ZWQgYWlvIGRpbyBsaXN0Ki8KKwlsaXN0X2FkZF90YWlsKCZpb19lbmQtPmxpc3QsCisJCSAmRVhUNF9JKGlvX2VuZC0+aW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCk7CisJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7Cit9CisvKgorICogRm9yIGV4dDQgZXh0ZW50IGZpbGVzLCBleHQ0IHdpbGwgZG8gZGlyZWN0LWlvIHdyaXRlIHRvIGhvbGVzLAorICogcHJlYWxsb2NhdGVkIGV4dGVudHMsIGFuZCB0aG9zZSB3cml0ZSBleHRlbmQgdGhlIGZpbGUsIG5vIG5lZWQgdG8KKyAqIGZhbGwgYmFjayB0byBidWZmZXJlZCBJTy4KKyAqCisgKiBGb3IgaG9sZXMsIHdlIGZhbGxvY2F0ZSB0aG9zZSBibG9ja3MsIG1hcmsgdGhlbSBhcyB1bmludGlhbGl6ZWQKKyAqIElmIHRob3NlIGJsb2NrcyB3ZXJlIHByZWFsbG9jYXRlZCwgd2UgbWFyayBzdXJlIHRoZXkgYXJlIHNwbGl0ZWQsIGJ1dAorICogc3RpbGwga2VlcCB0aGUgcmFuZ2UgdG8gd3JpdGUgYXMgdW5pbnRpYWxpemVkLgorICoKKyAqIFRoZSB1bndycml0dGVuIGV4dGVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gd3JpdHRlbiB3aGVuIERJTyBpcyBjb21wbGV0ZWQuCisgKiBGb3IgYXN5bmMgZGlyZWN0IElPLCBzaW5jZSB0aGUgSU8gbWF5IHN0aWxsIHBlbmRpbmcgd2hlbiByZXR1cm4sIHdlCisgKiBzZXQgdXAgYW4gZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiwgd2hpY2ggd2lsbCBkbyB0aGUgY29udmVydGlvbgorICogd2hlbiBhc3luYyBkaXJlY3QgSU8gY29tcGxldGVkLgorICoKKyAqIElmIHRoZSBPX0RJUkVDVCB3cml0ZSB3aWxsIGV4dGVuZCB0aGUgZmlsZSB0aGVuIGFkZCB0aGlzIGlub2RlIHRvIHRoZQorICogb3JwaGFuIGxpc3QuICBTbyByZWNvdmVyeSB3aWxsIHRydW5jYXRlIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNpemUKKyAqIGlmIHRoZSBtYWNoaW5lIGNyYXNoZXMgZHVyaW5nIHRoZSB3cml0ZS4KKyAqCisgKi8KK3N0YXRpYyBzc2l6ZV90IGV4dDRfZXh0X2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OworCXNzaXplX3QgcmV0OworCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKworCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CisJaWYgKHJ3ID09IFdSSVRFICYmIGZpbmFsX3NpemUgPD0gaW5vZGUtPmlfc2l6ZSkgeworCQkvKgorIAkJICogV2UgY291bGQgZGlyZWN0IHdyaXRlIHRvIGhvbGVzIGFuZCBmYWxsb2NhdGUuCisJCSAqCisgCQkgKiBBbGxvY2F0ZWQgYmxvY2tzIHRvIGZpbGwgdGhlIGhvbGUgYXJlIG1hcmtlZCBhcyB1bmluaXRpYWxpemVkCisgCQkgKiB0byBwcmV2ZW50IHBhcmFsZWwgYnVmZmVyZWQgcmVhZCB0byBleHBvc2UgdGhlIHN0YWxlIGRhdGEKKyAJCSAqIGJlZm9yZSBESU8gY29tcGxldGUgdGhlIGRhdGEgSU8uCisJCSAqCisgCQkgKiBBcyB0byBwcmV2aW91c2x5IGZhbGxvY2F0ZWQgZXh0ZW50cywgZXh0NCBnZXRfYmxvY2sKKyAJCSAqIHdpbGwganVzdCBzaW1wbHkgbWFyayB0aGUgYnVmZmVyIG1hcHBlZCBidXQgc3RpbGwKKyAJCSAqIGtlZXAgdGhlIGV4dGVudHMgdW5pbml0aWFsaXplZC4KKyAJCSAqCisJCSAqIGZvciBub24gQUlPIGNhc2UsIHdlIHdpbGwgY29udmVydCB0aG9zZSB1bndyaXR0ZW4gZXh0ZW50cworCQkgKiB0byB3cml0dGVuIGFmdGVyIHJldHVybiBiYWNrIGZyb20gYmxvY2tkZXZfZGlyZWN0X0lPLgorCQkgKgorCQkgKiBmb3IgYXN5bmMgRElPLCB0aGUgY29udmVyc2lvbiBuZWVkcyB0byBiZSBkZWZlcmVkIHdoZW4KKwkJICogdGhlIElPIGlzIGNvbXBsZXRlZC4gVGhlIGV4dDQgZW5kX2lvIGNhbGxiYWNrIGZ1bmN0aW9uCisJCSAqIHdpbGwgYmUgY2FsbGVkIHRvIHRha2UgY2FyZSBvZiB0aGUgY29udmVyc2lvbiB3b3JrLgorCQkgKiBIZXJlIGZvciBhc3luYyBjYXNlLCB3ZSBhbGxvY2F0ZSBhbiBpb19lbmQgc3RydWN0dXJlIHRvCisJCSAqIGhvb2sgdG8gdGhlIGlvY2IuCisgCQkgKi8KKwkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7CisJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gTlVMTDsKKwkJaWYgKCFpc19zeW5jX2tpb2NiKGlvY2IpKSB7CisJCQlpb2NiLT5wcml2YXRlID0gZXh0NF9pbml0X2lvX2VuZChpbm9kZSk7CisJCQlpZiAoIWlvY2ItPnByaXZhdGUpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkvKgorCQkJICogd2Ugc2F2ZSB0aGUgaW8gc3RydWN0dXJlIGZvciBjdXJyZW50IGFzeW5jCisJCQkgKiBkaXJlY3QgSU8sIHNvIHRoYXQgbGF0ZXIgZXh0NF9nZXRfYmxvY2tzKCkKKwkJCSAqIGNvdWxkIGZsYWcgdGhlIGlvIHN0cnVjdHVyZSB3aGV0aGVyIHRoZXJlCisJCQkgKiBpcyBhIHVud3JpdHRlbiBleHRlbnRzIG5lZWRzIHRvIGJlIGNvbnZlcnRlZAorCQkJICogd2hlbiBJTyBpcyBjb21wbGV0ZWQuCisJCQkgKi8KKwkJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gaW9jYi0+cHJpdmF0ZTsKKwkJfQorCisJCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsCisJCQkJCSBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsCisJCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCisJCQkJCSBleHQ0X2dldF9ibG9ja19kaW9fd3JpdGUsCisJCQkJCSBleHQ0X2VuZF9pb19kaW8pOworCQlpZiAoaW9jYi0+cHJpdmF0ZSkKKwkJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gTlVMTDsKKwkJLyoKKwkJICogVGhlIGlvX2VuZCBzdHJ1Y3R1cmUgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlLAorCQkgKiB0aGF0IHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkZXN0cm95ZWQgYW5kIHRoZQorCQkgKiByZWZlcmVuY2UgdG8gdGhlIGlub2RlIG5lZWQgdG8gYmUgZHJvcHBlZCwgd2hlbiBJTyBpcworCQkgKiBjb21wbGV0ZSwgZXZlbiB3aXRoIDAgYnl0ZSB3cml0ZSwgb3IgZmFpbGVkLgorCQkgKgorCQkgKiBJbiB0aGUgc3VjY2Vzc2Z1bCBBSU8gRElPIGNhc2UsIHRoZSBpb19lbmQgc3RydWN0dXJlIHdpbGwgYmUKKwkJICogZGVzY3Ryb3llZCBhbmQgdGhlIHJlZmVyZW5jZSB0byB0aGUgaW5vZGUgd2lsbCBiZSBkcm9wcGVkCisJCSAqIGFmdGVyIHRoZSBlbmRfaW8gY2FsbCBiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKwkJICoKKwkJICogSW4gdGhlIGNhc2UgdGhlcmUgaXMgMCBieXRlIHdyaXRlLCBvciBlcnJvciBjYXNlLCBzaW5jZQorCQkgKiBWRlMgZGlyZWN0IElPIHdvbid0IGludm9rZSB0aGUgZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiwKKwkJICogd2UgbmVlZCB0byBmcmVlIHRoZSBlbmRfaW8gc3RydWN0dXJlIGhlcmUuCisJCSAqLworCQlpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCAmJiByZXQgPD0gMCAmJiBpb2NiLT5wcml2YXRlKSB7CisJCQlleHQ0X2ZyZWVfaW9fZW5kKGlvY2ItPnByaXZhdGUpOworCQkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7CisJCX0gZWxzZSBpZiAocmV0ID4gMCAmJiAoRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmCisJCQkJICAgICAgIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTikpIHsKKwkJCWludCBlcnI7CisJCQkvKgorCQkJICogZm9yIG5vbiBBSU8gY2FzZSwgc2luY2UgdGhlIElPIGlzIGFscmVhZHkKKwkJCSAqIGNvbXBsZXRlZCwgd2UgY291bGQgZG8gdGhlIGNvbnZlcnRpb24gcmlnaHQgaGVyZQorCQkJICovCisJCQllcnIgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsCisJCQkJCQkJICAgICBvZmZzZXQsIHJldCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXQgPSBlcnI7CisJCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICY9IH5FWFQ0X1NUQVRFX0RJT19VTldSSVRURU47CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBmb3Igd3JpdGUgdGhlIHRoZSBlbmQgb2YgZmlsZSBjYXNlLCB3ZSBmYWxsIGJhY2sgdG8gb2xkIHdheSAqLworCXJldHVybiBleHQ0X2luZF9kaXJlY3RfSU8ocncsIGlvY2IsIGlvdiwgb2Zmc2V0LCBucl9zZWdzKTsKK30KKworc3RhdGljIHNzaXplX3QgZXh0NF9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKworCWlmIChFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKQorCQlyZXR1cm4gZXh0NF9leHRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7CisKKwlyZXR1cm4gZXh0NF9pbmRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7Cit9CisKIC8qCiAgKiBQYWdlcyBjYW4gYmUgbWFya2VkIGRpcnR5IGNvbXBsZXRlbHkgYXN5bmNocm9ub3VzbHkgZnJvbSBleHQ0J3Mgam91cm5hbGxpbmcKICAqIGFjdGl2aXR5LiAgQnkgZmlsZW1hcF9zeW5jX3B0ZSgpLCB0cnlfdG9fdW5tYXBfb25lKCksIGV0Yy4gIFdlIGNhbm5vdCBkbwpAQCAtNDU1MSw4ICs1MDAxLDcgQEAKICAqLwogc3RhdGljIGludCBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJc3RydWN0IGV4dDRfaWxvYyAqaWxvYywKLQkJCQlpbnQgZG9fc3luYykKKwkJCQlzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKQogewogCXN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShpbG9jKTsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CkBAIC00NjUzLDIyICs1MTAyLDEwIEBACiAJCXJhd19pbm9kZS0+aV9leHRyYV9pc2l6ZSA9IGNwdV90b19sZTE2KGVpLT5pX2V4dHJhX2lzaXplKTsKIAl9CiAKLQkvKgotCSAqIElmIHdlJ3JlIG5vdCB1c2luZyBhIGpvdXJuYWwgYW5kIHdlIHdlcmUgY2FsbGVkIGZyb20KLQkgKiBleHQ0X3dyaXRlX2lub2RlKCkgdG8gc3luYyB0aGUgaW5vZGUgKG1ha2luZyBkb19zeW5jIHRydWUpLAotCSAqIHdlIGNhbiBqdXN0IHVzZSBzeW5jX2RpcnR5X2J1ZmZlcigpIGRpcmVjdGx5IHRvIGRvIG91ciBkaXJ0eQotCSAqIHdvcmsuICBUZXN0aW5nIHNfam91cm5hbCBoZXJlIGlzIGEgYml0IHJlZHVuZGFudCBidXQgaXQncwotCSAqIHdvcnRoIGl0IHRvIGF2b2lkIHBvdGVudGlhbCBmdXR1cmUgdHJvdWJsZS4KLQkgKi8KLQlpZiAoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfam91cm5hbCA9PSBOVUxMICYmIGRvX3N5bmMpIHsKLQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBzeW5jX2RpcnR5X2J1ZmZlciIpOwotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JfSBlbHNlIHsKLQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOwotCQlyYyA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSByYzsKLQl9CisJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOworCXJjID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOworCWlmICghZXJyKQorCQllcnIgPSByYzsKIAllaS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9ORVc7CiAKIG91dF9icmVsc2U6CkBAIC00NzM2LDggKzUxNzMsMTYgQEAKIAkJZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmaWxvYyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShFWFQ0X05PSk9VUk5BTF9IQU5ETEUsCi0JCQkJCSAgIGlub2RlLCAmaWxvYywgd2FpdCk7CisJCWlmICh3YWl0KQorCQkJc3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7CisJCWlmIChidWZmZXJfcmVxKGlsb2MuYmgpICYmICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHsKKwkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJCSAgICJJTyBlcnJvciBzeW5jaW5nIGlub2RlLCAiCisJCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCisJCQkJICAgaW5vZGUtPmlfaW5vLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpaWxvYy5iaC0+Yl9ibG9ja25yKTsKKwkJCWVyciA9IC1FSU87CisJCX0KIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTUwMzMsNyArNTQ3OCw3IEBACiAJZ2V0X2JoKGlsb2MtPmJoKTsKIAogCS8qIGV4dDRfZG9fdXBkYXRlX2lub2RlKCkgZG9lcyBqYmQyX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEgKi8KLQllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBpbG9jLCAwKTsKKwllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBpbG9jKTsKIAlwdXRfYmgoaWxvYy0+YmgpOwogCXJldHVybiBlcnI7CiB9CkBAIC01MTc3LDI3ICs1NjIyLDE0IEBACiAgKi8KIHZvaWQgZXh0NF9kaXJ0eV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWhhbmRsZV90ICpjdXJyZW50X2hhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCWhhbmRsZV90ICpoYW5kbGU7CiAKLQlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGN1cnJlbnRfaGFuZGxlKSkgewotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoY3VycmVudF9oYW5kbGUsIGlub2RlKTsKLQkJcmV0dXJuOwotCX0KLQogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMik7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlnb3RvIG91dDsKLQlpZiAoY3VycmVudF9oYW5kbGUgJiYKLQkJY3VycmVudF9oYW5kbGUtPmhfdHJhbnNhY3Rpb24gIT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uKSB7Ci0JCS8qIFRoaXMgdGFzayBoYXMgYSB0cmFuc2FjdGlvbiBvcGVuIGFnYWluc3QgYSBkaWZmZXJlbnQgZnMgKi8KLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiB0cmFuc2FjdGlvbnMgZG8gbm90IG1hdGNoIVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQl9IGVsc2UgewotCQlqYmRfZGVidWcoNSwgIm1hcmtpbmcgZGlydHkuICBvdXRlciBoYW5kbGU9JXBcbiIsCi0JCQkJY3VycmVudF9oYW5kbGUpOwotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JfQorCisJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCiAJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIG91dDoKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGU5YzYxODkuLmJiYTEyODIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0yMDk2LDIwNyArMjA5Niw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIEVYVDRfTUJfSElTVE9SWQotc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uIHsKLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpoaXN0b3J5OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IHN0YXJ0OwotCWludCBtYXg7Ci19OwotCi1zdGF0aWMgdm9pZCAqZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkoc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzLAotCQkJCQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpocywKLQkJCQkJaW50IGZpcnN0KQotewotCWlmIChocyA9PSBzLT5oaXN0b3J5ICsgcy0+bWF4KQotCQlocyA9IHMtPmhpc3Rvcnk7Ci0JaWYgKCFmaXJzdCAmJiBocyA9PSBzLT5oaXN0b3J5ICsgcy0+c3RhcnQpCi0JCXJldHVybiBOVUxMOwotCXdoaWxlIChocy0+b3JpZy5mZV9sZW4gPT0gMCkgewotCQlocysrOwotCQlpZiAoaHMgPT0gcy0+aGlzdG9yeSArIHMtPm1heCkKLQkJCWhzID0gcy0+aGlzdG9yeTsKLQkJaWYgKGhzID09IHMtPmhpc3RvcnkgKyBzLT5zdGFydCkKLQkJCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gaHM7Ci19Ci0KLXN0YXRpYyB2b2lkICpleHQ0X21iX3NlcV9oaXN0b3J5X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaHM7Ci0JaW50IGwgPSAqcG9zOwotCi0JaWYgKGwgPT0gMCkKLQkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKLQlocyA9IGV4dDRfbWJfaGlzdG9yeV9za2lwX2VtcHR5KHMsIHMtPmhpc3RvcnkgKyBzLT5zdGFydCwgMSk7Ci0JaWYgKCFocykKLQkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUgKC0tbCAmJiAoaHMgPSBleHQ0X21iX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK2hzLCAwKSkgIT0gTlVMTCk7Ci0JcmV0dXJuIGhzOwotfQotCi1zdGF0aWMgdm9pZCAqZXh0NF9tYl9zZXFfaGlzdG9yeV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LAotCQkJCSAgICAgIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBleHQ0X21iX3Byb2Nfc2Vzc2lvbiAqcyA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpocyA9IHY7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkocywgcy0+aGlzdG9yeSArIHMtPnN0YXJ0LCAxKTsKLQllbHNlCi0JCXJldHVybiBleHQ0X21iX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK2hzLCAwKTsKLX0KLQotc3RhdGljIGludCBleHQ0X21iX3NlcV9oaXN0b3J5X3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JY2hhciBidWZbMjVdLCBidWYyWzI1XSwgYnVmM1syNV0sICpmbXQ7Ci0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaHMgPSB2OwotCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS01cyAlLThzICUtMjNzICUtMjNzICUtMjNzICUtNXMgIgotCQkJCSIlLTVzICUtMnMgJS02cyAlLTVzICUtNXMgJS02c1xuIiwKLQkJCSAgInBpZCIsICJpbm9kZSIsICJvcmlnaW5hbCIsICJnb2FsIiwgInJlc3VsdCIsICJmb3VuZCIsCi0JCQkgICAiZ3JwcyIsICJjciIsICJmbGFncyIsICJtZXJnZSIsICJ0YWlsIiwgImJyb2tlbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaHMtPm9wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykgewotCQlmbXQgPSAiJS01dSAlLTh1ICUtMjNzICUtMjNzICUtMjNzICUtNXUgJS01dSAlLTJ1ICIKLQkJCSIweCUwNHggJS01cyAlLTV1ICUtNnVcbiI7Ci0JCXNwcmludGYoYnVmMiwgIiV1LyVkLyV1QCV1IiwgaHMtPnJlc3VsdC5mZV9ncm91cCwKLQkJCWhzLT5yZXN1bHQuZmVfc3RhcnQsIGhzLT5yZXN1bHQuZmVfbGVuLAotCQkJaHMtPnJlc3VsdC5mZV9sb2dpY2FsKTsKLQkJc3ByaW50ZihidWYsICIldS8lZC8ldUAldSIsIGhzLT5vcmlnLmZlX2dyb3VwLAotCQkJaHMtPm9yaWcuZmVfc3RhcnQsIGhzLT5vcmlnLmZlX2xlbiwKLQkJCWhzLT5vcmlnLmZlX2xvZ2ljYWwpOwotCQlzcHJpbnRmKGJ1ZjMsICIldS8lZC8ldUAldSIsIGhzLT5nb2FsLmZlX2dyb3VwLAotCQkJaHMtPmdvYWwuZmVfc3RhcnQsIGhzLT5nb2FsLmZlX2xlbiwKLQkJCWhzLT5nb2FsLmZlX2xvZ2ljYWwpOwotCQlzZXFfcHJpbnRmKHNlcSwgZm10LCBocy0+cGlkLCBocy0+aW5vLCBidWYsIGJ1ZjMsIGJ1ZjIsCi0JCQkJaHMtPmZvdW5kLCBocy0+Z3JvdXBzLCBocy0+Y3IsIGhzLT5mbGFncywKLQkJCQlocy0+bWVyZ2VkID8gIk0iIDogIiIsIGhzLT50YWlsLAotCQkJCWhzLT5idWRkeSA/IDEgPDwgaHMtPmJ1ZGR5IDogMCk7Ci0JfSBlbHNlIGlmIChocy0+b3AgPT0gRVhUNF9NQl9ISVNUT1JZX1BSRUFMTE9DKSB7Ci0JCWZtdCA9ICIlLTV1ICUtOHUgJS0yM3MgJS0yM3MgJS0yM3NcbiI7Ci0JCXNwcmludGYoYnVmMiwgIiV1LyVkLyV1QCV1IiwgaHMtPnJlc3VsdC5mZV9ncm91cCwKLQkJCWhzLT5yZXN1bHQuZmVfc3RhcnQsIGhzLT5yZXN1bHQuZmVfbGVuLAotCQkJaHMtPnJlc3VsdC5mZV9sb2dpY2FsKTsKLQkJc3ByaW50ZihidWYsICIldS8lZC8ldUAldSIsIGhzLT5vcmlnLmZlX2dyb3VwLAotCQkJaHMtPm9yaWcuZmVfc3RhcnQsIGhzLT5vcmlnLmZlX2xlbiwKLQkJCWhzLT5vcmlnLmZlX2xvZ2ljYWwpOwotCQlzZXFfcHJpbnRmKHNlcSwgZm10LCBocy0+cGlkLCBocy0+aW5vLCBidWYsICIiLCBidWYyKTsKLQl9IGVsc2UgaWYgKGhzLT5vcCA9PSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRCkgewotCQlzcHJpbnRmKGJ1ZjIsICIldS8lZC8ldSIsIGhzLT5yZXN1bHQuZmVfZ3JvdXAsCi0JCQlocy0+cmVzdWx0LmZlX3N0YXJ0LCBocy0+cmVzdWx0LmZlX2xlbik7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS01dSAlLTh1ICUtMjNzIGRpc2NhcmRcbiIsCi0JCQkJaHMtPnBpZCwgaHMtPmlubywgYnVmMik7Ci0JfSBlbHNlIGlmIChocy0+b3AgPT0gRVhUNF9NQl9ISVNUT1JZX0ZSRUUpIHsKLQkJc3ByaW50ZihidWYyLCAiJXUvJWQvJXUiLCBocy0+cmVzdWx0LmZlX2dyb3VwLAotCQkJaHMtPnJlc3VsdC5mZV9zdGFydCwgaHMtPnJlc3VsdC5mZV9sZW4pOwotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNXUgJS04dSAlLTIzcyBmcmVlXG4iLAotCQkJCWhzLT5waWQsIGhzLT5pbm8sIGJ1ZjIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZXh0NF9tYl9zZXFfaGlzdG9yeV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGV4dDRfbWJfc2VxX2hpc3Rvcnlfb3BzID0gewotCS5zdGFydCAgPSBleHQ0X21iX3NlcV9oaXN0b3J5X3N0YXJ0LAotCS5uZXh0ICAgPSBleHQ0X21iX3NlcV9oaXN0b3J5X25leHQsCi0JLnN0b3AgICA9IGV4dDRfbWJfc2VxX2hpc3Rvcnlfc3RvcCwKLQkuc2hvdyAgID0gZXh0NF9tYl9zZXFfaGlzdG9yeV9zaG93LAotfTsKLQotc3RhdGljIGludCBleHQ0X21iX3NlcV9oaXN0b3J5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IFBERShpbm9kZSktPmRhdGE7Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7Ci0Jc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzOwotCWludCByYzsKLQlpbnQgc2l6ZTsKLQotCWlmICh1bmxpa2VseShzYmktPnNfbWJfaGlzdG9yeSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jcy0+c2IgPSBzYjsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBleHQ0X21iX2hpc3RvcnkpICogc2JpLT5zX21iX2hpc3RvcnlfbWF4OwotCXMtPmhpc3RvcnkgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChzLT5oaXN0b3J5ID09IE5VTEwpIHsKLQkJa2ZyZWUocyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNwaW5fbG9jaygmc2JpLT5zX21iX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KHMtPmhpc3RvcnksIHNiaS0+c19tYl9oaXN0b3J5LCBzaXplKTsKLQlzLT5tYXggPSBzYmktPnNfbWJfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhcnQgPSBzYmktPnNfbWJfaGlzdG9yeV9jdXIgJSBzLT5tYXg7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmZXh0NF9tYl9zZXFfaGlzdG9yeV9vcHMpOwotCWlmIChyYyA9PSAwKSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCW0tPnByaXZhdGUgPSBzOwotCX0gZWxzZSB7Ci0JCWtmcmVlKHMtPmhpc3RvcnkpOwotCQlrZnJlZShzKTsKLQl9Ci0JcmV0dXJuIHJjOwotCi19Ci0KLXN0YXRpYyBpbnQgZXh0NF9tYl9zZXFfaGlzdG9yeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Ja2ZyZWUocy0+aGlzdG9yeSk7Ci0Ja2ZyZWUocyk7Ci0JcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgZXh0NF9tYl9zZXFfaGlzdG9yeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHMtPnNiOwotCWNoYXIgc3RyWzMyXTsKLQlpbnQgdmFsdWU7Ci0KLQlpZiAoY291bnQgPj0gc2l6ZW9mKHN0cikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiAlcyBzdHJpbmcgdG9vIGxvbmcsIG1heCAldSBieXRlc1xuIiwKLQkJCQkibWJfaGlzdG9yeSIsIChpbnQpc2l6ZW9mKHN0cikpOwotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAwKTsKLQlpZiAodmFsdWUgPCAwKQotCQlyZXR1cm4gLUVSQU5HRTsKLQlFWFQ0X1NCKHNiKS0+c19tYl9oaXN0b3J5X2ZpbHRlciA9IHZhbHVlOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQ0X21iX3NlcV9oaXN0b3J5X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGV4dDRfbWJfc2VxX2hpc3Rvcnlfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkud3JpdGUJCT0gZXh0NF9tYl9zZXFfaGlzdG9yeV93cml0ZSwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IGV4dDRfbWJfc2VxX2hpc3RvcnlfcmVsZWFzZSwKLX07Ci0KIHN0YXRpYyB2b2lkICpleHQ0X21iX3NlcV9ncm91cHNfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZXEtPnByaXZhdGU7CkBAIC0yMzk2LDgyICsyMTk1LDYgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAotc3RhdGljIHZvaWQgZXh0NF9tYl9oaXN0b3J5X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQotCWlmIChzYmktPnNfcHJvYyAhPSBOVUxMKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJtYl9ncm91cHMiLCBzYmktPnNfcHJvYyk7Ci0JCWlmIChzYmktPnNfbWJfaGlzdG9yeV9tYXgpCi0JCQlyZW1vdmVfcHJvY19lbnRyeSgibWJfaGlzdG9yeSIsIHNiaS0+c19wcm9jKTsKLQl9Ci0Ja2ZyZWUoc2JpLT5zX21iX2hpc3RvcnkpOwotfQotCi1zdGF0aWMgdm9pZCBleHQ0X21iX2hpc3RvcnlfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCWludCBpOwotCi0JaWYgKHNiaS0+c19wcm9jICE9IE5VTEwpIHsKLQkJaWYgKHNiaS0+c19tYl9oaXN0b3J5X21heCkKLQkJCXByb2NfY3JlYXRlX2RhdGEoIm1iX2hpc3RvcnkiLCBTX0lSVUdPLCBzYmktPnNfcHJvYywKLQkJCQkJICZleHQ0X21iX3NlcV9oaXN0b3J5X2ZvcHMsIHNiKTsKLQkJcHJvY19jcmVhdGVfZGF0YSgibWJfZ3JvdXBzIiwgU19JUlVHTywgc2JpLT5zX3Byb2MsCi0JCQkJICZleHQ0X21iX3NlcV9ncm91cHNfZm9wcywgc2IpOwotCX0KLQotCXNiaS0+c19tYl9oaXN0b3J5X2N1ciA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotCWkgPSBzYmktPnNfbWJfaGlzdG9yeV9tYXggKiBzaXplb2Yoc3RydWN0IGV4dDRfbWJfaGlzdG9yeSk7Ci0Jc2JpLT5zX21iX2hpc3RvcnkgPSBpID8ga3phbGxvYyhpLCBHRlBfS0VSTkVMKSA6IE5VTEw7Ci0JLyogaWYgd2UgY2FuJ3QgYWxsb2NhdGUgaGlzdG9yeSwgdGhlbiB3ZSBzaW1wbGUgd29uJ3QgdXNlIGl0ICovCi19Ci0KLXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZAotZXh0NF9tYl9zdG9yZV9oaXN0b3J5KHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpCi17Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihhYy0+YWNfc2IpOwotCXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgaDsKLQotCWlmIChzYmktPnNfbWJfaGlzdG9yeSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoIShhYy0+YWNfb3AgJiBzYmktPnNfbWJfaGlzdG9yeV9maWx0ZXIpKQotCQlyZXR1cm47Ci0KLQloLm9wID0gYWMtPmFjX29wOwotCWgucGlkID0gY3VycmVudC0+cGlkOwotCWguaW5vID0gYWMtPmFjX2lub2RlID8gYWMtPmFjX2lub2RlLT5pX2lubyA6IDA7Ci0JaC5vcmlnID0gYWMtPmFjX29fZXg7Ci0JaC5yZXN1bHQgPSBhYy0+YWNfYl9leDsKLQloLmZsYWdzID0gYWMtPmFjX2ZsYWdzOwotCWguZm91bmQgPSBhYy0+YWNfZm91bmQ7Ci0JaC5ncm91cHMgPSBhYy0+YWNfZ3JvdXBzX3NjYW5uZWQ7Ci0JaC5jciA9IGFjLT5hY19jcml0ZXJpYTsKLQloLnRhaWwgPSBhYy0+YWNfdGFpbDsKLQloLmJ1ZGR5ID0gYWMtPmFjX2J1ZGR5OwotCWgubWVyZ2VkID0gMDsKLQlpZiAoYWMtPmFjX29wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykgewotCQlpZiAoYWMtPmFjX2dfZXguZmVfc3RhcnQgPT0gYWMtPmFjX2JfZXguZmVfc3RhcnQgJiYKLQkJCQlhYy0+YWNfZ19leC5mZV9ncm91cCA9PSBhYy0+YWNfYl9leC5mZV9ncm91cCkKLQkJCWgubWVyZ2VkID0gMTsKLQkJaC5nb2FsID0gYWMtPmFjX2dfZXg7Ci0JCWgucmVzdWx0ID0gYWMtPmFjX2ZfZXg7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZzYmktPnNfbWJfaGlzdG9yeV9sb2NrKTsKLQltZW1jcHkoc2JpLT5zX21iX2hpc3RvcnkgKyBzYmktPnNfbWJfaGlzdG9yeV9jdXIsICZoLCBzaXplb2YoaCkpOwotCWlmICgrK3NiaS0+c19tYl9oaXN0b3J5X2N1ciA+PSBzYmktPnNfbWJfaGlzdG9yeV9tYXgpCi0JCXNiaS0+c19tYl9oaXN0b3J5X2N1ciA9IDA7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotfQotCi0jZWxzZQotI2RlZmluZSBleHQ0X21iX2hpc3RvcnlfcmVsZWFzZShzYikKLSNkZWZpbmUgZXh0NF9tYl9oaXN0b3J5X2luaXQoc2IpCi0jZW5kaWYKLQogCiAvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgZXh0NF9ncm91cF9pbmZvIGRhdGEgZm9yIHRoZSBnaXZlbiBncm91cC4gKi8KIGludCBleHQ0X21iX2FkZF9ncm91cGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IGdyb3VwLApAQCAtMjY5MCw3ICsyNDEzLDYgQEAKIAlzYmktPnNfbWJfc3RhdHMgPSBNQl9ERUZBVUxUX1NUQVRTOwogCXNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCA9IE1CX0RFRkFVTFRfU1RSRUFNX1RIUkVTSE9MRDsKIAlzYmktPnNfbWJfb3JkZXIyX3JlcXMgPSBNQl9ERUZBVUxUX09SREVSMl9SRVFTOwotCXNiaS0+c19tYl9oaXN0b3J5X2ZpbHRlciA9IEVYVDRfTUJfSElTVE9SWV9ERUZBVUxUOwogCXNiaS0+c19tYl9ncm91cF9wcmVhbGxvYyA9IE1CX0RFRkFVTFRfR1JPVVBfUFJFQUxMT0M7CiAKIAlzYmktPnNfbG9jYWxpdHlfZ3JvdXBzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBleHQ0X2xvY2FsaXR5X2dyb3VwKTsKQEAgLTI3MDgsMTIgKzI0MzAsMTIgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJmxnLT5sZ19wcmVhbGxvY19sb2NrKTsKIAl9CiAKLQlleHQ0X21iX2hpc3RvcnlfaW5pdChzYik7CisJaWYgKHNiaS0+c19wcm9jKQorCQlwcm9jX2NyZWF0ZV9kYXRhKCJtYl9ncm91cHMiLCBTX0lSVUdPLCBzYmktPnNfcHJvYywKKwkJCQkgJmV4dDRfbWJfc2VxX2dyb3Vwc19mb3BzLCBzYik7CiAKIAlpZiAoc2JpLT5zX2pvdXJuYWwpCiAJCXNiaS0+c19qb3VybmFsLT5qX2NvbW1pdF9jYWxsYmFjayA9IHJlbGVhc2VfYmxvY2tzX29uX2NvbW1pdDsKLQotCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IG1iYWxsb2MgZW5hYmxlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3OTAsNyArMjUxMiw4IEBACiAJfQogCiAJZnJlZV9wZXJjcHUoc2JpLT5zX2xvY2FsaXR5X2dyb3Vwcyk7Ci0JZXh0NF9tYl9oaXN0b3J5X3JlbGVhc2Uoc2IpOworCWlmIChzYmktPnNfcHJvYykKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1iX2dyb3VwcyIsIHNiaS0+c19wcm9jKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI3Niw3ICsyOTk5LDEwIEBACiAJCQlhdG9taWNfaW5jKCZzYmktPnNfYmFsX2JyZWFrcyk7CiAJfQogCi0JZXh0NF9tYl9zdG9yZV9oaXN0b3J5KGFjKTsKKwlpZiAoYWMtPmFjX29wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykKKwkJdHJhY2VfZXh0NF9tYmFsbG9jX2FsbG9jKGFjKTsKKwllbHNlCisJCXRyYWNlX2V4dDRfbWJhbGxvY19wcmVhbGxvYyhhYyk7CiB9CiAKIC8qCkBAIC0zNzc2LDcgKzM1MDIsNiBAQAogCWlmIChhYykgewogCQlhYy0+YWNfc2IgPSBzYjsKIAkJYWMtPmFjX2lub2RlID0gcGEtPnBhX2lub2RlOwotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRDsKIAl9CiAKIAl3aGlsZSAoYml0IDwgZW5kKSB7CkBAIC0zNzk2LDcgKzM1MjEsNyBAQAogCQkJYWMtPmFjX2JfZXguZmVfc3RhcnQgPSBiaXQ7CiAJCQlhYy0+YWNfYl9leC5mZV9sZW4gPSBuZXh0IC0gYml0OwogCQkJYWMtPmFjX2JfZXguZmVfbG9naWNhbCA9IDA7Ci0JCQlleHQ0X21iX3N0b3JlX2hpc3RvcnkoYWMpOworCQkJdHJhY2VfZXh0NF9tYmFsbG9jX2Rpc2NhcmQoYWMpOwogCQl9CiAKIAkJdHJhY2VfZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKGFjLCBwYSwgZ3JwX2Jsa19zdGFydCArIGJpdCwKQEAgLTM4MzEsOSArMzU1Niw2IEBACiAJZXh0NF9ncm91cF90IGdyb3VwOwogCWV4dDRfZ3JwYmxrX3QgYml0OwogCi0JaWYgKGFjKQotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRDsKLQogCXRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShhYywgcGEpOwogCUJVR19PTihwYS0+cGFfZGVsZXRlZCA9PSAwKTsKIAlleHQ0X2dldF9ncm91cF9ub19hbmRfb2Zmc2V0KHNiLCBwYS0+cGFfcHN0YXJ0LCAmZ3JvdXAsICZiaXQpOwpAQCAtMzg0OCw3ICszNTcwLDcgQEAKIAkJYWMtPmFjX2JfZXguZmVfc3RhcnQgPSBiaXQ7CiAJCWFjLT5hY19iX2V4LmZlX2xlbiA9IHBhLT5wYV9sZW47CiAJCWFjLT5hY19iX2V4LmZlX2xvZ2ljYWwgPSAwOwotCQlleHQ0X21iX3N0b3JlX2hpc3RvcnkoYWMpOworCQl0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChhYyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MTg5LDcgKzM5MTEsNiBAQAogCXNpemUgPSBhYy0+YWNfb19leC5mZV9sb2dpY2FsICsgYWMtPmFjX29fZXguZmVfbGVuOwogCWlzaXplID0gKGlfc2l6ZV9yZWFkKGFjLT5hY19pbm9kZSkgKyBhYy0+YWNfc2ItPnNfYmxvY2tzaXplIC0gMSkKIAkJPj4gYnNiaXRzOwotCXNpemUgPSBtYXgoc2l6ZSwgaXNpemUpOwogCiAJaWYgKChzaXplID09IGlzaXplKSAmJgogCSAgICAhZXh0NF9mc19pc19idXN5KHNiaSkgJiYKQEAgLTQxOTksNiArMzkyMCw3IEBACiAJfQogCiAJLyogZG9uJ3QgdXNlIGdyb3VwIGFsbG9jYXRpb24gZm9yIGxhcmdlIGZpbGVzICovCisJc2l6ZSA9IG1heChzaXplLCBpc2l6ZSk7CiAJaWYgKHNpemUgPj0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0KSB7CiAJCWFjLT5hY19mbGFncyB8PSBFWFQ0X01CX1NUUkVBTV9BTExPQzsKIAkJcmV0dXJuOwpAQCAtNDczOSw3ICs0NDYxLDYgQEAKIAogCWFjID0ga21lbV9jYWNoZV9hbGxvYyhleHQ0X2FjX2NhY2hlcCwgR0ZQX05PRlMpOwogCWlmIChhYykgewotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRlJFRTsKIAkJYWMtPmFjX2lub2RlID0gaW5vZGU7CiAJCWFjLT5hY19zYiA9IHNiOwogCX0KQEAgLTQ4MDYsNyArNDUyNyw3IEBACiAJCWFjLT5hY19iX2V4LmZlX2dyb3VwID0gYmxvY2tfZ3JvdXA7CiAJCWFjLT5hY19iX2V4LmZlX3N0YXJ0ID0gYml0OwogCQlhYy0+YWNfYl9leC5mZV9sZW4gPSBjb3VudDsKLQkJZXh0NF9tYl9zdG9yZV9oaXN0b3J5KGFjKTsKKwkJdHJhY2VfZXh0NF9tYmFsbG9jX2ZyZWUoYWMpOwogCX0KIAogCWVyciA9IGV4dDRfbWJfbG9hZF9idWRkeShzYiwgYmxvY2tfZ3JvdXAsICZlNGIpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmggYi9mcy9leHQ0L21iYWxsb2MuaAppbmRleCAxODhkM2Q3Li4wY2E4MTEwIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuaAorKysgYi9mcy9leHQ0L21iYWxsb2MuaApAQCAtNTIsMTggKzUyLDggQEAKICNkZWZpbmUgbWJfZGVidWcobiwgZm10LCBhLi4uKQogI2VuZGlmCiAKLS8qCi0gKiB3aXRoIEVYVDRfTUJfSElTVE9SWSBtYmFsbG9jIHN0b3JlcyBsYXN0IE4gYWxsb2NhdGlvbnMgaW4gbWVtb3J5Ci0gKiBhbmQgeW91IGNhbiBtb25pdG9yIGl0IGluIC9wcm9jL2ZzL2V4dDQvPGRldj4vbWJfaGlzdG9yeQotICovCi0jZGVmaW5lIEVYVDRfTUJfSElTVE9SWQogI2RlZmluZSBFWFQ0X01CX0hJU1RPUllfQUxMT0MJCTEJLyogYWxsb2NhdGlvbiAqLwogI2RlZmluZSBFWFQ0X01CX0hJU1RPUllfUFJFQUxMT0MJMgkvKiBwcmVhbGxvY2F0ZWQgYmxvY2tzIHVzZWQgKi8KLSNkZWZpbmUgRVhUNF9NQl9ISVNUT1JZX0RJU0NBUkQJCTQJLyogcHJlYWxsb2NhdGlvbiBkaXNjYXJkZWQgKi8KLSNkZWZpbmUgRVhUNF9NQl9ISVNUT1JZX0ZSRUUJCTgJLyogZnJlZSAqLwotCi0jZGVmaW5lIEVYVDRfTUJfSElTVE9SWV9ERUZBVUxUCQkoRVhUNF9NQl9ISVNUT1JZX0FMTE9DIHwgXAotCQkJCQkgRVhUNF9NQl9ISVNUT1JZX1BSRUFMTE9DKQogCiAvKgogICogSG93IGxvbmcgbWJhbGxvYyBjYW4gbG9vayBmb3IgYSBiZXN0IGV4dGVudCAoaW4gZm91bmQgZXh0ZW50cykKQEAgLTg0LDcgKzc0LDcgQEAKICAqIHdpdGggJ2V4dDRfbWJfc3RhdHMnIGFsbG9jYXRvciB3aWxsIGNvbGxlY3Qgc3RhdHMgdGhhdCB3aWxsIGJlCiAgKiBzaG93biBhdCB1bW91bnQuIFRoZSBjb2xsZWN0aW5nIGNvc3RzIHRob3VnaCEKICAqLwotI2RlZmluZSBNQl9ERUZBVUxUX1NUQVRTCQkxCisjZGVmaW5lIE1CX0RFRkFVTFRfU1RBVFMJCTAKIAogLyoKICAqIGZpbGVzIHNtYWxsZXIgdGhhbiBNQl9ERUZBVUxUX1NUUkVBTV9USFJFU0hPTEQgYXJlIHNlcnZlZApAQCAtMjE3LDIyICsyMDcsNiBAQAogI2RlZmluZSBBQ19TVEFUVVNfRk9VTkQJCTIKICNkZWZpbmUgQUNfU1RBVFVTX0JSRUFLCQkzCiAKLXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgewotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IG9yaWc7CS8qIG9yaWcgYWxsb2NhdGlvbiAqLwotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IGdvYWw7CS8qIGdvYWwgYWxsb2NhdGlvbiAqLwotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IHJlc3VsdDsJLyogcmVzdWx0IGFsbG9jYXRpb24gKi8KLQl1bnNpZ25lZCBwaWQ7Ci0JdW5zaWduZWQgaW5vOwotCV9fdTE2IGZvdW5kOwkvKiBob3cgbWFueSBleHRlbnRzIGhhdmUgYmVlbiBmb3VuZCAqLwotCV9fdTE2IGdyb3VwczsJLyogaG93IG1hbnkgZ3JvdXBzIGhhdmUgYmVlbiBzY2FubmVkICovCi0JX191MTYgdGFpbDsJLyogd2hhdCB0YWlsIGJyb2tlIHNvbWUgYnVkZHkgKi8KLQlfX3UxNiBidWRkeTsJLyogYnVkZHkgdGhlIHRhaWwgXl5eIGJyb2tlICovCi0JX191MTYgZmxhZ3M7Ci0JX191OCBjcjozOwkvKiB3aGljaCBwaGFzZSB0aGUgcmVzdWx0IGV4dGVudCB3YXMgZm91bmQgYXQgKi8KLQlfX3U4IG9wOjQ7Ci0JX191OCBtZXJnZWQ6MTsKLX07Ci0KIHN0cnVjdCBleHQ0X2J1ZGR5IHsKIAlzdHJ1Y3QgcGFnZSAqYmRfYnVkZHlfcGFnZTsKIAl2b2lkICpiZF9idWRkeTsKQEAgLTI0NywxMyArMjIxLDYgQEAKICNkZWZpbmUgRVhUNF9NQl9CSVRNQVAoZTRiKQkoKGU0YiktPmJkX2JpdG1hcCkKICNkZWZpbmUgRVhUNF9NQl9CVUREWShlNGIpCSgoZTRiKS0+YmRfYnVkZHkpCiAKLSNpZm5kZWYgRVhUNF9NQl9ISVNUT1JZCi1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9tYl9zdG9yZV9oaXN0b3J5KHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpCi17Ci0JcmV0dXJuOwotfQotI2VuZGlmCi0KICNkZWZpbmUgaW5fcmFuZ2UoYiwgZmlyc3QsIGxlbikJKChiKSA+PSAoZmlyc3QpICYmIChiKSA8PSAoZmlyc3QpICsgKGxlbikgLSAxKQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZnNibGtfdCBleHQ0X2dycF9vZmZzX3RvX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IGJmNTE5ZjIuLmE5M2Q1YjggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJZ290byBlcnJfb3V0OwogCQl9CiAJfQotCXJldHZhbCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4dCk7CisJcmV0dmFsID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXh0LCAwKTsKIGVycl9vdXQ6CiAJaWYgKHBhdGgpIHsKIAkJZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tb3ZlX2V4dGVudC5jIGIvZnMvZXh0NC9tb3ZlX2V4dGVudC5jCmluZGV4IGMwN2EyOTEuLjI1YjZiMTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbW92ZV9leHRlbnQuYworKysgYi9mcy9leHQ0L21vdmVfZXh0ZW50LmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJaWYgKGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBvcmlnX2lub2RlLAotCQkJCQlvcmlnX3BhdGgsIG5ld19leHQpKQorCQkJCQlvcmlnX3BhdGgsIG5ld19leHQsIDApKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWlmIChleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgb3JpZ19pbm9kZSwKLQkJCQkJICAgb3JpZ19wYXRoLCBlbmRfZXh0KSkKKwkJCQkJICAgb3JpZ19wYXRoLCBlbmRfZXh0LCAwKSkKIAkJCWdvdG8gb3V0OwogCX0KIG91dDoKQEAgLTEwMDEsMTQgKzEwMDEsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBvcmlnIGFuZCBkb25vciBzaG91bGQgYmUgZGlmZmVyZW50IGZpbGUgKi8KLQlpZiAob3JpZ19pbm9kZS0+aV9pbm8gPT0gZG9ub3JfaW5vZGUtPmlfaW5vKSB7Ci0JCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IFRoZSBhcmd1bWVudCBmaWxlcyBzaG91bGQgbm90ICIKLQkJCSJiZSBzYW1lIGZpbGUgW2lubzpvcmlnICVsdSwgZG9ub3IgJWx1XVxuIiwKLQkJCW9yaWdfaW5vZGUtPmlfaW5vLCBkb25vcl9pbm9kZS0+aV9pbm8pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAkvKiBFeHQ0IG1vdmUgZXh0ZW50IHN1cHBvcnRzIG9ubHkgZXh0ZW50IGJhc2VkIGZpbGUgKi8KIAlpZiAoIShFWFQ0X0kob3JpZ19pbm9kZSktPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpKSB7CiAJCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IG9yaWcgZmlsZSBpcyBub3QgZXh0ZW50cyAiCkBAIC0xMjMyLDYgKzEyMjQsMTQgQEAKIAlpbnQgYmxvY2tfbGVuX2luX3BhZ2U7CiAJaW50IHVuaW5pdDsKIAorCS8qIG9yaWcgYW5kIGRvbm9yIHNob3VsZCBiZSBkaWZmZXJlbnQgZmlsZSAqLworCWlmIChvcmlnX2lub2RlLT5pX2lubyA9PSBkb25vcl9pbm9kZS0+aV9pbm8pIHsKKwkJZXh0NF9kZWJ1ZygiZXh0NCBtb3ZlIGV4dGVudDogVGhlIGFyZ3VtZW50IGZpbGVzIHNob3VsZCBub3QgIgorCQkJImJlIHNhbWUgZmlsZSBbaW5vOm9yaWcgJWx1LCBkb25vciAlbHVdXG4iLAorCQkJb3JpZ19pbm9kZS0+aV9pbm8sIGRvbm9yX2lub2RlLT5pX2lubyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIHByb3RlY3Qgb3JpZyBhbmQgZG9ub3IgYWdhaW5zdCBhIHRydW5jYXRlICovCiAJcmV0MSA9IG1leHRfaW5vZGVfZG91YmxlX2xvY2sob3JpZ19pbm9kZSwgZG9ub3JfaW5vZGUpOwogCWlmIChyZXQxIDwgMCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCA0MmY4MWQyLi42ZDJjMWI4IDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC0xNTE4LDEyICsxNTE4LDggQEAKIAkJCXJldHVybiByZXR2YWw7CiAKIAkJaWYgKGJsb2NrcyA9PSAxICYmICFkeF9mYWxsYmFjayAmJgotCQkgICAgRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSkgewotCQkJcmV0dmFsID0gbWFrZV9pbmRleGVkX2RpcihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGJoKTsKLQkJCWlmIChyZXR2YWwgPT0gLUVOT1NQQykKLQkJCQlicmVsc2UoYmgpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQorCQkgICAgRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSkKKwkJCXJldHVybiBtYWtlX2luZGV4ZWRfZGlyKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgYmgpOwogCQlicmVsc2UoYmgpOwogCX0KIAliaCA9IGV4dDRfYXBwZW5kKGhhbmRsZSwgZGlyLCAmYmxvY2ssICZyZXR2YWwpOwpAQCAtMTUzMiwxMCArMTUyOCw3IEBACiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgYmgtPmJfZGF0YTsKIAlkZS0+aW5vZGUgPSAwOwogCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soYmxvY2tzaXplLCBibG9ja3NpemUpOwotCXJldHZhbCA9IGFkZF9kaXJlbnRfdG9fYnVmKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgZGUsIGJoKTsKLQlpZiAocmV0dmFsID09IC1FTk9TUEMpCi0JCWJyZWxzZShiaCk7Ci0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gYWRkX2RpcmVudF90b19idWYoaGFuZGxlLCBkZW50cnksIGlub2RlLCBkZSwgYmgpOwogfQogCiAvKgpAQCAtMTY2NCw4ICsxNjU3LDcgQEAKIAlpZiAoIWRlKQogCQlnb3RvIGNsZWFudXA7CiAJZXJyID0gYWRkX2RpcmVudF90b19idWYoaGFuZGxlLCBkZW50cnksIGlub2RlLCBkZSwgYmgpOwotCWlmIChlcnIgIT0gLUVOT1NQQykKLQkJYmggPSBOVUxMOworCWJoID0gTlVMTDsKIAlnb3RvIGNsZWFudXA7CiAKIGpvdXJuYWxfZXJyb3I6CkBAIC0yMDc2LDcgKzIwNjgsOCBAQAogCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKKwkvKiBleHQ0X2hhbmRsZV92YWxpZCgpIGFzc3VtZXMgYSB2YWxpZCBoYW5kbGVfdCBwb2ludGVyICovCisJaWYgKGhhbmRsZSAmJiAhZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19vcnBoYW5fbG9jayk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZGY1MzliYS4uZDRjYTkyYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTAsMTMgKzUwLDYgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9leHQ0Lmg+CiAKLXN0YXRpYyBpbnQgZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aCA9IDEwMDA7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLCBkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLAotCQkgICBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLAotCQkgIkRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMgc2F2ZWQgZm9yIG1iX2hpc3RvcnkiKTsKLQogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpleHQ0X3Byb2Nfcm9vdDsKIHN0YXRpYyBzdHJ1Y3Qga3NldCAqZXh0NF9rc2V0OwogCkBAIC0xODksNiArMTgyLDM2IEBACiAJCWJnLT5iZ19pdGFibGVfdW51c2VkX2hpID0gY3B1X3RvX2xlMTYoY291bnQgPj4gMTYpOwogfQogCisKKy8qIEp1c3QgaW5jcmVtZW50IHRoZSBub24tcG9pbnRlciBoYW5kbGUgdmFsdWUgKi8KK3N0YXRpYyBoYW5kbGVfdCAqZXh0NF9nZXRfbm9qb3VybmFsKHZvaWQpCit7CisJaGFuZGxlX3QgKmhhbmRsZSA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKKwl1bnNpZ25lZCBsb25nIHJlZl9jbnQgPSAodW5zaWduZWQgbG9uZyloYW5kbGU7CisKKwlCVUdfT04ocmVmX2NudCA+PSBFWFQ0X05PSk9VUk5BTF9NQVhfUkVGX0NPVU5UKTsKKworCXJlZl9jbnQrKzsKKwloYW5kbGUgPSAoaGFuZGxlX3QgKilyZWZfY250OworCisJY3VycmVudC0+am91cm5hbF9pbmZvID0gaGFuZGxlOworCXJldHVybiBoYW5kbGU7Cit9CisKKworLyogRGVjcmVtZW50IHRoZSBub24tcG9pbnRlciBoYW5kbGUgdmFsdWUgKi8KK3N0YXRpYyB2b2lkIGV4dDRfcHV0X25vam91cm5hbChoYW5kbGVfdCAqaGFuZGxlKQoreworCXVuc2lnbmVkIGxvbmcgcmVmX2NudCA9ICh1bnNpZ25lZCBsb25nKWhhbmRsZTsKKworCUJVR19PTihyZWZfY250ID09IDApOworCisJcmVmX2NudC0tOworCWhhbmRsZSA9IChoYW5kbGVfdCAqKXJlZl9jbnQ7CisKKwljdXJyZW50LT5qb3VybmFsX2luZm8gPSBoYW5kbGU7Cit9CisKIC8qCiAgKiBXcmFwcGVycyBmb3IgamJkMl9qb3VybmFsX3N0YXJ0L2VuZC4KICAqCkBAIC0yMTUsMTEgKzIzOCw3IEBACiAJCX0KIAkJcmV0dXJuIGpiZDJfam91cm5hbF9zdGFydChqb3VybmFsLCBuYmxvY2tzKTsKIAl9Ci0JLyoKLQkgKiBXZSdyZSBub3Qgam91cm5hbGluZywgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBpbmRpY2F0aW9uLgotCSAqLwotCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IEVYVDRfTk9KT1VSTkFMX0hBTkRMRTsKLQlyZXR1cm4gY3VycmVudC0+am91cm5hbF9pbmZvOworCXJldHVybiBleHQ0X2dldF9ub2pvdXJuYWwoKTsKIH0KIAogLyoKQEAgLTIzNSwxMSArMjU0LDcgQEAKIAlpbnQgcmM7CiAKIAlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpIHsKLQkJLyoKLQkJICogRG8gdGhpcyBoZXJlIHNpbmNlIHdlIGRvbid0IGNhbGwgamJkMl9qb3VybmFsX3N0b3AoKSBpbgotCQkgKiBuby1qb3VybmFsIG1vZGUuCi0JCSAqLwotCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOworCQlleHQ0X3B1dF9ub2pvdXJuYWwoaGFuZGxlKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNiID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X2pvdXJuYWwtPmpfcHJpdmF0ZTsKQEAgLTU4MCw2ICs1OTUsOSBAQAogCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IHNiaS0+c19lczsKIAlpbnQgaSwgZXJyOwogCisJZmx1c2hfd29ya3F1ZXVlKHNiaS0+ZGlvX3Vud3JpdHRlbl93cSk7CisJZGVzdHJveV93b3JrcXVldWUoc2JpLT5kaW9fdW53cml0dGVuX3dxKTsKKwogCWxvY2tfc3VwZXIoc2IpOwogCWxvY2tfa2VybmVsKCk7CiAJaWYgKHNiLT5zX2RpcnQpCkBAIC02ODQsNiArNzAyLDggQEAKIAllaS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3MgPSAwOwogCWVpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcgPSAwOwogCXNwaW5fbG9ja19pbml0KCYoZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jaykpOworCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QpOworCWVpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CiAKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CkBAIC0xMDUyLDcgKzEwNzIsNyBAQAogCU9wdF9qb3VybmFsX3VwZGF0ZSwgT3B0X2pvdXJuYWxfZGV2LAogCU9wdF9qb3VybmFsX2NoZWNrc3VtLCBPcHRfam91cm5hbF9hc3luY19jb21taXQsCiAJT3B0X2Fib3J0LCBPcHRfZGF0YV9qb3VybmFsLCBPcHRfZGF0YV9vcmRlcmVkLCBPcHRfZGF0YV93cml0ZWJhY2ssCi0JT3B0X2RhdGFfZXJyX2Fib3J0LCBPcHRfZGF0YV9lcnJfaWdub3JlLCBPcHRfbWJfaGlzdG9yeV9sZW5ndGgsCisJT3B0X2RhdGFfZXJyX2Fib3J0LCBPcHRfZGF0YV9lcnJfaWdub3JlLAogCU9wdF91c3JqcXVvdGEsIE9wdF9ncnBqcXVvdGEsIE9wdF9vZmZ1c3JqcXVvdGEsIE9wdF9vZmZncnBqcXVvdGEsCiAJT3B0X2pxZm10X3Zmc29sZCwgT3B0X2pxZm10X3Zmc3YwLCBPcHRfcXVvdGEsIE9wdF9ub3F1b3RhLAogCU9wdF9pZ25vcmUsIE9wdF9iYXJyaWVyLCBPcHRfbm9iYXJyaWVyLCBPcHRfZXJyLCBPcHRfcmVzaXplLApAQCAtMTA5OSw3ICsxMTE5LDYgQEAKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKIAl7T3B0X2RhdGFfZXJyX2Fib3J0LCAiZGF0YV9lcnI9YWJvcnQifSwKIAl7T3B0X2RhdGFfZXJyX2lnbm9yZSwgImRhdGFfZXJyPWlnbm9yZSJ9LAotCXtPcHRfbWJfaGlzdG9yeV9sZW5ndGgsICJtYl9oaXN0b3J5X2xlbmd0aD0ldSJ9LAogCXtPcHRfb2ZmdXNyanF1b3RhLCAidXNyanF1b3RhPSJ9LAogCXtPcHRfdXNyanF1b3RhLCAidXNyanF1b3RhPSVzIn0sCiAJe09wdF9vZmZncnBqcXVvdGEsICJncnBqcXVvdGE9In0sCkBAIC0xMjgxLDkgKzEzMDAsMTEgQEAKIAkJCSpqb3VybmFsX2Rldm51bSA9IG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX2NoZWNrc3VtOgotCQkJYnJlYWs7CS8qIEtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQ0hFQ0tTVU0pOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0OgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0FTWU5DX0NPTU1JVCk7CisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQ0hFQ0tTVU0pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vbG9hZDoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9MT0FEKTsKQEAgLTEzNDAsMTMgKzEzNjEsNiBAQAogCQljYXNlIE9wdF9kYXRhX2Vycl9pZ25vcmU6CiAJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREFUQV9FUlJfQUJPUlQpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X21iX2hpc3RvcnlfbGVuZ3RoOgotCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCi0JCQkJcmV0dXJuIDA7Ci0JCQlpZiAob3B0aW9uIDwgMCkKLQkJCQlyZXR1cm4gMDsKLQkJCXNiaS0+c19tYl9oaXN0b3J5X21heCA9IG9wdGlvbjsKLQkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19RVU9UQQogCQljYXNlIE9wdF91c3JqcXVvdGE6CiAJCQlxdHlwZSA9IFVTUlFVT1RBOwpAQCAtMTY0NiwxMyArMTY2MCw2IEBACiAJCQlFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpLAogCQkJc2JpLT5zX21vdW50X29wdCk7CiAKLQlpZiAoRVhUNF9TQihzYiktPnNfam91cm5hbCkgewotCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAiJXMgam91cm5hbCBvbiAlcyIsCi0JCSAgICAgICBFWFQ0X1NCKHNiKS0+c19qb3VybmFsLT5qX2lub2RlID8gImludGVybmFsIiA6Ci0JCSAgICAgICAiZXh0ZXJuYWwiLCBFWFQ0X1NCKHNiKS0+c19qb3VybmFsLT5qX2Rldm5hbWUpOwotCX0gZWxzZSB7Ci0JCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJubyBqb3VybmFsIik7Ci0JfQogCXJldHVybiByZXM7CiB9CiAKQEAgLTIxOTcsNiArMjIwNCw3IEBACiBFWFQ0X1JXX0FUVFJfU0JJX1VJKG1iX29yZGVyMl9yZXEsIHNfbWJfb3JkZXIyX3JlcXMpOwogRVhUNF9SV19BVFRSX1NCSV9VSShtYl9zdHJlYW1fcmVxLCBzX21iX3N0cmVhbV9yZXF1ZXN0KTsKIEVYVDRfUldfQVRUUl9TQklfVUkobWJfZ3JvdXBfcHJlYWxsb2MsIHNfbWJfZ3JvdXBfcHJlYWxsb2MpOworRVhUNF9SV19BVFRSX1NCSV9VSShtYXhfd3JpdGViYWNrX21iX2J1bXAsIHNfbWF4X3dyaXRlYmFja19tYl9idW1wKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmV4dDRfYXR0cnNbXSA9IHsKIAlBVFRSX0xJU1QoZGVsYXllZF9hbGxvY2F0aW9uX2Jsb2NrcyksCkBAIC0yMjEwLDYgKzIyMTgsNyBAQAogCUFUVFJfTElTVChtYl9vcmRlcjJfcmVxKSwKIAlBVFRSX0xJU1QobWJfc3RyZWFtX3JlcSksCiAJQVRUUl9MSVNUKG1iX2dyb3VwX3ByZWFsbG9jKSwKKwlBVFRSX0xJU1QobWF4X3dyaXRlYmFja19tYl9idW1wKSwKIAlOVUxMLAogfTsKIApAQCAtMjQxMyw3ICsyNDIyLDYgQEAKIAlzYmktPnNfY29tbWl0X2ludGVydmFsID0gSkJEMl9ERUZBVUxUX01BWF9DT01NSVRfQUdFICogSFo7CiAJc2JpLT5zX21pbl9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUlOX0JBVENIX1RJTUU7CiAJc2JpLT5zX21heF9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUFYX0JBVENIX1RJTUU7Ci0Jc2JpLT5zX21iX2hpc3RvcnlfbWF4ID0gZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aDsKIAogCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgQkFSUklFUik7CiAKQEAgLTI2NzksNiArMjY4Nyw3IEBACiAJfQogCiAJc2JpLT5zX3N0cmlwZSA9IGV4dDRfZ2V0X3N0cmlwZV9zaXplKHNiaSk7CisJc2JpLT5zX21heF93cml0ZWJhY2tfbWJfYnVtcCA9IDEyODsKIAogCS8qCiAJICogc2V0IHVwIGVub3VnaCBzbyB0aGF0IGl0IGNhbiByZWFkIGFuIGlub2RlCkBAIC0yNzUyLDE0ICsyNzYxLDIwIEBACiAJCWdvdG8gZmFpbGVkX21vdW50NDsKIAl9CiAKLQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAotCQkJCSAgSkJEMl9GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSwgMCwgMCk7Ci0JaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0FTWU5DX0NPTU1JVCkpCi0JCWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsIDAsIDAsCisJaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0FTWU5DX0NPTU1JVCkpIHsKKwkJamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKKwkJCQlKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLAogCQkJCUpCRDJfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpOwotCWVsc2UKKwl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0NIRUNLU1VNKSkgeworCQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAorCQkJCUpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsIDApOwogCQlqYmQyX2pvdXJuYWxfY2xlYXJfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsIDAsIDAsCiAJCQkJSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCk7CisJfSBlbHNlIHsKKwkJamJkMl9qb3VybmFsX2NsZWFyX2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAorCQkJCUpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsCisJCQkJSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCk7CisJfQogCiAJLyogV2UgaGF2ZSBub3cgdXBkYXRlZCB0aGUgam91cm5hbCBpZiByZXF1aXJlZCwgc28gd2UgY2FuCiAJICogdmFsaWRhdGUgdGhlIGRhdGEgam91cm5hbGluZyBtb2RlLiAqLwpAQCAtMjc5OCw2ICsyODEzLDEyIEBACiAJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9CSCk7CiAJCX0KIAl9CisJRVhUNF9TQihzYiktPmRpb191bndyaXR0ZW5fd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJleHQ0LWRpby11bndyaXR0ZW4iKTsKKwlpZiAoIUVYVDRfU0Ioc2IpLT5kaW9fdW53cml0dGVuX3dxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZmFpbGVkIHRvIGNyZWF0ZSBESU8gd29ya3F1ZXVlXG4iKTsKKwkJZ290byBmYWlsZWRfbW91bnRfd3E7CisJfQorCiAJLyoKIAkgKiBUaGUgamJkMl9qb3VybmFsX2xvYWQgd2lsbCBoYXZlIGRvbmUgYW55IG5lY2Vzc2FyeSBsb2cgcmVjb3ZlcnksCiAJICogc28gd2UgY2FuIHNhZmVseSBtb3VudCB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbSBub3cuCkBAIC0yODQ5LDEyICsyODcwLDEyIEBACiAJCQkgImF2YWlsYWJsZSIpOwogCX0KIAotCWlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9KT1VSTkFMX0RBVEEpIHsKKwlpZiAodGVzdF9vcHQoc2IsIERFTEFMTE9DKSAmJgorCSAgICAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSkgewogCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiSWdub3JpbmcgZGVsYWxsb2Mgb3B0aW9uIC0gIgogCQkJICJyZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGUiKTsKIAkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFTEFMTE9DKTsKLQl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpCi0JCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJkZWxheWVkIGFsbG9jYXRpb24gZW5hYmxlZCIpOworCX0KIAogCWVyciA9IGV4dDRfc2V0dXBfc3lzdGVtX3pvbmUoc2IpOwogCWlmIChlcnIpIHsKQEAgLTI5MTAsNiArMjkzMSw4IEBACiAKIGZhaWxlZF9tb3VudDQ6CiAJZXh0NF9tc2coc2IsIEtFUk5fRVJSLCAibW91bnQgZmFpbGVkIik7CisJZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktPmRpb191bndyaXR0ZW5fd3EpOworZmFpbGVkX21vdW50X3dxOgogCWV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7CiAJaWYgKHNiaS0+c19qb3VybmFsKSB7CiAJCWpiZDJfam91cm5hbF9kZXN0cm95KHNiaS0+c19qb3VybmFsKTsKQEAgLTMxNjQsOSArMzE4Nyw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQkFSUklFUikKLQkJZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgImJhcnJpZXJzIGVuYWJsZWQiKTsKLQllbHNlCisJaWYgKCEoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQkFSUklFUikpCiAJCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJiYXJyaWVycyBkaXNhYmxlZCIpOwogCiAJaWYgKCFyZWFsbHlfcmVhZF9vbmx5ICYmIHRlc3Rfb3B0KHNiLCBVUERBVEVfSk9VUk5BTCkpIHsKQEAgLTMzNjEsMTEgKzMzODIsMTMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAl0aWRfdCB0YXJnZXQ7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAKIAl0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpOwotCWlmIChqYmQyX2pvdXJuYWxfc3RhcnRfY29tbWl0KEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwsICZ0YXJnZXQpKSB7CisJZmx1c2hfd29ya3F1ZXVlKHNiaS0+ZGlvX3Vud3JpdHRlbl93cSk7CisJaWYgKGpiZDJfam91cm5hbF9zdGFydF9jb21taXQoc2JpLT5zX2pvdXJuYWwsICZ0YXJnZXQpKSB7CiAJCWlmICh3YWl0KQotCQkJamJkMl9sb2dfd2FpdF9jb21taXQoRVhUNF9TQihzYiktPnNfam91cm5hbCwgdGFyZ2V0KTsKKwkJCWpiZDJfbG9nX3dhaXRfY29tbWl0KHNiaS0+c19qb3VybmFsLCB0YXJnZXQpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMzk1MSwyNyArMzk3NCw2IEBACiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAogfTsKIAotI2lmZGVmIENPTkZJR19FWFQ0REVWX0NPTVBBVAotc3RhdGljIGludCBleHQ0ZGV2X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQkJICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSxzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJFWFQ0LWZzICglcyk6IFVwZGF0ZSB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyAiCi0JICAgICAgICJ0byBtb3VudCB1c2luZyBleHQ0XG4iLCBkZXZfbmFtZSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mcyAoJXMpOiBleHQ0ZGV2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICIKLQkgICAgICAgIndpbGwgZ28gYXdheSBieSAyLjYuMzFcbiIsIGRldl9uYW1lKTsKLQlyZXR1cm4gZ2V0X3NiX2JkZXYoZnNfdHlwZSwgZmxhZ3MsIGRldl9uYW1lLCBkYXRhLCBleHQ0X2ZpbGxfc3VwZXIsbW50KTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDRkZXZfZnNfdHlwZSA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gImV4dDRkZXYiLAotCS5nZXRfc2IJCT0gZXh0NGRldl9nZXRfc2IsCi0JLmtpbGxfc2IJPSBraWxsX2Jsb2NrX3N1cGVyLAotCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKLX07Ci1NT0RVTEVfQUxJQVMoImV4dDRkZXYiKTsKLSNlbmRpZgotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2V4dDRfZnModm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtMzk5NiwxMyArMzk5OCw2IEBACiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NF9mc190eXBlKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLSNpZmRlZiBDT05GSUdfRVhUNERFVl9DT01QQVQKLQllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0ZGV2X2ZzX3R5cGUpOwotCWlmIChlcnIpIHsKLQkJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0X2ZzX3R5cGUpOwotCQlnb3RvIG91dDsKLQl9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIG91dDoKIAlkZXN0cm95X2lub2RlY2FjaGUoKTsKQEAgLTQwMjEsOSArNDAxNiw2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9leHQ0X2ZzKHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0X2ZzX3R5cGUpOwotI2lmZGVmIENPTkZJR19FWFQ0REVWX0NPTVBBVAotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NGRldl9mc190eXBlKTsKLSNlbmRpZgogCWRlc3Ryb3lfaW5vZGVjYWNoZSgpOwogCWV4aXRfZXh0NF94YXR0cigpOwogCWV4aXRfZXh0NF9tYmFsbG9jKCk7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmgKaW5kZXggYWRiMGU3Mi4uN2RiMDk3OSAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZhdC5oCisrKyBiL2ZzL2ZhdC9mYXQuaApAQCAtMzIzLDcgKzMyMyw3IEBACiAvKiBmYXQvbWlzYy5jICovCiBleHRlcm4gdm9pZCBmYXRfZnNfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkgX19jb2xkOwotZXh0ZXJuIHZvaWQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIGludCBmYXRfY2x1c3RlcnNfZmx1c2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpOwogZXh0ZXJuIHZvaWQgZmF0X3RpbWVfZmF0MnVuaXgoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSwgc3RydWN0IHRpbWVzcGVjICp0cywKIAkJCSAgICAgIF9fbGUxNiBfX3RpbWUsIF9fbGUxNiBfX2RhdGUsIHU4IHRpbWVfY3MpOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCAwNDYyOWQxLi43NmI3OTYxIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtNDUxLDEyICs0NTEsMTYgQEAKIAogc3RhdGljIGludCBmYXRfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKIHsKLQlsb2NrX3N1cGVyKHNiKTsKLQlmYXRfY2x1c3RlcnNfZmx1c2goc2IpOwotCXNiLT5zX2RpcnQgPSAwOwotCXVubG9ja19zdXBlcihzYik7CisJaW50IGVyciA9IDA7CiAKLQlyZXR1cm4gMDsKKwlpZiAoc2ItPnNfZGlydCkgeworCQlsb2NrX3N1cGVyKHNiKTsKKwkJc2ItPnNfZGlydCA9IDA7CisJCWVyciA9IGZhdF9jbHVzdGVyc19mbHVzaChzYik7CisJCXVubG9ja19zdXBlcihzYik7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZmF0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtODEyLDcgKzgxNiw3IEBACiAJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT1taXhlZCIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVkZBVF9TRk5fRElTUExBWV9MT1dFUiB8IFZGQVRfU0ZOX0NSRUFURV9XSU45NToKLQkJCS8qIHNlcV9wdXRzKG0sICIsc2hvcnRuYW1lPWxvd2VyIik7ICovCisJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT1sb3dlciIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT11bmtub3duIik7CkBAIC05NjMsNyArOTY3LDcgQEAKIAlvcHRzLT5jb2RlcGFnZSA9IGZhdF9kZWZhdWx0X2NvZGVwYWdlOwogCW9wdHMtPmlvY2hhcnNldCA9IGZhdF9kZWZhdWx0X2lvY2hhcnNldDsKIAlpZiAoaXNfdmZhdCkgewotCQlvcHRzLT5zaG9ydG5hbWUgPSBWRkFUX1NGTl9ESVNQTEFZX0xPV0VSfFZGQVRfU0ZOX0NSRUFURV9XSU45NTsKKwkJb3B0cy0+c2hvcnRuYW1lID0gVkZBVF9TRk5fRElTUExBWV9XSU5OVHxWRkFUX1NGTl9DUkVBVEVfV0lOOTU7CiAJCW9wdHMtPnJvZGlyID0gMDsKIAl9IGVsc2UgewogCQlvcHRzLT5zaG9ydG5hbWUgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggNGUzNWJlOC4uMGY1NWY1YyAxMDA2NDQKLS0tIGEvZnMvZmF0L21pc2MuYworKysgYi9mcy9mYXQvbWlzYy5jCkBAIC00MywxOSArNDMsMTkgQEAKIAogLyogRmx1c2hlcyB0aGUgbnVtYmVyIG9mIGZyZWUgY2x1c3RlcnMgb24gRkFUMzIgKi8KIC8qIFhYWDogTmVlZCB0byB3cml0ZSBvbmUgcGVyIEZTSU5GTyBibG9jay4gIEN1cnJlbnRseSBvbmx5IHdyaXRlcyAxICovCi12b2lkIGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoraW50IGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgZmF0X2Jvb3RfZnNpbmZvICpmc2luZm87CiAKIAlpZiAoc2JpLT5mYXRfYml0cyAhPSAzMikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCWJoID0gc2JfYnJlYWQoc2IsIHNiaS0+ZnNpbmZvX3NlY3Rvcik7CiAJaWYgKGJoID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGQVQ6IGJyZWFkIGZhaWxlZCBpbiBmYXRfY2x1c3RlcnNfZmx1c2hcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRUlPOwogCX0KIAogCWZzaW5mbyA9IChzdHJ1Y3QgZmF0X2Jvb3RfZnNpbmZvICopYmgtPmJfZGF0YTsKQEAgLTc0LDYgKzc0LDggQEAKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCX0KIAlicmVsc2UoYmgpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBjYjZlODM1Li5mNTY1ZjI0IDEwMDY0NAotLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jCisrKyBiL2ZzL2ZhdC9uYW1laV92ZmF0LmMKQEAgLTQ5OSwxNyArNDk5LDEwIEBACiAJaW50IGNoYXJsZW47CiAKIAlpZiAodXRmOCkgewotCQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7Ci0KLQkJKm91dGxlbiA9IHV0ZjhzX3RvX3V0ZjE2cyhuYW1lLCBQQVRIX01BWCwgKHdjaGFyX3QgKikgb3V0bmFtZSk7Ci0KLQkJLyoKLQkJICogV2Ugc3RyaXBwZWQgJy4ncyBiZWZvcmUgYW5kIHNldCBsZW4gYXBwcm9wcmlhdGVseSwKLQkJICogYnV0IHV0ZjhzX3RvX3V0ZjE2cyBkb2Vzbid0IGNhcmUgYWJvdXQgbGVuCi0JCSAqLwotCQkqb3V0bGVuIC09IChuYW1lX2xlbiAtIGxlbik7Ci0KLQkJaWYgKCpvdXRsZW4gPiAyNTUpCisJCSpvdXRsZW4gPSB1dGY4c190b191dGYxNnMobmFtZSwgbGVuLCAod2NoYXJfdCAqKW91dG5hbWUpOworCQlpZiAoKm91dGxlbiA8IDApCisJCQlyZXR1cm4gKm91dGxlbjsKKwkJZWxzZSBpZiAoKm91dGxlbiA+IDI1NSkKIAkJCXJldHVybiAtRU5BTUVUT09MT05HOwogCiAJCW9wID0gJm91dG5hbWVbKm91dGxlbiAqIHNpemVvZih3Y2hhcl90KV07CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBmYzA4OWYyLi4yY2Y5M2VjIDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCQl0eXBlID0gUElEVFlQRV9QSUQ7CiAJCWJyZWFrOwogCi0JY2FzZSBGX09XTkVSX0dJRDoKKwljYXNlIEZfT1dORVJfUEdSUDoKIAkJdHlwZSA9IFBJRFRZUEVfUEdJRDsKIAkJYnJlYWs7CiAKQEAgLTMyMSw3ICszMjEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUElEVFlQRV9QR0lEOgotCQlvd25lci50eXBlID0gRl9PV05FUl9HSUQ7CisJCW93bmVyLnR5cGUgPSBGX09XTkVSX1BHUlA7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCBmMzEzMzE0Li44N2UxMjkwIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCA4ZTFlNWUxLi45ZDUzNjBjIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtNDEsOCArNDEsOSBAQAogCWxvbmcgbnJfcGFnZXM7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAllbnVtIHdyaXRlYmFja19zeW5jX21vZGVzIHN5bmNfbW9kZTsKLQlpbnQgZm9yX2t1cGRhdGU7Ci0JaW50IHJhbmdlX2N5Y2xpYzsKKwlpbnQgZm9yX2t1cGRhdGU6MTsKKwlpbnQgcmFuZ2VfY3ljbGljOjE7CisJaW50IGZvcl9iYWNrZ3JvdW5kOjE7CiB9OwogCiAvKgpAQCAtMjQ5LDE0ICsyNTAsMjUgQEAKICAqICAgY29tcGxldGlvbi4gQ2FsbGVyIG5lZWQgbm90IGhvbGQgc2Igc191bW91bnQgc2VtYXBob3JlLgogICoKICAqLwotdm9pZCBiZGlfc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIGxvbmcgbnJfcGFnZXMpCit2b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0geworCQkuc2IJCT0gc2IsCiAJCS5zeW5jX21vZGUJPSBXQl9TWU5DX05PTkUsCiAJCS5ucl9wYWdlcwk9IG5yX3BhZ2VzLAogCQkucmFuZ2VfY3ljbGljCT0gMSwKIAl9OwogCisJLyoKKwkgKiBXZSB0cmVhdCBAbnJfcGFnZXM9MCBhcyB0aGUgc3BlY2lhbCBjYXNlIHRvIGRvIGJhY2tncm91bmQgd3JpdGViYWNrLAorCSAqIGllLiB0byBzeW5jIHBhZ2VzIHVudGlsIHRoZSBiYWNrZ3JvdW5kIGRpcnR5IHRocmVzaG9sZCBpcyByZWFjaGVkLgorCSAqLworCWlmICghbnJfcGFnZXMpIHsKKwkJYXJncy5ucl9wYWdlcyA9IExPTkdfTUFYOworCQlhcmdzLmZvcl9iYWNrZ3JvdW5kID0gMTsKKwl9CisKIAliZGlfYWxsb2NfcXVldWVfd29yayhiZGksICZhcmdzKTsKIH0KIApAQCAtMzEwLDcgKzMyMiw3IEBACiAJICogRm9yIGlub2RlcyBiZWluZyBjb25zdGFudGx5IHJlZGlydGllZCwgZGlydGllZF93aGVuIGNhbiBnZXQgc3R1Y2suCiAJICogSXQgX2FwcGVhcnNfIHRvIGJlIGluIHRoZSBmdXR1cmUsIGJ1dCBpcyBhY3R1YWxseSBpbiBkaXN0YW50IHBhc3QuCiAJICogVGhpcyB0ZXN0IGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHN1Y2ggd3JhcHBlZC1hcm91bmQgcmVsYXRpdmUgdGltZXMKLQkgKiBmcm9tIHBlcm1hbmVudGx5IHN0b3BwaW5nIHRoZSB3aG9sZSBwZGZsdXNoIHdyaXRlYmFjay4KKwkgKiBmcm9tIHBlcm1hbmVudGx5IHN0b3BwaW5nIHRoZSB3aG9sZSBiZGkgd3JpdGViYWNrLgogCSAqLwogCXJldCA9IHJldCAmJiB0aW1lX2JlZm9yZV9lcShpbm9kZS0+ZGlydGllZF93aGVuLCBqaWZmaWVzKTsKICNlbmRpZgpAQCAtMzI0LDEzICszMzYsMzggQEAKIAkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwYXRjaF9xdWV1ZSwKIAkJCQl1bnNpZ25lZCBsb25nICpvbGRlcl90aGFuX3RoaXMpCiB7CisJTElTVF9IRUFEKHRtcCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbm9kZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBkb19zYl9zb3J0ID0gMDsKKwogCXdoaWxlICghbGlzdF9lbXB0eShkZWxheWluZ19xdWV1ZSkpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGxpc3RfZW50cnkoZGVsYXlpbmdfcXVldWUtPnByZXYsCi0JCQkJCQlzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CisJCWlub2RlID0gbGlzdF9lbnRyeShkZWxheWluZ19xdWV1ZS0+cHJldiwgc3RydWN0IGlub2RlLCBpX2xpc3QpOwogCQlpZiAob2xkZXJfdGhhbl90aGlzICYmCiAJCSAgICBpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCAqb2xkZXJfdGhhbl90aGlzKSkKIAkJCWJyZWFrOwotCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsIGRpc3BhdGNoX3F1ZXVlKTsKKwkJaWYgKHNiICYmIHNiICE9IGlub2RlLT5pX3NiKQorCQkJZG9fc2Jfc29ydCA9IDE7CisJCXNiID0gaW5vZGUtPmlfc2I7CisJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJnRtcCk7CisJfQorCisJLyoganVzdCBvbmUgc2IgaW4gbGlzdCwgc3BsaWNlIHRvIGRpc3BhdGNoX3F1ZXVlIGFuZCB3ZSdyZSBkb25lICovCisJaWYgKCFkb19zYl9zb3J0KSB7CisJCWxpc3Rfc3BsaWNlKCZ0bXAsIGRpc3BhdGNoX3F1ZXVlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1vdmUgaW5vZGVzIGZyb20gb25lIHN1cGVyYmxvY2sgdG9nZXRoZXIgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnRtcCkpIHsKKwkJaW5vZGUgPSBsaXN0X2VudHJ5KHRtcC5wcmV2LCBzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CisJCXNiID0gaW5vZGUtPmlfc2I7CisJCWxpc3RfZm9yX2VhY2hfcHJldl9zYWZlKHBvcywgbm9kZSwgJnRtcCkgeworCQkJaW5vZGUgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQkJaWYgKGlub2RlLT5pX3NiID09IHNiKQorCQkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgZGlzcGF0Y2hfcXVldWUpOworCQl9CiAJfQogfQogCkBAIC00MzksOCArNDc2LDE4IEBACiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlpbm9kZS0+aV9zdGF0ZSAmPSB+SV9TWU5DOwogCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlORyB8IElfQ0xFQVIpKSkgewotCQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpICYmCi0JCSAgICBtYXBwaW5nX3RhZ2dlZChtYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX0RJUlRZKSkgeworCQlpZiAoKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykgJiYgd2JjLT5mb3Jfa3VwZGF0ZSkgeworCQkJLyoKKwkJCSAqIE1vcmUgcGFnZXMgZ2V0IGRpcnRpZWQgYnkgYSBmYXN0IGRpcnRpZXIuCisJCQkgKi8KKwkJCWdvdG8gc2VsZWN0X3F1ZXVlOworCQl9IGVsc2UgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgeworCQkJLyoKKwkJCSAqIEF0IGxlYXN0IFhGUyB3aWxsIHJlZGlydHkgdGhlIGlub2RlIGR1cmluZyB0aGUKKwkJCSAqIHdyaXRlYmFjayAoZGVsYWxsb2MpIGFuZCBvbiBpbyBjb21wbGV0aW9uIChpc2l6ZSkuCisJCQkgKi8KKwkJCXJlZGlydHlfdGFpbChpbm9kZSk7CisJCX0gZWxzZSBpZiAobWFwcGluZ190YWdnZWQobWFwcGluZywgUEFHRUNBQ0hFX1RBR19ESVJUWSkpIHsKIAkJCS8qCiAJCQkgKiBXZSBkaWRuJ3Qgd3JpdGUgYmFjayBhbGwgdGhlIHBhZ2VzLiAgbmZzX3dyaXRlcGFnZXMoKQogCQkJICogc29tZXRpbWVzIGJhbGVzIG91dCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLiBSZWRpcnR5CkBAIC00NjIsNiArNTA5LDcgQEAKIAkJCQkgKiBzb29uIGFzIHRoZSBxdWV1ZSBiZWNvbWVzIHVuY29uZ2VzdGVkLgogCQkJCSAqLwogCQkJCWlub2RlLT5pX3N0YXRlIHw9IElfRElSVFlfUEFHRVM7CitzZWxlY3RfcXVldWU6CiAJCQkJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPD0gMCkgewogCQkJCQkvKgogCQkJCQkgKiBzbGljZSB1c2VkIHVwOiBxdWV1ZSBmb3IgbmV4dCB0dXJuCkBAIC00ODQsMTIgKzUzMiw2IEBACiAJCQkJaW5vZGUtPmlfc3RhdGUgfD0gSV9ESVJUWV9QQUdFUzsKIAkJCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwogCQkJfQotCQl9IGVsc2UgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgewotCQkJLyoKLQkJCSAqIFNvbWVvbmUgcmVkaXJ0aWVkIHRoZSBpbm9kZSB3aGlsZSB3ZXJlIHdyaXRpbmcgYmFjawotCQkJICogdGhlIHBhZ2VzLgotCQkJICovCi0JCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwogCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpIHsKIAkJCS8qCiAJCQkgKiBUaGUgaW5vZGUgaXMgY2xlYW4sIGludXNlCkBAIC01MDYsNiArNTQ4LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgdW5waW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKipwc2IpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9ICpwc2I7CisKKwlpZiAoc2IpIHsKKwkJdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKKwkJcHV0X3N1cGVyKHNiKTsKKwkJKnBzYiA9IE5VTEw7CisJfQorfQorCiAvKgogICogRm9yIFdCX1NZTkNfTk9ORSB3cml0ZWJhY2ssIHRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSB0aGUgc2IgcGlubmVkCiAgKiBiZWZvcmUgY2FsbGluZyB3cml0ZWJhY2suIFNvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIHBpbiBpdCwgc28gaXQgZG9lc24ndApAQCAtNTE1LDExICs1NjgsMjAgQEAKICAqIDEgaWYgd2UgZmFpbGVkLgogICovCiBzdGF0aWMgaW50IHBpbl9zYl9mb3Jfd3JpdGViYWNrKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAotCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICoqcHNiKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAogCS8qCisJICogSWYgdGhpcyBzYiBpcyBhbHJlYWR5IHBpbm5lZCwgbm90aGluZyBtb3JlIHRvIGRvLiBJZiBub3QgYW5kCisJICogKnBzYiBpcyBub24tTlVMTCwgdW5waW4gdGhlIG9sZCBvbmUgZmlyc3QKKwkgKi8KKwlpZiAoc2IgPT0gKnBzYikKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoKnBzYikKKwkJdW5waW5fc2JfZm9yX3dyaXRlYmFjayhwc2IpOworCisJLyoKIAkgKiBDYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgdGhlIHJlZiBmb3IgdGhpcwogCSAqLwogCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkgewpAQCAtNTMyLDcgKzU5NCw3IEBACiAJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZzYi0+c191bW91bnQpKSB7CiAJCWlmIChzYi0+c19yb290KSB7CiAJCQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gcGlubmVkOwogCQl9CiAJCS8qCiAJCSAqIHVtb3VudGVkLCBkcm9wIHJ3c2VtIGFnYWluIGFuZCBmYWxsIHRocm91Z2ggdG8gZmFpbHVyZQpAQCAtNTQzLDI0ICs2MDUsMTUgQEAKIAlzYi0+c19jb3VudC0tOwogCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKIAlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgdW5waW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKLQkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKLQotCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkKLQkJcmV0dXJuOwotCi0JdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKLQlwdXRfc3VwZXIoc2IpOworcGlubmVkOgorCSpwc2IgPSBzYjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGViYWNrX2lub2Rlc193YihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsCiAJCQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHdiYy0+c2I7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHdiYy0+c2IsICpwaW5fc2IgPSBOVUxMOwogCWNvbnN0IGludCBpc19ibGtkZXZfc2IgPSBzYl9pc19ibGtkZXZfc2Ioc2IpOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwkvKiBsaXZlbG9jayBhdm9pZGFuY2UgKi8KIApAQCAtNjE5LDcgKzY3Miw3IEBACiAJCWlmIChpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCBzdGFydCkpCiAJCQlicmVhazsKIAotCQlpZiAocGluX3NiX2Zvcl93cml0ZWJhY2sod2JjLCBpbm9kZSkpIHsKKwkJaWYgKHBpbl9zYl9mb3Jfd3JpdGViYWNrKHdiYywgaW5vZGUsICZwaW5fc2IpKSB7CiAJCQlyZXF1ZXVlX2lvKGlub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MjgsNyArNjgxLDYgQEAKIAkJX19pZ2V0KGlub2RlKTsKIAkJcGFnZXNfc2tpcHBlZCA9IHdiYy0+cGFnZXNfc2tpcHBlZDsKIAkJd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjKTsKLQkJdW5waW5fc2JfZm9yX3dyaXRlYmFjayh3YmMsIGlub2RlKTsKIAkJaWYgKHdiYy0+cGFnZXNfc2tpcHBlZCAhPSBwYWdlc19za2lwcGVkKSB7CiAJCQkvKgogCQkJICogd3JpdGViYWNrIGlzIG5vdCBtYWtpbmcgcHJvZ3Jlc3MgZHVlIHRvIGxvY2tlZApAQCAtNjQ4LDYgKzcwMCw4IEBACiAJCQl3YmMtPm1vcmVfaW8gPSAxOwogCX0KIAorCXVucGluX3NiX2Zvcl93cml0ZWJhY2soJnBpbl9zYik7CisKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJLyogTGVhdmUgYW55IHVud3JpdHRlbiBpbm9kZXMgb24gYl9pbyAqLwogfQpAQCAtNzA2LDYgKzc2MCw3IEBACiAJfTsKIAl1bnNpZ25lZCBsb25nIG9sZGVzdF9qaWY7CiAJbG9uZyB3cm90ZSA9IDA7CisJc3RydWN0IGlub2RlICppbm9kZTsKIAogCWlmICh3YmMuZm9yX2t1cGRhdGUpIHsKIAkJd2JjLm9sZGVyX3RoYW5fdGhpcyA9ICZvbGRlc3RfamlmOwpAQCAtNzE5LDIwICs3NzQsMTYgQEAKIAogCWZvciAoOzspIHsKIAkJLyoKLQkJICogRG9uJ3QgZmx1c2ggYW55dGhpbmcgZm9yIG5vbi1pbnRlZ3JpdHkgd3JpdGViYWNrIHdoZXJlCi0JCSAqIG5vIG5yX3BhZ2VzIHdhcyBnaXZlbgorCQkgKiBTdG9wIHdyaXRlYmFjayB3aGVuIG5yX3BhZ2VzIGhhcyBiZWVuIGNvbnN1bWVkCiAJCSAqLwotCQlpZiAoIWFyZ3MtPmZvcl9rdXBkYXRlICYmIGFyZ3MtPm5yX3BhZ2VzIDw9IDAgJiYKLQkJICAgICBhcmdzLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKQorCQlpZiAoYXJncy0+bnJfcGFnZXMgPD0gMCkKIAkJCWJyZWFrOwogCiAJCS8qCi0JCSAqIElmIG5vIHNwZWNpZmljIHBhZ2VzIHdlcmUgZ2l2ZW4gYW5kIHRoaXMgaXMganVzdCBhCi0JCSAqIHBlcmlvZGljIGJhY2tncm91bmQgd3JpdGVvdXQgYW5kIHdlIGFyZSBiZWxvdyB0aGUKLQkJICogYmFja2dyb3VuZCBkaXJ0eSB0aHJlc2hvbGQsIGRvbid0IGRvIGFueXRoaW5nCisJCSAqIEZvciBiYWNrZ3JvdW5kIHdyaXRlb3V0LCBzdG9wIHdoZW4gd2UgYXJlIGJlbG93IHRoZQorCQkgKiBiYWNrZ3JvdW5kIGRpcnR5IHRocmVzaG9sZAogCQkgKi8KLQkJaWYgKGFyZ3MtPmZvcl9rdXBkYXRlICYmIGFyZ3MtPm5yX3BhZ2VzIDw9IDAgJiYKLQkJICAgICFvdmVyX2Jncm91bmRfdGhyZXNoKCkpCisJCWlmIChhcmdzLT5mb3JfYmFja2dyb3VuZCAmJiAhb3Zlcl9iZ3JvdW5kX3RocmVzaCgpKQogCQkJYnJlYWs7CiAKIAkJd2JjLm1vcmVfaW8gPSAwOwpAQCAtNzQ0LDEzICs3OTUsMzIgQEAKIAkJd3JvdGUgKz0gTUFYX1dSSVRFQkFDS19QQUdFUyAtIHdiYy5ucl90b193cml0ZTsKIAogCQkvKgotCQkgKiBJZiB3ZSByYW4gb3V0IG9mIHN0dWZmIHRvIHdyaXRlLCBiYWlsIHVubGVzcyBtb3JlX2lvIGdvdCBzZXQKKwkJICogSWYgd2UgY29uc3VtZWQgZXZlcnl0aGluZywgc2VlIGlmIHdlIGhhdmUgbW9yZQogCQkgKi8KLQkJaWYgKHdiYy5ucl90b193cml0ZSA+IDAgfHwgd2JjLnBhZ2VzX3NraXBwZWQgPiAwKSB7Ci0JCQlpZiAod2JjLm1vcmVfaW8gJiYgIXdiYy5mb3Jfa3VwZGF0ZSkKLQkJCQljb250aW51ZTsKKwkJaWYgKHdiYy5ucl90b193cml0ZSA8PSAwKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIERpZG4ndCB3cml0ZSBldmVyeXRoaW5nIGFuZCB3ZSBkb24ndCBoYXZlIG1vcmUgSU8sIGJhaWwKKwkJICovCisJCWlmICghd2JjLm1vcmVfaW8pCiAJCQlicmVhazsKKwkJLyoKKwkJICogRGlkIHdlIHdyaXRlIHNvbWV0aGluZz8gVHJ5IGZvciBtb3JlCisJCSAqLworCQlpZiAod2JjLm5yX3RvX3dyaXRlIDwgTUFYX1dSSVRFQkFDS19QQUdFUykKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBOb3RoaW5nIHdyaXR0ZW4uIFdhaXQgZm9yIHNvbWUgaW5vZGUgdG8KKwkJICogYmVjb21lIGF2YWlsYWJsZSBmb3Igd3JpdGViYWNrLiBPdGhlcndpc2UKKwkJICogd2UnbGwganVzdCBidXN5bG9vcC4KKwkJICovCisJCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmd2ItPmJfbW9yZV9pbykpICB7CisJCQlpbm9kZSA9IGxpc3RfZW50cnkod2ItPmJfbW9yZV9pby5wcmV2LAorCQkJCQkJc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQkJaW5vZGVfd2FpdF9mb3Jfd3JpdGViYWNrKGlub2RlKTsKIAkJfQorCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJfQogCiAJcmV0dXJuIHdyb3RlOwpAQCAtMTA2MCw5ICsxMTMwLDYgQEAKICAqIElmIG9sZGVyX3RoYW5fdGhpcyBpcyBub24tTlVMTCwgdGhlbiBvbmx5IHdyaXRlIG91dCBpbm9kZXMgd2hpY2gKICAqIGhhZCB0aGVpciBmaXJzdCBkaXJ0eWluZyBhdCBhIHRpbWUgZWFybGllciB0aGFuICpvbGRlcl90aGFuX3RoaXMuCiAgKgotICogSWYgd2UncmUgYSBwZGxmdXNoIHRocmVhZCwgdGhlbiBpbXBsZW1lbnQgcGRmbHVzaCBjb2xsaXNpb24gYXZvaWRhbmNlCi0gKiBhZ2FpbnN0IHRoZSBlbnRpcmUgbGlzdC4KLSAqCiAgKiBJZiBgYmRpJyBpcyBub24temVybyB0aGVuIHdlJ3JlIGJlaW5nIGFza2VkIHRvIHdyaXRlYmFjayBhIHNwZWNpZmljIHF1ZXVlLgogICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGJsb2NrZGV2IHN1cGVyYmxvY2sncyBpbm9kZXMgYXJlIGJhY2tlZCBieQogICogYSB2YXJpZXR5IG9mIHF1ZXVlcywgc28gYWxsIGlub2RlcyBhcmUgc2VhcmNoZWQuICBGb3Igb3RoZXIgc3VwZXJibG9ja3MsCkBAIC0xMTQxLDcgKzEyMDgsNyBAQAogCW5yX3RvX3dyaXRlID0gbnJfZGlydHkgKyBucl91bnN0YWJsZSArCiAJCQkoaW5vZGVzX3N0YXQubnJfaW5vZGVzIC0gaW5vZGVzX3N0YXQubnJfdW51c2VkKTsKIAotCWJkaV93cml0ZWJhY2tfYWxsKHNiLCBucl90b193cml0ZSk7CisJYmRpX3N0YXJ0X3dyaXRlYmFjayhzYi0+c19iZGksIHNiLCBucl90b193cml0ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHdyaXRlYmFja19pbm9kZXNfc2IpOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCA5OTJmNmM5Li44YWRhNzhhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTcxMiw4ICs3MTIsMTAgQEAKIAkJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKG5ld2Rpcik7CiAKIAkJLyogbmV3ZW50IHdpbGwgZW5kIHVwIG5lZ2F0aXZlICovCi0JCWlmIChuZXdlbnQtPmRfaW5vZGUpCisJCWlmIChuZXdlbnQtPmRfaW5vZGUpIHsKKwkJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKG5ld2VudC0+ZF9pbm9kZSk7CiAJCQlmdXNlX2ludmFsaWRhdGVfZW50cnlfY2FjaGUobmV3ZW50KTsKKwkJfQogCX0gZWxzZSBpZiAoZXJyID09IC1FSU5UUikgewogCQkvKiBJZiByZXF1ZXN0IHdhcyBpbnRlcnJ1cHRlZCwgREVJVFkgb25seSBrbm93cyBpZiB0aGUKIAkJICAgcmVuYW1lIGFjdHVhbGx5IHRvb2sgcGxhY2UuICBJZiB0aGUgaW52YWxpZGF0aW9uCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IGNiYzQ2NDAuLmMxODkxM2EgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xMDYzLDcgKzEwNjMsOCBAQAogCQkJCWJyZWFrOwogCQl9CiAJfQotCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJaWYgKCFJU19FUlIocmVxKSkKKwkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAocmVzID4gMCkKIAkJKnBwb3MgPSBwb3M7CiAKQEAgLTEzMTMsNyArMTMxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZnVzZV9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZnVzZV9maWxlX3ZtX29wcyA9IHsKIAkuY2xvc2UJCT0gZnVzZV92bWFfY2xvc2UsCiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IGZ1c2VfcGFnZV9ta3dyaXRlLApAQCAtMTU5OSw3ICsxNjAwLDcgQEAKIAkJCWthZGRyICs9IGNvcHk7CiAJCX0KIAotCQlrdW5tYXAobWFwKTsKKwkJa3VubWFwKHBhZ2UpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCAxNjZmMzhmLi40ZWIzMDhhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtNDE4LDcgKzQxOCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZnMyX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2ZzMl92bV9vcHMgPSB7CiAJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlID0gZ2ZzMl9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaGZzL2J0cmVlLmMgYi9mcy9oZnMvYnRyZWUuYwppbmRleCA5YjlkNjM5Li4wNTJmMjE0IDEwMDY0NAotLS0gYS9mcy9oZnMvYnRyZWUuYworKysgYi9mcy9oZnMvYnRyZWUuYwpAQCAtNTgsNiArNTgsMTEgQEAKIAl9CiAJdW5sb2NrX25ld19pbm9kZSh0cmVlLT5pbm9kZSk7CiAKKwlpZiAoIUhGU19JKHRyZWUtPmlub2RlKS0+Zmlyc3RfYmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBpbnZhbGlkIGJ0cmVlIGV4dGVudCByZWNvcmRzICgwIHNpemUpLlxuIik7CisJCWdvdG8gZnJlZV9pbm9kZTsKKwl9CisKIAltYXBwaW5nID0gdHJlZS0+aW5vZGUtPmlfbWFwcGluZzsKIAlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgMCwgTlVMTCk7CiAJaWYgKElTX0VSUihwYWdlKSkKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKaW5kZXggMTc1ZDA4ZS4uYmVkNzhhYzggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jCisrKyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCkBAIC05OSw2ICs5OSwxMCBAQAogCiAJaWYgKGhmc3BsdXNfZ2V0X2xhc3Rfc2Vzc2lvbihzYiwgJnBhcnRfc3RhcnQsICZwYXJ0X3NpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKHU2NClwYXJ0X3N0YXJ0ICsgcGFydF9zaXplID4gMHgxMDAwMDAwMDBVTEwpIHsKKwkJcHJfZXJyKCJoZnM6IHZvbHVtZXMgbGFyZ2VyIHRoYW4gMlRCIGFyZSBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAl3aGlsZSAoMSkgewogCQliaCA9IHNiX2JyZWFkNTEyKHNiLCBwYXJ0X3N0YXJ0ICsgSEZTUExVU19WT0xIRUFEX1NFQ1RPUiwgdmhkcik7CiAJCWlmICghYmgpCmRpZmYgLS1naXQgYS9mcy9pb2N0bC5jIGIvZnMvaW9jdGwuYwppbmRleCA3YjE3YTE0Li42Yzc1MTEwIDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJICAgdTY0IGxlbiwgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgdG1wOwotCXVuc2lnbmVkIGludCBzdGFydF9ibGs7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0X2JsazsKIAlsb25nIGxvbmcgbGVuZ3RoID0gMCwgbWFwX2xlbiA9IDA7CiAJdTY0IGxvZ2ljYWwgPSAwLCBwaHlzID0gMCwgc2l6ZSA9IDA7CiAJdTMyIGZsYWdzID0gRklFTUFQX0VYVEVOVF9NRVJHRUQ7CmRpZmYgLS1naXQgYS9mcy9qYmQvam91cm5hbC5jIGIvZnMvamJkL2pvdXJuYWwuYwppbmRleCBiZDNjMDczLi40MTYwYWZhIDEwMDY0NAotLS0gYS9mcy9qYmQvam91cm5hbC5jCisrKyBiL2ZzL2piZC9qb3VybmFsLmMKQEAgLTczLDYgKzczLDcgQEAKIEVYUE9SVF9TWU1CT0woam91cm5hbF9hY2tfZXJyKTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF9jbGVhcl9lcnIpOwogRVhQT1JUX1NZTUJPTChsb2dfd2FpdF9jb21taXQpOworRVhQT1JUX1NZTUJPTChsb2dfc3RhcnRfY29tbWl0KTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF9zdGFydF9jb21taXQpOwogRVhQT1JUX1NZTUJPTChqb3VybmFsX2ZvcmNlX2NvbW1pdF9uZXN0ZWQpOwogRVhQT1JUX1NZTUJPTChqb3VybmFsX3dpcGUpOwpAQCAtNzU2LDYgKzc1Nyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTgyMCw2ICs4MjIsNyBAQAogCiAJcmV0dXJuIGpvdXJuYWw7CiBvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwtPmpfd2J1Zik7CiAJa2ZyZWUoam91cm5hbCk7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IDVkNzBiM2UuLmNhMGY1ZWIgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC02NDMsNiArNjQzLDcgQEAKIAogaW50IF9famJkMl9qb3VybmFsX3JlbW92ZV9jaGVja3BvaW50KHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKQogeworCXN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyAqc3RhdHM7CiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247CiAJam91cm5hbF90ICpqb3VybmFsOwogCWludCByZXQgPSAwOwpAQCAtNjc5LDYgKzY4MCwxMiBAQAogCiAJLyogT0ssIHRoYXQgd2FzIHRoZSBsYXN0IGJ1ZmZlciBmb3IgdGhlIHRyYW5zYWN0aW9uOiB3ZSBjYW4gbm93CiAJICAgc2FmZWx5IHJlbW92ZSB0aGlzIHRyYW5zYWN0aW9uIGZyb20gdGhlIGxvZyAqLworCXN0YXRzID0gJnRyYW5zYWN0aW9uLT50X2NocF9zdGF0czsKKwlpZiAoc3RhdHMtPmNzX2NocF90aW1lKQorCQlzdGF0cy0+Y3NfY2hwX3RpbWUgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy0+Y3NfY2hwX3RpbWUsCisJCQkJCQkgICAgamlmZmllcyk7CisJdHJhY2VfamJkMl9jaGVja3BvaW50X3N0YXRzKGpvdXJuYWwtPmpfZnNfZGV2LT5iZF9kZXYsCisJCQkJICAgIHRyYW5zYWN0aW9uLT50X3RpZCwgc3RhdHMpOwogCiAJX19qYmQyX2pvdXJuYWxfZHJvcF90cmFuc2FjdGlvbihqb3VybmFsLCB0cmFuc2FjdGlvbik7CiAJa2ZyZWUodHJhbnNhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggMjZkOTkxZC4uZDRjZmQ2ZCAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYworKysgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC00MTAsMTAgKzQxMCwxMCBAQAogCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfc3luY2hyb25vdXNfY29tbWl0KQogCQl3cml0ZV9vcCA9IFdSSVRFX1NZTkNfUExVRzsKIAl0cmFjZV9qYmQyX2NvbW1pdF9sb2NraW5nKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbik7Ci0Jc3RhdHMudS5ydW4ucnNfd2FpdCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9tYXhfd2FpdDsKLQlzdGF0cy51LnJ1bi5yc19sb2NrZWQgPSBqaWZmaWVzOwotCXN0YXRzLnUucnVuLnJzX3J1bm5pbmcgPSBqYmQyX3RpbWVfZGlmZihjb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQsCi0JCQkJCQlzdGF0cy51LnJ1bi5yc19sb2NrZWQpOworCXN0YXRzLnJ1bi5yc193YWl0ID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X21heF93YWl0OworCXN0YXRzLnJ1bi5yc19sb2NrZWQgPSBqaWZmaWVzOworCXN0YXRzLnJ1bi5yc19ydW5uaW5nID0gamJkMl90aW1lX2RpZmYoY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXJ0LAorCQkJCQkgICAgICBzdGF0cy5ydW4ucnNfbG9ja2VkKTsKIAogCXNwaW5fbG9jaygmY29tbWl0X3RyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKIAl3aGlsZSAoY29tbWl0X3RyYW5zYWN0aW9uLT50X3VwZGF0ZXMpIHsKQEAgLTQ4Niw5ICs0ODYsOSBAQAogCWpiZDJfam91cm5hbF9zd2l0Y2hfcmV2b2tlX3RhYmxlKGpvdXJuYWwpOwogCiAJdHJhY2VfamJkMl9jb21taXRfZmx1c2hpbmcoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKLQlzdGF0cy51LnJ1bi5yc19mbHVzaGluZyA9IGppZmZpZXM7Ci0Jc3RhdHMudS5ydW4ucnNfbG9ja2VkID0gamJkMl90aW1lX2RpZmYoc3RhdHMudS5ydW4ucnNfbG9ja2VkLAotCQkJCQkgICAgICAgc3RhdHMudS5ydW4ucnNfZmx1c2hpbmcpOworCXN0YXRzLnJ1bi5yc19mbHVzaGluZyA9IGppZmZpZXM7CisJc3RhdHMucnVuLnJzX2xvY2tlZCA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnJ1bi5yc19sb2NrZWQsCisJCQkJCSAgICAgc3RhdHMucnVuLnJzX2ZsdXNoaW5nKTsKIAogCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGF0ZSA9IFRfRkxVU0g7CiAJam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uID0gY29tbWl0X3RyYW5zYWN0aW9uOwpAQCAtNTIzLDExICs1MjMsMTEgQEAKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAogCXRyYWNlX2piZDJfY29tbWl0X2xvZ2dpbmcoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKLQlzdGF0cy51LnJ1bi5yc19sb2dnaW5nID0gamlmZmllczsKLQlzdGF0cy51LnJ1bi5yc19mbHVzaGluZyA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnUucnVuLnJzX2ZsdXNoaW5nLAotCQkJCQkJIHN0YXRzLnUucnVuLnJzX2xvZ2dpbmcpOwotCXN0YXRzLnUucnVuLnJzX2Jsb2NrcyA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzOwotCXN0YXRzLnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQgPSAwOworCXN0YXRzLnJ1bi5yc19sb2dnaW5nID0gamlmZmllczsKKwlzdGF0cy5ydW4ucnNfZmx1c2hpbmcgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy5ydW4ucnNfZmx1c2hpbmcsCisJCQkJCSAgICAgICBzdGF0cy5ydW4ucnNfbG9nZ2luZyk7CisJc3RhdHMucnVuLnJzX2Jsb2NrcyA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzOworCXN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkID0gMDsKIAogCUpfQVNTRVJUKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9ucl9idWZmZXJzIDw9CiAJCSBjb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyk7CkBAIC02OTUsNyArNjk1LDcgQEAKIAkJCQlzdWJtaXRfYmgod3JpdGVfb3AsIGJoKTsKIAkJCX0KIAkJCWNvbmRfcmVzY2hlZCgpOwotCQkJc3RhdHMudS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCArPSBidWZzOworCQkJc3RhdHMucnVuLnJzX2Jsb2Nrc19sb2dnZWQgKz0gYnVmczsKIAogCQkJLyogRm9yY2UgYSBuZXcgZGVzY3JpcHRvciB0byBiZSBnZW5lcmF0ZWQgbmV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSByb3VuZCB0aGUgbG9vcC4gKi8KQEAgLTk4OCwzMyArOTg4LDMwIEBACiAJSl9BU1NFUlQoY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXRlID09IFRfQ09NTUlUKTsKIAogCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCA9IGppZmZpZXM7Ci0Jc3RhdHMudS5ydW4ucnNfbG9nZ2luZyA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnUucnVuLnJzX2xvZ2dpbmcsCi0JCQkJCQljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQpOworCXN0YXRzLnJ1bi5yc19sb2dnaW5nID0gamJkMl90aW1lX2RpZmYoc3RhdHMucnVuLnJzX2xvZ2dpbmcsCisJCQkJCSAgICAgIGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCk7CiAKIAkvKgotCSAqIEZpbGUgdGhlIHRyYW5zYWN0aW9uIGZvciBoaXN0b3J5CisJICogRmlsZSB0aGUgdHJhbnNhY3Rpb24gc3RhdGlzdGljcwogCSAqLwotCXN0YXRzLnRzX3R5cGUgPSBKQkQyX1NUQVRTX1JVTjsKIAlzdGF0cy50c190aWQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfdGlkOwotCXN0YXRzLnUucnVuLnJzX2hhbmRsZV9jb3VudCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfY291bnQ7Ci0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KGpvdXJuYWwtPmpfaGlzdG9yeSArIGpvdXJuYWwtPmpfaGlzdG9yeV9jdXIsICZzdGF0cywKLQkJCXNpemVvZihzdGF0cykpOwotCWlmICgrK2pvdXJuYWwtPmpfaGlzdG9yeV9jdXIgPT0gam91cm5hbC0+al9oaXN0b3J5X21heCkKLQkJam91cm5hbC0+al9oaXN0b3J5X2N1ciA9IDA7CisJc3RhdHMucnVuLnJzX2hhbmRsZV9jb3VudCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfY291bnQ7CisJdHJhY2VfamJkMl9ydW5fc3RhdHMoam91cm5hbC0+al9mc19kZXYtPmJkX2RldiwKKwkJCSAgICAgY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZCwgJnN0YXRzLnJ1bik7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSBvdmVyYWxsIHN0YXRzCiAJICovCisJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAJam91cm5hbC0+al9zdGF0cy50c190aWQrKzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX3dhaXQgKz0gc3RhdHMudS5ydW4ucnNfd2FpdDsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX3J1bm5pbmcgKz0gc3RhdHMudS5ydW4ucnNfcnVubmluZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2xvY2tlZCArPSBzdGF0cy51LnJ1bi5yc19sb2NrZWQ7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19mbHVzaGluZyArPSBzdGF0cy51LnJ1bi5yc19mbHVzaGluZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2xvZ2dpbmcgKz0gc3RhdHMudS5ydW4ucnNfbG9nZ2luZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2hhbmRsZV9jb3VudCArPSBzdGF0cy51LnJ1bi5yc19oYW5kbGVfY291bnQ7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19ibG9ja3MgKz0gc3RhdHMudS5ydW4ucnNfYmxvY2tzOwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCArPSBzdGF0cy51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkOworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX3dhaXQgKz0gc3RhdHMucnVuLnJzX3dhaXQ7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfcnVubmluZyArPSBzdGF0cy5ydW4ucnNfcnVubmluZzsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19sb2NrZWQgKz0gc3RhdHMucnVuLnJzX2xvY2tlZDsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19mbHVzaGluZyArPSBzdGF0cy5ydW4ucnNfZmx1c2hpbmc7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfbG9nZ2luZyArPSBzdGF0cy5ydW4ucnNfbG9nZ2luZzsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19oYW5kbGVfY291bnQgKz0gc3RhdHMucnVuLnJzX2hhbmRsZV9jb3VudDsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19ibG9ja3MgKz0gc3RhdHMucnVuLnJzX2Jsb2NrczsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkICs9IHN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkOwogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPSBUX0ZJTklTSEVEOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCA1M2I4NmUxLi5mZWQ4NTM4OCAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTEzNiwxMCArMTM2LDYgQEAKIAlqb3VybmFsLT5qX3Rhc2sgPSBjdXJyZW50OwogCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF9kb25lX2NvbW1pdCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJram91cm5hbGQyIHN0YXJ0aW5nOiBwaWQgJWQsIGRldiAlcywgIgotCSAgICAgICAiY29tbWl0IGludGVydmFsICVsZCBzZWNvbmRzXG4iLCBjdXJyZW50LT5waWQsCi0JICAgICAgIGpvdXJuYWwtPmpfZGV2bmFtZSwgam91cm5hbC0+al9jb21taXRfaW50ZXJ2YWwgLyBIWik7Ci0KIAkvKgogCSAqIEFuZCBub3csIHdhaXQgZm9yZXZlciBmb3IgY29tbWl0IHdha2V1cCBldmVudHMuCiAJICovCkBAIC0yMjMsNyArMjE5LDggQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQl0ID0ga3RocmVhZF9ydW4oa2pvdXJuYWxkMiwgam91cm5hbCwgImtqb3VybmFsZDIiKTsKKwl0ID0ga3RocmVhZF9ydW4oa2pvdXJuYWxkMiwgam91cm5hbCwgImpiZDIvJXMiLAorCQkJam91cm5hbC0+al9kZXZuYW1lKTsKIAlpZiAoSVNfRVJSKHQpKQogCQlyZXR1cm4gUFRSX0VSUih0KTsKIApAQCAtNjc5LDE1MyArNjc2LDYgQEAKIAlpbnQgbWF4OwogfTsKIAotc3RhdGljIHZvaWQgKmpiZDJfaGlzdG9yeV9za2lwX2VtcHR5KHN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqcywKLQkJCQkJc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKnRzLAotCQkJCQlpbnQgZmlyc3QpCi17Ci0JaWYgKHRzID09IHMtPnN0YXRzICsgcy0+bWF4KQotCQl0cyA9IHMtPnN0YXRzOwotCWlmICghZmlyc3QgJiYgdHMgPT0gcy0+c3RhdHMgKyBzLT5zdGFydCkKLQkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUgKHRzLT50c190eXBlID09IDApIHsKLQkJdHMrKzsKLQkJaWYgKHRzID09IHMtPnN0YXRzICsgcy0+bWF4KQotCQkJdHMgPSBzLT5zdGF0czsKLQkJaWYgKHRzID09IHMtPnN0YXRzICsgcy0+c3RhcnQpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIHRzOwotCi19Ci0KLXN0YXRpYyB2b2lkICpqYmQyX3NlcV9oaXN0b3J5X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgamJkMl9zdGF0c19wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKnRzOwotCWludCBsID0gKnBvczsKLQotCWlmIChsID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0JdHMgPSBqYmQyX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCBzLT5zdGF0cyArIHMtPnN0YXJ0LCAxKTsKLQlpZiAoIXRzKQotCQlyZXR1cm4gTlVMTDsKLQlsLS07Ci0Jd2hpbGUgKGwpIHsKLQkJdHMgPSBqYmQyX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK3RzLCAwKTsKLQkJaWYgKCF0cykKLQkJCWJyZWFrOwotCQlsLS07Ci0JfQotCXJldHVybiB0czsKLX0KLQotc3RhdGljIHZvaWQgKmpiZDJfc2VxX2hpc3RvcnlfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IGpiZDJfc3RhdHNfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0cyA9IHY7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgcy0+c3RhdHMgKyBzLT5zdGFydCwgMSk7Ci0JZWxzZQotCQlyZXR1cm4gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgKyt0cywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgamJkMl9zZXFfaGlzdG9yeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0cyA9IHY7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS00cyAlLTVzICUtNXMgJS01cyAlLTVzICUtNXMgJS01cyAlLTZzICUtNXMgIgotCQkJCSIlLTVzICUtNXMgJS01cyAlLTVzICUtNXNcbiIsICJSL0MiLCAidGlkIiwKLQkJCQkid2FpdCIsICJydW4iLCAibG9jayIsICJmbHVzaCIsICJsb2ciLCAiaG5kbHMiLAotCQkJCSJibG9jayIsICJpbmxvZyIsICJjdGltZSIsICJ3cml0ZSIsICJkcm9wIiwKLQkJCQkiY2xvc2UiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh0cy0+dHNfdHlwZSA9PSBKQkQyX1NUQVRTX1JVTikKLQkJc2VxX3ByaW50ZihzZXEsICIlLTRzICUtNWx1ICUtNXUgJS01dSAlLTV1ICUtNXUgJS01dSAiCi0JCQkJIiUtNmx1ICUtNWx1ICUtNWx1XG4iLCAiUiIsIHRzLT50c190aWQsCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfd2FpdCksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfcnVubmluZyksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfbG9ja2VkKSwKLQkJCQlqaWZmaWVzX3RvX21zZWNzKHRzLT51LnJ1bi5yc19mbHVzaGluZyksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfbG9nZ2luZyksCi0JCQkJdHMtPnUucnVuLnJzX2hhbmRsZV9jb3VudCwKLQkJCQl0cy0+dS5ydW4ucnNfYmxvY2tzLAotCQkJCXRzLT51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkKTsKLQllbHNlIGlmICh0cy0+dHNfdHlwZSA9PSBKQkQyX1NUQVRTX0NIRUNLUE9JTlQpCi0JCXNlcV9wcmludGYoc2VxLCAiJS00cyAlLTVsdSAlNDhzICUtNXUgJS01bHUgJS01bHUgJS01bHVcbiIsCi0JCQkJIkMiLCB0cy0+dHNfdGlkLCAiICIsCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5jaHAuY3NfY2hwX3RpbWUpLAotCQkJCXRzLT51LmNocC5jc193cml0dGVuLCB0cy0+dS5jaHAuY3NfZHJvcHBlZCwKLQkJCQl0cy0+dS5jaHAuY3NfZm9yY2VkX3RvX2Nsb3NlKTsKLQllbHNlCi0JCUpfQVNTRVJUKDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBqYmQyX3NlcV9oaXN0b3J5X3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgamJkMl9zZXFfaGlzdG9yeV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IGpiZDJfc2VxX2hpc3Rvcnlfc3RhcnQsCi0JLm5leHQgICA9IGpiZDJfc2VxX2hpc3RvcnlfbmV4dCwKLQkuc3RvcCAgID0gamJkMl9zZXFfaGlzdG9yeV9zdG9wLAotCS5zaG93ICAgPSBqYmQyX3NlcV9oaXN0b3J5X3Nob3csCi19OwotCi1zdGF0aWMgaW50IGpiZDJfc2VxX2hpc3Rvcnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlqb3VybmFsX3QgKmpvdXJuYWwgPSBQREUoaW5vZGUpLT5kYXRhOwotCXN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqczsKLQlpbnQgcmMsIHNpemU7Ci0KLQlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAocyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zKSAqIGpvdXJuYWwtPmpfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhdHMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChzLT5zdGF0cyA9PSBOVUxMKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KHMtPnN0YXRzLCBqb3VybmFsLT5qX2hpc3RvcnksIHNpemUpOwotCXMtPm1heCA9IGpvdXJuYWwtPmpfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhcnQgPSBqb3VybmFsLT5qX2hpc3RvcnlfY3VyICUgcy0+bWF4OwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0KLQlyYyA9IHNlcV9vcGVuKGZpbGUsICZqYmQyX3NlcV9oaXN0b3J5X29wcyk7Ci0JaWYgKHJjID09IDApIHsKLQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQltLT5wcml2YXRlID0gczsKLQl9IGVsc2UgewotCQlrZnJlZShzLT5zdGF0cyk7Ci0JCWtmcmVlKHMpOwotCX0KLQlyZXR1cm4gcmM7Ci0KLX0KLQotc3RhdGljIGludCBqYmQyX3NlcV9oaXN0b3J5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGpiZDJfc3RhdHNfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCi0Ja2ZyZWUocy0+c3RhdHMpOwotCWtmcmVlKHMpOwotCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2hpc3RvcnlfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gamJkMl9zZXFfaGlzdG9yeV9vcGVuLAotCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAotCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSAgICAgICAgPSBqYmQyX3NlcV9oaXN0b3J5X3JlbGVhc2UsCi19OwotCiBzdGF0aWMgdm9pZCAqamJkMl9zZXFfaW5mb19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJcmV0dXJuICpwb3MgPyBOVUxMIDogU0VRX1NUQVJUX1RPS0VOOwpAQCAtODQyLDI5ICs2OTIsMjkgQEAKIAogCWlmICh2ICE9IFNFUV9TVEFSVF9UT0tFTikKIAkJcmV0dXJuIDA7Ci0Jc2VxX3ByaW50ZihzZXEsICIlbHUgdHJhbnNhY3Rpb24sIGVhY2ggdXB0byAldSBibG9ja3NcbiIsCisJc2VxX3ByaW50ZihzZXEsICIlbHUgdHJhbnNhY3Rpb24sIGVhY2ggdXAgdG8gJXUgYmxvY2tzXG4iLAogCQkJcy0+c3RhdHMtPnRzX3RpZCwKIAkJCXMtPmpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMpOwogCWlmIChzLT5zdGF0cy0+dHNfdGlkID09IDApCiAJCXJldHVybiAwOwogCXNlcV9wcmludGYoc2VxLCAiYXZlcmFnZTogXG4gICV1bXMgd2FpdGluZyBmb3IgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX3dhaXQgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc193YWl0IC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIHJ1bm5pbmcgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX3J1bm5pbmcgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19ydW5uaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIHRyYW5zYWN0aW9uIHdhcyBiZWluZyBsb2NrZWRcbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX2xvY2tlZCAvIHMtPnN0YXRzLT50c190aWQpKTsKKwkgICAgamlmZmllc190b19tc2VjcyhzLT5zdGF0cy0+cnVuLnJzX2xvY2tlZCAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyBmbHVzaGluZyBkYXRhIChpbiBvcmRlcmVkIG1vZGUpXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19mbHVzaGluZyAvIHMtPnN0YXRzLT50c190aWQpKTsKKwkgICAgamlmZmllc190b19tc2VjcyhzLT5zdGF0cy0+cnVuLnJzX2ZsdXNoaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIGxvZ2dpbmcgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX2xvZ2dpbmcgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19sb2dnaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAlbGx1dXMgYXZlcmFnZSB0cmFuc2FjdGlvbiBjb21taXQgdGltZVxuIiwKIAkJICAgZGl2X3U2NChzLT5qb3VybmFsLT5qX2F2ZXJhZ2VfY29tbWl0X3RpbWUsIDEwMDApKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJWx1IGhhbmRsZXMgcGVyIHRyYW5zYWN0aW9uXG4iLAotCSAgICBzLT5zdGF0cy0+dS5ydW4ucnNfaGFuZGxlX2NvdW50IC8gcy0+c3RhdHMtPnRzX3RpZCk7CisJICAgIHMtPnN0YXRzLT5ydW4ucnNfaGFuZGxlX2NvdW50IC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJc2VxX3ByaW50ZihzZXEsICIgICVsdSBibG9ja3MgcGVyIHRyYW5zYWN0aW9uXG4iLAotCSAgICBzLT5zdGF0cy0+dS5ydW4ucnNfYmxvY2tzIC8gcy0+c3RhdHMtPnRzX3RpZCk7CisJICAgIHMtPnN0YXRzLT5ydW4ucnNfYmxvY2tzIC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJc2VxX3ByaW50ZihzZXEsICIgICVsdSBsb2dnZWQgYmxvY2tzIHBlciB0cmFuc2FjdGlvblxuIiwKLQkgICAgcy0+c3RhdHMtPnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQgLyBzLT5zdGF0cy0+dHNfdGlkKTsKKwkgICAgcy0+c3RhdHMtPnJ1bi5yc19ibG9ja3NfbG9nZ2VkIC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyMCw3ICs3NzAsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2luZm9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2luZm9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgICAgICAgID0gamJkMl9zZXFfaW5mb19vcGVuLAogCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLApAQCAtOTM0LDggKzc4NCw2IEBACiB7CiAJam91cm5hbC0+al9wcm9jX2VudHJ5ID0gcHJvY19ta2Rpcihqb3VybmFsLT5qX2Rldm5hbWUsIHByb2NfamJkMl9zdGF0cyk7CiAJaWYgKGpvdXJuYWwtPmpfcHJvY19lbnRyeSkgewotCQlwcm9jX2NyZWF0ZV9kYXRhKCJoaXN0b3J5IiwgU19JUlVHTywgam91cm5hbC0+al9wcm9jX2VudHJ5LAotCQkJCSAmamJkMl9zZXFfaGlzdG9yeV9mb3BzLCBqb3VybmFsKTsKIAkJcHJvY19jcmVhdGVfZGF0YSgiaW5mbyIsIFNfSVJVR08sIGpvdXJuYWwtPmpfcHJvY19lbnRyeSwKIAkJCQkgJmpiZDJfc2VxX2luZm9fZm9wcywgam91cm5hbCk7CiAJfQpAQCAtOTQ0LDI3ICs3OTIsOSBAQAogc3RhdGljIHZvaWQgamJkMl9zdGF0c19wcm9jX2V4aXQoam91cm5hbF90ICpqb3VybmFsKQogewogCXJlbW92ZV9wcm9jX2VudHJ5KCJpbmZvIiwgam91cm5hbC0+al9wcm9jX2VudHJ5KTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiaGlzdG9yeSIsIGpvdXJuYWwtPmpfcHJvY19lbnRyeSk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoam91cm5hbC0+al9kZXZuYW1lLCBwcm9jX2piZDJfc3RhdHMpOwogfQogCi1zdGF0aWMgdm9pZCBqb3VybmFsX2luaXRfc3RhdHMoam91cm5hbF90ICpqb3VybmFsKQotewotCWludCBzaXplOwotCi0JaWYgKCFwcm9jX2piZDJfc3RhdHMpCi0JCXJldHVybjsKLQotCWpvdXJuYWwtPmpfaGlzdG9yeV9tYXggPSAxMDA7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcykgKiBqb3VybmFsLT5qX2hpc3RvcnlfbWF4OwotCWpvdXJuYWwtPmpfaGlzdG9yeSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFqb3VybmFsLT5qX2hpc3RvcnkpIHsKLQkJam91cm5hbC0+al9oaXN0b3J5X21heCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0Jc3Bpbl9sb2NrX2luaXQoJmpvdXJuYWwtPmpfaGlzdG9yeV9sb2NrKTsKLX0KLQogLyoKICAqIE1hbmFnZW1lbnQgZm9yIGpvdXJuYWwgY29udHJvbCBibG9ja3M6IGZ1bmN0aW9ucyB0byBjcmVhdGUgYW5kCiAgKiBkZXN0cm95IGpvdXJuYWxfdCBzdHJ1Y3R1cmVzLCBhbmQgdG8gaW5pdGlhbGlzZSBhbmQgcmVhZCBleGlzdGluZwpAQCAtMTAwOSw3ICs4MzksNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0Jam91cm5hbF9pbml0X3N0YXRzKGpvdXJuYWwpOworCXNwaW5fbG9ja19pbml0KCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAKIAlyZXR1cm4gam91cm5hbDsKIGZhaWw6CkBAIC0xMDgzLDYgKzkxMyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlqYmQyX3N0YXRzX3Byb2NfZXhpdChqb3VybmFsKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTExMTUsNyArOTQ2LDcgQEAKIAl3aGlsZSAoKHAgPSBzdHJjaHIocCwgJy8nKSkpCiAJCSpwID0gJyEnOwogCXAgPSBqb3VybmFsLT5qX2Rldm5hbWUgKyBzdHJsZW4oam91cm5hbC0+al9kZXZuYW1lKTsKLQlzcHJpbnRmKHAsICI6JWx1Iiwgam91cm5hbC0+al9pbm9kZS0+aV9pbm8pOworCXNwcmludGYocCwgIi0lbHUiLCBqb3VybmFsLT5qX2lub2RlLT5pX2lubyk7CiAJamJkX2RlYnVnKDEsCiAJCSAgImpvdXJuYWwgJXA6IGlub2RlICVzLyVsZCwgc2l6ZSAlTGQsIGJpdHMgJWQsIGJsa3NpemUgJWxkXG4iLAogCQkgIGpvdXJuYWwsIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8sCkBAIC0xMTU2LDYgKzk4Nyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlqYmQyX3N0YXRzX3Byb2NfZXhpdChqb3VybmFsKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL21tYXAuYyBiL2ZzL25jcGZzL21tYXAuYwppbmRleCA1ZDhkY2I5Li4xNTQ1OGRlIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9tbWFwLmMKKysrIGIvZnMvbmNwZnMvbW1hcC5jCkBAIC05NSw3ICs5NSw3IEBACiAJcmV0dXJuIFZNX0ZBVUxUX01BSk9SOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5jcF9maWxlX21tYXAgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuY3BfZmlsZV9tbWFwID0KIHsKIAkuZmF1bHQgPSBuY3BfZmlsZV9tbWFwX2ZhdWx0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCA2Mzk3NmMwLi45OWVhMTk2IDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC0xMTgwLDcgKzExODAsNyBAQAogCQkJCSAgICAgIDEsIGZsYWdzICYgTkZTX01PVU5UX05PUkVTVlBPUlQpOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gZXJyb3I7Ci0JbWVtY3B5KGNscC0+Y2xfaXBhZGRyLCBpcF9hZGRyLCBzaXplb2YoY2xwLT5jbF9pcGFkZHIpKTsKKwlzdHJsY3B5KGNscC0+Y2xfaXBhZGRyLCBpcF9hZGRyLCBzaXplb2YoY2xwLT5jbF9pcGFkZHIpKTsKIAogCWVycm9yID0gbmZzX2lkbWFwX25ldyhjbHApOwogCWlmIChlcnJvciA8IDApIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCAzMjA2MmMzLi43Y2IyOTg1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xNTM2LDYgKzE1MzYsOCBAQAogCQlvbGRfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAogCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUpOworCiAJZF9kcm9wKGRlbnRyeSk7CiAJZXJyb3IgPSBORlNfUFJPVE8oZGlyKS0+bGluayhpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnJvciA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggNmMzMjEwMC4uZTFkNDE1ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtNDU3LDYgKzQ1Nyw3IEBACiAJfTsKIAlzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgdGFza19zZXR1cF9kYXRhID0gewogCQkucnBjX2NsaWVudCA9IE5GU19DTElFTlQoaW5vZGUpLAorCQkucnBjX21lc3NhZ2UgPSAmbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJm5mc193cml0ZV9kaXJlY3Rfb3BzLAogCQkud29ya3F1ZXVlID0gbmZzaW9kX3dvcmtxdWV1ZSwKIAkJLmZsYWdzID0gUlBDX1RBU0tfQVNZTkMsCmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCA4NmQ2YjRkLi5mNWZkZDM5IDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTU5LDcgKzU5LDcgQEAKIHN0YXRpYyBpbnQgbmZzX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CiBzdGF0aWMgaW50IG5mc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9uZyBhcmcsIHN0cnVjdCBmaWxlX2xvY2sgKipmbCk7CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuZnNfZmlsZV92bV9vcHM7CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IG5mc19maWxlX2xsc2VlaywKQEAgLTU3Miw3ICs1NzIsNyBAQAogCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlID0gbmZzX3ZtX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jIGIvZnMvbmZzL25mczRuYW1lc3BhY2UuYwppbmRleCAyNjM2YzI2Li5mYTM0MDhmIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCisrKyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAJbW50X3BhdGggPSBuZnM0X3BhdGhuYW1lX3N0cmluZygmbG9jYXRpb24tPnJvb3RwYXRoLCBwYWdlMiwgUEFHRV9TSVpFKTsKIAlpZiAoSVNfRVJSKG1udF9wYXRoKSkKLQkJcmV0dXJuIG1udDsKKwkJcmV0dXJuIEVSUl9DQVNUKG1udF9wYXRoKTsKIAltb3VudGRhdGEtPm1udF9wYXRoID0gbW50X3BhdGg7CiAJbWF4YnVmbGVuID0gbW50X3BhdGggLSAxIC0gcGFnZTI7CiAKQEAgLTEzMiwxNSArMTMyLDE1IEBACiAJCWlmIChidWYtPmxlbiA8PSAwIHx8IGJ1Zi0+bGVuID49IG1heGJ1ZmxlbikKIAkJCWNvbnRpbnVlOwogCi0JCW1vdW50ZGF0YS0+YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjsKLQogCQlpZiAobWVtY2hyKGJ1Zi0+ZGF0YSwgSVBWNl9TQ09QRV9ERUxJTUlURVIsIGJ1Zi0+bGVuKSkKIAkJCWNvbnRpbnVlOwotCQltb3VudGRhdGEtPmFkZHJsZW4gPSBuZnNfcGFyc2Vfc2VydmVyX25hbWUoYnVmLT5kYXRhLAotCQkJCWJ1Zi0+bGVuLAotCQkJCW1vdW50ZGF0YS0+YWRkciwgbW91bnRkYXRhLT5hZGRybGVuKTsKKworCQltb3VudGRhdGEtPmFkZHJsZW4gPSBuZnNfcGFyc2Vfc2VydmVyX25hbWUoYnVmLT5kYXRhLCBidWYtPmxlbiwKKwkJCQkoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSk7CiAJCWlmIChtb3VudGRhdGEtPmFkZHJsZW4gPT0gMCkKIAkJCWNvbnRpbnVlOworCisJCW1vdW50ZGF0YS0+YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjsKIAkJcnBjX3NldF9wb3J0KG1vdW50ZGF0YS0+YWRkciwgTkZTX1BPUlQpOwogCiAJCW1lbWNweShwYWdlMiwgYnVmLT5kYXRhLCBidWYtPmxlbik7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IGVkN2MyNjkuLmZmMzc0NTQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC03MiwxMiArNzIsMTcgQEAKIC8qIFByZXZlbnQgbGVha3Mgb2YgTkZTdjQgZXJyb3JzIGludG8gdXNlcmxhbmQgKi8KIHN0YXRpYyBpbnQgbmZzNF9tYXBfZXJyb3JzKGludCBlcnIpCiB7Ci0JaWYgKGVyciA8IC0xMDAwKSB7CisJaWYgKGVyciA+PSAtMTAwMCkKKwkJcmV0dXJuIGVycjsKKwlzd2l0Y2ggKGVycikgeworCWNhc2UgLU5GUzRFUlJfUkVTT1VSQ0U6CisJCXJldHVybiAtRVJFTU9URUlPOworCWRlZmF1bHQ6CiAJCWRwcmludGsoIiVzIGNvdWxkIG5vdCBoYW5kbGUgTkZTdjQgZXJyb3IgJWRcbiIsCiAJCQkJX19mdW5jX18sIC1lcnIpOwotCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CiAJfQotCXJldHVybiBlcnI7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qCkBAIC0zMDYwLDkgKzMwNjUsNiBAQAogCWlmICh0aW1lX2JlZm9yZShjbHAtPmNsX2xhc3RfcmVuZXdhbCx0aW1lc3RhbXApKQogCQljbHAtPmNsX2xhc3RfcmVuZXdhbCA9IHRpbWVzdGFtcDsKIAlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKLQlkcHJpbnRrKCIlcyBjYWxsaW5nIHB1dF9ycGNjcmVkIG9uIHJwY19jcmVkICVwXG4iLCBfX2Z1bmNfXywKLQkJCQl0YXNrLT50a19tc2cucnBjX2NyZWQpOwotCXB1dF9ycGNjcmVkKHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mczRfcmVuZXdfb3BzID0gewpAQCAtNDg3Nyw3ICs0ODc5LDYgQEAKIAluZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3QoY2xwLCB0YXNrLT50a19tc2cucnBjX3Jlc3ApOwogCWRwcmludGsoIiVzIHJwY19jcmVkICVwXG4iLCBfX2Z1bmNfXywgdGFzay0+dGtfbXNnLnJwY19jcmVkKTsKIAotCXB1dF9ycGNjcmVkKHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiAJa2ZyZWUodGFzay0+dGtfbXNnLnJwY19hcmdwKTsKIAlrZnJlZSh0YXNrLT50a19tc2cucnBjX3Jlc3ApOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHJlbmV3ZC5jIGIvZnMvbmZzL25mczRyZW5ld2QuYwppbmRleCBlMjdjNmNlLi4wMTU2YzAxIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHJlbmV3ZC5jCisrKyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKQEAgLTEyNywxMiArMTI3LDYgQEAKIH0KIAogdm9pZAotbmZzNF9yZW5ld2RfcHJlcGFyZV9zaHV0ZG93bihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQotewotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcmVuZXdkKTsKLX0KLQotdm9pZAogbmZzNF9raWxsX3JlbmV3ZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmY2xwLT5jbF9yZW5ld2QpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczR4ZHIuYyBiL2ZzL25mcy9uZnM0eGRyLmMKaW5kZXggODNhZDQ3Yy4uMjBiNGUzMCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczR4ZHIuYworKysgYi9mcy9uZnMvbmZzNHhkci5jCkBAIC01NjgxLDcgKzU2ODEsNiBAQAogCXsgTkZTNEVSUl9TRVJWRVJGQVVMVCwJLUVTRVJWRVJGQVVMVAl9LAogCXsgTkZTNEVSUl9CQURUWVBFLAktRUJBRFRZUEUJfSwKIAl7IE5GUzRFUlJfTE9DS0VELAktRUFHQUlOCQl9LAotCXsgTkZTNEVSUl9SRVNPVVJDRSwJLUVSRU1PVEVJTwl9LAogCXsgTkZTNEVSUl9TWU1MSU5LLAktRUxPT1AJCX0sCiAJeyBORlM0RVJSX09QX0lMTEVHQUwsCS1FT1BOT1RTVVBQCX0sCiAJeyBORlM0RVJSX0RFQURMT0NLLAktRURFQURMSwl9LApkaWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYwppbmRleCA4MTA3NzBmLi45MGJlNTUxIDEwMDY0NAotLS0gYS9mcy9uZnMvc3VwZXIuYworKysgYi9mcy9uZnMvc3VwZXIuYwpAQCAtNzI4LDIyICs3MjgsMjQgQEAKIAl1bmxvY2tfa2VybmVsKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKm5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSh1bnNpZ25lZCBpbnQgdmVyc2lvbikKIHsKIAlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhOwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEpIHsKLQkJZGF0YS0+ZmxhZ3MJCT0gZmxhZ3M7CiAJCWRhdGEtPnJzaXplCQk9IE5GU19NQVhfRklMRV9JT19TSVpFOwogCQlkYXRhLT53c2l6ZQkJPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKIAkJZGF0YS0+YWNyZWdtaW4JCT0gTkZTX0RFRl9BQ1JFR01JTjsKIAkJZGF0YS0+YWNyZWdtYXgJCT0gTkZTX0RFRl9BQ1JFR01BWDsKIAkJZGF0YS0+YWNkaXJtaW4JCT0gTkZTX0RFRl9BQ0RJUk1JTjsKIAkJZGF0YS0+YWNkaXJtYXgJCT0gTkZTX0RFRl9BQ0RJUk1BWDsKKwkJZGF0YS0+bW91bnRfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7CiAJCWRhdGEtPm5mc19zZXJ2ZXIucG9ydAk9IE5GU19VTlNQRUNfUE9SVDsKKwkJZGF0YS0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JUX1RDUDsKIAkJZGF0YS0+YXV0aF9mbGF2b3JzWzBdCT0gUlBDX0FVVEhfVU5JWDsKIAkJZGF0YS0+YXV0aF9mbGF2b3JfbGVuCT0gMTsKKwkJZGF0YS0+dmVyc2lvbgkJPSB2ZXJzaW9uOwogCQlkYXRhLT5taW5vcnZlcnNpb24JPSAwOwogCX0KIAlyZXR1cm4gZGF0YTsKQEAgLTc3NiwxNSArNzc4LDEzIEBACiAgKiBTZWxlY3QgYmV0d2VlbiBhIGRlZmF1bHQgcG9ydCB2YWx1ZSBhbmQgYSB1c2VyLXNwZWNpZmllZCBwb3J0IHZhbHVlLgogICogSWYgYSB6ZXJvIHZhbHVlIGlzIHNldCwgdGhlbiBhdXRvYmluZCB3aWxsIGJlIHVzZWQuCiAgKi8KLXN0YXRpYyB2b2lkIG5mc19zZXRfZGVmYXVsdF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBjb25zdCBpbnQgcGFyc2VkX3BvcnQsCitzdGF0aWMgdm9pZCBuZnNfc2V0X3BvcnQoc3RydWN0IHNvY2thZGRyICpzYXAsIGludCAqcG9ydCwKIAkJCQkgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9wb3J0KQogewotCXVuc2lnbmVkIHNob3J0IHBvcnQgPSBkZWZhdWx0X3BvcnQ7CisJaWYgKCpwb3J0ID09IE5GU19VTlNQRUNfUE9SVCkKKwkJKnBvcnQgPSBkZWZhdWx0X3BvcnQ7CiAKLQlpZiAocGFyc2VkX3BvcnQgIT0gTkZTX1VOU1BFQ19QT1JUKQotCQlwb3J0ID0gcGFyc2VkX3BvcnQ7Ci0KLQlycGNfc2V0X3BvcnQoc2FwLCBwb3J0KTsKKwlycGNfc2V0X3BvcnQoc2FwLCAqcG9ydCk7CiB9CiAKIC8qCkBAIC0xMjUzLDYgKzEyNTMsNyBAQAogCQkJZGVmYXVsdDoKIAkJCQlkZnByaW50ayhNT1VOVCwgIk5GUzogICB1bnJlY29nbml6ZWQgIgogCQkJCQkJInRyYW5zcG9ydCBwcm90b2NvbFxuIik7CisJCQkJa2ZyZWUoc3RyaW5nKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTQ3NSw3ICsxNDc2LDcgQEAKIAkJYXJncy0+bW91bnRfc2VydmVyLmFkZHJsZW4gPSBhcmdzLT5uZnNfc2VydmVyLmFkZHJsZW47CiAJfQogCXJlcXVlc3Quc2FsZW4gPSBhcmdzLT5tb3VudF9zZXJ2ZXIuYWRkcmxlbjsKLQluZnNfc2V0X2RlZmF1bHRfcG9ydChyZXF1ZXN0LnNhcCwgYXJncy0+bW91bnRfc2VydmVyLnBvcnQsIDApOworCW5mc19zZXRfcG9ydChyZXF1ZXN0LnNhcCwgJmFyZ3MtPm1vdW50X3NlcnZlci5wb3J0LCAwKTsKIAogCS8qCiAJICogTm93IGFzayB0aGUgbW91bnQgc2VydmVyIHRvIG1hcCBvdXIgZXhwb3J0IHBhdGgKQEAgLTE3NjUsNyArMTc2Niw3IEBACiAJCQlnb3RvIG91dF92NF9ub3RfY29tcGlsZWQ7CiAjZW5kaWYKIAotCQluZnNfc2V0X2RlZmF1bHRfcG9ydChzYXAsIGFyZ3MtPm5mc19zZXJ2ZXIucG9ydCwgMCk7CisJCW5mc19zZXRfcG9ydChzYXAsICZhcmdzLT5uZnNfc2VydmVyLnBvcnQsIDApOwogCiAJCW5mc19zZXRfbW91bnRfdHJhbnNwb3J0X3Byb3RvY29sKGFyZ3MpOwogCkBAIC0xODQ2LDkgKzE4NDcsMTAgQEAKIAkgICAgZGF0YS0+YWNkaXJtaW4gIT0gbmZzcy0+YWNkaXJtaW4gLyBIWiB8fAogCSAgICBkYXRhLT5hY2Rpcm1heCAhPSBuZnNzLT5hY2Rpcm1heCAvIEhaIHx8CiAJICAgIGRhdGEtPnRpbWVvICE9ICgxMFUgKiBuZnNzLT5jbGllbnQtPmNsX3RpbWVvdXQtPnRvX2luaXR2YWwgLyBIWikgfHwKKwkgICAgZGF0YS0+bmZzX3NlcnZlci5wb3J0ICE9IG5mc3MtPnBvcnQgfHwKIAkgICAgZGF0YS0+bmZzX3NlcnZlci5hZGRybGVuICE9IG5mc3MtPm5mc19jbGllbnQtPmNsX2FkZHJsZW4gfHwKLQkgICAgbWVtY21wKCZkYXRhLT5uZnNfc2VydmVyLmFkZHJlc3MsICZuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRyLAotCQkgICBkYXRhLT5uZnNfc2VydmVyLmFkZHJsZW4pICE9IDApCisJICAgICFycGNfY21wX2FkZHIoKHN0cnVjdCBzb2NrYWRkciAqKSZkYXRhLT5uZnNfc2VydmVyLmFkZHJlc3MsCisJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CkBAIC0xODkxLDYgKzE4OTMsNyBAQAogCWRhdGEtPmFjZGlybWluID0gbmZzcy0+YWNkaXJtaW4gLyBIWjsKIAlkYXRhLT5hY2Rpcm1heCA9IG5mc3MtPmFjZGlybWF4IC8gSFo7CiAJZGF0YS0+dGltZW8gPSAxMFUgKiBuZnNzLT5jbGllbnQtPmNsX3RpbWVvdXQtPnRvX2luaXR2YWwgLyBIWjsKKwlkYXRhLT5uZnNfc2VydmVyLnBvcnQgPSBuZnNzLT5wb3J0OwogCWRhdGEtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9IG5mc3MtPm5mc19jbGllbnQtPmNsX2FkZHJsZW47CiAJbWVtY3B5KCZkYXRhLT5uZnNfc2VydmVyLmFkZHJlc3MsICZuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRyLAogCQlkYXRhLT5uZnNfc2VydmVyLmFkZHJsZW4pOwpAQCAtMjEwNCw3ICsyMTA3LDcgQEAKIAl9OwogCWludCBlcnJvciA9IC1FTk9NRU07CiAKLQlkYXRhID0gbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKE5GU19NT1VOVF9WRVIzIHwgTkZTX01PVU5UX1RDUCk7CisJZGF0YSA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSgzKTsKIAltbnRmaCA9IGt6YWxsb2Moc2l6ZW9mKCptbnRmaCksIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwgfHwgbW50ZmggPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9maDsKQEAgLTIzMjksNyArMjMzMiw3IEBACiB7CiAJc3RydWN0IHNvY2thZGRyICpzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJmFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmVzczsKIAotCW5mc19zZXRfZGVmYXVsdF9wb3J0KHNhcCwgYXJncy0+bmZzX3NlcnZlci5wb3J0LCBORlNfUE9SVCk7CisJbmZzX3NldF9wb3J0KHNhcCwgJmFyZ3MtPm5mc19zZXJ2ZXIucG9ydCwgTkZTX1BPUlQpOwogCiAJbmZzX3ZhbGlkYXRlX3RyYW5zcG9ydF9wcm90b2NvbChhcmdzKTsKIApAQCAtMjM3NCw3ICsyMzc3LDYgQEAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dF9ub19kYXRhOwogCi0JYXJncy0+dmVyc2lvbgkJPSA0OwogCXN3aXRjaCAoZGF0YS0+dmVyc2lvbikgewogCWNhc2UgMToKIAkJaWYgKGRhdGEtPmhvc3RfYWRkcmxlbiA+IHNpemVvZihhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3MpKQpAQCAtMjY1OCw3ICsyNjYwLDcgQEAKIAlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhOwogCWludCBlcnJvciA9IC1FTk9NRU07CiAKLQlkYXRhID0gbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKDApOworCWRhdGEgPSBuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoNCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9kYXRhOwogCkBAIC0yNjg4LDcgKzI2OTAsNiBAQAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwogCW5mc19zdXBlcl9yZXR1cm5fYWxsX2RlbGVnYXRpb25zKHNiKTsKIAlraWxsX2Fub25fc3VwZXIoc2IpOwotCW5mczRfcmVuZXdkX3ByZXBhcmVfc2h1dGRvd24oc2VydmVyKTsKIAluZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzYik7CiAJbmZzX2ZyZWVfc2VydmVyKHNlcnZlcik7CiAJZHByaW50aygiPC0tICVzXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczN4ZHIuYyBiL2ZzL25mc2QvbmZzM3hkci5jCmluZGV4IGVkZjkyNmUuLmQwYTJjZTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzM3hkci5jCisrKyBiL2ZzL25mc2QvbmZzM3hkci5jCkBAIC05NTgsNyArOTU4LDcgQEAKIAkJcDEgPSBlbmNvZGVfZW50cnlfYmFnZ2FnZShjZCwgcDEsIG5hbWUsIG5hbWxlbiwgaW5vKTsKIAogCQlpZiAocGx1cykKLQkJCXAgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAxLCBuYW1lLCBuYW1sZW4pOworCQkJcDEgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAxLCBuYW1lLCBuYW1sZW4pOwogCiAJCS8qIGRldGVybWluZSBlbnRyeSB3b3JkIGxlbmd0aCBhbmQgbGVuZ3RocyB0byBnbyBpbiBwYWdlcyAqLwogCQludW1fZW50cnlfd29yZHMgPSBwMSAtIHRtcDsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzY3RsLmMgYi9mcy9uZnNkL25mc2N0bC5jCmluZGV4IDAwMzg4ZDIuLjVjMDFmYzEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzY3RsLmMKKysrIGIvZnMvbmZzZC9uZnNjdGwuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiBleHRlcm4gaW50IG5mc2RfcG9vbF9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGV4dGVybiBpbnQgbmZzZF9wb29sX3N0YXRzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb29sX3N0YXRzX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb29sX3N0YXRzX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4JCT0gbmZzZF9wb29sX3N0YXRzX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMKaW5kZXggNmEyNzExZi4uODRjMjUzOCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuYwpAQCAtMzYsNiArMzYsNyBAQAogCiB2b2lkIG5pbGZzX2J0bm9kZV9jYWNoZV9pbml0X29uY2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJ0bmMpCiB7CisJbWVtc2V0KGJ0bmMsIDAsIHNpemVvZigqYnRuYykpOwogCUlOSVRfUkFESVhfVFJFRSgmYnRuYy0+cGFnZV90cmVlLCBHRlBfQVRPTUlDKTsKIAlzcGluX2xvY2tfaW5pdCgmYnRuYy0+dHJlZV9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYnRuYy0+cHJpdmF0ZV9saXN0KTsKQEAgLTg2LDYgKzg3LDcgQEAKIAkJCWJyZWxzZShiaCk7CiAJCQlCVUcoKTsKIAkJfQorCQltZW1zZXQoYmgtPmJfZGF0YSwgMCwgMSA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIAkJYmgtPmJfYmRldiA9IE5JTEZTX0lfTklMRlMoaW5vZGUpLT5uc19iZGV2OwogCQliaC0+Yl9ibG9ja25yID0gYmxvY2tucjsKIAkJc2V0X2J1ZmZlcl9tYXBwZWQoYmgpOwpAQCAtMjc1LDggKzI3Nyw3IEBACiAJCQkJICAgICAgICJpbnZhbGlkIG9sZGtleSAlbGxkIChuZXdrZXk9JWxsZCkiLAogCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9sZGtleSwKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdrZXkpOwotCQlpZiAoIXRlc3Rfc2V0X2J1ZmZlcl9kaXJ0eShvYmgpICYmIFRlc3RTZXRQYWdlRGlydHkob3BhZ2UpKQotCQkJQlVHKCk7CisJCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KG9iaCk7CiAKIAkJc3Bpbl9sb2NrX2lycSgmYnRuYy0+dHJlZV9sb2NrKTsKIAkJcmFkaXhfdHJlZV9kZWxldGUoJmJ0bmMtPnBhZ2VfdHJlZSwgb2xka2V5KTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9jcGZpbGUuYyBiL2ZzL25pbGZzMi9jcGZpbGUuYwppbmRleCAxYzZjZmI1Li4zZjVkNWQwIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvY3BmaWxlLmMKKysrIGIvZnMvbmlsZnMyL2NwZmlsZS5jCkBAIC04NzEsNyArODcxLDYgQEAKIAkJICogZXhjbHVzaXZlIHdpdGggYSBuZXcgbW91bnQgam9iLiAgVGhvdWdoIGl0IGRvZXNuJ3QgY292ZXIKIAkJICogdW1vdW50LCBpdCdzIGVub3VnaCBmb3IgdGhlIHB1cnBvc2UuCiAJCSAqLwotCQltdXRleF9sb2NrKCZuaWxmcy0+bnNfbW91bnRfbXV0ZXgpOwogCQlpZiAobmlsZnNfY2hlY2twb2ludF9pc19tb3VudGVkKG5pbGZzLCBjbm8sIDEpKSB7CiAJCQkvKiBDdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhdmUgdG8gcHJvdGVjdAogCQkJICAgcGxhaW4gcmVhZC1vbmx5IG1vdW50cyBzaW5jZSB0aGV5IGFyZSBleGNsdXNpdmUKQEAgLTg4MCw3ICs4NzksNiBAQAogCQkJcmV0ID0gLUVCVVNZOwogCQl9IGVsc2UKIAkJCXJldCA9IG5pbGZzX2NwZmlsZV9jbGVhcl9zbmFwc2hvdChjcGZpbGUsIGNubyk7Ci0JCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAkJcmV0dXJuIHJldDsKIAljYXNlIE5JTEZTX1NOQVBTSE9UOgogCQlyZXR1cm4gbmlsZnNfY3BmaWxlX3NldF9zbmFwc2hvdChjcGZpbGUsIGNubyk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGlyLmMgYi9mcy9uaWxmczIvZGlyLmMKaW5kZXggMWE0ZmEwNC4uZTA5NzA5OSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2Rpci5jCisrKyBiL2ZzL25pbGZzMi9kaXIuYwpAQCAtNjk3LDcgKzY5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZGlyX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyCT0gbmlsZnNfcmVhZGRpciwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9maWxlLmMgYi9mcy9uaWxmczIvZmlsZS5jCmluZGV4IGZjODI3OGMuLjMwMjkyZGYgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9maWxlLmMKKysrIGIvZnMvbmlsZnMyL2ZpbGUuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuaWxmc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmlsZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IG5pbGZzX3BhZ2VfbWt3cml0ZSwKIH07CkBAIC0xMzQsNyArMTM0LDcgQEAKICAqIFdlIGhhdmUgbW9zdGx5IE5VTEwncyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgb2sgZm9yCiAgKiB0aGUgbmlsZnMgZmlsZXN5c3RlbS4KICAqLwotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lub2RlLmMgYi9mcy9uaWxmczIvaW5vZGUuYwppbmRleCAyZDJjNTAxLi4yYTBhNWEzIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW5vZGUuYworKysgYi9mcy9uaWxmczIvaW5vZGUuYwpAQCAtNDAwLDYgKzQwMCw3IEBACiAJaWktPmlfZGlyX2FjbCA9IFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgPwogCQkwIDogbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2Rpcl9hY2wpOwogI2VuZGlmCisJaWktPmlfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAJaWktPmlfY25vID0gMDsKIAlpbm9kZS0+aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2dlbmVyYXRpb24pOwogCkBAIC02NjMsNyArNjY0LDYgQEAKIAlpbnQgZXJyOwogCiAJc3Bpbl9sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7Ci0JLyogQ2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gTVVTVCBsb2NrIHNfaW5vZGVfbG9jayAqLwogCWlmIChpaS0+aV9iaCA9PSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CiAJCWVyciA9IG5pbGZzX2lmaWxlX2dldF9pbm9kZV9ibG9jayhzYmktPnNfaWZpbGUsIGlub2RlLT5pX2lubywKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pb2N0bC5jIGIvZnMvbmlsZnMyL2lvY3RsLmMKaW5kZXggNjU3MmVhNC4uZjZhZjc2MCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lvY3RsLmMKKysrIGIvZnMvbmlsZnMyL2lvY3RsLmMKQEAgLTk5LDcgKzk5LDggQEAKIHN0YXRpYyBpbnQgbmlsZnNfaW9jdGxfY2hhbmdlX2NwbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmdwKQogewotCXN0cnVjdCBpbm9kZSAqY3BmaWxlID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzLT5uc19jcGZpbGU7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBOSUxGU19TQihpbm9kZS0+aV9zYiktPnNfbmlsZnM7CisJc3RydWN0IGlub2RlICpjcGZpbGUgPSBuaWxmcy0+bnNfY3BmaWxlOwogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwogCXN0cnVjdCBuaWxmc19jcG1vZGUgY3Btb2RlOwogCWludCByZXQ7CkBAIC0xMDksMTQgKzExMCwxNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmY3Btb2RlLCBhcmdwLCBzaXplb2YoY3Btb2RlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJbXV0ZXhfbG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAluaWxmc190cmFuc2FjdGlvbl9iZWdpbihpbm9kZS0+aV9zYiwgJnRpLCAwKTsKIAlyZXQgPSBuaWxmc19jcGZpbGVfY2hhbmdlX2NwbW9kZSgKIAkJY3BmaWxlLCBjcG1vZGUuY21fY25vLCBjcG1vZGUuY21fbW9kZSk7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CiAJCW5pbGZzX3RyYW5zYWN0aW9uX2Fib3J0KGlub2RlLT5pX3NiKTsKKwkJbXV0ZXhfdW5sb2NrKCZuaWxmcy0+bnNfbW91bnRfbXV0ZXgpOwogCQlyZXR1cm4gcmV0OwogCX0KIAluaWxmc190cmFuc2FjdGlvbl9jb21taXQoaW5vZGUtPmlfc2IpOyAvKiBuZXZlciBmYWlscyAqLworCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTcsNyArMzAxLDE4IEBACiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfdmJsb2NrbnIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQliaC0+Yl9wcml2YXRlID0gdmRlc2M7CisJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZiaC0+Yl9hc3NvY19idWZmZXJzKSkpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNvbmZsaWN0aW5nICVzIGJ1ZmZlcjogaW5vPSVsbHUsICIKKwkJICAgICAgICJjbm89JWxsdSwgb2Zmc2V0PSVsbHUsIGJsb2NrbnI9JWxsdSwgdmJsb2NrbnI9JWxsdVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB2ZGVzYy0+dmRfZmxhZ3MgPyAibm9kZSIgOiAiZGF0YSIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9pbm8sCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9jbm8sCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9vZmZzZXQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9ibG9ja25yLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfdmJsb2NrbnIpOworCQlicmVsc2UoYmgpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CiAJbGlzdF9hZGRfdGFpbCgmYmgtPmJfYXNzb2NfYnVmZmVycywgYnVmZmVycyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMzUsMjQgKzM1MCwxMCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaCwgbiwgJmJ1ZmZlcnMsIGJfYXNzb2NfYnVmZmVycykgewogCQlyZXQgPSBuaWxmc19nY2NhY2hlX3dhaXRfYW5kX21hcmtfZGlydHkoYmgpOwogCQlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKLQkJCWlmIChyZXQgPT0gLUVFWElTVCkgewotCQkJCXZkZXNjID0gYmgtPmJfcHJpdmF0ZTsKLQkJCQlwcmludGsoS0VSTl9DUklUCi0JCQkJICAgICAgICIlczogY29uZmxpY3RpbmcgJXMgYnVmZmVyOiAiCi0JCQkJICAgICAgICJpbm89JWxsdSwgY25vPSVsbHUsIG9mZnNldD0lbGx1LCAiCi0JCQkJICAgICAgICJibG9ja25yPSVsbHUsIHZibG9ja25yPSVsbHVcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLAotCQkJCSAgICAgICB2ZGVzYy0+dmRfZmxhZ3MgPyAibm9kZSIgOiAiZGF0YSIsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX2lubywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfY25vLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9vZmZzZXQsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX2Jsb2NrbnIsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKLQkJCX0KKwkJCVdBUk5fT04ocmV0ID09IC1FRVhJU1QpOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAkJbGlzdF9kZWxfaW5pdCgmYmgtPmJfYXNzb2NfYnVmZmVycyk7Ci0JCWJoLT5iX3ByaXZhdGUgPSBOVUxMOwogCQlicmVsc2UoYmgpOwogCX0KIAlyZXR1cm4gbm1lbWJzOwpAQCAtMzYwLDcgKzM2MSw2IEBACiAgZmFpbGVkOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaCwgbiwgJmJ1ZmZlcnMsIGJfYXNzb2NfYnVmZmVycykgewogCQlsaXN0X2RlbF9pbml0KCZiaC0+Yl9hc3NvY19idWZmZXJzKTsKLQkJYmgtPmJfcHJpdmF0ZSA9IE5VTEw7CiAJCWJyZWxzZShiaCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC00NzEsNyArNDcxLDYgQEAKIAlyZXR1cm4gMDsKIAogIGZhaWxlZDoKLQluaWxmc19yZW1vdmVfYWxsX2djaW5vZGUobmlsZnMpOwogCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IEdDIGZhaWxlZCBkdXJpbmcgcHJlcGFyYXRpb246ICVzOiBlcnI9JWRcbiIsCiAJICAgICAgIG1zZywgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtNTYwLDYgKzU1OSw4IEBACiAJZWxzZQogCQlyZXQgPSBuaWxmc19jbGVhbl9zZWdtZW50cyhpbm9kZS0+aV9zYiwgYXJndiwga2J1ZnMpOwogCisJaWYgKHJldCA8IDApCisJCW5pbGZzX3JlbW92ZV9hbGxfZ2Npbm9kZShuaWxmcyk7CiAJY2xlYXJfbmlsZnNfZ2NfcnVubmluZyhuaWxmcyk7CiAKICBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuYyBiL2ZzL25pbGZzMi9tZHQuYwppbmRleCBiMThjNDk5Li5mNjMyNjExIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmMKKysrIGIvZnMvbmlsZnMyL21kdC5jCkBAIC00MzMsNyArNDMzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkZWZfbWR0X2lvcHM7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfbWR0X2ZvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfbWR0X2ZvcHM7CiAKIC8qCiAgKiBOSUxGUzIgdXNlcyBwc2V1ZG8gaW5vZGVzIGZvciBtZXRhIGRhdGEgZmlsZXMgc3VjaCBhcyBEQVQsIGNwZmlsZSwgc3VmaWxlLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25pbGZzLmggYi9mcy9uaWxmczIvbmlsZnMuaAppbmRleCBiYWQ3MzY4Li40ZGE2ZjY3IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbmlsZnMuaAorKysgYi9mcy9uaWxmczIvbmlsZnMuaApAQCAtMjk0LDkgKzI5NCw5IEBACiAvKgogICogSW5vZGVzIGFuZCBmaWxlcyBvcGVyYXRpb25zCiAgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbmlsZnNfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCA2ODNkZjg5Li42ZWZmNjZhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTI0NjgsMTcgKzI0NjgsMjIgQEAKIAkvKiBDbGVhciByZXF1ZXN0cyAoZXZlbiB3aGVuIHRoZSBjb25zdHJ1Y3Rpb24gZmFpbGVkKSAqLwogCXNwaW5fbG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIAotCXNjaS0+c2Nfc3RhdGUgJj0gfk5JTEZTX1NFR0NUT1JfQ09NTUlUOwotCiAJaWYgKHJlcS0+bW9kZSA9PSBTQ19MU0VHX1NSKSB7CisJCXNjaS0+c2Nfc3RhdGUgJj0gfk5JTEZTX1NFR0NUT1JfQ09NTUlUOwogCQlzY2ktPnNjX3NlcV9kb25lID0gcmVxLT5zZXFfYWNjZXB0ZWQ7CiAJCW5pbGZzX3NlZ2N0b3Jfd2FrZXVwKHNjaSwgcmVxLT5zY19lcnIgPyA6IHJlcS0+c2JfZXJyKTsKIAkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ID0gMDsKLQl9IGVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9GSUxFKQotCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOwotCWVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9EQVQpCi0JCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCAmPSB+RkxVU0hfREFUX0JJVDsKKwl9IGVsc2UgeworCQlpZiAocmVxLT5tb2RlID09IFNDX0ZMVVNIX0ZJTEUpCisJCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOworCQllbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfREFUKQorCQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9EQVRfQklUOwogCisJCS8qIHJlLWVuYWJsZSB0aW1lciBpZiBjaGVja3BvaW50IGNyZWF0aW9uIHdhcyBub3QgZG9uZSAqLworCQlpZiAoc2NpLT5zY190aW1lciAmJiAoc2NpLT5zY19zdGF0ZSAmIE5JTEZTX1NFR0NUT1JfQ09NTUlUKSAmJgorCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgc2NpLT5zY190aW1lci0+ZXhwaXJlcykpCisJCQlhZGRfdGltZXIoc2NpLT5zY190aW1lcik7CisJfQogCXNwaW5fdW5sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9mcy9ubHMvbmxzX2Jhc2UuYyBiL2ZzL25scy9ubHNfYmFzZS5jCmluZGV4IDIyMjRiNGQuLjQ0YTg4YTkgMTAwNjQ0Ci0tLSBhL2ZzL25scy9ubHNfYmFzZS5jCisrKyBiL2ZzL25scy9ubHNfYmFzZS5jCkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogCXdoaWxlICgqcyAmJiBsZW4gPiAwKSB7CiAJCWlmICgqcyAmIDB4ODApIHsKIAkJCXNpemUgPSB1dGY4X3RvX3V0ZjMyKHMsIGxlbiwgJnUpOwotCQkJaWYgKHNpemUgPCAwKSB7Ci0JCQkJLyogSWdub3JlIGNoYXJhY3RlciBhbmQgbW92ZSBvbiAqLwotCQkJCXNpemUgPSAxOwotCQkJfSBlbHNlIGlmICh1ID49IFBMQU5FX1NJWkUpIHsKKwkJCWlmIChzaXplIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKHUgPj0gUExBTkVfU0laRSkgewogCQkJCXUgLT0gUExBTkVfU0laRTsKIAkJCQkqb3ArKyA9ICh3Y2hhcl90KSAoU1VSUk9HQVRFX1BBSVIgfAogCQkJCQkJKCh1ID4+IDEwKSAmIFNVUlJPR0FURV9CSVRTKSk7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMgYi9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKaW5kZXggODI4YTg4OS4uN2U1NGU1MiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYwpAQCAtOTEsNiArOTEsNyBAQAogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqZG47CiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICoqcHJldjsKIAlzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd247CisJX191MzIgdGVzdF9tYXNrID0gZXZlbnQtPm1hc2sgJiB+RlNfRVZFTlRfT05fQ0hJTEQ7CiAKIAl0b190ZWxsID0gZXZlbnQtPnRvX3RlbGw7CiAKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXNwaW5fbG9jaygmZW50cnktPmxvY2spOwogCXByZXYgPSAmZG5lbnRyeS0+ZG47CiAJd2hpbGUgKChkbiA9ICpwcmV2KSAhPSBOVUxMKSB7Ci0JCWlmICgoZG4tPmRuX21hc2sgJiBldmVudC0+bWFzaykgPT0gMCkgeworCQlpZiAoKGRuLT5kbl9tYXNrICYgdGVzdF9tYXNrKSA9PSAwKSB7CiAJCQlwcmV2ID0gJmRuLT5kbl9uZXh0OwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMgYi9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCmluZGV4IGM4YTA3YzYuLjMxNjVkODUgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKKysrIGIvZnMvbm90aWZ5L2lub2RlX21hcmsuYwpAQCAtMzI0LDExICszMjQsMTEgQEAKIAlzcGluX2xvY2soJmdyb3VwLT5tYXJrX2xvY2spOwogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAKLQllbnRyeS0+Z3JvdXAgPSBncm91cDsKLQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKLQogCWxlbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShncm91cCwgaW5vZGUpOwogCWlmICghbGVudHJ5KSB7CisJCWVudHJ5LT5ncm91cCA9IGdyb3VwOworCQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKKwogCQlobGlzdF9hZGRfaGVhZCgmZW50cnktPmlfbGlzdCwgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtfZW50cmllcyk7CiAJCWxpc3RfYWRkKCZlbnRyeS0+Z19saXN0LCAmZ3JvdXAtPm1hcmtfZW50cmllcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYyBiL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYwppbmRleCAzODE2ZDU3Li5iOGJmNTNiIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKKysrIGIvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJCS8qIHJlbWVtYmVyLCBhZnRlciBvbGQgd2FzIHB1dCBvbiB0aGUgd2FpdF9xIHdlIGFyZW4ndAogCQkJICogYWxsb3dlZCB0byBsb29rIGF0IHRoZSBpbm9kZSBhbnkgbW9yZSwgb25seSB0aGluZwogCQkJICogbGVmdCB0byBjaGVjayB3YXMgaWYgdGhlIGZpbGVfbmFtZSBpcyB0aGUgc2FtZSAqLwotCQkJaWYgKG9sZC0+bmFtZV9sZW4gJiYKKwkJCWlmICghb2xkLT5uYW1lX2xlbiB8fAogCQkJICAgICFzdHJjbXAob2xkLT5maWxlX25hbWUsIG5ldy0+ZmlsZV9uYW1lKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggMDljYzI1ZC4uYzQ1MmQxMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC05NjYsNyArOTY2LDcgQEAKIH0KICNlbmRpZiAgLyogQ09ORklHX0RFQlVHX0ZTICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG8yaGJfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG8yaGJfZGVidWdfZm9wcyA9IHsKIAkub3BlbiA9CQlvMmhiX2RlYnVnX29wZW4sCiAJLnJlbGVhc2UgPQlvMmhiX2RlYnVnX3JlbGVhc2UsCiAJLnJlYWQgPQkJbzJoYl9kZWJ1Z19yZWFkLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jIGIvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCmluZGV4IGNmYjJiZTcuLmRhNzk0YmMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnN0X3NlcV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnN0X3NlcV9mb3BzID0gewogCS5vcGVuID0gbnN0X2ZvcF9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTM4OCw3ICszODgsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2Nfc2VxX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY19zZXFfZm9wcyA9IHsKIAkub3BlbiA9IHNjX2ZvcF9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKaW5kZXggY2E0NjAwMi4uNDJiMGJhZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19wdXJnZWxpc3RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3B1cmdlbGlzdF9mb3BzID0gewogCS5vcGVuID0JCWRlYnVnX3B1cmdlbGlzdF9vcGVuLAogCS5yZWxlYXNlID0JZGVidWdfYnVmZmVyX3JlbGVhc2UsCiAJLnJlYWQgPQkJZGVidWdfYnVmZmVyX3JlYWQsCkBAIC01MzgsNyArNTM4LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfbWxlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19tbGVfZm9wcyA9IHsKIAkub3BlbiA9CQlkZWJ1Z19tbGVfb3BlbiwKIAkucmVsZWFzZSA9CWRlYnVnX2J1ZmZlcl9yZWxlYXNlLAogCS5yZWFkID0JCWRlYnVnX2J1ZmZlcl9yZWFkLApAQCAtNzQxLDcgKzc0MSw3IEBACiAJcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19sb2NrcmVzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19sb2NrcmVzX2ZvcHMgPSB7CiAJLm9wZW4gPQkJZGVidWdfbG9ja3Jlc19vcGVuLAogCS5yZWxlYXNlID0JZGVidWdfbG9ja3Jlc19yZWxlYXNlLAogCS5yZWFkID0JCXNlcV9yZWFkLApAQCAtOTI1LDcgKzkyNSw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3N0YXRlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19zdGF0ZV9mb3BzID0gewogCS5vcGVuID0JCWRlYnVnX3N0YXRlX29wZW4sCiAJLnJlbGVhc2UgPQlkZWJ1Z19idWZmZXJfcmVsZWFzZSwKIAkucmVhZCA9CQlkZWJ1Z19idWZmZXJfcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL21tYXAuYyBiL2ZzL29jZnMyL21tYXAuYwppbmRleCBiNjA2NDk2Li4zOTczNzYxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9tbWFwLmMKKysrIGIvZnMvb2NmczIvbW1hcC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG9jZnMyX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBvY2ZzMl9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gb2NmczJfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IG9jZnMyX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCA0Y2MzYzg5Li5jMGU0OGFlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTM3Myw3ICszNzMsNyBAQAogfQogI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9vc2JfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX29zYl9kZWJ1Z19mb3BzID0gewogCS5vcGVuID0JCW9jZnMyX29zYl9kZWJ1Z19vcGVuLAogCS5yZWxlYXNlID0Jb2NmczJfZGVidWdfcmVsZWFzZSwKIAkucmVhZCA9CQlvY2ZzMl9kZWJ1Z19yZWFkLApkaWZmIC0tZ2l0IGEvZnMvb21mcy9kaXIuYyBiL2ZzL29tZnMvZGlyLmMKaW5kZXggMzY4MGJhZS4uYjQyZDYyNCAxMDA2NDQKLS0tIGEvZnMvb21mcy9kaXIuYworKysgYi9mcy9vbWZzL2Rpci5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAkucm1kaXIgPSBvbWZzX3JtZGlyLAogfTsKIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zID0gewogCS5yZWFkID0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpciA9IG9tZnNfcmVhZGRpciwKIAkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKZGlmZiAtLWdpdCBhL2ZzL29tZnMvZmlsZS5jIGIvZnMvb21mcy9maWxlLmMKaW5kZXggNDg0NWZiYi4uMzk5NDg3YyAxMDA2NDQKLS0tIGEvZnMvb21mcy9maWxlLmMKKysrIGIvZnMvb21mcy9maWxlLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZywgYmxvY2ssIG9tZnNfZ2V0X2Jsb2NrKTsKIH0KIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL29tZnMvb21mcy5oIGIvZnMvb21mcy9vbWZzLmgKaW5kZXggZGY3MTAzOS4uZWJlMmZkYiAxMDA2NDQKLS0tIGEvZnMvb21mcy9vbWZzLmgKKysrIGIvZnMvb21mcy9vbWZzLmgKQEAgLTQ0LDE0ICs0NCwxNCBAQAogZXh0ZXJuIGludCBvbWZzX2NsZWFyX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBibG9jaywgaW50IGNvdW50KTsKIAogLyogZGlyLmMgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZGlyX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9tZnNfZGlyX2lub3BzOwogZXh0ZXJuIGludCBvbWZzX21ha2VfZW1wdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gaW50IG9tZnNfaXNfYmFkKHN0cnVjdCBvbWZzX3NiX2luZm8gKnNiaSwgc3RydWN0IG9tZnNfaGVhZGVyICpoZWFkZXIsCiAJCQl1NjQgZnNibG9jayk7CiAKIC8qIGZpbGUuYyAqLwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvbWZzX2FvcHM7CiBleHRlcm4gdm9pZCBvbWZzX21ha2VfZW1wdHlfdGFibGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZnNldCk7CmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggNTJjNDE1MS4uYWUxN2QwMiAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNzc3LDM2ICs3NzcsNTUgQEAKIHN0YXRpYyBpbnQKIHBpcGVfcmVhZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCS8qIFdlIGNvdWxkIGhhdmUgcGVyaGFwcyB1c2VkIGF0b21pY190LCBidXQgdGhpcyBhbmQgZnJpZW5kcwotCSAgIGJlbG93IGFyZSB0aGUgb25seSBwbGFjZXMuICBTbyBpdCBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZS4gICovCisJaW50IHJldCA9IC1FTk9FTlQ7CisKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCisJaWYgKGlub2RlLT5pX3BpcGUpIHsKKwkJcmV0ID0gMDsKKwkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCX0KKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAogcGlwZV93cml0ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKworCWlmIChpbm9kZS0+aV9waXBlKSB7CisJCXJldCA9IDA7CisJCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKIHBpcGVfcmR3cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7Ci0JaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisKKwlpZiAoaW5vZGUtPmlfcGlwZSkgeworCQlyZXQgPSAwOworCQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkKKwkJCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKwkJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCX0KKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCAwYzZiYzYwLi44MjJjMmQ1IDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC0zMjIsNiArMzIyLDggQEAKIAkJCXAtPm5pdmNzdyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VCisKIHN0cnVjdCBzdGFja19zdGF0cyB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZwlzdGFydHBhZ2U7CkBAIC00MDIsNiArNDA0LDExIEBACiAJCW1tcHV0KG1tKTsKIAl9CiB9CisjZWxzZQorc3RhdGljIHZvaWQgdGFza19zaG93X3N0YWNrX3VzYWdlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworfQorI2VuZGlmCQkvKiBDT05GSUdfTU1VICovCiAKIGludCBwcm9jX3BpZF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsCiAJCQlzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKQEAgLTU2NCw3ICs1NzEsNyBAQAogCQlyc3NsaW0sCiAJCW1tID8gbW0tPnN0YXJ0X2NvZGUgOiAwLAogCQltbSA/IG1tLT5lbmRfY29kZSA6IDAsCi0JCShwZXJtaXR0ZWQpID8gdGFzay0+c3RhY2tfc3RhcnQgOiAwLAorCQkocGVybWl0dGVkICYmIG1tKSA/IHRhc2stPnN0YWNrX3N0YXJ0IDogMCwKIAkJZXNwLAogCQllaXAsCiAJCS8qIFRoZSBzaWduYWwgaW5mb3JtYXRpb24gaGVyZSBpcyBvYnNvbGV0ZS4KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggODM3NDY5YS4uYWY2NDNiNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTI1OTcsOCArMjU5Nyw3IEBACiAJbmFtZS5sZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBwaWQpOwogCWRlbnRyeSA9IGRfaGFzaF9hbmRfbG9va3VwKG1udC0+bW50X3Jvb3QsICZuYW1lKTsKIAlpZiAoZGVudHJ5KSB7Ci0JCWlmICghKGN1cnJlbnQtPmZsYWdzICYgUEZfRVhJVElORykpCi0JCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOworCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOwogCQlkX2Ryb3AoZGVudHJ5KTsKIAkJZHB1dChkZW50cnkpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Byb2Mva2NvcmUuYyBiL2ZzL3Byb2Mva2NvcmUuYwppbmRleCA1NjAxMzM3Li5hNDRhNzg5IDEwMDY0NAotLS0gYS9mcy9wcm9jL2tjb3JlLmMKKysrIGIvZnMvcHJvYy9rY29yZS5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvbWVtaW5mby5jIGIvZnMvcHJvYy9tZW1pbmZvLmMKaW5kZXggYzdiZmY0Zi4uYTY1MjM5YyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9tZW1pbmZvLmMKKysrIGIvZnMvcHJvYy9tZW1pbmZvLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJIlZtYWxsb2NVc2VkOiAgICAlOGx1IGtCXG4iCiAJCSJWbWFsbG9jQ2h1bms6ICAgJThsdSBrQlxuIgogI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRQotCQkiSGFyZHdhcmVDb3JydXB0ZWQ6ICU4bHUga0JcbiIKKwkJIkhhcmR3YXJlQ29ycnVwdGVkOiAlNWx1IGtCXG4iCiAjZW5kaWYKIAkJLAogCQlLKGkudG90YWxyYW0pLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wYWdlLmMgYi9mcy9wcm9jL3BhZ2UuYwppbmRleCAyMjgxYzJjLi41MDMzY2UwIDEwMDY0NAotLS0gYS9mcy9wcm9jL3BhZ2UuYworKysgYi9mcy9wcm9jL3BhZ2UuYwpAQCAtOTQsNiArOTQsNyBAQAogI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTAkxNgogI2RlZmluZSBLUEZfSFVHRQkJMTcKICNkZWZpbmUgS1BGX1VORVZJQ1RBQkxFCQkxOAorI2RlZmluZSBLUEZfSFdQT0lTT04JCTE5CiAjZGVmaW5lIEtQRl9OT1BBR0UJCTIwCiAKICNkZWZpbmUgS1BGX0tTTQkJCTIxCkBAIC0xODAsNiArMTgxLDEwIEBACiAJdSB8PSBrcGZfY29weV9iaXQoaywgS1BGX1VORVZJQ1RBQkxFLAlQR191bmV2aWN0YWJsZSk7CiAJdSB8PSBrcGZfY29weV9iaXQoaywgS1BGX01MT0NLRUQsCVBHX21sb2NrZWQpOwogCisjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCisJdSB8PSBrcGZfY29weV9iaXQoaywgS1BGX0hXUE9JU09OLAlQR19od3BvaXNvbik7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgogCXUgfD0ga3BmX2NvcHlfYml0KGssIEtQRl9VTkNBQ0hFRCwJUEdfdW5jYWNoZWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9yb21mcy9zdG9yYWdlLmMgYi9mcy9yb21mcy9zdG9yYWdlLmMKaW5kZXggYjMyMDhhZC4uNzFlMmI0ZCAxMDA2NDQKLS0tIGEvZnMvcm9tZnMvc3RvcmFnZS5jCisrKyBiL2ZzL3JvbWZzL3N0b3JhZ2UuYwpAQCAtMjUzLDExICsyNTMsMTEgQEAKIAogI2lmZGVmIENPTkZJR19ST01GU19PTl9NVEQKIAlpZiAoc2ItPnNfbXRkKQotCQlyZXR1cm4gcm9tZnNfbXRkX3N0cm5sZW4oc2IsIHBvcywgbGltaXQpOworCQlyZXR1cm4gcm9tZnNfbXRkX3N0cm5sZW4oc2IsIHBvcywgbWF4bGVuKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19ST01GU19PTl9CTE9DSwogCWlmIChzYi0+c19iZGV2KQotCQlyZXR1cm4gcm9tZnNfYmxrX3N0cm5sZW4oc2IsIHBvcywgbGltaXQpOworCQlyZXR1cm4gcm9tZnNfYmxrX3N0cm5sZW4oc2IsIHBvcywgbWF4bGVuKTsKICNlbmRpZgogCXJldHVybiAtRUlPOwogfQpkaWZmIC0tZ2l0IGEvZnMvc2VsZWN0LmMgYi9mcy9zZWxlY3QuYwppbmRleCBhMjAxZmMzLi5mZDM4Y2UyIDEwMDY0NAotLS0gYS9mcy9zZWxlY3QuYworKysgYi9mcy9zZWxlY3QuYwpAQCAtMTUsNiArMTUsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCAyNTI0NzE0Li42MGM3MDJiIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtNDAsNyArNDAsNyBAQAogCXN0cnVjdCBtdXRleAkJCW11dGV4OwogCXZvaWQJCQkJKmJ1ZmZlcjsKIAlpbnQJCQkJbW1hcHBlZDsKLQlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgCSp2bV9vcHM7CisJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CiAJc3RydWN0IGZpbGUJCQkqZmlsZTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQkJbGlzdDsKIH07CkBAIC0zMzEsNyArMzMxLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJpbl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJpbl92bV9vcHMgPSB7CiAJLm9wZW4JCT0gYmluX3ZtYV9vcGVuLAogCS5jbG9zZQkJPSBiaW5fdm1hX2Nsb3NlLAogCS5mYXVsdAkJPSBiaW5fZmF1bHQsCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IDAwNTBmYzQuLmUwMjAxODMgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSAic3lzZnMuaCIKIAogREVGSU5FX01VVEVYKHN5c2ZzX211dGV4KTsKQEAgLTI4NSw2ICsyODYsOSBAQAogCQlzeXNmc19wdXQoc2QtPnNfc3ltbGluay50YXJnZXRfc2QpOwogCWlmIChzeXNmc190eXBlKHNkKSAmIFNZU0ZTX0NPUFlfTkFNRSkKIAkJa2ZyZWUoc2QtPnNfbmFtZSk7CisJaWYgKHNkLT5zX2lhdHRyICYmIHNkLT5zX2lhdHRyLT5pYV9zZWNkYXRhKQorCQlzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChzZC0+c19pYXR0ci0+aWFfc2VjZGF0YSwKKwkJCQkJc2QtPnNfaWF0dHItPmlhX3NlY2RhdGFfbGVuKTsKIAlrZnJlZShzZC0+c19pYXR0cik7CiAJc3lzZnNfZnJlZV9pbm8oc2QtPnNfaW5vKTsKIAlrbWVtX2NhY2hlX2ZyZWUoc3lzZnNfZGlyX2NhY2hlcCwgc2QpOwpAQCAtODk0LDcgKzg5OCw4IEBACiAKIAltdXRleF9sb2NrKCZzeXNmc19yZW5hbWVfbXV0ZXgpOwogCUJVR19PTighc2QtPnNfcGFyZW50KTsKLQluZXdfcGFyZW50X3NkID0gbmV3X3BhcmVudF9rb2JqLT5zZCA/IG5ld19wYXJlbnRfa29iai0+c2QgOiAmc3lzZnNfcm9vdDsKKwluZXdfcGFyZW50X3NkID0gKG5ld19wYXJlbnRfa29iaiAmJiBuZXdfcGFyZW50X2tvYmotPnNkKSA/CisJCW5ld19wYXJlbnRfa29iai0+c2QgOiAmc3lzZnNfcm9vdDsKIAogCWVycm9yID0gMDsKIAlpZiAoc2QtPnNfcGFyZW50ID09IG5ld19wYXJlbnRfc2QpCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggNTYxYTljMC4uZjVlYTQ2ODAgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCXN0cnVjdCBzeXNmc19vcGVuX2RpcmVudCAqb2QsICpuZXdfb2QgPSBOVUxMOwogCiAgcmV0cnk6Ci0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKIAogCWlmICghc2QtPnNfYXR0ci5vcGVuICYmIG5ld19vZCkgewogCQlzZC0+c19hdHRyLm9wZW4gPSBuZXdfb2Q7CkBAIC0yODEsNyArMjgxLDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmYnVmZmVyLT5saXN0LCAmb2QtPmJ1ZmZlcnMpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOwogCiAJaWYgKG9kKSB7CiAJCWtmcmVlKG5ld19vZCk7CkBAIC0zMTUsOCArMzE1LDkgQEAKIAkJCQkgIHN0cnVjdCBzeXNmc19idWZmZXIgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kID0gc2QtPnNfYXR0ci5vcGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrLCBmbGFncyk7CiAKIAlsaXN0X2RlbCgmYnVmZmVyLT5saXN0KTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmb2QtPnJlZmNudCkpCkBAIC0zMjQsNyArMzI1LDcgQEAKIAllbHNlCiAJCW9kID0gTlVMTDsKIAotCXNwaW5fdW5sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrLCBmbGFncyk7CiAKIAlrZnJlZShvZCk7CiB9CkBAIC00NTYsOCArNDU3LDkgQEAKIHZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKIHsKIAlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrLCBmbGFncyk7CiAKIAlvZCA9IHNkLT5zX2F0dHIub3BlbjsKIAlpZiAob2QpIHsKQEAgLTQ2NSw3ICs0NjcsNyBAQAogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9kLT5wb2xsKTsKIAl9CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfbm90aWZ5X2RpcmVudCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2ZpbGUuYyBiL2ZzL3ViaWZzL2ZpbGUuYwppbmRleCAyZTY0ODFhLi4xMDA5YWRjIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9maWxlLmMKKysrIGIvZnMvdWJpZnMvZmlsZS5jCkBAIC0xNTM0LDcgKzE1MzQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWJpZnNfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHViaWZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdCAgICAgICAgPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUgPSB1Ymlmc192bV9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDM4MTg1NDQuLmMyZTMwZWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTE4NiwxOSArMTg2LDM3IEBACiB9CiAKIC8qCisgKiBJZiB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGlvZW5kIGlzIGJleW9uZCB0aGUgY3VycmVudCBFT0YsCisgKiByZXR1cm4gdGhlIG5ldyBFT0YgdmFsdWUsIG90aGVyd2lzZSB6ZXJvLgorICovCitTVEFUSUMgeGZzX2ZzaXplX3QKK3hmc19pb2VuZF9uZXdfZW9mKAorCXhmc19pb2VuZF90CQkqaW9lbmQpCit7CisJeGZzX2lub2RlX3QJCSppcCA9IFhGU19JKGlvZW5kLT5pb19pbm9kZSk7CisJeGZzX2ZzaXplX3QJCWlzaXplOworCXhmc19mc2l6ZV90CQlic2l6ZTsKKworCWJzaXplID0gaW9lbmQtPmlvX29mZnNldCArIGlvZW5kLT5pb19zaXplOworCWlzaXplID0gTUFYKGlwLT5pX3NpemUsIGlwLT5pX25ld19zaXplKTsKKwlpc2l6ZSA9IE1JTihpc2l6ZSwgYnNpemUpOworCXJldHVybiBpc2l6ZSA+IGlwLT5pX2QuZGlfc2l6ZSA/IGlzaXplIDogMDsKK30KKworLyoKICAqIFVwZGF0ZSBvbi1kaXNrIGZpbGUgc2l6ZSBub3cgdGhhdCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gZGlzay4KICAqIFRoZSBjdXJyZW50IGluLW1lbW9yeSBmaWxlIHNpemUgaXMgaV9zaXplLiAgSWYgYSB3cml0ZSBpcyBiZXlvbmQKICAqIGVvZiBpX25ld19zaXplIHdpbGwgYmUgdGhlIGludGVuZGVkIGZpbGUgc2l6ZSB1bnRpbCBpX3NpemUgaXMKICAqIHVwZGF0ZWQuICBJZiB0aGlzIHdyaXRlIGRvZXMgbm90IGV4dGVuZCBhbGwgdGhlIHdheSB0byB0aGUgdmFsaWQKICAqIGZpbGUgc2l6ZSB0aGVuIHJlc3RyaWN0IHRoaXMgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIHdyaXRlLgogICovCisKIFNUQVRJQyB2b2lkCiB4ZnNfc2V0ZmlsZXNpemUoCiAJeGZzX2lvZW5kX3QJCSppb2VuZCkKIHsKIAl4ZnNfaW5vZGVfdAkJKmlwID0gWEZTX0koaW9lbmQtPmlvX2lub2RlKTsKIAl4ZnNfZnNpemVfdAkJaXNpemU7Ci0JeGZzX2ZzaXplX3QJCWJzaXplOwogCiAJQVNTRVJUKChpcC0+aV9kLmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcpOwogCUFTU0VSVChpb2VuZC0+aW9fdHlwZSAhPSBJT01BUF9SRUFEKTsKQEAgLTIwNiwxNiArMjI0LDEwIEBACiAJaWYgKHVubGlrZWx5KGlvZW5kLT5pb19lcnJvcikpCiAJCXJldHVybjsKIAotCWJzaXplID0gaW9lbmQtPmlvX29mZnNldCArIGlvZW5kLT5pb19zaXplOwotCiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQlpc2l6ZSA9IE1BWChpcC0+aV9zaXplLCBpcC0+aV9uZXdfc2l6ZSk7Ci0JaXNpemUgPSBNSU4oaXNpemUsIGJzaXplKTsKLQotCWlmIChpcC0+aV9kLmRpX3NpemUgPCBpc2l6ZSkgeworCWlzaXplID0geGZzX2lvZW5kX25ld19lb2YoaW9lbmQpOworCWlmIChpc2l6ZSkgewogCQlpcC0+aV9kLmRpX3NpemUgPSBpc2l6ZTsKLQkJaXAtPmlfdXBkYXRlX2NvcmUgPSAxOwogCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKIAl9CiAKQEAgLTQwNCwxMCArNDE2LDE2IEBACiAJc3RydWN0IGJpbwkqYmlvKQogewogCWF0b21pY19pbmMoJmlvZW5kLT5pb19yZW1haW5pbmcpOwotCiAJYmlvLT5iaV9wcml2YXRlID0gaW9lbmQ7CiAJYmlvLT5iaV9lbmRfaW8gPSB4ZnNfZW5kX2JpbzsKIAorCS8qCisJICogSWYgdGhlIEkvTyBpcyBiZXlvbmQgRU9GIHdlIG1hcmsgdGhlIGlub2RlIGRpcnR5IGltbWVkaWF0ZWx5CisJICogYnV0IGRvbid0IHVwZGF0ZSB0aGUgaW5vZGUgc2l6ZSB1bnRpbCBJL08gY29tcGxldGlvbi4KKwkgKi8KKwlpZiAoeGZzX2lvZW5kX25ld19lb2YoaW9lbmQpKQorCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKFhGU19JKGlvZW5kLT5pb19pbm9kZSkpOworCiAJc3VibWl0X2JpbyhXUklURSwgYmlvKTsKIAlBU1NFUlQoIWJpb19mbGFnZ2VkKGJpbywgQklPX0VPUE5PVFNVUFApKTsKIAliaW9fcHV0KGJpbyk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKaW5kZXggOTg4ZDhmOC4uZWZmNjFlMiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHM7CiAKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9haW9fcmVhZCgKQEAgLTE3NiwxNCArMTc2LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5LAogCWludAkJCWRhdGFzeW5jKQogewotCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5vZGUpOwotCWludAkJCWVycm9yOwotCi0JLyogY2FwdHVyZSBzaXplIHVwZGF0ZXMgaW4gSS9PIGNvbXBsZXRpb24gYmVmb3JlIHdyaXRpbmcgdGhlIGlub2RlLiAqLwotCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShkZW50cnktPmRfaW5vZGUpOwogCiAJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lUUlVOQ0FURUQpOwogCXJldHVybiAteGZzX2ZzeW5jKGlwKTsKQEAgLTI4MCw3ICsyNzMsNyBAQAogCS5mc3luYwkJPSB4ZnNfZmlsZV9mc3luYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IHhmc192bV9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCmluZGV4IGRhMDE1OWQuLmNkNDJlZjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKQEAgLTU3LDE5ICs1NywyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpZW1hcC5oPgogCiAvKgotICogQnJpbmcgdGhlIGF0aW1lIGluIHRoZSBYRlMgaW5vZGUgdXB0b2RhdGUuCi0gKiBVc2VkIGJlZm9yZSBsb2dnaW5nIHRoZSBpbm9kZSB0byBkaXNrIG9yIHdoZW4gdGhlIExpbnV4IGlub2RlIGdvZXMgYXdheS4KKyAqIEJyaW5nIHRoZSB0aW1lc3RhbXBzIGluIHRoZSBYRlMgaW5vZGUgdXB0b2RhdGUuCisgKgorICogVXNlZCBiZWZvcmUgd3JpdGluZyB0aGUgaW5vZGUgdG8gZGlzay4KICAqLwogdm9pZAoteGZzX3N5bmNocm9uaXplX2F0aW1lKAoreGZzX3N5bmNocm9uaXplX3RpbWVzKAogCXhmc19pbm9kZV90CSppcCkKIHsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gVkZTX0koaXApOwogCi0JaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX0NMRUFSKSkgewotCQlpcC0+aV9kLmRpX2F0aW1lLnRfc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9zZWM7Ci0JCWlwLT5pX2QuZGlfYXRpbWUudF9uc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9uc2VjOwotCX0KKwlpcC0+aV9kLmRpX2F0aW1lLnRfc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9zZWM7CisJaXAtPmlfZC5kaV9hdGltZS50X25zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2F0aW1lLnR2X25zZWM7CisJaXAtPmlfZC5kaV9jdGltZS50X3NlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfY3RpbWUudHZfc2VjOworCWlwLT5pX2QuZGlfY3RpbWUudF9uc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9jdGltZS50dl9uc2VjOworCWlwLT5pX2QuZGlfbXRpbWUudF9zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX210aW1lLnR2X3NlYzsKKwlpcC0+aV9kLmRpX210aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfbXRpbWUudHZfbnNlYzsKIH0KIAogLyoKQEAgLTEwNiwzMiArMTA5LDIwIEBACiAJaWYgKChmbGFncyAmIFhGU19JQ0hHVElNRV9NT0QpICYmCiAJICAgICF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZ0dikpIHsKIAkJaW5vZGUtPmlfbXRpbWUgPSB0djsKLQkJaXAtPmlfZC5kaV9tdGltZS50X3NlYyA9IChfX2ludDMyX3QpdHYudHZfc2VjOwotCQlpcC0+aV9kLmRpX210aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpdHYudHZfbnNlYzsKIAkJc3luY19pdCA9IDE7CiAJfQogCWlmICgoZmxhZ3MgJiBYRlNfSUNIR1RJTUVfQ0hHKSAmJgogCSAgICAhdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmdHYpKSB7CiAJCWlub2RlLT5pX2N0aW1lID0gdHY7Ci0JCWlwLT5pX2QuZGlfY3RpbWUudF9zZWMgPSAoX19pbnQzMl90KXR2LnR2X3NlYzsKLQkJaXAtPmlfZC5kaV9jdGltZS50X25zZWMgPSAoX19pbnQzMl90KXR2LnR2X25zZWM7CiAJCXN5bmNfaXQgPSAxOwogCX0KIAogCS8qCi0JICogV2UgdXBkYXRlIHRoZSBpX3VwZGF0ZV9jb3JlIGZpZWxkIF9hZnRlcl8gY2hhbmdpbmcKLQkgKiB0aGUgdGltZXN0YW1wcyBpbiBvcmRlciB0byBjb29yZGluYXRlIHByb3Blcmx5IHdpdGgKLQkgKiB4ZnNfaWZsdXNoKCkgc28gdGhhdCB3ZSBkb24ndCBsb3NlIHRpbWVzdGFtcCB1cGRhdGVzLgotCSAqIFRoaXMga2VlcHMgdXMgZnJvbSBoYXZpbmcgdG8gaG9sZCB0aGUgaW5vZGUgbG9jawotCSAqIHdoaWxlIGRvaW5nIHRoaXMuICBXZSB1c2UgdGhlIFNZTkNIUk9OSVpFIG1hY3JvIHRvCi0JICogZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHJlb3JkZXIgdGhlIHVwZGF0ZQotCSAqIG9mIGlfdXBkYXRlX2NvcmUgYWJvdmUgdGhlIHRpbWVzdGFtcCB1cGRhdGVzIGFib3ZlLgorCSAqIFVwZGF0ZSBjb21wbGV0ZSAtIG5vdyBtYWtlIHN1cmUgZXZlcnlvbmUga25vd3MgdGhhdCB0aGUgaW5vZGUKKwkgKiBpcyBkaXJ0eS4KIAkgKi8KLQlpZiAoc3luY19pdCkgewotCQlTWU5DSFJPTklaRSgpOwotCQlpcC0+aV91cGRhdGVfY29yZSA9IDE7CisJaWYgKHN5bmNfaXQpCiAJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoaXApOwotCX0KIH0KIAogLyoKQEAgLTUwNiwxMCArNDk3LDggQEAKIAlzdGF0LT5naWQgPSBpcC0+aV9kLmRpX2dpZDsKIAlzdGF0LT5pbm8gPSBpcC0+aV9pbm87CiAJc3RhdC0+YXRpbWUgPSBpbm9kZS0+aV9hdGltZTsKLQlzdGF0LT5tdGltZS50dl9zZWMgPSBpcC0+aV9kLmRpX210aW1lLnRfc2VjOwotCXN0YXQtPm10aW1lLnR2X25zZWMgPSBpcC0+aV9kLmRpX210aW1lLnRfbnNlYzsKLQlzdGF0LT5jdGltZS50dl9zZWMgPSBpcC0+aV9kLmRpX2N0aW1lLnRfc2VjOwotCXN0YXQtPmN0aW1lLnR2X25zZWMgPSBpcC0+aV9kLmRpX2N0aW1lLnRfbnNlYzsKKwlzdGF0LT5tdGltZSA9IGlub2RlLT5pX210aW1lOworCXN0YXQtPmN0aW1lID0gaW5vZGUtPmlfY3RpbWU7CiAJc3RhdC0+YmxvY2tzID0KIAkJWEZTX0ZTQl9UT19CQihtcCwgaXAtPmlfZC5kaV9uYmxvY2tzICsgaXAtPmlfZGVsYXllZF9ibGtzKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwppbmRleCA0OWU0YTZhLi4wNzIwNTBmIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwpAQCAtNjY3LDcgKzY2Nyw3IEBACiAJCXhpcC0+aV9uZXdfc2l6ZSA9IG5ld19zaXplOwogCiAJaWYgKGxpa2VseSghKGlvZmxhZ3MgJiBJT19JTlZJUykpKQotCQl4ZnNfaWNoZ3RpbWUoeGlwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7CisJCWZpbGVfdXBkYXRlX3RpbWUoZmlsZSk7CiAKIAkvKgogCSAqIElmIHRoZSBvZmZzZXQgaXMgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBmaWxlLCB3ZSBoYXZlIGEgY291cGxlCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwppbmRleCA5ZTQxZjkxLi4zZDRhMGM4IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIC1FUk9GUzsKLQlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwlpZiAob3AgIT0gUV9YUVVPVEFSTSAmJiAhWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQogCQlyZXR1cm4gLUVOT1NZUzsKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCBiZGQ0MWM4Li4xOGE0YjhlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTk3Nyw2ICs5NzcsMjggQEAKIH0KIAogLyoKKyAqIERpcnR5IHRoZSBYRlMgaW5vZGUgd2hlbiBtYXJrX2lub2RlX2RpcnR5X3N5bmMoKSBpcyBjYWxsZWQgc28gdGhhdAorICogd2UgY2F0Y2ggdW5sb2dnZWQgVkZTIGxldmVsIHVwZGF0ZXMgdG8gdGhlIGlub2RlLiBDYXJlIG11c3QgYmUgdGFrZW4KKyAqIGhlcmUgLSB0aGUgdHJhbnNhY3Rpb24gY29kZSBjYWxscyBtYXJrX2lub2RlX2RpcnR5X3N5bmMoKSB0byBtYXJrIHRoZQorICogVkZTIGlub2RlIGRpcnR5IGluIGEgdHJhbnNhY3Rpb24gYW5kIGNsZWFycyB0aGUgaV91cGRhdGVfY29yZSBmaWVsZDsKKyAqIGl0IG11c3QgY2xlYXIgdGhlIGZpZWxkIGFmdGVyIGNhbGxpbmcgbWFya19pbm9kZV9kaXJ0eV9zeW5jKCkgdG8KKyAqIGNvcnJlY3RseSBpbmRpY2F0ZSB0aGF0IHRoZSBkaXJ0eSBzdGF0ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIGludG8gdGhlCisgKiBpbm9kZSBsb2cgaXRlbS4KKyAqCisgKiBXZSBuZWVkIHRoZSBiYXJyaWVyKCkgdG8gbWFpbnRhaW4gY29ycmVjdCBvcmRlcmluZyBiZXR3ZWVuIHVubG9nZ2VkCisgKiB1cGRhdGVzIGFuZCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0IGNvZGUgdGhhdCBjbGVhcnMgdGhlIGlfdXBkYXRlX2NvcmUKKyAqIGZpZWxkLiBUaGlzIHJlcXVpcmVzIGFsbCB1cGRhdGVzIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgbWFya2luZyB0aGUKKyAqIGlub2RlIGRpcnR5LgorICovCitTVEFUSUMgdm9pZAoreGZzX2ZzX2RpcnR5X2lub2RlKAorCXN0cnVjdCBpbm9kZQkqaW5vZGUpCit7CisJYmFycmllcigpOworCVhGU19JKGlub2RlKS0+aV91cGRhdGVfY29yZSA9IDE7Cit9CisKKy8qCiAgKiBBdHRlbXB0IHRvIGZsdXNoIHRoZSBpbm9kZSwgdGhpcyB3aWxsIGFjdHVhbGx5IGZhaWwKICAqIGlmIHRoZSBpbm9kZSBpcyBwaW5uZWQsIGJ1dCB3ZSBkaXJ0eSB0aGUgaW5vZGUgYWdhaW4KICAqIGF0IHRoZSBwb2ludCB3aGVuIGl0IGlzIHVucGlubmVkIGFmdGVyIGEgbG9nIHdyaXRlLApAQCAtMTEyNiw3ICsxMTQ4LDcgQEAKIH0KIAogU1RBVElDIGludAoteGZzX2ZzX3N5bmNfc3VwZXIoCit4ZnNfZnNfc3luY19mcygKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAogCWludAkJCXdhaXQpCiB7CkBAIC0xMTM0LDIzICsxMTU2LDIzIEBACiAJaW50CQkJZXJyb3I7CiAKIAkvKgotCSAqIFRyZWF0IGEgc3luYyBvcGVyYXRpb24gbGlrZSBhIGZyZWV6ZS4gIFRoaXMgaXMgdG8gd29yawotCSAqIGFyb3VuZCBhIHJhY2UgaW4gc3luY19pbm9kZXMoKSB3aGljaCB3b3JrcyBpbiB0d28gcGhhc2VzCi0JICogLSBhbiBhc3luY2hyb25vdXMgZmx1c2gsIHdoaWNoIGNhbiB3cml0ZSBvdXQgYW4gaW5vZGUKLQkgKiB3aXRob3V0IHdhaXRpbmcgZm9yIGZpbGUgc2l6ZSB1cGRhdGVzIHRvIGNvbXBsZXRlLCBhbmQgYQotCSAqIHN5bmNocm9ub3VzIGZsdXNoLCB3aGljaCB3b250IGRvIGFueXRoaW5nIGJlY2F1c2UgdGhlCi0JICogYXN5bmMgZmx1c2ggcmVtb3ZlZCB0aGUgaW5vZGUncyBkaXJ0eSBmbGFnLiAgQWxzbwotCSAqIHN5bmNfaW5vZGVzKCkgd2lsbCBub3Qgc2VlIGFueSBmaWxlcyB0aGF0IGp1c3QgaGF2ZQotCSAqIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucyB0byBiZSBmbHVzaGVkIGJlY2F1c2Ugd2UgZG9uJ3QKLQkgKiBkaXJ0eSB0aGUgTGludXggaW5vZGUgdW50aWwgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIEkvTwotCSAqIGNvbXBsZXRlcy4KKwkgKiBOb3QgbXVjaCB3ZSBjYW4gZG8gZm9yIHRoZSBmaXJzdCBhc3luYyBwYXNzLiAgV3JpdGluZyBvdXQgdGhlCisJICogc3VwZXJibG9jayB3b3VsZCBiZSBjb3VudGVyLXByb2R1Y3RpdmUgYXMgd2UgYXJlIGdvaW5nIHRvIHJlZGlydHkKKwkgKiB3aGVuIHdyaXRpbmcgb3V0IG90aGVyIGRhdGEgYW5kIG1ldGFkYXRhIChhbmQgd3JpdGluZyBvdXQgYSBzaW5nbGUKKwkgKiBibG9jayBpcyBxdWl0ZSBmYXN0IGFueXdheSkuCisJICoKKwkgKiBUcnkgdG8gYXN5bmNocm9ub3VzbHkga2ljayBvZmYgcXVvdGEgc3luY2luZyBhdCBsZWFzdC4KIAkgKi8KLQlpZiAod2FpdCB8fCB1bmxpa2VseShzYi0+c19mcm96ZW4gPT0gU0JfRlJFRVpFX1dSSVRFKSkKLQkJZXJyb3IgPSB4ZnNfcXVpZXNjZV9kYXRhKG1wKTsKLQllbHNlCi0JCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCAwKTsKKwlpZiAoIXdhaXQpIHsKKwkJeGZzX3FtX3N5bmMobXAsIFNZTkNfVFJZTE9DSyk7CisJCXJldHVybiAwOworCX0KIAotCWlmICh1bmxpa2VseShsYXB0b3BfbW9kZSkpIHsKKwllcnJvciA9IHhmc19xdWllc2NlX2RhdGEobXApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1lcnJvcjsKKworCWlmIChsYXB0b3BfbW9kZSkgewogCQlpbnQJcHJldl9zeW5jX3NlcSA9IG1wLT5tX3N5bmNfc2VxOwogCiAJCS8qCkBAIC0xMTY5LDcgKzExOTEsNyBAQAogCQkJCW1wLT5tX3N5bmNfc2VxICE9IHByZXZfc3luY19zZXEpOwogCX0KIAotCXJldHVybiAtZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTE1MzksMTAgKzE1NjEsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB4ZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHsKIAkuYWxsb2NfaW5vZGUJCT0geGZzX2ZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCQk9IHhmc19mc19kZXN0cm95X2lub2RlLAorCS5kaXJ0eV9pbm9kZQkJPSB4ZnNfZnNfZGlydHlfaW5vZGUsCiAJLndyaXRlX2lub2RlCQk9IHhmc19mc193cml0ZV9pbm9kZSwKIAkuY2xlYXJfaW5vZGUJCT0geGZzX2ZzX2NsZWFyX2lub2RlLAogCS5wdXRfc3VwZXIJCT0geGZzX2ZzX3B1dF9zdXBlciwKLQkuc3luY19mcwkJPSB4ZnNfZnNfc3luY19zdXBlciwKKwkuc3luY19mcwkJPSB4ZnNfZnNfc3luY19mcywKIAkuZnJlZXplX2ZzCQk9IHhmc19mc19mcmVlemUsCiAJLnN0YXRmcwkJCT0geGZzX2ZzX3N0YXRmcywKIAkucmVtb3VudF9mcwkJPSB4ZnNfZnNfcmVtb3VudCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwppbmRleCAzMjBiZTZhLi45NjFkZjBhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCkBAIC0zMDksMTEgKzMwOSwxNSBAQAogU1RBVElDIGludAogeGZzX2NvbW1pdF9kdW1teV90cmFucygKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQl1aW50CQkJbG9nX2ZsYWdzKQorCXVpbnQJCQlmbGFncykKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IG1wLT5tX3Jvb3RpcDsKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKIAlpbnQJCQllcnJvcjsKKwlpbnQJCQlsb2dfZmxhZ3MgPSBYRlNfTE9HX0ZPUkNFOworCisJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQorCQlsb2dfZmxhZ3MgfD0gWEZTX0xPR19TWU5DOwogCiAJLyoKIAkgKiBQdXQgYSBkdW1teSB0cmFuc2FjdGlvbiBpbiB0aGUgbG9nIHRvIHRlbGwgcmVjb3ZlcnkKQEAgLTMzMSwxMyArMzM1LDEyIEBACiAJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCXhmc190cmFuc19paG9sZCh0cCwgaXApOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKLQkvKiBYWFgoaGNoKTogaWdub3JpbmcgdGhlIGVycm9yIGhlcmUuLiAqLwogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0KIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCisJLyogdGhlIGxvZyBmb3JjZSBlbnN1cmVzIHRoaXMgdHJhbnNhY3Rpb24gaXMgcHVzaGVkIHRvIGRpc2sgKi8KIAl4ZnNfbG9nX2ZvcmNlKG1wLCAwLCBsb2dfZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogaW50CkBAIC0zODUsNyArMzg4LDIwIEBACiAJZWxzZQogCQlYRlNfQlVGX0FTWU5DKGJwKTsKIAotCXJldHVybiB4ZnNfYndyaXRlKG1wLCBicCk7CisJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBkYXRhIGludGVncml0eSBzeW5jIG1ha2Ugc3VyZSBhbGwgcGVuZGluZyBidWZmZXJzCisJICogYXJlIGZsdXNoZWQgb3V0IGZvciB0aGUgbG9nIGNvdmVyYWdlIGNoZWNrIGJlbG93LgorCSAqLworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKKwkJeGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMSk7CisKKwlpZiAoeGZzX2xvZ19uZWVkX2NvdmVyZWQobXApKQorCQllcnJvciA9IHhmc19jb21taXRfZHVtbXlfdHJhbnMobXAsIGZsYWdzKTsKKwlyZXR1cm4gZXJyb3I7CiAKICBvdXRfYnJlbHNlOgogCXhmc19idWZfcmVsc2UoYnApOwpAQCAtNDE5LDE0ICs0MzUsMTYgQEAKIAkvKiBwdXNoIG5vbi1ibG9ja2luZyAqLwogCXhmc19zeW5jX2RhdGEobXAsIDApOwogCXhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwotCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKIAotCS8qIHB1c2ggYW5kIGJsb2NrICovCisJLyogcHVzaCBhbmQgYmxvY2sgdGlsbCBjb21wbGV0ZSAqLwogCXhmc19zeW5jX2RhdGEobXAsIFNZTkNfV0FJVCk7CiAJeGZzX3FtX3N5bmMobXAsIFNZTkNfV0FJVCk7CiAKKwkvKiBkcm9wIGlub2RlIHJlZmVyZW5jZXMgcGlubmVkIGJ5IGZpbGVzdHJlYW1zICovCisJeGZzX2ZpbGVzdHJlYW1fZmx1c2gobXApOworCiAJLyogd3JpdGUgc3VwZXJibG9jayBhbmQgaG9vdmVyIHVwIHNodXRkb3duIGVycm9ycyAqLwotCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCAwKTsKKwllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19XQUlUKTsKIAogCS8qIGZsdXNoIGRhdGEtb25seSBkZXZpY2VzICovCiAJaWYgKG1wLT5tX3J0ZGV2X3RhcmdwKQpAQCAtNTcwLDggKzU4OCw2IEBACiAJCS8qIGRnYzogZXJyb3JzIGlnbm9yZWQgaGVyZSAqLwogCQllcnJvciA9IHhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwogCQllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19UUllMT0NLKTsKLQkJaWYgKHhmc19sb2dfbmVlZF9jb3ZlcmVkKG1wKSkKLQkJCWVycm9yID0geGZzX2NvbW1pdF9kdW1teV90cmFucyhtcCwgWEZTX0xPR19GT1JDRSk7CiAJfQogCW1wLT5tX3N5bmNfc2VxKys7CiAJd2FrZV91cCgmbXAtPm1fd2FpdF9zaW5nbGVfc3luY190YXNrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCA0ZTQyNzZiLi41ZDFhM2I5IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC04NzYsNyArODc2LDYgQEAKIAkJaXAtPmlfZ2RxdW90ID0gTlVMTDsKIAl9CiAJeGZzX2lwdXQoaXAsIFhGU19JTE9DS19FWENMKTsKLQlJUkVMRShpcCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCA3NDY1ZjllLi5hYjg5YTdlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC0yMDYsMTAgKzIwNiwxMCBAQAogCSAqIHByb2Nlc3MgdGhhdCB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQgb3V0IGZyb20KIAkgKiB1bmRlciBpdC4KIAkgKi8KLQlpZiAoKHNicC0+YnNfY3RpbWUudHZfc2VjICE9IGlwLT5pX2QuZGlfY3RpbWUudF9zZWMpIHx8Ci0JICAgIChzYnAtPmJzX2N0aW1lLnR2X25zZWMgIT0gaXAtPmlfZC5kaV9jdGltZS50X25zZWMpIHx8Ci0JICAgIChzYnAtPmJzX210aW1lLnR2X3NlYyAhPSBpcC0+aV9kLmRpX210aW1lLnRfc2VjKSB8fAotCSAgICAoc2JwLT5ic19tdGltZS50dl9uc2VjICE9IGlwLT5pX2QuZGlfbXRpbWUudF9uc2VjKSkgeworCWlmICgoc2JwLT5ic19jdGltZS50dl9zZWMgIT0gVkZTX0koaXApLT5pX2N0aW1lLnR2X3NlYykgfHwKKwkgICAgKHNicC0+YnNfY3RpbWUudHZfbnNlYyAhPSBWRlNfSShpcCktPmlfY3RpbWUudHZfbnNlYykgfHwKKwkgICAgKHNicC0+YnNfbXRpbWUudHZfc2VjICE9IFZGU19JKGlwKS0+aV9tdGltZS50dl9zZWMpIHx8CisJICAgIChzYnAtPmJzX210aW1lLnR2X25zZWMgIT0gVkZTX0koaXApLT5pX210aW1lLnR2X25zZWMpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCVVNZKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCmluZGV4IGZhOTEzZTQ1Li40MWFkNTM3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKQEAgLTg1NCw2ICs4NTQsNyBAQAogCQkJICovCiAJCQlyYV93YW50ID0gaG93bWFueShidWZzaXplICsgbXAtPm1fZGlyYmxrc2l6ZSwKIAkJCQkJICBtcC0+bV9zYi5zYl9ibG9ja3NpemUpIC0gMTsKKwkJCUFTU0VSVChyYV93YW50ID49IDApOwogCiAJCQkvKgogCQkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhcyBtYW55IGFzIHdlIHdhbnQsIGFuZCB3ZSBoYXZlbid0CkBAIC0xMDg4LDcgKzEwODksOCBAQAogCQkgKi8KIAkJcHRyICs9IGxlbmd0aDsKIAkJY3Vyb2ZmICs9IGxlbmd0aDsKLQkJYnVmc2l6ZSAtPSBsZW5ndGg7CisJCS8qIGJ1ZnNpemUgbWF5IGhhdmUganVzdCBiZWVuIGEgZ3Vlc3M7IGRvbid0IGdvIG5lZ2F0aXZlICovCisJCWJ1ZnNpemUgPSBidWZzaXplID4gbGVuZ3RoID8gYnVmc2l6ZSAtIGxlbmd0aCA6IDA7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IGFiNjRmM2UuLjA3ODU3OTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtODgwLDYgKzg4MCw3IEBACiAJCQkJICogTm90IGluIHJhbmdlIC0gc2F2ZSBsYXN0IHNlYXJjaAogCQkJCSAqIGxvY2F0aW9uIGFuZCBhbGxvY2F0ZSBhIG5ldyBpbm9kZQogCQkJCSAqLworCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKHRjdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAkJCQlwYWctPnBhZ2xfbGVmdHJlYyA9IHRyZWMuaXJfc3RhcnRpbm87CiAJCQkJcGFnLT5wYWdsX3JpZ2h0cmVjID0gcmVjLmlyX3N0YXJ0aW5vOwogCQkJCXBhZy0+cGFnbF9wYWdpbm8gPSBwYWdpbm87CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggYzFkYzdlZi4uYjkyYTRmYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMzA2OCw5ICszMDY4LDkgQEAKIAlTWU5DSFJPTklaRSgpOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgYXRpbWUgZnJvbSB0aGUgTGludXggaW5vZGUuCisJICogTWFrZSBzdXJlIHRvIGdldCB0aGUgbGF0ZXN0IHRpbWVzdGFtcHMgZnJvbSB0aGUgTGludXggaW5vZGUuCiAJICovCi0JeGZzX3N5bmNocm9uaXplX2F0aW1lKGlwKTsKKwl4ZnNfc3luY2hyb25pemVfdGltZXMoaXApOwogCiAJaWYgKFhGU19URVNUX0VSUk9SKGJlMTZfdG9fY3B1KGRpcC0+ZGlfbWFnaWMpICE9IFhGU19ESU5PREVfTUFHSUMsCiAJCQkgICAgICAgbXAsIFhGU19FUlJUQUdfSUZMVVNIXzEsIFhGU19SQU5ET01fSUZMVVNIXzEpKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggMGIzOGI5YS4uNDE1NTVkZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtNTA0LDcgKzUwNCw3IEBACiB2b2lkCQl4ZnNfbG9ja19pbm9kZXMoeGZzX2lub2RlX3QgKiosIGludCwgdWludCk7CiB2b2lkCQl4ZnNfbG9ja190d29faW5vZGVzKHhmc19pbm9kZV90ICosIHhmc19pbm9kZV90ICosIHVpbnQpOwogCi12b2lkCQl4ZnNfc3luY2hyb25pemVfYXRpbWUoeGZzX2lub2RlX3QgKik7Cit2b2lkCQl4ZnNfc3luY2hyb25pemVfdGltZXMoeGZzX2lub2RlX3QgKik7CiB2b2lkCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKHhmc19pbm9kZV90ICopOwogCiAjaWYgZGVmaW5lZChYRlNfSU5PREVfVFJBQ0UpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IDQ3ZDViNjYuLjk3OTRiODcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC0yMzIsNiArMjMyLDE1IEBACiAJbnZlY3MJICAgICA9IDE7CiAKIAkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgbGludXggaW5vZGUgaXMgZGlydHkuIFdlIGRvIHRoaXMgYmVmb3JlCisJICogY2xlYXJpbmcgaV91cGRhdGVfY29yZSBhcyB0aGUgVkZTIHdpbGwgY2FsbCBiYWNrIGludG8KKwkgKiBYRlMgaGVyZSBhbmQgc2V0IGlfdXBkYXRlX2NvcmUsIHNvIHdlIG5lZWQgdG8gZGlydHkgdGhlCisJICogaW5vZGUgZmlyc3Qgc28gdGhhdCB0aGUgb3JkZXJpbmcgb2YgaV91cGRhdGVfY29yZSBhbmQKKwkgKiB1bmxvZ2dlZCBtb2RpZmljYXRpb25zIHN0aWxsIHdvcmtzIGFzIGRlc2NyaWJlZCBiZWxvdy4KKwkgKi8KKwl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKKworCS8qCiAJICogQ2xlYXIgaV91cGRhdGVfY29yZSBpZiB0aGUgdGltZXN0YW1wcyAob3IgYW55IG90aGVyCiAJICogbm9uLXRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9uKSBuZWVkIGZsdXNoaW5nL2xvZ2dpbmcKIAkgKiBhbmQgd2UncmUgYWJvdXQgdG8gbG9nIHRoZW0gd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29yZS4KQEAgLTI2MywxNCArMjcyLDkgQEAKIAl9CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0byBnZXQgdGhlIGxhdGVzdCBhdGltZSBmcm9tIHRoZSBMaW51eCBpbm9kZS4KKwkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgdGltZXN0YW1wcyBmcm9tIHRoZSBMaW51eCBpbm9kZS4KIAkgKi8KLQl4ZnNfc3luY2hyb25pemVfYXRpbWUoaXApOwotCi0JLyoKLQkgKiBtYWtlIHN1cmUgdGhlIGxpbnV4IGlub2RlIGlzIGRpcnR5Ci0JICovCi0JeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhpcCk7CisJeGZzX3N5bmNocm9uaXplX3RpbWVzKGlwKTsKIAogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaXAtPmlfZDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2Yoc3RydWN0IHhmc19pY2Rpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCBiNjhmOTEwLi42MmVmYWIyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTU5LDYgKzU5LDcgQEAKIHsKIAl4ZnNfaWNkaW5vZGVfdAkqZGljOwkvKiBkaW5vZGUgY29yZSBpbmZvIHBvaW50ZXIgKi8KIAl4ZnNfaW5vZGVfdAkqaXA7CQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CiAJaW50CQllcnJvcjsKIAogCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIGlubywKQEAgLTcyLDYgKzczLDcgQEAKIAlBU1NFUlQoaXAtPmlfaW1hcC5pbV9ibGtubyAhPSAwKTsKIAogCWRpYyA9ICZpcC0+aV9kOworCWlub2RlID0gVkZTX0koaXApOwogCiAJLyogeGZzX2lnZXQgcmV0dXJucyB0aGUgZm9sbG93aW5nIHdpdGhvdXQgbmVlZGluZwogCSAqIGZ1cnRoZXIgY2hhbmdlLgpAQCAtODMsMTYgKzg1LDE5IEBACiAJYnVmLT5ic191aWQgPSBkaWMtPmRpX3VpZDsKIAlidWYtPmJzX2dpZCA9IGRpYy0+ZGlfZ2lkOwogCWJ1Zi0+YnNfc2l6ZSA9IGRpYy0+ZGlfc2l6ZTsKKwogCS8qCi0JICogV2UgYXJlIHJlYWRpbmcgdGhlIGF0aW1lIGZyb20gdGhlIExpbnV4IGlub2RlIGJlY2F1c2UgdGhlCi0JICogZGlub2RlIG1pZ2h0IG5vdCBiZSB1cHRvZGF0ZS4KKwkgKiBXZSBuZWVkIHRvIHJlYWQgdGhlIHRpbWVzdGFtcHMgZnJvbSB0aGUgTGludXggaW5vZGUgYmVjYXVzZQorCSAqIHRoZSBWRlMga2VlcHMgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgaW5zdGVhZAorCSAqIG9mIHRlbGxpbmcgdXMgYWJvdXQgdGhlIHVwZGF0ZXMuCiAJICovCi0JYnVmLT5ic19hdGltZS50dl9zZWMgPSBWRlNfSShpcCktPmlfYXRpbWUudHZfc2VjOwotCWJ1Zi0+YnNfYXRpbWUudHZfbnNlYyA9IFZGU19JKGlwKS0+aV9hdGltZS50dl9uc2VjOwotCWJ1Zi0+YnNfbXRpbWUudHZfc2VjID0gZGljLT5kaV9tdGltZS50X3NlYzsKLQlidWYtPmJzX210aW1lLnR2X25zZWMgPSBkaWMtPmRpX210aW1lLnRfbnNlYzsKLQlidWYtPmJzX2N0aW1lLnR2X3NlYyA9IGRpYy0+ZGlfY3RpbWUudF9zZWM7Ci0JYnVmLT5ic19jdGltZS50dl9uc2VjID0gZGljLT5kaV9jdGltZS50X25zZWM7CisJYnVmLT5ic19hdGltZS50dl9zZWMgPSBpbm9kZS0+aV9hdGltZS50dl9zZWM7CisJYnVmLT5ic19hdGltZS50dl9uc2VjID0gaW5vZGUtPmlfYXRpbWUudHZfbnNlYzsKKwlidWYtPmJzX210aW1lLnR2X3NlYyA9IGlub2RlLT5pX210aW1lLnR2X3NlYzsKKwlidWYtPmJzX210aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9tdGltZS50dl9uc2VjOworCWJ1Zi0+YnNfY3RpbWUudHZfc2VjID0gaW5vZGUtPmlfY3RpbWUudHZfc2VjOworCWJ1Zi0+YnNfY3RpbWUudHZfbnNlYyA9IGlub2RlLT5pX2N0aW1lLnR2X25zZWM7CisKIAlidWYtPmJzX3hmbGFncyA9IHhmc19pcDJ4ZmxhZ3MoaXApOwogCWJ1Zi0+YnNfZXh0c2l6ZSA9IGRpYy0+ZGlfZXh0c2l6ZSA8PCBtcC0+bV9zYi5zYl9ibG9ja2xvZzsKIAlidWYtPmJzX2V4dGVudHMgPSBkaWMtPmRpX25leHRlbnRzOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCmluZGV4IDEwOTkzOTUuLmZiMTdmODIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYworKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKQEAgLTE5ODAsNyArMTk4MCw3IEBACiAJCQkJCSJYRlM6IE5VTEwgZHF1b3QgaW4gJXMuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gbmV4dDsKIAkJCX0KLQkJCWlmIChpdGVtLT5yaV9idWZbaV0uaV9sZW4gPCBzaXplb2YoeGZzX2RxYmxrX3QpKSB7CisJCQlpZiAoaXRlbS0+cmlfYnVmW2ldLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7CiAJCQkJY21uX2VycihDRV9BTEVSVCwKIAkJCQkJIlhGUzogZHF1b3QgdG9vIHNtYWxsICglZCkgaW4gJXMuIiwKIAkJCQkJaXRlbS0+cmlfYnVmW2ldLmlfbGVuLCBfX2Z1bmNfXyk7CkBAIC0yNjM1LDcgKzI2MzUsNyBAQAogCQkJIlhGUzogTlVMTCBkcXVvdCBpbiAlcy4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9Ci0JaWYgKGl0ZW0tPnJpX2J1ZlsxXS5pX2xlbiA8IHNpemVvZih4ZnNfZHFibGtfdCkpIHsKKwlpZiAoaXRlbS0+cmlfYnVmWzFdLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7CiAJCWNtbl9lcnIoQ0VfQUxFUlQsCiAJCQkiWEZTOiBkcXVvdCB0b28gc21hbGwgKCVkKSBpbiAlcy4iLAogCQkJaXRlbS0+cmlfYnVmWzFdLmlfbGVuLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jIGIvZnMveGZzL3hmc190cmFuc19haWwuYwppbmRleCBmMzEyNzFjLi4yZmZjNTcwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqZGxpcCA9IE5VTEw7CiAJeGZzX2xvZ19pdGVtX3QJCSptbGlwOwkvKiBwdHIgdG8gbWluaW11bSBsaXAgKi8KKwl4ZnNfbHNuX3QJCXRhaWxfbHNuOwogCiAJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOwogCkBAIC00ODMsOCArNDg0LDE2IEBACiAKIAlpZiAobWxpcCA9PSBkbGlwKSB7CiAJCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKKwkJLyoKKwkJICogSXQgaXMgbm90IHNhZmUgdG8gYWNjZXNzIG1saXAgYWZ0ZXIgdGhlIEFJTCBsb2NrIGlzCisJCSAqIGRyb3BwZWQsIHNvIHdlIG11c3QgZ2V0IGEgY29weSBvZiBsaV9sc24gYmVmb3JlIHdlIGRvCisJCSAqIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBvbiAzMi1iaXQgcGxhdGZvcm1zCisJCSAqIHdoZXJlIGFjY2Vzc2luZyBhbmQgdXBkYXRpbmcgNjQtYml0IHZhbHVlcyBsaWtlIGxpX2xzbgorCQkgKiBpcyBub3QgYXRvbWljLgorCQkgKi8KKwkJdGFpbF9sc24gPSBtbGlwLT5saV9sc247CiAJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIG1saXAtPmxpX2xzbik7CisJCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LCB0YWlsX2xzbik7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwogCX0KQEAgLTUxNCw2ICs1MjMsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqZGxpcDsKIAl4ZnNfbG9nX2l0ZW1fdAkJKm1saXA7CisJeGZzX2xzbl90CQl0YWlsX2xzbjsKIAogCWlmIChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgewogCQltbGlwID0geGZzX2FpbF9taW4oYWlscCk7CkBAIC01MjcsOSArNTM3LDE2IEBACiAKIAkJaWYgKG1saXAgPT0gZGxpcCkgewogCQkJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOworCQkJLyoKKwkJCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyBtbGlwIGFmdGVyIHRoZSBBSUwgbG9jaworCQkJICogaXMgZHJvcHBlZCwgc28gd2UgbXVzdCBnZXQgYSBjb3B5IG9mIGxpX2xzbgorCQkJICogYmVmb3JlIHdlIGRvIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudAorCQkJICogb24gMzItYml0IHBsYXRmb3JtcyB3aGVyZSBhY2Nlc3NpbmcgYW5kIHVwZGF0aW5nCisJCQkgKiA2NC1iaXQgdmFsdWVzIGxpa2UgbGlfbHNuIGlzIG5vdCBhdG9taWMuCisJCQkgKi8KKwkJCXRhaWxfbHNuID0gbWxpcCA/IG1saXAtPmxpX2xzbiA6IDA7CiAJCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCQl4ZnNfbG9nX21vdmVfdGFpbChhaWxwLT54YV9tb3VudCwKLQkJCQkJCShtbGlwID8gbWxpcC0+bGlfbHNuIDogMCkpOworCQkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIHRhaWxfbHNuKTsKIAkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IGE0MzRmMjguLmI1NzJmN2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTI0NzYsMTIgKzI0NzYsNiBAQAogCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSB8fCBpcC0+aV9kZWxheWVkX2Jsa3MgPT0gMCk7CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgYXRpbWUgaW4gdGhlIFhGUyBpbm9kZSBpcyBjb3JyZWN0IGJlZm9yZSBmcmVlaW5nIHRoZQotCSAqIExpbnV4IGlub2RlLgotCSAqLwotCXhmc19zeW5jaHJvbml6ZV9hdGltZShpcCk7Ci0KLQkvKgogCSAqIElmIHdlIGhhdmUgbm90aGluZyB0byBmbHVzaCB3aXRoIHRoaXMgaW5vZGUgdGhlbiBjb21wbGV0ZSB0aGUKIAkgKiB0ZWFyZG93biBub3csIG90aGVyd2lzZSBicmVhayB0aGUgbGluayBiZXR3ZWVuIHRoZSB4ZnMgaW5vZGUgYW5kIHRoZQogCSAqIGxpbnV4IGlub2RlIGFuZCBjbGVhbiB1cCB0aGUgeGZzIGlub2RlIGxhdGVyLiBUaGlzIGF2b2lkcyBmbHVzaGluZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCAxY2VmMTM5Li4zY2Q5Y2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtNzAsNyArNzAsNiBAQAogCUFDUElfQlVTX1RZUEVfUE9XRVIsCiAJQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1IsCiAJQUNQSV9CVVNfVFlQRV9USEVSTUFMLAotCUFDUElfQlVTX1RZUEVfU1lTVEVNLAogCUFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OLAogCUFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OLAogCUFDUElfQlVTX0RFVklDRV9UWVBFX0NPVU5UCkBAIC0xNDIsMTAgKzE0MSw3IEBACiAKIHN0cnVjdCBhY3BpX2RldmljZV9mbGFncyB7CiAJdTMyIGR5bmFtaWNfc3RhdHVzOjE7Ci0JdTMyIGhhcmR3YXJlX2lkOjE7Ci0JdTMyIGNvbXBhdGlibGVfaWRzOjE7CiAJdTMyIGJ1c19hZGRyZXNzOjE7Ci0JdTMyIHVuaXF1ZV9pZDoxOwogCXUzMiByZW1vdmFibGU6MTsKIAl1MzIgZWplY3RhYmxlOjE7CiAJdTMyIGxvY2thYmxlOjE7CkBAIC0xNTQsNyArMTUwLDcgQEAKIAl1MzIgcGVyZm9ybWFuY2VfbWFuYWdlYWJsZToxOwogCXUzMiB3YWtlX2NhcGFibGU6MTsJLyogV2FrZXVwKF9QUlcpIHN1cHBvcnRlZD8gKi8KIAl1MzIgZm9yY2VfcG93ZXJfc3RhdGU6MTsKLQl1MzIgcmVzZXJ2ZWQ6MTk7CisJdTMyIHJlc2VydmVkOjIyOwogfTsKIAogLyogRmlsZSBTeXN0ZW0gKi8KQEAgLTE3MiwyMCArMTY4LDIzIEBACiB0eXBlZGVmIGNoYXIgYWNwaV9kZXZpY2VfbmFtZVs0MF07CiB0eXBlZGVmIGNoYXIgYWNwaV9kZXZpY2VfY2xhc3NbMjBdOwogCitzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNoYXIgKmlkOworfTsKKwogc3RydWN0IGFjcGlfZGV2aWNlX3BucCB7CiAJYWNwaV9idXNfaWQgYnVzX2lkOwkvKiBPYmplY3QgbmFtZSAqLwogCWFjcGlfYnVzX2FkZHJlc3MgYnVzX2FkZHJlc3M7CS8qIF9BRFIgKi8KLQljaGFyICpoYXJkd2FyZV9pZDsJLyogX0hJRCAqLwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwkvKiBfQ0lEcyAqLwogCWNoYXIgKnVuaXF1ZV9pZDsJLyogX1VJRCAqLworCXN0cnVjdCBsaXN0X2hlYWQgaWRzOwkJLyogX0hJRCBhbmQgX0NJRHMgKi8KIAlhY3BpX2RldmljZV9uYW1lIGRldmljZV9uYW1lOwkvKiBEcml2ZXItZGV0ZXJtaW5lZCAqLwogCWFjcGlfZGV2aWNlX2NsYXNzIGRldmljZV9jbGFzczsJLyogICAgICAgICIgICAgICAgICAgKi8KIH07CiAKICNkZWZpbmUgYWNwaV9kZXZpY2VfYmlkKGQpCSgoZCktPnBucC5idXNfaWQpCiAjZGVmaW5lIGFjcGlfZGV2aWNlX2FkcihkKQkoKGQpLT5wbnAuYnVzX2FkZHJlc3MpCi0jZGVmaW5lIGFjcGlfZGV2aWNlX2hpZChkKQkoKGQpLT5wbnAuaGFyZHdhcmVfaWQpCi0jZGVmaW5lIGFjcGlfZGV2aWNlX3VpZChkKQkoKGQpLT5wbnAudW5pcXVlX2lkKQorY2hhciAqYWNwaV9kZXZpY2VfaGlkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKICNkZWZpbmUgYWNwaV9kZXZpY2VfbmFtZShkKQkoKGQpLT5wbnAuZGV2aWNlX25hbWUpCiAjZGVmaW5lIGFjcGlfZGV2aWNlX2NsYXNzKGQpCSgoZCktPnBucC5kZXZpY2VfY2xhc3MpCiAKQEAgLTI2Miw3ICsyNjEsOCBAQAogLyogRGV2aWNlICovCiAKIHN0cnVjdCBhY3BpX2RldmljZSB7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlOworCWludCBkZXZpY2VfdHlwZTsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CQkvKiBubyBoYW5kbGUgZm9yIGZpeGVkIGhhcmR3YXJlICovCiAJc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CkBAIC0zMjIsNiArMzIyLDggQEAKIAogaW50IGFjcGlfYnVzX2dldF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKipkZXZpY2UpOwogdm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB2b2lkICpjb250ZXh0KTsKK2FjcGlfc3RhdHVzIGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGEpOwogaW50IGFjcGlfYnVzX2dldF9zdGF0dXMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogaW50IGFjcGlfYnVzX2dldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqc3RhdGUpOwogaW50IGFjcGlfYnVzX3NldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggMGMzZGQ4Ni4uNDk1ZGM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtNzMsMTQgKzczLDIzIEBACiAjZGVmaW5lIEZfU0VUU0lHCTEwCS8qIGZvciBzb2NrZXRzLiAqLwogI2RlZmluZSBGX0dFVFNJRwkxMQkvKiBmb3Igc29ja2V0cy4gKi8KICNlbmRpZgorCisjaWZuZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBGX0dFVExLNjQKKyNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCisjZGVmaW5lIEZfU0VUTEs2NAkxMworI2RlZmluZSBGX1NFVExLVzY0CTE0CisjZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEZfU0VUT1dOX0VYCi0jZGVmaW5lIEZfU0VUT1dOX0VYCTEyCi0jZGVmaW5lIEZfR0VUT1dOX0VYCTEzCisjZGVmaW5lIEZfU0VUT1dOX0VYCTE1CisjZGVmaW5lIEZfR0VUT1dOX0VYCTE2CiAjZW5kaWYKIAogI2RlZmluZSBGX09XTkVSX1RJRAkwCiAjZGVmaW5lIEZfT1dORVJfUElECTEKLSNkZWZpbmUgRl9PV05FUl9HSUQJMgorI2RlZmluZSBGX09XTkVSX1BHUlAJMgogCiBzdHJ1Y3QgZl9vd25lcl9leCB7CiAJaW50CXR5cGU7CkBAIC0xMzksMTIgKzE0OCw2IEBACiAKICNpZm5kZWYgQ09ORklHXzY0QklUCiAKLSNpZm5kZWYgRl9HRVRMSzY0Ci0jZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLwotI2RlZmluZSBGX1NFVExLNjQJMTMKLSNkZWZpbmUgRl9TRVRMS1c2NAkxNAotI2VuZGlmCi0KICNpZm5kZWYgSEFWRV9BUkNIX1NUUlVDVF9GTE9DSzY0CiAjaWZuZGVmIF9fQVJDSF9GTE9DSzY0X1BBRAogI2RlZmluZSBfX0FSQ0hfRkxPQ0s2NF9QQUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKaW5kZXggOWNjYTM3OC4uNjZkNjEwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fR0VORVJJQ19HUElPX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX0dQSU9fSAogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaGFyZGlycS5oCmluZGV4IDIzYmI0ZGEuLjYyZjU5MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaGFyZGlycS5oCkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBfX3NvZnRpcnFfcGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwogCiAjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCAyOWNhOGY1Li5iNmU4MThmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC03MjEsMTIgKzcyMSwxMiBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwkJCQkJCVwKIAkuZGF0YSA6IEFUKEFERFIoLmRhdGEpIC0gTE9BRF9PRkZTRVQpIHsJCQkJXAogCQlJTklUX1RBU0tfREFUQShpbml0dGFzaykJCQkJXAorCQlOT1NBVkVfREFUQQkJCQkJCVwKKwkJUEFHRV9BTElHTkVEX0RBVEEocGFnZWFsaWduZWQpCQkJCVwKIAkJQ0FDSEVMSU5FX0FMSUdORURfREFUQShjYWNoZWxpbmUpCQkJXAogCQlSRUFEX01PU1RMWV9EQVRBKGNhY2hlbGluZSkJCQkJXAogCQlEQVRBX0RBVEEJCQkJCQlcCiAJCUNPTlNUUlVDVE9SUwkJCQkJCVwKLQkJTk9TQVZFX0RBVEEJCQkJCQlcCi0JCVBBR0VfQUxJR05FRF9EQVRBKHBhZ2VhbGlnbmVkKQkJCQlcCiAJfQogCiAjZGVmaW5lIElOSVRfVEVYVF9TRUNUSU9OKGluaXR0ZXh0X2FsaWduKQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAppbmRleCBhZTFlOWUxLi5iNjkzNDdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTM4Nyw2ICszODcsNyBAQAogICogQGdldF9tb2RlczogZ2V0IG1vZGUgbGlzdCBmb3IgdGhpcyBjb25uZWN0b3IKICAqIEBzZXRfcHJvcGVydHk6IHByb3BlcnR5IGZvciB0aGlzIGNvbm5lY3RvciBtYXkgbmVlZCB1cGRhdGUKICAqIEBkZXN0cm95OiBtYWtlIG9iamVjdCBnbyBhd2F5CisgKiBAZm9yY2U6IG5vdGlmeSB0aGUgZHJpdmVyIHRoZSBjb25uZWN0b3IgaXMgZm9yY2VkIG9uCiAgKgogICogRWFjaCBDUlRDIG1heSBoYXZlIG9uZSBvciBtb3JlIGNvbm5lY3RvcnMgYXR0YWNoZWQgdG8gaXQuICBUaGUgZnVuY3Rpb25zCiAgKiBiZWxvdyBhbGxvdyB0aGUgY29yZSBEUk0gY29kZSB0byBjb250cm9sIGNvbm5lY3RvcnMsIGVudW1lcmF0ZSBhdmFpbGFibGUgbW9kZXMsCkBAIC00MDEsNiArNDAyLDcgQEAKIAlpbnQgKCpzZXRfcHJvcGVydHkpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAogCQkJICAgICB1aW50NjRfdCB2YWwpOwogCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwl2b2lkICgqZm9yY2UpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogfTsKIAogc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHsKQEAgLTQyOSw2ICs0MzEsMTMgQEAKIAl2b2lkICpoZWxwZXJfcHJpdmF0ZTsKIH07CiAKK2VudW0gZHJtX2Nvbm5lY3Rvcl9mb3JjZSB7CisJRFJNX0ZPUkNFX1VOU1BFQ0lGSUVELAorCURSTV9GT1JDRV9PRkYsCisJRFJNX0ZPUkNFX09OLCAgICAgICAgIC8qIGZvcmNlIG9uIGFuYWxvZyBwYXJ0IG5vcm1hbGx5ICovCisJRFJNX0ZPUkNFX09OX0RJR0lUQUwsIC8qIGZvciBEVkktSSB1c2UgZGlnaXRhbCBjb25uZWN0b3IgKi8KK307CisKIC8qKgogICogZHJtX2Nvbm5lY3RvciAtIGNlbnRyYWwgRFJNIGNvbm5lY3RvciBjb250cm9sIHN0cnVjdHVyZQogICogQGNydGM6IENSVEMgdGhpcyBjb25uZWN0b3IgaXMgY3VycmVudGx5IGNvbm5lY3RlZCB0bywgTlVMTCBpZiBub25lCkBAIC00NzgsOSArNDg3LDEyIEBACiAKIAl2b2lkICpoZWxwZXJfcHJpdmF0ZTsKIAorCS8qIGZvcmNlZCBvbiBjb25uZWN0b3IgKi8KKwllbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgZm9yY2U7CiAJdWludDMyX3QgZW5jb2Rlcl9pZHNbRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUl07CiAJdWludDMyX3QgZm9yY2VfZW5jb2Rlcl9pZDsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7IC8qIGN1cnJlbnRseSBhY3RpdmUgZW5jb2RlciAqLworCXZvaWQgKmZiX2hlbHBlcl9wcml2YXRlOwogfTsKIAogLyoqCkBAIC03NDYsNyArNzU4LDcgQEAKIGV4dGVybiBib29sIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHN0cnVjdCBlZGlkICplZGlkKTsKIGV4dGVybiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2N2dF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJaW50IGhkaXNwbGF5LCBpbnQgdmRpc3BsYXksIGludCB2cmVmcmVzaCwKLQkJCQlib29sIHJlZHVjZWQsIGJvb2wgaW50ZXJsYWNlZCk7CisJCQkJYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQsIGJvb2wgbWFyZ2lucyk7CiBleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9ndGZfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCWludCBoZGlzcGxheSwgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCiAJCQkJYm9vbCBpbnRlcmxhY2VkLCBpbnQgbWFyZ2lucyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCmluZGV4IDRjOGRhY2EuLmIyOWUyMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCkBAIC0zOSw2ICszOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCisjaW5jbHVkZSAiZHJtX2ZiX2hlbHBlci5oIgogc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyB7CiAJLyoKIAkgKiBDb250cm9sIHBvd2VyIGxldmVscyBvbiB0aGUgQ1JUQy4gIElmIHRoZSBtb2RlIHBhc3NlZCBpbiBpcwpAQCAtNjAsNiArNjEsOSBAQAogCS8qIE1vdmUgdGhlIGNydGMgb24gdGhlIGN1cnJlbnQgZmIgdG8gdGhlIGdpdmVuIHBvc2l0aW9uICpvcHRpb25hbCogKi8KIAlpbnQgKCptb2RlX3NldF9iYXNlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKIAkJCSAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKTsKKworCS8qIHJlbG9hZCB0aGUgY3VycmVudCBjcnRjIExVVCAqLworCXZvaWQgKCpsb2FkX2x1dCkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIH07CiAKIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgewpAQCAtMTE5LDEwICsxMjMsMTEgQEAKIAllbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZSA9ICh2b2lkICopZnVuY3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKK3N0YXRpYyBpbmxpbmUgaW50IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzICpmdW5jcykKIHsKIAljb25uZWN0b3ItPmhlbHBlcl9wcml2YXRlID0gKHZvaWQgKilmdW5jczsKKwlyZXR1cm4gZHJtX2ZiX2hlbHBlcl9hZGRfY29ubmVjdG9yKGNvbm5lY3Rvcik7CiB9CiAKIGV4dGVybiBpbnQgZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAppbmRleCA4OGZmZmJkLi41OGM4OTJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCkBAIC0zNSw5ICszNSwzMCBAQAogCXN0cnVjdCBkcm1fbW9kZV9zZXQgbW9kZV9zZXQ7CiB9OwogCisKIHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIHsKIAl2b2lkICgqZ2FtbWFfc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKIAkJCSAgdTE2IGJsdWUsIGludCByZWdubyk7CisJdm9pZCAoKmdhbW1hX2dldCkoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCSAgdTE2ICpibHVlLCBpbnQgcmVnbm8pOworfTsKKworLyogbW9kZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAqLworc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlIHsKKwlib29sIHNwZWNpZmllZDsKKwlib29sIHJlZnJlc2hfc3BlY2lmaWVkOworCWJvb2wgYnBwX3NwZWNpZmllZDsKKwlpbnQgeHJlcywgeXJlczsKKwlpbnQgYnBwOworCWludCByZWZyZXNoOworCWJvb2wgcmI7CisJYm9vbCBpbnRlcmxhY2U7CisJYm9vbCBjdnQ7CisJYm9vbCBtYXJnaW5zOworfTsKKworc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yIHsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgY21kbGluZV9tb2RlOwogfTsKIAogc3RydWN0IGRybV9mYl9oZWxwZXIgewpAQCAtNTIsMTEgKzczLDE0IEBACiB9OwogCiBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCBwcmVmZXJyZWRfYnBwLAogCQkJCSAgaW50ICgqZmJfY3JlYXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICAgdWludDMyX3QgZmJfd2lkdGgsCiAJCQkJCQkgICB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9oZWlnaHQsCisJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9icHAsCiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcHRyKSk7CiBpbnQgZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwgaW50IGNydGNfY291bnQsCiAJCQkJICBpbnQgbWF4X2Nvbm4pOwpAQCAtNzcsNiArMTAxLDExIEBACiB2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZSh2b2lkKTsKIHZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCk7Ci12b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoKTsKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdWludDMyX3QgcGl0Y2gsCisJCQkgICAgdWludDMyX3QgZGVwdGgpOworCitpbnQgZHJtX2ZiX2hlbHBlcl9hZGRfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworaW50IGRybV9mYl9oZWxwZXJfcGFyc2VfY29tbWFuZF9saW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IGRybV9mYl9oZWxwZXJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCAzZjZlNTQ1Li5lNmYzYjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC04MCw3ICs4MCw3IEBACiAJezB4MTAwMiwgMHg1MTU4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjAwfSwgXAogCXsweDEwMDIsIDB4NTE1OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMH0sIFwKIAl7MHgxMDAyLCAweDUxNUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCi0JezB4MTAwMiwgMHg1MTVFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAorCXsweDEwMDIsIDB4NTE1RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMHxSQURFT05fU0lOR0xFX0NSVEN9LCBcCiAJezB4MTAwMiwgMHg1NDYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDU0NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NTQ2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCkBAIC0xMTMsNyArMTEzLDcgQEAKIAl7MHgxMDAyLCAweDU5NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKLQl7MHgxMDAyLCAweDU5NjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCisJezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfFJBREVPTl9TSU5HTEVfQ1JUQ30sIFwKIAl7MHgxMDAyLCAweDVhNDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDVhNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg1YTYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IGNmZjRhMTAuLjFmZWVkNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xMjYsNiArMTI2LDcgQEAKIGhlYWRlci15ICs9IG5sODAyMTEuaAogaGVhZGVyLXkgKz0gcGFyYW0uaAogaGVhZGVyLXkgKz0gcGNpX3JlZ3MuaAoraGVhZGVyLXkgKz0gcGVyZl9ldmVudC5oCiBoZWFkZXIteSArPSBwZmtleXYyLmgKIGhlYWRlci15ICs9IHBnLmgKIGhlYWRlci15ICs9IHBoYW50b20uaApAQCAtMzYzLDYgKzM2NCw3IEBACiB1bmlmZGVmLXkgKz0gdmlkZW9kZXYyLmgKIHVuaWZkZWYteSArPSB2aWRlb2Rldi5oCiB1bmlmZGVmLXkgKz0gdmlydGlvX2NvbmZpZy5oCit1bmlmZGVmLXkgKz0gdmlydGlvX2lkcy5oCiB1bmlmZGVmLXkgKz0gdmlydGlvX2Jsay5oCiB1bmlmZGVmLXkgKz0gdmlydGlvX25ldC5oCiB1bmlmZGVmLXkgKz0gdmlydGlvXzlwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaCBiL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaAppbmRleCA4ODAxMzBmLi45MTAxZWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oCkBAIC01Myw3ICs1Myw3IEBACiAJaW50IGN1cnJlbnRfbWVtb3J5OwogCWJvb2wgY2FudF91c2VfYXBlcnR1cmU7CiAJdW5zaWduZWQgbG9uZyBwYWdlX21hc2s7Ci0Jc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CisJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaCBiL2luY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9hbWJhL21tY2kuaAppbmRleCBiNDkwZWNjLi42YjQyNDE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21tYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKQEAgLTEsMTcgKzEsMTggQEAKIC8qCi0gKiAgYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaAorICogIGluY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKICAqLwotI2lmbmRlZiBBU01BUk1fTUFDSF9NTUNfSAotI2RlZmluZSBBU01BUk1fTUFDSF9NTUNfSAorI2lmbmRlZiBBTUJBX01NQ0lfSAorI2RlZmluZSBBTUJBX01NQ0lfSAogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KIAotc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHsKK3N0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGludCBvY3JfbWFzazsJCQkvKiBhdmFpbGFibGUgdm9sdGFnZXMgKi8KIAl1MzIgKCp0cmFuc2xhdGVfdmRkKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGludCk7CiAJdW5zaWduZWQgaW50ICgqc3RhdHVzKShzdHJ1Y3QgZGV2aWNlICopOwogCWludAlncGlvX3dwOwogCWludAlncGlvX2NkOworCXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvcGwwMjIuaCBiL2luY2x1ZGUvbGludXgvYW1iYS9wbDAyMi5oCmluZGV4IGRjYWQwZmYuLmU0ODM2YzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvcGwwMjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvcGwwMjIuaApAQCAtMTM2LDEyICsxMzYsMTIgQEAKIAogLyoqCiAgKiBlbnVtIFNQSSBDbG9jayBQaGFzZSAtIGNsb2NrIHBoYXNlIChNb3Rvcm9sYSBTUEkgaW50ZXJmYWNlIG9ubHkpCi0gKiBAU1NQX0NMS19SSVNJTkdfRURHRTogUmVjZWl2ZSBkYXRhIG9uIHJpc2luZyBlZGdlCi0gKiBAU1NQX0NMS19GQUxMSU5HX0VER0U6IFJlY2VpdmUgZGF0YSBvbiBmYWxsaW5nIGVkZ2UKKyAqIEBTU1BfQ0xLX0ZJUlNUX0VER0U6IFJlY2VpdmUgZGF0YSBvbiBmaXJzdCBlZGdlIHRyYW5zaXRpb24gKGFjdHVhbCBkaXJlY3Rpb24gZGVwZW5kcyBvbiBwb2xhcml0eSkKKyAqIEBTU1BfQ0xLX1NFQ09ORF9FREdFOiBSZWNlaXZlIGRhdGEgb24gc2Vjb25kIGVkZ2UgdHJhbnNpdGlvbiAoYWN0dWFsIGRpcmVjdGlvbiBkZXBlbmRzIG9uIHBvbGFyaXR5KQogICovCiBlbnVtIHNzcF9zcGlfY2xrX3BoYXNlIHsKLQlTU1BfQ0xLX1JJU0lOR19FREdFLAotCVNTUF9DTEtfRkFMTElOR19FREdFCisJU1NQX0NMS19GSVJTVF9FREdFLAorCVNTUF9DTEtfU0VDT05EX0VER0UKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggNjI5OWEyNS4uNGZiMzU3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC0zMzQsOSArMzM0LDEyIEBACiAJU0VURkVBVFVSRVNfU0FUQV9ESVNBQkxFID0gMHg5MCwgLyogRGlzYWJsZSB1c2Ugb2YgU0FUQSBmZWF0dXJlICovCiAKIAkvKiBTRVRGRUFUVVJFIFNlY3RvciBjb3VudHMgZm9yIFNBVEEgZmVhdHVyZXMgKi8KLQlTQVRBX0FOCQkJPSAweDA1LCAgLyogQXN5bmNocm9ub3VzIE5vdGlmaWNhdGlvbiAqLwotCVNBVEFfRElQTQkJPSAweDAzLCAgLyogRGV2aWNlIEluaXRpYXRlZCBQb3dlciBNYW5hZ2VtZW50ICovCi0JU0FUQV9GUERNQV9BQQkJPSAweDAyLCAgLyogRE1BIFNldHVwIEZJUyBBdXRvLUFjdGl2YXRlICovCisJU0FUQV9GUERNQV9PRkZTRVQJPSAweDAxLAkvKiBGUERNQSBub24temVybyBidWZmZXIgb2Zmc2V0cyAqLworCVNBVEFfRlBETUFfQUEJCT0gMHgwMiwgLyogRlBETUEgU2V0dXAgRklTIEF1dG8tQWN0aXZhdGUgKi8KKwlTQVRBX0RJUE0JCT0gMHgwMywJLyogRGV2aWNlIEluaXRpYXRlZCBQb3dlciBNYW5hZ2VtZW50ICovCisJU0FUQV9GUERNQV9JTl9PUkRFUgk9IDB4MDQsCS8qIEZQRE1BIGluLW9yZGVyIGRhdGEgZGVsaXZlcnkgKi8KKwlTQVRBX0FOCQkJPSAweDA1LAkvKiBBc3luY2hyb25vdXMgTm90aWZpY2F0aW9uICovCisJU0FUQV9TU1AJCT0gMHgwNiwJLyogU29mdHdhcmUgU2V0dGluZ3MgUHJlc2VydmF0aW9uICovCiAKIAkvKiBmZWF0dXJlIHZhbHVlcyBmb3IgU0VUX01BWCAqLwogCUFUQV9TRVRfTUFYX0FERFIJPSAweDAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCmluZGV4IDBlZTMzYzIuLmI0NDllNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKQEAgLTEwMSw3ICsxMDEsOCBAQAogCQljb25zdCBjaGFyICpmbXQsIC4uLik7CiBpbnQgYmRpX3JlZ2lzdGVyX2RldihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBkZXZfdCBkZXYpOwogdm9pZCBiZGlfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKTsKLXZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIG5yX3BhZ2VzKTsKK3ZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCWxvbmcgbnJfcGFnZXMpOwogaW50IGJkaV93cml0ZWJhY2tfdGFzayhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpOwogaW50IGJkaV9oYXNfZGlydHlfaW8oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCmluZGV4IDc5Y2EyZGEuLjBmNWY1NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaApAQCAtMjcsNiArMjcsMTEgQEAKICAqIEFueSBvdGhlciB1c2Ugb2YgdGhlIGxvY2tzIGJlbG93IGlzIHByb2JhYmx5IHdyb25nLgogICovCiAKK2VudW0gYmFja2xpZ2h0X3VwZGF0ZV9yZWFzb24geworCUJBQ0tMSUdIVF9VUERBVEVfSE9US0VZLAorCUJBQ0tMSUdIVF9VUERBVEVfU1lTRlMsCit9OworCiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZTsKIHN0cnVjdCBmYl9pbmZvOwogCkBAIC0xMDAsNiArMTA1LDggQEAKIGV4dGVybiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLAogCXN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGV2ZGF0YSwgc3RydWN0IGJhY2tsaWdodF9vcHMgKm9wcyk7CiBleHRlcm4gdm9pZCBiYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKTsKK2V4dGVybiB2b2lkIGJhY2tsaWdodF9mb3JjZV91cGRhdGUoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJCSAgIGVudW0gYmFja2xpZ2h0X3VwZGF0ZV9yZWFzb24gcmVhc29uKTsKIAogI2RlZmluZSB0b19iYWNrbGlnaHRfZGV2aWNlKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UsIGRldikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggZTIzYTg2Yy4uMjIxY2VjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC04Miw3ICs4Miw2IEBACiBlbnVtIHsKIAlSRVFfTEJfT1BfRUpFQ1QJPSAweDQwLAkJLyogZWplY3QgcmVxdWVzdCAqLwogCVJFUV9MQl9PUF9GTFVTSCA9IDB4NDEsCQkvKiBmbHVzaCByZXF1ZXN0ICovCi0JUkVRX0xCX09QX0RJU0NBUkQgPSAweDQyLAkvKiBkaXNjYXJkIHNlY3RvcnMgKi8KIH07CiAKIC8qCkBAIC0yNjEsNyArMjYwLDYgQEAKIHR5cGVkZWYgaW50IChtYWtlX3JlcXVlc3RfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKTsKIHR5cGVkZWYgaW50IChwcmVwX3JxX2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIHZvaWQgKHVucGx1Z19mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwotdHlwZWRlZiBpbnQgKHByZXBhcmVfZGlzY2FyZF9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogCiBzdHJ1Y3QgYmlvX3ZlYzsKIHN0cnVjdCBidmVjX21lcmdlX2RhdGEgewpAQCAtMzEzLDYgKzMxMSw3IEBACiAJdW5zaWduZWQgaW50CQlhbGlnbm1lbnRfb2Zmc2V0OwogCXVuc2lnbmVkIGludAkJaW9fbWluOwogCXVuc2lnbmVkIGludAkJaW9fb3B0OworCXVuc2lnbmVkIGludAkJbWF4X2Rpc2NhcmRfc2VjdG9yczsKIAogCXVuc2lnbmVkIHNob3J0CQlsb2dpY2FsX2Jsb2NrX3NpemU7CiAJdW5zaWduZWQgc2hvcnQJCW1heF9od19zZWdtZW50czsKQEAgLTM0MCw3ICszMzksNiBAQAogCW1ha2VfcmVxdWVzdF9mbgkJKm1ha2VfcmVxdWVzdF9mbjsKIAlwcmVwX3JxX2ZuCQkqcHJlcF9ycV9mbjsKIAl1bnBsdWdfZm4JCSp1bnBsdWdfZm47Ci0JcHJlcGFyZV9kaXNjYXJkX2ZuCSpwcmVwYXJlX2Rpc2NhcmRfZm47CiAJbWVyZ2VfYnZlY19mbgkJKm1lcmdlX2J2ZWNfZm47CiAJcHJlcGFyZV9mbHVzaF9mbgkqcHJlcGFyZV9mbHVzaF9mbjsKIAlzb2Z0aXJxX2RvbmVfZm4JCSpzb2Z0aXJxX2RvbmVfZm47CkBAIC00NjAsNiArNDU4LDcgQEAKICNkZWZpbmUgUVVFVUVfRkxBR19WSVJUICAgICAgICBRVUVVRV9GTEFHX05PTlJPVCAvKiBwYXJhdmlydCBkZXZpY2UgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19JT19TVEFUICAgICAxNQkvKiBkbyBJTyBzdGF0cyAqLwogI2RlZmluZSBRVUVVRV9GTEFHX0NRCSAgICAgICAxNgkvKiBoYXJkd2FyZSBkb2VzIHF1ZXVpbmcgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNwkvKiBzdXBwb3J0cyBESVNDQVJEICovCiAKICNkZWZpbmUgUVVFVUVfRkxBR19ERUZBVUxUCSgoMSA8PCBRVUVVRV9GTEFHX0lPX1NUQVQpIHwJCVwKIAkJCQkgKDEgPDwgUVVFVUVfRkxBR19DTFVTVEVSKSB8CQlcCkBAIC01OTEsNiArNTkwLDcgQEAKICNkZWZpbmUgYmxrX3F1ZXVlX2ZsdXNoaW5nKHEpCSgocSktPm9yZHNlcSkKICNkZWZpbmUgYmxrX3F1ZXVlX3N0YWNrYWJsZShxKQlcCiAJdGVzdF9iaXQoUVVFVUVfRkxBR19TVEFDS0FCTEUsICYocSktPnF1ZXVlX2ZsYWdzKQorI2RlZmluZSBibGtfcXVldWVfZGlzY2FyZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX0RJU0NBUkQsICYocSktPnF1ZXVlX2ZsYWdzKQogCiAjZGVmaW5lIGJsa19mc19yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCiAjZGVmaW5lIGJsa19wY19yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpCkBAIC05MjksNiArOTI5LDggQEAKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIHNob3J0KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJdW5zaWduZWQgaW50IG1heF9kaXNjYXJkX3NlY3RvcnMpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKQEAgLTk1NSw3ICs5NTcsNiBAQAogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzb2Z0aXJxX2RvbmVfZm4gKik7Ci1leHRlcm4gdm9pZCBibGtfcXVldWVfc2V0X2Rpc2NhcmQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgcHJlcGFyZV9kaXNjYXJkX2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3JxX3RpbWVkX291dChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBycV90aW1lZF9vdXRfZm4gKik7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfcnFfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpibGtfZ2V0X2JhY2tpbmdfZGV2X2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7CkBAIC0xMDgwLDI1ICsxMDgxLDM3IEBACiAJcmV0dXJuIHEtPmxpbWl0cy5waHlzaWNhbF9ibG9ja19zaXplOwogfQogCitzdGF0aWMgaW5saW5lIGludCBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShiZGV2X2dldF9xdWV1ZShiZGV2KSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHF1ZXVlX2lvX21pbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlyZXR1cm4gcS0+bGltaXRzLmlvX21pbjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9pb19taW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfaW9fbWluKGJkZXZfZ2V0X3F1ZXVlKGJkZXYpKTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcXVldWVfaW9fb3B0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCXJldHVybiBxLT5saW1pdHMuaW9fb3B0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBiZGV2X2lvX29wdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXJldHVybiBxdWV1ZV9pb19vcHQoYmRldl9nZXRfcXVldWUoYmRldikpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewotCWlmIChxICYmIHEtPmxpbWl0cy5taXNhbGlnbmVkKQorCWlmIChxLT5saW1pdHMubWlzYWxpZ25lZCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHEgJiYgcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQpCi0JCXJldHVybiBxLT5saW1pdHMuYWxpZ25tZW50X29mZnNldDsKLQotCXJldHVybiAwOworCXJldHVybiBxLT5saW1pdHMuYWxpZ25tZW50X29mZnNldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcXVldWVfc2VjdG9yX2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCkBAIC0xMTA4LDYgKzExMjEsMTkgQEAKIAkJJiAocS0+bGltaXRzLmlvX21pbiAtIDEpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBiZGV2X2FsaWdubWVudF9vZmZzZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOworCisJaWYgKHEtPmxpbWl0cy5taXNhbGlnbmVkKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKKwkJcmV0dXJuIGJkZXYtPmJkX3BhcnQtPmFsaWdubWVudF9vZmZzZXQ7CisKKwlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJcmV0dXJuIHEgPyBxLT5kbWFfYWxpZ25tZW50IDogNTExOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggN2U0MzUwZS4uM2I3M2I5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0xOTgsNiArMTk4LDcgQEAKIAkJCSAgIGNoYXIgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpOwogZXh0ZXJuIGludCBibGtfdHJhY2VfcmVtb3ZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKK2V4dGVybiB2b2lkIGJsa190cmFjZV9yZW1vdmVfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX2luaXRfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2KTsKIAogZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYmxrX3RyYWNlX2F0dHJfZ3JvdXA7CkBAIC0yMTEsNiArMjEyLDcgQEAKICMgZGVmaW5lIGJsa190cmFjZV9zdGFydHN0b3AocSwgc3RhcnQpCQkJKC1FTk9UVFkpCiAjIGRlZmluZSBibGtfdHJhY2VfcmVtb3ZlKHEpCQkJCSgtRU5PVFRZKQogIyBkZWZpbmUgYmxrX2FkZF90cmFjZV9tc2cocSwgZm10LCAuLi4pCQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgYmxrX3RyYWNlX3JlbW92ZV9zeXNmcyhkZXYpCQkJZG8geyB9IHdoaWxlICgwKQogc3RhdGljIGlubGluZSBpbnQgYmxrX3RyYWNlX2luaXRfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggYjYyYmI5Mi4uMDAwOGRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC0zNyw3ICszNyw3IEBACiBleHRlcm4gaW50IGNncm91cHN0YXRzX2J1aWxkKHN0cnVjdCBjZ3JvdXBzdGF0cyAqc3RhdHMsCiAJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnM7CiAKIC8qIERlZmluZSB0aGUgZW51bWVyYXRpb24gb2YgYWxsIGNncm91cCBzdWJzeXN0ZW1zICovCiAjZGVmaW5lIFNVQlNZUyhfeCkgX3ggIyMgX3N1YnN5c19pZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKaW5kZXggNDQ3MTdlYi4uNzlhMjM0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTI5MSw4ICsyOTEsMTUgQEAKIGludCBjcHVmcmVxX2dldF9wb2xpY3koc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBjcHUpOwogaW50IGNwdWZyZXFfdXBkYXRlX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KTsKIAorI2lmZGVmIENPTkZJR19DUFVfRlJFUQogLyogcXVlcnkgdGhlIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSAoaW4ga0h6KS4gSWYgemVybywgY3B1ZnJlcSBjb3VsZG4ndCBkZXRlY3QgaXQgKi8KIHVuc2lnbmVkIGludCBjcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKIC8qIHF1ZXJ5IHRoZSBsYXN0IGtub3duIENQVSBmcmVxIChpbiBrSHopLiBJZiB6ZXJvLCBjcHVmcmVxIGNvdWxkbid0IGRldGVjdCBpdCAqLwogI2lmZGVmIENPTkZJR19DUFVfRlJFUQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggYWNhMzFiZi4uMmVhM2U0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xMjQsNyArMTI0LDkgQEAKIAlzdHJ1Y3QgYnVzX3R5cGUJCSpidXM7CiAKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7Ci0JY29uc3QgY2hhciAJCSptb2RfbmFtZTsJLyogdXNlZCBmb3IgYnVpbHQtaW4gbW9kdWxlcyAqLworCWNvbnN0IGNoYXIJCSptb2RfbmFtZTsJLyogdXNlZCBmb3IgYnVpbHQtaW4gbW9kdWxlcyAqLworCisJYm9vbCBzdXBwcmVzc19iaW5kX2F0dHJzOwkvKiBkaXNhYmxlcyBiaW5kL3VuYmluZCB2aWEgc3lzZnMgKi8KIAogCWludCAoKnByb2JlKSAoc3RydWN0IGRldmljZSAqZGV2KTsKIAlpbnQgKCpyZW1vdmUpIChzdHJ1Y3QgZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGYuaCBiL2luY2x1ZGUvbGludXgvZWxmLmgKaW5kZXggNDVhOTM3Yi4uOTBhNGVkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi5oCkBAIC0zNjEsNiArMzYxLDcgQEAKICNkZWZpbmUgTlRfUFBDX1ZTWAkweDEwMgkJLyogUG93ZXJQQyBWU1ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UXzM4Nl9UTFMJMHgyMDAJCS8qIGkzODYgVExTIHNsb3RzIChzdHJ1Y3QgdXNlcl9kZXNjKSAqLwogI2RlZmluZSBOVF8zODZfSU9QRVJNCTB4MjAxCQkvKiB4ODYgaW8gcGVybWlzc2lvbiBiaXRtYXAgKDE9ZGVueSkgKi8KKyNkZWZpbmUgTlRfUFJYU1RBVFVTCTB4MzAwCQkvKiBzMzkwIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcyAqLwogCiAKIC8qIE5vdGUgaGVhZGVyIGluIGEgUFRfTk9URSBzZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaAppbmRleCBjYTFiZmU5Li45M2U3NDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKQEAgLTEzNyw2ICsxMzcsMTQgQEAKIAkgKiBieSBvdGhlciBtZWFucywgc28gd2UgaGF2ZSB0cnVuY2F0ZV9tdXRleC4KIAkgKi8KIAlzdHJ1Y3QgbXV0ZXggdHJ1bmNhdGVfbXV0ZXg7CisKKwkvKgorCSAqIFRyYW5zYWN0aW9ucyB0aGF0IGNvbnRhaW4gaW5vZGUncyBtZXRhZGF0YSBuZWVkZWQgdG8gY29tcGxldGUKKwkgKiBmc3luYyBhbmQgZmRhdGFzeW5jLCByZXNwZWN0aXZlbHkuCisJICovCisJYXRvbWljX3QgaV9zeW5jX3RpZDsKKwlhdG9taWNfdCBpX2RhdGFzeW5jX3RpZDsKKwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggZjg0N2RmOS4uZGU5YzcyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtMTMzLDYgKzEzMyw3IEBACiAjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjIzMCA5NgkvKiBOZW9NYWdpYyBOTTIyMzAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjM2MCA5NwkvKiBOZW9NYWdpYyBOTTIzNjAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjM4MCA5OAkvKiBOZW9NYWdpYyBOTTIzODAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZCX0FDQ0VMX1BYQTNYWAkJIDk5CS8qIFBYQTN4eAkJCSovCiAKICNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFNCAgICAgICAgMHg4MAkvKiBTMyBTYXZhZ2U0ICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTNEICAgICAgIDB4ODEJLyogUzMgU2F2YWdlM0QgICAgICAgICAgICAgICAgICAqLwpAQCAtNjY4LDEyICs2NjksNiBAQAogCS8qIHBlcmZvcm0gZmIgc3BlY2lmaWMgbW1hcCAqLwogCWludCAoKmZiX21tYXApKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKLQkvKiBzYXZlIGN1cnJlbnQgaGFyZHdhcmUgc3RhdGUgKi8KLQl2b2lkICgqZmJfc2F2ZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwotCi0JLyogcmVzdG9yZSBzYXZlZCBzdGF0ZSAqLwotCXZvaWQgKCpmYl9yZXN0b3JlX3N0YXRlKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0KIAkvKiBnZXQgY2FwYWJpbGl0eSBnaXZlbiB2YXIgKi8KIAl2b2lkICgqZmJfZ2V0X2NhcHMpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfYmxpdF9jYXBzICpjYXBzLAogCQkJICAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAyYWRhYTI1Li4yNjIwYThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0zMDAsNiArMzAwLDEwIEBACiAjZGVmaW5lIEJMS1RSQUNFU1RPUCBfSU8oMHgxMiwxMTcpCiAjZGVmaW5lIEJMS1RSQUNFVEVBUkRPV04gX0lPKDB4MTIsMTE4KQogI2RlZmluZSBCTEtESVNDQVJEIF9JTygweDEyLDExOSkKKyNkZWZpbmUgQkxLSU9NSU4gX0lPKDB4MTIsMTIwKQorI2RlZmluZSBCTEtJT09QVCBfSU8oMHgxMiwxMjEpCisjZGVmaW5lIEJMS0FMSUdOT0ZGIF9JTygweDEyLDEyMikKKyNkZWZpbmUgQkxLUEJTWkdFVCBfSU8oMHgxMiwxMjMpCiAKICNkZWZpbmUgQk1BUF9JT0NUTCAxCQkvKiBvYnNvbGV0ZSAtIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgRklCTUFQCSAgIF9JTygweDAwLDEpCS8qIGJtYXAgYWNjZXNzICovCkBAIC0yNDQ2LDcgKzI0NTAsNyBAQAogCV9fc2ltcGxlX2F0dHJfY2hlY2tfZm9ybWF0KF9fZm10LCAwdWxsKTsJCQlcCiAJcmV0dXJuIHNpbXBsZV9hdHRyX29wZW4oaW5vZGUsIGZpbGUsIF9fZ2V0LCBfX3NldCwgX19mbXQpOwlcCiB9CQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBfX2ZvcHMgPSB7CQkJCVwKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCQkJCQkJXAogCS5vcGVuCSA9IF9fZm9wcyAjIyBfb3BlbiwJCQkJCVwKIAkucmVsZWFzZSA9IHNpbXBsZV9hdHRyX3JlbGVhc2UsCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCBjZDNkMmFiLi4wYjRmOTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogIyBkZWZpbmUgZnRyYWNlX3NldF9maWx0ZXIoYnVmLCBsZW4sIHJlc2V0KQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2VfZGlzYWJsZV9kYWVtb24oKQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX2VuYWJsZV9kYWVtb24oKQkJCWRvIHsgfSB3aGlsZSAoMCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcmVsZWFzZV9tb2Qoc3RydWN0IG1vZHVsZSAqbW9kKSB7fQogc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKmNtZCkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnV0ZXguaCBiL2luY2x1ZGUvbGludXgvZnV0ZXguaAppbmRleCA4ZWMxNzk5Li4xZTVhMjZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdXRleC5oCkBAIC0zMyw4ICszMyw4IEBACiAjZGVmaW5lIEZVVEVYX0xPQ0tfUElfUFJJVkFURQkoRlVURVhfTE9DS19QSSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfVU5MT0NLX1BJX1BSSVZBVEUJKEZVVEVYX1VOTE9DS19QSSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfVFJZTE9DS19QSV9QUklWQVRFIChGVVRFWF9UUllMT0NLX1BJIHwgRlVURVhfUFJJVkFURV9GTEFHKQotI2RlZmluZSBGVVRFWF9XQUlUX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUlUX0JJVFMgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCi0jZGVmaW5lIEZVVEVYX1dBS0VfQklUU0VUX1BSSVZBVEUJKEZVVEVYX1dBS0VfQklUUyB8IEZVVEVYX1BSSVZBVEVfRkxBRykKKyNkZWZpbmUgRlVURVhfV0FJVF9CSVRTRVRfUFJJVkFURQkoRlVURVhfV0FJVF9CSVRTRVQgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1dBS0VfQklUU0VUX1BSSVZBVEUJKEZVVEVYX1dBS0VfQklUU0VUIHwgRlVURVhfUFJJVkFURV9GTEFHKQogI2RlZmluZSBGVVRFWF9XQUlUX1JFUVVFVUVfUElfUFJJVkFURQkoRlVURVhfV0FJVF9SRVFVRVVFX1BJIHwgXAogCQkJCQkgRlVURVhfUFJJVkFURV9GTEFHKQogI2RlZmluZSBGVVRFWF9DTVBfUkVRVUVVRV9QSV9QUklWQVRFCShGVVRFWF9DTVBfUkVRVUVVRV9QSSB8IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMTFhYjE5YS4uNDFhNTlhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKQEAgLTMsMTUgKzMsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKK3N0cnVjdCBjdGxfdGFibGU7CitzdHJ1Y3QgdXNlcl9zdHJ1Y3Q7CisKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAKICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9zaG0uaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAotc3RydWN0IGN0bF90YWJsZTsKLXN0cnVjdCB1c2VyX3N0cnVjdDsKLQogaW50IFBhZ2VIdWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIAogc3RhdGljIGlubGluZSBpbnQgaXNfdm1faHVnZXRsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpAQCAtMTYzLDcgKzE2Myw3IEBACiB9CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGh1Z2V0bGJfdm1fb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wczsKIHN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIGludCBhY2N0LAogCQkJCXN0cnVjdCB1c2VyX3N0cnVjdCAqKnVzZXIsIGludCBjcmVhdF9mbGFncyk7CiBpbnQgaHVnZXRsYl9nZXRfcXVvdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvbmcgZGVsdGEpOwpAQCAtMTg3LDcgKzE4NywxMSBAQAogCiAjZGVmaW5lIGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbGUpCQkJMAogI2RlZmluZSBzZXRfZmlsZV9odWdlcGFnZXMoZmlsZSkJCUJVRygpCi0jZGVmaW5lIGh1Z2V0bGJfZmlsZV9zZXR1cChuYW1lLHNpemUsYWNjdCx1c2VyLGNyZWF0KQlFUlJfUFRSKC1FTk9TWVMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsCisJCWludCBhY2N0ZmxhZywgc3RydWN0IHVzZXJfc3RydWN0ICoqdXNlciwgaW50IGNyZWF0X2ZsYWdzKQoreworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOworfQogCiAjZW5kaWYgLyogIUNPTkZJR19IVUdFVExCRlMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggNTdkNDFiMC4uN2I0MGNkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0zNjEsNiArMzYxLDI0IEBACiAJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgZGF0YSk7CiB9CiAKKy8qKgorICogaTJjX2xvY2tfYWRhcHRlciAtIFByZXZlbnQgYWNjZXNzIHRvIGFuIEkyQyBidXMgc2VnbWVudAorICogQGFkYXB0ZXI6IFRhcmdldCBJMkMgYnVzIHNlZ21lbnQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyY19sb2NrX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCW11dGV4X2xvY2soJmFkYXB0ZXItPmJ1c19sb2NrKTsKK30KKworLyoqCisgKiBpMmNfdW5sb2NrX2FkYXB0ZXIgLSBSZWF1dGhvcml6ZSBhY2Nlc3MgdG8gYW4gSTJDIGJ1cyBzZWdtZW50CisgKiBAYWRhcHRlcjogVGFyZ2V0IEkyQyBidXMgc2VnbWVudAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaTJjX3VubG9ja19hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwltdXRleF91bmxvY2soJmFkYXB0ZXItPmJ1c19sb2NrKTsKK30KKwogLypmbGFncyBmb3IgdGhlIGNsaWVudCBzdHJ1Y3Q6ICovCiAjZGVmaW5lIEkyQ19DTElFTlRfUEVDCTB4MDQJCS8qIFVzZSBQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgKi8KICNkZWZpbmUgSTJDX0NMSUVOVF9URU4JMHgxMAkJLyogd2UgaGF2ZSBhIHRlbiBiaXQgY2hpcCBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKaW5kZXggMmQwMmRmZC4uNTA4ODI0ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKQEAgLTM0OSwxMSArMzQ5LDExIEBACiAJaW50CQlpcnFfbGluZTsKIH07CiAKLS8qIEJvYXJkcyBoYXZlIHVuaXFlIG1hcHBpbmdzIG9mIHtjb2wsIHJvd30gLS0+IGtleWNvZGUuCi0gKiBDb2x1bW4gYW5kIHJvdyBhcmUgNCBiaXRzLCBidXQgcmFuZ2Ugb25seSBmcm9tIDAuLjcuCisvKiBCb2FyZHMgaGF2ZSB1bmlxZSBtYXBwaW5ncyBvZiB7cm93LCBjb2x9IC0tPiBrZXljb2RlLgorICogQ29sdW1uIGFuZCByb3cgYXJlIDggYml0cyBlYWNoLCBidXQgcmFuZ2Ugb25seSBmcm9tIDAuLjcuCiAgKiBhIFBFUlNJU1RFTlRfS0VZIGlzICJhbHdheXMgb24iIGFuZCBuZXZlciByZXBvcnRlZC4KICAqLwotI2RlZmluZSBQRVJTSVNURU5UX0tFWShjLCByKQlLRVkoKGMpLCAociksIEtFWV9SRVNFUlZFRCkKKyNkZWZpbmUgUEVSU0lTVEVOVF9LRVkociwgYykJS0VZKChyKSwgKGMpLCBLRVlfUkVTRVJWRUQpCiAKIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHsKIAljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggNDAwYWRiYi4uZmY4YmRlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTI3MSw2ICsyNzEsNyBAQAogI2Vsc2UgLyogTU9EVUxFICovCiAKIC8qIERvbid0IHVzZSB0aGVzZSBpbiBtb2R1bGVzLCBidXQgc29tZSBwZW9wbGUgZG8uLi4gKi8KKyNkZWZpbmUgZWFybHlfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKICNkZWZpbmUgY29yZV9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQogI2RlZmluZSBwb3N0Y29yZV9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQogI2RlZmluZSBhcmNoX2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggMGNjZmMzMC4uYzJiMWE3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMTM3Nyw2ICsxMzc3LDEwIEBACiAgKiBtZXRob2RzOyBlcmFzZSgpIGlzIG9wdGlvbmFsLiBzZXRfZ2FpbigpIGFuZCBzZXRfYXV0b2NlbnRlcigpIG5lZWQKICAqIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgZHJpdmVyIHNldHMgdXAgRkZfR0FJTiBhbmQgRkZfQVVUT0NFTlRFUgogICogYml0cy4KKyAqCisgKiBOb3RlIHRoYXQgcGxheWJhY2soKSwgc2V0X2dhaW4oKSBhbmQgc2V0X2F1dG9jZW50ZXIoKSBhcmUgY2FsbGVkIHdpdGgKKyAqIGRldi0+ZXZlbnRfbG9jayBzcGlubG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIG9mZiBhbmQgdGh1cyBtYXkgbm90CisgKiBzbGVlcC4KICAqLwogc3RydWN0IGZmX2RldmljZSB7CiAJaW50ICgqdXBsb2FkKShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IGI3OGNmODEuLjdjYTcyYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L2lycW5yLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KQEAgLTYxMCw2ICs2MDksNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpIHsgfQogI2VuZGlmCiAKK3N0cnVjdCBzZXFfZmlsZTsKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKIAogc3RydWN0IGlycV9kZXNjOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcGMuaCBiL2luY2x1ZGUvbGludXgvaXBjLmgKaW5kZXggYjg4MjYxMC4uM2IxNTk0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwYy5oCkBAIC03OCw4ICs3OCw2IEBACiAjZGVmaW5lIElQQ0NBTEwodmVyc2lvbixvcCkJKCh2ZXJzaW9uKTw8MTYgfCAob3ApKQogCiAjaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNkZWZpbmUgSVBDTU5JIDMyNzY4ICAvKiA8PSBNQVhfSU5UIGxpbWl0IGZvciBpcGMgYXJyYXlzIChpbmNsdWRpbmcgc3lzY3RsIGNoYW5nZXMpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IDUyNjk1ZDMuLmYxMDExZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC00NjQsOSArNDY0LDkgQEAKICAqLwogc3RydWN0IHRyYW5zYWN0aW9uX2NocF9zdGF0c19zIHsKIAl1bnNpZ25lZCBsb25nCQljc19jaHBfdGltZTsKLQl1bnNpZ25lZCBsb25nCQljc19mb3JjZWRfdG9fY2xvc2U7Ci0JdW5zaWduZWQgbG9uZwkJY3Nfd3JpdHRlbjsKLQl1bnNpZ25lZCBsb25nCQljc19kcm9wcGVkOworCV9fdTMyCQkJY3NfZm9yY2VkX3RvX2Nsb3NlOworCV9fdTMyCQkJY3Nfd3JpdHRlbjsKKwlfX3UzMgkJCWNzX2Ryb3BwZWQ7CiB9OwogCiAvKiBUaGUgdHJhbnNhY3Rpb25fdCB0eXBlIGlzIHRoZSBndXRzIG9mIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbS4gIEl0CkBAIC02NjgsMjMgKzY2OCwxNiBAQAogCXVuc2lnbmVkIGxvbmcJCXJzX2ZsdXNoaW5nOwogCXVuc2lnbmVkIGxvbmcJCXJzX2xvZ2dpbmc7CiAKLQl1bnNpZ25lZCBsb25nCQlyc19oYW5kbGVfY291bnQ7Ci0JdW5zaWduZWQgbG9uZwkJcnNfYmxvY2tzOwotCXVuc2lnbmVkIGxvbmcJCXJzX2Jsb2Nrc19sb2dnZWQ7CisJX191MzIJCQlyc19oYW5kbGVfY291bnQ7CisJX191MzIJCQlyc19ibG9ja3M7CisJX191MzIJCQlyc19ibG9ja3NfbG9nZ2VkOwogfTsKIAogc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgewotCWludCAJCQl0c190eXBlOwogCXVuc2lnbmVkIGxvbmcJCXRzX3RpZDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfcyBydW47Ci0JCXN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyBjaHA7Ci0JfSB1OworCXN0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfcyBydW47CiB9OwogCi0jZGVmaW5lIEpCRDJfU1RBVFNfUlVOCQkxCi0jZGVmaW5lIEpCRDJfU1RBVFNfQ0hFQ0tQT0lOVAkyCi0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogamJkMl90aW1lX2RpZmYodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC05ODgsMTIgKzk4MSw2IEBACiAJLyoKIAkgKiBKb3VybmFsIHN0YXRpc3RpY3MKIAkgKi8KLQlzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcyAqal9oaXN0b3J5OwotCWludAkJCWpfaGlzdG9yeV9tYXg7Ci0JaW50CQkJal9oaXN0b3J5X2N1cjsKLQkvKgotCSAqIFByb3RlY3QgdGhlIHRyYW5zYWN0aW9ucyBzdGF0aXN0aWNzIGhpc3RvcnkKLQkgKi8KIAlzcGlubG9ja190CQlqX2hpc3RvcnlfbG9jazsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmpfcHJvY19lbnRyeTsKIAlzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcyBqX3N0YXRzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggZDNjZDIzZi4uZjRlMzE4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC02NTksNiArNjU5LDEyIEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKKyNpZm5kZWYgX19FWFBPUlRFRF9IRUFERVJTX18KKyNpZm5kZWYgX19LRVJORUxfXworI3dhcm5pbmcgQXR0ZW1wdCB0byB1c2Uga2VybmVsIGhlYWRlcnMgZnJvbSB1c2VyIHNwYWNlLCBzZWUgaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL0tlcm5lbEhlYWRlcnMKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19FWFBPUlRFRF9IRUFERVJTX18gKi8KKwogI2RlZmluZSBTSV9MT0FEX1NISUZUCTE2CiBzdHJ1Y3Qgc3lzaW5mbyB7CiAJbG9uZyB1cHRpbWU7CQkJLyogU2Vjb25kcyBzaW5jZSBib290ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tyZWYuaCBiL2luY2x1ZGUvbGludXgva3JlZi5oCmluZGV4IDBjZWY2YmEuLmIwY2IwZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3JlZi5oCisrKyBiL2luY2x1ZGUvbGludXgva3JlZi5oCkBAIC0xNiw3ICsxNiw2IEBACiAjZGVmaW5lIF9LUkVGX0hfCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IGtyZWYgewogCWF0b21pY190IHJlZmNvdW50OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggNzYzMTliZi4uODc2OTg2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC00MTgsNiArNDE4LDE3IEBACiAJCQkJICBBVEFfVElNSU5HX0FDVElWRSB8IEFUQV9USU1JTkdfUkVDT1ZFUiB8CiAJCQkJICBBVEFfVElNSU5HX0RNQUNLX0hPTEQgfCBBVEFfVElNSU5HX0NZQ0xFIHwKIAkJCQkgIEFUQV9USU1JTkdfVURNQSwKKworCS8qIEFDUEkgY29uc3RhbnRzICovCisJQVRBX0FDUElfRklMVEVSX1NFVFhGRVIJPSAxIDw8IDAsCisJQVRBX0FDUElfRklMVEVSX0xPQ0sJPSAxIDw8IDEsCisJQVRBX0FDUElfRklMVEVSX0RJUE0JPSAxIDw8IDIsCisJQVRBX0FDUElfRklMVEVSX0ZQRE1BX09GRlNFVCA9IDEgPDwgMywJLyogRlBETUEgbm9uLXplcm8gb2Zmc2V0ICovCisJQVRBX0FDUElfRklMVEVSX0ZQRE1BX0FBID0gMSA8PCA0LAkvKiBGUERNQSBhdXRvIGFjdGl2YXRlICovCisKKwlBVEFfQUNQSV9GSUxURVJfREVGQVVMVAk9IEFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSIHwKKwkJCQkgIEFUQV9BQ1BJX0ZJTFRFUl9MT0NLIHwKKwkJCQkgIEFUQV9BQ1BJX0ZJTFRFUl9ESVBNLAogfTsKIAogZW51bSBhdGFfeGZlcl9tYXNrIHsKQEAgLTU4Nyw2ICs1OTgsNyBAQAogI2lmZGVmIENPTkZJR19BVEFfQUNQSQogCWFjcGlfaGFuZGxlCQlhY3BpX2hhbmRsZTsKIAl1bmlvbiBhY3BpX29iamVjdAkqZ3RmX2NhY2hlOworCXVuc2lnbmVkIGludAkJZ3RmX2ZpbHRlcjsKICNlbmRpZgogCS8qIG5fc2VjdG9yIGlzIENMRUFSX0JFR0lOLCByZWFkIGNvbW1lbnQgYWJvdmUgQ0xFQVJfQkVHSU4gKi8KIAl1NjQJCQluX3NlY3RvcnM7CS8qIHNpemUgb2YgZGV2aWNlLCBpZiBBVEEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9zdGF0dXMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9zdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmMwOTBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3N0YXR1cy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvc3RhdHVzLmggLS0gU3RhdHVzIExFRHMgZm9yIFdNODMxeAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX01GRF9XTTgzMVhfU1RBVFVTX0hfXworI2RlZmluZSBfX01GRF9XTTgzMVhfU1RBVFVTX0hfXworCisjZGVmaW5lIFdNODMxWF9MRURfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4QzAwMCAgLyogTEVEX1NSQyAtIFsxNToxNF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBMRURfU1JDIC0gWzE1OjE0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9TUkMgLSBbMTU6MTRdICovCisjZGVmaW5lIFdNODMxWF9MRURfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDMwMCAgLyogTEVEX01PREUgLSBbOTo4XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExFRF9NT0RFIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfTU9ERSAtIFs5OjhdICovCisjZGVmaW5lIFdNODMxWF9MRURfU0VRX0xFTl9NQVNLICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogTEVEX1NFUV9MRU4gLSBbNTo0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX1NFUV9MRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIExFRF9TRVFfTEVOIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TRVFfTEVOX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfU0VRX0xFTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogTEVEX0RVUiAtIFszOjJdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX0RVUiAtIFszOjJdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX0RVUiAtIFszOjJdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVUWV9DWUNfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMyAgLyogTEVEX0RVVFlfQ1lDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9EVVRZX0NZQ19TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBMRURfRFVUWV9DWUMgLSBbMTowXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVVFlfQ1lDX1dJRFRIICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9EVVRZX0NZQyAtIFsxOjBdICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRmMDg1NTEuLjI0YzM5NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiBpbnQgaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihjb25zdCB2b2lkICp4KTsKICNlbHNlCi1zdGF0aWMgaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCkKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCAyMWQ2YWE0Li44NGE1MjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwkvKiBTZXJpYWxpemVkIGJ5IHBhZ2VfdGFibGVfbG9jayAqLwogCiAJLyogRnVuY3Rpb24gcG9pbnRlcnMgdG8gZGVhbCB3aXRoIHRoaXMgc3RydWN0LiAqLwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqIHZtX29wczsKKwljb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKIAogCS8qIEluZm9ybWF0aW9uIGFib3V0IG91ciBiYWNraW5nIHN0b3JlOiAqLwogCXVuc2lnbmVkIGxvbmcgdm1fcGdvZmY7CQkvKiBPZmZzZXQgKHdpdGhpbiB2bV9maWxlKSBpbiBQQUdFX1NJWkUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaCBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAppbmRleCA4MWJiNDIzLi5lYWYzNjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJTlVYX01NQ19IT1NUX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2NvcmUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCmluZGV4IDY1NDdjM2MuLjgyYTkxMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTM3LDcgKzM3LDYgQEAKIHR5cGVkZWYgaW50ICgqcGFyYW1fZ2V0X2ZuKShjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKIAogLyogRmxhZyBiaXRzIGZvciBrZXJuZWxfcGFyYW0uZmxhZ3MgKi8KLSNkZWZpbmUgS1BBUkFNX0tNQUxMT0NFRAkxCiAjZGVmaW5lIEtQQVJBTV9JU0JPT0wJCTIKIAogc3RydWN0IGtlcm5lbF9wYXJhbSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBmNmI5MDI0Li5kMDlkYjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTQwLDcgKzQwLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCmluZGV4IDc5ZmVjNmEuLmNlNTIwNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaApAQCAtNDI1LDE1ICs0MjUsNiBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgbmlsZnNfZGF0X2dyb3VwX2Rlc2MgLSBibG9jayBncm91cCBkZXNjcmlwdG9yCi0gKiBAZGdfbmZyZWVzOiBudW1iZXIgb2YgZnJlZSB2aXJ0dWFsIGJsb2NrIG51bWJlcnMgaW4gYmxvY2sgZ3JvdXAKLSAqLwotc3RydWN0IG5pbGZzX2RhdF9ncm91cF9kZXNjIHsKLQlfX2xlMzIgZGdfbmZyZWVzOwotfTsKLQotCi0vKioKICAqIHN0cnVjdCBuaWxmc19zbmFwc2hvdF9saXN0IC0gc25hcHNob3QgbGlzdAogICogQHNzbF9uZXh0OiBuZXh0IGNoZWNrcG9pbnQgbnVtYmVyIG9uIHNuYXBzaG90IGxpc3QKICAqIEBzc2xfcHJldjogcHJldmlvdXMgY2hlY2twb2ludCBudW1iZXIgb24gc25hcHNob3QgbGlzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCBkYTFmZGE4Li44NGNmMWYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMzc5LDkgKzM3OSw2IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9JREUJMHg0MzhjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBCTB4NDM5MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFCTB4NDM5YwotLyogQU1EIFNCIENoaXBzZXQgKi8KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfSURFCSAweDc4MGMKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUgMHg3ODAwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTFNJCQkweDEwMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5MgkweDAwMDUKQEAgLTQ4NSw2ICs0ODIsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX1YyX09ORV9QT1JUX1JWWF9PTkVfUE9SVF9NRE1fUENJRSAweDAzNjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9GT1VSX1BPUlRfTU9ERUwJMHgyNTIKIAorI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0lCTQkJMHgxMDE0CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfSUJNX1NBVFVSTl9TRVJJQUxfT05FX1BPUlQJMHgwM2Q0CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9VTklTWVMJCTB4MTAxOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VOSVNZU19ETUFfRElSRUNUT1IgMHgwMDFDCiAKQEAgLTU0Myw3ICs1NDMsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRQkweDc0NTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDCTB4NzQ1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMyX0JSSURHRQkweDc0NTgKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU01CVVMJMHg3ODBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU01CVVMJMHg3ODBiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNV9JREUgICAgMHgyMDhGCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JU0EgICAgMHgyMDkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9GTEFTSCAgMHgyMDkxCkBAIC01NTMsOSArNTUzLDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9VREMgICAgMHgyMDk2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9VT0MgICAgMHgyMDk3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JREUgICAgMHgyMDlBCi0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTFhfVklERU8gIDB4MjA4MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MWF9BRVMgICAgMHgyMDgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFCQkweDc4MGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TQVRBX0lERQkweDc4MDAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RSSURFTlQJCTB4MTAyMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX0RYCTB4MjAwMApAQCAtNzc2LDYgKzc3Nyw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWDUxNQkJMHg4MDM2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgxMgkJMHg4MDM5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgxMl9GTQkweDgwM2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YSU8yMDAwQQkweDgyMzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMTMwCQkweGFjMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMDMxCQkweGFjMTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMTMxCQkweGFjMTUKQEAgLTE5NTQsNiArMTk1Niw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EU0VSSUFMCTB4MDEwMCAvKiAyeCAxNjU1MCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0EJMHgwMTAxIC8qIDJ4IDE2NTUwLCBoYWxmIG9mIDQgcG9ydCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0IJMHgwMTAyIC8qIDJ4IDE2NTUwLCBoYWxmIG9mIDQgcG9ydCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFRST19BCTB4MDEyMCAvKiAyeCAxNjU1MEEsIGhhbGYgb2YgNCBwb3J0ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUVFJPX0IJMHgwMTIxIC8qIDJ4IDE2NTUwQSwgaGFsZiBvZiA0IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQQkweDAxODAgLyogNHggMTY1NTBBLCBoYWxmIG9mIDggcG9ydCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19CCTB4MDE4MSAvKiA0eCAxNjU1MEEsIGhhbGYgb2YgOCBwb3J0ICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9QT1JUX1BMVVMJMHgwMjAwIC8qIDJ4IDE2NjUwICovCkBAIC0yMTYxLDYgKzIxNjUsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJNzQyMF8zICAgICAgMHg3MDBECiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSTczMDBfMyAgICAgIDB4NzAwRQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0k3ODAwXzMgICAgICAweDcwMEYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTczMDAgICAgICAgMHg3MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3NDIwICAgICAgIDB4NzAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzUwMCAgICAgICAweDcwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAgICAgICAgMHg3MDEzCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QREMJCTB4MTVlOQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAppbmRleCAzNjhiZDcwLi43YjdmYmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKQEAgLTM2MSw3ICszNjEsNyBAQAogCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CiAJICoJdTMyCQkJCXBpZCwgcHBpZDsKIAkgKgl1MzIJCQkJdGlkLCBwdGlkOwotCSAqCXsgdTY0CQkJCXRpbWU7ICAgICB9ICYmIFBFUkZfU0FNUExFX1RJTUUKKwkgKgl1NjQJCQkJdGltZTsKIAkgKiB9OwogCSAqLwogCVBFUkZfRVZFTlRfRk9SSwkJCT0gNywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggYWNlZmFmNy4uOWU3MDEyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTM1Nyw3ICszNTcsNyBAQAogCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CiAJICoJdTMyCQkJCXBpZCwgcHBpZDsKIAkgKgl1MzIJCQkJdGlkLCBwdGlkOwotCSAqCXsgdTY0CQkJCXRpbWU7ICAgICB9ICYmIFBFUkZfU0FNUExFX1RJTUUKKwkgKgl1NjQJCQkJdGltZTsKIAkgKiB9OwogCSAqLwogCVBFUkZfUkVDT1JEX0ZPUksJCQk9IDcsCkBAIC00NDIsNiArNDQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjZGVmaW5lIFBFUkZfTUFYX1NUQUNLX0RFUFRICQkyNTUKQEAgLTQ3MCw4ICs0NzEsOCBAQAogCQkJdW5zaWduZWQgbG9uZwlldmVudF9iYXNlOwogCQkJaW50CQlpZHg7CiAJCX07Ci0JCXVuaW9uIHsgLyogc29mdHdhcmUgKi8KLQkJCWF0b21pYzY0X3QJY291bnQ7CisJCXN0cnVjdCB7IC8qIHNvZnR3YXJlICovCisJCQlzNjQJCXJlbWFpbmluZzsKIAkJCXN0cnVjdCBocnRpbWVyCWhydGltZXI7CiAJCX07CiAJfTsKQEAgLTUxMyw2ICs1MTQsMTAgQEAKIAogc3RydWN0IHBlcmZfbW1hcF9kYXRhIHsKIAlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3VfaGVhZDsKKyNpZmRlZiBDT05GSUdfUEVSRl9VU0VfVk1BTExPQworCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29yazsKKyNlbmRpZgorCWludAkJCQlkYXRhX29yZGVyOwogCWludAkJCQlucl9wYWdlczsJLyogbnIgb2YgZGF0YSBwYWdlcyAgKi8KIAlpbnQJCQkJd3JpdGFibGU7CS8qIGFyZSB3ZSB3cml0YWJsZSAgICovCiAJaW50CQkJCW5yX2xvY2tlZDsJLyogbnIgcGFnZXMgbWxvY2tlZCAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9sbC5oIGIvaW5jbHVkZS9saW51eC9wb2xsLmgKaW5kZXggZmEyODdmMi4uNjY3Mzc0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb2xsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb2xsLmgKQEAgLTYsMTAgKzYsMTAgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAvKiB+ODMyIGJ5dGVzIG9mIHN0YWNrIHNwYWNlIHVzZWQgbWF4IGluIHN5c19zZWxlY3Qvc3lzX3BvbGwgYmVmb3JlIGFsbG9jYXRpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJjdGwuaCBiL2luY2x1ZGUvbGludXgvcHJjdGwuaAppbmRleCA5MzExNTA1Li5hM2JhZWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcmN0bC5oCkBAIC04OCw2ICs4OCwxOCBAQAogI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUJCTMxCiAjZGVmaW5lIFBSX1RBU0tfUEVSRl9FVkVOVFNfRU5BQkxFCQkzMgogCisvKgorICogU2V0IGVhcmx5L2xhdGUga2lsbCBtb2RlIGZvciBod3BvaXNvbiBtZW1vcnkgY29ycnVwdGlvbi4KKyAqIFRoaXMgaW5mbHVlbmNlcyB3aGVuIHRoZSBwcm9jZXNzIGdldHMga2lsbGVkIG9uIGEgbWVtb3J5IGNvcnJ1cHRpb24uCisgKi8KICNkZWZpbmUgUFJfTUNFX0tJTEwJMzMKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0NMRUFSICAgMAorIyBkZWZpbmUgUFJfTUNFX0tJTExfU0VUICAgICAxCisKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0xBVEUgICAgMAorIyBkZWZpbmUgUFJfTUNFX0tJTExfRUFSTFkgICAxCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9ERUZBVUxUIDIKKworI2RlZmluZSBQUl9NQ0VfS0lMTF9HRVQgMzQKIAogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhbWZzLmggYi9pbmNsdWRlL2xpbnV4L3JhbWZzLmgKaW5kZXggMzdhYWYyYi4uNGU3NjhkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYW1mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFtZnMuaApAQCAtMTcsNyArMTcsNyBAQAogI2VuZGlmCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJhbWZzX2ZpbGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wczsKIGV4dGVybiBpbnQgX19pbml0IGluaXRfcm9vdGZzKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCA2ZmUwMzYzLi4zZWJkMGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC03Nyw3ICs3Nyw3IEBACiAjZXJyb3IgIlVua25vd24gUkNVIGltcGxlbWVudGF0aW9uIHNwZWNpZmllZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbiIKICNlbmRpZgogCi0jZGVmaW5lIFJDVV9IRUFEX0lOSVQgCXsgLm5leHQgPSBOVUxMLCAuZnVuYyA9IE5VTEwgfQorI2RlZmluZSBSQ1VfSEVBRF9JTklUCXsgLm5leHQgPSBOVUxMLCAuZnVuYyA9IE5VTEwgfQogI2RlZmluZSBSQ1VfSEVBRChoZWFkKSBzdHJ1Y3QgcmN1X2hlYWQgaGVhZCA9IFJDVV9IRUFEX0lOSVQKICNkZWZpbmUgSU5JVF9SQ1VfSEVBRChwdHIpIGRvIHsgXAogICAgICAgIChwdHIpLT5uZXh0ID0gTlVMTDsgKHB0ciktPmZ1bmMgPSBOVUxMOyBcCkBAIC0xMjksMTIgKzEyOSw2IEBACiAJcmN1X3JlYWRfYWNxdWlyZSgpOwogfQogCi0vKioKLSAqIHJjdV9yZWFkX3VubG9jayAtIG1hcmtzIHRoZSBlbmQgb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgotICoKLSAqIFNlZSByY3VfcmVhZF9sb2NrKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKi8KLQogLyoKICAqIFNvIHdoZXJlIGlzIHJjdV93cml0ZV9sb2NrKCk/ICBJdCBkb2VzIG5vdCBleGlzdCwgYXMgdGhlcmUgaXMgbm8KICAqIHdheSBmb3Igd3JpdGVycyB0byBsb2NrIG91dCBSQ1UgcmVhZGVycy4gIFRoaXMgaXMgYSBmZWF0dXJlLCBub3QKQEAgLTE0NCw2ICsxMzgsMTIgQEAKICAqIHVzZWQgYXMgd2VsbC4gIFJDVSBkb2VzIG5vdCBjYXJlIGhvdyB0aGUgd3JpdGVycyBrZWVwIG91dCBvZiBlYWNoCiAgKiBvdGhlcnMnIHdheSwgYXMgbG9uZyBhcyB0aGV5IGRvIHNvLgogICovCisKKy8qKgorICogcmN1X3JlYWRfdW5sb2NrIC0gbWFya3MgdGhlIGVuZCBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisgKgorICogU2VlIHJjdV9yZWFkX2xvY2soKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9jayh2b2lkKQogewogCXJjdV9yZWFkX3JlbGVhc2UoKTsKQEAgLTE5Niw2ICsxOTYsOCBAQAogCV9fYWNxdWlyZShSQ1VfU0NIRUQpOwogCXJjdV9yZWFkX2FjcXVpcmUoKTsKIH0KKworLyogVXNlZCBieSBsb2NrZGVwIGFuZCB0cmFjaW5nOiBjYW5ub3QgYmUgdHJhY2VkLCBjYW5ub3QgY2FsbCBsb2NrZGVwLiAqLwogc3RhdGljIGlubGluZSBub3RyYWNlIHZvaWQgcmN1X3JlYWRfbG9ja19zY2hlZF9ub3RyYWNlKHZvaWQpCiB7CiAJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKQEAgLTIxMyw2ICsyMTUsOCBAQAogCV9fcmVsZWFzZShSQ1VfU0NIRUQpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CisKKy8qIFVzZWQgYnkgbG9ja2RlcCBhbmQgdHJhY2luZzogY2Fubm90IGJlIHRyYWNlZCwgY2Fubm90IGNhbGwgbG9ja2RlcC4gKi8KIHN0YXRpYyBpbmxpbmUgbm90cmFjZSB2b2lkIHJjdV9yZWFkX3VubG9ja19zY2hlZF9ub3RyYWNlKHZvaWQpCiB7CiAJX19yZWxlYXNlKFJDVV9TQ0hFRCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCmluZGV4IDM3NjgyNzcuLjk2NDJjNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCkBAIC0zMCwxMCArMzAsMTQgQEAKICNpZm5kZWYgX19MSU5VWF9SQ1VUUkVFX0gKICNkZWZpbmUgX19MSU5VWF9SQ1VUUkVFX0gKIAorc3RydWN0IG5vdGlmaWVyX2Jsb2NrOworCiBleHRlcm4gdm9pZCByY3Vfc2NoZWRfcXMoaW50IGNwdSk7CiBleHRlcm4gdm9pZCByY3VfYmhfcXMoaW50IGNwdSk7Ci0KK2V4dGVybiBpbnQgcmN1X2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSk7CiBleHRlcm4gaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSk7CitleHRlcm4gaW50IHJjdV9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cyhjaGFyICpwYWdlKTsKIAogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCiAKQEAgLTcyLDExICs3Niw3IEBACiAKIGV4dGVybiB2b2lkIGNhbGxfcmN1X3NjaGVkKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJCSAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQotewotCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOwotfQorZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQodm9pZCkKIHsKQEAgLTg1LDE2ICs4NSwxMSBAQAogCiBleHRlcm4gdm9pZCBfX3JjdV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcmN1X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1LCBpbnQgdXNlcik7Ci1leHRlcm4gdm9pZCByY3VfcmVzdGFydF9jcHUoaW50IGNwdSk7CiAKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKTsKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJjdV9pbml0X3NjaGVkKHZvaWQpCi17Ci19Ci0KICNpZmRlZiBDT05GSUdfTk9fSFoKIHZvaWQgcmN1X2VudGVyX25vaHoodm9pZCk7CiB2b2lkIHJjdV9leGl0X25vaHoodm9pZCk7CkBAIC0xMDcsNyArMTAyLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTk9fSFogKi8KIAotLyogQSBjb250ZXh0IHN3aXRjaCBpcyBhIGdyYWNlIHBlcmlvZCBmb3IgcmN1dHJlZS4gKi8KKy8qIEEgY29udGV4dCBzd2l0Y2ggaXMgYSBncmFjZSBwZXJpb2QgZm9yIFJDVS1zY2hlZCBhbmQgUkNVLWJoLiAqLwogc3RhdGljIGlubGluZSBpbnQgcmN1X2Jsb2NraW5nX2lzX2dwKHZvaWQpCiB7CiAJcmV0dXJuIG51bV9vbmxpbmVfY3B1cygpID09IDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKaW5kZXggNzMxYWY3MS4uZmNiOTg4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaApAQCAtMTE0LDggKzExNCw3IEBACiBpbnQgX19tdXN0X2NoZWNrIHJlc19jb3VudGVyX2NoYXJnZV9sb2NrZWQoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLAogCQl1bnNpZ25lZCBsb25nIHZhbCk7CiBpbnQgX19tdXN0X2NoZWNrIHJlc19jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsCi0JCXVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0LAotCQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKipzb2Z0X2xpbWl0X2F0KTsKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHN0cnVjdCByZXNfY291bnRlciAqKmxpbWl0X2ZhaWxfYXQpOwogCiAvKgogICogdW5jaGFyZ2UgLSB0ZWxsIHRoYXQgc29tZSBwb3J0aW9uIG9mIHRoZSByZXNvdXJjZSBpcyByZWxlYXNlZApAQCAtMTI4LDggKzEyNyw3IEBACiAgKi8KIAogdm9pZCByZXNfY291bnRlcl91bmNoYXJnZV9sb2NrZWQoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCk7Ci12b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQkJYm9vbCAqd2FzX3NvZnRfbGltaXRfZXhjZXNzKTsKK3ZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCByZXNfY291bnRlcl9saW1pdF9jaGVja19sb2NrZWQoc3RydWN0IHJlc19jb3VudGVyICpjbnQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggZmU2NjFhZi4uZGI1MzJjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMTc2LDYgKzE3Niw5IEBACiAvKiBRdWFsY29tbSBNU00gU29DcyAqLwogI2RlZmluZSBQT1JUX01TTQk4OAogCisvKiBCQ002M3h4IGZhbWlseSBTb0NzICovCisjZGVmaW5lIFBPUlRfQkNNNjNYWAk4OQorCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2xtczI4M2dmMDUuaCBiL2luY2x1ZGUvbGludXgvc3BpL2xtczI4M2dmMDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTVkMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvbG1zMjgzZ2YwNS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBsbXMyODNnZjA1LmggLSBQbGF0Zm9ybSBnbHVlIGZvciBTYW1zdW5nIExNUzI4M0dGMDUgTENECisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmbmRlZiBfSU5DTFVERV9MSU5VWF9TUElfTE1TMjgzR0YwNV9IXworI2RlZmluZSBfSU5DTFVERV9MSU5VWF9TUElfTE1TMjgzR0YwNV9IXworCitzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSB7CisJdW5zaWduZWQgbG9uZwlyZXNldF9ncGlvOworCWJvb2wJCXJlc2V0X2ludmVydGVkOworfTsKKworI2VuZGlmIC8qIF9JTkNMVURFX0xJTlVYX1NQSV9MTVMyODNHRjA1X0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCA0ODkwMTllLi5iODUwODg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTYyLDcgKzYyLDcgQEAKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSUkNIUgogZXh0ZXJuIGNoYXIgKiBzdHJyY2hyKGNvbnN0IGNoYXIgKixpbnQpOwogI2VuZGlmCi1leHRlcm4gY2hhciAqIHN0cnN0cmlwKGNoYXIgKik7CitleHRlcm4gY2hhciAqIF9fbXVzdF9jaGVjayBzdHJzdHJpcChjaGFyICopOwogI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJTVFIKIGV4dGVybiBjaGFyICogc3Ryc3RyKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaCBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCmluZGV4IGNkMTVkZjYuLjVlNzgxZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCkBAIC0zMDEsNiArMzAxLDggQEAKICNkZWZpbmUgcG1fbm90aWZpZXIoZm4sIHByaSkJZG8geyAodm9pZCkoZm4pOyB9IHdoaWxlICgwKQogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAorZXh0ZXJuIHN0cnVjdCBtdXRleCBwbV9tdXRleDsKKwogI2lmbmRlZiBDT05GSUdfSElCRVJOQVRJT04KIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBlKQogewpAQCAtMzA4LDggKzMxMCwyMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX25vc2F2ZV9yZWdpb25fbGF0ZSh1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSkKIHsKIH0KLSNlbmRpZgogCi1leHRlcm4gc3RydWN0IG11dGV4IHBtX211dGV4Oworc3RhdGljIGlubGluZSB2b2lkIGxvY2tfc3lzdGVtX3NsZWVwKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3N5c3RlbV9zbGVlcCh2b2lkKSB7fQorCisjZWxzZQorCisvKiBMZXQgc29tZSBzdWJzeXN0ZW1zIGxpa2UgbWVtb3J5IGhvdGFkZCBleGNsdWRlIGhpYmVybmF0aW9uICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3N5c3RlbV9zbGVlcCh2b2lkKQoreworCW11dGV4X2xvY2soJnBtX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19zeXN0ZW1fc2xlZXAodm9pZCkKK3sKKwltdXRleF91bmxvY2soJnBtX211dGV4KTsKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1NVU1BFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCmluZGV4IGZjMGJmM2UuLjU3ZTYzNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKQEAgLTEyOSw3ICsxMjksNyBAQAogCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCiAJCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKIAkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCi0JCQkJfCAxKlNEX1BSRUZFUl9MT0NBTAkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX0xPQ0FMCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKIAkJCQl8IDEqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXAogCQkJCXwgMCpTRF9TRVJJQUxJWkUJCQlcCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMSpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKIAkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKaW5kZXggYzEzNGRkMS4uMDkwNzdmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCkBAIC03LDcgKzcsNyBAQAogCiAvKgogICogVHJhY2Ugc2VxdWVuY2VzIGFyZSB1c2VkIHRvIGFsbG93IGEgZnVuY3Rpb24gdG8gY2FsbCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucwotICogdG8gY3JlYXRlIGEgc3RyaW5nIG9mIGRhdGEgdG8gdXNlICh1cCB0byBhIG1heCBvZiBQQUdFX1NJWkUuCisgKiB0byBjcmVhdGUgYSBzdHJpbmcgb2YgZGF0YSB0byB1c2UgKHVwIHRvIGEgbWF4IG9mIFBBR0VfU0laRSkuCiAgKi8KIAogc3RydWN0IHRyYWNlX3NlcSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IDY2MGE5ZGUuLjJhYWM4YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0zNiw3ICszNiw3IEBACiAjaWZuZGVmIERFQ0xBUkVfVFJBQ0UKIAogI2RlZmluZSBUUF9QUk9UTyhhcmdzLi4uKQlhcmdzCi0jZGVmaW5lIFRQX0FSR1MoYXJncy4uLikJCWFyZ3MKKyNkZWZpbmUgVFBfQVJHUyhhcmdzLi4uKQlhcmdzCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaAppbmRleCAzNTY2MTI5Li5iMDg2Nzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaApAQCAtNDUsOCArNDUsMTYgQEAKICAqCiAgKiB2b2lkICgqc2h1dGRvd24pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKICAqCi0gKiAJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGEgcGFydGljdWxhciB0dHkgZGV2aWNlIGlzIGNsb3NlZCBmb3IKLSAqCXRoZSBsYXN0IHRpbWUgZnJlZWluZyB1cCB0aGUgcmVzb3VyY2VzLgorICogCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgc3luY2hyb25vdXNseSB3aGVuIGEgcGFydGljdWxhciB0dHkgZGV2aWNlCisgKglpcyBjbG9zZWQgZm9yIHRoZSBsYXN0IHRpbWUgZnJlZWluZyB1cCB0aGUgcmVzb3VyY2VzLgorICoKKyAqCisgKiB2b2lkICgqY2xlYW51cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworICoKKyAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZQorICoJaXMgY2xvc2VkIGZvciB0aGUgbGFzdCB0aW1lIGZyZWVpbmcgdXAgdGhlIHJlc291cmNlcy4gVGhpcyBpcworICoJYWN0dWFsbHkgdGhlIHNlY29uZCBwYXJ0IG9mIHNodXRkb3duIGZvciByb3V0aW5lcyB0aGF0IG1pZ2h0IHNsZWVwLgorICoKICAqCiAgKiBpbnQgKCp3cml0ZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksCiAgKiAJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC0yMzMsNiArMjQxLDcgQEAKIAlpbnQgICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CiAJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKIAl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAlpbnQgICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LAogCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CiAJaW50ICAoKnB1dF9jaGFyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggYzE3ZWI2NC4uY2U5MTFlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTE1MCw2ICsxNTAsNyBAQAogCXN0cnVjdCB1c2JfaW50ZXJmYWNlCQkqaW50ZXJmYWNlOwogCXVuc2lnbmVkIGNoYXIJCQlkaXNjb25uZWN0ZWQ6MTsKIAl1bnNpZ25lZCBjaGFyCQkJc3VzcGVuZGluZzoxOworCXVuc2lnbmVkIGNoYXIJCQlhdHRhY2hlZDoxOwogCXVuc2lnbmVkIGNoYXIJCQltaW5vcjsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRzOwogCXVuc2lnbmVkIGNoYXIJCQludW1fcG9ydF9wb2ludGVyczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCmluZGV4IGVhNzIyNmEuLjA5NWUxMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT185UF9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogLyogTWF4aW11bSBudW1iZXIgb2YgdmlydGlvIGNoYW5uZWxzIHBlciBwYXJ0aXRpb24gKDEgZm9yIG5vdykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaAppbmRleCAwOWQ3MzAwLi4xNDE4ZjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVklSVElPX0JBTExPT05fSAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAKIC8qIFRoZSBmZWF0dXJlIGJpdG1hcCBmb3IgdmlydGlvIGJhbGxvb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKaW5kZXggMTVjYjY2Ni4uZmQyOTRjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKQEAgLTMsNiArMyw3IEBACiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBGZWF0dXJlIGJpdHMgKi8KQEAgLTEzLDExICsxNCw4IEBACiAjZGVmaW5lIFZJUlRJT19CTEtfRl9STwkJNQkvKiBEaXNrIGlzIHJlYWQtb25seSAqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUJNgkvKiBCbG9jayBzaXplIG9mIGRpc2sgaXMgYXZhaWxhYmxlKi8KICNkZWZpbmUgVklSVElPX0JMS19GX1NDU0kJNwkvKiBTdXBwb3J0cyBzY3NpIGNvbW1hbmQgcGFzc3RocnUgKi8KLSNkZWZpbmUgVklSVElPX0JMS19GX0lERU5USUZZCTgJLyogQVRBIElERU5USUZZIHN1cHBvcnRlZCAqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfRkxVU0gJOQkvKiBDYWNoZSBmbHVzaCBjb21tYW5kIHN1cHBvcnQgKi8KIAotI2RlZmluZSBWSVJUSU9fQkxLX0lEX0JZVEVTCShzaXplb2YoX191MTZbMjU2XSkpCS8qIElERU5USUZZIERBVEEgKi8KLQogc3RydWN0IHZpcnRpb19ibGtfY29uZmlnIHsKIAkvKiBUaGUgY2FwYWNpdHkgKGluIDUxMi1ieXRlIHNlY3RvcnMpLiAqLwogCV9fdTY0IGNhcGFjaXR5OwpAQCAtMzMsNyArMzEsNiBAQAogCX0gZ2VvbWV0cnk7CiAJLyogYmxvY2sgc2l6ZSBvZiBkZXZpY2UgKGlmIFZJUlRJT19CTEtfRl9CTEtfU0laRSkgKi8KIAlfX3UzMiBibGtfc2l6ZTsKLQlfX3U4IGlkZW50aWZ5W1ZJUlRJT19CTEtfSURfQllURVNdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAppbmRleCBiNWY1MTk4Li5mZTg4NTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfTElOVVhfVklSVElPX0NPTlNPTEVfSAogI2RlZmluZSBfTElOVVhfVklSVElPX0NPTlNPTEVfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIC8qIFRoaXMgaGVhZGVyLCBleGNsdWRpbmcgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHBhcnQsIGlzIEJTRCBsaWNlbnNlZCBzbwogICogYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudCBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKaW5kZXggMWY0MTczNC4uMDg1ZTQyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKQEAgLTMsNiArMyw3IEBACiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKaW5kZXggNDgxMjFjMy4uYzRkNWRlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fUk5HX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19STkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaCBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKaW5kZXggN2VmMGM3Yi4uY2YyNGMyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCkBAIC0yMDcsNiArMjA3LDcgQEAKIAogZXh0ZXJuIHZvaWQgZmx1c2hfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSk7CiBleHRlcm4gdm9pZCBmbHVzaF9zY2hlZHVsZWRfd29yayh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrKTsKIAogZXh0ZXJuIGludCBzY2hlZHVsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBleHRlcm4gaW50IHNjaGVkdWxlX3dvcmtfb24oaW50IGNwdSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKaW5kZXggZTI2ODEyMi4uZmIwMGIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKQEAgLTE1OSw4ICsxNTksNyBAQAogICogQHFpZDogdGhlICZwOV9xaWQgc2VydmVyIGlkZW50aWZpZXIgdGhpcyBoYW5kbGUgcG9pbnRzIHRvCiAgKiBAaW91bml0OiB0aGUgc2VydmVyIHJlcG9ydGVkIG1heGltdW0gdHJhbnNhY3Rpb24gc2l6ZSBmb3IgdGhpcyBmaWxlCiAgKiBAdWlkOiB0aGUgbnVtZXJpYyB1aWQgb2YgdGhlIGxvY2FsIHVzZXIgd2hvIG93bnMgdGhpcyBoYW5kbGUKLSAqIEBhdXg6IHRyYW5zcG9ydCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAodW51c2VkPykKLSAqIEByZGlyX2Zwb3M6IHRyYWNrcyBvZmZzZXQgb2YgZmlsZSBwb3NpdGlvbiB3aGVuIHJlYWRpbmcgZGlyZWN0b3J5IGNvbnRlbnRzCisgKiBAcmRpcjogcmVhZGRpciBhY2NvdW50aW5nIHN0cnVjdHVyZSAoYWxsb2NhdGVkIG9uIGRlbWFuZCkKICAqIEBmbGlzdDogcGVyLWNsaWVudC1pbnN0YW5jZSBmaWQgdHJhY2tpbmcKICAqIEBkbGlzdDogcGVyLWRlbnRyeSBmaWQgdHJhY2tpbmcKICAqCkBAIC0xNzQsOSArMTczLDkgQEAKIAlzdHJ1Y3QgcDlfcWlkIHFpZDsKIAl1MzIgaW91bml0OwogCXVpZF90IHVpZDsKLQl2b2lkICphdXg7CiAKLQlpbnQgcmRpcl9mcG9zOworCXZvaWQgKnJkaXI7CisKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZsaXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZGxpc3Q7CS8qIGxpc3Qgb2YgYWxsIGZpZHMgYXR0YWNoZWQgdG8gYSBkZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCA5YTNiNDk4Li5lMGY2ZmViIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTI2Miw2ICsyNjIsOCBAQAogCXN0cnVjdCBkZXZpY2UJCQlkZXY7CiAJLyogZGF0YSBpbnRlcm5hbCB0byB0aGUgc29ja2V0IGRyaXZlciAqLwogCXZvaWQJCQkJKmRyaXZlcl9kYXRhOworCS8qIHN0YXR1cyBvZiB0aGUgY2FyZCBkdXJpbmcgcmVzdW1lIGZyb20gYSBzeXN0ZW0gc2xlZXAgc3RhdGUgKi8KKwlpbnQJCQkJcmVzdW1lX3N0YXR1czsKIH07CiAKIApAQCAtMjc5LDcgKzI4MSw5IEBACiBleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX25vbnN0YXRpY19vcHM7CiAKIC8qIHNvY2tldCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byB1c2UgdGhlc2UgY2FsbGJhY2tzIGluIHRoZWlyIC5kcnYgc3RydWN0ICovCi1leHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKiBzb2NrZXQgZHJpdmVycyB1c2UgdGhpcyBjYWxsYmFjayBpbiB0aGVpciBJUlEgaGFuZGxlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA4ODdlNTdlLi5hNzJlZGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMzAzLDYgKzMwMyw3IEBACiAJaW50CQkJY21kc19tYXg7CS8qIHNpemUgb2YgY21kcyBhcnJheSAqLwogCXN0cnVjdCBpc2NzaV90YXNrCSoqY21kczsJCS8qIE9yaWdpbmFsIENtZHMgYXJyICovCiAJc3RydWN0IGlzY3NpX3Bvb2wJY21kcG9vbDsJLyogUERVJ3MgcG9vbCAqLworCXZvaWQJCQkqZGRfZGF0YTsJLyogTExEIHByaXZhdGUgZGF0YSAqLwogfTsKIAogZW51bSB7CkBAIC0zNjMsNyArMzY0LDcgQEAKICAqLwogZXh0ZXJuIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqCiBpc2NzaV9zZXNzaW9uX3NldHVwKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKiwgc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCi0JCSAgICB1aW50MTZfdCwgaW50LCB1aW50MzJfdCwgdW5zaWduZWQgaW50KTsKKwkJICAgIHVpbnQxNl90LCBpbnQsIGludCwgdWludDMyX3QsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX3RlYXJkb3duKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqKTsKIGV4dGVybiB2b2lkIGlzY3NpX3Nlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICopOwogZXh0ZXJuIGludCBpc2NzaV9zZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDA4NDQ3OGUuLjM0YzQ2YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtMTI5LDYgKzEyOSw5IEBACiAjZGVmaW5lIE1JX1JFUE9SVF9UQVJHRVRfUEdTICAweDBhCiAvKiB2YWx1ZXMgZm9yIG1haW50ZW5hbmNlIG91dCAqLwogI2RlZmluZSBNT19TRVRfVEFSR0VUX1BHUyAgICAgMHgwYQorLyogdmFsdWVzIGZvciB2YXJpYWJsZSBsZW5ndGggY29tbWFuZCAqLworI2RlZmluZSBSRUFEXzMyCQkgICAgICAweDA5CisjZGVmaW5lIFdSSVRFXzMyCSAgICAgIDB4MGIKIAogLyogVmFsdWVzIGZvciBUMTAvMDQtMjYycjcgKi8KICNkZWZpbmUJQVRBXzE2CQkgICAgICAweDg1CS8qIDE2LWJ5dGUgcGFzcy10aHJ1ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKaW5kZXggMzg3OGQxZC4uYTVlODg1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaApAQCAtMjI5LDEwICsyMjksNiBAQAogCS8qIE9TLUhCQTogUHJvdGVjdGVkLCBIQkEtVGFyZ2V0OiBQcm90ZWN0ZWQgKi8KIAlTQ1NJX1BST1RfUkVBRF9QQVNTLAogCVNDU0lfUFJPVF9XUklURV9QQVNTLAotCi0JLyogT1MtSEJBOiBQcm90ZWN0ZWQsIEhCQS1UYXJnZXQ6IFByb3RlY3RlZCwgY2hlY2tzdW0gY29udmVyc2lvbiAqLwotCVNDU0lfUFJPVF9SRUFEX0NPTlZFUlQsCi0JU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQsCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9zZXRfcHJvdF9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBjaGFyIG9wKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCmluZGV4IGI2MmEwOTcuLjQ3OTQxZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTc5NywyNCArNzk3LDI0IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdW5zaWduZWQgaW50IHRhcmdldF90eXBlKQogewotCXN3aXRjaCAodGFyZ2V0X3R5cGUpIHsKLQljYXNlIDE6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTjsKLQljYXNlIDI6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESUZfVFlQRTJfUFJPVEVDVElPTjsKLQljYXNlIDM6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTjsKLQl9CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FwW10gPSB7IDAsCisJCQkJICAgICAgIFNIT1NUX0RJRl9UWVBFMV9QUk9URUNUSU9OLAorCQkJCSAgICAgICBTSE9TVF9ESUZfVFlQRTJfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElGX1RZUEUzX1BST1RFQ1RJT04gfTsKIAotCXJldHVybiAwOworCXJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBjYXBbdGFyZ2V0X3R5cGVdID8gdGFyZ2V0X3R5cGUgOiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzY3NpX2hvc3RfZGl4X2NhcGFibGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGludCB0YXJnZXRfdHlwZSkKIHsKLQlzd2l0Y2ggKHRhcmdldF90eXBlKSB7Ci0JY2FzZSAwOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElYX1RZUEUwX1BST1RFQ1RJT047Ci0JY2FzZSAxOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElYX1RZUEUxX1BST1RFQ1RJT047Ci0JY2FzZSAyOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElYX1RZUEUyX1BST1RFQ1RJT047Ci0JY2FzZSAzOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElYX1RZUEUzX1BST1RFQ1RJT047Ci0JfQorI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhcFtdID0geyBTSE9TVF9ESVhfVFlQRTBfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElYX1RZUEUxX1BST1RFQ1RJT04sCisJCQkJICAgICAgIFNIT1NUX0RJWF9UWVBFMl9QUk9URUNUSU9OLAorCQkJCSAgICAgICBTSE9TVF9ESVhfVFlQRTNfUFJPVEVDVElPTiB9OwogCisJcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIGNhcFt0YXJnZXRfdHlwZV07CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKaW5kZXggZDg2YWY5NC4uMDA0MDViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCkBAIC00ODgsNiArNDg4LDM5IEBACiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5vbGRfc2VjdG9yKQogKTsKIAorVFJBQ0VfRVZFTlQoYmxvY2tfcnFfcmVtYXAsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBkZXZfdCBkZXYsCisJCSBzZWN0b3JfdCBmcm9tKSwKKworCVRQX0FSR1MocSwgcnEsIGRldiwgZnJvbSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCBkZXZfdCwJCWRldgkJKQorCQlfX2ZpZWxkKCBzZWN0b3JfdCwJc2VjdG9yCQkpCisJCV9fZmllbGQoIHVuc2lnbmVkIGludCwJbnJfc2VjdG9yCSkKKwkJX19maWVsZCggZGV2X3QsCQlvbGRfZGV2CQkpCisJCV9fZmllbGQoIHNlY3Rvcl90LAlvbGRfc2VjdG9yCSkKKwkJX19hcnJheSggY2hhciwJCXJ3YnMsCTYJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGRpc2tfZGV2dChycS0+cnFfZGlzayk7CisJCV9fZW50cnktPnNlY3RvcgkJPSBibGtfcnFfcG9zKHJxKTsKKwkJX19lbnRyeS0+bnJfc2VjdG9yCT0gYmxrX3JxX3NlY3RvcnMocnEpOworCQlfX2VudHJ5LT5vbGRfZGV2CT0gZGV2OworCQlfX2VudHJ5LT5vbGRfc2VjdG9yCT0gZnJvbTsKKwkJYmxrX2ZpbGxfcndic19ycShfX2VudHJ5LT5yd2JzLCBycSk7CisJKSwKKworCVRQX3ByaW50aygiJWQsJWQgJXMgJWxsdSArICV1IDwtICglZCwlZCkgJWxsdSIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+cndicywKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPnNlY3RvciwKKwkJICBfX2VudHJ5LT5ucl9zZWN0b3IsCisJCSAgTUFKT1IoX19lbnRyeS0+b2xkX2RldiksIE1JTk9SKF9fZW50cnktPm9sZF9kZXYpLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+b2xkX3NlY3RvcikKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfQkxPQ0tfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaAppbmRleCBjMWJkOGYxLi5kMDk1NTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCkBAIC0xMSw2ICsxMSw3IEBACiBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3Q7CiBzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZTsKIHN0cnVjdCBleHQ0X2lub2RlX2luZm87CitzdHJ1Y3QgbXBhZ2VfZGFfZGF0YTsKIAogI2RlZmluZSBFWFQ0X0koaW5vZGUpIChjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBleHQ0X2lub2RlX2luZm8sIHZmc19pbm9kZSkpCiAKQEAgLTIzNiw2ICsyMzcsNyBAQAogCQlfX2ZpZWxkKAljaGFyLAlmb3Jfa3VwZGF0ZQkJKQogCQlfX2ZpZWxkKAljaGFyLAlmb3JfcmVjbGFpbQkJKQogCQlfX2ZpZWxkKAljaGFyLAlyYW5nZV9jeWNsaWMJCSkKKwkJX19maWVsZCggICAgICAgcGdvZmZfdCwJd3JpdGViYWNrX2luZGV4CQkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtMjQ5LDE1ICsyNTEsMTcgQEAKIAkJX19lbnRyeS0+Zm9yX2t1cGRhdGUJPSB3YmMtPmZvcl9rdXBkYXRlOwogCQlfX2VudHJ5LT5mb3JfcmVjbGFpbQk9IHdiYy0+Zm9yX3JlY2xhaW07CiAJCV9fZW50cnktPnJhbmdlX2N5Y2xpYwk9IHdiYy0+cmFuZ2VfY3ljbGljOworCQlfX2VudHJ5LT53cml0ZWJhY2tfaW5kZXggPSBpbm9kZS0+aV9tYXBwaW5nLT53cml0ZWJhY2tfaW5kZXg7CiAJKSwKIAotCVRQX3ByaW50aygiZGV2ICVzIGlubyAlbHUgbnJfdG9fd3JpdGUgJWxkIHBhZ2VzX3NraXBwZWQgJWxkIHJhbmdlX3N0YXJ0ICVsbHUgcmFuZ2VfZW5kICVsbHUgbm9uYmxvY2tpbmcgJWQgZm9yX2t1cGRhdGUgJWQgZm9yX3JlY2xhaW0gJWQgcmFuZ2VfY3ljbGljICVkIiwKKwlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IG5yX3RvX3dyaXRlICVsZCBwYWdlc19za2lwcGVkICVsZCByYW5nZV9zdGFydCAlbGx1IHJhbmdlX2VuZCAlbGx1IG5vbmJsb2NraW5nICVkIGZvcl9rdXBkYXRlICVkIGZvcl9yZWNsYWltICVkIHJhbmdlX2N5Y2xpYyAlZCB3cml0ZWJhY2tfaW5kZXggJWx1IiwKIAkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksCiAJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywgX19lbnRyeS0+bnJfdG9fd3JpdGUsCiAJCSAgX19lbnRyeS0+cGFnZXNfc2tpcHBlZCwgX19lbnRyeS0+cmFuZ2Vfc3RhcnQsCiAJCSAgX19lbnRyeS0+cmFuZ2VfZW5kLCBfX2VudHJ5LT5ub25ibG9ja2luZywKIAkJICBfX2VudHJ5LT5mb3Jfa3VwZGF0ZSwgX19lbnRyeS0+Zm9yX3JlY2xhaW0sCi0JCSAgX19lbnRyeS0+cmFuZ2VfY3ljbGljKQorCQkgIF9fZW50cnktPnJhbmdlX2N5Y2xpYywKKwkJICAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+d3JpdGViYWNrX2luZGV4KQogKTsKIAogVFJBQ0VfRVZFTlQoZXh0NF9kYV93cml0ZV9wYWdlcywKQEAgLTMwOSw2ICszMTMsNyBAQAogCQlfX2ZpZWxkKAljaGFyLAllbmNvdW50ZXJlZF9jb25nZXN0aW9uCSkKIAkJX19maWVsZCgJY2hhciwJbW9yZV9pbwkJCSkJCiAJCV9fZmllbGQoCWNoYXIsCW5vX25yd3JpdGVfaW5kZXhfdXBkYXRlICkKKwkJX19maWVsZCggICAgICAgcGdvZmZfdCwJd3JpdGViYWNrX2luZGV4CQkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtMzIwLDE0ICszMjUsMTYgQEAKIAkJX19lbnRyeS0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbgk9IHdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbjsKIAkJX19lbnRyeS0+bW9yZV9pbwk9IHdiYy0+bW9yZV9pbzsKIAkJX19lbnRyeS0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUgPSB3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOworCQlfX2VudHJ5LT53cml0ZWJhY2tfaW5kZXggPSBpbm9kZS0+aV9tYXBwaW5nLT53cml0ZWJhY2tfaW5kZXg7CiAJKSwKIAotCVRQX3ByaW50aygiZGV2ICVzIGlubyAlbHUgcmV0ICVkIHBhZ2VzX3dyaXR0ZW4gJWQgcGFnZXNfc2tpcHBlZCAlbGQgY29uZ2VzdGlvbiAlZCBtb3JlX2lvICVkIG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlICVkIiwKKwlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IHJldCAlZCBwYWdlc193cml0dGVuICVkIHBhZ2VzX3NraXBwZWQgJWxkIGNvbmdlc3Rpb24gJWQgbW9yZV9pbyAlZCBub19ucndyaXRlX2luZGV4X3VwZGF0ZSAlZCB3cml0ZWJhY2tfaW5kZXggJWx1IiwKIAkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksCiAJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywgX19lbnRyeS0+cmV0LAogCQkgIF9fZW50cnktPnBhZ2VzX3dyaXR0ZW4sIF9fZW50cnktPnBhZ2VzX3NraXBwZWQsCiAJCSAgX19lbnRyeS0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiwgX19lbnRyeS0+bW9yZV9pbywKLQkJICBfX2VudHJ5LT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSkKKwkJICBfX2VudHJ5LT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSwKKwkJICAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+d3JpdGViYWNrX2luZGV4KQogKTsKIAogVFJBQ0VfRVZFTlQoZXh0NF9kYV93cml0ZV9iZWdpbiwKQEAgLTczNyw2ICs3NDQsMTY5IEBACiAJCSAgX19lbnRyeS0+ZGF0YV9ibG9ja3MsIF9fZW50cnktPm1ldGFfYmxvY2tzKQogKTsKIAorVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX2FsbG9jLAorCVRQX1BST1RPKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpLAorCisJVFBfQVJHUyhhYyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJZm91bmQJCQkpCisJCV9fZmllbGQoCV9fdTE2LAlncm91cHMJCQkpCisJCV9fZmllbGQoCV9fdTE2LAlidWRkeQkJCSkKKwkJX19maWVsZCgJX191MTYsCWZsYWdzCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJdGFpbAkJCSkKKwkJX19maWVsZCgJX191OCwJY3IJCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJb3JpZ19sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlvcmlnX3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJb3JpZ19ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJb3JpZ19sZW4JCSkKKwkJX19maWVsZCgJX191MzIsIAlnb2FsX2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCWdvYWxfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlnb2FsX2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlnb2FsX2xlbgkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9sZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBhYy0+YWNfaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+Zm91bmQJCT0gYWMtPmFjX2ZvdW5kOworCQlfX2VudHJ5LT5mbGFncwkJPSBhYy0+YWNfZmxhZ3M7CisJCV9fZW50cnktPmdyb3VwcwkJPSBhYy0+YWNfZ3JvdXBzX3NjYW5uZWQ7CisJCV9fZW50cnktPmJ1ZGR5CQk9IGFjLT5hY19idWRkeTsKKwkJX19lbnRyeS0+dGFpbAkJPSBhYy0+YWNfdGFpbDsKKwkJX19lbnRyeS0+Y3IJCT0gYWMtPmFjX2NyaXRlcmlhOworCQlfX2VudHJ5LT5vcmlnX2xvZ2ljYWwJPSBhYy0+YWNfb19leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5vcmlnX3N0YXJ0CT0gYWMtPmFjX29fZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPm9yaWdfZ3JvdXAJPSBhYy0+YWNfb19leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+b3JpZ19sZW4JPSBhYy0+YWNfb19leC5mZV9sZW47CisJCV9fZW50cnktPmdvYWxfbG9naWNhbAk9IGFjLT5hY19nX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPmdvYWxfc3RhcnQJPSBhYy0+YWNfZ19leC5mZV9zdGFydDsKKwkJX19lbnRyeS0+Z29hbF9ncm91cAk9IGFjLT5hY19nX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5nb2FsX2xlbgk9IGFjLT5hY19nX2V4LmZlX2xlbjsKKwkJX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwJPSBhYy0+YWNfZl9leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5yZXN1bHRfc3RhcnQJPSBhYy0+YWNfZl9leC5mZV9zdGFydDsKKwkJX19lbnRyeS0+cmVzdWx0X2dyb3VwCT0gYWMtPmFjX2ZfZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPnJlc3VsdF9sZW4JPSBhYy0+YWNfZl9leC5mZV9sZW47CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIGlub2RlICVsdSBvcmlnICV1LyVkLyV1QCV1IGdvYWwgJXUvJWQvJXVAJXUgIgorCQkgICJyZXN1bHQgJXUvJWQvJXVAJXUgYmxrcyAldSBncnBzICV1IGNyICV1IGZsYWdzIDB4JTA0eCAiCisJCSAgInRhaWwgJXUgYnJva2VuICV1IiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+b3JpZ19ncm91cCwgX19lbnRyeS0+b3JpZ19zdGFydCwKKwkJICBfX2VudHJ5LT5vcmlnX2xlbiwgX19lbnRyeS0+b3JpZ19sb2dpY2FsLAorCQkgIF9fZW50cnktPmdvYWxfZ3JvdXAsIF9fZW50cnktPmdvYWxfc3RhcnQsCisJCSAgX19lbnRyeS0+Z29hbF9sZW4sIF9fZW50cnktPmdvYWxfbG9naWNhbCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfZ3JvdXAsIF9fZW50cnktPnJlc3VsdF9zdGFydCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfbGVuLCBfX2VudHJ5LT5yZXN1bHRfbG9naWNhbCwKKwkJICBfX2VudHJ5LT5mb3VuZCwgX19lbnRyeS0+Z3JvdXBzLCBfX2VudHJ5LT5jciwKKwkJICBfX2VudHJ5LT5mbGFncywgX19lbnRyeS0+dGFpbCwKKwkJICBfX2VudHJ5LT5idWRkeSA/IDEgPDwgX19lbnRyeS0+YnVkZHkgOiAwKQorKTsKKworVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX3ByZWFsbG9jLAorCVRQX1BST1RPKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpLAorCisJVFBfQVJHUyhhYyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJb3JpZ19zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCW9yaWdfbGVuCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X2xlbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGFjLT5hY19pbm9kZS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubwkJPSBhYy0+YWNfaW5vZGUtPmlfaW5vOworCQlfX2VudHJ5LT5vcmlnX2xvZ2ljYWwJPSBhYy0+YWNfb19leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5vcmlnX3N0YXJ0CT0gYWMtPmFjX29fZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPm9yaWdfZ3JvdXAJPSBhYy0+YWNfb19leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+b3JpZ19sZW4JPSBhYy0+YWNfb19leC5mZV9sZW47CisJCV9fZW50cnktPnJlc3VsdF9sb2dpY2FsCT0gYWMtPmFjX2JfZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+cmVzdWx0X3N0YXJ0CT0gYWMtPmFjX2JfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPnJlc3VsdF9ncm91cAk9IGFjLT5hY19iX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5yZXN1bHRfbGVuCT0gYWMtPmFjX2JfZXguZmVfbGVuOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyBpbm9kZSAlbHUgb3JpZyAldS8lZC8ldUAldSByZXN1bHQgJXUvJWQvJXVAJXUiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5vcmlnX2dyb3VwLCBfX2VudHJ5LT5vcmlnX3N0YXJ0LAorCQkgIF9fZW50cnktPm9yaWdfbGVuLCBfX2VudHJ5LT5vcmlnX2xvZ2ljYWwsCisJCSAgX19lbnRyeS0+cmVzdWx0X2dyb3VwLCBfX2VudHJ5LT5yZXN1bHRfc3RhcnQsCisJCSAgX19lbnRyeS0+cmVzdWx0X2xlbiwgX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwpCispOworCitUUkFDRV9FVkVOVChleHQ0X21iYWxsb2NfZGlzY2FyZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKSwKKworCVRQX0FSR1MoYWMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfbGVuCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gYWMtPmFjX2lub2RlLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vCQk9IGFjLT5hY19pbm9kZS0+aV9pbm87CisJCV9fZW50cnktPnJlc3VsdF9sb2dpY2FsCT0gYWMtPmFjX2JfZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+cmVzdWx0X3N0YXJ0CT0gYWMtPmFjX2JfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPnJlc3VsdF9ncm91cAk9IGFjLT5hY19iX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5yZXN1bHRfbGVuCT0gYWMtPmFjX2JfZXguZmVfbGVuOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyBpbm9kZSAlbHUgZXh0ZW50ICV1LyVkLyV1QCV1ICIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPnJlc3VsdF9ncm91cCwgX19lbnRyeS0+cmVzdWx0X3N0YXJ0LAorCQkgIF9fZW50cnktPnJlc3VsdF9sZW4sIF9fZW50cnktPnJlc3VsdF9sb2dpY2FsKQorKTsKKworVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX2ZyZWUsCisJVFBfUFJPVE8oc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyksCisKKwlUUF9BUkdTKGFjKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCWlub190LAlpbm8JCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X2xlbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGFjLT5hY19pbm9kZS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubwkJPSBhYy0+YWNfaW5vZGUtPmlfaW5vOworCQlfX2VudHJ5LT5yZXN1bHRfbG9naWNhbAk9IGFjLT5hY19iX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPnJlc3VsdF9zdGFydAk9IGFjLT5hY19iX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5yZXN1bHRfZ3JvdXAJPSBhYy0+YWNfYl9leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+cmVzdWx0X2xlbgk9IGFjLT5hY19iX2V4LmZlX2xlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vZGUgJWx1IGV4dGVudCAldS8lZC8ldUAldSAiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5yZXN1bHRfZ3JvdXAsIF9fZW50cnktPnJlc3VsdF9zdGFydCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfbGVuLCBfX2VudHJ5LT5yZXN1bHRfbG9naWNhbCkKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfRVhUNF9IICovCiAKIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oCmluZGV4IGI4NTFmMGIuLjNjNjBiNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9qYmQyLmgKQEAgLTcsNiArNyw5IEBACiAjaW5jbHVkZSA8bGludXgvamJkMi5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KIAorc3RydWN0IHRyYW5zYWN0aW9uX2NocF9zdGF0c19zOworc3RydWN0IHRyYW5zYWN0aW9uX3J1bl9zdGF0c19zOworCiBUUkFDRV9FVkVOVChqYmQyX2NoZWNrcG9pbnQsCiAKIAlUUF9QUk9UTyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCByZXN1bHQpLApAQCAtMTYyLDYgKzE2NSw4MSBAQAogCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubykKICk7CiAKK1RSQUNFX0VWRU5UKGpiZDJfcnVuX3N0YXRzLAorCVRQX1BST1RPKGRldl90IGRldiwgdW5zaWduZWQgbG9uZyB0aWQsCisJCSBzdHJ1Y3QgdHJhbnNhY3Rpb25fcnVuX3N0YXRzX3MgKnN0YXRzKSwKKworCVRQX0FSR1MoZGV2LCB0aWQsIHN0YXRzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCQlkZXZfdCwJZGV2CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXRpZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAl3YWl0CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXJ1bm5pbmcJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJbG9ja2VkCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWZsdXNoaW5nCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJbG9nZ2luZwkJKQorCQlfX2ZpZWxkKAkJX191MzIsCWhhbmRsZV9jb3VudAkpCisJCV9fZmllbGQoCQlfX3UzMiwJYmxvY2tzCQkpCisJCV9fZmllbGQoCQlfX3UzMiwJYmxvY2tzX2xvZ2dlZAkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gZGV2OworCQlfX2VudHJ5LT50aWQJCT0gdGlkOworCQlfX2VudHJ5LT53YWl0CQk9IHN0YXRzLT5yc193YWl0OworCQlfX2VudHJ5LT5ydW5uaW5nCT0gc3RhdHMtPnJzX3J1bm5pbmc7CisJCV9fZW50cnktPmxvY2tlZAkJPSBzdGF0cy0+cnNfbG9ja2VkOworCQlfX2VudHJ5LT5mbHVzaGluZwk9IHN0YXRzLT5yc19mbHVzaGluZzsKKwkJX19lbnRyeS0+bG9nZ2luZwk9IHN0YXRzLT5yc19sb2dnaW5nOworCQlfX2VudHJ5LT5oYW5kbGVfY291bnQJPSBzdGF0cy0+cnNfaGFuZGxlX2NvdW50OworCQlfX2VudHJ5LT5ibG9ja3MJCT0gc3RhdHMtPnJzX2Jsb2NrczsKKwkJX19lbnRyeS0+YmxvY2tzX2xvZ2dlZAk9IHN0YXRzLT5yc19ibG9ja3NfbG9nZ2VkOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyB0aWQgJWx1IHdhaXQgJXUgcnVubmluZyAldSBsb2NrZWQgJXUgZmx1c2hpbmcgJXUgIgorCQkgICJsb2dnaW5nICV1IGhhbmRsZV9jb3VudCAldSBibG9ja3MgJXUgYmxvY2tzX2xvZ2dlZCAldSIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCBfX2VudHJ5LT50aWQsCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT53YWl0KSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPnJ1bm5pbmcpLAorCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+bG9ja2VkKSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmZsdXNoaW5nKSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmxvZ2dpbmcpLAorCQkgIF9fZW50cnktPmhhbmRsZV9jb3VudCwgX19lbnRyeS0+YmxvY2tzLAorCQkgIF9fZW50cnktPmJsb2Nrc19sb2dnZWQpCispOworCitUUkFDRV9FVkVOVChqYmQyX2NoZWNrcG9pbnRfc3RhdHMsCisJVFBfUFJPVE8oZGV2X3QgZGV2LCB1bnNpZ25lZCBsb25nIHRpZCwKKwkJIHN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyAqc3RhdHMpLAorCisJVFBfQVJHUyhkZXYsIHRpZCwgc3RhdHMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJCWRldl90LAlkZXYJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJdGlkCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWNocF90aW1lCSkKKwkJX19maWVsZCgJCV9fdTMyLAlmb3JjZWRfdG9fY2xvc2UJKQorCQlfX2ZpZWxkKAkJX191MzIsCXdyaXR0ZW4JCSkKKwkJX19maWVsZCgJCV9fdTMyLAlkcm9wcGVkCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gZGV2OworCQlfX2VudHJ5LT50aWQJCT0gdGlkOworCQlfX2VudHJ5LT5jaHBfdGltZQk9IHN0YXRzLT5jc19jaHBfdGltZTsKKwkJX19lbnRyeS0+Zm9yY2VkX3RvX2Nsb3NlPSBzdGF0cy0+Y3NfZm9yY2VkX3RvX2Nsb3NlOworCQlfX2VudHJ5LT53cml0dGVuCT0gc3RhdHMtPmNzX3dyaXR0ZW47CisJCV9fZW50cnktPmRyb3BwZWQJPSBzdGF0cy0+Y3NfZHJvcHBlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgdGlkICVsdSBjaHBfdGltZSAldSBmb3JjZWRfdG9fY2xvc2UgJXUgIgorCQkgICJ3cml0dGVuICV1IGRyb3BwZWQgJXUiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dGlkLAorCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+Y2hwX3RpbWUpLAorCQkgIF9fZW50cnktPmZvcmNlZF90b19jbG9zZSwgX19lbnRyeS0+d3JpdHRlbiwgX19lbnRyeS0+ZHJvcHBlZCkKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfSkJEMl9IICovCiAKIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93b3JrcXVldWUuaAppbmRleCBmY2ZkOWExLi5lNDYxMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93b3JrcXVldWUuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93b3JrcXVldWUuaApAQCAtMjYsNyArMjYsNyBAQAogCQlfX2VudHJ5LT5mdW5jCQk9IHdvcmstPmZ1bmM7CiAJKSwKIAotCVRQX3ByaW50aygidGhyZWFkPSVzOiVkIGZ1bmM9JXBGIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCisJVFBfcHJpbnRrKCJ0aHJlYWQ9JXM6JWQgZnVuYz0lcGYiLCBfX2VudHJ5LT50aHJlYWRfY29tbSwKIAkJX19lbnRyeS0+dGhyZWFkX3BpZCwgX19lbnRyeS0+ZnVuYykKICk7CiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJX19lbnRyeS0+ZnVuYwkJPSB3b3JrLT5mdW5jOwogCSksCiAKLQlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwRiIsIF9fZW50cnktPnRocmVhZF9jb21tLAorCVRQX3ByaW50aygidGhyZWFkPSVzOiVkIGZ1bmM9JXBmIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCiAJCV9fZW50cnktPnRocmVhZF9waWQsIF9fZW50cnktPmZ1bmMpCiApOwogCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggYzdiYWMzOS4uOWUwM2VmOCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIGNvbmZpZyBBVURJVFNZU0NBTEwKIAlib29sICJFbmFibGUgc3lzdGVtLWNhbGwgYXVkaXRpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFVRElUICYmIChYODYgfHwgUFBDIHx8IFBQQzY0IHx8IFMzOTAgfHwgSUE2NCB8fCBVTUwgfHwgU1BBUkM2NHx8IFNVUEVSSCkKKwlkZXBlbmRzIG9uIEFVRElUICYmIChYODYgfHwgUFBDIHx8IFMzOTAgfHwgSUE2NCB8fCBVTUwgfHwgU1BBUkM2NCB8fCBTVVBFUkgpCiAJZGVmYXVsdCB5IGlmIFNFQ1VSSVRZX1NFTElOVVgKIAloZWxwCiAJICBFbmFibGUgbG93LW92ZXJoZWFkIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIGluZnJhc3RydWN0dXJlIHRoYXQKQEAgLTkyMSw2ICs5MjEsMTEgQEAKIAloZWxwCiAJICBTZWUgdG9vbHMvcGVyZi9kZXNpZ24udHh0IGZvciBkZXRhaWxzLgogCitjb25maWcgUEVSRl9VU0VfVk1BTExPQworCWJvb2wKKwloZWxwCisJICBTZWUgdG9vbHMvcGVyZi9kZXNpZ24udHh0IGZvciBkZXRhaWxzCisKIG1lbnUgIktlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzIgogCiBjb25maWcgUEVSRl9FVkVOVFMKQEAgLTkzMiw3ICs5MzcsNyBAQAogCSAgRW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB2YXJpb3VzIHBlcmZvcm1hbmNlIGV2ZW50cyBwcm92aWRlZAogCSAgYnkgc29mdHdhcmUgYW5kIGhhcmR3YXJlLgogCi0JICBTb2Z0d2FyZSBldmVudHMgYXJlIHN1cHBvcnRlZCBlaXRoZXIgYnVpbGQtaW4gb3IgdmlhIHRoZQorCSAgU29mdHdhcmUgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgZWl0aGVyIGJ1aWx0LWluIG9yIHZpYSB0aGUKIAkgIHVzZSBvZiBnZW5lcmljIHRyYWNlcG9pbnRzLgogCiAJICBNb3N0IG1vZGVybiBDUFVzIHN1cHBvcnQgcGVyZm9ybWFuY2UgZXZlbnRzIHZpYSBwZXJmb3JtYW5jZQpAQCAtOTQ0LDcgKzk0OSw3IEBACiAJICB1c2VkIHRvIHByb2ZpbGUgdGhlIGNvZGUgdGhhdCBydW5zIG9uIHRoYXQgQ1BVLgogCiAJICBUaGUgTGludXggUGVyZm9ybWFuY2UgRXZlbnQgc3Vic3lzdGVtIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIG9mCi0JICB0aGVzZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgY2V2ZW50IGFwYWJpbGl0aWVzLCBhdmFpbGFibGUgdmlhIGEKKwkgIHRoZXNlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBldmVudCBjYXBhYmlsaXRpZXMsIGF2YWlsYWJsZSB2aWEgYQogCSAgc3lzdGVtIGNhbGwgYW5kIHVzZWQgYnkgdGhlICJwZXJmIiB1dGlsaXR5IGluIHRvb2xzL3BlcmYvLiBJdAogCSAgcHJvdmlkZXMgcGVyIHRhc2sgYW5kIHBlciBDUFUgY291bnRlcnMsIGFuZCBpdCBwcm92aWRlcyBldmVudAogCSAgY2FwYWJpbGl0aWVzIG9uIHRvcCBvZiB0aG9zZS4KQEAgLTk3Niw2ICs5ODEsMTkgQEAKIAogCSAgU2F5IE4gaWYgdW5zdXJlLgogCitjb25maWcgREVCVUdfUEVSRl9VU0VfVk1BTExPQworCWRlZmF1bHQgbgorCWJvb2wgIkRlYnVnOiB1c2Ugdm1hbGxvYyB0byBiYWNrIHBlcmYgbW1hcCgpIGJ1ZmZlcnMiCisJZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyAmJiBERUJVR19LRVJORUwKKwlzZWxlY3QgUEVSRl9VU0VfVk1BTExPQworCWhlbHAKKwkgVXNlIHZtYWxsb2MgbWVtb3J5IHRvIGJhY2sgcGVyZiBtbWFwKCkgYnVmZmVycy4KKworCSBNb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIHZtYWxsb2MgY29kZSBvbiBwbGF0Zm9ybXMKKwkgdGhhdCBkb24ndCByZXF1aXJlIGl0LgorCisJIFNheSBOIGlmIHVuc3VyZS4KKwogZW5kbWVudQogCiBjb25maWcgVk1fRVZFTlRfQ09VTlRFUlMKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNzQ0OTgxOS4uNTk4OGRlYiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTc3OCw3ICs3NzgsNiBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZG9fYmFzaWNfc2V0dXAodm9pZCkKIHsKLQlyY3VfaW5pdF9zY2hlZCgpOyAvKiBuZWVkZWQgYnkgbW9kdWxlX2luaXQgc3RhZ2UuICovCiAJaW5pdF93b3JrcXVldWVzKCk7CiAJY3B1c2V0X2luaXRfc21wKCk7CiAJdXNlcm1vZGVoZWxwZXJfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDllYjE0ODguLjQ2NDY5NGUgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTU1LDcgKzU1LDcgQEAKICNkZWZpbmUgc2htX2ZpbGVfZGF0YShmaWxlKSAoKigoc3RydWN0IHNobV9maWxlX2RhdGEgKiopJihmaWxlKS0+cHJpdmF0ZV9kYXRhKSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htX2ZpbGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wczsKIAogI2RlZmluZSBzaG1faWRzKG5zKQkoKG5zKS0+aWRzW0lQQ19TSE1fSURTXSkKIApAQCAtMzEyLDcgKzMxMiw3IEBACiAJLmdldF91bm1hcHBlZF9hcmVhCT0gc2htX2dldF91bm1hcHBlZF9hcmVhLAogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1fdm1fb3BzID0gewogCS5vcGVuCT0gc2htX29wZW4sCS8qIGNhbGxiYWNrIGZvciBhIG5ldyB2bS1hcmVhIG9wZW4gKi8KIAkuY2xvc2UJPSBzaG1fY2xvc2UsCS8qIGNhbGxiYWNrIGZvciB3aGVuIHRoZSB2bS1hcmVhIGlzIHJlbGVhc2VkICovCiAJLmZhdWx0CT0gc2htX2ZhdWx0LApkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IDdjY2JhNGIuLjAyNDlmNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTcwMyw3ICs3MDMsNyBAQAogc3RhdGljIGludCBjZ3JvdXBfcm1kaXIoc3RydWN0IGlub2RlICp1bnVzZWRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogc3RhdGljIGludCBjZ3JvdXBfcG9wdWxhdGVfZGlyKHN0cnVjdCBjZ3JvdXAgKmNncnApOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNncm91cF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9uczsKIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGNncm91cF9iYWNraW5nX2Rldl9pbmZvID0gewogCS5uYW1lCQk9ICJjZ3JvdXAiLApAQCAtMTcxMCwxNCArMTcxMCwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KLQlzdHJzdHJpcChidWZmZXIpOwogCWlmIChjZnQtPndyaXRlX3U2NCkgewotCQl1NjQgdmFsID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZmZlciwgJmVuZCwgMCk7CisJCXU2NCB2YWwgPSBzaW1wbGVfc3RydG91bGwoc3Ryc3RyaXAoYnVmZmVyKSwgJmVuZCwgMCk7CiAJCWlmICgqZW5kKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHZhbCA9IGNmdC0+d3JpdGVfdTY0KGNncnAsIGNmdCwgdmFsKTsKIAl9IGVsc2UgewotCQlzNjQgdmFsID0gc2ltcGxlX3N0cnRvbGwoYnVmZmVyLCAmZW5kLCAwKTsKKwkJczY0IHZhbCA9IHNpbXBsZV9zdHJ0b2xsKHN0cnN0cmlwKGJ1ZmZlciksICZlbmQsIDApOwogCQlpZiAoKmVuZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR2YWwgPSBjZnQtPndyaXRlX3M2NChjZ3JwLCBjZnQsIHZhbCk7CkBAIC0xNzUzLDggKzE3NTIsNyBAQAogCX0KIAogCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KLQlzdHJzdHJpcChidWZmZXIpOwotCXJldHZhbCA9IGNmdC0+d3JpdGVfc3RyaW5nKGNncnAsIGNmdCwgYnVmZmVyKTsKKwlyZXR2YWwgPSBjZnQtPndyaXRlX3N0cmluZyhjZ3JwLCBjZnQsIHN0cnN0cmlwKGJ1ZmZlcikpOwogCWlmICghcmV0dmFsKQogCQlyZXR2YWwgPSBuYnl0ZXM7CiBvdXQ6CkBAIC0xODYzLDcgKzE4NjEsNyBAQAogCXJldHVybiBzaW5nbGVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNncm91cF9zZXFmaWxlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfc2VxZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gY2dyb3VwX2ZpbGVfd3JpdGUsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTE5MjIsNyArMTkyMCw3IEBACiAJcmV0dXJuIHNpbXBsZV9yZW5hbWUob2xkX2Rpciwgb2xkX2RlbnRyeSwgbmV3X2RpciwgbmV3X2RlbnRyeSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNncm91cF9maWxlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkID0gY2dyb3VwX2ZpbGVfcmVhZCwKIAkud3JpdGUgPSBjZ3JvdXBfZmlsZV93cml0ZSwKIAkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKQEAgLTMzNjksNyArMzM2Nyw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3VwX3Nob3csIHBpZCk7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBjZ3JvdXBfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKQEAgLTMzOTgsNyArMzM5Niw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3Vwc3RhdHNfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9ucyA9IHsKIAkub3BlbiA9IGNncm91cHN0YXRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMzcwOCw4ICszNzA2LDEwIEBACiB2b2lkIF9fY3NzX3B1dChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjc3MtPmNncm91cDsKKwlpbnQgdmFsOwogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNzcy0+cmVmY250KSA9PSAxKSB7CisJdmFsID0gYXRvbWljX2RlY19yZXR1cm4oJmNzcy0+cmVmY250KTsKKwlpZiAodmFsID09IDEpIHsKIAkJaWYgKG5vdGlmeV9vbl9yZWxlYXNlKGNncnApKSB7CiAJCQlzZXRfYml0KENHUlBfUkVMRUFTQUJMRSwgJmNncnAtPmZsYWdzKTsKIAkJCWNoZWNrX2Zvcl9yZWxlYXNlKGNncnApOwpAQCAtMzcxNyw2ICszNzE3LDcgQEAKIAkJY2dyb3VwX3dha2V1cF9ybWRpcl93YWl0ZXIoY2dycCk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOworCVdBUk5fT05fT05DRSh2YWwgPCAxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDU4NTlmNTkuLmY3ODY0YWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMzU5LDEwICszNTksOCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAotCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKSB7CisJaWYgKHRhc2tfc2Vzc2lvbihjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9TSUQsIHBpZCk7Ci0JCXByb2Nfc2lkX2Nvbm5lY3RvcihjdXJyKTsKLQl9CiAKIAlpZiAodGFza19wZ3JwKGN1cnIpICE9IHBpZCkKIAkJY2hhbmdlX3BpZChjdXJyLCBQSURUWVBFX1BHSUQsIHBpZCk7CkBAIC05OTEsOCArOTg5LDYgQEAKIAl0c2stPm1lbXBvbGljeSA9IE5VTEw7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRlVURVgKLQlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJnRzay0+cGlfc3RhdGVfbGlzdCkpKQotCQlleGl0X3BpX3N0YXRlX2xpc3QodHNrKTsKIAlpZiAodW5saWtlbHkoY3VycmVudC0+cGlfc3RhdGVfY2FjaGUpKQogCQlrZnJlZShjdXJyZW50LT5waV9zdGF0ZV9jYWNoZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDI2NmM2YWYuLjE2NmI4YzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtOTEsNyArOTEsNyBAQAogCWludCBjcHU7CiAJaW50IHRvdGFsID0gMDsKIAotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXRvdGFsICs9IHBlcl9jcHUocHJvY2Vzc19jb3VudHMsIGNwdSk7CiAKIAlyZXR1cm4gdG90YWw7CkBAIC01NzAsMTIgKzU3MCwxOCBAQAogCiAJLyogR2V0IHJpZCBvZiBhbnkgZnV0ZXhlcyB3aGVuIHJlbGVhc2luZyB0aGUgbW0gKi8KICNpZmRlZiBDT05GSUdfRlVURVgKLQlpZiAodW5saWtlbHkodHNrLT5yb2J1c3RfbGlzdCkpCisJaWYgKHVubGlrZWx5KHRzay0+cm9idXN0X2xpc3QpKSB7CiAJCWV4aXRfcm9idXN0X2xpc3QodHNrKTsKKwkJdHNrLT5yb2J1c3RfbGlzdCA9IE5VTEw7CisJfQogI2lmZGVmIENPTkZJR19DT01QQVQKLQlpZiAodW5saWtlbHkodHNrLT5jb21wYXRfcm9idXN0X2xpc3QpKQorCWlmICh1bmxpa2VseSh0c2stPmNvbXBhdF9yb2J1c3RfbGlzdCkpIHsKIAkJY29tcGF0X2V4aXRfcm9idXN0X2xpc3QodHNrKTsKKwkJdHNrLT5jb21wYXRfcm9idXN0X2xpc3QgPSBOVUxMOworCX0KICNlbmRpZgorCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmdHNrLT5waV9zdGF0ZV9saXN0KSkpCisJCWV4aXRfcGlfc3RhdGVfbGlzdCh0c2spOwogI2VuZGlmCiAKIAkvKiBHZXQgcmlkIG9mIGFueSBjYWNoZWQgcmVnaXN0ZXIgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggMjQ4ZGQxMS4uZmI2NWU4MiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTg5LDM2ICs4OSwzNiBAQAogCXVuaW9uIGZ1dGV4X2tleSBrZXk7CiB9OwogCi0vKgotICogV2UgdXNlIHRoaXMgaGFzaGVkIHdhaXRxdWV1ZSBpbnN0ZWFkIG9mIGEgbm9ybWFsIHdhaXRfcXVldWVfdCwgc28KKy8qKgorICogc3RydWN0IGZ1dGV4X3EgLSBUaGUgaGFzaGVkIGZ1dGV4IHF1ZXVlIGVudHJ5LCBvbmUgcGVyIHdhaXRpbmcgdGFzaworICogQHRhc2s6CQl0aGUgdGFzayB3YWl0aW5nIG9uIHRoZSBmdXRleAorICogQGxvY2tfcHRyOgkJdGhlIGhhc2ggYnVja2V0IGxvY2sKKyAqIEBrZXk6CQl0aGUga2V5IHRoZSBmdXRleCBpcyBoYXNoZWQgb24KKyAqIEBwaV9zdGF0ZToJCW9wdGlvbmFsIHByaW9yaXR5IGluaGVyaXRhbmNlIHN0YXRlCisgKiBAcnRfd2FpdGVyOgkJcnRfd2FpdGVyIHN0b3JhZ2UgZm9yIHVzZSB3aXRoIHJlcXVldWVfcGkKKyAqIEByZXF1ZXVlX3BpX2tleToJdGhlIHJlcXVldWVfcGkgdGFyZ2V0IGZ1dGV4IGtleQorICogQGJpdHNldDoJCWJpdHNldCBmb3IgdGhlIG9wdGlvbmFsIGJpdG1hc2tlZCB3YWtldXAKKyAqCisgKiBXZSB1c2UgdGhpcyBoYXNoZWQgd2FpdHF1ZXVlLCBpbnN0ZWFkIG9mIGEgbm9ybWFsIHdhaXRfcXVldWVfdCwgc28KICAqIHdlIGNhbiB3YWtlIG9ubHkgdGhlIHJlbGV2YW50IG9uZXMgKGhhc2hlZCBxdWV1ZXMgbWF5IGJlIHNoYXJlZCkuCiAgKgogICogQSBmdXRleF9xIGhhcyBhIHdva2VuIHN0YXRlLCBqdXN0IGxpa2UgdGFza3MgaGF2ZSBUQVNLX1JVTk5JTkcuCiAgKiBJdCBpcyBjb25zaWRlcmVkIHdva2VuIHdoZW4gcGxpc3Rfbm9kZV9lbXB0eSgmcS0+bGlzdCkgfHwgcS0+bG9ja19wdHIgPT0gMC4KICAqIFRoZSBvcmRlciBvZiB3YWt1cCBpcyBhbHdheXMgdG8gbWFrZSB0aGUgZmlyc3QgY29uZGl0aW9uIHRydWUsIHRoZW4KLSAqIHdha2UgdXAgcS0+d2FpdGVyLCB0aGVuIG1ha2UgdGhlIHNlY29uZCBjb25kaXRpb24gdHJ1ZS4KKyAqIHRoZSBzZWNvbmQuCisgKgorICogUEkgZnV0ZXhlcyBhcmUgdHlwaWNhbGx5IHdva2VuIGJlZm9yZSB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGhhc2ggbGlzdCB2aWEKKyAqIHRoZSBydF9tdXRleCBjb2RlLiBTZWUgdW5xdWV1ZV9tZV9waSgpLgogICovCiBzdHJ1Y3QgZnV0ZXhfcSB7CiAJc3RydWN0IHBsaXN0X25vZGUgbGlzdDsKLQkvKiBXYWl0ZXIgcmVmZXJlbmNlICovCisKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0KLQkvKiBXaGljaCBoYXNoIGxpc3QgbG9jayB0byB1c2U6ICovCiAJc3BpbmxvY2tfdCAqbG9ja19wdHI7Ci0KLQkvKiBLZXkgd2hpY2ggdGhlIGZ1dGV4IGlzIGhhc2hlZCBvbjogKi8KIAl1bmlvbiBmdXRleF9rZXkga2V5OwotCi0JLyogT3B0aW9uYWwgcHJpb3JpdHkgaW5oZXJpdGFuY2Ugc3RhdGU6ICovCiAJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZTsKLQotCS8qIHJ0X3dhaXRlciBzdG9yYWdlIGZvciByZXF1ZXVlX3BpOiAqLwogCXN0cnVjdCBydF9tdXRleF93YWl0ZXIgKnJ0X3dhaXRlcjsKLQotCS8qIFRoZSBleHBlY3RlZCByZXF1ZXVlIHBpIHRhcmdldCBmdXRleCBrZXk6ICovCiAJdW5pb24gZnV0ZXhfa2V5ICpyZXF1ZXVlX3BpX2tleTsKLQotCS8qIEJpdHNldCBmb3IgdGhlIG9wdGlvbmFsIGJpdG1hc2tlZCB3YWtldXAgKi8KIAl1MzIgYml0c2V0OwogfTsKIApAQCAtMTUwLDcgKzE1MCw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2Z1dGV4KHVuaW9uIGZ1dGV4X2tleSAqa2V5MSwgdW5pb24gZnV0ZXhfa2V5ICprZXkyKQogewotCXJldHVybiAoa2V5MS0+Ym90aC53b3JkID09IGtleTItPmJvdGgud29yZAorCXJldHVybiAoa2V5MSAmJiBrZXkyCisJCSYmIGtleTEtPmJvdGgud29yZCA9PSBrZXkyLT5ib3RoLndvcmQKIAkJJiYga2V5MS0+Ym90aC5wdHIgPT0ga2V5Mi0+Ym90aC5wdHIKIAkJJiYga2V5MS0+Ym90aC5vZmZzZXQgPT0ga2V5Mi0+Ym90aC5vZmZzZXQpOwogfQpAQCAtMTk4LDExICsxOTksMTIgQEAKIH0KIAogLyoqCi0gKiBnZXRfZnV0ZXhfa2V5IC0gR2V0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIHRoZSBrZXlzIGZvciBhIGZ1dGV4LgotICogQHVhZGRyOiB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1dGV4Ci0gKiBAZnNoYXJlZDogMCBmb3IgYSBQUk9DRVNTX1BSSVZBVEUgZnV0ZXgsIDEgZm9yIFBST0NFU1NfU0hBUkVECi0gKiBAa2V5OiBhZGRyZXNzIHdoZXJlIHJlc3VsdCBpcyBzdG9yZWQuCi0gKiBAcnc6IG1hcHBpbmcgbmVlZHMgdG8gYmUgcmVhZC93cml0ZSAodmFsdWVzOiBWRVJJRllfUkVBRCwgVkVSSUZZX1dSSVRFKQorICogZ2V0X2Z1dGV4X2tleSgpIC0gR2V0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIHRoZSBrZXlzIGZvciBhIGZ1dGV4CisgKiBAdWFkZHI6CXZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZnV0ZXgKKyAqIEBmc2hhcmVkOgkwIGZvciBhIFBST0NFU1NfUFJJVkFURSBmdXRleCwgMSBmb3IgUFJPQ0VTU19TSEFSRUQKKyAqIEBrZXk6CWFkZHJlc3Mgd2hlcmUgcmVzdWx0IGlzIHN0b3JlZC4KKyAqIEBydzoJCW1hcHBpbmcgbmVlZHMgdG8gYmUgcmVhZC93cml0ZSAodmFsdWVzOiBWRVJJRllfUkVBRCwKKyAqIAkJVkVSSUZZX1dSSVRFKQogICoKICAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIDAKICAqIFRoZSBrZXkgd29yZHMgYXJlIHN0b3JlZCBpbiAqa2V5IG9uIHN1Y2Nlc3MuCkBAIC0yODgsOCArMjkwLDggQEAKIAlkcm9wX2Z1dGV4X2tleV9yZWZzKGtleSk7CiB9CiAKLS8qCi0gKiBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSAtIGZhdWx0IGluIHVzZXIgYWRkcmVzcyBhbmQgdmVyaWZ5IFJXIGFjY2VzcworLyoqCisgKiBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSgpIC0gRmF1bHQgaW4gdXNlciBhZGRyZXNzIGFuZCB2ZXJpZnkgUlcgYWNjZXNzCiAgKiBAdWFkZHI6CXBvaW50ZXIgdG8gZmF1bHRpbmcgdXNlciBzcGFjZSBhZGRyZXNzCiAgKgogICogU2xvdyBwYXRoIHRvIGZpeHVwIHRoZSBmYXVsdCB3ZSBqdXN0IHRvb2sgaW4gdGhlIGF0b21pYyB3cml0ZQpAQCAtMzA5LDggKzMxMSw4IEBACiAKIC8qKgogICogZnV0ZXhfdG9wX3dhaXRlcigpIC0gUmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHdhaXRlciBvbiBhIGZ1dGV4Ci0gKiBAaGI6ICAgICB0aGUgaGFzaCBidWNrZXQgdGhlIGZ1dGV4X3EncyByZXNpZGUgaW4KLSAqIEBrZXk6ICAgIHRoZSBmdXRleCBrZXkgKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gb3RoZXIgZnV0ZXggZnV0ZXhfcSdzKQorICogQGhiOgkJdGhlIGhhc2ggYnVja2V0IHRoZSBmdXRleF9xJ3MgcmVzaWRlIGluCisgKiBAa2V5Ogl0aGUgZnV0ZXgga2V5ICh0byBkaXN0aW5ndWlzaCBpdCBmcm9tIG90aGVyIGZ1dGV4IGZ1dGV4X3EncykKICAqCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBoYiBsb2NrIGhlbGQuCiAgKi8KQEAgLTU4OCw3ICs1OTAsNyBAQAogfQogCiAvKioKLSAqIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgLSBhdG9taWMgd29yayByZXF1aXJlZCB0byBhY3F1aXJlIGEgcGkgYXdhcmUgZnV0ZXgKKyAqIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgLSBBdG9taWMgd29yayByZXF1aXJlZCB0byBhY3F1aXJlIGEgcGkgYXdhcmUgZnV0ZXgKICAqIEB1YWRkcjoJCXRoZSBwaSBmdXRleCB1c2VyIGFkZHJlc3MKICAqIEBoYjoJCQl0aGUgcGkgZnV0ZXggaGFzaCBidWNrZXQKICAqIEBrZXk6CQl0aGUgZnV0ZXgga2V5IGFzc29jaWF0ZWQgd2l0aCB1YWRkciBhbmQgaGIKQEAgLTkxNSw4ICs5MTcsOCBAQAogCWhiMSA9IGhhc2hfZnV0ZXgoJmtleTEpOwogCWhiMiA9IGhhc2hfZnV0ZXgoJmtleTIpOwogCi0JZG91YmxlX2xvY2tfaGIoaGIxLCBoYjIpOwogcmV0cnlfcHJpdmF0ZToKKwlkb3VibGVfbG9ja19oYihoYjEsIGhiMik7CiAJb3BfcmV0ID0gZnV0ZXhfYXRvbWljX29wX2ludXNlcihvcCwgdWFkZHIyKTsKIAlpZiAodW5saWtlbHkob3BfcmV0IDwgMCkpIHsKIApAQCAtMTAxMSw5ICsxMDEzLDkgQEAKIAogLyoqCiAgKiByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoKSAtIFdha2UgYSB0YXNrIHRoYXQgYWNxdWlyZWQgdGhlIGxvY2sgZHVyaW5nIHJlcXVldWUKLSAqIHE6CXRoZSBmdXRleF9xCi0gKiBrZXk6CXRoZSBrZXkgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4Ci0gKiBoYjogIHRoZSBoYXNoX2J1Y2tldCBvZiB0aGUgcmVxdWV1ZSB0YXJnZXQgZnV0ZXgKKyAqIEBxOgkJdGhlIGZ1dGV4X3EKKyAqIEBrZXk6CXRoZSBrZXkgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4CisgKiBAaGI6CQl0aGUgaGFzaF9idWNrZXQgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4CiAgKgogICogRHVyaW5nIGZ1dGV4X3JlcXVldWUsIHdpdGggcmVxdWV1ZV9waT0xLCBpdCBpcyBwb3NzaWJsZSB0byBhY3F1aXJlIHRoZQogICogdGFyZ2V0IGZ1dGV4IGlmIGl0IGlzIHVuY29udGVuZGVkIG9yIHZpYSBhIGxvY2sgc3RlYWwuICBTZXQgdGhlIGZ1dGV4X3Ega2V5CkBAIC0xMDI3LDcgKzEwMjksNiBAQAogdm9pZCByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LAogCQkJICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKIHsKLQlkcm9wX2Z1dGV4X2tleV9yZWZzKCZxLT5rZXkpOwogCWdldF9mdXRleF9rZXlfcmVmcyhrZXkpOwogCXEtPmtleSA9ICprZXk7CiAKQEAgLTEyMjUsNiArMTIyNiw3IEBACiAJCSAqLwogCQlpZiAocmV0ID09IDEpIHsKIAkJCVdBUk5fT04ocGlfc3RhdGUpOworCQkJZHJvcF9jb3VudCsrOwogCQkJdGFza19jb3VudCsrOwogCQkJcmV0ID0gZ2V0X2Z1dGV4X3ZhbHVlX2xvY2tlZCgmY3VydmFsMiwgdWFkZHIyKTsKIAkJCWlmICghcmV0KQpAQCAtMTMwMyw2ICsxMzA1LDcgQEAKIAkJCWlmIChyZXQgPT0gMSkgewogCQkJCS8qIFdlIGdvdCB0aGUgbG9jay4gKi8KIAkJCQlyZXF1ZXVlX3BpX3dha2VfZnV0ZXgodGhpcywgJmtleTIsIGhiMik7CisJCQkJZHJvcF9jb3VudCsrOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIGlmIChyZXQpIHsKIAkJCQkvKiAtRURFQURMSyAqLwpAQCAtMTM1MCw2ICsxMzUzLDI1IEBACiAJcmV0dXJuIGhiOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK3F1ZXVlX3VubG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKK3sKKwlzcGluX3VubG9jaygmaGItPmxvY2spOworCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7Cit9CisKKy8qKgorICogcXVldWVfbWUoKSAtIEVucXVldWUgdGhlIGZ1dGV4X3Egb24gdGhlIGZ1dGV4X2hhc2hfYnVja2V0CisgKiBAcToJVGhlIGZ1dGV4X3EgdG8gZW5xdWV1ZQorICogQGhiOglUaGUgZGVzdGluYXRpb24gaGFzaCBidWNrZXQKKyAqCisgKiBUaGUgaGItPmxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIsIGFuZCBpcyByZWxlYXNlZCBoZXJlLiBBIGNhbGwgdG8KKyAqIHF1ZXVlX21lKCkgaXMgdHlwaWNhbGx5IHBhaXJlZCB3aXRoIGV4YWN0bHkgb25lIGNhbGwgdG8gdW5xdWV1ZV9tZSgpLiAgVGhlCisgKiBleGNlcHRpb25zIGludm9sdmUgdGhlIFBJIHJlbGF0ZWQgb3BlcmF0aW9ucywgd2hpY2ggbWF5IHVzZSB1bnF1ZXVlX21lX3BpKCkKKyAqIG9yIG5vdGhpbmcgaWYgdGhlIHVucXVldWUgaXMgZG9uZSBhcyBwYXJ0IG9mIHRoZSB3YWtlIHByb2Nlc3MgYW5kIHRoZSB1bnF1ZXVlCisgKiBzdGF0ZSBpcyBpbXBsaWNpdCBpbiB0aGUgc3RhdGUgb2Ygd29rZW4gdGFzayAoc2VlIGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSgpIGZvcgorICogYW4gZXhhbXBsZSkuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9tZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKIHsKIAlpbnQgcHJpbzsKQEAgLTEzNzMsMTkgKzEzOTUsMTcgQEAKIAlzcGluX3VubG9jaygmaGItPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXF1ZXVlX3VubG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKLXsKLQlzcGluX3VubG9jaygmaGItPmxvY2spOwotCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7Ci19Ci0KLS8qCi0gKiBxdWV1ZV9tZSBhbmQgdW5xdWV1ZV9tZSBtdXN0IGJlIGNhbGxlZCBhcyBhIHBhaXIsIGVhY2gKLSAqIGV4YWN0bHkgb25jZS4gIFRoZXkgYXJlIGNhbGxlZCB3aXRoIHRoZSBoYXNoZWQgc3BpbmxvY2sgaGVsZC4KKy8qKgorICogdW5xdWV1ZV9tZSgpIC0gUmVtb3ZlIHRoZSBmdXRleF9xIGZyb20gaXRzIGZ1dGV4X2hhc2hfYnVja2V0CisgKiBAcToJVGhlIGZ1dGV4X3EgdG8gdW5xdWV1ZQorICoKKyAqIFRoZSBxLT5sb2NrX3B0ciBtdXN0IG5vdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuIEEgY2FsbCB0byB1bnF1ZXVlX21lKCkgbXVzdAorICogYmUgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgZWFybGllciBjYWxsIHRvIHF1ZXVlX21lKCkuCisgKgorICogUmV0dXJuczoKKyAqICAgMSAtIGlmIHRoZSBmdXRleF9xIHdhcyBzdGlsbCBxdWV1ZWQgKGFuZCB3ZSByZW1vdmVkIHVucXVldWVkIGl0KQorICogICAwIC0gaWYgdGhlIGZ1dGV4X3Egd2FzIGFscmVhZHkgcmVtb3ZlZCBieSB0aGUgd2FraW5nIHRocmVhZAogICovCi0KLS8qIFJldHVybiAxIGlmIHdlIHdlcmUgc3RpbGwgcXVldWVkIChpZS4gMCBtZWFucyB3ZSB3ZXJlIHdva2VuKSAqLwogc3RhdGljIGludCB1bnF1ZXVlX21lKHN0cnVjdCBmdXRleF9xICpxKQogewogCXNwaW5sb2NrX3QgKmxvY2tfcHRyOwpAQCAtMTYzOCwxNyArMTY1OCwxNCBAQAogc3RhdGljIHZvaWQgZnV0ZXhfd2FpdF9xdWV1ZV9tZShzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCBzdHJ1Y3QgZnV0ZXhfcSAqcSwKIAkJCQlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyICp0aW1lb3V0KQogewotCXF1ZXVlX21lKHEsIGhiKTsKLQogCS8qCi0JICogVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIHNjaGVkdWxpbmcgc2luY2UgdGhlIHF1ZXVlX21lKCksIGFzIHdlCi0JICogY2Fubm90IGhvbGQgYSBzcGlubG9jayBhY3Jvc3MgdGhlIGdldF91c2VyKCkgaW4gY2FzZSBpdAotCSAqIGZhdWx0cywgYW5kIHdlIGNhbm5vdCBqdXN0IHNldCBUQVNLX0lOVEVSUlVQVElCTEUgc3RhdGUgd2hlbgotCSAqIHF1ZXVlaW5nIG91cnNlbHZlcyBpbnRvIHRoZSBmdXRleCBoYXNoLiBUaGlzIGNvZGUgdGh1cyBoYXMgdG8KLQkgKiByZWx5IG9uIHRoZSBmdXRleF93YWtlKCkgY29kZSByZW1vdmluZyB1cyBmcm9tIGhhc2ggd2hlbiBpdAotCSAqIHdha2VzIHVzIHVwLgorCSAqIFRoZSB0YXNrIHN0YXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJlZm9yZSBhbm90aGVyIHRhc2sgY2FuCisJICogd2FrZSBpdC4gc2V0X2N1cnJlbnRfc3RhdGUoKSBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZXRfbWIoKSBhbmQKKwkgKiBxdWV1ZV9tZSgpIGNhbGxzIHNwaW5fdW5sb2NrKCkgdXBvbiBjb21wbGV0aW9uLCBib3RoIHNlcmlhbGl6aW5nCisJICogYWNjZXNzIHRvIHRoZSBoYXNoIGxpc3QgYW5kIGZvcmNpbmcgYW5vdGhlciBtZW1vcnkgYmFycmllci4KIAkgKi8KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXF1ZXVlX21lKHEsIGhiKTsKIAogCS8qIEFybSB0aGUgdGltZXIgKi8KIAlpZiAodGltZW91dCkgewpAQCAtMTY1OCw4ICsxNjc1LDggQEAKIAl9CiAKIAkvKgotCSAqICFwbGlzdF9ub2RlX2VtcHR5KCkgaXMgc2FmZSBoZXJlIHdpdGhvdXQgYW55IGxvY2suCi0JICogcS5sb2NrX3B0ciAhPSAwIGlzIG5vdCBzYWZlLCBiZWNhdXNlIG9mIG9yZGVyaW5nIGFnYWluc3Qgd2FrZXVwLgorCSAqIElmIHdlIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGhhc2ggbGlzdCwgdGhlbiBhbm90aGVyIHRhc2sKKwkgKiBoYXMgdHJpZWQgdG8gd2FrZSB1cywgYW5kIHdlIGNhbiBza2lwIHRoZSBjYWxsIHRvIHNjaGVkdWxlKCkuCiAJICovCiAJaWYgKGxpa2VseSghcGxpc3Rfbm9kZV9lbXB0eSgmcS0+bGlzdCkpKSB7CiAJCS8qCkBAIC0xNzc2LDYgKzE3OTMsNyBAQAogCQkJCQkgICAgIGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zKTsKIAl9CiAKK3JldHJ5OgogCS8qIFByZXBhcmUgdG8gd2FpdCBvbiB1YWRkci4gKi8KIAlyZXQgPSBmdXRleF93YWl0X3NldHVwKHVhZGRyLCB2YWwsIGZzaGFyZWQsICZxLCAmaGIpOwogCWlmIChyZXQpCkBAIC0xNzkzLDkgKzE4MTEsMTQgQEAKIAkJZ290byBvdXRfcHV0X2tleTsKIAogCS8qCi0JICogV2UgZXhwZWN0IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLCBidXQgYW5vdGhlciB0aHJlYWQgbWF5Ci0JICogaGF2ZSBoYW5kbGVkIGl0IGZvciB1cyBhbHJlYWR5LgorCSAqIFdlIGV4cGVjdCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSwgYnV0IHdlIG1pZ2h0IGJlIHRoZQorCSAqIHZpY3RpbSBvZiBhIHNwdXJpb3VzIHdha2V1cCBhcyB3ZWxsLgogCSAqLworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCQlnb3RvIHJldHJ5OworCX0KKwogCXJldCA9IC1FUkVTVEFSVFNZUzsKIAlpZiAoIWFic190aW1lKQogCQlnb3RvIG91dF9wdXRfa2V5OwpAQCAtMjEwMiwxMSArMjEyNSwxMiBAQAogCQkgKiBVbnF1ZXVlIHRoZSBmdXRleF9xIGFuZCBkZXRlcm1pbmUgd2hpY2ggaXQgd2FzLgogCQkgKi8KIAkJcGxpc3RfZGVsKCZxLT5saXN0LCAmcS0+bGlzdC5wbGlzdCk7Ci0JCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7CiAKKwkJLyogSGFuZGxlIHNwdXJpb3VzIHdha2V1cHMgZ3JhY2VmdWxseSAqLworCQlyZXQgPSAtRVdPVUxEQkxPQ0s7CiAJCWlmICh0aW1lb3V0ICYmICF0aW1lb3V0LT50YXNrKQogCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZWxzZQorCQllbHNlIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldCA9IC1FUkVTVEFSVE5PSU5UUjsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTIxMTQsMTIgKzIxMzgsMTIgQEAKIAogLyoqCiAgKiBmdXRleF93YWl0X3JlcXVldWVfcGkoKSAtIFdhaXQgb24gdWFkZHIgYW5kIHRha2UgdWFkZHIyCi0gKiBAdWFkZHI6CXRoZSBmdXRleCB3ZSBpbml0aWFseWwgd2FpdCBvbiAobm9uLXBpKQorICogQHVhZGRyOgl0aGUgZnV0ZXggd2UgaW5pdGlhbGx5IHdhaXQgb24gKG5vbi1waSkKICAqIEBmc2hhcmVkOgl3aGV0aGVyIHRoZSBmdXRleGVzIGFyZSBzaGFyZWQgKDEpIG9yIG5vdCAoMCkuICBUaGV5IG11c3QgYmUKICAqIAkJdGhlIHNhbWUgdHlwZSwgbm8gcmVxdWV1ZWluZyBmcm9tIHByaXZhdGUgdG8gc2hhcmVkLCBldGMuCiAgKiBAdmFsOgl0aGUgZXhwZWN0ZWQgdmFsdWUgb2YgdWFkZHIKICAqIEBhYnNfdGltZToJYWJzb2x1dGUgdGltZW91dAotICogQGJpdHNldDoJMzIgYml0IHdha2V1cCBiaXRzZXQgc2V0IGJ5IHVzZXJzcGFjZSwgZGVmYXVsdHMgdG8gYWxsLgorICogQGJpdHNldDoJMzIgYml0IHdha2V1cCBiaXRzZXQgc2V0IGJ5IHVzZXJzcGFjZSwgZGVmYXVsdHMgdG8gYWxsCiAgKiBAY2xvY2tydDoJd2hldGhlciB0byB1c2UgQ0xPQ0tfUkVBTFRJTUUgKDEpIG9yIENMT0NLX01PTk9UT05JQyAoMCkKICAqIEB1YWRkcjI6CXRoZSBwaSBmdXRleCB3ZSB3aWxsIHRha2UgcHJpb3IgdG8gcmV0dXJuaW5nIHRvIHVzZXItc3BhY2UKICAqCkBAIC0yMjQ2LDcgKzIyNzAsNyBAQAogCQlyZXMgPSBmaXh1cF9vd25lcih1YWRkcjIsIGZzaGFyZWQsICZxLCAhcmV0KTsKIAkJLyoKIAkJICogSWYgZml4dXBfb3duZXIoKSByZXR1cm5lZCBhbiBlcnJvciwgcHJvcHJvZ2F0ZSB0aGF0LiAgSWYgaXQKLQkJICogYWNxdWlyZWQgdGhlIGxvY2ssIGNsZWFyIG91ciAtRVRJTUVET1VUIG9yIC1FSU5UUi4KKwkJICogYWNxdWlyZWQgdGhlIGxvY2ssIGNsZWFyIC1FVElNRURPVVQgb3IgLUVJTlRSLgogCQkgKi8KIAkJaWYgKHJlcykKIAkJCXJldCA9IChyZXMgPCAwKSA/IHJlcyA6IDA7CkBAIC0yMzAyLDkgKzIzMjYsOSBAQAogICovCiAKIC8qKgotICogc3lzX3NldF9yb2J1c3RfbGlzdCAtIHNldCB0aGUgcm9idXN0LWZ1dGV4IGxpc3QgaGVhZCBvZiBhIHRhc2sKLSAqIEBoZWFkOiBwb2ludGVyIHRvIHRoZSBsaXN0LWhlYWQKLSAqIEBsZW46IGxlbmd0aCBvZiB0aGUgbGlzdC1oZWFkLCBhcyB1c2Vyc3BhY2UgZXhwZWN0cworICogc3lzX3NldF9yb2J1c3RfbGlzdCgpIC0gU2V0IHRoZSByb2J1c3QtZnV0ZXggbGlzdCBoZWFkIG9mIGEgdGFzaworICogQGhlYWQ6CXBvaW50ZXIgdG8gdGhlIGxpc3QtaGVhZAorICogQGxlbjoJbGVuZ3RoIG9mIHRoZSBsaXN0LWhlYWQsIGFzIHVzZXJzcGFjZSBleHBlY3RzCiAgKi8KIFNZU0NBTExfREVGSU5FMihzZXRfcm9idXN0X2xpc3QsIHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqLCBoZWFkLAogCQlzaXplX3QsIGxlbikKQEAgLTIzMjMsMTAgKzIzNDcsMTAgQEAKIH0KIAogLyoqCi0gKiBzeXNfZ2V0X3JvYnVzdF9saXN0IC0gZ2V0IHRoZSByb2J1c3QtZnV0ZXggbGlzdCBoZWFkIG9mIGEgdGFzawotICogQHBpZDogcGlkIG9mIHRoZSBwcm9jZXNzIFt6ZXJvIGZvciBjdXJyZW50IHRhc2tdCi0gKiBAaGVhZF9wdHI6IHBvaW50ZXIgdG8gYSBsaXN0LWhlYWQgcG9pbnRlciwgdGhlIGtlcm5lbCBmaWxscyBpdCBpbgotICogQGxlbl9wdHI6IHBvaW50ZXIgdG8gYSBsZW5ndGggZmllbGQsIHRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIGhlYWRlciBzaXplCisgKiBzeXNfZ2V0X3JvYnVzdF9saXN0KCkgLSBHZXQgdGhlIHJvYnVzdC1mdXRleCBsaXN0IGhlYWQgb2YgYSB0YXNrCisgKiBAcGlkOglwaWQgb2YgdGhlIHByb2Nlc3MgW3plcm8gZm9yIGN1cnJlbnQgdGFza10KKyAqIEBoZWFkX3B0cjoJcG9pbnRlciB0byBhIGxpc3QtaGVhZCBwb2ludGVyLCB0aGUga2VybmVsIGZpbGxzIGl0IGluCisgKiBAbGVuX3B0cjoJcG9pbnRlciB0byBhIGxlbmd0aCBmaWVsZCwgdGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgaGVhZGVyIHNpemUKICAqLwogU1lTQ0FMTF9ERUZJTkUzKGdldF9yb2J1c3RfbGlzdCwgaW50LCBwaWQsCiAJCXN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqIF9fdXNlciAqLCBoZWFkX3B0ciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGU1ZDk4Y2UuLjNlMWMzNmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtNTA5LDEzICs1MDksMTQgQEAKICAqIG5leHQgZXZlbnQKICAqIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYW5kIGJhc2UtPmxvY2sgaGVsZAogICovCi1zdGF0aWMgdm9pZCBocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UpCitzdGF0aWMgdm9pZAoraHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlLCBpbnQgc2tpcF9lcXVhbCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlID0gY3B1X2Jhc2UtPmNsb2NrX2Jhc2U7Ci0Ja3RpbWVfdCBleHBpcmVzOworCWt0aW1lX3QgZXhwaXJlcywgZXhwaXJlc19uZXh0OwogCi0JY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOworCWV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOwogCiAJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyssIGJhc2UrKykgewogCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CkBAIC01MzEsMTAgKzUzMiwxNSBAQAogCQkgKi8KIAkJaWYgKGV4cGlyZXMudHY2NCA8IDApCiAJCQlleHBpcmVzLnR2NjQgPSAwOwotCQlpZiAoZXhwaXJlcy50djY0IDwgY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0KQotCQkJY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CisJCWlmIChleHBpcmVzLnR2NjQgPCBleHBpcmVzX25leHQudHY2NCkKKwkJCWV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CiAJfQogCisJaWYgKHNraXBfZXF1YWwgJiYgZXhwaXJlc19uZXh0LnR2NjQgPT0gY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0KQorCQlyZXR1cm47CisKKwljcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgPSBleHBpcmVzX25leHQudHY2NDsKKwogCWlmIChjcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgIT0gS1RJTUVfTUFYKQogCQl0aWNrX3Byb2dyYW1fZXZlbnQoY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dCwgMSk7CiB9CkBAIC02MTcsNyArNjIzLDcgQEAKIAliYXNlLT5jbG9ja19iYXNlW0NMT0NLX1JFQUxUSU1FXS5vZmZzZXQgPQogCQl0aW1lc3BlY190b19rdGltZShyZWFsdGltZV9vZmZzZXQpOwogCi0JaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZSk7CisJaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZSwgMCk7CiAJc3Bpbl91bmxvY2soJmJhc2UtPmxvY2spOwogfQogCkBAIC03MjAsOCArNzI2LDYgQEAKIAkvKiAiUmV0cmlnZ2VyIiB0aGUgaW50ZXJydXB0IHRvIGdldCB0aGluZ3MgZ29pbmcgKi8KIAlyZXRyaWdnZXJfbmV4dF9ldmVudChOVUxMKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlN3aXRjaGVkIHRvIGhpZ2ggcmVzb2x1dGlvbiBtb2RlIG9uIENQVSAlZFxuIiwKLQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNzMwLDcgKzczNCw4IEBACiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2hyZXNfYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfaXNfaHJlc19lbmFibGVkKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfc3dpdGNoX3RvX2hyZXModm9pZCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfZm9yY2VfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpiYXNlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZAoraHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UsIGludCBza2lwX2VxdWFsKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfZW5xdWV1ZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXIgKnRpbWVyLAogCQkJCQkgICAgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwKIAkJCQkJICAgIGludCB3YWtldXApCkBAIC04NzMsMTkgKzg3OCwyOSBAQAogCQkJICAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIG5ld3N0YXRlLCBpbnQgcmVwcm9ncmFtKQogewotCWlmICh0aW1lci0+c3RhdGUgJiBIUlRJTUVSX1NUQVRFX0VOUVVFVUVEKSB7Ci0JCS8qCi0JCSAqIFJlbW92ZSB0aGUgdGltZXIgZnJvbSB0aGUgcmJ0cmVlIGFuZCByZXBsYWNlIHRoZQotCQkgKiBmaXJzdCBlbnRyeSBwb2ludGVyIGlmIG5lY2Vzc2FyeS4KLQkJICovCi0JCWlmIChiYXNlLT5maXJzdCA9PSAmdGltZXItPm5vZGUpIHsKLQkJCWJhc2UtPmZpcnN0ID0gcmJfbmV4dCgmdGltZXItPm5vZGUpOwotCQkJLyogUmVwcm9ncmFtIHRoZSBjbG9jayBldmVudCBkZXZpY2UuIGlmIGVuYWJsZWQgKi8KLQkJCWlmIChyZXByb2dyYW0gJiYgaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQotCQkJCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UtPmNwdV9iYXNlKTsKKwlpZiAoISh0aW1lci0+c3RhdGUgJiBIUlRJTUVSX1NUQVRFX0VOUVVFVUVEKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgdGltZXIgZnJvbSB0aGUgcmJ0cmVlIGFuZCByZXBsYWNlIHRoZSBmaXJzdAorCSAqIGVudHJ5IHBvaW50ZXIgaWYgbmVjZXNzYXJ5LgorCSAqLworCWlmIChiYXNlLT5maXJzdCA9PSAmdGltZXItPm5vZGUpIHsKKwkJYmFzZS0+Zmlyc3QgPSByYl9uZXh0KCZ0aW1lci0+bm9kZSk7CisjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUworCQkvKiBSZXByb2dyYW0gdGhlIGNsb2NrIGV2ZW50IGRldmljZS4gaWYgZW5hYmxlZCAqLworCQlpZiAocmVwcm9ncmFtICYmIGhydGltZXJfaHJlc19hY3RpdmUoKSkgeworCQkJa3RpbWVfdCBleHBpcmVzOworCisJCQlleHBpcmVzID0ga3RpbWVfc3ViKGhydGltZXJfZ2V0X2V4cGlyZXModGltZXIpLAorCQkJCQkgICAgYmFzZS0+b2Zmc2V0KTsKKwkJCWlmIChiYXNlLT5jcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgPT0gZXhwaXJlcy50djY0KQorCQkJCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UtPmNwdV9iYXNlLCAxKTsKIAkJfQotCQlyYl9lcmFzZSgmdGltZXItPm5vZGUsICZiYXNlLT5hY3RpdmUpOworI2VuZGlmCiAJfQorCXJiX2VyYXNlKCZ0aW1lci0+bm9kZSwgJmJhc2UtPmFjdGl2ZSk7CitvdXQ6CiAJdGltZXItPnN0YXRlID0gbmV3c3RhdGU7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IGE4MWNmODAuLjE3YzcxYmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCAxMTRlNzA0Li5iZDcyNzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xMjEsNyArMTIxLDkgQEAKIAkJaWYgKCEoc3RhdHVzICYgSVJRX1NQVVJJT1VTX0RJU0FCTEVEKSkKIAkJCWNvbnRpbnVlOwogCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCXRyeV9vbmVfaXJxKGksIGRlc2MpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBjZmFkYzEyLi41MjQwZDc1IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTEzMzMsNyArMTMzMyw3IEBACiAJcmV0dXJuIHNlcV9vcGVuKGZpbHAsICZrcHJvYmVzX3NlcV9vcHMpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2twcm9iZXNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnZnNfa3Byb2Jlc19vcGVyYXRpb25zID0gewogCS5vcGVuICAgICAgICAgICA9IGtwcm9iZXNfb3BlbiwKIAkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19rcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfa3AgPSB7CiAJLnJlYWQgPSAgICAgICAgIHJlYWRfZW5hYmxlZF9maWxlX2Jvb2wsCiAJLndyaXRlID0gICAgICAgIHdyaXRlX2VuYWJsZWRfZmlsZV9ib29sLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDVmZTcwOTkuLmFiN2FlNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTUwLDI5ICsxNTAsNiBAQAogRVhQT1JUX1NZTUJPTChrdGhyZWFkX2NyZWF0ZSk7CiAKIC8qKgotICoga3RocmVhZF9iaW5kIC0gYmluZCBhIGp1c3QtY3JlYXRlZCBrdGhyZWFkIHRvIGEgY3B1LgotICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCi0gKiBAY3B1OiBjcHUgKG1pZ2h0IG5vdCBiZSBvbmxpbmUsIG11c3QgYmUgcG9zc2libGUpIGZvciBAayB0byBydW4gb24uCi0gKgotICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBzZXRfY3B1c19hbGxvd2VkKCksCi0gKiBleGNlcHQgdGhhdCBAY3B1IGRvZXNuJ3QgbmVlZCB0byBiZSBvbmxpbmUsIGFuZCB0aGUgdGhyZWFkIG11c3QgYmUKLSAqIHN0b3BwZWQgKGkuZS4sIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpKS4KLSAqLwotdm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICprLCB1bnNpZ25lZCBpbnQgY3B1KQotewotCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KLQlpZiAoIXdhaXRfdGFza19pbmFjdGl2ZShrLCBUQVNLX1VOSU5URVJSVVBUSUJMRSkpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KLQlzZXRfdGFza19jcHUoaywgY3B1KTsKLQlrLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOwotCWstPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7Ci0Jay0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOwotfQotRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOwotCi0vKioKICAqIGt0aHJlYWRfc3RvcCAtIHN0b3AgYSB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCiAgKgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggMzgxNWFjMWQuLjlhZjU2NzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtMTQyLDYgKzE0MiwxMSBAQAogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbG9ja19jbGFzc19zdGF0c1tNQVhfTE9DS0RFUF9LRVlTXSwgbG9ja19zdGF0cyk7CiAKK3N0YXRpYyBpbmxpbmUgdTY0IGxvY2tzdGF0X2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIGNwdV9jbG9jayhzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCiBzdGF0aWMgaW50IGxvY2tfcG9pbnQodW5zaWduZWQgbG9uZyBwb2ludHNbXSwgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAlpbnQgaTsKQEAgLTE1OCw3ICsxNjMsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgdm9pZCBsb2NrX3RpbWVfaW5jKHN0cnVjdCBsb2NrX3RpbWUgKmx0LCBzNjQgdGltZSkKK3N0YXRpYyB2b2lkIGxvY2tfdGltZV9pbmMoc3RydWN0IGxvY2tfdGltZSAqbHQsIHU2NCB0aW1lKQogewogCWlmICh0aW1lID4gbHQtPm1heCkKIAkJbHQtPm1heCA9IHRpbWU7CkBAIC0yMzQsMTIgKzIzOSwxMiBAQAogc3RhdGljIHZvaWQgbG9ja19yZWxlYXNlX2hvbGR0aW1lKHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrKQogewogCXN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzICpzdGF0czsKLQlzNjQgaG9sZHRpbWU7CisJdTY0IGhvbGR0aW1lOwogCiAJaWYgKCFsb2NrX3N0YXQpCiAJCXJldHVybjsKIAotCWhvbGR0aW1lID0gc2NoZWRfY2xvY2soKSAtIGhsb2NrLT5ob2xkdGltZV9zdGFtcDsKKwlob2xkdGltZSA9IGxvY2tzdGF0X2Nsb2NrKCkgLSBobG9jay0+aG9sZHRpbWVfc3RhbXA7CiAKIAlzdGF0cyA9IGdldF9sb2NrX3N0YXRzKGhsb2NrX2NsYXNzKGhsb2NrKSk7CiAJaWYgKGhsb2NrLT5yZWFkKQpAQCAtMjc5Miw3ICsyNzk3LDcgQEAKIAlobG9jay0+cmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7CiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAogCWhsb2NrLT53YWl0dGltZV9zdGFtcCA9IDA7Ci0JaGxvY2stPmhvbGR0aW1lX3N0YW1wID0gc2NoZWRfY2xvY2soKTsKKwlobG9jay0+aG9sZHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpOwogI2VuZGlmCiAKIAlpZiAoY2hlY2sgPT0gMiAmJiAhbWFya19pcnFmbGFncyhjdXJyLCBobG9jaykpCkBAIC0zMzIyLDcgKzMzMjcsNyBAQAogCWlmIChobG9jay0+aW5zdGFuY2UgIT0gbG9jaykKIAkJcmV0dXJuOwogCi0JaGxvY2stPndhaXR0aW1lX3N0YW1wID0gc2NoZWRfY2xvY2soKTsKKwlobG9jay0+d2FpdHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpOwogCiAJY29udGVudGlvbl9wb2ludCA9IGxvY2tfcG9pbnQoaGxvY2tfY2xhc3MoaGxvY2spLT5jb250ZW50aW9uX3BvaW50LCBpcCk7CiAJY29udGVuZGluZ19wb2ludCA9IGxvY2tfcG9pbnQoaGxvY2tfY2xhc3MoaGxvY2spLT5jb250ZW5kaW5nX3BvaW50LApAQCAtMzM0NSw4ICszMzUwLDcgQEAKIAlzdHJ1Y3QgaGVsZF9sb2NrICpobG9jaywgKnByZXZfaGxvY2s7CiAJc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHMgKnN0YXRzOwogCXVuc2lnbmVkIGludCBkZXB0aDsKLQl1NjQgbm93OwotCXM2NCB3YWl0dGltZSA9IDA7CisJdTY0IG5vdywgd2FpdHRpbWUgPSAwOwogCWludCBpLCBjcHU7CiAKIAlkZXB0aCA9IGN1cnItPmxvY2tkZXBfZGVwdGg7CkBAIC0zMzc0LDcgKzMzNzgsNyBAQAogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWlmIChobG9jay0+d2FpdHRpbWVfc3RhbXApIHsKLQkJbm93ID0gc2NoZWRfY2xvY2soKTsKKwkJbm93ID0gbG9ja3N0YXRfY2xvY2soKTsKIAkJd2FpdHRpbWUgPSBub3cgLSBobG9jay0+d2FpdHRpbWVfc3RhbXA7CiAJCWhsb2NrLT5ob2xkdGltZV9zdGFtcCA9IG5vdzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNWEyOTM5Ny4uOGI3ZDg4MCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTk5MiwxMiArMTk5MiwxNCBAQAogCQkJCQkgIEVsZl9TaGRyICpzZWNoZHJzLAogCQkJCQkgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKIAkJCQkJICB1bnNpZ25lZCBpbnQgc3RyaW5kZXgsCi0JCQkJCSAgY29uc3QgRWxmX0hkciAqaGRyLAorCQkJCQkgIGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCQkJCSAgY29uc3QgY2hhciAqc2Vjc3RyaW5ncywKIAkJCQkJICB1bnNpZ25lZCBsb25nICpwc3Ryb2ZmcywKIAkJCQkJICB1bnNpZ25lZCBsb25nICpzdHJtYXApCiB7CisJcmV0dXJuIDA7CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kLAogCQkJCUVsZl9TaGRyICpzZWNoZHJzLAogCQkJCXVuc2lnbmVkIGludCBzaG51bSwKQEAgLTIwODEsOSArMjA4Myw4IEBACiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWxvbmcgZXJyID0gMDsKIAl2b2lkICpwZXJjcHUgPSBOVUxMLCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKIAl1bnNpZ25lZCBsb25nIHN5bW9mZnMsIHN0cm9mZnMsICpzdHJtYXA7Ci0jZW5kaWYKKwogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAKIAlERUJVR1AoImxvYWRfbW9kdWxlOiB1bW9kPSVwLCBsZW49JWx1LCB1YXJncz0lcFxuIiwKQEAgLTMwOTEsNyArMzA5Miw2IEBACiAJCSAgIHN0cnVjdCBtb2R2ZXJzaW9uX2luZm8gKnZlciwKIAkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCiAJCSAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywKLQkJICAgc3RydWN0IG1hcmtlciAqbWFya2VyLAogCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCiB7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXgtZGVidWcuYyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCmluZGV4IDUwZDAyMmUuLmVjODE1YTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCisrKyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2lzb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggYmNkZWYyNi4uOTZiNDVkMCAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTkwLDYgKzkwLDggQEAKIAogCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZwYW5pY19ub3RpZmllcl9saXN0LCAwLCBidWYpOwogCisJYnVzdF9zcGlubG9ja3MoMCk7CisKIAlpZiAoIXBhbmljX2JsaW5rKQogCQlwYW5pY19ibGluayA9IG5vX2JsaW5rOwogCkBAIC0xMzYsNyArMTM4LDYgQEAKIAkJbWRlbGF5KDEpOwogCQlpKys7CiAJfQotCWJ1c3Rfc3BpbmxvY2tzKDApOwogfQogCiBFWFBPUlRfU1lNQk9MKHBhbmljKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCA5ZGE1OGVhLi5kNjU2YzI3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC0yMTgsMTUgKzIxOCwxMSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQlpZiAoa3AtPmZsYWdzICYgS1BBUkFNX0tNQUxMT0NFRCkKLQkJa2ZyZWUoKihjaGFyICoqKWtwLT5hcmcpOwotCiAJLyogVGhpcyBpcyBhIGhhY2suICBXZSBjYW4ndCBuZWVkIHRvIHN0cmR1cCBpbiBlYXJseSBib290LCBhbmQgd2UKIAkgKiBkb24ndCBuZWVkIHRvOyB0aGlzIG1hbmdsZWQgY29tbWFuZGxpbmUgaXMgcHJlc2VydmVkLiAqLwogCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKSB7Ci0JCWtwLT5mbGFncyB8PSBLUEFSQU1fS01BTExPQ0VEOwogCQkqKGNoYXIgKiopa3AtPmFyZyA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFrcC0+YXJnKQorCQlpZiAoISooY2hhciAqKilrcC0+YXJnKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlCiAJCSooY29uc3QgY2hhciAqKilrcC0+YXJnID0gdmFsOwpAQCAtMzA0LDYgKzMwMCw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4LAogCQkgICAgICAgdm9pZCAqZWxlbSwgaW50IGVsZW1zaXplLAogCQkgICAgICAgaW50ICgqc2V0KShjb25zdCBjaGFyICosIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKSwKKwkJICAgICAgIHUxNiBmbGFncywKIAkJICAgICAgIHVuc2lnbmVkIGludCAqbnVtKQogewogCWludCByZXQ7CkBAIC0zMTMsNiArMzEwLDcgQEAKIAkvKiBHZXQgdGhlIG5hbWUgcmlnaHQgZm9yIGVycm9ycy4gKi8KIAlrcC5uYW1lID0gbmFtZTsKIAlrcC5hcmcgPSBlbGVtOworCWtwLmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBObyBlcXVhbHMgc2lnbj8gKi8KIAlpZiAoIXZhbCkgewpAQCAtMzU4LDcgKzM1Niw4IEBACiAJdW5zaWduZWQgaW50IHRlbXBfbnVtOwogCiAJcmV0dXJuIHBhcmFtX2FycmF5KGtwLT5uYW1lLCB2YWwsIDEsIGFyci0+bWF4LCBhcnItPmVsZW0sCi0JCQkgICBhcnItPmVsZW1zaXplLCBhcnItPnNldCwgYXJyLT5udW0gPzogJnRlbXBfbnVtKTsKKwkJCSAgIGFyci0+ZWxlbXNpemUsIGFyci0+c2V0LCBrcC0+ZmxhZ3MsCisJCQkgICBhcnItPm51bSA/OiAmdGVtcF9udW0pOwogfQogCiBpbnQgcGFyYW1fYXJyYXlfZ2V0KGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCkBAIC02MDUsMTEgKzYwNCw3IEBACiAKIHZvaWQgZGVzdHJveV9wYXJhbXMoY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLCB1bnNpZ25lZCBudW0pCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCWlmIChwYXJhbXNbaV0uZmxhZ3MgJiBLUEFSQU1fS01BTExPQ0VEKQotCQkJa2ZyZWUoKihjaGFyICoqKXBhcmFtc1tpXS5hcmcpOworCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBmcmVlIGttYWxsb2NlZCBjaGFycCBwYXJhbWV0ZXJzLiAgSXQgZG9lc24ndC4gKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9hZGRfc3lzZnNfcGFyYW0oY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDc2YWM0ZGIuLjdmMjk2NDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KQEAgLTEwMzAsMTQgKzEwMzEsMTAgQEAKIAl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CiAKIAlwZXJmX2Rpc2FibGUoKTsKLQlpZiAoY3R4LT5ucl9hY3RpdmUpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQotCQkJCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOwotCQkJZWxzZQotCQkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOwotCQl9Ci0JfQorCWlmIChjdHgtPm5yX2FjdGl2ZSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpCisJCQlncm91cF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKwogCXBlcmZfZW5hYmxlKCk7CiAgb3V0OgogCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwpAQCAtMTI1OCwxMiArMTI1NSw4IEBACiAJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQogCQkJY29udGludWU7CiAKLQkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpCi0JCQlldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JCWVsc2UgewotCQkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKLQkJCQlncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JCX0KKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKKwkJCWdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKIAogCQkvKgogCQkgKiBJZiB0aGlzIHBpbm5lZCBncm91cCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsCkBAIC0xMjkxLDE1ICsxMjg0LDkgQEAKIAkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBjcHUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZXZlbnQgIT0gZXZlbnQtPmdyb3VwX2xlYWRlcikgewotCQkJaWYgKGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCBjYW5fYWRkX2h3KSkKKwkJCWlmIChncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCiAJCQkJY2FuX2FkZF9odyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKSB7Ci0JCQkJaWYgKGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKLQkJCQkJY2FuX2FkZF9odyA9IDA7Ci0JCQl9Ci0JCX0KIAl9CiAJcGVyZl9lbmFibGUoKTsKICBvdXQ6CkBAIC0xMzY4LDcgKzEzNTUsNyBAQAogCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOwogCiAJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CiAJCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCiAJCQljb250aW51ZTsKIApAQCAtMjEwNSw0OSArMjA5MiwzMSBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1zdGF0aWMgaW50IHBlcmZfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJmX2RhdGFfc2l6ZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwotCWludCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7Ci0KLQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfTUtXUklURSkgewotCQlpZiAodm1mLT5wZ29mZiA9PSAwKQotCQkJcmV0ID0gMDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKCFkYXRhKQotCQlnb3RvIHVubG9jazsKLQotCWlmICh2bWYtPnBnb2ZmID09IDApIHsKLQkJdm1mLT5wYWdlID0gdmlydF90b19wYWdlKGRhdGEtPnVzZXJfcGFnZSk7Ci0JfSBlbHNlIHsKLQkJaW50IG5yID0gdm1mLT5wZ29mZiAtIDE7Ci0KLQkJaWYgKCh1bnNpZ25lZCluciA+IGRhdGEtPm5yX3BhZ2VzKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJaWYgKHZtZi0+ZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJdm1mLT5wYWdlID0gdmlydF90b19wYWdlKGRhdGEtPmRhdGFfcGFnZXNbbnJdKTsKLQl9Ci0KLQlnZXRfcGFnZSh2bWYtPnBhZ2UpOwotCXZtZi0+cGFnZS0+bWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOwotCXZtZi0+cGFnZS0+aW5kZXggICA9IHZtZi0+cGdvZmY7Ci0KLQlyZXQgPSAwOwotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZGF0YS0+bnJfcGFnZXMgPDwgKFBBR0VfU0hJRlQgKyBkYXRhLT5kYXRhX29yZGVyKTsKIH0KIAotc3RhdGljIGludCBwZXJmX21tYXBfZGF0YV9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBucl9wYWdlcykKKyNpZm5kZWYgQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0MKKworLyoKKyAqIEJhY2sgcGVyZl9tbWFwKCkgd2l0aCByZWd1bGFyIEdGUF9LRVJORUwtMCBwYWdlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IHBhZ2UgKgorcGVyZl9tbWFwX3RvX3BhZ2Uoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQoreworCWlmIChwZ29mZiA+IGRhdGEtPm5yX3BhZ2VzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChwZ29mZiA9PSAwKQorCQlyZXR1cm4gdmlydF90b19wYWdlKGRhdGEtPnVzZXJfcGFnZSk7CisKKwlyZXR1cm4gdmlydF90b19wYWdlKGRhdGEtPmRhdGFfcGFnZXNbcGdvZmYgLSAxXSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKgorcGVyZl9tbWFwX2RhdGFfYWxsb2Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbnJfcGFnZXMpCiB7CiAJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTIxNzIsMTkgKzIxNDEsMTAgQEAKIAkJCWdvdG8gZmFpbF9kYXRhX3BhZ2VzOwogCX0KIAorCWRhdGEtPmRhdGFfb3JkZXIgPSAwOwogCWRhdGEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7Ci0JYXRvbWljX3NldCgmZGF0YS0+bG9jaywgLTEpOwogCi0JaWYgKGV2ZW50LT5hdHRyLndhdGVybWFyaykgewotCQlkYXRhLT53YXRlcm1hcmsgPSBtaW5fdChsb25nLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKLQkJCQkgICAgICBldmVudC0+YXR0ci53YWtldXBfd2F0ZXJtYXJrKTsKLQl9Ci0JaWYgKCFkYXRhLT53YXRlcm1hcmspCi0JCWRhdGEtPndhdGVybWFyayA9IG1heChQQUdFX1NJWkUsIFBBR0VfU0laRSAqIG5yX3BhZ2VzIC8gNCk7Ci0KLQlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIGRhdGEpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGRhdGE7CiAKIGZhaWxfZGF0YV9wYWdlczoKIAlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCkBAIC0yMTk2LDcgKzIxNTYsNyBAQAogCWtmcmVlKGRhdGEpOwogCiBmYWlsOgotCXJldHVybiAtRU5PTUVNOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX21tYXBfZnJlZV9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTIyMDcsMjggKzIxNjcsMTY5IEBACiAJX19mcmVlX3BhZ2UocGFnZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQorc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwogCWludCBpOwogCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCByY3VfaGVhZCk7Ci0KIAlwZXJmX21tYXBfZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRhdGEtPnVzZXJfcGFnZSk7CiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yX3BhZ2VzOyBpKyspCiAJCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+ZGF0YV9wYWdlc1tpXSk7Cit9CiAKKyNlbHNlCisKKy8qCisgKiBCYWNrIHBlcmZfbW1hcCgpIHdpdGggdm1hbGxvYyBtZW1vcnkuCisgKgorICogUmVxdWlyZWQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIGQtY2FjaGUgYWxpYXNpbmcgaXNzdWVzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqCitwZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCit7CisJaWYgKHBnb2ZmID4gKDFVTCA8PCBkYXRhLT5kYXRhX29yZGVyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKCh2b2lkICopZGF0YS0+dXNlcl9wYWdlICsgcGdvZmYgKiBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfdW5tYXJrX3BhZ2Uodm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKKworCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwl2b2lkICpiYXNlOworCWludCBpLCBucjsKKworCWRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCB3b3JrKTsKKwluciA9IDEgPDwgZGF0YS0+ZGF0YV9vcmRlcjsKKworCWJhc2UgPSBkYXRhLT51c2VyX3BhZ2U7CisJZm9yIChpID0gMDsgaSA8IG5yICsgMTsgaSsrKQorCQlwZXJmX21tYXBfdW5tYXJrX3BhZ2UoYmFzZSArIChpICogUEFHRV9TSVpFKSk7CisKKwl2ZnJlZShiYXNlKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCit7CisJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKgorcGVyZl9tbWFwX2RhdGFfYWxsb2Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbnJfcGFnZXMpCit7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl2b2lkICphbGxfYnVmOworCisJV0FSTl9PTihhdG9taWNfcmVhZCgmZXZlbnQtPm1tYXBfY291bnQpKTsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcF9kYXRhKTsKKwlzaXplICs9IHNpemVvZih2b2lkICopOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlnb3RvIGZhaWw7CisKKwlJTklUX1dPUksoJmRhdGEtPndvcmssIHBlcmZfbW1hcF9kYXRhX2ZyZWVfd29yayk7CisKKwlhbGxfYnVmID0gdm1hbGxvY191c2VyKChucl9wYWdlcyArIDEpICogUEFHRV9TSVpFKTsKKwlpZiAoIWFsbF9idWYpCisJCWdvdG8gZmFpbF9hbGxfYnVmOworCisJZGF0YS0+dXNlcl9wYWdlID0gYWxsX2J1ZjsKKwlkYXRhLT5kYXRhX3BhZ2VzWzBdID0gYWxsX2J1ZiArIFBBR0VfU0laRTsKKwlkYXRhLT5kYXRhX29yZGVyID0gaWxvZzIobnJfcGFnZXMpOworCWRhdGEtPm5yX3BhZ2VzID0gMTsKKworCXJldHVybiBkYXRhOworCitmYWlsX2FsbF9idWY6CisJa2ZyZWUoZGF0YSk7CisKK2ZhaWw6CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IHBlcmZfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCWludCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisKKwlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfTUtXUklURSkgeworCQlpZiAodm1mLT5wZ29mZiA9PSAwKQorCQkJcmV0ID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7CisJaWYgKCFkYXRhKQorCQlnb3RvIHVubG9jazsKKworCWlmICh2bWYtPnBnb2ZmICYmICh2bWYtPmZsYWdzICYgRkFVTFRfRkxBR19XUklURSkpCisJCWdvdG8gdW5sb2NrOworCisJdm1mLT5wYWdlID0gcGVyZl9tbWFwX3RvX3BhZ2UoZGF0YSwgdm1mLT5wZ29mZik7CisJaWYgKCF2bWYtPnBhZ2UpCisJCWdvdG8gdW5sb2NrOworCisJZ2V0X3BhZ2Uodm1mLT5wYWdlKTsKKwl2bWYtPnBhZ2UtPm1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKKwl2bWYtPnBhZ2UtPmluZGV4ICAgPSB2bWYtPnBnb2ZmOworCisJcmV0ID0gMDsKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitwZXJmX21tYXBfZGF0YV9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhKQoreworCWxvbmcgbWF4X3NpemUgPSBwZXJmX2RhdGFfc2l6ZShkYXRhKTsKKworCWF0b21pY19zZXQoJmRhdGEtPmxvY2ssIC0xKTsKKworCWlmIChldmVudC0+YXR0ci53YXRlcm1hcmspIHsKKwkJZGF0YS0+d2F0ZXJtYXJrID0gbWluX3QobG9uZywgbWF4X3NpemUsCisJCQkJCWV2ZW50LT5hdHRyLndha2V1cF93YXRlcm1hcmspOworCX0KKworCWlmICghZGF0YS0+d2F0ZXJtYXJrKQorCQlkYXRhLT53YXRlcm1hcmsgPSBtYXhfdChsb25nLCBQQUdFX1NJWkUsIG1heF9zaXplIC8gMik7CisKKworCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCit7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCByY3VfaGVhZCk7CisJcGVyZl9tbWFwX2RhdGFfZnJlZShkYXRhKTsKIAlrZnJlZShkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9yZWxlYXNlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBldmVudC0+ZGF0YTsKIAogCVdBUk5fT04oYXRvbWljX3JlYWQoJmV2ZW50LT5tbWFwX2NvdW50KSk7CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIE5VTEwpOwotCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgX19wZXJmX21tYXBfZGF0YV9mcmVlKTsKKwljYWxsX3JjdSgmZGF0YS0+cmN1X2hlYWQsIHBlcmZfbW1hcF9kYXRhX2ZyZWVfcmN1KTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9tbWFwX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCkBAIC0yMjQ0LDE2ICsyMzQ1LDE3IEBACiAKIAlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmV2ZW50LT5tbWFwX2NvdW50LCAmZXZlbnQtPm1tYXBfbXV0ZXgpKSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBlcmZfZGF0YV9zaXplKGV2ZW50LT5kYXRhKTsKIAkJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gY3VycmVudF91c2VyKCk7CiAKLQkJYXRvbWljX2xvbmdfc3ViKGV2ZW50LT5kYXRhLT5ucl9wYWdlcyArIDEsICZ1c2VyLT5sb2NrZWRfdm0pOworCQlhdG9taWNfbG9uZ19zdWIoKHNpemUgPj4gUEFHRV9TSElGVCkgKyAxLCAmdXNlci0+bG9ja2VkX3ZtKTsKIAkJdm1hLT52bV9tbS0+bG9ja2VkX3ZtIC09IGV2ZW50LT5kYXRhLT5ucl9sb2NrZWQ7Ci0JCXBlcmZfbW1hcF9kYXRhX2ZyZWUoZXZlbnQpOworCQlwZXJmX21tYXBfZGF0YV9yZWxlYXNlKGV2ZW50KTsKIAkJbXV0ZXhfdW5sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7CiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBlcmZfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGVyZl9tbWFwX3Ztb3BzID0gewogCS5vcGVuCQk9IHBlcmZfbW1hcF9vcGVuLAogCS5jbG9zZQkJPSBwZXJmX21tYXBfY2xvc2UsCiAJLmZhdWx0CQk9IHBlcmZfbW1hcF9mYXVsdCwKQEAgLTIyNjYsNiArMjM2OCw3IEBACiAJdW5zaWduZWQgbG9uZyB1c2VyX2xvY2tlZCwgdXNlcl9sb2NrX2xpbWl0OwogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGN1cnJlbnRfdXNlcigpOwogCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIHZtYV9zaXplOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAJbG9uZyB1c2VyX2V4dHJhLCBleHRyYTsKQEAgLTIzMjgsMTAgKzI0MzEsMTUgQEAKIAl9CiAKIAlXQVJOX09OKGV2ZW50LT5kYXRhKTsKLQlyZXQgPSBwZXJmX21tYXBfZGF0YV9hbGxvYyhldmVudCwgbnJfcGFnZXMpOwotCWlmIChyZXQpCisKKwlkYXRhID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoZXZlbnQsIG5yX3BhZ2VzKTsKKwlyZXQgPSAtRU5PTUVNOworCWlmICghZGF0YSkKIAkJZ290byB1bmxvY2s7CiAKKwlyZXQgPSAwOworCXBlcmZfbW1hcF9kYXRhX2luaXQoZXZlbnQsIGRhdGEpOworCiAJYXRvbWljX3NldCgmZXZlbnQtPm1tYXBfY291bnQsIDEpOwogCWF0b21pY19sb25nX2FkZCh1c2VyX2V4dHJhLCAmdXNlci0+bG9ja2VkX3ZtKTsKIAl2bWEtPnZtX21tLT5sb2NrZWRfdm0gKz0gZXh0cmE7CkBAIC0yNTE5LDcgKzI2MjcsNyBAQAogCWlmICghZGF0YS0+d3JpdGFibGUpCiAJCXJldHVybiB0cnVlOwogCi0JbWFzayA9IChkYXRhLT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUKSAtIDE7CisJbWFzayA9IHBlcmZfZGF0YV9zaXplKGRhdGEpIC0gMTsKIAogCW9mZnNldCA9IChvZmZzZXQgLSB0YWlsKSAmIG1hc2s7CiAJaGVhZCAgID0gKGhlYWQgICAtIHRhaWwpICYgbWFzazsKQEAgLTI2MjQsNyArMjczMiw3IEBACiAJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZXNfbWFzazsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBzaXplOwogCXZvaWQgKipwYWdlczsKIApAQCAtMjYzMywxMiArMjc0MSwxNCBAQAogCXBhZ2VzCQk9IGhhbmRsZS0+ZGF0YS0+ZGF0YV9wYWdlczsKIAogCWRvIHsKLQkJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIHBhZ2Vfb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTsKIAkJaW50IG5yOwogCiAJCW5yCSAgICA9IChvZmZzZXQgPj4gUEFHRV9TSElGVCkgJiBwYWdlc19tYXNrOwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUgLSAxKTsKLQkJc2l6ZQkgICAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0LCBsZW4pOworCQlwYWdlX3NpemUgICA9IDFVTCA8PCAoaGFuZGxlLT5kYXRhLT5kYXRhX29yZGVyICsgUEFHRV9TSElGVCk7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKHBhZ2Vfc2l6ZSAtIDEpOworCQlzaXplCSAgICA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZV9zaXplIC0gcGFnZV9vZmZzZXQsIGxlbik7CiAKIAkJbWVtY3B5KHBhZ2VzW25yXSArIHBhZ2Vfb2Zmc2V0LCBidWYsIHNpemUpOwogCkBAIC0zODQ5LDggKzM5NTksOSBAQAogCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwogCiAJaWYgKHJlZ3MpIHsKLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKLQkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOworCQlpZiAoIShldmVudC0+YXR0ci5leGNsdWRlX2lkbGUgJiYgY3VycmVudC0+cGlkID09IDApKQorCQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCQlyZXQgPSBIUlRJTUVSX05PUkVTVEFSVDsKIAl9CiAKIAlwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBldmVudC0+aHcuc2FtcGxlX3BlcmlvZCk7CkBAIC0zODU5LDYgKzM5NzAsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfc3RhcnRfaHJ0aW1lcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2Q7CisKKwkJaWYgKGh3Yy0+cmVtYWluaW5nKSB7CisJCQlpZiAoaHdjLT5yZW1haW5pbmcgPCAwKQorCQkJCXBlcmlvZCA9IDEwMDAwOworCQkJZWxzZQorCQkJCXBlcmlvZCA9IGh3Yy0+cmVtYWluaW5nOworCQkJaHdjLT5yZW1haW5pbmcgPSAwOworCQl9IGVsc2UgeworCQkJcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwkJfQorCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKKwkJa3RpbWVfdCByZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJmh3Yy0+aHJ0aW1lcik7CisJCWh3Yy0+cmVtYWluaW5nID0ga3RpbWVfdG9fbnMocmVtYWluaW5nKTsKKworCQlocnRpbWVyX2NhbmNlbCgmaHdjLT5ocnRpbWVyKTsKKwl9Cit9CisKIC8qCiAgKiBTb2Z0d2FyZSBldmVudDogY3B1IHdhbGwgdGltZSBjbG9jawogICovCkBAIC0zODgxLDIyICs0MDI4LDE0IEBACiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCXBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKGV2ZW50KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjcHVfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAljcHVfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQpOwogfQogCkBAIC0zOTMzLDIyICs0MDcyLDE1IEBACiAJbm93ID0gZXZlbnQtPmN0eC0+dGltZTsKIAogCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBub3cpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCisJcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoZXZlbnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRhc2tfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAl0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBldmVudC0+Y3R4LT50aW1lKTsKIAogfQpAQCAtNDc4MSw5ICs0OTEzLDcgQEAKIAkgKiBXZSBkb250IGhhdmUgdG8gZGlzYWJsZSBOTUlzIC0gd2UgYXJlIG9ubHkgbG9va2luZyBhdAogCSAqIHRoZSBsaXN0LCBub3QgbWFuaXB1bGF0aW5nIGl0OgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmcGFyZW50X2N0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKLQkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpCi0JCQljb250aW51ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKIAogCQlpZiAoIWV2ZW50LT5hdHRyLmluaGVyaXQpIHsKIAkJCWluaGVyaXRlZF9hbGwgPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IDA0YjNhODMuLjA0YTllOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTY5MywyMSArNjkzLDIyIEBACiAJLyogVGhlIHNuYXBzaG90IGRldmljZSBzaG91bGQgbm90IGJlIG9wZW5lZCB3aGlsZSB3ZSdyZSBydW5uaW5nICovCiAJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmc25hcHNob3RfZGV2aWNlX2F2YWlsYWJsZSwgLTEsIDApKSB7CiAJCWVycm9yID0gLUVCVVNZOworCQlzd3N1c3BfY2xvc2UoRk1PREVfUkVBRCk7CiAJCWdvdG8gVW5sb2NrOwogCX0KIAogCXBtX3ByZXBhcmVfY29uc29sZSgpOwogCWVycm9yID0gcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9SRVNUT1JFX1BSRVBBUkUpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gY2xvc2VfZmluaXNoOwogCiAJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKKwkJZ290byBjbG9zZV9maW5pc2g7CiAKIAllcnJvciA9IGNyZWF0ZV9iYXNpY19tZW1vcnlfYml0bWFwcygpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gY2xvc2VfZmluaXNoOwogCiAJcHJfZGVidWcoIlBNOiBQcmVwYXJpbmcgcHJvY2Vzc2VzIGZvciByZXN0b3JlLlxuIik7CiAJZXJyb3IgPSBwcmVwYXJlX3Byb2Nlc3NlcygpOwpAQCAtNzE5LDYgKzcyMCw3IEBACiAJcHJfZGVidWcoIlBNOiBSZWFkaW5nIGhpYmVybmF0aW9uIGltYWdlLlxuIik7CiAKIAllcnJvciA9IHN3c3VzcF9yZWFkKCZmbGFncyk7CisJc3dzdXNwX2Nsb3NlKEZNT0RFX1JFQUQpOwogCWlmICghZXJyb3IpCiAJCWhpYmVybmF0aW9uX3Jlc3RvcmUoZmxhZ3MgJiBTRl9QTEFURk9STV9NT0RFKTsKIApAQCAtNzM3LDYgKzczOSw5IEBACiAJbXV0ZXhfdW5sb2NrKCZwbV9tdXRleCk7CiAJcHJfZGVidWcoIlBNOiBSZXN1bWUgZnJvbSBkaXNrIGZhaWxlZC5cbiIpOwogCXJldHVybiBlcnJvcjsKK2Nsb3NlX2ZpbmlzaDoKKwlzd3N1c3BfY2xvc2UoRk1PREVfUkVBRCk7CisJZ290byBGaW5pc2g7CiB9CiAKIGxhdGVfaW5pdGNhbGwoc29mdHdhcmVfcmVzdW1lKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYwppbmRleCAxN2Q4YmIxLi4yNTU5NmU0IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBUaGUgdGltZSBpdCB0YWtlcyBpcyBzeXN0ZW0tc3BlY2lmaWMgdGhvdWdoLCBzbyB3aGVuIHdlIHRlc3QgdGhpcwogICogZHVyaW5nIHN5c3RlbSBib290dXAgd2UgYWxsb3cgYSBMT1Qgb2YgdGltZS4KICAqLwotI2RlZmluZSBURVNUX1NVU1BFTkRfU0VDT05EUwk1CisjZGVmaW5lIFRFU1RfU1VTUEVORF9TRUNPTkRTCTEwCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1c3BlbmRfdGVzdF9zdGFydF90aW1lOwogCkBAIC00OSw3ICs0OSw4IEBACiAJICogaGFzIHNvbWUgcGVyZm9ybWFuY2UgaXNzdWVzLiAgVGhlIHN0YWNrIGR1bXAgb2YgYSBXQVJOX09OCiAJICogaXMgbW9yZSBsaWtlbHkgdG8gZ2V0IHRoZSByaWdodCBhdHRlbnRpb24gdGhhbiBhIHByaW50ay4uLgogCSAqLwotCVdBUk4obXNlYyA+IChURVNUX1NVU1BFTkRfU0VDT05EUyAqIDEwMDApLCAiQ29tcG9uZW50OiAlc1xuIiwgbGFiZWwpOworCVdBUk4obXNlYyA+IChURVNUX1NVU1BFTkRfU0VDT05EUyAqIDEwMDApLAorCSAgICAgIkNvbXBvbmVudDogJXMsIHRpbWU6ICV1XG4iLCBsYWJlbCwgbXNlYyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwppbmRleCBiMTAxY2RjLi44OTBmNmIxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dhcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKQEAgLTMxNCw3ICszMTQsNiBAQAogewogCXVuc2lnbmVkIGludCBtOwogCWludCByZXQ7Ci0JaW50IGVycm9yID0gMDsKIAlpbnQgbnJfcGFnZXM7CiAJaW50IGVycjI7CiAJc3RydWN0IGJpbyAqYmlvOwpAQCAtMzI5LDI2ICszMjgsMjcgQEAKIAlucl9wYWdlcyA9IDA7CiAJYmlvID0gTlVMTDsKIAlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0KTsKLQlkbyB7CisJd2hpbGUgKDEpIHsKIAkJcmV0ID0gc25hcHNob3RfcmVhZF9uZXh0KHNuYXBzaG90LCBQQUdFX1NJWkUpOwotCQlpZiAocmV0ID4gMCkgewotCQkJZXJyb3IgPSBzd2FwX3dyaXRlX3BhZ2UoaGFuZGxlLCBkYXRhX29mKCpzbmFwc2hvdCksCi0JCQkJCQkmYmlvKTsKLQkJCWlmIChlcnJvcikKLQkJCQlicmVhazsKLQkJCWlmICghKG5yX3BhZ2VzICUgbSkpCi0JCQkJcHJpbnRrKCJcYlxiXGJcYiUzZCUlIiwgbnJfcGFnZXMgLyBtKTsKLQkJCW5yX3BhZ2VzKys7Ci0JCX0KLQl9IHdoaWxlIChyZXQgPiAwKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisJCXJldCA9IHN3YXBfd3JpdGVfcGFnZShoYW5kbGUsIGRhdGFfb2YoKnNuYXBzaG90KSwgJmJpbyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJaWYgKCEobnJfcGFnZXMgJSBtKSkKKwkJCXByaW50aygiXGJcYlxiXGIlM2QlJSIsIG5yX3BhZ2VzIC8gbSk7CisJCW5yX3BhZ2VzKys7CisJfQogCWVycjIgPSB3YWl0X29uX2Jpb19jaGFpbigmYmlvKTsKIAlkb19nZXR0aW1lb2ZkYXkoJnN0b3ApOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyMjsKLQlpZiAoIWVycm9yKQorCWlmICghcmV0KQorCQlyZXQgPSBlcnIyOworCWlmICghcmV0KQogCQlwcmludGsoIlxiXGJcYlxiZG9uZVxuIik7CisJZWxzZQorCQlwcmludGsoIlxuIik7CiAJc3dzdXNwX3Nob3dfc3BlZWQoJnN0YXJ0LCAmc3RvcCwgbnJfdG9fd3JpdGUsICJXcm90ZSIpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTUzNiw3ICs1MzYsOCBAQAogCQlzbmFwc2hvdF93cml0ZV9maW5hbGl6ZShzbmFwc2hvdCk7CiAJCWlmICghc25hcHNob3RfaW1hZ2VfbG9hZGVkKHNuYXBzaG90KSkKIAkJCWVycm9yID0gLUVOT0RBVEE7Ci0JfQorCX0gZWxzZQorCQlwcmludGsoIlxuIik7CiAJc3dzdXNwX3Nob3dfc3BlZWQoJnN0YXJ0LCAmc3RvcCwgbnJfdG9fcmVhZCwgIlJlYWQiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC01NzIsOCArNTczLDYgQEAKIAkJZXJyb3IgPSBsb2FkX2ltYWdlKCZoYW5kbGUsICZzbmFwc2hvdCwgaGVhZGVyLT5wYWdlcyAtIDEpOwogCXJlbGVhc2Vfc3dhcF9yZWFkZXIoJmhhbmRsZSk7CiAKLQlibGtkZXZfcHV0KHJlc3VtZV9iZGV2LCBGTU9ERV9SRUFEKTsKLQogCWlmICghZXJyb3IpCiAJCXByX2RlYnVnKCJQTTogSW1hZ2Ugc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuIik7CiAJZWxzZQpAQCAtNTk2LDcgKzU5NSw3IEBACiAJCWVycm9yID0gYmlvX3JlYWRfcGFnZShzd3N1c3BfcmVzdW1lX2Jsb2NrLAogCQkJCQlzd3N1c3BfaGVhZGVyLCBOVUxMKTsKIAkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOworCQkJZ290byBwdXQ7CiAKIAkJaWYgKCFtZW1jbXAoU1dTVVNQX1NJRywgc3dzdXNwX2hlYWRlci0+c2lnLCAxMCkpIHsKIAkJCW1lbWNweShzd3N1c3BfaGVhZGVyLT5zaWcsIHN3c3VzcF9oZWFkZXItPm9yaWdfc2lnLCAxMCk7CkBAIC02MDQsOCArNjAzLDEwIEBACiAJCQllcnJvciA9IGJpb193cml0ZV9wYWdlKHN3c3VzcF9yZXN1bWVfYmxvY2ssCiAJCQkJCQlzd3N1c3BfaGVhZGVyLCBOVUxMKTsKIAkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZXJyb3IgPSAtRUlOVkFMOwogCQl9CisKK3B1dDoKIAkJaWYgKGVycm9yKQogCQkJYmxrZGV2X3B1dChyZXN1bWVfYmRldiwgRk1PREVfUkVBRCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggMzdhYzQ1NC4uNDAwMTgzMyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTQ2LDIyICs0NiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKLWVudW0gcmN1X2JhcnJpZXIgewotCVJDVV9CQVJSSUVSX1NURCwKLQlSQ1VfQkFSUklFUl9CSCwKLQlSQ1VfQkFSUklFUl9TQ0hFRCwKLX07CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2xvY2tfa2V5Oworc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcCA9CisJU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2siLCAmcmN1X2xvY2tfa2V5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9sb2NrX21hcCk7CisjZW5kaWYKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfaGVhZCwgcmN1X2JhcnJpZXJfaGVhZCkgPSB7TlVMTH07Ci1zdGF0aWMgYXRvbWljX3QgcmN1X2JhcnJpZXJfY3B1X2NvdW50Owotc3RhdGljIERFRklORV9NVVRFWChyY3VfYmFycmllcl9tdXRleCk7Ci1zdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gcmN1X2JhcnJpZXJfY29tcGxldGlvbjsKIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgYXRvbWljX3QgcmN1X21pZ3JhdGVfdHlwZV9jb3VudCA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfbWlncmF0ZV9oZWFkWzNdOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJjdV9taWdyYXRlX3dxKTsKLQogLyoKICAqIEF3YWtlbiB0aGUgY29ycmVzcG9uZGluZyBzeW5jaHJvbml6ZV9yY3UoKSBpbnN0YW5jZSBub3cgdGhhdCBhCiAgKiBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuCkBAIC0xNjQsMTI5ICsxNTcsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9iaCk7CiAKLXN0YXRpYyB2b2lkIHJjdV9iYXJyaWVyX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqbm90dXNlZCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50KSkKLQkJY29tcGxldGUoJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOwotfQotCi0vKgotICogQ2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZCwgYW5kIGZyb20gY3Jvc3MtY3B1IElSUSBjb250ZXh0LgotICovCi1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9mdW5jKHZvaWQgKnR5cGUpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAmcGVyX2NwdShyY3VfYmFycmllcl9oZWFkLCBjcHUpOwotCi0JYXRvbWljX2luYygmcmN1X2JhcnJpZXJfY3B1X2NvdW50KTsKLQlzd2l0Y2ggKChlbnVtIHJjdV9iYXJyaWVyKXR5cGUpIHsKLQljYXNlIFJDVV9CQVJSSUVSX1NURDoKLQkJY2FsbF9yY3UoaGVhZCwgcmN1X2JhcnJpZXJfY2FsbGJhY2spOwotCQlicmVhazsKLQljYXNlIFJDVV9CQVJSSUVSX0JIOgotCQljYWxsX3JjdV9iaChoZWFkLCByY3VfYmFycmllcl9jYWxsYmFjayk7Ci0JCWJyZWFrOwotCWNhc2UgUkNVX0JBUlJJRVJfU0NIRUQ6Ci0JCWNhbGxfcmN1X3NjaGVkKGhlYWQsIHJjdV9iYXJyaWVyX2NhbGxiYWNrKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9taWdyYXRlZF9jYWxsYmFja3Modm9pZCkKLXsKLQl3YWl0X2V2ZW50KHJjdV9taWdyYXRlX3dxLCAhYXRvbWljX3JlYWQoJnJjdV9taWdyYXRlX3R5cGVfY291bnQpKTsKLQlzbXBfbWIoKTsgLyogSW4gY2FzZSB3ZSBkaWRuJ3Qgc2xlZXAuICovCi19Ci0KLS8qCi0gKiBPcmNoZXN0cmF0ZSB0aGUgc3BlY2lmaWVkIHR5cGUgb2YgUkNVIGJhcnJpZXIsIHdhaXRpbmcgZm9yIGFsbAotICogUkNVIGNhbGxiYWNrcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgdG8gY29tcGxldGUuCi0gKi8KLXN0YXRpYyB2b2lkIF9yY3VfYmFycmllcihlbnVtIHJjdV9iYXJyaWVyIHR5cGUpCi17Ci0JQlVHX09OKGluX2ludGVycnVwdCgpKTsKLQkvKiBUYWtlIGNwdWNvbnRyb2wgbXV0ZXggdG8gcHJvdGVjdCBhZ2FpbnN0IENQVSBob3RwbHVnICovCi0JbXV0ZXhfbG9jaygmcmN1X2JhcnJpZXJfbXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci0JLyoKLQkgKiBJbml0aWFsaXplIHJjdV9iYXJyaWVyX2NwdV9jb3VudCB0byAxLCB0aGVuIGludm9rZQotCSAqIHJjdV9iYXJyaWVyX2Z1bmMoKSBvbiBlYWNoIENQVSwgc28gdGhhdCBlYWNoIENQVSBhbHNvIGhhcwotCSAqIGluY3JlbWVudGVkIHJjdV9iYXJyaWVyX2NwdV9jb3VudC4gIE9ubHkgdGhlbiBpcyBpdCBzYWZlIHRvCi0JICogZGVjcmVtZW50IHJjdV9iYXJyaWVyX2NwdV9jb3VudCAtLSBvdGhlcndpc2UgdGhlIGZpcnN0IENQVQotCSAqIG1pZ2h0IGNvbXBsZXRlIGl0cyBncmFjZSBwZXJpb2QgYmVmb3JlIGFsbCBvZiB0aGUgb3RoZXIgQ1BVcwotCSAqIGRpZCB0aGVpciBpbmNyZW1lbnQsIGNhdXNpbmcgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gdG9vCi0JICogZWFybHkuCi0JICovCi0JYXRvbWljX3NldCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50LCAxKTsKLQlvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKXR5cGUsIDEpOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQotCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci0JbXV0ZXhfdW5sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7Ci0Jd2FpdF9taWdyYXRlZF9jYWxsYmFja3MoKTsKLX0KLQotLyoqCi0gKiByY3VfYmFycmllciAtIFdhaXQgdW50aWwgYWxsIGluLWZsaWdodCBjYWxsX3JjdSgpIGNhbGxiYWNrcyBjb21wbGV0ZS4KLSAqLwotdm9pZCByY3VfYmFycmllcih2b2lkKQotewotCV9yY3VfYmFycmllcihSQ1VfQkFSUklFUl9TVEQpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXIpOwotCi0vKioKLSAqIHJjdV9iYXJyaWVyX2JoIC0gV2FpdCB1bnRpbCBhbGwgaW4tZmxpZ2h0IGNhbGxfcmN1X2JoKCkgY2FsbGJhY2tzIGNvbXBsZXRlLgotICovCi12b2lkIHJjdV9iYXJyaWVyX2JoKHZvaWQpCi17Ci0JX3JjdV9iYXJyaWVyKFJDVV9CQVJSSUVSX0JIKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX2JoKTsKLQotLyoqCi0gKiByY3VfYmFycmllcl9zY2hlZCAtIFdhaXQgZm9yIGluLWZsaWdodCBjYWxsX3JjdV9zY2hlZCgpIGNhbGxiYWNrcy4KLSAqLwotdm9pZCByY3VfYmFycmllcl9zY2hlZCh2b2lkKQotewotCV9yY3VfYmFycmllcihSQ1VfQkFSUklFUl9TQ0hFRCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcl9zY2hlZCk7Ci0KLXN0YXRpYyB2b2lkIHJjdV9taWdyYXRlX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqbm90dXNlZCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X21pZ3JhdGVfdHlwZV9jb3VudCkpCi0JCXdha2VfdXAoJnJjdV9taWdyYXRlX3dxKTsKLX0KLQotZXh0ZXJuIGludCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KTsKLQogc3RhdGljIGludCBfX2NwdWluaXQgcmN1X2JhcnJpZXJfY3B1X2hvdHBsdWcoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKLQlyY3VfY3B1X25vdGlmeShzZWxmLCBhY3Rpb24sIGhjcHUpOwotCWlmIChhY3Rpb24gPT0gQ1BVX0RZSU5HKSB7Ci0JCS8qCi0JCSAqIHByZWVtcHRfZGlzYWJsZSgpIGluIG9uX2VhY2hfY3B1KCkgcHJldmVudHMgc3RvcF9tYWNoaW5lKCksCi0JCSAqIHNvIHdoZW4gIm9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7IgotCQkgKiByZXR1cm5zLCBhbGwgb25saW5lIGNwdXMgaGF2ZSBxdWV1ZWQgcmN1X2JhcnJpZXJfZnVuYygpLAotCQkgKiBhbmQgdGhlIGRlYWQgY3B1KGlmIGl0IGV4aXN0KSBxdWV1ZXMgcmN1X21pZ3JhdGVfY2FsbGJhY2soKXMuCi0JCSAqCi0JCSAqIFRoZXNlIGNhbGxiYWNrcyBlbnN1cmUgX3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIGFsbAotCQkgKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KLQkJICovCi0JCWF0b21pY19zZXQoJnJjdV9taWdyYXRlX3R5cGVfY291bnQsIDMpOwotCQljYWxsX3JjdV9iaChyY3VfbWlncmF0ZV9oZWFkLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7Ci0JCWNhbGxfcmN1X3NjaGVkKHJjdV9taWdyYXRlX2hlYWQgKyAxLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7Ci0JCWNhbGxfcmN1KHJjdV9taWdyYXRlX2hlYWQgKyAyLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7Ci0JfSBlbHNlIGlmIChhY3Rpb24gPT0gQ1BVX0RPV05fUFJFUEFSRSkgewotCQkvKiBEb24ndCBuZWVkIHRvIHdhaXQgdW50aWwgbmV4dCByZW1vdmFsIG9wZXJhdGlvbi4gKi8KLQkJLyogcmN1X21pZ3JhdGVfaGVhZCBpcyBwcm90ZWN0ZWQgYnkgY3B1X2FkZF9yZW1vdmVfbG9jayAqLwotCQl3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcygpOwotCX0KLQotCXJldHVybiBOT1RJRllfT0s7CisJcmV0dXJuIHJjdV9jcHVfbm90aWZ5KHNlbGYsIGFjdGlvbiwgaGNwdSk7CiB9CiAKIHZvaWQgX19pbml0IHJjdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdXRvcnR1cmUuYwppbmRleCAyMzM3NjhmLi42OTdjMGEwIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKQEAgLTYwNiw4ICs2MDYsNiBAQAogCS5uYW1lCQk9ICJzY2hlZF9zeW5jIgogfTsKIAotZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7Ci0KIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNjaGVkX2V4cGVkaXRlZF9vcHMgPSB7CiAJLmluaXQJCT0gcmN1X3N5bmNfdG9ydHVyZV9pbml0LAogCS5jbGVhbnVwCT0gTlVMTCwKQEAgLTY1MCw3ICs2NDgsNyBAQAogCQlvbGRfcnAgPSByY3VfdG9ydHVyZV9jdXJyZW50OwogCQlycC0+cnRvcnRfbWJ0ZXN0ID0gMTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHJjdV90b3J0dXJlX2N1cnJlbnQsIHJwKTsKLQkJc21wX3dtYigpOworCQlzbXBfd21iKCk7IC8qIE1vZHMgdG8gb2xkX3JwIG11c3QgZm9sbG93IHJjdV9hc3NpZ25fcG9pbnRlcigpICovCiAJCWlmIChvbGRfcnApIHsKIAkJCWkgPSBvbGRfcnAtPnJ0b3J0X3BpcGVfY291bnQ7CiAJCQlpZiAoaSA+IFJDVV9UT1JUVVJFX1BJUEVfTEVOKQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKaW5kZXggNTJiMDZmNi4uZjMwNzdjMCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuYworKysgYi9rZXJuZWwvcmN1dHJlZS5jCkBAIC00OSwxMyArNDksNiBAQAogCiAjaW5jbHVkZSAicmN1dHJlZS5oIgogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2xvY2tfa2V5Owotc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcCA9Ci0JU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2siLCAmcmN1X2xvY2tfa2V5KTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9sb2NrX21hcCk7Ci0jZW5kaWYKLQogLyogRGF0YSBzdHJ1Y3R1cmVzLiAqLwogCiAjZGVmaW5lIFJDVV9TVEFURV9JTklUSUFMSVpFUihuYW1lKSB7IFwKQEAgLTY2LDEwICs1OSwxMyBAQAogCQlOVU1fUkNVX0xWTF8yLCBcCiAJCU5VTV9SQ1VfTFZMXzMsIC8qID09IE1BWF9SQ1VfTFZMUyAqLyBcCiAJfSwgXAotCS5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVCwgXAorCS5zaWduYWxlZCA9IFJDVV9HUF9JRExFLCBcCiAJLmdwbnVtID0gLTMwMCwgXAogCS5jb21wbGV0ZWQgPSAtMzAwLCBcCiAJLm9ub2ZmbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLm9ub2ZmbG9jayksIFwKKwkub3JwaGFuX2Nic19saXN0ID0gTlVMTCwgXAorCS5vcnBoYW5fY2JzX3RhaWwgPSAmbmFtZS5vcnBoYW5fY2JzX2xpc3QsIFwKKwkub3JwaGFuX3FsZW4gPSAwLCBcCiAJLmZxc2xvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5mcXNsb2NrKSwgXAogCS5uX2ZvcmNlX3FzID0gMCwgXAogCS5uX2ZvcmNlX3FzX25ncCA9IDAsIFwKQEAgLTgxLDI0ICs3NywxNiBAQAogc3RydWN0IHJjdV9zdGF0ZSByY3VfYmhfc3RhdGUgPSBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X2JoX3N0YXRlKTsKIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2JoX2RhdGEpOwogCi1leHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCk7Ci1zdGF0aWMgc3RydWN0IHJjdV9ub2RlICpyY3VfZ2V0X3Jvb3Qoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKLXN0YXRpYyB2b2lkIGNwdV9xdWlldF9tc2sodW5zaWduZWQgbG9uZyBtYXNrLCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLXN0YXRpYyB2b2lkIGNwdV9xdWlldF9tc2tfZmluaXNoKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgdm9pZCBfX3JjdV9vZmZsaW5lX2NwdShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KLXN0YXRpYyB2b2lkIF9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgc3RydWN0IHJjdV9kYXRhICpyZHApOwotc3RhdGljIHZvaWQgX19jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCi0JCSAgICAgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpLAotCQkgICAgICAgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKLXN0YXRpYyBpbnQgX19yY3VfcGVuZGluZyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJCSAgIGludCBwcmVlbXB0YWJsZSk7CiAKLSNpbmNsdWRlICJyY3V0cmVlX3BsdWdpbi5oIgorLyoKKyAqIFJldHVybiB0cnVlIGlmIGFuIFJDVSBncmFjZSBwZXJpb2QgaXMgaW4gcHJvZ3Jlc3MuICBUaGUgQUNDRVNTX09OQ0UoKXMKKyAqIHBlcm1pdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2l0aG91dCBob2xkaW5nIHRoZSByb290IHJjdV9ub2RlCisgKiBzdHJ1Y3R1cmUncyAtPmxvY2ssIGJ1dCBvZiBjb3Vyc2UgcmVzdWx0cyBjYW4gYmUgc3ViamVjdCB0byBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgcmN1X2dwX2luX3Byb2dyZXNzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlyZXR1cm4gQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpICE9IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pOworfQogCiAvKgogICogTm90ZSBhIHF1aWVzY2VudCBzdGF0ZS4gIEJlY2F1c2Ugd2UgZG8gbm90IG5lZWQgdG8ga25vdwpAQCAtMTM3LDYgKzEyNSwxMCBAQAogc3RhdGljIGludCBxaGltYXJrID0gMTAwMDA7CS8qIElmIHRoaXMgbWFueSBwZW5kaW5nLCBpZ25vcmUgYmxpbWl0LiAqLwogc3RhdGljIGludCBxbG93bWFyayA9IDEwMDsJLyogT25jZSBvbmx5IHRoaXMgbWFueSBwZW5kaW5nLCB1c2UgYmxpbWl0LiAqLwogCittb2R1bGVfcGFyYW0oYmxpbWl0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHFoaW1hcmssIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocWxvd21hcmssIGludCwgMCk7CisKIHN0YXRpYyB2b2lkIGZvcmNlX3F1aWVzY2VudF9zdGF0ZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCByZWxheGVkKTsKIHN0YXRpYyBpbnQgcmN1X3BlbmRpbmcoaW50IGNwdSk7CiAKQEAgLTE3Myw5ICsxNjUsNyBAQAogc3RhdGljIGludAogY3B1X25lZWRzX2Fub3RoZXJfZ3Aoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKLQkvKiBBQ0NFU1NfT05DRSgpIGJlY2F1c2Ugd2UgYXJlIGFjY2Vzc2luZyBvdXRzaWRlIG9mIGxvY2suICovCi0JcmV0dXJuICpyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gJiYKLQkgICAgICAgQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpID09IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pOworCXJldHVybiAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICYmICFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKTsKIH0KIAogLyoKQEAgLTM2OSw3ICszNTksNyBAQAogLyoKICAqIFNuYXBzaG90IHRoZSBzcGVjaWZpZWQgQ1BVJ3MgZHludGlja3MgY291bnRlciBzbyB0aGF0IHdlIGNhbiBsYXRlcgogICogY3JlZGl0IHRoZW0gd2l0aCBhbiBpbXBsaWNpdCBxdWllc2NlbnQgc3RhdGUuICBSZXR1cm4gMSBpZiB0aGlzIENQVQotICogaXMgYWxyZWFkeSBpbiBhIHF1aWVzY2VudCBzdGF0ZSBjb3VydGVzeSBvZiBkeW50aWNrcyBpZGxlIG1vZGUuCisgKiBpcyBpbiBkeW50aWNrcyBpZGxlIG1vZGUsIHdoaWNoIGlzIGFuIGV4dGVuZGVkIHF1aWVzY2VudCBzdGF0ZS4KICAqLwogc3RhdGljIGludCBkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcihzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKQEAgLTQ3NSwzMCArNDY1LDM0IEBACiAJbG9uZyBkZWx0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfY3VyID0gcnNwLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9lbmQgPSAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOwogCiAJLyogT25seSBsZXQgb25lIENQVSBjb21wbGFpbiBhYm91dCBvdGhlcnMgcGVyIHRpbWUgaW50ZXJ2YWwuICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJZGVsdGEgPSBqaWZmaWVzIC0gcnNwLT5qaWZmaWVzX3N0YWxsOwotCWlmIChkZWx0YSA8IFJDVV9TVEFMTF9SQVRfREVMQVkgfHwgcnNwLT5ncG51bSA9PSByc3AtPmNvbXBsZXRlZCkgeworCWlmIChkZWx0YSA8IFJDVV9TVEFMTF9SQVRfREVMQVkgfHwgIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCXJzcC0+amlmZmllc19zdGFsbCA9IGppZmZpZXMgKyBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0s7CisKKwkvKgorCSAqIE5vdyByYXQgb24gYW55IHRhc2tzIHRoYXQgZ290IGtpY2tlZCB1cCB0byB0aGUgcm9vdCByY3Vfbm9kZQorCSAqIGR1ZSB0byBDUFUgb2ZmbGluaW5nLgorCSAqLworCXJjdV9wcmludF90YXNrX3N0YWxsKHJucCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBPSywgdGltZSB0byByYXQgb24gb3VyIGJ1ZGR5Li4uICovCiAKIAlwcmludGsoS0VSTl9FUlIgIklORk86IFJDVSBkZXRlY3RlZCBDUFUgc3RhbGxzOiIpOwotCWZvciAoOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKSB7CisJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyc3AsIHJucCkgewogCQlyY3VfcHJpbnRfdGFza19zdGFsbChybnApOwotCQlpZiAocm5wX2N1ci0+cXNtYXNrID09IDApCisJCWlmIChybnAtPnFzbWFzayA9PSAwKQogCQkJY29udGludWU7Ci0JCWZvciAoY3B1ID0gMDsgY3B1IDw9IHJucF9jdXItPmdycGhpIC0gcm5wX2N1ci0+Z3JwbG87IGNwdSsrKQotCQkJaWYgKHJucF9jdXItPnFzbWFzayAmICgxVUwgPDwgY3B1KSkKLQkJCQlwcmludGsoIiAlZCIsIHJucF9jdXItPmdycGxvICsgY3B1KTsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPD0gcm5wLT5ncnBoaSAtIHJucC0+Z3JwbG87IGNwdSsrKQorCQkJaWYgKHJucC0+cXNtYXNrICYgKDFVTCA8PCBjcHUpKQorCQkJCXByaW50aygiICVkIiwgcm5wLT5ncnBsbyArIGNwdSk7CiAJfQogCXByaW50aygiIChkZXRlY3RlZCBieSAlZCwgdD0lbGQgamlmZmllcylcbiIsCiAJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKGxvbmcpKGppZmZpZXMgLSByc3AtPmdwX3N0YXJ0KSk7CkBAIC01MzcsOCArNTMxLDcgQEAKIAkJLyogV2UgaGF2ZW4ndCBjaGVja2VkIGluLCBzbyBnbyBkdW1wIHN0YWNrLiAqLwogCQlwcmludF9jcHVfc3RhbGwocnNwKTsKIAotCX0gZWxzZSBpZiAocnNwLT5ncG51bSAhPSByc3AtPmNvbXBsZXRlZCAmJgotCQkgICBkZWx0YSA+PSBSQ1VfU1RBTExfUkFUX0RFTEFZKSB7CisJfSBlbHNlIGlmIChyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSAmJiBkZWx0YSA+PSBSQ1VfU1RBTExfUkFUX0RFTEFZKSB7CiAKIAkJLyogVGhleSBoYWQgdHdvIHRpbWUgdW5pdHMgdG8gZHVtcCBzdGFjaywgc28gY29tcGxhaW4uICovCiAJCXByaW50X290aGVyX2NwdV9zdGFsbChyc3ApOwpAQCAtNjE3LDkgKzYxMCwxNSBAQAogCW5vdGVfbmV3X2dwbnVtKHJzcCwgcmRwKTsKIAogCS8qCi0JICogQmVjYXVzZSB3ZSBhcmUgZmlyc3QsIHdlIGtub3cgdGhhdCBhbGwgb3VyIGNhbGxiYWNrcyB3aWxsCi0JICogYmUgY292ZXJlZCBieSB0aGlzIHVwY29taW5nIGdyYWNlIHBlcmlvZCwgZXZlbiB0aGUgb25lcwotCSAqIHRoYXQgd2VyZSByZWdpc3RlcmVkIGFyYml0cmFyaWx5IHJlY2VudGx5LgorCSAqIEJlY2F1c2UgdGhpcyBDUFUganVzdCBub3cgc3RhcnRlZCB0aGUgbmV3IGdyYWNlIHBlcmlvZCwgd2Uga25vdworCSAqIHRoYXQgYWxsIG9mIGl0cyBjYWxsYmFja3Mgd2lsbCBiZSBjb3ZlcmVkIGJ5IHRoaXMgdXBjb21pbmcgZ3JhY2UKKwkgKiBwZXJpb2QsIGV2ZW4gdGhlIG9uZXMgdGhhdCB3ZXJlIHJlZ2lzdGVyZWQgYXJiaXRyYXJpbHkgcmVjZW50bHkuCisJICogVGhlcmVmb3JlLCBhZHZhbmNlIGFsbCBvdXRzdGFuZGluZyBjYWxsYmFja3MgdG8gUkNVX1dBSVRfVEFJTC4KKwkgKgorCSAqIE90aGVyIENQVXMgY2Fubm90IGJlIHN1cmUgZXhhY3RseSB3aGVuIHRoZSBncmFjZSBwZXJpb2Qgc3RhcnRlZC4KKwkgKiBUaGVyZWZvcmUsIHRoZWlyIHJlY2VudGx5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzIG11c3QgcGFzcyB0aHJvdWdoCisJICogYW4gYWRkaXRpb25hbCBSQ1VfTkVYVF9SRUFEWSBzdGFnZSwgc28gdGhhdCB0aGV5IHdpbGwgYmUgaGFuZGxlZAorCSAqIGJ5IHRoZSBuZXh0IFJDVSBncmFjZSBwZXJpb2QuCiAJICovCiAJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOwogCXJkcC0+bnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKQEAgLTY1NywxNSArNjU2LDE4IEBACiAJICogb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBDUFUsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIGhhdmUKIAkgKiBpcnFzIGRpc2FibGVkLgogCSAqLwotCWZvciAocm5wID0gJnJzcC0+bm9kZVswXTsgcm5wIDwgJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsgcm5wKyspIHsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgeworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CiAJCXJucC0+Z3BudW0gPSByc3AtPmdwbnVtOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJfQogCisJcm5wID0gcmN1X2dldF9yb290KHJzcCk7CisJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgbm93IE9LLiAqLworCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtNzAzLDEwICs3MDUsMTEgQEAKICAqIGhvbGQgcm5wLT5sb2NrLCBhcyByZXF1aXJlZCBieSByY3Vfc3RhcnRfZ3AoKSwgd2hpY2ggd2lsbCByZWxlYXNlIGl0LgogICovCiBzdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrX2ZpbmlzaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi0JX19yZWxlYXNlcyhybnAtPmxvY2spCisJX19yZWxlYXNlcyhyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaykKIHsKLQlXQVJOX09OX09OQ0UocnNwLT5jb21wbGV0ZWQgPT0gcnNwLT5ncG51bSk7CisJV0FSTl9PTl9PTkNFKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSk7CiAJcnNwLT5jb21wbGV0ZWQgPSByc3AtPmdwbnVtOworCXJzcC0+c2lnbmFsZWQgPSBSQ1VfR1BfSURMRTsKIAlyY3VfcHJvY2Vzc19ncF9lbmQocnNwLCByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldKTsKIAlyY3Vfc3RhcnRfZ3AocnNwLCBmbGFncyk7ICAvKiByZWxlYXNlcyByb290IG5vZGUncyBybnAtPmxvY2suICovCiB9CkBAIC04NDIsMTcgKzg0NSw2MyBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCiAvKgorICogTW92ZSBhIGR5aW5nIENQVSdzIFJDVSBjYWxsYmFja3MgdG8gdGhlIC0+b3JwaGFuX2Nic19saXN0IGZvciB0aGUKKyAqIHNwZWNpZmllZCBmbGF2b3Igb2YgUkNVLiAgVGhlIGNhbGxiYWNrcyB3aWxsIGJlIGFkb3B0ZWQgYnkgdGhlIG5leHQKKyAqIF9yY3VfYmFycmllcigpIGludm9jYXRpb24gb3IgYnkgdGhlIENQVV9ERUFEIG5vdGlmaWVyLCB3aGljaGV2ZXIKKyAqIGNvbWVzIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGludm9rZWQgZnJvbSB0aGUgQ1BVX0RZSU5HIG5vdGlmaWVyLAorICogaXJxcyBhcmUgYWxyZWFkeSBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJaW50IGk7CisJc3RydWN0IHJjdV9kYXRhICpyZHAgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOworCisJaWYgKHJkcC0+bnh0bGlzdCA9PSBOVUxMKQorCQlyZXR1cm47ICAvKiBpcnFzIGRpc2FibGVkLCBzbyBjb21wYXJpc29uIGlzIHN0YWJsZS4gKi8KKwlzcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkqcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSByZHAtPm54dGxpc3Q7CisJcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CisJcmRwLT5ueHRsaXN0ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQorCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OworCXJzcC0+b3JwaGFuX3FsZW4gKz0gcmRwLT5xbGVuOworCXJkcC0+cWxlbiA9IDA7CisJc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworfQorCisvKgorICogQWRvcHQgcHJldmlvdXNseSBvcnBoYW5lZCBSQ1UgY2FsbGJhY2tzLgorICovCitzdGF0aWMgdm9pZCByY3VfYWRvcHRfb3JwaGFuX2NicyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaWYgKHJzcC0+b3JwaGFuX2Nic19saXN0ID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwkqcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcnNwLT5vcnBoYW5fY2JzX2xpc3Q7CisJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcnNwLT5vcnBoYW5fY2JzX3RhaWw7CisJcmRwLT5xbGVuICs9IHJzcC0+b3JwaGFuX3FsZW47CisJcnNwLT5vcnBoYW5fY2JzX2xpc3QgPSBOVUxMOworCXJzcC0+b3JwaGFuX2Nic190YWlsID0gJnJzcC0+b3JwaGFuX2Nic19saXN0OworCXJzcC0+b3JwaGFuX3FsZW4gPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7Cit9CisKKy8qCiAgKiBSZW1vdmUgdGhlIG91dGdvaW5nIENQVSBmcm9tIHRoZSBiaXRtYXNrcyBpbiB0aGUgcmN1X25vZGUgaGllcmFyY2h5CiAgKiBhbmQgbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIG91dGdvaW5nIENQVSB0byB0aGUgY3VycmVudCBvbmUuCiAgKi8KIHN0YXRpYyB2b2lkIF9fcmN1X29mZmxpbmVfY3B1KGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKLQlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgbGFzdGNvbXA7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbY3B1XTsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcF9tZTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCS8qIEV4Y2x1ZGUgYW55IGF0dGVtcHRzIHRvIHN0YXJ0IGEgbmV3IGdyYWNlIHBlcmlvZC4gKi8KQEAgLTg2OCwzOSArOTE3LDI5IEBACiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCQlicmVhazsKIAkJfQotCQlyY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wLCByZHApOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBhIHRhc2sgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLAorCQkgKiBhbmQgaWYgYWxsIENQVXMgaGF2ZSBjaGVja2VkIGluLCB3ZSBuZWVkIHRvIHByb3BhZ2F0ZQorCQkgKiB0aGUgcXVpZXNjZW50IHN0YXRlIHVwIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkuICBCdXQgdGhhdAorCQkgKiBpcyBpbmNvbnZlbmllbnQgYXQgdGhlIG1vbWVudCBkdWUgdG8gZGVhZGxvY2sgaXNzdWVzIGlmCisJCSAqIHRoaXMgc2hvdWxkIGVuZCB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QuICBTbyBzZXQgdGhlCisJCSAqIG9mZmxpbmVkIENQVSdzIGJpdCBpbiAtPnFzbWFzayBpbiBvcmRlciB0byBmb3JjZSB0aGUKKwkJICogbmV4dCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpbnZvY2F0aW9uIHRvIGNsZWFuIHVwIHRoaXMKKwkJICogbWVzcyBpbiBhIGRlYWRsb2NrLWZyZWUgbWFubmVyLgorCQkgKi8KKwkJaWYgKHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCkgJiYgIXJucC0+cXNtYXNrKQorCQkJcm5wLT5xc21hc2sgfD0gbWFzazsKKwogCQltYXNrID0gcm5wLT5ncnBtYXNrOwogCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCXJucCA9IHJucC0+cGFyZW50OwogCX0gd2hpbGUgKHJucCAhPSBOVUxMKTsKIAlsYXN0Y29tcCA9IHJzcC0+Y29tcGxldGVkOwogCi0Jc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAKLQkvKgotCSAqIE1vdmUgY2FsbGJhY2tzIGZyb20gdGhlIG91dGdvaW5nIENQVSB0byB0aGUgcnVubmluZyBDUFUuCi0JICogTm90ZSB0aGF0IHRoZSBvdXRnb2luZyBDUFUgaXMgbm93IHF1aXNjZW50LCBzbyBpdCBpcyBub3cKLQkgKiAodW5jaGFyYWN0ZXJpc3RpY2FsbHkpIHNhZmUgdG8gYWNjZXNzIGl0cyByY3VfZGF0YSBzdHJ1Y3R1cmUuCi0JICogTm90ZSBhbHNvIHRoYXQgd2UgbXVzdCBjYXJlZnVsbHkgcmV0YWluIHRoZSBvcmRlciBvZiB0aGUKLQkgKiBvdXRnb2luZyBDUFUncyBjYWxsYmFja3MgaW4gb3JkZXIgZm9yIHJjdV9iYXJyaWVyKCkgdG8gd29yawotCSAqIGNvcnJlY3RseS4gIEZpbmFsbHksIG5vdGUgdGhhdCB3ZSBzdGFydCBhbGwgdGhlIGNhbGxiYWNrcwotCSAqIGFmcmVzaCwgZXZlbiB0aG9zZSB0aGF0IGhhdmUgcGFzc2VkIHRocm91Z2ggYSBncmFjZSBwZXJpb2QKLQkgKiBhbmQgYXJlIHRoZXJlZm9yZSByZWFkeSB0byBpbnZva2UuICBUaGUgdGhlb3J5IGlzIHRoYXQgaG90cGx1ZwotCSAqIGV2ZW50cyBhcmUgcmFyZSwgYW5kIHRoYXQgaWYgdGhleSBhcmUgZnJlcXVlbnQgZW5vdWdoIHRvCi0JICogaW5kZWZpbml0ZWx5IGRlbGF5IGNhbGxiYWNrcywgeW91IGhhdmUgZmFyIHdvcnNlIHRoaW5ncyB0bwotCSAqIGJlIHdvcnJ5aW5nIGFib3V0LgotCSAqLwotCXJkcF9tZSA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JaWYgKHJkcC0+bnh0bGlzdCAhPSBOVUxMKSB7Ci0JCSpyZHBfbWUtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByZHAtPm54dGxpc3Q7Ci0JCXJkcF9tZS0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKLQkJcmRwLT5ueHRsaXN0ID0gTlVMTDsKLQkJZm9yIChpID0gMDsgaSA8IFJDVV9ORVhUX1NJWkU7IGkrKykKLQkJCXJkcC0+bnh0dGFpbFtpXSA9ICZyZHAtPm54dGxpc3Q7Ci0JCXJkcF9tZS0+cWxlbiArPSByZHAtPnFsZW47Ci0JCXJkcC0+cWxlbiA9IDA7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyY3VfYWRvcHRfb3JwaGFuX2Nicyhyc3ApOwogfQogCiAvKgpAQCAtOTE4LDYgKzk1NywxNCBAQAogCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKK3N0YXRpYyB2b2lkIHJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2Uoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworfQorCitzdGF0aWMgdm9pZCByY3VfYWRvcHRfb3JwaGFuX2NicyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7Cit9CisKIHN0YXRpYyB2b2lkIHJjdV9vZmZsaW5lX2NwdShpbnQgY3B1KQogewogfQpAQCAtOTI4LDcgKzk3NSw3IEBACiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZQogICogcGVyaW9kLiAgVGhvdHRsZSBhcyBzcGVjaWZpZWQgYnkgcmRwLT5ibGltaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJjdV9oZWFkICpuZXh0LCAqbGlzdCwgKip0YWlsOwpAQCAtOTgxLDYgKzEwMjgsMTMgQEAKIAlpZiAocmRwLT5ibGltaXQgPT0gTE9OR19NQVggJiYgcmRwLT5xbGVuIDw9IHFsb3dtYXJrKQogCQlyZHAtPmJsaW1pdCA9IGJsaW1pdDsKIAorCS8qIFJlc2V0IC0+cWxlbl9sYXN0X2Zxc19jaGVjayB0cmlnZ2VyIGlmIGVub3VnaCBDQnMgaGF2ZSBkcmFpbmVkLiAqLworCWlmIChyZHAtPnFsZW4gPT0gMCAmJiByZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgIT0gMCkgeworCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSAwOworCQlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKKwl9IGVsc2UgaWYgKHJkcC0+cWxlbiA8IHJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayAtIHFoaW1hcmspCisJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IHJkcC0+cWxlbjsKKwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCS8qIFJlLXJhaXNlIHRoZSBSQ1Ugc29mdGlycSBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlbWFpbmluZy4gKi8KQEAgLTEwNTAsMzMgKzExMDQsMzIgQEAKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2N1ciA9IHJzcC0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfZW5kID0gJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAotCWZvciAoOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKSB7CisJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyc3AsIHJucCkgewogCQltYXNrID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlpZiAocnNwLT5jb21wbGV0ZWQgIT0gbGFzdGNvbXApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQkJaWYgKHJucF9jdXItPnFzbWFzayA9PSAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnBfY3VyLT5sb2NrLCBmbGFncyk7CisJCWlmIChybnAtPnFzbWFzayA9PSAwKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWNwdSA9IHJucF9jdXItPmdycGxvOworCQljcHUgPSBybnAtPmdycGxvOwogCQliaXQgPSAxOwotCQlmb3IgKDsgY3B1IDw9IHJucF9jdXItPmdycGhpOyBjcHUrKywgYml0IDw8PSAxKSB7Ci0JCQlpZiAoKHJucF9jdXItPnFzbWFzayAmIGJpdCkgIT0gMCAmJiBmKHJzcC0+cmRhW2NwdV0pKQorCQlmb3IgKDsgY3B1IDw9IHJucC0+Z3JwaGk7IGNwdSsrLCBiaXQgPDw9IDEpIHsKKwkJCWlmICgocm5wLT5xc21hc2sgJiBiaXQpICE9IDAgJiYgZihyc3AtPnJkYVtjcHVdKSkKIAkJCQltYXNrIHw9IGJpdDsKIAkJfQogCQlpZiAobWFzayAhPSAwICYmIHJzcC0+Y29tcGxldGVkID09IGxhc3Rjb21wKSB7CiAKLQkJCS8qIGNwdV9xdWlldF9tc2soKSByZWxlYXNlcyBybnBfY3VyLT5sb2NrLiAqLwotCQkJY3B1X3F1aWV0X21zayhtYXNrLCByc3AsIHJucF9jdXIsIGZsYWdzKTsKKwkJCS8qIGNwdV9xdWlldF9tc2soKSByZWxlYXNlcyBybnAtPmxvY2suICovCisJCQljcHVfcXVpZXRfbXNrKG1hc2ssIHJzcCwgcm5wLCBmbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnBfY3VyLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTEwOTIsNyArMTE0NSw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAl1OCBzaWduYWxlZDsKIAotCWlmIChBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCkgPT0gQUNDRVNTX09OQ0UocnNwLT5ncG51bSkpCisJaWYgKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkKIAkJcmV0dXJuOyAgLyogTm8gZ3JhY2UgcGVyaW9kIGluIHByb2dyZXNzLCBub3RoaW5nIHRvIGZvcmNlLiAqLwogCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpKSB7CiAJCXJzcC0+bl9mb3JjZV9xc19saCsrOyAvKiBJbmV4YWN0LCBjYW4gbG9zZSBjb3VudHMuICBUb3VnaCEgKi8KQEAgLTExMTMsOSArMTE2NiwxMCBAQAogCX0KIAlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKIAlzd2l0Y2ggKHNpZ25hbGVkKSB7CisJY2FzZSBSQ1VfR1BfSURMRToKIAljYXNlIFJDVV9HUF9JTklUOgogCi0JCWJyZWFrOyAvKiBncmFjZSBwZXJpb2Qgc3RpbGwgaW5pdGlhbGl6aW5nLCBpZ25vcmUuICovCisJCWJyZWFrOyAvKiBncmFjZSBwZXJpb2QgaWRsZSBvciBpbml0aWFsaXppbmcsIGlnbm9yZS4gKi8KIAogCWNhc2UgUkNVX1NBVkVfRFlOVElDSzoKIApAQCAtMTEyOSw3ICsxMTgzLDggQEAKIAogCQkvKiBVcGRhdGUgc3RhdGUsIHJlY29yZCBjb21wbGV0aW9uIGNvdW50ZXIuICovCiAJCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsKLQkJaWYgKGxhc3Rjb21wID09IHJzcC0+Y29tcGxldGVkKSB7CisJCWlmIChsYXN0Y29tcCA9PSByc3AtPmNvbXBsZXRlZCAmJgorCQkgICAgcnNwLT5zaWduYWxlZCA9PSBSQ1VfU0FWRV9EWU5USUNLKSB7CiAJCQlyc3AtPnNpZ25hbGVkID0gUkNVX0ZPUkNFX1FTOwogCQkJZHludGlja19yZWNvcmRfY29tcGxldGVkKHJzcCwgbGFzdGNvbXApOwogCQl9CkBAIC0xMTk1LDcgKzEyNTAsNyBAQAogCX0KIAogCS8qIElmIHRoZXJlIGFyZSBjYWxsYmFja3MgcmVhZHksIGludm9rZSB0aGVtLiAqLwotCXJjdV9kb19iYXRjaChyZHApOworCXJjdV9kb19iYXRjaChyc3AsIHJkcCk7CiB9CiAKIC8qCkBAIC0xMjUxLDcgKzEzMDYsNyBAQAogCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9ICZoZWFkLT5uZXh0OwogCiAJLyogU3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kIGlmIG9uZSBub3QgYWxyZWFkeSBzdGFydGVkLiAqLwotCWlmIChBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCkgPT0gQUNDRVNTX09OQ0UocnNwLT5ncG51bSkpIHsKKwlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CiAJCXVuc2lnbmVkIGxvbmcgbmVzdGZsYWc7CiAJCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3Jvb3QgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIApAQCAtMTI1OSwxMCArMTMxNCwyMCBAQAogCQlyY3Vfc3RhcnRfZ3AocnNwLCBuZXN0ZmxhZyk7ICAvKiByZWxlYXNlcyBybnBfcm9vdC0+bG9jay4gKi8KIAl9CiAKLQkvKiBGb3JjZSB0aGUgZ3JhY2UgcGVyaW9kIGlmIHRvbyBtYW55IGNhbGxiYWNrcyBvciB0b28gbG9uZyB3YWl0aW5nLiAqLwotCWlmICh1bmxpa2VseSgrK3JkcC0+cWxlbiA+IHFoaW1hcmspKSB7CisJLyoKKwkgKiBGb3JjZSB0aGUgZ3JhY2UgcGVyaW9kIGlmIHRvbyBtYW55IGNhbGxiYWNrcyBvciB0b28gbG9uZyB3YWl0aW5nLgorCSAqIEVuZm9yY2UgaHlzdGVyZXNpcywgYW5kIGRvbid0IGludm9rZSBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKQorCSAqIGlmIHNvbWUgb3RoZXIgQ1BVIGhhcyByZWNlbnRseSBkb25lIHNvLiAgQWxzbywgZG9uJ3QgYm90aGVyCisJICogaW52b2tpbmcgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgaWYgdGhlIG5ld2x5IGVucXVldWVkIGNhbGxiYWNrCisJICogaXMgdGhlIG9ubHkgb25lIHdhaXRpbmcgZm9yIGEgZ3JhY2UgcGVyaW9kIHRvIGNvbXBsZXRlLgorCSAqLworCWlmICh1bmxpa2VseSgrK3JkcC0+cWxlbiA+IHJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayArIHFoaW1hcmspKSB7CiAJCXJkcC0+YmxpbWl0ID0gTE9OR19NQVg7Ci0JCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOworCQlpZiAocnNwLT5uX2ZvcmNlX3FzID09IHJkcC0+bl9mb3JjZV9xc19zbmFwICYmCisJCSAgICAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICE9IGhlYWQpCisJCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsKKwkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CisJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IHJkcC0+cWxlbjsKIAl9IGVsc2UgaWYgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKQogCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xMzMxLDcgKzEzOTYsNyBAQAogCX0KIAogCS8qIEhhcyBhbiBSQ1UgR1AgZ29uZSBsb25nIGVub3VnaCB0byBzZW5kIHJlc2NoZWQgSVBJcyAmYz8gKi8KLQlpZiAoQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpICE9IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pICYmCisJaWYgKHJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApICYmCiAJICAgICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCkpIHsKIAkJcmRwLT5uX3JwX25lZWRfZnFzKys7CiAJCXJldHVybiAxOwpAQCAtMTM2OCw2ICsxNDMzLDgyIEBACiAJICAgICAgIHJjdV9wcmVlbXB0X25lZWRzX2NwdShjcHUpOwogfQogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9oZWFkLCByY3VfYmFycmllcl9oZWFkKSA9IHtOVUxMfTsKK3N0YXRpYyBhdG9taWNfdCByY3VfYmFycmllcl9jcHVfY291bnQ7CitzdGF0aWMgREVGSU5FX01VVEVYKHJjdV9iYXJyaWVyX211dGV4KTsKK3N0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiByY3VfYmFycmllcl9jb21wbGV0aW9uOworCitzdGF0aWMgdm9pZCByY3VfYmFycmllcl9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKm5vdHVzZWQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCkpCisJCWNvbXBsZXRlKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKK30KKworLyoKKyAqIENhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQsIGFuZCBmcm9tIGNyb3NzLWNwdSBJUlEgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfZnVuYyh2b2lkICp0eXBlKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHJjdV9oZWFkICpoZWFkID0gJnBlcl9jcHUocmN1X2JhcnJpZXJfaGVhZCwgY3B1KTsKKwl2b2lkICgqY2FsbF9yY3VfZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkLAorCQkJICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpOworCisJYXRvbWljX2luYygmcmN1X2JhcnJpZXJfY3B1X2NvdW50KTsKKwljYWxsX3JjdV9mdW5jID0gdHlwZTsKKwljYWxsX3JjdV9mdW5jKGhlYWQsIHJjdV9iYXJyaWVyX2NhbGxiYWNrKTsKK30KKworLyoKKyAqIE9yY2hlc3RyYXRlIHRoZSBzcGVjaWZpZWQgdHlwZSBvZiBSQ1UgYmFycmllciwgd2FpdGluZyBmb3IgYWxsCisgKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KKyAqLworc3RhdGljIHZvaWQgX3JjdV9iYXJyaWVyKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCSB2b2lkICgqY2FsbF9yY3VfZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkLAorCQkJCQkgICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpKQoreworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisJLyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqLworCW11dGV4X2xvY2soJnJjdV9iYXJyaWVyX211dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOworCS8qCisJICogSW5pdGlhbGl6ZSByY3VfYmFycmllcl9jcHVfY291bnQgdG8gMSwgdGhlbiBpbnZva2UKKwkgKiByY3VfYmFycmllcl9mdW5jKCkgb24gZWFjaCBDUFUsIHNvIHRoYXQgZWFjaCBDUFUgYWxzbyBoYXMKKwkgKiBpbmNyZW1lbnRlZCByY3VfYmFycmllcl9jcHVfY291bnQuICBPbmx5IHRoZW4gaXMgaXQgc2FmZSB0bworCSAqIGRlY3JlbWVudCByY3VfYmFycmllcl9jcHVfY291bnQgLS0gb3RoZXJ3aXNlIHRoZSBmaXJzdCBDUFUKKwkgKiBtaWdodCBjb21wbGV0ZSBpdHMgZ3JhY2UgcGVyaW9kIGJlZm9yZSBhbGwgb2YgdGhlIG90aGVyIENQVXMKKwkgKiBkaWQgdGhlaXIgaW5jcmVtZW50LCBjYXVzaW5nIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIHRvbworCSAqIGVhcmx5LgorCSAqLworCWF0b21pY19zZXQoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCwgMSk7CisJcHJlZW1wdF9kaXNhYmxlKCk7IC8qIHN0b3AgQ1BVX0RZSU5HIGZyb20gZmlsbGluZyBvcnBoYW5fY2JzX2xpc3QgKi8KKwlyY3VfYWRvcHRfb3JwaGFuX2Nicyhyc3ApOworCW9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopY2FsbF9yY3VfZnVuYywgMSk7CisJcHJlZW1wdF9lbmFibGUoKTsgLyogQ1BVX0RZSU5HIGNhbiBhZ2FpbiBmaWxsIG9ycGhhbl9jYnNfbGlzdCAqLworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQorCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CisJbXV0ZXhfdW5sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7Cit9CisKKy8qKgorICogcmN1X2JhcnJpZXJfYmggLSBXYWl0IHVudGlsIGFsbCBpbi1mbGlnaHQgY2FsbF9yY3VfYmgoKSBjYWxsYmFja3MgY29tcGxldGUuCisgKi8KK3ZvaWQgcmN1X2JhcnJpZXJfYmgodm9pZCkKK3sKKwlfcmN1X2JhcnJpZXIoJnJjdV9iaF9zdGF0ZSwgY2FsbF9yY3VfYmgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfYmgpOworCisvKioKKyAqIHJjdV9iYXJyaWVyX3NjaGVkIC0gV2FpdCBmb3IgaW4tZmxpZ2h0IGNhbGxfcmN1X3NjaGVkKCkgY2FsbGJhY2tzLgorICovCit2b2lkIHJjdV9iYXJyaWVyX3NjaGVkKHZvaWQpCit7CisJX3JjdV9iYXJyaWVyKCZyY3Vfc2NoZWRfc3RhdGUsIGNhbGxfcmN1X3NjaGVkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX3NjaGVkKTsKKwogLyoKICAqIERvIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiBvZiBhIENQVSdzIHBlci1DUFUgUkNVIGRhdGEuCiAgKi8KQEAgLTE0MTgsNiArMTU1OSw4IEBACiAJcmRwLT5iZWVub25saW5lID0gMTsJIC8qIFdlIGhhdmUgbm93IGJlZW4gb25saW5lLiAqLwogCXJkcC0+cHJlZW1wdGFibGUgPSBwcmVlbXB0YWJsZTsKIAlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gbGFzdGNvbXAgLSAxOworCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CisJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CiAJcmRwLT5ibGltaXQgPSBibGltaXQ7CiAJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIApAQCAtMTQ2NCw2ICsxNjA3LDIyIEBACiAJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCXJjdV9vbmxpbmVfY3B1KGNwdSk7CiAJCWJyZWFrOworCWNhc2UgQ1BVX0RZSU5HOgorCWNhc2UgQ1BVX0RZSU5HX0ZST1pFTjoKKwkJLyoKKwkJICogcHJlZW1wdF9kaXNhYmxlKCkgaW4gX3JjdV9iYXJyaWVyKCkgcHJldmVudHMgc3RvcF9tYWNoaW5lKCksCisJCSAqIHNvIHdoZW4gIm9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7IgorCQkgKiByZXR1cm5zLCBhbGwgb25saW5lIGNwdXMgaGF2ZSBxdWV1ZWQgcmN1X2JhcnJpZXJfZnVuYygpLgorCQkgKiBUaGUgZHlpbmcgQ1BVIGNsZWFycyBpdHMgY3B1X29ubGluZV9tYXNrIGJpdCBhbmQKKwkJICogbW92ZXMgYWxsIG9mIGl0cyBSQ1UgY2FsbGJhY2tzIHRvIC0+b3JwaGFuX2Nic19saXN0CisJCSAqIGluIHRoZSBjb250ZXh0IG9mIHN0b3BfbWFjaGluZSgpLCBzbyBzdWJzZXF1ZW50IGNhbGxzCisJCSAqIHRvIF9yY3VfYmFycmllcigpIHdpbGwgYWRvcHQgdGhlc2UgY2FsbGJhY2tzIGFuZCBvbmx5CisJCSAqIHRoZW4gcXVldWUgcmN1X2JhcnJpZXJfZnVuYygpIG9uIGFsbCByZW1haW5pbmcgQ1BVcy4KKwkJICovCisJCXJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2UoJnJjdV9iaF9zdGF0ZSk7CisJCXJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2UoJnJjdV9zY2hlZF9zdGF0ZSk7CisJCXJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSgpOworCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgogCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgpAQCAtMTUyNiw3ICsxNjg1LDggQEAKIAkJY3B1c3RyaWRlICo9IHJzcC0+bGV2ZWxzcHJlYWRbaV07CiAJCXJucCA9IHJzcC0+bGV2ZWxbaV07CiAJCWZvciAoaiA9IDA7IGogPCByc3AtPmxldmVsY250W2ldOyBqKyssIHJucCsrKSB7Ci0JCQlzcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKKwkJCWlmIChybnAgIT0gcmN1X2dldF9yb290KHJzcCkpCisJCQkJc3Bpbl9sb2NrX2luaXQoJnJucC0+bG9jayk7CiAJCQlybnAtPmdwbnVtID0gMDsKIAkJCXJucC0+cXNtYXNrID0gMDsKIAkJCXJucC0+cXNtYXNraW5pdCA9IDA7CkBAIC0xNTQ5LDYgKzE3MDksNyBAQAogCQkJSU5JVF9MSVNUX0hFQUQoJnJucC0+YmxvY2tlZF90YXNrc1sxXSk7CiAJCX0KIAl9CisJc3Bpbl9sb2NrX2luaXQoJnJjdV9nZXRfcm9vdChyc3ApLT5sb2NrKTsKIH0KIAogLyoKQEAgLTE1NTgsNiArMTcxOSwxMCBAQAogICovCiAjZGVmaW5lIFJDVV9JTklUX0ZMQVZPUihyc3AsIHJjdV9kYXRhKSBcCiBkbyB7IFwKKwlpbnQgaTsgXAorCWludCBqOyBcCisJc3RydWN0IHJjdV9ub2RlICpybnA7IFwKKwlcCiAJcmN1X2luaXRfb25lKHJzcCk7IFwKIAlybnAgPSAocnNwKS0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07IFwKIAlqID0gMDsgXApAQCAtMTU3MCwzMSArMTczNSw4IEBACiAJfSBcCiB9IHdoaWxlICgwKQogCi0jaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKLQotdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpCi17Ci0JaW50IGk7CQkJLyogQWxsIHVzZWQgYnkgUkNVX0lOSVRfRkxBVk9SKCkuICovCi0JaW50IGo7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnA7Ci0KLQlSQ1VfSU5JVF9GTEFWT1IoJnJjdV9wcmVlbXB0X3N0YXRlLCByY3VfcHJlZW1wdF9kYXRhKTsKLX0KLQotI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCi0KLXZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQotewotfQotCi0jZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCi0KIHZvaWQgX19pbml0IF9fcmN1X2luaXQodm9pZCkKIHsKLQlpbnQgaTsJCQkvKiBBbGwgdXNlZCBieSBSQ1VfSU5JVF9GTEFWT1IoKS4gKi8KLQlpbnQgajsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKLQogCXJjdV9ib290dXBfYW5ub3VuY2UoKTsKICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogCXByaW50ayhLRVJOX0lORk8gIlJDVS1iYXNlZCBkZXRlY3Rpb24gb2Ygc3RhbGxlZCBDUFVzIGlzIGVuYWJsZWQuXG4iKTsKQEAgLTE2MDUsNiArMTc0Nyw0IEBACiAJb3Blbl9zb2Z0aXJxKFJDVV9TT0ZUSVJRLCByY3VfcHJvY2Vzc19jYWxsYmFja3MpOwogfQogCi1tb2R1bGVfcGFyYW0oYmxpbWl0LCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHFoaW1hcmssIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocWxvd21hcmssIGludCwgMCk7CisjaW5jbHVkZSAicmN1dHJlZV9wbHVnaW4uaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmggYi9rZXJuZWwvcmN1dHJlZS5oCmluZGV4IDhlODI4N2EuLjE4OTkwMjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmgKKysrIGIva2VybmVsL3JjdXRyZWUuaApAQCAtNDgsMTQgKzQ4LDE0IEBACiAjZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfU1EKICMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMgogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKCgoTlJfQ1BVUykgKyBSQ1VfRkFOT1VUIC0gMSkgLyBSQ1VfRkFOT1VUKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVQpCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAoTlJfQ1BVUykKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIDAKICNlbGlmIE5SX0NQVVMgPD0gUkNVX0ZBTk9VVF9DVUJFCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxTCSAgICAgIDMKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8wCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgICgoKE5SX0NQVVMpICsgUkNVX0ZBTk9VVF9TUSAtIDEpIC8gUkNVX0ZBTk9VVF9TUSkKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgICgoKE5SX0NQVVMpICsgKFJDVV9GQU5PVVQpIC0gMSkgLyAoUkNVX0ZBTk9VVCkpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVF9TUSkKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUKQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgTlJfQ1BVUwogI2Vsc2UKICMgZXJyb3IgIkNPTkZJR19SQ1VfRkFOT1VUIGluc3VmZmljaWVudCBmb3IgTlJfQ1BVUyIKQEAgLTc5LDE1ICs3OSwyMSBAQAogICogRGVmaW5pdGlvbiBmb3Igbm9kZSB3aXRoaW4gdGhlIFJDVSBncmFjZS1wZXJpb2QtZGV0ZWN0aW9uIGhpZXJhcmNoeS4KICAqLwogc3RydWN0IHJjdV9ub2RlIHsKLQlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBsb2NrOwkvKiBSb290IHJjdV9ub2RlJ3MgbG9jayBwcm90ZWN0cyBzb21lICovCisJCQkJLyogIHJjdV9zdGF0ZSBmaWVsZHMgYXMgd2VsbCBhcyBmb2xsb3dpbmcuICovCiAJbG9uZwlncG51bTsJCS8qIEN1cnJlbnQgZ3JhY2UgcGVyaW9kIGZvciB0aGlzIG5vZGUuICovCiAJCQkJLyogIFRoaXMgd2lsbCBlaXRoZXIgYmUgZXF1YWwgdG8gb3Igb25lICovCiAJCQkJLyogIGJlaGluZCB0aGUgcm9vdCByY3Vfbm9kZSdzIGdwbnVtLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNrOwkvKiBDUFVzIG9yIGdyb3VwcyB0aGF0IG5lZWQgdG8gc3dpdGNoIGluICovCiAJCQkJLyogIG9yZGVyIGZvciBjdXJyZW50IGdyYWNlIHBlcmlvZCB0byBwcm9jZWVkLiovCisJCQkJLyogIEluIGxlYWYgcmN1X25vZGUsIGVhY2ggYml0IGNvcnJlc3BvbmRzIHRvICovCisJCQkJLyogIGFuIHJjdV9kYXRhIHN0cnVjdHVyZSwgb3RoZXJ3aXNlLCBlYWNoICovCisJCQkJLyogIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoaWxkIHJjdV9ub2RlICovCisJCQkJLyogIHN0cnVjdHVyZS4gKi8KIAl1bnNpZ25lZCBsb25nIHFzbWFza2luaXQ7CiAJCQkJLyogUGVyLUdQIGluaXRpYWxpemF0aW9uIGZvciBxc21hc2suICovCiAJdW5zaWduZWQgbG9uZyBncnBtYXNrOwkvKiBNYXNrIHRvIGFwcGx5IHRvIHBhcmVudCBxc21hc2suICovCisJCQkJLyogIE9ubHkgb25lIGJpdCB3aWxsIGJlIHNldCBpbiB0aGlzIG1hc2suICovCiAJaW50CWdycGxvOwkJLyogbG93ZXN0LW51bWJlcmVkIENQVSBvciBncm91cCBoZXJlLiAqLwogCWludAlncnBoaTsJCS8qIGhpZ2hlc3QtbnVtYmVyZWQgQ1BVIG9yIGdyb3VwIGhlcmUuICovCiAJdTgJZ3JwbnVtOwkJLyogQ1BVL2dyb3VwIG51bWJlciBmb3IgbmV4dCBsZXZlbCB1cC4gKi8KQEAgLTk1LDggKzEwMSwyMyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcGFyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgYmxvY2tlZF90YXNrc1syXTsKIAkJCQkvKiBUYXNrcyBibG9ja2VkIGluIFJDVSByZWFkLXNpZGUgY3JpdHNlY3QuICovCisJCQkJLyogIEdyYWNlIHBlcmlvZCBudW1iZXIgKC0+Z3BudW0pIHggYmxvY2tlZCAqLworCQkJCS8qICBieSB0YXNrcyBvbiB0aGUgKHggJiAweDEpIGVsZW1lbnQgb2YgdGhlICovCisJCQkJLyogIGJsb2NrZWRfdGFza3NbXSBhcnJheS4gKi8KIH0gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAorLyoKKyAqIERvIGEgZnVsbCBicmVhZHRoLWZpcnN0IHNjYW4gb2YgdGhlIHJjdV9ub2RlIHN0cnVjdHVyZXMgZm9yIHRoZQorICogc3BlY2lmaWVkIHJjdV9zdGF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgXAorCWZvciAoKHJucCkgPSAmKHJzcCktPm5vZGVbMF07IFwKKwkgICAgIChybnApIDwgJihyc3ApLT5ub2RlW05VTV9SQ1VfTk9ERVNdOyAocm5wKSsrKQorCisjZGVmaW5lIHJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIFwKKwlmb3IgKChybnApID0gKHJzcCktPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOyBcCisJICAgICAocm5wKSA8ICYocnNwKS0+bm9kZVtOVU1fUkNVX05PREVTXTsgKHJucCkrKykKKwogLyogSW5kZXggdmFsdWVzIGZvciBueHR0YWlsIGFycmF5IGluIHN0cnVjdCByY3VfZGF0YS4gKi8KICNkZWZpbmUgUkNVX0RPTkVfVEFJTAkJMAkvKiBBbHNvIFJDVV9XQUlUIGhlYWQuICovCiAjZGVmaW5lIFJDVV9XQUlUX1RBSUwJCTEJLyogQWxzbyBSQ1VfTkVYVF9SRUFEWSBoZWFkLiAqLwpAQCAtMTI2LDIzICsxNDcsMzAgQEAKIAkgKiBBbnkgb2YgdGhlIHBhcnRpdGlvbnMgbWlnaHQgYmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlCiAJICogcG9pbnRlciB0byB0aGF0IHBhcnRpdGlvbiB3aWxsIGJlIGVxdWFsIHRvIHRoZSBwb2ludGVyIGZvcgogCSAqIHRoZSBmb2xsb3dpbmcgcGFydGl0aW9uLiAgV2hlbiB0aGUgbGlzdCBpcyBlbXB0eSwgYWxsIG9mCi0JICogdGhlIG54dHRhaWwgZWxlbWVudHMgcG9pbnQgdG8gbnh0bGlzdCwgd2hpY2ggaXMgTlVMTC4KKwkgKiB0aGUgbnh0dGFpbCBlbGVtZW50cyBwb2ludCB0byB0aGUgLT5ueHRsaXN0IHBvaW50ZXIgaXRzZWxmLAorCSAqIHdoaWNoIGluIHRoYXQgY2FzZSBpcyBOVUxMLgogCSAqCi0JICogWypueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdLCBOVUxMID0gKm54dHRhaWxbUkNVX05FWFRfVEFJTF0pOgotCSAqCUVudHJpZXMgdGhhdCBtaWdodCBoYXZlIGFycml2ZWQgYWZ0ZXIgY3VycmVudCBHUCBlbmRlZAotCSAqIFsqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSwgKm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0pOgotCSAqCUVudHJpZXMga25vd24gdG8gaGF2ZSBhcnJpdmVkIGJlZm9yZSBjdXJyZW50IEdQIGVuZGVkCi0JICogWypueHR0YWlsW1JDVV9ET05FX1RBSUxdLCAqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSk6Ci0JICoJRW50cmllcyB0aGF0IGJhdGNoICMgPD0gLT5jb21wbGV0ZWQgLSAxOiB3YWl0aW5nIGZvciBjdXJyZW50IEdQCiAJICogW254dGxpc3QsICpueHR0YWlsW1JDVV9ET05FX1RBSUxdKToKIAkgKglFbnRyaWVzIHRoYXQgYmF0Y2ggIyA8PSAtPmNvbXBsZXRlZAogCSAqCVRoZSBncmFjZSBwZXJpb2QgZm9yIHRoZXNlIGVudHJpZXMgaGFzIGNvbXBsZXRlZCwgYW5kCiAJICoJdGhlIG90aGVyIGdyYWNlLXBlcmlvZC1jb21wbGV0ZWQgZW50cmllcyBtYXkgYmUgbW92ZWQKIAkgKgloZXJlIHRlbXBvcmFyaWx5IGluIHJjdV9wcm9jZXNzX2NhbGxiYWNrcygpLgorCSAqIFsqbnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSwgKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0pOgorCSAqCUVudHJpZXMgdGhhdCBiYXRjaCAjIDw9IC0+Y29tcGxldGVkIC0gMTogd2FpdGluZyBmb3IgY3VycmVudCBHUAorCSAqIFsqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSwgKm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0pOgorCSAqCUVudHJpZXMga25vd24gdG8gaGF2ZSBhcnJpdmVkIGJlZm9yZSBjdXJyZW50IEdQIGVuZGVkCisJICogWypueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdLCAqbnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSk6CisJICoJRW50cmllcyB0aGF0IG1pZ2h0IGhhdmUgYXJyaXZlZCBhZnRlciBjdXJyZW50IEdQIGVuZGVkCisJICoJTm90ZSB0aGF0IHRoZSB2YWx1ZSBvZiAqbnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSB3aWxsCisJICoJYWx3YXlzIGJlIE5VTEwsIGFzIHRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgbGlzdC4KIAkgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgKm54dGxpc3Q7CiAJc3RydWN0IHJjdV9oZWFkICoqbnh0dGFpbFtSQ1VfTkVYVF9TSVpFXTsKIAlsb25nCQlxbGVuOwkJLyogIyBvZiBxdWV1ZWQgY2FsbGJhY2tzICovCisJbG9uZwkJcWxlbl9sYXN0X2Zxc19jaGVjazsKKwkJCQkJLyogcWxlbiBhdCBsYXN0IGNoZWNrIGZvciBRUyBmb3JjaW5nICovCisJdW5zaWduZWQgbG9uZwluX2ZvcmNlX3FzX3NuYXA7CisJCQkJCS8qIGRpZCBvdGhlciBDUFUgZm9yY2UgUVMgcmVjZW50bHk/ICovCiAJbG9uZwkJYmxpbWl0OwkJLyogVXBwZXIgbGltaXQgb24gYSBwcm9jZXNzZWQgYmF0Y2ggKi8KIAogI2lmZGVmIENPTkZJR19OT19IWgpAQCAtMTczLDkgKzIwMSwxMCBAQAogfTsKIAogLyogVmFsdWVzIGZvciBzaWduYWxlZCBmaWVsZCBpbiBzdHJ1Y3QgcmN1X3N0YXRlLiAqLwotI2RlZmluZSBSQ1VfR1BfSU5JVAkJMAkvKiBHcmFjZSBwZXJpb2QgYmVpbmcgaW5pdGlhbGl6ZWQuICovCi0jZGVmaW5lIFJDVV9TQVZFX0RZTlRJQ0sJMQkvKiBOZWVkIHRvIHNjYW4gZHludGljayBzdGF0ZS4gKi8KLSNkZWZpbmUgUkNVX0ZPUkNFX1FTCQkyCS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLworI2RlZmluZSBSQ1VfR1BfSURMRQkJMAkvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MuICovCisjZGVmaW5lIFJDVV9HUF9JTklUCQkxCS8qIEdyYWNlIHBlcmlvZCBiZWluZyBpbml0aWFsaXplZC4gKi8KKyNkZWZpbmUgUkNVX1NBVkVfRFlOVElDSwkyCS8qIE5lZWQgdG8gc2NhbiBkeW50aWNrIHN0YXRlLiAqLworI2RlZmluZSBSQ1VfRk9SQ0VfUVMJCTMJLyogTmVlZCB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGUuICovCiAjaWZkZWYgQ09ORklHX05PX0haCiAjZGVmaW5lIFJDVV9TSUdOQUxfSU5JVAkJUkNVX1NBVkVfRFlOVElDSwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwpAQCAtMjE2LDggKzI0NSwxOSBAQAogCQkJCQkJLyogRm9yY2UgUVMgc3RhdGUuICovCiAJbG9uZwlncG51bTsJCQkJLyogQ3VycmVudCBncCBudW1iZXIuICovCiAJbG9uZwljb21wbGV0ZWQ7CQkJLyogIyBvZiBsYXN0IGNvbXBsZXRlZCBncC4gKi8KKworCS8qIEVuZCAgb2YgZmllbGRzIGd1YXJkZWQgYnkgcm9vdCByY3Vfbm9kZSdzIGxvY2suICovCisKIAlzcGlubG9ja190IG9ub2ZmbG9jazsJCQkvKiBleGNsdWRlIG9uL29mZmxpbmUgYW5kICovCi0JCQkJCQkvKiAgc3RhcnRpbmcgbmV3IEdQLiAqLworCQkJCQkJLyogIHN0YXJ0aW5nIG5ldyBHUC4gIEFsc28gKi8KKwkJCQkJCS8qICBwcm90ZWN0cyB0aGUgZm9sbG93aW5nICovCisJCQkJCQkvKiAgb3JwaGFuX2NicyBmaWVsZHMuICovCisJc3RydWN0IHJjdV9oZWFkICpvcnBoYW5fY2JzX2xpc3Q7CS8qIGxpc3Qgb2YgcmN1X2hlYWQgc3RydWN0cyAqLworCQkJCQkJLyogIG9ycGhhbmVkIGJ5IGFsbCBDUFVzIGluICovCisJCQkJCQkvKiAgYSBnaXZlbiBsZWFmIHJjdV9ub2RlICovCisJCQkJCQkvKiAgZ29pbmcgb2ZmbGluZS4gKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgKipvcnBoYW5fY2JzX3RhaWw7CS8qIEFuZCB0YWlsIHBvaW50ZXIuICovCisJbG9uZyBvcnBoYW5fcWxlbjsJCQkvKiBOdW1iZXIgb2Ygb3JwaGFuZWQgY2JzLiAqLwogCXNwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KIAkJCQkJCS8qICBxdWllc2NlbnQgc3RhdGVzLiAqLwogCXVuc2lnbmVkIGxvbmcgamlmZmllc19mb3JjZV9xczsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gaW52b2tlICovCkBAIC0yNTUsNSArMjk1LDMwIEBACiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfcHJlZW1wdF9kYXRhKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIAotI2VuZGlmIC8qICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCisjZWxzZSAvKiAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLwogCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcmN1dHJlZV9wbHVnaW4uaCAqLworc3RhdGljIGlubGluZSB2b2lkIHJjdV9ib290dXBfYW5ub3VuY2Uodm9pZCk7Citsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSk7CitzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CisjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKK3N0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV9jcHUoaW50IGNwdSk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcHJvY2Vzc19jYWxsYmFja3Modm9pZCk7Cit2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSk7CitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X3BlbmRpbmcoaW50IGNwdSk7CitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X25lZWRzX2NwdShpbnQgY3B1KTsKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfcHJlZW1wdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHZvaWQpOworc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKTsKKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IDFjZWUwNGYuLmVmMmE1OGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC0xNTAsNiArMTUwLDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JjdV9yZWFkX2xvY2spOwogCisvKgorICogQ2hlY2sgZm9yIHByZWVtcHRlZCBSQ1UgcmVhZGVycyBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QKKyAqIGZvciB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4gIElmIHRoZSBjYWxsZXIgbmVlZHMgYSByZWxpYWJsZQorICogYW5zd2VyLCBpdCBtdXN0IGhvbGQgdGhlIHJjdV9ub2RlJ3MgLT5sb2NrLgorICovCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSk7Cit9CisKIHN0YXRpYyB2b2lkIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKIAlpbnQgZW1wdHk7CkBAIC0xOTYsNyArMjA2LDcgQEAKIAkJCQlicmVhazsKIAkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KLQkJZW1wdHkgPSBsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOworCQllbXB0eSA9ICFyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKTsKIAkJbGlzdF9kZWxfaW5pdCgmdC0+cmN1X25vZGVfZW50cnkpOwogCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gTlVMTDsKIApAQCAtMjA3LDcgKzIxNyw3IEBACiAJCSAqIGRyb3Agcm5wLT5sb2NrIGFuZCByZXN0b3JlIGlycS4KIAkJICovCiAJCWlmICghZW1wdHkgJiYgcm5wLT5xc21hc2sgPT0gMCAmJgotCQkgICAgbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKSkgeworCQkgICAgIXJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7CiAJCQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9wOwogCiAJCQlpZiAocm5wLT5wYXJlbnQgPT0gTlVMTCkgewpAQCAtMjU3LDEyICsyNjcsMTIgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwotCWludCBwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7CisJaW50IHBoYXNlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAotCWlmICghbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXSkpIHsKKwlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQlwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7IC8qIHJlLXJlYWQgdW5kZXIgbG9jay4gKi8KKwkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOwogCQlscCA9ICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsIGxwLCByY3Vfbm9kZV9lbnRyeSkKIAkJCXByaW50aygiIFAlZCIsIHQtPnBpZCk7CkBAIC0yODEsMjAgKzI5MSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQogewotCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKSk7CisJV0FSTl9PTl9PTkNFKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKTsKIAlXQVJOX09OX09OQ0Uocm5wLT5xc21hc2spOwogfQogCi0vKgotICogQ2hlY2sgZm9yIHByZWVtcHRlZCBSQ1UgcmVhZGVycyBmb3IgdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuCi0gKiBJZiB0aGUgY2FsbGVyIG5lZWRzIGEgcmVsaWFibGUgYW5zd2VyLCBpdCBtdXN0IGhvbGQgdGhlIHJjdV9ub2RlJ3MKLSAqID5sb2NrLgotICovCi1zdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKLXsKLQlyZXR1cm4gIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAogLyoKQEAgLTMwNCwyMSArMzA0LDI1IEBACiAgKiBwYXJlbnQgaXMgdG8gcmVtb3ZlIHRoZSBuZWVkIGZvciByY3VfcmVhZF91bmxvY2tfc3BlY2lhbCgpIHRvCiAgKiBtYWtlIG1vcmUgdGhhbiB0d28gYXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgdGFyZ2V0IHJjdV9ub2RlJ3MgbG9jay4KICAqCisgKiBSZXR1cm5zIDEgaWYgdGhlcmUgd2FzIHByZXZpb3VzbHkgYSB0YXNrIGJsb2NraW5nIHRoZSBjdXJyZW50IGdyYWNlCisgKiBwZXJpb2Qgb24gdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuCisgKgogICogVGhlIGNhbGxlciBtdXN0IGhvbGQgcm5wLT5sb2NrIHdpdGggaXJxcyBkaXNhYmxlZC4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJICAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCi0JCQkJICAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscF9yb290OworCWludCByZXR2YWwgPSByY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucF9yb290ID0gcmN1X2dldF9yb290KHJzcCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0cDsKIAogCWlmIChybnAgPT0gcm5wX3Jvb3QpIHsKIAkJV0FSTl9PTkNFKDEsICJMYXN0IENQVSB0aG91Z2h0IHRvIGJlIG9mZmxpbmVkPyIpOwotCQlyZXR1cm47ICAvKiBTaG91bGRuJ3QgaGFwcGVuOiBhdCBsZWFzdCBvbmUgQ1BVIG9ubGluZS4gKi8KKwkJcmV0dXJuIDA7ICAvKiBTaG91bGRuJ3QgaGFwcGVuOiBhdCBsZWFzdCBvbmUgQ1BVIG9ubGluZS4gKi8KIAl9CiAJV0FSTl9PTl9PTkNFKHJucCAhPSByZHAtPm15bm9kZSAmJgogCQkgICAgICghbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzWzBdKSB8fApAQCAtMzQyLDYgKzM0Niw4IEBACiAJCQlzcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCQl9CiAJfQorCisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoKQEAgLTM5Myw2ICszOTksMTcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKIAogLyoKKyAqIFdhaXQgZm9yIGFuIHJjdS1wcmVlbXB0IGdyYWNlIHBlcmlvZC4gIFdlIGFyZSBzdXBwb3NlZCB0byBleHBlZGl0ZSB0aGUKKyAqIGdyYWNlIHBlcmlvZCwgYnV0IHRoaXMgaXMgdGhlIGNydWRlIHNsb3cgY29tcGF0YWJpbGl0eSBoYWNrLCBzbyBqdXN0CisgKiBpbnZva2Ugc3luY2hyb25pemVfcmN1KCkuCisgKi8KK3ZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQoreworCXN5bmNocm9uaXplX3JjdSgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCk7CisKKy8qCiAgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGltbWVkaWF0ZSBwcmVlbXB0YWJsZS1SQ1UtcmVsYXRlZCB3b3JrCiAgKiB0byBiZSBkb25lLgogICovCkBAIC00MTAsNiArNDI3LDE1IEBACiAJcmV0dXJuICEhcGVyX2NwdShyY3VfcHJlZW1wdF9kYXRhLCBjcHUpLm54dGxpc3Q7CiB9CiAKKy8qKgorICogcmN1X2JhcnJpZXIgLSBXYWl0IHVudGlsIGFsbCBpbi1mbGlnaHQgY2FsbF9yY3UoKSBjYWxsYmFja3MgY29tcGxldGUuCisgKi8KK3ZvaWQgcmN1X2JhcnJpZXIodm9pZCkKK3sKKwlfcmN1X2JhcnJpZXIoJnJjdV9wcmVlbXB0X3N0YXRlLCBjYWxsX3JjdSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7CisKIC8qCiAgKiBJbml0aWFsaXplIHByZWVtcHRhYmxlIFJDVSdzIHBlci1DUFUgZGF0YS4KICAqLwpAQCAtNDE5LDYgKzQ0NSwyMiBAQAogfQogCiAvKgorICogTW92ZSBwcmVlbXB0YWJsZSBSQ1UncyBjYWxsYmFja3MgdG8gLT5vcnBoYW5fY2JzX2xpc3QuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKQoreworCXJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2UoJnJjdV9wcmVlbXB0X3N0YXRlKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgcHJlZW1wdGFibGUgUkNVJ3Mgc3RhdGUgc3RydWN0dXJlcy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQoreworCVJDVV9JTklUX0ZMQVZPUigmcmN1X3ByZWVtcHRfc3RhdGUsIHJjdV9wcmVlbXB0X2RhdGEpOworfQorCisvKgogICogQ2hlY2sgZm9yIGEgdGFzayBleGl0aW5nIHdoaWxlIGluIGEgcHJlZW1wdGFibGUtUkNVIHJlYWQtc2lkZQogICogY3JpdGljYWwgc2VjdGlvbiwgY2xlYW4gdXAgaWYgc28uICBObyBuZWVkIHRvIGlzc3VlIHdhcm5pbmdzLAogICogYXMgZGVidWdfY2hlY2tfbm9fbG9ja3NfaGVsZCgpIGFscmVhZHkgZG9lcyB0aGlzIGlmIGxvY2tkZXAKQEAgLTQ2MSw2ICs1MDMsMTUgQEAKIHsKIH0KIAorLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB0aGVyZSBhcmUgbmV2ZXIgYW55IHByZWVtcHRlZAorICogUkNVIHJlYWRlcnMuCisgKi8KK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAogLyoKQEAgLTQ4MywyNSArNTM0LDE5IEBACiAJV0FSTl9PTl9PTkNFKHJucC0+cXNtYXNrKTsKIH0KIAotLyoKLSAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB0aGVyZSBhcmUgbmV2ZXIgYW55IHByZWVtcHRlZAotICogUkNVIHJlYWRlcnMuCi0gKi8KLXN0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQotewotCXJldHVybiAwOwotfQotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAKIC8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgbmVlZHMgdG8gbWlncmF0ZQotICogdGFza3MgdGhhdCB3ZXJlIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCisgKiB0YXNrcyB0aGF0IHdlcmUgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgYW5kCisgKiBzdWNoIG5vbi1leGlzdGVudCB0YXNrcyBjYW5ub3QgcG9zc2libHkgaGF2ZSBiZWVuIGJsb2NraW5nIHRoZSBjdXJyZW50CisgKiBncmFjZSBwZXJpb2QuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01MTgsNyArNTYzLDcgQEAKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcwogICogdG8gY2hlY2suCiAgKi8KLXZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoaW50IGNwdSkKIHsKIH0KIApAQCAtNTI2LDcgKzU3MSw3IEBACiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSBjYWxsYmFja3MKICAqIHRvIHByb2Nlc3MuCiAgKi8KLXZvaWQgcmN1X3ByZWVtcHRfcHJvY2Vzc19jYWxsYmFja3Modm9pZCkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKHZvaWQpCiB7CiB9CiAKQEAgLTU0MCw2ICs1ODUsMTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKIAogLyoKKyAqIFdhaXQgZm9yIGFuIHJjdS1wcmVlbXB0IGdyYWNlIHBlcmlvZCwgYnV0IG1ha2UgaXQgaGFwcGVuIHF1aWNrbHkuCisgKiBCdXQgYmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIG1hcCB0byByY3Utc2NoZWQuCisgKi8KK3ZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQoreworCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCk7CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSB3b3JrIHRvIGRvLgogICovCiBzdGF0aWMgaW50IHJjdV9wcmVlbXB0X3BlbmRpbmcoaW50IGNwdSkKQEAgLTU1Niw2ICs2MTEsMTYgQEAKIH0KIAogLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCByY3VfYmFycmllcigpIGlzIGp1c3QKKyAqIGFub3RoZXIgbmFtZSBmb3IgcmN1X2JhcnJpZXJfc2NoZWQoKS4KKyAqLwordm9pZCByY3VfYmFycmllcih2b2lkKQoreworCXJjdV9iYXJyaWVyX3NjaGVkKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgaXMgbm8gcGVyLUNQVQogICogZGF0YSB0byBpbml0aWFsaXplLgogICovCkBAIC01NjMsNCArNjI4LDE4IEBACiB7CiB9CiAKKy8qCisgKiBCZWNhdXNlIHRoZXJlIGlzIG5vIHByZWVtcHRhYmxlIFJDVSwgdGhlcmUgYXJlIG5vIGNhbGxiYWNrcyB0byBtb3ZlLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2Uodm9pZCkKK3sKK30KKworLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZWVkIG5vdCBiZSBpbml0aWFsaXplZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQoreworfQorCiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwppbmRleCBjODlmNWU5Li40YjMxYzc3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VkYXRhLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1ZGF0YV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1ZGF0YV9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1ZGF0YV9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VkYXRhX2NzdiwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfY3N2X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VkYXRhX2Nzdl9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1ZGF0YV9jc3Zfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMTU5LDEzICsxNTksMTMgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCXNlcV9wcmludGYobSwgImM9JWxkIGc9JWxkIHM9JWQgamZxPSVsZCBqPSV4ICIKLQkgICAgICAgICAgICAgICJuZnFzPSVsdS9uZnFzbmc9JWx1KCVsdSkgZnFsaD0lbHVcbiIsCisJCSAgICAgICJuZnFzPSVsdS9uZnFzbmc9JWx1KCVsdSkgZnFsaD0lbHUgb3FsZW49JWxkXG4iLAogCQkgICByc3AtPmNvbXBsZXRlZCwgcnNwLT5ncG51bSwgcnNwLT5zaWduYWxlZCwKIAkJICAgKGxvbmcpKHJzcC0+amlmZmllc19mb3JjZV9xcyAtIGppZmZpZXMpLAogCQkgICAoaW50KShqaWZmaWVzICYgMHhmZmZmKSwKIAkJICAgcnNwLT5uX2ZvcmNlX3FzLCByc3AtPm5fZm9yY2VfcXNfbmdwLAogCQkgICByc3AtPm5fZm9yY2VfcXMgLSByc3AtPm5fZm9yY2VfcXNfbmdwLAotCQkgICByc3AtPm5fZm9yY2VfcXNfbGgpOworCQkgICByc3AtPm5fZm9yY2VfcXNfbGgsIHJzcC0+b3JwaGFuX3FsZW4pOwogCWZvciAocm5wID0gJnJzcC0+bm9kZVswXTsgcm5wIC0gJnJzcC0+bm9kZVswXSA8IE5VTV9SQ1VfTk9ERVM7IHJucCsrKSB7CiAJCWlmIChybnAtPmxldmVsICE9IGxldmVsKSB7CiAJCQlzZXFfcHV0cyhtLCAiXG4iKTsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdWhpZXIsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VoaWVyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VoaWVyX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSByY3VoaWVyX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdWdwLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1Z3BfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWdwX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSByY3VncF9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VfcGVuZGluZywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdV9wZW5kaW5nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VfcGVuZGluZ19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1X3BlbmRpbmdfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEva2VybmVsL3JlbGF5LmMgYi9rZXJuZWwvcmVsYXkuYwppbmRleCBiYzE4ODU0Li43NjBjMjYyIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVsYXkuYworKysgYi9rZXJuZWwvcmVsYXkuYwpAQCAtNjAsNyArNjAsNyBAQAogLyoKICAqIHZtX29wcyBmb3IgcmVsYXkgZmlsZSBtYXBwaW5ncy4KICAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByZWxheV9maWxlX21tYXBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByZWxheV9maWxlX21tYXBfb3BzID0gewogCS5mYXVsdCA9IHJlbGF5X2J1Zl9mYXVsdCwKIAkuY2xvc2UgPSByZWxheV9maWxlX21tYXBfY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc19jb3VudGVyLmMgYi9rZXJuZWwvcmVzX2NvdW50ZXIuYwppbmRleCA4OGZhZWMyLi5iY2RhYmYzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVzX2NvdW50ZXIuYworKysgYi9rZXJuZWwvcmVzX2NvdW50ZXIuYwpAQCAtMzcsMjcgKzM3LDE3IEBACiB9CiAKIGludCByZXNfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCXN0cnVjdCByZXNfY291bnRlciAqKmxpbWl0X2ZhaWxfYXQsCi0JCQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKipzb2Z0X2xpbWl0X2ZhaWxfYXQpCisJCQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0KQogewogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmMsICp1OwogCiAJKmxpbWl0X2ZhaWxfYXQgPSBOVUxMOwotCWlmIChzb2Z0X2xpbWl0X2ZhaWxfYXQpCi0JCSpzb2Z0X2xpbWl0X2ZhaWxfYXQgPSBOVUxMOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3IgKGMgPSBjb3VudGVyOyBjICE9IE5VTEw7IGMgPSBjLT5wYXJlbnQpIHsKIAkJc3Bpbl9sb2NrKCZjLT5sb2NrKTsKIAkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlX2xvY2tlZChjLCB2YWwpOwotCQkvKgotCQkgKiBXaXRoIHNvZnQgbGltaXRzLCB3ZSByZXR1cm4gdGhlIGhpZ2hlc3QgYW5jZXN0b3IKLQkJICogdGhhdCBleGNlZWRzIGl0cyBzb2Z0IGxpbWl0Ci0JCSAqLwotCQlpZiAoc29mdF9saW1pdF9mYWlsX2F0ICYmCi0JCQkhcmVzX2NvdW50ZXJfc29mdF9saW1pdF9jaGVja19sb2NrZWQoYykpCi0JCQkqc29mdF9saW1pdF9mYWlsX2F0ID0gYzsKIAkJc3Bpbl91bmxvY2soJmMtPmxvY2spOwogCQlpZiAocmV0IDwgMCkgewogCQkJKmxpbWl0X2ZhaWxfYXQgPSBjOwpAQCAtODUsOCArNzUsNyBAQAogCWNvdW50ZXItPnVzYWdlIC09IHZhbDsKIH0KIAotdm9pZCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJCWJvb2wgKndhc19zb2Z0X2xpbWl0X2V4Y2VzcykKK3ZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByZXNfY291bnRlciAqYzsKQEAgLTk0LDkgKzgzLDYgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yIChjID0gY291bnRlcjsgYyAhPSBOVUxMOyBjID0gYy0+cGFyZW50KSB7CiAJCXNwaW5fbG9jaygmYy0+bG9jayk7Ci0JCWlmICh3YXNfc29mdF9saW1pdF9leGNlc3MpCi0JCQkqd2FzX3NvZnRfbGltaXRfZXhjZXNzID0KLQkJCQkhcmVzX2NvdW50ZXJfc29mdF9saW1pdF9jaGVja19sb2NrZWQoYyk7CiAJCXJlc19jb3VudGVyX3VuY2hhcmdlX2xvY2tlZChjLCB2YWwpOwogCQlzcGluX3VubG9jaygmYy0+bG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBlZTYxZjQ1Li4zYzExYWUwIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMzA5LDYgKzMwOSw4IEBACiAgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFza19ncm91cF9sb2NrKTsKIAorI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IHJvb3RfdGFza19ncm91cF9lbXB0eSh2b2lkKQogewpAQCAtMzE2LDcgKzMxOCw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAjaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKICMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECSgyKk5JQ0VfMF9MT0FEKQogI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCkBAIC02NzYsNiArNjc3LDcgQEAKIAogLyoqCiAgKiBydW5xdWV1ZV9pc19sb2NrZWQKKyAqIEBjcHU6IHRoZSBwcm9jZXNzb3IgaW4gcXVlc3Rpb24uCiAgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGNwdSBydW5xdWV1ZSBpcyBsb2NrZWQuCiAgKiBUaGlzIGludGVyZmFjZSBhbGxvd3MgcHJpbnRrIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBydW5xdWV1ZSBsb2NrCkBAIC03ODAsNyArNzgyLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgc2NoZWRfZmVhdF9zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NoZWRfZmVhdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NoZWRfZmVhdF9mb3BzID0gewogCS5vcGVuCQk9IHNjaGVkX2ZlYXRfb3BlbiwKIAkud3JpdGUJCT0gc2NoZWRfZmVhdF93cml0ZSwKIAkucmVhZAkJPSBzZXFfcmVhZCwKQEAgLTE1NjMsMTEgKzE1NjUsNyBAQAogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAotc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSB7Ci0JdW5zaWduZWQgbG9uZyBycV93ZWlnaHRbTlJfQ1BVU107Ci19OwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSwgdXBkYXRlX3NoYXJlc19kYXRhKTsKK3N0YXRpYyBfX3JlYWRfbW9zdGx5IHVuc2lnbmVkIGxvbmcgKnVwZGF0ZV9zaGFyZXNfZGF0YTsKIAogc3RhdGljIHZvaWQgX19zZXRfc2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCB1bnNpZ25lZCBsb25nIHNoYXJlcyk7CiAKQEAgLTE1NzcsMTIgKzE1NzUsMTIgQEAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZF9zaGFyZXMsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2RfcnFfd2VpZ2h0LAotCQkJCSAgICBzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhICp1c2QpCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQpCiB7CiAJdW5zaWduZWQgbG9uZyBzaGFyZXMsIHJxX3dlaWdodDsKIAlpbnQgYm9vc3QgPSAwOwogCi0JcnFfd2VpZ2h0ID0gdXNkLT5ycV93ZWlnaHRbY3B1XTsKKwlycV93ZWlnaHQgPSB1c2RfcnFfd2VpZ2h0W2NwdV07CiAJaWYgKCFycV93ZWlnaHQpIHsKIAkJYm9vc3QgPSAxOwogCQlycV93ZWlnaHQgPSBOSUNFXzBfTE9BRDsKQEAgLTE2MTcsNyArMTYxNSw3IEBACiBzdGF0aWMgaW50IHRnX3NoYXJlc191cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyB3ZWlnaHQsIHJxX3dlaWdodCA9IDAsIHNoYXJlcyA9IDA7Ci0Jc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSAqdXNkOworCXVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CkBAIC0xNjI2LDExICsxNjI0LDExIEBACiAJCXJldHVybiAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXVzZCA9ICZfX2dldF9jcHVfdmFyKHVwZGF0ZV9zaGFyZXNfZGF0YSk7CisJdXNkX3JxX3dlaWdodCA9IHBlcl9jcHVfcHRyKHVwZGF0ZV9zaGFyZXNfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpIHsKIAkJd2VpZ2h0ID0gdGctPmNmc19ycVtpXS0+bG9hZC53ZWlnaHQ7Ci0JCXVzZC0+cnFfd2VpZ2h0W2ldID0gd2VpZ2h0OworCQl1c2RfcnFfd2VpZ2h0W2ldID0gd2VpZ2h0OwogCiAJCS8qCiAJCSAqIElmIHRoZXJlIGFyZSBjdXJyZW50bHkgbm8gdGFza3Mgb24gdGhlIGNwdSBwcmV0ZW5kIHRoZXJlCkBAIC0xNjUxLDcgKzE2NDksNyBAQAogCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOwogCiAJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkKLQkJdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUodGcsIGksIHNoYXJlcywgcnFfd2VpZ2h0LCB1c2QpOworCQl1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdSh0ZywgaSwgc2hhcmVzLCBycV93ZWlnaHQsIHVzZF9ycV93ZWlnaHQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0xOTk1LDYgKzE5OTMsMzggQEAKIAkJcC0+c2NoZWRfY2xhc3MtPnByaW9fY2hhbmdlZChycSwgcCwgb2xkcHJpbywgcnVubmluZyk7CiB9CiAKKy8qKgorICoga3RocmVhZF9iaW5kIC0gYmluZCBhIGp1c3QtY3JlYXRlZCBrdGhyZWFkIHRvIGEgY3B1LgorICogQHA6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCisgKiBAY3B1OiBjcHUgKG1pZ2h0IG5vdCBiZSBvbmxpbmUsIG11c3QgYmUgcG9zc2libGUpIGZvciBAayB0byBydW4gb24uCisgKgorICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBzZXRfY3B1c19hbGxvd2VkKCksCisgKiBleGNlcHQgdGhhdCBAY3B1IGRvZXNuJ3QgbmVlZCB0byBiZSBvbmxpbmUsIGFuZCB0aGUgdGhyZWFkIG11c3QgYmUKKyAqIHN0b3BwZWQgKGkuZS4sIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpKS4KKyAqCisgKiBGdW5jdGlvbiBsaXZlcyBoZXJlIGluc3RlYWQgb2Yga3RocmVhZC5jIGJlY2F1c2UgaXQgbWVzc2VzIHdpdGgKKyAqIHNjaGVkdWxlciBpbnRlcm5hbHMgd2hpY2ggcmVxdWlyZSBsb2NraW5nLgorICovCit2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCisJaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUocCwgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlzZXRfdGFza19jcHUocCwgY3B1KTsKKwlwLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7CisJcC0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGt0aHJlYWRfYmluZCk7CisKICNpZmRlZiBDT05GSUdfU01QCiAvKgogICogSXMgdGhpcyB0YXNrIGxpa2VseSBjYWNoZS1ob3Q6CkBAIC0yMDA3LDcgKzIwMzcsNyBAQAogCS8qCiAJICogQnVkZHkgY2FuZGlkYXRlcyBhcmUgY2FjaGUgaG90OgogCSAqLwotCWlmIChzY2hlZF9mZWF0KENBQ0hFX0hPVF9CVUREWSkgJiYKKwlpZiAoc2NoZWRfZmVhdChDQUNIRV9IT1RfQlVERFkpICYmIHRoaXNfcnEoKS0+bnJfcnVubmluZyAmJgogCQkJKCZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bmV4dCB8fAogCQkJICZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bGFzdCkpCiAJCXJldHVybiAxOwpAQCAtMjMxMSw3ICsyMzQxLDcgQEAKIHsKIAlpbnQgY3B1LCBvcmlnX2NwdSwgdGhpc19jcHUsIHN1Y2Nlc3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJxICpycTsKKwlzdHJ1Y3QgcnEgKnJxLCAqb3JpZ19ycTsKIAogCWlmICghc2NoZWRfZmVhdChTWU5DX1dBS0VVUFMpKQogCQl3YWtlX2ZsYWdzICY9IH5XRl9TWU5DOwpAQCAtMjMxOSw3ICsyMzQ5LDcgQEAKIAl0aGlzX2NwdSA9IGdldF9jcHUoKTsKIAogCXNtcF93bWIoKTsKLQlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCXJxID0gb3JpZ19ycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJaWYgKCEocC0+c3RhdGUgJiBzdGF0ZSkpCiAJCWdvdG8gb3V0OwpAQCAtMjM1MCw2ICsyMzgwLDEwIEBACiAJCXNldF90YXNrX2NwdShwLCBjcHUpOwogCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKworCWlmIChycSAhPSBvcmlnX3JxKQorCQl1cGRhdGVfcnFfY2xvY2socnEpOworCiAJV0FSTl9PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7CiAJY3B1ID0gdGFza19jcHUocCk7CiAKQEAgLTI1MTUsMjIgKzI1NDksMTcgQEAKIAlfX3NjaGVkX2ZvcmsocCk7CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbGVhayBQSSBib29zdGluZyBwcmlvcml0eSB0byB0aGUgY2hpbGQuCi0JICovCi0JcC0+cHJpbyA9IGN1cnJlbnQtPm5vcm1hbF9wcmlvOwotCi0JLyoKIAkgKiBSZXZlcnQgdG8gZGVmYXVsdCBwcmlvcml0eS9wb2xpY3kgb24gZm9yayBpZiByZXF1ZXN0ZWQuCiAJICovCiAJaWYgKHVubGlrZWx5KHAtPnNjaGVkX3Jlc2V0X29uX2ZvcmspKSB7Ci0JCWlmIChwLT5wb2xpY3kgPT0gU0NIRURfRklGTyB8fCBwLT5wb2xpY3kgPT0gU0NIRURfUlIpCisJCWlmIChwLT5wb2xpY3kgPT0gU0NIRURfRklGTyB8fCBwLT5wb2xpY3kgPT0gU0NIRURfUlIpIHsKIAkJCXAtPnBvbGljeSA9IFNDSEVEX05PUk1BTDsKLQotCQlpZiAocC0+bm9ybWFsX3ByaW8gPCBERUZBVUxUX1BSSU8pCi0JCQlwLT5wcmlvID0gREVGQVVMVF9QUklPOworCQkJcC0+bm9ybWFsX3ByaW8gPSBwLT5zdGF0aWNfcHJpbzsKKwkJfQogCiAJCWlmIChQUklPX1RPX05JQ0UocC0+c3RhdGljX3ByaW8pIDwgMCkgewogCQkJcC0+c3RhdGljX3ByaW8gPSBOSUNFX1RPX1BSSU8oMCk7CisJCQlwLT5ub3JtYWxfcHJpbyA9IHAtPnN0YXRpY19wcmlvOwogCQkJc2V0X2xvYWRfd2VpZ2h0KHApOwogCQl9CiAKQEAgLTI1NDEsNiArMjU3MCwxMSBAQAogCQlwLT5zY2hlZF9yZXNldF9vbl9mb3JrID0gMDsKIAl9CiAKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbGVhayBQSSBib29zdGluZyBwcmlvcml0eSB0byB0aGUgY2hpbGQuCisJICovCisJcC0+cHJpbyA9IGN1cnJlbnQtPm5vcm1hbF9wcmlvOworCiAJaWYgKCFydF9wcmlvKHAtPnByaW8pKQogCQlwLT5zY2hlZF9jbGFzcyA9ICZmYWlyX3NjaGVkX2NsYXNzOwogCkBAIC0yNTgxLDggKzI2MTUsNiBAQAogCUJVR19PTihwLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAKLQlwLT5wcmlvID0gZWZmZWN0aXZlX3ByaW8ocCk7Ci0KIAlpZiAoIXAtPnNjaGVkX2NsYXNzLT50YXNrX25ldyB8fCAhY3VycmVudC0+c2Uub25fcnEpIHsKIAkJYWN0aXZhdGVfdGFzayhycSwgcCwgMCk7CiAJfSBlbHNlIHsKQEAgLTM2NTgsNiArMzY5MCw3IEBACiAKIC8qKgogICogdXBkYXRlX3NnX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KICAqIEBncm91cDogc2NoZWRfZ3JvdXAgd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KICAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KICAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQpAQCAtNjcyMCw5ICs2NzUzLDYgQEAKIC8qCiAgKiBUaGlzIHRhc2sgaXMgYWJvdXQgdG8gZ28gdG8gc2xlZXAgb24gSU8uIEluY3JlbWVudCBycS0+bnJfaW93YWl0IHNvCiAgKiB0aGF0IHByb2Nlc3MgYWNjb3VudGluZyBrbm93cyB0aGF0IHRoaXMgaXMgYSB0YXNrIGluIElPIHdhaXQgc3RhdGUuCi0gKgotICogQnV0IGRvbid0IGRvIHRoYXQgaWYgaXQgaXMgYSBkZWxpYmVyYXRlLCB0aHJvdHRsaW5nIElPIHdhaXQgKHRoaXMgdGFzawotICogaGFzIHNldCBpdHMgYmFja2luZ19kZXZfaW5mbzogdGhlIHF1ZXVlIGFnYWluc3Qgd2hpY2ggaXQgc2hvdWxkIHRocm90dGxlKQogICovCiB2b2lkIF9fc2NoZWQgaW9fc2NoZWR1bGUodm9pZCkKIHsKQEAgLTk0MDYsNiArOTQzNiwxMCBAQAogI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEICovCiAKKyNpZiBkZWZpbmVkIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICYmIGRlZmluZWQgQ09ORklHX1NNUAorCXVwZGF0ZV9zaGFyZXNfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KG5yX2NwdV9pZHMgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nKSk7CisjZW5kaWYKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzdHJ1Y3QgcnEgKnJxOwogCkBAIC05NTMxLDEzICs5NTY1LDEzIEBACiAJY3VycmVudC0+c2NoZWRfY2xhc3MgPSAmZmFpcl9zY2hlZF9jbGFzczsKIAogCS8qIEFsbG9jYXRlIHRoZSBub2h6X2NwdV9tYXNrIGlmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLICovCi0JYWxsb2NfY3B1bWFza192YXIoJm5vaHpfY3B1X21hc2ssIEdGUF9OT1dBSVQpOworCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oel9jcHVfbWFzaywgR0ZQX05PV0FJVCk7CiAjaWZkZWYgQ09ORklHX1NNUAogI2lmZGVmIENPTkZJR19OT19IWgotCWFsbG9jX2NwdW1hc2tfdmFyKCZub2h6LmNwdV9tYXNrLCBHRlBfTk9XQUlUKTsKKwl6YWxsb2NfY3B1bWFza192YXIoJm5vaHouY3B1X21hc2ssIEdGUF9OT1dBSVQpOwogCWFsbG9jX2NwdW1hc2tfdmFyKCZub2h6LmlsYl9ncnBfbm9oel9tYXNrLCBHRlBfTk9XQUlUKTsKICNlbmRpZgotCWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVfaXNvbGF0ZWRfbWFwLCBHRlBfTk9XQUlUKTsKKwl6YWxsb2NfY3B1bWFza192YXIoJmNwdV9pc29sYXRlZF9tYXAsIEdGUF9OT1dBSVQpOwogI2VuZGlmIC8qIFNNUCAqLwogCiAJcGVyZl9ldmVudF9pbml0KCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IGFjMmUxZGMuLjQ3OWNlNTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAljbG9jayA9IHdyYXBfbWF4KGNsb2NrLCBtaW5fY2xvY2spOwogCWNsb2NrID0gd3JhcF9taW4oY2xvY2ssIG1heF9jbG9jayk7CiAKLQlpZiAoY21weGNoZygmc2NkLT5jbG9jaywgb2xkX2Nsb2NrLCBjbG9jaykgIT0gb2xkX2Nsb2NrKQorCWlmIChjbXB4Y2hnNjQoJnNjZC0+Y2xvY2ssIG9sZF9jbG9jaywgY2xvY2spICE9IG9sZF9jbG9jaykKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiBjbG9jazsKQEAgLTE2Myw3ICsxNjMsNyBAQAogCQl2YWwgPSByZW1vdGVfY2xvY2s7CiAJfQogCi0JaWYgKGNtcHhjaGcocHRyLCBvbGRfdmFsLCB2YWwpICE9IG9sZF92YWwpCisJaWYgKGNtcHhjaGc2NChwdHIsIG9sZF92YWwsIHZhbCkgIT0gb2xkX3ZhbCkKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiB2YWw7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCA0ZTc3N2I0Li4zNzA4N2E3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTgyMiw2ICs4MjIsMjYgQEAKIAkJICogcmUtZWxlY3RlZCBkdWUgdG8gYnVkZHkgZmF2b3Vycy4KIAkJICovCiAJCWNsZWFyX2J1ZGRpZXMoY2ZzX3JxLCBjdXJyKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogRW5zdXJlIHRoYXQgYSB0YXNrIHRoYXQgbWlzc2VkIHdha2V1cCBwcmVlbXB0aW9uIGJ5IGEKKwkgKiBuYXJyb3cgbWFyZ2luIGRvZXNuJ3QgaGF2ZSB0byB3YWl0IGZvciBhIGZ1bGwgc2xpY2UuCisJICogVGhpcyBhbHNvIG1pdGlnYXRlcyBidWRkeSBpbmR1Y2VkIGxhdGVuY2llcyB1bmRlciBsb2FkLgorCSAqLworCWlmICghc2NoZWRfZmVhdChXQUtFVVBfUFJFRU1QVCkpCisJCXJldHVybjsKKworCWlmIChkZWx0YV9leGVjIDwgc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSkKKwkJcmV0dXJuOworCisJaWYgKGNmc19ycS0+bnJfcnVubmluZyA+IDEpIHsKKwkJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSBfX3BpY2tfbmV4dF9lbnRpdHkoY2ZzX3JxKTsKKwkJczY0IGRlbHRhID0gY3Vyci0+dnJ1bnRpbWUgLSBzZS0+dnJ1bnRpbWU7CisKKwkJaWYgKGRlbHRhID4gaWRlYWxfcnVudGltZSkKKwkJCXJlc2NoZWRfdGFzayhycV9vZihjZnNfcnEpLT5jdXJyKTsKIAl9CiB9CiAKQEAgLTg2MSwxMiArODgxLDE4IEBACiBzdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqcGlja19uZXh0X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiB7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSBfX3BpY2tfbmV4dF9lbnRpdHkoY2ZzX3JxKTsKKwlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpsZWZ0ID0gc2U7CiAKLQlpZiAoY2ZzX3JxLT5uZXh0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPm5leHQsIHNlKSA8IDEpCi0JCXJldHVybiBjZnNfcnEtPm5leHQ7CisJaWYgKGNmc19ycS0+bmV4dCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5uZXh0LCBsZWZ0KSA8IDEpCisJCXNlID0gY2ZzX3JxLT5uZXh0OwogCi0JaWYgKGNmc19ycS0+bGFzdCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5sYXN0LCBzZSkgPCAxKQotCQlyZXR1cm4gY2ZzX3JxLT5sYXN0OworCS8qCisJICogUHJlZmVyIGxhc3QgYnVkZHksIHRyeSB0byByZXR1cm4gdGhlIENQVSB0byBhIHByZWVtcHRlZCB0YXNrLgorCSAqLworCWlmIChjZnNfcnEtPmxhc3QgJiYgd2FrZXVwX3ByZWVtcHRfZW50aXR5KGNmc19ycS0+bGFzdCwgbGVmdCkgPCAxKQorCQlzZSA9IGNmc19ycS0+bGFzdDsKKworCWNsZWFyX2J1ZGRpZXMoY2ZzX3JxLCBzZSk7CiAKIAlyZXR1cm4gc2U7CiB9CkBAIC0xNTY4LDYgKzE1OTQsNyBAQAogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJmN1cnItPnNlLCAqcHNlID0gJnAtPnNlOwogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKGN1cnIpOwogCWludCBzeW5jID0gd2FrZV9mbGFncyAmIFdGX1NZTkM7CisJaW50IHNjYWxlID0gY2ZzX3JxLT5ucl9ydW5uaW5nID49IHNjaGVkX25yX2xhdGVuY3k7CiAKIAl1cGRhdGVfY3VycihjZnNfcnEpOwogCkBAIC0xNTgyLDE4ICsxNjA5LDcgQEAKIAlpZiAodW5saWtlbHkoc2UgPT0gcHNlKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBPbmx5IHNldCB0aGUgYmFja3dhcmQgYnVkZHkgd2hlbiB0aGUgY3VycmVudCB0YXNrIGlzIHN0aWxsIG9uIHRoZQotCSAqIHJxLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHdha2V1cCBnZXRzIGludGVybGVhdmVkIHdpdGggc2NoZWR1bGUgb24KLQkgKiB0aGUgLT5wcmVfc2NoZWR1bGUoKSBvciBpZGxlX2JhbGFuY2UoKSBwb2ludCwgZWl0aGVyIG9mIHdoaWNoIGNhbgotCSAqIGRyb3AgdGhlIHJxIGxvY2suCi0JICoKLQkgKiBBbHNvLCBkdXJpbmcgZWFybHkgYm9vdCB0aGUgaWRsZSB0aHJlYWQgaXMgaW4gdGhlIGZhaXIgY2xhc3MsIGZvcgotCSAqIG9idmlvdXMgcmVhc29ucyBpdHMgYSBiYWQgaWRlYSB0byBzY2hlZHVsZSBiYWNrIHRvIHRoZSBpZGxlIHRocmVhZC4KLQkgKi8KLQlpZiAoc2NoZWRfZmVhdChMQVNUX0JVRERZKSAmJiBsaWtlbHkoc2UtPm9uX3JxICYmIGN1cnIgIT0gcnEtPmlkbGUpKQotCQlzZXRfbGFzdF9idWRkeShzZSk7Ci0JaWYgKHNjaGVkX2ZlYXQoTkVYVF9CVUREWSkgJiYgISh3YWtlX2ZsYWdzICYgV0ZfRk9SSykpCisJaWYgKHNjaGVkX2ZlYXQoTkVYVF9CVUREWSkgJiYgc2NhbGUgJiYgISh3YWtlX2ZsYWdzICYgV0ZfRk9SSykpCiAJCXNldF9uZXh0X2J1ZGR5KHBzZSk7CiAKIAkvKgpAQCAtMTYzOSw4ICsxNjU1LDIyIEBACiAKIAlCVUdfT04oIXBzZSk7CiAKLQlpZiAod2FrZXVwX3ByZWVtcHRfZW50aXR5KHNlLCBwc2UpID09IDEpCisJaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShzZSwgcHNlKSA9PSAxKSB7CiAJCXJlc2NoZWRfdGFzayhjdXJyKTsKKwkJLyoKKwkJICogT25seSBzZXQgdGhlIGJhY2t3YXJkIGJ1ZGR5IHdoZW4gdGhlIGN1cnJlbnQgdGFzayBpcyBzdGlsbAorCQkgKiBvbiB0aGUgcnEuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgd2FrZXVwIGdldHMgaW50ZXJsZWF2ZWQKKwkJICogd2l0aCBzY2hlZHVsZSBvbiB0aGUgLT5wcmVfc2NoZWR1bGUoKSBvciBpZGxlX2JhbGFuY2UoKQorCQkgKiBwb2ludCwgZWl0aGVyIG9mIHdoaWNoIGNhbiAqIGRyb3AgdGhlIHJxIGxvY2suCisJCSAqCisJCSAqIEFsc28sIGR1cmluZyBlYXJseSBib290IHRoZSBpZGxlIHRocmVhZCBpcyBpbiB0aGUgZmFpciBjbGFzcywKKwkJICogZm9yIG9idmlvdXMgcmVhc29ucyBpdHMgYSBiYWQgaWRlYSB0byBzY2hlZHVsZSBiYWNrIHRvIGl0LgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KCFzZS0+b25fcnEgfHwgY3VyciA9PSBycS0+aWRsZSkpCisJCQlyZXR1cm47CisJCWlmIChzY2hlZF9mZWF0KExBU1RfQlVERFkpICYmIHNjYWxlICYmIGVudGl0eV9pc190YXNrKHNlKSkKKwkJCXNldF9sYXN0X2J1ZGR5KHNlKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF90YXNrX2ZhaXIoc3RydWN0IHJxICpycSkKQEAgLTE2NTQsMTYgKzE2ODQsNiBAQAogCiAJZG8gewogCQlzZSA9IHBpY2tfbmV4dF9lbnRpdHkoY2ZzX3JxKTsKLQkJLyoKLQkJICogSWYgc2Ugd2FzIGEgYnVkZHksIGNsZWFyIGl0IHNvIHRoYXQgaXQgd2lsbCBoYXZlIHRvIGVhcm4KLQkJICogdGhlIGZhdm91ciBhZ2Fpbi4KLQkJICoKLQkJICogSWYgc2Ugd2FzIG5vdCBhIGJ1ZGR5LCBjbGVhciB0aGUgYnVkZGllcyBiZWNhdXNlIG5laXRoZXIKLQkJICogd2FzIGVsZWdpYmxlIHRvIHJ1biwgbGV0IHRoZW0gZWFybiBpdCBhZ2Fpbi4KLQkJICoKLQkJICogSU9XLiB1bmNvbmRpdGlvbmFsbHkgY2xlYXIgYnVkZGllcy4KLQkJICovCi0JCV9fY2xlYXJfYnVkZGllcyhjZnNfcnEsIE5VTEwpOwogCQlzZXRfbmV4dF9lbnRpdHkoY2ZzX3JxLCBzZSk7CiAJCWNmc19ycSA9IGdyb3VwX2Nmc19ycShzZSk7CiAJfSB3aGlsZSAoY2ZzX3JxKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAyNTU0NzVkLi5jZTE3NzYwIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xMTEwLDYgKzExMTAsOCBAQAogCWVyciA9IHNlc3Npb247CiBvdXQ6CiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJaWYgKGVyciA+IDApCisJCXByb2Nfc2lkX2Nvbm5lY3Rvcihncm91cF9sZWFkZXIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1NDYsMjQgKzE1NDgsMzcgQEAKIAkJCWlmIChhcmc0IHwgYXJnNSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXN3aXRjaCAoYXJnMikgewotCQkJY2FzZSAwOgorCQkJY2FzZSBQUl9NQ0VfS0lMTF9DTEVBUjoKIAkJCQlpZiAoYXJnMyAhPSAwKQogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQljdXJyZW50LT5mbGFncyAmPSB+UEZfTUNFX1BST0NFU1M7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIDE6CisJCQljYXNlIFBSX01DRV9LSUxMX1NFVDoKIAkJCQljdXJyZW50LT5mbGFncyB8PSBQRl9NQ0VfUFJPQ0VTUzsKLQkJCQlpZiAoYXJnMyAhPSAwKQorCQkJCWlmIChhcmczID09IFBSX01DRV9LSUxMX0VBUkxZKQogCQkJCQljdXJyZW50LT5mbGFncyB8PSBQRl9NQ0VfRUFSTFk7Ci0JCQkJZWxzZQorCQkJCWVsc2UgaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfTEFURSkKIAkJCQkJY3VycmVudC0+ZmxhZ3MgJj0gflBGX01DRV9FQVJMWTsKKwkJCQllbHNlIGlmIChhcmczID09IFBSX01DRV9LSUxMX0RFRkFVTFQpCisJCQkJCWN1cnJlbnQtPmZsYWdzICY9CisJCQkJCQl+KFBGX01DRV9FQVJMWXxQRl9NQ0VfUFJPQ0VTUyk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQllcnJvciA9IDA7CiAJCQlicmVhazsKLQorCQljYXNlIFBSX01DRV9LSUxMX0dFVDoKKwkJCWlmIChhcmcyIHwgYXJnMyB8IGFyZzQgfCBhcmc1KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUNFX1BST0NFU1MpCisJCQkJZXJyb3IgPSAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NQ0VfRUFSTFkpID8KKwkJCQkJUFJfTUNFX0tJTExfRUFSTFkgOiBQUl9NQ0VfS0lMTF9MQVRFOworCQkJZWxzZQorCQkJCWVycm9yID0gUFJfTUNFX0tJTExfREVGQVVMVDsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKaW5kZXggYjM4NDIzYy4uYjZlN2FhZSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9jaGVjay5jCisrKyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIAkJCWlmICghdGFibGUtPmN0bF9uYW1lICYmIHRhYmxlLT5zdHJhdGVneSkKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJTdHJhdGVneSB3aXRob3V0IGN0bF9uYW1lIik7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogCQkJaWYgKHRhYmxlLT5wcm9jbmFtZSAmJiAhdGFibGUtPnByb2NfaGFuZGxlcikKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJObyBwcm9jX2hhbmRsZXIiKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggMDkxMTMzNC4uNWUxOGM2YSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0zOTQsMTUgKzM5NCwxMSBAQAogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3M7CiAKLQltdXRleF9sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNzLCAmY2xvY2tzb3VyY2VfbGlzdCwgbGlzdCkKIAkJaWYgKGNzLT5yZXN1bWUpCiAJCQljcy0+cmVzdW1lKCk7CiAKIAljbG9ja3NvdXJjZV9yZXN1bWVfd2F0Y2hkb2coKTsKLQotCW11dGV4X3VubG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwppbmRleCBlMGY1OWEyLi44OWFlZDU5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCkBAIC0yMzEsNiArMjMxLDEzIEBACiAJaWYgKCFpbmlkbGUgJiYgIXRzLT5pbmlkbGUpCiAJCWdvdG8gZW5kOwogCisJLyoKKwkgKiBTZXQgdHMtPmluaWRsZSB1bmNvbmRpdGlvbmFsbHkuIEV2ZW4gaWYgdGhlIHN5c3RlbSBkaWQgbm90CisJICogc3dpdGNoIHRvIE5PSFogbW9kZSB0aGUgY3B1IGZyZXF1ZW5jeSBnb3Zlcm5lcnMgcmVseSBvbiB0aGUKKwkgKiB1cGRhdGUgb2YgdGhlIGlkbGUgdGltZSBhY2NvdW50aW5nIGluIHRpY2tfbm9oel9zdGFydF9pZGxlKCkuCisJICovCisJdHMtPmluaWRsZSA9IDE7CisKIAlub3cgPSB0aWNrX25vaHpfc3RhcnRfaWRsZSh0cyk7CiAKIAkvKgpAQCAtMjQ4LDggKzI1NSw2IEBACiAJaWYgKHVubGlrZWx5KHRzLT5ub2h6X21vZGUgPT0gTk9IWl9NT0RFX0lOQUNUSVZFKSkKIAkJZ290byBlbmQ7CiAKLQl0cy0+aW5pZGxlID0gMTsKLQogCWlmIChuZWVkX3Jlc2NoZWQoKSkKIAkJZ290byBlbmQ7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGZiMGY0NmYuLmMzYTRlMjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKaW5kZXggZmRkZDY5ZC4uMWI1YjdhYSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHRpbWVyX2xpc3Rfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRpbWVyX2xpc3RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRpbWVyX2xpc3RfZm9wcyA9IHsKIAkub3BlbgkJPSB0aW1lcl9saXN0X29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jIGIva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYwppbmRleCA0Y2RlOGI5Li5lZTU2ODFmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKQEAgLTM5NSw3ICszOTUsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB0c3RhdHNfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzdGF0c19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHN0YXRzX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHN0YXRzX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLndyaXRlCQk9IHRzdGF0c193cml0ZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKaW5kZXggM2ViMTU5Yy4uZDlkNjIwNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKQEAgLTg1Niw2ICs4NTYsMzcgQEAKIH0KIAogLyoqCisgKiBibGtfYWRkX3RyYWNlX3JxX3JlbWFwIC0gQWRkIGEgdHJhY2UgZm9yIGEgcmVxdWVzdC1yZW1hcCBvcGVyYXRpb24KKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQHJxOgkJdGhlIHNvdXJjZSByZXF1ZXN0CisgKiBAZGV2Ogl0YXJnZXQgZGV2aWNlCisgKiBAZnJvbToJc291cmNlIHNlY3RvcgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIERldmljZSBtYXBwZXIgcmVtYXBzIHJlcXVlc3QgdG8gb3RoZXIgZGV2aWNlcy4KKyAqICAgICBBZGQgYSB0cmFjZSBmb3IgdGhhdCBhY3Rpb24uCisgKgorICoqLworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9yZW1hcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGRldl90IGRldiwKKwkJCQkgICBzZWN0b3JfdCBmcm9tKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCXN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgcjsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJci5kZXZpY2VfZnJvbSA9IGNwdV90b19iZTMyKGRldik7CisJci5kZXZpY2VfdG8gICA9IGNwdV90b19iZTMyKGRpc2tfZGV2dChycS0+cnFfZGlzaykpOworCXIuc2VjdG9yX2Zyb20gPSBjcHVfdG9fYmU2NChmcm9tKTsKKworCV9fYmxrX2FkZF90cmFjZShidCwgYmxrX3JxX3BvcyhycSksIGJsa19ycV9ieXRlcyhycSksCisJCQlycV9kYXRhX2RpcihycSksIEJMS19UQV9SRU1BUCwgISFycS0+ZXJyb3JzLAorCQkJc2l6ZW9mKHIpLCAmcik7Cit9CisKKy8qKgogICogYmxrX2FkZF9kcml2ZXJfZGF0YSAtIEFkZCBiaW5hcnkgbWVzc2FnZSB3aXRoIGRyaXZlci1zcGVjaWZpYyBkYXRhCiAgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKICAqIEBycToJCWlvIHJlcXVlc3QKQEAgLTkyMiwxMCArOTUzLDEzIEBACiAJV0FSTl9PTihyZXQpOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JlbWFwKGJsa19hZGRfdHJhY2VfcmVtYXApOwogCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwKTsKKwlXQVJOX09OKHJldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JlbWFwKGJsa19hZGRfdHJhY2VfcmVtYXApOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCk7CiAJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfaW8oYmxrX2FkZF90cmFjZV91bnBsdWdfaW8pOwpAQCAtMTY1Nyw2ICsxNjkxLDExIEBACiAJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmYmxrX3RyYWNlX2F0dHJfZ3JvdXApOwogfQogCit2b2lkIGJsa190cmFjZV9yZW1vdmVfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmYmxrX3RyYWNlX2F0dHJfZ3JvdXApOworfQorCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgKi8KIAogI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggYTE0MjU3OS4uNmRjNGU1ZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMjI1LDcgKzIyNSwxMSBAQAogCWlmIChmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPT0gZnRyYWNlX3N0dWIpCiAJCXJldHVybjsKIAorI2lmZGVmIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJZnVuYyA9IGZ0cmFjZV90cmFjZV9mdW5jdGlvbjsKKyNlbHNlCisJZnVuYyA9IF9fZnRyYWNlX3RyYWNlX2Z1bmN0aW9uOworI2VuZGlmCiAKIAlpZiAoZnRyYWNlX3BpZF90cmFjZSkgewogCQlzZXRfZnRyYWNlX3BpZF9mdW5jdGlvbihmdW5jKTsKQEAgLTczNiw3ICs3NDAsNyBAQAogIG91dDoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9wcm9maWxlX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0xMDc0LDE0ICsxMDc4LDkgQEAKIAkJZmFpbGVkID0gX19mdHJhY2VfcmVwbGFjZV9jb2RlKHJlYywgZW5hYmxlKTsKIAkJaWYgKGZhaWxlZCkgewogCQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRkFJTEVEOwotCQkJaWYgKChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpIHx8Ci0JCQkgICAgIWNvcmVfa2VybmVsX3RleHQocmVjLT5pcCkpIHsKLQkJCQlmdHJhY2VfZnJlZV9yZWMocmVjKTsKLQkJCQl9IGVsc2UgewotCQkJCWZ0cmFjZV9idWcoZmFpbGVkLCByZWMtPmlwKTsKLQkJCQkJLyogU3RvcCBwcm9jZXNzaW5nICovCi0JCQkJCXJldHVybjsKLQkJCQl9CisJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjLT5pcCk7CisJCQkvKiBTdG9wIHByb2Nlc3NpbmcgKi8KKwkJCXJldHVybjsKIAkJfQogCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOwogfQpAQCAtMTYyMSw4ICsxNjIwLDEwIEBACiAJCWlmICghcmV0KSB7CiAJCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJCQltLT5wcml2YXRlID0gaXRlcjsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CisJCQl0cmFjZV9wYXJzZXJfcHV0KCZpdGVyLT5wYXJzZXIpOwogCQkJa2ZyZWUoaXRlcik7CisJCX0KIAl9IGVsc2UKIAkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaXRlcjsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKQEAgLTIyMDIsNyArMjIwMyw3IEBACiAJc3RydWN0IHRyYWNlX3BhcnNlciAqcGFyc2VyOwogCXNzaXplX3QgcmV0LCByZWFkOwogCi0JaWYgKCFjbnQgfHwgY250IDwgMCkKKwlpZiAoIWNudCkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CkBAIC0yMjE2LDIwICsyMjE3LDIwIEBACiAJcGFyc2VyID0gJml0ZXItPnBhcnNlcjsKIAlyZWFkID0gdHJhY2VfZ2V0X3VzZXIocGFyc2VyLCB1YnVmLCBjbnQsIHBwb3MpOwogCi0JaWYgKHRyYWNlX3BhcnNlcl9sb2FkZWQocGFyc2VyKSAmJgorCWlmIChyZWFkID49IDAgJiYgdHJhY2VfcGFyc2VyX2xvYWRlZChwYXJzZXIpICYmCiAJICAgICF0cmFjZV9wYXJzZXJfY29udChwYXJzZXIpKSB7CiAJCXJldCA9IGZ0cmFjZV9wcm9jZXNzX3JlZ2V4KHBhcnNlci0+YnVmZmVyLAogCQkJCQkgICBwYXJzZXItPmlkeCwgZW5hYmxlKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCiAJCXRyYWNlX3BhcnNlcl9jbGVhcihwYXJzZXIpOwogCX0KIAogCXJldCA9IHJlYWQ7Ci0KK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7Ci1vdXQ6CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNTUyLDggKzI1NTMsNyBAQAogCQkgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHRyYWNlX3BhcnNlciBwYXJzZXI7Ci0Jc2l6ZV90IHJlYWQgPSAwOwotCXNzaXplX3QgcmV0OworCXNzaXplX3QgcmVhZCwgcmV0OwogCiAJaWYgKCFjbnQgfHwgY250IDwgMCkKIAkJcmV0dXJuIDA7CkBAIC0yNTYyLDI5ICsyNTYyLDMxIEBACiAKIAlpZiAoZnRyYWNlX2dyYXBoX2NvdW50ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpIHsKIAkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCWlmICh0cmFjZV9wYXJzZXJfZ2V0X2luaXQoJnBhcnNlciwgRlRSQUNFX0JVRkZfTUFYKSkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXJlYWQgPSB0cmFjZV9nZXRfdXNlcigmcGFyc2VyLCB1YnVmLCBjbnQsIHBwb3MpOwogCi0JaWYgKHRyYWNlX3BhcnNlcl9sb2FkZWQoKCZwYXJzZXIpKSkgeworCWlmIChyZWFkID49IDAgJiYgdHJhY2VfcGFyc2VyX2xvYWRlZCgoJnBhcnNlcikpKSB7CiAJCXBhcnNlci5idWZmZXJbcGFyc2VyLmlkeF0gPSAwOwogCiAJCS8qIHdlIGFsbG93IG9ubHkgb25lIGV4cHJlc3Npb24gYXQgYSB0aW1lICovCiAJCXJldCA9IGZ0cmFjZV9zZXRfZnVuYyhmdHJhY2VfZ3JhcGhfZnVuY3MsICZmdHJhY2VfZ3JhcGhfY291bnQsCiAJCQkJCXBhcnNlci5idWZmZXIpOwogCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCXJldCA9IHJlYWQ7Ci0gb3V0OgorCitvdXRfZnJlZToKIAl0cmFjZV9wYXJzZXJfcHV0KCZwYXJzZXIpOworb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmdyYXBoX2xvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTI2NTUsMTkgKzI2NTcsMTcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19NT0RVTEVTCi12b2lkIGZ0cmFjZV9yZWxlYXNlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit2b2lkIGZ0cmFjZV9yZWxlYXNlX21vZChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwotCXVuc2lnbmVkIGxvbmcgcyA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgZSA9ICh1bnNpZ25lZCBsb25nKWVuZDsKIAotCWlmIChmdHJhY2VfZGlzYWJsZWQgfHwgIXN0YXJ0IHx8IHN0YXJ0ID09IGVuZCkKKwlpZiAoZnRyYWNlX2Rpc2FibGVkKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7Ci0JCWlmICgocmVjLT5pcCA+PSBzKSAmJiAocmVjLT5pcCA8IGUpKSB7CisJCWlmICh3aXRoaW5fbW9kdWxlX2NvcmUocmVjLT5pcCwgbW9kKSkgewogCQkJLyoKIAkJCSAqIHJlYy0+aXAgaXMgY2hhbmdlZCBpbiBmdHJhY2VfZnJlZV9yZWMoKQogCQkJICogSXQgc2hvdWxkIG5vdCBiZXR3ZWVuIHMgYW5kIGUgaWYgcmVjb3JkIHdhcyBmcmVlZC4KQEAgLTI2OTksOSArMjY5OSw3IEBACiAJCQkJICAgbW9kLT5udW1fZnRyYWNlX2NhbGxzaXRlcyk7CiAJCWJyZWFrOwogCWNhc2UgTU9EVUxFX1NUQVRFX0dPSU5HOgotCQlmdHJhY2VfcmVsZWFzZShtb2QtPmZ0cmFjZV9jYWxsc2l0ZXMsCi0JCQkgICAgICAgbW9kLT5mdHJhY2VfY2FsbHNpdGVzICsKLQkJCSAgICAgICBtb2QtPm51bV9mdHJhY2VfY2FsbHNpdGVzKTsKKwkJZnRyYWNlX3JlbGVhc2VfbW9kKG1vZCk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jIGIva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCmluZGV4IDgxYjE2NDUuLmE5MWRhNjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKQEAgLTUwMSw3ICs1MDEsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoIXJlZ2lzdGVyX3RyYWNlcigma21lbV90cmFjZXIpKSB7CisJaWYgKHJlZ2lzdGVyX3RyYWNlcigma21lbV90cmFjZXIpICE9IDApIHsKIAkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIHRoZSBrbWVtIHRyYWNlclxuIik7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKaW5kZXggZDRmZjAxOS4uNWRkMDE3ZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTQ4Myw3ICs0ODMsNyBAQAogLyogVXAgdGhpcyBpZiB5b3Ugd2FudCB0byB0ZXN0IHRoZSBUSU1FX0VYVEVOVFMgYW5kIG5vcm1hbGl6YXRpb24gKi8KICNkZWZpbmUgREVCVUdfU0hJRlQgMAogCi1zdGF0aWMgaW5saW5lIHU2NCByYl90aW1lX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQorc3RhdGljIGlubGluZSB1NjQgcmJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKIHsKIAkvKiBzaGlmdCB0byBkZWJ1Zy90ZXN0IG5vcm1hbGl6YXRpb24gYW5kIFRJTUVfRVhURU5UUyAqLwogCXJldHVybiBidWZmZXItPmNsb2NrKCkgPDwgREVCVUdfU0hJRlQ7CkBAIC00OTQsNyArNDk0LDcgQEAKIAl1NjQgdGltZTsKIAogCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7Ci0JdGltZSA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyLCBjcHUpOworCXRpbWUgPSByYl90aW1lX3N0YW1wKGJ1ZmZlcik7CiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CiAKIAlyZXR1cm4gdGltZTsKQEAgLTU5OSw3ICs1OTksNyBAQAogfQogCiAvKgotICogcmJfaXNfaGVhZF9wYWdlIC0gdGVzdCBpZiB0aGUgZ2l2ZSBwYWdlIGlzIHRoZSBoZWFkIHBhZ2UKKyAqIHJiX2lzX2hlYWRfcGFnZSAtIHRlc3QgaWYgdGhlIGdpdmVuIHBhZ2UgaXMgdGhlIGhlYWQgcGFnZQogICoKICAqIEJlY2F1c2UgdGhlIHJlYWRlciBtYXkgbW92ZSB0aGUgaGVhZF9wYWdlIHBvaW50ZXIsIHdlIGNhbgogICogbm90IHRydXN0IHdoYXQgdGhlIGhlYWQgcGFnZSBpcyAoaXQgbWF5IGJlIHBvaW50aW5nIHRvCkBAIC0xMTkzLDYgKzExOTMsNyBAQAogCWF0b21pY19pbmMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CiAJc3luY2hyb25pemVfc2NoZWQoKTsKIAorCXNwaW5fbG9ja19pcnEoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrKTsKIAlyYl9oZWFkX3BhZ2VfZGVhY3RpdmF0ZShjcHVfYnVmZmVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CkBAIC0xMjA3LDYgKzEyMDgsNyBAQAogCQlyZXR1cm47CiAKIAlyYl9yZXNldF9jcHUoY3B1X2J1ZmZlcik7CisJc3Bpbl91bmxvY2tfaXJxKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jayk7CiAKIAlyYl9jaGVja19wYWdlcyhjcHVfYnVmZmVyKTsKIApAQCAtMTg2OCw3ICsxODcwLDcgQEAKIAkJICogTmVzdGVkIGNvbW1pdHMgYWx3YXlzIGhhdmUgemVybyBkZWx0YXMsIHNvCiAJCSAqIGp1c3QgcmVyZWFkIHRoZSB0aW1lIHN0YW1wCiAJCSAqLwotCQkqdHMgPSByYl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1X2J1ZmZlci0+Y3B1KTsKKwkJKnRzID0gcmJfdGltZV9zdGFtcChidWZmZXIpOwogCQluZXh0X3BhZ2UtPnBhZ2UtPnRpbWVfc3RhbXAgPSAqdHM7CiAJfQogCkBAIC0yMTExLDcgKzIxMTMsNyBAQAogCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsICsrbnJfbG9vcHMgPiAxMDAwKSkKIAkJZ290byBvdXRfZmFpbDsKIAotCXRzID0gcmJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5idWZmZXIsIGNwdV9idWZmZXItPmNwdSk7CisJdHMgPSByYl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmJ1ZmZlcik7CiAKIAkvKgogCSAqIE9ubHkgdGhlIGZpcnN0IGNvbW1pdCBjYW4gdXBkYXRlIHRoZSB0aW1lc3RhbXAuCkBAIC0yNjgxLDcgKzI2ODMsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllcyk7CiAKIC8qKgotICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKKyAqIHJpbmdfYnVmZmVyX292ZXJydW5zIC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyCiAgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKICAqCiAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gdGhlIHJpbmcgYnVmZmVyCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDQxMWFmMzcuLmIyMGQzZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAogCS8qIHJlYWQgdGhlIG5vbi1zcGFjZSBpbnB1dCAqLwogCXdoaWxlIChjbnQgJiYgIWlzc3BhY2UoY2gpKSB7Ci0JCWlmIChwYXJzZXItPmlkeCA8IHBhcnNlci0+c2l6ZSkKKwkJaWYgKHBhcnNlci0+aWR4IDwgcGFyc2VyLT5zaXplIC0gMSkKIAkJCXBhcnNlci0+YnVmZmVyW3BhcnNlci0+aWR4KytdID0gY2g7CiAJCWVsc2UgewogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzOTMsNyArMTM5Myw3IEBACiAKIGludCB0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCXJldHVybiB0cmFjZV9hcnJheV9wcmludGsoJmdsb2JhbF90cmFjZSwgaXAsIGZtdCwgYXJncyk7CisJcmV0dXJuIHRyYWNlX2FycmF5X3ZwcmludGsoJmdsb2JhbF90cmFjZSwgaXAsIGZtdCwgYXJncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV92cHJpbnRrKTsKIApAQCAtMjQ0MCw3ICsyNDQwLDcgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0yNTgyLDcgKzI1ODIsNyBAQAogCX0KIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0yNzY0LDcgKzI3NjQsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlmaWxwLT5mX3BvcyArPSByZXQ7CisJKnBwb3MgKz0gcmV0OwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMyOTksNyArMzI5OSw3IEBACiAJCX0KIAl9CiAKLQlmaWxwLT5mX3BvcyArPSBjbnQ7CisJKnBwb3MgKz0gY250OwogCiAJLyogSWYgY2hlY2sgcGFnZXMgZmFpbGVkLCByZXR1cm4gRU5PTUVNICovCiAJaWYgKHRyYWNpbmdfZGlzYWJsZWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKaW5kZXggN2E3YTlmZC4uNGExOTRmMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwpAQCAtMzQsNiArMzQsNyBAQAogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBicmFuY2hfdHJhY2VyOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRyYWNlX2JyYW5jaCAqZW50cnk7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1LCBwYzsKIAljb25zdCBjaGFyICpwOwpAQCAtNTQsNyArNTUsOCBAQAogCQlnb3RvIG91dDsKIAogCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQlJBTkNILAorCWJ1ZmZlciA9IHRyLT5idWZmZXI7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQlJBTkNILAogCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwpAQCAtNzQsOCArNzYsOCBAQAogCWVudHJ5LT5saW5lID0gZi0+bGluZTsKIAllbnRyeS0+Y29ycmVjdCA9IHZhbCA9PSBleHBlY3Q7CiAKLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCB0ci0+YnVmZmVyLCBldmVudCkpCi0JCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOworCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOwogCiAgb3V0OgogCWF0b21pY19kZWMoJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCmluZGV4IGRkNDRiODcuLjhkNWMxNzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwpAQCAtMzEsNyArMzEsNyBAQAogCWlmIChhdG9taWNfaW5jX3JldHVybigmZXZlbnQtPnByb2ZpbGVfY291bnQpKQogCQlyZXR1cm4gMDsKIAotCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCsrKSB7CisJaWYgKCF0b3RhbF9wcm9maWxlX2NvdW50KSB7CiAJCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOwogCQlpZiAoIWJ1ZikKIAkJCWdvdG8gZmFpbF9idWY7CkBAIC00NiwxNCArNDYsMTkgQEAKIAl9CiAKIAlyZXQgPSBldmVudC0+cHJvZmlsZV9lbmFibGUoKTsKLQlpZiAoIXJldCkKKwlpZiAoIXJldCkgeworCQl0b3RhbF9wcm9maWxlX2NvdW50Kys7CiAJCXJldHVybiAwOworCX0KIAotCWtmcmVlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CiBmYWlsX2J1Zl9ubWk6Ci0Ja2ZyZWUodHJhY2VfcHJvZmlsZV9idWYpOworCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCkgeworCQlmcmVlX3BlcmNwdSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCQlmcmVlX3BlcmNwdSh0cmFjZV9wcm9maWxlX2J1Zik7CisJCXRyYWNlX3Byb2ZpbGVfYnVmX25taSA9IE5VTEw7CisJCXRyYWNlX3Byb2ZpbGVfYnVmID0gTlVMTDsKKwl9CiBmYWlsX2J1ZjoKLQl0b3RhbF9wcm9maWxlX2NvdW50LS07CiAJYXRvbWljX2RlYygmZXZlbnQtPnByb2ZpbGVfY291bnQpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCA2ZjAzYzhhLi5kMTI4ZjY1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0yMzIsMTAgKzIzMiw5IEBACiAJCSAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdHJhY2VfcGFyc2VyIHBhcnNlcjsKLQlzaXplX3QgcmVhZCA9IDA7Ci0Jc3NpemVfdCByZXQ7CisJc3NpemVfdCByZWFkLCByZXQ7CiAKLQlpZiAoIWNudCB8fCBjbnQgPCAwKQorCWlmICghY250KQogCQlyZXR1cm4gMDsKIAogCXJldCA9IHRyYWNpbmdfdXBkYXRlX2J1ZmZlcnMoKTsKQEAgLTI0Nyw3ICsyNDYsNyBAQAogCiAJcmVhZCA9IHRyYWNlX2dldF91c2VyKCZwYXJzZXIsIHVidWYsIGNudCwgcHBvcyk7CiAKLQlpZiAodHJhY2VfcGFyc2VyX2xvYWRlZCgoJnBhcnNlcikpKSB7CisJaWYgKHJlYWQgPj0gMCAmJiB0cmFjZV9wYXJzZXJfbG9hZGVkKCgmcGFyc2VyKSkpIHsKIAkJaW50IHNldCA9IDE7CiAKIAkJaWYgKCpwYXJzZXIuYnVmZmVyID09ICchJykKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCmluZGV4IDIzMjQ1NzguLjk4YTZjYzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwpAQCAtOTMzLDggKzkzMyw5IEBACiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnBzLT5wb3N0Zml4KSkgewogCQllbHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwcy0+cG9zdGZpeCwgc3RydWN0IHBvc3RmaXhfZWx0LCBsaXN0KTsKLQkJa2ZyZWUoZWx0LT5vcGVyYW5kKTsKIAkJbGlzdF9kZWwoJmVsdC0+bGlzdCk7CisJCWtmcmVlKGVsdC0+b3BlcmFuZCk7CisJCWtmcmVlKGVsdCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCmluZGV4IDIzYjYzODUuLjY5NTQzYTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCkBAIC0xNjUsNiArMTY1LDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfaHdfYnJhbmNoOwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBod19icmFuY2hfdHJhY2U7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZjsKIAlzdHJ1Y3QgaHdfYnJhbmNoX2VudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIGlycTE7CiAJaW50IGNwdTsKQEAgLTE4MCw3ICsxODEsOCBAQAogCWlmIChhdG9taWNfaW5jX3JldHVybigmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpICE9IDEpCiAJCWdvdG8gb3V0OwogCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9IV19CUkFOQ0hFUywKKwlidWYgPSB0ci0+YnVmZmVyOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWYsIFRSQUNFX0hXX0JSQU5DSEVTLAogCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dDsKQEAgLTE4OSw4ICsxOTEsOCBAQAogCWVudHJ5LT5lbnQudHlwZSA9IFRSQUNFX0hXX0JSQU5DSEVTOwogCWVudHJ5LT5mcm9tID0gZnJvbTsKIAllbnRyeS0+dG8gICA9IHRvOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWYsIGV2ZW50KSkKKwkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmLCBldmVudCwgMCwgMCk7CiAKICBvdXQ6CiAJYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCmluZGV4IGY1NzJmNDQuLmI2YzEyYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKQEAgLTY5LDYgKzY5LDkgQEAKICAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCiAgKiBAZm10OiBwcmludGYgZm9ybWF0IHN0cmluZwogICoKKyAqIEl0IHJldHVybnMgMCBpZiB0aGUgdHJhY2Ugb3ZlcnNpemVzIHRoZSBidWZmZXIncyBmcmVlCisgKiBzcGFjZSwgMSBvdGhlcndpc2UuCisgKgogICogVGhlIHRyYWNlciBtYXkgdXNlIGVpdGhlciBzZXF1ZW5jZSBvcGVyYXRpb25zIG9yIGl0cyBvd24KICAqIGNvcHkgdG8gdXNlciByb3V0aW5lcy4gVG8gc2ltcGxpZnkgZm9ybWF0aW5nIG9mIGEgdHJhY2UKICAqIHRyYWNlX3NlcV9wcmludGYgaXMgdXNlZCB0byBzdG9yZSBzdHJpbmdzIGludG8gYSBzcGVjaWFsCkBAIC05NSw3ICs5OCw3IEBACiAKIAlzLT5sZW4gKz0gcmV0OwogCi0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3NlcV9wcmludGYpOwogCkBAIC00ODYsMTYgKzQ4OSwxOCBAQAogCQkJCWhhcmRpcnEgPyAnaCcgOiBzb2Z0aXJxID8gJ3MnIDogJy4nKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoZW50cnktPmxvY2tfZGVwdGggPCAwKQotCQlyZXQgPSB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXgiLCBlbnRyeS0+cHJlZW1wdF9jb3VudCk7CiAJZWxzZQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCIsIGVudHJ5LT5sb2NrX2RlcHRoKTsKKwkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKKwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIAotCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKLQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiV4IiwgZW50cnktPnByZWVtcHRfY291bnQpOwotCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCWlmIChlbnRyeS0+bG9ja19kZXB0aCA8IDApCisJCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiVkIiwgZW50cnktPmxvY2tfZGVwdGgpOwogfQogCiBzdGF0aWMgaW50CkBAIC04ODMsNyArODg4LDcgQEAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKIAogCWlmICghUykKLQkJdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKKwkJUyA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CiAJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7CiAJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlZCAlZCAlYyAlZCAlZCAlZCAlY1xuIiwKIAkJCSAgICAgIGZpZWxkLT5wcmV2X3BpZCwKQEAgLTkxOCw3ICs5MjMsNyBAQAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCiAJaWYgKCFTKQotCQl0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOworCQlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKIAlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKIAogCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9waWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA5ZmJjZTZjLi41MjdlMTdlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCiAJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iLAogCQkJICAgICAgIFNZU0NBTExfRklFTEQoaW50LCBuciksCi0JCQkgICAgICAgU1lTQ0FMTF9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXQpKTsKKwkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGxvbmcsIHJldCkpOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChjYWxsLCBTWVNDQUxMX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldCksIDAsCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsIFNZU0NBTExfRklFTEQobG9uZywgcmV0KSwgMCwKIAkJCQkgRklMVEVSX09USEVSKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci5jIGIva2VybmVsL3VzZXIuYwppbmRleCAyYzAwMGU3Li40NmQwMTY1IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci5jCisrKyBiL2tlcm5lbC91c2VyLmMKQEAgLTMzMCw5ICszMzAsOSBAQAogICovCiBzdGF0aWMgdm9pZCBmcmVlX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKIAlJTklUX0RFTEFZRURfV09SSygmdXAtPndvcmssIGNsZWFudXBfdXNlcl9zdHJ1Y3QpOwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdXAtPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwogfQogCiAjZWxzZQkvKiBDT05GSUdfVVNFUl9TQ0hFRCAmJiBDT05GSUdfU1lTRlMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCBhZGRmZTJkLi42N2U1MjZiIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC02NDAsNiArNjQwLDI0IEBACiBFWFBPUlRfU1lNQk9MKHNjaGVkdWxlX2RlbGF5ZWRfd29yayk7CiAKIC8qKgorICogZmx1c2hfZGVsYXllZF93b3JrIC0gYmxvY2sgdW50aWwgYSBkd29ya19zdHJ1Y3QncyBjYWxsYmFjayBoYXMgdGVybWluYXRlZAorICogQGR3b3JrOiB0aGUgZGVsYXllZCB3b3JrIHdoaWNoIGlzIHRvIGJlIGZsdXNoZWQKKyAqCisgKiBBbnkgdGltZW91dCBpcyBjYW5jZWxsZWQsIGFuZCBhbnkgcGVuZGluZyB3b3JrIGlzIHJ1biBpbW1lZGlhdGVseS4KKyAqLwordm9pZCBmbHVzaF9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmspCit7CisJaWYgKGRlbF90aW1lcl9zeW5jKCZkd29yay0+dGltZXIpKSB7CisJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxOworCQljd3EgPSB3cV9wZXJfY3B1KGtldmVudGRfd3EsIGdldF9jcHUoKSk7CisJCV9fcXVldWVfd29yayhjd3EsICZkd29yay0+d29yayk7CisJCXB1dF9jcHUoKTsKKwl9CisJZmx1c2hfd29yaygmZHdvcmstPndvcmspOworfQorRVhQT1JUX1NZTUJPTChmbHVzaF9kZWxheWVkX3dvcmspOworCisvKioKICAqIHNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbiAtIHF1ZXVlIHdvcmsgaW4gZ2xvYmFsIHdvcmtxdWV1ZSBvbiBDUFUgYWZ0ZXIgZGVsYXkKICAqIEBjcHU6IGNwdSB0byB1c2UKICAqIEBkd29yazogam9iIHRvIGJlIGRvbmUKQEAgLTY2Nyw2ICs2ODUsNyBAQAogaW50IHNjaGVkdWxlX29uX2VhY2hfY3B1KHdvcmtfZnVuY190IGZ1bmMpCiB7CiAJaW50IGNwdTsKKwlpbnQgb3JpZyA9IC0xOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya3M7CiAKIAl3b3JrcyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgd29ya19zdHJ1Y3QpOwpAQCAtNjc0LDE0ICs2OTMsMjggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlnZXRfb25saW5lX2NwdXMoKTsKKworCS8qCisJICogV2hlbiBydW5uaW5nIGluIGtldmVudGQgZG9uJ3Qgc2NoZWR1bGUgYSB3b3JrIGl0ZW0gb24KKwkgKiBpdHNlbGYuICBDYW4ganVzdCBjYWxsIGRpcmVjdGx5IGJlY2F1c2UgdGhlIHdvcmsgcXVldWUgaXMKKwkgKiBhbHJlYWR5IGJvdW5kLiAgVGhpcyBhbHNvIGlzIGZhc3Rlci4KKwkgKi8KKwlpZiAoY3VycmVudF9pc19rZXZlbnRkKCkpCisJCW9yaWcgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gcGVyX2NwdV9wdHIod29ya3MsIGNwdSk7CiAKIAkJSU5JVF9XT1JLKHdvcmssIGZ1bmMpOwotCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgd29yayk7CisJCWlmIChjcHUgIT0gb3JpZykKKwkJCXNjaGVkdWxlX3dvcmtfb24oY3B1LCB3b3JrKTsKIAl9CisJaWYgKG9yaWcgPj0gMCkKKwkJZnVuYyhwZXJfY3B1X3B0cih3b3Jrcywgb3JpZykpOworCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiAJCWZsdXNoX3dvcmsocGVyX2NwdV9wdHIod29ya3MsIGNwdSkpOworCiAJcHV0X29ubGluZV9jcHVzKCk7CiAJZnJlZV9wZXJjcHUod29ya3MpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCA4OTExNTU4Li4yMzRjZWIxIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMzQ2LDggKzM0Niw5IEBACiAKIGNvbmZpZyBERUJVR19LTUVNTEVBSwogCWJvb2wgIktlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvciIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBFWFBFUklNRU5UQUwgJiYgKFg4NiB8fCBBUk0gfHwgUFBDKSAmJiBcCi0JCSFNRU1PUllfSE9UUExVRworCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiAhTUVNT1JZX0hPVFBMVUcgJiYgXAorCQkoWDg2IHx8IEFSTSB8fCBQUEMgfHwgUzM5MCkKKwogCXNlbGVjdCBERUJVR19GUyBpZiBTWVNGUwogCXNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVAogCXNlbGVjdCBLQUxMU1lNUwpAQCAtMzcwLDcgKzM3MSw3IEBACiBjb25maWcgREVCVUdfS01FTUxFQUtfRUFSTFlfTE9HX1NJWkUKIAlpbnQgIk1heGltdW0ga21lbWxlYWsgZWFybHkgbG9nIGVudHJpZXMiCiAJZGVwZW5kcyBvbiBERUJVR19LTUVNTEVBSwotCXJhbmdlIDIwMCAyMDAwCisJcmFuZ2UgMjAwIDQwMDAwCiAJZGVmYXVsdCA0MDAKIAloZWxwCiAJICBLbWVtbGVhayBtdXN0IHRyYWNrIGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRpb25zIHRvIGF2b2lkCkBAIC0zOTEsNyArMzkyLDcgQEAKIAogY29uZmlnIERFQlVHX1BSRUVNUFQKIAlib29sICJEZWJ1ZyBwcmVlbXB0aWJsZSBrZXJuZWwiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgUFJFRU1QVCAmJiAoVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCB8fCBQUEM2NCkKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBQUkVFTVBUICYmIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGVuIHRoZSBrZXJuZWwgd2lsbCB1c2UgYSBkZWJ1ZyB2YXJpYW50IG9mIHRoZQpkaWZmIC0tZ2l0IGEvbGliL2RlYnVnb2JqZWN0cy5jIGIvbGliL2RlYnVnb2JqZWN0cy5jCmluZGV4IDI3NTVhM2IuLmVhZTU2ZmQgMTAwNjQ0Ci0tLSBhL2xpYi9kZWJ1Z29iamVjdHMuYworKysgYi9saWIvZGVidWdvYmplY3RzLmMKQEAgLTksNiArOSw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KZGlmZiAtLWdpdCBhL2xpYi9kbWEtZGVidWcuYyBiL2xpYi9kbWEtZGVidWcuYwppbmRleCA1OGE5ZjlmLi5jZTZiN2VhIDEwMDY0NAotLS0gYS9saWIvZG1hLWRlYnVnLmMKKysrIGIvbGliL2RtYS1kZWJ1Zy5jCkBAIC04MTksOSArODE5LDExIEBACiAJCWVycl9wcmludGsocmVmLT5kZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyAiCiAJCQkgICAiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBDUFUgYWRkcmVzcyAiCiAJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgotCQkJICAgIltjcHUgYWxsb2MgYWRkcmVzcz0lcF0gW2NwdSBmcmVlIGFkZHJlc3M9JXBdIiwKKwkJCSAgICJbY3B1IGFsbG9jIGFkZHJlc3M9MHglMDE2bGx4XSAiCisJCQkgICAiW2NwdSBmcmVlIGFkZHJlc3M9MHglMDE2bGx4XSIsCiAJCQkgICByZWYtPmRldl9hZGRyLCByZWYtPnNpemUsCi0JCQkgICAodm9pZCAqKWVudHJ5LT5wYWRkciwgKHZvaWQgKilyZWYtPnBhZGRyKTsKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpZW50cnktPnBhZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWYtPnBhZGRyKTsKIAl9CiAKIAlpZiAocmVmLT5zZ19jYWxsX2VudHMgJiYgcmVmLT50eXBlID09IGRtYV9kZWJ1Z19zZyAmJgpkaWZmIC0tZ2l0IGEvbGliL2ZhdWx0LWluamVjdC5jIGIvbGliL2ZhdWx0LWluamVjdC5jCmluZGV4IGY5N2FmNTViLi43ZTY1YWY3IDEwMDY0NAotLS0gYS9saWIvZmF1bHQtaW5qZWN0LmMKKysrIGIvbGliL2ZhdWx0LWluamVjdC5jCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9saWIvc3RyaW5nLmMgYi9saWIvc3RyaW5nLmMKaW5kZXggYjE5Yjg3YS4uZTk2NDIxYSAxMDA2NDQKLS0tIGEvbGliL3N0cmluZy5jCisrKyBiL2xpYi9zdHJpbmcuYwpAQCAtMjQ2LDEzICsyNDYsMTcgQEAKICN1bmRlZiBzdHJjbXAKIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KQogewotCXNpZ25lZCBjaGFyIF9fcmVzOworCXVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCiAJd2hpbGUgKDEpIHsKLQkJaWYgKChfX3JlcyA9ICpjcyAtICpjdCsrKSAhPSAwIHx8ICEqY3MrKykKKwkJYzEgPSAqY3MrKzsKKwkJYzIgPSAqY3QrKzsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIGMxIDwgYzIgPyAtMSA6IDE7CisJCWlmICghYzEpCiAJCQlicmVhazsKIAl9Ci0JcmV0dXJuIF9fcmVzOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzdHJjbXApOwogI2VuZGlmCkBAIC0yNjYsMTQgKzI3MCwxOCBAQAogICovCiBpbnQgc3RybmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QsIHNpemVfdCBjb3VudCkKIHsKLQlzaWduZWQgY2hhciBfX3JlcyA9IDA7CisJdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKIAl3aGlsZSAoY291bnQpIHsKLQkJaWYgKChfX3JlcyA9ICpjcyAtICpjdCsrKSAhPSAwIHx8ICEqY3MrKykKKwkJYzEgPSAqY3MrKzsKKwkJYzIgPSAqY3QrKzsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIGMxIDwgYzIgPyAtMSA6IDE7CisJCWlmICghYzEpCiAJCQlicmVhazsKIAkJY291bnQtLTsKIAl9Ci0JcmV0dXJuIF9fcmVzOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBiOTE4MzllLi4zM2JlZDVlIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtMTc3MSw3ICsxNzcxLDcgQEAKIAkJICogYWR2YW5jZSBib3RoIHN0cmluZ3MgdG8gbmV4dCB3aGl0ZSBzcGFjZQogCQkgKi8KIAkJaWYgKCpmbXQgPT0gJyonKSB7Ci0JCQl3aGlsZSAoIWlzc3BhY2UoKmZtdCkgJiYgKmZtdCkKKwkJCXdoaWxlICghaXNzcGFjZSgqZm10KSAmJiAqZm10ICE9ICclJyAmJiAqZm10KQogCQkJCWZtdCsrOwogCQkJd2hpbGUgKCFpc3NwYWNlKCpzdHIpICYmICpzdHIpCiAJCQkJc3RyKys7CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAyNDc3NjA3Li40NGNmNmYwIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTY3LDcgKzY3LDcgQEAKIAogY29uZmlnIFNQQVJTRU1FTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTV9NQU5VQUwKKwlkZXBlbmRzIG9uICghU0VMRUNUX01FTU9SWV9NT0RFTCAmJiBBUkNIX1NQQVJTRU1FTV9FTkFCTEUpIHx8IFNQQVJTRU1FTV9NQU5VQUwKIAogY29uZmlnIEZMQVRNRU0KIAlkZWZfYm9vbCB5CkBAIC0xMjgsMTEgKzEyOCw4IEBACiBjb25maWcgTUVNT1JZX0hPVFBMVUcKIAlib29sICJBbGxvdyBmb3IgbWVtb3J5IGhvdC1hZGQiCiAJZGVwZW5kcyBvbiBTUEFSU0VNRU0gfHwgWDg2XzY0X0FDUElfTlVNQQotCWRlcGVuZHMgb24gSE9UUExVRyAmJiAhKEhJQkVSTkFUSU9OICYmICFTMzkwKSAmJiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRwotCWRlcGVuZHMgb24gKElBNjQgfHwgWDg2IHx8IFBQQzY0IHx8IFNVUEVSSCB8fCBTMzkwKQotCi1jb21tZW50ICJNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZCIKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBIT1RQTFVHICYmIEhJQkVSTkFUSU9OICYmICFTMzkwCisJZGVwZW5kcyBvbiBIT1RQTFVHICYmIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHCisJZGVwZW5kcyBvbiAoSUE2NCB8fCBYODYgfHwgUFBDX0JPT0szU182NCB8fCBTVVBFUkggfHwgUzM5MCkKIAogY29uZmlnIE1FTU9SWV9IT1RQTFVHX1NQQVJTRQogCWRlZl9ib29sIHkKQEAgLTIyNCw3ICsyMjEsOSBAQAogCSAgdGhlIG1hbnkgaW5zdGFuY2VzIGJ5IGEgc2luZ2xlIHJlc2lkZW50IHBhZ2Ugd2l0aCB0aGF0IGNvbnRlbnQsIHNvCiAJICBzYXZpbmcgbWVtb3J5IHVudGlsIG9uZSBvciBhbm90aGVyIGFwcCBuZWVkcyB0byBtb2RpZnkgdGhlIGNvbnRlbnQuCiAJICBSZWNvbW1lbmRlZCBmb3IgdXNlIHdpdGggS1ZNLCBvciB3aXRoIG90aGVyIGR1cGxpY2F0aXZlIGFwcGxpY2F0aW9ucy4KLQkgIFNlZSBEb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJICBTZWUgRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGZvciBtb3JlIGluZm9ybWF0aW9uOiBLU00gaXMgaW5hY3RpdmUKKwkgIHVudGlsIGEgcHJvZ3JhbSBoYXMgbWFkdmlzZWQgdGhhdCBhbiBhcmVhIGlzIE1BRFZfTUVSR0VBQkxFLCBhbmQKKwkgIHJvb3QgaGFzIHNldCAvc3lzL2tlcm5lbC9tbS9rc20vcnVuIHRvIDEgKGlmIENPTkZJR19TWVNGUyBpcyBzZXQpLgogCiBjb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSCiAgICAgICAgIGludCAiTG93IGFkZHJlc3Mgc3BhY2UgdG8gcHJvdGVjdCBmcm9tIHVzZXIgYWxsb2NhdGlvbiIKQEAgLTI0NCwxMCArMjQzLDEyIEBACiAJICBUaGlzIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIGJvb3QgdXNpbmcgdGhlCiAJICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLgogCitjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRQorCWJvb2wKIAogY29uZmlnIE1FTU9SWV9GQUlMVVJFCiAJZGVwZW5kcyBvbiBNTVUKLQlkZXBlbmRzIG9uIFg4Nl9NQ0UKKwlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKIAlib29sICJFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzIgogCWhlbHAKIAkgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtcwpkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCA1MTVmZDc5Li5lYmY4NDkwIDEwMDY0NAotLS0gYS9tbS9NYWtlZmlsZQorKysgYi9tbS9NYWtlZmlsZQpAQCAtNSwxNCArNSwxNCBAQAogbW11LXkJCQk6PSBub21tdS5vCiBtbXUtJChDT05GSUdfTU1VKQk6PSBmcmVtYXAubyBoaWdobWVtLm8gbWFkdmlzZS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcCiAJCQkgICBtbG9jay5vIG1tYXAubyBtcHJvdGVjdC5vIG1yZW1hcC5vIG1zeW5jLm8gcm1hcC5vIFwKLQkJCSAgIHZtYWxsb2MubworCQkJICAgdm1hbGxvYy5vIHBhZ2V3YWxrLm8KIAogb2JqLXkJCQk6PSBib290bWVtLm8gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcCiAJCQkgICBtYWNjZXNzLm8gcGFnZV9hbGxvYy5vIHBhZ2Utd3JpdGViYWNrLm8gXAogCQkJICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2htZW0ubyBcCiAJCQkgICBwcmlvX3RyZWUubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcCiAJCQkgICBwYWdlX2lzb2xhdGlvbi5vIG1tX2luaXQubyBtbXVfY29udGV4dC5vIFwKLQkJCSAgIHBhZ2V3YWxrLm8gJChtbXUteSkKKwkJCSAgICQobW11LXkpCiBvYmoteSArPSBpbml0LW1tLm8KIAogb2JqLSQoQ09ORklHX0JPVU5DRSkJKz0gYm91bmNlLm8KZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IDNkM2FjY2IuLjExYWVlMDkgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKKysrIGIvbW0vYmFja2luZy1kZXYuYwpAQCAtOTIsNyArOTIsNyBAQAogCQkgICAiQmRpRGlydHlUaHJlc2g6ICAgJThsdSBrQlxuIgogCQkgICAiRGlydHlUaHJlc2g6ICAgICAgJThsdSBrQlxuIgogCQkgICAiQmFja2dyb3VuZFRocmVzaDogJThsdSBrQlxuIgotCQkgICAiV3JpdGVCYWNrIHRocmVhZHM6JThsdVxuIgorCQkgICAiV3JpdGViYWNrVGhyZWFkczogJThsdVxuIgogCQkgICAiYl9kaXJ0eTogICAgICAgICAgJThsdVxuIgogCQkgICAiYl9pbzogICAgICAgICAgICAgJThsdVxuIgogCQkgICAiYl9tb3JlX2lvOiAgICAgICAgJThsdVxuIgpAQCAtNjEwLDkgKzYxMCwyNiBAQAogCQlrdGhyZWFkX3N0b3Aod2ItPnRhc2spOwogfQogCisvKgorICogVGhpcyBiZGkgaXMgZ29pbmcgYXdheSBub3csIG1ha2Ugc3VyZSB0aGF0IG5vIHN1cGVyX2Jsb2NrcyBwb2ludCB0byBpdAorICovCitzdGF0aWMgdm9pZCBiZGlfcHJ1bmVfc2Ioc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCisJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiLCAmc3VwZXJfYmxvY2tzLCBzX2xpc3QpIHsKKwkJaWYgKHNiLT5zX2JkaSA9PSBiZGkpCisJCQlzYi0+c19iZGkgPSBOVUxMOworCX0KKwlzcGluX3VubG9jaygmc2JfbG9jayk7Cit9CisKIHZvaWQgYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKIHsKIAlpZiAoYmRpLT5kZXYpIHsKKwkJYmRpX3BydW5lX3NiKGJkaSk7CisKIAkJaWYgKCFiZGlfY2FwX2ZsdXNoX2ZvcmtlcihiZGkpKQogCQkJYmRpX3diX3NodXRkb3duKGJkaSk7CiAJCWJkaV9kZWJ1Z191bnJlZ2lzdGVyKGJkaSk7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmM4NGU1OS4uZWYxNjlmMyAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMTYxMSw3ICsxNjExLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmlsZW1hcF9mYXVsdCk7CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzID0geworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwX3hpcC5jIGIvbW0vZmlsZW1hcF94aXAuYwppbmRleCA0MjdkZmUzLi4xODg4YjJkIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwX3hpcC5jCisrKyBiL21tL2ZpbGVtYXBfeGlwLmMKQEAgLTI5Niw3ICsyOTYsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4aXBfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhpcF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJPSB4aXBfZmlsZV9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCAyNTg3OGNjLi45YzFlNjI3IDEwMDY0NAotLS0gYS9tbS9oaWdobWVtLmMKKysrIGIvbW0vaGlnaG1lbS5jCkBAIC00MjYsMTYgKzQyNiwyMSBAQAogCiB2b2lkIGRlYnVnX2ttYXBfYXRvbWljKGVudW0ga21fdHlwZSB0eXBlKQogewotCXN0YXRpYyB1bnNpZ25lZCB3YXJuX2NvdW50ID0gMTA7CisJc3RhdGljIGludCB3YXJuX2NvdW50ID0gMTA7CiAKLQlpZiAodW5saWtlbHkod2Fybl9jb3VudCA9PSAwKSkKKwlpZiAodW5saWtlbHkod2Fybl9jb3VudCA8IDApKQogCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoaW5faW50ZXJydXB0KCkpKSB7Ci0JCWlmIChpbl9pcnEoKSkgeworCQlpZiAoaW5fbm1pKCkpIHsKKwkJCWlmICh0eXBlICE9IEtNX05NSSAmJiB0eXBlICE9IEtNX05NSV9QVEUpIHsKKwkJCQlXQVJOX09OKDEpOworCQkJCXdhcm5fY291bnQtLTsKKwkJCX0KKwkJfSBlbHNlIGlmIChpbl9pcnEoKSkgewogCQkJaWYgKHR5cGUgIT0gS01fSVJRMCAmJiB0eXBlICE9IEtNX0lSUTEgJiYKIAkJCSAgICB0eXBlICE9IEtNX0JJT19TUkNfSVJRICYmIHR5cGUgIT0gS01fQklPX0RTVF9JUlEgJiYKLQkJCSAgICB0eXBlICE9IEtNX0JPVU5DRV9SRUFEKSB7CisJCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCAmJiB0eXBlICE9IEtNX0lSUV9QVEUpIHsKIAkJCQlXQVJOX09OKDEpOwogCQkJCXdhcm5fY291bnQtLTsKIAkJCX0KQEAgLTQ1Miw3ICs0NTcsOSBAQAogCX0KIAogCWlmICh0eXBlID09IEtNX0lSUTAgfHwgdHlwZSA9PSBLTV9JUlExIHx8IHR5cGUgPT0gS01fQk9VTkNFX1JFQUQgfHwKLQkJCXR5cGUgPT0gS01fQklPX1NSQ19JUlEgfHwgdHlwZSA9PSBLTV9CSU9fRFNUX0lSUSkgeworCQkJdHlwZSA9PSBLTV9CSU9fU1JDX0lSUSB8fCB0eXBlID09IEtNX0JJT19EU1RfSVJRIHx8CisJCQl0eXBlID09IEtNX0lSUV9QVEUgfHwgdHlwZSA9PSBLTV9OTUkgfHwKKwkJCXR5cGUgPT0gS01fTk1JX1BURSApIHsKIAkJaWYgKCFpcnFzX2Rpc2FibGVkKCkpIHsKIAkJCVdBUk5fT04oMSk7CiAJCQl3YXJuX2NvdW50LS07CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNmYwNDhmYy4uNWQ3NjAxYiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMTcyMSw3ICsxNzIxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGh1Z2V0bGJfdm1fb3BzID0geworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGh1Z2V0bGJfdm1fb3BzID0gewogCS5mYXVsdCA9IGh1Z2V0bGJfdm1fb3BfZmF1bHQsCiAJLm9wZW4gPSBodWdldGxiX3ZtX29wX29wZW4sCiAJLmNsb3NlID0gaHVnZXRsYl92bV9vcF9jbG9zZSwKZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jCmluZGV4IDRlYTQ1MTAuLjhiZjc2NWMgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKKysrIGIvbW0va21lbWxlYWsuYwpAQCAtODMzLDEyICs4MzMsMTUgQEAKIAkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJb2JqZWN0ID0gY3JlYXRlX29iamVjdCgodW5zaWduZWQgbG9uZylsb2ctPnB0ciwgbG9nLT5zaXplLAotCQkJICAgICAgIGxvZy0+bWluX2NvdW50LCBHRlBfS0VSTkVMKTsKKwkJCSAgICAgICBsb2ctPm1pbl9jb3VudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFvYmplY3QpCisJCWdvdG8gb3V0OwogCXNwaW5fbG9ja19pcnFzYXZlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbG9nLT50cmFjZV9sZW47IGkrKykKIAkJb2JqZWN0LT50cmFjZVtpXSA9IGxvZy0+dHJhY2VbaV07CiAJb2JqZWN0LT50cmFjZV9sZW4gPSBsb2ctPnRyYWNlX2xlbjsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKK291dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uYwppbmRleCBmN2VkYWMzLi41NTc1Zjg2IDEwMDY0NAotLS0gYS9tbS9rc20uYworKysgYi9tbS9rc20uYwpAQCAtMTg0LDExICsxODQsNiBAQAogCQlzaXplb2Yoc3RydWN0IF9fc3RydWN0KSwgX19hbGlnbm9mX18oc3RydWN0IF9fc3RydWN0KSxcCiAJCShfX2ZsYWdzKSwgTlVMTCkKIAotc3RhdGljIHZvaWQgX19pbml0IGtzbV9pbml0X21heF9rZXJuZWxfcGFnZXModm9pZCkKLXsKLQlrc21fbWF4X2tlcm5lbF9wYWdlcyA9IG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCkgLyA0OwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBrc21fc2xhYl9pbml0KHZvaWQpCiB7CiAJcm1hcF9pdGVtX2NhY2hlID0gS1NNX0tNRU1fQ0FDSEUocm1hcF9pdGVtLCAwKTsKQEAgLTEwMTcsNiArMTAxMiw3IEBACiAJCXN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtOwogCQlpbnQgcmV0OwogCisJCWNvbmRfcmVzY2hlZCgpOwogCQl0cmVlX3JtYXBfaXRlbSA9IHJiX2VudHJ5KCpuZXcsIHN0cnVjdCBybWFwX2l0ZW0sIG5vZGUpOwogCQlwYWdlMlswXSA9IGdldF9tZXJnZWFibGVfcGFnZSh0cmVlX3JtYXBfaXRlbSk7CiAJCWlmICghcGFnZTJbMF0pCkBAIC0xNjczLDcgKzE2NjksNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqa3NtX3RocmVhZDsKIAlpbnQgZXJyOwogCi0Ja3NtX2luaXRfbWF4X2tlcm5lbF9wYWdlcygpOworCWtzbV9tYXhfa2VybmVsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMgLyA0OwogCiAJZXJyID0ga3NtX3NsYWJfaW5pdCgpOwogCWlmIChlcnIpCkBAIC0xNjk3LDYgKzE2OTMsOSBAQAogCQlrdGhyZWFkX3N0b3Aoa3NtX3RocmVhZCk7CiAJCWdvdG8gb3V0X2ZyZWUyOwogCX0KKyNlbHNlCisJa3NtX3J1biA9IEtTTV9SVU5fTUVSR0U7CS8qIG5vIHdheSBmb3IgdXNlciB0byBzdGFydCBpdCAqLworCiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBlMmI5OGE2Li5mOTlmNTk5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC0zMTMsNyArMzEzLDggQEAKIHN0YXRpYyB2b2lkCiBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAotCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCisJCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eiwKKwkJCQl1bnNpZ25lZCBsb25nIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2VzcykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmbWN0ei0+cmJfcm9vdC5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwpAQCAtMzIyLDcgKzMyMyw5IEBACiAJaWYgKG16LT5vbl90cmVlKQogCQlyZXR1cm47CiAKLQltei0+dXNhZ2VfaW5fZXhjZXNzID0gcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm1lbS0+cmVzKTsKKwltei0+dXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2VzczsKKwlpZiAoIW16LT51c2FnZV9pbl9leGNlc3MpCisJCXJldHVybjsKIAl3aGlsZSAoKnApIHsKIAkJcGFyZW50ID0gKnA7CiAJCW16X25vZGUgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lLApAQCAtMzUzLDE2ICszNTYsNiBAQAogfQogCiBzdGF0aWMgdm9pZAotbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCi0JCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eikKLXsKLQlzcGluX2xvY2soJm1jdHotPmxvY2spOwotCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobWVtLCBteiwgbWN0eik7Ci0Jc3Bpbl91bmxvY2soJm1jdHotPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZAogbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eikKQEAgLTM5MiwzNCArMzg1LDM2IEBACiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHByZXZfdXNhZ2VfaW5fZXhjZXNzLCBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCWJvb2wgdXBkYXRlZF90cmVlID0gZmFsc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VzczsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0ejsKLQotCW16ID0gbWVtX2Nncm91cF96b25laW5mbyhtZW0sIHBhZ2VfdG9fbmlkKHBhZ2UpLCBwYWdlX3pvbmVudW0ocGFnZSkpOworCWludCBuaWQgPSBwYWdlX3RvX25pZChwYWdlKTsKKwlpbnQgemlkID0gcGFnZV96b25lbnVtKHBhZ2UpOwogCW1jdHogPSBzb2Z0X2xpbWl0X3RyZWVfZnJvbV9wYWdlKHBhZ2UpOwogCiAJLyoKLQkgKiBXZSBkbyB1cGRhdGVzIGluIGxhenkgbW9kZSwgbWVtJ3MgYXJlIHJlbW92ZWQKLQkgKiBsYXppbHkgZnJvbSB0aGUgcGVyLXpvbmUsIHBlci1ub2RlIHJiIHRyZWUKKwkgKiBOZWNlc3NhcnkgdG8gdXBkYXRlIGFsbCBhbmNlc3RvcnMgd2hlbiBoaWVyYXJjaHkgaXMgdXNlZC4KKwkgKiBiZWNhdXNlIHRoZWlyIGV2ZW50IGNvdW50ZXIgaXMgbm90IHRvdWNoZWQuCiAJICovCi0JcHJldl91c2FnZV9pbl9leGNlc3MgPSBtei0+dXNhZ2VfaW5fZXhjZXNzOwotCi0JbmV3X3VzYWdlX2luX2V4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtZW0tPnJlcyk7Ci0JaWYgKHByZXZfdXNhZ2VfaW5fZXhjZXNzKSB7Ci0JCW1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG1lbSwgbXosIG1jdHopOwotCQl1cGRhdGVkX3RyZWUgPSB0cnVlOwotCX0KLQlpZiAoIW5ld191c2FnZV9pbl9leGNlc3MpCi0JCWdvdG8gZG9uZTsKLQltZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChtZW0sIG16LCBtY3R6KTsKLQotZG9uZToKLQlpZiAodXBkYXRlZF90cmVlKSB7Ci0JCXNwaW5fbG9jaygmbWN0ei0+bG9jayk7Ci0JCW16LT51c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCQlzcGluX3VubG9jaygmbWN0ei0+bG9jayk7CisJZm9yICg7IG1lbTsgbWVtID0gcGFyZW50X21lbV9jZ3JvdXAobWVtKSkgeworCQlteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBuaWQsIHppZCk7CisJCWV4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtZW0tPnJlcyk7CisJCS8qCisJCSAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3IKKwkJICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC4KKwkJICovCisJCWlmIChleGNlc3MgfHwgbXotPm9uX3RyZWUpIHsKKwkJCXNwaW5fbG9jaygmbWN0ei0+bG9jayk7CisJCQkvKiBpZiBvbi10cmVlLCByZW1vdmUgaXQgKi8KKwkJCWlmIChtei0+b25fdHJlZSkKKwkJCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG1lbSwgbXosIG1jdHopOworCQkJLyoKKwkJCSAqIEluc2VydCBhZ2Fpbi4gbXotPnVzYWdlX2luX2V4Y2VzcyB3aWxsIGJlIHVwZGF0ZWQuCisJCQkgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuCisJCQkgKi8KKwkJCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobWVtLCBteiwgbWN0eiwgZXhjZXNzKTsKKwkJCXNwaW5fdW5sb2NrKCZtY3R6LT5sb2NrKTsKKwkJfQogCX0KIH0KIApAQCAtNDQ3LDkgKzQ0MiwxMCBAQAogX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCiB7CiAJc3RydWN0IHJiX25vZGUgKnJpZ2h0bW9zdCA9IE5VTEw7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16ID0gTlVMTDsKKwlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CiAKIHJldHJ5OgorCW16ID0gTlVMTDsKIAlyaWdodG1vc3QgPSByYl9sYXN0KCZtY3R6LT5yYl9yb290KTsKIAlpZiAoIXJpZ2h0bW9zdCkKIAkJZ290byBkb25lOwkJLyogTm90aGluZyB0byByZWNsYWltIGZyb20gKi8KQEAgLTEyNzAsOSArMTI2Niw5IEBACiAJCQlnZnBfdCBnZnBfbWFzaywgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywKIAkJCWJvb2wgb29tLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqbWVtX292ZXJfbGltaXQsICptZW1fb3Zlcl9zb2Z0X2xpbWl0OworCXN0cnVjdCBtZW1fY2dyb3VwICptZW0sICptZW1fb3Zlcl9saW1pdDsKIAlpbnQgbnJfcmV0cmllcyA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOwotCXN0cnVjdCByZXNfY291bnRlciAqZmFpbF9yZXMsICpzb2Z0X2ZhaWxfcmVzID0gTlVMTDsKKwlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOwogCiAJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpKSB7CiAJCS8qIERvbid0IGFjY291bnQgdGhpcyEgKi8KQEAgLTEzMDQsMTcgKzEzMDAsMTYgQEAKIAogCQlpZiAobWVtX2Nncm91cF9pc19yb290KG1lbSkpCiAJCQlnb3RvIGRvbmU7Ci0JCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSwgJmZhaWxfcmVzLAotCQkJCQkJJnNvZnRfZmFpbF9yZXMpOworCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsICZmYWlsX3Jlcyk7CiAJCWlmIChsaWtlbHkoIXJldCkpIHsKIAkJCWlmICghZG9fc3dhcF9hY2NvdW50KQogCQkJCWJyZWFrOwogCQkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUsCi0JCQkJCQkJJmZhaWxfcmVzLCBOVUxMKTsKKwkJCQkJCQkmZmFpbF9yZXMpOwogCQkJaWYgKGxpa2VseSghcmV0KSkKIAkJCQlicmVhazsKIAkJCS8qIG1lbStzd2FwIGNvdW50ZXIgZmFpbHMgKi8KLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJCWZsYWdzIHw9IE1FTV9DR1JPVVBfUkVDTEFJTV9OT1NXQVA7CiAJCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywKIAkJCQkJCQkJCW1lbXN3KTsKQEAgLTEzNTMsMTYgKzEzNDgsMTEgQEAKIAkJfQogCX0KIAkvKgotCSAqIEluc2VydCBqdXN0IHRoZSBhbmNlc3Rvciwgd2Ugc2hvdWxkIHRyaWNrbGUgZG93biB0byB0aGUgY29ycmVjdAotCSAqIGNncm91cCBmb3IgcmVjbGFpbSwgc2luY2UgdGhlIG90aGVyIG5vZGVzIHdpbGwgYmUgYmVsb3cgdGhlaXIKLQkgKiBzb2Z0IGxpbWl0CisJICogSW5zZXJ0IGFuY2VzdG9yIChhbmQgYW5jZXN0b3IncyBhbmNlc3RvcnMpLCB0byBzb2Z0bGltaXQgUkItdHJlZS4KKwkgKiBpZiB0aGV5IGV4Y2VlZHMgc29mdGxpbWl0LgogCSAqLwotCWlmIChzb2Z0X2ZhaWxfcmVzKSB7Ci0JCW1lbV9vdmVyX3NvZnRfbGltaXQgPQotCQkJbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKHNvZnRfZmFpbF9yZXMsIHJlcyk7Ci0JCWlmIChtZW1fY2dyb3VwX3NvZnRfbGltaXRfY2hlY2sobWVtX292ZXJfc29mdF9saW1pdCkpCi0JCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbV9vdmVyX3NvZnRfbGltaXQsIHBhZ2UpOwotCX0KKwlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCisJCW1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUobWVtLCBwYWdlKTsKIGRvbmU6CiAJcmV0dXJuIDA7CiBub21lbToKQEAgLTE0MzcsMTAgKzE0MjcsOSBAQAogCWlmICh1bmxpa2VseShQYWdlQ2dyb3VwVXNlZChwYykpKSB7CiAJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJCWlmIChkb19zd2FwX2FjY291bnQpCi0JCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSwKLQkJCQkJCQlOVUxMKTsKKwkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKIAkJfQogCQljc3NfcHV0KCZtZW0tPmNzcyk7CiAJCXJldHVybjsKQEAgLTE1MTksNyArMTUwOCw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QoZnJvbSkpCi0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5yZXMsIFBBR0VfU0laRSk7CiAJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhmcm9tLCBwYywgZmFsc2UpOwogCiAJcGFnZSA9IHBjLT5wYWdlOwpAQCAtMTUzOSw3ICsxNTI4LDcgQEAKIAl9CiAKIAlpZiAoZG9fc3dhcF9hY2NvdW50ICYmICFtZW1fY2dyb3VwX2lzX3Jvb3QoZnJvbSkpCi0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5tZW1zdywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJmZyb20tPm1lbXN3LCBQQUdFX1NJWkUpOwogCWNzc19wdXQoJmZyb20tPmNzcyk7CiAKIAljc3NfZ2V0KCZ0by0+Y3NzKTsKQEAgLTE2MTAsOSArMTU5OSw5IEBACiAJY3NzX3B1dCgmcGFyZW50LT5jc3MpOwogCS8qIHVuY2hhcmdlIGlmIG1vdmUgZmFpbHMgKi8KIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChwYXJlbnQpKSB7Ci0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZwYXJlbnQtPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+cmVzLCBQQUdFX1NJWkUpOwogCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmcGFyZW50LT5tZW1zdywgUEFHRV9TSVpFKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MDMsOCArMTc5Miw3IEBACiAJCQkgKiBjYWxsaW5nIGNzc190cnlnZXQKIAkJCSAqLwogCQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQotCQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIFBBR0VfU0laRSwKLQkJCQkJCQlOVUxMKTsKKwkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtY2csIGZhbHNlKTsKIAkJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAkJfQpAQCAtMTgzMSw5ICsxODE5LDkgQEAKIAlpZiAoIW1lbSkKIAkJcmV0dXJuOwogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsIE5VTEwpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCWlmIChkb19zd2FwX2FjY291bnQpCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUpOwogCX0KIAljc3NfcHV0KCZtZW0tPmNzcyk7CiB9CkBAIC0xODQ4LDcgKzE4MzYsNiBAQAogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwotCWJvb2wgc29mdF9saW1pdF9leGNlc3MgPSBmYWxzZTsKIAogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMTg4OCwxMCArMTg3NSwxMCBAQAogCX0KIAogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsICZzb2Z0X2xpbWl0X2V4Y2Vzcyk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJaWYgKGRvX3N3YXBfYWNjb3VudCAmJgogCQkJCShjdHlwZSAhPSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NXQVBPVVQpKQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKIAl9CiAJaWYgKGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkKIAkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtLCB0cnVlKTsKQEAgLTE5MDgsNyArMTg5NSw3IEBACiAJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CiAJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAotCWlmIChzb2Z0X2xpbWl0X2V4Y2VzcyAmJiBtZW1fY2dyb3VwX3NvZnRfbGltaXRfY2hlY2sobWVtKSkKKwlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCiAJCW1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUobWVtLCBwYWdlKTsKIAkvKiBhdCBzd2Fwb3V0LCB0aGlzIG1lbWNnIHdpbGwgYmUgYWNjZXNzZWQgdG8gcmVjb3JkIHRvIHN3YXAgKi8KIAlpZiAoY3R5cGUgIT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKQpAQCAtMTk4Niw3ICsxOTczLDcgQEAKIAkJICogVGhpcyBtZW1jZyBjYW4gYmUgb2Jzb2xldGUgb25lLiBXZSBhdm9pZCBjYWxsaW5nIGNzc190cnlnZXQKIAkJICovCiAJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyhtZW1jZywgZmFsc2UpOwogCQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJfQpAQCAtMjIzMyw2ICsyMjIwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDsKIAlpbnQgbG9vcCA9IDA7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0ejsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXhjZXNzOwogCiAJaWYgKG9yZGVyID4gMCkKIAkJcmV0dXJuIDA7CkBAIC0yMjg0LDkgKzIyNzIsOCBAQAogCQkJCQlicmVhazsKIAkJCX0gd2hpbGUgKDEpOwogCQl9Ci0JCW16LT51c2FnZV9pbl9leGNlc3MgPQotCQkJcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm16LT5tZW0tPnJlcyk7CiAJCV9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXotPm1lbSwgbXosIG1jdHopOworCQlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbXotPm1lbS0+cmVzKTsKIAkJLyoKIAkJICogT25lIHNjaG9vbCBvZiB0aG91Z2h0IHNheXMgdGhhdCB3ZSBzaG91bGQgbm90IGFkZAogCQkgKiBiYWNrIHRoZSBub2RlIHRvIHRoZSB0cmVlIGlmIHJlY2xhaW0gcmV0dXJucyAwLgpAQCAtMjI5NSw4ICsyMjgyLDggQEAKIAkJICogbWVtb3J5IHRvIHJlY2xhaW0gZnJvbS4gQ29uc2lkZXIgdGhpcyBhcyBhIGxvbmdlcgogCQkgKiB0ZXJtIFRPRE8uCiAJCSAqLwotCQlpZiAobXotPnVzYWdlX2luX2V4Y2VzcykKLQkJCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXotPm1lbSwgbXosIG1jdHopOworCQkvKiBJZiBleGNlc3MgPT0gMCwgbm8gdHJlZSBvcHMgKi8KKwkJX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChtei0+bWVtLCBteiwgbWN0eiwgZXhjZXNzKTsKIAkJc3Bpbl91bmxvY2soJm1jdHotPmxvY2spOwogCQljc3NfcHV0KCZtei0+bWVtLT5jc3MpOwogCQlsb29wKys7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA3MjlkNGIxLi5kYWNjNjQxIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgpAQCAtMzcwLDkgKzM3MSw2IEBACiAJaW50IHJldCA9IEZBSUxFRDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAotCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCiAJLyoKIAkgKiBGb3IgYW5vbnltb3VzIHBhZ2VzIHdlJ3JlIGRvbmUgdGhlIG9ubHkgcmVmZXJlbmNlIGxlZnQKIAkgKiBzaG91bGQgYmUgdGhlIG9uZSBtX2YoKSBob2xkcy4KQEAgLTQ5OCwzMCArNDk2LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCiAJQ2xlYXJQYWdlRGlydHkocCk7CiAJLyogVHJpZ2dlciBFSU8gaW4gc2htZW06ICovCiAJQ2xlYXJQYWdlVXB0b2RhdGUocCk7CiAKLQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCQlyZXQgPSBERUxBWUVEOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIERFTEFZRUQ7CiB9CiAKIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCi0JaWYgKCFpc29sYXRlX2xydV9wYWdlKHApKSB7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKLQkJcmV0ID0gUkVDT1ZFUkVEOwotCX0KIAlkZWxldGVfZnJvbV9zd2FwX2NhY2hlKHApOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gUkVDT1ZFUkVEOwogfQogCiAvKgpAQCAtNjExLDggKzU5Nyw2IEBACiAJeyAwLAkJMCwJCSJ1bmtub3duIHBhZ2Ugc3RhdGUiLAltZV91bmtub3duIH0sCiB9OwogCi0jdW5kZWYgbHJ1Ci0KIHN0YXRpYyB2b2lkIGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGNoYXIgKm1zZywgaW50IHJlc3VsdCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CkBAIC02MjksMTMgKzYxMywxNiBAQAogCQkJdW5zaWduZWQgbG9uZyBwZm4sIGludCByZWYpCiB7CiAJaW50IHJlc3VsdDsKKwlpbnQgY291bnQ7CiAKIAlyZXN1bHQgPSBwcy0+YWN0aW9uKHAsIHBmbik7CiAJYWN0aW9uX3Jlc3VsdChwZm4sIHBzLT5tc2csIHJlc3VsdCk7Ci0JaWYgKHBhZ2VfY291bnQocCkgIT0gMSArIHJlZikKKworCWNvdW50ID0gcGFnZV9jb3VudChwKSAtIDEgLSByZWY7CisJaWYgKGNvdW50ICE9IDApCiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIk1DRSAlI2x4OiAlcyBwYWdlIHN0aWxsIHJlZmVyZW5jZWQgYnkgJWQgdXNlcnNcbiIsCi0JCSAgICAgICBwZm4sIHBzLT5tc2csIHBhZ2VfY291bnQocCkgLSAxKTsKKwkJICAgICAgIHBmbiwgcHMtPm1zZywgY291bnQpOwogCiAJLyogQ291bGQgZG8gbW9yZSBjaGVja3MgaGVyZSBpZiBwYWdlIGxvb2tzIG9rICovCiAJLyoKQEAgLTY2MSwxMiArNjQ4LDkgQEAKIAlpbnQgaTsKIAlpbnQga2lsbCA9IDE7CiAKLQlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VDb21wb3VuZChwKSB8fCBQYWdlU2xhYihwKSkKKwlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VDb21wb3VuZChwKSB8fCBQYWdlU2xhYihwKSB8fCBQYWdlS3NtKHApKQogCQlyZXR1cm47CiAKLQlpZiAoIVBhZ2VMUlUocCkpCi0JCWxydV9hZGRfZHJhaW5fYWxsKCk7Ci0KIAkvKgogCSAqIFRoaXMgY2hlY2sgaW1wbGllcyB3ZSBkb24ndCBraWxsIHByb2Nlc3NlcyBpZiB0aGVpciBwYWdlcwogCSAqIGFyZSBpbiB0aGUgc3dhcCBjYWNoZSBlYXJseS4gVGhvc2UgYXJlIGFsd2F5cyBsYXRlIGtpbGxzLgpAQCAtNzM4LDYgKzcyMiw3IEBACiAKIGludCBfX21lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgdHJhcG5vLCBpbnQgcmVmKQogeworCXVuc2lnbmVkIGxvbmcgbHJ1X2ZsYWc7CiAJc3RydWN0IHBhZ2Vfc3RhdGUgKnBzOwogCXN0cnVjdCBwYWdlICpwOwogCWludCByZXM7CkBAIC03NzUsNiArNzYwLDI0IEBACiAJfQogCiAJLyoKKwkgKiBXZSBpZ25vcmUgbm9uLUxSVSBwYWdlcyBmb3IgZ29vZCByZWFzb25zLgorCSAqIC0gUEdfbG9ja2VkIGlzIG9ubHkgd2VsbCBkZWZpbmVkIGZvciBMUlUgcGFnZXMgYW5kIGEgZmV3IG90aGVycworCSAqIC0gdG8gYXZvaWQgcmFjZXMgd2l0aCBfX3NldF9wYWdlX2xvY2tlZCgpCisJICogLSB0byBhdm9pZCByYWNlcyB3aXRoIF9fU2V0UGFnZVNsYWIqKCkgKGFuZCBtb3JlIG5vbi1hdG9taWMgb3BzKQorCSAqIFRoZSBjaGVjayAodW5uZWNlc3NhcmlseSkgaWdub3JlcyBMUlUgcGFnZXMgYmVpbmcgaXNvbGF0ZWQgYW5kCisJICogd2Fsa2VkIGJ5IHRoZSBwYWdlIHJlY2xhaW0gY29kZSwgaG93ZXZlciB0aGF0J3Mgbm90IGEgYmlnIGxvc3MuCisJICovCisJaWYgKCFQYWdlTFJVKHApKQorCQlscnVfYWRkX2RyYWluX2FsbCgpOworCWxydV9mbGFnID0gcC0+ZmxhZ3MgJiBscnU7CisJaWYgKGlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKKwkJYWN0aW9uX3Jlc3VsdChwZm4sICJub24gTFJVIiwgSUdOT1JFRCk7CisJCXB1dF9wYWdlKHApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlwYWdlX2NhY2hlX3JlbGVhc2UocCk7CisKKwkvKgogCSAqIExvY2sgdGhlIHBhZ2UgYW5kIHdhaXQgZm9yIHdyaXRlYmFjayB0byBmaW5pc2guCiAJICogSXQncyB2ZXJ5IGRpZmZpY3VsdCB0byBtZXNzIHdpdGggcGFnZXMgY3VycmVudGx5IHVuZGVyIElPCiAJICogYW5kIGluIG1hbnkgY2FzZXMgaW1wb3NzaWJsZSwgc28gd2UganVzdCBhdm9pZCBpdCBoZXJlLgpAQCAtNzkwLDcgKzc5Myw3IEBACiAJLyoKIAkgKiBUb3JuIGRvd24gYnkgc29tZW9uZSBlbHNlPwogCSAqLwotCWlmIChQYWdlTFJVKHApICYmICFQYWdlU3dhcENhY2hlKHApICYmIHAtPm1hcHBpbmcgPT0gTlVMTCkgeworCWlmICgobHJ1X2ZsYWcgJiBscnUpICYmICFQYWdlU3dhcENhY2hlKHApICYmIHAtPm1hcHBpbmcgPT0gTlVMTCkgewogCQlhY3Rpb25fcmVzdWx0KHBmbiwgImFscmVhZHkgdHJ1bmNhdGVkIExSVSIsIElHTk9SRUQpOwogCQlyZXMgPSAwOwogCQlnb3RvIG91dDsKQEAgLTc5OCw3ICs4MDEsNyBAQAogCiAJcmVzID0gLUVCVVNZOwogCWZvciAocHMgPSBlcnJvcl9zdGF0ZXM7OyBwcysrKSB7Ci0JCWlmICgocC0+ZmxhZ3MgJiBwcy0+bWFzaykgPT0gcHMtPnJlcykgeworCQlpZiAoKChwLT5mbGFncyB8IGxydV9mbGFnKSYgcHMtPm1hc2spID09IHBzLT5yZXMpIHsKIAkJCXJlcyA9IHBhZ2VfYWN0aW9uKHBzLCBwLCBwZm4sIHJlZik7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA3ZTkxYjVmLi42YWIxOWRkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtNjQxLDYgKzY0MSw3IEBACiAJCXBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CisJcHRlX3QgKm9yaWdfc3JjX3B0ZSwgKm9yaWdfZHN0X3B0ZTsKIAlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGU7CiAJc3BpbmxvY2tfdCAqc3JjX3B0bCwgKmRzdF9wdGw7CiAJaW50IHByb2dyZXNzID0gMDsKQEAgLTY1NCw2ICs2NTUsOCBAQAogCXNyY19wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoc3JjX3BtZCwgYWRkcik7CiAJc3JjX3B0bCA9IHB0ZV9sb2NrcHRyKHNyY19tbSwgc3JjX3BtZCk7CiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJb3JpZ19zcmNfcHRlID0gc3JjX3B0ZTsKKwlvcmlnX2RzdF9wdGUgPSBkc3RfcHRlOwogCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwogCiAJZG8gewpAQCAtNjc3LDkgKzY4MCw5IEBACiAKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAlzcGluX3VubG9jayhzcmNfcHRsKTsKLQlwdGVfdW5tYXBfbmVzdGVkKHNyY19wdGUgLSAxKTsKKwlwdGVfdW5tYXBfbmVzdGVkKG9yaWdfc3JjX3B0ZSk7CiAJYWRkX21tX3Jzcyhkc3RfbW0sIHJzc1swXSwgcnNzWzFdKTsKLQlwdGVfdW5tYXBfdW5sb2NrKGRzdF9wdGUgLSAxLCBkc3RfcHRsKTsKKwlwdGVfdW5tYXBfdW5sb2NrKG9yaWdfZHN0X3B0ZSwgZHN0X3B0bCk7CiAJY29uZF9yZXNjaGVkKCk7CiAJaWYgKGFkZHIgIT0gZW5kKQogCQlnb3RvIGFnYWluOwpAQCAtMTgyMCwxMCArMTgyMywxMCBAQAogCXRva2VuID0gcG1kX3BndGFibGUoKnBtZCk7CiAKIAlkbyB7Ci0JCWVyciA9IGZuKHB0ZSwgdG9rZW4sIGFkZHIsIGRhdGEpOworCQllcnIgPSBmbihwdGUrKywgdG9rZW4sIGFkZHIsIGRhdGEpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7Ci0JfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisJfSB3aGlsZSAoYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIAogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCkBAIC0yNTM5LDcgKzI1NDIsNyBAQAogCX0gZWxzZSBpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7CiAJCXJldCA9IFZNX0ZBVUxUX0hXUE9JU09OOwogCQlkZWxheWFjY3RfY2xlYXJfZmxhZyhERUxBWUFDQ1RfUEZfU1dBUElOKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCiAJbG9ja19wYWdlKHBhZ2UpOwpAQCAtMjYxMSw2ICsyNjE0LDcgQEAKIAlwdGVfdW5tYXBfdW5sb2NrKHBhZ2VfdGFibGUsIHB0bCk7CiBvdXRfcGFnZToKIAl1bmxvY2tfcGFnZShwYWdlKTsKK291dF9yZWxlYXNlOgogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggODIxZGVlNS4uMjA0NzQ2NSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYworKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtaXNvbGF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKQEAgLTQ0Nyw3ICs0NDgsOCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0UgKi8KIAotc3RhdGljIHBnX2RhdGFfdCAqaG90YWRkX25ld19wZ2RhdChpbnQgbmlkLCB1NjQgc3RhcnQpCisvKiB3ZSBhcmUgT0sgY2FsbGluZyBfX21lbWluaXQgc3R1ZmYgaGVyZSAtIHdlIGhhdmUgQ09ORklHX01FTU9SWV9IT1RQTFVHICovCitzdGF0aWMgcGdfZGF0YV90IF9fcmVmICpob3RhZGRfbmV3X3BnZGF0KGludCBuaWQsIHU2NCBzdGFydCkKIHsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwogCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdID0gezB9OwpAQCAtNDg0LDE0ICs0ODYsMTggQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCisJbG9ja19zeXN0ZW1fc2xlZXAoKTsKKwogCXJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSk7CisJcmV0ID0gLUVFWElTVDsKIAlpZiAoIXJlcykKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCWdvdG8gb3V0OwogCiAJaWYgKCFub2RlX29ubGluZShuaWQpKSB7CiAJCXBnZGF0ID0gaG90YWRkX25ld19wZ2RhdChuaWQsIHN0YXJ0KTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJaWYgKCFwZ2RhdCkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBvdXQ7CiAJCW5ld19wZ2RhdCA9IDE7CiAJfQogCkBAIC01MTQsNyArNTIwLDggQEAKIAkJQlVHX09OKHJldCk7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlnb3RvIG91dDsKKwogZXJyb3I6CiAJLyogcm9sbGJhY2sgcGdkYXQgYWxsb2NhdGlvbiBhbmQgb3RoZXJzICovCiAJaWYgKG5ld19wZ2RhdCkKQEAgLTUyMiw2ICs1MjksOCBAQAogCWlmIChyZXMpCiAJCXJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7CiAKK291dDoKKwl1bmxvY2tfc3lzdGVtX3NsZWVwKCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpOwpAQCAtNzU4LDYgKzc2Nyw4IEBACiAJaWYgKCF0ZXN0X3BhZ2VzX2luX2Ffem9uZShzdGFydF9wZm4sIGVuZF9wZm4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWxvY2tfc3lzdGVtX3NsZWVwKCk7CisKIAl6b25lID0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpOwogCW5vZGUgPSB6b25lX3RvX25pZCh6b25lKTsKIAlucl9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47CkBAIC03NjUsNyArNzc2LDcgQEAKIAkvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi8KIAlyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAogCWFyZy5zdGFydF9wZm4gPSBzdGFydF9wZm47CiAJYXJnLm5yX3BhZ2VzID0gbnJfcGFnZXM7CkBAIC04NDMsNiArODU0LDcgQEAKIAl3cml0ZWJhY2tfc2V0X3JhdGVsaW1pdCgpOwogCiAJbWVtb3J5X25vdGlmeShNRU1fT0ZGTElORSwgJmFyZyk7CisJdW5sb2NrX3N5c3RlbV9zbGVlcCgpOwogCXJldHVybiAwOwogCiBmYWlsZWRfcmVtb3ZhbDoKQEAgLTg1Miw2ICs4NjQsOCBAQAogCS8qIHB1c2hiYWNrIHRvIGZyZWUgYXJlYSAqLwogCXVuZG9faXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAKK291dDoKKwl1bmxvY2tfc3lzdGVtX3NsZWVwKCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA3ZGQ5ZDlmLi40NTQ1ZDU5IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAogCQllcnIgPSBtaWdyYXRlX3ByZXAoKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG1wb2xfb3V0OwogCX0KIAl7CiAJCU5PREVNQVNLX1NDUkFUQ0goc2NyYXRjaCk7CkBAIC0xMDM5LDEwICsxMDM5LDkgQEAKIAkJCWVyciA9IC1FTk9NRU07CiAJCU5PREVNQVNLX1NDUkFUQ0hfRlJFRShzY3JhdGNoKTsKIAl9Ci0JaWYgKGVycikgewotCQltcG9sX3B1dChuZXcpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIG1wb2xfb3V0OworCiAJdm1hID0gY2hlY2tfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLAogCQkJICBmbGFncyB8IE1QT0xfTUZfSU5WRVJULCAmcGFnZWxpc3QpOwogCkBAIC0xMDU4LDkgKzEwNTcsMTEgQEAKIAogCQlpZiAoIWVyciAmJiBucl9mYWlsZWQgJiYgKGZsYWdzICYgTVBPTF9NRl9TVFJJQ1QpKQogCQkJZXJyID0gLUVJTzsKLQl9CisJfSBlbHNlCisJCXB1dGJhY2tfbHJ1X3BhZ2VzKCZwYWdlbGlzdCk7CiAKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKyBtcG9sX291dDoKIAltcG9sX3B1dChuZXcpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMWE0YmY0OC4uN2RiY2IyMiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJc3RydWN0IHBhZ2UgKm5ld3BhZ2UgPSBnZXRfbmV3X3BhZ2UocGFnZSwgcHJpdmF0ZSwgJnJlc3VsdCk7CiAJaW50IHJjdV9sb2NrZWQgPSAwOwogCWludCBjaGFyZ2UgPSAwOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CiAKIAlpZiAoIW5ld3BhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDIxZDQwMjkuLjczZjVlNGIgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTIyODIsNyArMjI4Miw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3BlY2lhbF9tYXBwaW5nX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcGVjaWFsX21hcHBpbmdfdm1vcHMgPSB7CiAJLmNsb3NlID0gc3BlY2lhbF9tYXBwaW5nX2Nsb3NlLAogCS5mYXVsdCA9IHNwZWNpYWxfbWFwcGluZ19mYXVsdCwKIH07CmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCA1NmE0NDZmLi45ODc2ZmEwIDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCisrKyBiL21tL25vbW11LmMKQEAgLTc5LDcgKzc5LDcgQEAKIHN0cnVjdCByYl9yb290IG5vbW11X3JlZ2lvbl90cmVlID0gUkJfUk9PVDsKIERFQ0xBUkVfUldTRU0obm9tbXVfcmVnaW9uX3NlbSk7CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzID0geworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHMgPSB7CiB9OwogCiAvKgpAQCAtODI2LDcgKzgyNiw3IEBACiAJaW50IHJldDsKIAogCS8qIGRvIHRoZSBzaW1wbGUgY2hlY2tzIGZpcnN0ICovCi0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEIHx8IGFkZHIpIHsKKwlpZiAoZmxhZ3MgJiBNQVBfRklYRUQpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJICAgICAgICIlZDogQ2FuJ3QgZG8gZml4ZWQtYWRkcmVzcy9vdmVybGF5IG1tYXAgb2YgUkFNXG4iLAogCQkgICAgICAgY3VycmVudC0+cGlkKTsKQEAgLTEwMzQsNyArMTAzNCw3IEBACiAJcmV0ID0gdm1hLT52bV9maWxlLT5mX29wLT5tbWFwKHZtYS0+dm1fZmlsZSwgdm1hKTsKIAlpZiAocmV0ID09IDApIHsKIAkJdm1hLT52bV9yZWdpb24tPnZtX3RvcCA9IHZtYS0+dm1fcmVnaW9uLT52bV9lbmQ7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiAwOwogCX0KIAlpZiAocmV0ICE9IC1FTk9TWVMpCiAJCXJldHVybiByZXQ7CkBAIC0xMDUxLDcgKzEwNTEsOCBAQAogICovCiBzdGF0aWMgaW50IGRvX21tYXBfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSAgIHN0cnVjdCB2bV9yZWdpb24gKnJlZ2lvbiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuKQorCQkJICAgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgICB1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXM7CiAJdW5zaWduZWQgbG9uZyB0b3RhbCwgcG9pbnQsIG4sIHJsZW47CkBAIC0xMDYyLDEzICsxMDYzLDEzIEBACiAJICogc2hhcmVkIG1hcHBpbmdzIG9uIGRldmljZXMgb3IgbWVtb3J5CiAJICogLSBWTV9NQVlTSEFSRSB3aWxsIGJlIHNldCBpZiBpdCBtYXkgYXR0ZW1wdCB0byBzaGFyZQogCSAqLwotCWlmICh2bWEtPnZtX2ZpbGUpIHsKKwlpZiAoY2FwYWJpbGl0aWVzICYgQkRJX0NBUF9NQVBfRElSRUNUKSB7CiAJCXJldCA9IHZtYS0+dm1fZmlsZS0+Zl9vcC0+bW1hcCh2bWEtPnZtX2ZpbGUsIHZtYSk7CiAJCWlmIChyZXQgPT0gMCkgewogCQkJLyogc2hvdWxkbid0IHJldHVybiBzdWNjZXNzIGlmIHdlJ3JlIG5vdCBzaGFyaW5nICovCiAJCQlCVUdfT04oISh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKTsKIAkJCXZtYS0+dm1fcmVnaW9uLT52bV90b3AgPSB2bWEtPnZtX3JlZ2lvbi0+dm1fZW5kOwotCQkJcmV0dXJuIHJldDsKKwkJCXJldHVybiAwOwogCQl9CiAJCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJCXJldHVybiByZXQ7CkBAIC0xMTgxLDkgKzExODIsNiBAQAogCiAJa2VudGVyKCIsJWx4LCVseCwlbHgsJWx4LCVseCIsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIHBnb2ZmKTsKIAotCWlmICghKGZsYWdzICYgTUFQX0ZJWEVEKSkKLQkJYWRkciA9IHJvdW5kX2hpbnRfdG9fbWluKGFkZHIpOwotCiAJLyogZGVjaWRlIHdoZXRoZXIgd2Ugc2hvdWxkIGF0dGVtcHQgdGhlIG1hcHBpbmcsIGFuZCBpZiBzbyB3aGF0IHNvcnQgb2YKIAkgKiBtYXBwaW5nICovCiAJcmV0ID0gdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIHBnb2ZmLApAQCAtMTE5Myw2ICsxMTkxLDkgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwkvKiB3ZSBpZ25vcmUgdGhlIGFkZHJlc3MgaGludCAqLworCWFkZHIgPSAwOworCiAJLyogd2UndmUgZGV0ZXJtaW5lZCB0aGF0IHdlIGNhbiBtYWtlIHRoZSBtYXBwaW5nLCBub3cgdHJhbnNsYXRlIHdoYXQgd2UKIAkgKiBub3cga25vdyBpbnRvIFZNQSBmbGFncyAqLwogCXZtX2ZsYWdzID0gZGV0ZXJtaW5lX3ZtX2ZsYWdzKGZpbGUsIHByb3QsIGZsYWdzLCBjYXBhYmlsaXRpZXMpOwpAQCAtMTMwNiw3ICsxMzA3LDcgQEAKIAkJICogLSB0aGlzIGlzIHRoZSBob29rIGZvciBxdWFzaS1tZW1vcnkgY2hhcmFjdGVyIGRldmljZXMgdG8KIAkJICogICB0ZWxsIHVzIHRoZSBsb2NhdGlvbiBvZiBhIHNoYXJlZCBtYXBwaW5nCiAJCSAqLwotCQlpZiAoZmlsZSAmJiBmaWxlLT5mX29wLT5nZXRfdW5tYXBwZWRfYXJlYSkgeworCQlpZiAoY2FwYWJpbGl0aWVzICYgQkRJX0NBUF9NQVBfRElSRUNUKSB7CiAJCQlhZGRyID0gZmlsZS0+Zl9vcC0+Z2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLAogCQkJCQkJCSAgICAgcGdvZmYsIGZsYWdzKTsKIAkJCWlmIChJU19FUlIoKHZvaWQgKikgYWRkcikpIHsKQEAgLTEzMzAsMTUgKzEzMzEsMTcgQEAKIAl9CiAKIAl2bWEtPnZtX3JlZ2lvbiA9IHJlZ2lvbjsKLQlhZGRfbm9tbXVfcmVnaW9uKHJlZ2lvbik7CiAKLQkvKiBzZXQgdXAgdGhlIG1hcHBpbmcgKi8KKwkvKiBzZXQgdXAgdGhlIG1hcHBpbmcKKwkgKiAtIHRoZSByZWdpb24gaXMgZmlsbGVkIGluIGlmIEJESV9DQVBfTUFQX0RJUkVDVCBpcyBzdGlsbCBzZXQKKwkgKi8KIAlpZiAoZmlsZSAmJiB2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKQogCQlyZXQgPSBkb19tbWFwX3NoYXJlZF9maWxlKHZtYSk7CiAJZWxzZQotCQlyZXQgPSBkb19tbWFwX3ByaXZhdGUodm1hLCByZWdpb24sIGxlbik7CisJCXJldCA9IGRvX21tYXBfcHJpdmF0ZSh2bWEsIHJlZ2lvbiwgbGVuLCBjYXBhYmlsaXRpZXMpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycm9yX3B1dF9yZWdpb247CisJCWdvdG8gZXJyb3JfanVzdF9mcmVlOworCWFkZF9ub21tdV9yZWdpb24ocmVnaW9uKTsKIAogCS8qIG9rYXkuLi4gd2UgaGF2ZSBhIG1hcHBpbmc7IG5vdyB3ZSBoYXZlIHRvIHJlZ2lzdGVyIGl0ICovCiAJcmVzdWx0ID0gdm1hLT52bV9zdGFydDsKQEAgLTEzNTYsMjUgKzEzNTksMTQgQEAKIAlrbGVhdmUoIiA9ICVseCIsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKIAotZXJyb3JfcHV0X3JlZ2lvbjoKLQlfX3B1dF9ub21tdV9yZWdpb24ocmVnaW9uKTsKLQlpZiAodm1hKSB7Ci0JCWlmICh2bWEtPnZtX2ZpbGUpIHsKLQkJCWZwdXQodm1hLT52bV9maWxlKTsKLQkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKLQkJCQlyZW1vdmVkX2V4ZV9maWxlX3ZtYSh2bWEtPnZtX21tKTsKLQkJfQotCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7Ci0JfQotCWtsZWF2ZSgiID0gJWQgW3ByXSIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLQogZXJyb3JfanVzdF9mcmVlOgogCXVwX3dyaXRlKCZub21tdV9yZWdpb25fc2VtKTsKIGVycm9yOgotCWZwdXQocmVnaW9uLT52bV9maWxlKTsKKwlpZiAocmVnaW9uLT52bV9maWxlKQorCQlmcHV0KHJlZ2lvbi0+dm1fZmlsZSk7CiAJa21lbV9jYWNoZV9mcmVlKHZtX3JlZ2lvbl9qYXIsIHJlZ2lvbik7Ci0JZnB1dCh2bWEtPnZtX2ZpbGUpOworCWlmICh2bWEtPnZtX2ZpbGUpCisJCWZwdXQodm1hLT52bV9maWxlKTsKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCiAJCXJlbW92ZWRfZXhlX2ZpbGVfdm1hKHZtYS0+dm1fbW0pOwogCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IGQ5OTY2NGUuLjJjNWQ3OTIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtNDQsMTggKzQ0LDIxIEBACiAvKgogICogV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzIGRlY2lkZXMgdGhhdCB0aGUgY2FsbGVyIG5lZWRzIHRvIHBlcmZvcm0gc29tZQogICogbm9uLWJhY2tncm91bmQgd3JpdGViYWNrLCB0aGlzIGlzIGhvdyBtYW55IHBhZ2VzIGl0IHdpbGwgYXR0ZW1wdCB0byB3cml0ZS4KLSAqIEl0IHNob3VsZCBiZSBzb21ld2hhdCBsYXJnZXIgdGhhbiBSQVRFTElNSVRfUEFHRVMgdG8gZW5zdXJlIHRoYXQgcmVhc29uYWJseQorICogSXQgc2hvdWxkIGJlIHNvbWV3aGF0IGxhcmdlciB0aGFuIGRpcnRpZWQgcGFnZXMgdG8gZW5zdXJlIHRoYXQgcmVhc29uYWJseQogICogbGFyZ2UgYW1vdW50cyBvZiBJL08gYXJlIHN1Ym1pdHRlZC4KICAqLwotc3RhdGljIGlubGluZSBsb25nIHN5bmNfd3JpdGViYWNrX3BhZ2VzKHZvaWQpCitzdGF0aWMgaW5saW5lIGxvbmcgc3luY193cml0ZWJhY2tfcGFnZXModW5zaWduZWQgbG9uZyBkaXJ0aWVkKQogewotCXJldHVybiByYXRlbGltaXRfcGFnZXMgKyByYXRlbGltaXRfcGFnZXMgLyAyOworCWlmIChkaXJ0aWVkIDwgcmF0ZWxpbWl0X3BhZ2VzKQorCQlkaXJ0aWVkID0gcmF0ZWxpbWl0X3BhZ2VzOworCisJcmV0dXJuIGRpcnRpZWQgKyBkaXJ0aWVkIC8gMjsKIH0KIAogLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleHBvcnRlZCB2aWEgL3Byb2Mvc3lzL3ZtICovCiAKIC8qCi0gKiBTdGFydCBiYWNrZ3JvdW5kIHdyaXRlYmFjayAodmlhIHBkZmx1c2gpIGF0IHRoaXMgcGVyY2VudGFnZQorICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSB3cml0ZWJhY2sgdGhyZWFkcykgYXQgdGhpcyBwZXJjZW50YWdlCiAgKi8KIGludCBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvID0gMTA7CiAKQEAgLTQ3NCwxMCArNDc3LDExIEBACiAgKiBiYWxhbmNlX2RpcnR5X3BhZ2VzKCkgbXVzdCBiZSBjYWxsZWQgYnkgcHJvY2Vzc2VzIHdoaWNoIGFyZSBnZW5lcmF0aW5nIGRpcnR5CiAgKiBkYXRhLiAgSXQgbG9va3MgYXQgdGhlIG51bWJlciBvZiBkaXJ0eSBwYWdlcyBpbiB0aGUgbWFjaGluZSBhbmQgd2lsbCBmb3JjZQogICogdGhlIGNhbGxlciB0byBwZXJmb3JtIHdyaXRlYmFjayBpZiB0aGUgc3lzdGVtIGlzIG92ZXIgYHZtX2RpcnR5X3JhdGlvJy4KLSAqIElmIHdlJ3JlIG92ZXIgYGJhY2tncm91bmRfdGhyZXNoJyB0aGVuIHBkZmx1c2ggaXMgd29rZW4gdG8gcGVyZm9ybSBzb21lCi0gKiB3cml0ZW91dC4KKyAqIElmIHdlJ3JlIG92ZXIgYGJhY2tncm91bmRfdGhyZXNoJyB0aGVuIHRoZSB3cml0ZWJhY2sgdGhyZWFkcyBhcmUgd29rZW4gdG8KKyAqIHBlcmZvcm0gc29tZSB3cml0ZW91dC4KICAqLwotc3RhdGljIHZvaWQgYmFsYW5jZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3N0YXRpYyB2b2lkIGJhbGFuY2VfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJdW5zaWduZWQgbG9uZyB3cml0ZV9jaHVuaykKIHsKIAlsb25nIG5yX3JlY2xhaW1hYmxlLCBiZGlfbnJfcmVjbGFpbWFibGU7CiAJbG9uZyBucl93cml0ZWJhY2ssIGJkaV9ucl93cml0ZWJhY2s7CkBAIC00ODUsNyArNDg5LDYgQEAKIAl1bnNpZ25lZCBsb25nIGRpcnR5X3RocmVzaDsKIAl1bnNpZ25lZCBsb25nIGJkaV90aHJlc2g7CiAJdW5zaWduZWQgbG9uZyBwYWdlc193cml0dGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIHdyaXRlX2NodW5rID0gc3luY193cml0ZWJhY2tfcGFnZXMoKTsKIAl1bnNpZ25lZCBsb25nIHBhdXNlID0gMTsKIAogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwpAQCAtNTYzLDcgKzU2Niw4IEBACiAJCWlmIChwYWdlc193cml0dGVuID49IHdyaXRlX2NodW5rKQogCQkJYnJlYWs7CQkvKiBXZSd2ZSBkb25lIG91ciBkdXR5ICovCiAKLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHBhdXNlKTsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpb19zY2hlZHVsZV90aW1lb3V0KHBhdXNlKTsKIAogCQkvKgogCQkgKiBJbmNyZWFzZSB0aGUgZGVsYXkgZm9yIGVhY2ggbG9vcCwgdXAgdG8gb3VyIHByZXZpb3VzCkBAIC01NzksNyArNTgzLDcgQEAKIAkJYmRpLT5kaXJ0eV9leGNlZWRlZCA9IDA7CiAKIAlpZiAod3JpdGViYWNrX2luX3Byb2dyZXNzKGJkaSkpCi0JCXJldHVybjsJCS8qIHBkZmx1c2ggaXMgYWxyZWFkeSB3b3JraW5nIHRoaXMgcXVldWUgKi8KKwkJcmV0dXJuOwogCiAJLyoKIAkgKiBJbiBsYXB0b3AgbW9kZSwgd2Ugd2FpdCB1bnRpbCBoaXR0aW5nIHRoZSBoaWdoZXIgdGhyZXNob2xkIGJlZm9yZQpAQCAtNTkwLDEwICs1OTQsMTAgQEAKIAkgKiBiYWNrZ3JvdW5kX3RocmVzaCwgdG8ga2VlcCB0aGUgYW1vdW50IG9mIGRpcnR5IG1lbW9yeSBsb3cuCiAJICovCiAJaWYgKChsYXB0b3BfbW9kZSAmJiBwYWdlc193cml0dGVuKSB8fAotCSAgICAoIWxhcHRvcF9tb2RlICYmICgobnJfd3JpdGViYWNrID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkKLQkJCQkJICArIGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykpCisJICAgICghbGFwdG9wX21vZGUgJiYgKChnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKQorCQkJICAgICAgICsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSkKIAkJCQkJICA+IGJhY2tncm91bmRfdGhyZXNoKSkpCi0JCWJkaV9zdGFydF93cml0ZWJhY2soYmRpLCBucl93cml0ZWJhY2spOworCQliZGlfc3RhcnRfd3JpdGViYWNrKGJkaSwgTlVMTCwgMCk7CiB9CiAKIHZvaWQgc2V0X3BhZ2VfZGlydHlfYmFsYW5jZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VfbWt3cml0ZSkKQEAgLTY0MCw5ICs2NDQsMTAgQEAKIAlwID0gICZfX2dldF9jcHVfdmFyKGJkcF9yYXRlbGltaXRzKTsKIAkqcCArPSBucl9wYWdlc19kaXJ0aWVkOwogCWlmICh1bmxpa2VseSgqcCA+PSByYXRlbGltaXQpKSB7CisJCXJhdGVsaW1pdCA9IHN5bmNfd3JpdGViYWNrX3BhZ2VzKCpwKTsKIAkJKnAgPSAwOwogCQlwcmVlbXB0X2VuYWJsZSgpOwotCQliYWxhbmNlX2RpcnR5X3BhZ2VzKG1hcHBpbmcpOworCQliYWxhbmNlX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIHJhdGVsaW1pdCk7CiAJCXJldHVybjsKIAl9CiAJcHJlZW1wdF9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBiZjcyMDU1Li4yYmMyYWM2IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xNzY5LDcgKzE3NjksNyBAQAogCQkgKiBTZWUgYWxzbyBjcHVzZXRfem9uZV9hbGxvd2VkKCkgY29tbWVudCBpbiBrZXJuZWwvY3B1c2V0LmMuCiAJCSAqLwogCQlhbGxvY19mbGFncyAmPSB+QUxMT0NfQ1BVU0VUOwotCX0gZWxzZSBpZiAodW5saWtlbHkocnRfdGFzayhwKSkpCisJfSBlbHNlIGlmICh1bmxpa2VseShydF90YXNrKHApKSAmJiAhaW5faW50ZXJydXB0KCkpCiAJCWFsbG9jX2ZsYWdzIHw9IEFMTE9DX0hBUkRFUjsKIAogCWlmIChsaWtlbHkoIShnZnBfbWFzayAmIF9fR0ZQX05PTUVNQUxMT0MpKSkgewpAQCAtMTgxNyw5ICsxODE3LDkgQEAKIAlpZiAoTlVNQV9CVUlMRCAmJiAoZ2ZwX21hc2sgJiBHRlBfVEhJU05PREUpID09IEdGUF9USElTTk9ERSkKIAkJZ290byBub3BhZ2U7CiAKK3Jlc3RhcnQ6CiAJd2FrZV9hbGxfa3N3YXBkKG9yZGVyLCB6b25lbGlzdCwgaGlnaF96b25laWR4KTsKIAotcmVzdGFydDoKIAkvKgogCSAqIE9LLCB3ZSdyZSBiZWxvdyB0aGUga3N3YXBkIHdhdGVybWFyayBhbmQgaGF2ZSBraWNrZWQgYmFja2dyb3VuZAogCSAqIHJlY2xhaW0uIE5vdyB0aGluZ3MgZ2V0IG1vcmUgY29tcGxleCwgc28gc2V0IHVwIGFsbG9jX2ZsYWdzIGFjY29yZGluZwpAQCAtMjE4Myw3ICsyMTgzLDcgQEAKIAlwcmludGsoImFjdGl2ZV9hbm9uOiVsdSBpbmFjdGl2ZV9hbm9uOiVsdSBpc29sYXRlZF9hbm9uOiVsdVxuIgogCQkiIGFjdGl2ZV9maWxlOiVsdSBpbmFjdGl2ZV9maWxlOiVsdSBpc29sYXRlZF9maWxlOiVsdVxuIgogCQkiIHVuZXZpY3RhYmxlOiVsdSIKLQkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHUgYnVmZmVyOiVsdVxuIgorCQkiIGRpcnR5OiVsdSB3cml0ZWJhY2s6JWx1IHVuc3RhYmxlOiVsdVxuIgogCQkiIGZyZWU6JWx1IHNsYWJfcmVjbGFpbWFibGU6JWx1IHNsYWJfdW5yZWNsYWltYWJsZTolbHVcbiIKIAkJIiBtYXBwZWQ6JWx1IHNobWVtOiVsdSBwYWdldGFibGVzOiVsdSBib3VuY2U6JWx1XG4iLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfQU5PTiksCkBAIC0yMTk2LDcgKzIxOTYsNiBAQAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSwKLQkJbnJfYmxvY2tkZXZfcGFnZXMoKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfUkVDTEFJTUFCTEUpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1VOUkVDTEFJTUFCTEUpLApkaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuYwppbmRleCA0M2Q4Y2FjLi41YWRmYzI2IDEwMDY0NAotLS0gYS9tbS9wZXJjcHUuYworKysgYi9tbS9wZXJjcHUuYwpAQCAtMTUzLDcgKzE1MywxMCBAQAogICoKICAqIER1cmluZyBhbGxvY2F0aW9uLCBwY3B1X2FsbG9jX211dGV4IGlzIGtlcHQgbG9ja2VkIGFsbCB0aGUgdGltZSBhbmQKICAqIHBjcHVfbG9jayBpcyBncmFiYmVkIGFuZCByZWxlYXNlZCBhcyBuZWNlc3NhcnkuICBBbGwgYWN0dWFsIG1lbW9yeQotICogYWxsb2NhdGlvbnMgYXJlIGRvbmUgdXNpbmcgR0ZQX0tFUk5FTCB3aXRoIHBjcHVfbG9jayByZWxlYXNlZC4KKyAqIGFsbG9jYXRpb25zIGFyZSBkb25lIHVzaW5nIEdGUF9LRVJORUwgd2l0aCBwY3B1X2xvY2sgcmVsZWFzZWQuICBJbgorICogZ2VuZXJhbCwgcGVyY3B1IG1lbW9yeSBjYW4ndCBiZSBhbGxvY2F0ZWQgd2l0aCBpcnEgb2ZmIGJ1dAorICogaXJxc2F2ZS9yZXN0b3JlIGFyZSBzdGlsbCB1c2VkIGluIGFsbG9jIHBhdGggc28gdGhhdCBpdCBjYW4gYmUgdXNlZAorICogZnJvbSBlYXJseSBpbml0IHBhdGggLSBzY2hlZF9pbml0KCkgc3BlY2lmaWNhbGx5LgogICoKICAqIEZyZWUgcGF0aCBhY2Nlc3NlcyBhbmQgYWx0ZXJzIG9ubHkgdGhlIGluZGV4IGRhdGEgc3RydWN0dXJlcywgc28gaXQKICAqIGNhbiBiZSBzYWZlbHkgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQuICBXaGVuIG1lbW9yeSBuZWVkcyB0byBiZQpAQCAtMzUyLDYyICszNTUsODYgQEAKIH0KIAogLyoqCi0gKiBwY3B1X2V4dGVuZF9hcmVhX21hcCAtIGV4dGVuZCBhcmVhIG1hcCBmb3IgYWxsb2NhdGlvbgotICogQGNodW5rOiB0YXJnZXQgY2h1bmsKKyAqIHBjcHVfbmVlZF90b19leHRlbmQgLSBkZXRlcm1pbmUgd2hldGhlciBjaHVuayBhcmVhIG1hcCBuZWVkcyB0byBiZSBleHRlbmRlZAorICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAogICoKLSAqIEV4dGVuZCBhcmVhIG1hcCBvZiBAY2h1bmsgc28gdGhhdCBpdCBjYW4gYWNjb21vZGF0ZSBhbiBhbGxvY2F0aW9uLgotICogQSBzaW5nbGUgYWxsb2NhdGlvbiBjYW4gc3BsaXQgYW4gYXJlYSBpbnRvIHRocmVlIGFyZWFzLCBzbyB0aGlzCi0gKiBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgQGNodW5rLT5tYXAgaGFzIGF0IGxlYXN0IHR3byBleHRyYSBzbG90cy4KKyAqIERldGVybWluZSB3aGV0aGVyIGFyZWEgbWFwIG9mIEBjaHVuayBuZWVkcyB0byBiZSBleHRlbmRlZCB0bworICogYWNjb21vZGF0ZSBhIG5ldyBhbGxvY2F0aW9uLgogICoKICAqIENPTlRFWFQ6Ci0gKiBwY3B1X2FsbG9jX211dGV4LCBwY3B1X2xvY2suICBwY3B1X2xvY2sgaXMgcmVsZWFzZWQgYW5kIHJlYWNxdWlyZWQKLSAqIGlmIGFyZWEgbWFwIGlzIGV4dGVuZGVkLgorICogcGNwdV9sb2NrLgogICoKICAqIFJFVFVSTlM6Ci0gKiAwIGlmIG5vb3AsIDEgaWYgc3VjY2Vzc2Z1bGx5IGV4dGVuZGVkLCAtZXJybm8gb24gZmFpbHVyZS4KKyAqIE5ldyB0YXJnZXQgbWFwIGFsbG9jYXRpb24gbGVuZ3RoIGlmIGV4dGVuc2lvbiBpcyBuZWNlc3NhcnksIDAKKyAqIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBwY3B1X2V4dGVuZF9hcmVhX21hcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCitzdGF0aWMgaW50IHBjcHVfbmVlZF90b19leHRlbmQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQogewogCWludCBuZXdfYWxsb2M7Ci0JaW50ICpuZXc7Ci0Jc2l6ZV90IHNpemU7CiAKLQkvKiBoYXMgZW5vdWdoPyAqLwogCWlmIChjaHVuay0+bWFwX2FsbG9jID49IGNodW5rLT5tYXBfdXNlZCArIDIpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOwotCiAJbmV3X2FsbG9jID0gUENQVV9ERkxfTUFQX0FMTE9DOwogCXdoaWxlIChuZXdfYWxsb2MgPCBjaHVuay0+bWFwX3VzZWQgKyAyKQogCQluZXdfYWxsb2MgKj0gMjsKIAotCW5ldyA9IHBjcHVfbWVtX2FsbG9jKG5ld19hbGxvYyAqIHNpemVvZihuZXdbMF0pKTsKLQlpZiAoIW5ldykgewotCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXJldHVybiBuZXdfYWxsb2M7Cit9CisKKy8qKgorICogcGNwdV9leHRlbmRfYXJlYV9tYXAgLSBleHRlbmQgYXJlYSBtYXAgb2YgYSBjaHVuaworICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAorICogQG5ld19hbGxvYzogbmV3IHRhcmdldCBhbGxvY2F0aW9uIGxlbmd0aCBvZiB0aGUgYXJlYSBtYXAKKyAqCisgKiBFeHRlbmQgYXJlYSBtYXAgb2YgQGNodW5rIHRvIGhhdmUgQG5ld19hbGxvYyBlbnRyaWVzLgorICoKKyAqIENPTlRFWFQ6CisgKiBEb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbi4gIEdyYWJzIGFuZCByZWxlYXNlcyBwY3B1X2xvY2suCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcGNwdV9leHRlbmRfYXJlYV9tYXAoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgbmV3X2FsbG9jKQoreworCWludCAqb2xkID0gTlVMTCwgKm5ldyA9IE5VTEw7CisJc2l6ZV90IG9sZF9zaXplID0gMCwgbmV3X3NpemUgPSBuZXdfYWxsb2MgKiBzaXplb2YobmV3WzBdKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbmV3ID0gcGNwdV9tZW1fYWxsb2MobmV3X3NpemUpOworCWlmICghbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQkvKgotCSAqIEFjcXVpcmUgcGNwdV9sb2NrIGFuZCBzd2l0Y2ggdG8gbmV3IGFyZWEgbWFwLiAgT25seSBmcmVlCi0JICogY291bGQgaGF2ZSBoYXBwZW5lZCBpbmJldHdlZW4sIHNvIG1hcF91c2VkIGNvdWxkbid0IGhhdmUKLQkgKiBncm93bi4KLQkgKi8KLQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOwotCUJVR19PTihuZXdfYWxsb2MgPCBjaHVuay0+bWFwX3VzZWQgKyAyKTsKKwkvKiBhY3F1aXJlIHBjcHVfbG9jayBhbmQgc3dpdGNoIHRvIG5ldyBhcmVhIG1hcCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAotCXNpemUgPSBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pOwotCW1lbWNweShuZXcsIGNodW5rLT5tYXAsIHNpemUpOworCWlmIChuZXdfYWxsb2MgPD0gY2h1bmstPm1hcF9hbGxvYykKKwkJZ290byBvdXRfdW5sb2NrOworCisJb2xkX3NpemUgPSBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pOworCW1lbWNweShuZXcsIGNodW5rLT5tYXAsIG9sZF9zaXplKTsKIAogCS8qCiAJICogbWFwX2FsbG9jIDwgUENQVV9ERkxfTUFQX0FMTE9DIGluZGljYXRlcyB0aGF0IHRoZSBjaHVuayBpcwogCSAqIG9uZSBvZiB0aGUgZmlyc3QgY2h1bmtzIGFuZCBzdGlsbCB1c2luZyBzdGF0aWMgbWFwLgogCSAqLwogCWlmIChjaHVuay0+bWFwX2FsbG9jID49IFBDUFVfREZMX01BUF9BTExPQykKLQkJcGNwdV9tZW1fZnJlZShjaHVuay0+bWFwLCBzaXplKTsKKwkJb2xkID0gY2h1bmstPm1hcDsKIAogCWNodW5rLT5tYXBfYWxsb2MgPSBuZXdfYWxsb2M7CiAJY2h1bmstPm1hcCA9IG5ldzsKKwluZXcgPSBOVUxMOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBwY3B1X21lbV9mcmVlKCkgbWlnaHQgZW5kIHVwIGNhbGxpbmcgdmZyZWUoKSB3aGljaCB1c2VzCisJICogSVJRLXVuc2FmZSBsb2NrIGFuZCB0aHVzIGNhbid0IGJlIGNhbGxlZCB1bmRlciBwY3B1X2xvY2suCisJICovCisJcGNwdV9tZW1fZnJlZShvbGQsIG9sZF9zaXplKTsKKwlwY3B1X21lbV9mcmVlKG5ldywgbmV3X3NpemUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDMsOCArMTA3MCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCAqcGNwdV9hbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkKQogeworCXN0YXRpYyBpbnQgd2Fybl9saW1pdCA9IDEwOwogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKLQlpbnQgc2xvdCwgb2ZmOworCWNvbnN0IGNoYXIgKmVycjsKKwlpbnQgc2xvdCwgb2ZmLCBuZXdfYWxsb2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICh1bmxpa2VseSghc2l6ZSB8fCBzaXplID4gUENQVV9NSU5fVU5JVF9TSVpFIHx8IGFsaWduID4gUEFHRV9TSVpFKSkgewogCQlXQVJOKHRydWUsICJpbGxlZ2FsIHNpemUgKCV6dSkgb3IgYWxpZ24gKCV6dSkgZm9yICIKQEAgLTEwNTMsMTcgKzEwODMsMzEgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZwY3B1X2FsbG9jX211dGV4KTsKLQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAogCS8qIHNlcnZlIHJlc2VydmVkIGFsbG9jYXRpb25zIGZyb20gdGhlIHJlc2VydmVkIGNodW5rIGlmIGF2YWlsYWJsZSAqLwogCWlmIChyZXNlcnZlZCAmJiBwY3B1X3Jlc2VydmVkX2NodW5rKSB7CiAJCWNodW5rID0gcGNwdV9yZXNlcnZlZF9jaHVuazsKLQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQgfHwKLQkJICAgIHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rKSA8IDApCisKKwkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpIHsKKwkJCWVyciA9ICJhbGxvYyBmcm9tIHJlc2VydmVkIGNodW5rIGZhaWxlZCI7CiAJCQlnb3RvIGZhaWxfdW5sb2NrOworCQl9CisKKwkJd2hpbGUgKChuZXdfYWxsb2MgPSBwY3B1X25lZWRfdG9fZXh0ZW5kKGNodW5rKSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCQkJaWYgKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLCBuZXdfYWxsb2MpIDwgMCkgeworCQkJCWVyciA9ICJmYWlsZWQgdG8gZXh0ZW5kIGFyZWEgbWFwIG9mIHJlc2VydmVkIGNodW5rIjsKKwkJCQlnb3RvIGZhaWxfdW5sb2NrX211dGV4OworCQkJfQorCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCQl9CisKIAkJb2ZmID0gcGNwdV9hbGxvY19hcmVhKGNodW5rLCBzaXplLCBhbGlnbik7CiAJCWlmIChvZmYgPj0gMCkKIAkJCWdvdG8gYXJlYV9mb3VuZDsKKworCQllcnIgPSAiYWxsb2MgZnJvbSByZXNlcnZlZCBjaHVuayBmYWlsZWQiOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIApAQCAtMTA3NCwxMyArMTExOCwyMCBAQAogCQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpCiAJCQkJY29udGludWU7CiAKLQkJCXN3aXRjaCAocGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspKSB7Ci0JCQljYXNlIDA6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJZ290byByZXN0YXJ0OwkvKiBwY3B1X2xvY2sgZHJvcHBlZCwgcmVzdGFydCAqLwotCQkJZGVmYXVsdDoKLQkJCQlnb3RvIGZhaWxfdW5sb2NrOworCQkJbmV3X2FsbG9jID0gcGNwdV9uZWVkX3RvX2V4dGVuZChjaHVuayk7CisJCQlpZiAobmV3X2FsbG9jKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CisJCQkJaWYgKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLAorCQkJCQkJCSBuZXdfYWxsb2MpIDwgMCkgeworCQkJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCI7CisJCQkJCWdvdG8gZmFpbF91bmxvY2tfbXV0ZXg7CisJCQkJfQorCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJCQkvKgorCQkJCSAqIHBjcHVfbG9jayBoYXMgYmVlbiBkcm9wcGVkLCBuZWVkIHRvCisJCQkJICogcmVzdGFydCBjcHVfc2xvdCBsaXN0IHdhbGtpbmcuCisJCQkJICovCisJCQkJZ290byByZXN0YXJ0OwogCQkJfQogCiAJCQlvZmYgPSBwY3B1X2FsbG9jX2FyZWEoY2h1bmssIHNpemUsIGFsaWduKTsKQEAgLTEwOTAsMjMgKzExNDEsMjYgQEAKIAl9CiAKIAkvKiBobW1tLi4uIG5vIHNwYWNlIGxlZnQsIGNyZWF0ZSBhIG5ldyBjaHVuayAqLwotCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAogCWNodW5rID0gYWxsb2NfcGNwdV9jaHVuaygpOwotCWlmICghY2h1bmspCisJaWYgKCFjaHVuaykgeworCQllcnIgPSAiZmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBjaHVuayI7CiAJCWdvdG8gZmFpbF91bmxvY2tfbXV0ZXg7CisJfQogCi0Jc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAJcGNwdV9jaHVua19yZWxvY2F0ZShjaHVuaywgLTEpOwogCWdvdG8gcmVzdGFydDsKIAogYXJlYV9mb3VuZDoKLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAkvKiBwb3B1bGF0ZSwgbWFwIGFuZCBjbGVhciB0aGUgYXJlYSAqLwogCWlmIChwY3B1X3BvcHVsYXRlX2NodW5rKGNodW5rLCBvZmYsIHNpemUpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAkJcGNwdV9mcmVlX2FyZWEoY2h1bmssIG9mZik7CisJCWVyciA9ICJmYWlsZWQgdG8gcG9wdWxhdGUiOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIApAQCAtMTExNiw5ICsxMTcwLDE2IEBACiAJcmV0dXJuIF9fYWRkcl90b19wY3B1X3B0cihjaHVuay0+YmFzZV9hZGRyICsgb2ZmKTsKIAogZmFpbF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogZmFpbF91bmxvY2tfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZwY3B1X2FsbG9jX211dGV4KTsKKwlpZiAod2Fybl9saW1pdCkgeworCQlwcl93YXJuaW5nKCJQRVJDUFU6IGFsbG9jYXRpb24gZmFpbGVkLCBzaXplPSV6dSBhbGlnbj0lenUsICIKKwkJCSAgICIlc1xuIiwgc2l6ZSwgYWxpZ24sIGVycik7CisJCWR1bXBfc3RhY2soKTsKKwkJaWYgKCEtLXdhcm5fbGltaXQpCisJCQlwcl9pbmZvKCJQRVJDUFU6IGxpbWl0IHJlYWNoZWQsIGRpc2FibGUgd2FybmluZ1xuIik7CisJfQogCXJldHVybiBOVUxMOwogfQogCkBAIC0xMzQ3LDYgKzE0MDgsMTAgQEAKIAlzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTsKIAl1bnNpZ25lZCBpbnQgKmNwdV9tYXA7CiAKKwkvKiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKi8KKwltZW1zZXQoZ3JvdXBfbWFwLCAwLCBzaXplb2YoZ3JvdXBfbWFwKSk7CisJbWVtc2V0KGdyb3VwX2NudCwgMCwgc2l6ZW9mKGdyb3VwX21hcCkpOworCiAJLyoKIAkgKiBEZXRlcm1pbmUgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZSBhbmQgbWF4X3VwYSBzdWNoIHRoYXQKIAkgKiBhbGxvY19zaXplIGlzIG11bHRpcGxlIG9mIGF0b21fc2l6ZSBhbmQgaXMgdGhlIHNtYWxsZXN0CkBAIC0xNTc0LDYgKzE2MzksNyBAQAogaW50IF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAogCQkJCSAgdm9pZCAqYmFzZV9hZGRyKQogeworCXN0YXRpYyBjaGFyIGNwdXNfYnVmWzQwOTZdIF9faW5pdGRhdGE7CiAJc3RhdGljIGludCBzbWFwWzJdLCBkbWFwWzJdOwogCXNpemVfdCBkeW5fc2l6ZSA9IGFpLT5keW5fc2l6ZTsKIAlzaXplX3Qgc2l6ZV9zdW0gPSBhaS0+c3RhdGljX3NpemUgKyBhaS0+cmVzZXJ2ZWRfc2l6ZSArIGR5bl9zaXplOwpAQCAtMTU4NSwxNyArMTY1MSwyNiBAQAogCWludCAqdW5pdF9tYXA7CiAJaW50IGdyb3VwLCB1bml0LCBpOwogCisJY3B1bWFza19zY25wcmludGYoY3B1c19idWYsIHNpemVvZihjcHVzX2J1ZiksIGNwdV9wb3NzaWJsZV9tYXNrKTsKKworI2RlZmluZSBQQ1BVX1NFVFVQX0JVR19PTihjb25kKQlkbyB7CQkJCQlcCisJaWYgKHVubGlrZWx5KGNvbmQpKSB7CQkJCQkJXAorCQlwcl9lbWVyZygiUEVSQ1BVOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSwgJXMiLCAjY29uZCk7CVwKKwkJcHJfZW1lcmcoIlBFUkNQVTogY3B1X3Bvc3NpYmxlX21hc2s9JXNcbiIsIGNwdXNfYnVmKTsJXAorCQlwY3B1X2R1bXBfYWxsb2NfaW5mbyhLRVJOX0VNRVJHLCBhaSk7CQkJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKIAkvKiBzYW5pdHkgY2hlY2tzICovCiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoc21hcCkgPj0gUENQVV9ERkxfTUFQX0FMTE9DIHx8CiAJCSAgICAgQVJSQVlfU0laRShkbWFwKSA+PSBQQ1BVX0RGTF9NQVBfQUxMT0MpOwotCUJVR19PTihhaS0+bnJfZ3JvdXBzIDw9IDApOwotCUJVR19PTighYWktPnN0YXRpY19zaXplKTsKLQlCVUdfT04oIWJhc2VfYWRkcik7Ci0JQlVHX09OKGFpLT51bml0X3NpemUgPCBzaXplX3N1bSk7Ci0JQlVHX09OKGFpLT51bml0X3NpemUgJiB+UEFHRV9NQVNLKTsKLQlCVUdfT04oYWktPnVuaXRfc2l6ZSA8IFBDUFVfTUlOX1VOSVRfU0laRSk7Ci0KLQlwY3B1X2R1bXBfYWxsb2NfaW5mbyhLRVJOX0RFQlVHLCBhaSk7CisJUENQVV9TRVRVUF9CVUdfT04oYWktPm5yX2dyb3VwcyA8PSAwKTsKKwlQQ1BVX1NFVFVQX0JVR19PTighYWktPnN0YXRpY19zaXplKTsKKwlQQ1BVX1NFVFVQX0JVR19PTighYmFzZV9hZGRyKTsKKwlQQ1BVX1NFVFVQX0JVR19PTihhaS0+dW5pdF9zaXplIDwgc2l6ZV9zdW0pOworCVBDUFVfU0VUVVBfQlVHX09OKGFpLT51bml0X3NpemUgJiB+UEFHRV9NQVNLKTsKKwlQQ1BVX1NFVFVQX0JVR19PTihhaS0+dW5pdF9zaXplIDwgUENQVV9NSU5fVU5JVF9TSVpFKTsKIAogCS8qIHByb2Nlc3MgZ3JvdXAgaW5mb3JtYXRpb24gYW5kIGJ1aWxkIGNvbmZpZyB0YWJsZXMgYWNjb3JkaW5nbHkgKi8KIAlncm91cF9vZmZzZXRzID0gYWxsb2NfYm9vdG1lbShhaS0+bnJfZ3JvdXBzICogc2l6ZW9mKGdyb3VwX29mZnNldHNbMF0pKTsKQEAgLTE2MDQsNyArMTY3OSw3IEBACiAJdW5pdF9vZmYgPSBhbGxvY19ib290bWVtKG5yX2NwdV9pZHMgKiBzaXplb2YodW5pdF9vZmZbMF0pKTsKIAogCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1X2lkczsgY3B1KyspCi0JCXVuaXRfbWFwW2NwdV0gPSBOUl9DUFVTOworCQl1bml0X21hcFtjcHVdID0gVUlOVF9NQVg7CiAJcGNwdV9maXJzdF91bml0X2NwdSA9IE5SX0NQVVM7CiAKIAlmb3IgKGdyb3VwID0gMCwgdW5pdCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKywgdW5pdCArPSBpKSB7CkBAIC0xNjE4LDggKzE2OTMsOSBAQAogCQkJaWYgKGNwdSA9PSBOUl9DUFVTKQogCQkJCWNvbnRpbnVlOwogCi0JCQlCVUdfT04oY3B1ID4gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSkpOwotCQkJQlVHX09OKHVuaXRfbWFwW2NwdV0gIT0gTlJfQ1BVUyk7CisJCQlQQ1BVX1NFVFVQX0JVR19PTihjcHUgPiBucl9jcHVfaWRzKTsKKwkJCVBDUFVfU0VUVVBfQlVHX09OKCFjcHVfcG9zc2libGUoY3B1KSk7CisJCQlQQ1BVX1NFVFVQX0JVR19PTih1bml0X21hcFtjcHVdICE9IFVJTlRfTUFYKTsKIAogCQkJdW5pdF9tYXBbY3B1XSA9IHVuaXQgKyBpOwogCQkJdW5pdF9vZmZbY3B1XSA9IGdpLT5iYXNlX29mZnNldCArIGkgKiBhaS0+dW5pdF9zaXplOwpAQCAtMTYzMiw3ICsxNzA4LDExIEBACiAJcGNwdV9ucl91bml0cyA9IHVuaXQ7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQlCVUdfT04odW5pdF9tYXBbY3B1XSA9PSBOUl9DUFVTKTsKKwkJUENQVV9TRVRVUF9CVUdfT04odW5pdF9tYXBbY3B1XSA9PSBVSU5UX01BWCk7CisKKwkvKiB3ZSdyZSBkb25lIHBhcnNpbmcgdGhlIGlucHV0LCB1bmRlZmluZSBCVUcgbWFjcm8gYW5kIGR1bXAgY29uZmlnICovCisjdW5kZWYgUENQVV9TRVRVUF9CVUdfT04KKwlwY3B1X2R1bXBfYWxsb2NfaW5mbyhLRVJOX0lORk8sIGFpKTsKIAogCXBjcHVfbnJfZ3JvdXBzID0gYWktPm5yX2dyb3VwczsKIAlwY3B1X2dyb3VwX29mZnNldHMgPSBncm91cF9vZmZzZXRzOwpAQCAtMTc4Miw3ICsxODYyLDcgQEAKIAl2b2lkICpiYXNlID0gKHZvaWQgKilVTE9OR19NQVg7CiAJdm9pZCAqKmFyZWFzID0gTlVMTDsKIAlzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTsKLQlzaXplX3Qgc2l6ZV9zdW0sIGFyZWFzX3NpemU7CisJc2l6ZV90IHNpemVfc3VtLCBhcmVhc19zaXplLCBtYXhfZGlzdGFuY2U7CiAJaW50IGdyb3VwLCBpLCByYzsKIAogCWFpID0gcGNwdV9idWlsZF9hbGxvY19pbmZvKHJlc2VydmVkX3NpemUsIGR5bl9zaXplLCBhdG9tX3NpemUsCkBAIC0xODMyLDggKzE5MTIsMjUgQEAKIAl9CiAKIAkvKiBiYXNlIGFkZHJlc3MgaXMgbm93IGtub3duLCBkZXRlcm1pbmUgZ3JvdXAgYmFzZSBvZmZzZXRzICovCi0JZm9yIChncm91cCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKykKKwltYXhfZGlzdGFuY2UgPSAwOworCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGFpLT5ucl9ncm91cHM7IGdyb3VwKyspIHsKIAkJYWktPmdyb3Vwc1tncm91cF0uYmFzZV9vZmZzZXQgPSBhcmVhc1tncm91cF0gLSBiYXNlOworCQltYXhfZGlzdGFuY2UgPSBtYXhfdChzaXplX3QsIG1heF9kaXN0YW5jZSwKKwkJCQkgICAgIGFpLT5ncm91cHNbZ3JvdXBdLmJhc2Vfb2Zmc2V0KTsKKwl9CisJbWF4X2Rpc3RhbmNlICs9IGFpLT51bml0X3NpemU7CisKKwkvKiB3YXJuIGlmIG1heGltdW0gZGlzdGFuY2UgaXMgZnVydGhlciB0aGFuIDc1JSBvZiB2bWFsbG9jIHNwYWNlICovCisJaWYgKG1heF9kaXN0YW5jZSA+IChWTUFMTE9DX0VORCAtIFZNQUxMT0NfU1RBUlQpICogMyAvIDQpIHsKKwkJcHJfd2FybmluZygiUEVSQ1BVOiBtYXhfZGlzdGFuY2U9MHglenggdG9vIGxhcmdlIGZvciB2bWFsbG9jICIKKwkJCSAgICJzcGFjZSAweCVseFxuIiwKKwkJCSAgIG1heF9kaXN0YW5jZSwgVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJUKTsKKyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKKwkJLyogYW5kIGZhaWwgaWYgd2UgaGF2ZSBmYWxsYmFjayAqLworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWU7CisjZW5kaWYKKwl9CiAKIAlwcl9pbmZvKCJQRVJDUFU6IEVtYmVkZGVkICV6dSBwYWdlcy9jcHUgQCVwIHMlenUgciV6dSBkJXp1IHUlenVcbiIsCiAJCVBGTl9ET1dOKHNpemVfc3VtKSwgYmFzZSwgYWktPnN0YXRpY19zaXplLCBhaS0+cmVzZXJ2ZWRfc2l6ZSwKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAyOGFhZmUyLi5kZDQzMzczIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC0yNDIsOCArMjQyLDggQEAKIH0KIAogLyoKLSAqIEF0IHdoYXQgdXNlciB2aXJ0dWFsIGFkZHJlc3MgaXMgcGFnZSBleHBlY3RlZCBpbiB2bWE/IGNoZWNraW5nIHRoYXQgdGhlCi0gKiBwYWdlIG1hdGNoZXMgdGhlIHZtYTogY3VycmVudGx5IG9ubHkgdXNlZCBvbiBhbm9uIHBhZ2VzLCBieSB1bnVzZV92bWE7CisgKiBBdCB3aGF0IHVzZXIgdmlydHVhbCBhZGRyZXNzIGlzIHBhZ2UgZXhwZWN0ZWQgaW4gdm1hPworICogY2hlY2tpbmcgdGhhdCB0aGUgcGFnZSBtYXRjaGVzIHRoZSB2bWEuCiAgKi8KIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA5ODYzMWMyLi4zNTZkZDk5NSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1lbV92bV9vcHM7CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBzaG1lbV9iYWNraW5nX2Rldl9pbmZvICBfX3JlYWRfbW9zdGx5ID0gewogCS5yYV9wYWdlcwk9IDAsCS8qIE5vIHJlYWRhaGVhZCAqLwpAQCAtMTA0Niw4ICsxMDQ2LDkgQEAKIAkgKiBzeW5jIGZyb20gZXZlciBjYWxsaW5nIHNobWVtX3dyaXRlcGFnZTsgYnV0IGEgc3RhY2tpbmcgZmlsZXN5c3RlbQogCSAqIG1heSB1c2UgdGhlIC0+d3JpdGVwYWdlIG9mIGl0cyB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0sIGluIHdoaWNoIGNhc2UKIAkgKiB0bXBmcyBzaG91bGQgd3JpdGUgb3V0IHRvIHN3YXAgb25seSBpbiByZXNwb25zZSB0byBtZW1vcnkgcHJlc3N1cmUsCi0JICogYW5kIG5vdCBmb3IgcGRmbHVzaCBvciBzeW5jLiAgSG93ZXZlciwgaW4gdGhvc2UgY2FzZXMsIHdlIGRvIHN0aWxsCi0JICogd2FudCB0byBjaGVjayBpZiB0aGVyZSdzIGEgcmVkdW5kYW50IHN3YXBwYWdlIHRvIGJlIGRpc2NhcmRlZC4KKwkgKiBhbmQgbm90IGZvciB0aGUgd3JpdGViYWNrIHRocmVhZHMgb3Igc3luYy4gIEhvd2V2ZXIsIGluIHRob3NlIGNhc2VzLAorCSAqIHdlIGRvIHN0aWxsIHdhbnQgdG8gY2hlY2sgaWYgdGhlcmUncyBhIHJlZHVuZGFudCBzd2FwcGFnZSB0byBiZQorCSAqIGRpc2NhcmRlZC4KIAkgKi8KIAlpZiAod2JjLT5mb3JfcmVjbGFpbSkKIAkJc3dhcCA9IGdldF9zd2FwX3BhZ2UoKTsKQEAgLTI0OTcsNyArMjQ5OCw3IEBACiAJLnB1dF9zdXBlcgk9IHNobWVtX3B1dF9zdXBlciwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1lbV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IHNobWVtX2ZhdWx0LAogI2lmZGVmIENPTkZJR19OVU1BCiAJLnNldF9wb2xpY3kgICAgID0gc2htZW1fc2V0X3BvbGljeSwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDRkZTdmMDIuLjljNTkwZWUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMTE1MSw4ICsxMTUxLDcgQEAKIAkJCQl9IGVsc2UKIAkJCQkJcmV0dmFsID0gdW51c2VfbW0obW0sIGVudHJ5LCBwYWdlKTsKIAotCQkJCWlmIChzZXRfc3RhcnRfbW0gJiYKLQkJCQkgICAgc3dhcF9jb3VudCgqc3dhcF9tYXApIDwgc3djb3VudCkgeworCQkJCWlmIChzZXRfc3RhcnRfbW0gJiYgKnN3YXBfbWFwIDwgc3djb3VudCkgewogCQkJCQltbXB1dChuZXdfc3RhcnRfbW0pOwogCQkJCQlhdG9taWNfaW5jKCZtbS0+bW1fdXNlcnMpOwogCQkJCQluZXdfc3RhcnRfbW0gPSBtbTsKQEAgLTE5NzQsMTIgKzE5NzMsMTQgQEAKIAkJZ290byBiYWRfc3dhcDsKIAl9CiAKLQlpZiAoYmxrX3F1ZXVlX25vbnJvdChiZGV2X2dldF9xdWV1ZShwLT5iZGV2KSkpIHsKLQkJcC0+ZmxhZ3MgfD0gU1dQX1NPTElEU1RBVEU7Ci0JCXAtPmNsdXN0ZXJfbmV4dCA9IDEgKyAocmFuZG9tMzIoKSAlIHAtPmhpZ2hlc3RfYml0KTsKKwlpZiAocC0+YmRldikgeworCQlpZiAoYmxrX3F1ZXVlX25vbnJvdChiZGV2X2dldF9xdWV1ZShwLT5iZGV2KSkpIHsKKwkJCXAtPmZsYWdzIHw9IFNXUF9TT0xJRFNUQVRFOworCQkJcC0+Y2x1c3Rlcl9uZXh0ID0gMSArIChyYW5kb20zMigpICUgcC0+aGlnaGVzdF9iaXQpOworCQl9CisJCWlmIChkaXNjYXJkX3N3YXAocCkgPT0gMCkKKwkJCXAtPmZsYWdzIHw9IFNXUF9ESVNDQVJEQUJMRTsKIAl9Ci0JaWYgKGRpc2NhcmRfc3dhcChwKSA9PSAwKQotCQlwLT5mbGFncyB8PSBTV1BfRElTQ0FSREFCTEU7CiAKIAltdXRleF9sb2NrKCZzd2Fwb25fbXV0ZXgpOwogCXNwaW5fbG9jaygmc3dhcF9sb2NrKTsKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA2OTUxMWU2Li4wZjU1MWE0IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTI1LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3NobXBhcmFtLmg+CiAKIAogLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqLwpAQCAtMTE1NiwxMiArMTE1NywxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCWludCBub2RlLCBnZnBfdCBnZnBfbWFzaywgdm9pZCAqY2FsbGVyKQorCQl1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCiB7CiAJc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKnZhOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7Ci0JdW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7CiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWlmIChmbGFncyAmIFZNX0lPUkVNQVApIHsKQEAgLTEyMDEsNyArMTIwMSw3IEBACiBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGZsYWdzLCBzdGFydCwgZW5kLCAtMSwgR0ZQX0tFUk5FTCwKKwlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIDEsIGZsYWdzLCBzdGFydCwgZW5kLCAtMSwgR0ZQX0tFUk5FTCwKIAkJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2dldF92bV9hcmVhKTsKQEAgLTEyMTAsNyArMTIxMCw3IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCSAgICAgICB2b2lkICpjYWxsZXIpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgc3RhcnQsIGVuZCwgLTEsIEdGUF9LRVJORUwsCisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgc3RhcnQsIGVuZCwgLTEsIEdGUF9LRVJORUwsCiAJCQkJICBjYWxsZXIpOwogfQogCkBAIC0xMjI1LDIyICsxMjI1LDIyIEBACiAgKi8KIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIDEsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKIAkJCQktMSwgR0ZQX0tFUk5FTCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAogc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQl2b2lkICpjYWxsZXIpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCiAJCQkJCQktMSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTsKIH0KIAogc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJICAgaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELCBub2RlLAotCQkJCSAgZ2ZwX21hc2ssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCisJCQkJICBub2RlLCBnZnBfbWFzaywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQpAQCAtMTQwMyw3ICsxNDAzLDggQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hcCk7CiAKLXN0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAorc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgICBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKIAkJCSAgICBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKTsKIHN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLAogCQkJCSBwZ3Byb3RfdCBwcm90LCBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQpAQCAtMTQxNyw3ICsxNDE4LDcgQEAKIAlhcmVhLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwogCS8qIFBsZWFzZSBub3RlIHRoYXQgdGhlIHJlY3Vyc2lvbiBpcyBzdHJpY3RseSBib3VuZGVkLiAqLwogCWlmIChhcnJheV9zaXplID4gUEFHRV9TSVpFKSB7Ci0JCXBhZ2VzID0gX192bWFsbG9jX25vZGUoYXJyYXlfc2l6ZSwgZ2ZwX21hc2sgfCBfX0dGUF9aRVJPLAorCQlwYWdlcyA9IF9fdm1hbGxvY19ub2RlKGFycmF5X3NpemUsIDEsIGdmcF9tYXNrIHwgX19HRlBfWkVSTywKIAkJCQlQQUdFX0tFUk5FTCwgbm9kZSwgY2FsbGVyKTsKIAkJYXJlYS0+ZmxhZ3MgfD0gVk1fVlBBR0VTOwogCX0gZWxzZSB7CkBAIC0xNDc2LDYgKzE0NzcsNyBAQAogLyoqCiAgKglfX3ZtYWxsb2Nfbm9kZSAgLSAgYWxsb2NhdGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5CiAgKglAc2l6ZToJCWFsbG9jYXRpb24gc2l6ZQorICoJQGFsaWduOgkJZGVzaXJlZCBhbGlnbm1lbnQKICAqCUBnZnBfbWFzazoJZmxhZ3MgZm9yIHRoZSBwYWdlIGxldmVsIGFsbG9jYXRvcgogICoJQHByb3Q6CQlwcm90ZWN0aW9uIG1hc2sgZm9yIHRoZSBhbGxvY2F0ZWQgcGFnZXMKICAqCUBub2RlOgkJbm9kZSB0byB1c2UgZm9yIGFsbG9jYXRpb24gb3IgLTEKQEAgLTE0ODUsOCArMTQ4Nyw5IEBACiAgKglhbGxvY2F0b3Igd2l0aCBAZ2ZwX21hc2sgZmxhZ3MuICBNYXAgdGhlbSBpbnRvIGNvbnRpZ3VvdXMKICAqCWtlcm5lbCB2aXJ0dWFsIHNwYWNlLCB1c2luZyBhIHBhZ2V0YWJsZSBwcm90ZWN0aW9uIG9mIEBwcm90LgogICovCi1zdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKLQkJCQkJCWludCBub2RlLCB2b2lkICpjYWxsZXIpCitzdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJICAgIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAorCQkJICAgIGludCBub2RlLCB2b2lkICpjYWxsZXIpCiB7CiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKIAl2b2lkICphZGRyOwpAQCAtMTQ5Niw4ICsxNDk5LDggQEAKIAlpZiAoIXNpemUgfHwgKHNpemUgPj4gUEFHRV9TSElGVCkgPiB0b3RhbHJhbV9wYWdlcykKIAkJcmV0dXJuIE5VTEw7CiAKLQlhcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIFZNX0FMTE9DLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKLQkJCQkJCW5vZGUsIGdmcF9tYXNrLCBjYWxsZXIpOworCWFyZWEgPSBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgYWxpZ24sIFZNX0FMTE9DLCBWTUFMTE9DX1NUQVJULAorCQkJCSAgVk1BTExPQ19FTkQsIG5vZGUsIGdmcF9tYXNrLCBjYWxsZXIpOwogCiAJaWYgKCFhcmVhKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE1MTYsNyArMTUxOSw3IEBACiAKIHZvaWQgKl9fdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90KQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBnZnBfbWFzaywgcHJvdCwgLTEsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIGdmcF9tYXNrLCBwcm90LCAtMSwKIAkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChfX3ZtYWxsb2MpOwpAQCAtMTUzMiw3ICsxNTM1LDcgQEAKICAqLwogdm9pZCAqdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCwKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMLAogCQkJCQktMSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvYyk7CkBAIC0xNTQ5LDcgKzE1NTIsOCBAQAogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdm9pZCAqcmV0OwogCi0JcmV0ID0gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPLAorCXJldCA9IF9fdm1hbGxvY19ub2RlKHNpemUsIFNITUxCQSwKKwkJCSAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPLAogCQkJICAgICBQQUdFX0tFUk5FTCwgLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJaWYgKHJldCkgewogCQlhcmVhID0gZmluZF92bV9hcmVhKHJldCk7CkBAIC0xNTcyLDcgKzE1NzYsNyBAQAogICovCiB2b2lkICp2bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMLAorCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCAxLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUwsCiAJCQkJCW5vZGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHZtYWxsb2Nfbm9kZSk7CkBAIC0xNTk1LDcgKzE1OTksNyBAQAogCiB2b2lkICp2bWFsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUxfRVhFQywKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMX0VYRUMsCiAJCQkgICAgICAtMSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIApAQCAtMTYxNiw3ICsxNjIwLDcgQEAKICAqLwogdm9pZCAqdm1hbGxvY18zMih1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9WTUFMTE9DMzIsIFBBR0VfS0VSTkVMLAorCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCAxLCBHRlBfVk1BTExPQzMyLCBQQUdFX0tFUk5FTCwKIAkJCSAgICAgIC0xLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTCh2bWFsbG9jXzMyKTsKQEAgLTE2MzMsNyArMTYzNyw3IEBACiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKIAl2b2lkICpyZXQ7CiAKLQlyZXQgPSBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfVk1BTExPQzMyIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwsCisJcmV0ID0gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMLAogCQkJICAgICAtMSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlpZiAocmV0KSB7CiAJCWFyZWEgPSBmaW5kX3ZtX2FyZWEocmV0KTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMTIxOWNlYi4uNzc3YWY1NyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTU0NCw2ICs1NDQsMTYgQEAKIAkJICovCiAJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKIAkJYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChwYWdlKTsKKwkJLyoKKwkJICogV2hlbiByYWNpbmcgd2l0aCBhbiBtbG9jayBjbGVhcmluZyAocGFnZSBpcworCQkgKiB1bmxvY2tlZCksIG1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBvdGhlciB0aHJlYWQgZG9lcworCQkgKiBub3Qgb2JzZXJ2ZSBvdXIgc2V0dGluZyBvZiBQR19scnUgYW5kIGZhaWxzCisJCSAqIGlzb2xhdGlvbiwgd2Ugc2VlIFBHX21sb2NrZWQgY2xlYXJlZCBiZWxvdyBhbmQgbW92ZQorCQkgKiB0aGUgcGFnZSBiYWNrIHRvIHRoZSBldmljdGFibGUgbGlzdC4KKwkJICoKKwkJICogVGhlIG90aGVyIHNpZGUgaXMgVGVzdENsZWFyUGFnZU1sb2NrZWQoKS4KKwkJICovCisJCXNtcF9tYigpOwogCX0KIAogCS8qCkBAIC0xMDg4LDcgKzEwOTgsNyBAQAogCWludCBsdW1weV9yZWNsYWltID0gMDsKIAogCXdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZCh6b25lLCBmaWxlLCBzYykpKSB7Ci0JCWNvbmdlc3Rpb25fd2FpdChXUklURSwgSFovMTApOworCQljb25nZXN0aW9uX3dhaXQoQkxLX1JXX0FTWU5DLCBIWi8xMCk7CiAKIAkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwogCQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCkBAIC0xMzU2LDcgKzEzNjYsNyBAQAogCQkJICogSU8sIHBsdXMgSlZNIGNhbiBjcmVhdGUgbG90cyBvZiBhbm9uIFZNX0VYRUMgcGFnZXMsCiAJCQkgKiBzbyB3ZSBpZ25vcmUgdGhlbSBoZXJlLgogCQkJICovCi0JCQlpZiAoKHZtX2ZsYWdzICYgVk1fRVhFQykgJiYgIVBhZ2VBbm9uKHBhZ2UpKSB7CisJCQlpZiAoKHZtX2ZsYWdzICYgVk1fRVhFQykgJiYgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKSB7CiAJCQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJmxfYWN0aXZlKTsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTE3MDksMTAgKzE3MTksMTAgQEAKICAqCiAgKiBJZiB0aGUgY2FsbGVyIGlzICFfX0dGUF9GUyB0aGVuIHRoZSBwcm9iYWJpbGl0eSBvZiBhIGZhaWx1cmUgaXMgcmVhc29uYWJseQogICogaGlnaCAtIHRoZSB6b25lIG1heSBiZSBmdWxsIG9mIGRpcnR5IG9yIHVuZGVyLXdyaXRlYmFjayBwYWdlcywgd2hpY2ggdGhpcwotICogY2FsbGVyIGNhbid0IGRvIG11Y2ggYWJvdXQuICBXZSBraWNrIHBkZmx1c2ggYW5kIHRha2UgZXhwbGljaXQgbmFwcyBpbiB0aGUKLSAqIGhvcGUgdGhhdCBzb21lIG9mIHRoZXNlIHBhZ2VzIGNhbiBiZSB3cml0dGVuLiAgQnV0IGlmIHRoZSBhbGxvY2F0aW5nIHRhc2sKLSAqIGhvbGRzIGZpbGVzeXN0ZW0gbG9ja3Mgd2hpY2ggcHJldmVudCB3cml0ZW91dCB0aGlzIG1pZ2h0IG5vdCB3b3JrLCBhbmQgdGhlCi0gKiBhbGxvY2F0aW9uIGF0dGVtcHQgd2lsbCBmYWlsLgorICogY2FsbGVyIGNhbid0IGRvIG11Y2ggYWJvdXQuICBXZSBraWNrIHRoZSB3cml0ZWJhY2sgdGhyZWFkcyBhbmQgdGFrZSBleHBsaWNpdAorICogbmFwcyBpbiB0aGUgaG9wZSB0aGF0IHNvbWUgb2YgdGhlc2UgcGFnZXMgY2FuIGJlIHdyaXR0ZW4uICBCdXQgaWYgdGhlCisgKiBhbGxvY2F0aW5nIHRhc2sgaG9sZHMgZmlsZXN5c3RlbSBsb2NrcyB3aGljaCBwcmV2ZW50IHdyaXRlb3V0IHRoaXMgbWlnaHQgbm90CisgKiB3b3JrLCBhbmQgdGhlIGFsbG9jYXRpb24gYXR0ZW1wdCB3aWxsIGZhaWwuCiAgKgogICogcmV0dXJuczoJMCwgaWYgbm8gcGFnZXMgcmVjbGFpbWVkCiAgKiAJCWVsc2UsIHRoZSBudW1iZXIgb2YgcGFnZXMgcmVjbGFpbWVkCmRpZmYgLS1naXQgYS9uZXQvOXAvY2xpZW50LmMgYi9uZXQvOXAvY2xpZW50LmMKaW5kZXggNWJmNWYyMi4uOGFmOTViMiAxMDA2NDQKLS0tIGEvbmV0LzlwL2NsaWVudC5jCisrKyBiL25ldC85cC9jbGllbnQuYwpAQCAtNTgyLDExICs1ODIsOSBAQAogCiAJbWVtc2V0KCZmaWQtPnFpZCwgMCwgc2l6ZW9mKHN0cnVjdCBwOV9xaWQpKTsKIAlmaWQtPm1vZGUgPSAtMTsKLQlmaWQtPnJkaXJfZnBvcyA9IDA7CiAJZmlkLT51aWQgPSBjdXJyZW50X2ZzdWlkKCk7CiAJZmlkLT5jbG50ID0gY2xudDsKLQlmaWQtPmF1eCA9IE5VTEw7Ci0KKwlmaWQtPnJkaXIgPSBOVUxMOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG50LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGQoJmZpZC0+Zmxpc3QsICZjbG50LT5maWRsaXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG50LT5sb2NrLCBmbGFncyk7CkBAIC02MDksNiArNjA3LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xudC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZmaWQtPmZsaXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG50LT5sb2NrLCBmbGFncyk7CisJa2ZyZWUoZmlkLT5yZGlyKTsKIAlrZnJlZShmaWQpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKaW5kZXggYjJlMDdmMC4uZWExZTNkYSAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCisrKyBiL25ldC85cC90cmFuc192aXJ0aW8uYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fOXAuaD4KIAogI2RlZmluZSBWSVJUUVVFVUVfTlVNCTEyOApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCA2ZWI4ZDQ3Li41NGM2MzRmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMzYzLDYgKzM2Myw3IEBACiAJCQkJICAqIGRldmljZSBuYW1lIChub3Qgd2hlbiB0aGUgaW5qZWN0IGlzCiAJCQkJICAqIHN0YXJ0ZWQgYXMgaXQgdXNlZCB0byBkby4pCiAJCQkJICAqLworCWNoYXIgb2Rldm5hbWVbMzJdOwogCXN0cnVjdCBmbG93X3N0YXRlICpmbG93czsKIAl1bnNpZ25lZCBjZmxvd3M7CS8qIENvbmN1cnJlbnQgZmxvd3MgKGNvbmZpZykgKi8KIAl1bnNpZ25lZCBsZmxvdzsJCS8qIEZsb3cgbGVuZ3RoICAoY29uZmlnKSAqLwpAQCAtNTI4LDcgKzUyOSw3IEBACiAJc2VxX3ByaW50ZihzZXEsCiAJCSAgICIgICAgIGZyYWdzOiAlZCAgZGVsYXk6ICVsbHUgIGNsb25lX3NrYjogJWQgIGlmbmFtZTogJXNcbiIsCiAJCSAgIHBrdF9kZXYtPm5mcmFncywgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0+ZGVsYXksCi0JCSAgIHBrdF9kZXYtPmNsb25lX3NrYiwgcGt0X2Rldi0+b2Rldi0+bmFtZSk7CisJCSAgIHBrdF9kZXYtPmNsb25lX3NrYiwgcGt0X2Rldi0+b2Rldm5hbWUpOwogCiAJc2VxX3ByaW50ZihzZXEsICIgICAgIGZsb3dzOiAldSBmbG93bGVuOiAldVxuIiwgcGt0X2Rldi0+Y2Zsb3dzLAogCQkgICBwa3RfZGV2LT5sZmxvdyk7CkBAIC0xNjg4LDEzICsxNjg5LDEzIEBACiAJaWZfbG9jayh0KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KQogCQlpZiAocGt0X2Rldi0+cnVubmluZykKLQkJCXNlcV9wcmludGYoc2VxLCAiJXMgIiwgcGt0X2Rldi0+b2Rldi0+bmFtZSk7CisJCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXZuYW1lKTsKIAogCXNlcV9wcmludGYoc2VxLCAiXG5TdG9wcGVkOiAiKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpCiAJCWlmICghcGt0X2Rldi0+cnVubmluZykKLQkJCXNlcV9wcmludGYoc2VxLCAiJXMgIiwgcGt0X2Rldi0+b2Rldi0+bmFtZSk7CisJCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXZuYW1lKTsKIAogCWlmICh0LT5yZXN1bHRbMF0pCiAJCXNlcV9wcmludGYoc2VxLCAiXG5SZXN1bHQ6ICVzXG4iLCB0LT5yZXN1bHQpOwpAQCAtMTk5NCw3ICsxOTk1LDcgQEAKIAkJICAgICAgICJxdWV1ZV9tYXBfbWluICh6ZXJvLWJhc2VkKSAoJWQpIGV4Y2VlZHMgdmFsaWQgcmFuZ2UgIgogCQkgICAgICAgIlswIC0gJWRdIGZvciAoJWQpIHF1ZXVlcyBvbiAlcywgcmVzZXR0aW5nXG4iLAogCQkgICAgICAgcGt0X2Rldi0+cXVldWVfbWFwX21pbiwgKG50eHEgPzogMSkgLSAxLCBudHhxLAotCQkgICAgICAgcGt0X2Rldi0+b2Rldi0+bmFtZSk7CisJCSAgICAgICBwa3RfZGV2LT5vZGV2bmFtZSk7CiAJCXBrdF9kZXYtPnF1ZXVlX21hcF9taW4gPSBudHhxIC0gMTsKIAl9CiAJaWYgKHBrdF9kZXYtPnF1ZXVlX21hcF9tYXggPj0gbnR4cSkgewpAQCAtMjAwMiw3ICsyMDAzLDcgQEAKIAkJICAgICAgICJxdWV1ZV9tYXBfbWF4ICh6ZXJvLWJhc2VkKSAoJWQpIGV4Y2VlZHMgdmFsaWQgcmFuZ2UgIgogCQkgICAgICAgIlswIC0gJWRdIGZvciAoJWQpIHF1ZXVlcyBvbiAlcywgcmVzZXR0aW5nXG4iLAogCQkgICAgICAgcGt0X2Rldi0+cXVldWVfbWFwX21heCwgKG50eHEgPzogMSkgLSAxLCBudHhxLAotCQkgICAgICAgcGt0X2Rldi0+b2Rldi0+bmFtZSk7CisJCSAgICAgICBwa3RfZGV2LT5vZGV2bmFtZSk7CiAJCXBrdF9kZXYtPnF1ZXVlX21hcF9tYXggPSBudHhxIC0gMTsKIAl9CiAKQEAgLTMyNjIsNyArMzI2Myw3IEBACiAKIAlpZiAoIXBrdF9kZXYtPnJ1bm5pbmcpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGt0Z2VuOiBpbnRlcmZhY2U6ICVzIGlzIGFscmVhZHkgIgotCQkgICAgICAgInN0b3BwZWRcbiIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICAgICAgInN0b3BwZWRcbiIsIHBrdF9kZXYtPm9kZXZuYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNDY0LDcgKzM0NjUsNyBAQAogCWRlZmF1bHQ6IC8qIERyaXZlcnMgYXJlIG5vdCBzdXBwb3NlZCB0byByZXR1cm4gb3RoZXIgdmFsdWVzISAqLwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJfaW5mbygicGt0Z2VuOiAlcyB4bWl0IGVycm9yOiAlZFxuIiwKLQkJCQlvZGV2LT5uYW1lLCByZXQpOworCQkJCXBrdF9kZXYtPm9kZXZuYW1lLCByZXQpOwogCQlwa3RfZGV2LT5lcnJvcnMrKzsKIAkJLyogZmFsbHRocnUgKi8KIAljYXNlIE5FVERFVl9UWF9MT0NLRUQ6CkBAIC0zNTcyLDcgKzM1NzMsNyBAQAogCWlmX2xvY2sodCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZ0LT5pZl9saXN0LCBsaXN0KQotCQlpZiAoc3RybmNtcChwLT5vZGV2LT5uYW1lLCBpZm5hbWUsIElGTkFNU0laKSA9PSAwKSB7CisJCWlmIChzdHJuY21wKHAtPm9kZXZuYW1lLCBpZm5hbWUsIElGTkFNU0laKSA9PSAwKSB7CiAJCQlwa3RfZGV2ID0gcDsKIAkJCWJyZWFrOwogCQl9CkBAIC0zNjI4LDYgKzM2MjksNyBAQAogCWlmICghcGt0X2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzdHJjcHkocGt0X2Rldi0+b2Rldm5hbWUsIGlmbmFtZSk7CiAJcGt0X2Rldi0+Zmxvd3MgPSB2bWFsbG9jKE1BWF9DRkxPV1MgKiBzaXplb2Yoc3RydWN0IGZsb3dfc3RhdGUpKTsKIAlpZiAocGt0X2Rldi0+Zmxvd3MgPT0gTlVMTCkgewogCQlrZnJlZShwa3RfZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKaW5kZXggZWFmYzAxMC4uM2MxNzU0MCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lybG1wLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCmluZGV4IDYyMTE2ODIuLjMxNWVhZDMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggN2I2YjYzMS4uZDM0MDExMCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9pcmRhLmMgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9pcmRhLmMKaW5kZXggY2Y5YTRiNS4uY2NjYzJlOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0X2lyZGEuYwpAQCAtOSw2ICs5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiaXJuZXRfaXJkYS5oIgkJLyogUHJpdmF0ZSBoZWFkZXIgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCmluZGV4IDY4Y2JjYjEuLjdkZWE4ODIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKgkyKSBhcyBhIGNvbnRyb2wgY2hhbm5lbCAod3JpdGUgY29tbWFuZHMsIHJlYWQgZXZlbnRzKQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSAiaXJuZXRfcHBwLmgiCQkvKiBQcml2YXRlIGhlYWRlciAqLwogLyogUGxlYXNlIHB1dCBvdGhlciBoZWFkZXJzIGluIGlybmV0LmggLSBUaGFua3MgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9kZWJ1Z2ZzLmMgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCmluZGV4IGE1OTA0M2ZiLi40NTY2NzA1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9kZWJ1Z2ZzLmMKQEAgLTYsNiArNiw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCAwY2RmYjM4Li5iOTE2OGMxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCBjOTM0OTRmLi5kNjVkMzQ4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTEyOCw5ICsxMjgsOCBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkICpzZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotCV9fYWNxdWlyZXMoUkNVKQogewotCXJjdV9yZWFkX2xvY2soKTsKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCiAJaWYgKCpwb3MgPj0gQVJSQVlfU0laRShuZl9sb2dnZXJzKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNDksOSArMTQ4LDggQEAKIH0KIAogc3RhdGljIHZvaWQgc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQotCV9fcmVsZWFzZXMoUkNVKQogewotCXJjdV9yZWFkX3VubG9jaygpOworCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKIH0KIAogc3RhdGljIGludCBzZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCkBAIC0xNjEsNyArMTU5LDcgQEAKIAlzdHJ1Y3QgbmZfbG9nZ2VyICp0OwogCWludCByZXQ7CiAKLQlsb2dnZXIgPSByY3VfZGVyZWZlcmVuY2UobmZfbG9nZ2Vyc1sqcG9zXSk7CisJbG9nZ2VyID0gbmZfbG9nZ2Vyc1sqcG9zXTsKIAogCWlmICghbG9nZ2VyKQogCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIlMmxsZCBOT05FICgiLCAqcG9zKTsKQEAgLTE3MSwyMiArMTY5LDE2IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm5mX2xvZ2dlcnNfbFsqcG9zXSwgbGlzdFsqcG9zXSkgewogCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIlcyIsIHQtPm5hbWUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KIAkJaWYgKCZ0LT5saXN0Wypwb3NdICE9IG5mX2xvZ2dlcnNfbFsqcG9zXS5wcmV2KSB7CiAJCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIsIik7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7Ci0JCQl9CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCiAJcmV0dXJuIHNlcV9wcmludGYocywgIilcbiIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCmluZGV4IDJlODA4OWUuLjI3NzNiZTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHByaXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBmYWxzZTsKIAogCS8qIEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCBvZiBzdGF0ZS4gKi8KIAlyLT5tYXN0ZXIgPSBwcml2OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9vc2YuYyBiL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKaW5kZXggNjNlMTkwNS4uNGQxYTQxYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9vc2YuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIHsKIAlzdHJ1Y3QgeHRfb3NmX3VzZXJfZmluZ2VyICpmOwogCXN0cnVjdCB4dF9vc2ZfZmluZ2VyICpzZjsKLQlpbnQgZXJyID0gRU5PRU5UOworCWludCBlcnIgPSAtRU5PRU5UOwogCiAJaWYgKCFvc2ZfYXR0cnNbT1NGX0FUVFJfRklOR0VSXSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCA0OGIxOGRhLi5mMmQxMTZhIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTIwODEsNyArMjA4MSw3IEBACiAJCWF0b21pY19kZWMoJnBrdF9zayhzayktPm1hcHBlZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGFja2V0X21tYXBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwYWNrZXRfbW1hcF9vcHMgPSB7CiAJLm9wZW4JPQlwYWNrZXRfbW1fb3BlbiwKIAkuY2xvc2UJPQlwYWNrZXRfbW1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3Jma2lsbC9jb3JlLmMgYi9uZXQvcmZraWxsL2NvcmUuYwppbmRleCA3Y2I1N2ZmLi5hMDAxZjdjIDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL2NvcmUuYworKysgYi9uZXQvcmZraWxsL2NvcmUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKaW5kZXggMGNmNWU4Yy4uM2ZhNTc1MSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Y194cHJ0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3JwY19yZG1hLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KICNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IDQ1YjJiZTMuLmE1OTVmNzEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAibmw4MDIxMS5oIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCmluZGV4IDljZjgwYTEuLjI2ZmFiMzMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYworKysgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAlyZXR1cm4gLUVQRVJNOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXJrX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1hcmtfb3BzID0gewogCS5vcGVuID0gbXlfb3BlbiwKIH07CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCmluZGV4IDRmOWMxOTAuLmM2N2U3M2UgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKKysrIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQpAQCAtMTAwLDcgKzEwMCw3IEBACiAjIFVzYWdlOiBjZmxhZ3MteSArPSAkKGNhbGwgYXMtaW5zdHIsaW5zdHIsb3B0aW9uMSxvcHRpb24yKQogCiBhcy1pbnN0ciA9ICQoY2FsbCB0cnktcnVuLFwKLQllY2hvIC1lICIkKDEpIiB8ICQoQ0MpICQoS0JVSUxEX0FGTEFHUykgLWMgLXhhc3NlbWJsZXIgLW8gIiQkVE1QIiAtLCQoMiksJCgzKSkKKwkvYmluL2VjaG8gLWUgIiQoMSkiIHwgJChDQykgJChLQlVJTERfQUZMQUdTKSAtYyAteGFzc2VtYmxlciAtbyAiJCRUTVAiIC0sJCgyKSwkKDMpKQogCiAjIGNjLW9wdGlvbgogIyBVc2FnZTogY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9d2luY2hpcC1jNiwtbWFyY2g9aTU4NikKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggN2E3Nzc4Ny4uZmZkYWZiMiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTIwOCw3ICsyMDgsNyBAQAogCiAjIEJ6aXAyIGFuZCBMWk1BIGRvIG5vdCBpbmNsdWRlIHNpemUgaW4gZmlsZS4uLiBzbyB3ZSBoYXZlIHRvIGZha2UgdGhhdDsKICMgYXBwZW5kIHRoZSBzaXplIGFzIGEgMzItYml0IGxpdHRsZWVuZGlhbiBudW1iZXIgYXMgZ3ppcCBkb2VzLgotc2l6ZV9hcHBlbmQgPSBlY2hvIC1uZSAkKHNoZWxsCQkJCQkJXAorc2l6ZV9hcHBlbmQgPSAvYmluL2VjaG8gLW5lICQoc2hlbGwJCQkJCVwKIGRlY19zaXplPTA7CQkJCQkJCQlcCiBmb3IgRiBpbiAkMTsgZG8JCQkJCQkJCVwKIAlmc2l6ZT0kJChzdGF0IC1jICIlcyIgJCRGKTsJCQkJCVwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaCBiL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaAppbmRleCAzOTY3N2M4Li40NmJlM2M1IDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNra2NvbmZpZ3N5bWJvbHMuc2gKKysrIGIvc2NyaXB0cy9jaGVja2tjb25maWdzeW1ib2xzLnNoCkBAIC05LDcgKzksNyBAQAogIyBEb2luZyB0aGlzIG9uY2UgYXQgdGhlIGJlZ2lubmluZyBzYXZlcyBhIGxvdCBvZiB0aW1lLCBvbiBhIGNhY2hlLWhvdCB0cmVlLgogS2NvbmZpZ3M9ImBmaW5kIC4gLW5hbWUgJ0tjb25maWcnIC1vIC1uYW1lICdLY29uZmlnKltefl0nYCIKIAotZWNobyAtZSAiRmlsZSBsaXN0IFx0dW5kZWZpbmVkIHN5bWJvbCB1c2VkIgorL2Jpbi9lY2hvIC1lICJGaWxlIGxpc3QgXHR1bmRlZmluZWQgc3ltYm9sIHVzZWQiCiBmaW5kICRwYXRocyAtbmFtZSAnKi5bY2hTXScgLW8gLW5hbWUgJ01ha2VmaWxlJyAtbyAtbmFtZSAnTWFrZWZpbGUqW15+XSd8IHdoaWxlIHJlYWQgaQogZG8KIAkjIE91dHB1dCB0aGUgYmFyZSBLY29uZmlnIHZhcmlhYmxlIGFuZCB0aGUgZmlsZW5hbWU7IHRoZSBfTU9EVUxFIHBhcnQgYXQKQEAgLTU0LDYgKzU0LDYgQEAKIAkjIGJleW9uZCB0aGUgcHVycG9zZSBvZiB0aGlzIHNjcmlwdC4KIAlzeW1iX2JhcmU9YGVjaG8gJHN5bWIgfCBzZWQgLWUgJ3MvX01PRFVMRS8vJ2AKIAlpZiAhIGdyZXAgLXEgIlw8JHN5bWJfYmFyZVw+IiAkS2NvbmZpZ3M7IHRoZW4KLQkJZWNobyAtZSAiJGZpbGVzOiBcdCRzeW1iIgorCQkvYmluL2VjaG8gLWUgIiRmaWxlczogXHQkc3ltYiIKIAlmaQogZG9uZXxzb3J0CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggODdiYmI4Yi4uYmM0MTE0ZiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMiw3ICsyLDcgQEAKICMgKGMpIDIwMDEsIERhdmUgSm9uZXMuIDxkYXZlakByZWRoYXQuY29tPiAodGhlIGZpbGUgaGFuZGxpbmcgYml0KQogIyAoYykgMjAwNSwgSm9lbCBTY2hvcHAgPGpzY2hvcHBAYXVzdGluLmlibS5jb20+ICh0aGUgdWdseSBiaXQpCiAjIChjKSAyMDA3LDIwMDgsIEFuZHkgV2hpdGNyb2Z0IDxhcHdAdWsuaWJtLmNvbT4gKG5ldyBjb25kaXRpb25zLCB0ZXN0IHN1aXRlKQotIyAoYykgMjAwOCwgQW5keSBXaGl0Y3JvZnQgPGFwd0BjYW5vbmljYWwuY29tPgorIyAoYykgMjAwOCwyMDA5LCBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CiAjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgogCiB1c2Ugc3RyaWN0OwpAQCAtMTAsNyArMTAsNyBAQAogbXkgJFAgPSAkMDsKICRQID1+IHNALiovQEBnOwogCi1teSAkViA9ICcwLjI5JzsKK215ICRWID0gJzAuMzAnOwogCiB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOwogCkBAIC0xMzAsNyArMTMwLDEwIEBACiAKIG15ICRlbWl0dGVkX2NvcnJ1cHQgPSAwOwogCi1vdXIgJElkZW50ICAgICAgID0gcXJ7W0EtWmEtel9dW0EtWmEtelxkX10qfTsKK291ciAkSWRlbnQJPSBxcnsKKwkJCVtBLVphLXpfXVtBLVphLXpcZF9dKgorCQkJKD86XHMqXCNcI1xzKltBLVphLXpfXVtBLVphLXpcZF9dKikqCisJCX14Owogb3VyICRTdG9yYWdlCT0gcXJ7ZXh0ZXJufHN0YXRpY3xhc21saW5rYWdlfTsKIG91ciAkU3BhcnNlCT0gcXJ7CiAJCQlfX3VzZXJ8CkBAIC05OTcsMjMgKzEwMDAsMjUgQEAKIAogc3ViIHBvc3NpYmxlIHsKIAlteSAoJHBvc3NpYmxlLCAkbGluZSkgPSBAXzsKLQotCXByaW50ICJDSEVDSzwkcG9zc2libGU+ICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUgPiAyKTsKLQlpZiAoJHBvc3NpYmxlICF+IC8oPzoKKwlteSAkbm90UGVybWl0dGVkID0gcXJ7KD86CiAJCV4oPzoKIAkJCSRNb2RpZmllcnwKIAkJCSRTdG9yYWdlfAogCQkJJFR5cGV8Ci0JCQlERUZJTkVfXFMrfAorCQkJREVGSU5FX1xTKworCQkpJHwKKwkJXig/OgogCQkJZ290b3wKIAkJCXJldHVybnwKIAkJCWNhc2V8CiAJCQllbHNlfAogCQkJYXNtfF9fYXNtX198CiAJCQlkbwotCQkpJHwKKwkJKSg/OlxzfCQpfAogCQleKD86dHlwZWRlZnxzdHJ1Y3R8ZW51bSlcYgotCSAgICApL3gpIHsKKwkgICAgKX14OworCXdhcm4gIkNIRUNLPCRwb3NzaWJsZT4gKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDIpOworCWlmICgkcG9zc2libGUgIX4gJG5vdFBlcm1pdHRlZCkgewogCQkjIENoZWNrIGZvciBtb2RpZmllcnMuCiAJCSRwb3NzaWJsZSA9fiBzL1xzKiRTdG9yYWdlXHMqLy9nOwogCQkkcG9zc2libGUgPX4gcy9ccyokU3BhcnNlXHMqLy9nOwpAQCAtMTAyMiw4ICsxMDI3LDEwIEBACiAJCX0gZWxzaWYgKCRwb3NzaWJsZSA9fiAvXHMvKSB7CiAJCQkkcG9zc2libGUgPX4gcy9ccyokVHlwZVxzKi8vZzsKIAkJCWZvciBteSAkbW9kaWZpZXIgKHNwbGl0KCcgJywgJHBvc3NpYmxlKSkgewotCQkJCXdhcm4gIk1PRElGSUVSOiAkbW9kaWZpZXIgKCRwb3NzaWJsZSkgKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSk7Ci0JCQkJcHVzaChAbW9kaWZpZXJMaXN0LCAkbW9kaWZpZXIpOworCQkJCWlmICgkbW9kaWZpZXIgIX4gJG5vdFBlcm1pdHRlZCkgeworCQkJCQl3YXJuICJNT0RJRklFUjogJG1vZGlmaWVyICgkcG9zc2libGUpICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUpOworCQkJCQlwdXNoKEBtb2RpZmllckxpc3QsICRtb2RpZmllcik7CisJCQkJfQogCQkJfQogCiAJCX0gZWxzZSB7CkBAIC0xMTM4LDYgKzExNDUsNyBAQAogCSMgc3VwcHJlc3Npb24gZmxhZ3MKIAlteSAlc3VwcHJlc3NfaWZicmFjZXM7CiAJbXkgJXN1cHByZXNzX3doaWxldHJhaWxlcnM7CisJbXkgJXN1cHByZXNzX2V4cG9ydDsKIAogCSMgUHJlLXNjYW4gdGhlIHBhdGNoIHNhbml0aXppbmcgdGhlIGxpbmVzLgogCSMgUHJlLXNjYW4gdGhlIHBhdGNoIGxvb2tpbmcgZm9yIGFueSBfX3NldHVwIGRvY3VtZW50YXRpb24uCkBAIC0xMjMwLDcgKzEyMzgsNiBAQAogCQkkbGluZW5yKys7CiAKIAkJbXkgJHJhd2xpbmUgPSAkcmF3bGluZXNbJGxpbmVuciAtIDFdOwotCQlteSAkaHVua19saW5lID0gKCRyZWFsY250ICE9IDApOwogCiAjZXh0cmFjdCB0aGUgbGluZSByYW5nZSBpbiB0aGUgZmlsZSBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZAogCQlpZiAoJGxpbmU9fi9eXEBcQCAtXGQrKD86LFxkKyk/IFwrKFxkKykoLChcZCspKT8gXEBcQC8pIHsKQEAgLTEyNDcsNiArMTI1NCw3IEBACiAKIAkJCSVzdXBwcmVzc19pZmJyYWNlcyA9ICgpOwogCQkJJXN1cHByZXNzX3doaWxldHJhaWxlcnMgPSAoKTsKKwkJCSVzdXBwcmVzc19leHBvcnQgPSAoKTsKIAkJCW5leHQ7CiAKICMgdHJhY2sgdGhlIGxpbmUgbnVtYmVyIGFzIHdlIG1vdmUgdGhyb3VnaCB0aGUgaHVuaywgbm90ZSB0aGF0CkBAIC0xMjcwLDYgKzEyNzgsOCBAQAogCQkJJHJlYWxjbnQtLTsKIAkJfQogCisJCW15ICRodW5rX2xpbmUgPSAoJHJlYWxjbnQgIT0gMCk7CisKICNtYWtlIHVwIHRoZSBoYW5kbGUgZm9yIGFueSBlcnJvciB3ZSByZXBvcnQgb24gdGhpcyBsaW5lCiAJCSRwcmVmaXggPSAiJGZpbGVuYW1lOiRyZWFsbGluZTogIiBpZiAoJGVtYWNzICYmICRmaWxlKTsKIAkJJHByZWZpeCA9ICIkZmlsZW5hbWU6JGxpbmVucjogIiBpZiAoJGVtYWNzICYmICEkZmlsZSk7CkBAIC0xNDIwLDEzICsxNDMwLDIyIEBACiAJCX0KIAogIyBDaGVjayBmb3IgcG90ZW50aWFsICdiYXJlJyB0eXBlcwotCQlteSAoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCk7CisJCW15ICgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0LAorCQkgICAgJHJlYWxsaW5lX25leHQpOwogCQlpZiAoJHJlYWxjbnQgJiYgJGxpbmUgPX4gLy5ccypcUy8pIHsKIAkJCSgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KSA9CiAJCQkJY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkcmVhbGNudCwgMCk7CiAJCQkkc3RhdCA9fiBzL1xuLi9cbiAvZzsKIAkJCSRjb25kID1+IHMvXG4uL1xuIC9nOwogCisJCQkjIEZpbmQgdGhlIHJlYWwgbmV4dCBsaW5lLgorCQkJJHJlYWxsaW5lX25leHQgPSAkbGluZV9ucl9uZXh0OworCQkJaWYgKGRlZmluZWQgJHJlYWxsaW5lX25leHQgJiYKKwkJCSAgICAoIWRlZmluZWQgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gfHwKKwkJCSAgICAgc3Vic3RyKCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdLCAkb2ZmX25leHQpID1+IC9eXHMqJC8pKSB7CisJCQkJJHJlYWxsaW5lX25leHQrKzsKKwkJCX0KKwogCQkJbXkgJHMgPSAkc3RhdDsKIAkJCSRzID1+IHMvey4qJC8vczsKIApAQCAtMTY2MSw4ICsxNjgwLDggQEAKIAkJfQogCiAjIGNoZWNrIGZvciBpbml0aWFsaXNhdGlvbiB0byBhZ2dyZWdhdGVzIG9wZW4gYnJhY2Ugb24gdGhlIG5leHQgbGluZQotCQlpZiAoJHByZXZsaW5lID1+IC8kRGVjbGFyZVxzKiRJZGVudFxzKj1ccyokLyAmJgotCQkgICAgJGxpbmUgPX4gL14uXHMqey8pIHsKKwkJaWYgKCRsaW5lID1+IC9eLlxzKnsvICYmCisJCSAgICAkcHJldmxpbmUgPX4gLyg/Ol58W149XSk9XHMqJC8pIHsKIAkJCUVSUk9SKCJ0aGF0IG9wZW4gYnJhY2UgeyBzaG91bGQgYmUgb24gdGhlIHByZXZpb3VzIGxpbmVcbiIgLiAkaGVyZXByZXYpOwogCQl9CiAKQEAgLTE2ODcsMjEgKzE3MDYsNDAgQEAKIAkJJGxpbmUgPX4gc0AvLy4qQEA7CiAJCSRvcGxpbmUgPX4gc0AvLy4qQEA7CiAKLSNFWFBPUlRfU1lNQk9MIHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uIGNsb3NpbmcgfS4KLQkJaWYgKCgkbGluZSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvKSB8fAotCQkgICAgKCRsaW5lID1+IC9FWFBPUlRfVU5VU0VEX1NZTUJPTC4qXCgoLiopXCkvKSkgeworIyBFWFBPUlRfU1lNQk9MIHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgdGhlIHRoaW5nIGl0IGlzIGV4cG9ydGluZywgY29uc2lkZXIKKyMgdGhlIHdob2xlIHN0YXRlbWVudC4KKyNwcmludCAiQVBXIDwkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXT5cbiI7CisJCWlmIChkZWZpbmVkICRyZWFsbGluZV9uZXh0ICYmCisJCSAgICBleGlzdHMgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gJiYKKwkJICAgICFkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JHJlYWxsaW5lX25leHR9ICYmCisJCSAgICAoJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gPX4gL0VYUE9SVF9TWU1CT0wuKlwoKC4qKVwpLyB8fAorCQkgICAgICRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdID1+IC9FWFBPUlRfVU5VU0VEX1NZTUJPTC4qXCgoLiopXCkvKSkgewogCQkJbXkgJG5hbWUgPSAkMTsKLQkJCWlmICgkcHJldmxpbmUgIX4gLyg/OgotCQkJCV4ufXwKKwkJCWlmICgkc3RhdCAhfiAvKD86CisJCQkJXG4ufVxzKiR8CiAJCQkJXi5ERUZJTkVfJElkZW50XChcUSRuYW1lXEVcKXwKIAkJCQleLkRFQ0xBUkVfJElkZW50XChcUSRuYW1lXEVcKXwKIAkJCQleLkxJU1RfSEVBRFwoXFEkbmFtZVxFXCl8Ci0JCQkJXi4kVHlwZVxzKlwoXHMqXCpccypcUSRuYW1lXEVccypcKVxzKlwofAotCQkJCVxiXFEkbmFtZVxFKD86XHMrJEF0dHJpYnV0ZSk/XHMqKD86O3w9fFxbKQorCQkJCV4uKD86JFN0b3JhZ2VccyspPyRUeXBlXHMqXChccypcKlxzKlxRJG5hbWVcRVxzKlwpXHMqXCh8CisJCQkJXGJcUSRuYW1lXEUoPzpccyskQXR0cmlidXRlKSpccyooPzo7fD18XFt8XCgpCiAJCQkgICAgKS94KSB7Ci0JCQkJV0FSTigiRVhQT1JUX1NZTUJPTChmb28pOyBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbi92YXJpYWJsZVxuIiAuICRoZXJlY3Vycik7CisjcHJpbnQgIkZPTyBBPCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdPiBzdGF0PCRzdGF0PiBuYW1lPCRuYW1lPlxuIjsKKwkJCQkkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSA9IDI7CisJCQl9IGVsc2UgeworCQkJCSRzdXBwcmVzc19leHBvcnR7JHJlYWxsaW5lX25leHR9ID0gMTsKIAkJCX0KIAkJfQorCQlpZiAoIWRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSAmJgorCQkgICAgJHByZXZsaW5lID1+IC9eLlxzKiQvICYmCisJCSAgICAoJGxpbmUgPX4gL0VYUE9SVF9TWU1CT0wuKlwoKC4qKVwpLyB8fAorCQkgICAgICRsaW5lID1+IC9FWFBPUlRfVU5VU0VEX1NZTUJPTC4qXCgoLiopXCkvKSkgeworI3ByaW50ICJGT08gQiA8JGxpbmVzWyRsaW5lbnIgLSAxXT5cbiI7CisJCQkkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ID0gMjsKKwkJfQorCQlpZiAoZGVmaW5lZCAkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ICYmCisJCSAgICAkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ID09IDIpIHsKKwkJCVdBUk4oIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOworCQl9CiAKICMgY2hlY2sgZm9yIGV4dGVybmFsIGluaXRpYWxpc2Vycy4KIAkJaWYgKCRsaW5lID1+IC9eLiRUeXBlXHMqJElkZW50XHMqKD86XHMrJE1vZGlmaWVyKSpccyo9XHMqKDB8TlVMTHxmYWxzZSlccyo7LykgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvZGF0YS5jIGIvc2NyaXB0cy9kdGMvZGF0YS5jCmluZGV4IGRkMmUzZDMuLmZlNTU1ZTggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL2RhdGEuYworKysgYi9zY3JpcHRzL2R0Yy9kYXRhLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCXJldHVybiBkOwogfQogCi1zdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9tYXJrZXJzKHN0cnVjdCBkYXRhIGQsIHN0cnVjdCBtYXJrZXIgKm0pCitzdGF0aWMgc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfbWFya2VycyhzdHJ1Y3QgZGF0YSBkLCBzdHJ1Y3QgbWFya2VyICptKQogewogCXN0cnVjdCBtYXJrZXIgKiptcCA9ICZkLm1hcmtlcnM7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sIGIvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmwKaW5kZXggNDRkYmZkMy4uYTYyN2JiZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmwKKysrIGIvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmwKQEAgLTE4LDcgKzE4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQQogICovCiAKLSVvcHRpb24gbm95eXdyYXAgbm91bnB1dCB5eWxpbmVubworJW9wdGlvbiBub3l5d3JhcCBub2lucHV0IG5vdW5wdXQgeXlsaW5lbm8KIAogJXggSU5DTFVERQogJXggQllURVNUUklORwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQgYi9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZAppbmRleCBhYzM5MmNiLi5lMjdjYzYzIDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNAorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCiAjZGVmaW5lIEZMRVhfQkVUQQogI2VuZGlmCkBAIC01NCw3ICs1NCw2IEBACiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYgSU5UOF9NSU4KQEAgLTg1LDYgKzg0LDggQEAKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2VuZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE0MSw3ICsxNDIsMTUgQEAKIAogLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KICNpZm5kZWYgWVlfQlVGX1NJWkUKKyNpZmRlZiBfX2lhNjRfXworLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAxNmssIG5vdCA4ay4KKyAqIE1vcmVvdmVyLCBZWV9CVUZfU0laRSBpcyAyKllZX1JFQURfQlVGX1NJWkUgaW4gdGhlIGdlbmVyYWwgY2FzZS4KKyAqIERpdHRvIGZvciB0aGUgX19pYTY0X18gY2FzZSBhY2NvcmRpbmdseS4KKyAqLworI2RlZmluZSBZWV9CVUZfU0laRSAzMjc2OAorI2Vsc2UKICNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZiAvKiBfX2lhNjRfXyAqLwogI2VuZGlmCiAKIC8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCkBAIC0xOTIsMTMgKzIwMSw2IEBACiAKICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgKHl5dGV4dF9wdHIpICApCiAKLS8qIFRoZSBmb2xsb3dpbmcgaXMgYmVjYXVzZSB3ZSBjYW5ub3QgcG9ydGFibHkgZ2V0IG91ciBoYW5kcyBvbiBzaXplX3QKLSAqICh3aXRob3V0IGF1dG9jb25mJ3MgaGVscCwgd2hpY2ggaXNuJ3QgYXZhaWxhYmxlIGJlY2F1c2Ugd2Ugd2FudAotICogZmxleC1nZW5lcmF0ZWQgc2Nhbm5lcnMgdG8gY29tcGlsZSBvbiB0aGVpciBvd24pLgotICogR2l2ZW4gdGhhdCB0aGUgc3RhbmRhcmQgaGFzIGRlY3JlZWQgdGhhdCBzaXplX3QgZXhpc3RzIHNpbmNlIDE5ODksCi0gKiBJIGd1ZXNzIHdlIGNhbiBhZmZvcmQgdG8gZGVwZW5kIG9uIGl0LiBNYW5vai4KLSAqLwotCiAjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCiAjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCiB0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CkBAIC02MDQsNiArNjA2LDcgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBCiAgKi8KKyNkZWZpbmUgWVlfTk9fSU5QVVQgMQogCiAKIApAQCAtNjM0LDcgKzYzNyw3IEBACiAKIHN0YXRpYyB2b2lkIHB1c2hfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSk7CiBzdGF0aWMgaW50IHBvcF9pbnB1dF9maWxlKHZvaWQpOwotI2xpbmUgNjM4ICJkdGMtbGV4ZXIubGV4LmMiCisjbGluZSA2NDEgImR0Yy1sZXhlci5sZXguYyIKIAogI2RlZmluZSBJTklUSUFMIDAKICNkZWZpbmUgSU5DTFVERSAxCkBAIC02NTYsNiArNjU5LDM1IEBACiAKIHN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh2b2lkICk7CiAKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCisKK2ludCB5eWxleF9kZXN0cm95ICh2b2lkICk7CisKK2ludCB5eWdldF9kZWJ1ZyAodm9pZCApOworCit2b2lkIHl5c2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAgKTsKKworWVlfRVhUUkFfVFlQRSB5eWdldF9leHRyYSAodm9pZCApOworCit2b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAgKTsKKworRklMRSAqeXlnZXRfaW4gKHZvaWQgKTsKKwordm9pZCB5eXNldF9pbiAgKEZJTEUgKiBpbl9zdHIgICk7CisKK0ZJTEUgKnl5Z2V0X291dCAodm9pZCApOworCit2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICApOworCitpbnQgeXlnZXRfbGVuZyAodm9pZCApOworCitjaGFyICp5eWdldF90ZXh0ICh2b2lkICk7CisKK2ludCB5eWdldF9saW5lbm8gKHZvaWQgKTsKKwordm9pZCB5eXNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAgKTsKKwogLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KICAqIHNlY3Rpb24gMS4KICAqLwpAQCAtNjg4LDcgKzcyMCwxMiBAQAogCiAvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCiAjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNpZmRlZiBfX2lhNjRfXworLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAxNmssIG5vdCA4ayAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Mzg0CisjZWxzZQogI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZiAvKiBfX2lhNjRfXyAqLwogI2VuZGlmCiAKIC8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCkBAIC02OTYsNyArNzMzLDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKQEAgLTcwNyw3ICs3NDQsNyBAQAogCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKIAkJeyBcCiAJCWludCBjID0gJyonOyBcCi0JCWludCBuOyBcCisJCXNpemVfdCBuOyBcCiAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTc5MSw3ICs4MjgsNyBAQAogICAgIAogI2xpbmUgNjQgImR0Yy1sZXhlci5sIgogCi0jbGluZSA3OTUgImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDgzMiAiZHRjLWxleGVyLmxleC5jIgogCiAJaWYgKCAhKHl5X2luaXQpICkKIAkJewpAQCAtMTExNiw3ICsxMTUzLDcgQEAKICNsaW5lIDIyMiAiZHRjLWxleGVyLmwiCiBFQ0hPOwogCVlZX0JSRUFLCi0jbGluZSAxMTIwICJkdGMtbGV4ZXIubGV4LmMiCisjbGluZSAxMTU3ICJkdGMtbGV4ZXIubGV4LmMiCiAKIAljYXNlIFlZX0VORF9PRl9CVUZGRVI6CiAJCXsKQEAgLTE4NDAsOCArMTg3Nyw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAogICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvbGliZmR0L2ZkdF9yby5jIGIvc2NyaXB0cy9kdGMvbGliZmR0L2ZkdF9yby5jCmluZGV4IGZiYmJhNDQuLjIyZTY5MjkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYworKysgYi9zY3JpcHRzL2R0Yy9saWJmZHQvZmR0X3JvLmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCQkJCQkgICAgICZwaGFuZGxlLCBzaXplb2YocGhhbmRsZSkpOwogfQogCi1pbnQgX3N0cmluZ2xpc3RfY29udGFpbnMoY29uc3QgY2hhciAqc3RybGlzdCwgaW50IGxpc3RsZW4sIGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyBpbnQgX3N0cmluZ2xpc3RfY29udGFpbnMoY29uc3QgY2hhciAqc3RybGlzdCwgaW50IGxpc3RsZW4sIGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpbnQgbGVuID0gc3RybGVuKHN0cik7CiAJY29uc3QgY2hhciAqcDsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL3RyZWVzb3VyY2UuYyBiL3NjcmlwdHMvZHRjL3RyZWVzb3VyY2UuYwppbmRleCBlYmViNmViLi4xNTIxZmYxIDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy90cmVlc291cmNlLmMKKysrIGIvc2NyaXB0cy9kdGMvdHJlZXNvdXJjZS5jCkBAIC01Miw3ICs1Miw3IEBACiAJCWZwdXRjKCdcdCcsIGYpOwogfQogCi1pbnQgaXNzdHJpbmcoY2hhciBjKQorc3RhdGljIGludCBpc3N0cmluZyhjaGFyIGMpCiB7CiAJcmV0dXJuIChpc3ByaW50KGMpCiAJCXx8IChjID09ICdcMCcpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmNfc2hpcHBlZCBiL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkCmluZGV4IDk3MWUwMTEuLjI4NzQ2N2EgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkCkBAIC0xLDQgKzEsNCBAQAotLyogQU5TSS1DIGNvZGUgcHJvZHVjZWQgYnkgZ3BlcmYgdmVyc2lvbiAzLjAuMiAqLworLyogQU5TSS1DIGNvZGUgcHJvZHVjZWQgYnkgZ3BlcmYgdmVyc2lvbiAzLjAuMyAqLwogLyogQ29tbWFuZC1saW5lOiBncGVyZiAtTCBBTlNJLUMgLWEgLUMgLUUgLWcgLUggaXNfcmVzZXJ2ZWRfaGFzaCAtayAnMSwzLCQnIC1OIGlzX3Jlc2VydmVkX3dvcmQgLXAgLXQgc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiAgKi8KIAogI2lmICEoKCcgJyA9PSAzMikgJiYgKCchJyA9PSAzMykgJiYgKCciJyA9PSAzNCkgJiYgKCcjJyA9PSAzNSkgXApAQCAtMzAsNyArMzAsOSBAQAogCiAjbGluZSAxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogCi0jbGluZSAzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorc3RydWN0IHJlc3dvcmQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc3dvcmQgKmlzX3Jlc2VydmVkX3dvcmQocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKTsKKyNsaW5lIDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiBzdHJ1Y3QgcmVzd29yZCB7IGNvbnN0IGNoYXIgKm5hbWU7IGludCB0b2tlbjsgfTsKIC8qIG1heGltdW0ga2V5IHJhbmdlID0gNjIsIGR1cGxpY2F0ZXMgPSAwICovCiAKQEAgLTc4LDYgKzgwLDkgQEAKIAogI2lmZGVmIF9fR05VQ19fCiBfX2lubGluZQorI2lmZGVmIF9fR05VQ19TVERDX0lOTElORV9fCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorI2VuZGlmCiAjZW5kaWYKIGNvbnN0IHN0cnVjdCByZXN3b3JkICoKIGlzX3Jlc2VydmVkX3dvcmQgKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbikKQEAgLTk0LDEwNSArOTksMTA1IEBACiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzd29yZCB3b3JkbGlzdFtdID0KICAgICB7CiAgICAgICB7IiJ9LCB7IiJ9LCB7IiJ9LAotI2xpbmUgMjYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiYXNtIiwgQVNNX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxMCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19hc20iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDExICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2FzbV9fIiwgQVNNX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDUyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdHlwZW9mX18iLCBUWVBFT0ZfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19jb25zdCIsIENPTlNUX0tFWVd9LAotI2xpbmUgMTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fYXR0cmlidXRlX18iLCBBVFRSSUJVVEVfS0VZV30sCiAjbGluZSAxMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19hdHRyaWJ1dGVfXyIsIEFUVFJJQlVURV9LRVlXfSwKKyNsaW5lIDE1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2NvbnN0X18iLCBDT05TVF9LRVlXfSwKLSNsaW5lIDE4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX3NpZ25lZF9fIiwgU0lHTkVEX0tFWVd9LAotI2xpbmUgNDQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InN0YXRpYyIsIFNUQVRJQ19LRVlXfSwKICNsaW5lIDIwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX3NpZ25lZF9fIiwgU0lHTkVEX0tFWVd9LAorI2xpbmUgNDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InN0YXRpYyIsIFNUQVRJQ19LRVlXfSwKKyNsaW5lIDIyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX3ZvbGF0aWxlX18iLCBWT0xBVElMRV9LRVlXfSwKLSNsaW5lIDM5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImludCIsIElOVF9LRVlXfSwKLSNsaW5lIDMyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImNoYXIiLCBDSEFSX0tFWVd9LAotI2xpbmUgMzMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiY29uc3QiLCBDT05TVF9LRVlXfSwKLSNsaW5lIDQ1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InN0cnVjdCIsIFNUUlVDVF9LRVlXfSwKLSNsaW5lIDI0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fcmVzdHJpY3RfXyIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMjUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsicmVzdHJpY3QiLCBSRVNUUklDVF9LRVlXfSwKLSNsaW5lIDIzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9yZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMTYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19pbmxpbmVfXyIsIElOTElORV9LRVlXfSwKLSNsaW5lIDEwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fYXR0cmlidXRlIiwgQVRUUklCVVRFX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDE0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fZXh0ZW5zaW9uX18iLCBFWFRFTlNJT05fS0VZV30sCi0jbGluZSAzNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDM3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJlbnVtIiwgRU5VTV9LRVlXfSwKLSNsaW5lIDE5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdm9sYXRpbGUiLCBWT0xBVElMRV9LRVlXfSwKLSNsaW5lIDM2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImV4dGVybiIsIEVYVEVSTl9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSAxNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX3NpZ25lZCIsIFNJR05FRF9LRVlXfSwKLSNsaW5lIDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUiLCBFWFBPUlRfU1lNQk9MX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDUxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InR5cGVvZiIsIFRZUEVPRl9LRVlXfSwKLSNsaW5lIDQ2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InR5cGVkZWYiLCBUWVBFREVGX0tFWVd9LAotI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19pbmxpbmUiLCBJTkxJTkVfS0VZV30sCi0jbGluZSAzMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDMzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJhdXRvIiwgQVVUT19LRVlXfSwKLSNsaW5lIDQ3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InVuaW9uIiwgVU5JT05fS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgNDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidW5zaWduZWQiLCBVTlNJR05FRF9LRVlXfSwKLSNsaW5lIDQ5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InZvaWQiLCBWT0lEX0tFWVd9LAotI2xpbmUgNDIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic2hvcnQiLCBTSE9SVF9LRVlXfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA1MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDUyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJ2b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDM3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImZsb2F0IiwgRkxPQVRfS0VZV30sCi0jbGluZSAzNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDM2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJkb3VibGUiLCBET1VCTEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0wiLCBFWFBPUlRfU1lNQk9MX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDM4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImlubGluZSIsIElOTElORV9LRVlXfSwKLSNsaW5lIDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJFWFBPUlRfU1lNQk9MX0dQTCIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCi0jbGluZSA0MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJyZWdpc3RlciIsIFJFR0lTVEVSX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDIyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9Cb29sIiwgQk9PTF9LRVlXfSwKLSNsaW5lIDQzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InNpZ25lZCIsIFNJR05FRF9LRVlXfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA0MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJsb25nIiwgTE9OR19LRVlXfQogICAgIH07CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmCmluZGV4IDVlZjM3MzMuLjhmZTk3N2EgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZgpAQCAtMSw0ICsxLDYgQEAKICV7CitzdHJ1Y3QgcmVzd29yZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzd29yZCAqaXNfcmVzZXJ2ZWRfd29yZChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOwogJX0KIHN0cnVjdCByZXN3b3JkIHsgY29uc3QgY2hhciAqbmFtZTsgaW50IHRva2VuOyB9CiAlJQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKaW5kZXggY2RiNDRiNi4uODFhNjdhNCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAorKysgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCkBAIC01LDE1ICs1LDE1IEBACiAjIFByaW50IHNlbGVjdGVkIE1BSU5UQUlORVJTIGluZm9ybWF0aW9uIGZvcgogIyB0aGUgZmlsZXMgbW9kaWZpZWQgaW4gYSBwYXRjaCBvciBmb3IgYSBmaWxlCiAjCi0jIHVzYWdlOiBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXJzLnBsIFtPUFRJT05TXSA8cGF0Y2g+Ci0jICAgICAgICBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXJzLnBsIFtPUFRJT05TXSAtZiA8ZmlsZT4KKyMgdXNhZ2U6IHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBbT1BUSU9OU10gPHBhdGNoPgorIyAgICAgICAgcGVybCBzY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIFtPUFRJT05TXSAtZiA8ZmlsZT4KICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCiAKIHVzZSBzdHJpY3Q7CiAKIG15ICRQID0gJDA7Ci1teSAkViA9ICcwLjIwJzsKK215ICRWID0gJzAuMjEnOwogCiB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOwogCkBAIC0zNyw2ICszNyw3IEBACiBteSAkd2ViID0gMDsKIG15ICRzdWJzeXN0ZW0gPSAwOwogbXkgJHN0YXR1cyA9IDA7CitteSAka2V5d29yZHMgPSAxOwogbXkgJGZyb21fZmlsZW5hbWUgPSAwOwogbXkgJHBhdHRlcm5fZGVwdGggPSAwOwogbXkgJHZlcnNpb24gPSAwOwpAQCAtODQsNiArODUsNyBAQAogCQknc2NtIScgPT4gXCRzY20sCiAJCSd3ZWIhJyA9PiBcJHdlYiwKIAkJJ3BhdHRlcm4tZGVwdGg9aScgPT4gXCRwYXR0ZXJuX2RlcHRoLAorCQkna3xrZXl3b3JkcyEnID0+IFwka2V5d29yZHMsCiAJCSdmfGZpbGUnID0+IFwkZnJvbV9maWxlbmFtZSwKIAkJJ3Z8dmVyc2lvbicgPT4gXCR2ZXJzaW9uLAogCQknaHxoZWxwJyA9PiBcJGhlbHAsCkBAIC0xMzIsNiArMTM0LDggQEAKICMjIFJlYWQgTUFJTlRBSU5FUlMgZm9yIHR5cGUvdmFsdWUgcGFpcnMKIAogbXkgQHR5cGV2YWx1ZSA9ICgpOworbXkgJWtleXdvcmRfaGFzaDsKKwogb3BlbihNQUlOVCwgIjwke2xrX3BhdGh9TUFJTlRBSU5FUlMiKSB8fCBkaWUgIiRQOiBDYW4ndCBvcGVuIE1BSU5UQUlORVJTXG4iOwogd2hpbGUgKDxNQUlOVD4pIHsKICAgICBteSAkbGluZSA9ICRfOwpAQCAtMTQ5LDYgKzE1Myw4IEBACiAJICAgIGlmICgoLWQgJHZhbHVlKSkgewogCQkkdmFsdWUgPX4gc0AoW14vXSkkQCQxL0A7CiAJICAgIH0KKwl9IGVsc2lmICgkdHlwZSBlcSAiSyIpIHsKKwkgICAgJGtleXdvcmRfaGFzaHtAdHlwZXZhbHVlfSA9ICR2YWx1ZTsKIAl9CiAJcHVzaChAdHlwZXZhbHVlLCAiJHR5cGU6JHZhbHVlIik7CiAgICAgfSBlbHNpZiAoIS9eKFxzKSokLykgewpAQCAtMTg4LDYgKzE5NCw3IEBACiAKIG15IEBmaWxlcyA9ICgpOwogbXkgQHJhbmdlID0gKCk7CitteSBAa2V5d29yZF90dmkgPSAoKTsKIAogZm9yZWFjaCBteSAkZmlsZSAoQEFSR1YpIHsKICAgICAjI2lmICRmaWxlIGlzIGEgZGlyZWN0b3J5IGFuZCBpdCBsYWNrcyBhIHRyYWlsaW5nIHNsYXNoLCBhZGQgb25lCkBAIC0xOTgsMTEgKzIwNSwyNCBAQAogICAgIH0KICAgICBpZiAoJGZyb21fZmlsZW5hbWUpIHsKIAlwdXNoKEBmaWxlcywgJGZpbGUpOworCWlmICgtZiAkZmlsZSAmJiAka2V5d29yZHMpIHsKKwkgICAgb3BlbihGSUxFLCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOworCSAgICB3aGlsZSAoPEZJTEU+KSB7CisJCW15ICRwYXRjaF9saW5lID0gJF87CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCRwYXRjaF9saW5lID1+IG0vXi4qJGtleXdvcmRfaGFzaHskbGluZX0veCkgeworCQkJcHVzaChAa2V5d29yZF90dmksICRsaW5lKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGNsb3NlKEZJTEUpOworCX0KICAgICB9IGVsc2UgewogCW15ICRmaWxlX2NudCA9IEBmaWxlczsKIAlteSAkbGFzdGZpbGU7CiAJb3BlbihQQVRDSCwgIjwkZmlsZSIpIG9yIGRpZSAiJFA6IENhbid0IG9wZW4gJHtmaWxlfVxuIjsKIAl3aGlsZSAoPFBBVENIPikgeworCSAgICBteSAkcGF0Y2hfbGluZSA9ICRfOwogCSAgICBpZiAobS9eXCtcK1wrXHMrKFxTKykvKSB7CiAJCW15ICRmaWxlbmFtZSA9ICQxOwogCQkkZmlsZW5hbWUgPX4gc0BeW14vXSovQEA7CkBAIC0yMTMsNiArMjMzLDEyIEBACiAJCWlmICgkZW1haWxfZ2l0X2JsYW1lKSB7CiAJCSAgICBwdXNoKEByYW5nZSwgIiRsYXN0ZmlsZTokMTokMiIpOwogCQl9CisJICAgIH0gZWxzaWYgKCRrZXl3b3JkcykgeworCQlmb3JlYWNoIG15ICRsaW5lIChrZXlzICVrZXl3b3JkX2hhc2gpIHsKKwkJICAgIGlmICgkcGF0Y2hfbGluZSA9fiBtL15bKy1dLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOworCQkgICAgfQorCQl9CiAJICAgIH0KIAl9CiAJY2xvc2UoUEFUQ0gpOwpAQCAtMjg2LDYgKzMxMiwxMyBAQAogICAgIH0KIH0KIAoraWYgKCRrZXl3b3JkcykgeworICAgIEBrZXl3b3JkX3R2aSA9IHNvcnRfYW5kX3VuaXEoQGtleXdvcmRfdHZpKTsKKyAgICBmb3JlYWNoIG15ICRsaW5lIChAa2V5d29yZF90dmkpIHsKKwlhZGRfY2F0ZWdvcmllcygkbGluZSk7CisgICAgfQorfQorCiBpZiAoJGVtYWlsKSB7CiAgICAgZm9yZWFjaCBteSAkY2hpZWYgKEBwZW5ndWluX2NoaWVmKSB7CiAJaWYgKCRjaGllZiA9fiBtL14oLiopOiguKikvKSB7CkBAIC0zODQsNiArNDE3LDcgQEAKIAogT3RoZXIgb3B0aW9uczoKICAgLS1wYXR0ZXJuLWRlcHRoID0+IE51bWJlciBvZiBwYXR0ZXJuIGRpcmVjdG9yeSB0cmF2ZXJzYWxzIChkZWZhdWx0OiAwIChhbGwpKQorICAtLWtleXdvcmRzID0+IHNjYW4gcGF0Y2ggZm9yIGtleXdvcmRzIChkZWZhdWx0OiAxIChvbikpCiAgIC0tdmVyc2lvbiA9PiBzaG93IHZlcnNpb24KICAgLS1oZWxwID0+IHNob3cgdGhpcyBoZWxwIGluZm9ybWF0aW9uCiAKQEAgLTQ4Niw3ICs1MjAsNiBAQAogfQogCiBzdWIgZmluZF9zdGFydGluZ19pbmRleCB7Ci0KICAgICBteSAoJGluZGV4KSA9IEBfOwogCiAgICAgd2hpbGUgKCRpbmRleCA+IDApIHsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsIGIvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKaW5kZXggYzZhZTQwNS4uYjg5Y2EyYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKKysrIGIvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKQEAgLTIwLDcgKzIwLDcgQEAKIAogbXkgKCRyZWFkZGlyLCAkaW5zdGFsbGRpciwgJGFyY2gsIEBmaWxlcykgPSBAQVJHVjsKIAotbXkgJHVuaWZkZWYgPSAic2NyaXB0cy91bmlmZGVmIC1VX19LRVJORUxfXyI7CitteSAkdW5pZmRlZiA9ICJzY3JpcHRzL3VuaWZkZWYgLVVfX0tFUk5FTF9fIC1EX19FWFBPUlRFRF9IRUFERVJTX18iOwogCiBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXMpIHsKIAlsb2NhbCAqSU5GSUxFOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2xleC56Y29uZi5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZAppbmRleCBkYzNlODE4Li5mZGM3MTEzIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZApAQCAtMTYwLDcgKzE2MCwxNSBAQAogCiAvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwogI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQogI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCiAjZW5kaWYKIAogLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KQEAgLTgwMiw3ICs4MTAsNyBAQAogc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKIHN0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCk7CiAKLXZvaWQgbmV3X3N0cmluZyh2b2lkKQorc3RhdGljIHZvaWQgbmV3X3N0cmluZyh2b2lkKQogewogCXRleHQgPSBtYWxsb2MoU1RBUlRfU1RSU0laRSk7CiAJdGV4dF9hc2l6ZSA9IFNUQVJUX1NUUlNJWkU7CkBAIC04MTAsNyArODE4LDcgQEAKIAkqdGV4dCA9IDA7CiB9CiAKLXZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSArIHNpemUgKyAxOwogCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKQEAgLTgyNCw3ICs4MzIsNyBAQAogCXRleHRbdGV4dF9zaXplXSA9IDA7CiB9CiAKLXZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKIHsKIAl0ZXh0ID0gbWFsbG9jKHNpemUgKyAxKTsKIAltZW1jcHkodGV4dCwgc3RyLCBzaXplKTsKQEAgLTkxNCw3ICs5MjIsMTIgQEAKIAogLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwogI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKICNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwpAQCAtOTIyLDcgKzkzNSw3IEBACiAvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKICAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCiAgKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHpjb25mdGV4dCwgemNvbmZsZW5nLCAxLCB6Y29uZm91dCApCisjZGVmaW5lIEVDSE8gZG8geyBpZiAoZndyaXRlKCB6Y29uZnRleHQsIHpjb25mbGVuZywgMSwgemNvbmZvdXQgKSkge30gfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCkBAIC0yMDYwLDggKzIwNzMsOCBAQAogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB6Y29uZmxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KICAqIAogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCiAgKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZgppbmRleCAyNWVmNWQwLi5kOGJjNzQyIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmCkBAIC05LDYgKzksOCBAQAogCiBzdHJ1Y3Qga2NvbmZfaWQ7CiAKK3N0YXRpYyBzdHJ1Y3Qga2NvbmZfaWQgKmtjb25mX2lkX2xvb2t1cChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOworCiAlJQogbWFpbm1lbnUsCVRfTUFJTk1FTlUsCVRGX0NPTU1BTkQKIG1lbnUsCQlUX01FTlUsCQlURl9DT01NQU5ECmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKaW5kZXggNWM3M2Q1MTMzLi5jMTc0OGZhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkCkBAIC0zMCw2ICszMCw4IEBACiAjZW5kaWYKIAogc3RydWN0IGtjb25mX2lkOworCitzdGF0aWMgc3RydWN0IGtjb25mX2lkICprY29uZl9pZF9sb29rdXAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKTsKIC8qIG1heGltdW0ga2V5IHJhbmdlID0gNDcsIGR1cGxpY2F0ZXMgPSAwICovCiAKICNpZmRlZiBfX0dOVUNfXwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLmwgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubAppbmRleCAyMWZmNjljLi5kOGY3MjM2IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYubAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubApAQCAtMzksNyArMzksNyBAQAogc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKIHN0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCk7CiAKLXZvaWQgbmV3X3N0cmluZyh2b2lkKQorc3RhdGljIHZvaWQgbmV3X3N0cmluZyh2b2lkKQogewogCXRleHQgPSBtYWxsb2MoU1RBUlRfU1RSU0laRSk7CiAJdGV4dF9hc2l6ZSA9IFNUQVJUX1NUUlNJWkU7CkBAIC00Nyw3ICs0Nyw3IEBACiAJKnRleHQgPSAwOwogfQogCi12b2lkIGFwcGVuZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKIHsKIAlpbnQgbmV3X3NpemUgPSB0ZXh0X3NpemUgKyBzaXplICsgMTsKIAlpZiAobmV3X3NpemUgPiB0ZXh0X2FzaXplKSB7CkBAIC02MSw3ICs2MSw3IEBACiAJdGV4dFt0ZXh0X3NpemVdID0gMDsKIH0KIAotdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCXRleHQgPSBtYWxsb2Moc2l6ZSArIDEpOwogCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZAppbmRleCA5NWRmODMzLi42ZTlkY2Q1IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZApAQCAtMSwyNCArMSwyMyBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMS4gICovCiAKIC8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgogICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksNyArMjgsNyBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCkBAIC00Nyw3ICs0Niw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjEiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDE3ICs1NCw4NCBAQAogLyogUHVyZSBwYXJzZXJzLiAgKi8KICNkZWZpbmUgWVlQVVJFIDAKIAorLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwogLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVEIDAKIAogLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KLSNkZWZpbmUgeXlwYXJzZSB6Y29uZnBhcnNlCi0jZGVmaW5lIHl5bGV4ICAgemNvbmZsZXgKLSNkZWZpbmUgeXllcnJvciB6Y29uZmVycm9yCi0jZGVmaW5lIHl5bHZhbCAgemNvbmZsdmFsCi0jZGVmaW5lIHl5Y2hhciAgemNvbmZjaGFyCi0jZGVmaW5lIHl5ZGVidWcgemNvbmZkZWJ1ZwotI2RlZmluZSB5eW5lcnJzIHpjb25mbmVycnMKKyNkZWZpbmUgeXlwYXJzZSAgICAgICAgIHpjb25mcGFyc2UKKyNkZWZpbmUgeXlsZXggICAgICAgICAgIHpjb25mbGV4CisjZGVmaW5lIHl5ZXJyb3IgICAgICAgICB6Y29uZmVycm9yCisjZGVmaW5lIHl5bHZhbCAgICAgICAgICB6Y29uZmx2YWwKKyNkZWZpbmUgeXljaGFyICAgICAgICAgIHpjb25mY2hhcgorI2RlZmluZSB5eWRlYnVnICAgICAgICAgemNvbmZkZWJ1ZworI2RlZmluZSB5eW5lcnJzICAgICAgICAgemNvbmZuZXJycworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2RlZmluZSBMS0NfRElSRUNUX0xJTksKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQorCisjZGVmaW5lIFBSSU5URAkJMHgwMDAxCisjZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgorCitpbnQgY2RlYnVnID0gUFJJTlREOworCitleHRlcm4gaW50IHpjb25mbGV4KHZvaWQpOworc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7CitzdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7CitzdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycik7CitzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKKworc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hbMjU3XTsKKworc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5OworCisjZGVmaW5lIFlZREVCVUcgMAorI2lmIFlZREVCVUcKKyNkZWZpbmUgWVlFUlJPUl9WRVJCT1NFCisjZW5kaWYKKworCisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lmbmRlZiBZWVRPS0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgogCiAKIC8qIFRva2Vucy4gICovCkBAIC0xMDgsMTI5ICsxNzQsMzYgQEAKICAgICAgVF9OT1QgPSAyODkKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIFRfTUFJTk1FTlUgMjU4Ci0jZGVmaW5lIFRfTUVOVSAyNTkKLSNkZWZpbmUgVF9FTkRNRU5VIDI2MAotI2RlZmluZSBUX1NPVVJDRSAyNjEKLSNkZWZpbmUgVF9DSE9JQ0UgMjYyCi0jZGVmaW5lIFRfRU5EQ0hPSUNFIDI2MwotI2RlZmluZSBUX0NPTU1FTlQgMjY0Ci0jZGVmaW5lIFRfQ09ORklHIDI2NQotI2RlZmluZSBUX01FTlVDT05GSUcgMjY2Ci0jZGVmaW5lIFRfSEVMUCAyNjcKLSNkZWZpbmUgVF9IRUxQVEVYVCAyNjgKLSNkZWZpbmUgVF9JRiAyNjkKLSNkZWZpbmUgVF9FTkRJRiAyNzAKLSNkZWZpbmUgVF9ERVBFTkRTIDI3MQotI2RlZmluZSBUX09QVElPTkFMIDI3MgotI2RlZmluZSBUX1BST01QVCAyNzMKLSNkZWZpbmUgVF9UWVBFIDI3NAotI2RlZmluZSBUX0RFRkFVTFQgMjc1Ci0jZGVmaW5lIFRfU0VMRUNUIDI3NgotI2RlZmluZSBUX1JBTkdFIDI3NwotI2RlZmluZSBUX09QVElPTiAyNzgKLSNkZWZpbmUgVF9PTiAyNzkKLSNkZWZpbmUgVF9XT1JEIDI4MAotI2RlZmluZSBUX1dPUkRfUVVPVEUgMjgxCi0jZGVmaW5lIFRfVU5FUVVBTCAyODIKLSNkZWZpbmUgVF9DTE9TRV9QQVJFTiAyODMKLSNkZWZpbmUgVF9PUEVOX1BBUkVOIDI4NAotI2RlZmluZSBUX0VPTCAyODUKLSNkZWZpbmUgVF9PUiAyODYKLSNkZWZpbmUgVF9BTkQgMjg3Ci0jZGVmaW5lIFRfRVFVQUwgMjg4Ci0jZGVmaW5lIFRfTk9UIDI4OQogCiAKIAotCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCi0gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0KLSNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCi0jaW5jbHVkZSAibGtjLmgiCi0KLSNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCi0KLSNkZWZpbmUgcHJpbnRkKG1hc2ssIGZtdC4uLikgaWYgKGNkZWJ1ZyAmIChtYXNrKSkgcHJpbnRmKGZtdCkKLQotI2RlZmluZSBQUklOVEQJCTB4MDAwMQotI2RlZmluZSBERUJVR19QQVJTRQkweDAwMDIKLQotaW50IGNkZWJ1ZyA9IFBSSU5URDsKLQotZXh0ZXJuIGludCB6Y29uZmxleCh2b2lkKTsKLXN0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOwotc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOwotc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpOwotc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbik7Ci0KLXN0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoWzI1N107Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9lbnRyeTsKLQotI2RlZmluZSBZWURFQlVHIDAKLSNpZiBZWURFQlVHCi0jZGVmaW5lIFlZRVJST1JfVkVSQk9TRQotI2VuZGlmCi0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KIHsKKworCiAJY2hhciAqc3RyaW5nOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBzeW1ib2wgKnN5bWJvbDsKIAlzdHJ1Y3QgZXhwciAqZXhwcjsKIAlzdHJ1Y3QgbWVudSAqbWVudTsKIAlzdHJ1Y3Qga2NvbmZfaWQgKmlkOwotfQotLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8KIAotCVlZU1RZUEU7CisKKworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICNlbmRpZgogCiAKLQogLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwogCiAKLS8qIExpbmUgMjE2IG9mIHlhY2MuYy4gICovCisvKiBJbmNsdWRlIHpjb25mLmhhc2guYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2VuIGNvbnN0YW50cy4gKi8KKyNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCisKIAogCiAjaWZkZWYgc2hvcnQKQEAgLTMwNiwxNCArMjc5LDE0IEBACiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIGludAotWVlJRCAoaW50IGkpCitZWUlEIChpbnQgeXlpKQogI2Vsc2UKIHN0YXRpYyBpbnQKLVlZSUQgKGkpCi0gICAgaW50IGk7CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsKICNlbmRpZgogewotICByZXR1cm4gaTsKKyAgcmV0dXJuIHl5aTsKIH0KICNlbmRpZgogCkBAIC0zOTQsOSArMzY3LDkgQEAKIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxvYwogewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OworICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKIAogLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KICMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQpAQCAtNDMwLDEyICs0MDMsMTIgQEAKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCiAgICAgZG8JCQkJCQkJCQlcCiAgICAgICB7CQkJCQkJCQkJXAogCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAotCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKLQlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKIAl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCiAJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAogICAgICAgfQkJCQkJCQkJCVwKQEAgLTU1OCwxOCArNTMxLDE4IEBACiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAxMDQsICAgMTA0LCAgIDEwNiwgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywKLSAgICAgMTE0LCAgIDExOCwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjIsICAgMTI2LAotICAgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMzAsICAgMTMxLCAgIDEzNSwgICAxMzYsICAgMTQyLCAgIDE1MCwgICAxNTYsCi0gICAgIDE2NCwgICAxNzQsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMTc5LCAgIDE4MCwgICAxODEsICAgMTg0LCAgIDE5MiwKLSAgICAgMTk4LCAgIDIwOCwgICAyMTQsICAgMjIwLCAgIDIyMywgICAyMjUsICAgMjM2LCAgIDIzNywgICAyNDIsICAgMjUxLAotICAgICAyNTYsICAgMjY0LCAgIDI2NywgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NiwgICAyODIsCi0gICAgIDI5MywgICAyOTksICAgMzA5LCAgIDMxMSwgICAzMTYsICAgMzI0LCAgIDMzMiwgICAzMzUsICAgMzM3LCAgIDMzOCwKLSAgICAgMzM5LCAgIDM0NCwgICAzNTEsICAgMzU2LCAgIDM2NCwgICAzNjcsICAgMzY5LCAgIDM3MCwgICAzNzEsICAgMzc0LAotICAgICAzODIsICAgMzg5LCAgIDM5NiwgICA0MDIsICAgNDA5LCAgIDQxMSwgICA0MTIsICAgNDEzLCAgIDQxNiwgICA0MjQsCi0gICAgIDQyNiwgICA0MzEsICAgNDMyLCAgIDQzNSwgICA0MzYsICAgNDM3LCAgIDQ0MSwgICA0NDIsICAgNDQ1LCAgIDQ0NiwKLSAgICAgNDQ5LCAgIDQ1MCwgICA0NTEsICAgNDUyLCAgIDQ1MywgICA0NTQsICAgNDU1LCAgIDQ1OCwgICA0NTksICAgNDYyLAotICAgICA0NjMKKyAgICAgICAwLCAgIDEwNywgICAxMDcsICAgMTA5LCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LAorICAgICAxMTcsICAgMTIxLCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNSwgICAxMjksCisgICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAxMzQsICAgMTM4LCAgIDEzOSwgICAxNDUsICAgMTUzLCAgIDE1OSwKKyAgICAgMTY3LCAgIDE3NywgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAxODcsICAgMTk1LAorICAgICAyMDEsICAgMjExLCAgIDIxNywgICAyMjMsICAgMjI2LCAgIDIyOCwgICAyMzksICAgMjQwLCAgIDI0NSwgICAyNTQsCisgICAgIDI1OSwgICAyNjcsICAgMjcwLCAgIDI3MiwgICAyNzMsICAgMjc0LCAgIDI3NSwgICAyNzYsICAgMjc5LCAgIDI4NSwKKyAgICAgMjk2LCAgIDMwMiwgICAzMTIsICAgMzE0LCAgIDMxOSwgICAzMjcsICAgMzM1LCAgIDMzOCwgICAzNDAsICAgMzQxLAorICAgICAzNDIsICAgMzQ3LCAgIDM1NCwgICAzNTksICAgMzY3LCAgIDM3MCwgICAzNzIsICAgMzczLCAgIDM3NCwgICAzNzcsCisgICAgIDM4NSwgICAzOTIsICAgMzk5LCAgIDQwNSwgICA0MTIsICAgNDE0LCAgIDQxNSwgICA0MTYsICAgNDE5LCAgIDQyNywKKyAgICAgNDI5LCAgIDQzNCwgICA0MzUsICAgNDM4LCAgIDQzOSwgICA0NDAsICAgNDQ0LCAgIDQ0NSwgICA0NDgsICAgNDQ5LAorICAgICA0NTIsICAgNDUzLCAgIDQ1NCwgICA0NTUsICAgNDU2LCAgIDQ1NywgICA0NTgsICAgNDYxLCAgIDQ2MiwgICA0NjUsCisgICAgIDQ2NgogfTsKICNlbmRpZgogCkBAIC05ODUsMTcgKzk1OCwyMCBAQAogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKQEAgLTEwMjksMTEgKzEwMDUsMTEgQEAKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCiAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAogCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCiAJCSAgICAgICAJCSAgICAgICApOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKICAgICB9CiB9CiAKQEAgLTEzNDMsMTAgKzEzMTksOCBAQAogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKQEAgLTEzNjIsMTEgKzEzMzYsMTAgQEAKICNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KIAogCi0KLS8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCiBpbnQgeXljaGFyOwogCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCiBZWVNUWVBFIHl5bHZhbDsKIAogLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KQEAgLTEzNzQsOSArMTM0Nyw5IEBACiAKIAogCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCkBAIC0xNDAwLDE0ICsxMzczLDM5IEBACiAjZW5kaWYKICNlbmRpZgogewotICAKLSAgaW50IHl5c3RhdGU7CisKKworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5dnNwOworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKICAgaW50IHl5bjsKICAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7CisKICNpZiBZWUVSUk9SX1ZFUkJPU0UKICAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCiAgIGNoYXIgeXltc2didWZbMTI4XTsKQEAgLTE0MTUsNTEgKzE0MTMsMjggQEAKICAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CiAjZW5kaWYKIAotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotCi0KICNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0KLQogICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGludCB5eWxlbiA9IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3RhdHVzID0gMDsKICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTQ4OSw3ICsxNDY0LDYgQEAKIAlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CiAJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CiAKLQogCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKIAkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CkBAIC0xNDk3LDcgKzE0NzEsNiBAQAogCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAogCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCiAJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQogCQkgICAgJnl5c3RhY2tzaXplKTsKIAogCXl5c3MgPSB5eXNzMTsKQEAgLTE1MjAsOSArMTQ5Myw4IEBACiAJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRyKQogCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwpAQCAtMTUzMyw3ICsxNTA1LDYgQEAKICAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CiAgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwogCi0KICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKIAkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CiAKQEAgLTE1NDMsNiArMTUxNCw5IEBACiAKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKIAorICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCiAgIGdvdG8geXliYWNrdXA7CiAKIC8qLS0tLS0tLS0tLS0uCkBAIC0xNTUxLDE2ICsxNTI1LDE2IEBACiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZRU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CkBAIC0xNTkyLDIwICsxNTY2LDE2IEBACiAgICAgICBnb3RvIHl5cmVkdWNlOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KICAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgogICAgICBzdGF0dXMuICAqLwogICBpZiAoeXllcnJzdGF0dXMpCiAgICAgeXllcnJzdGF0dXMtLTsKIAotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwogICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gIGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CiAKICAgeXlzdGF0ZSA9IHl5bjsKICAgKisreXl2c3AgPSB5eWx2YWw7CkBAIC0yMDI5LDcgKzE5OTksNiBAQAogICAgIGJyZWFrOwogCiAKLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CkBAIC0yMDQxLDcgKzIwMTAsNiBAQAogCiAgICorK3l5dnNwID0geXl2YWw7CiAKLQogICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwpAQCAtMjEwNiw3ICsyMDc0LDcgQEAKIAogICBpZiAoeXllcnJzdGF0dXMgPT0gMykKICAgICB7Ci0gICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgorICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbgogCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCiAKICAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCkBAIC0yMTIzLDcgKzIwOTEsNyBAQAogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAgdG9rZW4uICAqLwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtMjE4MCw5ICsyMTQ4LDYgQEAKICAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CiAgICAgfQogCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQogICAqKyt5eXZzcCA9IHl5bHZhbDsKIAogCkBAIC0yMjA3LDcgKzIxNzIsNyBAQAogICB5eXJlc3VsdCA9IDE7CiAgIGdvdG8geXlyZXR1cm47CiAKLSNpZm5kZWYgeXlvdmVyZmxvdworI2lmICFkZWZpbmVkKHl5b3ZlcmZsb3cpIHx8IFlZRVJST1JfVkVSQk9TRQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjIxOCw3ICsyMTgzLDcgQEAKICNlbmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCk7CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKQEAgLTIyODQsNyArMjI0OSw3IEBACiAJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7CiB9CiAKLWNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCitzdGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKIHsKIAlzd2l0Y2ggKHRva2VuKSB7CiAJY2FzZSBUX01FTlU6CQlyZXR1cm4gIm1lbnUiOwpAQCAtMjM0OCw3ICsyMzEzLDcgQEAKICNlbmRpZgogfQogCi12b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCitzdGF0aWMgdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQogewogCWNvbnN0IGNoYXIgKnA7CiAJaW50IGxlbjsKQEAgLTIzNjUsNyArMjMzMCw3IEBACiAJcHV0YygnIicsIG91dCk7CiB9CiAKLXZvaWQgcHJpbnRfc3ltYm9sKEZJTEUgKm91dCwgc3RydWN0IG1lbnUgKm1lbnUpCitzdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkgYi9zY3JpcHRzL2tjb25maWcvemNvbmYueQppbmRleCA5NzEwYjgyLi44YzQzNDkxIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYueQorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYueQpAQCAtMTQsOCArMTQsNiBAQAogI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKIAotI2luY2x1ZGUgInpjb25mLmhhc2guYyIKLQogI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQogCiAjZGVmaW5lIFBSSU5URAkJMHgwMDAxCkBAIC0xMDAsNiArOTgsMTEgQEAKIAkJbWVudV9lbmRfbWVudSgpOwogfSBpZl9lbnRyeSBtZW51X2VudHJ5IGNob2ljZV9lbnRyeQogCisleworLyogSW5jbHVkZSB6Y29uZi5oYXNoLmMgaGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0b2tlbiBjb25zdGFudHMuICovCisjaW5jbHVkZSAiemNvbmYuaGFzaC5jIgorJX0KKwogJSUKIGlucHV0OiBzdG10X2xpc3Q7CiAKQEAgLTUwMSw3ICs1MDQsNyBAQAogCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOwogfQogCi1jb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQorc3RhdGljIGNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCiB7CiAJc3dpdGNoICh0b2tlbikgewogCWNhc2UgVF9NRU5VOgkJcmV0dXJuICJtZW51IjsKQEAgLTU2NSw3ICs1NjgsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJY29uc3QgY2hhciAqcDsKIAlpbnQgbGVuOwpAQCAtNTgyLDcgKzU4NSw3IEBACiAJcHV0YygnIicsIG91dCk7CiB9CiAKLXZvaWQgcHJpbnRfc3ltYm9sKEZJTEUgKm91dCwgc3RydWN0IG1lbnUgKm1lbnUpCitzdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ta2NvbXBpbGVfaCBiL3NjcmlwdHMvbWtjb21waWxlX2gKaW5kZXggNmExMmRkOS4uYmNlM2QwZiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9ta2NvbXBpbGVfaAorKysgYi9zY3JpcHRzL21rY29tcGlsZV9oCkBAIC0xLDMgKzEsNSBAQAorIyEvYmluL3NoCisKIFRBUkdFVD0kMQogQVJDSD0kMgogU01QPSQzCkBAIC01MCw3ICs1Miw3IEBACiAjIFRydW5jYXRlIHRvIG1heGltdW0gbGVuZ3RoCiAKIFVUU19MRU49NjQKLVVUU19UUlVOQ0FURT0ic2VkIC1lIHMvXCguXHsxLCRVVFNfTEVOXH1cKS4qL1wxLyIKK1VUU19UUlVOQ0FURT0iY3V0IC1iIC0kVVRTX0xFTiIKIAogIyBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBjb21waWxlLmgKIApAQCAtNjYsOSArNjgsMTMgQEAKICAgZWNobyBcI2RlZmluZSBMSU5VWF9DT01QSUxFX0hPU1QgXCJgaG9zdG5hbWUgfCAkVVRTX1RSVU5DQVRFYFwiCiAKICAgaWYgWyAteCAvYmluL2Ruc2RvbWFpbm5hbWUgXTsgdGhlbgotICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4gXCJgZG5zZG9tYWlubmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKKyAgICBkb21haW49YGRuc2RvbWFpbm5hbWUgMj4gL2Rldi9udWxsYAogICBlbGlmIFsgLXggL2Jpbi9kb21haW5uYW1lIF07IHRoZW4KLSAgICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfRE9NQUlOIFwiYGRvbWFpbm5hbWUgfCAkVVRTX1RSVU5DQVRFYFwiCisgICAgZG9tYWluPWBkb21haW5uYW1lIDI+IC9kZXYvbnVsbGAKKyAgZmkKKworICBpZiBbIC1uICIkZG9tYWluIiBdOyB0aGVuCisgICAgZWNobyBcI2RlZmluZSBMSU5VWF9DT01QSUxFX0RPTUFJTiBcImBlY2hvICRkb21haW4gfCAkVVRTX1RSVU5DQVRFYFwiCiAgIGVsc2UKICAgICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfRE9NQUlOCiAgIGZpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUgYi9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKaW5kZXggZmE0YTBhMS4uZjY3Y2M4OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCisrKyBiL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQpAQCAtMTgsNiArMTgsOSBAQAogIyBlKSBnZW5lcmF0ZSB0aGUgcnBtIGZpbGVzLCBiYXNlZCBvbiBrZXJuZWwuc3BlYwogIyAtIFVzZSAvLiB0byBhdm9pZCB0YXIgcGFja2luZyBqdXN0IHRoZSBzeW1saW5rCiAKKyMgTm90ZSB0aGF0IHRoZSBycG0tcGtnIHRhcmdldCBjYW5ub3QgYmUgdXNlZCB3aXRoIEtCVUlMRF9PVVRQVVQsCisjIGJ1dCB0aGUgYmlucnBtLXBrZyB0YXJnZXQgY2FuOyBmb3Igc29tZSByZWFzb24gTz0gZ2V0cyBpZ25vcmVkLgorCiAjIERvIHdlIGhhdmUgcnBtYnVpbGQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdGhlIG9sZGVyIHJwbQogUlBNIDo9ICQoc2hlbGwgaWYgWyAteCAiL3Vzci9iaW4vcnBtYnVpbGQiIF07IHRoZW4gZWNobyBycG1idWlsZDsgXAogCSAgICAgICAgICAgZWxzZSBlY2hvIHJwbTsgZmkpCkBAIC0zMyw2ICszNiwxMiBAQAogCSQoQ09ORklHX1NIRUxMKSAkKE1LU1BFQykgPiAkQAogCiBycG0tcGtnIHJwbTogJChvYmp0cmVlKS9rZXJuZWwuc3BlYyBGT1JDRQorCUBpZiB0ZXN0IC1uICIkKEtCVUlMRF9PVVRQVVQpIjsgdGhlbiBcCisJCWVjaG8gIkJ1aWxkaW5nIHNvdXJjZSArIGJpbmFyeSBSUE0gaXMgbm90IHBvc3NpYmxlIG91dHNpZGUgdGhlIjsgXAorCQllY2hvICJrZXJuZWwgc291cmNlIHRyZWUuIERvbid0IHNldCBLQlVJTERfT1VUUFVULCBvciB1c2UgdGhlIjsgXAorCQllY2hvICJiaW5ycG0tcGtnIHRhcmdldCBpbnN0ZWFkLiI7IFwKKwkJZmFsc2U7IFwKKwlmaQogCSQoTUFLRSkgY2xlYW4KIAkkKFBSRVYpIGxuIC1zZiAkKHNyY3RyZWUpICQoS0VSTkVMUEFUSCkKIAkkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL3NldGxvY2FsdmVyc2lvbiA+ICQob2JqdHJlZSkvLnNjbXZlcnNpb24KQEAgLTYxLDcgKzcwLDcgQEAKIAlzZXQgLWU7IFwKIAltdiAtZiAkKG9ianRyZWUpLy50bXBfdmVyc2lvbiAkKG9ianRyZWUpLy52ZXJzaW9uCiAKLQkkKFJQTSkgJChSUE1PUFRTKSAtLWRlZmluZSAiX2J1aWxkZGlyICQoc3JjdHJlZSkiIC0tdGFyZ2V0IFwKKwkkKFJQTSkgJChSUE1PUFRTKSAtLWRlZmluZSAiX2J1aWxkZGlyICQob2JqdHJlZSkiIC0tdGFyZ2V0IFwKIAkJJChVVFNfTUFDSElORSkgLWJiICQ8CiAKIGNsZWFuLWZpbGVzICs9ICQob2JqdHJlZSkvYmlua2VybmVsLnNwZWMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMgYi9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjCmluZGV4IDNkOTNmOGMuLjQ3YmRkMmYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMKKysrIGIvc2NyaXB0cy9wYWNrYWdlL21rc3BlYwpAQCAtNzAsNyArNzAsNyBAQAogZWNobyAnbWtkaXIgLXAgJFJQTV9CVUlMRF9ST09UL2xpYi9maXJtd2FyZScKIGVjaG8gIiVlbmRpZiIKIAotZWNobyAnSU5TVEFMTF9NT0RfUEFUSD0kUlBNX0JVSUxEX1JPT1QgbWFrZSAle19zbXBfbWZsYWdzfSBtb2R1bGVzX2luc3RhbGwnCitlY2hvICdJTlNUQUxMX01PRF9QQVRIPSRSUE1fQlVJTERfUk9PVCBtYWtlICV7X3NtcF9tZmxhZ3N9IEtCVUlMRF9TUkM9IG1vZHVsZXNfaW5zdGFsbCcKIGVjaG8gIiVpZmFyY2ggaWE2NCIKIGVjaG8gJ2NwICRLQlVJTERfSU1BR0UgJFJQTV9CVUlMRF9ST09UJyIvYm9vdC9lZmkvdm1saW51ei0kS0VSTkVMUkVMRUFTRSIKIGVjaG8gJ2xuIC1zICciZWZpL3ZtbGludXotJEtFUk5FTFJFTEVBU0UiICckUlBNX0JVSUxEX1JPT1QnIi9ib290LyIKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCmluZGV4IDhlOTc3N2IuLjBjNzJjOWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYwpAQCAtNDMsNyArNDMsNyBAQAogCXJldHVybiBpbWFfc2hvd19odGFibGVfdmFsdWUoYnVmLCBjb3VudCwgcHBvcywgJmltYV9odGFibGUudmlvbGF0aW9ucyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9odGFibGVfdmlvbGF0aW9uc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfaHRhYmxlX3Zpb2xhdGlvbnNfb3BzID0gewogCS5yZWFkID0gaW1hX3Nob3dfaHRhYmxlX3Zpb2xhdGlvbnMKIH07CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZW1lbnRzX2NvdW50X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzID0gewogCS5yZWFkID0gaW1hX3Nob3dfbWVhc3VyZW1lbnRzX2NvdW50CiB9OwogCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmltYV9tZWFzdXJtZW50c19zZXFvcHMpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZW1lbnRzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfb3BzID0gewogCS5vcGVuID0gaW1hX21lYXN1cmVtZW50c19vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTIzMyw3ICsyMzMsNyBAQAogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX2FzY2lpX21lYXN1cmVtZW50c19zZXFvcHMpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzID0gewogCS5vcGVuID0gaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTMxMyw3ICszMTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZV9wb2xpY3lfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVfcG9saWN5X29wcyA9IHsKIAkub3BlbiA9IGltYV9vcGVuX3BvbGljeSwKIAkud3JpdGUgPSBpbWFfd3JpdGVfcG9saWN5LAogCS5yZWxlYXNlID0gaW1hX3JlbGVhc2VfcG9saWN5CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKaW5kZXggYjhkZDY5My4uYTRlMmIxZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpAQCAtNTgsMTEgKzU4LDExIEBACiAKIAlpZiAoIWltYV9pbml0aWFsaXplZCkKIAkJcmV0dXJuIGlpbnQ7Ci0JaWludCA9IGttZW1fY2FjaGVfYWxsb2MoaWludF9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWludCA9IGttZW1fY2FjaGVfYWxsb2MoaWludF9jYWNoZSwgR0ZQX05PRlMpOwogCWlmICghaWludCkKIAkJcmV0dXJuIGlpbnQ7CiAKLQlyYyA9IHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKTsKKwlyYyA9IHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9GUyk7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IDJmYjI4ZWYuLjA2ZWM3MjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtODczLDcgKzg3Myw3IEBACiAJLyogb3RoZXJ3aXNlIHNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgcmVjb3JkZWQgaW4gdGhlCiAJICogYXV0aG9yaXNhdGlvbiBrZXkgKGFueSBLRVlfU1BFQ18qX0tFWVJJTkcpICovCiAJaWYgKHJpbmdpZCA+PSBLRVlfU1BFQ19SRVFVRVNUT1JfS0VZUklORykgewotCQkqX2Rlc3Rfa2V5cmluZyA9IHJrYS0+ZGVzdF9rZXlyaW5nOworCQkqX2Rlc3Rfa2V5cmluZyA9IGtleV9nZXQocmthLT5kZXN0X2tleXJpbmcpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMgYi9zb3VuZC9hb2EvY29kZWNzL3Rhcy5jCmluZGV4IGYwZWJjOTcxLi4xZGQ2NmRkIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvY29kZWNzL3Rhcy5jCisrKyBiL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKQEAgLTg5Nyw2ICs4OTcsMTUgQEAKIAljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CiAJaWYgKCFjbGllbnQpCiAJCXJldHVybiAtRU5PREVWOworCS8qCisJICogV2Uga25vdyB0aGUgZHJpdmVyIGlzIGFscmVhZHkgbG9hZGVkLCBzbyB0aGUgZGV2aWNlIHNob3VsZCBiZQorCSAqIGFscmVhZHkgYm91bmQuIElmIG5vdCBpdCBtZWFucyBiaW5kaW5nIGZhaWxlZCwgYW5kIHRoZW4gdGhlcmUKKwkgKiBpcyBubyBwb2ludCBpbiBrZWVwaW5nIHRoZSBkZXZpY2UgaW5zdGFudGlhdGVkLgorCSAqLworCWlmICghY2xpZW50LT5kcml2ZXIpIHsKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCS8qCiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmMgYi9zb3VuZC9hcm0vYWFjaS5jCmluZGV4IGRjNzgyNzIuLjFmMGY4MjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmMKKysrIGIvc291bmQvYXJtL2FhY2kuYwpAQCAtOTM3LDYgKzkzNyw3IEBACiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OwogCWludCByZXQ7CiAKKwl3cml0ZWwoMCwgYWFjaS0+YmFzZSArIEFDOTdfUE9XRVJET1dOKTsKIAkvKgogCSAqIEFzc2VydCBBQUNJUkVTRVQgZm9yIDJ1cwogCSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwppbmRleCA0ZTM0ZDE5Li5iNGI0OGFmIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwpAQCAtMTM3LDkgKzEzNyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkKQpAQCAtMTQ4LDkgKzE0OCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfYWM5N19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2FyZCkKQEAgLTE1OSw5ICsxNTksMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jZWxzZQotI2RlZmluZSBweGEyeHhfYWM5N19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhMnh4X2FjOTdfcmVzdW1lCU5VTEwKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGEyeHhfYWM5N19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGEyeHhfYWM5N19zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhMnh4X2FjOTdfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBweGEyeHhfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCkBAIC0yNDEsMTEgKzI0MiwxMiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2FjOTdfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGEyeHhfYWM5N19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB4YTJ4eF9hYzk3X3JlbW92ZSksCi0JLnN1c3BlbmQJPSBweGEyeHhfYWM5N19zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhMnh4X2FjOTdfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyeHgtYWM5NyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmcHhhMnh4X2FjOTdfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IDBjMTQ0MDEuLmM2OWM2MGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtOTUzLDExICs5NTMsMTIgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ub3RpZnkgKm5vdGlmeTsKIAljaGFyIHN0clsxNl07Ci0Jc3RydWN0IHNuZF9wY20gKnBjbSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlpZiAoc25kX0JVR19PTighcGNtIHx8ICFkZXZpY2UpKQorCWlmIChzbmRfQlVHX09OKCFkZXZpY2UgfHwgIWRldmljZS0+ZGV2aWNlX2RhdGEpKQogCQlyZXR1cm4gLUVOWElPOworCXBjbSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CiAJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWVyciA9IHNuZF9wY21fYWRkKHBjbSk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCA1NjFkNmQ5Li5hYjczZWRmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjk4NSw3ICsyOTg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19zdGF0dXMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19zdGF0dXMgPQogewogCS5mYXVsdCA9CXNuZF9wY21fbW1hcF9zdGF0dXNfZmF1bHQsCiB9OwpAQCAtMzAyNCw3ICszMDI0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19jb250cm9sID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc25kX3BjbV92bV9vcHNfY29udHJvbCA9CiB7CiAJLmZhdWx0ID0Jc25kX3BjbV9tbWFwX2NvbnRyb2xfZmF1bHQsCiB9OwpAQCAtMzA5NCw3ICszMDk0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc25kX3BjbV92bV9vcHNfZGF0YSA9CiB7CiAJLm9wZW4gPQkJc25kX3BjbV9tbWFwX2RhdGFfb3BlbiwKIAkuY2xvc2UgPQlzbmRfcGNtX21tYXBfZGF0YV9jbG9zZSwKQEAgLTMxMTgsNyArMzExOCw3IEBACiAgKiBtbWFwIHRoZSBETUEgYnVmZmVyIG9uIEkvTyBtZW1vcnkgYXJlYQogICovCiAjaWYgU05EUlZfUENNX0lORk9fTU1BUF9JT01FTQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhX21taW8gPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhX21taW8gPQogewogCS5vcGVuID0JCXNuZF9wY21fbW1hcF9kYXRhX29wZW4sCiAJLmNsb3NlID0Jc25kX3BjbV9tbWFwX2RhdGFfY2xvc2UsCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IGMwYWRjMTQuLjcwZDZmMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCkBAIC0yNDgsNyArMjQ4LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YnN0cmVhbSwgJnMtPnN1YnN0cmVhbXMsIGxpc3QpIHsKIAkJaWYgKHN1YnN0cmVhbS0+b3BlbmVkKSB7CiAJCQlpZiAoc3RyZWFtID09IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUIHx8Ci0JCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkpCisJCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkgfHwKKwkJCSAgICAhc3Vic3RyZWFtLT5hcHBlbmQpCiAJCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHN1YmRldmljZSA8IDAgfHwgc3ViZGV2aWNlID09IHN1YnN0cmVhbS0+bnVtYmVyKSB7CkBAIC0yNjYsMTcgKzI2NywyMSBAQAogewogCWludCBlcnI7CiAKLQllcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzdWJzdHJlYW0pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHN1YnN0cmVhbS0+b3BzLT5vcGVuKHN1YnN0cmVhbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0Jc3Vic3RyZWFtLT5vcGVuZWQgPSAxOwotCWlmIChzdWJzdHJlYW0tPnVzZV9jb3VudCsrID09IDApCisJaWYgKHN1YnN0cmVhbS0+dXNlX2NvdW50ID09IDApIHsKKwkJZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc3Vic3RyZWFtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkgeworCQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCXN1YnN0cmVhbS0+b3BlbmVkID0gMTsKIAkJc3Vic3RyZWFtLT5hY3RpdmVfc2Vuc2luZyA9IDA7Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQotCQlzdWJzdHJlYW0tPmFwcGVuZCA9IDE7CisJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKKwkJCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKKwl9CisJc3Vic3RyZWFtLT51c2VfY291bnQrKzsKIAlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZCsrOwogCXJldHVybiAwOwogfQpAQCAtMjk3LDI3ICszMDIsMjcgQEAKIAkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCiAJCQkJICAgICAgIG1vZGUsICZzaW5wdXQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJfQogCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewogCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCiAJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKIAkJCQkgICAgICAgbW9kZSwgJnNvdXRwdXQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJfQogCiAJaWYgKHNpbnB1dCkgewogCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCBtb2RlKTsKIAkJaWYgKGVyciA8IDApCi0JCQlnb3RvIF9fZXJyb3I7CisJCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoc291dHB1dCkgewogCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc291dHB1dCwgbW9kZSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlpZiAoc2lucHV0KQogCQkJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCAwKTsKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKQEAgLTMyNSwxMyArMzMwLDYgQEAKIAlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7CiAJcmZpbGUtPm91dHB1dCA9IHNvdXRwdXQ7CiAJcmV0dXJuIDA7Ci0KLSAgICAgIF9fZXJyb3I6Ci0JaWYgKHNpbnB1dCAmJiBzaW5wdXQtPnJ1bnRpbWUpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzaW5wdXQpOwotCWlmIChzb3V0cHV0ICYmIHNvdXRwdXQtPnJ1bnRpbWUpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzb3V0cHV0KTsKLQlyZXR1cm4gZXJyOwogfQogCiAvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggNmJhMDY2Yy4uMjUyZTA0YyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkocGNtX2RldnMsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBjbV9kZXZzLCAiUENNIGRldmljZXMgIyAoMC00KSBmb3IgZHVtbXkgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9zdWJzdHJlYW1zLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhwY21fc3Vic3RyZWFtcywgIlBDTSBzdWJzdHJlYW1zICMgKDEtMTYpIGZvciBkdW1teSBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHBjbV9zdWJzdHJlYW1zLCAiUENNIHN1YnN0cmVhbXMgIyAoMS0xMjgpIGZvciBkdW1teSBkcml2ZXIuIik7CiAvL21vZHVsZV9wYXJhbV9hcnJheShtaWRpX2RldnMsIGludCwgTlVMTCwgMDQ0NCk7CiAvL01PRFVMRV9QQVJNX0RFU0MobWlkaV9kZXZzLCAiTUlESSBkZXZpY2VzICMgKDAtMikgZm9yIGR1bW15IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbShmYWtlX2J1ZmZlciwgYm9vbCwgMDQ0NCk7CkBAIC04MDgsOCArODA4LDYgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBlcnI7CiAKLQlpZiAoc25kX0JVR19PTighZHVtbXkpKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlzcGluX2xvY2tfaW5pdCgmZHVtbXktPm1peGVyX2xvY2spOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJEdW1teSBNaXhlciIpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKaW5kZXggNmU3ZDA5YS4uN2Q3MjJhMCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwpAQCAtMjksNiArMjksOCBAQAogCiBleHRlcm4gaW50IHVzZV9pbnRlcm5hbF9kcnVtczsKIAorc3RhdGljIHZvaWQgc25kX29wbDNfbm90ZV9vZmZfdW5zYWZlKHZvaWQgKnAsIGludCBub3RlLCBpbnQgdmVsLAorCQkJCSAgICAgc3RydWN0IHNuZF9taWRpX2NoYW5uZWwgKmNoYW4pOwogLyoKICAqIFRoZSBuZXh0IHRhYmxlIGxvb2tzIG1hZ2ljYWwsIGJ1dCBpdCBjZXJ0YWlubHkgaXMgbm90LiBJdHMgdmFsdWVzIGhhdmUKICAqIGJlZW4gY2FsY3VsYXRlZCBhcyB0YWJsZVtpXT04KmxvZyhpLzY0KS9sb2coMikgd2l0aCBhbiBvYnZpb3VzIGV4Y2VwdGlvbgpAQCAtMjQyLDE2ICsyNDQsMjAgQEAKIAlpbnQgYWdhaW4gPSAwOwogCWludCBpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnN5c190aW1lcl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgb3BsMy0+bWF4X3ZvaWNlczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfb3BsM192b2ljZSAqdnAgPSAmb3BsMy0+dm9pY2VzW2ldOwogCQlpZiAodnAtPnN0YXRlID4gMCAmJiB2cC0+bm90ZV9vZmZfY2hlY2spIHsKIAkJCWlmICh2cC0+bm90ZV9vZmYgPT0gamlmZmllcykKLQkJCQlzbmRfb3BsM19ub3RlX29mZihvcGwzLCB2cC0+bm90ZSwgMCwgdnAtPmNoYW4pOworCQkJCXNuZF9vcGwzX25vdGVfb2ZmX3Vuc2FmZShvcGwzLCB2cC0+bm90ZSwgMCwKKwkJCQkJCQkgdnAtPmNoYW4pOwogCQkJZWxzZQogCQkJCWFnYWluKys7CiAJCX0KIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnN5c190aW1lcl9sb2NrLCBmbGFncyk7CiAJaWYgKGFnYWluKSB7CiAJCW9wbDMtPnRsaXN0LmV4cGlyZXMgPSBqaWZmaWVzICsgMTsJLyogaW52b2tlIGFnYWluICovCiAJCWFkZF90aW1lcigmb3BsMy0+dGxpc3QpOwpAQCAtNjU4LDE1ICs2NjQsMTQgQEAKIC8qCiAgKiBSZWxlYXNlIGEgbm90ZSBpbiByZXNwb25zZSB0byBhIG1pZGkgbm90ZSBvZmYuCiAgKi8KLXZvaWQgc25kX29wbDNfbm90ZV9vZmYodm9pZCAqcCwgaW50IG5vdGUsIGludCB2ZWwsIHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgc25kX29wbDNfbm90ZV9vZmZfdW5zYWZlKHZvaWQgKnAsIGludCBub3RlLCBpbnQgdmVsLAorCQkJCSAgICAgc3RydWN0IHNuZF9taWRpX2NoYW5uZWwgKmNoYW4pCiB7CiAgIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKIAlpbnQgdm9pY2U7CiAJc3RydWN0IHNuZF9vcGwzX3ZvaWNlICp2cDsKIAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlvcGwzID0gcDsKIAogI2lmZGVmIERFQlVHX01JREkKQEAgLTY3NCwxMiArNjc5LDkgQEAKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0sIG5vdGUpOwogI2VuZGlmCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOwotCiAJaWYgKG9wbDMtPnN5bnRoX21vZGUgPT0gU05EUlZfT1BMM19NT0RFX1NFUSkgewogCQlpZiAoY2hhbi0+ZHJ1bV9jaGFubmVsICYmIHVzZV9pbnRlcm5hbF9kcnVtcykgewogCQkJc25kX29wbDNfZHJ1bV9zd2l0Y2gob3BsMywgbm90ZSwgdmVsLCAwLCBjaGFuKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQkvKiB0aGlzIGxvb3Agd2lsbCBob3BlZnVsbHkga2lsbCBhbGwgZXh0cmEgdm9pY2VzLCBiZWNhdXNlCkBAIC02OTcsNiArNjk5LDE2IEBACiAJCQlzbmRfb3BsM19raWxsX3ZvaWNlKG9wbDMsIHZvaWNlKTsKIAkJfQogCX0KK30KKwordm9pZCBzbmRfb3BsM19ub3RlX29mZih2b2lkICpwLCBpbnQgbm90ZSwgaW50IHZlbCwKKwkJICAgICAgIHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBzbmRfb3BsMyAqb3BsMyA9IHA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7CisJc25kX29wbDNfbm90ZV9vZmZfdW5zYWZlKHAsIG5vdGUsIHZlbCwgY2hhbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCmluZGV4IDg0Y2MyNjUuLmUxMTQ1YWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCkBAIC0zOSwyNSArMzksMjAgQEAKIC8qIHdyaXRlIHRoZSBwb3J0IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV4cGlyZSB0aW1lIGluIG5zOwogICogY2FsbGVkIGF0IHRoZSB0cmlnZ2VyLXN0YXJ0IGFuZCBpbiBocnRpbWVyIGNhbGxiYWNrCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCitzdGF0aWMgdTY0IHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIHRpbWVyX2NudCwgdmFsOwogCXU2NCBuczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoY2hpcC0+dGhhbGYpIHsKIAkJb3V0YihjaGlwLT52YWw2MSwgMHg2MSk7CiAJCWNoaXAtPnRoYWxmID0gMDsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSkKLQkJCXJldHVybiAwOwogCQlyZXR1cm4gY2hpcC0+bnNfcmVtOwogCX0KIAotCWlmICghYXRvbWljX3JlYWQoJmNoaXAtPnRpbWVyX2FjdGl2ZSkpCi0JCXJldHVybiAwOwogCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAlpZiAoIXN1YnN0cmVhbSkKIAkJcmV0dXJuIDA7CkBAIC04OCwyNCArODMsMTcgQEAKIAlyZXR1cm4gbnM7CiB9CiAKLWVudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3N0YXRpYyB2b2lkIHBjc3BfcG9pbnRlcl91cGRhdGUoc3RydWN0IHNuZF9wY3NwICpjaGlwKQogewotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCWludCBwZXJpb2RzX2VsYXBzZWQsIHBvaW50ZXJfdXBkYXRlOwogCXNpemVfdCBwZXJpb2RfYnl0ZXMsIGJ1ZmZlcl9ieXRlczsKLQl1bnNpZ25lZCBsb25nIG5zOworCWludCBwZXJpb2RzX2VsYXBzZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBvaW50ZXJfdXBkYXRlID0gIWNoaXAtPnRoYWxmOwotCW5zID0gcGNzcF90aW1lcl91cGRhdGUoaGFuZGxlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Ci0KIAkvKiB1cGRhdGUgdGhlIHBsYXliYWNrIHBvc2l0aW9uICovCiAJc3Vic3RyZWFtID0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtOwogCWlmICghc3Vic3RyZWFtKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisJCXJldHVybjsKIAogCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCWJ1ZmZlcl9ieXRlcyA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwpAQCAtMTM0LDYgKzEyMiwyNiBAQAogCiAJaWYgKHBlcmlvZHNfZWxhcHNlZCkKIAkJdGFza2xldF9zY2hlZHVsZSgmcGNzcF9wY21fdGFza2xldCk7Cit9CisKK2VudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXAgPSBjb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3Qgc25kX3Bjc3AsIHRpbWVyKTsKKwlpbnQgcG9pbnRlcl91cGRhdGU7CisJdTY0IG5zOworCisJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSB8fCAhY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlwb2ludGVyX3VwZGF0ZSA9ICFjaGlwLT50aGFsZjsKKwlucyA9IHBjc3BfdGltZXJfdXBkYXRlKGNoaXApOworCWlmICghbnMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENTUDogdW5leHBlY3RlZCBzdG9wXG4iKTsKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCX0KKworCWlmIChwb2ludGVyX3VwZGF0ZSkKKwkJcGNzcF9wb2ludGVyX3VwZGF0ZShjaGlwKTsKIAogCWhydGltZXJfZm9yd2FyZChoYW5kbGUsIGhydGltZXJfZ2V0X2V4cGlyZXMoaGFuZGxlKSwgbnNfdG9fa3RpbWUobnMpKTsKIApAQCAtMTQyLDggKzE1MCw2IEBACiAKIHN0YXRpYyBpbnQgcGNzcF9zdGFydF9wbGF5aW5nKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKLQl1bnNpZ25lZCBsb25nIG5zOwotCiAjaWYgUENTUF9ERUJVRwogCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHN0YXJ0X3BsYXlpbmcgY2FsbGVkXG4iKTsKICNlbmRpZgpAQCAtMTU5LDExICsxNjUsNyBAQAogCWF0b21pY19zZXQoJmNoaXAtPnRpbWVyX2FjdGl2ZSwgMSk7CiAJY2hpcC0+dGhhbGYgPSAwOwogCi0JbnMgPSBwY3NwX3RpbWVyX3VwZGF0ZSgmcGNzcF9jaGlwLnRpbWVyKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gLUVJTzsKLQotCWhydGltZXJfc3RhcnQoJnBjc3BfY2hpcC50aW1lciwga3RpbWVfc2V0KDAsIG5zKSwgSFJUSU1FUl9NT0RFX1JFTCk7CisJaHJ0aW1lcl9zdGFydCgmcGNzcF9jaGlwLnRpbWVyLCBrdGltZV9zZXQoMCwgMCksIEhSVElNRVJfTU9ERV9SRUwpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzIsMjEgKzIzNCwyMiBAQAogc3RhdGljIGludCBzbmRfcGNzcF9wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSNpZiBQQ1NQX0RFQlVHCi0JcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogcHJlcGFyZSBjYWxsZWQsICIKLQkJCSJzaXplPSV6aSBwc2l6ZT0lemkgZj0lemkgZjE9JWlcbiIsCi0JCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAotCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkgLwotCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCi0JCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZHMpOwotI2VuZGlmCiAJcGNzcF9zeW5jX3N0b3AoY2hpcCk7CiAJY2hpcC0+cGxheWJhY2tfcHRyID0gMDsKIAljaGlwLT5wZXJpb2RfcHRyID0gMDsKIAljaGlwLT5mbXRfc2l6ZSA9CiAJCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KSA+PiAzOwogCWNoaXAtPmlzX3NpZ25lZCA9IHNuZF9wY21fZm9ybWF0X3NpZ25lZChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCk7CisjaWYgUENTUF9ERUJVRworCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHByZXBhcmUgY2FsbGVkLCAiCisJCQkic2l6ZT0lemkgcHNpemU9JXppIGY9JXppIGYxPSVpIGZzaXplPSVpXG4iLAorCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCisJCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKKwkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pIC8KKwkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAorCQkJc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2RzLAorCQkJY2hpcC0+Zm10X3NpemUpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9taXhlci5jCmluZGV4IDE5OWIwMzMuLjkwM2JjODQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbWl4ZXIuYwpAQCAtNzIsNyArNzIsNyBAQAogCWlmICh0cmVibGUgIT0gY2hpcC0+dHJlYmxlKSB7CiAJCWNoaXAtPnRyZWJsZSA9IHRyZWJsZTsKICNpZiBQQ1NQX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVpXG4iLCBQQ1NQX1JBVEUoKSk7CisJCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVsaVxuIiwgUENTUF9SQVRFKCkpOwogI2VuZGlmCiAJCWNoYW5nZWQgPSAxOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvaGFsMi5jIGIvc291bmQvbWlwcy9oYWwyLmMKaW5kZXggYzUyNjkxYy4uOWE4OGNkZiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9oYWwyLmMKKysrIGIvc291bmQvbWlwcy9oYWwyLmMKQEAgLTkxNSw3ICs5MTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBoYWwyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgaGFsMl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwppbmRleCBlNDk3NTI1Li44NjkxZjRjIDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYworKysgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwpAQCAtOTczLDcgKzk3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHNuZF9zZ2lvMmF1ZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX3NnaW8yYXVkaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCmluZGV4IDc5M2I3ZjQuLjNmM2MzZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwpAQCAtMjE5LDcgKzIxOSw5IEBACiAgICAgICogIE1pZCBsZXZlbCBzdHVmZgogICAgICAqLwogCi1zdHJ1Y3Qgc291bmRfc2V0dGluZ3MgZG1hc291bmQgPSB7IC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEIH07CitzdHJ1Y3Qgc291bmRfc2V0dGluZ3MgZG1hc291bmQgPSB7CisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChkbWFzb3VuZC5sb2NrKQorfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNvdW5kX3NpbGVuY2Uodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9oZXgyaGV4LmMgYi9zb3VuZC9vc3MvaGV4MmhleC5jCmluZGV4IDU0NjBmYWEuLjA0MWVmNWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9oZXgyaGV4LmMKKysrIGIvc291bmQvb3NzL2hleDJoZXguYwpAQCAtMTIsNyArMTIsNyBAQAogI2RlZmluZSBNQVhfU0laRSAoMjU2KjEwMjQpCiB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhfU0laRV07CiAKLWludCBsb2FkaGV4KEZJTEUgKmluZiwgdW5zaWduZWQgY2hhciAqYnVmKQorc3RhdGljIGludCBsb2FkaGV4KEZJTEUgKmluZiwgdW5zaWduZWQgY2hhciAqYnVmKQogewogCWludCBsPTAsIGMsIGk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9jb21tb24uYyBiL3NvdW5kL29zcy9zYl9jb21tb24uYwppbmRleCA3N2QwZTVlLi5jZTRkYjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2JfY29tbW9uLmMKKysrIGIvc291bmQvb3NzL3NiX2NvbW1vbi5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKLQkJCQkvKiBwcmludGsoS0VSTl9XQVJOICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCisJCQkJLyogcHJpbnRrKEtFUk5fV0FSTklORyAiU291bmQgQmxhc3RlcjogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCQkJCTsKIAkJfQogCX0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgotCQkJCS8qIHByaW50ayhLRVJOX1dBUk4gIlNvdW5kIEJsYXN0ZXI6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCQkvKiBwcmludGsoS0VSTl9XQVJOSU5HICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCiAJCQkJOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NiX2Vzcy5jIGIvc291bmQvb3NzL3NiX2Vzcy5jCmluZGV4IDE4MGU5NWMuLjUxYTNkMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zYl9lc3MuYworKysgYi9zb3VuZC9vc3Mvc2JfZXNzLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDo7Ci0JCQkvKiBwcmludGsoS0VSTl9XQVJOICJFU1M6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCS8qIHByaW50ayhLRVJOX1dBUk5JTkcgIkVTUzogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKaW5kZXggZTkyNDQ5Mi4uZjQ3ZjllMiAxMDA2NDQKLS0tIGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYworKysgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCkBAIC02MjQsNiArNjI0LDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKKwlpZiAoc25kX0JVR19PTighaCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaGFybW9ueV9kaXNhYmxlX2ludGVycnVwdHMoaCk7CiAJCiAgICAJZXJyID0gc25kX3BjbV9uZXcoaC0+Y2FyZCwgImhhcm1vbnkiLCAwLCAxLCAxLCAmcGNtKTsKQEAgLTg2NSwxMSArODY4LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogc25kX2hhcm1vbnlfbWl4ZXJfaW5pdChzdHJ1Y3Qgc25kX2hhcm1vbnkgKmgpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gaC0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGlkeCwgZXJyOwogCiAJaWYgKHNuZF9CVUdfT04oIWgpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwljYXJkID0gaC0+Y2FyZDsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiSGFybW9ueSBHYWluIGNvbnRyb2wgaW50ZXJmYWNlIik7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IEhBUk1PTllfQ09OVFJPTFM7IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IGZiNWVlM2MuLjc1YzYwMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC0yNTksNyArMjU5LDYgQEAKIAogY29uZmlnIFNORF9DUzU1MzVBVURJTwogCXRyaXN0YXRlICJDUzU1MzUvQ1M1NTM2IEF1ZGlvIgotCWRlcGVuZHMgb24gWDg2ICYmICFYODZfNjQKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBTTkRfQUM5N19DT0RFQwogCWhlbHAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBiNDU4ZDIwLi5hYWY0ZGE2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC05NzMsNyArOTczLDcgQEAKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAKIAlzbmRfYWxpX3ByaW50aygiZnJlZV92b2ljZTogY2hhbm5lbD0lZFxuIixwdm9pY2UtPm51bWJlcik7Ci0JaWYgKHB2b2ljZSA9PSBOVUxMIHx8ICFwdm9pY2UtPnVzZSkKKwlpZiAoIXB2b2ljZS0+dXNlKQogCQlyZXR1cm47CiAJc25kX2FsaV9jbGVhcl92b2ljZXMoY29kZWMsIHB2b2ljZS0+bnVtYmVyLCBwdm9pY2UtPm51bWJlcik7CiAJc3Bpbl9sb2NrX2lycSgmY29kZWMtPnZvaWNlX2FsbG9jKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggMjQ1ODVjNi4uNGUyYjkyNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTgwOCw2ICs4MDgsOCBAQAogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTAwMiwgMHgwMDAxLCBHRU5FUklDKSwKIAkvKiBMZWFkdGVrIFdpbmZhc3QgdHYgMjAwMHhwIGRlbHV4ICovCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgxMDdkLCAweDY2MDYsIEdFTkVSSUMpLAorCS8qIFBpbm5hY2xlIFBDVFYgKi8KKwlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDExYmQsIDB4MDAxMiwgR0VORVJJQyksCiAJLyogVm9vZG9vIFRWIDIwMCAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTIxYSwgMHgzMDAwLCBHRU5FUklDKSwKIAkvKiBBc2tleSBDb21wdXRlciBDb3JwLiBNYWdpY1RWaWV3Jzk5ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCmluZGV4IGIxYjNhNjQuLjc1NDU0NjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCiBzdGF0aWMgaW50IGF0Y19saW5lX3N1cnJvdW5kX3VubXV0ZShzdHJ1Y3QgY3RfYXRjICphdGMsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCiB7Ci0JcmV0dXJuIGF0Y19kYWlvX3VubXV0ZShhdGMsIHN0YXRlLCBMSU5FTzQpOworCXJldHVybiBhdGNfZGFpb191bm11dGUoYXRjLCBzdGF0ZSwgTElORU8yKTsKIH0KIAogc3RhdGljIGludCBhdGNfbGluZV9jbGZlX3VubXV0ZShzdHJ1Y3QgY3RfYXRjICphdGMsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCkBAIC0xMDQ3LDcgKzEwNDcsNyBAQAogCiBzdGF0aWMgaW50IGF0Y19saW5lX3JlYXJfdW5tdXRlKHN0cnVjdCBjdF9hdGMgKmF0YywgdW5zaWduZWQgY2hhciBzdGF0ZSkKIHsKLQlyZXR1cm4gYXRjX2RhaW9fdW5tdXRlKGF0Yywgc3RhdGUsIExJTkVPMik7CisJcmV0dXJuIGF0Y19kYWlvX3VubXV0ZShhdGMsIHN0YXRlLCBMSU5FTzQpOwogfQogCiBzdGF0aWMgaW50IGF0Y19saW5lX2luX3VubXV0ZShzdHJ1Y3QgY3RfYXRjICphdGMsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCBkYTIwNjVjLi4xMzA1ZjdjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTk1MCw3ICs5NTAsNyBAQAogCUNvbnRyb2wgaW50ZXJmYWNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgorI2lmICFkZWZpbmVkKEVDSE9DQVJEX0hBU19WTUlYRVIpIHx8IGRlZmluZWQoRUNIT0NBUkRfSEFTX0xJTkVfT1VUX0dBSU4pCiAKIC8qKioqKioqKioqKioqKioqKioqIFBDTSBvdXRwdXQgdm9sdW1lICoqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHNuZF9lY2hvX291dHB1dF9nYWluX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0xMDAzLDYgKzEwMDMsMTkgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAorI2lmZGVmIEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOCisvKiBPbiB0aGUgTWlhIHRoaXMgb25lIGNvbnRyb2xzIHRoZSBsaW5lLW91dCB2b2x1bWUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19saW5lX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7CisJLm5hbWUgPSAiTGluZSBQbGF5YmFjayBWb2x1bWUiLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCisJLmluZm8gPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvLAorCS5nZXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9nZXQsCisJLnB1dCA9IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dCwKKwkudGx2ID0gey5wID0gZGJfc2NhbGVfb3V0cHV0X2dhaW59LAorfTsKKyNlbHNlCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fcGNtX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xMDEyLDkgKzEwMjUsMTAgQEAKIAkucHV0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fcHV0LAogCS50bHYgPSB7LnAgPSBkYl9zY2FsZV9vdXRwdXRfZ2Fpbn0sCiB9OwotCiAjZW5kaWYKIAorI2VuZGlmIC8qICFFQ0hPQ0FSRF9IQVNfVk1JWEVSIHx8IEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOICovCisKIAogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX0lOUFVUX0dBSU4KQEAgLTIwMzAsMTAgKzIwNDQsMTggQEAKIAlzbmRfZWNob192bWl4ZXIuY291bnQgPSBudW1fcGlwZXNfb3V0KGNoaXApICogbnVtX2J1c3Nlc19vdXQoY2hpcCk7CiAJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3ZtaXhlciwgY2hpcCkpKSA8IDApCiAJCWdvdG8gY3RsX2Vycm9yOwotI2Vsc2UKLQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fcGNtX291dHB1dF9nYWluLCBjaGlwKSkpIDwgMCkKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTElORV9PVVRfR0FJTgorCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCQkgIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fbGluZV9vdXRwdXRfZ2FpbiwgY2hpcCkpOworCWlmIChlcnIgPCAwKQogCQlnb3RvIGN0bF9lcnJvcjsKICNlbmRpZgorI2Vsc2UgLyogRUNIT0NBUkRfSEFTX1ZNSVhFUiAqLworCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCQkgIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fcGNtX291dHB1dF9nYWluLCBjaGlwKSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gY3RsX2Vycm9yOworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19WTUlYRVIgKi8KIAogI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCiAJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfaW5wdXRfZ2FpbiwgY2hpcCkpKSA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwppbmRleCBmM2I5YjQ1Li5mMDVjOGMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgRUNIT0NBUkRfSEFTX0FEQVQJRkFMU0UKICNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKICNkZWZpbmUgRUNIT0NBUkRfSEFTX01JREkKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0xJTkVfT1VUX0dBSU4KIAogLyogUGlwZSBpbmRleGVzICovCiAjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCAyMGE2NmY4Li42NTE3ZjU4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTcyMiw5ICs3MjIsMTAgQEAKIAkJICAgY2hpcC0+bGFzdF9jbWRbYWRkcl0pOwogCWNoaXAtPnNpbmdsZV9jbWQgPSAxOwogCWJ1cy0+cmVzcG9uc2VfcmVzZXQgPSAwOwotCS8qIHJlLWluaXRpYWxpemUgQ09SQi9SSVJCICovCisJLyogcmVsZWFzZSBDT1JCL1JJUkIgKi8KIAlhenhfZnJlZV9jbWRfaW8oY2hpcCk7Ci0JYXp4X2luaXRfY21kX2lvKGNoaXApOworCS8qIGRpc2FibGUgdW5zb2xpY2l0ZWQgcmVzcG9uc2VzICovCisJYXp4X3dyaXRlbChjaGlwLCBHQ1RMLCBhenhfcmVhZGwoY2hpcCwgR0NUTCkgJiB+SUNINl9HQ1RMX1VOU09MKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTg2NSw3ICs4NjYsOSBAQAogCX0KIAogCS8qIEFjY2VwdCB1bnNvbGljaXRlZCByZXNwb25zZXMgKi8KLQlhenhfd3JpdGVsKGNoaXAsIEdDVEwsIGF6eF9yZWFkbChjaGlwLCBHQ1RMKSB8IElDSDZfR0NUTF9VTlNPTCk7CisJaWYgKCFjaGlwLT5zaW5nbGVfY21kKQorCQlhenhfd3JpdGVsKGNoaXAsIEdDVEwsIGF6eF9yZWFkbChjaGlwLCBHQ1RMKSB8CisJCQkgICBJQ0g2X0dDVExfVU5TT0wpOwogCiAJLyogZGV0ZWN0IGNvZGVjcyAqLwogCWlmICghY2hpcC0+Y29kZWNfbWFzaykgewpAQCAtOTgwLDcgKzk4Myw4IEBACiAJYXp4X2ludF9lbmFibGUoY2hpcCk7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBjb2RlYyBjb21tYW5kIEkvTyAqLwotCWF6eF9pbml0X2NtZF9pbyhjaGlwKTsKKwlpZiAoIWNoaXAtPnNpbmdsZV9jbWQpCisJCWF6eF9pbml0X2NtZF9pbyhjaGlwKTsKIAogCS8qIHByb2dyYW0gdGhlIHBvc2l0aW9uIGJ1ZmZlciAqLwogCWF6eF93cml0ZWwoY2hpcCwgRFBMQkFTRSwgKHUzMiljaGlwLT5wb3NidWYuYWRkcik7CkBAIC0yMzAzLDYgKzIzMDcsNyBAQAogICogd2hpdGUtbGlzdCBmb3IgZW5hYmxlX21zaQogICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX3doaXRlX2xpc3RbXSBfX2RldmluaXRkYXRhID0geworCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZjcsICJIUCBQYXZpbGlvbiBkdjR0LTEzMDAiLCAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjA3LCAiSFAgQ29tcGEgQ1E0MCIsIDEpLAogCXt9CiB9OwpAQCAtMjY3Myw2ICsyNjc4LDcgQEAKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA0NGIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU1YyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTVkKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1OTApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggMjE1ZTcyYS4uMmQ2MDNmNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC00MDMyLDYgKzQwMzIsMTI3IEBACiB9CiAKIC8qCisgKiBIUCBUb3VjaHNtYXJ0CisgKiBwb3J0LUEgKDB4MTEpICAgICAgLSBmcm9udCBocC1vdXQKKyAqIHBvcnQtQiAoMHgxNCkgICAgICAtIHVudXNlZAorICogcG9ydC1DICgweDE1KSAgICAgIC0gdW51c2VkCisgKiBwb3J0LUQgKDB4MTIpICAgICAgLSByZWFyIGxpbmUgb3V0CisgKiBwb3J0LUUgKDB4MWMpICAgICAgLSBmcm9udCBtaWMtaW4KKyAqIHBvcnQtRiAoMHgxNikgICAgICAtIEludGVybmFsIHNwZWFrZXJzCisgKiBkaWdpdGFsLW1pYyAoMHgxNykgLSBJbnRlcm5hbCBtaWMKKyAqLworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NGFfdG91Y2hzbWFydF92ZXJic1tdID0geworCS8qIERBQ3M7IHVubXV0ZSBhcyBkZWZhdWx0ICovCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4Mjd9LCAvKiAwZEIgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgyN30sIC8qIDBkQiAqLworCS8qIFBvcnQtQSAoSFApIG1peGVyIC0gcm91dGUgb25seSBmcm9tIGFuYWxvZyBtaXhlciAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCS8qIFBvcnQtQSBwaW4gKi8KKwl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCS8qIFBvcnQtQSAoSFApIHBpbiAtIGFsd2F5cyB1bm11dGVkICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBQb3J0LUUgKGludCBzcGVha2VyKSBtaXhlciAtIHJvdXRlIG9ubHkgZnJvbSBhbmFsb2cgbWl4ZXIgKi8KKwl7MHgyNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgwM30sCisJLyogUG9ydC1FIHBpbiAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwkvKiBQb3J0LUYgKGludCBzcGVha2VyKSBtaXhlciAtIHJvdXRlIG9ubHkgZnJvbSBhbmFsb2cgbWl4ZXIgKi8KKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwkvKiBQb3J0LUYgcGluICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiBBbmFsb2cgbWl4ZXI7IG11dGUgYXMgZGVmYXVsdCAqLworCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAorCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNSl9LAorCS8qIEFuYWxvZyBNaXggb3V0cHV0IGFtcCAqLworCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIGNhcHR1cmUgc291cmNlcyAqLworCS8qIHsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwgKi8gLyogc2V0IHZpYSB1bnNvbCAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgcGluLXNlbnNlICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBRDE4ODRBX0hQX0VWRU5UfSwKKwl7MHgxYywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFEMTg4NEFfTUlDX0VWRU5UfSwKKwkvKiBhbGxvdyB0byB0b3VjaCBHUElPMSAoZm9yIG11dGUgY29udHJvbCkgKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAyfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDJ9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDJ9LCAvKiBmaXJzdCBtdXRlZCAqLworCS8qIGludGVybmFsIG1pYyAtIGRtaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCS8qIHNldCBtYWdpYyBDT0VGcyBmb3IgZG1pYyAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCAweDEzZjd9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MDh9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODRhX3RvdWNoc21hcnRfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisvKglIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksKi8KKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKKwkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCisJCS5wdXQgPSBhZDE4ODRhX21vYmlsZV9tYXN0ZXJfc3dfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgyMSwgMywgMCwgSERBX09VVFBVVCksCisJfSwKKwlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaWYgcGx1Z2dlZCAqLworc3RhdGljIHZvaWQgYWQxOTg0YV90b3VjaHNtYXJ0X2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaWYgKHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYywgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MGMsIDAsCisJCQkJICAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHg0KTsKKwl9IGVsc2UgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDBjLCAwLAorCQkJCSAgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4NSk7CisJfQorfQorCisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGFkMTk4NGFfdG91Y2hzbWFydF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwl1bnNpZ25lZCBpbnQgcmVzKQoreworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBRDE4ODRBX0hQX0VWRU5UOgorCQlhZDE4ODRhX2hwX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBBRDE4ODRBX01JQ19FVkVOVDoKKwkJYWQxOTg0YV90b3VjaHNtYXJ0X2F1dG9taWMoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKKy8qIGluaXRpYWxpemUgamFjay1zZW5zaW5nLCB0b28gKi8KK3N0YXRpYyBpbnQgYWQxOTg0YV90b3VjaHNtYXJ0X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWQxOTh4X2luaXQoY29kZWMpOworCWFkMTg4NGFfaHBfYXV0b211dGUoY29kZWMpOworCWFkMTk4NGFfdG91Y2hzbWFydF9hdXRvbWljKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgogICovCiAKIGVudW0gewpAQCAtNDAzOSw2ICs0MTYwLDcgQEAKIAlBRDE4ODRBX0xBUFRPUCwKIAlBRDE4ODRBX01PQklMRSwKIAlBRDE4ODRBX1RISU5LUEFELAorCUFEMTk4NEFfVE9VQ0hTTUFSVCwKIAlBRDE4ODRBX01PREVMUwogfTsKIApAQCAtNDA0Nyw2ICs0MTY5LDcgQEAKIAlbQUQxODg0QV9MQVBUT1BdCT0gImxhcHRvcCIsCiAJW0FEMTg4NEFfTU9CSUxFXQk9ICJtb2JpbGUiLAogCVtBRDE4ODRBX1RISU5LUEFEXQk9ICJ0aGlua3BhZCIsCisJW0FEMTk4NEFfVE9VQ0hTTUFSVF0JPSAidG91Y2hzbWFydCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWQxODg0YV9jZmdfdGJsW10gPSB7CkBAIC00MDU5LDYgKzQxODIsNyBAQAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzNjAwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmZmMCwgMHg3MDEwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9NT0JJTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwYWMsICJUaGlua3BhZCBYMzAwIiwgQUQxODg0QV9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE4MiwgIlRvdWNoc21hcnQiLCBBRDE5ODRBX1RPVUNIU01BUlQpLAogCXt9CiB9OwogCkBAIC00MTQyLDYgKzQyNjYsMjEgQEAKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTk4NGFfdGhpbmtwYWRfdW5zb2xfZXZlbnQ7CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFkMTk4NGFfdGhpbmtwYWRfaW5pdDsKIAkJYnJlYWs7CisJY2FzZSBBRDE5ODRBX1RPVUNIU01BUlQ6CisJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NGFfdG91Y2hzbWFydF9taXhlcnM7CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhZDE5ODRhX3RvdWNoc21hcnRfdmVyYnM7CisJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTk4NGFfdG91Y2hzbWFydF91bnNvbF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWQxOTg0YV90b3VjaHNtYXJ0X2luaXQ7CisJCS8qIHNldCB0aGUgdXBwZXItbGltaXQgZm9yIG1peGVyIGFtcCB0byAwZEIgZm9yIGF2b2lkaW5nIHRoZQorCQkgKiBwb3NzaWJsZSBkYW1hZ2UgYnkgb3ZlcmxvYWRpbmcKKwkJICovCisJCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MjAsIEhEQV9JTlBVVCwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAorCQkJCQkgICgweDA1IDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKKwkJCQkJICAoMSA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCA5ZDg5OWVkLi45MDU4NTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC0xMTAsNiArMTEwLDcgQEAKIAogCXVuc2lnbmVkIGludCBkZWxsX2F1dG9tdXRlOwogCXVuc2lnbmVkIGludCBwb3J0X2RfbW9kZTsKKwl1bnNpZ25lZCBjaGFyIGV4dF9taWNfYmlhczsKIH07CiAKIHN0YXRpYyBpbnQgY29uZXhhbnRfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKQEAgLTY4MiwxMSArNjgzLDEzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0NV9jYXB0dXJlX3NvdXJjZV9iZW5xID0gewotCS5udW1faXRlbXMgPSAzLAorCS5udW1faXRlbXMgPSA1LAogCS5pdGVtcyA9IHsKIAkJeyAiSW50TWljIiwgMHgxIH0sCiAJCXsgIkV4dE1pYyIsIDB4MiB9LAogCQl7ICJMaW5lSW4iLCAweDMgfSwKKwkJeyAiQ0QiLCAgICAgMHg0IH0sCisJCXsgIk1peGVyIiwgIDB4MCB9LAogCX0KIH07CiAKQEAgLTgxMSwxMSArODE0LDE5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV9iZW5xX21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNEIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAorCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBJbiBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgSW4gQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIEluIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDB4MywgSERBX0lOUFVUKSwKIAorCUhEQV9DT0RFQ19WT0xVTUUoIk1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MCwgSERBX0lOUFVUKSwKKwogCXt9CiB9OwogCkBAIC0xOTE3LDYgKzE5MjgsMTEgQEAKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxNyB9OwogI2RlZmluZSBDWFQ1MDY2X1NQRElGX09VVAkweDIxCiAKKy8qIE9MUEMncyBtaWNyb3Bob25lIHBvcnQgaXMgREMgY291cGxlZCBmb3IgdXNlIHdpdGggZXh0ZXJuYWwgc2Vuc29ycywKKyAqIHRoZXJlZm9yZSB3ZSB1c2UgYSA1MCUgbWljIGJpYXMgaW4gb3JkZXIgdG8gY2VudGVyIHRoZSBpbnB1dCBzaWduYWwgd2l0aAorICogdGhlIERDIGlucHV0IHJhbmdlIG9mIHRoZSBjb2RlYy4gKi8KKyNkZWZpbmUgQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBUyBQSU5fVlJFRjUwCisKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBjeHQ1MDY2X21vZGVzWzFdID0gewogCXsgMiwgTlVMTCB9LAogfTsKQEAgLTE5NzAsOSArMTk4NiwxMCBAQAogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDY2X2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKIAkJLyogZW5hYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCi0JCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBzcGVjLT5leHRfbWljX2JpYXN9LAogCiAJCS8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaW5wdXQgKi8KIAkJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKQEAgLTIyMjUsNyArMjI0Miw3IEBACiAJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogREFDMSAqLwogCiAJLyogUG9ydCBCOiBleHRlcm5hbCBtaWNyb3Bob25lICovCi0JezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBU30sCiAKIAkvKiBQb3J0IEM6IGludGVybmFsIG1pY3JvcGhvbmUgKi8KIAl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKQEAgLTIzMTUsNiArMjMzMiw3IEBACiAJCSAgICAgIENYVDUwNjZfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmY1LCAiRGVsbCIsCiAJCSAgICAgIENYVDUwNjZfREVMTF9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDA4MzMsICJPTFBDIFhPLTEuNSIsIENYVDUwNjZfT0xQQ19YT18xXzUpLAogCXt9CiB9OwogCkBAIC0yMzQyLDYgKzIzNjAsNyBAQAogCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDY2X2NhcHR1cmVfc291cmNlOwogCiAJc3BlYy0+cG9ydF9kX21vZGUgPSBQSU5fSFA7CisJc3BlYy0+ZXh0X21pY19iaWFzID0gUElOX1ZSRUY4MDsKIAogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzOwpAQCAtMjM3Myw2ICsyMzkyLDcgQEAKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3Rlcl9vbHBjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwogCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7CisJCXNwZWMtPmV4dF9taWNfYmlhcyA9IENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVM7CiAKIAkJLyogbm8gUy9QRElGIG91dCAqLwogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwppbmRleCBjODQzNWM5Li42YWZkYWIwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKIAorLyogZGVmaW5lIGJlbG93IHRvIHJlc3RyaWN0IHRoZSBzdXBwb3J0ZWQgcmF0ZXMgYW5kIGZvcm1hdHMgKi8KKy8qICNkZWZpbmUgTElNSVRFRF9SQVRFX0ZNVF9TVVBQT1JUICovCisKIHN0cnVjdCBudmhkbWlfc3BlYyB7CiAJc3RydWN0IGhkYV9tdWx0aV9vdXQgbXVsdGlvdXQ7CiAKQEAgLTYwLDYgKzYzLDIyIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAorI2lmZGVmIExJTUlURURfUkFURV9GTVRfU1VQUE9SVAorLyogc3VwcG9ydCBvbmx5IHRoZSBzYWZlIGZvcm1hdCBhbmQgcmF0ZSAqLworI2RlZmluZSBTVVBQT1JURURfUkFURVMJCVNORFJWX1BDTV9SQVRFXzQ4MDAwCisjZGVmaW5lIFNVUFBPUlRFRF9NQVhCUFMJMTYKKyNkZWZpbmUgU1VQUE9SVEVEX0ZPUk1BVFMJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKKyNlbHNlCisvKiBzdXBwb3J0IGFsbCByYXRlcyBhbmQgZm9ybWF0cyAqLworI2RlZmluZSBTVVBQT1JURURfUkFURVMgXAorCShTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfFwKKwlTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwIHwgU05EUlZfUENNX1JBVEVfMTc2NDAwIHxcCisJIFNORFJWX1BDTV9SQVRFXzE5MjAwMCkKKyNkZWZpbmUgU1VQUE9SVEVEX01BWEJQUwkyNAorI2RlZmluZSBTVVBQT1JURURfRk9STUFUUyBcCisJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisjZW5kaWYKKwogLyoKICAqIENvbnRyb2xzCiAgKi8KQEAgLTI1OCw5ICsyNzcsOSBAQAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA4LAogCS5uaWQgPSBOdl9NYXN0ZXJfQ29udmVydF9uaWQsCi0JLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCi0JLm1heGJwcyA9IDE2LAotCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0gU1VQUE9SVEVEX1JBVEVTLAorCS5tYXhicHMgPSBTVVBQT1JURURfTUFYQlBTLAorCS5mb3JtYXRzID0gU1VQUE9SVEVEX0ZPUk1BVFMsCiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAogCQkuY2xvc2UgPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9jbG9zZV84Y2gsCkBAIC0yNzMsOSArMjkyLDkgQEAKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIAkubmlkID0gTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAotCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAotCS5tYXhicHMgPSAxNiwKLQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9IFNVUFBPUlRFRF9SQVRFUywKKwkubWF4YnBzID0gU1VQUE9SVEVEX01BWEJQUywKKwkuZm9ybWF0cyA9IFNVUFBPUlRFRF9GT1JNQVRTLAogCS5vcHMgPSB7CiAJCS5vcGVuID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fb3BlbiwKIAkJLmNsb3NlID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fY2xvc2VfMmNoLApAQCAtMzc4LDYgKzM5Nyw3IEBACiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfbnZoZG1pW10gPSB7CiAJeyAuaWQgPSAweDEwZGUwMDAyLCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDAwMywgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKKwl7IC5pZCA9IDB4MTBkZTAwMDUsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDA2LCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDAwNywgLm5hbWUgPSAiTUNQN0EgSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKIAl7IC5pZCA9IDB4MTBkZTAwNjcsIC5uYW1lID0gIk1DUDY3IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfMmNoIH0sCkBAIC0zODcsNiArNDA3LDcgQEAKIAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDAyIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDMiKTsKK01PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwNSIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDA2Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDciKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDA2NyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCAxMjk2MDU4Li43MDU4MzcxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcF9taXhlcjsJLyogY2FwdHVyZSBtaXhlciAqLwogCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAotCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKKwljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbMTBdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwKIAkJCQkJCSAqIHRlcm1pbmF0aW9uIQogCQkJCQkJICovCkBAIC05NjUsNiArOTY1LDggQEAKIAl1bnNpZ25lZCBpbnQgbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwogCWludCBpOwogCisJaWYgKCFuaWQpCisJCXJldHVybjsKIAlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVFJJR19SRVEpIC8qIG5lZWQgdHJpZ2dlcj8gKi8KIAkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9TRU5TRSwgMCk7CkBAIC0xMzMyLDE1ICsxMzM0LDIwIEBACiAJICoJICAgICAgICB3aGVuIHRoZSBleHRlcm5hbCBoZWFkcGhvbmUgb3V0IGphY2sgaXMgcGx1Z2dlZCIKIAkgKi8KIAlpZiAoIXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSkgeworCQloZGFfbmlkX3QgbmlkOwogCQl0bXAgPSAoYXNzID4+IDExKSAmIDB4MzsJLyogSFAgdG8gY2hhc3NpcyAqLwogCQlpZiAodG1wID09IDApCi0JCQlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSBwb3J0YTsKKwkJCW5pZCA9IHBvcnRhOwogCQllbHNlIGlmICh0bXAgPT0gMSkKLQkJCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IHBvcnRlOworCQkJbmlkID0gcG9ydGU7CiAJCWVsc2UgaWYgKHRtcCA9PSAyKQotCQkJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gcG9ydGQ7CisJCQluaWQgPSBwb3J0ZDsKIAkJZWxzZQogCQkJcmV0dXJuIDE7CisJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0czsgaSsrKQorCQkJaWYgKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXSA9PSBuaWQpCisJCQkJcmV0dXJuIDE7CisJCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IG5pZDsKIAl9CiAKIAlhbGNfaW5pdF9hdXRvX2hwKGNvZGVjKTsKQEAgLTEzNjIsNyArMTM2OSw3IEBACiB9CiAKIC8qCi0gKiBGaXgtdXAgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbnMKKyAqIEZpeC11cCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgYWRkIGRlZmF1bHQgdmVyYnMKICAqLwogCiBzdHJ1Y3QgYWxjX3BpbmNmZyB7CkBAIC0xMzcwLDkgKzEzNzcsMTQgQEAKIAl1MzIgdmFsOwogfTsKIAotc3RhdGljIHZvaWQgYWxjX2ZpeF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCitzdHJ1Y3QgYWxjX2ZpeHVwIHsKKwljb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqcGluczsKKwljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKnZlcmJzOworfTsKKworc3RhdGljIHZvaWQgYWxjX3BpY2tfZml4dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkgICBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcXVpcmssCi0JCQkgICBjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqKnBpbmZpeCkKKwkJCSAgIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgKmZpeCkKIHsKIAljb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqY2ZnOwogCkBAIC0xMzgwLDkgKzEzOTIsMTQgQEAKIAlpZiAoIXF1aXJrKQogCQlyZXR1cm47CiAKLQljZmcgPSBwaW5maXhbcXVpcmstPnZhbHVlXTsKLQlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKQotCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIGNmZy0+bmlkLCBjZmctPnZhbCk7CisJZml4ICs9IHF1aXJrLT52YWx1ZTsKKwljZmcgPSBmaXgtPnBpbnM7CisJaWYgKGNmZykgeworCQlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKQorCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBjZmctPm5pZCwgY2ZnLT52YWwpOworCX0KKwlpZiAoZml4LT52ZXJicykKKwkJYWRkX3ZlcmIoY29kZWMtPnNwZWMsIGZpeC0+dmVyYnMpOwogfQogCiAvKgpAQCAtNDY2Nyw5ICs0Njg0LDkgQEAKIAkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX25pZDsKIAkJZWxzZSB7CiAJCQlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOwotCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKLQkJCWlmIChpID09IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKKwkJCWlmIChpID49IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKIAkJCQlicmVhazsKKwkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7CiAJCX0KIAl9CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKQEAgLTYyMzIsNyArNjI0OSw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA4ZiwgIkFjZXIiLCBBTEMyNjBfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4NDU0MCwgIkZhdm9yaXQgMTAwWFMiLCBBTEMyNjBfRkFWT1JJVDEwMCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwOCwgIkhQIGQ1NzAwIiwgQUxDMjYwX0hQXzMwMTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkNTc1MCIsIEFMQzI2MF9IUF8zMDEzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODBhLCAiSFAgZDU3NTAiLCBBTEMyNjBfQVVUTyksIC8qIG5vIHF1aXJrICovCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAxMCwgIkhQIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTEsICJIUCIsIEFMQzI2MF9IUF8zMDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDEyLCAiSFAiLCBBTEMyNjBfSFBfREM3NjAwKSwKQEAgLTg4OTQsMTAgKzg5MTEsMTEgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzODAwLCAiTWFjYm9va1BybyA0LDEiLCBBTEM4ODVfTUJQMyksCiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4M2UwMCwgImlNYWMgMjQgQWx1bWludW0iLCBBTEM4ODVfSU1BQzI0KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzZjAwLCAiTWFjYm9vayA1LDEiLCBBTEM4ODVfTUI1KSwKLQkvKiBGSVhNRTogSFAgamFjayBzZW5zZSBzZWVtcyBub3Qgd29ya2luZyBmb3IgTUJQIDUsMSwgc28gYXBwYXJlbnRseQotCSAqIG5vIHBlcmZlY3Qgc29sdXRpb24geWV0CisJLyogRklYTUU6IEhQIGphY2sgc2Vuc2Ugc2VlbXMgbm90IHdvcmtpbmcgZm9yIE1CUCA1LDEgb3IgNSwyLAorCSAqIHNvIGFwcGFyZW50bHkgbm8gcGVyZmVjdCBzb2x1dGlvbiB5ZXQKIAkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MDAwLCAiTWFjYm9va1BybyA1LDEiLCBBTEM4ODVfTUI1KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0NjAwLCAiTWFjYm9va1BybyA1LDIiLCBBTEM4ODVfTUI1KSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC05NTkzLDExICs5NjExLDEzIEBACiAJeyB9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFsY19waW5jZmcgKmFsYzg4Ml9waW5fZml4ZXNbXSA9IHsKLQlbUElORklYX0FCSVRfQVc5RF9NQVhdID0gYWxjODgyX2FiaXRfYXc5ZF9waW5maXgsCitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19maXh1cCBhbGM4ODJfZml4dXBzW10gPSB7CisJW1BJTkZJWF9BQklUX0FXOURfTUFYXSA9IHsKKwkJLnBpbnMgPSBhbGM4ODJfYWJpdF9hdzlkX3BpbmZpeAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX3BpbmZpeF90YmxbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfZml4dXBfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTA3YSwgIkFiaXQgQVc5RC1NQVgiLCBQSU5GSVhfQUJJVF9BVzlEX01BWCksCiAJe30KIH07CkBAIC05Nzk0LDkgKzk4MTQsOSBAQAogCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOwogCQllbHNlIHsKIAkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7Ci0JCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwotCQkJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQorCQkJaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQogCQkJCWJyZWFrOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKIAkJfQogCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQpAQCAtOTg2OSw3ICs5ODg5LDcgQEAKIAkJYm9hcmRfY29uZmlnID0gQUxDODgyX0FVVE87CiAJfQogCi0JYWxjX2ZpeF9waW5jZmcoY29kZWMsIGFsYzg4Ml9waW5maXhfdGJsLCBhbGM4ODJfcGluX2ZpeGVzKTsKKwlhbGNfcGlja19maXh1cChjb2RlYywgYWxjODgyX2ZpeHVwX3RibCwgYWxjODgyX2ZpeHVwcyk7CiAKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg4Ml9BVVRPKSB7CiAJCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwpAQCAtMTE0NDEsNiArMTE0NjEsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMGYsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNiwgIlNvbnkgVkFJTyIsIEFMQzI2Ml9BVVRPKSwgLyogZGlnLW9ubHkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDI1LCAiU29ueSBWQUlPIFoyMU1OIiwgQUxDMjYyX1RPU0hJQkFfUzA2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDM1LCAiU29ueSBWQUlPIFZHTi1GVzE3MEoiLCBBTEMyNjJfQVVUTyksCisJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA0NywgIlNvbnkgVkFJTyBUeXBlIEciLCBBTEMyNjJfQVVUTyksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTA0ZCwgMHhmZjAwLCAweDkwMDAsICJTb255IFZBSU8iLAogCQkJICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMDAxLCAiVG9zaGliYSBkeW5hYm9vayBTUyBSWDEiLApAQCAtMTI1ODUsNyArMTI2MDcsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNWIsICJBY2VyIEFzcGlyZSBPbmUiLAogCQkJCQkJQUxDMjY4X0FDRVJfQVNQSVJFX09ORSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDI1MywgIkRlbGwgT0VNIiwgQUxDMjY4X0RFTEwpLAotCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyYjAsICJEZWxsIEluc3Bpcm9uIE1pbmk5IiwgQUxDMjY4X0RFTEwpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwMjgsIDB4ZmZmMCwgMHgwMmIwLAorCQkJIkRlbGwgSW5zcGlyb24gTWluaTkvVm9zdHJvIEE5MCIsIEFMQzI2OF9ERUxMKSwKIAkvKiBhbG1vc3QgY29tcGF0aWJsZSB3aXRoIHRvc2hpYmEgYnV0IHdpdGggb3B0aW9uYWwgZGlnaXRhbCBvdXRzOwogCSAqIGF1dG8tcHJvYmluZyBzZWVtcyB3b3JraW5nIGZpbmUKIAkgKi8KQEAgLTEyNjYwLDcgKzEyNjgzLDcgQEAKIAkJLmluaXRfaG9vayA9IGFsYzI2OF90b3NoaWJhX2F1dG9tdXRlLAogCX0sCiAJW0FMQzI2OF9BQ0VSXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfbWl4ZXIsIGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyLAorCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9taXhlciwgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyLAogCQkJICAgIGFsYzI2OF9iZWVwX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfYWNlcl92ZXJicyB9LApAQCAtMTI4NDIsMTIgKzEyODY1LDE1IEBACiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKIAkJaW50IGk7CiAKKwkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjhfY2Fwc3JjX25pZHM7CiAJCS8qIGdldCB0eXBlICovCiAJCXdjYXAgPSBnZXRfd2NhcHNfdHlwZSh3Y2FwKTsKIAkJaWYgKHNwZWMtPmF1dG9fbWljIHx8CiAJCSAgICB3Y2FwICE9IEFDX1dJRF9BVURfSU4gfHwgc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPT0gMSkgewogCQkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjhfYWRjX25pZHNfYWx0OwogCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjhfYWRjX25pZHNfYWx0KTsKKwkJCWlmIChzcGVjLT5hdXRvX21pYykKKwkJCQlmaXh1cF9hdXRvbWljX2FkYyhjb2RlYyk7CiAJCQlpZiAoc3BlYy0+YXV0b19taWMgfHwgc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPT0gMSkKIAkJCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY4X2NhcHR1cmVfbm9zcmNfbWl4ZXIpOwogCQkJZWxzZQpAQCAtMTI4NTcsNyArMTI4ODMsNiBAQAogCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjhfYWRjX25pZHMpOwogCQkJYWRkX21peGVyKHNwZWMsIGFsYzI2OF9jYXB0dXJlX21peGVyKTsKIAkJfQotCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OF9jYXBzcmNfbmlkczsKIAkJLyogc2V0IGRlZmF1bHQgaW5wdXQgc291cmNlICovCiAJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fYWRjX25pZHM7IGkrKykKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGFsYzI2OF9jYXBzcmNfbmlkc1tpXSwKQEAgLTE0MzU3LDE1ICsxNDM4MiwxNiBAQAogc3RhdGljIHZvaWQgYWxjODYxX2F1dG9faW5pdF9ocF9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IHBpbjsKIAotCXBpbiA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKLQlpZiAocGluKQotCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLAorCWlmIChzcGVjLT5hdXRvY2ZnLmhwX291dHMpCisJCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywKKwkJCQkJCSAgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAorCQkJCQkJICBQSU5fSFAsCiAJCQkJCQkgIHNwZWMtPm11bHRpb3V0LmhwX25pZCk7Ci0JcGluID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07Ci0JaWYgKHBpbikKLQkJYWxjODYxX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsCisJaWYgKHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9vdXRzKQorCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsCisJCQkJCQkgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdLAorCQkJCQkJICBQSU5fT1VULAogCQkJCQkJICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSk7CiB9CiAKQEAgLTE1MTU4LDcgKzE1MTg0LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHhhODhkLCAiUmVhbHRlayBBTEM2NjAgZGVtbyIsIEFMQzY2MFZEXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiZiwgIkhQIFRYMTAwMCIsIEFMQzg2MVZEX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmUyLCAiQXN1cyB6MzVtIiwgQUxDNjYwVkRfM1NUKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQXN1cyBHMSIsIEFMQzY2MFZEXzNTVCksCisJLypTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQXN1cyBHMSIsIEFMQzY2MFZEXzNTVCksKi8gLyogYXV0byAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2MzMsICJBc3VzIFYxU24iLCBBTEM2NjBWRF9BU1VTX1YxUyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFlNywgIkFTVVMiLCBBTEM2NjBWRF8zU1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBkZSwgMHgwM2YwLCAiUmVhbHRlayBBTEM2NjAgZGVtbyIsIEFMQzY2MFZEXzNTVCksCkBAIC0xNTU1MSw2ICsxNTU3NywyOSBAQAogCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCitlbnVtIHsKKwlBTEM2NjBWRF9GSVhfQVNVU19HUElPMQorfTsKKworLyogcmVzZXQgR1BJTzEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYwdmRfZml4X2FzdXNfZ3BpbzFfdmVyYnNbXSA9IHsKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAzfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDF9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDF9LAorCXsgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjODYxdmRfZml4dXBzW10gPSB7CisJW0FMQzY2MFZEX0ZJWF9BU1VTX0dQSU8xXSA9IHsKKwkJLnZlcmJzID0gYWxjNjYwdmRfZml4X2FzdXNfZ3BpbzFfdmVyYnMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4NjF2ZF9maXh1cF90YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBBNy1LIiwgQUxDNjYwVkRfRklYX0FTVVNfR1BJTzEpLAorCXt9Cit9OworCiBzdGF0aWMgaW50IHBhdGNoX2FsYzg2MXZkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKQEAgLTE1NTcyLDYgKzE1NjIxLDggQEAKIAkJYm9hcmRfY29uZmlnID0gQUxDODYxVkRfQVVUTzsKIAl9CiAKKwlhbGNfcGlja19maXh1cChjb2RlYywgYWxjODYxdmRfZml4dXBfdGJsLCBhbGM4NjF2ZF9maXh1cHMpOworCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4NjFWRF9BVVRPKSB7CiAJCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCQllcnIgPSBhbGM4NjF2ZF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CkBAIC0xNjg1Miw2ICsxNjkwMyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNkNiwgIkZveGNvbm4iLCBBTEM2NjJfRUNTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwZDQ3LCAiRm94Y29ubiA0NUNNWC80NUdNWC80NUNNWC1LIiwKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjZlLCAiVG9zaGliYSBOQjIwMCIsIEFMQzY2M19BU1VTX01PREU0KSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjYTAwLCAiU2Ftc3VuZyBOQzEwIiwgQUxDMjcyX1NBTVNVTkdfTkMxMCksCiAJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIDk0NUdDTS1TMkwiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLApAQCAtMTcxNDUsNzAgKzE3MTk3LDE0NSBAQAogICogQklPUyBhdXRvIGNvbmZpZ3VyYXRpb24KICAqLwogCi0vKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwotc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAotCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKKy8qIGNvbnZlcnQgZnJvbSBNSVggbmlkIHRvIERBQyAqLworc3RhdGljIGlubGluZSBoZGFfbmlkX3QgYWxjNjYyX21peF90b19kYWMoaGRhX25pZF90IG5pZCkKK3sKKwlpZiAobmlkID09IDB4MGYpCisJCXJldHVybiAweDAyOworCWVsc2UgaWYgKG5pZCA+PSAweDBjICYmIG5pZCA8PSAweDBlKQorCQlyZXR1cm4gbmlkIC0gMHgwYyArIDB4MDI7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogZ2V0IE1JWCBuaWQgY29ubmVjdGVkIHRvIHRoZSBnaXZlbiBwaW4gdGFyZ2V0ZWQgdG8gREFDICovCitzdGF0aWMgaGRhX25pZF90IGFsYzY2Ml9kYWNfdG9fbWl4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluLAorCQkJCSAgIGhkYV9uaWRfdCBkYWMpCit7CisJaGRhX25pZF90IG1peFs0XTsKKwlpbnQgaSwgbnVtOworCisJbnVtID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIHBpbiwgbWl4LCBBUlJBWV9TSVpFKG1peCkpOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpZiAoYWxjNjYyX21peF90b19kYWMobWl4W2ldKSA9PSBkYWMpCisJCQlyZXR1cm4gbWl4W2ldOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogbG9vayBmb3IgYW4gZW1wdHkgREFDIHNsb3QgKi8KK3N0YXRpYyBoZGFfbmlkX3QgYWxjNjYyX2xvb2tfZm9yX2RhYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbikKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3Qgc3Jjc1s1XTsKKwlpbnQgaSwgaiwgbnVtOworCisJbnVtID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIHBpbiwgc3JjcywgQVJSQVlfU0laRShzcmNzKSk7CisJaWYgKG51bSA8IDApCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQloZGFfbmlkX3QgbmlkID0gYWxjNjYyX21peF90b19kYWMoc3Jjc1tpXSk7CisJCWlmICghbmlkKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBzcGVjLT5tdWx0aW91dC5udW1fZGFjczsgaisrKQorCQkJaWYgKHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2pdID09IG5pZCkKKwkJCQlicmVhazsKKwkJaWYgKGogPj0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MpCisJCQlyZXR1cm4gbmlkOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogZmlsbCBpbiB0aGUgZGFjX25pZHMgdGFibGUgZnJvbSB0aGUgcGFyc2VkIHBpbiBjb25maWd1cmF0aW9uICovCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2ZpbGxfZGFjX25pZHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGk7CisJaGRhX25pZF90IGRhYzsKKworCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykgeworCQlkYWMgPSBhbGM2NjJfbG9va19mb3JfZGFjKGNvZGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbaV0pOworCQlpZiAoIWRhYykKKwkJCWNvbnRpbnVlOworCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tzcGVjLT5tdWx0aW91dC5udW1fZGFjcysrXSA9IGRhYzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxjNjYyX2FkZF92b2xfY3RsKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJICAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNocykKIHsKIAljaGFyIG5hbWVbMzJdOworCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7CisJcmV0dXJuIGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKKwkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKK30KKworc3RhdGljIGludCBhbGM2NjJfYWRkX3N3X2N0bChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGNvbnN0IGNoYXIgKnBmeCwKKwkJCSAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNocykKK3sKKwljaGFyIG5hbWVbMzJdOworCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7CisJcmV0dXJuIGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfSU5QVVQpKTsKK30KKworI2RlZmluZSBhbGM2NjJfYWRkX3N0ZXJlb192b2woc3BlYywgcGZ4LCBuaWQpIFwKKwlhbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgcGZ4LCBuaWQsIDMpCisjZGVmaW5lIGFsYzY2Ml9hZGRfc3RlcmVvX3N3KHNwZWMsIHBmeCwgbmlkKSBcCisJYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBuaWQsIDMpCisKKy8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCiAJfTsKLQloZGFfbmlkX3QgbmlkOworCWhkYV9uaWRfdCBuaWQsIG1peDsKIAlpbnQgaSwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKLQkJaWYgKCFzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSkKKwkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07CisJCWlmICghbmlkKQogCQkJY29udGludWU7Ci0JCW5pZCA9IGFsYzg4MF9pZHhfdG9fZGFjKGkpOworCQltaXggPSBhbGM2NjJfZGFjX3RvX21peChjb2RlYywgY2ZnLT5saW5lX291dF9waW5zW2ldLCBuaWQpOworCQlpZiAoIW1peCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCi0JCQkJCSAgIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAxLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCAiQ2VudGVyIiwgbmlkLCAxKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCi0JCQkJCSAgIkxGRSBQbGF5YmFjayBWb2x1bWUiLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCAiTEZFIiwgbmlkLCAyKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCQkgICJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MGUsIDEsIDAsCi0JCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3N3X2N0bChzcGVjLCAiQ2VudGVyIiwgbWl4LCAxKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCQkgICJMRkUgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MGUsIDIsIDAsCi0JCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3N3X2N0bChzcGVjLCAiTEZFIiwgbWl4LCAyKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSB7CiAJCQljb25zdCBjaGFyICpwZng7CiAJCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSAmJgogCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkgewotCQkJCWlmICghY2ZnLT5ocF9waW5zKQorCQkJCWlmIChjZmctPmhwX291dHMpCiAJCQkJCXBmeCA9ICJTcGVha2VyIjsKIAkJCQllbHNlCiAJCQkJCXBmeCA9ICJQQ00iOwogCQkJfSBlbHNlCiAJCQkJcGZ4ID0gY2huYW1lW2ldOwotCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgcGZ4LCBuaWQsIDMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxICYmCiAJCQkgICAgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQogCQkJCXBmeCA9ICJTcGVha2VyIjsKLQkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAotCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwoYWxjODgwX2lkeF90b19taXhlcihpKSwKLQkJCQkJCSAgICAzLCAwLCBIREFfSU5QVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsIHBmeCwgbWl4LCAzKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTE3MjE3LDg2ICsxNzM0NCw3NSBAQAogfQogCiAvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZm9yIHNwZWFrZXIgYW5kIEhQIG91dHB1dHMgKi8KLXN0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBwaW4sCisvKiByZXR1cm4gREFDIG5pZCBpZiBhbnkgbmV3IERBQyBpcyBhc3NpZ25lZCAqLworc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluLAogCQkJCQljb25zdCBjaGFyICpwZngpCiB7Ci0JaGRhX25pZF90IG5pZDsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgbmlkLCBtaXg7CiAJaW50IGVycjsKLQljaGFyIG5hbWVbMzJdOwogCiAJaWYgKCFwaW4pCiAJCXJldHVybiAwOwotCi0JaWYgKHBpbiA9PSAweDE3KSB7Ci0JCS8qIEFMQzY2MyBoYXMgYSBtb25vIG91dHB1dCBwaW4gb24gMHgxNyAqLworCW5pZCA9IGFsYzY2Ml9sb29rX2Zvcl9kYWMoY29kZWMsIHBpbik7CisJaWYgKCFuaWQpIHsKKwkJY2hhciBuYW1lWzMyXTsKKwkJLyogdGhlIGNvcnJlc3BvbmRpbmcgREFDIGlzIGFscmVhZHkgb2NjdXBpZWQgKi8KKwkJaWYgKCEoZ2V0X3djYXBzKGNvZGVjLCBwaW4pICYgQUNfV0NBUF9PVVRfQU1QKSkKKwkJCXJldHVybiAwOyAvKiBubyB3YXkgKi8KKwkJLyogY3JlYXRlIGEgc3dpdGNoIG9ubHkgKi8KIAkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwocGluLCAyLCAwLCBIREFfT1VUUFVUKSk7CisJCXJldHVybiBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCQkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwocGluLCAzLCAwLCBIREFfT1VUUFVUKSk7CisJfQorCisJbWl4ID0gYWxjNjYyX2RhY190b19taXgoY29kZWMsIHBpbiwgbmlkKTsKKwlpZiAoIW1peCkKKwkJcmV0dXJuIDA7CisJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIHBmeCwgbmlkLCAzKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpZiAoYWxjODgwX2lzX2ZpeGVkX3BpbihwaW4pKSB7Ci0JCW5pZCA9IGFsYzg4MF9pZHhfdG9fZGFjKGFsYzg4MF9maXhlZF9waW5faWR4KHBpbikpOwotCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiREFDIG5pZD0leFxuIixuaWQpOyAqLwotCQkvKiBzcGVjaWZ5IHRoZSBEQUMgYXMgdGhlIGV4dHJhIG91dHB1dCAqLwotCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKLQkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IG5pZDsKLQkJZWxzZQotCQkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXSA9IG5pZDsKLQkJLyogY29udHJvbCBIUCB2b2x1bWUvc3dpdGNoIG9uIHRoZSBvdXRwdXQgbWl4ZXIgYW1wICovCi0JCW5pZCA9IGFsYzg4MF9pZHhfdG9fZGFjKGFsYzg4MF9maXhlZF9waW5faWR4KHBpbikpOwotCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBwZngpOwotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX09VVFBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLCBuYW1lLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDIsIEhEQV9JTlBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfSBlbHNlIGlmIChhbGM4ODBfaXNfbXVsdGlfcGluKHBpbikpIHsKLQkJLyogc2V0IG1hbnVhbCBjb25uZWN0aW9uICovCi0JCS8qIHdlIGhhdmUgb25seSBhIHN3aXRjaCBvbiBIUC1vdXQgUElOICovCi0JCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKHBpbiwgMywgMCwgSERBX09VVFBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOworCWVyciA9IGFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsIHBmeCwgbWl4LCAzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gbmlkOwogfQogCiAvKiBjcmVhdGUgcGxheWJhY2svY2FwdHVyZSBjb250cm9scyBmb3IgaW5wdXQgcGlucyAqLwogI2RlZmluZSBhbGM2NjJfYXV0b19jcmVhdGVfaW5wdXRfY3RscyBcCi0JYWxjODgwX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMKKwlhbGM4ODJfYXV0b19jcmVhdGVfaW5wdXRfY3RscwogCiBzdGF0aWMgdm9pZCBhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQsIGludCBwaW5fdHlwZSwKLQkJCQkJICAgICAgaW50IGRhY19pZHgpCisJCQkJCSAgICAgIGhkYV9uaWRfdCBkYWMpCiB7CisJaW50IGksIG51bTsKKwloZGFfbmlkX3Qgc3Jjc1s0XTsKKwogCWFsY19zZXRfcGluX291dHB1dChjb2RlYywgbmlkLCBwaW5fdHlwZSk7CiAJLyogbmVlZCB0aGUgbWFudWFsIGNvbm5lY3Rpb24/ICovCi0JaWYgKGFsYzg4MF9pc19tdWx0aV9waW4obmlkKSkgewotCQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQkJaW50IGlkeCA9IGFsYzg4MF9tdWx0aV9waW5faWR4KG5pZCk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGFsYzg4MF9pZHhfdG9fc2VsZWN0b3IoaWR4KSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCi0JCQkJICAgIGFsYzg4MF9kYWNfdG9faWR4KHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2RhY19pZHhdKSk7CisJbnVtID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgc3JjcywgQVJSQVlfU0laRShzcmNzKSk7CisJaWYgKG51bSA8PSAxKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmIChhbGM2NjJfbWl4X3RvX2RhYyhzcmNzW2ldKSAhPSBkYWMpCisJCQljb250aW51ZTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgaSk7CisJCXJldHVybjsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzY2Ml9hdXRvX2luaXRfbXVsdGlfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBwaW5fdHlwZSA9IGdldF9waW5fdHlwZShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8PSBIREFfU0lERTsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07Ci0JCWludCBwaW5fdHlwZSA9IGdldF9waW5fdHlwZShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUpOwogCQlpZiAobmlkKQogCQkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLAotCQkJCQkJCSAgaSk7CisJCQkJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKTsKIAl9CiB9CiAKQEAgLTE3MzA2LDEyICsxNzQyMiwxMyBAQAogCWhkYV9uaWRfdCBwaW47CiAKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07Ci0JaWYgKHBpbikgLyogY29ubmVjdCB0byBmcm9udCAqLwotCQkvKiB1c2UgZGFjIDAgKi8KLQkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwgMCk7CisJaWYgKHBpbikKKwkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwKKwkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuaHBfbmlkKTsKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXTsKIAlpZiAocGluKQotCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CisJCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULAorCQkJCQlzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdKTsKIH0KIAogI2RlZmluZSBBTEM2NjJfUElOX0NEX05JRAkJQUxDODgwX1BJTl9DRF9OSUQKQEAgLTE3MzQ5LDIxICsxNzQ2NiwyNSBAQAogCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLwogCi0JZXJyID0gYWxjODgwX2F1dG9fZmlsbF9kYWNfbmlkcyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjNjYyX2F1dG9fZmlsbF9kYWNfbmlkcyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLAorCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoY29kZWMsCiAJCQkJCSAgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdLAogCQkJCQkgICAiU3BlYWtlciIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAorCWlmIChlcnIpCisJCXNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWRbMF0gPSBlcnI7CisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChjb2RlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAogCQkJCQkgICAiSGVhZHBob25lIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJaWYgKGVycikKKwkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZXJyOwogCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggODI2MTM3ZS4uODZkZTMwNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KQEAgLTE1OCw2ICsxNTksNyBAQAogCVNUQUNfRDk2NV81U1RfTk9fRlAsCiAJU1RBQ19ERUxMXzNTVCwKIAlTVEFDX0RFTExfQklPUywKKwlTVEFDXzkyN1hfVk9MS05PQiwKIAlTVEFDXzkyN1hfTU9ERUxTCiB9OwogCkBAIC0xODIsOCArMTg0LDggQEAKIAogc3RydWN0IHNpZ21hdGVsX21pY19yb3V0ZSB7CiAJaGRhX25pZF90IHBpbjsKLQl1bnNpZ25lZCBjaGFyIG11eF9pZHg7Ci0JdW5zaWduZWQgY2hhciBkbXV4X2lkeDsKKwlzaWduZWQgY2hhciBtdXhfaWR4OworCXNpZ25lZCBjaGFyIGRtdXhfaWR4OwogfTsKIAogc3RydWN0IHNpZ21hdGVsX3NwZWMgewpAQCAtOTA3LDYgKzkwOSwxNiBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGRlbGxfM3N0X2NvcmVfaW5pdFtdID0geworCS8qIGRvbid0IHNldCBkZWx0YSBiaXQgKi8KKwl7MHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHg3Zn0sCisJLyogdW5tdXRlIG5vZGUgMHgxYiAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCS8qIHNlbGVjdCBub2RlIDB4MDMgYXMgREFDICovCisJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTI3eF9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCiAJeyAweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKQEAgLTkxNSw2ICs5MjcsMTQgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTI3eF92b2xrbm9iX2NvcmVfaW5pdFtdID0geworCS8qIGRvbid0IHNldCBkZWx0YSBiaXQgKi8KKwl7MHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHg3Zn0sCisJLyogZW5hYmxlIGFuYWxvZyBwYyBiZWVwIHBhdGggKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzIsIDEgPDwgNX0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyMDVfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCQogCXsgMHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCkBAIC0xNTcwLDYgKzE1OTAsOCBAQAogCQkJCSJEZWxsIFN0dWRpbyAxNyIsIFNUQUNfREVMTF9NNl9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMmJlLAogCQkJCSJEZWxsIFN0dWRpbyAxNTU1IiwgU1RBQ19ERUxMX002X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyYmQsCisJCQkJIkRlbGwgU3R1ZGlvIDE1NTciLCBTVEFDX0RFTExfTTZfRE1JQyksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMTY3NCw2ICsxNjk2LDggQEAKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDcxQlhYX1JFRiksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDMwZmIsCiAJCSAgICAgICJIUCBkdjQtMTIyMm5yIiwgU1RBQ19IUF9EVjRfMTIyMk5SKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDE3MjAsCisJCQkgICJIUCIsIFNUQUNfSFBfRFY1KSwKIAlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwODAsCiAJCSAgICAgICJIUCIsIFNUQUNfSFBfRFY1KSwKIAlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwZjAsCkBAIC0xOTk5LDYgKzIwMjMsNyBAQAogCVtTVEFDX0Q5NjVfNVNUX05PX0ZQXSAgPSBkOTY1XzVzdF9ub19mcF9waW5fY29uZmlncywKIAlbU1RBQ19ERUxMXzNTVF0gID0gZGVsbF8zc3RfcGluX2NvbmZpZ3MsCiAJW1NUQUNfREVMTF9CSU9TXSA9IE5VTEwsCisJW1NUQUNfOTI3WF9WT0xLTk9CXSA9IE5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyN3hfbW9kZWxzW1NUQUNfOTI3WF9NT0RFTFNdID0gewpAQCAtMjAxMCw2ICsyMDM1LDcgQEAKIAlbU1RBQ19EOTY1XzVTVF9OT19GUF0JPSAiNXN0YWNrLW5vLWZwIiwKIAlbU1RBQ19ERUxMXzNTVF0JCT0gImRlbGwtM3N0YWNrIiwKIAlbU1RBQ19ERUxMX0JJT1NdCT0gImRlbGwtYmlvcyIsCisJW1NUQUNfOTI3WF9WT0xLTk9CXQk9ICJ2b2xrbm9iIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTI3eF9jZmdfdGJsW10gPSB7CkBAIC0yMDQ1LDYgKzIwNzEsOCBAQAogCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKIAlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDI1MDAsCiAJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAorCS8qIHZvbHVtZS1rbm9iIGZpeGVzICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMGNmLCAiRlNDIiwgU1RBQ185MjdYX1ZPTEtOT0IpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTM0NjksMTggKzM0OTcsMjYgQEAKIAkJCWJyZWFrOwogCWlmIChpIDw9IEFVVE9fUElOX0ZST05UX01JQykgewogCQkvKiBhbmFsb2cgcGluICovCi0JCW1pYy0+ZG11eF9pZHggPSAwOwogCQlpID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHNwZWMtPm11eF9uaWRzWzBdLCBwaW4pOwogCQlpZiAoaSA8IDApCiAJCQlyZXR1cm4gLTE7CiAJCW1pYy0+bXV4X2lkeCA9IGk7CisJCW1pYy0+ZG11eF9pZHggPSAtMTsKKwkJaWYgKHNwZWMtPmRtdXhfbmlkcykKKwkJCW1pYy0+ZG11eF9pZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywKKwkJCQkJCQkgICAgIHNwZWMtPmRtdXhfbmlkc1swXSwKKwkJCQkJCQkgICAgIHNwZWMtPm11eF9uaWRzWzBdKTsKIAl9ICBlbHNlIGlmIChzcGVjLT5kbXV4X25pZHMpIHsKIAkJLyogZGlnaXRhbCBwaW4gKi8KLQkJbWljLT5tdXhfaWR4ID0gMDsKIAkJaSA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLCBzcGVjLT5kbXV4X25pZHNbMF0sIHBpbik7CiAJCWlmIChpIDwgMCkKIAkJCXJldHVybiAtMTsKIAkJbWljLT5kbXV4X2lkeCA9IGk7CisJCW1pYy0+bXV4X2lkeCA9IC0xOworCQlpZiAoc3BlYy0+bXV4X25pZHMpCisJCQltaWMtPm11eF9pZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywKKwkJCQkJCQkgICAgc3BlYy0+bXV4X25pZHNbMF0sCisJCQkJCQkJICAgIHNwZWMtPmRtdXhfbmlkc1swXSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDU1NywxMSArNDU5MywxMSBAQAogCQltaWMgPSAmc3BlYy0+ZXh0X21pYzsKIAllbHNlCiAJCW1pYyA9ICZzcGVjLT5pbnRfbWljOwotCWlmIChtaWMtPmRtdXhfaWR4KQorCWlmIChtaWMtPmRtdXhfaWR4ID49IDApCiAJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHNwZWMtPmRtdXhfbmlkc1swXSwgMCwKIAkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKIAkJCQkJICBtaWMtPmRtdXhfaWR4KTsKLQllbHNlCisJaWYgKG1pYy0+bXV4X2lkeCA+PSAwKQogCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBzcGVjLT5tdXhfbmlkc1swXSwgMCwKIAkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKIAkJCQkJICBtaWMtPm11eF9pZHgpOwpAQCAtNDYzNCw2ICs0NjcwLDI2IEBACiAJfQogfQogCitzdGF0aWMgaW50IGhwX2JzZXJpZXNfc3lzdGVtKHUzMiBzdWJzeXN0ZW1faWQpCit7CisJc3dpdGNoIChzdWJzeXN0ZW1faWQpIHsKKwljYXNlIDB4MTAzYzMwN2U6CisJY2FzZSAweDEwM2MzMDdmOgorCWNhc2UgMHgxMDNjMzA4MDoKKwljYXNlIDB4MTAzYzMwODE6CisJY2FzZSAweDEwM2MxNzIyOgorCWNhc2UgMHgxMDNjMTcyMzoKKwljYXNlIDB4MTAzYzE3MjQ6CisJY2FzZSAweDEwM2MxNzI1OgorCWNhc2UgMHgxMDNjMTcyNjoKKwljYXNlIDB4MTAzYzE3Mjc6CisJY2FzZSAweDEwM2MxNzI4OgorCWNhc2UgMHgxMDNjMTcyOToKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIHN0YWM5MmhkX3Byb2NfaG9vayhzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCiAJCQkgICAgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCkBAIC00NzIzLDYgKzQ3NzksMTEgQEAKIAkJZWxzZQogCQkJc3BlYy0+Z3Bpb19kYXRhIHw9IHNwZWMtPmdwaW9fbGVkOyAvKiB3aGl0ZSAqLwogCisJCWlmIChocF9ic2VyaWVzX3N5c3RlbShjb2RlYy0+c3Vic3lzdGVtX2lkKSkgeworCQkJLyogTEVEIHN0YXRlIGlzIGludmVydGVkIG9uIHRoZXNlIHN5c3RlbXMgKi8KKwkJCXNwZWMtPmdwaW9fZGF0YSBePSBzcGVjLT5ncGlvX2xlZDsKKwkJfQorCiAJCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywKIAkJCSAgICAgIHNwZWMtPmdwaW9fZGlyLAogCQkJICAgICAgc3BlYy0+Z3Bpb19kYXRhKTsKQEAgLTUyMTIsNiArNTI3Myw3IEBACiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CiAJc3RydWN0IGhkYV92ZXJiICp1bm11dGVfaW5pdCA9IHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdDsKKwl1bnNpZ25lZCBpbnQgcGluX2NmZzsKIAlpbnQgZXJyID0gMDsKIAogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKQEAgLTUzOTUsNiArNTQ1Nyw0NSBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAoaHBfYnNlcmllc19zeXN0ZW0oY29kZWMtPnN1YnN5c3RlbV9pZCkpIHsKKwkJcGluX2NmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgwZik7CisJCWlmIChnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX0xJTkVfT1VUIHx8CisJCQlnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX1NQRUFLRVIgIHx8CisJCQlnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX0hQX09VVCkgeworCQkJLyogSXQgd2FzIGNoYW5nZWQgaW4gdGhlIEJJT1MgdG8ganVzdCBzYXRpc2Z5IE1TIERUTS4KKwkJCSAqIExldHMgdHVybiBpdCBiYWNrIGludG8gc2xhdmVkIEhQCisJCQkgKi8KKwkJCXBpbl9jZmcgPSAocGluX2NmZyAmICh+QUNfREVGQ0ZHX0RFVklDRSkpCisJCQkJCXwgKEFDX0pBQ0tfSFBfT1VUIDw8CisJCQkJCQlBQ19ERUZDRkdfREVWSUNFX1NISUZUKTsKKwkJCXBpbl9jZmcgPSAocGluX2NmZyAmICh+KEFDX0RFRkNGR19ERUZfQVNTT0MKKwkJCQkJCQl8IEFDX0RFRkNGR19TRVFVRU5DRSkpKQorCQkJCQkJCQl8IDB4MWY7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGYsIHBpbl9jZmcpOworCQl9CisJfQorCisJaWYgKChjb2RlYy0+c3Vic3lzdGVtX2lkID4+IDE2KSA9PSBQQ0lfVkVORE9SX0lEX0hQKSB7CisJCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpkZXYgPSBOVUxMOworCQl3aGlsZSAoKGRldiA9IGRtaV9maW5kX2RldmljZShETUlfREVWX1RZUEVfT0VNX1NUUklORywKKwkJCQkJICAgICAgTlVMTCwgZGV2KSkpIHsKKwkJCWlmIChzdHJjbXAoZGV2LT5uYW1lLCAiSFBfTXV0ZV9MRURfMSIpKSB7CisJCQkJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJCQkJY2FzZSAweDExMWQ3NjA4OgorCQkJCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHgxMTFkNzYwMDoKKwkJCQljYXNlIDB4MTExZDc2MDE6CisJCQkJY2FzZSAweDExMWQ3NjAyOgorCQkJCWNhc2UgMHgxMTFkNzYwMzoKKwkJCQkJc3BlYy0+Z3Bpb19sZWQgPSAweDA4OworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJaWYgKHNwZWMtPmdwaW9fbGVkKSB7CiAJCXNwZWMtPmdwaW9fbWFzayB8PSBzcGVjLT5ncGlvX2xlZDsKQEAgLTU2MDQsMTAgKzU3MDUsMTQgQEAKIAkJc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyN3hfZG1pY19uaWRzOwogCQlzcGVjLT5udW1fZG1pY3MgPSBTVEFDOTI3WF9OVU1fRE1JQ1M7CiAKLQkJc3BlYy0+aW5pdCA9IGQ5NjVfY29yZV9pbml0OworCQlzcGVjLT5pbml0ID0gZGVsbF8zc3RfY29yZV9pbml0OwogCQlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTI3eF9kbXV4X25pZHM7CiAJCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5Mjd4X2RtdXhfbmlkcyk7CiAJCWJyZWFrOworCWNhc2UgU1RBQ185MjdYX1ZPTEtOT0I6CisJCXNwZWMtPm51bV9kbWljcyA9IDA7CisJCXNwZWMtPmluaXQgPSBzdGFjOTI3eF92b2xrbm9iX2NvcmVfaW5pdDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3BlYy0+bnVtX2RtaWNzID0gMDsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5Mjd4X2NvcmVfaW5pdDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2FtcC5jIGIvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMKaW5kZXggMzc1NjQzMC4uNmRhMjFhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMKQEAgLTUyLDExICs1MiwxMyBAQAogCiAJLyogb25seSB1c2UgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3Igbm93ICovCiAKLQlpY2UtPm51bV90b3RhbF9kYWNzID0gMjsJLyogb25seSBQU0RPVVQwIGlzIGNvbm5lY3RlZCAqLworCS8qIFZUMTYxNiA2Y2ggY29kZWMgY29ubmVjdGVkIHRvIFBTRE9VVDAgdXNpbmcgcGFja2VkIG1vZGUgKi8KKwlpY2UtPm51bV90b3RhbF9kYWNzID0gNjsKIAlpY2UtPm51bV90b3RhbF9hZGNzID0gMjsKIAotCS8qIENoYWludGVjaCBBVi03MTAgaGFzIGFub3RoZXIgY29kZWNzLCB3aGljaCBuZWVkIGluaXRpYWxpemF0aW9uICovCi0JLyogaW5pdGlhbGl6ZSBXTTg3MjggY29kZWMgKi8KKwkvKiBDaGFpbnRlY2ggQVYtNzEwIGhhcyBhbm90aGVyIFdNODcyOCBjb2RlYyBjb25uZWN0ZWQgdG8gUFNET1VUNAorCSAgIChzaGFyZWQgd2l0aCB0aGUgU1BESUYgb3V0cHV0KS4gTWl4ZXIgY29udHJvbCBmb3IgdGhpcyBjb2RlYworCSAgIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiAqLwogCWlmIChpY2UtPmVlcHJvbS5zdWJ2ZW5kb3IgPT0gVlQxNzI0X1NVQkRFVklDRV9BVjcxMCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bV9pbml0cyk7IGkgKz0gMikKIAkJCXdtX3B1dChpY2UsIHdtX2luaXRzW2ldLCB3bV9pbml0c1tpKzFdKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCBjZWNmMWZmLi5kNzQwMzNhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0yMjU5LDcgKzIyNTksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfbWl4ZXJfcHJvX3BlYWsgX19kZXZpbml0ZGF0YSA9IHsKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCiAJLm5hbWUgPSAiTXVsdGkgVHJhY2sgUGVhayIsCiAJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLAogCS5pbmZvID0gc25kX2ljZTE3MTJfcHJvX3BlYWtfaW5mbywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaCBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaAppbmRleCA5ZGEyZGFlLi5kMDYzMTQ5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCkBAIC0zODIsOCArMzgyLDggQEAKICNpZmRlZiBDT05GSUdfUE0KIAlpbnQgKCpwbV9zdXNwZW5kKShzdHJ1Y3Qgc25kX2ljZTE3MTIgKik7CiAJaW50ICgqcG1fcmVzdW1lKShzdHJ1Y3Qgc25kX2ljZTE3MTIgKik7Ci0JaW50IHBtX3N1c3BlbmRfZW5hYmxlZDoxOwotCWludCBwbV9zYXZlZF9pc19zcGRpZl9tYXN0ZXI6MTsKKwl1bnNpZ25lZCBpbnQgcG1fc3VzcGVuZF9lbmFibGVkOjE7CisJdW5zaWduZWQgaW50IHBtX3NhdmVkX2lzX3NwZGlmX21hc3RlcjoxOwogCXVuc2lnbmVkIGludCBwbV9zYXZlZF9zcGRpZl9jdHJsOwogCXVuc2lnbmVkIGNoYXIgcG1fc2F2ZWRfc3BkaWZfY2ZnOwogCXVuc2lnbmVkIGludCBwbV9zYXZlZF9yb3V0ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwppbmRleCBhZjZlMDAxLi4xMGZjOTJjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAkgICAgKGluYihJQ0VNVDE3MjQoaWNlLCBETUFfUEFVU0UpKSAmIERNQV9QQVVTRVMpKSB7CiAJCS8qIHJ1bm5pbmc/IHdlIGNhbm5vdCBjaGFuZ2UgdGhlIHJhdGUgbm93Li4uICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljZS0+cmVnX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuICgocmF0ZSA9PSBpY2UtPmN1cl9yYXRlKSAmJiAhZm9yY2UpID8gMCA6IC1FQlVTWTsKIAl9CiAJaWYgKCFmb3JjZSAmJiBpc19wcm9fcmF0ZV9sb2NrZWQoaWNlKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2UtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogCiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YShpY2UtPnBjaSksCi0JCQkJCSAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOworCQkJCQkgICAgICAyNTYqMTAyNCwgMjU2KjEwMjQpOwogCiAJaWNlLT5wY20gPSBwY207CiAKQEAgLTE0MDgsNyArMTQwOCw3IEBACiAKIAlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAogCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGljZS0+cGNpKSwKLQkJCQkJICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CisJCQkJCSAgICAgIDI1NioxMDI0LCAyNTYqMTAyNCk7CiAKIAlpY2UtPnBjbV9kcyA9IHBjbTsKIApAQCAtMjExMCw3ICsyMTEwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfbWl4ZXJfcHJvX3BlYWsgX19kZXZpbml0ZGF0YSA9IHsKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCiAJLm5hbWUgPSAiTXVsdGkgVHJhY2sgUGVhayIsCiAJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLAogCS5pbmZvID0gc25kX3Z0MTcyNF9wcm9fcGVha19pbmZvLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYwppbmRleCBjNzU1MTVmLi42YTlmZWUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBfX2RldmluaXQgcHJvZGlneV9oZDJfcmVzdW1lKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQorc3RhdGljIGludCBwcm9kaWd5X2hkMl9yZXN1bWUoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCiB7CiAJLyogaW5pdGlhbGl6ZSBhazQzOTYgY29kZWMgYW5kIHJlc3RvcmUgcHJldmlvdXMgbWl4ZXIgdm9sdW1lcyAqLwogCXN0cnVjdCBwcm9kaWd5X2hpZmlfc3BlYyAqc3BlYyA9IGljZS0+c3BlYzsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggMTcxYWRhNS4uYWFjMjBmYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTE5NTAsMTAgKzE5NTAsMjggQEAKIAl9LAogCXsKIAkJLnN1YnZlbmRvciA9IDB4MTA0ZCwKKwkJLnN1YmRldmljZSA9IDB4ODE0NCwKKwkJLm5hbWUgPSAiU29ueSIsCisJCS50eXBlID0gQUM5N19UVU5FX0lOVl9FQVBECisJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwNGQsCiAJCS5zdWJkZXZpY2UgPSAweDgxOTcsCiAJCS5uYW1lID0gIlNvbnkgUzFYUCIsCiAJCS50eXBlID0gQUM5N19UVU5FX0lOVl9FQVBECiAJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwNGQsCisJCS5zdWJkZXZpY2UgPSAweDgxYzAsCisJCS5uYW1lID0gIlNvbnkgVkFJTyBWR04tVDM1MFAiLCAvKkFEMTk4MUIqLworCQkudHlwZSA9IEFDOTdfVFVORV9JTlZfRUFQRAorCX0sCisJeworCQkuc3VidmVuZG9yID0gMHgxMDRkLAorCQkuc3ViZGV2aWNlID0gMHg4MWM1LAorCQkubmFtZSA9ICJTb255IFZBSU8gVkdOLUIxVlAiLCAvKkFEMTk4MUIqLworCQkudHlwZSA9IEFDOTdfVFVORV9JTlZfRUFQRAorCX0sCiAgCXsKIAkJLnN1YnZlbmRvciA9IDB4MTA0MywKIAkJLnN1YmRldmljZSA9IDB4ODBmMywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4LmMgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCmluZGV4IGFjZmE0NzYuLjhhMzMyZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtMzg2LDYgKzM4Niw3IEBACiAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtc1syXTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmR4c19jb250cm9sc1s0XTsKIAogCXN0cnVjdCBzbmRfYWM5N19idXMgKmFjOTdfYnVzOwogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsKQEAgLTEyMTYsOSArMTIxNyw5IEBACiAKIAogLyoKLSAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTY4NiBhbmQgdmlhODIzeCBEU1gKKyAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTY4NgogICovCi1zdGF0aWMgaW50IHNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IHNuZF92aWE2ODZfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgdmlhZGV2ICp2aWFkZXYgPSAmY2hpcC0+ZGV2c1tjaGlwLT5wbGF5YmFja19kZXZubyArIHN1YnN0cmVhbS0+bnVtYmVyXTsKQEAgLTEyMzAsNiArMTIzMSwzMiBAQAogfQogCiAvKgorICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhODIzeCBEWFMKKyAqLworc3RhdGljIGludCBzbmRfdmlhODIzM19wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCB2aWFkZXYgKnZpYWRldjsKKwl1bnNpZ25lZCBpbnQgc3RyZWFtOworCWludCBlcnI7CisKKwl2aWFkZXYgPSAmY2hpcC0+ZGV2c1tjaGlwLT5wbGF5YmFja19kZXZubyArIHN1YnN0cmVhbS0+bnVtYmVyXTsKKwlpZiAoKGVyciA9IHNuZF92aWE4Mnh4X3BjbV9vcGVuKGNoaXAsIHZpYWRldiwgc3Vic3RyZWFtKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXN0cmVhbSA9IHZpYWRldi0+cmVnX29mZnNldCAvIDB4MTA7CisJaWYgKGNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dKSB7CisJCWNoaXAtPnBsYXliYWNrX3ZvbHVtZVtzdHJlYW1dWzBdID0gMDsKKwkJY2hpcC0+cGxheWJhY2tfdm9sdW1lW3N0cmVhbV1bMV0gPSAwOworCQljaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+dmRbMF0uYWNjZXNzICY9CisJCQl+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSB8CisJCQkgICAgICAgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywKKwkJCSAgICAgICAmY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0tPmlkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBvcGVuIGNhbGxiYWNrIGZvciBwbGF5YmFjayBvbiB2aWE4MjN4IG11bHRpLWNoYW5uZWwKICAqLwogc3RhdGljIGludCBzbmRfdmlhODIzM19tdWx0aV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTMwMiwxMCArMTMyOSwyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNuZF92aWE4MjMzX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCB2aWFkZXYgKnZpYWRldiA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBzdHJlYW07CisKKwlzdHJlYW0gPSB2aWFkZXYtPnJlZ19vZmZzZXQgLyAweDEwOworCWlmIChjaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXSkgeworCQljaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+dmRbMF0uYWNjZXNzIHw9CisJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sCisJCQkgICAgICAgJmNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT5pZCk7CisJfQorCXJldHVybiBzbmRfdmlhODJ4eF9wY21fY2xvc2Uoc3Vic3RyZWFtKTsKK30KKwogCiAvKiB2aWE2ODYgcGxheWJhY2sgY2FsbGJhY2tzICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF92aWE2ODZfcGxheWJhY2tfb3BzID0gewotCS5vcGVuID0JCXNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4sCisJLm9wZW4gPQkJc25kX3ZpYTY4Nl9wbGF5YmFja19vcGVuLAogCS5jbG9zZSA9CXNuZF92aWE4Mnh4X3BjbV9jbG9zZSwKIAkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zID0Jc25kX3ZpYTgyeHhfaHdfcGFyYW1zLApAQCAtMTMzMSw4ICsxMzc0LDggQEAKIAogLyogdmlhODIzeCBEU1ggcGxheWJhY2sgY2FsbGJhY2tzICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF92aWE4MjMzX3BsYXliYWNrX29wcyA9IHsKLQkub3BlbiA9CQlzbmRfdmlhODJ4eF9wbGF5YmFja19vcGVuLAotCS5jbG9zZSA9CXNuZF92aWE4Mnh4X3BjbV9jbG9zZSwKKwkub3BlbiA9CQlzbmRfdmlhODIzM19wbGF5YmFja19vcGVuLAorCS5jbG9zZSA9CXNuZF92aWE4MjMzX3BsYXliYWNrX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgPQlzbmRfdmlhODJ4eF9od19wYXJhbXMsCiAJLmh3X2ZyZWUgPQlzbmRfdmlhODJ4eF9od19mcmVlLApAQCAtMTYyNiw3ICsxNjY5LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQl1bnNpZ25lZCBpbnQgaWR4ID0gc25kX2N0bF9nZXRfaW9mZihrY29udHJvbCwgJnVjb250cm9sLT5pZCk7CisJdW5zaWduZWQgaW50IGlkeCA9IGtjb250cm9sLT5pZC5zdWJkZXZpY2U7CiAKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IFZJQV9EWFNfTUFYX1ZPTFVNRSAtIGNoaXAtPnBsYXliYWNrX3ZvbHVtZVtpZHhdWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gVklBX0RYU19NQVhfVk9MVU1FIC0gY2hpcC0+cGxheWJhY2tfdm9sdW1lW2lkeF1bMV07CkBAIC0xNjQ2LDcgKzE2ODksNyBAQAogCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXVuc2lnbmVkIGludCBpZHggPSBzbmRfY3RsX2dldF9pb2ZmKGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKTsKKwl1bnNpZ25lZCBpbnQgaWR4ID0ga2NvbnRyb2wtPmlkLnN1YmRldmljZTsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSBjaGlwLT5wb3J0ICsgMHgxMCAqIGlkeDsKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAlpbnQgaSwgY2hhbmdlID0gMDsKQEAgLTE3MDUsMTEgKzE3NDgsMTMgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdmlhODIzM19keHNfdm9sdW1lX2NvbnRyb2wgX19kZXZpbml0ZGF0YSA9IHsKLQkubmFtZSA9ICJWSUEgRFhTIFBsYXliYWNrIFZvbHVtZSIsCi0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JLmFjY2VzcyA9IChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKLQkJICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEKSwKLQkuY291bnQgPSA0LAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkuZGV2aWNlID0gMCwKKwkvKiAuc3ViZGV2aWNlIHNldCBsYXRlciAqLworCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSwKIAkuaW5mbyA9IHNuZF92aWE4MjMzX2R4c192b2x1bWVfaW5mbywKIAkuZ2V0ID0gc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9nZXQsCiAJLnB1dCA9IHNuZF92aWE4MjMzX2R4c192b2x1bWVfcHV0LApAQCAtMTkzNiwxMCArMTk4MSwxOSBAQAogCQl9CiAJCWVsc2UgLyogVXNpbmcgRFhTIHdoZW4gUENNIGVtdWxhdGlvbiBpcyBlbmFibGVkIGlzIHJlYWxseSB3ZWlyZCAqLwogCQl7Ci0JCQkvKiBTdGFuZGFsb25lIERYUyBjb250cm9scyAqLwotCQkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfdmlhODIzM19keHNfdm9sdW1lX2NvbnRyb2wsIGNoaXApKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKworCQkJCWtjdGwgPSBzbmRfY3RsX25ldzEoCisJCQkJCSZzbmRfdmlhODIzM19keHNfdm9sdW1lX2NvbnRyb2wsIGNoaXApOworCQkJCWlmICgha2N0bCkKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJa2N0bC0+aWQuc3ViZGV2aWNlID0gaTsKKwkJCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBrY3RsKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQljaGlwLT5keHNfY29udHJvbHNbaV0gPSBrY3RsOworCQkJfQogCQl9CiAJfQogCS8qIHNlbGVjdCBzcGRpZiBkYXRhIHNsb3QgMTAvMTEgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IDdkZWE3NGIuLjY0Yjg1OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtMjE3LDIwICsyMTcsMjUgQEAKICAqIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2sKICAqLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgcGRhY2ZfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBzbmRfcGRhY2YgKnBkYWNmID0gbGluay0+cHJpdjsKLQlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisJaW50IHJldDsKIAogCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInBkYWNmX2NvbmZpZyBjYWxsZWRcbiIpOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDU7CiAKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAlpZiAoc25kX3BkYWNmX2Fzc2lnbl9yZXNvdXJjZXMocGRhY2YsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKSA8IDApCiAJCWdvdG8gZmFpbGVkOwpAQCAtMjM4LDggKzI0Myw2IEBACiAJbGluay0+ZGV2X25vZGUgPSAmcGRhY2YtPm5vZGU7CiAJcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwppbmRleCA3NDQ1Y2M4Li4xNDkyNzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYworKysgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwpAQCAtMjEzLDE0ICsyMTMsMTEgQEAKICAqIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2sKICAqLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgdnhwb2NrZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCB2eF9jb3JlICpjaGlwID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHAgPSAoc3RydWN0IHNuZF92eHBvY2tldCAqKWNoaXA7Ci0JaW50IGxhc3RfZm4sIGxhc3RfcmV0OworCWludCByZXQ7CiAKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJ2eHBvY2tldF9jb25maWcgY2FsbGVkXG4iKTsKIApAQCAtMjM1LDkgKzIzMiwxNyBAQAogCQlzdHJjcHkoY2hpcC0+Y2FyZC0+ZHJpdmVyLCB2eHA0NDBfaHcubmFtZSk7CiAJfQogCi0JQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKTsKLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJY2hpcC0+ZGV2ID0gJmhhbmRsZV90b19kZXYobGluayk7CiAJc25kX2NhcmRfc2V0X2RldihjaGlwLT5jYXJkLCBjaGlwLT5kZXYpOwpAQCAtMjQ4LDggKzI1Myw2IEBACiAJbGluay0+ZGV2X25vZGUgPSAmdnhwLT5ub2RlOwogCXJldHVybiAwOwogCi1jc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9LY29uZmlnIGIvc291bmQvcHBjL0tjb25maWcKaW5kZXggYmQyMzM4YS4uMDUxOWM2MCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL0tjb25maWcKKysrIGIvc291bmQvcHBjL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAKIG1lbnVjb25maWcgU05EX1BQQwogCWJvb2wgIlBvd2VyUEMgc291bmQgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIFBQQzY0IHx8IFBQQzMyCisJZGVwZW5kcyBvbiBQUEMKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzb3VuZCBkZXZpY2VzIHNwZWNpZmljIHRvIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9rZXl3ZXN0LmMgYi9zb3VuZC9wcGMva2V5d2VzdC5jCmluZGV4IDgzNWZhMTkuLmQwNmY3ODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9rZXl3ZXN0LmMKKysrIGIvc291bmQvcHBjL2tleXdlc3QuYwpAQCAtNTksNiArNTksMTggQEAKIAlzdHJsY3B5KGluZm8udHlwZSwgImtleXdlc3QiLCBJMkNfTkFNRV9TSVpFKTsKIAlpbmZvLmFkZHIgPSBrZXl3ZXN0X2N0eC0+YWRkcjsKIAlrZXl3ZXN0X2N0eC0+Y2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWlmICgha2V5d2VzdF9jdHgtPmNsaWVudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJLyoKKwkgKiBXZSBrbm93IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHRoZSBkZXZpY2Ugc2hvdWxkIGJlCisJICogYWxyZWFkeSBib3VuZC4gSWYgbm90IGl0IG1lYW5zIGJpbmRpbmcgZmFpbGVkLCBhbmQgdGhlbiB0aGVyZQorCSAqIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgdGhlIGRldmljZSBpbnN0YW50aWF0ZWQuCisJICovCisJaWYgKCFrZXl3ZXN0X2N0eC0+Y2xpZW50LT5kcml2ZXIpIHsKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGtleXdlc3RfY3R4LT5jbGllbnQpOworCQlrZXl3ZXN0X2N0eC0+Y2xpZW50ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCQogCS8qCiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KQEAgLTg2LDcgKzk4LDcgQEAKIAl7IH0KIH07CiAKLXN0cnVjdCBpMmNfZHJpdmVyIGtleXdlc3RfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGtleXdlc3RfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIlBNYWMgS2V5d2VzdCBBdWRpbyIsCiAJfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NoL2FpY2EuYyBiL3NvdW5kL3NoL2FpY2EuYwppbmRleCA1ODNhMzY5Li5hMGRmNDAxIDEwMDY0NAotLS0gYS9zb3VuZC9zaC9haWNhLmMKKysrIGIvc291bmQvc2gvYWljYS5jCkBAIC00OSw2ICs0OSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyZWFtY2FzdCBBSUNBIHNvdW5kIChwY20pIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7WWFtYWhhL1NFR0EsIEFJQ0F9fSIpOworTU9EVUxFX0ZJUk1XQVJFKCJhaWNhX2Zpcm13YXJlLmJpbiIpOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwogI2RlZmluZSBDQVJEX05BTUUgIkFJQ0EiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCmluZGV4IGFjOTI3ZmYuLjk3ZjFhMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCkBAIC03LDE1ICs3LDYgQEAKIAkgIG1vZGUgKHN1cHBvcnRzIHNpbmdsZSBzdGVyZW8gSW4vT3V0KS4KIAkgIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KIAotY29uZmlnIFNORF9CRjVYWF9URE0KLQl0cmlzdGF0ZSAiU29DIEkyUyhURE0gbW9kZSkgQXVkaW8gZm9yIHRoZSBBREkgQkY1eHggY2hpcCIKLQlkZXBlbmRzIG9uIChCTEFDS0ZJTiAmJiBTTkRfU09DKQotCWhlbHAKLQkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bwotCSAgdGhlIEJsYWNrZmluIFNQT1JUIChzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMpIGludGVyZmFjZSBpbiBURE0KLQkgIG1vZGUuCi0JICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCi0KIGNvbmZpZyBTTkRfQkY1WFhfU09DX1NTTTI2MDIKIAl0cmlzdGF0ZSAiU29DIFNTTTI2MDIgQXVkaW8gc3VwcG9ydCBmb3IgQkY1MnggZXpraXQiCiAJZGVwZW5kcyBvbiBTTkRfQkY1WFhfSTJTCkBAIC00MSw2ICszMiwzMSBAQAogCSAgRW50ZXIgdGhlIEdQSU8gdXNlZCB0byBjb250cm9sIEFENzMzMTEncyBTRSBwaW4uIEFjY2VwdGFibGUKIAkgIHZhbHVlcyBhcmUgMCB0byA3CiAKK2NvbmZpZyBTTkRfQkY1WFhfVERNCisJdHJpc3RhdGUgIlNvQyBJMlMoVERNIG1vZGUpIEF1ZGlvIGZvciB0aGUgQURJIEJGNXh4IGNoaXAiCisJZGVwZW5kcyBvbiAoQkxBQ0tGSU4gJiYgU05EX1NPQykKKwloZWxwCisJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8KKwkgIHRoZSBCbGFja2ZpbiBTUE9SVCAoc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzKSBpbnRlcmZhY2UgaW4gVERNCisJICBtb2RlLgorCSAgWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgorCitjb25maWcgU05EX0JGNVhYX1NPQ19BRDE4MzYKKwl0cmlzdGF0ZSAiU29DIEFEMTgzNiBBdWRpbyBzdXBwb3J0IGZvciBCRjV4eCIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KKwlzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KKwlzZWxlY3QgU05EX1NPQ19BRDE4MzYKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEJGNXh4IFNUQU1QL0VaS0lULgorCitjb25maWcgU05EX0JGNVhYX1NPQ19BRDE5MzgKKwl0cmlzdGF0ZSAiU29DIEFEMTkzOCBBdWRpbyBzdXBwb3J0IGZvciBCbGFja2ZpbiIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KKwlzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KKwlzZWxlY3QgU05EX1NPQ19BRDE5MzgKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgQUQxOTM4IGNvZGVjIG9uIEJsYWNrZmluLgorCiBjb25maWcgU05EX0JGNVhYX0FDOTcKIAl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gZm9yIHRoZSBBREkgQkY1eHggY2hpcCIKIAlkZXBlbmRzIG9uIEJMQUNLRklOCkBAIC03MSw2ICs4NywzMCBAQAogCSAgU2F5IHkgaWYgeW91IHdhbnQgQUM5NyBkcml2ZXIgdG8gc3VwcG9ydCB1cCB0byA1LjEgY2hhbm5lbCBhdWRpby4KIAkgIHRoaXMgbW9kZSB3aWxsIGNvbnN1bWUgbXVjaCBtb3JlIG1lbW9yeSBmb3IgRE1BLgogCitjb25maWcgU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAorCWJvb2wgIkJPQVJEIGhhcyBDT0xEIFJlc2V0IEdQSU8iCisJZGVwZW5kcyBvbiBTTkRfQkY1WFhfQUM5NworCWRlZmF1bHQgeSBpZiBCRklONTQ4X0VaS0lUCisJZGVmYXVsdCBuIGlmICFCRklONTQ4X0VaS0lUCisKK2NvbmZpZyBTTkRfQkY1WFhfUkVTRVRfR1BJT19OVU0KKwlpbnQgIlNldCBhIEdQSU8gZm9yIGNvbGQgcmVzZXQiCisJZGVwZW5kcyBvbiBTTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCisJcmFuZ2UgMCAxNTkKKwlkZWZhdWx0IDE5IGlmIEJGSU41NDhfRVpLSVQKKwlkZWZhdWx0IDUgaWYgQkZJTjUzN19TVEFNUAorCWRlZmF1bHQgMAorCWhlbHAKKwkgIFNldCB0aGUgY29ycmVjdCBHUElPIGZvciBSRVNFVCB0aGUgc291bmQgY2hpcC4KKworY29uZmlnIFNORF9CRjVYWF9TT0NfQUQxOTgwCisJdHJpc3RhdGUgIlNvQyBBRDE5ODAvMSBBdWRpbyBzdXBwb3J0IGZvciBCRjV4eCIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9BQzk3CisJc2VsZWN0IFNORF9CRjVYWF9TT0NfQUM5NworCXNlbGVjdCBTTkRfU09DX0FEMTk4MAorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1eHggU1RBTVAvRVpLSVQuCisKIGNvbmZpZyBTTkRfQkY1WFhfU09DX1NQT1JUCiAJdHJpc3RhdGUKIApAQCAtODgsMzAgKzEyOCw2IEBACiAJc2VsZWN0IFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX0JGNVhYX1NPQ19TUE9SVAogCi1jb25maWcgU05EX0JGNVhYX1NPQ19BRDE4MzYKLQl0cmlzdGF0ZSAiU29DIEFEMTgzNiBBdWRpbyBzdXBwb3J0IGZvciBCRjV4eCIKLQlkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KLQlzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KLQlzZWxlY3QgU05EX1NPQ19BRDE4MzYKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEJGNXh4IFNUQU1QL0VaS0lULgotCi1jb25maWcgU05EX0JGNVhYX1NPQ19BRDE5ODAKLQl0cmlzdGF0ZSAiU29DIEFEMTk4MC8xIEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgotCWRlcGVuZHMgb24gU05EX0JGNVhYX0FDOTcKLQlzZWxlY3QgU05EX0JGNVhYX1NPQ19BQzk3Ci0Jc2VsZWN0IFNORF9TT0NfQUQxOTgwCi0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBCRjV4eCBTVEFNUC9FWktJVC4KLQotY29uZmlnIFNORF9CRjVYWF9TT0NfQUQxOTM4Ci0gICAgICAgIHRyaXN0YXRlICJTb0MgQUQxOTM4IEF1ZGlvIHN1cHBvcnQgZm9yIEJsYWNrZmluIgotICAgICAgICBkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KLSAgICAgICAgc2VsZWN0IFNORF9CRjVYWF9TT0NfVERNCi0gICAgICAgIHNlbGVjdCBTTkRfU09DX0FEMTkzOAotICAgICAgICBoZWxwCi0gICAgICAgICAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIEFEMTkzOCBjb2RlYyBvbiBCbGFja2Zpbi4KLQogY29uZmlnIFNORF9CRjVYWF9TUE9SVF9OVU0KIAlpbnQgIlNldCBhIFNQT1JUIGZvciBTb3VuZCBjaGlwIgogCWRlcGVuZHMgb24gKFNORF9CRjVYWF9JMlMgfHwgU05EX0JGNVhYX0FDOTcgfHwgU05EX0JGNVhYX1RETSkKQEAgLTEyMCwxOSArMTM2LDMgQEAKIAlkZWZhdWx0IDAKIAloZWxwCiAJICBTZXQgdGhlIGNvcnJlY3QgU1BPUlQgZm9yIHNvdW5kIGNoaXAuCi0KLWNvbmZpZyBTTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCi0JYm9vbCAiQk9BUkQgaGFzIENPTEQgUmVzZXQgR1BJTyIKLQlkZXBlbmRzIG9uIFNORF9CRjVYWF9BQzk3Ci0JZGVmYXVsdCB5IGlmIEJGSU41NDhfRVpLSVQKLQlkZWZhdWx0IG4gaWYgIUJGSU41NDhfRVpLSVQKLQotY29uZmlnIFNORF9CRjVYWF9SRVNFVF9HUElPX05VTQotCWludCAiU2V0IGEgR1BJTyBmb3IgY29sZCByZXNldCIKLQlkZXBlbmRzIG9uIFNORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKLQlyYW5nZSAwIDE1OQotCWRlZmF1bHQgMTkgaWYgQkZJTjU0OF9FWktJVAotCWRlZmF1bHQgNSBpZiBCRklONTM3X1NUQU1QCi0JZGVmYXVsdCAwCi0JaGVscAotCSAgU2V0IHRoZSBjb3JyZWN0IEdQSU8gZm9yIFJFU0VUIHRoZSBzb3VuZCBjaGlwLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCmluZGV4IDFlOWQxNjEuLjA4NGI2ODggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKQEAgLTc3LDEyICs3NywxMiBAQAogICogVEZTLiBXaGVuIFBvcnQgRyBpcyBzZWxlY3RlZCBhbmQgRU1BQyB0aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QgYmV0d2VlbgogICogdGhlIFBIWSBpbnRlcnJ1cHQgbGluZSBhbmQgVEZTLiAgQ3VycmVudCBzZXR0aW5ncyBwcmV2ZW50IHRoZSBjb25mbGljdAogICogYnkgaWdub3JpbmcgdGhlIFRGUyBwaW4gd2hlbiBQb3J0IEcgaXMgc2VsZWN0ZWQuIFRoaXMgYWxsb3dzIGJvdGgKLSAqIHNzbTI2MDIgdXNpbmcgUG9ydCBHIGFuZCBFTUFDIGNvbmN1cnJlbnRseS4KKyAqIGNvZGVjcyBhbmQgRU1BQyB1c2luZyBQb3J0IEcgY29uY3VycmVudGx5LgogICovCi0jaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURgotI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTIChQX1NQT1JUMF9URlMpCi0jZWxzZQorI2lmZGVmIENPTkZJR19CRjUyN19TUE9SVDBfUE9SVEcKICNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoMCkKKyNlbHNlCisjZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKFBfU1BPUlQwX1RGUykKICNlbmRpZgogCiBzdGF0aWMgdTE2IHNwb3J0X3JlcVtdWzddID0geyB7UF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMKaW5kZXggMzA5NmJhZC4uZmY1NDZlOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYwpAQCAtNzgsMTIgKzc4LDEyIEBACiAgKiBURlMuIFdoZW4gUG9ydCBHIGlzIHNlbGVjdGVkIGFuZCBFTUFDIHRoZW4gdGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuCiAgKiB0aGUgUEhZIGludGVycnVwdCBsaW5lIGFuZCBURlMuICBDdXJyZW50IHNldHRpbmdzIHByZXZlbnQgdGhlIGNvbmZsaWN0CiAgKiBieSBpZ25vcmluZyB0aGUgVEZTIHBpbiB3aGVuIFBvcnQgRyBpcyBzZWxlY3RlZC4gVGhpcyBhbGxvd3MgYm90aAotICogc3NtMjYwMiB1c2luZyBQb3J0IEcgYW5kIEVNQUMgY29uY3VycmVudGx5LgorICogY29kZWNzIGFuZCBFTUFDIHVzaW5nIFBvcnQgRyBjb25jdXJyZW50bHkuCiAgKi8KLSNpZmRlZiBDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRGCi0jZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKFBfU1BPUlQwX1RGUykKLSNlbHNlCisjaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURwogI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTICgwKQorI2Vsc2UKKyNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQogI2VuZGlmCiAKIHN0YXRpYyB1MTYgc3BvcnRfcmVxW11bN10gPSB7IHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwppbmRleCAwYjhkY2I1Li42YjI0ZDhiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCkBAIC0yNjUsOCArMjY1LDggQEAKICNkZWZpbmUgVVBQRVJfR1JPVVAgKCgxPDw4KSB8ICgxPDw5KSB8ICgxPDwxMCkgfCAoMTw8MTEpICAgICAgICB8ICgxPDwxNSkpCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc3JfdmFsaWRfbWFza1tdID0gewogCUxPV0VSX0dST1VQfFVQUEVSX0dST1VQLAkvKiBOb3JtYWwsIGJvc3IgLSAwKi8KLQlMT1dFUl9HUk9VUHxVUFBFUl9HUk9VUCwJLyogTm9ybWFsLCBib3NyIC0gMSovCiAJTE9XRVJfR1JPVVAsCQkJLyogVXNiLCBib3NyIC0gMCovCisJTE9XRVJfR1JPVVB8VVBQRVJfR1JPVVAsCS8qIE5vcm1hbCwgYm9zciAtIDEqLwogCVVQUEVSX0dST1VQLAkJCS8qIFVzYiwgYm9zciAtIDEqLwogfTsKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwppbmRleCAzZmYwMzczLi41OTNkNWI5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKQEAgLTU3OSw3ICs1NzksNyBAQAogCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkwzIENhcHR1cmUgVm9sdW1lIiwKIAkJCSAgICBXTTgzNTBfSU5QVVRfTUlYRVJfVk9MVU1FX0wsIDksIDcsIDAsIG91dF9taXhfdGx2KSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQSBDYXB0dXJlIFN3aXRjaCIsCi0JCQlXTTgzNTBfTEVGVF9JTlBVVF9WT0xVTUUsIDE0LCAxLCAwKSwKKwkJCVdNODM1MF9MRUZUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDEpLAogfTsKIAogLyogUmlnaHQgSW5wdXQgTWl4ZXIgKi8KQEAgLTU4OSw3ICs1ODksNyBAQAogCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkwzIENhcHR1cmUgVm9sdW1lIiwKIAkJCSAgICBXTTgzNTBfSU5QVVRfTUlYRVJfVk9MVU1FX1IsIDEzLCA3LCAwLCBvdXRfbWl4X3RsdiksCiAJU09DX0RBUE1fU0lOR0xFKCJQR0EgQ2FwdHVyZSBTd2l0Y2giLAotCQkJV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDApLAorCQkJV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDEpLAogfTsKIAogLyogTGVmdCBNaWMgTWl4ZXIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCmluZGV4IGRhOTdhYWUuLjFlZjI0NTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYwpAQCAtNzkwLDcgKzc5MCw3IEBACiAJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NDAtPnJlZ19jYWNoZTsKIAogCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCmluZGV4IDEyYTZjNTQuLjRhZTcwNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwpAQCAtOTcsMjIgKzk3LDE5IEBACiAJREFWSU5DSV9NQ0JTUF9XT1JEXzMyLAogfTsKIAotc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zIGRhdmluY2lfaTJzX3BjbV9vdXQgPSB7Ci0JLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBkYXZpbmNpX2kyc19wY21faW4gPSB7Ci0JLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gaW4iLAotfTsKLQogc3RydWN0IGRhdmluY2lfbWNic3BfZGV2IHsKKwkvKgorCSAqIGRtYV9wYXJhbXMgbXVzdCBiZSBmaXJzdCBiZWNhdXNlIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEKKwkgKiBpcyBjYXN0IHRvIGEgcG9pbnRlciBvZiBhbiBhcnJheSBvZiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBpbgorCSAqIGRhdmluY2lfcGNtX29wZW4uCisJICovCisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMJZG1hX3BhcmFtc1syXTsKIAl2b2lkIF9faW9tZW0JCQkqYmFzZTsKICNkZWZpbmUgTU9EX0RTUF9BCTAKICNkZWZpbmUgTU9EX0RTUF9CCTEKIAlpbnQJCQkJbW9kZTsKIAl1MzIJCQkJcGNyOwogCXN0cnVjdCBjbGsJCQkqY2xrOwotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zCSpkbWFfcGFyYW1zWzJdOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKHN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2LApAQCAtMjE1LDE0ICsyMTIsNiBAQAogCXRvZ2dsZV9jbG9jayhkZXYsIHBsYXliYWNrKTsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKLXsKLQlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQljcHVfZGFpLT5kbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07Ci0JcmV0dXJuIDA7Ci19Ci0KICNkZWZpbmUgREVGQVVMVF9CSVRQRVJTQU1QTEUJMTYKIAogc3RhdGljIGludCBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCkBAIC0zNTMsOCArMzQyLDkgQEAKIAkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gZGFpLT5kbWFfZGF0YTsKIAlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGRhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0KKwkJCQkJJmRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07CiAJc3RydWN0IHNuZF9pbnRlcnZhbCAqaSA9IE5VTEw7CiAJaW50IG1jYnNwX3dvcmRfbGVuZ3RoOwogCXVuc2lnbmVkIGludCByY3IsIHhjciwgc3JncjsKQEAgLTQ3Miw3ICs0NjIsNiBAQAogI2RlZmluZSBEQVZJTkNJX0kyU19SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhdmluY2lfaTJzX2RhaV9vcHMgPSB7Ci0JLnN0YXJ0dXAgCT0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKIAkuc2h1dGRvd24JPSBkYXZpbmNpX2kyc19zaHV0ZG93biwKIAkucHJlcGFyZQk9IGRhdmluY2lfaTJzX3ByZXBhcmUsCiAJLnRyaWdnZXIJPSBkYXZpbmNpX2kyc190cmlnZ2VyLApAQCAtNTM0LDEyICs1MjMsMTAgQEAKIAogCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKG1lbS0+c3RhcnQpOwogCi0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gJmRhdmluY2lfaTJzX3BjbV9vdXQ7Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5kbWFfYWRkciA9CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYV9hZGRyID0KIAkgICAgKGRtYV9hZGRyX3QpKGlvX3YycChkZXYtPmJhc2UpICsgREFWSU5DSV9NQ0JTUF9EWFJfUkVHKTsKIAotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gJmRhdmluY2lfaTJzX3BjbV9pbjsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS0+ZG1hX2FkZHIgPQorCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYV9hZGRyID0KIAkgICAgKGRtYV9hZGRyX3QpKGlvX3YycChkZXYtPmJhc2UpICsgREFWSU5DSV9NQ0JTUF9EUlJfUkVHKTsKIAogCS8qIGZpcnN0IFRYLCB0aGVuIFJYICovCkBAIC01NDksNyArNTM2LDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5jaGFubmVsID0gcmVzLT5zdGFydDsKKwlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmICghcmVzKSB7CkBAIC01NTcsNyArNTQ0LDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0tPmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OwogCiAJZGF2aW5jaV9pMnNfZGFpLnByaXZhdGVfZGF0YSA9IGRldjsKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmZGF2aW5jaV9pMnNfZGFpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwppbmRleCA3YTA2YzBhLi41ZDFmOThhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCkBAIC0zMzIsMTQgKzMzMiw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiR0JMQ1RMIHdyaXRlIGVycm9yXG4iKTsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCi17Ci0Jc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0JY3B1X2RhaS0+ZG1hX2RhdGEgPSBkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBtY2FzcF9zdGFydF9yeChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldikKIHsKIAltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFJfUkVHLCBSWEhDTEtSU1QpOwpAQCAtMzg2LDE3ICszNzgsMTcgQEAKIAogc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdGFydChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldiwgaW50IHN0cmVhbSkKIHsKLQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWlmIChkZXYtPnR4bnVtZXZ0KQkvKiBlbmFibGUgRklGTyAqLworCQkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdGFydF90eChkZXYpOwotCWVsc2UKKwl9IGVsc2UgeworCQlpZiAoZGV2LT5yeG51bWV2dCkJLyogZW5hYmxlIEZJRk8gKi8KKwkJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJCQkJCUZJRk9fRU5BQkxFKTsKIAkJbWNhc3Bfc3RhcnRfcngoZGV2KTsKLQotCS8qIGVuYWJsZSBGSUZPICovCi0JaWYgKGRldi0+dHhudW1ldnQpCi0JCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKLQotCWlmIChkZXYtPnJ4bnVtZXZ0KQotCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBtY2FzcF9zdG9wX3J4KHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2KQpAQCAtNDEzLDE3ICs0MDUsMTcgQEAKIAogc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdG9wKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2LCBpbnQgc3RyZWFtKQogewotCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKGRldi0+dHhudW1ldnQpCS8qIGRpc2FibGUgRklGTyAqLworCQkJbWNhc3BfY2xyX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdG9wX3R4KGRldik7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWlmIChkZXYtPnJ4bnVtZXZ0KQkvKiBkaXNhYmxlIEZJRk8gKi8KKwkJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJCQkJCUZJRk9fRU5BQkxFKTsKIAkJbWNhc3Bfc3RvcF9yeChkZXYpOwotCi0JLyogZGlzYWJsZSBGSUZPICovCi0JaWYgKGRldi0+dHhudW1ldnQpCi0JCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKLQotCWlmIChkZXYtPnJ4bnVtZXZ0KQotCQltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgaW50IGRhdmluY2lfbWNhc3Bfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLApAQCAtNzIwLDcgKzcxMiw3IEBACiB7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPQotCQkJCQlkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOworCQkJCQkmZGV2LT5kbWFfcGFyYW1zW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlpbnQgd29yZF9sZW5ndGg7CiAJdTggbnVtZXZ0OwogCkBAIC03OTgsNyArNzkwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9tY2FzcF9kYWlfb3BzID0gewotCS5zdGFydHVwIAk9IGRhdmluY2lfbWNhc3Bfc3RhcnR1cCwKIAkudHJpZ2dlcgk9IGRhdmluY2lfbWNhc3BfdHJpZ2dlciwKIAkuaHdfcGFyYW1zCT0gZGF2aW5jaV9tY2FzcF9od19wYXJhbXMsCiAJLnNldF9mbXQJPSBkYXZpbmNpX21jYXNwX3NldF9kYWlfZm10LApAQCAtODQ5LDIwICs4NDAsMTIgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlvYXJlYSwgKnJlczsKIAlzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2OwotCWludCBjb3VudCA9IDA7CiAJaW50IHJldCA9IDA7CiAKIAlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuCS1FTk9NRU07CiAKLQlkbWFfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zKSAqIDIsCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCWlmICghZG1hX2RhdGEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmVsZWFzZV9kZXY7Ci0JfQotCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIW1lbSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW0gcmVzb3VyY2U/XG4iKTsKQEAgLTg5NywxMSArODgwLDEwIEBACiAJZGV2LT50eG51bWV2dCA9IHBkYXRhLT50eG51bWV2dDsKIAlkZXYtPnJ4bnVtZXZ0ID0gcGRhdGEtPnJ4bnVtZXZ0OwogCi0JZG1hX2RhdGFbY291bnRdLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IjsKLQlkbWFfZGF0YVtjb3VudF0uZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKLQlkbWFfZGF0YVtjb3VudF0uZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkgKHBkYXRhLT50eF9kbWFfb2Zmc2V0ICsKKwlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CisJZG1hX2RhdGEtPmV2ZW50cV9ubyA9IHBkYXRhLT5ldmVudHFfbm87CisJZG1hX2RhdGEtPmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpIChwZGF0YS0+dHhfZG1hX29mZnNldCArCiAJCQkJCQkJaW9fdjJwKGRldi0+YmFzZSkpOwotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9ICZkbWFfZGF0YVtjb3VudF07CiAKIAkvKiBmaXJzdCBUWCwgdGhlbiBSWCAqLwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CkBAIC05MTAsMTMgKzg5MiwxMiBAQAogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKLQlkbWFfZGF0YVtjb3VudF0uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7Ci0JY291bnQrKzsKLQlkbWFfZGF0YVtjb3VudF0ubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBpbiI7Ci0JZG1hX2RhdGFbY291bnRdLmV2ZW50cV9ubyA9IHBkYXRhLT5ldmVudHFfbm87Ci0JZG1hX2RhdGFbY291bnRdLmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpKHBkYXRhLT5yeF9kbWFfb2Zmc2V0ICsKKwlkbWFfZGF0YS0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7CisKKwlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXTsKKwlkbWFfZGF0YS0+ZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKKwlkbWFfZGF0YS0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkocGRhdGEtPnJ4X2RtYV9vZmZzZXQgKwogCQkJCQkJCWlvX3YycChkZXYtPmJhc2UpKTsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9ICZkbWFfZGF0YVtjb3VudF07CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmICghcmVzKSB7CkBAIC05MjQsNyArOTA1LDcgQEAKIAkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JZG1hX2RhdGFbY291bnRdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRtYV9kYXRhLT5jaGFubmVsID0gcmVzLT5zdGFydDsKIAlkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0ucHJpdmF0ZV9kYXRhID0gZGV2OwogCWRhdmluY2lfbWNhc3BfZGFpW3BkYXRhLT5vcF9tb2RlXS5kZXYgPSAmcGRldi0+ZGV2OwogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0pOwpAQCAtOTM2LDggKzkxNyw2IEBACiBlcnJfcmVsZWFzZV9yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CiBlcnJfcmVsZWFzZV9kYXRhOgotCWtmcmVlKGRtYV9kYXRhKTsKLWVycl9yZWxlYXNlX2RldjoKIAlrZnJlZShkZXYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTk0Niw3ICs5MjUsNiBAQAogc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXY7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAKQEAgLTk1OSw4ICs5MzcsNiBAQAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CiAKLQlkbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKLQlrZnJlZShkbWFfZGF0YSk7CiAJa2ZyZWUoZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCmluZGV4IDU1NDM1NGMuLjlkMTc5Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKQEAgLTM5LDEwICszOSwxNSBAQAogfTsKIAogc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2IHsKKwkvKgorCSAqIGRtYV9wYXJhbXMgbXVzdCBiZSBmaXJzdCBiZWNhdXNlIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEKKwkgKiBpcyBjYXN0IHRvIGEgcG9pbnRlciBvZiBhbiBhcnJheSBvZiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBpbgorCSAqIGRhdmluY2lfcGNtX29wZW4uCisJICovCisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgZG1hX3BhcmFtc1syXTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJaW50IHNhbXBsZV9yYXRlOwogCXN0cnVjdCBjbGsgKmNsazsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtc1syXTsKIAl1bnNpZ25lZCBpbnQgY29kZWNfZm10OwogCiAJLyogTWNBU1Agc3BlY2lmaWMgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggMmY3ZGE0OS4uYzczYTkxNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC0xMjYsMTYgKzEyNiw5IEBACiBzdGF0aWMgaW50IGRhdmluY2lfcGNtX2RtYV9yZXF1ZXN0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CiAJc3RydWN0IGVkbWFjY19wYXJhbSBwX3JhbTsKIAlpbnQgcmV0OwogCi0JaWYgKCFkbWFfZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwcnRkLT5wYXJhbXMgPSBkbWFfZGF0YTsKLQogCS8qIFJlcXVlc3QgbWFzdGVyIERNQSBjaGFubmVsICovCiAJcmV0ID0gZWRtYV9hbGxvY19jaGFubmVsKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKIAkJCQkgIGRhdmluY2lfcGNtX2RtYV9pcnEsIHN1YnN0cmVhbSwKQEAgLTI0NCw2ICsyMzcsMTEgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSAqcHJ0ZDsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKnBhID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqcGFyYW1zID0gJnBhW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJmRhdmluY2lfcGNtX2hhcmR3YXJlKTsKIAkvKiBlbnN1cmUgdGhhdCBidWZmZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHBlcmlvZCBzaXplICovCkBAIC0yNTcsNiArMjU1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2tfaW5pdCgmcHJ0ZC0+bG9jayk7CisJcHJ0ZC0+cGFyYW1zID0gcGFyYW1zOwogCiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaCBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmgKaW5kZXggNjNkOTYyNS4uODc0NjYwNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oCkBAIC0xNyw3ICsxNyw2IEBACiAKIAogc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgewotCWNoYXIgKm5hbWU7CQkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KIAlpbnQgY2hhbm5lbDsJCQkvKiBzeW5jIGRtYSBjaGFubmVsIElEICovCiAJdW5zaWduZWQgc2hvcnQgYWNudDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogZGV2aWNlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmMgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwppbmRleCAzODA2ZmYyLi5jY2RlZmU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYworKysgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwpAQCAtMzk3LDE0ICszOTcsNiBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBzeW5jICovCi0JaWYgKCEoZm10ICYgU05EX1NPQ19EQUlGTVRfQVNZTkMpKQotCQlzY3IgfD0gU1NJX1NDUl9TWU47Ci0KLQkvKiB0ZG0gLSBvbmx5IGZvciBzdGVyZW8gYXRtICovCi0JaWYgKGZtdCAmIFNORF9TT0NfREFJRk1UX1RETSkKLQkJc2NyIHw9IFNTSV9TQ1JfTkVUOwotCiAJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKIAkJU1NJMV9TVENSID0gc3RjcjsKIAkJU1NJMV9TUkNSID0gc3JjcjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCmluZGV4IDJkZWU5ODMuLjY1M2EzNjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKKysrIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwpAQCAtMjEsNyArMjEsMTggQEAKIAlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCiAJc2VsZWN0IFNORF9TT0NfQ1gyMDQ0MgogCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQW1zdHJhZCBEZWx0YS4KKwkgIFNheSBZICBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCAgZm9yIFNvQyBhdWRpbyBkZXZpY2UgIGNvbm5lY3RlZCB0bworCSAgYSBoYW5kc2V0IGFuZCBhIHNwZWFrZXJwaG9uZSBmb3VuZCBvbiBBbXN0cmFkIEUzIChEZWx0YSkgdmlkZW9waG9uZS4KKworCSAgTm90ZSB0aGF0IGluIG9yZGVyIHRvIGdldCB0aG9zZSBkZXZpY2VzIGZ1bGx5IHN1cHBvcnRlZCwgIHlvdSBoYXZlIHRvCisJICBidWlsZCAgdGhlIGtlcm5lbCAgd2l0aCAgc3RhbmRhcmQgIHNlcmlhbCBwb3J0ICBkcml2ZXIgIGluY2x1ZGVkICBhbmQKKwkgIGNvbmZpZ3VyZWQgZm9yIGF0IGxlYXN0IDQgcG9ydHMuICBUaGVuLCBmcm9tIHVzZXJzcGFjZSwgeW91IG11c3QgbG9hZAorCSAgYSBsaW5lIGRpc2NpcGxpbmUgIzE5IG9uIHRoZSBtb2RlbSAodHR5UzMpIHNlcmlhbCBsaW5lLiAgVGhlIHNpbXBsZXN0CisJICB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIGluc3RhbGwgdXRpbC1saW51eC1uZyAgYW5kIHVzZSB0aGUgaW5jbHVkZWQKKwkgIGxkYXR0YWNoICB1dGlsaXR5LiAgVGhpcyAgY2FuIGJlICBzdGFydGVkICBhdXRvbWF0aWNhbGx5ICBmcm9tICB1ZGV2LAorCSAgYSBzaW1wbGUgcnVsZSBsaWtlIHRoaXMgb25lIHNob3VsZCBkbyB0aGUgdHJpY2sgKGl0IGRvZXMgZm9yIG1lKToKKwkgIAlBQ1RJT049PSJhZGQiLCBLRVJORUw9PSJjb250cm9sQzAiLCBcCisJCQkJUlVOKz0iL3Vzci9zYmluL2xkYXR0YWNoIDE5IC9kZXYvdHR5UzMiCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT1NLNTkxMgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3Igb21hcCBvc2s1OTEyIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggNTczNTk0NS4uNmE4MjllZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC0xOTUsOCArMTk1LDEyIEBACiAJZWxzZQogCQlvbWFwX2VuYWJsZV9kbWFfaXJxKHBydGQtPmRtYV9jaCwgT01BUF9ETUFfRlJBTUVfSVJRKTsKIAotCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShwcnRkLT5kbWFfY2gsIE9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOwotCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKwlpZiAoIShjcHVfY2xhc3NfaXNfb21hcDEoKSkpIHsKKwkJb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwKKwkJCQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCQlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwKKwkJCQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNldm0uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzZXZtLmMKaW5kZXggOTExNGMyNi4uMTNhYTM4MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcDNldm0uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM2V2bS5jCkBAIC0xNDQsNCArMTQ0LDQgQEAKIAogTU9EVUxFX0FVVEhPUigiQW51aiBBZ2dhcndhbCA8YW51ai5hZ2dhcndhbEB0aS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIE9NQVAzIEVWTSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCmluZGV4IGFkMjE5YWEuLjBjZDA2ZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKICAqICB8UHwgPC0tLSBUV0w0MDMwIDwtLS0tLS0tLS0gTGluZSBJbiBhbmQgTUlDcwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIlBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIkhpRmkgUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAogCVNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIEFtcGxpZmllciIsIFNORF9TT0NfTk9QTSwKIAkJCSAgIDAsIDAsIE5VTEwsIDAsIG9tYXAzcGFuZG9yYV9ocF9ldmVudCwKIAkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKQEAgLTE4MSw2ICsxODEsNyBAQAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGTCIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiVklCUkEiKTsKIAogCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzLAogCQkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwppbmRleCA2Mzc1YjRlLi5kY2IzMTgxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL0tjb25maWcKKysrIGIvc291bmQvc29jL3B4YS9LY29uZmlnCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogY29uZmlnIFNORF9QWEEyWFhfU09DX0lNT1RFMgogICAgICAgIHRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgSU1vdGUgMiIKLSAgICAgICBkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfSU5URUxNT1RFMgorICAgICAgIGRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9JTlRFTE1PVEUyICYmIEkyQwogICAgICAgIHNlbGVjdCBTTkRfUFhBMlhYX1NPQ19JMlMKICAgICAgICBzZWxlY3QgU05EX1NPQ19XTTg5NDAKICAgICAgICBoZWxwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwppbmRleCA1Y2JiZGM4Li4xZjM1YzZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKQEAgLTc1LDExICs3NSwxOSBAQAogewogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCWRtYV9hZGRyX3QgcG9zID0gcHJ0ZC0+ZG1hX3BvczsKKwl1bnNpZ25lZCBpbnQgbGltaXQ7CiAJaW50IHJldDsKIAogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQl3aGlsZSAocHJ0ZC0+ZG1hX2xvYWRlZCA8IHBydGQtPmRtYV9saW1pdCkgeworCWlmIChzM2NfZG1hX2hhc19jaXJjdWxhcigpKSB7CisJCWxpbWl0ID0gKHBydGQtPmRtYV9lbmQgLSBwcnRkLT5kbWFfc3RhcnQpIC8gcHJ0ZC0+ZG1hX3BlcmlvZDsKKwl9IGVsc2UKKwkJbGltaXQgPSBwcnRkLT5kbWFfbGltaXQ7CisKKwlwcl9kZWJ1ZygiJXM6IGxvYWRlZCAlZCwgbGltaXQgJWRcbiIsIF9fZnVuY19fLCBwcnRkLT5kbWFfbG9hZGVkLCBsaW1pdCk7CisKKwl3aGlsZSAocHJ0ZC0+ZG1hX2xvYWRlZCA8IGxpbWl0KSB7CiAJCXVuc2lnbmVkIGxvbmcgbGVuID0gcHJ0ZC0+ZG1hX3BlcmlvZDsKIAogCQlwcl9kZWJ1ZygiZG1hX2xvYWRlZDogJWRcbiIsIHBydGQtPmRtYV9sb2FkZWQpOwpAQCAtMTIzLDcgKzEzMSw3IEBACiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKIAogCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7Ci0JaWYgKHBydGQtPnN0YXRlICYgU1RfUlVOTklORykgeworCWlmIChwcnRkLT5zdGF0ZSAmIFNUX1JVTk5JTkcgJiYgIXMzY19kbWFfaGFzX2NpcmN1bGFyKCkpIHsKIAkJcHJ0ZC0+ZG1hX2xvYWRlZC0tOwogCQlzM2MyNHh4X3BjbV9lbnF1ZXVlKHN1YnN0cmVhbSk7CiAJfQpAQCAtMTY0LDYgKzE3MiwxMSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGRtYSBjaGFubmVsXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKworCQkvKiB1c2UgdGhlIGNpcmN1bGFyIGJ1ZmZlcmluZyBpZiB3ZSBoYXZlIGl0IGF2YWlsYWJsZS4gKi8KKwkJaWYgKHMzY19kbWFfaGFzX2NpcmN1bGFyKCkpCisJCQlzM2MyNDEwX2RtYV9zZXRmbGFncyhwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCisJCQkJCSAgICAgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKTsKIAl9CiAKIAlzM2MyNDEwX2RtYV9zZXRfYnVmZmRvbmVfZm4ocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKaW5kZXggM2MwNmM0MC4uMTA1YTc3ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCkBAIC0yMjAsNiArMjIwLDggQEAKIAkJZ290byBlcnI7CiAJfQogCisJY2xrX2VuYWJsZShpMnMtPmlpc19jY2xrKTsKKwogCXJldCA9IHMzY19pMnN2Ml9wcm9iZShwZGV2LCBkYWksIGkycywgMCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfY2xrOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCA3ZmYwNGFkLi4wYTFiMmY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtODM0LDYgKzgzNCw5IEBACiAjZGVmaW5lIHNvY19yZXN1bWUJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51bGxfZGFpX29wcyA9IHsKK307CisKIHN0YXRpYyB2b2lkIHNuZF9zb2NfaW5zdGFudGlhdGVfY2FyZChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBjb250YWluZXJfb2YoY2FyZC0+ZGV2LApAQCAtODc3LDYgKzg4MCwxMSBAQAogCQkJYWM5NyA9IDE7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CisJCWlmICghY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpLT5vcHMpCisJCQljYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWktPm9wcyA9ICZudWxsX2RhaV9vcHM7CisJfQorCiAJLyogSWYgd2UgaGF2ZSBBQzk3IGluIHRoZSBzeXN0ZW0gdGhlbiBkb24ndCB3YWl0IGZvciB0aGUKIAkgKiBjb2RlYy4gIFRoaXMgd2lsbCBuZWVkIHJldmlzaXRpbmcgaWYgd2UgaGF2ZSB0byBoYW5kbGUKIAkgKiBzeXN0ZW1zIHdpdGggbWl4ZWQgQUM5NyBhbmQgbm9uLUFDOTcgcGFydHMuICBPbmx5IGNoZWNrIGZvcgpAQCAtMjMyOSw5ICsyMzM3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbnVsbF9kYWlfb3BzID0gewotfTsKLQogLyoqCiAgKiBzbmRfc29jX3JlZ2lzdGVyX2RhaSAtIFJlZ2lzdGVyIGEgREFJIHdpdGggdGhlIEFTb0MgY29yZQogICoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggZjc5NzExYi4uZDg5ZjZkYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTUyNCw3ICs1MjQsNyBAQAogCiAJCS8qIGNvbm5lY3RlZCBqYWNrIG9yIHNwayA/ICovCiAJCWlmICh3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9ocCB8fCB3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9zcGsgfHwKLQkJCXdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUpCisJCSAgICAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbGluZSAmJiAhbGlzdF9lbXB0eSgmd2lkZ2V0LT5zb3VyY2VzKSkpCiAJCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTU3Myw3ICs1NzMsOCBAQAogCQkJcmV0dXJuIDE7CiAKIAkJLyogY29ubmVjdGVkIGphY2sgPyAqLwotCQlpZiAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbWljIHx8IHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUpCisJCWlmICh3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9taWMgfHwKKwkJICAgICh3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9saW5lICYmICFsaXN0X2VtcHR5KCZ3aWRnZXQtPnNpbmtzKSkpCiAJCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTIwNzEsOSArMjA3Miw5IEBACiAJCQl9CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCiAJZGFwbV9wb3dlcl93aWRnZXRzKGNvZGVjLCBldmVudCk7CisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCWR1bXBfZGFwbShjb2RlYywgX19mdW5jX18pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwppbmRleCAxMjFhZjA2Li44NmIyYzNiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYworKysgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwpAQCAtNjIsMTAgKzYyLDE0IEBACiBhY3RpdmF0ZV9zdWJzdHJlYW0oc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwKIAkgICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViKQogeworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CisKIAlpZiAoc3ViLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJZGV2LT5zdWJfcGxheWJhY2tbc3ViLT5udW1iZXJdID0gc3ViOwogCWVsc2UKIAkJZGV2LT5zdWJfY2FwdHVyZVtzdWItPm51bWJlcl0gPSBzdWI7CisKKwlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNjksMTYgKzI3MywyMiBAQAogewogCWludCBpbmRleCA9IHN1Yi0+bnVtYmVyOwogCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1Yik7CisJc25kX3BjbV91ZnJhbWVzX3QgcHRyOworCisJc3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsKIAogCWlmIChkZXYtPmlucHV0X3BhbmljIHx8IGRldi0+b3V0cHV0X3BhbmljKQotCQlyZXR1cm4gU05EUlZfUENNX1BPU19YUlVOOworCQlwdHIgPSBTTkRSVl9QQ01fUE9TX1hSVU47CiAKIAlpZiAoc3ViLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWItPnJ1bnRpbWUsCisJCXB0ciA9IGJ5dGVzX3RvX2ZyYW1lcyhzdWItPnJ1bnRpbWUsCiAJCQkJCWRldi0+YXVkaW9fb3V0X2J1Zl9wb3NbaW5kZXhdKTsKIAllbHNlCi0JCXJldHVybiBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAorCQlwdHIgPSBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAogCQkJCQlkZXYtPmF1ZGlvX2luX2J1Zl9wb3NbaW5kZXhdKTsKKworCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKwlyZXR1cm4gcHRyOwogfQogCiAvKiBvcGVyYXRvcnMgZm9yIGJvdGggcGxheWJhY2sgYW5kIGNhcHR1cmUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYyBiL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYwppbmRleCA4M2U2YzEzLi5hM2YwMmRkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2RldmljZS5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiaW5wdXQuaCIKIAogTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4xOSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjIwIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wzfSwiCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uaCBiL3NvdW5kL3VzYi91c2JhdWRpby5oCmluZGV4IDhlN2Y3ODkuLmU5YTNhOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5oCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5oCkBAIC0yMTAsNyArMjEwLDcgQEAKIC8qCiAgKi8KIAotI2RlZmluZSBjb21iaW5lX3dvcmQocykgICAgKCgqcykgfCAoKHVuc2lnbmVkIGludCkocylbMV0gPDwgOCkpCisjZGVmaW5lIGNvbWJpbmVfd29yZChzKSAgICAoKCoocykpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzFdIDw8IDgpKQogI2RlZmluZSBjb21iaW5lX3RyaXBsZShzKSAgKGNvbWJpbmVfd29yZChzKSB8ICgodW5zaWduZWQgaW50KShzKVsyXSA8PCAxNikpCiAjZGVmaW5lIGNvbWJpbmVfcXVhZChzKSAgICAoY29tYmluZV90cmlwbGUocykgfCAoKHVuc2lnbmVkIGludCkocylbM10gPDwgMjQpKQogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IGFiNWEzYWMuLmM5OTgyMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlci5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCkBAIC04OTgsNiArODk4LDExIEBACiAgKiBidWlsZCBhIGZlYXR1cmUgY29udHJvbAogICovCiAKK3N0YXRpYyBzaXplX3QgYXBwZW5kX2N0bF9uYW1lKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc3RybGNhdChrY3RsLT5pZC5uYW1lLCBzdHIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7Cit9CisKIHN0YXRpYyB2b2lkIGJ1aWxkX2ZlYXR1cmVfY3RsKHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRlc2MsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY3RsX21hc2ssIGludCBjb250cm9sLAogCQkJICAgICAgc3RydWN0IHVzYl9hdWRpb190ZXJtICppdGVybSwgaW50IHVuaXRpZCkKQEAgLTk3OCwxMyArOTgzLDEzIEBACiAJCSAqLwogCQlpZiAoISBtYXBwZWRfbmFtZSAmJiAhIChzdGF0ZS0+b3Rlcm0udHlwZSA+PiAxNikpIHsKIAkJCWlmICgoc3RhdGUtPm90ZXJtLnR5cGUgJiAweGZmMDApID09IDB4MDEwMCkgewotCQkJCWxlbiA9IHN0cmxjYXQoa2N0bC0+aWQubmFtZSwgIiBDYXB0dXJlIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJCQlsZW4gPSBhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBDYXB0dXJlIik7CiAJCQl9IGVsc2UgewotCQkJCWxlbiA9IHN0cmxjYXQoa2N0bC0+aWQubmFtZSArIGxlbiwgIiBQbGF5YmFjayIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCQkJbGVuID0gYXBwZW5kX2N0bF9uYW1lKGtjdGwsICIgUGxheWJhY2siKTsKIAkJCX0KIAkJfQotCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUgKyBsZW4sIGNvbnRyb2wgPT0gVVNCX0ZFQVRVUkVfTVVURSA/ICIgU3dpdGNoIiA6ICIgVm9sdW1lIiwKLQkJCXNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCBjb250cm9sID09IFVTQl9GRUFUVVJFX01VVEUgPworCQkJCSIgU3dpdGNoIiA6ICIgVm9sdW1lIik7CiAJCWlmIChjb250cm9sID09IFVTQl9GRUFUVVJFX1ZPTFVNRSkgewogCQkJa2N0bC0+dGx2LmMgPSBtaXhlcl92b2xfdGx2OwogCQkJa2N0bC0+dmRbMF0uYWNjZXNzIHw9IApAQCAtMTA2Niw2ICsxMDcxLDE1IEBACiAJY2hhbm5lbHMgPSAoZnRyWzBdIC0gNykgLyBjc2l6ZSAtIDE7CiAKIAltYXN0ZXJfYml0cyA9IHNuZF91c2JfY29tYmluZV9ieXRlcyhmdHIgKyA2LCBjc2l6ZSk7CisJLyogbWFzdGVyIGNvbmZpZ3VyYXRpb24gcXVpcmtzICovCisJc3dpdGNoIChzdGF0ZS0+Y2hpcC0+dXNiX2lkKSB7CisJY2FzZSBVU0JfSUQoMHgwOGJiLCAweDI3MDIpOgorCQlzbmRfcHJpbnRrKEtFUk5fSU5GTworCQkJICAgInVzYm1peGVyOiBtYXN0ZXIgdm9sdW1lIHF1aXJrIGZvciBQQ00yNzAyIGNoaXBcbiIpOworCQkvKiBkaXNhYmxlIG5vbi1mdW5jdGlvbmFsIHZvbHVtZSBjb250cm9sICovCisJCW1hc3Rlcl9iaXRzICY9IH4oMSA8PCAoVVNCX0ZFQVRVUkVfVk9MVU1FIC0gMSkpOworCQlicmVhazsKKwl9CiAJaWYgKGNoYW5uZWxzID4gMCkKIAkJZmlyc3RfY2hfYml0cyA9IHNuZF91c2JfY29tYmluZV9ieXRlcyhmdHIgKyA2ICsgY3NpemUsIGNzaXplKTsKIAllbHNlCkBAIC0xMTQzLDcgKzExNTcsNyBAQAogCQlsZW4gPSBnZXRfdGVybV9uYW1lKHN0YXRlLCBpdGVybSwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpLCAwKTsKIAlpZiAoISBsZW4pCiAJCWxlbiA9IHNwcmludGYoa2N0bC0+aWQubmFtZSwgIk1peGVyIFNvdXJjZSAlZCIsIGluX2NoICsgMSk7Ci0Jc3RybGNhdChrY3RsLT5pZC5uYW1lICsgbGVuLCAiIFZvbHVtZSIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJYXBwZW5kX2N0bF9uYW1lKGtjdGwsICIgVm9sdW1lIik7CiAKIAlzbmRfcHJpbnRkZChLRVJOX0lORk8gIlslZF0gTVUgWyVzXSBjaCA9ICVkLCB2YWwgPSAlZC8lZFxuIiwKIAkJICAgIGN2YWwtPmlkLCBrY3RsLT5pZC5uYW1lLCBjdmFsLT5jaGFubmVscywgY3ZhbC0+bWluLCBjdmFsLT5tYXgpOwpAQCAtMTQwMCw4ICsxNDE0LDggQEAKIAkJCWlmICghIGxlbikKIAkJCQlzdHJsY3B5KGtjdGwtPmlkLm5hbWUsIG5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CiAJCX0KLQkJc3RybGNhdChrY3RsLT5pZC5uYW1lLCAiICIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7Ci0JCXN0cmxjYXQoa2N0bC0+aWQubmFtZSwgdmFsaW5mby0+c3VmZml4LCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiAiKTsKKwkJYXBwZW5kX2N0bF9uYW1lKGtjdGwsIHZhbGluZm8tPnN1ZmZpeCk7CiAKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJbJWRdIFBVIFslc10gY2ggPSAlZCwgdmFsID0gJWQvJWRcbiIsCiAJCQkgICAgY3ZhbC0+aWQsIGtjdGwtPmlkLm5hbWUsIGN2YWwtPmNoYW5uZWxzLCBjdmFsLT5taW4sIGN2YWwtPm1heCk7CkBAIC0xNjEwLDkgKzE2MjQsOSBAQAogCQkJc3RybGNweShrY3RsLT5pZC5uYW1lLCAiVVNCIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAogCQlpZiAoKHN0YXRlLT5vdGVybS50eXBlICYgMHhmZjAwKSA9PSAweDAxMDApCi0JCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgQ2FwdHVyZSBTb3VyY2UiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQkJYXBwZW5kX2N0bF9uYW1lKGtjdGwsICIgQ2FwdHVyZSBTb3VyY2UiKTsKIAkJZWxzZQotCQkJc3RybGNhdChrY3RsLT5pZC5uYW1lLCAiIFBsYXliYWNrIFNvdXJjZSIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBQbGF5YmFjayBTb3VyY2UiKTsKIAl9CiAKIAlzbmRfcHJpbnRkZChLRVJOX0lORk8gIlslZF0gU1UgWyVzXSBpdGVtcyA9ICVkXG4iLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCmluZGV4IGZkNDQ5NDYuLjk5ZjMzNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXNuZF9wcmludGRkKEtFUk5fREVCVUcgIiVpXG4iLCBhdG9taWNfcmVhZCgmdXMxMjJsLT5tbWFwX2NvdW50KSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXNiX3N0cmVhbV9od2RlcF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVzYl9zdHJlYW1faHdkZXBfdm1fb3BzID0gewogCS5vcGVuID0gdXNiX3N0cmVhbV9od2RlcF92bV9vcGVuLAogCS5mYXVsdCA9IHVzYl9zdHJlYW1faHdkZXBfdm1fZmF1bHQsCiAJLmNsb3NlID0gdXNiX3N0cmVhbV9od2RlcF92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCmluZGV4IGYzZDhmNzEuLjUyZTA0YjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYwpAQCAtNTMsNyArNTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVzNDI4Y3Rsc192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVzNDI4Y3Rsc192bV9vcHMgPSB7CiAJLmZhdWx0ID0gc25kX3VzNDI4Y3Rsc192bV9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMgYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jCmluZGV4IDExNzk0NmYuLjRiMjMwNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYwpAQCAtNjk3LDcgKzY5Nyw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc25kX3VzWDJZX2h3ZGVwX3BjbV92bV9vcHMgPSB7CiAJLm9wZW4gPSBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX29wZW4sCiAJLmNsb3NlID0gc25kX3VzWDJZX2h3ZGVwX3BjbV92bV9jbG9zZSwKIAkuZmF1bHQgPSBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX2ZhdWx0LApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCmluZGV4IGQ2OWE3NTkuLjA4NTRmMTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQorKysgYi90b29scy9wZXJmLy5naXRpZ25vcmUKQEAgLTEwLDYgKzEwLDcgQEAKIHBlcmYtdG9wCiBwZXJmKi4xCiBwZXJmKi54bWwKK3BlcmYqLmh0bWwKIGNvbW1vbi1jbWRzLmgKIHRhZ3MKIFRBR1MKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CmluZGV4IDFjMmVkMzAuLmE3OTEwMDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dApAQCAtMzEsNiArMzEsOSBAQAogLXc6OgogLS13aWR0aD06OgogICAgICAgICBTZWxlY3QgdGhlIHdpZHRoIG9mIHRoZSBTVkcgZmlsZSAoZGVmYXVsdDogMTAwMCkKKy1wOjoKKy0tcG93ZXItb25seTo6CisgICAgICAgIE9ubHkgb3V0cHV0IHRoZSBDUFUgcG93ZXIgc2VjdGlvbiBvZiB0aGUgZGlhZ3JhbQogCiAKIFNFRSBBTFNPCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCBiNWYxOTUzLi43ZTE5MGQ1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTE1NywxMSArMTU3LDE4IEBACiB1bmFtZV9QIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1wIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKIHVuYW1lX1YgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXYgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogCi0jIElmIHdlJ3JlIG9uIGEgNjQtYml0IGtlcm5lbCwgdXNlIC1tNjQKLWlmbmRlZiBOT182NEJJVAotCWlmbmVxICgkKHBhdHN1YnN0ICU2NCwlLCQodW5hbWVfTSkpLCQodW5hbWVfTSkpCi0JICBNNjQgOj0gLW02NAotCWVuZGlmCisjCisjIEFkZCAtbTMyIGZvciBjcm9zcy1idWlsZHM6CisjCitpZmRlZiBOT182NEJJVAorICBNQklUUyA6PSAtbTMyCitlbHNlCisgICMKKyAgIyBJZiB3ZSdyZSBvbiBhIDY0LWJpdCBrZXJuZWwsIHVzZSAtbTY0OgorICAjCisgIGlmbmVxICgkKHBhdHN1YnN0ICU2NCwlLCQodW5hbWVfTSkpLCQodW5hbWVfTSkpCisgICAgTUJJVFMgOj0gLW02NAorICBlbmRpZgogZW5kaWYKIAogIyBDRkxBR1MgYW5kIExERkxBR1MgYXJlIGZvciB0aGUgdXNlcnMgdG8gb3ZlcnJpZGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgpAQCAtMTcwLDggKzE3Nyw3IEBACiAjIEluY2x1ZGUgc2FuZXIgd2FybmluZ3MgaGVyZSwgd2hpY2ggY2FuIGNhdGNoIGJ1Z3M6CiAjCiAKLUVYVFJBX1dBUk5JTkdTIDo9IC1XY2FzdC1hbGlnbgotRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdmb3JtYXQKK0VYVFJBX1dBUk5JTkdTIDo9IC1XZm9ybWF0CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdC1zZWN1cml0eQogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdmb3JtYXQteTJrCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3NoYWRvdwpAQCAtMTk0LDcgKzIwMCw3IEBACiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N0cmljdC1wcm90b3R5cGVzCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudAogCi1DRkxBR1MgPSAkKE02NCkgLWdnZGIzIC1XYWxsIC1XZXh0cmEgLXN0ZD1nbnU5OSAtV2Vycm9yIC1PNiAtZnN0YWNrLXByb3RlY3Rvci1hbGwgLURfRk9SVElGWV9TT1VSQ0U9MiAkKEVYVFJBX1dBUk5JTkdTKQorQ0ZMQUdTID0gJChNQklUUykgLWdnZGIzIC1XYWxsIC1XZXh0cmEgLXN0ZD1nbnU5OSAtV2Vycm9yIC1PNiAtZnN0YWNrLXByb3RlY3Rvci1hbGwgLURfRk9SVElGWV9TT1VSQ0U9MiAkKEVYVFJBX1dBUk5JTkdTKQogTERGTEFHUyA9IC1scHRocmVhZCAtbHJ0IC1sZWxmIC1sbQogQUxMX0NGTEFHUyA9ICQoQ0ZMQUdTKQogQUxMX0xERkxBR1MgPSAkKExERkxBR1MpCkBAIC00MTUsOCArNDIxLDEyIEBACiAJUFRIUkVBRF9MSUJTID0KIGVuZGlmCiAKLWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJlbGYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IEVsZiAqIGVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFEX01NQVAsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKLQltc2cgOj0gJChlcnJvciBObyBsaWJlbGYuaC9saWJlbGYgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGxpYmVsZi1kZXYvZWxmdXRpbHMtbGliZWxmLWRldmVsKTsKK2lmZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmVsZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRWxmICogZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQUQsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKwlpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRF9NTUFQLCAwKTsgcmV0dXJuIChsb25nKWVsZjsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IiksIHkpCisJCUJBU0lDX0NGTEFHUyArPSAtRExJQkVMRl9OT19NTUFQCisJZW5kaWYKK2Vsc2UKKwltc2cgOj0gJChlcnJvciBObyBsaWJlbGYuaC9saWJlbGYgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGxpYmVsZi1kZXYvZWxmdXRpbHMtbGliZWxmLWRldmVsIGFuZCBnbGliYy1kZXZbZWxdKTsKIGVuZGlmCiAKIGlmZGVmIE5PX0RFTUFOR0xFCkBAIC03MjgsNyArNzM4LDcgQEAKIGNvbW1vbi1jbWRzLmg6IHV0aWwvZ2VuZXJhdGUtY21kbGlzdC5zaCBjb21tYW5kLWxpc3QudHh0CiAKIGNvbW1vbi1jbWRzLmg6ICQod2lsZGNhcmQgRG9jdW1lbnRhdGlvbi9wZXJmLSoudHh0KQotCSQoUVVJRVRfR0VOKXV0aWwvZ2VuZXJhdGUtY21kbGlzdC5zaCA+ICRAKyAmJiBtdiAkQCsgJEAKKwkkKFFVSUVUX0dFTikuIHV0aWwvZ2VuZXJhdGUtY21kbGlzdC5zaCA+ICRAKyAmJiBtdiAkQCsgJEAKIAogJChwYXRzdWJzdCAlLnNoLCUsJChTQ1JJUFRfU0gpKSA6ICUgOiAlLnNoCiAJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCBhNWEwNTBhZjguLmE0YmU0NTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTQxLDYgKzQxLDcgQEAKIHN0YXRpYyBpbnQJCQlzeXN0ZW1fd2lkZQkJCT0gMDsKIHN0YXRpYyBpbnQJCQlwcm9maWxlX2NwdQkJCT0gLTE7CiBzdGF0aWMgcGlkX3QJCQl0YXJnZXRfcGlkCQkJPSAtMTsKK3N0YXRpYyBwaWRfdAkJCWNoaWxkX3BpZAkJCT0gLTE7CiBzdGF0aWMgaW50CQkJaW5oZXJpdAkJCQk9IDE7CiBzdGF0aWMgaW50CQkJZm9yY2UJCQkJPSAwOwogc3RhdGljIGludAkJCWFwcGVuZF9maWxlCQkJPSAwOwpAQCAtMTg0LDYgKzE4NSw5IEBACiAKIHN0YXRpYyB2b2lkIHNpZ19hdGV4aXQodm9pZCkKIHsKKwlpZiAoY2hpbGRfcGlkICE9IC0xKQorCQlraWxsKGNoaWxkX3BpZCwgU0lHVEVSTSk7CisKIAlpZiAoc2lnbnIgPT0gLTEpCiAJCXJldHVybjsKIApAQCAtNDIyLDcgKzQyNiw3IEBACiAJaWYgKGZkW25yX2NwdV1bY291bnRlcl0gPCAwKSB7CiAJCWludCBlcnIgPSBlcnJubzsKIAotCQlpZiAoZXJyID09IEVQRVJNKQorCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpCiAJCQlkaWUoIlBlcm1pc3Npb24gZXJyb3IgLSBhcmUgeW91IHJvb3Q/XG4iKTsKIAkJZWxzZSBpZiAoZXJyID09ICBFTk9ERVYgJiYgcHJvZmlsZV9jcHUgIT0gLTEpCiAJCQlkaWUoIk5vIHN1Y2ggZGV2aWNlIC0gZGlkIHlvdSBzcGVjaWZ5IGFuIG91dC1vZi1yYW5nZSBwcm9maWxlIENQVT9cbiIpOwpAQCAtNjEwLDYgKzYxNCw4IEBACiAJCQkJZXhpdCgtMSk7CiAJCQl9CiAJCX0KKworCQljaGlsZF9waWQgPSBwaWQ7CiAJfQogCiAJaWYgKHJlYWx0aW1lX3ByaW8pIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKaW5kZXggZWE5YzE1Yy4uY2UyZDViZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKQEAgLTEyODcsNyArMTI4Nyw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoc29ydF9saXN0KTsKIAotc3RhdGljIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNoYXIgKnRvaywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3N0YXRpYyBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjb25zdCBjaGFyICp0b2ssIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJaW50IGk7CiAKQEAgLTE5MTcsNyArMTkxNyw3IEBACiAKIAlmcmVlKHN0cik7CiAKLQlzb3J0X2RpbWVuc2lvbl9fYWRkKChjaGFyICopInBpZCIsICZjbXBfcGlkKTsKKwlzb3J0X2RpbWVuc2lvbl9fYWRkKCJwaWQiLCAmY21wX3BpZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpyZWNvcmRfYXJnc1tdID0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMTZhZjJkOC4uM2RiMzFlNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC02OSw3ICs2OSw4IEBACiBzdGF0aWMgaW50CQkJcnVuX2NvdW50CQkJPSAgMTsKIHN0YXRpYyBpbnQJCQlpbmhlcml0CQkJCT0gIDE7CiBzdGF0aWMgaW50CQkJc2NhbGUJCQkJPSAgMTsKLXN0YXRpYyBpbnQJCQl0YXJnZXRfcGlkCQkJPSAtMTsKK3N0YXRpYyBwaWRfdAkJCXRhcmdldF9waWQJCQk9IC0xOworc3RhdGljIHBpZF90CQkJY2hpbGRfcGlkCQkJPSAtMTsKIHN0YXRpYyBpbnQJCQludWxsX3J1bgkJCT0gIDA7CiAKIHN0YXRpYyBpbnQJCQlmZFtNQVhfTlJfQ1BVU11bTUFYX0NPVU5URVJTXTsKQEAgLTI4NSw2ICsyODYsOCBAQAogCQlleGl0KC0xKTsKIAl9CiAKKwljaGlsZF9waWQgPSBwaWQ7CisKIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSByZWFkeSB0byBleGVjLgogCSAqLwpAQCAtMzM4LDE0ICszNDEsMjQgQEAKIAogc3RhdGljIHZvaWQgYWJzX3ByaW50b3V0KGludCBjb3VudGVyLCBkb3VibGUgYXZnKQogeworCWRvdWJsZSB0b3RhbCwgcmF0aW8gPSAwLjA7CisKIAlmcHJpbnRmKHN0ZGVyciwgIiAlMTQuMGYgICUtMjRzIiwgYXZnLCBldmVudF9uYW1lKGNvdW50ZXIpKTsKIAogCWlmIChNQVRDSF9FVkVOVChIQVJEV0FSRSwgSFdfSU5TVFJVQ1RJT05TLCBjb3VudGVyKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsCi0JCQkJYXZnIC8gYXZnX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0cykpOworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHMpOworCisJCWlmICh0b3RhbCkKKwkJCXJhdGlvID0gYXZnIC8gdG90YWw7CisKKwkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgSVBDICAiLCByYXRpbyk7CiAJfSBlbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgTS9zZWMiLAotCQkJCTEwMDAuMCAqIGF2ZyAvIGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cykpOworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cyk7CisKKwkJaWYgKHRvdGFsKQorCQkJcmF0aW8gPSAxMDAwLjAgKiBhdmcgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBNL3NlYyIsIHJhdGlvKTsKIAl9CiB9CiAKQEAgLTQyMyw2ICs0MzYsOSBAQAogCiBzdGF0aWMgdm9pZCBzaWdfYXRleGl0KHZvaWQpCiB7CisJaWYgKGNoaWxkX3BpZCAhPSAtMSkKKwkJa2lsbChjaGlsZF9waWQsIFNJR1RFUk0pOworCiAJaWYgKHNpZ25yID09IC0xKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCA0NDA1NjgxLi5lOGE1MTBkOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwpAQCAtNDYsNiArNDYsOCBAQAogCiBzdGF0aWMgdTY0CQlmaXJzdF90aW1lLCBsYXN0X3RpbWU7CiAKK3N0YXRpYyBpbnQJCXBvd2VyX29ubHk7CisKIAogc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcgkqaGVhZGVyOwogCkBAIC01NDcsNyArNTQ5LDcgQEAKIAl1NjQgY3B1OwogCXN0cnVjdCBwb3dlcl9ldmVudCAqcHdyOwogCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBudW1jcHVzOyBjcHUrKykgeworCWZvciAoY3B1ID0gMDsgY3B1IDw9IG51bWNwdXM7IGNwdSsrKSB7CiAJCXB3ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CiAJCWlmICghcHdyKQogCQkJcmV0dXJuOwpAQCAtNzYzLDE5ICs3NjUsNDAgQEAKIAkJCQkJaWYgKGMtPlkgJiYgYy0+c3RhcnRfdGltZSA8PSB3ZS0+dGltZSAmJiBjLT5lbmRfdGltZSA+PSB3ZS0+dGltZSkgewogCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIpIHsKIAkJCQkJCQlmcm9tID0gYy0+WTsKLQkJCQkJCQl0YXNrX2Zyb20gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfZnJvbSA9IHN0cmR1cChjLT5jb21tKTsKIAkJCQkJCX0KIAkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlKSB7CiAJCQkJCQkJdG8gPSBjLT5ZOwotCQkJCQkJCXRhc2tfdG8gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfdG8gPSBzdHJkdXAoYy0+Y29tbSk7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJYyA9IGMtPm5leHQ7CiAJCQkJfQorCQkJCWMgPSBwLT5hbGw7CisJCQkJd2hpbGUgKGMpIHsKKwkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIgJiYgIWZyb20pIHsKKwkJCQkJCWZyb20gPSBjLT5ZOworCQkJCQkJdGFza19mcm9tID0gc3RyZHVwKGMtPmNvbW0pOworCQkJCQl9CisJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlICYmICF0bykgeworCQkJCQkJdG8gPSBjLT5ZOworCQkJCQkJdGFza190byA9IHN0cmR1cChjLT5jb21tKTsKKwkJCQkJfQorCQkJCQljID0gYy0+bmV4dDsKKwkJCQl9CiAJCQl9CiAJCQlwID0gcC0+bmV4dDsKIAkJfQogCisJCWlmICghdGFza19mcm9tKSB7CisJCQl0YXNrX2Zyb20gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX2Zyb20sICJbJWldIiwgd2UtPndha2VyKTsKKwkJfQorCQlpZiAoIXRhc2tfdG8pIHsKKwkJCXRhc2tfdG8gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX3RvLCAiWyVpXSIsIHdlLT53YWtlZSk7CisJCX0KKwogCQlpZiAod2UtPndha2VyID09IC0xKQogCQkJc3ZnX2ludGVycnVwdCh3ZS0+dGltZSwgdG8pOwogCQllbHNlIGlmIChmcm9tICYmIHRvICYmIGFicyhmcm9tIC0gdG8pID09IDEpCkBAIC03ODMsNiArODA2LDkgQEAKIAkJZWxzZQogCQkJc3ZnX3BhcnRpYWxfd2FrZWxpbmUod2UtPnRpbWUsIGZyb20sIHRhc2tfZnJvbSwgdG8sIHRhc2tfdG8pOwogCQl3ZSA9IHdlLT5uZXh0OworCisJCWZyZWUodGFza19mcm9tKTsKKwkJZnJlZSh0YXNrX3RvKTsKIAl9CiB9CiAKQEAgLTg3MSw3ICs4OTcsNyBAQAogCQkvKiBubyBleGl0IG1hcmtlciwgdGFzayBrZXB0IHJ1bm5pbmcgdG8gdGhlIGVuZCAqLwogCQlpZiAocC0+ZW5kX3RpbWUgPT0gMCkKIAkJCXAtPmVuZF90aW1lID0gbGFzdF90aW1lOwotCQlpZiAocC0+dG90YWxfdGltZSA+PSB0aHJlc2hvbGQpCisJCWlmIChwLT50b3RhbF90aW1lID49IHRocmVzaG9sZCAmJiAhcG93ZXJfb25seSkKIAkJCXAtPmRpc3BsYXkgPSAxOwogCiAJCWMgPSBwLT5hbGw7CkBAIC04ODIsNyArOTA4LDcgQEAKIAkJCWlmIChjLT5zdGFydF90aW1lID09IDEpCiAJCQkJYy0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CiAKLQkJCWlmIChjLT50b3RhbF90aW1lID49IHRocmVzaG9sZCkgeworCQkJaWYgKGMtPnRvdGFsX3RpbWUgPj0gdGhyZXNob2xkICYmICFwb3dlcl9vbmx5KSB7CiAJCQkJYy0+ZGlzcGxheSA9IDE7CiAJCQkJY291bnQrKzsKIAkJCX0KQEAgLTExMzQsNiArMTE2MCw4IEBACiAJCSAgICAib3V0cHV0IGZpbGUgbmFtZSIpLAogCU9QVF9JTlRFR0VSKCd3JywgIndpZHRoIiwgJnN2Z19wYWdlX3dpZHRoLAogCQkgICAgInBhZ2Ugd2lkdGgiKSwKKwlPUFRfQk9PTEVBTigncCcsICJwb3dlci1vbmx5IiwgJnBvd2VyX29ubHksCisJCSAgICAib3V0cHV0IHBvd2VyIGRhdGEgb25seSIpLAogCU9QVF9FTkQoKQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDFjYTg4ODkuLmUyM2JjNzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTY4Niw2ICs2ODYsOCBAQAogCXN3aXRjaCAoYykgewogCQljYXNlICdkJzoKIAkJCXByb21wdF9pbnRlZ2VyKCZkZWxheV9zZWNzLCAiRW50ZXIgZGlzcGxheSBkZWxheSIpOworCQkJaWYgKGRlbGF5X3NlY3MgPCAxKQorCQkJCWRlbGF5X3NlY3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2UnOgogCQkJcHJvbXB0X2ludGVnZXIoJnByaW50X2VudHJpZXMsICJFbnRlciBkaXNwbGF5IGVudHJpZXMgKGxpbmVzKSIpOwpAQCAtNzgyLDYgKzc4NCw3IEBACiAJImV4aXRfaWRsZSIsCiAJIm13YWl0X2lkbGUiLAogCSJtd2FpdF9pZGxlX3dpdGhfaGludHMiLAorCSJwb2xsX2lkbGUiLAogCSJwcGM2NF9ydW5sYXRjaF9vZmYiLAogCSJwc2VyaWVzX2RlZGljYXRlZF9pZGxlX3NsZWVwIiwKIAlOVUxMCkBAIC0xMDI0LDcgKzEwMjcsNyBAQAogCWlmIChmZFtpXVtjb3VudGVyXSA8IDApIHsKIAkJaW50IGVyciA9IGVycm5vOwogCi0JCWlmIChlcnIgPT0gRVBFUk0pCisJCWlmIChlcnIgPT0gRVBFUk0gfHwgZXJyID09IEVBQ0NFUykKIAkJCWRpZSgiTm8gcGVybWlzc2lvbiAtIGFyZSB5b3Ugcm9vdD9cbiIpOwogCQkvKgogCQkgKiBJZiBpdCdzIGN5Y2xlcyB0aGVuIGZhbGwgYmFjayB0byBocnRpbWVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCmluZGV4IGU5ZDI1NmUuLjBjNWU0ZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCkBAIC0yMTksMTAgKzIxOSw2IEBACiBtb3JlOgogCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7CiAKLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCWlmICghc2l6ZSkKLQkJc2l6ZSA9IDg7Ci0KIAlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgewogCQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwogCQlpbnQgcmVzOwpAQCAtMjM3LDcgKzIzMyw2IEBACiAKIAlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwogCi0KIAlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKSA8IDApIHsKIAogCQkvKgpAQCAtMjkwLDcgKzI4NSw2IEBACiAJCQl1c2FnZV93aXRoX29wdGlvbnMoYW5ub3RhdGVfdXNhZ2UsIG9wdGlvbnMpOwogCX0KIAotCiAJc2V0dXBfcGFnZXIoKTsKIAogCXJldHVybiBfX2NtZF90cmFjZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0IGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CmluZGV4IGYxOTQ2ZDEuLmZkZDQyYTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAorKysgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKQEAgLTQ1NSwzICs0NTUsNiBAQAogCiBJZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2VzIGhhdmUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB5b3UgY2FuIG92ZXJyaWRlIHRoZQogd2VhayBzdHViIGh3X3BlcmZfZXZlbnRfaW5pdCgpIHRvIHJlZ2lzdGVyIGhhcmR3YXJlIGNvdW50ZXJzLgorCitBcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBkLWNhY2hlIGFsaWFzc2luZyBpc3N1ZXMsIHN1Y2ggYXMgU3BhcmMgYW5kIEFSTSwKK3Nob3VsZCBzZWxlY3QgUEVSRl9VU0VfVk1BTExPQyBpbiBvcmRlciB0byBhdm9pZCB0aGVzZSBmb3IgcGVyZiBtbWFwKCkuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvUEVSRi1WRVJTSU9OLUdFTiBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCmluZGV4IGM1NjFkMTUuLjU0NTUyYTAgMTAwNzU1Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIEdWRj1QRVJGLVZFUlNJT04tRklMRQotREVGX1ZFUj12MC4wLjEuUEVSRgorREVGX1ZFUj12MC4wLjIuUEVSRgogCiBMRj0nCiAnCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMgYi90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMKaW5kZXggM2Q1NjdmZS4uMGQ4Yzg1ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlICJtb2R1bGUuaCIKIAogI2luY2x1ZGUgPGxpYmVsZi5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgogI2luY2x1ZGUgPGdlbGYuaD4KICNpbmNsdWRlIDxlbGYuaD4KICNpbmNsdWRlIDxkaXJlbnQuaD4KQEAgLTQwOSwzNSArNDEwLDQwIEBACiBzdGF0aWMgaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlX3BhdGhzKHN0cnVjdCBtb2RfZHNvICpzZWxmKQogewogCXN0cnVjdCB1dHNuYW1lIHV0czsKLQlpbnQgY291bnQgPSAwLCBsZW47CisJaW50IGNvdW50ID0gMCwgbGVuLCBlcnIgPSAtMTsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlGSUxFICpmaWxlOwotCWNoYXIgKnBhdGg7CisJY2hhciAqZHBhdGgsICpkaXI7CiAJc2l6ZV90IG47CiAKIAlpZiAodW5hbWUoJnV0cykgPCAwKQotCQlnb3RvIG91dF9mYWlsdXJlOworCQlyZXR1cm4gZXJyOwogCiAJbGVuID0gc3RybGVuKCIvbGliL21vZHVsZXMvIik7CiAJbGVuICs9IHN0cmxlbih1dHMucmVsZWFzZSk7CiAJbGVuICs9IHN0cmxlbigiL21vZHVsZXMuZGVwIik7CiAKLQlwYXRoID0gY2FsbG9jKDEsIGxlbik7Ci0JaWYgKHBhdGggPT0gTlVMTCkKLQkJZ290byBvdXRfZmFpbHVyZTsKKwlkcGF0aCA9IGNhbGxvYygxLCBsZW4gKyAxKTsKKwlpZiAoZHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIGVycjsKIAotCXN0cmNhdChwYXRoLCAiL2xpYi9tb2R1bGVzLyIpOwotCXN0cmNhdChwYXRoLCB1dHMucmVsZWFzZSk7Ci0Jc3RyY2F0KHBhdGgsICIvbW9kdWxlcy5kZXAiKTsKKwlzdHJjYXQoZHBhdGgsICIvbGliL21vZHVsZXMvIik7CisJc3RyY2F0KGRwYXRoLCB1dHMucmVsZWFzZSk7CisJc3RyY2F0KGRwYXRoLCAiL21vZHVsZXMuZGVwIik7CiAKLQlmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKLQlmcmVlKHBhdGgpOworCWZpbGUgPSBmb3BlbihkcGF0aCwgInIiKTsKIAlpZiAoZmlsZSA9PSBOVUxMKQogCQlnb3RvIG91dF9mYWlsdXJlOwogCisJZGlyID0gZGlybmFtZShkcGF0aCk7CisJaWYgKCFkaXIpCisJCWdvdG8gb3V0X2ZhaWx1cmU7CisJc3RyY2F0KGRpciwgIi8iKTsKKwogCXdoaWxlICghZmVvZihmaWxlKSkgewotCQljaGFyICpuYW1lLCAqdG1wOwogCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJCWNoYXIgKm5hbWUsICpwYXRoLCAqdG1wOworCQlGSUxFICptb2RmaWxlOwogCQlpbnQgbGluZV9sZW47CiAKIAkJbGluZV9sZW4gPSBnZXRsaW5lKCZsaW5lLCAmbiwgZmlsZSk7CkBAIC00NDUsMTcgKzQ1MSw0MSBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKCFsaW5lKQotCQkJZ290byBvdXRfZmFpbHVyZTsKKwkJCWJyZWFrOwogCiAJCWxpbmVbLS1saW5lX2xlbl0gPSAnXDAnOyAvKiBcbiAqLwogCi0JCXBhdGggPSBzdHJ0b2sobGluZSwgIjoiKTsKKwkJcGF0aCA9IHN0cmNocihsaW5lLCAnOicpOwogCQlpZiAoIXBhdGgpCi0JCQlnb3RvIG91dF9mYWlsdXJlOworCQkJYnJlYWs7CisJCSpwYXRoID0gJ1wwJzsKKworCQlwYXRoID0gc3RyZHVwKGxpbmUpOworCQlpZiAoIXBhdGgpCisJCQlicmVhazsKKworCQlpZiAoIXN0cnN0cihwYXRoLCBkaXIpKSB7CisJCQlpZiAoc3RybmNtcChwYXRoLCAia2VybmVsLyIsIDcpKQorCQkJCWJyZWFrOworCisJCQlmcmVlKHBhdGgpOworCQkJcGF0aCA9IGNhbGxvYygxLCBzdHJsZW4oZGlyKSArIHN0cmxlbihsaW5lKSArIDEpOworCQkJaWYgKCFwYXRoKQorCQkJCWJyZWFrOworCQkJc3RyY2F0KHBhdGgsIGRpcik7CisJCQlzdHJjYXQocGF0aCwgbGluZSk7CisJCX0KKworCQltb2RmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKKwkJaWYgKG1vZGZpbGUgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlmY2xvc2UobW9kZmlsZSk7CiAKIAkJbmFtZSA9IHN0cmR1cChwYXRoKTsKLQkJbmFtZSA9IHN0cnRvayhuYW1lLCAiLyIpOworCQlpZiAoIW5hbWUpCisJCQlicmVhazsKIAorCQluYW1lID0gc3RydG9rKG5hbWUsICIvIik7CiAJCXRtcCA9IG5hbWU7CiAKIAkJd2hpbGUgKHRtcCkgewpAQCAtNDYzLDI2ICs0OTMsMjUgQEAKIAkJCWlmICh0bXApCiAJCQkJbmFtZSA9IHRtcDsKIAkJfQotCQluYW1lID0gc3Ryc2VwKCZuYW1lLCAiLiIpOwogCi0JCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBzb3VuZCBtb2R1bGVzICovCisJCW5hbWUgPSBzdHJzZXAoJm5hbWUsICIuIik7CisJCWlmICghbmFtZSkKKwkJCWJyZWFrOworCisJCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBhbGwgbW9kdWxlcyAqLwogCQlmb3IgKGxlbiA9IHN0cmxlbihuYW1lKTsgbGVuOyBsZW4tLSkgewogCQkJaWYgKCoobmFtZStsZW4pID09ICctJykKIAkJCQkqKG5hbWUrbGVuKSA9ICdfJzsKIAkJfQogCiAJCW1vZHVsZSA9IG1vZHVsZV9fbmV3KG5hbWUsIHBhdGgpOwotCQlpZiAoIW1vZHVsZSkgewotCQkJZnByaW50ZihzdGRlcnIsICJsb2FkX21vZHVsZV9wYXRoczogYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCQlnb3RvIG91dF9mYWlsdXJlOwotCQl9CisJCWlmICghbW9kdWxlKQorCQkJYnJlYWs7CiAJCW1vZF9kc29fX2luc2VydF9tb2R1bGUoc2VsZiwgbW9kdWxlKTsKIAogCQltb2R1bGUtPnNlY3Rpb25zID0gc2VjX2Rzb19fbmV3X2Rzbygic2VjdGlvbnMiKTsKLQkJaWYgKCFtb2R1bGUtPnNlY3Rpb25zKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImxvYWRfbW9kdWxlX3BhdGhzOiBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJCWdvdG8gb3V0X2ZhaWx1cmU7Ci0JCX0KKwkJaWYgKCFtb2R1bGUtPnNlY3Rpb25zKQorCQkJYnJlYWs7CiAKIAkJbW9kdWxlLT5hY3RpdmUgPSBtb2RfZHNvX19sb2FkX3NlY3Rpb25zKG1vZHVsZSk7CiAKQEAgLTQ5MCwxMyArNTE5LDIwIEBACiAJCQljb3VudCsrOwogCX0KIAotCWZyZWUobGluZSk7Ci0JZmNsb3NlKGZpbGUpOwotCi0JcmV0dXJuIGNvdW50OworCWlmIChmZW9mKGZpbGUpKQorCQllcnIgPSBjb3VudDsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAibG9hZF9tb2R1bGVfcGF0aHM6IG1vZHVsZXMuZGVwIHBhcnNpbmcgZmFpbHVyZSFcbiIpOwogCiBvdXRfZmFpbHVyZToKLQlyZXR1cm4gLTE7CisJaWYgKGRwYXRoKQorCQlmcmVlKGRwYXRoKTsKKwlpZiAoZmlsZSkKKwkJZmNsb3NlKGZpbGUpOworCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworCisJcmV0dXJuIGVycjsKIH0KIAogaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhzdHJ1Y3QgbW9kX2RzbyAqZHNvKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IDEzYWI0YjguLjhjZmI0OGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTE2NSwzMyArMTY1LDMxIEBACiAJRElSICpzeXNfZGlyLCAqZXZ0X2RpcjsKIAlzdHJ1Y3QgZGlyZW50ICpzeXNfbmV4dCwgKmV2dF9uZXh0LCBzeXNfZGlyZW50LCBldnRfZGlyZW50OwogCWNoYXIgaWRfYnVmWzRdOwotCWludCBzeXNfZGlyX2ZkLCBmZDsKKwlpbnQgZmQ7CiAJdTY0IGlkOwogCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CisJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKIAogCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCiAJCXJldHVybiBOVUxMOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKIAlpZiAoIXN5c19kaXIpCi0JCWdvdG8gY2xlYW51cDsKLQlzeXNfZGlyX2ZkID0gZGlyZmQoc3lzX2Rpcik7CisJCXJldHVybiBOVUxMOwogCiAJZm9yX2VhY2hfc3Vic3lzdGVtKHN5c19kaXIsIHN5c19kaXJlbnQsIHN5c19uZXh0KSB7Ci0JCWludCBkZmQgPSBvcGVuYXQoc3lzX2Rpcl9mZCwgc3lzX2RpcmVudC5kX25hbWUsCi0JCQkJIE9fUkRPTkxZfE9fRElSRUNUT1JZKSwgZXZ0X2Rpcl9mZDsKLQkJaWYgKGRmZCA9PSAtMSkKKworCQlzbnByaW50ZihkaXJfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzIiwgZGVidWdmc19wYXRoLAorCQkJIHN5c19kaXJlbnQuZF9uYW1lKTsKKwkJZXZ0X2RpciA9IG9wZW5kaXIoZGlyX3BhdGgpOworCQlpZiAoIWV2dF9kaXIpCiAJCQljb250aW51ZTsKLQkJZXZ0X2RpciA9IGZkb3BlbmRpcihkZmQpOwotCQlpZiAoIWV2dF9kaXIpIHsKLQkJCWNsb3NlKGRmZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlldnRfZGlyX2ZkID0gZGlyZmQoZXZ0X2Rpcik7CisKIAkJZm9yX2VhY2hfZXZlbnQoc3lzX2RpcmVudCwgZXZ0X2RpciwgZXZ0X2RpcmVudCwgZXZ0X25leHQpIHsKLQkJCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXMvaWQiLAorCisJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzL2lkIiwgZGlyX3BhdGgsCiAJCQkJIGV2dF9kaXJlbnQuZF9uYW1lKTsKLQkJCWZkID0gb3BlbmF0KGV2dF9kaXJfZmQsIGV2dF9wYXRoLCBPX1JET05MWSk7CisJCQlmZCA9IG9wZW4oZXZ0X3BhdGgsIE9fUkRPTkxZKTsKIAkJCWlmIChmZCA8IDApCiAJCQkJY29udGludWU7CiAJCQlpZiAocmVhZChmZCwgaWRfYnVmLCBzaXplb2YoaWRfYnVmKSkgPCAwKSB7CkBAIC0yMjUsNyArMjIzLDYgQEAKIAkJY2xvc2VkaXIoZXZ0X2Rpcik7CiAJfQogCi1jbGVhbnVwOgogCWNsb3NlZGlyKHN5c19kaXIpOwogCXJldHVybiBOVUxMOwogfQpAQCAtNjk0LDcgKzY5MSwxMCBAQAogCUZJTEUgKmZpbGU7CiAJaW50IGlkOwogCi0Jc3ByaW50ZihmaWxlbmFtZSwgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyVzL2lkIiwgb3JnbmFtZSk7CisJc3ByaW50ZihmaWxlbmFtZSwgIiVzLyIsIGRlYnVnZnNfcGF0aCk7CisJc3RybmNhdChmaWxlbmFtZSwgb3JnbmFtZSwgc3RybGVuKG9yZ25hbWUpKTsKKwlzdHJjYXQoZmlsZW5hbWUsICIvaWQiKTsKKwogCWMgPSBzdHJjaHIoZmlsZW5hbWUsICc6Jyk7CiAJaWYgKGMpCiAJCSpjID0gJy8nOwpAQCAtNzYxLDI4ICs3NjEsMjQgQEAKIHsKIAlESVIgKnN5c19kaXIsICpldnRfZGlyOwogCXN0cnVjdCBkaXJlbnQgKnN5c19uZXh0LCAqZXZ0X25leHQsIHN5c19kaXJlbnQsIGV2dF9kaXJlbnQ7Ci0JaW50IHN5c19kaXJfZmQ7CiAJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKKwljaGFyIGRpcl9wYXRoW01BWFBBVEhMRU5dOwogCiAJaWYgKHZhbGlkX2RlYnVnZnNfbW91bnQoZGVidWdmc19wYXRoKSkKIAkJcmV0dXJuOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKIAlpZiAoIXN5c19kaXIpCi0JCWdvdG8gY2xlYW51cDsKLQlzeXNfZGlyX2ZkID0gZGlyZmQoc3lzX2Rpcik7CisJCXJldHVybjsKIAogCWZvcl9lYWNoX3N1YnN5c3RlbShzeXNfZGlyLCBzeXNfZGlyZW50LCBzeXNfbmV4dCkgewotCQlpbnQgZGZkID0gb3BlbmF0KHN5c19kaXJfZmQsIHN5c19kaXJlbnQuZF9uYW1lLAotCQkJCSBPX1JET05MWXxPX0RJUkVDVE9SWSksIGV2dF9kaXJfZmQ7Ci0JCWlmIChkZmQgPT0gLTEpCisKKwkJc25wcmludGYoZGlyX3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcyIsIGRlYnVnZnNfcGF0aCwKKwkJCSBzeXNfZGlyZW50LmRfbmFtZSk7CisJCWV2dF9kaXIgPSBvcGVuZGlyKGRpcl9wYXRoKTsKKwkJaWYgKCFldnRfZGlyKQogCQkJY29udGludWU7Ci0JCWV2dF9kaXIgPSBmZG9wZW5kaXIoZGZkKTsKLQkJaWYgKCFldnRfZGlyKSB7Ci0JCQljbG9zZShkZmQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZXZ0X2Rpcl9mZCA9IGRpcmZkKGV2dF9kaXIpOworCiAJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7CiAJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzOiVzIiwKIAkJCQkgc3lzX2RpcmVudC5kX25hbWUsIGV2dF9kaXJlbnQuZF9uYW1lKTsKQEAgLTc5MSw4ICs3ODcsNiBAQAogCQl9CiAJCWNsb3NlZGlyKGV2dF9kaXIpOwogCX0KLQotY2xlYW51cDoKIAljbG9zZWRpcihzeXNfZGlyKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCmluZGV4IGE3NzhmZDAuLmIzNjM3ZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogaW50IHN2Z19wYWdlX3dpZHRoID0gMTAwMDsKIAotI2RlZmluZSBNSU5fVEVYVF9TSVpFIDAuMDAxCisjZGVmaW5lIE1JTl9URVhUX1NJWkUgMC4wMQogCiBzdGF0aWMgdTY0IHRvdGFsX2hlaWdodDsKIHN0YXRpYyBGSUxFICpzdmdmaWxlOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wcm9jZXNzMiB7IGZpbGw6cmdiKDE4MCwxODAsMTgwKTsgZmlsbC1vcGFjaXR5OjAuOTsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnNhbXBsZSAgIHsgZmlsbDpyZ2IoICAwLCAgMCwyNTUpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYmxvY2tlZCAgeyBmaWxsOnJnYigyNTUsICAwLCAgMCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7Ci0JZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC53YWl0aW5nICB7IGZpbGw6cmdiKDIxNCwyMTQsICAwKTsgZmlsbC1vcGFjaXR5OjAuMzsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LndhaXRpbmcgIHsgZmlsbDpyZ2IoMjI0LDIxNCwgIDApOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuV0FJVElORyAgeyBmaWxsOnJnYigyNTUsMjE0LCA0OCk7IGZpbGwtb3BhY2l0eTowLjY7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jcHUgICAgICB7IGZpbGw6cmdiKDE5MiwxOTIsMTkyKTsgZmlsbC1vcGFjaXR5OjAuMjsgc3Ryb2tlLXdpZHRoOjAuNTsgc3Ryb2tlOnJnYigxMjgsMTI4LDEyOCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnBzdGF0ZSAgIHsgZmlsbDpyZ2IoMTI4LDEyOCwxMjgpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOwpAQCAtMjE3LDYgKzIxNywxOCBAQAogCQl9CiAJCWZjbG9zZShmaWxlKTsKIAl9CisKKwkvKiBDUFUgdHlwZSAqLworCWZpbGUgPSBmb3BlbigiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIiwgInIiKTsKKwlpZiAoZmlsZSkgeworCQl3aGlsZSAoZmdldHMoYnVmLCAyNTUsIGZpbGUpKSB7CisJCQl1bnNpZ25lZCBpbnQgZnJlcTsKKwkJCWZyZXEgPSBzdHJ0b3VsbChidWYsIE5VTEwsIDEwKTsKKwkJCWlmIChmcmVxID4gbWF4X2ZyZXEpCisJCQkJbWF4X2ZyZXEgPSBmcmVxOworCQl9CisJCWZjbG9zZShmaWxlKTsKKwl9CiAJcmV0dXJuIGNwdV9tOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggZmQzZDljOC4uMjI2ZjQ0YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMzI0LDggKzMyNCw3IEBACiB7CiAJcmV0dXJuIGVsZl9zeW1fX3R5cGUoc3ltKSA9PSBTVFRfRlVOQyAmJgogCSAgICAgICBzeW0tPnN0X25hbWUgIT0gMCAmJgotCSAgICAgICBzeW0tPnN0X3NobmR4ICE9IFNITl9VTkRFRiAmJgotCSAgICAgICBzeW0tPnN0X3NpemUgIT0gMDsKKwkgICAgICAgc3ltLT5zdF9zaG5keCAhPSBTSE5fVU5ERUY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVsZl9zeW1fX2lzX2xhYmVsKGNvbnN0IEdFbGZfU3ltICpzeW0pCkBAIC00MTQsNyArNDEzLDcgQEAKIAlpZiAoZmQgPCAwKQogCQlnb3RvIG91dDsKIAotCWVsZiA9IGVsZl9iZWdpbihmZCwgRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKKwllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpCiAJCWdvdG8gb3V0X2Nsb3NlOwogCkBAIC01MzQsNyArNTMzLDcgQEAKIAlFbGYgKmVsZjsKIAlpbnQgbnIgPSAwLCBrZXJuZWwgPSAhc3RyY21wKCJba2VybmVsXSIsIHNlbGYtPm5hbWUpOwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewogCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKQEAgLTY3Niw3ICs2NzUsNyBAQAogCWlmIChmZCA8IDApCiAJCWdvdG8gb3V0OwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewogCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKQEAgLTgzMyw3ICs4MzIsNyBAQAogCXN0cnVjdCBtb2RfZHNvICptb2RzID0gbW9kX2Rzb19fbmV3X2RzbygibW9kdWxlcyIpOwogCXN0cnVjdCBtb2R1bGUgKnBvczsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKLQlpbnQgZXJyOworCWludCBlcnIsIGNvdW50ID0gMDsKIAogCWVyciA9IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhtb2RzKTsKIApAQCAtODUyLDE0ICs4NTEsMTYgQEAKIAkJCWJyZWFrOwogCiAJCW5leHQgPSByYl9uZXh0KCZwb3MtPnJiX25vZGUpOworCQljb3VudCArPSBlcnI7CiAJfQogCiAJaWYgKGVyciA8IDApIHsKIAkJbW9kX2Rzb19fZGVsZXRlX21vZHVsZXMobW9kcyk7CiAJCW1vZF9kc29fX2RlbGV0ZV9zZWxmKG1vZHMpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiBlcnI7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHNvX19maWxsX3N5bWJvbF9ob2xlcyhzdHJ1Y3QgZHNvICpzZWxmKQpAQCAtOTEzLDggKzkxNCwxNSBAQAogCiAJaWYgKHZtbGludXgpIHsKIAkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgdm1saW51eCwgZmlsdGVyLCB2KTsKLQkJaWYgKGVyciA+IDAgJiYgdXNlX21vZHVsZXMpCi0JCQllcnIgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOworCQlpZiAoZXJyID4gMCAmJiB1c2VfbW9kdWxlcykgeworCQkJaW50IHN5bXMgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOworCisJCQlpZiAoc3ltcyA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImRzb19fbG9hZF9tb2R1bGVzIGZhaWxlZCFcbiIpOworCQkJCXJldHVybiBzeW1zOworCQkJfQorCQkJZXJyICs9IHN5bXM7CisJCX0KIAl9CiAKIAlpZiAoZXJyIDw9IDApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNmU4NDkwNy4uODI5ZGE5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMjcsNiArMjcsMTYgQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBsaWJlbGYgMC44LnggYW5kIGVhcmxpZXIgZG8gbm90IHN1cHBvcnQgRUxGX0NfUkVBRF9NTUFQOworICogZm9yIG5ld2VyIHZlcnNpb25zIHdlIGNhbiB1c2UgbW1hcCB0byByZWR1Y2UgbWVtb3J5IHVzYWdlOgorICovCisjaWZkZWYgTElCRUxGX05PX01NQVAKKyMgZGVmaW5lIFBFUkZfRUxGX0NfUkVBRF9NTUFQIEVMRl9DX1JFQUQKKyNlbHNlCisjIGRlZmluZSBQRVJGX0VMRl9DX1JFQURfTU1BUCBFTEZfQ19SRUFEX01NQVAKKyNlbmRpZgorCiAjaWZuZGVmIERNR0xfUEFSQU1TCiAjZGVmaW5lIERNR0xfUEFSQU1TICAgICAgKDEgPDwgMCkgICAgICAgLyogSW5jbHVkZSBmdW5jdGlvbiBhcmdzICovCiAjZGVmaW5lIERNR0xfQU5TSSAgICAgICAgKDEgPDwgMSkgICAgICAgLyogSW5jbHVkZSBjb25zdCwgdm9sYXRpbGUsIGV0YyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCBmNmE4NDM3Li41NWM5NjU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtNjE4LDcgKzYxOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdGVzdF90eXBlX3Rva2VuKGVudW0gZXZlbnRfdHlwZSB0eXBlLCBjaGFyICp0b2tlbiwKLQkJICAgIGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKmV4cGVjdF90b2spCisJCSAgICBlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpleHBlY3RfdG9rKQogewogCWlmICh0eXBlICE9IGV4cGVjdCkgewogCQlkaWUoIkVycm9yOiBleHBlY3RlZCB0eXBlICVkIGJ1dCByZWFkICVkIiwKQEAgLTY1MCw3ICs2NTAsNyBAQAogCXJldHVybiBfX3JlYWRfZXhwZWN0X3R5cGUoZXhwZWN0LCB0b2ssIDEpOwogfQogCi1zdGF0aWMgaW50IF9fcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIsIGludCBuZXdsaW5lX29rKQorc3RhdGljIGludCBfX3JlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyLCBpbnQgbmV3bGluZV9vaykKIHsKIAllbnVtIGV2ZW50X3R5cGUgdHlwZTsKIAljaGFyICp0b2tlbjsKQEAgLTY2OCwxMiArNjY4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIpCitzdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyKQogewogCXJldHVybiBfX3JlYWRfZXhwZWN0ZWQoZXhwZWN0LCBzdHIsIDEpOwogfQogCi1zdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWRfaXRlbShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIpCitzdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWRfaXRlbShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJcmV0dXJuIF9fcmVhZF9leHBlY3RlZChleHBlY3QsIHN0ciwgMCk7CiB9CkBAIC0xOTY4LDEwICsxOTY4LDExIEBACiAJeyAiTkVUX1RYX1NPRlRJUlEiLCAyIH0sCiAJeyAiTkVUX1JYX1NPRlRJUlEiLCAzIH0sCiAJeyAiQkxPQ0tfU09GVElSUSIsIDQgfSwKLQl7ICJUQVNLTEVUX1NPRlRJUlEiLCA1IH0sCi0JeyAiU0NIRURfU09GVElSUSIsIDYgfSwKLQl7ICJIUlRJTUVSX1NPRlRJUlEiLCA3IH0sCi0JeyAiUkNVX1NPRlRJUlEiLCA4IH0sCisJeyAiQkxPQ0tfSU9QT0xMX1NPRlRJUlEiLCA1IH0sCisJeyAiVEFTS0xFVF9TT0ZUSVJRIiwgNiB9LAorCXsgIlNDSEVEX1NPRlRJUlEiLCA3IH0sCisJeyAiSFJUSU1FUl9TT0ZUSVJRIiwgOCB9LAorCXsgIlJDVV9TT0ZUSVJRIiwgOSB9LAogCiAJeyAiSFJUSU1FUl9OT1JFU1RBUlQiLCAwIH0sCiAJeyAiSFJUSU1FUl9SRVNUQVJUIiwgMSB9LApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMDM0YTc5OC4uNzQ5NWNlMyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC04NTAsNiArODUwLDE5IEBACiAKIH0KIAorc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCQlwdGVfdCBwdGUpCit7CisJc3RydWN0IGt2bSAqa3ZtID0gbW11X25vdGlmaWVyX3RvX2t2bShtbik7CisKKwlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOworCWt2bS0+bW11X25vdGlmaWVyX3NlcSsrOworCWt2bV9zZXRfc3B0ZV9odmEoa3ZtLCBhZGRyZXNzLCBwdGUpOworCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKK30KKwogc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAogCQkJCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCkBAIC05MjksNiArOTQyLDcgQEAKIAkuaW52YWxpZGF0ZV9yYW5nZV9zdGFydAk9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKIAkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLAogCS5jbGVhcl9mbHVzaF95b3VuZwk9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsCisJLmNoYW5nZV9wdGUJCT0ga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlLAogCS5yZWxlYXNlCQk9IGt2bV9tbXVfbm90aWZpZXJfcmVsZWFzZSwKIH07CiAjZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAmJiBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUiAqLwpAQCAtMTcxMyw3ICsxNzI3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBrdm1fdmNwdV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGt2bV92Y3B1X3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBrdm1fdmNwdV9mYXVsdCwKIH07CiAKQEAgLTIzMTcsNyArMjMzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZtX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZtX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBrdm1fdm1fZmF1bHQsCiB9OwogCkBAIC0yNjI1LDcgKzI2MzksNyBAQAogCiBERUZJTkVfU0lNUExFX0FUVFJJQlVURSh2Y3B1X3N0YXRfZm9wcywgdmNwdV9zdGF0X2dldCwgTlVMTCwgIiVsbHVcbiIpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdF9mb3BzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdF9mb3BzW10gPSB7CiAJW0tWTV9TVEFUX1ZDUFVdID0gJnZjcHVfc3RhdF9mb3BzLAogCVtLVk1fU1RBVF9WTV0gICA9ICZ2bV9zdGF0X2ZvcHMsCiB9OwpAQCAtMjcwMyw4ICsyNzE3LDYgQEAKIAlpbnQgcjsKIAlpbnQgY3B1OwogCi0Ja3ZtX2luaXRfZGVidWcoKTsKLQogCXIgPSBrdm1fYXJjaF9pbml0KG9wYXF1ZSk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZhaWw7CkBAIC0yNzcxLDYgKzI3ODMsOCBAQAogCWt2bV9wcmVlbXB0X29wcy5zY2hlZF9pbiA9IGt2bV9zY2hlZF9pbjsKIAlrdm1fcHJlZW1wdF9vcHMuc2NoZWRfb3V0ID0ga3ZtX3NjaGVkX291dDsKIAorCWt2bV9pbml0X2RlYnVnKCk7CisKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWU6CkBAIC0yNzkzLDcgKzI4MDcsNiBAQAogb3V0OgogCWt2bV9hcmNoX2V4aXQoKTsKIG91dF9mYWlsOgotCWt2bV9leGl0X2RlYnVnKCk7CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5pdCk7CkBAIC0yODAxLDYgKzI4MTQsNyBAQAogdm9pZCBrdm1fZXhpdCh2b2lkKQogewogCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworCWt2bV9leGl0X2RlYnVnKCk7CiAJbWlzY19kZXJlZ2lzdGVyKCZrdm1fZGV2KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koa3ZtX3ZjcHVfY2FjaGUpOwogCXN5c2Rldl91bnJlZ2lzdGVyKCZrdm1fc3lzZGV2KTsKQEAgLTI4MTAsNyArMjgyNCw2IEBACiAJb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZSwgTlVMTCwgMSk7CiAJa3ZtX2FyY2hfaGFyZHdhcmVfdW5zZXR1cCgpOwogCWt2bV9hcmNoX2V4aXQoKTsKLQlrdm1fZXhpdF9kZWJ1ZygpOwogCWZyZWVfY3B1bWFza192YXIoY3B1c19oYXJkd2FyZV9lbmFibGVkKTsKIAlfX2ZyZWVfcGFnZShiYWRfcGFnZSk7CiB9Cg==